From 12484b561a34e538e9a1f7491b2a9e0d0c00f098 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 7 Nov 2014 12:48:31 +1300 Subject: [PATCH 0001/1311] Initial (very unedited) commit for I-TASSER 4.0 --- .../easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb new file mode 100644 index 0000000000..41ca90e85b --- /dev/null +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -0,0 +1,29 @@ +easyblock = "PackedBinary" + +name = "I-TASSER" +version = '4.0' + +homepage = 'http://zhanglab.ccmb.med.umich.edu/I-TASSER/' +description = """I-TASSER is a set of pre-compiled binaries and scripts for protein structure and function +modelling and comparison.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['%%(namelower)s_%s_%s.tbz' % (version.split('-')[0], '-'.join(version.split('-')[1:]))] + +dependencies = [] + +sanity_check_paths = { + 'files': ['orca_%s%s' % (x,y) for x in ['anoint', 'casscf', 'cis', 'cleanup', 'cpscf', + 'eprnmr', 'gtoint', 'mdci', 'mp2', 'mrci', 'pc', + 'rocis', 'scf', 'scfgrad', 'soc'] + for y in ["", "_mpi"]] + \ + ['orca_%s' % x for x in ['2mkl', 'asa', 'chelpg', 'ciprep', 'eca', 'ecplib', + 'euler', 'fci', 'fitpes', 'gstep', 'loc', 'mapspc', + 'md', 'mergefrag', 'ndoint', 'numfreq', 'plot', + 'pltvib', 'pop', 'rel', 'vib', 'vpot']] + \ + ['orca', 'otool_cosmo'], + 'dirs': [], +} + +moduleclass = 'chem' -- GitLab From 95e649835e35b069c7068b4cc38abb90a5034ec8 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 1 Dec 2014 14:40:01 +1300 Subject: [PATCH 0002/1311] New Easyconfigs for I-TASSER 4.0 and 4.2 --- .../easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 25 ++++++++--------- .../easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 28 +++++++++++++++++++ 2 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 41ca90e85b..23cb1b8f0c 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -9,21 +9,20 @@ modelling and comparison.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -sources = ['%%(namelower)s_%s_%s.tbz' % (version.split('-')[0], '-'.join(version.split('-')[1:]))] +# Can't download from the web site as the file is behind a rego wall. +# The URL is, nevertheless, included here for reference. +#source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] +sources = ['%(name)s%(version)s.tar.bz2'] +patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [] +dependencies = [('BLAST', '2.2.29', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] + +postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] sanity_check_paths = { - 'files': ['orca_%s%s' % (x,y) for x in ['anoint', 'casscf', 'cis', 'cleanup', 'cpscf', - 'eprnmr', 'gtoint', 'mdci', 'mp2', 'mrci', 'pc', - 'rocis', 'scf', 'scfgrad', 'soc'] - for y in ["", "_mpi"]] + \ - ['orca_%s' % x for x in ['2mkl', 'asa', 'chelpg', 'ciprep', 'eca', 'ecplib', - 'euler', 'fci', 'fitpes', 'gstep', 'loc', 'mapspc', - 'md', 'mergefrag', 'ndoint', 'numfreq', 'plot', - 'pltvib', 'pop', 'rel', 'vib', 'vpot']] + \ - ['orca', 'otool_cosmo'], - 'dirs': [], + 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], + 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'] } -moduleclass = 'chem' +moduleclass = 'bio' +modextravars = { 'IMINTASSERDB' : '/share/db/I-TASSER/%(version)s' } diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb new file mode 100644 index 0000000000..f3da26c72c --- /dev/null +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -0,0 +1,28 @@ +easyblock = "PackedBinary" + +name = "I-TASSER" +version = '4.2' + +homepage = 'http://zhanglab.ccmb.med.umich.edu/I-TASSER/' +description = """I-TASSER is a set of pre-compiled binaries and scripts for protein structure and function +modelling and comparison.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# Can't download from the web site as the file is behind a rego wall. +# The URL is, nevertheless, included here for reference. +#source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] +sources = ['%(name)s%(version)s.tar.bz2'] +patches = ['%(name)s-%(version)s-local-mods.patch'] + +dependencies = [('BLAST', '2.2.29', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] + +postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] + +sanity_check_paths = { + 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], + 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'] +} + +moduleclass = 'bio' +modextravars = { 'IMINTASSERDB' : '/share/db/I-TASSER/%(version)s' } -- GitLab From 604f9b49733fd4f4a45646a3eb2c3eaaf4b2b87e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 18 Mar 2015 10:11:12 +1300 Subject: [PATCH 0003/1311] Downgraded BLAST from 2.2.29 to 2.2.26 --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 23cb1b8f0c..23b0318dd6 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.29', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index f3da26c72c..519e1f06e3 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.29', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] -- GitLab From 7b60524366b2aca23116214ba45d497129d50aa2 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 18 Mar 2015 10:16:43 +1300 Subject: [PATCH 0004/1311] Removed BLAST toolchain specification --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 23b0318dd6..f9613f6727 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.26', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26'), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 519e1f06e3..80f62bd20b 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.26', '', ('ictce', '5.4.0')), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26'), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] -- GitLab From 88c902c61c93abfa97208bff78124d0d12ca000f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 18 Mar 2015 11:34:09 +1300 Subject: [PATCH 0005/1311] Added minor BLAST revision number --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index f9613f6727..1434110104 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.26'), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 80f62bd20b..228054aadf 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(name)s%(version)s.tar.bz2'] patches = ['%(name)s-%(version)s-local-mods.patch'] -dependencies = [('BLAST', '2.2.26'), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] -- GitLab From bac2fa921a4790787d2804967276f43c23af7495 Mon Sep 17 00:00:00 2001 From: pescobar Date: Thu, 25 Jun 2015 17:44:36 +0200 Subject: [PATCH 0006/1311] NLopt easyconfig --- .../n/NLopt/NLopt-2.4.2-goolf-1.4.10.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-goolf-1.4.10.eb diff --git a/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-goolf-1.4.10.eb b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-goolf-1.4.10.eb new file mode 100644 index 0000000000..abf5bbc277 --- /dev/null +++ b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-goolf-1.4.10.eb @@ -0,0 +1,26 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel + +easyblock = 'ConfigureMake' + +name = 'NLopt' +version = '2.4.2' + +homepage = 'http://ab-initio.mit.edu/wiki/index.php/NLopt' +description = """ NLopt is a free/open-source library for nonlinear optimization, + providing a common interface for a number of different free optimization routines + available online as well as original implementations of various other algorithms. """ + +toolchain = {'name': 'goolf', 'version': '1.4.10'} + +source_urls = ['http://ab-initio.mit.edu/nlopt/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ["lib/libnlopt.a", "include/nlopt.h"], + 'dirs': [""], +} + +moduleclass = 'numlib' -- GitLab From 1437dcce851173ae1c8ccdfe00f17e31ead4c50b Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 27 Oct 2015 09:45:39 +1300 Subject: [PATCH 0007/1311] EasyConfig for installing Molcas from precompiled binaries. Note that the BinariesTarball Easyblock must be upgraded before testing this EasyConfig. --- .../Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb diff --git a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb new file mode 100644 index 0000000000..dc29993f79 --- /dev/null +++ b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb @@ -0,0 +1,27 @@ +easyblock = 'BinariesTarball' + +name = 'Molcas' +version = '8.0-15.06.18' +versionsuffix = '_CentOS_6.6_x86_64' + +homepage = 'http://www.molcas.org' +description = """Molcas is an ab initio quantum chemistry software package +developed by scientists to be used by scientists. The basic philosophy is is to +be able to treat general electronic structures for molecules consisting of +atoms from most of the periodic table. As such, the primary focus of the +package is on multiconfigurational methods with applications typically +connected to the treatment of highly degenerate states.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://www.kvant.kemi.uu.se/molcas/'] +sources = ['%(namelower)s-%(version)s%(versionsuffix)s.tgz'] + +files_to_copy = [('sbin/molcas.driver', 'molcas')] + +sanity_check_paths = { + 'files': ['bin/molcas'], + 'dirs': ['bin'], +} + +moduleclass = 'chem' -- GitLab From 0cfd5555d9ff67108597e58dc909ffb83302f951 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 27 Oct 2015 15:27:03 +1300 Subject: [PATCH 0008/1311] Changes to the Molcas easyconfig to reflect that the contents of the tarball must be present with the installation, not just a copy of molcas.driver --- .../Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb index dc29993f79..2a6849dfa3 100644 --- a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb +++ b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb @@ -1,4 +1,4 @@ -easyblock = 'BinariesTarball' +easyblock = 'PackedBinary' name = 'Molcas' version = '8.0-15.06.18' @@ -16,8 +16,17 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://www.kvant.kemi.uu.se/molcas/'] sources = ['%(namelower)s-%(version)s%(versionsuffix)s.tgz'] +unpack_options = "--transform='s,^%(namelower)s-%(version)s%(versionsuffix)s,%(namelower)s_files,'" -files_to_copy = [('sbin/molcas.driver', 'molcas')] +buildininstalldir = True +skipsteps = ['install'] + +postinstallcmds = [ + 'mkdir -p %(installdir)s/bin', + 'cp %(installdir)s/%(namelower)s_files/sbin/molcas.driver %(installdir)s/bin/molcas', +] + +#files_to_copy = [('sbin/molcas.driver', 'molcas')] sanity_check_paths = { 'files': ['bin/molcas'], @@ -25,3 +34,4 @@ sanity_check_paths = { } moduleclass = 'chem' +modextravars = {'MOLCAS': '%(installdir)s/%(namelower)s_files'} -- GitLab From 721d754e6506b788be520a2e3f7def6527f2594e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 27 Oct 2015 17:02:15 +1300 Subject: [PATCH 0009/1311] Remove unnecessary comment --- .../m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb index 2a6849dfa3..213b10dd3a 100644 --- a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb +++ b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb @@ -26,8 +26,6 @@ postinstallcmds = [ 'cp %(installdir)s/%(namelower)s_files/sbin/molcas.driver %(installdir)s/bin/molcas', ] -#files_to_copy = [('sbin/molcas.driver', 'molcas')] - sanity_check_paths = { 'files': ['bin/molcas'], 'dirs': ['bin'], -- GitLab From 35b1c9a76a787ccf9bf8b51e5c7ba23e2f18e2ee Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 9 Nov 2015 11:31:44 +0100 Subject: [PATCH 0010/1311] libmatheval 1.1.11 with intel/2015b --- .../b/byacc/byacc-20150711-intel-2015b.eb | 22 +++++++++++++ .../g/guile/guile-1.8.8-intel-2015b.eb | 31 +++++++++++++++++ .../l/libffi/libffi-3.0.13-intel-2015b.eb | 25 ++++++++++++++ .../libmatheval-1.1.11-intel-2015b.eb | 33 +++++++++++++++++++ .../libunistring-0.9.3-intel-2015b.eb | 26 +++++++++++++++ .../pkg-config-0.27.1-intel-2015b.eb | 27 +++++++++++++++ 6 files changed, 164 insertions(+) create mode 100644 easybuild/easyconfigs/b/byacc/byacc-20150711-intel-2015b.eb create mode 100644 easybuild/easyconfigs/g/guile/guile-1.8.8-intel-2015b.eb create mode 100644 easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb create mode 100644 easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb create mode 100644 easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb diff --git a/easybuild/easyconfigs/b/byacc/byacc-20150711-intel-2015b.eb b/easybuild/easyconfigs/b/byacc/byacc-20150711-intel-2015b.eb new file mode 100644 index 0000000000..1578ff69e4 --- /dev/null +++ b/easybuild/easyconfigs/b/byacc/byacc-20150711-intel-2015b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'byacc' +version = '20150711' + +homepage = 'http://invisible-island.net/byacc/byacc.html' +description = """Berkeley Yacc (byacc) is generally conceded to be the best yacc variant available. + In contrast to bison, it is written to avoid dependencies upon a particular compiler.""" + +toolchain = {'name': 'intel', 'version': '2015b'} + +sources = [SOURCELOWER_TGZ] +source_urls = ['ftp://invisible-island.net/byacc'] + +checksums = ['2700401030583c4e9169ac7ea7d08de8'] + +sanity_check_paths = { + 'files': ["bin/yacc"], + 'dirs': [] +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/g/guile/guile-1.8.8-intel-2015b.eb b/easybuild/easyconfigs/g/guile/guile-1.8.8-intel-2015b.eb new file mode 100644 index 0000000000..766148f244 --- /dev/null +++ b/easybuild/easyconfigs/g/guile/guile-1.8.8-intel-2015b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'guile' +version = '1.8.8' + +homepage = 'http://www.gnu.org/software/guile' +description = """Guile is the GNU Ubiquitous Intelligent Language for Extensions, + the official extension language for the GNU operating system.""" + +toolchain = {'name': 'intel', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libtool', '2.4.6', '', ('GNU', '4.9.3-2.25')), + ('GMP', '6.0.0a'), + ('libunistring', '0.9.3'), + ('pkg-config', '0.27.1'), + ('libffi', '3.0.13'), + ('libreadline', '6.3'), +] + +configopts = " --enable-error-on-warning=no" + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["guile", 'guile-config', 'guile-snarf', 'guile-tools']] + ["lib/libguile.a", "include/libguile.h"], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb new file mode 100644 index 0000000000..535d967631 --- /dev/null +++ b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'libffi' +version = '3.0.13' + +homepage = 'http://sourceware.org/libffi/' +description = """The libffi library provides a portable, high level programming interface to various calling +conventions. This allows a programmer to call any function specified by a call interface description at run-time.""" + +toolchain = {'name': 'intel', 'version': '2015b'} + +source_urls = [ + 'ftp://sourceware.org/pub/libffi/', + 'http://www.mirrorservice.org/sites/sourceware.org/pub/libffi/', +] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['libffi-%(version)s_include-xmmintrin.patch'] + +sanity_check_paths = { + 'files': ['lib/libffi.%s' % SHLIB_EXT, 'lib/libffi.a'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb new file mode 100644 index 0000000000..5c07ab422c --- /dev/null +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libmatheval' +version = '1.1.11' + +homepage = 'http://www.gnu.org/software/libmatheval/' +description = """GNU libmatheval is a library (callable from C and Fortran) to parse + and evaluate symbolic expressions input as text.""" + +toolchain = {'name': 'intel', 'version': '2015b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('flex', '2.5.39'), + ('Bison', '3.0.4'), + ('byacc', '20150711'), + ('guile', '1.8.8'), +] + +configopts = '--with-pic ' + +# fix for guile-config being broken because shebang line contains full path to bin/guile +configopts += 'GUILE_CONFIG="$EBROOTGUILE/bin/guile -e main -s $EBROOTGUILE/bin/guile-config"' + +sanity_check_paths = { + 'files': ['lib/libmatheval.a', 'include/matheval.h'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb new file mode 100644 index 0000000000..0555900e19 --- /dev/null +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libunistring' +version = '0.9.3' + +homepage = 'http://www.gnu.org/software/libunistring/' +description = """This library provides functions for manipulating Unicode strings and for manipulating C strings + according to the Unicode standard.""" + +toolchain = {'name': 'intel', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +patches = ['libunistring_icc_builtin_nan-inf.patch'] + +parallel = 1 + +sanity_check_paths = { + 'files' : ['lib/libunistring.a', 'lib/libunistring.so'] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs' : ['include/unistring'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb new file mode 100644 index 0000000000..f271d1a673 --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.27.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +# don't use PAX, it might break. +tar_config_opts = True + +toolchain = {'name': 'intel', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://pkgconfig.freedesktop.org/releases/'] + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 3c206f28aadea26acb01280e4f526ef95d8e8e0e Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 9 Nov 2015 15:48:06 +0100 Subject: [PATCH 0011/1311] Plumed 2.2 with intel/2015b --- .../p/PLUMED/PLUMED-2.2.0-intel-2015b.eb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-intel-2015b.eb diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-intel-2015b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-intel-2015b.eb new file mode 100644 index 0000000000..62ef96b466 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-intel-2015b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.2.0' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'intel', 'version': '2015b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '1.16'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.so', 'lib/libplumed.so'], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.so', + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From b04b9aa721e202e6944765e3e25be3ec656a40ad Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 9 Nov 2015 16:59:29 +0100 Subject: [PATCH 0012/1311] Added DL_POLY with plumed 2.2 --- ...DL_POLY_Classic-1.9-intel-2015b-plumed2.eb | 35 + .../d/DL_POLY_Classic/plumed-2.2.patch | 93945 ++++++++++++++++ 2 files changed, 93980 insertions(+) create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb new file mode 100644 index 0000000000..fa6e102be0 --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb @@ -0,0 +1,35 @@ +easyblock = 'MakeCp' + +name = 'DL_POLY_Classic' +version = '1.9' +versionsuffix = '-plumed2' + +homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' +description = """DL_POLY Classic is a freely available molecular dynamics program developed + from the DL_POLY_2 package. This version does not install the java gui.""" + +toolchain = {'name': 'intel', 'version': '2015b'} + +sources = ['dl_class_%(version)s.tar.gz'] +source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] + +builddependencies = [('PLUMED', '2.2')] + +patches = [('plumed-2.2.patch', 1)] + +prebuildopts = 'cd srcmod && ' +buildopts = 'gfortran' + +files_to_copy = [(["execute/cleanup", "execute/copy", "execute/DLPOLY.X", + "execute/gopoly", "execute/gui", "execute/select", + "execute/store", "execute/supa"], 'bin')] + +sanity_check_paths = { + 'files': ['bin/DLPOLY.X'], + 'dirs': [] +} + +# parallel build tends to break +parallel = 1 + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch new file mode 100644 index 0000000000..9e8fe4cde6 --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch @@ -0,0 +1,93945 @@ +# This patch allows to use Plumed 2.2 with DL_POLY. It is autogenerated with the help +# of Plumed and https://groups.google.com/forum/#!topic/plumed-users/cWaIDU5F6Bw +# Follow the instructions on that forum and you can generate the patch below +# The makefile is also adjust to use the EB set values for building +# Ward Poelmans +diff -urN dl_class_1.9.orig/Plumed.cmake dl_class_1.9/Plumed.cmake +--- dl_class_1.9.orig/Plumed.cmake 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.cmake 2015-11-09 14:26:25.657769545 +0100 +@@ -0,0 +1,3 @@ ++# PLUMED: runtime installation ++set(PLUMED_LOAD "$ENV{EBROOTPLUMED}/lib/plumed/obj/Plumed.o" -ldl ) ++set(PLUMED_DEPENDENCIES ) +diff -urN dl_class_1.9.orig/Plumed.h dl_class_1.9/Plumed.h +--- dl_class_1.9.orig/Plumed.h 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.h 2015-11-09 14:26:31.797805893 +0100 +@@ -0,0 +1,500 @@ ++/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ Copyright (c) 2011-2015 The plumed team ++ (see the PEOPLE file at the root of the distribution for a list of names) ++ ++ See http://www.plumed-code.org for more information. ++ ++ This file is part of plumed, version 2. ++ ++ plumed is free software: you can redistribute it and/or modify ++ it under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ plumed is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with plumed. If not, see . +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ ++#ifndef __PLUMED_wrapper_Plumed_h ++#define __PLUMED_wrapper_Plumed_h ++ ++/** ++\page ReferencePlumedH Reference for interfacing MD codes with PLUMED ++ ++ Plumed.h and Plumed.c contain the external plumed interface, which is used to ++ integrate it with MD engines. This interface is very general, and is expected ++ not to change across plumed versions. Plumed.c also implements a dummy version ++ of the interface, so as to allow a code to be fully linked even if the plumed ++ library is not available yet. These files could be directly included in the official ++ host MD distribution. In this manner, it will be sufficient to link the plumed ++ library at link time (on all systems) or directly at runtime (on system where ++ dynamic loading is enabled) to include plumed features. ++ ++ Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o ++ needs to be linked with the host MD code immediately (whereas the rest of plumed ++ could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we ++ link the Plumed.o file we would like not to need any C++ library linked. In this ++ manner, we do not need to know which C++ compiler will be used to compile plumed. ++ The C++ library is only linked to the "rest" of plumed, which actually use it. ++ Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ ++ (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, ++ which basically includes Plumed.c, is compiled with the C++ compiler). This will ++ allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into ++ Plumed.cpp), without the need of configuring a plain C compiler. ++ ++ Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed ++ is hidden inside a single object type, which is described in C by a structure ++ (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a ++ fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct ++ and class interfaces, but the first should be preferred. The reference interface ++ is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers ++ around it. ++ ++ In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. ++ In the C and FORTRAN interfaces, all the routines are named plumed_*, to ++ avoid potential name clashes. Notice that the entire plumed library ++ is implemented in C++, and it is hidden inside the PLMD namespace. ++ ++ Handlers to the plumed object can be converted among different representations, ++ to allow inter-operability among languages. In C, there are tools to convert ++ to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. ++ ++ These handlers only contain a pointer to the real structure, so that ++ when a plumed object is brought from one language to another, ++ it brings a reference to the same environment. ++ ++ Moreover, to simplify life in all cases where a single Plumed object is ++ required for the entire simulation (which covers most of the practical ++ applications with conventional MD codes) it is possible to take advantage ++ of a global interface, which is implicitly referring to a unique global instance. ++ The global object should still be initialized and finalized properly. ++ ++ The basic method to send a message to plumed is ++\verbatim ++ (C) plumed_cmd ++ (C++) PLMD::Plumed::cmd ++ (FORTRAN) PLUMED_F_CMD ++\endverbatim ++ ++ To initialize a plumed object, use: ++\verbatim ++ (C) plumed_create ++ (C++) (constructor of PLMD::Plumed) ++ (FORTRAN) PLUMED_F_CREATE ++\endverbatim ++ ++ To finalize it, use ++\verbatim ++ (C) plumed_finalize ++ (C++) (destructor of PLMD::Plumed) ++ (FORTRAN) PLUMED_F_FINALIZE ++\endverbatim ++ ++ To access to the global-object, use ++\verbatim ++ (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd ++ (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd ++ (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD ++\endverbatim ++ ++ To check if the global object has been initialized, use ++\verbatim ++ (C) plumed_ginitialized ++ (C++) PLMD::Plumed::ginitialized ++ (FORTRAN) PLUMED_F_GINITIALIZED ++\endverbatim ++ ++ To check if plumed library is available (this is useful for runtime linking), use ++\verbatim ++ (C) plumed_installed ++ (C++) PLMD::Plumed::installed ++ (FORTRAN) PLUMED_F_INSTALLED ++\endverbatim ++ ++ To convert handlers use ++\verbatim ++ (C) plumed_c2f (C to FORTRAN) ++ (C) plumed_f2c (FORTRAN to C) ++ (C++) Plumed(plumed) constructor (C to C++) ++ (C++) operator plumed() cast (C++ to C) ++ (C++) Plumed(char*) constructor (FORTRAN to C++) ++ (C++) toFortran(char*) (C++ to FORTRAN) ++\endverbatim ++ ++\verbatim ++ FORTRAN interface ++ SUBROUTINE PLUMED_F_INSTALLED(i) ++ INTEGER, INTENT(OUT) :: i ++ SUBROUTINE PLUMED_F_GINITIALIZED(i) ++ INTEGER, INTENT(OUT) :: i ++ SUBROUTINE PLUMED_F_GCREATE() ++ SUBROUTINE PLUMED_F_GCMD(key,val) ++ CHARACTER(LEN=*), INTENT(IN) :: key ++ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) ++ SUBROUTINE PLUMED_F_GFINALIZE() ++ SUBROUTINE PLUMED_F_GLOBAL(p) ++ CHARACTER(LEN=32), INTENT(OUT) :: p ++ SUBROUTINE PLUMED_F_CREATE(p) ++ CHARACTER(LEN=32), INTENT(OUT) :: p ++ SUBROUTINE PLUMED_F_CMD(p,key,val) ++ CHARACTER(LEN=32), INTENT(IN) :: p ++ CHARACTER(LEN=*), INTENT(IN) :: key ++ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) ++ SUBROUTINE PLUMED_F_FINALIZE(p) ++ CHARACTER(LEN=32), INTENT(IN) :: p ++\endverbatim ++ ++ The main routine is "cmd", which accepts two arguments: ++ key is a string containing the name of the command ++ val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed ++ is going to modify val in several cases (using a const_cast). ++ In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). ++ The set of possible keys is the real API of the plumed library, and will be expanded with time. ++ New commands will be added, but backward compatibility will be retained as long as possible. ++ ++ To pass plumed a callback function use the following syntax (not available in FORTRAN yet) ++\verbatim ++ plumed_function_holder ff; ++ ff.p=your_function; ++ plumed_cmd(plumed,"xxxx",&ff); ++\endverbatim ++ (this is passing the your_function() function to the "xxxx" command) ++*/ ++ ++#ifdef __cplusplus ++ extern "C" { ++#endif ++ ++/* Generic function pointer */ ++typedef void (*plumed_function_pointer)(void); ++ ++/** ++ \brief Holder for function pointer. ++ ++ To pass plumed a callback function use the following syntax: ++\verbatim ++ plumed_function_holder ff; ++ ff.p=your_function; ++ plumed_cmd(plumed,"xxxx",&ff); ++\endverbatim ++ (this is going to pass the your_function() function to the "xxxx" command) ++*/ ++ ++typedef struct { ++ plumed_function_pointer p; ++} plumed_function_holder; ++ ++/** ++ \brief Main plumed object ++ ++ This is an object containing a Plumed instance, which should be used in ++ the MD engine. It should first be initialized with plumed_create(), ++ then it communicates with the MD engine using plumed_cmd(). Finally, ++ before the termination, it should be deallocated with plumed_finalize(). ++ Its interface is very simple and general, and is expected ++ not to change across plumed versions. See \ref ReferencePlumedH. ++*/ ++typedef struct { ++/** ++ \private ++ \brief Void pointer holding the real PlumedMain structure ++*/ ++ void*p; ++} plumed; ++ ++/** \relates plumed ++ \brief Constructor ++ ++ \return The constructed plumed object ++*/ ++plumed plumed_create(void); ++ ++/** \relates plumed ++ \brief Tells p to execute a command ++ ++ \param p The plumed object on which command is acting ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), ++ but for some choice of key it can change the content ++*/ ++void plumed_cmd(plumed p,const char*key,const void*val); ++ ++/** \relates plumed ++ \brief Destructor ++ ++ \param p The plumed object to be deallocated ++*/ ++void plumed_finalize(plumed p); ++ ++/** \relates plumed ++ \brief Check if plumed is installed (for runtime binding) ++ ++ \return 1 if plumed is installed, to 0 otherwise ++*/ ++int plumed_installed(void); ++ ++/** \relates plumed ++ \brief Retrieves an handler to the global structure. ++*/ ++plumed plumed_global(void); ++ ++/** \relates plumed ++ \brief Check if the global interface has been initialized ++ ++ \return 1 if plumed has been initialized, 0 otherwise ++*/ ++int plumed_ginitialized(void); ++ ++/* global C interface, working on a global object */ ++ ++/** \relates plumed ++ \brief Constructor for the global interface. ++ ++ \note Equivalent to plumed_create(), but initialize a static global plumed object ++*/ ++void plumed_gcreate(void); ++ ++/** \relates plumed ++ \brief Tells to the global interface to execute a command. ++ ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), ++ but for some choice of key it can change the content ++ ++ \note Equivalent to plumed_cmd(), but skipping the plumed argument ++*/ ++void plumed_gcmd(const char* key,const void* val); ++ ++/** \relates plumed ++ \brief Destructor for the global interface. ++ ++ \note Equivalent to plumed_finalize(), but skipping the plumed argument ++*/ ++void plumed_gfinalize(void); ++ ++/* routines to convert char handler from/to plumed objects */ ++ ++/** \related plumed ++ \brief Converts a C handler to a FORTRAN handler ++ ++ \param p The C handler ++ \param c The FORTRAN handler (a char[32]) ++*/ ++void plumed_c2f(plumed p,char* c); ++ ++/** \related plumed ++ \brief Converts a FORTRAN handler to a C handler ++ \param c The FORTRAN handler (a char[32]) ++ \return The C handler ++*/ ++plumed plumed_f2c(const char* c); ++ ++#ifdef __cplusplus ++ } ++#endif ++ ++#ifdef __cplusplus ++ ++/* this is to include the NULL pointer */ ++#include ++ ++/* C++ interface is hidden in PLMD namespace (same as plumed library) */ ++namespace PLMD { ++ ++/** ++ C++ wrapper for \ref plumed. ++ ++ This class provides a C++ interface to PLUMED. ++*/ ++ ++class Plumed{ ++ plumed main; ++/** ++ keeps track if the object was created from scratch using ++ the defaults destructor (reference=false) or if it was imported ++ from C or FORTRAN (reference=true). In the latter case, the ++ plumed_finalize() method is not called when destructing the object, ++ since it is expected to be finalized in the C/FORTRAN code ++*/ ++ bool reference; ++public: ++/** ++ Check if plumed is installed (for runtime binding) ++ \return true if plumed is installed, false otherwise ++*/ ++ static bool installed(); ++/** ++ Check if global-plumed has been initialized ++ \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been ++ called), false otherwise. ++*/ ++ static bool ginitialized(); ++/** ++ Initialize global-plumed ++*/ ++ static void gcreate(); ++/** ++ Send a command to global-plumed ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like gcmd("A","B"), ++ but for some choice of key it can change the content ++*/ ++ static void gcmd(const char* key,const void* val); ++/** ++ Finalize global-plumed ++*/ ++ static void gfinalize(); ++/** ++ Returns the Plumed global object ++ \return The Plumed global object ++*/ ++ static Plumed global(); ++/** ++ Constructor ++*/ ++ Plumed(); ++/** ++ Clone a Plumed object from a FORTRAN char* handler ++ \param c The FORTRAN handler (a char[32]). ++ ++ \attention The Plumed object created in this manner ++ will not finalize the corresponding plumed structure. ++ It is expected that the FORTRAN code calls plumed_c_finalize for it ++*/ ++// to have maximum portability of this file I do not use the explicit keyword here ++// I thus add a suppress command for cppcheck ++// cppcheck-suppress noExplicitConstructor ++ Plumed(const char*c); ++/** ++ Clone a Plumed object from a C plumed structure ++ \param p The C plumed structure. ++ ++ \attention The Plumed object created in this manner ++ will not finalize the corresponding plumed structure. ++ It is expected that the C code calls plumed_finalize for it ++*/ ++// to have maximum portability of this file I do not use the explicit keyword here ++// I thus add a suppress command for cppcheck ++// cppcheck-suppress noExplicitConstructor ++ Plumed(plumed p); ++private: ++/** Copy constructor is disabled (private and unimplemented) ++ The problem here is that after copying it will not be clear who is ++ going to finalize the corresponding plumed structure. ++*/ ++ Plumed(const Plumed&); ++/** Assignment operator is disabled (private and unimplemented) ++ The problem here is that after copying it will not be clear who is ++ going to finalize the corresponding plumed structure. ++*/ ++ Plumed&operator=(const Plumed&); ++public: ++/** ++ Retrieve the C plumed structure for this object ++*/ ++ operator plumed()const; ++/** ++ Retrieve a FORTRAN handler for this object ++ \param c The FORTRAN handler (a char[32]). ++*/ ++ void toFortran(char*c)const; ++/** ++ Send a command to this plumed object ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), ++ but for some choice of key it can change the content ++*/ ++ void cmd(const char*key,const void*val=NULL); ++/** ++ Destructor ++ ++ Destructor is virtual so as to allow correct inheritance from Plumed object. ++ To avoid linking problems with g++, I specify "inline" also here (in principle ++ it should be enough to specify it down in the definition of the function, but ++ for some reason that I do not understand g++ does not inline it properly in that ++ case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the ++ way it is done here seems to work properly). ++*/ ++ inline virtual ~Plumed(); ++}; ++ ++/* All methods are inlined so as to avoid the compilation of an extra c++ file */ ++ ++inline ++bool Plumed::installed(){ ++ return plumed_installed(); ++} ++ ++inline ++Plumed::Plumed(): ++ main(plumed_create()), ++ reference(false) ++{} ++ ++inline ++Plumed::Plumed(const char*c): ++ main(plumed_f2c(c)), ++ reference(true) ++{} ++ ++inline ++Plumed::Plumed(plumed p): ++ main(p), ++ reference(true) ++{} ++ ++inline ++Plumed::operator plumed()const{ ++ return main; ++} ++ ++inline ++void Plumed::toFortran(char*c)const{ ++ plumed_c2f(main,c); ++} ++ ++inline ++void Plumed::cmd(const char*key,const void*val){ ++ plumed_cmd(main,key,val); ++} ++ ++inline ++Plumed::~Plumed(){ ++ if(!reference)plumed_finalize(main); ++} ++ ++inline ++bool Plumed::ginitialized(){ ++ return plumed_ginitialized(); ++} ++ ++inline ++void Plumed::gcreate(){ ++ plumed_gcreate(); ++} ++ ++inline ++void Plumed::gcmd(const char* key,const void* val){ ++ plumed_gcmd(key,val); ++} ++ ++inline ++void Plumed::gfinalize(){ ++ plumed_gfinalize(); ++} ++ ++inline ++Plumed Plumed::global(){ ++ return plumed_global(); ++} ++ ++} ++ ++#endif ++ ++ ++#endif +diff -urN dl_class_1.9.orig/Plumed.inc dl_class_1.9/Plumed.inc +--- dl_class_1.9.orig/Plumed.inc 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.inc 2015-11-09 14:26:16.827714651 +0100 +@@ -0,0 +1,3 @@ ++# PLUMED: runtime installation ++PLUMED_LOAD= "$(EBROOTPLUMED)/lib/plumed/obj/Plumed.o" -ldl ++PLUMED_DEPENDENCIES= +diff -urN dl_class_1.9.orig/srcmod/angles_module.f dl_class_1.9/srcmod/angles_module.f +--- dl_class_1.9.orig/srcmod/angles_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/angles_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,741 @@ ++ module angles_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining valence angle potentials ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c modified - p.-a.cazade oct 2007 : solvation etc. ++c modified - d. quigley 2010 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmang(:,:) ++ integer, allocatable :: listang(:,:) ++ integer, allocatable :: numang(:),keyang(:),lstang(:,:) ++ ++ save prmang,listang,numang,keyang,lstang ++ ++ contains ++ ++ subroutine alloc_ang_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining valence angle potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmang(mxtang,mxpang),stat=fail(1)) ++ allocate (numang(mxtmls),stat=fail(2)) ++ allocate (keyang(mxtang),stat=fail(3)) ++ allocate (lstang(mxtang,3),stat=fail(4)) ++ allocate (listang(mxangl,4),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1010) ++ enddo ++ ++ do i=1,mxtmls ++ numang(i)=0 ++ enddo ++ ++ end subroutine alloc_ang_arrays ++ ++ subroutine define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining bond angles ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,nangle,nsite,ntmp,i,iang,iang1 ++ integer idum,iatm1,iatm2,iatm3,isite1,isite2,isite3,ia,ja ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numang(itmols)=numang(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of bond angles', ++ x 10x,i10)")ntmp ++ write(nrite,"(/,/,1x,'bond angle details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'f-const',7x,'angle',/)") ++ endif ++ ++ iang1=numang(itmols) ++ do iang=1,iang1 ++ ++c read bond angle potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3).ne.0)then ++ ++ numang(itmols)=numang(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nangle=nangle+1 ++ ++ if(nangle.gt.mxtang)call error(idnode,50) ++ ++ if(keyword(1:4).eq.'harm')then ++ keyang(nangle)=1 ++ elseif(keyword(1:4).eq.'-hrm')then ++ keyang(nangle)=-1 ++ elseif(keyword(1:4).eq.'quar')then ++ keyang(nangle)=2 ++ elseif(keyword(1:4).eq.'-qur')then ++ keyang(nangle)=-2 ++ elseif(keyword(1:4).eq.'thrm')then ++ keyang(nangle)=3 ++ elseif(keyword(1:4).eq.'-thm')then ++ keyang(nangle)=-3 ++ elseif(keyword(1:4).eq.'shrm')then ++ keyang(nangle)=4 ++ elseif(keyword(1:4).eq.'-shm')then ++ keyang(nangle)=-4 ++ elseif(keyword(1:4).eq.'bvs1')then ++ keyang(nangle)=5 ++ elseif(keyword(1:4).eq.'-bv1')then ++ keyang(nangle)=-5 ++ elseif(keyword(1:4).eq.'bvs2')then ++ keyang(nangle)=6 ++ elseif(keyword(1:4).eq.'-bv2')then ++ keyang(nangle)=-6 ++ elseif(keyword(1:4).eq.'hcos')then ++ keyang(nangle)=7 ++ elseif(keyword(1:4).eq.'-hcs')then ++ keyang(nangle)=-7 ++ elseif(keyword(1:4).eq.'cos ')then ++ keyang(nangle)=8 ++ elseif(keyword(1:4).eq.'-cos')then ++ keyang(nangle)=-8 ++ elseif(keyword(1:4).eq.'mmsb')then ++ keyang(nangle)=9 ++ elseif(keyword(1:4).eq.'-msb')then ++ keyang(nangle)=-9 ++ elseif(keyword(1:4).eq.'stst') then ++ keyang(nangle)=10 ++ elseif(keyword(1:4).eq.'-sts') then ++ keyang(nangle)=-10 ++ elseif(keyword(1:4).eq.'stbe') then ++ keyang(nangle)=11 ++ elseif(keyword(1:4).eq.'-stb') then ++ keyang(nangle)=-11 ++ elseif(keyword(1:4).eq.'cmps') then ++ keyang(nangle)=12 ++ elseif(keyword(1:4).eq.'-cmp') then ++ keyang(nangle)=-12 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,440) ++ endif ++ ++ lstang(nangle,1)=iatm1 ++ lstang(nangle,2)=iatm2 ++ lstang(nangle,3)=iatm3 ++ prmang(nangle,1)=dblstr(record,lenrec,idum) ++ prmang(nangle,2)=dblstr(record,lenrec,idum) ++ prmang(nangle,3)=dblstr(record,lenrec,idum) ++ prmang(nangle,4)=dblstr(record,lenrec,idum) ++ prmang(nangle,5)=dblstr(record,lenrec,idum) ++ prmang(nangle,6)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,3i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstang(nangle,ia),ia=1,3), ++ x (prmang(nangle,ja),ja=1,mxpang) ++ ++c convert energies to internal units ++ ++ prmang(nangle,1)=prmang(nangle,1)*engunit ++ if(abs(keyang(nangle)).eq.2)then ++ prmang(nangle,3)=prmang(nangle,3)*engunit ++ prmang(nangle,4)=prmang(nangle,4)*engunit ++ elseif(abs(keyang(nangle)).eq.12)then ++ prmang(nangle,2)=prmang(nangle,2)*engunit ++ prmang(nangle,3)=prmang(nangle,3)*engunit ++ endif ++ ++c convert angles to radians ++ ++ if(abs(keyang(nangle)).eq.12)then ++ prmang(nangle,4)=prmang(nangle,4)*(pi/180.d0) ++ elseif(abs(keyang(nangle)).ne.10)then ++ prmang(nangle,2)=prmang(nangle,2)*(pi/180.d0) ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_angles ++ ++ subroutine angfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating bond angle energy and ++c force terms in molecular dynamics. ++c ++c replicated data - blocked version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992 ++c modified - t. forester feb 1993 ++c modified - t. forester nov 1994 : block data ++c modified - t. forester may 1995 : stress tensor ++c modified - p.-a.cazade oct 2007 : solvation etc. ++c modified - d. quigley nov 2010 : metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive,kdrive ++ integer idnode,mxnode,imcon,ntangl,fail1,fail2 ++ integer ii,iang1,iang2,i,ia,ib,ic,kk,keya ++ real(8) engang,virang,theta,fxc,fyc,fzc,rab,xab ++ real(8) yab,zab,rbc,xbc,ybc,zbc,sint,cost,pterm,vterm ++ real(8) gamma,gamsa,gamsc,rrbc,rrab,fxa,fya,fza ++ real(8) strs(6),strs_loc(6) ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) ++ if(fail1.ne.fail2)call error(idnode,1020) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntangl-mxnode+1)/mxnode.gt.msbad)call error(idnode,419) ++ ++c block indices ++ ++ iang1=(idnode*ntangl)/mxnode+1 ++ iang2=((idnode+1)*ntangl)/mxnode ++ ++c zero accumulators ++ ++ engang=0.d0 ++ virang=0.d0 ++ ang_fre=0.d0 ++ ang_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(2)=.true. ++ ang_sol(:)=0.d0 ++ if(lexcite)ang_exc(:)=0.d0 ++ ++ endif ++ ++c calculate atom separation vectors ++ ++ ii=0 ++ do i=iang1,iang2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listang(ii,2) ++ ib=listang(ii,3) ++ ic=listang(ii,4) ++ ++c components of first bond vector ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++c components of second bond vector ++ ++ xdbc(ii)=xxx(ic)-xxx(ib) ++ ydbc(ii)=yyy(ic)-yyy(ib) ++ zdbc(ii)=zzz(ic)-zzz(ib) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) ++ ++c loop over all specified angle potentials ++ ++ ii=0 ++ do i=iang1,iang2 ++ ++ ii=ii+1 ++ ++c define components of first bond vector ++ ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ rrab=1.d0/rab ++ ++ xab=xdab(ii)*rrab ++ yab=ydab(ii)*rrab ++ zab=zdab(ii)*rrab ++ ++c define components of second bond vector ++ ++ rbc=sqrt(xdbc(ii)**2+ydbc(ii)**2+zdbc(ii)**2) ++ rrbc=1.d0/rbc ++ ++ xbc=xdbc(ii)*rrbc ++ ybc=ydbc(ii)*rrbc ++ zbc=zdbc(ii)*rrbc ++ ++c index of potential function parameters ++ ++ kk=listang(ii,1) ++ ++c determine bond angle and calculate potential energy ++ ++ cost=(xab*xbc+yab*ybc+zab*zbc) ++ theta=acos(cost) ++ sint=max(1.d-8,sqrt(1.d0-cost**2)) ++ ++ keya=abs(keyang(kk)) ++ ++ if(keya.eq.1)then ++ ++c harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2 ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.2)then ++ ++c quartic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2+ ++ x 1.d0/3.d0*prmang(kk,3)*(theta-prmang(kk,2))**3+ ++ x 0.25d0*prmang(kk,4)*(theta-prmang(kk,2))**4 ++ gamma=(prmang(kk,1)*(theta-prmang(kk,2))+ ++ x prmang(kk,3)*(theta-prmang(kk,2))**2+ ++ x prmang(kk,4)*(theta-prmang(kk,2))**3)/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.3)then ++ ++c truncated harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* ++ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8) ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))* ++ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8)/sint ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,3)**8 ++ gamsa=(8.d0*pterm/prmang(kk,3)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmang(kk,3)**8)*rbc**7 ++ ++ elseif(keya.eq.4)then ++ ++c screened harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint ++ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) ++ gamsa=(pterm/prmang(kk,3)) ++ gamsc=(pterm/prmang(kk,4)) ++ ++ elseif(keya.eq.5)then ++ ++c screened vessal potential (type 1) ++ ++ pterm=(prmang(kk,1)/(8.d0*(prmang(kk,2)-pi)**2)* ++ x (((prmang(kk,2)-pi)**2-(theta-pi)**2)**2))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) ++ gamma=(prmang(kk,1)/(2.d0*(prmang(kk,2)-pi)**2)* ++ x ((prmang(kk,2)-pi)**2-(theta-pi)**2)*(theta-pi))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint ++ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) ++ gamsa=(pterm/prmang(kk,3)) ++ gamsc=(pterm/prmang(kk,4)) ++ ++ elseif(keya.eq.6)then ++ ++c truncated vessal potential (type 2) ++ ++ pterm=prmang(kk,1)*(theta**prmang(kk,3)*(theta-prmang(kk,2)) ++ x **2*(theta+prmang(kk,2)-2.d0*pi)**2-0.5d0*prmang(kk,3)*pi ++ x **(prmang(kk,3)-1.d0)*(theta-prmang(kk,2))**2*(pi-prmang(kk, ++ x 2))**3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8) ++ gamma=prmang(kk,1)*(theta**(prmang(kk,3)-1.d0)*(theta-prmang ++ x (kk,2))*(theta+prmang(kk,2)-2.d0*pi)*((prmang(kk,3)+4.d0)* ++ x theta**2-2.d0*pi*(prmang(kk,3)+2.d0)*theta+prmang(kk,3)* ++ x prmang(kk,2)*(2.d0*pi-prmang(kk,2)))-prmang(kk,3)*pi** ++ x (prmang(kk,3)-1.d0)*(theta-prmang(kk,2))*(pi-prmang(kk,2)) ++ x **3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8)/sint ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,4)**8 ++ gamsa=(8.d0*pterm/prmang(kk,4)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmang(kk,4)**8)*rbc**7 ++ ++ elseif(keya.eq.7)then ++ ++c harmonic cosine potential ++ ++ pterm=0.5d0*prmang(kk,1)*(cos(theta)-cos(prmang(kk,2)))**2 ++ gamma=-prmang(kk,1)*(cos(theta)-cos(prmang(kk,2))) ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.8)then ++ ++c ordinary cosine potential ++ ++ pterm=prmang(kk,1)*(1+cos(prmang(kk,3)*theta-prmang(kk,2))) ++ gamma=-prmang(kk,1)*prmang(kk,3)*sin(prmang(kk,3)*theta- ++ x prmang(kk,2))/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.9)then ++ ++c mm3 stretch-bend potential ++ ++ pterm=prmang(kk,1)*(theta-prmang(kk,2))* ++ x (rab-prmang(kk,3))*(rbc-prmang(kk,4)) ++ gamma=prmang(kk,1)*(rab-prmang(kk,3))*(rbc- ++ x prmang(kk,4))/sint ++ gamsa=-prmang(kk,1)*(theta-prmang(kk,2))*(rbc-prmang(kk,4)) ++ gamsc=-prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ elseif(keya.eq.10)then ++ ++c compass stretch-stretch potential ++ ++ pterm=prmang(kk,1)*(rab-prmang(kk,2))*(rbc-prmang(kk,3)) ++ gamma=0.d0 ++ gamsa=-prmang(kk,1)*(rbc-prmang(kk,3)) ++ gamsc=-prmang(kk,1)*(rab-prmang(kk,2)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ elseif(keya.eq.11)then ++ ++c compass stretch-bend potential ++ ++ pterm=prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) ++ gamma=prmang(kk,1)*(rab-prmang(kk,3))/sint ++ gamsa=-prmang(kk,1)*(theta-prmang(kk,2)) ++ gamsc=0.d0 ++ vterm=-gamsa*rab ++ ++ elseif(keya.eq.12)then ++ ++c combined compass angle potential with 3 coupling terms ++ ++ pterm=prmang(kk,1)*(rab-prmang(kk,5))*(rbc-prmang(kk,6))+ ++ x (theta-prmang(kk,4))*(prmang(kk,2)*(rab-prmang(kk,5))+ ++ x prmang(kk,3)*(rbc-prmang(kk,6))) ++ gamma=(prmang(kk,2)*(rab-prmang(kk,5))+ ++ x prmang(kk,3)*(rbc-prmang(kk,6)))/sint ++ gamsa=-prmang(kk,2)*(theta-prmang(kk,4))- ++ x prmang(kk,1)*(rbc-prmang(kk,6)) ++ gamsc=-prmang(kk,3)*(theta-prmang(kk,4))- ++ x prmang(kk,1)*(rab-prmang(kk,5)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ pterm=0.d0 ++ vterm=0.d0 ++ gamma=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listang(ii,2) ++ ib=listang(ii,3) ++ ic=listang(ii,4) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) ++ ++ if(lsolva)then ++ ang_exc(atmolt(ia))=ang_exc(atmolt(ia))+pterm ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ ang_fre=ang_fre-pterm ++ ang_vir=ang_vir-vterm ++ pterm=lambda1*pterm ++ vterm=lambda1*vterm ++ gamma=lambda1*gamma ++ gamsa=lambda1*gamsa ++ gamsc=lambda1*gamsc ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ ang_fre=ang_fre+pterm ++ ang_vir=ang_vir+vterm ++ pterm=lambda2*pterm ++ vterm=lambda2*vterm ++ gamma=lambda2*gamma ++ gamsa=lambda2*gamsa ++ gamsc=lambda2*gamsc ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c sum potential energy and virial ++ ++ engang=engang+pterm ++ virang=virang+vterm ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ ang_sol(atmolt(ia))=ang_sol(atmolt(ia))+pterm ++ endif ++ ++c calculate atomic forces ++ ++ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab ++ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab ++ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab ++ ++ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc ++ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc ++ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc ++ ++c sum atomic forces ++ ++ fxx(ia)=fxx(ia)+fxa ++ fyy(ia)=fyy(ia)+fya ++ fzz(ia)=fzz(ia)+fza ++ ++ fxx(ib)=fxx(ib)-fxa-fxc ++ fyy(ib)=fyy(ib)-fya-fyc ++ fzz(ib)=fzz(ib)-fza-fzc ++ ++ fxx(ic)=fxx(ic)+fxc ++ fyy(ic)=fyy(ic)+fyc ++ fzz(ic)=fzz(ic)+fzc ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc ++ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc ++ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc ++ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc ++ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+pterm ++ vir_loc=vir_loc+vterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fxa ++ fyy_loc(ia)=fyy_loc(ia)+fya ++ fzz_loc(ia)=fzz_loc(ia)+fza ++ ++ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc ++ fyy_loc(ib)=fyy_loc(ib)-fya-fyc ++ fzz_loc(ib)=fzz_loc(ib)-fza-fzc ++ ++ fxx_loc(ic)=fxx_loc(ic)+fxc ++ fyy_loc(ic)=fyy_loc(ic)+fyc ++ fzz_loc(ic)=fzz_loc(ic)+fzc ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc ++ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc ++ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc ++ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc ++ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,440) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c sum up contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engang ++ buffer(2)=virang ++ buffer(3)=ang_fre ++ buffer(4)=ang_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engang=buffer(1) ++ virang=buffer(2) ++ ang_fre=buffer(3) ++ ang_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(ang_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(ang_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdbc,ydbc,zdbc,stat=fail2) ++ ++ return ++ end subroutine angfrc ++ ++ end module angles_module +diff -urN dl_class_1.9.orig/srcmod/basic_comms.f dl_class_1.9/srcmod/basic_comms.f +--- dl_class_1.9.orig/srcmod/basic_comms.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/basic_comms.f 2015-11-09 14:52:08.086294333 +0100 +@@ -0,0 +1,389 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c communication harness initialisation ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_init MPI_init_ ++ ++ call MPI_init(ierr) ++ ++ return ++ end ++ ++c PLUMED ++ integer*8 function get_comms() ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining the communicator ++c this is used by plumed ++c ++c author - G. Tribello ++c ++c********************************************************************* ++ ++ get_comms=MPI_COMM_WORLD ++ end ++ ++ subroutine machine(idnode,mxnode) ++c PLUMED ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining charcteristics of ++c the computer on which the program is being run ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,mynode,numnodes ++ ++ idnode=mynode() ++ mxnode=numnodes() ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c routine to determine identity of processing node ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ ++ ++ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c calculate dimension of hypercube ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer i,n,ierr,mxnode ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) ++ n=1 ++ nodedim = -1 ++ do i=0,16 ++ ++ if(n.eq.mxnode)nodedim=i ++ n=2*n ++ ++ enddo ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c calculate number of nodes ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) ++ ++ return ++ end ++ ++ subroutine csend(tagmsg,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c Intel-like csend (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length,pe,idum ++ ++ integer ierr ++ real(8) buf(*) ++ ++CMPIU define MPI_send MPI_send_ ++ ++ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, ++ x MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine crecv(tagmsg,buf,length) ++ ++c********************************************************************* ++c ++c Intel-like crecv (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length ++ ++ integer ierr ++ integer status(MPI_STATUS_SIZE) ++ real(8) buf(*) ++ ++CMPIU define MPI_RECV MPI_RECV_ ++ ++ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, ++ x tagmsg,MPI_COMM_WORLD,status,ierr) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for MPI - hypercube assumed ++c double precision version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,ierror ++ real(8) aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global maximum subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_MAX,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dl_poly global status subroutine : gisum version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c MPI version - t. forester may 1995 ++c ++c*********************************************************************** ++ ++ ++ implicit none ++ ++ logical check ++ integer i,idum ++ ++ i = 0 ++ if(.not.check) i = 1 ++ ++ call gisum(i,1,idum) ++ ++ check = (i.eq.0) ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c barrier / synchronization routine ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ierr ++ ++ include "comms.inc" ++ ++CMPIU define MPI_BARRIER MPI_BARRIER_ ++ ++ call MPI_BARRIER(MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c exitcomms: exit from communication harness ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++CMPIU define MPI_FINALIZE MPI_FINALIZE_ ++ ++ call MPI_FINALIZE(ierr) ++ call exit(0) ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/basic_comms.f.preplumed dl_class_1.9/srcmod/basic_comms.f.preplumed +--- dl_class_1.9.orig/srcmod/basic_comms.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/basic_comms.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,373 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c communication harness initialisation ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_init MPI_init_ ++ ++ call MPI_init(ierr) ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining charcteristics of ++c the computer on which the program is being run ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,mynode,numnodes ++ ++ idnode=mynode() ++ mxnode=numnodes() ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c routine to determine identity of processing node ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ ++ ++ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c calculate dimension of hypercube ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer i,n,ierr,mxnode ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) ++ n=1 ++ nodedim = -1 ++ do i=0,16 ++ ++ if(n.eq.mxnode)nodedim=i ++ n=2*n ++ ++ enddo ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c calculate number of nodes ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) ++ ++ return ++ end ++ ++ subroutine csend(tagmsg,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c Intel-like csend (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length,pe,idum ++ ++ integer ierr ++ real(8) buf(*) ++ ++CMPIU define MPI_send MPI_send_ ++ ++ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, ++ x MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine crecv(tagmsg,buf,length) ++ ++c********************************************************************* ++c ++c Intel-like crecv (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length ++ ++ integer ierr ++ integer status(MPI_STATUS_SIZE) ++ real(8) buf(*) ++ ++CMPIU define MPI_RECV MPI_RECV_ ++ ++ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, ++ x tagmsg,MPI_COMM_WORLD,status,ierr) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for MPI - hypercube assumed ++c double precision version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,ierror ++ real(8) aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global maximum subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_MAX,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dl_poly global status subroutine : gisum version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c MPI version - t. forester may 1995 ++c ++c*********************************************************************** ++ ++ ++ implicit none ++ ++ logical check ++ integer i,idum ++ ++ i = 0 ++ if(.not.check) i = 1 ++ ++ call gisum(i,1,idum) ++ ++ check = (i.eq.0) ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c barrier / synchronization routine ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ierr ++ ++ include "comms.inc" ++ ++CMPIU define MPI_BARRIER MPI_BARRIER_ ++ ++ call MPI_BARRIER(MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c exitcomms: exit from communication harness ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++CMPIU define MPI_FINALIZE MPI_FINALIZE_ ++ ++ call MPI_FINALIZE(ierr) ++ call exit(0) ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/bonds_module.f dl_class_1.9/srcmod/bonds_module.f +--- dl_class_1.9.orig/srcmod/bonds_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/bonds_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,579 @@ ++ module bonds_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c adapted for metadynamics ++c - d. quigley 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmbnd(:,:) ++ integer, allocatable :: listbnd(:,:) ++ integer, allocatable :: numbonds(:),keybnd(:),lstbnd(:,:) ++ ++ save prmbnd,listbnd,numbonds,keybnd,lstbnd ++ ++ contains ++ ++ subroutine alloc_bnd_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmbnd(mxtbnd,mxpbnd),stat=fail(1)) ++ allocate (numbonds(mxtmls),stat=fail(2)) ++ allocate (keybnd(mxtbnd),stat=fail(3)) ++ allocate (lstbnd(mxtbnd,3),stat=fail(4)) ++ allocate (listbnd(mxbond,4),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++ do i=1,mxtmls ++ numbonds(i)=0 ++ enddo ++ ++ end subroutine alloc_bnd_arrays ++ ++ subroutine define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining bonds ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,nbonds,nsite,ntmp,ibond,ibond1 ++ integer iatm1,iatm2,isite1,isite2,idum,i,j ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numbonds(itmols)=numbonds(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of chemical bonds', ++ x 7x,i10)")ntmp ++ write(nrite,"(/,/,1x,'chemical bond details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',28x, ++ x 'parameters', /)") ++ endif ++ ++ ibond1=numbonds(itmols) ++ do ibond=1,ibond1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0)then ++ ++ numbonds(itmols)=numbonds(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(12x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nbonds=nbonds+1 ++ if(nbonds.gt.mxtbnd)call error(idnode,30) ++ ++ if(keyword(1:4).eq.'harm')then ++ keybnd(nbonds)=1 ++ elseif(keyword(1:4).eq.'-hrm')then ++ keybnd(nbonds)=-1 ++ elseif(keyword(1:4).eq.'mors')then ++ keybnd(nbonds)=2 ++ elseif(keyword(1:4).eq.'-mrs')then ++ keybnd(nbonds)=-2 ++ elseif(keyword(1:4).eq.'12-6')then ++ keybnd(nbonds)=3 ++ elseif(keyword(1:4).eq.'-126')then ++ keybnd(nbonds)=-3 ++ elseif(keyword(1:4).eq.'rhrm')then ++ keybnd(nbonds)=4 ++ elseif(keyword(1:4).eq.'-rhm')then ++ keybnd(nbonds)=-4 ++ elseif(keyword(1:4).eq.'quar')then ++ keybnd(nbonds)=5 ++ elseif(keyword(1:4).eq.'-qur')then ++ keybnd(nbonds)=-5 ++ elseif(keyword(1:4).eq.'buck')then ++ keybnd(nbonds)=6 ++ elseif(keyword(1:4).eq.'-bck')then ++ keybnd(nbonds)=-6 ++ elseif(keyword(1:4).eq.'fene')then ++ keybnd(nbonds)=7 ++ elseif(keyword(1:4).eq.'-fen')then ++ keybnd(nbonds)=-7 ++ elseif(keyword(1:4).eq.'coul')then ++ keybnd(nbonds)=8 ++ elseif(keyword(1:4).eq.'-cou')then ++ keybnd(nbonds)=-8 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,444) ++ endif ++ ++ lstbnd(nbonds,1)=iatm1 ++ lstbnd(nbonds,2)=iatm2 ++ prmbnd(nbonds,1)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,2)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,3)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,4)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,2i10,2x,1p,10e15.6)") ++ x keyword(1:4),lstbnd(nbonds,1), ++ x lstbnd(nbonds,2),(prmbnd(nbonds,j),j=1,mxpbnd) ++c ++c convert energy units to internal units ++ ++ if(abs(keybnd(nbonds)).eq.3)then ++ prmbnd(nbonds,2)=prmbnd(nbonds,2)*engunit ++ endif ++ if(abs(keybnd(nbonds)).eq.5)then ++ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit ++ prmbnd(nbonds,4)=prmbnd(nbonds,4)*engunit ++ endif ++ if(abs(keybnd(nbonds)).eq.6)then ++ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit ++ endif ++ ++ if(abs(keybnd(nbonds)).ne.8) ++ x prmbnd(nbonds,1)=prmbnd(nbonds,1)*engunit ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_bonds ++ ++ subroutine bndfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating chemical bond energy and ++c force terms in molecular dynamics. ++c ++c replicated data - blocked data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c modified - t. forester march 1993 ++c modified - t. forester march 1994 ++c modified - t. forester may 1994 ++c modified - t. forester nov 1994 ++c modified - w. smith nov 2006 ++c modified - p.-a. cazade oct 2007, solvation etc. ++c modified - d. quigley 2007, metdynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive ++ integer i,fail,ibnd1,ibnd2,idnode,mxnode,ii,ia,ib,imcon ++ integer keyb,kk,ntbond ++ real(8) strs(6),strs_loc(6) ++ real(8) rab,rrab,omega,gamma,fx,fy,fz,engbnd,virbnd,epsq ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) ++ if(fail.ne.0)call error(idnode,1040) ++ ++c flag for undefined potential ++ ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntbond-mxnode+1)/mxnode.gt.msbad)call error(idnode,418) ++ ++c block indices ++ ++ ibnd1=(idnode*ntbond)/mxnode+1 ++ ibnd2=((idnode+1)*ntbond)/mxnode ++ ++c initialise accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ bnd_fre=0.d0 ++ bnd_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(1)=.true. ++ bnd_sol(:)=0.d0 ++ if(lexcite)bnd_exc(:)=0.d0 ++ ++ endif ++ ++c calculate atom separation vectors ++ ++ ii=0 ++ do i=ibnd1,ibnd2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listbnd(ii,2) ++ ib=listbnd(ii,3) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ ++ endif ++ ++c components of bond vector ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ ++c loop over all specified chemical bond potentials ++ ++ ii=0 ++ do i=ibnd1,ibnd2 ++ ++ ii=ii+1 ++ ++c define components of bond vector ++ ++ rrab=0.d0 ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ if(rab.gt.1.d-6)rrab=1.d0/rab ++ ++c index of potential function parameters ++ ++ kk=listbnd(ii,1) ++ keyb=abs(keybnd(kk)) ++ ++c calculate scalar constant terms ++ ++ if(keyb.eq.0)then ++ ++c null interaction ++ ++ omega=0.d0 ++ gamma=0.d0 ++ ++ elseif(keyb.eq.1)then ++ ++c harmonic potential ++ ++ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2 ++ gamma=prmbnd(kk,1)*(rab-prmbnd(kk,2))*rrab ++ ++ else if(keyb.eq.2)then ++ ++c morse potential ++ ++ omega=prmbnd(kk,1)*((1.d0-exp(-prmbnd(kk,3)* ++ x (rab-prmbnd(kk,2))))**2-1.d0) ++ gamma=2.d0*prmbnd(kk,1)*prmbnd(kk,3)*(1.d0- ++ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2))))* ++ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2)))*rrab ++ ++ else if(keyb.eq.3)then ++ ++c 12-6 potential ++ ++ omega=(prmbnd(kk,1)*rrab**6-prmbnd(kk,2))*rrab**6 ++ gamma=(6.d0*prmbnd(kk,2)-12.d0*prmbnd(kk,1)*rrab**6)* ++ x rrab**8 ++ ++ elseif(keyb.eq.4)then ++ ++c restrained harmonic ++ ++ rab=rab-prmbnd(kk,2) ++ omega=0.5d0*prmbnd(kk,1)*(min(abs(rab),prmbnd(kk,3)))**2 ++ x +prmbnd(kk,1)*prmbnd(kk,3)*max(abs(rab)-prmbnd(kk,3),0.d0) ++ gamma=rrab*prmbnd(kk,1)*(sign(min(abs(rab),prmbnd(kk,3)),rab)) ++ ++ elseif(keyb.eq.5)then ++ ++c quartic potential ++ ++ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2+ ++ x 1.d0/3.d0*prmbnd(kk,3)*(rab-prmbnd(kk,2))**3+ ++ x 0.25d0*prmbnd(kk,4)*(rab-prmbnd(kk,2))**4 ++ gamma=rrab*(prmbnd(kk,1)*(rab-prmbnd(kk,2))+ ++ x prmbnd(kk,3)*(rab-prmbnd(kk,2))**2+ ++ x prmbnd(kk,4)*(rab-prmbnd(kk,2))**3) ++ ++ else if(keyb.eq.6)then ++ ++c buckingham exp-6 potential ++ ++ omega=prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))-prmbnd(kk,3)* ++ x rrab**6 ++ gamma=-rrab*prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))/prmbnd(kk,2)+ ++ x 6.d0*prmbnd(kk,3)*rrab**8 ++ ++ else if(keyb.eq.7)then ++ ++c FENE bond potential ++ ++ omega=-0.5d0*prmbnd(kk,1)*prmbnd(kk,2)**2*log(1.d0- ++ x ((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) ++ gamma=rrab*prmbnd(kk,1)*(rab-prmbnd(kk,3))/ ++ x (1.d0-((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) ++ ++ else if(keyb.eq.8)then ++ ++c coulomb bond potential ++ ++ omega=prmbnd(kk,1)*prmbnd(kk,2)*rrab*r4pie0/epsq ++ gamma=-omega*rrab*rrab ++ ++ else ++ ++c undefined potential ++ ++ omega=0.d0 ++ gamma=0.d0 ++ safe=.false. ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listbnd(ii,2) ++ ib=listbnd(ii,3) ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib).eq.0) ++ ++ if(lsolva)then ++ bnd_exc(atmolt(ia))=bnd_exc(atmolt(ia))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ bnd_fre=bnd_fre-omega ++ bnd_vir=bnd_vir-gamma*rab*rab ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ bnd_fre=bnd_fre+omega ++ bnd_vir=bnd_vir+gamma*rab*rab ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate bond energy and virial ++ ++ engbnd=engbnd+omega ++ virbnd=virbnd+gamma*rab*rab ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ bnd_sol(atmolt(ia))=bnd_sol(atmolt(ia))+omega ++ endif ++ ++c calculate forces ++ ++ fx=-gamma*xdab(ii) ++ fy=-gamma*ydab(ii) ++ fz=-gamma*zdab(ii) ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(ib)=fxx(ib)-fx ++ fyy(ib)=fyy(ib)-fy ++ fzz(ib)=fzz(ib)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdab(ii)*fx ++ strs(2)=strs(2)+xdab(ii)*fy ++ strs(3)=strs(3)+xdab(ii)*fz ++ strs(4)=strs(4)+ydab(ii)*fy ++ strs(5)=strs(5)+ydab(ii)*fz ++ strs(6)=strs(6)+zdab(ii)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc+gamma*rab*rab ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(ib)=fxx_loc(ib)-fx ++ fyy_loc(ib)=fyy_loc(ib)-fy ++ fzz_loc(ib)=fzz_loc(ib)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdab(ii)*fx ++ strs_loc(2)=strs_loc(2)+xdab(ii)*fy ++ strs_loc(3)=strs_loc(3)+xdab(ii)*fz ++ strs_loc(4)=strs_loc(4)+ydab(ii)*fy ++ strs_loc(5)=strs_loc(5)+ydab(ii)*fz ++ strs_loc(6)=strs_loc(6)+zdab(ii)*fz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,444) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engbnd ++ buffer(2)=virbnd ++ buffer(3)=bnd_fre ++ buffer(4)=bnd_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engbnd=buffer(1) ++ virbnd=buffer(2) ++ bnd_fre=buffer(3) ++ bnd_vir=buffer(4) ++ ++ if(lsolva)then ++ ++ call gdsum(bnd_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(bnd_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail) ++ ++ return ++ end subroutine bndfrc ++ ++ end module bonds_module +diff -urN dl_class_1.9.orig/srcmod/comms.inc dl_class_1.9/srcmod/comms.inc +--- dl_class_1.9.orig/srcmod/comms.inc 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/comms.inc 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,42 @@ ++c********************************************************************* ++c ++c dl_poly include file for MPI, PVM and SHMEM ++c copyright - daresbury laboratory ++c ++c********************************************************************* ++ ++CMPIU define mpipriv mpipriv_ ++ ++ include "mpif.h" ++ ++c parameters for message tags ++ ++ integer Xgcopy_tag, Merge1_tag ++ integer Dgsum_tag1, Dgsum_tag2 ++ integer Igmax_tag1, Igmax_tag2 ++ integer Igsum_tag1, Igsum_tag2 ++ integer Shmove_tag, Merge_tag ++ integer Merge4_tag, Shell_tag ++ integer Gstate_tag1, Gstate_tag2 ++ integer Passcon_tag, Msgtag ++ ++c MPI tagsizes ++ ++ parameter( ++ $ Xgcopy_tag = 105, ++ $ Dgsum_tag1 = 6001, ++ $ Dgsum_tag2 = 9001, ++ $ Igsum_tag1 = 12001, ++ $ Igsum_tag2 = 15001, ++ $ Shmove_tag = 18001, ++ $ Merge_tag = 6001, ++ $ Merge1_tag = 9001, ++ $ Merge4_tag = 12001, ++ $ Gstate_tag1 = 15001, ++ $ Gstate_tag2 = 18001, ++ $ Shell_tag = 21001, ++ $ Passcon_tag = 3001, ++ $ Igmax_tag1 = 24001, ++ $ Igmax_tag2 = 27001, ++ $ Msgtag = 30000) ++ +diff -urN dl_class_1.9.orig/srcmod/config_module.f dl_class_1.9/srcmod/config_module.f +--- dl_class_1.9.orig/srcmod/config_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/config_module.f 2015-11-09 14:15:45.054258793 +0100 +@@ -0,0 +1,103 @@ ++ module config_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation configuration data ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ character*1 cfgname(80) ++ character*1 sysname(80) ++ real(8) cell(9),rcell(9),celprp(10) ++ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) ++ ++ character*8, allocatable :: atmnam(:) ++ real(8), allocatable :: xxx(:),yyy(:),zzz(:) ++ real(8), allocatable :: vxx(:),vyy(:),vzz(:) ++ real(8), allocatable :: fxx(:),fyy(:),fzz(:) ++ real(8), allocatable :: flx(:),fly(:),flz(:) ++ real(8), allocatable :: chge(:),weight(:),rmass(:) ++ integer, allocatable :: ltype(:),lstfrz(:) ++ integer, allocatable :: neulst(:),lstneu(:) ++ integer, allocatable :: lentry(:),list(:,:) ++ integer, allocatable :: lstout(:),link(:) ++ integer, allocatable :: lct(:),lst(:) ++ ++ real(8), allocatable :: buffer(:) ++ ++c PLUMED variables ++ logical, save :: lplumed ++c PLUMED variables ++ ++ save atmnam,neulst,lstneu,cfgname,sysname ++ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz ++ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz ++ save lentry,list,lstout,link,lct,lst,celprp,rmass ++ save eta,stress,stresl,strcns,rcell ++ ++ contains ++ ++ subroutine alloc_config_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining simulation configuration arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ integer, parameter :: nnn=27 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xxx(mxatms),stat=fail(1)) ++ allocate (yyy(mxatms),stat=fail(2)) ++ allocate (zzz(mxatms),stat=fail(3)) ++ allocate (vxx(mxatms),stat=fail(4)) ++ allocate (vyy(mxatms),stat=fail(5)) ++ allocate (vzz(mxatms),stat=fail(6)) ++ allocate (fxx(mxatms),stat=fail(7)) ++ allocate (fyy(mxatms),stat=fail(8)) ++ allocate (fzz(mxatms),stat=fail(9)) ++ allocate (weight(mxatms),stat=fail(11)) ++ allocate (chge(mxatms),stat=fail(12)) ++ allocate (ltype(mxatms),stat=fail(13)) ++ allocate (lstfrz(mxatms),stat=fail(14)) ++ allocate (flx(mxatms),stat=fail(15)) ++ allocate (fly(mxatms),stat=fail(16)) ++ allocate (flz(mxatms),stat=fail(17)) ++ allocate (atmnam(mxatms),stat=fail(18)) ++ allocate (neulst(mxneut),stat=fail(19)) ++ allocate (lstneu(mxatms),stat=fail(20)) ++ allocate (lstout(mxatms),stat=fail(21)) ++ allocate (lentry(msatms),stat=fail(22)) ++ allocate (list(msatms,mxlist),stat=fail(23)) ++ allocate (link(mxatms),stat=fail(24)) ++ allocate (lct(mxcell),stat=fail(25)) ++ allocate (lst(mxcell),stat=fail(26)) ++ allocate (rmass(mxatms),stat=fail(27)) ++ allocate (buffer(mxbuff),stat=fail(10)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1000) ++ endif ++ enddo ++ ++ end subroutine alloc_config_arrays ++ ++ end module config_module +diff -urN dl_class_1.9.orig/srcmod/config_module.f.preplumed dl_class_1.9/srcmod/config_module.f.preplumed +--- dl_class_1.9.orig/srcmod/config_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/config_module.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,99 @@ ++ module config_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation configuration data ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ character*1 cfgname(80) ++ character*1 sysname(80) ++ real(8) cell(9),rcell(9),celprp(10) ++ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) ++ ++ character*8, allocatable :: atmnam(:) ++ real(8), allocatable :: xxx(:),yyy(:),zzz(:) ++ real(8), allocatable :: vxx(:),vyy(:),vzz(:) ++ real(8), allocatable :: fxx(:),fyy(:),fzz(:) ++ real(8), allocatable :: flx(:),fly(:),flz(:) ++ real(8), allocatable :: chge(:),weight(:),rmass(:) ++ integer, allocatable :: ltype(:),lstfrz(:) ++ integer, allocatable :: neulst(:),lstneu(:) ++ integer, allocatable :: lentry(:),list(:,:) ++ integer, allocatable :: lstout(:),link(:) ++ integer, allocatable :: lct(:),lst(:) ++ ++ real(8), allocatable :: buffer(:) ++ ++ save atmnam,neulst,lstneu,cfgname,sysname ++ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz ++ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz ++ save lentry,list,lstout,link,lct,lst,celprp,rmass ++ save eta,stress,stresl,strcns,rcell ++ ++ contains ++ ++ subroutine alloc_config_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining simulation configuration arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ integer, parameter :: nnn=27 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xxx(mxatms),stat=fail(1)) ++ allocate (yyy(mxatms),stat=fail(2)) ++ allocate (zzz(mxatms),stat=fail(3)) ++ allocate (vxx(mxatms),stat=fail(4)) ++ allocate (vyy(mxatms),stat=fail(5)) ++ allocate (vzz(mxatms),stat=fail(6)) ++ allocate (fxx(mxatms),stat=fail(7)) ++ allocate (fyy(mxatms),stat=fail(8)) ++ allocate (fzz(mxatms),stat=fail(9)) ++ allocate (weight(mxatms),stat=fail(11)) ++ allocate (chge(mxatms),stat=fail(12)) ++ allocate (ltype(mxatms),stat=fail(13)) ++ allocate (lstfrz(mxatms),stat=fail(14)) ++ allocate (flx(mxatms),stat=fail(15)) ++ allocate (fly(mxatms),stat=fail(16)) ++ allocate (flz(mxatms),stat=fail(17)) ++ allocate (atmnam(mxatms),stat=fail(18)) ++ allocate (neulst(mxneut),stat=fail(19)) ++ allocate (lstneu(mxatms),stat=fail(20)) ++ allocate (lstout(mxatms),stat=fail(21)) ++ allocate (lentry(msatms),stat=fail(22)) ++ allocate (list(msatms,mxlist),stat=fail(23)) ++ allocate (link(mxatms),stat=fail(24)) ++ allocate (lct(mxcell),stat=fail(25)) ++ allocate (lst(mxcell),stat=fail(26)) ++ allocate (rmass(mxatms),stat=fail(27)) ++ allocate (buffer(mxbuff),stat=fail(10)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1000) ++ endif ++ enddo ++ ++ end subroutine alloc_config_arrays ++ ++ end module config_module +diff -urN dl_class_1.9.orig/srcmod/core_shell_module.f dl_class_1.9/srcmod/core_shell_module.f +--- dl_class_1.9.orig/srcmod/core_shell_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/core_shell_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,826 @@ ++ module core_shell_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining core_shell arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use parse_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmshl(:,:) ++ integer, allocatable :: listshl(:,:) ++ integer, allocatable :: numshl(:),lstshl(:,:) ++ ++ save prmshl,listshl,numshl,lstshl ++ ++ contains ++ ++ subroutine alloc_csh_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining core_shell arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(4) ++ ++ do i=1,4 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmshl(mxtshl,2),stat=fail(1)) ++ allocate (numshl(mxtmls),stat=fail(2)) ++ allocate (lstshl(mxtshl,2),stat=fail(3)) ++ allocate (listshl(mxshl,3),stat=fail(4)) ++ ++ do i=1,4 ++ if(fail(i).gt.0)call error(idnode,1100) ++ enddo ++ ++ do i=1,mxtmls ++ numshl(i)=0 ++ enddo ++ ++ end subroutine alloc_csh_arrays ++ ++ subroutine define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining core-shell units ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ logical safe ++ integer idnode,itmols,nshels,nsite,ntmp,ishls ++ integer iatm1,iatm2,isite1,isite2,keyshl,kshl,idum ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numshl(itmols)=numshl(itmols)+ntmp ++ kshl=intstr(record,lenrec,idum) ++ if(keyshl.eq.0)then ++ keyshl=kshl ++ elseif(kshl.ne.keyshl)then ++ call error(idnode,1960) ++ endif ++ if(idnode.eq.0) then ++ ++ write(nrite, ++ x "(/,1x,'number of core-shell units',5x,i10)") ++ x ntmp ++ if(keyshl.eq.1)then ++ ++ write(nrite, ++ x "(/,/,1x,'core-shell details:',/,/,21x, ++ x 5x,'index',5x,'index',6x,'parameter')") ++ ++ else ++ ++ write(nrite, ++ x "(/,/,1x,'core-shell details:',/,/,21x, ++ x 6x,'core',5x,'shell',6x,'parameter')") ++ ++ endif ++ ++ endif ++ ++ do ishls=1,numshl(itmols) ++ ++ nshels=nshels+1 ++ if(nshels.gt.mxtshl) call error(idnode,57) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ lstshl(nshels,1)=iatm1 ++ lstshl(nshels,2)=iatm2 ++ prmshl(nshels,1)=dblstr(record,lenrec,idum) ++ prmshl(nshels,2)=dblstr(record,lenrec,idum) ++ if(idnode.eq.0) write(nrite, ++ x "(21x,2i10,2f15.4)") ++ x lstshl(nshels,1),lstshl(nshels,2), ++ x prmshl(nshels,1),prmshl(nshels,2) ++ ++c test for frozen cores or shells ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0) ++ x call error(idnode,49) ++ ++c convert energy units to internal units ++ ++ prmshl(nshels,1)=prmshl(nshels,1)*engunit ++ prmshl(nshels,2)=prmshl(nshels,2)*engunit ++ ++ enddo ++ ++ return ++ end subroutine define_core_shell ++ ++ subroutine corshl(idnode,mxnode,ntshl,shlke) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating the internal kinetic ++c energy of core-shell units in the shell polarisation model ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith july 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m ++ real(8) shlke,ppp,ccc,sss ++ ++ shlke=0.d0 ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c loop over all specified core-shell pairs ++ ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of atoms involved ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c calculate atom translational kinetic energy ++ ++ ppp=((weight(i)*vxx(i)+weight(j)*vxx(j))**2 ++ x +(weight(i)*vyy(i)+weight(j)*vyy(j))**2 ++ x +(weight(i)*vzz(i)+weight(j)*vzz(j))**2) ++ x /(weight(i)+weight(j)) ++ ++c calculate individual core and shell kinetic energies ++ ++ ccc=weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ sss=weight(j)*(vxx(j)**2+vyy(j)**2+vzz(j)**2) ++ ++c calculate core-shell internal kinetic energy ++ ++ shlke=shlke+0.5d0*(ccc+sss-ppp) ++ ++ enddo ++ ++c global average of core-shell internal kinetic energy ++ ++ if(mxnode.gt.1)then ++ buffer(1)=shlke ++ call gdsum(buffer(1),1,buffer(2)) ++ shlke=buffer(1) ++ endif ++ ++ return ++ end subroutine corshl ++ ++ subroutine put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for placing shells on top of cores in the ++c shell model at the start of a simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith feb 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, allocatable :: ltop(:) ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m,fail ++ ++c allocate ltop array ++ ++ allocate(ltop(ntshl),stat=fail) ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c zero ltop array ++ ++ do i=1,ntshl ++ ltop(i)=0 ++ enddo ++ ++c loop over all specified core-shell pairs ++ ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of atoms involved ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c set shell and core positions equal ++ ++ ltop(m)=j ++ xxx(j)=xxx(i) ++ yyy(j)=yyy(i) ++ zzz(j)=zzz(i) ++ ++ enddo ++ ++c merge data on different processors ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,ntshl,ltop,xxx,yyy,zzz,buffer) ++ ++c deallocate ltop array ++ ++ deallocate(ltop,stat=fail) ++ ++ return ++ end subroutine put_shells_on_cores ++ ++ subroutine shlfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating shell model spring energy and ++c force terms in molecular dynamics. ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith july 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect ++ integer idnode,imcon,mxnode,ntshl,ishl1,ishl2,i,j,k,m,kk ++ real(8) engshl,virshl,rij2,omega,gamma,ffx,ffy,ffz,strs ++ ++ dimension strs(6) ++ ++c check adequate workspace is available ++ ++ if(mxxdf.lt.mxshl)call error(idnode,423) ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c initialise accumulators ++ ++ engshl=0.d0 ++ virshl=0.d0 ++ shl_fre=0.d0 ++ shl_vir=0.d0 ++ ++ do i=1,6 ++ strs(i)=0.d0 ++ enddo ++ ++ if(lsolva)then ++ ++ lcomp(5)=.true. ++ shl_sol(:)=0.d0 ++ if(lexcite)shl_exc(:)=0.d0 ++ ++ endif ++ ++c calculate core-shell separation vectors ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c components of bond vector ++ ++ xdf(m)=xxx(i)-xxx(j) ++ ydf(m)=yyy(i)-yyy(j) ++ zdf(m)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,m,cell,xdf,ydf,zdf) ++ ++c loop over all specified core-shell units ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c index of potential parameters ++ ++ kk=listshl(m,1) ++ ++c core-shell separation ++ ++ rij2=xdf(m)**2+ydf(m)**2+zdf(m)**2 ++ ++c calculate scalar constant terms ++ ++ omega=(0.5d0*prmshl(kk,1)+0.25d0*prmshl(kk,2)*rij2)*rij2 ++ gamma=prmshl(kk,1)+prmshl(kk,2)*rij2 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(i)+atm_fre(i).eq.0) ++ ++ if(lsolva)then ++ shl_exc(atmolt(i))=shl_exc(atmolt(i))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ shl_fre=shl_fre-omega ++ shl_vir=shl_vir-gamma*rij2 ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ shl_fre=shl_fre+omega ++ shl_vir=shl_vir+gamma*rij2 ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate spring energy and virial ++ ++ engshl=engshl+omega ++ virshl=virshl+gamma*rij2 ++ ++ if(lsolva)then ++ shl_sol(atmolt(i))=shl_sol(atmolt(i))+omega ++ endif ++ ++c calculate spring forces ++ ++ ffx=-gamma*xdf(m) ++ ffy=-gamma*ydf(m) ++ ffz=-gamma*zdf(m) ++ ++ fxx(i)=fxx(i)+ffx ++ fyy(i)=fyy(i)+ffy ++ fzz(i)=fzz(i)+ffz ++ ++ fxx(j)=fxx(j)-ffx ++ fyy(j)=fyy(j)-ffy ++ fzz(j)=fzz(j)-ffz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*ffx ++ strs(2)=strs(2)+xdf(m)*ffy ++ strs(3)=strs(3)+xdf(m)*ffz ++ strs(4)=strs(4)+ydf(m)*ffy ++ strs(5)=strs(5)+ydf(m)*ffz ++ strs(6)=strs(6)+zdf(m)*ffz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1) then ++ ++ buffer(1)=engshl ++ buffer(2)=virshl ++ buffer(3)=shl_fre ++ buffer(4)=shl_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engshl=buffer(1) ++ virshl=buffer(2) ++ shl_fre=buffer(3) ++ shl_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(shl_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(shl_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine shlfrc ++ ++ subroutine check_shells(idnode,itmols,nshels,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to check no core-shell units are in ++c rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,itmols,nshels,ngrp,k1,ia,ib,kk ++ integer id,jj,ia1,jk,ib1 ++ ++ nshels=nshels-numshl(itmols) ++ do k1=1,numshl(itmols) ++ ++ nshels=nshels+1 ++ ia=lstshl(nshels,1) ++ ib=lstshl(nshels,2) ++ ++ ngrp=ngrp-numgrp(itmols) ++ ++ do kk=1,numgrp(itmols) ++ ++ ngrp=ngrp+1 ++ id=listyp(ngrp) ++ ++ do jj=1,numgsit(id)-1 ++ ++ ia1=lstgst(ngrp,jj) ++ if(ia1.eq.ia) then ++ ++ do jk=jj,numgsit(id) ++ ++ ib1=lstgst(ngrp,jk) ++ if(ib1.eq.ib) then ++ ++ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') ++ x 'error: sites ',ia,ib ++ call error(idnode,456) ++ ++ endif ++ ++ enddo ++ ++ elseif(ia1.eq.ib) then ++ ++ do jk=jj,numgsit(id) ++ ++ ib1=lstgst(ngrp,jk) ++ if(ib1.eq.ia) then ++ ++ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') ++ x 'error: sites ',ia,ib ++ call error(idnode,456) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ enddo ++ enddo ++ ++ return ++ end subroutine check_shells ++ ++ subroutine relax_shells ++ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep,rlxtol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for relaxing shells to zero force ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical relaxed,newjob ++ integer keyrlx,idnode,mxnode,natms,i,j,itmols,imols ++ integer iatm1,iatm2,fail,numopt,isite,ishls,jshls,lshls,ntpmls ++ integer nbuff ++ real(8) hnorm,grad0,grad1,grad2,stride,tstep,step ++ real(8) ggg,gam2,sgn,rlxtol ++ ++ dimension fail(4) ++ ++ integer, allocatable :: lstopt(:) ++ real(8), allocatable :: ggx(:),ggy(:),ggz(:) ++ real(8), allocatable :: hhx(:),hhy(:),hhz(:) ++ real(8), allocatable :: oxx(:),oyy(:),ozz(:) ++ ++ save hnorm,grad0,grad1,grad2,stride,lstopt ++ save ggx,ggy,ggz,hhx,hhy,hhz,oxx,oyy,ozz,numopt,nbuff,sgn ++ ++ data newjob/.true./,fail/0,0,0,0/ ++ ++c define initial data ++ ++ if(newjob)then ++ ++ newjob=.false. ++ allocate(lstopt(mxatms),stat=fail(1)) ++ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) ++ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(3)) ++ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1970) ++ enddo ++ ++c identify the shells ++ ++ isite=0 ++ ishls=0 ++ jshls=0 ++ do i=1,natms ++ ++ lstopt(i)=0 ++ ++ enddo ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do lshls=1,numshl(itmols) ++ ++ ishls=ishls+1 ++ lstopt(lstshl(lshls+jshls,2)+isite)=1 ++ ++ enddo ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ jshls=jshls+numshl(itmols) ++ ++ enddo ++ ++ numopt=ishls ++ ++ endif ++ ++c load coordinates of shells ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstopt(i).gt.0)then ++ ++ j=j+1 ++ oxx(j)=xxx(i) ++ oyy(j)=yyy(i) ++ ozz(j)=zzz(i) ++ ggx(j)=fxx(i) ++ ggy(j)=fyy(i) ++ ggz(j)=fzz(i) ++ ++ endif ++ ++ enddo ++ ++c step length for relaxation ++ ++ step=tstep**2 ++ ++c define atoms for this nodes ++ ++ iatm1=(idnode*numopt)/mxnode+1 ++ iatm2=((idnode+1)*numopt)/mxnode ++ ++ ggg=0.d0 ++ do i=iatm1,iatm2 ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ggg=sqrt(ggg) ++ ++c check convergence ++ ++ if(abs(ggg)/dble(numopt).lt.rlxtol)then ++ ++ relaxed=.true. ++ return ++ ++ endif ++ ++ if(keyrlx.eq.0) then ++ ++c set original search direction ++ ++ hnorm=ggg ++ grad0=ggg ++ grad2=ggg ++ do i=iatm1,iatm2 ++ ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ keyrlx=1 ++ sgn=1.d0 ++ ++ elseif(keyrlx.eq.1)then ++ ++c line search along chosen direction ++ ++ grad1=grad2 ++ grad2=0.d0 ++ do i=iatm1,iatm2 ++ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=grad2 ++ call gdsum(buffer(1),1,buffer(2)) ++ grad2=buffer(1) ++ endif ++ grad2=sgn*grad2/hnorm ++ ++c linear extrapolation to minimum ++ ++ stride=sgn*step ++ if(grad2.lt.0.d0)then ++ ++ keyrlx=2 ++ stride=sgn*step*grad2/(grad1-grad2) ++ ++ endif ++ ++ do i=iatm1,iatm2 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ elseif(keyrlx.eq.2)then ++ ++c construct conjugate search vector ++ ++ gam2=(ggg/grad0)**2 ++ hnorm=0.d0 ++ grad0=ggg ++ grad2=0.d0 ++ do i=iatm1,iatm2 ++ ++ hhx(i)=ggx(i)+gam2*hhx(i) ++ hhy(i)=ggy(i)+gam2*hhy(i) ++ hhz(i)=ggz(i)+gam2*hhz(i) ++ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 ++ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ ++ enddo ++ if(mxnode.gt.1)then ++ ++ buffer(1)=hnorm ++ buffer(2)=grad2 ++ call gdsum(buffer(1),2,buffer(3)) ++ hnorm=buffer(1) ++ grad2=buffer(2) ++ ++ endif ++ hnorm=sqrt(hnorm) ++ grad2=grad2/hnorm ++ sgn=sign(1.d0,grad2) ++ grad2=sgn*grad2 ++ ++ do i=iatm1,iatm2 ++ ++ oxx(i)=oxx(i)+sgn*step*hhx(i) ++ oyy(i)=oyy(i)+sgn*step*hhy(i) ++ ozz(i)=ozz(i)+sgn*step*hhz(i) ++ ++ enddo ++ ++ keyrlx=1 ++ ++ endif ++ ++c merge coordinate arrays ++ ++ if(mxnode.gt.1)then ++ ++ nbuff=6*(numopt+mxnode-1)/mxnode ++ call merge(idnode,mxnode,numopt,nbuff,oxx,oyy,ozz,buffer) ++ ++ endif ++ ++c unload coordinates of shells ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstopt(i).gt.0)then ++ ++ j=j+1 ++ xxx(i)=oxx(j) ++ yyy(i)=oyy(j) ++ zzz(i)=ozz(j) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine relax_shells ++ ++ end module core_shell_module +diff -urN dl_class_1.9.orig/srcmod/coulomb_module.f dl_class_1.9/srcmod/coulomb_module.f +--- dl_class_1.9.orig/srcmod/coulomb_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/coulomb_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1542 @@ ++ module coulomb_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining coulomb terms ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ewald_module ++ use metafreeze_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ ++ implicit none ++ ++ contains ++ ++ subroutine coul0 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c 1/r potential, no truncation or damping ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester february 1993 ++c stress tensor - t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) rcsq,chgea,rsq,chgprd,rrr,coul,fcoul,fi,fx,fy,fz ++ real(8) engcpe,vircpe,rcut,epsq,strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ++c coulomb potential and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul0 ++ ++ subroutine coul1 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a standard coulomb potential truncated at rcut ++c and shifted to zero at rcut. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith december 1992. ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c stress tensor t.forester may 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq,rcsq,chgea,rsq ++ real(8) fi,chgprd,omega,egamma,fx,fy,fz,rrr ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)*r4pie0/epsq ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++c start of primary loop for forces evaluation ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10) then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ++c calculate potential energy and virial ++ ++ omega=chgprd*(rcut-rrr)/(rrr*rcut) ++ egamma=chgprd/(rrr*rsq) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-omega ++ cou_vir=cou_vir+egamma*rsq ++ omega=lambda1*omega ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+omega ++ cou_vir=cou_vir-egamma*rsq ++ omega=lambda2*omega ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+omega ++ vircpe=vircpe-egamma*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+omega ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-egamma*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul1 ++ ++ subroutine coul2 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a distance dependant dielectric `constant'. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester april 1993 ++c stress tensor added - t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq ++ real(8) fi,rcsq,chgea,chgprd,rsq,rrsq,coul,egamma,fx,fy,fz ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++c calculate potential energy and Virial ++ ++ rrsq=1.d0/rsq ++ coul=chgprd*rrsq ++ egamma=2.d0*coul*rrsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+2.d0*coul ++ coul=lambda1*coul ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-2.d0*coul ++ coul=lambda2*coul ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and Virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-2.d0*coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-2.d0*coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul2 ++ ++ subroutine coul3 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c reaction field potential ++c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) ++c adapted for fennell-gezelter coulombic model ++c by w.smith june 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester february 1995 ++c stress tensor - t.forester feb 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,l,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq ++ real(8) b0,rfld0,rfld1,rfld2,chgea,chgprd,rsq,coul,omega ++ real(8) fx,fy,fz,fcoul,rrr,vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 ++ real(8) strs(6),strs_loc(6) ++ dimension fi(3) ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c reaction field terms ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ ++c screened coulomb terms ++ ++ vcon=erc(mxegrd-4)+rfld2*rcut**2-rfld1 ++ fcon=rcut*fer(mxegrd-4)-rfld0*rcut ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ rdr=dble(mxegrd-4)/rcut ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++c calculate potential energy using 3-point interpolation ++ ++ vk0=erc(l) ++ vk1=erc(l+1) ++ vk2=erc(l+2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0-vcon+fcon*(rrr-rcut) ++ coul=chgprd*(omega+rfld2*rsq-rfld1) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=fer(l) ++ gk1=fer(l+1) ++ gk2=fer(l+2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr-rfld0) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic force ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul3 ++ ++ subroutine coul4 ++ X (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a force shifted coulomb potential. ++c adapted for fennell-gezelter coulombic model ++c by w.smith may 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester october 1995 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,l,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq,coul ++ real(8) strs9,chgea,chgprd,rsq,rrr,omega,fcoul,fx,fy,fz ++ real(8) vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c screened coulomb terms ++ ++ vcon=erc(mxegrd-4) ++ fcon=rcut*fer(mxegrd-4) ++ rdr=dble(mxegrd-4)/rcut ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)*r4pie0/epsq ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++c start of primary loop for forces evaluation ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++c calculate potential energy using 3-point interpolation ++ ++ vk0=erc(l) ++ vk1=erc(l+1) ++ vk2=erc(l+2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ coul=chgprd*(omega-vcon+fcon*(rrr-rcut)) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=fer(l) ++ gk1=fer(l+1) ++ gk2=fer(l+2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate the coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul4 ++ ++ subroutine coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcpe,vircpe) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic potential and forces ++c for the all-pairs algorithm beyond the range of the normal cutoff ++c i.e. the 'tertiary' forces. frozen atom option included ++c ++c to be used with multiple_nsq ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w.smith august 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip ++ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 ++ integer npm2,m,ii,j,idum,kkk ++ real(8) engcpe,epsq,rcut,vircpe,rsq,rrr,chgprd,fcoul,coul,rct2 ++ ++ lskip=(lfree.or.lghost) ++ ++c zero energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ flx(i)=0.d0 ++ fly(i)=0.d0 ++ flz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation accumulators ++ ++ if(lsolva)then ++ ++ cou_sol_lng(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc_lng(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c set control variables ++ ++ last=natms ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius ++ ++ rct2=rcut**2 ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ if(lskip)then ++ if(atm_fre(i)*atm_fre(j).eq.2)cycle ++ endif ++ ++c calculate interatomic displacements ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c calculate coulomb terms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ if(lskip)then ++ if(atm_fre(i)*atm_fre(j).eq.2)cycle ++ endif ++ ++ ii=ii+1 ++ if(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then ++ ++c reject frozen atoms and calculate interatomic distance ++ ++ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.ge.rct2)then ++ ++ chgprd=chge(i)*chge(j)*r4pie0/epsq ++ rrr=sqrt(rsq) ++ ++c calculate potential energy and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(i),atmolt(j)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(i)+atm_fre(j).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc_lng(kkk)=cou_exc_lng(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol_lng(kkk)=cou_sol_lng(kkk)+coul ++ ++c calculate forces ++ ++ flx(i)=flx(i)+fcoul*xdf(ii) ++ fly(i)=fly(i)+fcoul*ydf(ii) ++ flz(i)=flz(i)+fcoul*zdf(ii) ++ ++ flx(j)=flx(j)-fcoul*xdf(ii) ++ fly(j)=fly(j)-fcoul*ydf(ii) ++ flz(j)=flz(j)-fcoul*zdf(ii) ++ ++c stress tensor ++ ++ stresl(1)=stresl(1)+xdf(ii)*fcoul*xdf(ii) ++ stresl(2)=stresl(2)+xdf(ii)*fcoul*ydf(ii) ++ stresl(3)=stresl(3)+xdf(ii)*fcoul*zdf(ii) ++ stresl(5)=stresl(5)+ydf(ii)*fcoul*ydf(ii) ++ stresl(6)=stresl(6)+ydf(ii)*fcoul*zdf(ii) ++ stresl(9)=stresl(9)+zdf(ii)*fcoul*zdf(ii) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c complete stress tensor ++ ++ stresl(4)=stresl(2) ++ stresl(7)=stresl(3) ++ stresl(8)=stresl(6) ++ ++ return ++ end subroutine coul_nsq ++ ++ end module coulomb_module +diff -urN dl_class_1.9.orig/srcmod/define_system_module.f dl_class_1.9/srcmod/define_system_module.f +--- dl_class_1.9.orig/srcmod/define_system_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/define_system_module.f 2015-11-09 14:15:45.054258793 +0100 +@@ -0,0 +1,6004 @@ ++ module define_system_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007, solvation, free energy ++c and excitation ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use dihedral_module ++ use ensemble_tools_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use inversion_module ++ use metafreeze_module ++ use metal_module ++ use parse_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use vdw_module ++ ++ contains ++ ++ subroutine simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the simulation control ++c parameters ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992. ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c modified ++c author - t.forester may 1993 ++c amended - t.forester sept 1994 - dl_poly_1.1 ++c amended - t.forester nov 1994 - macro version ++c amended - w.smith dec 1994 - t3d adaptation ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 hms ++ character*1 directive(lenrec) ++ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc ++ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe ++ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill ++ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau ++ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo ++ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn ++ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit ++ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack ++ integer idum,imcon,keyver,keytol,nblock,blkout,numgau ++ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol ++ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units ++ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin ++ real(8) prntim ++ ++CSGIC real(8) dummy ++CCRAY real(8) dummy ++CFFTWc FFTW instruction codes ++CFFTW ++CFFTW integer FFTW_FORWARD,FFTW_BACKWARD ++CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) ++CFFTW ++CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL ++CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) ++CFFTW ++CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE ++CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) ++CFFTW ++CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM ++CFFTW parameter (FFTW_OUT_OF_PLACE=0) ++CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) ++CFFTW ++CFFTW integer FFTW_THREADSAFE ++CFFTW parameter (FFTW_THREADSAFE=128) ++CFFTW ++ ++c intitialize system variables: temperature,pressure,ensemble key ++c force key, cutoff, primary cutoff, verlet shell width, relative ++c dielectric constant,timestep,temperature scaling flag, ++c temp scaling interval ++ ++ mode=0 ++ nhko=0 ++ nlatt=0 ++ nsteql=0 ++ nstrun=0 ++ minstp=0 ++ keybpd=0 ++ keyres=0 ++ keyens=0 ++ keyver=0 ++ taut=0.d0 ++ nstbts=0 ++ nstbgr=0 ++ nsbzdn=0 ++ nstbpo=100 ++ nstack=mxstak ++ intsta=0 ++ nstraj=0 ++ istraj=1 ++ keytrj=0 ++ numgau=1 ++ alpha=0.d0 ++ kmax1=0 ++ kmax2=0 ++ kmax3=0 ++ nospl=min(8,mxspl) ++ isolva=1 ++ nsolva=0 ++ niswitch=0 ++ nswitch=0 ++ nofic=1000 ++ ++ fmax=1000.d0 ++ keyfce=0 ++ multt=1 ++ keytol=0 ++ tstep=0.d0 ++ temp=0.d0 ++ press=0.d0 ++ rcut=0.d0 ++ rprim=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ epsq=1.d0 ++ rlxtol=1.d0 ++ opttol=1.d0 ++ tolnce=1.d-8 ++ quattol=1.d-8 ++ timjob=0.d0 ++ timcls=0.d0 ++ delrdf=0.d0 ++ delzdn=0.d0 ++ zlen=0.d0 ++ ehit=0.d0 ++ xhit=0.d0 ++ yhit=0.d0 ++ zhit=0.d0 ++ vmin=0.d0 ++ ebias=0.d0 ++ catchrad=0.d0 ++ pfree=0.d0 ++ ++ lhit=.false. ++ lbpd=.false. ++ ltad=.false. ++ lneb=.false. ++ loop=.true. ++ lnfic=.false. ++ lpsoc=.false. ++ lzero=.false. ++ ltscal=.false. ++ lewald=.false. ++ lspme=.false. ++ lhke=.false. ++ lgofr=.false. ++ lpgr=.false. ++ lzeql=.true. ++ loptim=.false. ++ lminim=.false. ++ lminopt=.false. ++ ltraj=.false. ++ lfcap=.false. ++ ltemp=.false. ++ lstep=.false. ++ lcut=.false. ++ ldelr=.false. ++ lprim=.false. ++ lforc=.false. ++ lens=.false. ++ lvdw=.false. ++ lrvdw=.false. ++ lpres=.false. ++ kill=.false. ++ lnsq=.false. ++ lzden=.false. ++ nolink=.false. ++ newgau=.false. ++ prechk=.false. ++ tadall=.false. ++ lsolva=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lexcite=.false. ++ lswitch=.false. ++ lghost=.false. ++ nebgo=.true. ++ seek='all ' ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open(nread,file='CONTROL',status='old') ++ ++ ++c PlUMED defaults ++ lplumed=.false. ++c PLUMED defaults ++c read job title ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++ call copystring(record,sysname,80) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, ++ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") ++ x sysname ++ ++ endif ++ ++c read and process directives from CONTROL file ++ ++ do while(loop) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++c convert to lowercase and strip out leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('redirect',directive,idum))then ++ ++c ignore this option in this context ++ ++c PLUMED modifications ++ elseif(findstring('plumed',directive,idum))then ++ if(findstring('on',directive,idum)) lplumed=.true. ++ if(findstring('off',directive,idum)) lplumed=.false. ++c PLUMED modifications ++ cycle ++ ++ elseif(findstring('steps',directive,idum))then ++ ++c number of timesteps ++ ++ nstrun=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun ++ ++ elseif(findstring('integ',directive,idum))then ++ ++c choice of integration algorithm ++ ++ if(findstring('leapfrog',directive,idum))then ++ ++ keyver=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'leapfrog verlet integration selected')") ++ ++ elseif(findstring('velocity',directive,idum))then ++ ++ keyver=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'velocity verlet integration selected')") ++ ++ endif ++ ++ elseif(findstring('no fic',directive,idum))then ++ ++c cancel possible "flying ice cube" in Berendsen thermostats ++ ++ lnfic=.true. ++ nofic=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('shells',directive,idum).and. ++ x findstring('on',directive,idum).and. ++ x findstring('cores',directive,idum))then ++ ++c put shells on cores at start - shell model only (else null) ++ ++ lpsoc=.true. ++ ++ elseif(findstring('densvar',directive,idum))then ++ ++c specify allowed density variation ++ ++ densvar=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") ++ x densvar ++ ++ elseif(findstring('no link',directive,idum))then ++ ++c switch off link cell option ++ ++ nolink=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'link cells option deactivated')") ++ ++ elseif(findstring('equil',directive,idum))then ++ ++c number of equilibration timesteps ++ ++ nsteql=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration period ',3x,i10)")nsteql ++ ++ elseif(findstring('restart',directive,idum))then ++ ++c restart control ++ ++ if(findstring('noscale',directive,idum))then ++ ++ keyres=3 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'noscale restart requested')") ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ keyres=2 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'scaled restart requested')") ++ ++ else ++ ++ keyres=1 ++ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") ++ ++ endif ++ ++ elseif(findstring('ensemble',directive,idum))then ++ ++c ensemble selection ++ ++ call ensemble_selection(directive,lens,kill,idnode,keyens, ++ x mode,taut,taup) ++ ++ elseif(findstring('regauss',directive,idum))then ++ ++c re-initialise velocities option (regaussing) ++ ++ newgau=.true. ++ numgau=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'regaussing option activated', ++ x /,1x,'regaussing interval set to ',3x,i10)") ++ x numgau ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ nstbts=intstr(directive,lenrec,idum) ++ if(nstbts.gt.0)then ++ ltscal=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'temperature scaling on' ++ x /,1x,'temperature scaling interval',3x,i10)") ++ x nstbts ++ ++ endif ++ ++ elseif(findstring('rdf',directive,idum))then ++ ++ if(findstring('print',directive,idum))then ++ ++ lpgr=.true. ++ lpgr=(lgofr.and.lpgr) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'g(r) printing option on ')") ++ ++ else ++ ++ lgofr=.true. ++ nstbgr=intstr(directive,lenrec,idum) ++ delrdf=dblstr(directive,lenrec,idum) ++ if(nstbgr.eq.0)nstbgr=10 ++ if(delrdf.lt.1.d-8)delrdf=0.05d0 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'radial distribution functions on ', ++ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr ++ write(nrite, ++ x "(1x,'g(r) bin width ',3x,1p,e12.4)") ++ x delrdf ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('zden',directive,idum))then ++ ++ lzden=.true. ++ nsbzdn=intstr(directive,lenrec,idum) ++ delzdn=dblstr(directive,lenrec,idum) ++ zlen=dblstr(directive,lenrec,idum) ++ if(nsbzdn.eq.0)nsbzdn=10 ++ if(delzdn.lt.1.d-8)then ++ zlen=0.1d0*dble(mxzdn) ++ delzdn=0.1d0 ++ elseif(zlen.lt.1.d-8)then ++ zlen=delzdn*dble(mxzdn) ++ endif ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'Z density profile requested', ++ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn ++ write(nrite, ++ x "(1x,'zdensity bin width ',3x,1p,e12.4)") ++ x delzdn ++ write(nrite, ++ x "(1x,'zdensity range ',3x,1p,e12.4)") ++ x zlen ++ ++ endif ++ ++ elseif(findstring('collect',directive,idum))then ++ ++ lzeql=.false. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration included in overall averages')") ++ ++ elseif(findstring('neb',directive,idum))then ++ ++c activate nudged elastic band option ++ ++ call neb_option(directive,lneb,lminopt,idnode, ++ x numneb,keytol,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('impact',directive,idum))then ++ ++c activate the impact option ++ ++ if(lhit)call error(idnode,516) ++ lhit=.true. ++ khit=intstr(directive,lenrec,idum) ++ nhit=intstr(directive,lenrec,idum) ++ ehit=dblstr(directive,lenrec,idum) ++ xhit=dblstr(directive,lenrec,idum) ++ yhit=dblstr(directive,lenrec,idum) ++ zhit=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'impact option selected')") ++ write(nrite,"( ++ x /,1x,'identity of impact atom ',i10, ++ x /,1x,'time step of impact ',i10, ++ x /,1x,'impact recoil energy (keV) ',1p,e12.4, ++ x /,1x,'impact direction (x component) ',1p,e12.4, ++ x /,1x,'impact direction (y component) ',1p,e12.4, ++ x /,1x,'impact direction (z component) ',1p,e12.4)") ++ x khit,nhit,ehit,xhit,yhit,zhit ++ ++ endif ++ ++c convert impact energy from keV to internal units ++ ++ ehit=ehit*9648530.821d0 ++ ++ elseif(findstring('bpd',directive,idum))then ++ ++c activate the BPD option ++ ++ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, ++ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, ++ x catchrad,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('tad',directive,idum))then ++ ++c activate temperature accelerated dynamics option ++ ++ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, ++ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, ++ x deltad,opttol,hyp_units) ++ ++ elseif(findstring('minim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ minstp=intstr(directive,lenrec,idum) ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ lminim=.true. ++ loptim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'minimisation programme requested')") ++ write(nrite, ++ x "(1x,'structure minimisation interval ', ++ x 3x,i10)")minstp ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'structure minimisation tolerance', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('optim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ loptim=.true. ++ lminim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'structure optimisation requested')") ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'tolerance for structure optimisation ', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('zero',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ temp=1.d0 ++ lzero=.true. ++ loptim=.false. ++ lminim=.false. ++ ltemp=.true. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'zero K optimisation requested')") ++ write(nrite, ++ x "(' temperature reset to',1p,e12.4)")1.d0 ++ ++ endif ++ ++ else if(findstring('solva',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ else if(findstring('decomp',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ elseif(findstring('metafreeze',directive,idum).or. ++ x findstring('metadyn',directive,idum))then ++ ++c activate metadynamics option - d. quigley ++ ++ call metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++ else if(findstring('free',directive,idum))then ++ ++ call free_energy_option(directive,lfree,lfrmas,idnode) ++ ++ else if(findstring('excite',directive,idum))then ++ ++ call excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++ else if(findstring('switch',directive,idum))then ++ ++ call switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++ elseif(findstring('print',directive,idum))then ++ ++ nstbpo=intstr(directive,lenrec,idum) ++ nstbpo=max(nstbpo,1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data printing interval ',3x,i10)")nstbpo ++ ++ elseif(findstring('stack',directive,idum))then ++ ++ nstack=intstr(directive,lenrec,idum) ++ ++c reset stack limit if too large ++ ++ nstack=min(nstack,mxstak) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data stacking interval ',3x,i10)")nstack ++ ++ elseif(findstring('stats',directive,idum))then ++ ++ intsta=intstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'statistics file interval ',3x,i10)")intsta ++ ++ elseif(findstring('traj',directive,idum))then ++ ++ ltraj=.true. ++ nstraj=intstr(directive,lenrec,idum) ++ istraj=max(intstr(directive,lenrec,idum),1) ++ keytrj=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'trajectory file option on ', ++ x /,1x,'trajectory file start ',3x,i10, ++ x /,1x,'trajectory file interval ',3x,i10 ++ x /,1x,'trajectory file info key ',3x,i10)") ++ x nstraj,istraj,keytrj ++ ++ elseif(findstring('ewald',directive,idum).or. ++ x findstring('spme',directive,idum).or. ++ x findstring('hke',directive,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ call ewald_selection(directive,lhke,lspme,lewald,lcut, ++ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, ++ x kmax3,alpha,rcut) ++ ++ elseif(findstring('distan',directive,idum))then ++ ++ keyfce=4 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('coul',directive,idum))then ++ ++ keyfce=6 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Coulombic potential')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('shift',directive,idum))then ++ ++ keyfce=8 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('reaction',directive,idum))then ++ ++ keyfce=10 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : reaction field')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('cap',directive,idum))then ++ ++ lfcap=.true. ++ fm=dblstr(directive,lenrec,idum) ++ if(fm.gt.0.d0)fmax=fm ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax ++ ++ elseif(findstring('no vdw',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'short-range potential terms off')") ++ lvdw=.true. ++ ++ elseif(findstring('no elec',directive,idum))then ++ ++ keyfce=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'electrostatic potential terms off')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('mult',directive,idum))then ++ ++ multt=max(intstr(directive,lenrec,idum),1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'multiple timestep interval ',3x,i10)")multt ++ ++ elseif(findstring('timestep',directive,idum))then ++ ++ lstep=.true. ++ tstep=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep ++ ++ elseif(findstring('temp',directive,idum))then ++ ++ ltemp=.true. ++ temp=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp ++ ++ elseif(findstring('pres',directive,idum))then ++ ++ press=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press ++ ++c convert from katm to internal units of pressure ++ ++ press=press/prsunt ++ lpres=.true. ++ ++ elseif(findstring('prim',directive,idum))then ++ ++c primary cutoff ++ ++ lprim=.true. ++ rprim=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim ++ ++ elseif(findstring('rvdw',directive,idum))then ++ ++c cutoff for short range potentials ++ ++ rvdw=dblstr(directive,lenrec,idum) ++ lrvdw=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw ++ ++ elseif(findstring('delr',directive,idum))then ++ ++c Verlet shell width ++ ++ ldelr=.true. ++ delr=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr ++ ++ elseif(findstring('cut',directive,idum))then ++ ++c cutoff ++ ++ lcut=.true. ++ rcut=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut ++ ++ elseif(findstring('eps',directive,idum))then ++ ++c relative dielectric constant ++ ++ epsq=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq ++ ++ elseif(findstring('rlxtol',directive,idum))then ++ ++c force tolerance for shell relaxation ++ ++ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol ++ ++ elseif(findstring('shake',directive,idum))then ++ ++c tolerance for shake ++ ++ tolnce=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce ++ ++ elseif(findstring('quaternion',directive,idum))then ++ ++c tolerance for quaternion integration ++ ++ quattol=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol ++ ++ elseif(findstring('job time',directive,idum))then ++ ++c time for simulation (in seconds/minutes/hours/days or indefinite) ++ ++ if(findstring('indef',directive,idum))then ++ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 ++ else ++ timjob=dblstr(directive,lenrec,idum) ++ if(findstring('m',directive,idum))then ++ timjob=6.0d1*timjob ++ elseif(findstring('h',directive,idum))then ++ timjob=3.6d3*timjob ++ elseif(findstring('d',directive,idum))then ++ timjob=8.64d4*timjob ++ endif ++ endif ++ ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") ++ x hms,prntim ++ ++ elseif(findstring('close time',directive,idum))then ++ ++c time for winding up a job (in seconds) ++ ++ timcls=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls ++ ++ elseif(findstring('all pairs',directive,idum))then ++ ++c full minimum image - N^2 interactions each timestep ++ ++ lnsq=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'All-pairs requested for electrostatics')") ++ ++ elseif(findstring('nospl',directive,idum))then ++ ++c set ewald_spme interpolation order ++ ++ nospl=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('finish',directive,idum))then ++ ++c safe termination of reading CONTROL file ++ ++ loop=.false. ++ ++ else ++ ++c unrecognised directive in control file ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ enddo ++ ++c check on steps before temperature scaling ++ ++ if(nstbts.eq.0)nstbts=nstrun+1 ++ ++c conduct consistency checks on directives ++ ++ if(lminim)then ++ ++c ensure final configuration follows minimisation ++ ++ if(minstp.eq.0)minstp=nstrun ++ nstrun=minstp*(nstrun/minstp) ++ ++ endif ++ ++c check force activation options ++ ++ if(.not.lforc)then ++ ++c check if any forces are in operation ++ ++ if(.not.lvdw)then ++ ++ kill=.true. ++ call error(idnode,-383) ++ ++ endif ++ ++ else ++ ++c turn on short range forces ++ ++ if(lvdw)then ++ ++ if(keyfce.eq.0)then ++ ++ lcut=.true. ++ ldelr=.true. ++ ++ endif ++ ++ else ++ ++ keyfce=keyfce+1 ++ ++ endif ++ ++ endif ++ ++c if tad selected use only leap frog ++ ++ if(ltad.and.keyver.eq.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to leapfrog for TAD dynamics')") ++ keyver=0 ++ ++ endif ++ ++c error checking ++ ++ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then ++ ++ kill=.true. ++ call error(idnode,-2360) ++ ++ endif ++ ++ if(lsolva.or.lfree.or.lexcite.or.lswitch)then ++ ++ if(lspme)then ++ ++ kill=.true. ++ call error(idnode,-601) ++ ++ endif ++ ++ if(lhke)then ++ ++ kill=.true. ++ call error(idnode,-602) ++ ++ endif ++ ++ endif ++ ++ if(lghost.and.nstbgr.ne.isolva)then ++ ++ call warning(idnode,130,dble(isolva),0.d0,0.d0) ++ nstbgr=isolva ++ ++ endif ++ if(lfree.and.lgofr)then ++ ++ call warning(idnode,140,0.d0,0.d0,0.d0) ++ lgofr=.false. ++ lpgr=.false. ++ ++ endif ++ if(loptim)then ++ ++ temp=0.d0 ++ ++ elseif(.not.ltemp)then ++ ++ kill=.true. ++ call error(idnode,-380) ++ ++ endif ++ ++ if(.not.lstep)then ++ ++ kill=.true. ++ call error(idnode,-381) ++ ++ endif ++ ++ if(.not.lcut)then ++ ++ kill=.true. ++ call error(idnode,-382) ++ ++ endif ++ ++c check if van der Waals cutoff set ++ ++ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then ++ ++ if(rcut.gt.0.d0)then ++ ++ rvdw=rcut ++ ++ else ++ ++ kill=.true. ++ call error(idnode,-402) ++ ++ endif ++ ++ endif ++ ++ if(.not.ldelr)then ++ ++ kill=.true. ++ call error(idnode,-384) ++ ++ endif ++ ++ if(multt.gt.1)then ++ ++ if(.not.lprim)then ++ ++ kill=.true. ++ call error(idnode,-385) ++ ++ elseif(rprim.gt.rcut)then ++ ++ kill=.true. ++ call error(idnode,-386) ++ ++ endif ++ ++ endif ++ ++c check settings in nvt ensemble ++ ++ if(keyens.ge.2.and.keyens.le.3)then ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ ++ endif ++ ++c check settings in npt ensemble ++ ++ if(keyens.ge.4.and.keyens.le.7)then ++ ++ if(.not.lpres)then ++ ++ kill=.true. ++ call error(idnode,-387) ++ ++ endif ++ ++c check barostat and thermostat rates non zero ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ if(taup.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-466) ++ ++ endif ++ ++ endif ++ ++c check multiple timestep cutoffs are sensible ++ ++ if(multt.gt.1)then ++ if(rcut-rprim.lt.delr)then ++ ++ kill=.true. ++ call error(idnode,-398) ++ ++ endif ++ endif ++ ++c check rcut > rvdw (for verlet list constructor) ++ ++ if(rcut.lt.rvdw)then ++ ++ kill=.true. ++ call error(idnode,-400) ++ ++ endif ++ ++c check spme is not being used with incorrect pbc ++ ++ if(lspme)then ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ kill=.true. ++ call error(idnode,-513) ++ ++ endif ++ ++ endif ++ ++c check on all-pairs calculation request ++ ++ if(lnsq)then ++ ++ if(multt.eq.1)then ++ ++ kill=.true. ++ call error(idnode,-422) ++ ++ endif ++ ++ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then ++ ++ kill=.true. ++ call error(idnode,-424) ++ ++ endif ++ ++ endif ++ ++c cancel rdf option if no vdw or coulombic forces ++ ++ if(lgofr.and.keyfce.eq.0)then ++ ++ lgofr=.false. ++ call warning(idnode,120,0.d0,0.d0,0.d0) ++ ++ endif ++ ++ if(kill)call abort_control_read(2,idnode,nread) ++ ++c close CONTROL file ++ ++ if(idnode.eq.0)close(nread) ++ ++ return ++ end subroutine simdef ++ ++ subroutine sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the molecular specifications ++c of the system to be simulated ++c version for rigid unit data and neutral groups ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992. ++c amended - w.smith march 1994 ++c amended - t.forester april 1994 ++c amended - w.smith dec 1994 - getrec etc ++c amended - a.smondyrev may 2000 - keydih=5 for ++c ryckaert-bellemans potential in dihedrals ++c amended - a.smondyrev may 2000 - keydih=6 for ++c fluorinated ryckaert-bellemans potential in dihedrals ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf ++ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost ++ ++ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls ++ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite ++ integer nsite,nconst,nangle,ndihed,ninver,nbonds ++ integer nteth,nspmf,itmols,i,idum,keyver ++ integer ntpter,keyshl,iatm,natmsr,ntghost ++ ++ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb ++ real(8) sumchg ++ ++ data loop1/.true./,loop2/.true./ ++ ++c initialise system counters: atomic site index, number of ++c constraints, bond angles, dihedrals, inversions, chemical bonds, ++c unique atom types, total number of atoms, ++c total number of rigid groups, number of tethered atoms, ++c number of three body potentials ++ ++ nsite=0 ++ nconst=0 ++ nangle=0 ++ ndihed=0 ++ ninver=0 ++ nbonds=0 ++ ntpatm=0 ++ natms=0 ++ ngrp=0 ++ nteth=0 ++ ntptbp=0 ++ ntpter=0 ++ ntpmet=0 ++ ntpvdw=0 ++ ntpfbp=0 ++ nshels=0 ++ nspmf=0 ++ keyfld=0 ++ keyshl=0 ++ ntghost=0 ++ natmsr=0 ++ ntcons_ghost=0 ++ ++ lunits=.false. ++ lmols=.false. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ lshl=.false. ++ lpmf=.false. ++ engunit=1.d0 ++ ++ numbonds(:)=0 ++ numpmf(:)=0 ++ numcon(:)=0 ++ numdih(:)=0 ++ numinv(:)=0 ++ numgrp(:)=0 ++ numsit(:)=0 ++ numteth(:)=0 ++ numshl(:)=0 ++ npmf(:)=0 ++ indpmf(:)=0 ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD',status='old') ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c convert to lowercase and remove leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('units',record,idum))then ++ ++c identify energy unit for input/output ++ ++ lunits=.true. ++ call define_units(idnode,engunit) ++ ++c neutral group control option ++ ++ elseif(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ if(idnode.eq.0) ++ x write(nrite,"(/,' neutral group implementation in use')") ++ ++c can't have neutral groups with all-pairs ++ ++ if(lnsq)call error(idnode,426) ++ ++c specify molecular species ++ ++ elseif(findstring('molecu',record,idum))then ++ ++c number of molecular types ++ ++ if(lmols)call error(idnode,11) ++ lmols=.true. ++ ntpmls=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") ++ x ntpmls ++ ++ if(ntpmls.gt.mxtmls)call error(idnode,10) ++ ++c initialise total system charge ++ ++ sumchg=0.d0 ++ ++c read in molecular characteristics ++ ++ do itmols=1,ntpmls ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'molecular species type',9x,i10)") ++ x itmols ++ ++c name of molecular species ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call copystring(record,molnam(1,itmols),40) ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") ++ x (molnam(i,itmols),i=1,40) ++ ++c stop processing if energy unit has not been specified ++ ++ if(.not.lunits)call error(idnode,6) ++ ++c read molecular data ++ ++ loop2=.true. ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'number of molecules ', ++ x 10x,i10)")nummols(itmols) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++c read in atomic details ++ ++ call define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read core - shell spring parameters ++ ++ elseif(findstring('shell',record,idum))then ++ ++ lshl=.true. ++ call define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl, ++ x engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read chemical bond force constant and bondlength ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ call define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read bond atom indices and constraint bondlength ++ ++ elseif(findstring('constr',record,idum))then ++ ++ call define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read pmf bond atom indices, weights and constraint bondlength ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ if(lpmf)call error(idnode,484) ++ lpmf=.true. ++ call define_pmf(safe,idnode,itmols,nspmf) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular angular potential parameters ++ ++ elseif(findstring('angles',record,idum))then ++ ++ call define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular dihedral potential parameters ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ call define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular inversion potential parameters ++ ++ elseif(findstring('invers',record,idum))then ++ ++ call define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read rigid body data ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ call define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read tethered atom indices and tethering parameters ++ ++ elseif(findstring('teth',record,idum))then ++ ++ call define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c finish of data for one molecular type ++ ++ elseif(findstring('finish',record,idum))then ++ ++c running total of number of atoms in system ++ ++ natms=natms+nummols(itmols)*numsit(itmols) ++ if(natms.gt.mxatms)call error(idnode,75) ++ ++c check core-shell units are not both in same rigid body unit ++ ++ call check_shells(idnode,itmols,nshels,ngrp) ++ ++ loop2=.false. ++ ++ else ++ ++c error exit for unidentified directive in molecular data ++ ++ if(idnode.eq.0)write(nrite,'(12x,a)')record ++ call error(idnode,12) ++ ++ endif ++ ++ enddo ++ ++c construction of atmolt table for solvation calculation ++ ++ if(lsolva)then ++ ++ do iatm=natmsr+1,natms ++ atmolt(iatm)=itmols ++ enddo ++ natmsr=natms ++ ++ endif ++ ++ enddo ++ ++c construction of atm_fre table for free energy or excitation ++ ++ if(lfree.or.lexcite.or.lswitch)then ++ ++ atm_fre(:)=0 ++ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then ++ ++ do iatm=ind_fre(1),ind_fre(2) ++ atm_fre(iatm)=1 ++ enddo ++ ++ endif ++ ++ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then ++ ++ do iatm=ind_fre(3),ind_fre(4) ++ ++ atm_fre(iatm)=2 ++ if(lghost)ntghost=ntghost+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c calculate system charge ++ ++ call check_syschg(idnode,ntpmls,sumchg) ++ ++c read in the nonbonded potential energy parameters ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ call define_van_der_waals ++ x (safe,ltable,lunits,lmols,idnode,ntpvdw, ++ x ntpatm,keyfce,dlrpot,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the metal potential energy parameters ++ ++ elseif(findstring('met',record,idum))then ++ ++ call define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the three body potential energy parameters ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ call define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the tersoff potential energy parameters ++ ++ elseif(findstring('tersoff',record,idum))then ++ ++ call define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the four body potential energy parameters ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ call define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read external field data ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c normal end of FIELD file ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. ++ x mod(keyfce,2).eq.1)call error(idnode,145) ++ ++c error exit for unidentified directive ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(100a)')record ++ call abort_field_read(2,idnode,nfield) ++ ++ endif ++ ++ enddo ++ ++c close force field file ++ ++ if(idnode.eq.0)close (nfield) ++ ++ ++ if(lshl.and.idnode.eq.0)then ++ ++ if(keyshl.eq.1)write(nrite, ++ x "(/,/,'adiabatic shell model in operation')") ++ ++ if(keyshl.eq.2)write(nrite, ++ x "(/,/,'relaxed shell model in operation')") ++ ++ endif ++ ++ if(lshl.and.keyshl.eq.0)call error(idnode,1951) ++ ++c if metadynamics and shell selected use only velocity verlet ++ ++ if(lshl.and.lmetadyn.and.keyver.eq.0)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to velocity verlet for metadynamics')") ++ keyver=1 ++ ++ endif ++ ++ return ++ end subroutine sysdef ++ ++ subroutine sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the configuration data file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 atname(8) ++ ++ logical loglnk,safe,lneut,nolink,lfree,lfrmas ++ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt ++ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz ++ integer m,l,ncells,idum,mxnode ++ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc ++ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi ++ real(8) width,dum1,dum2,test,com(3) ++ ++c open the system input file ++ ++ if(idnode.eq.0)open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ call copystring(record,cfgname,80) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ levcfg=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'selected image convention',6x,i10)")imcon ++ ++c check config file contents for consistent data ++ ++ if((imcon.eq.0.or.imcon.eq.6).and. ++ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) ++ x call error(idnode,180) ++ ++ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) ++ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) ++ ++ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) ++ x call error(idnode,390) ++ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 ++ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.eq.0)then ++ ++c if no periodic boundaries - set zero values for cell ++c vectors and cell volume ++ ++ cell(:)=0.d0 ++ volm=0.d0 ++ ++ else ++ ++c read cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++ endif ++ ++c read the atomic coordinates ++ ++ indatm=0 ++ indnam=0 ++ indneu=0 ++ safe=.true. ++ ++ do k=1,ntpmls ++ ++ do l=1,nummols(k) ++ ++ do m=1,numsit(k) ++ ++ indatm=indatm+1 ++ ++ if(indatm.gt.mxatms)call error(idnode,45) ++ ++ xxx(indatm)=0.d0 ++ yyy(indatm)=0.d0 ++ zzz(indatm)=0.d0 ++ vxx(indatm)=0.d0 ++ vyy(indatm)=0.d0 ++ vzz(indatm)=0.d0 ++ fxx(indatm)=0.d0 ++ fyy(indatm)=0.d0 ++ fzz(indatm)=0.d0 ++ ++ if(idnode.eq.0)then ++ ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ ++ elseif(levcfg.eq.1)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ ++ else ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce ++ ++ endif ++ ++c strip blanks off atom name ++ ++ call strip(atname,8) ++ ++ if(sitnam(indnam+m).eq.mkwd8(atname))then ++ ++ xxx(indatm)=xcoord ++ yyy(indatm)=ycoord ++ zzz(indatm)=zcoord ++ ++ if(levcfg.gt.0)then ++ ++ vxx(indatm)=xveloc ++ vyy(indatm)=yveloc ++ vzz(indatm)=zveloc ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ fxx(indatm)=xforce ++ fyy(indatm)=yforce ++ fzz(indatm)=zforce ++ ++ endif ++ ++ else ++ ++ write(nrite,"(/,/,'unidentified atom label :',8a1, ++ x ': atom number ',i5)")atname,indatm ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ call gstate(safe) ++ if(.not.safe)call error(idnode,25) ++ ++ ltype(indatm)=ltpsit(indnam+m) ++ weight(indatm)=wgtsit(indnam+m) ++ chge(indatm)=chgsit(indnam+m) ++ atmnam(indatm)=sitnam(indnam+m) ++ lstfrz(indatm)=lfzsit(indnam+m) ++ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu ++ ++c reset atomic masses according to free energy definitions ++ ++ if(lfree)then ++ ++ weight_sav(indatm)=weight(indatm) ++ ++ if(lfrmas)then ++ ++ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then ++ weight(indatm)=lambda1*weight(indatm) ++ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) ++ x then ++ weight(indatm)=lambda2*weight(indatm) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ indneu=indneu+nugrp(indnam+numsit(k)) ++ ++ enddo ++ ++ indnam=indnam+numsit(k) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(xxx,indatm,buffer) ++ call gdsum(yyy,indatm,buffer) ++ call gdsum(zzz,indatm,buffer) ++ ++ if(levcfg.gt.0)then ++ ++ call gdsum(vxx,indatm,buffer) ++ call gdsum(vyy,indatm,buffer) ++ call gdsum(vzz,indatm,buffer) ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ call gdsum(fxx,indatm,buffer) ++ call gdsum(fyy,indatm,buffer) ++ call gdsum(fzz,indatm,buffer) ++ ++ endif ++ ++ endif ++ ++c check integrity of cell vectors : for cubic, TO and RD cases ++c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) ++ ++ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then ++ ++ axx=(abs(cell(1))+abs(cell(5)))/2.d0 ++ test=1.d-8*axx ++ if(abs(cell(1)-axx).gt.test)call error(idnode,410) ++ if(abs(cell(5)-axx).gt.test)call error(idnode,410) ++ if(imcon.eq.5)then ++ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) ++ x call error(idnode,410) ++ else ++ if(abs(cell(9)-axx).gt.test)call error(idnode,410) ++ endif ++ ++ endif ++ ++c check integrity of hexagonal prism cell vectors ++ ++ if(imcon.eq.7)then ++ ++ rt3=sqrt(3.d0) ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,410) ++ ++ endif ++ ++c check 2D PBC for imcon=6 ++ ++ if(imcon.eq.6)then ++ ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c check for diagonal cell matrix if appropriate ++ ++ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. ++ x (imcon.eq.5).or.(imcon.eq.7))then ++ ++ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c put centre of mass at centre of coordinates if imcon=0 ++ ++ if(imcon.eq.0)then ++ ++ totmas=getmass(indatm,idnode,mxnode) ++ call getcom(indatm,idnode,mxnode,totmas,com) ++ ++ do i=1,indatm ++ ++ xxx(i)=xxx(i)-com(1) ++ yyy(i)=yyy(i)-com(2) ++ zzz(i)=zzz(i)-com(3) ++ ++ enddo ++ ++ endif ++ ++c set widths if unset - needed for check on link cells below ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ xhi=abs(xxx(1)) ++ yhi=abs(yyy(1)) ++ zhi=abs(zzz(1)) ++ do i=2,indatm ++ ++ xhi=max(xhi,abs(xxx(i))) ++ yhi=max(yhi,abs(yyy(i))) ++ zhi=max(zhi,abs(zzz(i))) ++ ++ enddo ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ if(imcon.eq.6.and.cell(9).lt.1.d-6)then ++ ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ endif ++ ++c calculate dimensional properties of simulation cell ++ ++ call dcell(cell,celprp) ++ ++ if(imcon.eq.0)then ++ ++ volm=0.d0 ++ ++ elseif(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ else ++ ++ volm=celprp(10) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") ++ write(nrite,"(21x,3f12.6)")cell ++ ++ write(nrite, ++ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm ++ ++ endif ++ ++c check value of cutoff and reset if necessary ++ ++ if(imcon.gt.0)then ++ ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 ++ if(imcon.eq.5)width=cell(1)/2.d0 ++ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 ++ ++c halt program if potential cutoff exceeds cell width ++ ++ if(rcut.gt.width)call error(idnode,95) ++ ++ endif ++ ++c decide on whether to use link cells for verlet list constructor ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ ++ ilx=int(celprp(7)/(rcut+delr)) ++ ily=int(celprp(8)/(rcut+delr)) ++ ilz=int(celprp(9)/(rcut+delr)) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(lneut.and.ncells.le.36)loglnk=.false. ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(loglnk.and.ncells.gt.mxcell)then ++ ++ dum1=dble(ncells) ++ dum2=dble(mxcell) ++ call warning(idnode,90,dum1,dum2,dum2) ++ loglnk=.false. ++ ++ endif ++ ++ endif ++ ++ if(loglnk.and.idnode.eq.0) ++ x write(nrite,"(/,/,' link cell algorithm in use')") ++ ++ if(idnode.eq.0)close (nconf) ++ ++c ensure PBC compliance of starting structure ++ ++ if(keyres.eq.0.and.imcon.gt.0)then ++ ++ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ ++c error exit for config file read ++ ++ 100 call abort_config_read(2,idnode,nconf) ++ ++ end subroutine sysgen ++ ++ subroutine sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the REVIVE file data and ++c defining the initial thermodynamic and structural accumulators. ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc ++ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc ++ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw ++ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm ++ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost ++ real(8) chit_shl ++ ++c read or initialise accumulator arrays ++ ++ if(keyres.eq.1.and.idnode.eq.0)then ++ ++c read accumulator data from dump file ++ ++ open(nrest,file='REVOLD',form='unformatted') ++ ++ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, ++ x tboost,chit_shl ++ read(nrest) virtot,vircom,eta,strcns,strbod ++ read(nrest) stpval ++ read(nrest) sumval ++ read(nrest) ssqval ++ read(nrest) zumval ++ read(nrest) ravval ++ read(nrest) stkval ++ read(nrest) xx0,yy0,zz0 ++ read(nrest) xxs,yys,zzs ++ ++ if(lgofr) read(nrest)rdf ++ if(lzden) read(nrest)zdens ++ ++ nstep=nint(dnstep) ++ numacc=nint(dnumac) ++ numrdf=nint(dnumrd) ++ nzden=nint(dnzden) ++ close (nrest) ++ ++ else ++ ++c initialise step counters ++ ++ nstep=0 ++ numacc=0 ++ numrdf=0 ++ nzden=0 ++ ++c initialise temperature and pressure coupling parameters ++c and integral for conserved quantity ++ ++ chit=0.d0 ++ chip=0.d0 ++ conint=0.d0 ++ virtot=0.d0 ++ vircom=0.d0 ++ chit_shl=0.d0 ++ do i=1,9 ++ ++ eta(i)=0.d0 ++ strcns(i)=0.d0 ++ strbod(i)=0.d0 ++ ++ enddo ++ ++c initialise accumulator arrays ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ zumval(i)=0.d0 ++ ravval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ xxs(i)=0.d0 ++ yys(i)=0.d0 ++ zzs(i)=0.d0 ++ ++ enddo ++ ++ do j=1,mxnstk ++ ++ do i=1,mxstak ++ ++ stkval(i,j)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ zdens(j,i)=0.d0 ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c put shells on cores at start ++ ++ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) ++ x call put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c if restart then broadcast stored variables via a global sum ++ ++ if(keyres.eq.1.and.mxnode.gt.1)then ++ ++ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) ++ x call error(idnode,186) ++ ++ buffer(1)=chit ++ buffer(2)=chip ++ buffer(3)=conint ++ buffer(4)=dble(nstep) ++ buffer(5)=dble(numacc) ++ buffer(6)=dble(numrdf) ++ buffer(7)=dble(nzden) ++ buffer(8)=tboost ++ buffer(9)=virtot ++ buffer(10)=vircom ++ buffer(11)=chit_shl ++ call gdsum(buffer(1),11,buffer(12)) ++ chit=buffer(1) ++ chip=buffer(2) ++ conint=buffer(3) ++ nstep=nint(buffer(4)) ++ numacc=nint(buffer(5)) ++ numrdf=nint(buffer(6)) ++ nzden=nint(buffer(7)) ++ tboost=buffer(8) ++ virtot=buffer(9) ++ vircom=buffer(10) ++ chit_shl=buffer(11) ++ ++ call gdsum(eta,9,buffer) ++ call gdsum(strcns,9,buffer) ++ call gdsum(strbod,9,buffer) ++ call gdsum(stpval,mxnstk,buffer) ++ call gdsum(sumval,mxnstk,buffer) ++ call gdsum(ssqval,mxnstk,buffer) ++ call gdsum(zumval,mxnstk,buffer) ++ call gdsum(ravval,mxnstk,buffer) ++ call gdsum(stkval,mxnstk*mxstak,buffer) ++ call gdsum(xx0,natms,buffer) ++ call gdsum(yy0,natms,buffer) ++ call gdsum(zz0,natms,buffer) ++ call gdsum(xxs,natms,buffer) ++ call gdsum(yys,natms,buffer) ++ call gdsum(zzs,natms,buffer) ++ ++c for rdf table - broadcast and normalise ++ ++ if(lgofr)then ++ ++ do k=1,mxxtyp ++ ++ call gdsum(rdf(1,k),mxrdf,buffer) ++ ++ do j=1,mxrdf ++ rdf(j,k)=rdf(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do k=1,mxatyp ++ ++ call gdsum(zdens(1,k),mxzdn,buffer) ++ ++ do j=1,mxzdn ++ zdens(j,k)=zdens(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities and long-range corrections ++ ++ elrc=0.d0 ++ virlrc=0.d0 ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 ++ ++ call lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) ++ ++ if(lmetab.or.ntpmet.eq.0)then ++ ++ elrcm(0)=0.d0 ++ vlrcm(0)=0.d0 ++ ++ else ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 ++ ++ return ++ end subroutine sysinit ++ ++ subroutine systemp ++ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for setting the initial system temperature ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl ++ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq ++ ++c number of degrees of freedom ++c 3 for com translation ++c 3 for angular momentum about origin (non-periodic systems only) ++ ++ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre ++ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 ++ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) ++ degshl=dble(3*ntshl) ++ ++c lose one degree of freedom if temperature constrained ++c gaussian constraints ++ ++c if(keyens.eq.1)degfre=degfre-1.d0 ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, ++ x ' rotational degrees of freedom ',f20.0,/, ++ x ' shell pseudo degrees of freedom',f20.0)") ++ x degfre,degrot,degshl ++ if(degfre.lt.1.d0)call error(idnode,350) ++ ++c define reciprocal masses of atoms ++ ++ do i=1,natms ++ ++ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then ++ ++ rmass(i)=0.d0 ++ weight(i)=0.d0 ++ ++ else ++ ++ rmass(i)=1.d0/weight(i) ++ ++ endif ++ ++ enddo ++ ++c generate starting velocities ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++ if(keyres.eq.0)then ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ elseif(keyres.eq.1.or.keyres.eq.3)then ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ elseif(keyres.eq.2)then ++ ++ if(ngrp.gt.0)then ++ ++ call vscaleg ++ x (idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ elseif(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c print out sample of initial configuration ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'sample of starting configuration',/)") ++ ++ io=(natms+19)/20 ++ if((levcfg.le.1).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") ++ if((levcfg.eq.2).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', ++ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") ++ ++ do i=1,natms,io ++ ++ if(levcfg.le.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) ++ ++ elseif(levcfg.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i), ++ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine systemp ++ ++ subroutine sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine defining global bookkeeping ++c arrays ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost ++ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i ++ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl ++ integer ntghost,natms2 ++ real(8) degfre,degrot ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c neutral group bookkeeping ++ ++ call neutbook(lneut,idnode,natms,nneut) ++ ++c rigid body bookkeeping ++ ++ call quatbook ++ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, ++ x ntfree,degfre,degrot) ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost ++ ++ endif ++ ++c construct list of excluded pair interactions ++ ++ if(lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ call excludeneu(idnode,mxnode,nneut) ++ ++ elseif(.not.lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ ++ if(loglnk)then ++ ++ call exclude_link(idnode,mxnode,ntpmls) ++ ++ else ++ ++ call exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++ endif ++ ++ endif ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost ++ ++ endif ++ ++c construct interaction lists for bonded forces ++ ++ call intlist ++ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c adaptations for solvation and excitation simulations ++ ++ if(lsolva.or.lghost)then ++ ++ natmsf=0 ++ natmsl=0 ++ natm_sol(:)=0 ++ const_sol(:)=numcon(:)*nummols(:) ++ rigid_sol(:)=numgrp(:)*nummols(:) ++ ++ if(ngrp.eq.0)then ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ else ++ ++ ii=1 ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstgot_sol(ii).eq.isol)then ++ ii=ii+1 ++ else ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ ++ endif ++ ++ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost ++ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) ++ ++ endif ++ ++ return ++ end subroutine sysbook ++ ++ subroutine define_units(idnode,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting energy units ++c ++c copyright - daresbury laboratory ++c author - w. smith august 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,idum,i ++ real(8) engunit ++ logical blank ++ ++ blank=.true. ++ ++ do i=6,lenrec ++ if(record(i).ne.' ')blank=.false. ++ enddo ++ ++ if(blank)then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal ', ++ x 'units ')") ++ ++ elseif(findstring('ev',record,idum))then ++ ++ engunit=9648.530821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=electron volts ')") ++ ++ elseif(findstring('kev',record,idum))then ++ ++ engunit=9648530.821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kilo electron volts ')") ++ ++ elseif(findstring('kcal',record,idum))then ++ ++ engunit=418.4d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kcal/ mol ')") ++ ++ elseif(findstring('kj',record,idum))then ++ ++ engunit=1.d2 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kjoule/mol ')") ++ ++ elseif(findstring('k',record,idum))then ++ ++ engunit=boltz ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kelvin ')") ++ ++ elseif(findstring('internal',record,idum))then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal', ++ x ' units ')") ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(a)')record ++ call error(idnode,5) ++ ++ endif ++ ++ return ++ end subroutine define_units ++ ++ subroutine quatbook ++ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, ++ x degfre,degrot) ++ ++c************************************************************************** ++c ++c dl_poly subroutine for setting up bookkeeping for rigid bodies ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c************************************************************************* ++ ++ implicit none ++ ++ logical safe,pass1,pass2,linear,lsolva ++ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree ++ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id ++ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij ++ integer fngrp,lngrp ++ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 ++ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz ++ real(8) rotlim,rrr ++ ++ integer, allocatable :: ind(:,:),lstgot(:) ++ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) ++ ++ data fail/0,0,0,0,0/ ++ ++c allocate working arrays ++ ++ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) ++ allocate (accum(mxungp),stat=fail(5)) ++ do i=1,5 ++ if(fail(i).ne.0)call error(idnode,1790) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ igrp=0 ++ jgrp=0 ++ kgrp=0 ++ isite=0 ++ jr=0 ++ jt=0 ++ safe=.true. ++ degfre=0.d0 ++ degrot=0.d0 ++ ++c rigid body identifier ++ ++ do i=1,natms ++ lstbod(i)=0 ++ enddo ++ ++c number of rigid groups in system ++ ++ ngrp=0 ++ do itmols=1,ntpmls ++ ngrp=ngrp+nummols(itmols)*numgrp(itmols) ++ enddo ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if(igrp.le.mxgrp)then ++ ++ lstgtp(igrp)=listyp(lgrp+kgrp) ++ id=listyp(lgrp+kgrp) ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then ++ ++ jgrp=jgrp+1 ++ ++ do jj=1,numgsit(id) ++ ++ jr=jr+1 ++ jt=jt+1 ++ ++ if(jr.le.mxatms.and.jt.le.mxatms)then ++ ++ lstrgd(jr)=lstgst(id,jj)+isite ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do jj=1,numgsit(id) ++ ++ jt=jt+1 ++ if(jt.le.mxatms)then ++ ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,304) ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kgrp=kgrp+numgrp(itmols) ++ ++ enddo ++ ++ if(ngrp.eq.0)then ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0)then ++ ++ j=j+1 ++ lstfre(j)=i ++ ++ endif ++ ++ enddo ++ ntfree=j ++ ++ else ++ ++c centre of mass of groups ++c assumes group dimensions are smaller than half box width ++ ++ do i=1,natms ++ lstme(i)=0 ++ enddo ++ ++ do id=1,mxungp ++ gmass(id)=0.d0 ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ safe=.false. ++ if(abs(gmass(id)).lt.1.d-10)safe=.true. ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ xxt(jr)=xxx(i)-txx(ig) ++ yyt(jr)=yyy(i)-tyy(ig) ++ zzt(jr)=zzz(i)-tzz(ig) ++ if(safe)gmass(id)=gmass(id)+weight(i) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) ++ ++ enddo ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c global communications ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++c make sure all nodes have same copy of gmass ++ ++ if(mxnode.gt.1)then ++ ++ do id=1,mxungp ++ ++ accum(id)=0.d0 ++ if(gmass(id).gt.0.d0)accum(id)=1.d0 ++ ++ enddo ++ ++ call gdsum(gmass(1),mxungp,buffer(1)) ++ call gdsum(accum(1),mxungp,buffer(1)) ++ ++ do id=1,mxungp ++ ++ dnorm=max(1.d0,accum(id)) ++ gmass(id)=gmass(id)/dnorm ++ ++ enddo ++ ++ endif ++ ++c find a group of each type on this node to ++c find principal axis system of the group type ++ ++ do id=1,mxungp ++ ++ jr=0 ++ ij=0 ++ safe=.false. ++ ++ do while(.not.safe.and.ij.lt.ngrp) ++ ++ ij=ij+1 ++ jr=jr+numgsit(lstgtp(ij)) ++ if(lstgtp(ij).eq.id)safe=.true. ++ ++ enddo ++ ++ if(safe)then ++ ++c rotational inertia accumulator ++ ++ do k=1,3 ++ ++ do kk=1,3 ++ ++ rotinr(k,kk)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ij) ++ yyt(jr)=yyy(i)-gcmy(ij) ++ zzt(jr)=zzz(i)-gcmz(ij) ++ ++ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) ++ ++ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) ++ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) ++ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) ++ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) ++ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) ++ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) ++ ++ enddo ++ ++ rotinr(2,1)=rotinr(1,2) ++ rotinr(3,1)=rotinr(1,3) ++ rotinr(3,2)=rotinr(2,3) ++ ++ call jacobi(rotinr,rot1,3) ++ ++ rot(1)=rot1(1,1) ++ rot(4)=rot1(2,1) ++ rot(7)=rot1(3,1) ++ rot(2)=rot1(1,2) ++ rot(5)=rot1(2,2) ++ rot(8)=rot1(3,2) ++ rot(3)=rot1(1,3) ++ rot(6)=rot1(2,3) ++ rot(9)=rot1(3,3) ++ ++c rotational inertia accumulators ++ ++ rotinx(id,1)=0.d0 ++ rotiny(id,1)=0.d0 ++ rotinz(id,1)=0.d0 ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++c site positions in principal axis system ++ ++ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) ++ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) ++ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) ++ ++c impose rounding ++ ++ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 ++ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 ++ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 ++ ++c rotational inertia tensor of group type ++ ++ rotinx(id,1)=rotinx(id,1)+ ++ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) ++ rotiny(id,1)=rotiny(id,1)+ ++ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) ++ rotinz(id,1)=rotinz(id,1)+ ++ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) ++ ++ enddo ++ ++c set axis system such that: Ixx >=Iyy >=Izz ++ ++ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) ++ ++ if(rotxyz.ge.rotinx(id,1))then ++ ++ if(rotiny(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gyy(id,j) ++ gyy(id,j)=-a1 ++ ++ enddo ++ ++ rotiny(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ elseif(rotinz(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ rotinz(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ endif ++ ++ endif ++ ++ if(rotinz(id,1).gt.rotiny(id,1))then ++ ++ do j=1,numgsit(id) ++ ++ a1=gyy(id,j) ++ gyy(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ a1=rotinz(id,1) ++ rotinz(id,1)=rotiny(id,1) ++ rotiny(id,1)=a1 ++ ++ endif ++ ++c set up principal axis system in terms of site positions ++ ++c test for (near) linear unit ++ ++ ill=0 ++ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) ++ ++ if(rtall.gt.1.d-5)then ++ rotall=rtall ++ else ++ rotall=1.d0 ++ endif ++ ++ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) ++ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall ++ ++ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ ++ if(ill.ge.2)then ++ ++c point particle only ++ ++ ind(id,1)=1 ++ ind(id,2)=1 ++ ind(id,3)=1 ++ ++ do jj=1,9 ++ gaxs(id,jj)=0.d0 ++ enddo ++ ++ elseif(ill.eq.1)then ++ ++c linear molecule ++ ++ ind(id,1)=1 ++ ind(id,2)=2 ++ ind(id,3)=1 ++ ++ aa(1)=gxx(id,1)-gxx(id,2) ++ aa(4)=gyy(id,1)-gyy(id,2) ++ aa(7)=gzz(id,1)-gzz(id,2) ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++ call invert(aa,bb,det) ++ ++ if(abs(det).lt.1.d-5)call error(idnode,306) ++ ++ do j=1,9 ++ gaxs(id,j)=bb(j) ++ enddo ++ ++ elseif(ill.eq.0)then ++ ++c non-linear molecule ++ ++ i1=1 ++ i2=1 ++ i3=1 ++ pass1=.true. ++ dettest=1.d-1 ++ ++ do while(pass1.and.i2.lt.numgsit(id)-1) ++ ++ i2=i2+1 ++ i3=i2 ++ pass2=.true. ++ ++ do while(pass2.and.i3.lt.numgsit(id)) ++ ++ i3=i3+1 ++ ++ aa(1)=gxx(id,i1)-gxx(id,i2) ++ aa(4)=gyy(id,i1)-gyy(id,i2) ++ aa(7)=gzz(id,i1)-gzz(id,i2) ++ aa(2)=gxx(id,i1)-gxx(id,i3) ++ aa(5)=gyy(id,i1)-gyy(id,i3) ++ aa(8)=gzz(id,i1)-gzz(id,i3) ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c invert matrix ++ ++ call invert(aa,bb,det) ++ ++c check on size of determinant - to see if the 3 sites are ++c too close to being linear for safety. ++ ++ pass2=abs(det).lt.dettest ++ ++ enddo ++ ++ pass1=abs(det).lt.dettest ++ ++ enddo ++ ++ if(abs(det).lt.dettest)call error(idnode,306) ++ ++c store indices used ++ ++ ind(id,1)=i1 ++ ind(id,2)=i2 ++ ind(id,3)=i3 ++ ++c store coefficients ++ ++ do j=1,9 ++ ++ gaxs(id,j)=bb(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check that rigid unit does not contain frozen atoms ++ ++ safe=.true. ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ if(lstfrz(i).ne.0)safe=.false. ++ ++ enddo ++ ++ enddo ++ ++c global check on error condition ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,360) ++ ++c quaternions for all rigid groups in system ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ i1=lstrgd(jr+ind(id,1)) ++ i2=lstrgd(jr+ind(id,2)) ++ i3=lstrgd(jr+ind(id,3)) ++ ++ jr=jr+numgsit(id) ++ ++c group basis vectors ++ ++ aa(1)=xxx(i1)-xxx(i2) ++ aa(4)=yyy(i1)-yyy(i2) ++ aa(7)=zzz(i1)-zzz(i2) ++ ++ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) ++ ++ if(rotmin(id).gt.1.d-5)then ++ ++ aa(2)=xxx(i1)-xxx(i3) ++ aa(5)=yyy(i1)-yyy(i3) ++ aa(8)=zzz(i1)-zzz(i3) ++ ++ else ++ ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ endif ++ ++ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c group rotational matrix ++ ++ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) ++ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) ++ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) ++ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) ++ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) ++ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) ++ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) ++ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) ++ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) ++ ++c determine quaternions from rotational matrix ++ ++ aq=rot(1)+rot(5) ++ bq=rot(2)-rot(4) ++ cq=rot(6)-rot(8) ++ dq=rot(2)+rot(4) ++ eq=rot(3)+rot(7) ++ fq=rot(6)+rot(8) ++ gq=rot(3)-rot(7) ++ hq=rot(1)-rot(5) ++ ++ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) ++ ++ if(q0(ig).gt.1.d-4)then ++ ++ q1(ig)=-0.25d0*cq/q0(ig) ++ q2(ig)=0.25d0*gq/q0(ig) ++ q3(ig)=-0.25d0*bq/q0(ig) ++ ++ else ++ ++ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q1(ig).gt.1.d-4)then ++ ++ q2(ig)=0.25d0*dq/q1(ig) ++ q3(ig)=0.25d0*eq/q1(ig) ++ ++ else ++ ++ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q2(ig).gt.1.d-4)then ++ ++ q3(ig)=0.25d0*fq/q2(ig) ++ ++ else ++ ++ q3(ig)=1.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c normalise quaternions ++ ++ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) ++ q0(ig)=rnorm*q0(ig) ++ q1(ig)=rnorm*q1(ig) ++ q2(ig)=rnorm*q2(ig) ++ q3(ig)=rnorm*q3(ig) ++ ++ enddo ++ ++c test for redundant degrees of freedom ++c and ensure rotational inertias are non-zero ++ ++ degrot=0.d0 ++ ++ if(lsolva)then ++ degrot_sol(:)=0.d0 ++ endif ++ ++ do ig=1,ngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ enddo ++ ++c rotational degrees of freedom and rigid body contribution ++c to total degrees of freedom ++ ++ degrot=degrot+dble(ngrp)*3.d0 ++ degfre=degrot+dble(ngrp)*3.d0 ++ ++ if(lsolva)then ++ ++ fngrp=1 ++ lngrp=0 ++ ++ do itmols=1,mxtmls ++ ++ lngrp=lngrp+nummols(itmols)*numgrp(itmols) ++ ++ do ig=fngrp,lngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ enddo ++ ++ fngrp=lngrp+1 ++ ++ enddo ++ ++ endif ++ ++c summarise results ++ ++ if(idnode.eq.0)then ++ ++ if(gmass(1).gt.0.d0)then ++ ++ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' ++ ++ do id=1,mxungp ++ ++ if(gmass(id).gt.0.d0)then ++ ++ write(nrite,'(/,a,i10)')' group of type ',id ++ write(nrite,'(12x,a,f20.10)')' total mass ', ++ x gmass(id) ++ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', ++ x rotinx(id,1),rotiny(id,1),rotinz(id,1) ++ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', ++ x 'b coord','c coord' ++ do j=1,numgsit(id) ++ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), ++ x gyy(id,j),gzz(id,j) ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c find number of unique groups ++ ++ ngp=0 ++ do ig=1,ngrp ++ ngp=max(ngp,lstgtp(ig)) ++ enddo ++ ++c calculate reciprocal of rotational inertias ++ ++ do id=1,ngp ++ ++ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1))*1.d-5 ++ ++ if(rotinx(id,1).lt.rotlim)then ++ rotinx(id,2)=0.d0 ++ else ++ rotinx(id,2)=1.d0/rotinx(id,1) ++ endif ++ ++ if(rotiny(id,1).lt.rotlim)then ++ rotiny(id,2)=0.d0 ++ else ++ rotiny(id,2)=1.d0/rotiny(id,1) ++ endif ++ ++ if(rotinz(id,1).lt.rotlim)then ++ rotinz(id,2)=0.d0 ++ else ++ rotinz(id,2)=1.d0/rotinz(id,1) ++ endif ++ ++ enddo ++ ++c Check of quaternion set up with atomic positions ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c group type ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ ++ txx(jr)=xxx(i)-xxt(i) ++ tyy(jr)=yyy(i)-yyt(i) ++ tzz(jr)=zzz(i)-zzt(i) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,txx,tyy,tzz) ++ ++c set tolerance for testing quaternion setup. ++ ++ rsq=0.d0 ++ tol=1.d-2 ++ ++ do i=1,jr ++ ++ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ if(rrr.gt.tol)then ++ ++ rsq=rrr ++ ++ endif ++ ++ enddo ++ ++c exit if error in set up ++ ++ safe=.true. ++ if(rsq.gt.tol)safe=.false. ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)call error(idnode,310) ++ ++c sort lstgot into ascending order ++ ++ call shellsort(jt,lstgot) ++ ++c check that no site is in more than 1 rigid group ++ ++ i=1 ++ safe=.true. ++ do while(i.lt.jt) ++ ++ i=i+1 ++ linear=.true. ++ do while(linear) ++ ++ linear=.false. ++ ++ if(lstgot(i).eq.lstgot(i-1))then ++ ++ linear=.true. ++ safe=.false. ++ jt=jt-1 ++ ++ do j=i,jt ++ lstgot(j)=lstgot(j+1) ++ enddo ++ ++ endif ++ ++ if(i.ge.jt)linear=.false. ++ ++ enddo ++ ++ enddo ++ ++ if(.not.safe)call error(idnode,320) ++ ++c list of 'free' sites ++ ++ ii=1 ++ jj=0 ++ do i=1,natms ++ ++ if(lstgot(ii).eq.i)then ++ ++ ii=ii+1 ++ ++ else ++ ++ if(lstfrz(i).eq.0)then ++ jj=jj+1 ++ lstfre(jj)=i ++ endif ++ ++ endif ++ ++ enddo ++ ++c number of free sites ++ ++ ntfree=jj ++ ++c list of atoms integrated on this node ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ jr=jr+numgsit(id) ++ ++ enddo ++ ++ do i=1,jr ++ lstme(i)=lstrgd(i) ++ enddo ++ ++c block parameters for free atoms ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do i=ifre1,ifre2 ++ ++ jr=jr+1 ++ lstme(jr)=lstfre(i) ++ ++ enddo ++ ++c exchange quaternion data with other nodes ++ ++ if(mxnode.gt.1)call merge4 ++ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++ if(lsolva)lstgot_sol(:)=lstgot(:) ++ ++c deallocate work arrays ++ ++ deallocate (ind,lstgot,stat=fail(1)) ++ deallocate (txx,tyy,tzz,stat=fail(2)) ++ deallocate (xxt,yyt,zzt,stat=fail(3)) ++ deallocate (gaxs,rotmin,stat=fail(4)) ++ deallocate (accum,stat=fail(5)) ++ ++ return ++ end subroutine quatbook ++ ++ subroutine abort_field_read(kode,idnode,nfield) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting FIELD file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nfield ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(kode.eq.1)then ++ ++c end of field file error exit ++ ++ call error(idnode,52) ++ ++ elseif(kode.eq.2)then ++ ++c unrecognised directive in field file ++ ++ call error(idnode,4) ++ ++ endif ++ ++ return ++ end subroutine abort_field_read ++ ++ subroutine abort_control_read(kode,idnode,nread) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nread ++ ++ if(idnode.eq.0)close (nread) ++ ++ if(kode.eq.1)then ++ ++c end of control file error exit ++ ++ call error(idnode,53) ++ ++ elseif(kode.eq.2)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,0) ++ ++ endif ++ ++ return ++ end subroutine abort_control_read ++ ++ subroutine abort_config_read(kode,idnode,nconf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nconf ++ ++ if(idnode.eq.0)close (nconf) ++ ++ if(kode.eq.1)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,54) ++ ++ elseif(kode.eq.2)then ++ ++c end of config file error exit ++ ++ call error(idnode,55) ++ ++ endif ++ ++ return ++ end subroutine abort_config_read ++ ++ subroutine neutbook(lneut,idnode,natms,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for neutral group bookkeeping ++c ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lneut,safe ++ integer idnode,natms,nneut,i ++ ++ safe=.true. ++ ++c neutral group bookkeeping: sites must be listed consecutively ++ ++ if(lneut)then ++ ++ if(lstneu(1).ne.1)call error(idnode,230) ++ ++ neulst(1)=1 ++ nneut=1 ++ ++ do i=2,natms ++ ++ safe=.false. ++ if(lstneu(i).eq.lstneu(i-1))safe=.true. ++ if(lstneu(i).eq.lstneu(i-1)+1)then ++ ++ safe=.true. ++ nneut=nneut+1 ++ if(nneut.gt.mxneut)call error(idnode,220) ++ neulst(nneut)=i ++ ++ endif ++ ++ if(.not.safe)call error(idnode,230) ++ ++ enddo ++ ++ neulst(nneut+1)=natms+1 ++ ++ endif ++ ++ return ++ ++ end subroutine neutbook ++ ++ subroutine intlist ++ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the interaction lists ++c for the entire simulated system ++c ++c parallel replicated dat version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,safe1,lcnb,lchk,lfail ++ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons ++ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf ++ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle ++ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths ++ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 ++ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum ++ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 ++ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 ++ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle ++ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp ++ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail ++ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail ++ real(8) tol ++ ++ integer, allocatable :: itest(:),index(:),kscons(:) ++ integer, allocatable :: msite(:),mconst(:),listin(:) ++ ++ dimension fail(4) ++ ++ data fail/0,0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) ++ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) ++ allocate (listin(mxatms),stat=fail(3)) ++ allocate (kscons(0:mxproc-1),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1800) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ ibonds=0 ++ jbonds=0 ++ kbonds=0 ++ ipmf=0 ++ jpmf=0 ++ iangle=0 ++ jangle=0 ++ kangle=0 ++ idihed=0 ++ jdihed=0 ++ kdihed=0 ++ iinver=0 ++ jinver=0 ++ kinver=0 ++ iteths=0 ++ jteths=0 ++ kteths=0 ++ ishels=0 ++ jshels=0 ++ kshels=0 ++ safe=.true. ++ safe1=.true. ++ ++c find total number of bonds,pmf constraints,bond constraints, ++c angles,dihedrals,inversions, tethers,core-shells, in system ++c - ignoring frozen atoms ++ ++ ntbon0=0 ++ ntpmf0=0 ++ ntcon0=0 ++ ntang0=0 ++ ntdih0=0 ++ ntinv0=0 ++ nttet0=0 ++ ntshl0=0 ++ nscons=0 ++ ntcons=0 ++ ++ do itmols=1,ntpmls ++ ++ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) ++ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) ++ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) ++ ntang0=ntang0+nummols(itmols)*numang(itmols) ++ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) ++ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) ++ nttet0=nttet0+nummols(itmols)*numteth(itmols) ++ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) ++ ++ enddo ++ ++ isite=0 ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ ++c first and last index of bonds, angles etc for this node ++ ++ ibnd1=(idnode*ntbon0)/mxnode+1 ++ ibnd2=((idnode+1)*ntbon0)/mxnode ++ ++ ipmf1=(idnode*ntpmf0)/mxnode+1 ++ ipmf2=((idnode+1)*ntpmf0)/mxnode ++ ntpmf=ntpmf0 ++ nspmf=ipmf2+1-ipmf1 ++ ++ iang1=(idnode*ntang0)/mxnode+1 ++ iang2=((idnode+1)*ntang0)/mxnode ++ ++ idih1=(idnode*ntdih0)/mxnode+1 ++ idih2=((idnode+1)*ntdih0)/mxnode ++ ++ iinv1=(idnode*ntinv0)/mxnode+1 ++ iinv2=((idnode+1)*ntinv0)/mxnode ++ ++ itet1=(idnode*nttet0)/mxnode+1 ++ itet2=((idnode+1)*nttet0)/mxnode ++ ++ ishl1=(idnode*ntshl0)/mxnode+1 ++ ishl2=((idnode+1)*ntshl0)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct bond constraint list later ++c construct chemical bond interaction list ++ ++ do lbonds=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then ++ ++ jbonds=jbonds+1 ++ if(jbonds.le.mxbond)then ++ ++ listbnd(jbonds,1)=lbonds+kbonds ++ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) ++ x +isite ++ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,31) ++ ++c construct pmf site lists - no exclusions ++ ++ do lpmf=1,numpmf(itmols) ++ ++ ipmf=ipmf+1 ++ ++ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then ++ ++ jpmf=jpmf+1 ++ if(jpmf.le.mspmf)then ++ ++ nnn=npmf(1)+npmf(2) ++ if(nnn.le.mxspmf)then ++ ++ do jj=1,npmf(1)+npmf(2) ++ lstpmf(jj,jpmf)=indpmf(jj)+isite ++ enddo ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ else ++ ++ safe1=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe1) ++ if(.not.safe1)call error(idnode,458) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,460) ++ ++c construct valence angle interaction list ++ ++ do langle=1,numang(itmols) ++ ++ iangle=iangle+1 ++ ++ if(iangle.ge.iang1.and.iangle.le.iang2)then ++ ++ jangle=jangle+1 ++ if(jangle.le.mxangl)then ++ ++ listang(jangle,1)=langle+kangle ++ listang(jangle,2)=lstang(langle+kangle,1) ++ x +isite ++ listang(jangle,3)=lstang(langle+kangle,2) ++ x +isite ++ listang(jangle,4)=lstang(langle+kangle,3) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,51) ++ ++c construct dihedral angle interaction list ++ ++ do ldihed=1,numdih(itmols) ++ ++ idihed=idihed+1 ++ ++ if(idihed.ge.idih1.and.idihed.le.idih2)then ++ ++ jdihed=jdihed+1 ++ if(jdihed.le.mxdihd)then ++ ++ listdih(jdihed,1)=ldihed+kdihed ++ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) ++ x +isite ++ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) ++ x +isite ++ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) ++ x +isite ++ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,61) ++ ++c construct inversion potential list ++ ++ do linver=1,numinv(itmols) ++ ++ iinver=iinver+1 ++ ++ if(iinver.ge.iinv1.and.iinver.le.iinv2)then ++ ++ jinver=jinver+1 ++ if(jinver.le.mxinv)then ++ ++ listinv(jinver,1)=linver+kinver ++ listinv(jinver,2)=lstinv(linver+kinver,1) ++ x +isite ++ listinv(jinver,3)=lstinv(linver+kinver,2) ++ x +isite ++ listinv(jinver,4)=lstinv(linver+kinver,3) ++ x +isite ++ listinv(jinver,5)=lstinv(linver+kinver,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,77) ++ ++c construct tethered atoms interaction list ++ ++ do lteths=1,numteth(itmols) ++ ++ iteths=iteths+1 ++ ++ if(iteths.ge.itet1.and.iteths.le.itet2)then ++ ++ jteths=jteths+1 ++ if(jteths.le.msteth)then ++ ++ listtet(jteths,1)=lteths+kteths ++ listtet(jteths,2)=lsttet(lteths+kteths)+isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,63) ++ ++c construct core-shell list ++ ++ do lshels=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ if(ishels.ge.ishl1.and.ishels.le.ishl2)then ++ ++ jshels=jshels+1 ++ if(jshels.le.mxshl)then ++ ++ listshl(jshels,1)=lshels+kshels ++ listshl(jshels,2)=lstshl(lshels+kshels,1) ++ x +isite ++ listshl(jshels,3)=lstshl(lshels+kshels,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,59) ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kbonds=kbonds+numbonds(itmols) ++ kangle=kangle+numang(itmols) ++ kdihed=kdihed+numdih(itmols) ++ kinver=kinver+numinv(itmols) ++ kteths=kteths+numteth(itmols) ++ kshels=kshels+numshl(itmols) ++ ++ enddo ++ ++c store array counters for bookkeeping ++ ++ ntbond=ibonds ++ ntangl=iangle ++ ntdihd=idihed ++ ntinv=iinver ++ ntteth=iteths ++ ntshl=ishels ++ ++c pass bond constraint information to other nodes ++ ++ if(ntcon0.gt.0)then ++ ++ ntcons=ntcon0 ++ ++c find starting site no. and constraint no. for each molec. type ++ ++ msite(1)=0 ++ mconst(1)=0 ++ ++ do itmols=2,ntpmls ++ ++ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* ++ x nummols(itmols-1) ++ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) ++ ++ enddo ++ ++c sort molecules into ascending order of number of constraints ++ ++ do i=1,ntpmls ++ ++ itest(i)=numcon(i) ++ index(i)=0 ++ ++ enddo ++ ++ call shellsort(ntpmls,itest) ++ ++ do i=1,ntpmls ++ ++ lchk=.true. ++ do j=1,ntpmls ++ ++ if(itest(i).eq.numcon(j))then ++ ++ if(lchk)then ++ index(i)=j ++ lchk=.false. ++ ++ endif ++ ++ do ii=1,i-1 ++ if(index(ii).eq.j)lchk=.true. ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c load balance to within 10% ++ ++ tol=1.0d0+(0.10d0)/2.d0 ++ kcons=(ntcons)/mxnode ++ ntmp=0 ++ ++c find smallest constrained molecule to allocate to a node ++ ++ do i=1,ntpmls ++ ++ if(ntmp.le.mxnode)then ++ ++ if(numcon(index(i)).gt.0)then ++ ntmp=ntmp+nummols(index(i)) ++ klo=max(0,kcons-numcon(index(i))/2) ++ khi=klo+numcon(index(i))+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++c reset hi/lo limits if molecules contain too many constraints ++ ++ if(dble(khi)/dble(max(1,klo)).gt.tol)then ++ klo=nint(dble(kcons)/tol) ++ khi=nint(dble(kcons)*tol)+1 ++ endif ++ ++c store lo value for later ++ ++ klo0=klo ++ ++c begin assignment of constraints ---------------------------------- ++ ++ ifail=-1 ++ lfail=.true. ++ do while(lfail) ++ ++ ifail=ifail+1 ++ ++ if(ifail.gt.ntpmls)then ++ call error(idnode,432) ++ endif ++ ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ lconst=0 ++ ++c zero running totals of constraints on each processor ++ ++ do id=0,mxnode-1 ++ kscons(id)=0 ++ enddo ++ ++ iloop=0 ++ lfail=.false. ++ iconst=0 ++ jconst=0 ++ nnode=0 ++ ++c assign difficult molecules in blocks ++ ++ if(ifail.gt.0)then ++ ++ nfail=0 ++ do i=1,ifail ++ ++ ii=ntpmls+1-i ++ nfail=nfail+nummols(index(ii))*numcon(index(ii)) ++ ++ enddo ++ ++c decide on number of processors to split over ++ ++ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) ++ nnode=max(2,nnode) ++ nnode=min(nnode,mxnode) ++ ++c assign to processors 0..nnode-1 ++ ++ do id=0,nnode-1 ++ ++ nscons0=(id*nfail)/nnode+1 ++ nscons1=((id+1)*nfail)/nnode ++ ++ kscons(id)=nscons1+1-nscons0 ++ ++ enddo ++ ++c this processors block ++ ++ nscons0=(idnode*nfail)/nnode+1 ++ nscons1=((idnode+1)*nfail)/nnode ++ ++c assign in blocks ++ ++ do itmols=ntpmls,ntpmls-ifail+1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ ++c construct bond constraint list ++ ++ do lconst=1,numcon(ii) ++ ++ iconst=iconst+1 ++ ++ if(iconst.ge.nscons0.and.iconst.le.nscons1)then ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c assign non-problematic molecules ++ ++ jdnode=mod(nnode+1,mxnode) ++ ++ do itmols=ntpmls-ifail,1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ itry=0 ++ lchk=.true. ++ do while(lchk) ++ ++ if(kscons(jdnode)+icon.le.klo)then ++ ++ if(jdnode.ne.idnode)then ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ else ++ ++c construct bond constraint list ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ do lconst=1,numcon(ii) ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ ++ endif ++ ++ else ++ ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.true. ++ itry=itry+1 ++ ++ endif ++ ++ if(lchk.and.itry.gt.mxnode)then ++ ++ klo=kcons ++ kcons=khi ++ itry=0 ++ iloop=iloop+1 ++ ++ endif ++ ++c split molecule across nodes if have to ++ ++ if(iloop.gt.3)then ++ lfail=.true. ++ kcons=ntcons/mxnode ++ klo=klo0 ++ lchk=.false. ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c check no node has less than minimum number ++ ++ do id=0,mxnode-1 ++ if(kscons(id).lt.klo0)then ++ lfail=.true. ++ endif ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(mxnode.gt.1)call gimax(jconst,1,idum) ++ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') ++ x 'Number of constraints found ',jconst,'Max allowed ',mxcons ++ ++ call error(idnode,41) ++ ++ endif ++ ++ nscons=kscons(idnode) ++ ++ call passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++ endif ++ ++ if(npmf(1).gt.0)then ++ ++ call passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++ endif ++ ++c pass rigid body data ++ ++ lcnb=.false. ++ if(ntcons.gt.0.and.ngrp.gt.0)then ++ ++ call passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, ++ x numgsit) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(itest,index,msite,stat=fail(1)) ++ deallocate(mconst,kscons,listin,stat=fail(2)) ++ ++ return ++ end subroutine intlist ++ ++ subroutine ensemble_selection ++ x (directive,lens,kill,idnode,keyens,mode,taut,taup) ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ensemble and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical kill,lens ++ integer keyens,idnode,idum,mode ++ real(8) taut,taup ++ ++ if(findstring('nve',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'microcanonical ensemble')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('nvt',directive,idum))then ++ ++ if(findstring('evans',directive,idum))then ++ ++ keyens=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Evans Gaussian temperature constraints', ++ x ' in use')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('ber',directive,idum))then ++ ++ keyens=2 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen thermostat', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=3 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('npt',directive,idum))then ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=4 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen isotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=5 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('nst',directive,idum))then ++ ++ mode=0 ++ if(findstring('block',directive,idum))mode=1 ++ if(findstring('surf',directive,idum))mode=2 ++ if(findstring('slab',directive,idum))mode=3 ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=6 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen anisotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=7 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ if(mode.eq.0)then ++ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") ++ elseif(mode.eq.1)then ++ write(nrite, ++ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") ++ elseif(mode.eq.2)then ++ write(nrite, ++ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") ++ elseif(mode.eq.3)then ++ write(nrite, ++ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") ++ endif ++ ++ endif ++ ++ elseif(findstring('pmf',directive,idum))then ++ ++ keyens=8 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'potential of mean force calculation (NVE)')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ call error(idnode,-436) ++ kill=.true. ++ ++ endif ++ ++ return ++ end subroutine ensemble_selection ++ ++ subroutine neb_option ++ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, ++ x opttol,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for NEB option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical lneb,lminopt,endneb,safe ++ integer numneb,idnode,keytol,i,idum ++ real(8) sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ lminopt=.true. ++ lneb=.true. ++ endneb=.false. ++ numneb=intstr(directive,lenrec,idum) ++ if(numneb.eq.0)numneb=1 ++ numneb=min(maxneb,numneb) ++ ++ hyp_units=1.d0 ++ do while(.not.endneb) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endneb',directive,idum))then ++ endneb=.true. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('basin_1',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_1(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('basin_2',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_2(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'NEB calculation controls')") ++ write(nrite,"(/,1x,'identity of basin 1 ', ++ x 10i10)")(bsn_1(i),i=1,numneb) ++ write(nrite,"(1x,'identity of basin 2 ', ++ x 10i10)")(bsn_2(i),i=1,numneb) ++ write(nrite, ++ x "(1x,'NEB spring constant ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x sprneb,opttol,cunit ++ ++ call print_optim(keytol) ++ ++ endif ++ ++c units conversion ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine neb_option ++ ++ subroutine bpd_option ++ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, ++ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for bias potential ++c dynamics option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 directive(lenrec) ++ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo ++ integer keybpd,idnode,nblock,ntrack,keytol,idum ++ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(ltad)call error(idnode,2355) ++ lminopt=.true. ++ lbpd=.true. ++ endbpd=.false. ++ cunit=" dl_poly" ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'bias potential dynamics controls')") ++ ++ if(findstring('dyn',directive,idum))then ++ ++ keybpd=1 ++ hyp_units=energy_unit() ++ ebias=dblstr(directive,lenrec,idum) ++ vmin=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ if(idnode.eq.0)write(nrite,"( ++ x 1x,'dynamics option selected ', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4 ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,cunit ++ ++ elseif(findstring('path',directive,idum))then ++ ++ keybpd=2 ++ nebgo=.true. ++ hyp_units=1.d0 ++ do while(.not.endbpd) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endbpd',directive,idum))then ++ endbpd=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('noneb',directive,idum))then ++ nebgo=.false. ++ elseif(findstring('target',directive,idum))then ++ call getword(seek,directive,8,lenrec) ++ call getword(seek,directive,8,lenrec) ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('ebias',directive,idum))then ++ ebias=dblstr(directive,lenrec,idum) ++ elseif(findstring('vmin',directive,idum))then ++ vmin=dblstr(directive,lenrec,idum) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"( ++ x 1x,'dynamics with path analysis selected', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4, ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'configuration catch radius (A)',f10.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'atom type to be tracked ',2x,a8, ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit ++ if(nebgo)write(nrite, ++ x "(1x,'NEB spring constant ',e12.4)")sprneb ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ endif ++ ++ return ++ end subroutine bpd_option ++ ++ subroutine tad_option ++ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, ++ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for TAD option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe ++ integer idnode,nblock,ntrack,blkout,keytol,idum ++ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(lbpd)call error(idnode,2355) ++ lminopt=.true. ++ ltad=.true. ++ endtad=.false. ++ hyp_units=1.d0 ++ ++ do while(.not.endtad) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endtad',directive,idum))then ++ endtad=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('all',directive,idum))then ++ tadall=.true. ++ if(findstring('false',directive,idum))tadall=.false. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('blackout',directive,idum))then ++ blkout=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('deltad',directive,idum))then ++ deltad=dblstr(directive,lenrec,idum) ++ elseif(findstring('low_temp',directive,idum))then ++ tlow=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'TAD dynamics controls' ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'steps in blackout periods ',i10, ++ x /,1x,'configuration catch radius ',1p,e12.4, ++ x /,1x,'NEB spring constant ',e12.4, ++ x /,1x,'stopping parameter ',e12.4, ++ x /,1x,'target low temperature ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x nblock,ntrack,blkout,catchrad,sprneb,deltad, ++ x tlow,opttol,cunit ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ if(tadall)write(nrite, ++ x "(1x,'option for all basins analysis selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine tad_option ++ ++ subroutine metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for metadynamics option ++c copyright - daresbury laboratory ++c author - w. smith jan 2011 ++c ++c note: default values are set in metafreeze_module ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe ++ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int ++ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt ++ ++ lmetadyn=.true. ++ endmet=.false. ++ ++ do while(.not.endmet) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endmet',directive,idum))then ++ endmet=.true. ++ elseif(findstring('ncolvar',directive,idum))then ++ ncolvar=intstr(directive,lenrec,idum) ++ elseif(findstring('lstein',directive,idum))then ++ lstein=.true. ++ if(findstring('false',directive,idum))lstein=.false. ++ elseif(findstring('ltet',directive,idum))then ++ ltet=.true. ++ if(findstring('false',directive,idum))ltet=.false. ++ elseif(findstring('lglobpe',directive,idum))then ++ lglobpe=.true. ++ if(findstring('false',directive,idum))lglobpe=.false. ++ elseif(findstring('llocpe',directive,idum))then ++ llocpe=.true. ++ if(findstring('false',directive,idum))llocpe=.false. ++ elseif(findstring('globpe_scale',directive,idum))then ++ globpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('locpe_scale',directive,idum))then ++ locpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('nq4',directive,idum))then ++ nq4=intstr(directive,lenrec,idum) ++ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('nq6',directive,idum))then ++ nq6=intstr(directive,lenrec,idum) ++ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('ntet',directive,idum))then ++ ntet=intstr(directive,lenrec,idum) ++ elseif(findstring('meta_step_int',directive,idum))then ++ meta_step_int=intstr(directive,lenrec,idum) ++ elseif(findstring('ref_w_aug',directive,idum))then ++ ref_W_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('h_aug',directive,idum))then ++ h_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('hkey',directive,idum))then ++ hkey=intstr(directive,lenrec,idum) ++ elseif(findstring('wt_dt',directive,idum))then ++ wt_dt=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'metadynamics controls' ++ x /,1x,'total number of collective variables',i10, ++ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, ++ x /,1x,'tetrahedral parameters option (zeta)',l10, ++ x /,1x,'global potential parameter option ',l10, ++ x /,1x,'local potential parameter option ',l10, ++ x /,1x,'global potential param. scale factor',e12.4, ++ x /,1x,'local potential param. scale factor ',e12.4)") ++ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale ++ ++ write(nrite, ++ x "( 1x,'number of Q4 atom pair types ',i10, ++ x /,1x,'number of Q6 atom pair types ',i10, ++ x /,1x,'number of zeta atom triplet types ',i10)") ++ x nq4,nq6,ntet ++ ++ write(nrite, ++ x "( 1x,'gaussian deposition interval ',i10, ++ x /,1x,'reference gaussian height ',e12.4, ++ x /,1x,'gaussian width parameter ',e12.4, ++ x /,1x,'height control key ',i10, ++ x /,1x,'well-tempered control parameter ',e12.4)") ++ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt ++ ++ endif ++ ++ return ++ end subroutine metadyn_option ++ ++ subroutine ewald_selection ++ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, ++ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ewald method and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lhke,lspme,lewald,lcut,lforc,kill,safe ++ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum ++ integer kmaxpow2 ++ real(8) alpha,rcut,eps,tol,fac,tol1 ++ ++ lhke=findstring('hke',directive,idum) ++ lspme=findstring('spme',directive,idum) ++ lewald=findstring('ewald',directive,idum) ++ if(lewald)keyfce=2 ++ if(lspme)keyfce=12 ++ if(lhke)keyfce=14 ++ if(idnode.eq.0)open(nconf,file='CONFIG') ++ call getrec(safe,idnode,nconf) ++ call getrec(safe,idnode,nconf) ++ imcon=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then ++ ++ call error(idnode,-180) ++ kill=.true. ++ ++ endif ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps ++ ++ if(lhke)then ++ ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ if(nlatt.eq.0)nlatt=1 ++ if(nhko.eq.0)nhko=1 ++ ++ endif ++ ++ if(.not.lcut)then ++ call error(idnode,-433) ++ kill=.true. ++ else ++ ++c retreive cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(directive,lenrec,idum) ++ kmax1=intstr(directive,lenrec,idum) ++ kmax2=intstr(directive,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ ++ else ++ ++ kmax3=intstr(directive,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c if spme double kmax and set to next power of 2, with current upper ++c limit of 512. ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax1=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax2=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax3=2 * kmaxpow2 ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ close(nconf) ++ ++ if(lspme)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : SPME ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1/2,kmax2/2,kmax3/2 ++ ++ elseif(lhke)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 ',2i5)") ++ x alpha,kmax1,kmax2 ++ ++ write(nrite, ++ x "(1x,'HKE expansion order ',7x,i10, ++ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt ++ ++ else ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1,kmax2,kmax3 ++ ++ endif ++ ++ endif ++ ++ if(lspme)then ++ ++c Initialize fft tables ++ ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (fplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++CFFTW ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (bplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++ ++CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CSGIC x dummy,1,1,ffttable,dummy,dummy ) ++ ++CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CCRAY x dummy,1,1,ffttable,dummy,dummy ) ++ ++ endif ++ ++ if(lspme)then ++ ++ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ elseif(lhke)then ++ ++ if(kmax2.gt.kmaxb)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ else ++ ++ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ lforc=.true. ++ ++ return ++ end subroutine ewald_selection ++ ++ subroutine print_optim(keytol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing the optimisation option ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer keytol ++ ++ if(keytol.eq.0)then ++ write(nrite, ++ x "(1x,'convergence to minimum force selected')") ++ elseif(keytol.eq.1)then ++ write(nrite, ++ x "(1x,'convergence to minimum energy selected')") ++ else ++ write(nrite, ++ x "(1x,'convergence to minimum position selected')") ++ endif ++ ++ return ++ end subroutine print_optim ++ ++ function energy_unit() ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for assigning energy conversion factors ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idum ++ real(8) energy_unit ++ ++ energy_unit=1.d0 ++ if(findstring('ev',record,idum))then ++ energy_unit=9648.530821d0 ++ elseif(findstring('kev',record,idum))then ++ energy_unit=9648530.821d0 ++ elseif(findstring('kcal',record,idum))then ++ energy_unit=418.4d0 ++ elseif(findstring('kj',record,idum))then ++ energy_unit=1.d2 ++ elseif(findstring('k',record,idum))then ++ energy_unit=boltz ++ endif ++ ++ return ++ end function energy_unit ++ ++ subroutine solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for solvation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,endsol,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ endsol=.false. ++ ++ nsolva=intstr(directive,lenrec,idum) ++ isolva=intstr(directive,lenrec,idum) ++ ++ if(nsolva.eq.0.and.isolva.eq.0)then ++ ++ do while(.not.endsol) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endsol',directive,idum))then ++ endsol=.true. ++ elseif(findstring('enddec',directive,idum))then ++ endsol=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=max(intstr(directive,lenrec,idum),1) ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'solvation calculation selected', ++ x /,1x,'start of solvation calculation ',i10, ++ x /,1x,'solvation calculation interval ',i10)") ++ x nsolva,isolva ++ ++ endif ++ ++ return ++ end subroutine solvation_option ++ ++ subroutine free_energy_option(directive,lfree,lfrmas,idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for free energy option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lfree,lfrmas,endfre,safe ++ integer idnode,idum ++ ++ mfree=1 ++ kfree=1 ++ lfree=.true. ++ lfrmas=.false. ++ endfre=.false. ++ ++ do while(.not.endfre) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endfre',directive,idum))then ++ endfre=.true. ++ elseif(findstring('start',directive,idum))then ++ nfrn=intstr(directive,lenrec,idum) ++ elseif(findstring('interval',directive,idum))then ++ ifrn=intstr(directive,lenrec,idum) ++ elseif(findstring('lambda',directive,idum))then ++ pfree=dblstr(directive,lenrec,idum) ++ elseif(findstring('mix',directive,idum))then ++ mfree=intstr(directive,lenrec,idum) ++ elseif(findstring('expo',directive,idum))then ++ kfree=intstr(directive,lenrec,idum) ++ elseif(findstring('reset_mass',directive,idum))then ++ lfrmas=.true. ++ if(findstring('false',directive,idum))lfrmas=.false. ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(mfree.eq.1)kfree=1 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'free energy option selected', ++ x /,1x,'start of free energy calculation ',i10, ++ x /,1x,'sampling interval ',i10, ++ x /,1x,'free energy parameter (lambda) ',f10.3, ++ x /,1x,'mixing rule selected ',i10, ++ x /,1x,'mixing rule exponent ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10, ++ x /,1x,'mass scaling option ',l10)") ++ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas ++ ++ endif ++ ++c define free energy scaling parameters ++ ++ call freegen() ++ ++ return ++ end subroutine free_energy_option ++ ++ subroutine excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for excitation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lexcite,lghost,endexc,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lexcite=.true. ++ endexc=.false. ++ ++ do while(.not.endexc) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endexc',directive,idum))then ++ endexc=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'excitation option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,ind_fre ++ ++ endif ++ ++ return ++ end subroutine excitation_option ++ ++ subroutine switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for switching option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lswitch,lghost,endswi,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lswitch=.true. ++ endswi=.false. ++ niswitch=0 ++ ++ do while(.not.endswi) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endswi',directive,idum))then ++ endswi=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('period',directive,idum))then ++ niswitch=max(intstr(directive,lenrec,idum),2) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(niswitch.eq.0)niswitch=nsolva ++ nswitch=nsolva ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'switching option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'switching period ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,niswitch,ind_fre ++ ++ endif ++ ++ return ++ end subroutine switching_option ++ ++ end module define_system_module ++ +diff -urN dl_class_1.9.orig/srcmod/define_system_module.f.preplumed dl_class_1.9/srcmod/define_system_module.f.preplumed +--- dl_class_1.9.orig/srcmod/define_system_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/define_system_module.f.preplumed 2011-10-17 17:32:15.000000000 +0200 +@@ -0,0 +1,5994 @@ ++ module define_system_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007, solvation, free energy ++c and excitation ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use dihedral_module ++ use ensemble_tools_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use inversion_module ++ use metafreeze_module ++ use metal_module ++ use parse_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use vdw_module ++ ++ contains ++ ++ subroutine simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the simulation control ++c parameters ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992. ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c modified ++c author - t.forester may 1993 ++c amended - t.forester sept 1994 - dl_poly_1.1 ++c amended - t.forester nov 1994 - macro version ++c amended - w.smith dec 1994 - t3d adaptation ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 hms ++ character*1 directive(lenrec) ++ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc ++ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe ++ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill ++ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau ++ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo ++ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn ++ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit ++ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack ++ integer idum,imcon,keyver,keytol,nblock,blkout,numgau ++ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol ++ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units ++ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin ++ real(8) prntim ++ ++CSGIC real(8) dummy ++CCRAY real(8) dummy ++CFFTWc FFTW instruction codes ++CFFTW ++CFFTW integer FFTW_FORWARD,FFTW_BACKWARD ++CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) ++CFFTW ++CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL ++CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) ++CFFTW ++CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE ++CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) ++CFFTW ++CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM ++CFFTW parameter (FFTW_OUT_OF_PLACE=0) ++CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) ++CFFTW ++CFFTW integer FFTW_THREADSAFE ++CFFTW parameter (FFTW_THREADSAFE=128) ++CFFTW ++ ++c intitialize system variables: temperature,pressure,ensemble key ++c force key, cutoff, primary cutoff, verlet shell width, relative ++c dielectric constant,timestep,temperature scaling flag, ++c temp scaling interval ++ ++ mode=0 ++ nhko=0 ++ nlatt=0 ++ nsteql=0 ++ nstrun=0 ++ minstp=0 ++ keybpd=0 ++ keyres=0 ++ keyens=0 ++ keyver=0 ++ taut=0.d0 ++ nstbts=0 ++ nstbgr=0 ++ nsbzdn=0 ++ nstbpo=100 ++ nstack=mxstak ++ intsta=0 ++ nstraj=0 ++ istraj=1 ++ keytrj=0 ++ numgau=1 ++ alpha=0.d0 ++ kmax1=0 ++ kmax2=0 ++ kmax3=0 ++ nospl=min(8,mxspl) ++ isolva=1 ++ nsolva=0 ++ niswitch=0 ++ nswitch=0 ++ nofic=1000 ++ ++ fmax=1000.d0 ++ keyfce=0 ++ multt=1 ++ keytol=0 ++ tstep=0.d0 ++ temp=0.d0 ++ press=0.d0 ++ rcut=0.d0 ++ rprim=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ epsq=1.d0 ++ rlxtol=1.d0 ++ opttol=1.d0 ++ tolnce=1.d-8 ++ quattol=1.d-8 ++ timjob=0.d0 ++ timcls=0.d0 ++ delrdf=0.d0 ++ delzdn=0.d0 ++ zlen=0.d0 ++ ehit=0.d0 ++ xhit=0.d0 ++ yhit=0.d0 ++ zhit=0.d0 ++ vmin=0.d0 ++ ebias=0.d0 ++ catchrad=0.d0 ++ pfree=0.d0 ++ ++ lhit=.false. ++ lbpd=.false. ++ ltad=.false. ++ lneb=.false. ++ loop=.true. ++ lnfic=.false. ++ lpsoc=.false. ++ lzero=.false. ++ ltscal=.false. ++ lewald=.false. ++ lspme=.false. ++ lhke=.false. ++ lgofr=.false. ++ lpgr=.false. ++ lzeql=.true. ++ loptim=.false. ++ lminim=.false. ++ lminopt=.false. ++ ltraj=.false. ++ lfcap=.false. ++ ltemp=.false. ++ lstep=.false. ++ lcut=.false. ++ ldelr=.false. ++ lprim=.false. ++ lforc=.false. ++ lens=.false. ++ lvdw=.false. ++ lrvdw=.false. ++ lpres=.false. ++ kill=.false. ++ lnsq=.false. ++ lzden=.false. ++ nolink=.false. ++ newgau=.false. ++ prechk=.false. ++ tadall=.false. ++ lsolva=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lexcite=.false. ++ lswitch=.false. ++ lghost=.false. ++ nebgo=.true. ++ seek='all ' ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open(nread,file='CONTROL',status='old') ++ ++c read job title ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++ call copystring(record,sysname,80) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, ++ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") ++ x sysname ++ ++ endif ++ ++c read and process directives from CONTROL file ++ ++ do while(loop) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++c convert to lowercase and strip out leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('redirect',directive,idum))then ++ ++c ignore this option in this context ++ cycle ++ ++ elseif(findstring('steps',directive,idum))then ++ ++c number of timesteps ++ ++ nstrun=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun ++ ++ elseif(findstring('integ',directive,idum))then ++ ++c choice of integration algorithm ++ ++ if(findstring('leapfrog',directive,idum))then ++ ++ keyver=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'leapfrog verlet integration selected')") ++ ++ elseif(findstring('velocity',directive,idum))then ++ ++ keyver=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'velocity verlet integration selected')") ++ ++ endif ++ ++ elseif(findstring('no fic',directive,idum))then ++ ++c cancel possible "flying ice cube" in Berendsen thermostats ++ ++ lnfic=.true. ++ nofic=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('shells',directive,idum).and. ++ x findstring('on',directive,idum).and. ++ x findstring('cores',directive,idum))then ++ ++c put shells on cores at start - shell model only (else null) ++ ++ lpsoc=.true. ++ ++ elseif(findstring('densvar',directive,idum))then ++ ++c specify allowed density variation ++ ++ densvar=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") ++ x densvar ++ ++ elseif(findstring('no link',directive,idum))then ++ ++c switch off link cell option ++ ++ nolink=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'link cells option deactivated')") ++ ++ elseif(findstring('equil',directive,idum))then ++ ++c number of equilibration timesteps ++ ++ nsteql=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration period ',3x,i10)")nsteql ++ ++ elseif(findstring('restart',directive,idum))then ++ ++c restart control ++ ++ if(findstring('noscale',directive,idum))then ++ ++ keyres=3 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'noscale restart requested')") ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ keyres=2 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'scaled restart requested')") ++ ++ else ++ ++ keyres=1 ++ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") ++ ++ endif ++ ++ elseif(findstring('ensemble',directive,idum))then ++ ++c ensemble selection ++ ++ call ensemble_selection(directive,lens,kill,idnode,keyens, ++ x mode,taut,taup) ++ ++ elseif(findstring('regauss',directive,idum))then ++ ++c re-initialise velocities option (regaussing) ++ ++ newgau=.true. ++ numgau=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'regaussing option activated', ++ x /,1x,'regaussing interval set to ',3x,i10)") ++ x numgau ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ nstbts=intstr(directive,lenrec,idum) ++ if(nstbts.gt.0)then ++ ltscal=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'temperature scaling on' ++ x /,1x,'temperature scaling interval',3x,i10)") ++ x nstbts ++ ++ endif ++ ++ elseif(findstring('rdf',directive,idum))then ++ ++ if(findstring('print',directive,idum))then ++ ++ lpgr=.true. ++ lpgr=(lgofr.and.lpgr) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'g(r) printing option on ')") ++ ++ else ++ ++ lgofr=.true. ++ nstbgr=intstr(directive,lenrec,idum) ++ delrdf=dblstr(directive,lenrec,idum) ++ if(nstbgr.eq.0)nstbgr=10 ++ if(delrdf.lt.1.d-8)delrdf=0.05d0 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'radial distribution functions on ', ++ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr ++ write(nrite, ++ x "(1x,'g(r) bin width ',3x,1p,e12.4)") ++ x delrdf ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('zden',directive,idum))then ++ ++ lzden=.true. ++ nsbzdn=intstr(directive,lenrec,idum) ++ delzdn=dblstr(directive,lenrec,idum) ++ zlen=dblstr(directive,lenrec,idum) ++ if(nsbzdn.eq.0)nsbzdn=10 ++ if(delzdn.lt.1.d-8)then ++ zlen=0.1d0*dble(mxzdn) ++ delzdn=0.1d0 ++ elseif(zlen.lt.1.d-8)then ++ zlen=delzdn*dble(mxzdn) ++ endif ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'Z density profile requested', ++ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn ++ write(nrite, ++ x "(1x,'zdensity bin width ',3x,1p,e12.4)") ++ x delzdn ++ write(nrite, ++ x "(1x,'zdensity range ',3x,1p,e12.4)") ++ x zlen ++ ++ endif ++ ++ elseif(findstring('collect',directive,idum))then ++ ++ lzeql=.false. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration included in overall averages')") ++ ++ elseif(findstring('neb',directive,idum))then ++ ++c activate nudged elastic band option ++ ++ call neb_option(directive,lneb,lminopt,idnode, ++ x numneb,keytol,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('impact',directive,idum))then ++ ++c activate the impact option ++ ++ if(lhit)call error(idnode,516) ++ lhit=.true. ++ khit=intstr(directive,lenrec,idum) ++ nhit=intstr(directive,lenrec,idum) ++ ehit=dblstr(directive,lenrec,idum) ++ xhit=dblstr(directive,lenrec,idum) ++ yhit=dblstr(directive,lenrec,idum) ++ zhit=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'impact option selected')") ++ write(nrite,"( ++ x /,1x,'identity of impact atom ',i10, ++ x /,1x,'time step of impact ',i10, ++ x /,1x,'impact recoil energy (keV) ',1p,e12.4, ++ x /,1x,'impact direction (x component) ',1p,e12.4, ++ x /,1x,'impact direction (y component) ',1p,e12.4, ++ x /,1x,'impact direction (z component) ',1p,e12.4)") ++ x khit,nhit,ehit,xhit,yhit,zhit ++ ++ endif ++ ++c convert impact energy from keV to internal units ++ ++ ehit=ehit*9648530.821d0 ++ ++ elseif(findstring('bpd',directive,idum))then ++ ++c activate the BPD option ++ ++ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, ++ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, ++ x catchrad,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('tad',directive,idum))then ++ ++c activate temperature accelerated dynamics option ++ ++ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, ++ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, ++ x deltad,opttol,hyp_units) ++ ++ elseif(findstring('minim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ minstp=intstr(directive,lenrec,idum) ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ lminim=.true. ++ loptim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'minimisation programme requested')") ++ write(nrite, ++ x "(1x,'structure minimisation interval ', ++ x 3x,i10)")minstp ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'structure minimisation tolerance', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('optim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ loptim=.true. ++ lminim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'structure optimisation requested')") ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'tolerance for structure optimisation ', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('zero',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ temp=1.d0 ++ lzero=.true. ++ loptim=.false. ++ lminim=.false. ++ ltemp=.true. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'zero K optimisation requested')") ++ write(nrite, ++ x "(' temperature reset to',1p,e12.4)")1.d0 ++ ++ endif ++ ++ else if(findstring('solva',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ else if(findstring('decomp',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ elseif(findstring('metafreeze',directive,idum).or. ++ x findstring('metadyn',directive,idum))then ++ ++c activate metadynamics option - d. quigley ++ ++ call metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++ else if(findstring('free',directive,idum))then ++ ++ call free_energy_option(directive,lfree,lfrmas,idnode) ++ ++ else if(findstring('excite',directive,idum))then ++ ++ call excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++ else if(findstring('switch',directive,idum))then ++ ++ call switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++ elseif(findstring('print',directive,idum))then ++ ++ nstbpo=intstr(directive,lenrec,idum) ++ nstbpo=max(nstbpo,1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data printing interval ',3x,i10)")nstbpo ++ ++ elseif(findstring('stack',directive,idum))then ++ ++ nstack=intstr(directive,lenrec,idum) ++ ++c reset stack limit if too large ++ ++ nstack=min(nstack,mxstak) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data stacking interval ',3x,i10)")nstack ++ ++ elseif(findstring('stats',directive,idum))then ++ ++ intsta=intstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'statistics file interval ',3x,i10)")intsta ++ ++ elseif(findstring('traj',directive,idum))then ++ ++ ltraj=.true. ++ nstraj=intstr(directive,lenrec,idum) ++ istraj=max(intstr(directive,lenrec,idum),1) ++ keytrj=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'trajectory file option on ', ++ x /,1x,'trajectory file start ',3x,i10, ++ x /,1x,'trajectory file interval ',3x,i10 ++ x /,1x,'trajectory file info key ',3x,i10)") ++ x nstraj,istraj,keytrj ++ ++ elseif(findstring('ewald',directive,idum).or. ++ x findstring('spme',directive,idum).or. ++ x findstring('hke',directive,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ call ewald_selection(directive,lhke,lspme,lewald,lcut, ++ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, ++ x kmax3,alpha,rcut) ++ ++ elseif(findstring('distan',directive,idum))then ++ ++ keyfce=4 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('coul',directive,idum))then ++ ++ keyfce=6 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Coulombic potential')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('shift',directive,idum))then ++ ++ keyfce=8 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('reaction',directive,idum))then ++ ++ keyfce=10 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : reaction field')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('cap',directive,idum))then ++ ++ lfcap=.true. ++ fm=dblstr(directive,lenrec,idum) ++ if(fm.gt.0.d0)fmax=fm ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax ++ ++ elseif(findstring('no vdw',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'short-range potential terms off')") ++ lvdw=.true. ++ ++ elseif(findstring('no elec',directive,idum))then ++ ++ keyfce=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'electrostatic potential terms off')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('mult',directive,idum))then ++ ++ multt=max(intstr(directive,lenrec,idum),1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'multiple timestep interval ',3x,i10)")multt ++ ++ elseif(findstring('timestep',directive,idum))then ++ ++ lstep=.true. ++ tstep=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep ++ ++ elseif(findstring('temp',directive,idum))then ++ ++ ltemp=.true. ++ temp=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp ++ ++ elseif(findstring('pres',directive,idum))then ++ ++ press=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press ++ ++c convert from katm to internal units of pressure ++ ++ press=press/prsunt ++ lpres=.true. ++ ++ elseif(findstring('prim',directive,idum))then ++ ++c primary cutoff ++ ++ lprim=.true. ++ rprim=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim ++ ++ elseif(findstring('rvdw',directive,idum))then ++ ++c cutoff for short range potentials ++ ++ rvdw=dblstr(directive,lenrec,idum) ++ lrvdw=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw ++ ++ elseif(findstring('delr',directive,idum))then ++ ++c Verlet shell width ++ ++ ldelr=.true. ++ delr=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr ++ ++ elseif(findstring('cut',directive,idum))then ++ ++c cutoff ++ ++ lcut=.true. ++ rcut=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut ++ ++ elseif(findstring('eps',directive,idum))then ++ ++c relative dielectric constant ++ ++ epsq=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq ++ ++ elseif(findstring('rlxtol',directive,idum))then ++ ++c force tolerance for shell relaxation ++ ++ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol ++ ++ elseif(findstring('shake',directive,idum))then ++ ++c tolerance for shake ++ ++ tolnce=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce ++ ++ elseif(findstring('quaternion',directive,idum))then ++ ++c tolerance for quaternion integration ++ ++ quattol=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol ++ ++ elseif(findstring('job time',directive,idum))then ++ ++c time for simulation (in seconds/minutes/hours/days or indefinite) ++ ++ if(findstring('indef',directive,idum))then ++ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 ++ else ++ timjob=dblstr(directive,lenrec,idum) ++ if(findstring('m',directive,idum))then ++ timjob=6.0d1*timjob ++ elseif(findstring('h',directive,idum))then ++ timjob=3.6d3*timjob ++ elseif(findstring('d',directive,idum))then ++ timjob=8.64d4*timjob ++ endif ++ endif ++ ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") ++ x hms,prntim ++ ++ elseif(findstring('close time',directive,idum))then ++ ++c time for winding up a job (in seconds) ++ ++ timcls=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls ++ ++ elseif(findstring('all pairs',directive,idum))then ++ ++c full minimum image - N^2 interactions each timestep ++ ++ lnsq=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'All-pairs requested for electrostatics')") ++ ++ elseif(findstring('nospl',directive,idum))then ++ ++c set ewald_spme interpolation order ++ ++ nospl=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('finish',directive,idum))then ++ ++c safe termination of reading CONTROL file ++ ++ loop=.false. ++ ++ else ++ ++c unrecognised directive in control file ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ enddo ++ ++c check on steps before temperature scaling ++ ++ if(nstbts.eq.0)nstbts=nstrun+1 ++ ++c conduct consistency checks on directives ++ ++ if(lminim)then ++ ++c ensure final configuration follows minimisation ++ ++ if(minstp.eq.0)minstp=nstrun ++ nstrun=minstp*(nstrun/minstp) ++ ++ endif ++ ++c check force activation options ++ ++ if(.not.lforc)then ++ ++c check if any forces are in operation ++ ++ if(.not.lvdw)then ++ ++ kill=.true. ++ call error(idnode,-383) ++ ++ endif ++ ++ else ++ ++c turn on short range forces ++ ++ if(lvdw)then ++ ++ if(keyfce.eq.0)then ++ ++ lcut=.true. ++ ldelr=.true. ++ ++ endif ++ ++ else ++ ++ keyfce=keyfce+1 ++ ++ endif ++ ++ endif ++ ++c if tad selected use only leap frog ++ ++ if(ltad.and.keyver.eq.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to leapfrog for TAD dynamics')") ++ keyver=0 ++ ++ endif ++ ++c error checking ++ ++ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then ++ ++ kill=.true. ++ call error(idnode,-2360) ++ ++ endif ++ ++ if(lsolva.or.lfree.or.lexcite.or.lswitch)then ++ ++ if(lspme)then ++ ++ kill=.true. ++ call error(idnode,-601) ++ ++ endif ++ ++ if(lhke)then ++ ++ kill=.true. ++ call error(idnode,-602) ++ ++ endif ++ ++ endif ++ ++ if(lghost.and.nstbgr.ne.isolva)then ++ ++ call warning(idnode,130,dble(isolva),0.d0,0.d0) ++ nstbgr=isolva ++ ++ endif ++ if(lfree.and.lgofr)then ++ ++ call warning(idnode,140,0.d0,0.d0,0.d0) ++ lgofr=.false. ++ lpgr=.false. ++ ++ endif ++ if(loptim)then ++ ++ temp=0.d0 ++ ++ elseif(.not.ltemp)then ++ ++ kill=.true. ++ call error(idnode,-380) ++ ++ endif ++ ++ if(.not.lstep)then ++ ++ kill=.true. ++ call error(idnode,-381) ++ ++ endif ++ ++ if(.not.lcut)then ++ ++ kill=.true. ++ call error(idnode,-382) ++ ++ endif ++ ++c check if van der Waals cutoff set ++ ++ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then ++ ++ if(rcut.gt.0.d0)then ++ ++ rvdw=rcut ++ ++ else ++ ++ kill=.true. ++ call error(idnode,-402) ++ ++ endif ++ ++ endif ++ ++ if(.not.ldelr)then ++ ++ kill=.true. ++ call error(idnode,-384) ++ ++ endif ++ ++ if(multt.gt.1)then ++ ++ if(.not.lprim)then ++ ++ kill=.true. ++ call error(idnode,-385) ++ ++ elseif(rprim.gt.rcut)then ++ ++ kill=.true. ++ call error(idnode,-386) ++ ++ endif ++ ++ endif ++ ++c check settings in nvt ensemble ++ ++ if(keyens.ge.2.and.keyens.le.3)then ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ ++ endif ++ ++c check settings in npt ensemble ++ ++ if(keyens.ge.4.and.keyens.le.7)then ++ ++ if(.not.lpres)then ++ ++ kill=.true. ++ call error(idnode,-387) ++ ++ endif ++ ++c check barostat and thermostat rates non zero ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ if(taup.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-466) ++ ++ endif ++ ++ endif ++ ++c check multiple timestep cutoffs are sensible ++ ++ if(multt.gt.1)then ++ if(rcut-rprim.lt.delr)then ++ ++ kill=.true. ++ call error(idnode,-398) ++ ++ endif ++ endif ++ ++c check rcut > rvdw (for verlet list constructor) ++ ++ if(rcut.lt.rvdw)then ++ ++ kill=.true. ++ call error(idnode,-400) ++ ++ endif ++ ++c check spme is not being used with incorrect pbc ++ ++ if(lspme)then ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ kill=.true. ++ call error(idnode,-513) ++ ++ endif ++ ++ endif ++ ++c check on all-pairs calculation request ++ ++ if(lnsq)then ++ ++ if(multt.eq.1)then ++ ++ kill=.true. ++ call error(idnode,-422) ++ ++ endif ++ ++ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then ++ ++ kill=.true. ++ call error(idnode,-424) ++ ++ endif ++ ++ endif ++ ++c cancel rdf option if no vdw or coulombic forces ++ ++ if(lgofr.and.keyfce.eq.0)then ++ ++ lgofr=.false. ++ call warning(idnode,120,0.d0,0.d0,0.d0) ++ ++ endif ++ ++ if(kill)call abort_control_read(2,idnode,nread) ++ ++c close CONTROL file ++ ++ if(idnode.eq.0)close(nread) ++ ++ return ++ end subroutine simdef ++ ++ subroutine sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the molecular specifications ++c of the system to be simulated ++c version for rigid unit data and neutral groups ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992. ++c amended - w.smith march 1994 ++c amended - t.forester april 1994 ++c amended - w.smith dec 1994 - getrec etc ++c amended - a.smondyrev may 2000 - keydih=5 for ++c ryckaert-bellemans potential in dihedrals ++c amended - a.smondyrev may 2000 - keydih=6 for ++c fluorinated ryckaert-bellemans potential in dihedrals ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf ++ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost ++ ++ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls ++ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite ++ integer nsite,nconst,nangle,ndihed,ninver,nbonds ++ integer nteth,nspmf,itmols,i,idum,keyver ++ integer ntpter,keyshl,iatm,natmsr,ntghost ++ ++ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb ++ real(8) sumchg ++ ++ data loop1/.true./,loop2/.true./ ++ ++c initialise system counters: atomic site index, number of ++c constraints, bond angles, dihedrals, inversions, chemical bonds, ++c unique atom types, total number of atoms, ++c total number of rigid groups, number of tethered atoms, ++c number of three body potentials ++ ++ nsite=0 ++ nconst=0 ++ nangle=0 ++ ndihed=0 ++ ninver=0 ++ nbonds=0 ++ ntpatm=0 ++ natms=0 ++ ngrp=0 ++ nteth=0 ++ ntptbp=0 ++ ntpter=0 ++ ntpmet=0 ++ ntpvdw=0 ++ ntpfbp=0 ++ nshels=0 ++ nspmf=0 ++ keyfld=0 ++ keyshl=0 ++ ntghost=0 ++ natmsr=0 ++ ntcons_ghost=0 ++ ++ lunits=.false. ++ lmols=.false. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ lshl=.false. ++ lpmf=.false. ++ engunit=1.d0 ++ ++ numbonds(:)=0 ++ numpmf(:)=0 ++ numcon(:)=0 ++ numdih(:)=0 ++ numinv(:)=0 ++ numgrp(:)=0 ++ numsit(:)=0 ++ numteth(:)=0 ++ numshl(:)=0 ++ npmf(:)=0 ++ indpmf(:)=0 ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD',status='old') ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c convert to lowercase and remove leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('units',record,idum))then ++ ++c identify energy unit for input/output ++ ++ lunits=.true. ++ call define_units(idnode,engunit) ++ ++c neutral group control option ++ ++ elseif(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ if(idnode.eq.0) ++ x write(nrite,"(/,' neutral group implementation in use')") ++ ++c can't have neutral groups with all-pairs ++ ++ if(lnsq)call error(idnode,426) ++ ++c specify molecular species ++ ++ elseif(findstring('molecu',record,idum))then ++ ++c number of molecular types ++ ++ if(lmols)call error(idnode,11) ++ lmols=.true. ++ ntpmls=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") ++ x ntpmls ++ ++ if(ntpmls.gt.mxtmls)call error(idnode,10) ++ ++c initialise total system charge ++ ++ sumchg=0.d0 ++ ++c read in molecular characteristics ++ ++ do itmols=1,ntpmls ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'molecular species type',9x,i10)") ++ x itmols ++ ++c name of molecular species ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call copystring(record,molnam(1,itmols),40) ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") ++ x (molnam(i,itmols),i=1,40) ++ ++c stop processing if energy unit has not been specified ++ ++ if(.not.lunits)call error(idnode,6) ++ ++c read molecular data ++ ++ loop2=.true. ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'number of molecules ', ++ x 10x,i10)")nummols(itmols) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++c read in atomic details ++ ++ call define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read core - shell spring parameters ++ ++ elseif(findstring('shell',record,idum))then ++ ++ lshl=.true. ++ call define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl, ++ x engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read chemical bond force constant and bondlength ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ call define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read bond atom indices and constraint bondlength ++ ++ elseif(findstring('constr',record,idum))then ++ ++ call define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read pmf bond atom indices, weights and constraint bondlength ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ if(lpmf)call error(idnode,484) ++ lpmf=.true. ++ call define_pmf(safe,idnode,itmols,nspmf) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular angular potential parameters ++ ++ elseif(findstring('angles',record,idum))then ++ ++ call define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular dihedral potential parameters ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ call define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular inversion potential parameters ++ ++ elseif(findstring('invers',record,idum))then ++ ++ call define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read rigid body data ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ call define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read tethered atom indices and tethering parameters ++ ++ elseif(findstring('teth',record,idum))then ++ ++ call define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c finish of data for one molecular type ++ ++ elseif(findstring('finish',record,idum))then ++ ++c running total of number of atoms in system ++ ++ natms=natms+nummols(itmols)*numsit(itmols) ++ if(natms.gt.mxatms)call error(idnode,75) ++ ++c check core-shell units are not both in same rigid body unit ++ ++ call check_shells(idnode,itmols,nshels,ngrp) ++ ++ loop2=.false. ++ ++ else ++ ++c error exit for unidentified directive in molecular data ++ ++ if(idnode.eq.0)write(nrite,'(12x,a)')record ++ call error(idnode,12) ++ ++ endif ++ ++ enddo ++ ++c construction of atmolt table for solvation calculation ++ ++ if(lsolva)then ++ ++ do iatm=natmsr+1,natms ++ atmolt(iatm)=itmols ++ enddo ++ natmsr=natms ++ ++ endif ++ ++ enddo ++ ++c construction of atm_fre table for free energy or excitation ++ ++ if(lfree.or.lexcite.or.lswitch)then ++ ++ atm_fre(:)=0 ++ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then ++ ++ do iatm=ind_fre(1),ind_fre(2) ++ atm_fre(iatm)=1 ++ enddo ++ ++ endif ++ ++ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then ++ ++ do iatm=ind_fre(3),ind_fre(4) ++ ++ atm_fre(iatm)=2 ++ if(lghost)ntghost=ntghost+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c calculate system charge ++ ++ call check_syschg(idnode,ntpmls,sumchg) ++ ++c read in the nonbonded potential energy parameters ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ call define_van_der_waals ++ x (safe,ltable,lunits,lmols,idnode,ntpvdw, ++ x ntpatm,keyfce,dlrpot,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the metal potential energy parameters ++ ++ elseif(findstring('met',record,idum))then ++ ++ call define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the three body potential energy parameters ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ call define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the tersoff potential energy parameters ++ ++ elseif(findstring('tersoff',record,idum))then ++ ++ call define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the four body potential energy parameters ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ call define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read external field data ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c normal end of FIELD file ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. ++ x mod(keyfce,2).eq.1)call error(idnode,145) ++ ++c error exit for unidentified directive ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(100a)')record ++ call abort_field_read(2,idnode,nfield) ++ ++ endif ++ ++ enddo ++ ++c close force field file ++ ++ if(idnode.eq.0)close (nfield) ++ ++ ++ if(lshl.and.idnode.eq.0)then ++ ++ if(keyshl.eq.1)write(nrite, ++ x "(/,/,'adiabatic shell model in operation')") ++ ++ if(keyshl.eq.2)write(nrite, ++ x "(/,/,'relaxed shell model in operation')") ++ ++ endif ++ ++ if(lshl.and.keyshl.eq.0)call error(idnode,1951) ++ ++c if metadynamics and shell selected use only velocity verlet ++ ++ if(lshl.and.lmetadyn.and.keyver.eq.0)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to velocity verlet for metadynamics')") ++ keyver=1 ++ ++ endif ++ ++ return ++ end subroutine sysdef ++ ++ subroutine sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the configuration data file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 atname(8) ++ ++ logical loglnk,safe,lneut,nolink,lfree,lfrmas ++ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt ++ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz ++ integer m,l,ncells,idum,mxnode ++ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc ++ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi ++ real(8) width,dum1,dum2,test,com(3) ++ ++c open the system input file ++ ++ if(idnode.eq.0)open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ call copystring(record,cfgname,80) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ levcfg=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'selected image convention',6x,i10)")imcon ++ ++c check config file contents for consistent data ++ ++ if((imcon.eq.0.or.imcon.eq.6).and. ++ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) ++ x call error(idnode,180) ++ ++ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) ++ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) ++ ++ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) ++ x call error(idnode,390) ++ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 ++ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.eq.0)then ++ ++c if no periodic boundaries - set zero values for cell ++c vectors and cell volume ++ ++ cell(:)=0.d0 ++ volm=0.d0 ++ ++ else ++ ++c read cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++ endif ++ ++c read the atomic coordinates ++ ++ indatm=0 ++ indnam=0 ++ indneu=0 ++ safe=.true. ++ ++ do k=1,ntpmls ++ ++ do l=1,nummols(k) ++ ++ do m=1,numsit(k) ++ ++ indatm=indatm+1 ++ ++ if(indatm.gt.mxatms)call error(idnode,45) ++ ++ xxx(indatm)=0.d0 ++ yyy(indatm)=0.d0 ++ zzz(indatm)=0.d0 ++ vxx(indatm)=0.d0 ++ vyy(indatm)=0.d0 ++ vzz(indatm)=0.d0 ++ fxx(indatm)=0.d0 ++ fyy(indatm)=0.d0 ++ fzz(indatm)=0.d0 ++ ++ if(idnode.eq.0)then ++ ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ ++ elseif(levcfg.eq.1)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ ++ else ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce ++ ++ endif ++ ++c strip blanks off atom name ++ ++ call strip(atname,8) ++ ++ if(sitnam(indnam+m).eq.mkwd8(atname))then ++ ++ xxx(indatm)=xcoord ++ yyy(indatm)=ycoord ++ zzz(indatm)=zcoord ++ ++ if(levcfg.gt.0)then ++ ++ vxx(indatm)=xveloc ++ vyy(indatm)=yveloc ++ vzz(indatm)=zveloc ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ fxx(indatm)=xforce ++ fyy(indatm)=yforce ++ fzz(indatm)=zforce ++ ++ endif ++ ++ else ++ ++ write(nrite,"(/,/,'unidentified atom label :',8a1, ++ x ': atom number ',i5)")atname,indatm ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ call gstate(safe) ++ if(.not.safe)call error(idnode,25) ++ ++ ltype(indatm)=ltpsit(indnam+m) ++ weight(indatm)=wgtsit(indnam+m) ++ chge(indatm)=chgsit(indnam+m) ++ atmnam(indatm)=sitnam(indnam+m) ++ lstfrz(indatm)=lfzsit(indnam+m) ++ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu ++ ++c reset atomic masses according to free energy definitions ++ ++ if(lfree)then ++ ++ weight_sav(indatm)=weight(indatm) ++ ++ if(lfrmas)then ++ ++ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then ++ weight(indatm)=lambda1*weight(indatm) ++ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) ++ x then ++ weight(indatm)=lambda2*weight(indatm) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ indneu=indneu+nugrp(indnam+numsit(k)) ++ ++ enddo ++ ++ indnam=indnam+numsit(k) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(xxx,indatm,buffer) ++ call gdsum(yyy,indatm,buffer) ++ call gdsum(zzz,indatm,buffer) ++ ++ if(levcfg.gt.0)then ++ ++ call gdsum(vxx,indatm,buffer) ++ call gdsum(vyy,indatm,buffer) ++ call gdsum(vzz,indatm,buffer) ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ call gdsum(fxx,indatm,buffer) ++ call gdsum(fyy,indatm,buffer) ++ call gdsum(fzz,indatm,buffer) ++ ++ endif ++ ++ endif ++ ++c check integrity of cell vectors : for cubic, TO and RD cases ++c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) ++ ++ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then ++ ++ axx=(abs(cell(1))+abs(cell(5)))/2.d0 ++ test=1.d-8*axx ++ if(abs(cell(1)-axx).gt.test)call error(idnode,410) ++ if(abs(cell(5)-axx).gt.test)call error(idnode,410) ++ if(imcon.eq.5)then ++ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) ++ x call error(idnode,410) ++ else ++ if(abs(cell(9)-axx).gt.test)call error(idnode,410) ++ endif ++ ++ endif ++ ++c check integrity of hexagonal prism cell vectors ++ ++ if(imcon.eq.7)then ++ ++ rt3=sqrt(3.d0) ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,410) ++ ++ endif ++ ++c check 2D PBC for imcon=6 ++ ++ if(imcon.eq.6)then ++ ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c check for diagonal cell matrix if appropriate ++ ++ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. ++ x (imcon.eq.5).or.(imcon.eq.7))then ++ ++ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c put centre of mass at centre of coordinates if imcon=0 ++ ++ if(imcon.eq.0)then ++ ++ totmas=getmass(indatm,idnode,mxnode) ++ call getcom(indatm,idnode,mxnode,totmas,com) ++ ++ do i=1,indatm ++ ++ xxx(i)=xxx(i)-com(1) ++ yyy(i)=yyy(i)-com(2) ++ zzz(i)=zzz(i)-com(3) ++ ++ enddo ++ ++ endif ++ ++c set widths if unset - needed for check on link cells below ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ xhi=abs(xxx(1)) ++ yhi=abs(yyy(1)) ++ zhi=abs(zzz(1)) ++ do i=2,indatm ++ ++ xhi=max(xhi,abs(xxx(i))) ++ yhi=max(yhi,abs(yyy(i))) ++ zhi=max(zhi,abs(zzz(i))) ++ ++ enddo ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ if(imcon.eq.6.and.cell(9).lt.1.d-6)then ++ ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ endif ++ ++c calculate dimensional properties of simulation cell ++ ++ call dcell(cell,celprp) ++ ++ if(imcon.eq.0)then ++ ++ volm=0.d0 ++ ++ elseif(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ else ++ ++ volm=celprp(10) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") ++ write(nrite,"(21x,3f12.6)")cell ++ ++ write(nrite, ++ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm ++ ++ endif ++ ++c check value of cutoff and reset if necessary ++ ++ if(imcon.gt.0)then ++ ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 ++ if(imcon.eq.5)width=cell(1)/2.d0 ++ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 ++ ++c halt program if potential cutoff exceeds cell width ++ ++ if(rcut.gt.width)call error(idnode,95) ++ ++ endif ++ ++c decide on whether to use link cells for verlet list constructor ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ ++ ilx=int(celprp(7)/(rcut+delr)) ++ ily=int(celprp(8)/(rcut+delr)) ++ ilz=int(celprp(9)/(rcut+delr)) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(lneut.and.ncells.le.36)loglnk=.false. ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(loglnk.and.ncells.gt.mxcell)then ++ ++ dum1=dble(ncells) ++ dum2=dble(mxcell) ++ call warning(idnode,90,dum1,dum2,dum2) ++ loglnk=.false. ++ ++ endif ++ ++ endif ++ ++ if(loglnk.and.idnode.eq.0) ++ x write(nrite,"(/,/,' link cell algorithm in use')") ++ ++ if(idnode.eq.0)close (nconf) ++ ++c ensure PBC compliance of starting structure ++ ++ if(keyres.eq.0.and.imcon.gt.0)then ++ ++ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ ++c error exit for config file read ++ ++ 100 call abort_config_read(2,idnode,nconf) ++ ++ end subroutine sysgen ++ ++ subroutine sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the REVIVE file data and ++c defining the initial thermodynamic and structural accumulators. ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc ++ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc ++ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw ++ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm ++ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost ++ real(8) chit_shl ++ ++c read or initialise accumulator arrays ++ ++ if(keyres.eq.1.and.idnode.eq.0)then ++ ++c read accumulator data from dump file ++ ++ open(nrest,file='REVOLD',form='unformatted') ++ ++ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, ++ x tboost,chit_shl ++ read(nrest) virtot,vircom,eta,strcns,strbod ++ read(nrest) stpval ++ read(nrest) sumval ++ read(nrest) ssqval ++ read(nrest) zumval ++ read(nrest) ravval ++ read(nrest) stkval ++ read(nrest) xx0,yy0,zz0 ++ read(nrest) xxs,yys,zzs ++ ++ if(lgofr) read(nrest)rdf ++ if(lzden) read(nrest)zdens ++ ++ nstep=nint(dnstep) ++ numacc=nint(dnumac) ++ numrdf=nint(dnumrd) ++ nzden=nint(dnzden) ++ close (nrest) ++ ++ else ++ ++c initialise step counters ++ ++ nstep=0 ++ numacc=0 ++ numrdf=0 ++ nzden=0 ++ ++c initialise temperature and pressure coupling parameters ++c and integral for conserved quantity ++ ++ chit=0.d0 ++ chip=0.d0 ++ conint=0.d0 ++ virtot=0.d0 ++ vircom=0.d0 ++ chit_shl=0.d0 ++ do i=1,9 ++ ++ eta(i)=0.d0 ++ strcns(i)=0.d0 ++ strbod(i)=0.d0 ++ ++ enddo ++ ++c initialise accumulator arrays ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ zumval(i)=0.d0 ++ ravval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ xxs(i)=0.d0 ++ yys(i)=0.d0 ++ zzs(i)=0.d0 ++ ++ enddo ++ ++ do j=1,mxnstk ++ ++ do i=1,mxstak ++ ++ stkval(i,j)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ zdens(j,i)=0.d0 ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c put shells on cores at start ++ ++ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) ++ x call put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c if restart then broadcast stored variables via a global sum ++ ++ if(keyres.eq.1.and.mxnode.gt.1)then ++ ++ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) ++ x call error(idnode,186) ++ ++ buffer(1)=chit ++ buffer(2)=chip ++ buffer(3)=conint ++ buffer(4)=dble(nstep) ++ buffer(5)=dble(numacc) ++ buffer(6)=dble(numrdf) ++ buffer(7)=dble(nzden) ++ buffer(8)=tboost ++ buffer(9)=virtot ++ buffer(10)=vircom ++ buffer(11)=chit_shl ++ call gdsum(buffer(1),11,buffer(12)) ++ chit=buffer(1) ++ chip=buffer(2) ++ conint=buffer(3) ++ nstep=nint(buffer(4)) ++ numacc=nint(buffer(5)) ++ numrdf=nint(buffer(6)) ++ nzden=nint(buffer(7)) ++ tboost=buffer(8) ++ virtot=buffer(9) ++ vircom=buffer(10) ++ chit_shl=buffer(11) ++ ++ call gdsum(eta,9,buffer) ++ call gdsum(strcns,9,buffer) ++ call gdsum(strbod,9,buffer) ++ call gdsum(stpval,mxnstk,buffer) ++ call gdsum(sumval,mxnstk,buffer) ++ call gdsum(ssqval,mxnstk,buffer) ++ call gdsum(zumval,mxnstk,buffer) ++ call gdsum(ravval,mxnstk,buffer) ++ call gdsum(stkval,mxnstk*mxstak,buffer) ++ call gdsum(xx0,natms,buffer) ++ call gdsum(yy0,natms,buffer) ++ call gdsum(zz0,natms,buffer) ++ call gdsum(xxs,natms,buffer) ++ call gdsum(yys,natms,buffer) ++ call gdsum(zzs,natms,buffer) ++ ++c for rdf table - broadcast and normalise ++ ++ if(lgofr)then ++ ++ do k=1,mxxtyp ++ ++ call gdsum(rdf(1,k),mxrdf,buffer) ++ ++ do j=1,mxrdf ++ rdf(j,k)=rdf(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do k=1,mxatyp ++ ++ call gdsum(zdens(1,k),mxzdn,buffer) ++ ++ do j=1,mxzdn ++ zdens(j,k)=zdens(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities and long-range corrections ++ ++ elrc=0.d0 ++ virlrc=0.d0 ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 ++ ++ call lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) ++ ++ if(lmetab.or.ntpmet.eq.0)then ++ ++ elrcm(0)=0.d0 ++ vlrcm(0)=0.d0 ++ ++ else ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 ++ ++ return ++ end subroutine sysinit ++ ++ subroutine systemp ++ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for setting the initial system temperature ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl ++ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq ++ ++c number of degrees of freedom ++c 3 for com translation ++c 3 for angular momentum about origin (non-periodic systems only) ++ ++ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre ++ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 ++ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) ++ degshl=dble(3*ntshl) ++ ++c lose one degree of freedom if temperature constrained ++c gaussian constraints ++ ++c if(keyens.eq.1)degfre=degfre-1.d0 ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, ++ x ' rotational degrees of freedom ',f20.0,/, ++ x ' shell pseudo degrees of freedom',f20.0)") ++ x degfre,degrot,degshl ++ if(degfre.lt.1.d0)call error(idnode,350) ++ ++c define reciprocal masses of atoms ++ ++ do i=1,natms ++ ++ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then ++ ++ rmass(i)=0.d0 ++ weight(i)=0.d0 ++ ++ else ++ ++ rmass(i)=1.d0/weight(i) ++ ++ endif ++ ++ enddo ++ ++c generate starting velocities ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++ if(keyres.eq.0)then ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ elseif(keyres.eq.1.or.keyres.eq.3)then ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ elseif(keyres.eq.2)then ++ ++ if(ngrp.gt.0)then ++ ++ call vscaleg ++ x (idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ elseif(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c print out sample of initial configuration ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'sample of starting configuration',/)") ++ ++ io=(natms+19)/20 ++ if((levcfg.le.1).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") ++ if((levcfg.eq.2).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', ++ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") ++ ++ do i=1,natms,io ++ ++ if(levcfg.le.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) ++ ++ elseif(levcfg.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i), ++ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine systemp ++ ++ subroutine sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine defining global bookkeeping ++c arrays ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost ++ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i ++ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl ++ integer ntghost,natms2 ++ real(8) degfre,degrot ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c neutral group bookkeeping ++ ++ call neutbook(lneut,idnode,natms,nneut) ++ ++c rigid body bookkeeping ++ ++ call quatbook ++ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, ++ x ntfree,degfre,degrot) ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost ++ ++ endif ++ ++c construct list of excluded pair interactions ++ ++ if(lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ call excludeneu(idnode,mxnode,nneut) ++ ++ elseif(.not.lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ ++ if(loglnk)then ++ ++ call exclude_link(idnode,mxnode,ntpmls) ++ ++ else ++ ++ call exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++ endif ++ ++ endif ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost ++ ++ endif ++ ++c construct interaction lists for bonded forces ++ ++ call intlist ++ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c adaptations for solvation and excitation simulations ++ ++ if(lsolva.or.lghost)then ++ ++ natmsf=0 ++ natmsl=0 ++ natm_sol(:)=0 ++ const_sol(:)=numcon(:)*nummols(:) ++ rigid_sol(:)=numgrp(:)*nummols(:) ++ ++ if(ngrp.eq.0)then ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ else ++ ++ ii=1 ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstgot_sol(ii).eq.isol)then ++ ii=ii+1 ++ else ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ ++ endif ++ ++ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost ++ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) ++ ++ endif ++ ++ return ++ end subroutine sysbook ++ ++ subroutine define_units(idnode,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting energy units ++c ++c copyright - daresbury laboratory ++c author - w. smith august 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,idum,i ++ real(8) engunit ++ logical blank ++ ++ blank=.true. ++ ++ do i=6,lenrec ++ if(record(i).ne.' ')blank=.false. ++ enddo ++ ++ if(blank)then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal ', ++ x 'units ')") ++ ++ elseif(findstring('ev',record,idum))then ++ ++ engunit=9648.530821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=electron volts ')") ++ ++ elseif(findstring('kev',record,idum))then ++ ++ engunit=9648530.821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kilo electron volts ')") ++ ++ elseif(findstring('kcal',record,idum))then ++ ++ engunit=418.4d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kcal/ mol ')") ++ ++ elseif(findstring('kj',record,idum))then ++ ++ engunit=1.d2 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kjoule/mol ')") ++ ++ elseif(findstring('k',record,idum))then ++ ++ engunit=boltz ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kelvin ')") ++ ++ elseif(findstring('internal',record,idum))then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal', ++ x ' units ')") ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(a)')record ++ call error(idnode,5) ++ ++ endif ++ ++ return ++ end subroutine define_units ++ ++ subroutine quatbook ++ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, ++ x degfre,degrot) ++ ++c************************************************************************** ++c ++c dl_poly subroutine for setting up bookkeeping for rigid bodies ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c************************************************************************* ++ ++ implicit none ++ ++ logical safe,pass1,pass2,linear,lsolva ++ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree ++ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id ++ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij ++ integer fngrp,lngrp ++ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 ++ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz ++ real(8) rotlim,rrr ++ ++ integer, allocatable :: ind(:,:),lstgot(:) ++ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) ++ ++ data fail/0,0,0,0,0/ ++ ++c allocate working arrays ++ ++ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) ++ allocate (accum(mxungp),stat=fail(5)) ++ do i=1,5 ++ if(fail(i).ne.0)call error(idnode,1790) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ igrp=0 ++ jgrp=0 ++ kgrp=0 ++ isite=0 ++ jr=0 ++ jt=0 ++ safe=.true. ++ degfre=0.d0 ++ degrot=0.d0 ++ ++c rigid body identifier ++ ++ do i=1,natms ++ lstbod(i)=0 ++ enddo ++ ++c number of rigid groups in system ++ ++ ngrp=0 ++ do itmols=1,ntpmls ++ ngrp=ngrp+nummols(itmols)*numgrp(itmols) ++ enddo ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if(igrp.le.mxgrp)then ++ ++ lstgtp(igrp)=listyp(lgrp+kgrp) ++ id=listyp(lgrp+kgrp) ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then ++ ++ jgrp=jgrp+1 ++ ++ do jj=1,numgsit(id) ++ ++ jr=jr+1 ++ jt=jt+1 ++ ++ if(jr.le.mxatms.and.jt.le.mxatms)then ++ ++ lstrgd(jr)=lstgst(id,jj)+isite ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do jj=1,numgsit(id) ++ ++ jt=jt+1 ++ if(jt.le.mxatms)then ++ ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,304) ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kgrp=kgrp+numgrp(itmols) ++ ++ enddo ++ ++ if(ngrp.eq.0)then ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0)then ++ ++ j=j+1 ++ lstfre(j)=i ++ ++ endif ++ ++ enddo ++ ntfree=j ++ ++ else ++ ++c centre of mass of groups ++c assumes group dimensions are smaller than half box width ++ ++ do i=1,natms ++ lstme(i)=0 ++ enddo ++ ++ do id=1,mxungp ++ gmass(id)=0.d0 ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ safe=.false. ++ if(abs(gmass(id)).lt.1.d-10)safe=.true. ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ xxt(jr)=xxx(i)-txx(ig) ++ yyt(jr)=yyy(i)-tyy(ig) ++ zzt(jr)=zzz(i)-tzz(ig) ++ if(safe)gmass(id)=gmass(id)+weight(i) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) ++ ++ enddo ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c global communications ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++c make sure all nodes have same copy of gmass ++ ++ if(mxnode.gt.1)then ++ ++ do id=1,mxungp ++ ++ accum(id)=0.d0 ++ if(gmass(id).gt.0.d0)accum(id)=1.d0 ++ ++ enddo ++ ++ call gdsum(gmass(1),mxungp,buffer(1)) ++ call gdsum(accum(1),mxungp,buffer(1)) ++ ++ do id=1,mxungp ++ ++ dnorm=max(1.d0,accum(id)) ++ gmass(id)=gmass(id)/dnorm ++ ++ enddo ++ ++ endif ++ ++c find a group of each type on this node to ++c find principal axis system of the group type ++ ++ do id=1,mxungp ++ ++ jr=0 ++ ij=0 ++ safe=.false. ++ ++ do while(.not.safe.and.ij.lt.ngrp) ++ ++ ij=ij+1 ++ jr=jr+numgsit(lstgtp(ij)) ++ if(lstgtp(ij).eq.id)safe=.true. ++ ++ enddo ++ ++ if(safe)then ++ ++c rotational inertia accumulator ++ ++ do k=1,3 ++ ++ do kk=1,3 ++ ++ rotinr(k,kk)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ij) ++ yyt(jr)=yyy(i)-gcmy(ij) ++ zzt(jr)=zzz(i)-gcmz(ij) ++ ++ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) ++ ++ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) ++ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) ++ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) ++ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) ++ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) ++ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) ++ ++ enddo ++ ++ rotinr(2,1)=rotinr(1,2) ++ rotinr(3,1)=rotinr(1,3) ++ rotinr(3,2)=rotinr(2,3) ++ ++ call jacobi(rotinr,rot1,3) ++ ++ rot(1)=rot1(1,1) ++ rot(4)=rot1(2,1) ++ rot(7)=rot1(3,1) ++ rot(2)=rot1(1,2) ++ rot(5)=rot1(2,2) ++ rot(8)=rot1(3,2) ++ rot(3)=rot1(1,3) ++ rot(6)=rot1(2,3) ++ rot(9)=rot1(3,3) ++ ++c rotational inertia accumulators ++ ++ rotinx(id,1)=0.d0 ++ rotiny(id,1)=0.d0 ++ rotinz(id,1)=0.d0 ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++c site positions in principal axis system ++ ++ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) ++ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) ++ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) ++ ++c impose rounding ++ ++ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 ++ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 ++ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 ++ ++c rotational inertia tensor of group type ++ ++ rotinx(id,1)=rotinx(id,1)+ ++ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) ++ rotiny(id,1)=rotiny(id,1)+ ++ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) ++ rotinz(id,1)=rotinz(id,1)+ ++ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) ++ ++ enddo ++ ++c set axis system such that: Ixx >=Iyy >=Izz ++ ++ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) ++ ++ if(rotxyz.ge.rotinx(id,1))then ++ ++ if(rotiny(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gyy(id,j) ++ gyy(id,j)=-a1 ++ ++ enddo ++ ++ rotiny(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ elseif(rotinz(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ rotinz(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ endif ++ ++ endif ++ ++ if(rotinz(id,1).gt.rotiny(id,1))then ++ ++ do j=1,numgsit(id) ++ ++ a1=gyy(id,j) ++ gyy(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ a1=rotinz(id,1) ++ rotinz(id,1)=rotiny(id,1) ++ rotiny(id,1)=a1 ++ ++ endif ++ ++c set up principal axis system in terms of site positions ++ ++c test for (near) linear unit ++ ++ ill=0 ++ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) ++ ++ if(rtall.gt.1.d-5)then ++ rotall=rtall ++ else ++ rotall=1.d0 ++ endif ++ ++ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) ++ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall ++ ++ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ ++ if(ill.ge.2)then ++ ++c point particle only ++ ++ ind(id,1)=1 ++ ind(id,2)=1 ++ ind(id,3)=1 ++ ++ do jj=1,9 ++ gaxs(id,jj)=0.d0 ++ enddo ++ ++ elseif(ill.eq.1)then ++ ++c linear molecule ++ ++ ind(id,1)=1 ++ ind(id,2)=2 ++ ind(id,3)=1 ++ ++ aa(1)=gxx(id,1)-gxx(id,2) ++ aa(4)=gyy(id,1)-gyy(id,2) ++ aa(7)=gzz(id,1)-gzz(id,2) ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++ call invert(aa,bb,det) ++ ++ if(abs(det).lt.1.d-5)call error(idnode,306) ++ ++ do j=1,9 ++ gaxs(id,j)=bb(j) ++ enddo ++ ++ elseif(ill.eq.0)then ++ ++c non-linear molecule ++ ++ i1=1 ++ i2=1 ++ i3=1 ++ pass1=.true. ++ dettest=1.d-1 ++ ++ do while(pass1.and.i2.lt.numgsit(id)-1) ++ ++ i2=i2+1 ++ i3=i2 ++ pass2=.true. ++ ++ do while(pass2.and.i3.lt.numgsit(id)) ++ ++ i3=i3+1 ++ ++ aa(1)=gxx(id,i1)-gxx(id,i2) ++ aa(4)=gyy(id,i1)-gyy(id,i2) ++ aa(7)=gzz(id,i1)-gzz(id,i2) ++ aa(2)=gxx(id,i1)-gxx(id,i3) ++ aa(5)=gyy(id,i1)-gyy(id,i3) ++ aa(8)=gzz(id,i1)-gzz(id,i3) ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c invert matrix ++ ++ call invert(aa,bb,det) ++ ++c check on size of determinant - to see if the 3 sites are ++c too close to being linear for safety. ++ ++ pass2=abs(det).lt.dettest ++ ++ enddo ++ ++ pass1=abs(det).lt.dettest ++ ++ enddo ++ ++ if(abs(det).lt.dettest)call error(idnode,306) ++ ++c store indices used ++ ++ ind(id,1)=i1 ++ ind(id,2)=i2 ++ ind(id,3)=i3 ++ ++c store coefficients ++ ++ do j=1,9 ++ ++ gaxs(id,j)=bb(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check that rigid unit does not contain frozen atoms ++ ++ safe=.true. ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ if(lstfrz(i).ne.0)safe=.false. ++ ++ enddo ++ ++ enddo ++ ++c global check on error condition ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,360) ++ ++c quaternions for all rigid groups in system ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ i1=lstrgd(jr+ind(id,1)) ++ i2=lstrgd(jr+ind(id,2)) ++ i3=lstrgd(jr+ind(id,3)) ++ ++ jr=jr+numgsit(id) ++ ++c group basis vectors ++ ++ aa(1)=xxx(i1)-xxx(i2) ++ aa(4)=yyy(i1)-yyy(i2) ++ aa(7)=zzz(i1)-zzz(i2) ++ ++ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) ++ ++ if(rotmin(id).gt.1.d-5)then ++ ++ aa(2)=xxx(i1)-xxx(i3) ++ aa(5)=yyy(i1)-yyy(i3) ++ aa(8)=zzz(i1)-zzz(i3) ++ ++ else ++ ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ endif ++ ++ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c group rotational matrix ++ ++ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) ++ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) ++ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) ++ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) ++ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) ++ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) ++ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) ++ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) ++ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) ++ ++c determine quaternions from rotational matrix ++ ++ aq=rot(1)+rot(5) ++ bq=rot(2)-rot(4) ++ cq=rot(6)-rot(8) ++ dq=rot(2)+rot(4) ++ eq=rot(3)+rot(7) ++ fq=rot(6)+rot(8) ++ gq=rot(3)-rot(7) ++ hq=rot(1)-rot(5) ++ ++ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) ++ ++ if(q0(ig).gt.1.d-4)then ++ ++ q1(ig)=-0.25d0*cq/q0(ig) ++ q2(ig)=0.25d0*gq/q0(ig) ++ q3(ig)=-0.25d0*bq/q0(ig) ++ ++ else ++ ++ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q1(ig).gt.1.d-4)then ++ ++ q2(ig)=0.25d0*dq/q1(ig) ++ q3(ig)=0.25d0*eq/q1(ig) ++ ++ else ++ ++ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q2(ig).gt.1.d-4)then ++ ++ q3(ig)=0.25d0*fq/q2(ig) ++ ++ else ++ ++ q3(ig)=1.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c normalise quaternions ++ ++ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) ++ q0(ig)=rnorm*q0(ig) ++ q1(ig)=rnorm*q1(ig) ++ q2(ig)=rnorm*q2(ig) ++ q3(ig)=rnorm*q3(ig) ++ ++ enddo ++ ++c test for redundant degrees of freedom ++c and ensure rotational inertias are non-zero ++ ++ degrot=0.d0 ++ ++ if(lsolva)then ++ degrot_sol(:)=0.d0 ++ endif ++ ++ do ig=1,ngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ enddo ++ ++c rotational degrees of freedom and rigid body contribution ++c to total degrees of freedom ++ ++ degrot=degrot+dble(ngrp)*3.d0 ++ degfre=degrot+dble(ngrp)*3.d0 ++ ++ if(lsolva)then ++ ++ fngrp=1 ++ lngrp=0 ++ ++ do itmols=1,mxtmls ++ ++ lngrp=lngrp+nummols(itmols)*numgrp(itmols) ++ ++ do ig=fngrp,lngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ enddo ++ ++ fngrp=lngrp+1 ++ ++ enddo ++ ++ endif ++ ++c summarise results ++ ++ if(idnode.eq.0)then ++ ++ if(gmass(1).gt.0.d0)then ++ ++ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' ++ ++ do id=1,mxungp ++ ++ if(gmass(id).gt.0.d0)then ++ ++ write(nrite,'(/,a,i10)')' group of type ',id ++ write(nrite,'(12x,a,f20.10)')' total mass ', ++ x gmass(id) ++ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', ++ x rotinx(id,1),rotiny(id,1),rotinz(id,1) ++ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', ++ x 'b coord','c coord' ++ do j=1,numgsit(id) ++ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), ++ x gyy(id,j),gzz(id,j) ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c find number of unique groups ++ ++ ngp=0 ++ do ig=1,ngrp ++ ngp=max(ngp,lstgtp(ig)) ++ enddo ++ ++c calculate reciprocal of rotational inertias ++ ++ do id=1,ngp ++ ++ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1))*1.d-5 ++ ++ if(rotinx(id,1).lt.rotlim)then ++ rotinx(id,2)=0.d0 ++ else ++ rotinx(id,2)=1.d0/rotinx(id,1) ++ endif ++ ++ if(rotiny(id,1).lt.rotlim)then ++ rotiny(id,2)=0.d0 ++ else ++ rotiny(id,2)=1.d0/rotiny(id,1) ++ endif ++ ++ if(rotinz(id,1).lt.rotlim)then ++ rotinz(id,2)=0.d0 ++ else ++ rotinz(id,2)=1.d0/rotinz(id,1) ++ endif ++ ++ enddo ++ ++c Check of quaternion set up with atomic positions ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c group type ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ ++ txx(jr)=xxx(i)-xxt(i) ++ tyy(jr)=yyy(i)-yyt(i) ++ tzz(jr)=zzz(i)-zzt(i) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,txx,tyy,tzz) ++ ++c set tolerance for testing quaternion setup. ++ ++ rsq=0.d0 ++ tol=1.d-2 ++ ++ do i=1,jr ++ ++ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ if(rrr.gt.tol)then ++ ++ rsq=rrr ++ ++ endif ++ ++ enddo ++ ++c exit if error in set up ++ ++ safe=.true. ++ if(rsq.gt.tol)safe=.false. ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)call error(idnode,310) ++ ++c sort lstgot into ascending order ++ ++ call shellsort(jt,lstgot) ++ ++c check that no site is in more than 1 rigid group ++ ++ i=1 ++ safe=.true. ++ do while(i.lt.jt) ++ ++ i=i+1 ++ linear=.true. ++ do while(linear) ++ ++ linear=.false. ++ ++ if(lstgot(i).eq.lstgot(i-1))then ++ ++ linear=.true. ++ safe=.false. ++ jt=jt-1 ++ ++ do j=i,jt ++ lstgot(j)=lstgot(j+1) ++ enddo ++ ++ endif ++ ++ if(i.ge.jt)linear=.false. ++ ++ enddo ++ ++ enddo ++ ++ if(.not.safe)call error(idnode,320) ++ ++c list of 'free' sites ++ ++ ii=1 ++ jj=0 ++ do i=1,natms ++ ++ if(lstgot(ii).eq.i)then ++ ++ ii=ii+1 ++ ++ else ++ ++ if(lstfrz(i).eq.0)then ++ jj=jj+1 ++ lstfre(jj)=i ++ endif ++ ++ endif ++ ++ enddo ++ ++c number of free sites ++ ++ ntfree=jj ++ ++c list of atoms integrated on this node ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ jr=jr+numgsit(id) ++ ++ enddo ++ ++ do i=1,jr ++ lstme(i)=lstrgd(i) ++ enddo ++ ++c block parameters for free atoms ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do i=ifre1,ifre2 ++ ++ jr=jr+1 ++ lstme(jr)=lstfre(i) ++ ++ enddo ++ ++c exchange quaternion data with other nodes ++ ++ if(mxnode.gt.1)call merge4 ++ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++ if(lsolva)lstgot_sol(:)=lstgot(:) ++ ++c deallocate work arrays ++ ++ deallocate (ind,lstgot,stat=fail(1)) ++ deallocate (txx,tyy,tzz,stat=fail(2)) ++ deallocate (xxt,yyt,zzt,stat=fail(3)) ++ deallocate (gaxs,rotmin,stat=fail(4)) ++ deallocate (accum,stat=fail(5)) ++ ++ return ++ end subroutine quatbook ++ ++ subroutine abort_field_read(kode,idnode,nfield) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting FIELD file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nfield ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(kode.eq.1)then ++ ++c end of field file error exit ++ ++ call error(idnode,52) ++ ++ elseif(kode.eq.2)then ++ ++c unrecognised directive in field file ++ ++ call error(idnode,4) ++ ++ endif ++ ++ return ++ end subroutine abort_field_read ++ ++ subroutine abort_control_read(kode,idnode,nread) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nread ++ ++ if(idnode.eq.0)close (nread) ++ ++ if(kode.eq.1)then ++ ++c end of control file error exit ++ ++ call error(idnode,53) ++ ++ elseif(kode.eq.2)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,0) ++ ++ endif ++ ++ return ++ end subroutine abort_control_read ++ ++ subroutine abort_config_read(kode,idnode,nconf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nconf ++ ++ if(idnode.eq.0)close (nconf) ++ ++ if(kode.eq.1)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,54) ++ ++ elseif(kode.eq.2)then ++ ++c end of config file error exit ++ ++ call error(idnode,55) ++ ++ endif ++ ++ return ++ end subroutine abort_config_read ++ ++ subroutine neutbook(lneut,idnode,natms,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for neutral group bookkeeping ++c ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lneut,safe ++ integer idnode,natms,nneut,i ++ ++ safe=.true. ++ ++c neutral group bookkeeping: sites must be listed consecutively ++ ++ if(lneut)then ++ ++ if(lstneu(1).ne.1)call error(idnode,230) ++ ++ neulst(1)=1 ++ nneut=1 ++ ++ do i=2,natms ++ ++ safe=.false. ++ if(lstneu(i).eq.lstneu(i-1))safe=.true. ++ if(lstneu(i).eq.lstneu(i-1)+1)then ++ ++ safe=.true. ++ nneut=nneut+1 ++ if(nneut.gt.mxneut)call error(idnode,220) ++ neulst(nneut)=i ++ ++ endif ++ ++ if(.not.safe)call error(idnode,230) ++ ++ enddo ++ ++ neulst(nneut+1)=natms+1 ++ ++ endif ++ ++ return ++ ++ end subroutine neutbook ++ ++ subroutine intlist ++ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the interaction lists ++c for the entire simulated system ++c ++c parallel replicated dat version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,safe1,lcnb,lchk,lfail ++ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons ++ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf ++ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle ++ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths ++ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 ++ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum ++ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 ++ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 ++ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle ++ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp ++ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail ++ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail ++ real(8) tol ++ ++ integer, allocatable :: itest(:),index(:),kscons(:) ++ integer, allocatable :: msite(:),mconst(:),listin(:) ++ ++ dimension fail(4) ++ ++ data fail/0,0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) ++ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) ++ allocate (listin(mxatms),stat=fail(3)) ++ allocate (kscons(0:mxproc-1),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1800) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ ibonds=0 ++ jbonds=0 ++ kbonds=0 ++ ipmf=0 ++ jpmf=0 ++ iangle=0 ++ jangle=0 ++ kangle=0 ++ idihed=0 ++ jdihed=0 ++ kdihed=0 ++ iinver=0 ++ jinver=0 ++ kinver=0 ++ iteths=0 ++ jteths=0 ++ kteths=0 ++ ishels=0 ++ jshels=0 ++ kshels=0 ++ safe=.true. ++ safe1=.true. ++ ++c find total number of bonds,pmf constraints,bond constraints, ++c angles,dihedrals,inversions, tethers,core-shells, in system ++c - ignoring frozen atoms ++ ++ ntbon0=0 ++ ntpmf0=0 ++ ntcon0=0 ++ ntang0=0 ++ ntdih0=0 ++ ntinv0=0 ++ nttet0=0 ++ ntshl0=0 ++ nscons=0 ++ ntcons=0 ++ ++ do itmols=1,ntpmls ++ ++ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) ++ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) ++ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) ++ ntang0=ntang0+nummols(itmols)*numang(itmols) ++ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) ++ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) ++ nttet0=nttet0+nummols(itmols)*numteth(itmols) ++ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) ++ ++ enddo ++ ++ isite=0 ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ ++c first and last index of bonds, angles etc for this node ++ ++ ibnd1=(idnode*ntbon0)/mxnode+1 ++ ibnd2=((idnode+1)*ntbon0)/mxnode ++ ++ ipmf1=(idnode*ntpmf0)/mxnode+1 ++ ipmf2=((idnode+1)*ntpmf0)/mxnode ++ ntpmf=ntpmf0 ++ nspmf=ipmf2+1-ipmf1 ++ ++ iang1=(idnode*ntang0)/mxnode+1 ++ iang2=((idnode+1)*ntang0)/mxnode ++ ++ idih1=(idnode*ntdih0)/mxnode+1 ++ idih2=((idnode+1)*ntdih0)/mxnode ++ ++ iinv1=(idnode*ntinv0)/mxnode+1 ++ iinv2=((idnode+1)*ntinv0)/mxnode ++ ++ itet1=(idnode*nttet0)/mxnode+1 ++ itet2=((idnode+1)*nttet0)/mxnode ++ ++ ishl1=(idnode*ntshl0)/mxnode+1 ++ ishl2=((idnode+1)*ntshl0)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct bond constraint list later ++c construct chemical bond interaction list ++ ++ do lbonds=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then ++ ++ jbonds=jbonds+1 ++ if(jbonds.le.mxbond)then ++ ++ listbnd(jbonds,1)=lbonds+kbonds ++ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) ++ x +isite ++ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,31) ++ ++c construct pmf site lists - no exclusions ++ ++ do lpmf=1,numpmf(itmols) ++ ++ ipmf=ipmf+1 ++ ++ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then ++ ++ jpmf=jpmf+1 ++ if(jpmf.le.mspmf)then ++ ++ nnn=npmf(1)+npmf(2) ++ if(nnn.le.mxspmf)then ++ ++ do jj=1,npmf(1)+npmf(2) ++ lstpmf(jj,jpmf)=indpmf(jj)+isite ++ enddo ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ else ++ ++ safe1=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe1) ++ if(.not.safe1)call error(idnode,458) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,460) ++ ++c construct valence angle interaction list ++ ++ do langle=1,numang(itmols) ++ ++ iangle=iangle+1 ++ ++ if(iangle.ge.iang1.and.iangle.le.iang2)then ++ ++ jangle=jangle+1 ++ if(jangle.le.mxangl)then ++ ++ listang(jangle,1)=langle+kangle ++ listang(jangle,2)=lstang(langle+kangle,1) ++ x +isite ++ listang(jangle,3)=lstang(langle+kangle,2) ++ x +isite ++ listang(jangle,4)=lstang(langle+kangle,3) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,51) ++ ++c construct dihedral angle interaction list ++ ++ do ldihed=1,numdih(itmols) ++ ++ idihed=idihed+1 ++ ++ if(idihed.ge.idih1.and.idihed.le.idih2)then ++ ++ jdihed=jdihed+1 ++ if(jdihed.le.mxdihd)then ++ ++ listdih(jdihed,1)=ldihed+kdihed ++ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) ++ x +isite ++ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) ++ x +isite ++ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) ++ x +isite ++ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,61) ++ ++c construct inversion potential list ++ ++ do linver=1,numinv(itmols) ++ ++ iinver=iinver+1 ++ ++ if(iinver.ge.iinv1.and.iinver.le.iinv2)then ++ ++ jinver=jinver+1 ++ if(jinver.le.mxinv)then ++ ++ listinv(jinver,1)=linver+kinver ++ listinv(jinver,2)=lstinv(linver+kinver,1) ++ x +isite ++ listinv(jinver,3)=lstinv(linver+kinver,2) ++ x +isite ++ listinv(jinver,4)=lstinv(linver+kinver,3) ++ x +isite ++ listinv(jinver,5)=lstinv(linver+kinver,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,77) ++ ++c construct tethered atoms interaction list ++ ++ do lteths=1,numteth(itmols) ++ ++ iteths=iteths+1 ++ ++ if(iteths.ge.itet1.and.iteths.le.itet2)then ++ ++ jteths=jteths+1 ++ if(jteths.le.msteth)then ++ ++ listtet(jteths,1)=lteths+kteths ++ listtet(jteths,2)=lsttet(lteths+kteths)+isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,63) ++ ++c construct core-shell list ++ ++ do lshels=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ if(ishels.ge.ishl1.and.ishels.le.ishl2)then ++ ++ jshels=jshels+1 ++ if(jshels.le.mxshl)then ++ ++ listshl(jshels,1)=lshels+kshels ++ listshl(jshels,2)=lstshl(lshels+kshels,1) ++ x +isite ++ listshl(jshels,3)=lstshl(lshels+kshels,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,59) ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kbonds=kbonds+numbonds(itmols) ++ kangle=kangle+numang(itmols) ++ kdihed=kdihed+numdih(itmols) ++ kinver=kinver+numinv(itmols) ++ kteths=kteths+numteth(itmols) ++ kshels=kshels+numshl(itmols) ++ ++ enddo ++ ++c store array counters for bookkeeping ++ ++ ntbond=ibonds ++ ntangl=iangle ++ ntdihd=idihed ++ ntinv=iinver ++ ntteth=iteths ++ ntshl=ishels ++ ++c pass bond constraint information to other nodes ++ ++ if(ntcon0.gt.0)then ++ ++ ntcons=ntcon0 ++ ++c find starting site no. and constraint no. for each molec. type ++ ++ msite(1)=0 ++ mconst(1)=0 ++ ++ do itmols=2,ntpmls ++ ++ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* ++ x nummols(itmols-1) ++ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) ++ ++ enddo ++ ++c sort molecules into ascending order of number of constraints ++ ++ do i=1,ntpmls ++ ++ itest(i)=numcon(i) ++ index(i)=0 ++ ++ enddo ++ ++ call shellsort(ntpmls,itest) ++ ++ do i=1,ntpmls ++ ++ lchk=.true. ++ do j=1,ntpmls ++ ++ if(itest(i).eq.numcon(j))then ++ ++ if(lchk)then ++ index(i)=j ++ lchk=.false. ++ ++ endif ++ ++ do ii=1,i-1 ++ if(index(ii).eq.j)lchk=.true. ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c load balance to within 10% ++ ++ tol=1.0d0+(0.10d0)/2.d0 ++ kcons=(ntcons)/mxnode ++ ntmp=0 ++ ++c find smallest constrained molecule to allocate to a node ++ ++ do i=1,ntpmls ++ ++ if(ntmp.le.mxnode)then ++ ++ if(numcon(index(i)).gt.0)then ++ ntmp=ntmp+nummols(index(i)) ++ klo=max(0,kcons-numcon(index(i))/2) ++ khi=klo+numcon(index(i))+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++c reset hi/lo limits if molecules contain too many constraints ++ ++ if(dble(khi)/dble(max(1,klo)).gt.tol)then ++ klo=nint(dble(kcons)/tol) ++ khi=nint(dble(kcons)*tol)+1 ++ endif ++ ++c store lo value for later ++ ++ klo0=klo ++ ++c begin assignment of constraints ---------------------------------- ++ ++ ifail=-1 ++ lfail=.true. ++ do while(lfail) ++ ++ ifail=ifail+1 ++ ++ if(ifail.gt.ntpmls)then ++ call error(idnode,432) ++ endif ++ ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ lconst=0 ++ ++c zero running totals of constraints on each processor ++ ++ do id=0,mxnode-1 ++ kscons(id)=0 ++ enddo ++ ++ iloop=0 ++ lfail=.false. ++ iconst=0 ++ jconst=0 ++ nnode=0 ++ ++c assign difficult molecules in blocks ++ ++ if(ifail.gt.0)then ++ ++ nfail=0 ++ do i=1,ifail ++ ++ ii=ntpmls+1-i ++ nfail=nfail+nummols(index(ii))*numcon(index(ii)) ++ ++ enddo ++ ++c decide on number of processors to split over ++ ++ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) ++ nnode=max(2,nnode) ++ nnode=min(nnode,mxnode) ++ ++c assign to processors 0..nnode-1 ++ ++ do id=0,nnode-1 ++ ++ nscons0=(id*nfail)/nnode+1 ++ nscons1=((id+1)*nfail)/nnode ++ ++ kscons(id)=nscons1+1-nscons0 ++ ++ enddo ++ ++c this processors block ++ ++ nscons0=(idnode*nfail)/nnode+1 ++ nscons1=((idnode+1)*nfail)/nnode ++ ++c assign in blocks ++ ++ do itmols=ntpmls,ntpmls-ifail+1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ ++c construct bond constraint list ++ ++ do lconst=1,numcon(ii) ++ ++ iconst=iconst+1 ++ ++ if(iconst.ge.nscons0.and.iconst.le.nscons1)then ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c assign non-problematic molecules ++ ++ jdnode=mod(nnode+1,mxnode) ++ ++ do itmols=ntpmls-ifail,1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ itry=0 ++ lchk=.true. ++ do while(lchk) ++ ++ if(kscons(jdnode)+icon.le.klo)then ++ ++ if(jdnode.ne.idnode)then ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ else ++ ++c construct bond constraint list ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ do lconst=1,numcon(ii) ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ ++ endif ++ ++ else ++ ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.true. ++ itry=itry+1 ++ ++ endif ++ ++ if(lchk.and.itry.gt.mxnode)then ++ ++ klo=kcons ++ kcons=khi ++ itry=0 ++ iloop=iloop+1 ++ ++ endif ++ ++c split molecule across nodes if have to ++ ++ if(iloop.gt.3)then ++ lfail=.true. ++ kcons=ntcons/mxnode ++ klo=klo0 ++ lchk=.false. ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c check no node has less than minimum number ++ ++ do id=0,mxnode-1 ++ if(kscons(id).lt.klo0)then ++ lfail=.true. ++ endif ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(mxnode.gt.1)call gimax(jconst,1,idum) ++ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') ++ x 'Number of constraints found ',jconst,'Max allowed ',mxcons ++ ++ call error(idnode,41) ++ ++ endif ++ ++ nscons=kscons(idnode) ++ ++ call passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++ endif ++ ++ if(npmf(1).gt.0)then ++ ++ call passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++ endif ++ ++c pass rigid body data ++ ++ lcnb=.false. ++ if(ntcons.gt.0.and.ngrp.gt.0)then ++ ++ call passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, ++ x numgsit) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(itest,index,msite,stat=fail(1)) ++ deallocate(mconst,kscons,listin,stat=fail(2)) ++ ++ return ++ end subroutine intlist ++ ++ subroutine ensemble_selection ++ x (directive,lens,kill,idnode,keyens,mode,taut,taup) ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ensemble and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical kill,lens ++ integer keyens,idnode,idum,mode ++ real(8) taut,taup ++ ++ if(findstring('nve',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'microcanonical ensemble')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('nvt',directive,idum))then ++ ++ if(findstring('evans',directive,idum))then ++ ++ keyens=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Evans Gaussian temperature constraints', ++ x ' in use')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('ber',directive,idum))then ++ ++ keyens=2 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen thermostat', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=3 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('npt',directive,idum))then ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=4 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen isotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=5 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('nst',directive,idum))then ++ ++ mode=0 ++ if(findstring('block',directive,idum))mode=1 ++ if(findstring('surf',directive,idum))mode=2 ++ if(findstring('slab',directive,idum))mode=3 ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=6 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen anisotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=7 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ if(mode.eq.0)then ++ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") ++ elseif(mode.eq.1)then ++ write(nrite, ++ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") ++ elseif(mode.eq.2)then ++ write(nrite, ++ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") ++ elseif(mode.eq.3)then ++ write(nrite, ++ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") ++ endif ++ ++ endif ++ ++ elseif(findstring('pmf',directive,idum))then ++ ++ keyens=8 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'potential of mean force calculation (NVE)')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ call error(idnode,-436) ++ kill=.true. ++ ++ endif ++ ++ return ++ end subroutine ensemble_selection ++ ++ subroutine neb_option ++ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, ++ x opttol,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for NEB option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical lneb,lminopt,endneb,safe ++ integer numneb,idnode,keytol,i,idum ++ real(8) sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ lminopt=.true. ++ lneb=.true. ++ endneb=.false. ++ numneb=intstr(directive,lenrec,idum) ++ if(numneb.eq.0)numneb=1 ++ numneb=min(maxneb,numneb) ++ ++ hyp_units=1.d0 ++ do while(.not.endneb) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endneb',directive,idum))then ++ endneb=.true. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('basin_1',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_1(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('basin_2',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_2(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'NEB calculation controls')") ++ write(nrite,"(/,1x,'identity of basin 1 ', ++ x 10i10)")(bsn_1(i),i=1,numneb) ++ write(nrite,"(1x,'identity of basin 2 ', ++ x 10i10)")(bsn_2(i),i=1,numneb) ++ write(nrite, ++ x "(1x,'NEB spring constant ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x sprneb,opttol,cunit ++ ++ call print_optim(keytol) ++ ++ endif ++ ++c units conversion ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine neb_option ++ ++ subroutine bpd_option ++ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, ++ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for bias potential ++c dynamics option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 directive(lenrec) ++ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo ++ integer keybpd,idnode,nblock,ntrack,keytol,idum ++ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(ltad)call error(idnode,2355) ++ lminopt=.true. ++ lbpd=.true. ++ endbpd=.false. ++ cunit=" dl_poly" ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'bias potential dynamics controls')") ++ ++ if(findstring('dyn',directive,idum))then ++ ++ keybpd=1 ++ hyp_units=energy_unit() ++ ebias=dblstr(directive,lenrec,idum) ++ vmin=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ if(idnode.eq.0)write(nrite,"( ++ x 1x,'dynamics option selected ', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4 ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,cunit ++ ++ elseif(findstring('path',directive,idum))then ++ ++ keybpd=2 ++ nebgo=.true. ++ hyp_units=1.d0 ++ do while(.not.endbpd) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endbpd',directive,idum))then ++ endbpd=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('noneb',directive,idum))then ++ nebgo=.false. ++ elseif(findstring('target',directive,idum))then ++ call getword(seek,directive,8,lenrec) ++ call getword(seek,directive,8,lenrec) ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('ebias',directive,idum))then ++ ebias=dblstr(directive,lenrec,idum) ++ elseif(findstring('vmin',directive,idum))then ++ vmin=dblstr(directive,lenrec,idum) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"( ++ x 1x,'dynamics with path analysis selected', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4, ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'configuration catch radius (A)',f10.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'atom type to be tracked ',2x,a8, ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit ++ if(nebgo)write(nrite, ++ x "(1x,'NEB spring constant ',e12.4)")sprneb ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ endif ++ ++ return ++ end subroutine bpd_option ++ ++ subroutine tad_option ++ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, ++ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for TAD option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe ++ integer idnode,nblock,ntrack,blkout,keytol,idum ++ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(lbpd)call error(idnode,2355) ++ lminopt=.true. ++ ltad=.true. ++ endtad=.false. ++ hyp_units=1.d0 ++ ++ do while(.not.endtad) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endtad',directive,idum))then ++ endtad=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('all',directive,idum))then ++ tadall=.true. ++ if(findstring('false',directive,idum))tadall=.false. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('blackout',directive,idum))then ++ blkout=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('deltad',directive,idum))then ++ deltad=dblstr(directive,lenrec,idum) ++ elseif(findstring('low_temp',directive,idum))then ++ tlow=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'TAD dynamics controls' ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'steps in blackout periods ',i10, ++ x /,1x,'configuration catch radius ',1p,e12.4, ++ x /,1x,'NEB spring constant ',e12.4, ++ x /,1x,'stopping parameter ',e12.4, ++ x /,1x,'target low temperature ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x nblock,ntrack,blkout,catchrad,sprneb,deltad, ++ x tlow,opttol,cunit ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ if(tadall)write(nrite, ++ x "(1x,'option for all basins analysis selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine tad_option ++ ++ subroutine metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for metadynamics option ++c copyright - daresbury laboratory ++c author - w. smith jan 2011 ++c ++c note: default values are set in metafreeze_module ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe ++ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int ++ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt ++ ++ lmetadyn=.true. ++ endmet=.false. ++ ++ do while(.not.endmet) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endmet',directive,idum))then ++ endmet=.true. ++ elseif(findstring('ncolvar',directive,idum))then ++ ncolvar=intstr(directive,lenrec,idum) ++ elseif(findstring('lstein',directive,idum))then ++ lstein=.true. ++ if(findstring('false',directive,idum))lstein=.false. ++ elseif(findstring('ltet',directive,idum))then ++ ltet=.true. ++ if(findstring('false',directive,idum))ltet=.false. ++ elseif(findstring('lglobpe',directive,idum))then ++ lglobpe=.true. ++ if(findstring('false',directive,idum))lglobpe=.false. ++ elseif(findstring('llocpe',directive,idum))then ++ llocpe=.true. ++ if(findstring('false',directive,idum))llocpe=.false. ++ elseif(findstring('globpe_scale',directive,idum))then ++ globpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('locpe_scale',directive,idum))then ++ locpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('nq4',directive,idum))then ++ nq4=intstr(directive,lenrec,idum) ++ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('nq6',directive,idum))then ++ nq6=intstr(directive,lenrec,idum) ++ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('ntet',directive,idum))then ++ ntet=intstr(directive,lenrec,idum) ++ elseif(findstring('meta_step_int',directive,idum))then ++ meta_step_int=intstr(directive,lenrec,idum) ++ elseif(findstring('ref_w_aug',directive,idum))then ++ ref_W_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('h_aug',directive,idum))then ++ h_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('hkey',directive,idum))then ++ hkey=intstr(directive,lenrec,idum) ++ elseif(findstring('wt_dt',directive,idum))then ++ wt_dt=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'metadynamics controls' ++ x /,1x,'total number of collective variables',i10, ++ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, ++ x /,1x,'tetrahedral parameters option (zeta)',l10, ++ x /,1x,'global potential parameter option ',l10, ++ x /,1x,'local potential parameter option ',l10, ++ x /,1x,'global potential param. scale factor',e12.4, ++ x /,1x,'local potential param. scale factor ',e12.4)") ++ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale ++ ++ write(nrite, ++ x "( 1x,'number of Q4 atom pair types ',i10, ++ x /,1x,'number of Q6 atom pair types ',i10, ++ x /,1x,'number of zeta atom triplet types ',i10)") ++ x nq4,nq6,ntet ++ ++ write(nrite, ++ x "( 1x,'gaussian deposition interval ',i10, ++ x /,1x,'reference gaussian height ',e12.4, ++ x /,1x,'gaussian width parameter ',e12.4, ++ x /,1x,'height control key ',i10, ++ x /,1x,'well-tempered control parameter ',e12.4)") ++ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt ++ ++ endif ++ ++ return ++ end subroutine metadyn_option ++ ++ subroutine ewald_selection ++ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, ++ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ewald method and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lhke,lspme,lewald,lcut,lforc,kill,safe ++ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum ++ integer kmaxpow2 ++ real(8) alpha,rcut,eps,tol,fac,tol1 ++ ++ lhke=findstring('hke',directive,idum) ++ lspme=findstring('spme',directive,idum) ++ lewald=findstring('ewald',directive,idum) ++ if(lewald)keyfce=2 ++ if(lspme)keyfce=12 ++ if(lhke)keyfce=14 ++ if(idnode.eq.0)open(nconf,file='CONFIG') ++ call getrec(safe,idnode,nconf) ++ call getrec(safe,idnode,nconf) ++ imcon=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then ++ ++ call error(idnode,-180) ++ kill=.true. ++ ++ endif ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps ++ ++ if(lhke)then ++ ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ if(nlatt.eq.0)nlatt=1 ++ if(nhko.eq.0)nhko=1 ++ ++ endif ++ ++ if(.not.lcut)then ++ call error(idnode,-433) ++ kill=.true. ++ else ++ ++c retreive cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(directive,lenrec,idum) ++ kmax1=intstr(directive,lenrec,idum) ++ kmax2=intstr(directive,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ ++ else ++ ++ kmax3=intstr(directive,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c if spme double kmax and set to next power of 2, with current upper ++c limit of 512. ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax1=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax2=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax3=2 * kmaxpow2 ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ close(nconf) ++ ++ if(lspme)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : SPME ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1/2,kmax2/2,kmax3/2 ++ ++ elseif(lhke)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 ',2i5)") ++ x alpha,kmax1,kmax2 ++ ++ write(nrite, ++ x "(1x,'HKE expansion order ',7x,i10, ++ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt ++ ++ else ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1,kmax2,kmax3 ++ ++ endif ++ ++ endif ++ ++ if(lspme)then ++ ++c Initialize fft tables ++ ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (fplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++CFFTW ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (bplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++ ++CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CSGIC x dummy,1,1,ffttable,dummy,dummy ) ++ ++CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CCRAY x dummy,1,1,ffttable,dummy,dummy ) ++ ++ endif ++ ++ if(lspme)then ++ ++ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ elseif(lhke)then ++ ++ if(kmax2.gt.kmaxb)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ else ++ ++ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ lforc=.true. ++ ++ return ++ end subroutine ewald_selection ++ ++ subroutine print_optim(keytol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing the optimisation option ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer keytol ++ ++ if(keytol.eq.0)then ++ write(nrite, ++ x "(1x,'convergence to minimum force selected')") ++ elseif(keytol.eq.1)then ++ write(nrite, ++ x "(1x,'convergence to minimum energy selected')") ++ else ++ write(nrite, ++ x "(1x,'convergence to minimum position selected')") ++ endif ++ ++ return ++ end subroutine print_optim ++ ++ function energy_unit() ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for assigning energy conversion factors ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idum ++ real(8) energy_unit ++ ++ energy_unit=1.d0 ++ if(findstring('ev',record,idum))then ++ energy_unit=9648.530821d0 ++ elseif(findstring('kev',record,idum))then ++ energy_unit=9648530.821d0 ++ elseif(findstring('kcal',record,idum))then ++ energy_unit=418.4d0 ++ elseif(findstring('kj',record,idum))then ++ energy_unit=1.d2 ++ elseif(findstring('k',record,idum))then ++ energy_unit=boltz ++ endif ++ ++ return ++ end function energy_unit ++ ++ subroutine solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for solvation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,endsol,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ endsol=.false. ++ ++ nsolva=intstr(directive,lenrec,idum) ++ isolva=intstr(directive,lenrec,idum) ++ ++ if(nsolva.eq.0.and.isolva.eq.0)then ++ ++ do while(.not.endsol) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endsol',directive,idum))then ++ endsol=.true. ++ elseif(findstring('enddec',directive,idum))then ++ endsol=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=max(intstr(directive,lenrec,idum),1) ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'solvation calculation selected', ++ x /,1x,'start of solvation calculation ',i10, ++ x /,1x,'solvation calculation interval ',i10)") ++ x nsolva,isolva ++ ++ endif ++ ++ return ++ end subroutine solvation_option ++ ++ subroutine free_energy_option(directive,lfree,lfrmas,idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for free energy option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lfree,lfrmas,endfre,safe ++ integer idnode,idum ++ ++ mfree=1 ++ kfree=1 ++ lfree=.true. ++ lfrmas=.false. ++ endfre=.false. ++ ++ do while(.not.endfre) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endfre',directive,idum))then ++ endfre=.true. ++ elseif(findstring('start',directive,idum))then ++ nfrn=intstr(directive,lenrec,idum) ++ elseif(findstring('interval',directive,idum))then ++ ifrn=intstr(directive,lenrec,idum) ++ elseif(findstring('lambda',directive,idum))then ++ pfree=dblstr(directive,lenrec,idum) ++ elseif(findstring('mix',directive,idum))then ++ mfree=intstr(directive,lenrec,idum) ++ elseif(findstring('expo',directive,idum))then ++ kfree=intstr(directive,lenrec,idum) ++ elseif(findstring('reset_mass',directive,idum))then ++ lfrmas=.true. ++ if(findstring('false',directive,idum))lfrmas=.false. ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(mfree.eq.1)kfree=1 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'free energy option selected', ++ x /,1x,'start of free energy calculation ',i10, ++ x /,1x,'sampling interval ',i10, ++ x /,1x,'free energy parameter (lambda) ',f10.3, ++ x /,1x,'mixing rule selected ',i10, ++ x /,1x,'mixing rule exponent ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10, ++ x /,1x,'mass scaling option ',l10)") ++ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas ++ ++ endif ++ ++c define free energy scaling parameters ++ ++ call freegen() ++ ++ return ++ end subroutine free_energy_option ++ ++ subroutine excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for excitation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lexcite,lghost,endexc,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lexcite=.true. ++ endexc=.false. ++ ++ do while(.not.endexc) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endexc',directive,idum))then ++ endexc=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'excitation option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,ind_fre ++ ++ endif ++ ++ return ++ end subroutine excitation_option ++ ++ subroutine switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for switching option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lswitch,lghost,endswi,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lswitch=.true. ++ endswi=.false. ++ niswitch=0 ++ ++ do while(.not.endswi) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endswi',directive,idum))then ++ endswi=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('period',directive,idum))then ++ niswitch=max(intstr(directive,lenrec,idum),2) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(niswitch.eq.0)niswitch=nsolva ++ nswitch=nsolva ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'switching option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'switching period ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,niswitch,ind_fre ++ ++ endif ++ ++ return ++ end subroutine switching_option ++ ++ end module define_system_module ++ +diff -urN dl_class_1.9.orig/srcmod/dihedral_module.f dl_class_1.9/srcmod/dihedral_module.f +--- dl_class_1.9.orig/srcmod/dihedral_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dihedral_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1121 @@ ++ module dihedral_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining dihedral potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted - p.-a. cazade oct 2007 : solvation, free energy, etc. ++c adapted - w.smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmdih(:,:) ++ integer, allocatable :: listdih(:,:) ++ integer, allocatable :: numdih(:),keydih(:),lstdih(:,:) ++ ++ save prmdih,listdih,numdih,keydih,lstdih ++ ++ contains ++ ++ subroutine alloc_dih_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmdih(mxtdih,mxpdih),stat=fail(1)) ++ allocate (numdih(mxtmls),stat=fail(2)) ++ allocate (keydih(mxtdih),stat=fail(3)) ++ allocate (lstdih(mxtdih,4),stat=fail(4)) ++ allocate (listdih(mxdihd,5),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1011) ++ enddo ++ ++ do i=1,mxtmls ++ numdih(i)=0 ++ enddo ++ ++ end subroutine alloc_dih_arrays ++ ++ subroutine define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining dihedral angles ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,ndihed,nsite,ntmp,idih,idih1,i ++ integer iatm1,iatm2,iatm3,iatm4,idum,isite1,isite2,isite3 ++ integer isite4,ia,ja ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numdih(itmols)=numdih(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of dihedral angles', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,/,1x,'dihedral angle details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'index',5x,'f-const',7x,'angle', ++ x 8x,'trig',4x,'1-4 elec',5x,'1-4 vdw',/)") ++ endif ++ ++ idih1=numdih(itmols) ++ do idih=1,idih1 ++ ++c read dihedral bond angle potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ iatm4=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ isite4=nsite-numsit(itmols)+iatm4 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3)*lfzsit(isite4).ne.0)then ++ ++ numdih(itmols)=numdih(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ ndihed=ndihed+1 ++ ++ if(ndihed.gt.mxtdih)call error(idnode,60) ++ ++ if(keyword(1:4).eq.'cos ')then ++ keydih(ndihed)=1 ++ elseif(keyword(1:4).eq.'harm')then ++ keydih(ndihed)=2 ++ elseif(keyword(1:4).eq.'hcos')then ++ keydih(ndihed)=3 ++ elseif(keyword(1:4).eq.'cos3')then ++ keydih(ndihed)=4 ++ elseif(keyword(1:4).eq.'ryck')then ++ keydih(ndihed)=5 ++ elseif(keyword(1:4).eq.'rbf')then ++ keydih(ndihed)=6 ++ elseif(keyword(1:4).eq.'opls')then ++ keydih(ndihed)=7 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,448) ++ endif ++ ++ lstdih(ndihed,1)=iatm1 ++ lstdih(ndihed,2)=iatm2 ++ lstdih(ndihed,3)=iatm3 ++ lstdih(ndihed,4)=iatm4 ++ prmdih(ndihed,1)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,2)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,3)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,4)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,5)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstdih(ndihed,ia),ia=1,4), ++ x (prmdih(ndihed,ja),ja=1,mxpdih) ++ ++c convert energies to internal units and angles to radians ++ ++ prmdih(ndihed,1)=prmdih(ndihed,1)*engunit ++ ++ if(keydih(ndihed).eq.4)then ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit ++ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit ++ ++ elseif(keydih(ndihed).eq.7)then ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit ++ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit ++ prmdih(ndihed,4)=prmdih(ndihed,4)*engunit ++ prmdih(ndihed,5)=prmdih(ndihed,5)*(pi/180.d0) ++ ++ else ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*(pi/180.d0) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_dihedrals ++ ++ subroutine dihfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntdihd,keyfce, ++ x dlrpot,epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe, ++ x virdih,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating dihedral energy and force ++c terms in molecular dynamics. ++c ++c version 3: scale factors for reduces electrostatic and vdw ++c 1-4 interactions. ++c ++c NOTE: assumes 1-4 interactions are in the exclude list ++c ++c block as opposed to stride version ++c ++c copyright - daresbury laboratory ++c author - w. smith mar 1992 ++c modified - t. forester dec 1993 ++c modified - t. forester jun 1995 - stress tensor added ++c modified - a. smondyrev may 2000 - ryckaert-bellemans potentials ++c modified - p.-a. cazade oct 2007 - solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive,kdrive,ldrive ++ integer i,k,ii,kk,ntdihd,idnode,mxnode,idih1,idih2,ia,ib ++ integer ic,id,imcon,ka,kb,l,keyfce,fail1,fail2,fail3,kkk ++ real(8) phi,twopi,rtwopi,dterm,srpot ++ real(8) engdih,virdih,engc14,engs14,virs14,rrbc,xab,yab,erc,fer ++ real(8) zab,xbc,ybc,zbc,xcd,ycd,zcd,pbx,pby,pbz,pb2,rpb1,rpb2 ++ real(8) pcx,pcy,pcz,pc2,rpc1,rpc2,pbpc,cosp,sinp,rsinp,exp1 ++ real(8) gamma,fax,fay,faz,fcx,fcy,fcz,fb1x,fb1y,fb1z,fd1x,fd1y ++ real(8) fd1z,scale,xad,yad,zad,rad,chgprd,coul,fcoul,fx,fy,fz ++ real(8) ppp,dlrpot,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,epsq,engcpe ++ real(8) vircpe,rcut,rvdw,engsrp,virsrp,xac,yac,zac,vcon,fcon ++ real(8) virc14,b0,rfld0,rfld1,rfld2,alpha,a1,a2,a3,a4,a5,pp,tt ++ real(8) cou14_vir,vdw14_vir,strs(6),strs_loc(6) ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) ++ real(8), allocatable :: xdcd(:),ydcd(:),zdcd(:) ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ data fail1,fail2,fail3/0,0,0/ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) ++ allocate (xdcd(msbad),ydcd(msbad),zdcd(msbad),stat=fail3) ++ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) ++ x call error(idnode,1060) ++ ++ twopi=2.d0*pi ++ rtwopi=1.d0/twopi ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntdihd-mxnode+1)/mxnode.gt.msbad) call error(idnode,421) ++ ++c block indices ++ ++ idih1=(idnode*ntdihd)/mxnode+1 ++ idih2=((idnode+1)*ntdihd)/mxnode ++ ++c initialise accumulators ++ ++ engdih=0.d0 ++ virdih=0.d0 ++ dih_fre=0.d0 ++ dih_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(3)=.true. ++ dih_sol(:)=0.d0 ++ if(lexcite)dih_exc(:)=0.d0 ++ ++ endif ++ ++ if(keyfce/2.eq.4)then ++ ++c constant terms for shifted coulombic potential ++ ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut ++ ++ elseif(keyfce/2.eq.5)then ++ ++c constant terms for reaction field potential ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut-rfld0*rcut ++ vcon=vcon+rfld2*rcut**2-rfld1 ++ ++ endif ++ ++c calculate bond vectors ++ ++ ii=0 ++ do i=idih1,idih2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listdih(ii,2) ++ ib=listdih(ii,3) ++ ic=listdih(ii,4) ++ id=listdih(ii,5) ++ ++c define components of bond vectors ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++ xdbc(ii)=xxx(ib)-xxx(ic) ++ ydbc(ii)=yyy(ib)-yyy(ic) ++ zdbc(ii)=zzz(ib)-zzz(ic) ++ ++ xdcd(ii)=xxx(ic)-xxx(id) ++ ydcd(ii)=yyy(ic)-yyy(id) ++ zdcd(ii)=zzz(ic)-zzz(id) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) ++ call images(imcon,0,1,ii,cell,xdcd,ydcd,zdcd) ++ ++c zero dihedral energy accumulator ++ ++ engdih=0.d0 ++ virdih=0.d0 ++ ++c zero scaled 1-4 electrostatic and short range potential accumulators ++ ++ engc14=0.d0 ++ virc14=0.d0 ++ engs14=0.d0 ++ virs14=0.d0 ++ vdw14_vir=0.d0 ++ cou14_vir=0.d0 ++ ++c loop over all specified dihedrals ++ ++ ii=0 ++ do i=idih1,idih2 ++ ++c define components of bond vectors ++ ++ ii=ii+1 ++ ++ xab=xdab(ii) ++ yab=ydab(ii) ++ zab=zdab(ii) ++ ++ xbc=xdbc(ii) ++ ybc=ydbc(ii) ++ zbc=zdbc(ii) ++ rrbc=1.d0/sqrt(xbc*xbc+ybc*ybc+zbc*zbc) ++ ++ xcd=xdcd(ii) ++ ycd=ydcd(ii) ++ zcd=zdcd(ii) ++ ++ xac=xab+xbc ++ yac=yab+ybc ++ zac=zab+zbc ++ ++c construct first dihedral vector ++ ++ pbx=yab*zbc-zab*ybc ++ pby=zab*xbc-xab*zbc ++ pbz=xab*ybc-yab*xbc ++ pb2=pbx*pbx+pby*pby+pbz*pbz ++ rpb1=1.d0/sqrt(pb2) ++ rpb2=rpb1*rpb1 ++ ++c construct second dihedral vector ++ ++ pcx=ybc*zcd-zbc*ycd ++ pcy=zbc*xcd-xbc*zcd ++ pcz=xbc*ycd-ybc*xcd ++ pc2=pcx*pcx+pcy*pcy+pcz*pcz ++ rpc1=1.d0/sqrt(pc2) ++ rpc2=rpc1*rpc1 ++ ++c determine dihedral angle ++ ++ pbpc=pbx*pcx+pby*pcy+pbz*pcz ++ cosp=pbpc*rpb1*rpc1 ++ sinp=(xbc*(pcy*pbz-pcz*pby)+ybc*(pbx*pcz-pbz*pcx)+ ++ x zbc*(pcx*pby-pcy*pbx))*(rpb1*rpc1*rrbc) ++ ++ phi=atan2(sinp,cosp) ++ ++c avoid singularity in sinp ++ ++ sinp=sign(max(1.d-8,abs(sinp)),sinp) ++ rsinp=1.d0/sinp ++ ++c selection of potential energy function type ++ ++ kk=listdih(ii,1) ++ ++c calculate potential energy and scalar force term ++ ++ if(keydih(kk).eq.1)then ++ ++c key=1 for torsion dihedral potential ++ ++ dterm=prmdih(kk,1)*(1.d0+cos(prmdih(kk,3)*phi- ++ x prmdih(kk,2))) ++ gamma=-rpb1*rpc1*rsinp*prmdih(kk,1)*prmdih(kk,3)* ++ x sin(prmdih(kk,3)*phi-prmdih(kk,2)) ++ ++ else if(keydih(kk).eq.2)then ++ ++c key=2 for harmonic improper dihedral ++ ++ phi=phi-prmdih(kk,2) ++ phi=phi-nint(phi*rtwopi)*twopi ++ dterm=0.5d0*prmdih(kk,1)*(phi*phi) ++ gamma=rpb1*rpc1*rsinp*prmdih(kk,1)*phi ++ ++ else if(keydih(kk).eq.3)then ++ ++c key=3 for harmonic cosine dihedral ++ ++ dterm=0.5d0*prmdih(kk,1)*(cos(phi)- ++ x cos(prmdih(kk,2)))**2 ++ gamma=-rpb1*rpc1*prmdih(kk,1)*(cos(phi)-cos(prmdih(kk,2))) ++ ++ else if(keydih(kk).eq.4)then ++ ++c key=4 for 3-term cosine dihedral ++ ++ dterm=0.5d0*(prmdih(kk,1)*(1.d0+cos(phi))+ ++ x prmdih(kk,2)*(1.d0-cos(2.d0*phi))+prmdih(kk,3)* ++ x (1.d0+cos(3.d0*phi))) ++ gamma=-rpb1*rpc1*rsinp*0.5d0*(prmdih(kk,1)*sin(phi)- ++ x 2.d0*prmdih(kk,2)*sin(2.d0*phi)+3.d0*prmdih(kk,3)* ++ x sin(3.d0*phi)) ++ ++ else if(keydih(kk).eq.5)then ++ ++c key=5 for ryckaert-bellemans potential ++c chem.phys.lett., vol.30, p.123, 1975. ++c ATTENTION !!! Modified to have trans configuration ++c correspond to phi=180 rather than ++c phi=0 as in original form. ++ ++ dterm=prmdih(kk,1)*(1.116d0-1.462d0*cos(phi)- ++ x 1.578d0*(cos(phi))**2+0.368d0*(cos(phi))**3+ ++ x 3.156d0*(cos(phi))**4+3.788d0*(cos(phi))**5) ++ gamma=prmdih(kk,1)*(1.462d0+3.156d0*cos(phi)- ++ x 1.104d0*(cos(phi))**2-12.624d0*(cos(phi))**3- ++ x 18.94d0*(cos(phi))**4)*rpb1*rpc1 ++ ++ else if(keydih(kk).eq.6)then ++ ++c key=6 for fluorinated ryckaert-bellemans potential ++c Rice at al., JCP 104, 2101, (1996). ++ ++ dterm=prmdih(kk,1)*(3.55d0-2.78d0*cos(phi)- ++ x 3.56d0*(cos(phi))**2-1.64d0*(cos(phi))**3+ ++ x 7.13d0*(cos(phi))**4+12.84d0*(cos(phi))**5+ ++ x 9.67d0*exp(-56.d0*(phi-pi)**2)) ++ gamma=(prmdih(kk,1)*(2.78d0+7.12d0*cos(phi)+ ++ x 4.92d0*(cos(phi))**2-28.52d0*(cos(phi))**3- ++ x 64.2d0*(cos(phi))**4)-1083.04d0*(phi-pi)* ++ x exp(-56.0*(phi-pi)**2))*rpb1*rpc1 ++ ++ else if(keydih(kk).eq.7)then ++ ++c key=7 for opls cosine dihedral ++ ++ phi=phi-prmdih(kk,5) ++ dterm=prmdih(kk,1)+0.5d0*(prmdih(kk,2)* ++ x (1.d0+cos(phi))+prmdih(kk,3)*(1.d0-cos(2.d0*phi))+ ++ x prmdih(kk,4)*(1.d0+cos(3.d0*phi))) ++ gamma=-0.5d0*(prmdih(kk,2)*sin(phi)-2.d0*prmdih(kk,3)* ++ x sin(2.d0*phi)+3.d0*prmdih(kk,4)*sin(3.d0*phi))*rpb1* ++ x rpc1*rsinp ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ dterm=0.d0 ++ gamma=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listdih(ii,2) ++ ib=listdih(ii,3) ++ ic=listdih(ii,4) ++ id=listdih(ii,5) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ldrive=driven(ltype(id)) ++ ++ endif ++ ++c set selection control for angle potential ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)then ++ dih_exc(atmolt(ia))=dih_exc(atmolt(ia))+dterm ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ dih_fre=dih_fre-dterm ++ dterm=lambda1*dterm ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ dih_fre=dih_fre+dterm ++ dterm=lambda2*dterm ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy ++ ++ engdih=engdih+dterm ++ ++c calculate solvation energy for dihedral term ++ ++ if(lsolva)then ++ dih_sol(atmolt(ia))=dih_sol(atmolt(ia))+dterm ++ endif ++ ++c calculate atomic forces for dihedral term ++ ++ fax=gamma*((-pcy*zbc+pcz*ybc)-pbpc*rpb2*(-pby*zbc+pbz*ybc)) ++ fay=gamma*(( pcx*zbc-pcz*xbc)-pbpc*rpb2*( pbx*zbc-pbz*xbc)) ++ faz=gamma*((-pcx*ybc+pcy*xbc)-pbpc*rpb2*(-pbx*ybc+pby*xbc)) ++ ++ fcx=gamma*((-pcy*zab+pcz*yab)-pbpc*rpb2*(-pby*zab+pbz*yab)) ++ fcy=gamma*(( pcx*zab-pcz*xab)-pbpc*rpb2*( pbx*zab-pbz*xab)) ++ fcz=gamma*((-pcx*yab+pcy*xab)-pbpc*rpb2*(-pbx*yab+pby*xab)) ++ ++ fb1x=gamma*((-pby*zcd+pbz*ycd)-pbpc*rpc2*(-pcy*zcd+pcz*ycd)) ++ fb1y=gamma*(( pbx*zcd-pbz*xcd)-pbpc*rpc2*( pcx*zcd-pcz*xcd)) ++ fb1z=gamma*((-pbx*ycd+pby*xcd)-pbpc*rpc2*(-pcx*ycd+pcy*xcd)) ++ ++ fd1x=gamma*((-pby*zbc+pbz*ybc)-pbpc*rpc2*(-pcy*zbc+pcz*ybc)) ++ fd1y=gamma*(( pbx*zbc-pbz*xbc)-pbpc*rpc2*( pcx*zbc-pcz*xbc)) ++ fd1z=gamma*((-pbx*ybc+pby*xbc)-pbpc*rpc2*(-pcx*ybc+pcy*xbc)) ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)-fax-fcx+fb1x ++ fyy(ib)=fyy(ib)-fay-fcy+fb1y ++ fzz(ib)=fzz(ib)-faz-fcz+fb1z ++ ++ fxx(ic)=fxx(ic)+fcx-fb1x-fd1x ++ fyy(ic)=fyy(ic)+fcy-fb1y-fd1y ++ fzz(ic)=fzz(ic)+fcz-fb1z-fd1z ++ ++ fxx(id)=fxx(id)+fd1x ++ fyy(id)=fyy(id)+fd1y ++ fzz(id)=fzz(id)+fd1z ++ ++c stress tensor for dihedral term ++ ++ strs(1)=strs(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x ++ strs(2)=strs(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x ++ strs(3)=strs(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x ++ strs(4)=strs(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y ++ strs(5)=strs(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z ++ strs(6)=strs(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy (no virial) ++ ++ eng_loc=eng_loc+dterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)-fax-fcx+fb1x ++ fyy_loc(ib)=fyy_loc(ib)-fay-fcy+fb1y ++ fzz_loc(ib)=fzz_loc(ib)-faz-fcz+fb1z ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx-fb1x-fd1x ++ fyy_loc(ic)=fyy_loc(ic)+fcy-fb1y-fd1y ++ fzz_loc(ic)=fzz_loc(ic)+fcz-fb1z-fd1z ++ ++ fxx_loc(id)=fxx_loc(id)+fd1x ++ fyy_loc(id)=fyy_loc(id)+fd1y ++ fzz_loc(id)=fzz_loc(id)+fd1z ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x ++ strs_loc(2)=strs_loc(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x ++ strs_loc(3)=strs_loc(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x ++ strs_loc(4)=strs_loc(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y ++ strs_loc(5)=strs_loc(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z ++ strs_loc(6)=strs_loc(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z ++ ++ endif ++ ++c calculate 1-4 dihedral interactions (coulombic and short ranged) ++c assumes 1-4 interactions are in the exclude list ++ ++ kk=listdih(ii,1) ++ ++c bypass OPLS 1-4 terms (not present) ++ ++ if(keydih(kk).ne.7)then ++ ++c 1-4 electrostatics : adjust by weighting factor ++ ++ scale=prmdih(kk,4) ++ ++ xad=xac+xcd ++ yad=yac+ycd ++ zad=zac+zcd ++ ++ rad=sqrt(xad**2+yad**2+zad**2) ++ ++c scaled charge product*dielectric ++ ++ chgprd=scale*chge(ia)*chge(id)*r4pie0 ++ coul=0.d0 ++ fcoul=0.d0 ++ ++c truncation of potential for all schemes except ewald sum ++ ++ if(abs(chgprd).gt.1.d-10.and.keyfce.gt.0)then ++ ++c electrostatics by ewald sum ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6.or.keyfce/2.eq.7)then ++ ++ coul=chgprd/(epsq*rad) ++ fcoul=coul/(rad**2) ++ ++c distance dependent dielectric ++ ++ elseif(rcut.gt.rad)then ++ ++ if(keyfce/2.eq.2)then ++ ++ coul=chgprd/(epsq*rad**2) ++ fcoul=2.0d0*coul/(rad**2) ++ ++c unmodified coulombic ++ ++ else if(keyfce/2.eq.3)then ++ ++ coul=chgprd/(epsq*rad) ++ fcoul=coul/(rad**2) ++ ++c truncated and shifted coulombic ++ ++ else if(keyfce/2.eq.4)then ++ ++ tt=1.d0/(1.d0+pp*alpha*rad) ++ exp1=exp(-(alpha*rad)**2) ++ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad ++ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 ++ ++c calculate potential energy and forces ++ ++ coul=chgprd*(erc-vcon+fcon*(rad-rcut))/epsq ++ fcoul=chgprd*(fer-fcon/rad)/epsq ++ ++c reaction field ++ ++ else if(keyfce/2.eq.5)then ++ ++ tt=1.d0/(1.d0+pp*alpha*rad) ++ exp1=exp(-(alpha*rad)**2) ++ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad ++ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 ++ coul=chgprd*(erc-vcon+fcon*(rad-rcut)+ ++ x rfld2*rad*rad-rfld1) ++ fcoul=chgprd*(fer-fcon/rad-rfld0) ++ ++ elseif(keyfce/2.eq.0)then ++ ++ coul=0.d0 ++ fcoul=0.d0 ++ ++ else ++ ++ call error(idnode,446) ++ ++ endif ++ ++ endif ++ ++c set selection control for coulombic 1-4 terms ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then ++ ++c set selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(id).eq.0) ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou14_vir=cou14_vir+fcoul*rad**2 ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou14_vir=cou14_vir-fcoul*rad**2 ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c electrostatic energy and virial for 1-4 term ++ ++ engc14=engc14+coul ++ virc14=virc14-fcoul*rad**2 ++ ++c solvation energy for coulombic 1-4 term ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c coulombic force for 1-4 term ++ ++ fx=fcoul*xad ++ fy=fcoul*yad ++ fz=fcoul*zad ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(id)=fxx(id)-fx ++ fyy(id)=fyy(id)-fy ++ fzz(id)=fzz(id)-fz ++ ++c stress tensor for coulombic 1-4 term ++ ++ strs(1)=strs(1)+xad*fx ++ strs(2)=strs(2)+xad*fy ++ strs(3)=strs(3)+xad*fz ++ strs(4)=strs(4)+yad*fy ++ strs(5)=strs(5)+yad*fz ++ strs(6)=strs(6)+zad*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rad**2 ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(id)=fxx_loc(id)-fx ++ fyy_loc(id)=fyy_loc(id)-fy ++ fzz_loc(id)=fzz_loc(id)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xad*fx ++ strs_loc(2)=strs_loc(2)+xad*fy ++ strs_loc(3)=strs_loc(3)+xad*fz ++ strs_loc(4)=strs_loc(4)+yad*fy ++ strs_loc(5)=strs_loc(5)+yad*fz ++ strs_loc(6)=strs_loc(6)+zad*fz ++ ++ endif ++ ++ endif ++ ++c 1-4 short ranged : adjust by weighting factor ++ ++ scale=prmdih(kk,5) ++ gamma=0.d0 ++ ++ if(mod(keyfce,2).eq.1)then ++ ++c atomic and potential function indices ++ ++ ka=max(ltype(ia),ltype(id)) ++ kb=min(ltype(ia),ltype(id)) ++ k=lstvdw((ka*(ka-1))/2+kb) ++ ++ if(abs(scale*vvv(1,k)).gt.1.d-10)then ++ ++c apply truncation of potential ++ ++ if(rvdw.gt.rad)then ++ ++c determine interpolation panel for force arrays ++ ++ l=int(rad/dlrpot) ++ ppp=rad/dlrpot-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ++ srpot=scale*(t1+(t2-t1)*ppp*0.5d0) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ ++ gamma=scale*(t1+(t2-t1)*ppp*0.5d0)/(rad**2) ++ ++c set selection control for short ranged 1-4 terms ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then ++ ++c set selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(id).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+srpot ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre-srpot ++ vdw14_vir=vdw14_vir+gamma*rad**2 ++ srpot=lambda1*srpot ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre+srpot ++ vdw14_vir=vdw14_vir-gamma*rad**2 ++ srpot=lambda2*srpot ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c short ranged energy and virial for 1-4 term ++ ++ engs14=engs14+srpot ++ virs14=virs14-gamma*rad**2 ++ ++c solvation energy for short ranged 1-4 term ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+srpot ++ ++c short ranged forces for 1-4 term ++ ++ fx=gamma*xad ++ fy=gamma*yad ++ fz=gamma*zad ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(id)=fxx(id)-fx ++ fyy(id)=fyy(id)-fy ++ fzz(id)=fzz(id)-fz ++ ++c stress tensor for short ranged 1-4 term ++ ++ strs(1)=strs(1)+xad*fx ++ strs(2)=strs(2)+xad*fy ++ strs(3)=strs(3)+xad*fz ++ strs(4)=strs(4)+yad*fy ++ strs(5)=strs(5)+yad*fz ++ strs(6)=strs(6)+zad*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+srpot ++ vir_loc=vir_loc-gamma*rad**2 ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(id)=fxx_loc(id)-fx ++ fyy_loc(id)=fyy_loc(id)-fy ++ fzz_loc(id)=fzz_loc(id)-fz ++ ++c stress tensor for short ranged 1-4 term ++ ++ strs_loc(1)=strs_loc(1)+xad*fx ++ strs_loc(2)=strs_loc(2)+xad*fy ++ strs_loc(3)=strs_loc(3)+xad*fz ++ strs_loc(4)=strs_loc(4)+yad*fy ++ strs_loc(5)=strs_loc(5)+yad*fz ++ strs_loc(6)=strs_loc(6)+zad*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c sum contributions to potentials ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engdih ++ buffer(2)=engc14 ++ buffer(3)=virc14 ++ buffer(4)=engs14 ++ buffer(5)=virs14 ++ buffer(6)=dih_fre ++ buffer(7)=dih_vir ++ buffer(8)=vdw14_vir ++ buffer(9)=cou14_vir ++ call gdsum(buffer(1),9,buffer(10)) ++ engdih=buffer(1) ++ engc14=buffer(2) ++ virc14=buffer(3) ++ engs14=buffer(4) ++ virs14=buffer(5) ++ dih_fre=buffer(6) ++ dih_vir=buffer(7) ++ vdw14_vir=buffer(8) ++ cou14_vir=buffer(9) ++ ++ if(lsolva)then ++ ++ call gdsum(dih_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(dih_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ engcpe=engcpe+engc14 ++ vircpe=vircpe+virc14 ++ engsrp=engsrp+engs14 ++ virsrp=virsrp+virs14 ++ vdw_vir=vdw_vir+vdw14_vir ++ cou_vir=cou_vir+cou14_vir ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,448) ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdbc,ydbc,zdbc,stat=fail2) ++ deallocate (xdcd,ydcd,zdcd,stat=fail3) ++ ++ return ++ end subroutine dihfrc ++ ++ end module dihedral_module +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f dl_class_1.9/srcmod/dlpoly.f +--- dl_class_1.9.orig/srcmod/dlpoly.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f 2015-11-09 15:05:00.200575192 +0100 +@@ -0,0 +1,975 @@ ++ program dlpoly_classic ++ ++c*********************************************************************** ++c ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. ++c ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. ++c ++c neither the stfc, daresbury laboratory, ccp5 nor the authors ++c of this package claim that it is free from errors and do not ++c accept liability for any loss or damage that may arise from ++c its use. it is the users responsibility to verify that the ++c package dl_poly is fit for the purpose the user intends for ++c it. ++c ++c users of this package are recommended to consult the dl_poly ++c user manual for the full description of its use and purpose. ++c ++c authors: w.smith and t.r.forester 1995 ++c copyright daresbury laboratory 1995 ++c ++c DL_POLY CLASSIC VERSION 1.9 ++c ++c*********************************************************************** ++ ++c declare required modules ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use define_system_module ++ use dihedral_module ++ use driver_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use forces_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use integrator_module ++ use inversion_module ++ use metal_module ++ use metafreeze_module ++ use nlist_builders_module ++ use pair_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ character*1 hms,dec ++ character*8 seek ++ ++ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle ++ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb ++ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd ++ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect ++ ++ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn ++ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt ++ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj ++ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw ++ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp ++ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k ++ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit ++ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode ++ integer natms2,ntghost,nsolva,isolva,nofic ++ ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd ++ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint ++ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter ++ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom ++ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord ++c PLUMED modifications ++ real(8) energyUnits,lengthUnits,timeUnits ++ integer(8) get_comms ++c PLUMED modifications ++ ++ real(8), allocatable :: tbuffer(:) ++ integer :: plumedavaiable ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ ++ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ ++ ++c set up the communications ++ ++ call initcomms() ++ call gsync() ++ ++c determine processor identities ++ ++ call machine(idnode,mxnode) ++ ++c activate for limited-life executable ++ ++CBOMB call bomb(idnode,2008,6,30) ++ ++ allocate (tbuffer(10),stat=memr) ++ ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file ++ ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ ++c allocate arrays for each function ++ ++ call alloc_ang_arrays(idnode) ++ call alloc_bnd_arrays(idnode) ++ call alloc_config_arrays(idnode) ++ call alloc_csh_arrays(idnode) ++ call alloc_dih_arrays(idnode) ++ call alloc_ewald_arrays(idnode) ++ call alloc_exc_arrays(idnode) ++ call alloc_exi_arrays(idnode) ++ call alloc_fbp_arrays(idnode) ++ call alloc_fld_arrays(idnode) ++ call alloc_free_arrays(idnode) ++ call alloc_hke_arrays(idnode) ++ call alloc_hyper_arrays(idnode) ++ call alloc_inv_arrays(idnode) ++ call alloc_met_arrays(idnode) ++ call alloc_pair_arrays(idnode) ++ call alloc_pmf_arrays(idnode) ++ call alloc_prp_arrays(idnode) ++ call alloc_rgbdy_arrays(idnode) ++ call alloc_shake_arrays(idnode) ++ call alloc_site_arrays(idnode) ++ call alloc_sol_arrays(idnode) ++ call alloc_spme_arrays(idnode) ++ call alloc_tbp_arrays(idnode) ++ call alloc_ter_arrays(idnode) ++ call alloc_tet_arrays(idnode) ++ call alloc_vdw_arrays(idnode) ++ ++c start clock ++ ++ call timchk(0,tzero) ++ ++c input the control parameters defining the simulation ++ ++ call simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c input the system force field ++ ++ call sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) ++ ++c construct initial configuration of system ++ ++ call sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c construct initial bookkeeping arrays ++ ++ call sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c reset atom numbers for excitation simulation ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c set initial system temperature ++ ++ call systemp ++ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c read thermodynamic and structural data from restart file ++ ++ call sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c metadynamics by d. quigley ++ ++ if(lmetadyn) then ++ ++c make copy of excluded atom list for use by metadynamics ++ call exclude_copy_mtd(idnode) ++ ++c initialise metadynamics, read order parameter definitions etc. ++ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) ++ ++ end if ++ ++c synchronise LRC, SIC and system charge terms for switching ++ ++ llswitch=.false. ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod((nstep-nswitch)/niswitch,2).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.true. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c PLUMED modifications ++ if(lplumed)then ++ ++ call plumed_f_installed(plumedavaiable) ++ ++ if (plumedavaiable<=0) then ++ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" ++ stop ++ else ++ call plumed_f_gcreate() ++ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) ++ call plumed_f_gcmd("setRealPrecision"//char(0),8) ++ energyUnits=0.01 ++ lengthUnits=0.1 ++ timeUnits=1 ++ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) ++ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) ++ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) ++ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) ++ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) ++ call plumed_f_gcmd("setNatoms"//char(0),natms) ++ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) ++ call plumed_f_gcmd("setTimestep"//char(0),tstep) ++ call plumed_f_gcmd("init"//char(0),0) ++ end if ++ endif ++ ++c PLUMED modifications ++ ++c zero long range component of stress ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero contraint terms ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ if(lminim.or.loptim.or.ntcons.eq.0)then ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c define target kinetic energy ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ ++c time check ++ ++ call timchk(1,tzero) ++ ++c control variable for structure optimizer ++ ++ keystr=0 ++ stropt=.false. ++ ++ if(lminim)then ++ ++c first step of minimisation programme ++ ++ if(idnode.eq.0)write(nrite,"(1x,120('-'))") ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c calculate initial conditions for velocity verlet ++ ++ elseif(keyver.eq.1.and.nstep.eq.0)then ++ ++c kinetic stress tensor at start ++ ++ call dcell(cell,celprp) ++ width=min(celprp(7),celprp(8),celprp(9)) ++ call kinstress(natms,idnode,mxnode,stress) ++ engke=0.5d0*(stress(1)+stress(5)+stress(9)) ++ do i=1,9 ++ stress(i)=stress(i)/dble(mxnode) ++ enddo ++ ++c calculate initial forces ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++ endif ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++c construct the first reference state ++ ++ call hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++ endif ++ ++c perform selected NEB calculation ++ ++ if(lneb)then ++ ++ do i=1,numneb ++ ++ call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), ++ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++ call scan_profile(nturn,estar) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(1x,120('-'))") ++ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') ++ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ enddo ++ ++c bypass the MD cycle for this option ++ ++ recycle=.false. ++ ++ endif ++ ++c*********************************************************************** ++c start of molecular dynamics calculations ++c*********************************************************************** ++ ++ do while(recycle) ++ ++c increase step counter ++ ++ nstep=nstep+1 ++ recycle=(nstep.lt.nstrun) ++ ++c store velocities for free energy or solvation simulation ++ ++ if(keyver.eq.0)then ++ ++ if(lsolva)then ++ ++ vxo_sol(:)=vxx(:) ++ vyo_sol(:)=vyy(:) ++ vzo_sol(:)=vzz(:) ++ ++ elseif(lfree)then ++ ++ vxo_fre(:)=vxx(:) ++ vyo_fre(:)=vyy(:) ++ vzo_fre(:)=vzz(:) ++ ++ endif ++ ++ endif ++ ++c molecular switching option for excitation ++ ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod(nstep-nswitch,niswitch).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.not.llswitch ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c switch on the minimiser ++ ++ if(lminim)then ++ ++ lminnow=(mod(nstep,minstp).eq.0) ++ ++ endif ++ ++c conserved quantity (other than K + U) ++ ++ consv=0.d0 ++ ++c energy accumulators ++ ++ if(.not.lminnow)then ++ ++ engke=0.d0 ++ engrot=0.d0 ++ ++ endif ++ ++c calculate volume of simulation cell ++ ++ if(imcon.ne.0.and.imcon.ne.6)then ++ ++ call dcell(cell,celprp) ++ volm=celprp(10) ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ else ++ ++ volm=0.d0 ++ ++ endif ++ ++c reset sutton chen long range corrections (constant pressure only) ++ ++ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++c activate the impact option at designated time step ++ ++ if(lhit.and.nstep.eq.nhit)call impact ++ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c integrate equations of motion stage 1 of velocity verlet ++ ++ if(keyver.gt.0)then ++ ++ isw=1 ++ if(.not.loptim)then ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++ call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++ endif ++ ++ if(lminnow)then ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++ elseif(loptim.or.keyshl.ne.2)then ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++ else ++ ++ call shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++ endif ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c switching option for excitation simulation ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++c integrate equations of motion ++ ++ if(keyver.eq.0)then ++ ++c integrate equations of motion by leapfrog verlet ++ ++ if(.not.(loptim.or.lminnow))call lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++ else if(keyver.gt.0)then ++ ++c integrate equations of motion by velocity verlet (stage 2) ++ ++ isw=2 ++ if(.not.loptim)call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ endif ++ ++c update the atomic positions for the ghost molecule ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++c long range correction adjustment for free energy and solvation ++ ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++c application of transition analysis procedures ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++ engtke=engke+engrot ++ call hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate shell kinetic energy ++ ++ if(keyshl.eq.1)then ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++c apply temperature scaling ++ ++ if((ltscal.and.nstep.le.nsteql).and. ++ x mod(nstep-nsteql,nstbts).eq.0)then ++ ++ chit=0.d0 ++ chit_shl=0.d0 ++ chip=0.d0 ++ do i=1,9 ++ eta(i)=0.d0 ++ enddo ++ ++ if(keyshl.eq.1) then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c reset atom velocities at intervals if required ++ ++ if(newgau)then ++ ++ if(mod(nstep,numgau).eq.0)call regauss ++ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++ endif ++ ++c calculate physical quantities ++ ++ if(nstep.gt.0)call static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c z density calculation ++ ++ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then ++ ++ call zden0(idnode,natms,mxnode,nzden,zlen) ++ ++ endif ++ ++c terminate program if boundary conditions violated ++ ++ if(imcon.gt.0.and.rcut.gt.width)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ call error(idnode,95) ++ ++ endif ++ ++c line-printer output every nstbpo steps ++ ++ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then ++ ++ call timchk(0,timelp) ++ if(idnode.eq.0)then ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ if(mod(lines,npage).eq.0) ++ x write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, ++ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', ++ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, ++ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', ++ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") ++ x nstep,(stpval(i),i=1,9), ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) ++ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ lines=lines+1 ++ ++ endif ++ ++c report end of equilibration period ++ ++ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then ++ ++ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) ++ x write(nrite,"(/,/,1x,'switching off temperature ', ++ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep ++ ltscal=.false. ++ ++ endif ++ ++c write trajectory data ++ ++ if(ltraj.and.nstep.ge.nstraj) then ++ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then ++ ++ call traject ++ x (ltraj,idnode,imcon,istraj,keytrj,natms, ++ x nstraj,nstep,tstep) ++ ++ endif ++ ++ endif ++ ++c write solvation energy file ++ ++ if(lsolva.and.nstep.ge.nsolva)then ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ call solva_temp(idnode,mxnode,natms2,keyver) ++ call solvation_write(lexcite,lswitch,idnode,natms, ++ x nstep,nsolva,isolva,tstep,engunit,elrc) ++ ++ endif ++ ++ endif ++ ++c write free energy file ++ ++ if(lfree.and.nstep.ge.nfrn)then ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ call free_kinetic(lfrmas,idnode,mxnode,keyver) ++ call free_energy_write(idnode,nstep,engunit) ++ ++ endif ++ ++ endif ++ ++c save restart data in event of system crash ++ ++ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++ endif ++ ++c cycle time check ++ ++ call timchk(0,timelp) ++ recycle=(recycle.and.timjob-timelp.gt.timcls) ++ ++ enddo ++ ++c*********************************************************************** ++c end of molecular dynamics calculations ++c*********************************************************************** ++ ++c last time check ++ ++ call timchk(0,timelp) ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls ++ ++c shell relaxation convergence statistics ++ ++ if(.not.loptim.and.keyshl.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'shell relaxation statistics : average cycles = ', ++ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 ++ ++ endif ++ ++c produce summary of simulation ++ ++ levcfg=2 ++ if(loptim)levcfg=0 ++ if(.not.lneb)call result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) ++ ++c PLUMED ++ if(lplumed) call plumed_f_gcmd() ++c PLUMED ++ ++c write hyperdynamics restart file ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c close output channels ++ ++ if(idnode.eq.0) then ++ ++ close (nrite) ++ close (nstats) ++ close (nhist) ++ close (nevnt) ++ ++ endif ++ ++c terminate job ++ ++ call exitcomms() ++ ++ end +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.preplumed dl_class_1.9/srcmod/dlpoly.f.preplumed +--- dl_class_1.9.orig/srcmod/dlpoly.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f.preplumed 2012-04-24 18:30:31.000000000 +0200 +@@ -0,0 +1,936 @@ ++ program dlpoly_classic ++ ++c*********************************************************************** ++c ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. ++c ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. ++c ++c neither the stfc, daresbury laboratory, ccp5 nor the authors ++c of this package claim that it is free from errors and do not ++c accept liability for any loss or damage that may arise from ++c its use. it is the users responsibility to verify that the ++c package dl_poly is fit for the purpose the user intends for ++c it. ++c ++c users of this package are recommended to consult the dl_poly ++c user manual for the full description of its use and purpose. ++c ++c authors: w.smith and t.r.forester 1995 ++c copyright daresbury laboratory 1995 ++c ++c DL_POLY CLASSIC VERSION 1.9 ++c ++c*********************************************************************** ++ ++c declare required modules ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use define_system_module ++ use dihedral_module ++ use driver_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use forces_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use integrator_module ++ use inversion_module ++ use metal_module ++ use metafreeze_module ++ use nlist_builders_module ++ use pair_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ character*1 hms,dec ++ character*8 seek ++ ++ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle ++ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb ++ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd ++ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect ++ ++ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn ++ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt ++ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj ++ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw ++ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp ++ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k ++ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit ++ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode ++ integer natms2,ntghost,nsolva,isolva,nofic ++ ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd ++ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint ++ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter ++ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom ++ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord ++ real(8), allocatable :: tbuffer(:) ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ ++ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ ++ ++c set up the communications ++ ++ call initcomms() ++ call gsync() ++ ++c determine processor identities ++ ++ call machine(idnode,mxnode) ++ ++c activate for limited-life executable ++ ++CBOMB call bomb(idnode,2008,6,30) ++ ++ allocate (tbuffer(10),stat=memr) ++ ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file ++ ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ ++c allocate arrays for each function ++ ++ call alloc_ang_arrays(idnode) ++ call alloc_bnd_arrays(idnode) ++ call alloc_config_arrays(idnode) ++ call alloc_csh_arrays(idnode) ++ call alloc_dih_arrays(idnode) ++ call alloc_ewald_arrays(idnode) ++ call alloc_exc_arrays(idnode) ++ call alloc_exi_arrays(idnode) ++ call alloc_fbp_arrays(idnode) ++ call alloc_fld_arrays(idnode) ++ call alloc_free_arrays(idnode) ++ call alloc_hke_arrays(idnode) ++ call alloc_hyper_arrays(idnode) ++ call alloc_inv_arrays(idnode) ++ call alloc_met_arrays(idnode) ++ call alloc_pair_arrays(idnode) ++ call alloc_pmf_arrays(idnode) ++ call alloc_prp_arrays(idnode) ++ call alloc_rgbdy_arrays(idnode) ++ call alloc_shake_arrays(idnode) ++ call alloc_site_arrays(idnode) ++ call alloc_sol_arrays(idnode) ++ call alloc_spme_arrays(idnode) ++ call alloc_tbp_arrays(idnode) ++ call alloc_ter_arrays(idnode) ++ call alloc_tet_arrays(idnode) ++ call alloc_vdw_arrays(idnode) ++ ++c start clock ++ ++ call timchk(0,tzero) ++ ++c input the control parameters defining the simulation ++ ++ call simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c input the system force field ++ ++ call sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) ++ ++c construct initial configuration of system ++ ++ call sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c construct initial bookkeeping arrays ++ ++ call sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c reset atom numbers for excitation simulation ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c set initial system temperature ++ ++ call systemp ++ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c read thermodynamic and structural data from restart file ++ ++ call sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c metadynamics by d. quigley ++ ++ if(lmetadyn) then ++ ++c make copy of excluded atom list for use by metadynamics ++ call exclude_copy_mtd(idnode) ++ ++c initialise metadynamics, read order parameter definitions etc. ++ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) ++ ++ end if ++ ++c synchronise LRC, SIC and system charge terms for switching ++ ++ llswitch=.false. ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod((nstep-nswitch)/niswitch,2).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.true. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c zero long range component of stress ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero contraint terms ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ if(lminim.or.loptim.or.ntcons.eq.0)then ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c define target kinetic energy ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ ++c time check ++ ++ call timchk(1,tzero) ++ ++c control variable for structure optimizer ++ ++ keystr=0 ++ stropt=.false. ++ ++ if(lminim)then ++ ++c first step of minimisation programme ++ ++ if(idnode.eq.0)write(nrite,"(1x,120('-'))") ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c calculate initial conditions for velocity verlet ++ ++ elseif(keyver.eq.1.and.nstep.eq.0)then ++ ++c kinetic stress tensor at start ++ ++ call dcell(cell,celprp) ++ width=min(celprp(7),celprp(8),celprp(9)) ++ call kinstress(natms,idnode,mxnode,stress) ++ engke=0.5d0*(stress(1)+stress(5)+stress(9)) ++ do i=1,9 ++ stress(i)=stress(i)/dble(mxnode) ++ enddo ++ ++c calculate initial forces ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++ endif ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++c construct the first reference state ++ ++ call hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++ endif ++ ++c perform selected NEB calculation ++ ++ if(lneb)then ++ ++ do i=1,numneb ++ ++ call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), ++ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++ call scan_profile(nturn,estar) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(1x,120('-'))") ++ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') ++ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ enddo ++ ++c bypass the MD cycle for this option ++ ++ recycle=.false. ++ ++ endif ++ ++c*********************************************************************** ++c start of molecular dynamics calculations ++c*********************************************************************** ++ ++ do while(recycle) ++ ++c increase step counter ++ ++ nstep=nstep+1 ++ recycle=(nstep.lt.nstrun) ++ ++c store velocities for free energy or solvation simulation ++ ++ if(keyver.eq.0)then ++ ++ if(lsolva)then ++ ++ vxo_sol(:)=vxx(:) ++ vyo_sol(:)=vyy(:) ++ vzo_sol(:)=vzz(:) ++ ++ elseif(lfree)then ++ ++ vxo_fre(:)=vxx(:) ++ vyo_fre(:)=vyy(:) ++ vzo_fre(:)=vzz(:) ++ ++ endif ++ ++ endif ++ ++c molecular switching option for excitation ++ ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod(nstep-nswitch,niswitch).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.not.llswitch ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c switch on the minimiser ++ ++ if(lminim)then ++ ++ lminnow=(mod(nstep,minstp).eq.0) ++ ++ endif ++ ++c conserved quantity (other than K + U) ++ ++ consv=0.d0 ++ ++c energy accumulators ++ ++ if(.not.lminnow)then ++ ++ engke=0.d0 ++ engrot=0.d0 ++ ++ endif ++ ++c calculate volume of simulation cell ++ ++ if(imcon.ne.0.and.imcon.ne.6)then ++ ++ call dcell(cell,celprp) ++ volm=celprp(10) ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ else ++ ++ volm=0.d0 ++ ++ endif ++ ++c reset sutton chen long range corrections (constant pressure only) ++ ++ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++c activate the impact option at designated time step ++ ++ if(lhit.and.nstep.eq.nhit)call impact ++ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c integrate equations of motion stage 1 of velocity verlet ++ ++ if(keyver.gt.0)then ++ ++ isw=1 ++ if(.not.loptim)then ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++ call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++ endif ++ ++ if(lminnow)then ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++ elseif(loptim.or.keyshl.ne.2)then ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++ else ++ ++ call shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++ endif ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c switching option for excitation simulation ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++c integrate equations of motion ++ ++ if(keyver.eq.0)then ++ ++c integrate equations of motion by leapfrog verlet ++ ++ if(.not.(loptim.or.lminnow))call lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++ else if(keyver.gt.0)then ++ ++c integrate equations of motion by velocity verlet (stage 2) ++ ++ isw=2 ++ if(.not.loptim)call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ endif ++ ++c update the atomic positions for the ghost molecule ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++c long range correction adjustment for free energy and solvation ++ ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++c application of transition analysis procedures ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++ engtke=engke+engrot ++ call hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate shell kinetic energy ++ ++ if(keyshl.eq.1)then ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++c apply temperature scaling ++ ++ if((ltscal.and.nstep.le.nsteql).and. ++ x mod(nstep-nsteql,nstbts).eq.0)then ++ ++ chit=0.d0 ++ chit_shl=0.d0 ++ chip=0.d0 ++ do i=1,9 ++ eta(i)=0.d0 ++ enddo ++ ++ if(keyshl.eq.1) then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c reset atom velocities at intervals if required ++ ++ if(newgau)then ++ ++ if(mod(nstep,numgau).eq.0)call regauss ++ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++ endif ++ ++c calculate physical quantities ++ ++ if(nstep.gt.0)call static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c z density calculation ++ ++ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then ++ ++ call zden0(idnode,natms,mxnode,nzden,zlen) ++ ++ endif ++ ++c terminate program if boundary conditions violated ++ ++ if(imcon.gt.0.and.rcut.gt.width)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ call error(idnode,95) ++ ++ endif ++ ++c line-printer output every nstbpo steps ++ ++ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then ++ ++ call timchk(0,timelp) ++ if(idnode.eq.0)then ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ if(mod(lines,npage).eq.0) ++ x write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, ++ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', ++ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, ++ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', ++ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") ++ x nstep,(stpval(i),i=1,9), ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) ++ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ lines=lines+1 ++ ++ endif ++ ++c report end of equilibration period ++ ++ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then ++ ++ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) ++ x write(nrite,"(/,/,1x,'switching off temperature ', ++ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep ++ ltscal=.false. ++ ++ endif ++ ++c write trajectory data ++ ++ if(ltraj.and.nstep.ge.nstraj) then ++ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then ++ ++ call traject ++ x (ltraj,idnode,imcon,istraj,keytrj,natms, ++ x nstraj,nstep,tstep) ++ ++ endif ++ ++ endif ++ ++c write solvation energy file ++ ++ if(lsolva.and.nstep.ge.nsolva)then ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ call solva_temp(idnode,mxnode,natms2,keyver) ++ call solvation_write(lexcite,lswitch,idnode,natms, ++ x nstep,nsolva,isolva,tstep,engunit,elrc) ++ ++ endif ++ ++ endif ++ ++c write free energy file ++ ++ if(lfree.and.nstep.ge.nfrn)then ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ call free_kinetic(lfrmas,idnode,mxnode,keyver) ++ call free_energy_write(idnode,nstep,engunit) ++ ++ endif ++ ++ endif ++ ++c save restart data in event of system crash ++ ++ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++ endif ++ ++c cycle time check ++ ++ call timchk(0,timelp) ++ recycle=(recycle.and.timjob-timelp.gt.timcls) ++ ++ enddo ++ ++c*********************************************************************** ++c end of molecular dynamics calculations ++c*********************************************************************** ++ ++c last time check ++ ++ call timchk(0,timelp) ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls ++ ++c shell relaxation convergence statistics ++ ++ if(.not.loptim.and.keyshl.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'shell relaxation statistics : average cycles = ', ++ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 ++ ++ endif ++ ++c produce summary of simulation ++ ++ levcfg=2 ++ if(loptim)levcfg=0 ++ if(.not.lneb)call result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) ++ ++c write hyperdynamics restart file ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c close output channels ++ ++ if(idnode.eq.0) then ++ ++ close (nrite) ++ close (nstats) ++ close (nhist) ++ close (nevnt) ++ ++ endif ++ ++c terminate job ++ ++ call exitcomms() ++ ++ end +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.rej dl_class_1.9/srcmod/dlpoly.f.rej +--- dl_class_1.9.orig/srcmod/dlpoly.f.rej 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f.rej 2015-11-09 14:15:45.054258793 +0100 +@@ -0,0 +1,20 @@ ++--- dlpoly.f.preplumed +++++ dlpoly.f ++@@ -103,12 +103,17 @@ ++ real(8) consv,engke,engrot,sigma,virtot,engcfg ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,boost,heinc,tboost,hyp_units,estar +++c PLUMED modifications +++ real(8) energyUnits,lengthUnits,timeUnits +++ integer(8) get_comms +++c PLUMED modifications ++ ++ real(8), allocatable :: tbuffer(:) +++ integer :: plumedavaiable ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./,boost/1.d0/ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ +diff -urN dl_class_1.9.orig/srcmod/driver_module.f dl_class_1.9/srcmod/driver_module.f +--- dl_class_1.9.orig/srcmod/driver_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/driver_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,498 @@ ++ module driver_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation driver routines ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use forces_module ++ use nlist_builders_module ++ use optimiser_module ++ use temp_scalers_module ++ ++ implicit none ++ ++ integer, parameter :: mxpass=250 ++ ++ contains ++ ++ subroutine molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero,newlst, ++ x stropt,cycle,ltad,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,keyfld,keyshl,keystr,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, ++ x ntpter,ntpvdw,ntshl,ntteth,ntcons,numrdf,nsolva,isolva, ++ x alpha,delr,dlrpot,drewd,elrc,engang,engbnd,engcpe,engdih, ++ x engfbp,engfld,enginv,engshl,engsrp,engtbp,engter,engtet, ++ x epsq,fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih,virfbp,virfld, ++ x virinv,virlrc,virmet,virshl,virsrp,virtbp,virter,virtet,volm, ++ x engmet,virtot,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a standard ++c molecular dynamics simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero ++ logical newlst,stropt,cycle,ltad,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons ++ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,nsolva ++ integer isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,virtot ++ real(8) engord,virord ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c structure optimisation ++ ++ if(loptim.or.lzero)then ++ ++ call optimisation_selector ++ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, ++ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) ++ ++ if(stropt.and.idnode.eq.0) ++ x write(nrite,"(/,/,1x,'structure optimisation converged ', ++ x 'at step ',i6,/,/,/,1x,120('-'))") nstep ++ ++ cycle=(cycle.and.(.not.stropt)) ++ ++ endif ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++ return ++ end subroutine molecular_dynamics ++ ++ subroutine shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a ++c relaxed shell molecular dynamics simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical,save :: lfirst = .true. ++ logical lfcap,lgofr,lneut,lnsq,loglnk,lzeql,ltad ++ logical newlst,relaxed,shgofr,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms ++ integer nhko,nlatt,nneut,nospl,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf ++ integer keyrlx,ntpmls,pass,nsolva,isolva,ia,ib,ishl ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,virtot,rlxtol ++ real(8) pass0,pass1,pass2,engord,virord ++ ++ real(8),allocatable,dimension(:),save :: xdcs,ydcs,zdcs ++ ++ pass=0 ++ keyrlx=0 ++ shgofr=lgofr ++ relaxed=.false. ++ ++ if(lfirst)then ++ ++ allocate(xdcs(1:ntshl)) ++ allocate(ydcs(1:ntshl)) ++ allocate(zdcs(1:ntshl)) ++ lfirst = .false. ++ ++ else ++ ++ do ishl=1,ntshl ++ ++ ia=listshl(ishl,2) ++ ib=listshl(ishl,3) ++ xxx(ib)=xxx(ia)+xdcs(ishl) ++ yyy(ib)=yyy(ia)+ydcs(ishl) ++ zzz(ib)=zzz(ia)+zdcs(ishl) ++ ++ enddo ++ ++ endif ++ ++ do while(.not.relaxed.and.pass.le.mxpass) ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++c relaxed shell option ++ ++ call relax_shells ++ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep, ++ x rlxtol) ++ ++ if(relaxed)then ++ ++ pass1=pass0*pass1 ++ pass0=pass0+1.d0 ++ pass1=pass1/pass0+pass/pass0 ++ pass2=max(dble(pass),pass2) ++c$$$ write(104,'("Relaxed shells before step: ",I5)')pass+1 ++ ++ endif ++ ++ pass=pass+1 ++ if(pass.gt.mxpass)call error(idnode,1950) ++ shgofr=.false. ++ ++c end of shell relaxation ++ ++ enddo ++ ++c store vector connecting the cores to the shells ++ ++ do ishl=1,ntshl ++ ++ ia=listshl(ishl,2) ++ ib=listshl(ishl,3) ++ xdcs(ishl)=xxx(ib)-xxx(ia) ++ ydcs(ishl)=yyy(ib)-yyy(ia) ++ zdcs(ishl)=zzz(ib)-zzz(ia) ++ ++ enddo ++ ++ call images(imcon,0,1,ntshl,cell,xdcs,ydcs,zdcs) ++ ++ return ++ end subroutine shell_relaxation ++ ++ subroutine minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a ++c minimisation simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2007 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,stropt,shgofr ++ logical conopt,newjob,ltad,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keystr,pass,i ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,keytol ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,ntcons ++ integer fail,nsolva,isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter,sigma ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp,tolnce ++ real(8) virtbp,virter,virtet,volm,engmet,virtot,engcon ++ real(8) cfgmin,engunit,hnorm,grad0,grad1,ff1,sgn ++ real(8) engord,virord ++ ++ real(8), allocatable :: sxx(:),syy(:),szz(:) ++ ++ save cfgmin,newjob ++ ++ data newjob/.true./ ++ ++ pass=0 ++ keystr=0 ++ shgofr=.false. ++ stropt=.false. ++ ++c dummy variables ++ ++ ltad=.false. ++ lsolva=.false. ++ lfree=.false. ++ lghost=.false. ++ nsolva=0 ++ isolva=1 ++ ++c$$$c diagnostic printing (not usually active) ++c$$$ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ write(nrite,"(1x,120('-'), ++c$$$ x /,/,1x,' pass',5x,'eng_cfg',5x,'eng_vdw',5x,'eng_cou', ++c$$$ x 5x,'eng_bnd',5x,'eng_ang',5x,'eng_dih',5x,'eng_tet', ++c$$$ x 5x,'eng_met',/,1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++ do while(.not.stropt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++c conjugate gradient structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++c$$$c diagnostic printing (not usually active) ++c$$$ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ write(nrite,"(1x,i8,1p,8e12.4)") ++c$$$ x pass,engcfg/engunit,engsrp/engunit,engcpe/engunit, ++c$$$ x engbnd/engunit,engang/engunit,engdih/engunit,engtet/ ++c$$$ x engunit,engmet/engunit ++c$$$ write(nrite,"(1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++c end of structure minimisation ++ ++ enddo ++ ++c ensure constraints are satisfied ++ ++ if(stropt.and.ntcons.gt.0)then ++ ++ allocate(sxx(mxatms),syy(mxatms),szz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,9999) ++ ++c store current forces ++ ++ do i=1,natms ++ ++ sxx(i)=fxx(i) ++ syy(i)=fyy(i) ++ szz(i)=fzz(i) ++ ++ enddo ++ ++ keystr=0 ++ conopt=.false. ++ ++ do while(.not.conopt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ engcon=0.d0 ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c conjugate gradient structure optimisation of constraint bonds ++ ++ call strucopt ++ x (conopt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcon,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ enddo ++ ++c restore current forces ++ ++ do i=1,natms ++ ++ fxx(i)=sxx(i) ++ fyy(i)=syy(i) ++ fzz(i)=szz(i) ++ ++ enddo ++ ++ deallocate(sxx,syy,szz,stat=fail) ++ ++ endif ++ ++c write data summary ++ ++ if(idnode.eq.0)then ++ ++ if(stropt)then ++ ++ write(nrite,'(1x,"minimisation converged after ",i6," cycles" ++ x ," energy minimum: ",1pe12.4)')pass,engcfg/engunit ++ ++ else ++ ++ write(nrite,'(1x,"minimisation NOT converged after ",i6, ++ x " cycles")')pass ++ ++ endif ++ ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c reset velocities after structure optimisation ++ ++ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++c write out minimised structure if lowest obtained so far ++ ++ if(newjob.or.cfgmin.gt.engcfg)then ++ ++ if(idnode.eq.0)call config_write('CFGMIN',0,imcon,natms,engcfg) ++ cfgmin=engcfg ++ newjob=.false. ++ ++ endif ++ ++ return ++ end subroutine minimiser ++ ++ end module driver_module +diff -urN dl_class_1.9.orig/srcmod/ensemble_tools_module.f dl_class_1.9/srcmod/ensemble_tools_module.f +--- dl_class_1.9.orig/srcmod/ensemble_tools_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/ensemble_tools_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1934 @@ ++ module ensemble_tools_module ++ ++c*********************************************************************** ++c ++c dl_poly module defining tools for ensemble simulations ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use core_shell_module ++ use property_module ++ use rigid_body_module ++ use utility_module ++ ++ contains ++ ++ function getmass(natms,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate total system mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) getmass ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ getmass=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ getmass=getmass+weight(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=getmass ++ call gdsum(buffer(1),1,buffer(2)) ++ getmass=buffer(1) ++ ++ endif ++ ++ return ++ end function getmass ++ ++ subroutine getcom(natms,idnode,mxnode,totmas,com) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system centre of mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) totmas ++ ++ real(8) com(3) ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ com(1)=0.d0 ++ com(2)=0.d0 ++ com(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ com(1)=com(1)+weight(i)*xxx(i) ++ com(2)=com(2)+weight(i)*yyy(i) ++ com(3)=com(3)+weight(i)*zzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) call gdsum(com,3,buffer) ++ ++ com(1)=com(1)/totmas ++ com(2)=com(2)/totmas ++ com(3)=com(3)/totmas ++ ++ return ++ end subroutine getcom ++ ++ subroutine getvom(natms,idnode,mxnode,totmas,vom) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system centre of mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) totmas ++ ++ real(8) vom(3) ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ vom(1)=0.d0 ++ vom(2)=0.d0 ++ vom(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ vom(1)=vom(1)+weight(i)*vxx(i) ++ vom(2)=vom(2)+weight(i)*vyy(i) ++ vom(3)=vom(3)+weight(i)*vzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) call gdsum(vom,3,buffer) ++ ++ vom(1)=vom(1)/totmas ++ vom(2)=vom(2)/totmas ++ vom(3)=vom(3)/totmas ++ ++ return ++ end subroutine getvom ++ ++ subroutine nvtscale ++ x (idnode,mxnode,natms,engke,sigma,tstep,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,sigma,tstep,qmass,chit,conint,scale,taut ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*qmass/taut**2 ++ ++c update chit to full step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++ return ++ end subroutine nvtscale ++ ++ subroutine nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,tstep,pmass,qmass,taut, ++ x chip,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith july 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,temp,sigma,tstep,pmass,qmass,chip,chit,conint,scale ++ real(8) taut ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) ++ ++c update chit to full step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++ return ++ end subroutine nptscale_t ++ ++ subroutine nptscale_p ++ x (idnode,mxnode,natms,engke,tstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT barostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,tstep,pmass,chip,press,vircon,virtot ++ real(8) volm,scale,chit ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c propagate chip to 1/2 step ++ ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++c barostat the velocities ++ ++ scale=exp(-tstep*chip) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update volume parameter to full step ++ ++ volm=volm*exp(3.d0*tstep*chip) ++ ++c update chip to full step ++ ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++ return ++ end subroutine nptscale_p ++ ++ subroutine nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x tstep,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*qmass/taut**2 ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++ return ++ end subroutine nvtqscl ++ ++ subroutine nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp,sigma, ++ x tstep,pmass,qmass,taut,chip,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip,pmass,temp ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 tstep ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full tstep ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) ++ ++c update chit to full tstep ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++ return ++ end subroutine nptqscl_t ++ ++ subroutine nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,tstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,i,ngrp,ntfree,igrp1,igrp2,ifre1,ifre2 ++ integer j,ig ++ real(8) engke,tstep,pmass,chip,press,vircon,virtot ++ real(8) vircom,volm,scale,engtrn,engfke,chit ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate chip to 1/2 tstep ++ ++ engke=engfke+engtrn ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++c barostat the free atom velocities ++ ++ scale=exp(-tstep*chip) ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ ++c update volume parameter to full tstep ++ ++ volm=volm*exp(3.d0*tstep*chip) ++ ++c update chip to full tstep ++ ++ engke=engfke+engtrn ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++ return ++ end subroutine nptqscl_p ++ ++ subroutine nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,tstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NST thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith july 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 ++ real(8) engke,temp,sigma,tstep,pmass,qmass,chip2,chit,conint,scale ++ real(8) taut,fac(0:3) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++ return ++ end subroutine nstscale_t ++ ++ subroutine nstscale_p ++ x (idnode,mxnode,natms,mode,tstep,pmass,chit,press,volm) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c barostat the velocities ++ ++ do i=iatm0,iatm1 ++ ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c update volume to full time step ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c calculate kinetic energy and contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstscale_p ++ ++ subroutine nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,tstep,pmass,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig,mode ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip2,pmass,temp,fac(0:3) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++ return ++ end subroutine nstqscl_t ++ ++ subroutine nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),strgrp(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c subtract kinetic contribution from stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c barostat the free atom velocities ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c new system volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c add new kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqscl_p ++ ++ subroutine nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,tstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig,mode ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip2,pmass,temp,fac(0:3) ++ real(8) strkin(9),strgrp(9) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c remove old kinetic term from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c scale kinetic energy tensors ++ ++ do i=1,9 ++ ++ strkin(i)=strkin(i)*scale**2 ++ strgrp(i)=strgrp(i)*scale**2 ++ ++ enddo ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c add new kinetic terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ return ++ end subroutine nstqscl_t2 ++ ++ subroutine nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, ++ x strkin,strgrp) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),strgrp(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c subtract kinetic contribution from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c barostat the free atom velocities ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c new system volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c add new kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqscl_p2 ++ ++ subroutine cell_update(tstep,cell,eta) ++ ++c*********************************************************************** ++c ++c dlpoly utility to update the cell vectors in the hoover ++c nst algorithms (velocity verlet version) ++c ++c copyright daresbury laboratory ++c author w.smith july 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i ++ real(8) tstep,cell(9),eta(9),ctmp(9),uni(9) ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ do i=1,9 ++ ctmp(i)=uni(i)+tstep*eta(i) ++ enddo ++ ++ call mat_mul(ctmp,cell,cell) ++ ++ return ++ end subroutine cell_update ++ ++ subroutine cell_propagate(tstep,cell,eta) ++ ++c*********************************************************************** ++c ++c dlpoly utility to update the cell vectors in the hoover ++c nst algorithms (leapfrog version) ++c ++c copyright daresbury laboratory ++c author w.smith july 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i ++ real(8) tstep ++ real(8) cell(9),eta(9),aaa(9),bbb(9),uni(9) ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ do i=1,9 ++ aaa(i)=tstep*eta(i) ++ enddo ++ ++ call mat_mul(aaa,aaa,bbb) ++ ++ do i=1,9 ++ bbb(i)=uni(i)+aaa(i)+0.5d0*bbb(i) ++ enddo ++ ++ call mat_mul(bbb,cell,cell) ++ ++ return ++ end subroutine cell_propagate ++ ++ subroutine nstqmtk_p ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, ++ x engfke,engtrn,engrot,temp,sigma) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c of martyna tobias and klein to atomic, group and quaternion ++c system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit,temp,sigma,degfre ++ real(8) engtke,engfke,engtrn,engrot,trace ++ real(8) strkin(9),strgrp(9),uni(9),ctmp(9) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ degfre=2.d0*sigma/(temp*boltz) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c propagate barostat momentum to 1/2 step ++ ++ call invert(cell,ctmp,volm) ++ volm=abs(volm) ++ engtke=2.d0*(engfke+engtrn+engrot)/degfre ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ ++ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c barostat the free atom velocities ++ ++ trace=(eta(1)+eta(5)+eta(9))/degfre ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) ++ ++ enddo ++ ++c update volume to full time step ++ ++ volm=volm*exp(tstep*(eta(1)+eta(5)+eta(9))) ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate new kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=2.d0*(engfke+engtrn+engrot)/degfre ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ ++ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqmtk_p ++ ++ subroutine kinstr(idnode,mxnode,natms,tstep) ++ ++c*********************************************************************** ++c ++c dlpoly routine to calculate the kinetic energy contribution to ++c the stress tensor ++c ++c assumes velocities are half-timestep behind forces ++c ++c replicated data version / block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester may 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm1,iatm2 ++ real(8) tstep,vxt,vyt,vzt ++ ++c block indices ++ ++ iatm1 = (idnode*natms)/mxnode + 1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ do i = iatm1,iatm2 ++ ++ if(rmass(i).gt.0.d0) then ++ ++ vxt = vxx(i)+fxx(i)*rmass(i)*tstep*0.5d0 ++ vyt = vyy(i)+fyy(i)*rmass(i)*tstep*0.5d0 ++ vzt = vzz(i)+fzz(i)*rmass(i)*tstep*0.5d0 ++ ++ stress(1)=stress(1)-weight(i)*vxt*vxt ++ stress(2)=stress(2)-weight(i)*vxt*vyt ++ stress(3)=stress(3)-weight(i)*vxt*vzt ++ stress(4)=stress(4)-weight(i)*vyt*vxt ++ stress(5)=stress(5)-weight(i)*vyt*vyt ++ stress(6)=stress(6)-weight(i)*vyt*vzt ++ stress(7)=stress(7)-weight(i)*vzt*vxt ++ stress(8)=stress(8)-weight(i)*vzt*vyt ++ stress(9)=stress(9)-weight(i)*vzt*vzt ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine kinstr ++ ++ function getkin(natms,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) getkin,engke ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ engke=0.d0 ++ ++ do i=iatm0,iatm1 ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkin=0.5d0*engke ++ ++ return ++ end function getkin ++ ++ function getkinf(ntfree,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic energy of atoms not in ++c rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ntfree,idnode,mxnode,i,j,ifre0,ifre1 ++ real(8) getkinf,engke ++ ++ ifre0=(idnode*ntfree)/mxnode+1 ++ ifre1=((idnode+1)*ntfree)/mxnode ++ ++ engke=0.d0 ++ ++ do j=ifre0,ifre1 ++ ++ i=lstfre(j) ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkinf=0.5d0*engke ++ ++ return ++ end function getkinf ++ ++ subroutine getking(ngrp,idnode,mxnode,engtrn,engrot) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engtrn,engrot ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engtrn=0.d0 ++ engrot=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c group kinetic energy ++ ++ engtrn=engtrn+ ++ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) ++ ++c rotational kinetic energy ++ ++ engrot=engrot+(rotinx(id,1)*omx(ig)**2 ++ x +rotiny(id,1)*omy(ig)**2 ++ x +rotinz(id,1)*omz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++ buffer(5)=engtrn ++ buffer(6)=engrot ++ call gdsum(buffer(5),2,buffer(1)) ++ engtrn=buffer(5) ++ engrot=buffer(6) ++ ++ endif ++ ++ engtrn=0.5d0*engtrn ++ engrot=0.5d0*engrot ++ ++ return ++ end subroutine getking ++ ++ function getkint(ngrp,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate translational kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engtrn,getkint ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engtrn=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c group kinetic energy ++ ++ engtrn=engtrn+ ++ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engtrn ++ call gdsum(buffer(1),1,buffer(2)) ++ engtrn=buffer(1) ++ ++ endif ++ ++ getkint=0.5d0*engtrn ++ ++ return ++ end function getkint ++ ++ function getkinr(ngrp,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate rotational kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engrot,getkinr ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engrot=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c rotational kinetic energy ++ ++ engrot=engrot+(rotinx(id,1)*omx(ig)**2 ++ x +rotiny(id,1)*omy(ig)**2 ++ x +rotinz(id,1)*omz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engrot ++ call gdsum(buffer(1),1,buffer(2)) ++ engrot=buffer(1) ++ ++ endif ++ ++ getkinr=0.5d0*engrot ++ ++ return ++ end function getkinr ++ ++ subroutine kinstress(natms,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author - w.smith november 2002 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,iatm0,iatm1,i ++ real(8) stresh(9) ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do i=iatm0,iatm1 ++ ++ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) ++ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) ++ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) ++ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) ++ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) ++ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstress ++ ++ subroutine kinstressg(ngrp,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c ++c********************************************************************* ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) stresh(9) ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ stresh(1)=stresh(1)+gmass(id)*gvxx(ig)*gvxx(ig) ++ stresh(2)=stresh(2)+gmass(id)*gvxx(ig)*gvyy(ig) ++ stresh(3)=stresh(3)+gmass(id)*gvxx(ig)*gvzz(ig) ++ stresh(5)=stresh(5)+gmass(id)*gvyy(ig)*gvyy(ig) ++ stresh(6)=stresh(6)+gmass(id)*gvyy(ig)*gvzz(ig) ++ stresh(9)=stresh(9)+gmass(id)*gvzz(ig)*gvzz(ig) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstressg ++ ++ subroutine getkins(natms,idnode,mxnode,getkin) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005: f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,iatm0,iatm1,i ++ real(8) getkin,engke ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ engke=0.d0 ++ ++ do i=iatm0,iatm1 ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkin=0.5d0*engke ++ ++ return ++ end subroutine getkins ++ ++ subroutine kinstressf(ntfree,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor for unconstrained atoms ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c amended - w.smith january 2005: f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ntfree,idnode,mxnode,i,ifre1,ifre2,ifre ++ real(8) stresh(9) ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) ++ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) ++ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) ++ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) ++ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) ++ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstressf ++ ++ subroutine nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,tstep,qmass_shl, ++ x taut,chit_shl,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c thermostats the core-shell relative motion ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c adapted - d. quigley 2006 : core-shell motion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,i,ishl1,ishl2,j,k,m ++ real(8) shlke,sigma_shl,tstep,qmass_shl,chit_shl,conint ++ real(8) dvx,dvy,dvz,tmx,tmy,tmz,rmu,scale,taut ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c calculate kinetic energy ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++c update chit to 1/2 step ++ ++ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit_shl) ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) ++ ++ if(rmu.gt.0.d0)then ++ ++ dvx=vxx(j)-vxx(i) ++ dvy=vyy(j)-vyy(i) ++ dvz=vzz(j)-vzz(i) ++ ++ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) ++ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) ++ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) ++ ++ vxx(i)=tmx/(weight(i)+weight(j))-scale*rmu*dvx/weight(i) ++ vxx(j)=tmx/(weight(i)+weight(j))+scale*rmu*dvx/weight(j) ++ vyy(i)=tmy/(weight(i)+weight(j))-scale*rmu*dvy/weight(i) ++ vyy(j)=tmy/(weight(i)+weight(j))+scale*rmu*dvy/weight(j) ++ vzz(i)=tmz/(weight(i)+weight(j))-scale*rmu*dvz/weight(i) ++ vzz(j)=tmz/(weight(i)+weight(j))+scale*rmu*dvz/weight(j) ++ ++ endif ++ ++ enddo ++ ++ shlke=shlke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit_shl*qmass_shl/taut**2 ++ ++c update chit to full step ++ ++ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl ++ ++ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) ++ ++ return ++ end subroutine nvtscale_shl ++ ++ end module ensemble_tools_module ++ +diff -urN dl_class_1.9.orig/srcmod/error_module.f dl_class_1.9/srcmod/error_module.f +--- dl_class_1.9.orig/srcmod/error_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/error_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1513 @@ ++ module error_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond potentials ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ contains ++ ++ subroutine error(idnode,iode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing error messages and bringing ++c about a controlled termination of the program ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c warning - this routine terminates the job. user must ensure ++c that all nodes are informed of error condition before this ++c subroutine is called. e.g. using subroutine gstate(). ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ logical kill ++ integer idnode,iode,kode ++ ++ kill=(iode.ge.0) ++ kode = abs(iode) ++ ++ if(idnode.eq.0)then ++ ++ if(kill)then ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY terminated due to error ', kode ++ ++ else ++ ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY will terminate due to error ', kode ++ ++ endif ++ ++ if(kode.lt.50)then ++ ++ if(kode.eq. 0)then ++ ++c dummy entry ++ ++ elseif(kode.eq. 3)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown directive found in CONTROL file' ++ elseif(kode.eq. 4)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown directive found in FIELD file' ++ elseif(kode.eq. 5)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown energy unit requested' ++ elseif(kode.eq. 6)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - energy unit not specified' ++ elseif(kode.eq. 7)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - energy unit respecified' ++ elseif(kode.eq. 8)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - time step not specified' ++ elseif(kode.eq.10)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many molecule types specified' ++ elseif(kode.eq.11)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate molecule directive in FIELD file' ++ elseif(kode.eq.12)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown molecule directive in FIELD file' ++ elseif(kode.eq.13)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - molecular species not yet specified' ++ elseif(kode.eq.14)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many unique atom types specified' ++ elseif(kode.eq.15)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate pair potential specified' ++ elseif(kode.eq.16)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from FIELD file processing' ++ elseif(kode.eq.17)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from CONTROL file processing' ++ elseif(kode.eq.18)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate 3-body potential specified' ++ elseif(kode.eq.19)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate 4-body potential specified' ++ elseif(kode.eq.20)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many molecule sites specified' ++ elseif(kode.eq.21)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate tersoff potential specified' ++ elseif(kode.eq.22)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unsuitable radial increment in TABLE file' ++ elseif(kode.eq.23)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incompatible FIELD and TABLE file potentials' ++ elseif(kode.eq.24)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABLE file' ++ elseif(kode.eq.25)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - wrong atom type found in CONFIG file' ++ elseif(kode.eq.26)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cutoff smaller than EAM potential range' ++ elseif(kode.eq.27)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incompatible FIELD and TABEAM file potentials' ++ elseif(kode.eq.28)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in mettab' ++ elseif(kode.eq.29)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABEAM file' ++ elseif(kode.eq.30)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many chemical bonds specified' ++ elseif(kode.eq.31)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many chemical bonds in system' ++ elseif(kode.eq.32)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - integer array memory allocation failure' ++ elseif(kode.eq.33)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - real array memory allocation failure' ++ elseif(kode.eq.34)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - character array memory allocation failure' ++ elseif(kode.eq.35)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - logical array memory allocation failure' ++ elseif(kode.eq.36)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - failed fmet array allocation in mettab' ++ elseif(kode.eq.40)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond constraints specified' ++ elseif(kode.eq.41)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond constraints in system' ++ elseif(kode.eq.42)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in merge1' ++ elseif(kode.eq.45)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many atoms in CONFIG file' ++ elseif(kode.eq.46)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - ewlbuf array too small in ewald1' ++ elseif(kode.eq.47)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in merge' ++ elseif(kode.eq.48)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in fortab' ++ elseif(kode.eq.49)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - frozen core-shell unit specified' ++ endif ++ ++ elseif(kode.lt.100)then ++ ++ if(kode.eq.50)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond angles specified' ++ elseif(kode.eq.51)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond angles in system' ++ elseif(kode.eq.52)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of FIELD file encountered' ++ elseif(kode.eq.53)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of CONTROL file encountered' ++ elseif(kode.eq.54)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - problem reading CONFIG file' ++ elseif(kode.eq.55)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of CONFIG file encountered' ++ elseif(kode.eq.57)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many core-shell units specified' ++ elseif(kode.eq.59)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many core-shell units in system' ++ elseif(kode.eq.60)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many dihedral angles specified' ++ elseif(kode.eq.61)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many dihedral angles in system' ++ elseif(kode.eq.62)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tethered atoms specified' ++ elseif(kode.eq.63)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tethered atoms in system' ++ elseif(kode.eq.65)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many excluded pairs specified' ++ elseif(kode.eq.66)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition for HK ewald' ++ elseif(kode.eq.67)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in thbfrc' ++ elseif(kode.eq.69)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells required in thbfrc' ++ elseif(kode.eq.70)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - constraint bond quench failure' ++ elseif(kode.eq.71)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many metal potentials specified' ++ elseif(kode.eq.72)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - different metal potential types specified' ++ elseif(kode.eq.73)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many inversion potentials specified' ++ elseif(kode.eq.75)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many atoms in specified system' ++ elseif(kode.eq.77)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many inversion potentials in system' ++ elseif(kode.eq.79)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in fbpfrc' ++ elseif(kode.eq.80)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many pair potentials specified' ++ elseif(kode.eq.81)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in pair potential list' ++ elseif(kode.eq.82)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated pair potential index too large' ++ elseif(kode.eq.83)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many three body potentials specified' ++ elseif(kode.eq.84)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in 3-body potential list' ++ elseif(kode.eq.85)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - required velocities not in CONFIG file' ++ elseif(kode.eq.86)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated 3-body potential index too large' ++ elseif(kode.eq.87)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells required in fbpfrc' ++ elseif(kode.eq.88)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tersoff potentials specified' ++ elseif(kode.eq.89)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many four body potentials specified' ++ elseif(kode.eq.90)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - system total electric charge nonzero' ++ elseif(kode.eq.91)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in 4-body potential list' ++ elseif(kode.eq.92)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in tersoff potential list' ++ elseif(kode.eq.93)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with rigid molecules' ++ elseif(kode.eq.95)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - potential cutoff exceeds half-cell width' ++ elseif(kode.eq.97)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with neutral groups' ++ elseif(kode.eq.99)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with constraints' ++ endif ++ ++ elseif(kode.lt.150)then ++ ++ if(kode.eq.100)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - forces working arrays too small' ++ elseif(kode.eq.101)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated 4-body potential index too large' ++ elseif(kode.eq.102)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxproc exceeded in shake arrays' ++ elseif(kode.eq.103)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxlshp exceeded in shake arrays' ++ elseif(kode.eq.105)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - shake algorithm failed to converge' ++ elseif(kode.eq.106)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlink ' ++ x //'subroutine' ++ elseif(kode.eq.107)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlinkneu ' ++ x //'subroutine' ++ elseif(kode.eq.108)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parneulst ' ++ x //'subroutine' ++ elseif(kode.eq.109)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlst_nsq ' ++ x //'subroutine' ++ elseif(kode.eq.110)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlst ' ++ x //'subroutine' ++ elseif(kode.eq.112)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - vertest array too small' ++ elseif(kode.eq.120)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - invalid determinant in matrix inversion' ++ elseif(kode.eq.130)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect octahedral boundary condition' ++ elseif(kode.eq.135)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect hexagonal prism boundary condition' ++ elseif(kode.eq.140)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect dodecahedral boundary condition' ++ elseif(kode.eq.141)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate metal potential specified' ++ elseif(kode.eq.142)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - interpolation outside range of metal '// ++ x 'potential attempted' ++ elseif(kode.eq.145)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - no van der waals potentials defined' ++ endif ++ ++ elseif(kode.lt.200)then ++ ++ if(kode.eq.150)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown van der waals potential selected' ++ elseif(kode.eq.151)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown metal potential selected' ++ elseif(kode.eq.153)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - metals not permitted with multiple timestep' ++ elseif(kode.eq.160)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unaccounted for atoms in exclude list ' ++ elseif(kode.eq.170)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many variables for statistic array ' ++ elseif(kode.eq.180)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - Ewald sum requested in non-periodic system' ++ elseif(kode.eq.185)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many reciprocal space vectors' ++ elseif(kode.eq.186)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer array too small in sysgen' ++ elseif(kode.eq.190)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - buffer array too small in splice' ++ endif ++ ++ elseif(kode.lt.250)then ++ ++ if(kode.eq.200)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - rdf buffer array too small in revive' ++ elseif(kode.eq.220)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many neutral groups in system' ++ elseif(kode.eq.225)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - multiple selection of optimisation options' ++ elseif(kode.eq.230)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neutral groups improperly arranged' ++ endif ++ ++ elseif(kode.lt.300)then ++ ++ if(kode.eq.250)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - Ewald sum requested with neutral groups' ++ elseif(kode.eq.260)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxexcl exceeded in excludeneu routine' ++ endif ++ ++ elseif(kode.lt.350)then ++ ++ if(kode.eq.300)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in parlink' ++ elseif(kode.eq.301)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid body types ' ++ elseif(kode.eq.302)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many sites in rigid body ' ++ elseif(kode.eq.303)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid bodies specified' ++ elseif(kode.eq.304)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid body sites in system ' ++ elseif(kode.eq.305)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - box size too small for link cells' ++ elseif(kode.eq.306)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - failed to find principal axis system' ++ elseif(kode.eq.310)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - quaternion setup failed ' ++ elseif(kode.eq.320)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - site in multiple rigid bodies' ++ elseif(kode.eq.321)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - quaternion integrator failed' ++ elseif(kode.eq.330)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxewld parameter incorrect' ++ elseif(kode.eq.331)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxhke parameter incorrect' ++ elseif(kode.eq.332)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxhko parameter too small' ++ elseif(kode.eq.340)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - invalid integration option requested' ++ endif ++ ++ elseif(kode.lt.400)then ++ ++ if(kode.eq.350)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too few degrees of freedom' ++ elseif(kode.eq.360)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - frozen atom found in rigid body' ++ elseif(kode.eq.380)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation temperature not specified' ++ elseif(kode.eq.381)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation timestep not specified' ++ elseif(kode.eq.382)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation cutoff not specified' ++ elseif(kode.eq.383)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation forces option not specified' ++ elseif(kode.eq.384)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - verlet strip width not specified' ++ elseif(kode.eq.385)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - primary cutoff not specified' ++ elseif(kode.eq.386)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - primary cutoff larger than rcut' ++ elseif(kode.eq.387)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - system pressure not specified' ++ elseif(kode.eq.388)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - npt incompatible with multiple timestep' ++ elseif(kode.eq.389)then ++ write(nrite,'(/,/,1x,a)') ++ x 'number of pimd beads not specified in field file' ++ elseif(kode.eq.390)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - npt ensemble requested in non-periodic system' ++ elseif(kode.eq.391)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect number of pimd beads in config file' ++ elseif(kode.eq.392)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells requested' ++ elseif(kode.eq.394)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - minimum image arrays exceeded' ++ elseif(kode.eq.396)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - interpolation array exceeded' ++ elseif(kode.eq.398)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cutoff too small for rprim and delr' ++ endif ++ ++ elseif(kode.lt.450)then ++ ++ if(kode.eq.400)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - rvdw greater than cutoff' ++ elseif(kode.eq.402)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - van der waals cutoff unset' ++ elseif(kode.eq.410)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cell not consistent with image convention' ++ elseif(kode.eq.412)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxxdf parameter too small for shake routine' ++ elseif(kode.eq.414)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - conflicting ensemble options in CONTROL file' ++ elseif(kode.eq.416)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - conflicting force options in CONTROL file' ++ elseif(kode.eq.418)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in bndfrc' ++ elseif(kode.eq.419)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in angfrc' ++ elseif(kode.eq.420)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in tethfrc' ++ elseif(kode.eq.421)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in dihfrc' ++ elseif(kode.eq.422)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - all-pairs must use multiple timestep' ++ elseif(kode.eq.423)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in shlfrc' ++ elseif(kode.eq.424)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - electrostatics incorrect for all-pairs' ++ elseif(kode.eq.425)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer array too small in shlmerge' ++ elseif(kode.eq.426)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neutral groups not permitted with all-pairs' ++ elseif(kode.eq.427)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in invfrc' ++ elseif(kode.eq.430)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - integration routine not available' ++ elseif(kode.eq.432)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - intlist failed to assign constraints ' ++ elseif(kode.eq.433)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - specify rcut before the Ewald sum precision' ++ elseif(kode.eq.434)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - illegal entry into STRESS related routine' ++ elseif(kode.eq.435)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - specify rcut before the coulomb precision' ++ elseif(kode.eq.436)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unrecognised ensemble ' ++ elseif(kode.eq.438)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - PMF constraints failed to converge' ++ elseif(kode.eq.440)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined angular potential' ++ elseif(kode.eq.442)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined three body potential' ++ elseif(kode.eq.443)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined four body potential' ++ elseif(kode.eq.444)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined bond potential' ++ elseif(kode.eq.445)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined many body potential' ++ elseif(kode.eq.446)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined electrostatic key in dihfrc' ++ elseif(kode.eq.447)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - 1-4 separation exceeds cutoff range' ++ elseif(kode.eq.448)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined dihedral potential' ++ elseif(kode.eq.449)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined inversion potential' ++ endif ++ ++ elseif(kode.lt.500)then ++ ++ if(kode.eq.450)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined tethering potential' ++ elseif(kode.eq.451)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - three body potential cutoff undefined' ++ elseif(kode.eq.452)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined pair potential' ++ elseif(kode.eq.453)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - four body potential cutoff undefined' ++ elseif(kode.eq.454)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined external field' ++ elseif(kode.eq.456)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - core and shell in same rigid unit' ++ elseif(kode.eq.458)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many PMF constraints - param. mspmf too ' ++ x //'small' ++ elseif(kode.eq.460)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many PMF sites - parameter mxspmf too small' ++ elseif(kode.eq.461)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined metal potential' ++ elseif(kode.eq.462)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - PMF UNIT record expected' ++ elseif(kode.eq.463)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in metal potential list' ++ elseif(kode.eq.464)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - thermostat time constant must be > 0.d0' ++ elseif(kode.eq.465)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated pair potential index too large' ++ elseif(kode.eq.466)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - barostat time constant must be > 0.d0' ++ elseif(kode.eq.468)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - r0 too large for snm potential with current ' ++ x //'cutoff' ++ elseif(kode.eq.470)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - n= ',nsatms ++ call error(idnode,100) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c variables for array bound checking ++ ++ ibig=0 ++ safe=.true. ++ ++c initialise excluded atom arrays ++ ++ do i=1,mxsite ++ ++ nexsit(i)=0 ++ ++ enddo ++ ++ do i=1,msatms ++ ++ nexatm(i)=0 ++ ++ enddo ++ ++ do j=1,mxexcl ++ ++ do i=1,mxsite ++ ++ lexsit(i,j)=0 ++ ++ enddo ++ ++ do i=1,msatms ++ ++ lexatm(i,j)=0 ++ ++ enddo ++ ++ enddo ++ ++ ++c loop over molecules in system ++ ++ ibonds=0 ++ iangle=0 ++ iconst=0 ++ idihdr=0 ++ invers=0 ++ igrp =0 ++ isite =0 ++ ishels=0 ++ ++ do itmols=1,ntpmls ++ ++c exclude sites on basis of chemical bonds ++ ++ do i=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(keybnd(ibonds).gt.0)then ++ ++ ia=lstbnd(ibonds,1)+isite ++ ib=lstbnd(ibonds,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of bond constraints ++ ++ do i=1,numcon(itmols) ++ ++ iconst=iconst+1 ++ ia=lstcon(iconst,1)+isite ++ ib=lstcon(iconst,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ enddo ++ ++c exclude sites on basis of bond angles ++ ++ do i=1,numang(itmols) ++ ++ iangle=iangle+1 ++ if(keyang(iangle).gt.0)then ++ ia=lstang(iangle,1)+isite ++ ib=lstang(iangle,2)+isite ++ ic=lstang(iangle,3)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude on basis of rigid groups ++ ++ do i=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ id=listyp(igrp) ++ ++ do jj=1,numgsit(id)-1 ++ ++ ia=lstgst(igrp,jj)+isite ++ ++ do jk=jj+1,numgsit(id) ++ ++ ib=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c exclude sites on basis of 1-4 dihedral angles ++ ++ do i=1,numdih(itmols) ++ ++ idihdr=idihdr+1 ++ ia=lstdih(idihdr,1)+isite ++ ib=lstdih(idihdr,2)+isite ++ ic=lstdih(idihdr,3)+isite ++ id=lstdih(idihdr,4)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++c id - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ib-isite ++ lexsit(ib,nexsit(ib))=id-isite ++ endif ++ endif ++ ++c id - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ic-isite ++ lexsit(ic,nexsit(ic))=id-isite ++ endif ++ endif ++ ++c ia - id interaction: may need to reset vdw and elec scale factors ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.id-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(id)=nexsit(id)+1 ++ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(id)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=id-isite ++ lexsit(id,nexsit(id))=ia-isite ++ endif ++ ++ elseif(keydih(idihdr).ne.7)then ++ ++c if already excluded reset 1..4 vdw and coulombic scale factors ++ ++ check=((abs(prmdih(idihdr,4)).gt.1.d-10).or. ++ x (abs(prmdih(idihdr,5)).gt.1.d-10)) ++ ++ if(check)then ++ ++ a1=dble(itmols) ++ a2=dble(ia) ++ a3=dble(id) ++ call warning(idnode,20,a1,a2,a3) ++ ++ prmdih(idihdr,4)=0.d0 ++ prmdih(idihdr,5)=0.d0 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of inversion potentials ++ ++ do i=1,numinv(itmols) ++ ++ invers=invers+1 ++ ia=lstinv(invers,1)+isite ++ ib=lstinv(invers,2)+isite ++ ic=lstinv(invers,3)+isite ++ id=lstinv(invers,4)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++c id - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ib-isite ++ lexsit(ib,nexsit(ib))=id-isite ++ endif ++ endif ++ ++c id - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ic-isite ++ lexsit(ic,nexsit(ic))=id-isite ++ endif ++ endif ++ ++c ia - id interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.id-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(id)=nexsit(id)+1 ++ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(id)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=id-isite ++ lexsit(id,nexsit(id))=ia-isite ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of core-shell units ++ ++ do i=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ ia=lstshl(ishels,1)+isite ++ ib=lstshl(ishels,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c exclude sites on basis of bonds to core-shell units ++ ++ ibonds=ibonds-numbonds(itmols) ++ do kk=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(keybnd(ibonds).gt.0)then ++ ++ ia1=lstbnd(ibonds,1)+isite ++ ib1=lstbnd(ibonds,2)+isite ++ ++ if(ia.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ia.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia1),mxexcl) ++ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia1)=nexsit(ia1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia1,nexsit(ia1))=ib-isite ++ lexsit(ib,nexsit(ib))=ia1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ib.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ endif ++ ++ endif ++ if(ib.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ia1)=nexsit(ia1)+1 ++ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ia1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ia1-isite ++ lexsit(ia1,nexsit(ia1))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of constraint bonds to core-shell units ++ ++ iconst=iconst-numcon(itmols) ++ do kk=1,numcon(itmols) ++ ++ iconst=iconst+1 ++ ++ ia1=lstcon(iconst,1)+isite ++ ib1=lstcon(iconst,2)+isite ++ ++ if(ia.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ia.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia1),mxexcl) ++ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia1)=nexsit(ia1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia1,nexsit(ia1))=ib-isite ++ lexsit(ib,nexsit(ib))=ia1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ib.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ endif ++ ++ endif ++ if(ib.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ia1)=nexsit(ia1)+1 ++ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ia1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ia1-isite ++ lexsit(ia1,nexsit(ia1))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of rigid units involving core or shell ++ ++ igrp=igrp-numgrp(itmols) ++ do kk=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ id=listyp(igrp) ++ ++ do jj=1,numgsit(id) ++ ++ ia1=lstgst(igrp,jj)+isite ++ if(ia1.eq.ia)then ++ ++ do jk=1,numgsit(id) ++ ++ if(jk.ne.jj)then ++ ib1=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(ia1.eq.ib)then ++ ++ do jk=1,numgsit(id) ++ ++ if(jk.ne.jj)then ++ ib1=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ ntpsit=isite ++ ++c check for exceeded array bounds ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ if(mxnode.gt.1)call gimax(ibig,1,jj) ++ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl ++ call error(idnode,65) ++ endif ++ ++c remove redundant entries from exclusion list ++c (there shouldn't be any!) ++ ++ do i=1,ntpsit ++ ++ nlast=nexsit(i) ++ do j=1,nexsit(i)-1 ++ ++ if(j.lt.nlast)then ++ ++ kk=j ++ do k=j+1,nexsit(i) ++ ++ if(lexsit(i,j).eq.lexsit(i,k))then ++ ++ nlast=nlast-1 ++ lexsit(i,k)=0 ++ ++ else if(lexsit(i,k).gt.0)then ++ ++ kk=kk+1 ++ lexsav=lexsit(i,k) ++ lexsit(i,k)=0 ++ lexsit(i,kk)=lexsav ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ nexsit(i)=nlast ++ ++ enddo ++ ++ ++ return ++ end subroutine exclude ++ ++ subroutine excludeneu(idnode,mxnode,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c part 2 - neutral group implementation ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ implicit none ++ ++ logical lchk ++ integer idnode,mxnode,nneut,ibig,iatom,jatom,last,mpm2 ++ integer npm2,m,ii,im,itmols,inoff,isoff,isit,iolsit,jm,jtmols ++ integer jnoff,jsoff,jsit,jolsit,jn1,jno1,jsite,jsite0,in1,ino1 ++ integer jj0,isite,ij,idum,it ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ ibig=0 ++ iatom=0 ++ jatom=0 ++ ++c generate all atomic pairs and check for exclusions ++c with Brode Ahlrichs ordering of groups ++ ++ last=nneut ++ lchk=.true. ++ mpm2=nneut/2+1 ++ npm2=(nneut-1)/2+1 ++ ++c outer loop over groups ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2-1 ++ ++c inner loop over groups - include intragroup interactions ++ ++ ii=0 ++ ++ do im=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ ++c first site in neutral group ++ ++ itmols=1 ++ inoff=0 ++ isoff=0 ++ isit=numsit(itmols)*nummols(itmols) ++ iolsit=numsit(itmols) ++ ++c calculate j group indices ++ ++ jm=im+m-1 ++ if(jm.gt.nneut)jm=jm-nneut ++ ++c inner loop over neutral groups ++ ++ jtmols=1 ++ jnoff=0 ++ jsoff=0 ++ jsit=numsit(jtmols)*nummols(jtmols) ++ jolsit=numsit(jtmols) ++ ++c test first sites in neutral group ++ ++ jatom=neulst(jm) ++ ++c establish pointer to sets ++ ++ do while(jatom.gt.jsit) ++ ++ jtmols=jtmols+1 ++ jnoff=jsit ++ jsoff=jsoff+jolsit ++ jsit=jsit+nummols(jtmols)*numsit(jtmols) ++ jolsit=numsit(jtmols) ++ ++ enddo ++ ++ jn1=jatom-jnoff ++ jno1=(jn1/jolsit)*jolsit ++ jsite=jn1-jno1 ++ if(jsite.eq.0)then ++ jsite=jolsit ++ jno1=jno1-jolsit ++ endif ++ jsite=jsite+jsoff ++ jsite0=jsite-1 ++ ++ do iatom=neulst(im),neulst(im+1)-1 ++ ++c establish pointer to sets ++ ++ do while(iatom.gt.isit) ++ ++ itmols=itmols+1 ++ inoff=isit ++ isoff=isoff+iolsit ++ isit=isit+nummols(itmols)*numsit(itmols) ++ iolsit=numsit(itmols) ++ ++ enddo ++ ++ in1=iatom-inoff ++ ino1=(in1/iolsit)*iolsit ++ isite=in1-ino1 ++ if(isite.eq.0)then ++ isite=iolsit ++ ino1=ino1-iolsit ++ endif ++ isite=isite+isoff ++ ++c test im and jm are neutral groups on same molecule ++ ++ if((jnoff.eq.inoff).and.(ino1.eq.jno1))then ++ if(abs(im-jm).lt.iolsit)then ++ ++ jj0=neulst(jm) ++ jsite=jsite0 ++ ++c special case for im=jm (ie. same group) ++ ++ if(im.eq.jm)then ++ ++ jj0=iatom+1 ++ jsite=isite ++ ++ endif ++ ++c test for excluded interaction ++ ++ do jatom=jj0,neulst(jm+1)-1 ++ ++ jsite=jsite+1 ++ ++ do ij=1,nexsit(isite) ++ ++ if(lexsit(isite,ij).eq.jsite-jsoff)then ++ ++ it=nexatm(ii) ++ ++ if(it+2.gt.mxexcl)then ++ ++ ibig=max(it+2,ibig) ++ nexatm(ii)=it+2 ++ lchk=.false. ++ ++ else ++ ++ lexatm(ii,it+1)=iatom ++ lexatm(ii,it+2)=jatom ++ nexatm(ii)=nexatm(ii)+2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c global check ++ ++ call gstate(lchk) ++ if(.not.lchk)then ++ ++ if(mxnode.gt.1)call gimax(ibig,1,idum) ++ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl ++ call error(idnode,260) ++ ++ endif ++ ++ return ++ end subroutine excludeneu ++ ++ subroutine exclude_link(idnode,mxnode,ntpmls) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c ++c part 2 - link cell implementation ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith june 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntpmls,iatom,jatom,lsite,ksite ++ integer itmols,imols,isite,kk,newatm,k ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ iatom=0 ++ jatom=0 ++ lsite=0 ++ ksite=0 ++ ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do isite=1,numsit(itmols) ++ ++ iatom=iatom+1 ++ ++ if(mod(iatom-1,mxnode).eq.idnode)then ++ ++ kk=0 ++ jatom=jatom+1 ++ ++ do k=1,nexsit(ksite+isite) ++ ++ newatm=lexsit(ksite+isite,k)+lsite ++ ++ kk=kk+1 ++ lexatm(jatom,kk)=newatm ++ ++ enddo ++ ++ nexatm(jatom)=kk ++ ++ endif ++ ++ enddo ++ ++ lsite=lsite+numsit(itmols) ++ ++ enddo ++ ++ ksite=ksite+numsit(itmols) ++ ++ enddo ++ ++ return ++ end subroutine exclude_link ++ ++ subroutine exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c part 2 ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith june 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,ntpmls,iatom,jatom,lsite ++ integer ksite,itmols,isite,imols,k,kk,newatm,j,latom,i,ii ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ iatom=0 ++ jatom=0 ++ lsite=0 ++ ksite=0 ++ ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do isite=1,numsit(itmols) ++ ++ iatom=iatom+1 ++ ++ if(mod(iatom-1,mxnode).eq.idnode)then ++ ++ kk=0 ++ jatom=jatom+1 ++ ++ do k=1,nexsit(ksite+isite) ++ ++ newatm=lexsit(ksite+isite,k)+lsite ++ ++c keep only brode-ahlrichs combinations of indices ++ ++ if(((newatm.gt.iatom).and. ++ x (newatm-iatom.le.natms/2)).or. ++ x ((newatm.lt.iatom).and. ++ x (newatm+natms-iatom.le.(natms-1)/2)))then ++ ++ kk=kk+1 ++ lexatm(jatom,kk)=newatm ++ ++ if(kk.gt.1)then ++ ++c sort the excluded atom list in ascending indices ++ ++ do j=kk,2,-1 ++ ++ if(lexatm(jatom,j).lt.lexatm(jatom,j-1)) ++ x then ++ latom=lexatm(jatom,j) ++ lexatm(jatom,j)=lexatm(jatom,j-1) ++ lexatm(jatom,j-1)=latom ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ nexatm(jatom)=kk ++ ++ endif ++ ++ enddo ++ ++ lsite=lsite+numsit(itmols) ++ ++ enddo ++ ++ ksite=ksite+numsit(itmols) ++ ++ enddo ++ ++c final sort into brode-ahlrichs ordering ++ ++ ii=0 ++ do i=1+idnode,natms,mxnode ++ ++ ii=ii+1 ++ do j=1,nexatm(ii) ++ ++ if(lexatm(ii,1).lt.i)then ++ ++ latom=lexatm(ii,1) ++ ++ do k=1,nexatm(ii)-1 ++ ++ lexatm(ii,k)=lexatm(ii,k+1) ++ ++ enddo ++ ++ lexatm(ii,nexatm(ii))=latom ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine exclude_atom ++ ++ subroutine exclude_copy_mtd(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for copying excluded atom arrays into ++c the metadynamics module for use in computing order parameters ++c ++c author - d. quigley April 2012 ++c ++c*********************************************************************** ++ use metafreeze_module, only : mtd_lexatm,mtd_nexatm ++ implicit none ++ integer, parameter :: nnn=2 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c data needed by metadynamics module ++ allocate (mtd_lexatm(msatms,mxexcl),stat=fail(1)) ++ allocate (mtd_nexatm(msatms) ,stat=fail(2)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0) call error(idnode,1012) ++ enddo ++ ++ ++c copy exclude list into metafreeze module ++ mtd_nexatm = nexatm ++ mtd_lexatm = lexatm ++ ++ return ++ end subroutine exclude_copy_mtd ++ ++ end module exclude_module ++ +diff -urN dl_class_1.9.orig/srcmod/external_field_module.f dl_class_1.9/srcmod/external_field_module.f +--- dl_class_1.9.orig/srcmod/external_field_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/external_field_module.f 2014-02-27 13:49:34.000000000 +0100 +@@ -0,0 +1,347 @@ ++ module external_field_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining external field potential arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmfld(:) ++ ++ save prmfld ++ ++ contains ++ ++ subroutine alloc_fld_arrays(idnode) ++ ++ implicit none ++ ++ integer fail,idnode ++ ++ data fail/0/ ++ ++ allocate (prmfld(mxfld),stat=fail) ++ if(fail.ne.0)call error(idnode,1200) ++ ++ end subroutine alloc_fld_arrays ++ ++ subroutine define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to define external fields ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c amended - p.-l. chau jun 2009 z-restraint option ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,keyfld,nfld,i,k,idum ++ real(8) engunit ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call strip(record,lenrec) ++ call lowcase(record,lenrec) ++ call copystring(record,message,80) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'elec') then ++ keyfld=1 ++ elseif(keyword(1:4).eq.'oshr') then ++ keyfld=2 ++ elseif(keyword(1:4).eq.'shrx') then ++ keyfld=3 ++ elseif(keyword(1:4).eq.'grav') then ++ keyfld=4 ++ elseif(keyword(1:4).eq.'magn') then ++ keyfld=5 ++ elseif(keyword(1:4).eq.'sphr') then ++ keyfld=6 ++ elseif(keyword(1:4).eq.'zbnd') then ++ keyfld=7 ++ elseif(keyword(1:4).eq.'zres') then ++ keyfld=9 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,454) ++ endif ++ ++ do i=1,mxfld ++ prmfld(i)=0.d0 ++ enddo ++ ++ nfld=intstr(record,lenrec,idum) ++ if(nfld.eq.0)nfld=5 ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ do k=1,nfld ++ ++ prmfld(k)=dblstr(record,lenrec,idum) ++ if(idum.gt.lenrec.and.k.lt.nfld)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'external field key ',13x,a4, ++ x /,/,30x,'external field parameters')") keyword(1:4) ++ write(nrite,"(2(/,1x,1p,5e15.5))") prmfld ++ ++ endif ++ ++c convert to internal units ++ ++ if(keyfld.eq.1.or.keyfld.eq.4.or.keyfld.eq.5) then ++ ++ if(.not.lunits)call error(idnode,6) ++ ++ do i=1,3 ++ prmfld(i)=prmfld(i)*engunit ++ enddo ++ ++ elseif(keyfld.eq.2.or.keyfld.eq.6.or.keyfld.eq.7) then ++ ++ prmfld(1)=prmfld(1)*engunit ++ ++ elseif(keyfld.eq.9) then ++ ++ prmfld(3)=prmfld(3)*engunit ++ ++ endif ++ ++ return ++ end subroutine define_external_field ++ ++ subroutine extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c*********************************************************************** ++c ++c dl_poly routine for application of an external field ++c ++c replicated data version / block data ++c ++c copyright daresbury laboratory 1993 ++c author - t.forester october 1993 ++c amended - t.forester dec 1994 ++c amended - p.-l. chau jun 2009 z-restraint option ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyfld,mxnode,natms,iatm1,iatm2,i,j ++ integer istart,ifinish,numresat ++ real(8) engfld,virfld,rz,rrr,gamma,zdif,totwgt ++ real(8) com(3) ++ ++c energy and virial accumulators ++ ++ engfld=0.d0 ++ virfld=0.d0 ++ ++c block indices ++ ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ if(keyfld.eq.1) then ++ ++c electric field: prmfld(1-3) are field components ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+chge(i)*prmfld(1) ++ fyy(i)=fyy(i)+chge(i)*prmfld(2) ++ fzz(i)=fzz(i)+chge(i)*prmfld(3) ++ ++ enddo ++ ++ elseif(keyfld.eq.2) then ++ ++c oscillating shear: orthorhombic box: Fx=a*cos(b.2.pi.z/L) ++ ++ rz=2.d0*pi/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+prmfld(1)*cos(prmfld(2)*zzz(i)*rz) ++ ++ enddo ++ ++ elseif(keyfld.eq.3.and.imcon.eq.6) then ++ ++c continuous shear of walls : 2D periodic box (imcon=6) ++c shear rate=prmfld(1) angstrom per ps for atoms at ++c abs(z) > prmfld(2) ++ ++ do i=iatm1,iatm2 ++ ++ if(abs(zzz(i)).gt.prmfld(2)) then ++ ++ vxx(i)=0.5d0*sign(prmfld(1),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.4) then ++ ++c gravitational field: field components given by prmfld(1-3) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+prmfld(1)*weight(i) ++ fyy(i)=fyy(i)+prmfld(2)*weight(i) ++ fzz(i)=fzz(i)+prmfld(3)*weight(i) ++ ++ enddo ++ ++ elseif(keyfld.eq.5) then ++ ++c magnetic field: field components given by prmfld(1-3) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+(vyy(i)*prmfld(3)-vzz(i)*prmfld(2)) ++ x *chge(i) ++ fyy(i)=fyy(i)+(vzz(i)*prmfld(1)-vxx(i)*prmfld(3)) ++ x *chge(i) ++ fzz(i)=fzz(i)+(vxx(i)*prmfld(2)-vyy(i)*prmfld(1)) ++ x *chge(i) ++ ++ enddo ++ ++ elseif(keyfld.eq.6) then ++ ++c containing sphere : r^(-n) potential ++ ++ do i=iatm1,iatm2 ++ ++ rrr=sqrt(xxx(i)**2+yyy(i)**2+zzz(i)**2) ++ if(rrr.gt.prmfld(4)) then ++ rrr=prmfld(2)-rrr ++ if(rrr.lt.0.d0) rrr=0.1d0 ++ ++ gamma =prmfld(1)*rrr**(-prmfld(3)) ++ engfld=engfld+gamma ++ ++ gamma=-prmfld(3)*gamma/((prmfld(2)-rrr)*rrr) ++ ++ fxx(i)=fxx(i)+gamma*xxx(i) ++ fyy(i)=fyy(i)+gamma*yyy(i) ++ fzz(i)=fzz(i)+gamma*zzz(i) ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.7) then ++ ++c repulsive wall (harmonic) starting at z0 ++ ++ do i=iatm1,iatm2 ++ ++ if(prmfld(3)*zzz(i).gt.prmfld(3)*prmfld(2)) then ++ ++ zdif=zzz(i)-prmfld(2) ++ gamma=-prmfld(1)*zdif ++ ++ fzz(i)=fzz(i)+gamma ++ engfld=engfld-gamma*zdif/2. ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.9) then ++ ++c keyfld=9. restrain molecule z-position ++c prmfld(1) is number of first atom of restrained molecule ++c prmfld(2) is number of last atom of restrained molecule ++c prmfld(3) is the restraining constant ++c prmfld(4) is z-min ++c prmfld(5) is z-max ++ ++ istart=nint(prmfld(1)) ++ ifinish=nint(prmfld(2)) ++ numresat=ifinish-istart+1 ++ ++c calculate the centre of mass of the molecule ++ ++ call getcom_mol(istart,ifinish,imcon,idnode,mxnode,totwgt,com) ++ ++c apply restraint force according to location ++ ++ if(com(3).lt.prmfld(4))then ++ ++c if centre of mass is below z-min, activate restraining force ++ ++ do i=istart,ifinish ++ ++ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* ++ x (com(3)-prmfld(4))/mxnode ++ ++ enddo ++ ++ elseif(com(3).gt.prmfld(5))then ++ ++c if centre of mass if above z-max, activate restraining force ++ ++ do i=istart,ifinish ++ ++ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* ++ x (com(3)-prmfld(5))/mxnode ++ ++ enddo ++ ++ endif ++ ++ else ++ ++c unidentified field potential error exit ++ ++ call error(idnode,454) ++ ++ endif ++ ++c global sum of external field potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engfld ++ buffer(2)=virfld ++ call gdsum(buffer(1),2,buffer(3)) ++ engfld=buffer(1) ++ virfld=buffer(2) ++ ++ endif ++ ++ return ++ end subroutine extnfld ++ ++ end module external_field_module +diff -urN dl_class_1.9.orig/srcmod/forces_module.f dl_class_1.9/srcmod/forces_module.f +--- dl_class_1.9.orig/srcmod/forces_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/forces_module.f 2015-11-09 14:15:45.064258843 +0100 +@@ -0,0 +1,2970 @@ ++ module forces_module ++ ++c*********************************************************************** ++c ++c dl_poly module for calculation of atomic forces ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d. quigley : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use coulomb_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use metafreeze_module ++ use metal_module ++ use neu_coul_module ++ use nlist_builders_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ use spme_module ++ use tersoff_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ contains ++ ++ subroutine force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to manage the calculation of the atomic forces ++c from all force field terms. ++c ++c copyright - daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva ++ logical lfree,lghost,llsolva ++ ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet ++ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva ++ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld ++ ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih ++ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld ++ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord ++ ++ llsolva=.false. ++ ++c initialize energy and virial accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ engang=0.d0 ++ virang=0.d0 ++ engdih=0.d0 ++ virdih=0.d0 ++ enginv=0.d0 ++ virinv=0.d0 ++ engtbp=0.d0 ++ virtbp=0.d0 ++ engter=0.d0 ++ virter=0.d0 ++ engfbp=0.d0 ++ virfbp=0.d0 ++ engsrp=0.d0 ++ virsrp=0.d0 ++ engcpe=0.d0 ++ vircpe=0.d0 ++ engfld=0.d0 ++ virfld=0.d0 ++ engshl=0.d0 ++ virshl=0.d0 ++ shlke =0.d0 ++ engtet=0.d0 ++ virtet=0.d0 ++ engmet=0.d0 ++ virmet=0.d0 ++ virord=0.0d0 ++ engord=0.0d0 ++ ++ if(lmetadyn)then ++ ++ eng_loc=0.0d0 ++ vir_loc=0.0d0 ++ fxx_loc(:)=0.0d0 ++ fyy_loc(:)=0.0d0 ++ fzz_loc(:)=0.0d0 ++ stress_loc(:)=0.0d0 ++ ++ endif ++ ++c initialise free energy accumulators ++ ++ if(lfree)then ++ ++ ang_fre=0.d0 ++ bnd_fre=0.d0 ++ dih_fre=0.d0 ++ inv_fre=0.d0 ++ tbp_fre=0.d0 ++ fbp_fre=0.d0 ++ cou_fre=0.d0 ++ vdw_fre=0.d0 ++ shl_fre=0.d0 ++ ang_vir=0.d0 ++ bnd_vir=0.d0 ++ dih_vir=0.d0 ++ inv_vir=0.d0 ++ tbp_vir=0.d0 ++ fbp_vir=0.d0 ++ cou_vir=0.d0 ++ vdw_vir=0.d0 ++ shl_vir=0.d0 ++ eng_cfg_fre=0.d0 ++ vir_cfg_fre=0.d0 ++ ++ endif ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ if(keyfce/2.gt.0)lcomp(6)=.true. ++ if(mod(keyfce,2).eq.1)lcomp(7)=.true. ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ llsolva=.true. ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c initialise the force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ if(nstep.gt.0)then ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ endif ++ ++ if(keyfce.gt.0)then ++ ++c calculate pair forces, including coulombic forces ++ ++ if(lnsq)then ++ ++c multiple timestep - all-pairs ++ ++ call multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++ elseif(.not.lneut)then ++ ++c single timestep ++ ++ if(multt.eq.1)then ++ ++ call forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, ++ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, ++ x vircpe,virsrp,volm,engmet,virmet) ++ ++ else ++ ++ call multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++ ++ endif ++ ++ elseif(lneut)then ++ ++c neutral groups ++ ++ if(multt.eq.1)then ++ ++ call forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++ else ++ ++ call multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add in long range corrections to energy and pressure ++ ++ engsrp=engsrp+elrc ++ virsrp=virsrp+virlrc ++ engmet=engmet+elrcm(0) ++ virmet=virmet+vlrcm(0) ++ if(lfree)then ++ vdw_fre=vdw_fre+elrc_fre ++ vdw_vir=vdw_vir+vlrc_fre ++ endif ++ ++c calculate three body forces ++ ++ if(ntptbp.gt.0)call thbfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c calculate four body forces ++ ++ if(ntpfbp.gt.0)call fbpfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c calculate tersoff potential forces ++ ++ if(ntpter.gt.0)call tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c calculate bond forces ++ ++ if(ntbond.gt.0)call bndfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c calculate valence angle forces ++ ++ if(ntangl.gt.0)call angfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c calculate dihedral forces ++ ++ if(ntdihd.gt.0)call dihfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, ++ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) ++ ++c calculate inversion forces ++ ++ if(ntinv.gt.0)call invfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c calculate tethered atom forces ++ ++ if(ntteth.gt.0)call tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c calculate shell model forces ++ ++ if(keyshl.gt.0)call shlfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c external field ++ ++ if(keyfld.gt.0)call extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c metadynamics option : use potential energy as order parameter ++ ++ if(lmetadyn)then ++ ++ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ ++ x engtbp+engfbp+engshl+enginv+engter+engmet ++ ++ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet ++ ++ call metafreeze_driver ++ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) ++ ++ endif ++ ++c global summation of force arrays (basic replicated data strategy) ++ ++ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) ++ ++c global sum of stress arrays ++ ++ if(mxnode.gt.1)call gdsum(stress,9,buffer) ++ ++c add long range correction to diagonal terms of stress tensor ++ ++ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 ++ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 ++ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 ++ ++c cap forces in equilibration mode ++ ++ if(nstep.le.nsteql.and.lfcap) ++ x call fcap(lfcap,natms,fmax,temp) ++ ++c total configuration energy ++ ++ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ ++ x engfbp+engshl+enginv+engter+engmet ++ ++c PLUMED modifications ++ if(lplumed)then ++ call plumed_f_gcmd("setStep"//char(0),nstep) ++ call plumed_f_gcmd("setMasses"//char(0),weight) ++ call plumed_f_gcmd("setCharges"//char(0),chge) ++ call plumed_f_gcmd("setPositionsX"//char(0),xxx) ++ call plumed_f_gcmd("setPositionsY"//char(0),yyy) ++ call plumed_f_gcmd("setPositionsZ"//char(0),zzz) ++ call plumed_f_gcmd("setBox"//char(0),cell) ++ call plumed_f_gcmd("setEnergy"//char(0),engcfg) ++ call plumed_f_gcmd("setForcesX"//char(0),fxx) ++ call plumed_f_gcmd("setForcesY"//char(0),fyy) ++ call plumed_f_gcmd("setForcesZ"//char(0),fzz) ++ call plumed_f_gcmd("setVirial"//char(0),stress) ++ call plumed_f_gcmd("calc"//char(0) ) ++ endif ++c PLUMED modifications ++ ++c total derivative of the configurational free energy ++ ++ if(lfree)then ++ ++ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ ++ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) ++ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ ++ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) ++ ++ endif ++ ++c sum solvation and excitation energies for pair forces ++ ++ if(mxnode.gt.1)then ++ ++ if(llsolva)then ++ ++ call gdsum(vdw_sol,mxtmls_sol2,buffer) ++ call gdsum(cou_sol,mxtmls_sol2,buffer) ++ ++ if(lghost)then ++ ++ call gdsum(vdw_exc,mxtmls_exc2,buffer) ++ call gdsum(cou_exc,mxtmls_exc2,buffer) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add long range corrections to solvation terms ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) ++ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) ++ ++ endif ++ ++ return ++ end subroutine force_manager ++ ++ subroutine forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, ++ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, ++ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, ++ x virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c amended - t. forester sept 1994 ++c amended - w. smith june 1995 for metal potentials ++c ++c key: ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe ++ logical lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt ++ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf ++ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii ++ ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps ++ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lhke)then ++ ++ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++ else if(lewald.or.lspme.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c initialise force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c calculate local density in metals ++ ++ if(ntpmet.gt.0)then ++ ++ call metdens ++ x (idnode,imcon,mxnode,natms,engmet,virmet) ++ ++ stress(1)=stress(1)-virmet/3.d0 ++ stress(5)=stress(5)-virmet/3.d0 ++ stress(9)=stress(9)-virmet/3.d0 ++ ++ endif ++ ++c fourier contribution to coulombic forces in Ewald sum ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c hautman-klein-ewald method ++ ++ if(lhke)then ++ ++c fourier terms of hk-ewald ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engacc,viracc,alpha,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, ++ x drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c smoothed particle mesh ewald ++ ++ if(lspme)then ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c calculate metal forces and potential ++ ++ if(ntpmet.gt.0)then ++ ++ call metfrc(safe,i,lentry(ii),engacc,viracc) ++ ++ engmet=engmet+engacc ++ virmet=virmet+viracc ++ ++ endif ++ ++c calculate short range force and potential terms ++ ++ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, ++ x rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, ++ x viracc,drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0(i,lentry(ii),rcut) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check metal interpolation is safe ++ ++ if(ntpmet.gt.0)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ endif ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ eps=epsq ++ if(loglnk)eps=eps*2.0d0 ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ enddo ++ ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ numrdf=numrdf+1 ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=engmet ++ buffer(6)=virmet ++ buffer(7)=vdw_fre ++ buffer(8)=cou_fre ++ buffer(9)=vdw_vir ++ buffer(10)=cou_vir ++ call gdsum(buffer(1),10,buffer(11)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ engmet=buffer(5) ++ virmet=buffer(6) ++ vdw_fre=buffer(7) ++ cou_fre=buffer(8) ++ vdw_vir=buffer(9) ++ cou_vir=buffer(10) ++ ++ endif ++ ++ return ++ end subroutine forces ++ ++ subroutine forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c modified - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j ++ integer ibig,ia,ineu,isn,ik,nsolva,isolva ++ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe ++ real(8) virsrp,engacc,viracc,anorm,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension fail(2) ++ ++ data fail/0,0/ ++ ++c allocate working arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ do i=1,2 ++ if(fail(i).ne.0)call error(idnode,1820) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c initialise force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c initialise energy and virial accumulators ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c outer loop over neutral groups ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ newlst=.true. ++ ++ isn=1 ++ call neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0neu(ik,rcut) ++ ++ endif ++ ++ enddo ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,478) ++ endif ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c counter for rdf statistics outside loop structure ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ ++ return ++ end subroutine forces_neu ++ ++ subroutine multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++c*************************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c reciprocal space calculated on long time steps. ++c ++c copyright daresbury laboratory ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3,4 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ ++ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme ++ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt ++ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail ++ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 ++ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 ++ real(8) vircp1,engacl,engac2,virsr1 ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ if(newlst)nstep0=nstep ++ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) ++ ++c allocate working arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1840) ++ enddo ++ ++ endif ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lspme.or.lewald.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c zero force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS****************** ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ llsolva=lsolva ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate fourier contribution to secondary coulombic forces ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++c hautman-klein-ewald method ++ ++ elseif(lhke)then ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engac1,viracc,alpha,epsq) ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, ++ x virac2,drewd,rcut,epsq) ++ ++ engac1=engac1+engac2 ++ viracc=viracc+virac2 ++ ++ elseif(lspme)then ++ ++c smoothed particle mesh ewald ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ endif ++ ++ engcpl=engcpl+engac1 ++ vircpl=vircpl+viracc ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++c note: if using link cells - have double counted excluded ++c interactions use temporary adjustment to relative dielectric ++c constant ++ ++ eps=epsq ++ if(loglnk)eps=epsq*2.0d0 ++ ++c calculate self interaction corrections for fourier contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ enddo ++ ++ endif ++ ++c calculate pair contributions to secondary neighbour forces ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c calculate pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(newplst.or. ++ x (mod(nstep-nstep0,multt).le.1))then ++ ++ if(lhke)then ++ ++ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) ++ ++ else ++ ++ call ewald4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, ++ x drewd,rcut,epsq) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ engcpl=engcpl+engacl ++ vircpl=vircpl+viracl ++ ++ else ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i)+stresl(i)*ann ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ return ++ end subroutine multiple ++ ++ subroutine multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c multiple timestep option ++c ++c parallel replicated data version ++c ++c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory april 1994 ++c author - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c = 10,11 ----- reaction field : coul3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j ++ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe ++ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp ++ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension fail(nnn),stresp(9) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ if(newjob)then ++ ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) ++ ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) ++ endif ++ ++ endif ++ newjob=.false. ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1850) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c error if ewald sum requested ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c create list of primary and secondary neighbours ++ ++ if(newlst)nstep0=nstep ++ newplst=(mod(nstep-nstep0,multt).eq.0) ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++ endif ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress arrays ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c outer loop over neutral groups ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=-1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then ++ ++ call srfrceneu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ else ++ ++ call error(idnode,250) ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,479) ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresl(i)*ann+stresp(i) ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) ++ ++ return ++ end subroutine multiple_neu ++ ++ subroutine multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c to be used with all-pairs option ++c ++c flx,fly,flz : forces from electrostatics from r > rcut ++c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory 1993 ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c Ewald sum --- not used ++c = 4,5 ------ Distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c truncated and shifted coulombic -- not used ++c reaction field - not used ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr ++ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva ++ integer isolva,i,j ++ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut ++ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 ++ real(8) engsr2,virsr2,stresp,engacc,viracc ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data numlsts/-1/ ++ data newjob/.true./ ++ ++c allocate work arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1860) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++ if(lnsq)then ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) ++ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) ++ ++c set extended cutoff for electrostatics - secondary shell ++ ++ rcut1=rcut+delr ++ ++ if(newlst)nstep0=nstep ++ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) ++ ++c ********************PROCESS TERTIARY NEIGHBOURS********************* ++ ++ if(newplst)then ++ ++ call coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcp3,vircp3) ++ ++ endif ++ ++c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ if(newplst)then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcp2=0.d0 ++ vircp2=0.d0 ++ engsr2=0.d0 ++ virsr2=0.d0 ++ ++c zero secondary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ ii=0 ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic vectors ++ ++ ik=0 ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition only for interactions > rprim ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c short range forces for secondary shell ++ ++ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsr2=engsr2+engacc ++ virsr2=virsr2+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++c truncated shifted coulombic potential ++ ++ call error(idnode,424) ++ ++ endif ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ fpx(i)=fxx(i) ++ fpy(i)=fyy(i) ++ fpz(i)=fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stress(i) ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol(:) ++ cou_sol_put(:)=cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc(:) ++ cou_exc_put(:)=cou_exc(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero primary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate primary pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,424) ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary and tertiary neighbour contributions to ++c force, energy etc ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)+fpx(i)+flx(i) ++ fyy(i)=fyy(i)+fpy(i)+fly(i) ++ fzz(i)=fzz(i)+fpz(i)+flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i) ++ enddo ++ ++ engsrp=engsrp+engsr2 ++ virsrp=virsrp+virsr2 ++ ++ engcpe=engcpe+engcp2+engcp3 ++ vircpe=vircpe+vircp2+vircp3 ++ ++c calculate solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) ++ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) ++ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine multiple_nsq ++ ++ subroutine neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to create pair lists for neutral group ++c implementations. ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c ++c isn = -1 => secondary neighbours ++c isn = 1 => primary neighbours - must contain excld interactions ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,lexc ++ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 ++ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 ++ real(8) txx,tyy,tzz,uxx,uyy,uzz ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1830) ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c set cutoff radius ++ ++ ll=0 ++ ++c number of excludes found ++ ++ if(isn.lt.0)then ++ keyexc=nexatm(ia)+2 ++ else ++ keyexc=1 ++ endif ++ ++c do centre - centre distances ++ ++ lenia=lentry(ia) ++ ++ do j=1,lenia ++ ++ jneu=abs(list(ia,j)) ++ xxt(j)=uxx(ineu)-uxx(jneu) ++ yyt(j)=uyy(ineu)-uyy(jneu) ++ zzt(j)=uzz(ineu)-uzz(jneu) ++ ++ enddo ++ ++ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) ++ ++c working intragroup vectors of central group ++c - for periodic boundaries ++ ++ in0=neulst(ineu) ++ in1=neulst(ineu+1)-1 ++ ++c loop over neutral groups sites of a ++ ++ ++c loop over groups in list ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj)*isn ++ ++ if(jneu.gt.0)then ++ ++ do i=in0,in1 ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++ if(ineu.eq.jneu)jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++c reject atoms in excluded pair list ++ ++ lexc=.false. ++ ++ if(keyexc.lt.nexatm(ia))then ++ ++ if(lexatm(ia,keyexc).eq.i)then ++ if(lexatm(ia,keyexc+1).eq.j)then ++ lexc=.true. ++ keyexc=keyexc+2 ++ endif ++ endif ++ ++ endif ++ ++c reject frozen atom pairs ++ ++ if(lstfrz(i).ne.0)then ++ if(lstfrz(j).ne.0)lexc=.true. ++ endif ++ ++ if(.not.lexc)then ++ ++ ll=ll+1 ++ if(ll.le.mxxdf)then ++ ++ xdf(ll)=txx(i)+xxt(jj)-txx(j) ++ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) ++ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) ++ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 ++ ilist(ll)=i ++ jlist(ll)=j ++ ++ else ++ ++ lchk=.false. ++ ibig=max(ibig,ll) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine neutlst ++ ++ end module forces_module ++ +diff -urN dl_class_1.9.orig/srcmod/forces_module.f.preplumed dl_class_1.9/srcmod/forces_module.f.preplumed +--- dl_class_1.9.orig/srcmod/forces_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/forces_module.f.preplumed 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,2952 @@ ++ module forces_module ++ ++c*********************************************************************** ++c ++c dl_poly module for calculation of atomic forces ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d. quigley : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use coulomb_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use metafreeze_module ++ use metal_module ++ use neu_coul_module ++ use nlist_builders_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ use spme_module ++ use tersoff_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ contains ++ ++ subroutine force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to manage the calculation of the atomic forces ++c from all force field terms. ++c ++c copyright - daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva ++ logical lfree,lghost,llsolva ++ ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet ++ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva ++ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld ++ ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih ++ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld ++ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord ++ ++ llsolva=.false. ++ ++c initialize energy and virial accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ engang=0.d0 ++ virang=0.d0 ++ engdih=0.d0 ++ virdih=0.d0 ++ enginv=0.d0 ++ virinv=0.d0 ++ engtbp=0.d0 ++ virtbp=0.d0 ++ engter=0.d0 ++ virter=0.d0 ++ engfbp=0.d0 ++ virfbp=0.d0 ++ engsrp=0.d0 ++ virsrp=0.d0 ++ engcpe=0.d0 ++ vircpe=0.d0 ++ engfld=0.d0 ++ virfld=0.d0 ++ engshl=0.d0 ++ virshl=0.d0 ++ shlke =0.d0 ++ engtet=0.d0 ++ virtet=0.d0 ++ engmet=0.d0 ++ virmet=0.d0 ++ virord=0.0d0 ++ engord=0.0d0 ++ ++ if(lmetadyn)then ++ ++ eng_loc=0.0d0 ++ vir_loc=0.0d0 ++ fxx_loc(:)=0.0d0 ++ fyy_loc(:)=0.0d0 ++ fzz_loc(:)=0.0d0 ++ stress_loc(:)=0.0d0 ++ ++ endif ++ ++c initialise free energy accumulators ++ ++ if(lfree)then ++ ++ ang_fre=0.d0 ++ bnd_fre=0.d0 ++ dih_fre=0.d0 ++ inv_fre=0.d0 ++ tbp_fre=0.d0 ++ fbp_fre=0.d0 ++ cou_fre=0.d0 ++ vdw_fre=0.d0 ++ shl_fre=0.d0 ++ ang_vir=0.d0 ++ bnd_vir=0.d0 ++ dih_vir=0.d0 ++ inv_vir=0.d0 ++ tbp_vir=0.d0 ++ fbp_vir=0.d0 ++ cou_vir=0.d0 ++ vdw_vir=0.d0 ++ shl_vir=0.d0 ++ eng_cfg_fre=0.d0 ++ vir_cfg_fre=0.d0 ++ ++ endif ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ if(keyfce/2.gt.0)lcomp(6)=.true. ++ if(mod(keyfce,2).eq.1)lcomp(7)=.true. ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ llsolva=.true. ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c initialise the force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ if(nstep.gt.0)then ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ endif ++ ++ if(keyfce.gt.0)then ++ ++c calculate pair forces, including coulombic forces ++ ++ if(lnsq)then ++ ++c multiple timestep - all-pairs ++ ++ call multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++ elseif(.not.lneut)then ++ ++c single timestep ++ ++ if(multt.eq.1)then ++ ++ call forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, ++ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, ++ x vircpe,virsrp,volm,engmet,virmet) ++ ++ else ++ ++ call multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++ ++ endif ++ ++ elseif(lneut)then ++ ++c neutral groups ++ ++ if(multt.eq.1)then ++ ++ call forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++ else ++ ++ call multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add in long range corrections to energy and pressure ++ ++ engsrp=engsrp+elrc ++ virsrp=virsrp+virlrc ++ engmet=engmet+elrcm(0) ++ virmet=virmet+vlrcm(0) ++ if(lfree)then ++ vdw_fre=vdw_fre+elrc_fre ++ vdw_vir=vdw_vir+vlrc_fre ++ endif ++ ++c calculate three body forces ++ ++ if(ntptbp.gt.0)call thbfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c calculate four body forces ++ ++ if(ntpfbp.gt.0)call fbpfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c calculate tersoff potential forces ++ ++ if(ntpter.gt.0)call tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c calculate bond forces ++ ++ if(ntbond.gt.0)call bndfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c calculate valence angle forces ++ ++ if(ntangl.gt.0)call angfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c calculate dihedral forces ++ ++ if(ntdihd.gt.0)call dihfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, ++ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) ++ ++c calculate inversion forces ++ ++ if(ntinv.gt.0)call invfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c calculate tethered atom forces ++ ++ if(ntteth.gt.0)call tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c calculate shell model forces ++ ++ if(keyshl.gt.0)call shlfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c external field ++ ++ if(keyfld.gt.0)call extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c metadynamics option : use potential energy as order parameter ++ ++ if(lmetadyn)then ++ ++ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ ++ x engtbp+engfbp+engshl+enginv+engter+engmet ++ ++ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet ++ ++ call metafreeze_driver ++ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) ++ ++ endif ++ ++c global summation of force arrays (basic replicated data strategy) ++ ++ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) ++ ++c global sum of stress arrays ++ ++ if(mxnode.gt.1)call gdsum(stress,9,buffer) ++ ++c add long range correction to diagonal terms of stress tensor ++ ++ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 ++ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 ++ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 ++ ++c cap forces in equilibration mode ++ ++ if(nstep.le.nsteql.and.lfcap) ++ x call fcap(lfcap,natms,fmax,temp) ++ ++c total configuration energy ++ ++ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ ++ x engfbp+engshl+enginv+engter+engmet ++ ++c total derivative of the configurational free energy ++ ++ if(lfree)then ++ ++ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ ++ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) ++ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ ++ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) ++ ++ endif ++ ++c sum solvation and excitation energies for pair forces ++ ++ if(mxnode.gt.1)then ++ ++ if(llsolva)then ++ ++ call gdsum(vdw_sol,mxtmls_sol2,buffer) ++ call gdsum(cou_sol,mxtmls_sol2,buffer) ++ ++ if(lghost)then ++ ++ call gdsum(vdw_exc,mxtmls_exc2,buffer) ++ call gdsum(cou_exc,mxtmls_exc2,buffer) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add long range corrections to solvation terms ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) ++ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) ++ ++ endif ++ ++ return ++ end subroutine force_manager ++ ++ subroutine forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, ++ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, ++ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, ++ x virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c amended - t. forester sept 1994 ++c amended - w. smith june 1995 for metal potentials ++c ++c key: ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe ++ logical lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt ++ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf ++ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii ++ ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps ++ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lhke)then ++ ++ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++ else if(lewald.or.lspme.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c initialise force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c calculate local density in metals ++ ++ if(ntpmet.gt.0)then ++ ++ call metdens ++ x (idnode,imcon,mxnode,natms,engmet,virmet) ++ ++ stress(1)=stress(1)-virmet/3.d0 ++ stress(5)=stress(5)-virmet/3.d0 ++ stress(9)=stress(9)-virmet/3.d0 ++ ++ endif ++ ++c fourier contribution to coulombic forces in Ewald sum ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c hautman-klein-ewald method ++ ++ if(lhke)then ++ ++c fourier terms of hk-ewald ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engacc,viracc,alpha,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, ++ x drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c smoothed particle mesh ewald ++ ++ if(lspme)then ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c calculate metal forces and potential ++ ++ if(ntpmet.gt.0)then ++ ++ call metfrc(safe,i,lentry(ii),engacc,viracc) ++ ++ engmet=engmet+engacc ++ virmet=virmet+viracc ++ ++ endif ++ ++c calculate short range force and potential terms ++ ++ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, ++ x rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, ++ x viracc,drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0(i,lentry(ii),rcut) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check metal interpolation is safe ++ ++ if(ntpmet.gt.0)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ endif ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ eps=epsq ++ if(loglnk)eps=eps*2.0d0 ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ enddo ++ ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ numrdf=numrdf+1 ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=engmet ++ buffer(6)=virmet ++ buffer(7)=vdw_fre ++ buffer(8)=cou_fre ++ buffer(9)=vdw_vir ++ buffer(10)=cou_vir ++ call gdsum(buffer(1),10,buffer(11)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ engmet=buffer(5) ++ virmet=buffer(6) ++ vdw_fre=buffer(7) ++ cou_fre=buffer(8) ++ vdw_vir=buffer(9) ++ cou_vir=buffer(10) ++ ++ endif ++ ++ return ++ end subroutine forces ++ ++ subroutine forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c modified - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j ++ integer ibig,ia,ineu,isn,ik,nsolva,isolva ++ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe ++ real(8) virsrp,engacc,viracc,anorm,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension fail(2) ++ ++ data fail/0,0/ ++ ++c allocate working arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ do i=1,2 ++ if(fail(i).ne.0)call error(idnode,1820) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c initialise force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c initialise energy and virial accumulators ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c outer loop over neutral groups ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ newlst=.true. ++ ++ isn=1 ++ call neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0neu(ik,rcut) ++ ++ endif ++ ++ enddo ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,478) ++ endif ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c counter for rdf statistics outside loop structure ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ ++ return ++ end subroutine forces_neu ++ ++ subroutine multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++c*************************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c reciprocal space calculated on long time steps. ++c ++c copyright daresbury laboratory ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3,4 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ ++ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme ++ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt ++ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail ++ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 ++ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 ++ real(8) vircp1,engacl,engac2,virsr1 ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ if(newlst)nstep0=nstep ++ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) ++ ++c allocate working arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1840) ++ enddo ++ ++ endif ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lspme.or.lewald.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c zero force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS****************** ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ llsolva=lsolva ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate fourier contribution to secondary coulombic forces ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++c hautman-klein-ewald method ++ ++ elseif(lhke)then ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engac1,viracc,alpha,epsq) ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, ++ x virac2,drewd,rcut,epsq) ++ ++ engac1=engac1+engac2 ++ viracc=viracc+virac2 ++ ++ elseif(lspme)then ++ ++c smoothed particle mesh ewald ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ endif ++ ++ engcpl=engcpl+engac1 ++ vircpl=vircpl+viracc ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++c note: if using link cells - have double counted excluded ++c interactions use temporary adjustment to relative dielectric ++c constant ++ ++ eps=epsq ++ if(loglnk)eps=epsq*2.0d0 ++ ++c calculate self interaction corrections for fourier contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ enddo ++ ++ endif ++ ++c calculate pair contributions to secondary neighbour forces ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c calculate pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(newplst.or. ++ x (mod(nstep-nstep0,multt).le.1))then ++ ++ if(lhke)then ++ ++ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) ++ ++ else ++ ++ call ewald4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, ++ x drewd,rcut,epsq) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ engcpl=engcpl+engacl ++ vircpl=vircpl+viracl ++ ++ else ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i)+stresl(i)*ann ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ return ++ end subroutine multiple ++ ++ subroutine multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c multiple timestep option ++c ++c parallel replicated data version ++c ++c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory april 1994 ++c author - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c = 10,11 ----- reaction field : coul3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j ++ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe ++ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp ++ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension fail(nnn),stresp(9) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ if(newjob)then ++ ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) ++ ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) ++ endif ++ ++ endif ++ newjob=.false. ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1850) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c error if ewald sum requested ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c create list of primary and secondary neighbours ++ ++ if(newlst)nstep0=nstep ++ newplst=(mod(nstep-nstep0,multt).eq.0) ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++ endif ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress arrays ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c outer loop over neutral groups ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=-1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then ++ ++ call srfrceneu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ else ++ ++ call error(idnode,250) ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,479) ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresl(i)*ann+stresp(i) ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) ++ ++ return ++ end subroutine multiple_neu ++ ++ subroutine multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c to be used with all-pairs option ++c ++c flx,fly,flz : forces from electrostatics from r > rcut ++c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory 1993 ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c Ewald sum --- not used ++c = 4,5 ------ Distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c truncated and shifted coulombic -- not used ++c reaction field - not used ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr ++ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva ++ integer isolva,i,j ++ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut ++ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 ++ real(8) engsr2,virsr2,stresp,engacc,viracc ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data numlsts/-1/ ++ data newjob/.true./ ++ ++c allocate work arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1860) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++ if(lnsq)then ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) ++ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) ++ ++c set extended cutoff for electrostatics - secondary shell ++ ++ rcut1=rcut+delr ++ ++ if(newlst)nstep0=nstep ++ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) ++ ++c ********************PROCESS TERTIARY NEIGHBOURS********************* ++ ++ if(newplst)then ++ ++ call coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcp3,vircp3) ++ ++ endif ++ ++c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ if(newplst)then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcp2=0.d0 ++ vircp2=0.d0 ++ engsr2=0.d0 ++ virsr2=0.d0 ++ ++c zero secondary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ ii=0 ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic vectors ++ ++ ik=0 ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition only for interactions > rprim ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c short range forces for secondary shell ++ ++ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsr2=engsr2+engacc ++ virsr2=virsr2+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++c truncated shifted coulombic potential ++ ++ call error(idnode,424) ++ ++ endif ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ fpx(i)=fxx(i) ++ fpy(i)=fyy(i) ++ fpz(i)=fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stress(i) ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol(:) ++ cou_sol_put(:)=cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc(:) ++ cou_exc_put(:)=cou_exc(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero primary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate primary pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,424) ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary and tertiary neighbour contributions to ++c force, energy etc ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)+fpx(i)+flx(i) ++ fyy(i)=fyy(i)+fpy(i)+fly(i) ++ fzz(i)=fzz(i)+fpz(i)+flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i) ++ enddo ++ ++ engsrp=engsrp+engsr2 ++ virsrp=virsrp+virsr2 ++ ++ engcpe=engcpe+engcp2+engcp3 ++ vircpe=vircpe+vircp2+vircp3 ++ ++c calculate solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) ++ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) ++ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine multiple_nsq ++ ++ subroutine neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to create pair lists for neutral group ++c implementations. ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c ++c isn = -1 => secondary neighbours ++c isn = 1 => primary neighbours - must contain excld interactions ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,lexc ++ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 ++ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 ++ real(8) txx,tyy,tzz,uxx,uyy,uzz ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1830) ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c set cutoff radius ++ ++ ll=0 ++ ++c number of excludes found ++ ++ if(isn.lt.0)then ++ keyexc=nexatm(ia)+2 ++ else ++ keyexc=1 ++ endif ++ ++c do centre - centre distances ++ ++ lenia=lentry(ia) ++ ++ do j=1,lenia ++ ++ jneu=abs(list(ia,j)) ++ xxt(j)=uxx(ineu)-uxx(jneu) ++ yyt(j)=uyy(ineu)-uyy(jneu) ++ zzt(j)=uzz(ineu)-uzz(jneu) ++ ++ enddo ++ ++ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) ++ ++c working intragroup vectors of central group ++c - for periodic boundaries ++ ++ in0=neulst(ineu) ++ in1=neulst(ineu+1)-1 ++ ++c loop over neutral groups sites of a ++ ++ ++c loop over groups in list ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj)*isn ++ ++ if(jneu.gt.0)then ++ ++ do i=in0,in1 ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++ if(ineu.eq.jneu)jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++c reject atoms in excluded pair list ++ ++ lexc=.false. ++ ++ if(keyexc.lt.nexatm(ia))then ++ ++ if(lexatm(ia,keyexc).eq.i)then ++ if(lexatm(ia,keyexc+1).eq.j)then ++ lexc=.true. ++ keyexc=keyexc+2 ++ endif ++ endif ++ ++ endif ++ ++c reject frozen atom pairs ++ ++ if(lstfrz(i).ne.0)then ++ if(lstfrz(j).ne.0)lexc=.true. ++ endif ++ ++ if(.not.lexc)then ++ ++ ll=ll+1 ++ if(ll.le.mxxdf)then ++ ++ xdf(ll)=txx(i)+xxt(jj)-txx(j) ++ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) ++ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) ++ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 ++ ilist(ll)=i ++ jlist(ll)=j ++ ++ else ++ ++ lchk=.false. ++ ibig=max(ibig,ll) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine neutlst ++ ++ end module forces_module ++ +diff -urN dl_class_1.9.orig/srcmod/four_body_module.f dl_class_1.9/srcmod/four_body_module.f +--- dl_class_1.9.orig/srcmod/four_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/four_body_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,979 @@ ++ module four_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining four-body potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - w. smith aug 2008 : solvation, free energy, excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ real(8), allocatable :: prmfbp(:,:),rcut4b(:) ++ integer, allocatable :: lstfbp(:),ltpfbp(:),latfbp(:) ++ ++ save prmfbp,rcut4b,lstfbp,ltpfbp,latfbp,filter ++ ++ contains ++ ++ subroutine alloc_fbp_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(6) ++ ++ do i=1,6 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmfbp(mxfbp,mxpfbp),stat=fail(1)) ++ allocate (rcut4b(mxfbp),stat=fail(2)) ++ allocate (lstfbp(mxfbp),stat=fail(3)) ++ allocate (ltpfbp(mxfbp),stat=fail(4)) ++ allocate (latfbp(mxatms),stat=fail(5)) ++ allocate (filter(mxsite),stat=fail(6)) ++ ++ do i=1,6 ++ if(fail(i).gt.0)call error(idnode,1140) ++ enddo ++ ++ end subroutine alloc_fbp_arrays ++ ++ subroutine define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining four body potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1,atom2,atom3 ++ character*1 message(80) ++ integer idnode,ntpfbp,ntpatm,ifbp,itpfbp,keypot,katm0 ++ integer i,katm1,katm2,katm3,jtpatm,ka1,ka2,ka3,keyfbp,kfbp ++ integer j,fail,idum ++ real(8) rcutfb,engunit ++ real(8), allocatable :: parpot(:) ++ ++ data fail/0/ ++ ++ allocate (parpot(mxpfbp),stat=fail) ++ if(fail.ne.0)call error(idnode,1150) ++ ++ ntpfbp=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified four ', ++ x 'body potentials',i10)") ntpfbp ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', ++ x 'atom 4 ',3x,' key',30x,'parameters'/,/)") ++ ++ endif ++ if(ntpfbp.gt.mxfbp) call error(idnode,89) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ do ifbp=1,mxfbp ++ lstfbp(ifbp)=0 ++ enddo ++ ++ do ifbp=1,mxfbp,mx3fbp ++ lstfbp(ifbp)=-1 ++ enddo ++ ++ rcutfb=0.d0 ++ ++ do itpfbp=1,ntpfbp ++ ++ do i=1,mxpfbp ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++c Note the order!! atom0 is the central atom ++ ++ call copystring(record,message,80) ++ call getword(atom0,record,8,lenrec) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call getword(atom3,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'harm') then ++ keypot=1 ++ elseif(keyword(1:4).eq.'hcos') then ++ keypot=2 ++ elseif(keyword(1:4).eq.'plan') then ++ keypot=3 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,443) ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,4a8,4x,a4,1x,1p,9e13.5)") ++ x atom0,atom1,atom2,atom3,keyword(1:4),(parpot(j),j=1,mxpfbp) ++ ++ katm0=0 ++ katm1=0 ++ katm2=0 ++ katm3=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ if(atom3.eq.unqatm(jtpatm))katm3=jtpatm ++ ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0.or. ++ x katm3.eq.0) call error(idnode,91) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ filter(katm2)=.true. ++ filter(katm3)=.true. ++ ++ ka1=max(katm1,katm2,katm3) ++ ka3=min(katm1,katm2,katm3) ++ ka2=katm1+katm2+katm3-ka1-ka3 ++ keyfbp=ka3+(ka2*(ka2-1))/2+(ka1*(ka1**2-1))/6+ ++ x (katm0-1)*mx3fbp ++ ++ if(keyfbp.gt.mxfbp) call error(idnode,101) ++ ++c convert parameters to internal units ++ ++ parpot(1)=parpot(1)*engunit ++ parpot(2)=parpot(2)*(pi/180.d0) ++ ++ if(keypot.eq.2)then ++ ++ parpot(2)=cos(parpot(2)) ++ ++ endif ++ ++ if(lstfbp(keyfbp).gt.0) call error(idnode,19) ++ lstfbp(keyfbp)=itpfbp ++ ltpfbp(itpfbp)=keypot ++ kfbp=mx3fbp*((keyfbp-1)/mx3fbp)+1 ++ if(lstfbp(kfbp).lt.0)lstfbp(kfbp)=0 ++ ++c calculate max four body cutoff ++ ++ rcutfb=max(rcutfb,parpot(3)) ++ rcut4b(itpfbp)=parpot(3) ++ ++c store four body potential parameters ++ ++ do i=1,mxpfbp ++ prmfbp(itpfbp,i)=parpot(i) ++ enddo ++ ++ enddo ++ ++ if(rcutfb.lt.1.d-6)call error(idnode,453) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_four_body ++ ++ subroutine fbpfrc ++ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating four body inversion forces ++c arising from the inversion angle between three atoms around a ++c nominated central atom ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped cell geometry ++c ++c copyright - daresbury laboratory 1996 ++c author - w.smith july 1996 ++c adapted - w.smith aug 2008 solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lskip ++ logical idrive,jdrive,kdrive,ldrive ++ integer idnode,mxnode,natms,imcon,nix,niy,niz ++ integer i,j,k,nbx,nby,nbz,ncells,ix,iy,iz,icell,jx,jy ++ integer jz,jj,kk,ia,ib,ifbp,jfbp,kfbp,jklbd,kkfbp,ktyp,ii ++ integer ic,ll,id,lfbp,l,limit,jcell,kkk ++ real(8) rcutfb,engfbp,virfbp,vbn,vcn,pterm,xm,ym,zm ++ real(8) strs,cprp,det,xdc,ydc,zdc,sxx,syy,szz,sxab,strs_loc ++ real(8) syab,szab,xab,yab,zab,rab2,sxac,syac,szac,xac,yac ++ real(8) zac,rac2,sxad,syad,szad,xad,yad,zad,rad2,rrab,rrac ++ real(8) rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx,vby,vbz ++ real(8) rvb,wwb,ucx,ucy,ucz,ucn,ruc,vcx,vcy,vcz,rvc,wwc ++ real(8) udx,udy,udz,udn,rud,vdx,vdy,vdz,vdn,rvd,wwd,cosb ++ real(8) cosc,cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd ++ real(8) rucd,rucb,rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc ++ real(8) fax,fay,faz,fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz ++ dimension cprp(10),strs(6),nix(27),niy(27),niz(27),strs_loc(6) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++ lskip=(lfree.or.lexcite) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ engfbp=0.d0 ++ virfbp=0.d0 ++ fbp_fre=0.d0 ++ fbp_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(9)=.true. ++ en4_sol(:)=0.d0 ++ if(lexcite)en4_exc(:)=0.d0 ++ ++ endif ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ do i=1,natms ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ enddo ++ ++ cell(1)=2.d0*xm+rcutfb ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rcutfb ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rcutfb ++ ++ endif ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,79) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rcutfb+1.d-6)) ++ nby=int(cprp(8)/(rcutfb+1.d-6)) ++ nbz=int(cprp(9)/(rcutfb+1.d-6)) ++ ncells=nbx*nby*nbz ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) write(nrite,'(a,i6)') ++ x 'number of required link cells in routine fbpfrc is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in routine fbpfrc is ',mxcell ++ call error(idnode,87) ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of inversion ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ latfbp(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ ia=latfbp(ii) ++ if(lmetadyn)idrive=driven(ltype(ia)) ++ ifbp=mx3fbp*(ltype(ia)-1) ++ if(mod(ia,mxnode).eq.idnode.and.lstfbp(ifbp+1).ge.0)then ++ ++ do jj=1,limit-2 ++ ++ ib=latfbp(jj) ++ if(lmetadyn)jdrive=driven(ltype(ib)) ++ ++ do kk=jj+1,limit-1 ++ ++ ic=latfbp(kk) ++ if(lmetadyn)kdrive=driven(ltype(ic)) ++ ++ do ll=kk+1,limit ++ ++ id=latfbp(ll) ++ if(lmetadyn)ldrive=driven(ltype(id)) ++ ++ if(lskip)then ++ ++ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. ++ x atm_fre(ic).eq.1.or.atm_fre(id).eq.1).and. ++ x (atm_fre(ia).eq.2.or.atm_fre(ib).eq.2.or. ++ x atm_fre(ic).eq.2.or.atm_fre(id).eq.2))cycle ++ ++ endif ++ ++ jfbp=max(ltype(ib),ltype(ic),ltype(id)) ++ lfbp=min(ltype(ib),ltype(ic),ltype(id)) ++ kfbp=ltype(ib)+ltype(ic)+ltype(id)-jfbp-lfbp ++ jklbd=ifbp+lfbp+(kfbp*(kfbp-1))/2+(jfbp*(jfbp**2-1))/6 ++ kkfbp=lstfbp(jklbd) ++ if(kkfbp.gt.0)then ++ ++ sxab=xxx(ib)-xxx(ia) ++ sxab=sxab-nint(sxab) ++ syab=yyy(ib)-yyy(ia) ++ syab=syab-nint(syab) ++ szab=zzz(ib)-zzz(ia) ++ szab=szab-nint(szab) ++ ++ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab ++ if(abs(xab).lt.rcutfb)then ++ ++ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab ++ if(abs(yab).lt.rcutfb)then ++ ++ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab ++ if(abs(zab).lt.rcutfb)then ++ ++ rab2=xab*xab+yab*yab+zab*zab ++ ++ sxac=xxx(ic)-xxx(ia) ++ sxac=sxac-nint(sxac) ++ syac=yyy(ic)-yyy(ia) ++ syac=syac-nint(syac) ++ szac=zzz(ic)-zzz(ia) ++ szac=szac-nint(szac) ++ ++ xac=cell(1)*sxac+cell(4)*syac+cell(7)*szac ++ if(abs(xac).lt.rcutfb)then ++ ++ yac=cell(2)*sxac+cell(5)*syac+cell(8)*szac ++ if(abs(yac).lt.rcutfb)then ++ ++ zac=cell(3)*sxac+cell(6)*syac+cell(9)*szac ++ if(abs(zac).lt.rcutfb)then ++ ++ rac2=xac*xac+yac*yac+zac*zac ++ ++ sxad=xxx(id)-xxx(ia) ++ sxad=sxad-nint(sxad) ++ syad=yyy(id)-yyy(ia) ++ syad=syad-nint(syad) ++ szad=zzz(id)-zzz(ia) ++ szad=szad-nint(szad) ++ ++ xad=cell(1)*sxad+cell(4)*syad+cell(7)*szad ++ if(abs(xad).lt.rcutfb)then ++ ++ yad=cell(2)*sxad+cell(5)*syad+cell(8)*szad ++ if(abs(yad).lt.rcutfb)then ++ ++ zad=cell(3)*sxad+cell(6)*syad+cell(9)*szad ++ if(abs(zad).lt.rcutfb)then ++ ++ rad2=xad*xad+yad*yad+zad*zad ++ ++ if(rcut4b(kkfbp)**2.ge.max(rab2,rac2,rad2))then ++ ++ rrab=1.d0/sqrt(rab2) ++ rrac=1.d0/sqrt(rac2) ++ rrad=1.d0/sqrt(rad2) ++ ++ rbc=xab*xac+yab*yac+zab*zac ++ rcd=xac*xad+yac*yad+zac*zad ++ rdb=xad*xab+yad*yab+zad*zab ++ ++c calculate bond-angle-plane vectors ++ ++ ubx=xac*rrac+xad*rrad ++ uby=yac*rrac+yad*rrad ++ ubz=zac*rrac+zad*rrad ++ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) ++ ubx=ubn*ubx ++ uby=ubn*uby ++ ubz=ubn*ubz ++ rub=xab*ubx+yab*uby+zab*ubz ++ ++ vbx=xac*rrac-xad*rrad ++ vby=yac*rrac-yad*rrad ++ vbz=zac*rrac-zad*rrad ++ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) ++ vbx=vbn*vbx ++ vby=vbn*vby ++ vbz=vbn*vbz ++ rvb=xab*vbx+yab*vby+zab*vbz ++ wwb=sqrt(rub**2+rvb**2) ++ ++ ucx=xad*rrad+xab*rrab ++ ucy=yad*rrad+yab*rrab ++ ucz=zad*rrad+zab*rrab ++ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) ++ ucx=ucn*ucx ++ ucy=ucn*ucy ++ ucz=ucn*ucz ++ ruc=xac*ucx+yac*ucy+zac*ucz ++ ++ vcx=xad*rrad-xab*rrab ++ vcy=yad*rrad-yab*rrab ++ vcz=zad*rrad-zab*rrab ++ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) ++ vcx=vcn*vcx ++ vcy=vcn*vcy ++ vcz=vcn*vcz ++ rvc=xac*vcx+yac*vcy+zac*vcz ++ wwc=sqrt(ruc**2+rvc**2) ++ ++ udx=xab*rrab+xac*rrac ++ udy=yab*rrab+yac*rrac ++ udz=zab*rrab+zac*rrac ++ udn=1.d0/sqrt(udx**2+udy**2+udz**2) ++ udx=udn*udx ++ udy=udn*udy ++ udz=udn*udz ++ rud=xad*udx+yad*udy+zad*udz ++ ++ vdx=xab*rrab-xac*rrac ++ vdy=yab*rrab-yac*rrac ++ vdz=zab*rrab-zac*rrac ++ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) ++ vdx=vdn*vdx ++ vdy=vdn*vdy ++ vdz=vdn*vdz ++ rvd=xad*vdx+yad*vdy+zad*vdz ++ wwd=sqrt(rud**2+rvd**2) ++ ++c calculate inversion angle cosines ++ ++ cosb=wwb*rrab ++ cosc=wwc*rrac ++ cosd=wwd*rrad ++ if(abs(cosb).gt.1.d0)cosb=sign(1.d0,cosb) ++ if(abs(cosc).gt.1.d0)cosc=sign(1.d0,cosc) ++ if(abs(cosd).gt.1.d0)cosd=sign(1.d0,cosd) ++ ++c select potential energy function type ++ ++ ktyp=ltpfbp(kkfbp) ++ ++c calculate potential energy and scalar force term ++ ++ if(ktyp.eq.1)then ++ ++c key=1 for harmonic potential ++ ++ thb=acos(cosb) ++ thc=acos(cosc) ++ thd=acos(cosd) ++ ++ pterm=0.5d0*prmfbp(kkfbp,1)* ++ x ((thb-prmfbp(kkfbp,2))**2+ ++ x (thc-prmfbp(kkfbp,2))**2+ ++ x (thd-prmfbp(kkfbp,2))**2)/3.d0 ++ ++ gamb=0.d0 ++ if(abs(thb).gt.1.d-12)gamb=prmfbp(kkfbp,1)* ++ x (thb-prmfbp(kkfbp,2))/(3.d0*sin(thb)) ++ gamc=0.d0 ++ if(abs(thc).gt.1.d-12)gamc=prmfbp(kkfbp,1)* ++ x (thc-prmfbp(kkfbp,2))/(3.d0*sin(thc)) ++ gamd=0.d0 ++ if(abs(thd).gt.1.d-12)gamd=prmfbp(kkfbp,1)* ++ x (thd-prmfbp(kkfbp,2))/(3.d0*sin(thd)) ++ ++ else if(ktyp.eq.2)then ++ ++c key=2 for harmonic cosine inversion potential ++ ++ pterm=0.5d0*prmfbp(kkfbp,1)* ++ x ((cosb-prmfbp(kkfbp,2))**2+ ++ x (cosc-prmfbp(kkfbp,2))**2+ ++ x (cosd-prmfbp(kkfbp,2))**2)/3.d0 ++ ++ gamb=-prmfbp(kkfbp,1)*(cosb-prmfbp(kkfbp,2))/3.d0 ++ gamc=-prmfbp(kkfbp,1)*(cosc-prmfbp(kkfbp,2))/3.d0 ++ gamd=-prmfbp(kkfbp,1)*(cosd-prmfbp(kkfbp,2))/3.d0 ++ ++ else if(ktyp.eq.3)then ++ ++c key=3 for planar inversion potentials ++ ++ pterm=prmfbp(kkfbp,1)* ++ x (3.d0-cosb-cosc-cosd)/3.d0 ++ ++ gamb=-prmfbp(kkfbp,1)/3.d0 ++ gamc=-prmfbp(kkfbp,1)/3.d0 ++ gamd=-prmfbp(kkfbp,1)/3.d0 ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ pterm=0.d0 ++ gamb=0.d0 ++ gamc=0.d0 ++ gamd=0.d0 ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set quadruple index ++ ++ if(lsolva) ++ x kkk=loc4(atmolt(ia),atmolt(ib),atmolt(ic),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)en4_exc(kkk)=en4_exc(kkk)+pterm ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ fbp_fre=fbp_fre-pterm ++ pterm=lambda1*pterm ++ gamb=lambda1*gamb ++ gamc=lambda1*gamc ++ gamd=lambda1*gamd ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ fbp_fre=fbp_fre+pterm ++ pterm=lambda2*pterm ++ gamb=lambda2*gamb ++ gamc=lambda2*gamc ++ gamd=lambda2*gamd ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential ++ ++ engfbp=engfbp+pterm ++ ++ if(lsolva)en4_sol(kkk)=en4_sol(kkk)+pterm ++ ++c calculate bond and u,v scalar products ++ ++ rubc=xab*ucx+yab*ucy+zab*ucz ++ rubd=xab*udx+yab*udy+zab*udz ++ rucd=xac*udx+yac*udy+zac*udz ++ rucb=xac*ubx+yac*uby+zac*ubz ++ rudb=xad*ubx+yad*uby+zad*ubz ++ rudc=xad*ucx+yad*ucy+zad*ucz ++ ++ rvbc=xab*vcx+yab*vcy+zab*vcz ++ rvbd=xab*vdx+yab*vdy+zab*vdz ++ rvcd=xac*vdx+yac*vdy+zac*vdz ++ rvcb=xac*vbx+yac*vby+zac*vbz ++ rvdb=xad*vbx+yad*vby+zad*vbz ++ rvdc=xad*vcx+yad*vcy+zad*vcz ++ ++c calculate atomic forces ++ ++ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) ++ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) ++ x - rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) ++ x + rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) ++ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) ++ x - rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) ++ x + rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) ++ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) ++ x - rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) ++ x + rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) ++ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) ++ x - rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) ++ x + rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) ++ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) ++ x - rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) ++ x + rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) ++ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) ++ x - rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) ++ x + rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) ++ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) ++ x - rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) ++ x + rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) ++ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) ++ x - rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) ++ x + rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) ++ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) ++ x - rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) ++ x + rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fax=-(fbx+fcx+fdx) ++ fay=-(fby+fcy+fdy) ++ faz=-(fbz+fcz+fdz) ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)+fbx ++ fyy(ib)=fyy(ib)+fby ++ fzz(ib)=fzz(ib)+fbz ++ ++ fxx(ic)=fxx(ic)+fcx ++ fyy(ic)=fyy(ic)+fcy ++ fzz(ic)=fzz(ic)+fcz ++ ++ fxx(id)=fxx(id)+fdx ++ fyy(id)=fyy(id)+fdy ++ fzz(id)=fzz(id)+fdz ++ ++c stress tensor calculation for inversion terms ++ ++ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx ++ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx ++ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx ++ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy ++ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz ++ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy (no virial) ++ ++ eng_loc=eng_loc+pterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)+fbx ++ fyy_loc(ib)=fyy_loc(ib)+fby ++ fzz_loc(ib)=fzz_loc(ib)+fbz ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx ++ fyy_loc(ic)=fyy_loc(ic)+fcy ++ fzz_loc(ic)=fzz_loc(ic)+fcz ++ ++ fxx_loc(id)=fxx_loc(id)+fdx ++ fyy_loc(id)=fyy_loc(id)+fdy ++ fzz_loc(id)=fzz_loc(id)+fdz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx ++ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx ++ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx ++ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy ++ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz ++ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ ++ enddo ++ enddo ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,443) ++ ++c global sum of four body potential and virial ++ ++ buffer(1)=engfbp ++ buffer(2)=virfbp ++ buffer(3)=fbp_fre ++ buffer(4)=fbp_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engfbp=buffer(1) ++ virfbp=buffer(2) ++ fbp_fre=buffer(3) ++ fbp_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(en4_sol,mxtmls_sol4,buffer(1)) ++ if(lexcite)call gdsum(en4_exc,mxtmls_exc4,buffer(1)) ++ ++ endif ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine fbpfrc ++ ++ end module four_body_module +diff -urN dl_class_1.9.orig/srcmod/hkewald_module.f dl_class_1.9/srcmod/hkewald_module.f +--- dl_class_1.9.orig/srcmod/hkewald_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/hkewald_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1292 @@ ++ module hkewald_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining hautman-klein ewald sum arrays ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use exclude_module ++ use error_module ++ use pair_module ++ use property_module ++ use setup_module ++ ++ implicit none ++ ++ real(8), allocatable :: ahk(:),crn(:,:) ++ real(8), allocatable :: elc(:,:),els(:,:) ++ real(8), allocatable :: emc(:,:),ems(:,:) ++ real(8), allocatable :: zzn(:),zzd(:) ++ real(8), allocatable :: hon(:,:),znp(:,:) ++ real(8), allocatable :: dhn(:,:),zgs(:) ++ real(8), allocatable :: fon(:,:),zgc(:) ++ real(8), allocatable :: ckc(:),cks(:) ++ real(8), allocatable :: pp(:),sss(:) ++ ++ save ahk,crn,elc,els,emc,ems,zzn,zzd,hon,znp,dhn,zgs ++ save fon,zgc,ckc,cks,pp,sss ++ ++ contains ++ ++ subroutine alloc_hke_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=9 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (ahk(0:mxhko),crn(0:mxhko,0:mxhko),stat=fail(1)) ++ allocate (elc(mxewld,0:1),els(mxewld,0:1),stat=fail(2)) ++ allocate (emc(mxewld,0:kmaxb),ems(mxewld,0:kmaxb),stat=fail(3)) ++ allocate (zzn(mxxdf),zzd(mxxdf),stat=fail(4)) ++ allocate (hon(mxgrid,0:mxhko),znp(mxhke,0:2*mxhko),stat=fail(5)) ++ allocate (dhn(mxgrid,0:mxhko),zgs(0:2*mxhko),stat=fail(6)) ++ allocate (fon(mxegrd,0:7),zgc(0:2*mxhko),stat=fail(7)) ++ allocate (ckc(mxewld),cks(mxewld),stat=fail(8)) ++ allocate (pp(2*mxhko),sss(mxxdf),stat=fail(9)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1730) ++ enddo ++ ++ end subroutine alloc_hke_arrays ++ ++ subroutine hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating convergence function ++c arrays for hautman klein ewald method (up to order 3 only) ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith february 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,idnode,nhko,nlatt,k ++ real(8) alpha,drewd,rcut,ecut,den,fac,ss1,aaa,ss2 ++ ++ if(nhko.gt.mxhko)call error(idnode,332) ++ ++c define effective cutoff ++ ++ ecut=rcut*dble(2*nlatt+1) ++ ++c define grid resolution for potential arrays ++ ++ drewd=ecut/dble(mxegrd-4) ++ ++c calculate HKE coefficients ++ ++ ahk(0)=1.d0 ++ ++ do i=1,nhko ++ ++ ahk(i)=-0.25d0*ahk(i-1)*dble(2*i*(2*i-1))/dble(i*i) ++ ++ enddo ++ ++c generate convergence function arrays ++ ++ do i=1,mxegrd ++ ++ hon(i,0)=0.d0 ++ hon(i,1)=dble(i-1)*drewd ++ hon(i,2)=(2.d0*alpha/sqrpi)*exp(-(alpha*hon(i,1))**2) ++ ++ enddo ++ ++c generate error function and derivatives by recursion ++ ++ do k=100,1,-1 ++ ++ den=1.d0/dble(2*k-1) ++ fac=(2.d0*alpha**2)**(k-1) ++ ++ do i=1,mxegrd ++ ++ hon(i,0)=den*(hon(i,0)*hon(i,1)**2+fac*hon(i,2)) ++ ++ enddo ++ ++ if(k.le.2*nhko+2)then ++ ++ do i=1,mxegrd ++ ++ fon(i,k-1)=hon(i,0) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c zeroth order function ++c note: hon(1,0)=2.d0*alpha/sqrpi ++ ++ do i=1,mxegrd ++ ++ hon(i,0)= fon(i,0) ++ dhn(i,0)=-fon(i,1) ++ ++ enddo ++ ++ if(nhko.eq.0)then ++ ++ ss1=dble(mxegrd-1)*drewd ++ aaa=abs(1.d0-hon(mxegrd,nhko)*ss1) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c first order function ++c note: hon(1,1)=8.d0*alpha**3/(3.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,1)=-(2.d0*fon(i,1)-fon(i,2)*ss2) ++ dhn(i,1)= (4.d0*fon(i,2)-fon(i,3)*ss2) ++ ++ enddo ++ ++ if(nhko.eq.1)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c second order function ++c note: hon(1,2)=64.d0*alpha**5/(45.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,2)=(8.d0*fon(i,2)+ss2*(-8.d0*fon(i,3)+ss2*fon(i,4)))/9.d0 ++ dhn(i,2)=(-24.d0*fon(i,3)+ss2*(12.d0*fon(i,4)-ss2*fon(i,5))) ++ x /9.d0 ++ ++ enddo ++ ++ if(nhko.eq.2)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c third order function (enough for anyone!) ++c note: hon(1,3)=768.d0*alpha**7/(14175.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,3)=-(48.d0*fon(i,3)+ss2*(-72.d0*fon(i,4)+ss2*( ++ x 18.d0*fon(i,5)-ss2*fon(i,6))))/225.d0 ++ dhn(i,3)= (192.d0*fon(i,4)+ss2*(-144.d0*fon(i,5)+ss2*( ++ x 24.d0*fon(i,6)-ss2*fon(i,7))))/225.d0 ++ ++ enddo ++ ++ if(nhko.eq.3)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++ return ++ end subroutine hkgen ++ ++ subroutine hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engcpe,vircpe,alpha,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using Hautman Klein Ewald method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith february 2000 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c note - in loop over all k vectors k=2pi(ll/cl,mm/cl) ++c the values of ll and mm are selected so that the symmetry of ++c reciprocal lattice is taken into account i.e. the following ++c rules apply. ++c ++c ll ranges over the values 0 to kmax1 only. ++c ++c mm ranges over 1 to kmax2 when ll=0 and over ++c -kmax2 to kmax2 otherwise. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,mxnode,natms,imcon,nhko,kmax1,kmax2,i ++ integer iatm0,iatm1,j,k,limit,mmin,l,ll,m,mm,n ++ real(8) engcpe,vircpe,alpha,epsq,twopi,ralph,area,rarea ++ real(8) det,rcpcut,rcpct2,aaa,engsic,pm1,pm2,term,ssx,ssy ++ real(8) tmp,rkx1,rky1,rkx2,rky2,rksq,rkk,fac,eterm,fng,fn0,gaus ++ real(8) bkk,force0,forcez,pterm,scale,cprop,omg,cs ++c$$$ real(8) erfc ++ ++ dimension cprop(10),omg(9) ++ ++ save newjob,engsic ++ ++ data newjob/.true./ ++ ++c initialise coulombic potential energy ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ if(alpha.lt.1.d-8)return ++ ++c set working parameters ++ ++ twopi=2.d0*pi ++ ralph=0.5d0/alpha ++ call dcell(cell,cprop) ++ area=cprop(1)*cprop(2)*sqrt(1.d0-cprop(4)**2) ++ rarea=pi/area ++ ++c set up atoms numbers for nodes ++ ++ iatm0 = (idnode*natms)/mxnode + 1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++c initalize stress tensor working arrays ++ ++ do i = 1,9 ++ ++ omg(i) = 0.d0 ++ ++ enddo ++ ++c construct reciprocal lattice vectors and set k vector range ++ ++ call invert(cell,rcell,det) ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ call dcell(rcell,cprop) ++ rcpcut=min(dble(kmax1)*cprop(7),dble(kmax2)*cprop(8))* ++ x 1.05d0*twopi ++ rcpct2=rcpcut**2 ++ ++c compute quantities for first entry ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++c pbc check and array bound checks ++ ++ if(imcon.ne.6)call error(idnode,66) ++ if(mxhke.ne.msatms) call error(idnode,331) ++ if(mxewld.ne.msatms) call error(idnode,330) ++ ++c check hk screening function at cutoff ++ ++ aaa=cerfr(ralph,rcpcut) ++c$$$ aaa=erfc(ralph*rcpcut)/rcpcut ++ ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,105,aaa,0.d0,0.d0) ++c call error(idnode,487) ++ ++ endif ++ ++c calculate self interaction correction ++ ++ engsic=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ engsic=engsic+chge(i)**2 ++ ++ enddo ++ ++ engsic=-r4pie0*alpha*engsic/(sqrpi*epsq) ++ ++c binomial coefficients ++ ++ k=0 ++ crn(0,0)=0.5d0 ++ do i=1,2*nhko ++ ++ pp(i)=1.d0 ++ pm1=pp(1) ++ ++ do j=2,i ++ ++ pm2=pp(j) ++ pp(j)=pm2+pm1 ++ pm1=pm2 ++ ++ enddo ++ ++ if(mod(i,2).eq.0)then ++ ++ k=k+1 ++ do j=0,k ++ ++ term=pp(j+1)*(-1.d0)**j ++ crn(j,k)=term ++ crn(k,j)=term ++ ++ enddo ++ ++ crn(k,k)=0.5d0*crn(k,k) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c calculate and store powers of z_i ++ ++ i=0 ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ znp(i,0)=1.d0 ++ znp(i,1)=zzz(j) ++ ++ enddo ++ ++ limit=i ++ ++ do k=2,2*nhko ++ ++ do i=1,limit ++ ++ znp(i,k)=znp(i,k-1)*znp(i,1) ++ ++ enddo ++ ++ enddo ++ ++c calculate and store exponential factors ++ ++ i=0 ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ elc(i,0)=1.d0 ++ emc(i,0)=1.d0 ++ els(i,0)=0.d0 ++ ems(i,0)=0.d0 ++ ssx=rcell(1)*xxx(j)+rcell(4)*yyy(j) ++ ssy=rcell(2)*xxx(j)+rcell(5)*yyy(j) ++ elc(i,1)=cos(twopi*ssx) ++ emc(i,1)=cos(twopi*ssy) ++ els(i,1)=sin(twopi*ssx) ++ ems(i,1)=sin(twopi*ssy) ++ ++ enddo ++ ++ do l=2,kmax2 ++ ++ do i=1,limit ++ ++ emc(i,l)=emc(i,l-1)*emc(i,1)-ems(i,l-1)*ems(i,1) ++ ems(i,l)=ems(i,l-1)*emc(i,1)+emc(i,l-1)*ems(i,1) ++ ++ enddo ++ ++ enddo ++ ++c start of main loop over k vectors ++ ++ mmin=1 ++ ++ do ll=0,kmax1 ++ ++ l=ll ++ tmp = twopi*dble(ll) ++ rkx1=tmp*rcell(1) ++ rky1=tmp*rcell(4) ++ ++c put cos(i,L) terms into cos(i,0) array ++ ++ if(l.eq.1) then ++ ++ do i=1,limit ++ ++ elc(i,0)=elc(i,1) ++ els(i,0)=els(i,1) ++ ++ enddo ++ ++ elseif(l.gt.1) then ++ ++ do i=1,limit ++ ++ cs=elc(i,0) ++ elc(i,0)=cs*elc(i,1)-els(i,0)*els(i,1) ++ els(i,0)=els(i,0)*elc(i,1)+cs*els(i,1) ++ ++ enddo ++ ++ endif ++ ++ do mm=mmin,kmax2 ++ ++ m=iabs(mm) ++ tmp = twopi*dble(mm) ++ rkx2=rkx1+tmp*rcell(2) ++ rky2=rky1+tmp*rcell(5) ++ ++c test on magnitude of k vector ++ ++ rksq=rkx2*rkx2+rky2*rky2 ++ ++ if(rksq.le.rcpct2)then ++ ++c calculate exp(ikr) terms and product with charges ++ ++ i=0 ++ ++ if(mm.ge.0)then ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)-els(i,0)*ems(i,m)) ++ cks(i)=chge(j)*(els(i,0)*emc(i,m)+ems(i,m)*elc(i,0)) ++ ++ enddo ++ ++ else ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ ++ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)+els(i,0)*ems(i,m)) ++ cks(i)=chge(j)*(els(i,0)*emc(i,m)-ems(i,m)*elc(i,0)) ++ ++ enddo ++ ++ endif ++ ++c calculate sum of products of powers of z_i and q_i exp(ik.s_i) ++ ++ do k=0,2*nhko ++ ++ zgc(k)=0.d0 ++ zgs(k)=0.d0 ++ ++ do i=1,limit ++ ++ zgc(k)=zgc(k)+ckc(i)*znp(i,k) ++ zgs(k)=zgs(k)+cks(i)*znp(i,k) ++ ++ enddo ++ ++ enddo ++ ++c perform global summation of zgc and zgs arrays ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(zgc(0),2*nhko+1,buffer) ++ call gdsum(zgs(0),2*nhko+1,buffer) ++ ++ endif ++ ++c calculate 0th order screening function ++ ++ rkk=sqrt(rksq) ++ fn0=cerfr(ralph,rkk) ++c$$$ fn0=erfc(ralph*rkk)/rkk ++ gaus=exp(-(ralph*rkk)**2)/(alpha*sqrpi) ++ ++c sum terms for orders of the screening function ++ ++ fac=1.d0 ++ ++ do k=0,nhko ++ ++c sum over z_i binomial contributions ++ ++ eterm=0.d0 ++ fng=fac*fn0 ++ do m=0,k ++ ++ n=2*k-m ++ ++c sum energy terms ++ ++ eterm=eterm+crn(m,k)*(zgc(m)*zgc(n)+zgs(m)*zgs(n)) ++ ++c calculate force contribution to each site ++ ++ i=0 ++ bkk=-fng*crn(m,k) ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ force0=bkk*(znp(i,n)*(zgs(m)*ckc(i)-zgc(m)*cks(i))+ ++ x znp(i,m)*(zgs(n)*ckc(i)-zgc(n)*cks(i))) ++ fxx(j)=fxx(j)+rkx2*force0 ++ fyy(j)=fyy(j)+rky2*force0 ++ ++ omg(3)=omg(3)+rkx2*force0*zzz(j) ++ omg(6)=omg(6)+rky2*force0*zzz(j) ++ ++ if(k.gt.0)then ++ ++ if(m.eq.0)then ++ ++ forcez=bkk*dble(n)*znp(i,n-1)*(zgc(m)*ckc(i)+ ++ x zgs(m)*cks(i)) ++ ++ else ++ ++ forcez=bkk*(dble(m)*znp(i,m-1)*(zgc(n)*ckc(i)+ ++ x zgs(n)*cks(i))+dble(n)*znp(i,n-1)*(zgc(m)* ++ x ckc(i)+zgs(m)*cks(i))) ++ ++ endif ++ ++ omg(9)=omg(9)+forcez*zzz(j) ++ fzz(j)=fzz(j)+forcez ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c accumulate potential energy and stress tensor ++ ++ engcpe=engcpe+fng*eterm ++ pterm=(dble(2*k-1)*fng-fac*gaus)/rksq ++ omg(1)=omg(1)+eterm*(fng+pterm*rkx2*rkx2) ++ omg(5)=omg(5)+eterm*(fng+pterm*rky2*rky2) ++ omg(2)=omg(2)+eterm*pterm*rky2*rkx2 ++ fac=fac*rksq/(dble(2*(k+1))*dble(2*k+1)) ++ ++c end of loop over orders of screening function ++ ++ enddo ++ ++c end of if-block for rksq < rcpct2 ++ ++ endif ++ ++c end of inner loop over reciprocal lattice vectors ++ ++ enddo ++ ++ mmin=-kmax2 ++ ++c end of outer loop over reciprocal lattice vectors ++ ++ enddo ++ ++ engcpe=engcpe/dble(mxnode) ++ do i = 1,9 ++ ++ omg(i) = omg(i)/dble(mxnode) ++ ++ enddo ++ ++c add self interaction correction to potential ++ ++ scale=4.d0*rarea*r4pie0/epsq ++ engcpe=scale*engcpe+engsic ++ ++c virial term ++ ++ vircpe=vircpe-scale*(omg(1)+omg(5)+omg(9)) ++ ++c calculate final forces ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=scale*fxx(i) ++ fyy(i)=scale*fyy(i) ++ fzz(i)=scale*fzz(i) ++ ++ enddo ++ ++c calculate stress tensor (symmetrical) ++ ++ stress(1) = stress(1)+scale*omg(1) ++ stress(2) = stress(2)+scale*omg(2) ++ stress(3) = stress(3)+scale*omg(3) ++ stress(4) = stress(4)+scale*omg(2) ++ stress(5) = stress(5)+scale*omg(5) ++ stress(6) = stress(6)+scale*omg(6) ++ stress(7) = stress(7)+scale*omg(3) ++ stress(8) = stress(8)+scale*omg(6) ++ stress(9) = stress(9)+scale*omg(9) ++ ++ return ++ end subroutine hkewald1 ++ ++ subroutine hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engcpe, ++ x vircpe,drewd,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating real-space contributions to ++c the hautman-klein-ewald electrostatic method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith may 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,nhko,nlatt,imcon,natms,nix,niy ++ integer nboxes,i,j,k,n,m,ma,mpm2,npm2,ii,l0,l1,l2,last ++ real(8) engcpe,vircpe,drewd,rcut,epsq ++ real(8) step,rcsq,rdrewd,strs1,strs2,strs3 ++ real(8) strs5,strs6,strs9,dcx,dcy,udx,udy,fac,chgea,chgprd ++ real(8) ddx,ddy,ssx,ssy,ssq,coul,fcoul,rrr,ppp,vk0,vk1,vk2 ++ real(8) eterm,t1,t2,egamma,fx,fy,fz,det ++ ++ dimension nix(25),niy(25) ++ ++ data nix/ 0, 1, 1, 0,-1,-1,-1, 0, 1, 2, 2, ++ x 2, 1, 0,-1,-2,-2,-2,-2,-2,-1, 0, 1, 2, 2/ ++ data niy/ 0, 0, 1, 1, 1, 0,-1,-1,-1, 0, 1, ++ x 2, 2, 2, 2, 2, 1, 0,-1,-2,-2,-2,-2,-2,-1/ ++ ++CDIR$ CACHE_ALIGN fi ++ ++c check boundary condition ++ ++ if(imcon.ne.6)call error(idnode,66) ++ ++c number of neighbouring real space cells ++ ++ if(nlatt.gt.2)call error(idnode,488) ++ step=dble(2*nlatt+1) ++ nboxes=(2*nlatt+1)**2 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c set cutoff condition for pair forces ++ ++ rcsq=(step*rcut)**2 ++ ++c reciprocal of interpolation interval ++ ++ rdrewd = 1.d0/drewd ++ ++c reciprocal cell ++ ++ call invert(cell,rcell,det) ++ do i=1,9 ++ ++ rcell(i)=rcell(i)/step ++ ++ enddo ++ ++c initialise stress tensor accumulators ++ strs3 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs5 = 0.d0 ++ ++c loop over image cells, starting with central cell ++ ++ ma=1 ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++ do k=1,nboxes ++ ++ last=natms ++ dcx=dble(nix(k)) ++ dcy=dble(niy(k)) ++ udx=cell(1)*dcx+cell(4)*dcy ++ udy=cell(2)*dcx+cell(5)*dcy ++ ++c outer loop over atoms ++ ++ do m=ma,mpm2 ++ ++ fac=r4pie0/epsq ++ if(m.eq.0)fac=fac*0.5d0 ++ if(m.gt.npm2)last=mpm2 ++ ++c set initial array values ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ chgea=fac*chge(i) ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ chgprd=chgea*chge(j) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++ zzn(ii)=1.d0 ++ zzd(ii)=0.d0 ++ ++c calculate interatomic separation ++ ++ ddx=xxx(i)-xxx(j)+udx ++ ddy=yyy(i)-yyy(j)+udy ++ ssx=rcell(1)*ddx+rcell(4)*ddy ++ ssy=rcell(2)*ddx+rcell(5)*ddy ++ ssx=ssx-nint(ssx) ++ ssy=ssy-nint(ssy) ++ xdf(ii)=step*(ssx*cell(1)+ssy*cell(4)) ++ ydf(ii)=step*(ssx*cell(2)+ssy*cell(5)) ++ zdf(ii)=zzz(i)-zzz(j) ++ rsqdf(ii)=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c loop over HK orders ++ ++ do n=0,nhko ++ ++c inner loop over atoms ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ chgea = fac*chge(i) ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ chgprd=chgea*chge(j) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c apply truncation of potential ++ ++ ssq=rsqdf(ii)-zdf(ii)*zdf(ii) ++ ++ if(rcsq.gt.ssq)then ++ ++c calculate potential energy and virial ++ ++ coul=0.d0 ++ fcoul=0.d0 ++ rrr = sqrt(rsqdf(ii)) ++ sss(ii)=sqrt(ssq) ++ ++ if(n.eq.0)then ++ ++ coul = chgprd/rrr ++ fcoul = coul/rsqdf(ii) ++ ++ endif ++ ++c interpolation parameters ++ ++ l0=int(sss(ii)*rdrewd) ++ ppp=sss(ii)*rdrewd-dble(l0) ++ l0=l0+1 ++ l1=l0+1 ++ l2=l0+2 ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0 = hon(l0,n) ++ vk1 = hon(l1,n) ++ vk2 = hon(l2,n) ++ t1 = vk0 + (vk1 - vk0)*ppp ++ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) ++ ++ eterm=(t1+(t2-t1)*ppp*0.5d0)*ahk(n)*chgprd ++ engcpe=engcpe+coul-eterm*zzn(ii) ++ ++c calculate forces using 3pt interpolation ++ ++ vk0 = dhn(l0,n) ++ vk1 = dhn(l1,n) ++ vk2 = dhn(l2,n) ++ ++ t1 = vk0 + (vk1 - vk0)*ppp ++ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) ++ ++c calculate in-plane forces ++ ++ egamma=fcoul+ ++ x (t1+(t2-t1)*ppp*0.5d0)*chgprd*zzn(ii)*ahk(n) ++ fx=egamma*xdf(ii) ++ fy=egamma*ydf(ii) ++ ++c calculate perpendicular forces ++ ++ fz=fcoul*zdf(ii)+2.d0*dble(n)*eterm*zzd(ii) ++ ++c add to force accumulators ++ ++ fxx(i)=fxx(i)+fx ++ fyy(i)=fyy(i)+fy ++ fzz(i)=fzz(i)+fz ++ ++ fxx(j)=fxx(j)-fx ++ fyy(j)=fyy(j)-fy ++ fzz(j)=fzz(j)-fz ++ ++c reset zzn array for next order of convergence function ++ ++ zzd(ii)=zzn(ii)*zdf(ii) ++ zzn(ii)=zzd(ii)*zdf(ii) ++ ++c calculate stress tensor ++ ++ strs1 = strs1 + xdf(ii)*fx ++ strs2 = strs2 + xdf(ii)*fy ++ strs3 = strs3 + xdf(ii)*fz ++ strs5 = strs5 + ydf(ii)*fy ++ strs6 = strs6 + ydf(ii)*fz ++ strs9 = strs9 + zdf(ii)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ ma=0 ++ ++ enddo ++ ++c calculate virial ++ ++ vircpe=vircpe-(strs1+strs5+strs9) ++ ++c complete stress tensor ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ return ++ end subroutine hkewald2 ++ ++ subroutine hkewald3(iatm,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating exclusion corrections to ++c the hautman-klein-ewald electrostatic method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith may 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm ++ real(8) engcpe,vircpe,epsq,fx,fy,fz,strs1,strs2,strs3 ++ real(8) strs5,strs6,strs9,chgea,chgprd,rrr,rsq,coul,fcoul ++ ++CDIR$ CACHE_ALIGN fi ++ ++c initialise stress tensor accumulators ++ ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs3 = 0.d0 ++ strs5 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ do m=1,nexatm(ik) ++ ++c atomic index and charge product ++ ++ jatm=lexatm(ik,m) ++ chgprd=chgea*chge(jatm) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=xdf(m)**2+ydf(m)**2+zdf(m)**2 ++ rrr = sqrt(rsq) ++ ++c calculate potential energy and virial ++ ++ coul = chgprd/rrr ++ engcpe = engcpe - coul ++ ++c calculate forces ++ ++ fcoul = coul/rsq ++ fx = fcoul*xdf(m) ++ fy = fcoul*ydf(m) ++ fz = fcoul*zdf(m) ++ ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ ++c calculate stress tensor ++ ++ strs1 = strs1 - xdf(m)*fx ++ strs2 = strs2 - xdf(m)*fy ++ strs3 = strs3 - xdf(m)*fz ++ strs5 = strs5 - ydf(m)*fy ++ strs6 = strs6 - ydf(m)*fz ++ strs9 = strs9 - zdf(m)*fz ++ ++ endif ++ ++ enddo ++ ++c virial ++ ++ vircpe=vircpe-engcpe ++ ++c complete stress tensor ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ endif ++ ++ return ++ end subroutine hkewald3 ++ ++ subroutine hkewald4(iatm,ik,engcpe,vircpe,engcpl,vircpl,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using the hautman-klein-ewald method ++c ++c modified to allow direct calculation of primary (short-range) ++c interactions for multiple-time step corrections ++ ++c primary neighbours are taken out of the Ewald sum ++c electrostatics are evaluated directly instead ++c ++c parallel replicated data version - real space terms ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith july 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm ++ real(8) engcpe,vircpe,engcpl,vircpl,rcut,epsq ++ real(8) fi,fli,rcsq,strs1,strs2,strs3,strs5,strs6 ++ real(8) strs9,strl1,strl2,strl3,strl5,strl6,strl9,chgea,chgprd ++ real(8) rsq,rrr,coul,egamma,fx,fy,fz ++ ++ dimension fi(3),fli(3) ++ ++CDIR$ CACHE_ALIGN fi ++CDIR$ CACHE_ALIGN fli ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ ++c initialise stress tensor accumulators ++ ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs3 = 0.d0 ++ strs5 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ strl1 = 0.d0 ++ strl2 = 0.d0 ++ strl3 = 0.d0 ++ strl5 = 0.d0 ++ strl6 = 0.d0 ++ strl9 = 0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ if(abs(chgea).gt.1.d-10)then ++ ++c temporary arrays for cache aligning ++ ++ fi(1) = fxx(iatm) ++ fi(2) = fyy(iatm) ++ fi(3) = fzz(iatm) ++ ++ fli(1) = flx(iatm) ++ fli(2) = fly(iatm) ++ fli(3) = flz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ chgprd=chgea*chge(jatm) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++c coulombic energy ++ ++ rrr = sqrt(rsq) ++ coul = chgprd/rrr ++ ++c sum contributions to the totals ++ ++ engcpe = engcpe + coul ++ engcpl = engcpl - coul ++ vircpe = vircpe - coul ++ vircpl = vircpl + coul ++ ++c calculate coulombic forces ++ ++ egamma = coul/rsq ++ ++ fx = egamma*xdf(m) ++ fy = egamma*ydf(m) ++ fz = egamma*zdf(m) ++ ++c add in contributions to instantaneous force ++ ++ fi(1) = fi(1) + fx ++ fi(2) = fi(2) + fy ++ fi(3) = fi(3) + fz ++ ++ fxx(jatm) = fxx(jatm) - fx ++ fyy(jatm) = fyy(jatm) - fy ++ fzz(jatm) = fzz(jatm) - fz ++ ++c add in contributions to the long-range force ++ ++ fli(1) = fli(1) - fx ++ fli(2) = fli(2) - fy ++ fli(3) = fli(3) - fz ++ ++ flx(jatm) = flx(jatm) + fx ++ fly(jatm) = fly(jatm) + fy ++ flz(jatm) = flz(jatm) + fz ++ ++c calculate long and short range stress tensors ++ ++ strs1 = strs1 + xdf(m)*fx ++ strl1 = strl1 - xdf(m)*fx ++ strs2 = strs2 + xdf(m)*fy ++ strl2 = strl2 - xdf(m)*fy ++ strs3 = strs3 + xdf(m)*fz ++ strl3 = strl3 - xdf(m)*fz ++ strs5 = strs5 + ydf(m)*fy ++ strl5 = strl5 - ydf(m)*fy ++ strs6 = strs6 + ydf(m)*fz ++ strl6 = strl6 - ydf(m)*fz ++ strs9 = strs9 + zdf(m)*fz ++ strl9 = strl9 - zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c copy back temporaries ++ ++ fxx(iatm) = fi(1) ++ fyy(iatm) = fi(2) ++ fzz(iatm) = fi(3) ++ ++ flx(iatm) = fli(1) ++ fly(iatm) = fli(2) ++ flz(iatm) = fli(3) ++ ++c complete stress tensor ++ ++ stresl(1) = stresl(1) + strl1 ++ stresl(2) = stresl(2) + strl2 ++ stresl(3) = stresl(3) + strl3 ++ stresl(4) = stresl(4) + strl2 ++ stresl(5) = stresl(5) + strl5 ++ stresl(6) = stresl(6) + strl6 ++ stresl(7) = stresl(7) + strl3 ++ stresl(8) = stresl(8) + strl6 ++ stresl(9) = stresl(9) + strl9 ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ endif ++ ++ return ++ end subroutine hkewald4 ++ ++ function cerfr(alpha,rrr) ++ ++c*********************************************************************** ++c ++c dl_poly function for generating complementary error function ++c divided by r ++c ++c copyright - daresbury laboratory 2001 ++c author - w. smith february 2001 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer k ++ real(8) cerfr,sqrpi,h0,h1,alpha,rrr,rr2,fac ++ ++ sqrpi=1.7724538509055159d0 ++ ++c starting values ++ ++ h0=0.d0 ++ h1=(2.d0*alpha/sqrpi)*exp(-(alpha*rrr)**2) ++ ++c generate function by recursion ++ ++ rr2=rrr*rrr ++ do k=100,1,-1 ++ ++ fac=(2.d0*alpha**2)**(k-1) ++ h0=(h0*rr2+fac*h1)/dble(2*k-1) ++ ++ enddo ++ ++ cerfr=1.d0/rrr-h0 ++ ++ return ++ end function cerfr ++ ++ end module hkewald_module ++ +diff -urN dl_class_1.9.orig/srcmod/hyper_dynamics_module.f dl_class_1.9/srcmod/hyper_dynamics_module.f +--- dl_class_1.9.orig/srcmod/hyper_dynamics_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/hyper_dynamics_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,2821 @@ ++ module hyper_dynamics_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining hyperdynamics routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use forces_module ++ use nlist_builders_module ++ use optimiser_module ++ use property_module ++ use setup_module ++ use shake_module ++ use temp_scalers_module ++ use vv_motion_module ++ ++ implicit none ++ ++ integer, parameter :: mxtrn=10 ++ integer, parameter :: mxbsn=1000 ++ integer, parameter :: mxneb=8 ++ integer, parameter :: mxdiffs=300 ++ integer, parameter :: hyper_tag=35000 ++ ++ integer numbsn,numpro,numtrk,ndiff,maxtrk,numdark,home_bsn,numbpd ++ integer nbsa(mxbsn),nbsb(mxbsn),ktrn(mxtrn) ++ real(8) xtrn(mxtrn),ytrn(mxtrn) ++ real(8) tstop,tkeres,timhyp,timres,tboost,boost,vbase ++ ++ integer, allocatable :: idabsn(:),keymin(:) ++ real(8), allocatable :: xbas(:),ybas(:),zbas(:) ++ real(8), allocatable :: xchk(:),ychk(:),zchk(:) ++ real(8), allocatable :: xres(:),yres(:),zres(:) ++ real(8), allocatable :: vxrs(:),vyrs(:),vzrs(:) ++ real(8), allocatable :: fxrs(:),fyrs(:),fzrs(:) ++ real(8), allocatable :: xhyp(:),yhyp(:),zhyp(:) ++ real(8), allocatable :: vxhp(:),vyhp(:),vzhp(:) ++ real(8), allocatable :: fxhp(:),fyhp(:),fzhp(:) ++ real(8), allocatable :: xdiffs(:),ydiffs(:),zdiffs(:) ++ real(8), allocatable :: celneb(:,:),path(:),optk(:,:) ++ real(8), allocatable :: xneb(:),yneb(:),zneb(:),engneb(:) ++ real(8), allocatable :: fxneb(:),fyneb(:),fzneb(:) ++ real(8), allocatable :: hxneb(:),hyneb(:),hzneb(:) ++ real(8), allocatable :: taux(:),tauy(:),tauz(:) ++ real(8), allocatable :: track(:) ++ ++ integer bsn_1(maxneb),bsn_2(maxneb) ++ real(8) strhyp(9),strres(9),engbsn(2) ++ real(8) celbas(9),celhyp(9),celchk(9),celres(9) ++ ++ save numbsn,numtrk,numpro,ndiff,numdark,timres ++ save xbas,ybas,zbas,xchk,ychk,zchk,timhyp,vbase ++ save xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs ++ save xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp ++ save celbas,celhyp,celres,celchk,strhyp,strres ++ save idabsn,nbsa,nbsb,xdiffs,ydiffs,zdiffs,tkeres ++ save xneb,yneb,zneb,engneb,taux,tauy,tauz,keymin ++ save fxneb,fyneb,fzneb,hxneb,hyneb,hzneb,path ++ save optk,tstop,tboost,boost,numbpd ++ ++ contains ++ ++ subroutine alloc_hyper_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining hyperdynamics arrays and ++c initialising control variables ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ ++ integer i,fail,idnode,nebmax ++ dimension fail(nnn) ++ ++ nebmax=msatms*(mxneb+1) ++ ++c initialise control variables ++ ++ numbpd=0 ++ numtrk=0 ++ numbsn=0 ++ numpro=0 ++ ndiff=0 ++ numdark=0 ++ home_bsn=0 ++ tkeres=0.d0 ++ tstop=1.d30 ++ timhyp=0.d0 ++ timres=0.d0 ++ boost=1.d0 ++ tboost=0.d0 ++ vbase=-huge(1.d0) ++ do i=1,maxneb ++ bsn_1(i)=0 ++ bsn_2(i)=0 ++ enddo ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xbas(msatms),ybas(msatms),zbas(msatms),stat=fail(1)) ++ allocate (xchk(msatms),ychk(msatms),zchk(msatms),stat=fail(2)) ++ allocate (xres(msatms),yres(msatms),zres(msatms),stat=fail(3)) ++ allocate (vxrs(msatms),vyrs(msatms),vzrs(msatms),stat=fail(4)) ++ allocate (fxrs(msatms),fyrs(msatms),fzrs(msatms),stat=fail(5)) ++ allocate (xhyp(msatms),yhyp(msatms),zhyp(msatms),stat=fail(6)) ++ allocate (vxhp(msatms),vyhp(msatms),vzhp(msatms),stat=fail(7)) ++ allocate (fxhp(msatms),fyhp(msatms),fzhp(msatms),stat=fail(8)) ++ allocate (xdiffs(mxdiffs),ydiffs(mxdiffs),zdiffs(mxdiffs), ++ x stat=fail(9)) ++ allocate (idabsn(mxdiffs),keymin(0:mxneb),stat=fail(10)) ++ allocate (xneb(nebmax),yneb(nebmax),zneb(nebmax),stat=fail(11)) ++ allocate (fxneb(nebmax),fyneb(nebmax),fzneb(nebmax),stat=fail(12)) ++ allocate (taux(msatms),tauy(msatms),tauz(msatms),stat=fail(13)) ++ allocate (engneb(0:mxneb),celneb(9,0:mxneb),path(0:mxneb), ++ x stat=fail(14)) ++ allocate (hxneb(nebmax),hyneb(nebmax),hzneb(nebmax),stat=fail(15)) ++ allocate (optk(5,0:mxneb),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1115) ++ endif ++ enddo ++ ++ end subroutine alloc_hyper_arrays ++ ++ subroutine hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for starting a hyperdynamics simulation ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,savflg ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,i,j ++ integer ntpvdw,ntshl,ntteth,numblock,iatm0,iatm1,ntcons ++ integer ktol,pass,fail,ntrack ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,engcfg ++ real(8) virlrc,cvgerr,dum,otol,cgerr,sigma,hyp_units ++ ++c allocate track array for BPD ++ ++ if(lbpd)then ++ allocate (track(0:nblock/ntrack),stat=fail) ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c current block number ++ ++ numblock=nstep/nblock ++ ++c open hyperdynamics journal file ++ ++ if(idnode.eq.0) ++ x open(nevnt,file="EVENTS",form='formatted',position='append') ++ ++c set up hyperdynamics for simulation start ++ ++ if(nstep.eq.0)then ++ ++c initialise bias potential boost factor ++ ++ numbpd=0 ++ boost=1.d0 ++ tboost=0.d0 ++ ++c set basin difference markers ++ ++ do i=1,mxbsn ++ ++ nbsa(i)=0 ++ nbsb(i)=0 ++ ++ enddo ++ ++c store the starting configuration ++ ++ savflg=.true. ++ tkeres=sigma ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++c minimise starting structure ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) ++ ++c define zero energy for BPD dynamics mode ++ ++ vbase=engcfg ++ ++c write events entry for minimisation ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x engcfg/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x engcfg/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c save minimised starting structure as basin file ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,engcfg) ++ ++c save details of starting home basin ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c restore the starting configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++ else ++ ++c restore previous data from hyperdynamics backup file ++ ++ call hyper_open(ltad,idnode,mxnode,natms,nsteql) ++ ++c reset home basin for hyperdynamics (home basin is 0 for TAD) ++ ++ if(lbpd)home_bsn=numbsn-1 ++ ++c store the current configuration ++ ++ savflg=.true. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c read minimised starting structure from home basin file ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,home_bsn,natms,imcon,idnode,engcfg) ++ ++c save details of current home basin ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c restore the current configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++ endif ++ ++ return ++ end subroutine hyper_start ++ ++ subroutine hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for implementing a hyperdynamics simulation ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical lbpd,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb ++ logical lrefmin,same,savflg,recycle,scan,prechk,tadall,nebgo ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntrack ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw ++ integer ntshl,ntteth,blkout,numblock,bsn1,bsn2,itrack ++ integer nturn,ntcons,mdiff,newbsn,iatm0,iatm1,pass,i,j,itrk ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,catchrad ++ real(8) cvgerr,estar,engcfg,cfgtmp,engcpe,engsrp,catch ++ real(8) vircpe,engmet,virmet,virlrc,engtbp,virtbp,dum ++ real(8) engfbp,virfbp,engter,virter,engbnd,virbnd,engang ++ real(8) virang,engdih,virdih,enginv,virinv,engtet,virtet ++ real(8) engshl,shlke,virshl,engfld,virfld,virsrp,sprneb ++ real(8) deltad,deltal,tlow,timhop,timlow,engtke,tolnce,hyp_units ++ real(8) ebias,vmin ++ ++ data bsn1,bsn2/0,0/ ++ ++c control variables ++ ++ lneb=.false. ++ numblock=nstep/nblock ++ maxtrk=nblock/ntrack ++ if(numdark.eq.0)numdark=nsteql ++ lrefmin=(mod(nstep,nblock).eq.0) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c BPD/TAD simulation time ++ ++ timhyp=timhyp+tstep ++ ++c track the tboost value ++ ++ if(mod(nstep,ntrack).eq.0)track(mod(numtrk,maxtrk))=tboost ++ ++c provisional check for transition - compare current config with ++c the reference state (not in dark period) ++ ++ same=.true. ++ scan=.false. ++ if(prechk.and.(mod(nstep,ntrack).eq.0).and. ++ x (lbpd.or.(ltad.and.(nstep.gt.numdark))))then ++ ++ catch=0.65d0*catchrad ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catch) ++ ++ if(.not.same.and.idnode.eq.0)then ++ ++ write(nevnt,'("PRE",i10)')nstep ++ write(nrite,'(1x,"PRE",i10)')nstep ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++ if(.not.same.or.lrefmin)then ++ ++c store the current configuration ++ ++ savflg=.true. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c minimise current structure ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c confirm any transition ++ ++ if(ltad)scan=.true. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c transition detected - proceed with transition analysis ++ ++ if(.not.same)then ++ ++c store new basin energy ++ ++ engbsn(2)=cfgtmp ++ ++c save new minimised state (bias potential dynamics only) ++ ++ if(lbpd)then ++ ++ do i=1,9 ++ celres(i)=cell(i) ++ enddo ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xres(j)=xxx(i) ++ yres(j)=yyy(i) ++ zres(j)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++c record transition (for TAD only if outside blackout period) ++ ++ if(lbpd.or.nstep.gt.numdark)then ++ ++c check if transition results in unique new basin (TAD only) ++ ++ if(ltad)call check_basins(newbsn,mdiff,mxnode) ++ ++c analysis of new basin ++ ++ if(lbpd.or.tadall.or.newbsn.eq.numbsn)then ++ ++c set difference counters and pointers (TAD only) ++ ++ if(ltad)then ++ ++ if(numbsn.gt.mxbsn)call error(idnode,2330) ++ ++ ndiff=mdiff ++ ++ if(numbsn.gt.1)then ++ nbsa(numbsn)=nbsb(numbsn-1)+1 ++ else ++ nbsa(numbsn)=1 ++ endif ++ ++ nbsb(numbsn)=mdiff ++ ++ endif ++ ++c save the basin file and store basin energy ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode, ++ x cfgtmp) ++ ++c determine minimum (reaction) path and activation energy ++ ++ if(nebgo)call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, ++ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,cfgtmp,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++c analyse the transition - determine e-star and destination state ++ ++ if(nebgo)call transition_properties ++ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,nturn,numbsn,alpha,delr,dlrpot, ++ x drewd,elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr,estar, ++ x catchrad,hyp_units) ++ ++c estimate time of transition from past trajectory ++ ++ call transition_time ++ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl, ++ x ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, ++ x ntpter,ntrack,ntpvdw,ntshl,ntteth,ntcons,itrk, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) ++ ++c update TAD control variables ++ ++ if(ltad)then ++ ++c update blackout period ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ ++c calculate stopping time ++ ++ timlow=timhop*exp(-(estar/temp-estar/tlow)/boltz) ++ tstop=min(tstop,deltad*(timlow/deltad)**(tlow/temp)) ++ ++c write transition data for TAD only ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRA",i10,3i6,1p,4e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timlow,tstop ++ write(nevnt,'("BLK",2i10)')nstep,numdark ++ write(nrite,'(1x,"TRA",i10,3i6,1p,4e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timlow,tstop ++ write(nrite,'(1x,"BLK",2i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ elseif(nebgo.and.idnode.eq.0)then ++ ++c write transition data for bias potential dynamics with NEB ++ ++ write(nevnt,'("TRA",i10,3i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,'(1x,"TRA",i10,3i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,"(1x,120('-'))") ++ ++ numbpd=0 ++ tboost=0.0 ++ ++ elseif(idnode.eq.0)then ++ ++c write transition data for bias potential dynamics without NEB ++ ++ write(nevnt,'("TRA",i10,2i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,ebias/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,'(1x,"TRA",i10,2i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,ebias/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,"(1x,120('-'))") ++ ++ numbpd=0 ++ tboost=0.0 ++ ++ endif ++ ++ else ++ ++c update blackout period when transition not unique (TAD only) ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRR",i10,3i6)')nstep,home_bsn,newbsn ++ write(nevnt,'("BLK",2i10)')nstep,numdark ++ write(nrite,'(1x,"TRR",i10,3i6)')nstep,home_bsn,newbsn ++ write(nrite,'(1x,"BLK",2i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++c actions when new basin has been visited before (TAD only) ++ ++ elseif(ltad)then ++ ++c ignore dark transition and extend blackout period (TAD only) ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRI",i10)')nstep ++ write(nrite,'(1x,"TRI",i10)')nstep ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ if(nstep.le.nsteql)then ++ ++ nsteql=nsteql+blkout ++ numdark=nsteql+blkout ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("EQL",2i10)')nstep,nsteql ++ write(nrite,'(1x,"EQL",2i10)')nstep,nsteql ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ else ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("BLK",3i10)')nstep,numdark ++ write(nrite,'(1x,"BLK",3i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ if(ltad)then ++ ++c return to the block starting state after transition (TAD only) ++ ++ timhyp=timres ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++c scramble the velocities (and conserve system energy) ++ ++ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,tkeres,temp,tolnce) ++ ++ elseif(lbpd)then ++ ++c reset reference state to new basin (bias potential dynamics only) ++ ++ home_bsn=home_bsn+1 ++ engbsn(1)=engbsn(2) ++ ++ do i=1,9 ++ celbas(i)=celres(i) ++ enddo ++ ++ call invert(celbas,rcell,dum) ++ ++ do i=1,iatm1-iatm0+1 ++ ++ xbas(i)=rcell(1)*xres(i)+rcell(4)*yres(i)+rcell(7)*zres(i) ++ ybas(i)=rcell(2)*xres(i)+rcell(5)*yres(i)+rcell(8)*zres(i) ++ zbas(i)=rcell(3)*xres(i)+rcell(6)*yres(i)+rcell(9)*zres(i) ++ ++ enddo ++ ++c restore current hyperdynamics configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c reset boost factor ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++c no transition detected so restore current trajectory ++ ++ else ++ ++c restore the current configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c save the block configuration as reset state (TAD only) ++ ++ if(ltad.and.lrefmin)then ++ ++ savflg=.true. ++ tkeres=engtke ++ timres=timhyp ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c close down if TAD stopping time reached ++ ++ if(ltad.and.tstop.lt.timhyp)recycle=.false. ++ ++c write a tracking file ++ ++ if(mod(nstep,ntrack).eq.0)then ++ ++ itrack=mod(numtrk,maxtrk) ++ call write_reference_config ++ x ('CFGTRK','TRACKS',ntrk,itrack,natms,imcon,idnode,engcfg) ++ ++ numtrk=numtrk+1 ++ ++ endif ++ ++ return ++ end subroutine hyper_driver ++ ++ subroutine define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls for a ++c structural minimisation to define a minimum state for ++c hyperdynamics simulations ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,nogofr,lneut,lnsq,loglnk,stropt,lzeql ++ logical newlst,ltad,lsolva,lfree,lexcite ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf ++ integer nblock,pass,mxpass,mstep,ntcons,nsolva,isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,cfgold,cvgerr ++ real(8) hnorm,grad0,grad1,ff1,sgn,engord,virord ++ ++ data mxpass/1000/ ++ ++c control variables ++ ++ pass=0 ++ keystr=0 ++ numrdf=0 ++ ltad=.true. ++ engcfg=1.d30 ++ stropt=.false. ++ nogofr=.false. ++ ++c dummy variables ++ ++ lsolva=.false. ++ lfree=.false. ++ lexcite=.false. ++ nsolva=0 ++ isolva=1 ++ engord=0.d0 ++ virord=0.d0 ++ ++c relax the current structure ++ ++ do while(.not.stropt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ cfgold=engcfg ++ mstep=nstep+pass ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ cvgerr=abs(engcfg-cfgold) ++ ++ enddo ++ ++ return ++ end subroutine define_minimum_state ++ ++ subroutine write_reference_config ++ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) ++ ++c*********************************************************************** ++c ++c dlpoly utility to write a minimum structure file in CONFIG ++c format ++c ++c copyright daresbury laboratory ++c author w.smith june 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*6 fnam ++ character*4 tail ++ character*6 direct ++ integer nfil,nnn,i,natms,imcon,idnode,levcfg ++ real(8) engcfg ++ ++ levcfg=0 ++ ++c node zero handles i/o ++ ++ if(idnode.eq.0)then ++ ++c write configuration data to new configuration file ++ ++ write(tail,'(i4.4)')nnn ++ open(nfil,file=direct//'/'//fnam//tail,form='formatted') ++ ++ write(nfil,'(a10)')fnam//tail ++ write(nfil,'(3i10,g20.12)') levcfg,imcon,natms,engcfg ++ ++ if(imcon.gt.0) write(nfil,'(3f20.12)') cell ++ ++ do i=1,natms ++ ++ write(nfil,'(a8,i10)') atmnam(i),i ++ write(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ ++ enddo ++ ++ close (nfil) ++ ++ endif ++ ++ nnn=nnn+1 ++ ++ return ++ end subroutine write_reference_config ++ ++ subroutine read_reference_config ++ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) ++ ++c*********************************************************************** ++c ++c dlpoly utility to read a reference structure file in CONFIG ++c format ++c ++c copyright daresbury laboratory ++c author w.smith february 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*6 fnam ++ character*4 tail ++ character*6 direct ++ integer nfil,nnn,i,natms,imcon,idnode,levcfg ++ real(8) engcfg ++ ++c node zero handles i/o ++ ++ if(idnode.eq.0)then ++ ++c read configuration data from configuration file on proc 0 ++ ++ write(tail,'(i4.4)')nnn ++ open(nfil,file=direct//'/'//fnam//tail,form='formatted') ++ ++ read(nfil,*) ++ read(nfil,'(3i10,g20.12)')levcfg,imcon,natms,engcfg ++ buffer(1)=dble(levcfg) ++ buffer(2)=dble(imcon) ++ buffer(3)=dble(natms) ++ buffer(4)=engcfg ++ if(imcon.gt.0) read(nfil,'(3f20.12)') cell ++ do i=1,9 ++ buffer(i+4)=cell(i) ++ enddo ++ call gdsum(buffer(1),13,buffer(14)) ++ ++ do i=1,natms ++ ++ read(nfil,'(a8)') atmnam(i) ++ read(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ ++ enddo ++ ++ close (nfil) ++ ++ else ++ ++c gather data from configuration file on procs > 0 ++ ++ do i=1,13 ++ buffer(i)=0.d0 ++ enddo ++ call gdsum(buffer(1),13,buffer(14)) ++ ++ levcfg=nint(buffer(1)) ++ imcon=nint(buffer(2)) ++ natms=nint(buffer(3)) ++ engcfg=buffer(4) ++ do i=1,9 ++ cell(i)=buffer(i+4) ++ enddo ++ do i=1,natms ++ xxx(i)=0.d0 ++ yyy(i)=0.d0 ++ zzz(i)=0.d0 ++ enddo ++ ++ endif ++ ++c global gather of atomic coordinates ++ ++ call gdsum(xxx,natms,buffer) ++ call gdsum(yyy,natms,buffer) ++ call gdsum(zzz,natms,buffer) ++ ++ return ++ end subroutine read_reference_config ++ ++ subroutine store_config(lsave,idnode,mxnode,natms,strold,celold, ++ x xold,yold,zold,vxold,vyold,vzold,fxold,fyold,fzold) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for storing the current ++c configuration ++c ++c copyright daresbury laboratory ++c author w.smith sep 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical lsave ++ integer idnode,mxnode,natms,iatm0,iatm1,i,j ++ ++ real(8) strold(9),celold(9) ++ real(8) xold(msatms),yold(msatms),zold(msatms) ++ real(8) vxold(msatms),vyold(msatms),vzold(msatms) ++ real(8) fxold(msatms),fyold(msatms),fzold(msatms) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if(lsave)then ++ ++c save cell and stress tensors ++ ++ do i=1,9 ++ ++ celold(i)=cell(i) ++ strold(i)=stress(i) ++ ++ enddo ++ ++c save configuration ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ vxold(j)=vxx(i) ++ vyold(j)=vyy(i) ++ vzold(j)=vzz(i) ++ fxold(j)=fxx(i) ++ fyold(j)=fyy(i) ++ fzold(j)=fzz(i) ++ ++ enddo ++ ++ else ++ ++c restore cell and stress tensors ++ ++ do i=1,9 ++ ++ cell(i)=celold(i) ++ stress(i)=strold(i) ++ ++ enddo ++ ++c restore configuration ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxx(i)=xold(j) ++ yyy(i)=yold(j) ++ zzz(i)=zold(j) ++ vxx(i)=vxold(j) ++ vyy(i)=vyold(j) ++ vzz(i)=vzold(j) ++ fxx(i)=fxold(j) ++ fyy(i)=fyold(j) ++ fzz(i)=fzold(j) ++ ++ enddo ++ ++c replication of full configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine store_config ++ ++ subroutine check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for checking when a transition ++c has occured in a configuration ++c ++c copyright daresbury laboratory ++c author w.smith sep 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical same,safe,scan,all ++ integer idnode,mxnode,natms,imcon,nblock,mdiff ++ integer iatm0,iatm1,i,j ++ real(8) catchrad,catch2,rr2,dum,sxx,syy,szz,txx,tyy,tzz,pp2 ++ ++ all=(seek.eq.'all ') ++ ++c flag for comparing structures ++ ++ same=.true. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise search parameters ++ ++ catch2=catchrad**2 ++ ++c construct coordinate check arrays ++ ++ do i=1,9 ++ celchk(i)=cell(i) ++ enddo ++ ++c store structure in reduced coordinates (target atoms only) ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ if(all.or.atmnam(i).eq.seek)then ++ ++ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ endif ++ ++ enddo ++ ++c compare current structure with reference basin ++ ++ j=0 ++ pp2=0.d0 ++ safe=.true. ++ mdiff=ndiff ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ if(all.or.atmnam(i).eq.seek)then ++ ++c calculate separations in reduced units ++ ++ sxx=xchk(j)-xbas(j) ++ syy=ychk(j)-ybas(j) ++ szz=zchk(j)-zbas(j) ++ ++c calculate minimum image separations ++ ++ sxx=sxx-nint(sxx) ++ syy=syy-nint(syy) ++ szz=szz-nint(szz) ++ ++c set trial structure at minimum displacements from reference ++ ++ xchk(j)=xbas(j)+sxx ++ ychk(j)=ybas(j)+syy ++ zchk(j)=zbas(j)+szz ++ ++c calculate atomic separations in real coordinates ++ ++ txx=(celchk(1)*xchk(j)+celchk(4)*ychk(j)+celchk(7)*zchk(j)) ++ x -(celbas(1)*xbas(j)+celbas(4)*ybas(j)+celbas(7)*zbas(j)) ++ tyy=(celchk(2)*xchk(j)+celchk(5)*ychk(j)+celchk(8)*zchk(j)) ++ x -(celbas(2)*xbas(j)+celbas(5)*ybas(j)+celbas(8)*zbas(j)) ++ tzz=(celchk(3)*xchk(j)+celchk(6)*ychk(j)+celchk(9)*zchk(j)) ++ x -(celbas(3)*xbas(j)+celbas(6)*ybas(j)+celbas(9)*zbas(j)) ++ ++c calculate total structural difference ++ ++ rr2=txx**2+tyy**2+tzz**2 ++ pp2=max(pp2,rr2) ++ ++c identify and store the displaced atoms ++ ++ if(scan.and.rr2.ge.catch2)then ++ ++ mdiff=mdiff+1 ++ ++ if(mdiff.le.mxdiffs)then ++ ++ idabsn(mdiff)=i ++ xdiffs(mdiff)=txx ++ ydiffs(mdiff)=tyy ++ zdiffs(mdiff)=tzz ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c global check on diffs arrays ++ ++ if(scan)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'number of current diffs',i10)")mdiff ++ call error(idnode,2340) ++ ++ endif ++ ++ endif ++ ++c global transition check ++ ++ same=(pp2.lt.catch2) ++ if(mxnode.gt.1)call gstate(same) ++ ++ return ++ end subroutine check_for_transition ++ ++ subroutine check_basins(newbsn,mdiff,mxnode) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for checking that a new basin is not ++c one already known ++c ++c copyright daresbury laboratory ++c author w.smith jan 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical same ++ integer newbsn,ia,ib,ic,id,ibsn,i,j,k,mxnode,mdiff ++ ++ ibsn=1 ++ newbsn=0 ++ ib=mdiff ++ ia=ndiff+1 ++ same=.false. ++ do while(.not.same.and.ibsn.lt.numbsn) ++ ++ ic=nbsa(ibsn) ++ id=nbsb(ibsn) ++ ++ if(ib-ia.eq.id-ic)then ++ ++ same=.true. ++ ++ do k=0,ib-ia ++ ++ i=ia+k ++ j=ic+k ++ ++ if(.not.((idabsn(i).eq.idabsn(j)).and. ++ x (abs(xdiffs(i)-xdiffs(j)).lt.0.1d0).and. ++ x (abs(ydiffs(i)-ydiffs(j)).lt.0.1d0).and. ++ x (abs(zdiffs(i)-zdiffs(j)).lt.0.1d0)))same=.false. ++ ++ enddo ++ ++ endif ++ ++c check if same on all processors ++ ++ if(mxnode.gt.1)call gstate(same) ++ if(same)newbsn=ibsn ++ ++ ibsn=ibsn+1 ++ ++ enddo ++ ++c if not same - must be new basin! ++ ++ if(.not.same)newbsn=numbsn ++ ++ return ++ end subroutine check_basins ++ ++ subroutine neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, ++ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling a nudged elastic band ++c calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lneb,newlst,lneut,lnsq,stropt ++ logical lzeql,loglnk,lfcap ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,mstep ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw ++ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl ++ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nscons ++ integer ngrp,keytol,ntfree,iatm0,iatm1,iatm2,ntcons ++ integer i,j,k,n,pass,mxpass,nkinks,bsn1,bsn2,itrk ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl ++ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep ++ real(8) sprneb,opttol,hyp_units,fac,xxn,yyn,zzn,tol,cvg,dum ++ ++ data mxpass/100/ ++ ++c control variables ++ ++ stropt=.false. ++ do n=0,mxneb ++ ++ keymin(n)=0 ++ do i=1,5 ++ optk(i,n)=0.d0 ++ enddo ++ ++ enddo ++ if(lneb)numpro=-(100*bsn1+bsn2) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c read in the required start and end point configurations ++ ++ if(lneb)then ++ ++c read data for first reference structure ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,bsn1,natms,imcon,idnode,engcfg) ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c read data for second reference structure ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,bsn2,natms,imcon,idnode,engcfg) ++ ++ engbsn(2)=engcfg ++ ++ do i=1,9 ++ celchk(i)=cell(i) ++ enddo ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++ endif ++ ++c construct initial `bead' configurations in chain ++ ++ k=0 ++ do n=0,mxneb ++ ++ j=0 ++ fac=dble(n)/dble(mxneb) ++ ++c construct linear mix of cell vectors ++ ++ do i=1,9 ++ celneb(i,n)=(1.d0-fac)*celbas(i)+fac*celchk(i) ++ enddo ++ ++c construct beads by linear interpolation ++ ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ ++ xxn=xbas(j)+fac*((xchk(j)-xbas(j))-nint(xchk(j)-xbas(j))) ++ yyn=ybas(j)+fac*((ychk(j)-ybas(j))-nint(ychk(j)-ybas(j))) ++ zzn=zbas(j)+fac*((zchk(j)-zbas(j))-nint(zchk(j)-zbas(j))) ++ xneb(k)=celneb(1,n)*xxn+celneb(4,n)*yyn+celneb(7,n)*zzn ++ yneb(k)=celneb(2,n)*xxn+celneb(5,n)*yyn+celneb(8,n)*zzn ++ zneb(k)=celneb(3,n)*xxn+celneb(6,n)*yyn+celneb(9,n)*zzn ++ ++ enddo ++ ++ enddo ++ ++c start of NEB optimisation ++ ++ pass=0 ++ safe=.false. ++ do while(.not.safe.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ safe=.true. ++ mstep=nstep+pass ++ ++c calculate system forces on all beads ++ ++ call neb_system_forces ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, ++ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, ++ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, ++ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, ++ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep) ++ ++c calculate spring forces on all beads ++ ++ call neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) ++ ++c energy minimisation of each bead ++ ++ do n=0,mxneb ++ ++c construct cell vectors for nth bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate and force arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ fxx(i)=fxneb(k) ++ fyy(i)=fyneb(k) ++ fzz(i)=fzneb(k) ++ ++ enddo ++ ++c restore search direction vector if keymin > 0 ++ ++ if(keymin(n).gt.0)then ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ hhx(i)=hxneb(k) ++ hhy(i)=hyneb(k) ++ hhz(i)=hzneb(k) ++ ++ enddo ++ ++ endif ++ ++c form complete global arrays ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ if(keymin(n).gt.0) ++ x call merge(idnode,mxnode,natms,mxbuff,hhx,hhy,hhz,buffer) ++ ++ endif ++ ++c structure optimisation ++ ++ call strucopt ++ x (stropt,keymin(n),keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,10.d0*opttol,engneb(n),optk(1,n), ++ x optk(2,n),optk(3,n),optk(4,n),optk(5,n)) ++ safe=safe.and.stropt ++ stropt=.false. ++ ++c update coordinate arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xneb(k)=xxx(i) ++ yneb(k)=yyy(i) ++ zneb(k)=zzz(i) ++ hxneb(k)=hhx(i) ++ hyneb(k)=hhy(i) ++ hzneb(k)=hhz(i) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c convergence check ++ ++c$$$ if(.not.safe)then ++c$$$ ++c$$$ call error(idnode,2320) ++c$$$ ++c$$$ else ++ ++c save neb profile ++ ++ call write_profile(idnode,mxnode,natms,hyp_units) ++ ++c write neb summary ++ ++ if(idnode.eq.0)then ++ ++ if(lneb)then ++ ++ write(nrite,'(/,1x,"summary of NEB calculation",/)') ++ write(nrite,'(1x,"path and energy for state",i4, ++ x " ---> state",i4," transition")')bsn1,bsn2 ++ write(nrite,'(1x,"convergence status :",l4)')safe ++ write(nrite,'(1x,"obtained after ",i4," iterations",/)')pass ++ ++ do n=0,mxneb ++ write(nrite,'(6x,1p,2e14.6)')path(n),engneb(n)/hyp_units ++ enddo ++ ++ else ++ ++ write(nevnt,'("NEB",i10,3i6,1p,2e14.5)') ++ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, ++ x engbsn(2)/hyp_units ++ write(nrite,'(1x,"NEB",i10,3i6,1p,2e14.5)') ++ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, ++ x engbsn(2)/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++c$$$ endif ++ ++c end of NEB optimisation ++ ++ return ++ end subroutine neb_driver ++ ++ subroutine neb_system_forces ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, ++ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, ++ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, ++ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, ++ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating system forces in a nudged ++c elastic band calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,ltad ++ logical lsolva,lfree,lexcite ++ integer idnode,mxnode,natms,imcon,nstbgr,nsteql,mstep ++ integer numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw ++ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl ++ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl ++ integer iatm0,iatm1,iatm2,i,k,n,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl ++ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep ++ real(8) engord,virord ++ ++ numrdf=0 ++ ltad=.true. ++ nogofr=.false. ++ ++c dummy variables ++ ++ lsolva=.false. ++ lfree=.false. ++ lexcite=.false. ++ nsolva=0 ++ isolva=1 ++ engord=0.d0 ++ virord=0.d0 ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c calculate system forces for all beads ++ ++ do n=0,mxneb ++ ++c construct cell vectors for one bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate array for one bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ ++ enddo ++ ++c form complete global arrays ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces for one bead ++ ++ call force_manager ++ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c store configuration energy of bead ++ ++ engneb(n)=engcfg ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c allocate forces to bead atoms ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ fxneb(k)=fxx(i) ++ fyneb(k)=fyy(i) ++ fzneb(k)=fzz(i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine neb_system_forces ++ ++ subroutine neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating spring forces in a nudged ++c elastic band calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,k,n,kp,km,idnode,mxnode,natms,iatm0,iatm1,iatm2 ++ integer nkinks ++ real(8) rp2,rm2,tau2,fpar,vv0,vp1,vm1,aaa,bbb,txx,tyy,tzz ++ real(8) uxx,uyy,uzz,wxx,wyy,wzz,sxx,syy,szz,rxx,ryy,rzz ++ real(8) sprneb,fac,kink,det ++ real(8) rcella(9),rcellb(9),rcellc(9),cella(9),cellb(9),cellc(9) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c energies of first and last basins ++ ++ engneb(0)=engbsn(1) ++ engneb(mxneb)=engbsn(2) ++ ++c calculate spring tangents for all beads ++ ++ nkinks=0 ++ do n=1,mxneb-1 ++ ++ rp2=0.d0 ++ rm2=0.d0 ++ tau2=0.d0 ++ fpar=0.d0 ++ kink=0.d0 ++ vv0=engneb(n) ++ vp1=engneb(n+1) ++ vm1=engneb(n-1) ++ ++c calculate tangent vector and scalar product with system force ++ ++ if(vp1.gt.vv0.and.vv0.gt.vm1)then ++ ++ aaa=1.d0 ++ bbb=0.d0 ++ ++ else if(vp1.lt.vv0.and.vv0.lt.vm1)then ++ ++ aaa=0.d0 ++ bbb=1.d0 ++ ++ else if(vp1.gt.vm1)then ++ ++ aaa=max(abs(vp1-vv0),abs(vv0-vm1)) ++ bbb=min(abs(vp1-vv0),abs(vv0-vm1)) ++ ++ else ++ ++ aaa=min(abs(vp1-vv0),abs(vv0-vm1)) ++ bbb=max(abs(vp1-vv0),abs(vv0-vm1)) ++ ++ endif ++ ++c invert cell matrices ++ ++ do i=1,9 ++ cella(i)=celneb(i,n-1) ++ cellb(i)=celneb(i,n) ++ cellc(i)=celneb(i,n+1) ++ enddo ++ call invert(cella,rcella,det) ++ call invert(cellb,rcellb,det) ++ call invert(cellc,rcellc,det) ++ ++ j=0 ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ km=k-iatm2 ++ ++c calculate first spring vector (pbc corrected) ++ ++ sxx=rcellb(1)*xneb(k)+rcellb(4)*yneb(k)+rcellb(7)*zneb(k) ++ syy=rcellb(2)*xneb(k)+rcellb(5)*yneb(k)+rcellb(8)*zneb(k) ++ szz=rcellb(3)*xneb(k)+rcellb(6)*yneb(k)+rcellb(9)*zneb(k) ++ rxx=rcella(1)*xneb(km)+rcella(4)*yneb(km)+rcella(7)*zneb(km) ++ ryy=rcella(2)*xneb(km)+rcella(5)*yneb(km)+rcella(8)*zneb(km) ++ rzz=rcella(3)*xneb(km)+rcella(6)*yneb(km)+rcella(9)*zneb(km) ++ rxx=rxx-nint(rxx-sxx) ++ ryy=ryy-nint(ryy-syy) ++ rzz=rzz-nint(rzz-szz) ++ txx=xneb(k)- ++ x (rxx*celneb(1,n-1)+ryy*celneb(4,n-1)+rzz*celneb(7,n-1)) ++ tyy=yneb(k)- ++ x (rxx*celneb(2,n-1)+ryy*celneb(5,n-1)+rzz*celneb(8,n-1)) ++ tzz=zneb(k)- ++ x (rxx*celneb(3,n-1)+ryy*celneb(6,n-1)+rzz*celneb(9,n-1)) ++ ++c calculate second spring vector (pbc corrected) ++ ++ kp=k+iatm2 ++ rxx=rcellc(1)*xneb(kp)+rcellc(4)*yneb(kp)+rcellc(7)*zneb(kp) ++ ryy=rcellc(2)*xneb(kp)+rcellc(5)*yneb(kp)+rcellc(8)*zneb(kp) ++ rzz=rcellc(3)*xneb(kp)+rcellc(6)*yneb(kp)+rcellc(9)*zneb(kp) ++ rxx=rxx-nint(rxx-sxx) ++ ryy=ryy-nint(ryy-syy) ++ rzz=rzz-nint(rzz-szz) ++ uxx=-xneb(k)+ ++ x rxx*celneb(1,n+1)+ryy*celneb(4,n+1)+rzz*celneb(7,n+1) ++ uyy=-yneb(k)+ ++ x rxx*celneb(2,n+1)+ryy*celneb(5,n+1)+rzz*celneb(8,n+1) ++ uzz=-zneb(k)+ ++ x rxx*celneb(3,n+1)+ryy*celneb(6,n+1)+rzz*celneb(9,n+1) ++ ++ rp2=rp2+uxx*uxx+uyy*uyy+uzz*uzz ++ rm2=rm2+txx*txx+tyy*tyy+tzz*tzz ++ wxx=aaa*uxx+bbb*txx ++ wyy=aaa*uyy+bbb*tyy ++ wzz=aaa*uzz+bbb*tzz ++ taux(j)=wxx ++ tauy(j)=wyy ++ tauz(j)=wzz ++ tau2=tau2+wxx*wxx+wyy*wyy+wzz*wzz ++ fpar=fpar+wxx*fxneb(k)+wyy*fyneb(k)+wzz*fzneb(k) ++ kink=kink+txx*uxx+tyy*uyy+tzz*uzz ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=rp2 ++ buffer(2)=rm2 ++ buffer(3)=tau2 ++ buffer(4)=fpar ++ buffer(5)=kink ++ call gdsum(buffer(1),5,buffer(6)) ++ rp2=buffer(1) ++ rm2=buffer(2) ++ tau2=buffer(3) ++ fpar=buffer(4) ++ kink=buffer(5) ++ ++ endif ++ ++c check for kinking of NEB ++ ++ kink=cos(kink/sqrt(rp2*rm2)) ++ if(kink.lt.0.5d0)nkinks=nkinks+1 ++ ++c calculate final forces ++ ++ j=0 ++ k=n*iatm2 ++ tau2=sqrt(tau2) ++ fac=(sprneb*(sqrt(rp2)-sqrt(rm2))-fpar/tau2)/tau2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ fxneb(k)=fxneb(k)+fac*taux(j) ++ fyneb(k)=fyneb(k)+fac*tauy(j) ++ fzneb(k)=fzneb(k)+fac*tauz(j) ++ ++ enddo ++ ++ enddo ++ ++c abort if kinks detected ++ ++ if(nkinks.gt.0)then ++ ++ if(idnode.eq.0) ++ x write(nrite,'(1x,"number of kinks detected ",i6)')nkinks ++ call error(idnode,2350) ++ ++ endif ++ ++ return ++ end subroutine neb_spring_forces ++ ++ subroutine transition_properties ++ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl, ++ x nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree, ++ x ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth, ++ x nturn,numbsn,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, ++ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,estar,catchrad,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for analysing the NEB path and determining ++c the destination state (if not end of chain). ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,ltad,scan,same ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,pass ++ integer ntpvdw,ntshl,ntteth,nturn,i,k,n,iatm0,iatm1,iatm2 ++ integer numblock,numbsn,mdiff ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp ++ real(8) virlrc,cvgerr,estar,catchrad,hyp_units ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c analyse neb profile ++ ++ call scan_profile(nturn,estar) ++ ++c determine true new state from first maximum ++ ++ if(nturn.gt.1)then ++ ++ i=1 ++ do while(ktrn(i).ge.0) ++ i=i+1 ++ enddo ++ n=-ktrn(i) ++ ++c construct cell vectors for nth bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate force arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ ++ enddo ++ ++c now minimise structure - this is correct new state ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation ++ ++ numblock=nstep/nblock ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ if(ltad)then ++ ++c determine differences for new state (TAD only) ++ ++ scan=.true. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c set difference counters and pointers ++ ++ if(numbsn.gt.mxbsn)call error(idnode,2330) ++ ++ ndiff=mdiff ++ ++ if(numbsn.gt.1)then ++ nbsa(numbsn)=nbsb(numbsn-1)+1 ++ else ++ nbsa(numbsn)=1 ++ endif ++ ++ nbsb(numbsn)=mdiff ++ ++c save minimised starting structure as basin file ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,cfgtmp) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine transition_properties ++ ++ subroutine write_profile(idnode,mxnode,natms,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing profile file for NEB path ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ character*4 tail ++ integer idnode,mxnode,natms,i,j,k,n,iatm0,iatm1,iatm2 ++ real(8) hyp_units ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++ if(idnode.eq.0)then ++ ++c open profile data file ++ ++ if(numpro.lt.0)then ++ ++ write(tail,'(i4.4)')iabs(numpro) ++ open(npro,file='PROFILES'//'/'//'PRX'//tail//'.XY', ++ x form='formatted') ++ ++ else ++ ++ write(tail,'(i4.4)')numpro ++ open(npro,file='PROFILES'//'/'//'PRO'//tail//'.XY', ++ x form='formatted') ++ ++ endif ++ ++ endif ++ ++c calculate path ++ ++ path(0)=0.d0 ++ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(0), ++ x engneb(0)/hyp_units ++ ++ do n=1,mxneb ++ ++ path(n)=0.d0 ++ k=n*iatm2 ++ j=(n-1)*iatm2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ path(n)=(xneb(k)-xneb(j))**2+(yneb(k)-yneb(j))**2+ ++ x (zneb(k)-zneb(j))**2+path(n) ++ ++ enddo ++ ++ if(mxnode.gt.1)call gdsum(path(n),1,buffer(1)) ++ ++ path(n)=sqrt(path(n))+path(n-1) ++ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(n), ++ x engneb(n)/hyp_units ++ ++ enddo ++ ++ numpro=numpro+1 ++ ++ if(idnode.eq.0)close(npro) ++ ++ return ++ end subroutine write_profile ++ ++ subroutine scan_profile(nturn,estar) ++ ++c********************************************************************* ++c ++c dl_poly routine for analysing neb energy profile ++c ++c copyright - daresbury laboratory ++c author - w.smith january 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer, parameter :: nscan=100 ++ ++ integer i,np,n1,n2,npnts,fail,nturn ++ real(8) di,dj,rpd,uu,vv,v0,ss,estar ++ real(8), allocatable :: aa(:),dd(:),gg(:),zz(:) ++ ++c allocate working arrays ++ ++ allocate (aa(0:mxneb),dd(0:mxneb),gg(0:mxneb),zz(0:mxneb), ++ x stat=fail) ++ ++ npnts=mxneb+1 ++ n1=npnts-1 ++ n2=npnts-2 ++ ++c calculate spline coefficients ++ ++ gg(0)=0.d0 ++ dd(0)=path(1)-path(0) ++ ++ do i=1,n1-1 ++ ++ dd(i)=path(i+1)-path(i) ++ gg(i)=2.d0*(path(i+1)-path(i-1)) ++ zz(i)=6.d0*((engneb(i+1)-engneb(i))/dd(i)- ++ x (engneb(i)-engneb(i-1))/dd(i-1)) ++ ++ enddo ++ ++ gg(n1)=0.d0 ++ dd(n1)=0.d0 ++ aa(0)=0.d0 ++ aa(1)=dd(1)/gg(1) ++ ++ do i=2,n2-1 ++ ++ gg(i)=gg(i)-dd(i-1)*aa(i-1) ++ aa(i)=dd(i)/gg(i) ++ ++ enddo ++ ++ gg(n1-1)=gg(n1-1)-dd(n2-1)*aa(n2-1) ++ gg(1)=zz(1)/gg(1) ++ ++ do i=2,n1-1 ++ gg(i)=(zz(i)-dd(i-1)*gg(i-1))/gg(i) ++ enddo ++ ++ do i=1,n2-1 ++ gg(n1-i)=gg(n1-i)-aa(n1-i)*gg(npnts-i) ++ enddo ++ ++c now scan across the profile locating maxima and minima ++ ++ np=1 ++ nturn=0 ++ ss=1.d0 ++ v0=engneb(0) ++ rpd=(path(npnts-1)-path(0))/dble(nscan) ++ ++ do i=2,nscan-1 ++ ++ uu=rpd*dble(i)+path(0) ++ ++ do while(np.lt.npnts.and.uu.gt.path(np)) ++ np=np+1 ++ enddo ++ ++ di=uu-path(np-1) ++ dj=path(np)-uu ++ vv=(di*engneb(np)+dj*engneb(np-1)-di*dj* ++ x ((dd(np-1)+dj)*gg(np-1)+(dd(np-1)+di)*gg(np))/6.d0)/dd(np-1) ++ ++ if(ss.gt.0.d0.and.vv.le.v0)then ++ ++ nturn=nturn+1 ++ xtrn(nturn)=uu ++ ytrn(nturn)=vv ++ ktrn(nturn)=np ++ ++ else if(ss.lt.0.d0.and.vv.gt.v0)then ++ ++ nturn=nturn+1 ++ xtrn(nturn)=uu ++ ytrn(nturn)=vv ++ ktrn(nturn)=-np ++ ++ endif ++ ++ ss=sign(1.d0,vv-v0) ++ v0=vv ++ ++ enddo ++ ++c estimated activation energy ++ ++ i=1 ++ do while(ktrn(i).lt.0) ++ i=i+1 ++ enddo ++ estar=ytrn(i)-engbsn(1) ++ ++c deallocate working arrays ++ ++ deallocate (aa,dd,gg,zz,stat=fail) ++ ++ return ++ end subroutine scan_profile ++ ++ subroutine transition_time ++ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3, ++ x multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntrack,ntpvdw,ntshl,ntteth, ++ x ntcons,itrk,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, ++ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) ++ ++c********************************************************************* ++c ++c dl_poly routine for estimating the time of a transition ++c from a backlog of previous configurations ++c ++c copyright - daresbury laboratory ++c author - w.smith february 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ character*8 seek ++ logical same,minflg,lfcap,lneut,lnsq,loglnk,scan ++ logical lzeql,newlst ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter ++ integer ntpvdw,ntshl,ntteth,ntcons,ntrack,itrk,mdiff,pass ++ integer nback,ntry,numblock ++ real(8) alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol ++ real(8) rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep ++ real(8) volm,cfgtmp,cvgerr,eng,tol,catchrad,timhop,hyp_units ++ ++c determine starting tracking file ++ ++ nback=min(numtrk,maxtrk) ++ ++c search track files for transition ++ ++ itrk=0 ++ same=.false. ++ ++ do while(.not.same.and.itrk.le.nback) ++ ++ itrk=itrk+1 ++ ntry=mod(numtrk-itrk,maxtrk) ++ ++ call read_reference_config ++ x ('CFGTRK','TRACKS',ntrk,ntry,natms,imcon,idnode,eng) ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation (normally deactivated) ++ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ numblock=nstep/nblock ++c$$$ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, ++c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units ++c$$$ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, ++c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units ++c$$$ write(nrite,"(1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++c check if still in base state ++ ++ scan=.false. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++ enddo ++ ++ timhop=timhyp-tstep*dble(ntrack)*(dble(itrk)-0.5d0) ++ tboost=track(ntry) ++ ++ return ++ end subroutine transition_time ++ ++ subroutine scramble_velocities(idnode,natms) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for randomising velocities after a ++c transition has occured (use with identical species only) ++c ++c copyright daresbury laboratory ++c author w.smith jan 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer idnode,natms,i,j,k,m,n ++ real(8) vvv ++ ++ do j=1,10 ++ ++ do i=1,natms ++ ++ k=int(natms*duni())+1 ++ vvv=vxx(i) ++ vxx(i)=vxx(k) ++ vxx(k)=vvv ++ m=int(natms*duni())+1 ++ vvv=vyy(i) ++ vyy(i)=vyy(m) ++ vyy(m)=vvv ++ n=int(natms*duni())+1 ++ vvv=vzz(i) ++ vzz(i)=vzz(n) ++ vzz(n)=vvv ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine scramble_velocities ++ ++ subroutine hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c*********************************************************************** ++c ++c dlpoly routine for saving hyperdynamics restart data ++c ++c copyright daresbury laboratory ++c author w.smith dec 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical ltad ++ integer idnode,mxnode,natms,nsteql ++ integer iatm0,iatm1,i,j,k,n,last,ierr,netdif ++ real(8) buff(2) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c total number of atomic differences ++ ++ buff(1)=dble(ndiff) ++ call gdsum(buff(1),1,buff(2)) ++ netdif=nint(buff(1)) ++ ++ if(idnode.eq.0)then ++ ++c open hyperdynamics restart file ++ ++ open(nhrs,file="HYPREV",form="unformatted") ++ ++c write control variables ++ ++ write(nhrs)ltad,dble(numbsn),dble(numtrk),dble(numpro), ++ x dble(netdif),dble(numdark),dble(nsteql),dble(numbpd), ++ x timhyp,timres,tstop,tkeres,tboost,vbase,strres,celres ++ write(nhrs)track ++ endif ++ ++ if(ltad.and.numbsn.gt.1)then ++ ++c load basin difference data ++ ++ n=0 ++ do i=1,numbsn-1 ++ ++ do j=nbsa(i),nbsb(i) ++ ++ buffer(n+1)=dble(idabsn(j)) ++ buffer(n+2)=dble(i) ++ buffer(n+3)=xdiffs(j) ++ buffer(n+4)=ydiffs(j) ++ buffer(n+5)=zdiffs(j) ++ n=n+5 ++ ++ enddo ++ ++ enddo ++ last=n ++ ++c write basin difference data ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ ++ call csend(hyper_tag+k,buff,1,k,ierr) ++ call crecv(2*hyper_tag+k,buff,1) ++ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) ++ last=nint(buff(1))+last ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buff,1) ++ buff(1)=dble(last) ++ call csend(2*hyper_tag+k,buff,1,0,ierr) ++ call csend(3*hyper_tag+k,buffer,last,0,ierr) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)write(nhrs)(buffer(i),i=1,last) ++ call gsync() ++ ++ endif ++ ++c load reference block configuration data ++ ++ j=0 ++ k=1 ++ do i=iatm0,iatm1 ++ ++ buffer(j+1)=xres(k) ++ buffer(j+2)=yres(k) ++ buffer(j+3)=zres(k) ++ j=j+3 ++ k=k+1 ++ ++ enddo ++ last=j ++ ++c write reference block configuration data ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buff,1,k,ierr) ++ call crecv(2*hyper_tag+k,buff,1) ++ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) ++ last=nint(buff(1))+last ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buff,1) ++ buff(1)=dble(last) ++ call csend(2*hyper_tag+k,buff,1,0,ierr) ++ call csend(3*hyper_tag+k,buffer,last,0,ierr) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nhrs)(buffer(i),i=1,last) ++ close(nhrs) ++ ++ endif ++ call gsync() ++ ++ return ++ end subroutine hyper_close ++ ++ subroutine hyper_open(ltad,idnode,mxnode,natms,nsteql) ++ ++c*********************************************************************** ++c ++c dlpoly routine for reading hyperdynamics restart data ++c ++c copyright daresbury laboratory ++c author w.smith dec 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical ltad,mtad ++ integer idnode,mxnode,natms,nsteql ++ integer iatm0,iatm1,i,j,k,n,last,netdif,ierr ++ real(8) buff(1) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c restore control variables ++ ++ mtad=.true. ++ if(idnode.eq.0)then ++ ++c open hyperdynamics restart file ++ ++ open(nhrs,file="HYPOLD",form="unformatted") ++ ++ read(nhrs)mtad,(buffer(i),i=1,30) ++ read(nhrs)track ++ ++ else ++ ++ do i=1,30 ++ buffer(i)=0.d0 ++ enddo ++ track(:)=0.d0 ++ ++ endif ++ ++c check restart file is tad compatible ++ ++ call gstate(mtad) ++ if(ltad.and.(.not.mtad))call error(idnode,2341) ++ ++ call gdsum(buffer(1),31,buffer(32)) ++ ++ numbsn=nint(buffer(1)) ++ numtrk=nint(buffer(2)) ++ numpro=nint(buffer(3)) ++ netdif=nint(buffer(4)) ++ numdark=nint(buffer(5)) ++ nsteql=nint(buffer(6)) ++ numbpd=nint(buffer(7)) ++ timhyp=buffer(8) ++ timres=buffer(9) ++ tstop=buffer(10) ++ tkeres=buffer(11) ++ tboost=buffer(12) ++ vbase=buffer(13) ++ do i=1,9 ++ ++ strres(i)=buffer(i+13) ++ celres(i)=buffer(i+22) ++ ++ enddo ++ last=size(track) ++ call gdsum(track,last,buffer) ++ ++ if(ltad.and.numbsn.gt.1)then ++ ++c restore basin difference data ++ ++ last=5*netdif ++ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buffer,last,k,ierr) ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buffer,last) ++ ++ endif ++ ++ enddo ++ ++c reject nonlocal basin difference data ++ ++ j=0 ++ do i=1,last,5 ++ ++ n=nint(buffer(i)) ++ if(n.ge.iatm0.and.n.le.iatm1)then ++ ++ buffer(j+1)=buffer(i) ++ buffer(j+2)=buffer(i+1) ++ buffer(j+3)=buffer(i+2) ++ buffer(j+4)=buffer(i+3) ++ buffer(j+5)=buffer(i+4) ++ j=j+5 ++ ++ endif ++ ++ enddo ++ last=j ++ ++c unload basin difference data ++ ++ n=0 ++ nbsa(1)=1 ++ do i=1,numbsn-1 ++ ++ if(i.gt.1)nbsa(i)=n+1 ++ ++ do j=1,last,5 ++ ++ if(nint(buffer(j+1)).eq.i)then ++ ++ n=n+1 ++ idabsn(n)=nint(buffer(j)) ++ xdiffs(n)=buffer(j+2) ++ ydiffs(n)=buffer(j+3) ++ zdiffs(n)=buffer(j+4) ++ ++ endif ++ ++ enddo ++ ++ nbsb(i)=n ++ ++ enddo ++ ndiff=n ++ call gsync() ++ ++ endif ++ ++c retrieve reference block configuration data ++ ++ last=3*natms ++ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) ++ ++ do k=1,mxnode-1 ++ ++c read reference block configuration data ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buffer,last,k,ierr) ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buffer,last) ++ ++ endif ++ ++ enddo ++ ++c unload reference block configuration data ++ ++ n=1 ++ j=3*(iatm0-1) ++ do i=iatm0,iatm1 ++ ++ xres(n)=buffer(j+1) ++ yres(n)=buffer(j+2) ++ zres(n)=buffer(j+3) ++ j=j+3 ++ n=n+1 ++ ++ enddo ++ ++ if(idnode.eq.0)close(nhrs) ++ call gsync() ++ ++ return ++ end subroutine hyper_open ++ ++ subroutine bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scaling forces in a bias potential dynamics ++c simulation using hamelberg, mongan and mccammon factor ++c J. Chem. Phys. 120 (2004) 11919 ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2008 ++c ++c*********************************************************************** ++ ++ integer i,natms,mynode,keybpd ++ real(8) alpha,vmin,ebias,beta,temp,engcfg,eboost,hscale ++ real(8) engtmp ++ ++ boost=1.d0 ++ numbpd=numbpd+1 ++ ++c reset potential energy wrt base level ++ ++ if(keybpd.eq.1)then ++ engtmp=engcfg-vbase ++ else ++ engtmp=engcfg-engbsn(1) ++ endif ++ ++ if(ebias.gt.engtmp)then ++ ++c bias potental boost ++ ++ alpha=ebias*(ebias-vmin)/vmin ++ beta=1.d0/(boltz*temp*dble(natms)) ++ eboost=(ebias-engtmp)**2/(alpha+ebias-engtmp) ++ boost=exp(beta*eboost) ++ ++c bias potential forces scaling factor ++ ++ hscale=(alpha/(alpha+ebias-engtmp))**2 ++ ++c scale forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)*hscale ++ fyy(i)=fyy(i)*hscale ++ fzz(i)=fzz(i)*hscale ++ ++ enddo ++ ++ endif ++ ++c accumulative average of boost factor ++ ++ tboost=boost/dble(numbpd)+dble(numbpd-1)*tboost/dble(numbpd) ++ ++ return ++ end subroutine bpd_forces ++ ++ end module hyper_dynamics_module +diff -urN dl_class_1.9.orig/srcmod/integrator_module.f dl_class_1.9/srcmod/integrator_module.f +--- dl_class_1.9.orig/srcmod/integrator_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/integrator_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,624 @@ ++ module integrator_module ++ ++c*********************************************************************** ++c ++c dl_poly module for selecting verlet integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use error_module ++ use lf_motion_module ++ use lf_rotation1_module ++ use lf_rotation2_module ++ use pmf_module ++ use temp_scalers_module ++ use vv_motion_module ++ use vv_rotation1_module ++ use vv_rotation2_module ++ ++ contains ++ ++ subroutine lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the integration algorithm ++c to solve the the equations of motion. based on the leapfrog ++c verlet algorithm ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,safep,safeq,lcnb,lshmov,lnfic ++ integer idnode,mxnode,imcon,natms,ngrp,keyens,nscons,nofic ++ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep ++ real(8) tstep,engke,engrot,tolnce,quattol,vircon,vircom ++ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip ++ real(8) consv,conint,elrc,virlrc,virpmf ++ ++ safe=.true. ++ safeq=.true. ++ safep=.true. ++ ++ if(ngrp.eq.0) then ++ ++ if(keyens.eq.0) then ++ ++c verlet leapfrog ++ ++ call nve_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.1) then ++ ++c Evans Gaussian Temperature constraints ++ ++ call nvt_e1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.2) then ++ ++c Berendsen thermostat ++ ++ call nvt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,taut,sigma,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.3) then ++ ++c Nose-Hoover thermostat ++ ++ call nvt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) ++ ++ elseif(keyens.eq.4) then ++ ++c Berendsen thermostat and isotropic barostat ++ ++ call npt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,virtot,vircon,volm) ++ ++ else if(keyens.eq.5) then ++ ++c Nose-Hoover thermostat and isotropic barostat ++ ++ call npt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) ++ ++ else if(keyens.eq.6) then ++ ++c Berendsen thermostat and barostat (cell shape varying) ++ ++ call nst_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma, ++ x tolnce,tstep,vircon,volm) ++ ++ else if(keyens.eq.7) then ++ ++c Nose-Hoover thermostat and barostat (cell shape varying) ++ ++ call nst_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) ++ ++ elseif(keyens.eq.8) then ++ ++c Potential of mean force in NVE ++ ++ call pmflf ++ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++ endif ++ ++ elseif(ngrp.gt.0) then ++ ++c apply rigid body equations of motion ++ ++ if(keyens.eq.0) then ++ ++ if(.not.lcnb) then ++ ++ call nveq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++ else ++ ++ call nveq_2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++ endif ++ ++ elseif(keyens.eq.1) then ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ elseif(keyens.eq.2) then ++ ++ if(.not.lcnb) then ++ ++ call nvtq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++ else ++ ++ call nvtq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.3) then ++ ++ if(.not.lcnb) then ++ ++ call nvtq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++ else ++ ++ call nvtq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.4) then ++ ++ if(.not.lcnb) then ++ ++ call nptq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, ++ x vircon,volm) ++ ++ else ++ ++ call nptq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, ++ x virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.5) then ++ ++ if(.not.lcnb) then ++ ++ call nptq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,virtot,vircom,vircon,volm) ++ ++ else ++ ++ call nptq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.6) then ++ ++ if(.not.lcnb) then ++ ++ call nstq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++ else ++ ++ call nstq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++ endif ++ ++ elseif(keyens.eq.7) then ++ ++ if(.not.lcnb) then ++ ++ call nstq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,volm) ++ ++ else ++ ++ call nstq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,volm) ++ ++ endif ++ ++ else ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ endif ++ ++ endif ++ ++c check on convergence of pmf-shake ++ ++ if(ntpmf.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safep) ++ if(.not.safep) call error(idnode,438) ++ ++ endif ++ ++c check on convergence of shake ++ ++ if(ntcons.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,105) ++ ++ endif ++ ++c check on convergence of quaternion algorithm ++ ++ if(ngrp.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safeq) ++ if(.not.safeq) call error(idnode,321) ++ ++ endif ++ ++c eliminate "flying ice cube" in long simulations (Berendsen) ++ ++ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then ++ ++ if(mod(nstep,nofic).eq.0)then ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lf_integrate ++ ++ subroutine vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint,elrc, ++ x virlrc,virpmf,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the integration algorithm ++c to solve the the equations of motion. based on the velocity ++c verlet algorithm ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,safep,lcnb,lshmov,lnfic ++ integer isw,idnode,mxnode,imcon,natms,ngrp,keyens,nscons ++ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep,nofic ++ integer ntshl,keyshl ++ real(8) tstep,engke,engrot,tolnce,vircon,vircom ++ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip ++ real(8) consv,conint,elrc,virlrc,virpmf,chit_shl,sigma_shl ++ ++ if(ngrp.eq.0) then ++ ++ if(keyens.eq.0) then ++ ++c verlet leapfrog ++ ++ call nvevv_1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,engke,tolnce,vircon) ++ ++ else if(keyens.eq.1) then ++ ++c Evans Gaussian Temperature constraints ++ ++ call nvtvv_e1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,engke,tolnce,vircon) ++ ++ else if(keyens.eq.2) then ++ ++c Berendsen thermostat ++ ++ call nvtvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,taut,sigma,engke,tolnce,vircon) ++ ++ else if(keyens.eq.3) then ++ ++c Nose-Hoover thermostat ++ ++ call nvtvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntshl,keyshl,tstep,taut,sigma,chit,consv, ++ x conint,engke,tolnce,vircon,chit_shl,sigma_shl) ++ ++ elseif(keyens.eq.4) then ++ ++c Berendsen thermostat and isotropic barostat ++ ++ call nptvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,virtot,vircon,volm) ++ ++ else if(keyens.eq.5) then ++ ++c Nose-Hoover thermostat and isotropic barostat ++ ++ call nptvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp, ++ x chip,chit,consv,conint,engke,elrc,tolnce,vircon, ++ x virtot,virlrc,volm,press,chit_shl,sigma_shl) ++ ++ else if(keyens.eq.6) then ++ ++c Berendsen thermostat and barostat (cell shape varying) ++ ++ call nstvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press, ++ x elrc,virlrc,tolnce,vircon,volm) ++ ++ else if(keyens.eq.7) then ++ ++c Nose-Hoover thermostat and barostat (cell shape varying) ++ ++ call nstvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chit,consv,conint,engke,elrc,tolnce,vircon, ++ x virlrc,volm,press,chit_shl,sigma_shl) ++ ++ elseif(keyens.eq.8) then ++ ++c Potential of mean force in NVE ++ ++ call pmfvv ++ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++ endif ++ ++ elseif(ngrp.gt.0) then ++ ++c apply rigid body equations of motion ++ ++ if(keyens.eq.0) then ++ ++ if(.not.lcnb) then ++ ++ call nveqvv_1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++ else ++ ++ call nveqvv_2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.1) then ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ elseif(keyens.eq.2) then ++ ++ if(.not.lcnb) then ++ ++ call nvtqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++ else ++ ++ call nvtqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.3) then ++ ++ if(.not.lcnb) then ++ ++ call nvtqvv_h1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, ++ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, ++ x sigma_shl) ++ ++ else ++ ++ call nvtqvv_h2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, ++ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, ++ x sigma_shl) ++ ++ endif ++ ++ elseif(keyens.eq.4) then ++ ++ if(.not.lcnb) then ++ ++ call nptqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++ else ++ ++ call nptqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.5) then ++ ++ if(.not.lcnb) then ++ ++ call nptqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virtot,virlrc,vircom,volm,press,chit_shl, ++ x sigma_shl) ++ ++ else ++ ++ call nptqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virtot,virlrc,volm,press,chit_shl, ++ x sigma_shl) ++ ++ endif ++ ++ elseif(keyens.eq.6) then ++ ++ if(.not.lcnb) then ++ ++ call nstqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, ++ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++ else ++ ++ call nstqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, ++ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++ endif ++ ++ elseif(keyens.eq.7) then ++ ++ if(.not.lcnb) then ++ ++ call nstqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++ else ++ ++ call nstqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) ++ ++ endif ++ ++ else ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ endif ++ ++ endif ++ ++c check on convergence of pmf-shake ++ ++ if(ntpmf.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safep) ++ if(.not.safep) call error(idnode,438) ++ ++ endif ++ ++c check on convergence of shake ++ ++ if(ntcons.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,105) ++ ++ endif ++ ++c eliminate "flying ice cube" in long simulations (Berendsen) ++ ++ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then ++ ++ if(mod(nstep,nofic).eq.0)then ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine vv_integrate ++ ++ end module integrator_module +diff -urN dl_class_1.9.orig/srcmod/inversion_module.f dl_class_1.9/srcmod/inversion_module.f +--- dl_class_1.9.orig/srcmod/inversion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/inversion_module.f 2011-08-16 14:42:52.000000000 +0200 +@@ -0,0 +1,828 @@ ++ module inversion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining inversion potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted - w. smith jun 2008 : solvation, free energy, excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prminv(:,:) ++ integer, allocatable :: listinv(:,:) ++ integer, allocatable :: numinv(:),keyinv(:),lstinv(:,:) ++ ++ save prminv,listinv,numinv,keyinv,lstinv ++ ++ contains ++ ++ subroutine alloc_inv_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prminv(mxtinv,mxpinv),stat=fail(1)) ++ allocate (numinv(mxtmls),stat=fail(2)) ++ allocate (keyinv(mxtinv),stat=fail(3)) ++ allocate (lstinv(mxtinv,4),stat=fail(4)) ++ allocate (listinv(mxinv,5),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1120) ++ enddo ++ ++ do i=1,mxtmls ++ numinv(i)=0 ++ enddo ++ ++ end subroutine alloc_inv_arrays ++ ++ subroutine define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining inversion angle potentials ++c note: includes calcite planar potential which is not strictly ++c an inversion potential and is different in implementation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,ninver,nsite,ntmp,inv,inv1,i ++ integer iatm1,iatm2,iatm3,iatm4,isite1,isite2,isite3,isite4 ++ integer ia,ja,idum ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numinv(itmols)=numinv(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of inversion terms', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,/,1x,'inversion potential details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'index',5x,'f-const',7x,'angle',/)") ++ endif ++ ++ inv1=numinv(itmols) ++ do inv=1,inv1 ++ ++c read inversion potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ iatm4=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ isite4=nsite-numsit(itmols)+iatm4 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3)*lfzsit(isite4).ne.0)then ++ ++ numinv(itmols)=numinv(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ ninver=ninver+1 ++ ++ if(ninver.gt.mxtinv)call error(idnode,73) ++ ++ if(keyword(1:4).eq.'harm')then ++ keyinv(ninver)=1 ++ elseif(keyword(1:4).eq.'hcos')then ++ keyinv(ninver)=2 ++ elseif(keyword(1:4).eq.'plan')then ++ keyinv(ninver)=3 ++ elseif(keyword(1:4).eq.'calc')then ++ keyinv(ninver)=4 ++ else ++ if(idnode.eq.0)write(nrite,*)record ++ call error(idnode,449) ++ endif ++ ++ lstinv(ninver,1)=iatm1 ++ lstinv(ninver,2)=iatm2 ++ lstinv(ninver,3)=iatm3 ++ lstinv(ninver,4)=iatm4 ++ prminv(ninver,1)=dblstr(record,lenrec,idum) ++ prminv(ninver,2)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstinv(ninver,ia),ia=1,4), ++ x (prminv(ninver,ja),ja=1,mxpinv) ++ ++c convert energies to internal units and angles to radians ++ ++ prminv(ninver,1)=prminv(ninver,1)*engunit ++ ++ if(keyinv(ninver).eq.2)then ++ ++ prminv(ninver,2)=cos(prminv(ninver,2)*(pi/180.d0)) ++ ++ elseif(keyinv(ninver).eq.4)then ++ ++ prminv(ninver,2)=prminv(ninver,2)*engunit ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_inversions ++ ++ subroutine invfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating inversion energy and force ++c terms in molecular dynamics. ++c ++c copyright - daresbury laboratory 1996 ++c author - w. smith may 1996 ++c modified - w.smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lcalcite ++ logical idrive,jdrive,kdrive,ldrive ++ integer idnode,imcon,mxnode,ntinv,fail1,fail2 ++ integer fail3,inv1,inv2,i,ii,ia,id,kk,ib,ic ++ real(8) strs(6),strs_loc(6) ++ real(8) xab,yab,zab,rab2,rrab,xac,yac,zac,rac2,rrac,xad,yad ++ real(8) zad,rad2,rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx ++ real(8) vby,vbz,rvb,wwb,ucx,ucy,ucz,ucn,vcx,vcy,vcz,rvc,wwc ++ real(8) udx,udy,udz,udn,vdx,vdy,vdz,vdn,rvd,wwd,cosb,cosc ++ real(8) cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd,rucd,rucb ++ real(8) rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc,fax,fay,faz ++ real(8) fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz,vbn,vcn,ruc,rud ++ real(8) uuu,uu2,uun,uux,uuy,uuz,enginv,virinv,omega,gamma ++ real(8) gamvir ++ ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdac(:),ydac(:),zdac(:) ++ real(8), allocatable :: xdad(:),ydad(:),zdad(:) ++ ++ data fail1,fail2,fail3/0,0,0/ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdac(msbad),ydac(msbad),zdac(msbad),stat=fail2) ++ allocate (xdad(msbad),ydad(msbad),zdad(msbad),stat=fail3) ++ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) ++ x call error(idnode,1130) ++ ++c check size of work arrays ++ ++ if((ntinv-mxnode+1)/mxnode.gt.msbad)call error(idnode,427) ++ ++c block indices ++ ++ inv1=(idnode*ntinv)/mxnode+1 ++ inv2=((idnode+1)*ntinv)/mxnode ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ enginv=0.d0 ++ virinv=0.d0 ++ inv_fre=0.d0 ++ inv_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(4)=.true. ++ inv_sol(:)=0.d0 ++ if(lexcite)inv_exc(:)=0.d0 ++ ++ endif ++ ++c calculate bond vectors ++ ++ ii=0 ++ do i=inv1,inv2 ++ ++ ii=ii+1 ++ ++c potential energy function type ++ ++ kk=listinv(ii,1) ++ ++c indices of bonded atoms ++ ++ ia=listinv(ii,2) ++ ib=listinv(ii,3) ++ ic=listinv(ii,4) ++ id=listinv(ii,5) ++ ++c define components of bond vectors ++ ++ xdab(ii)=xxx(ib)-xxx(ia) ++ ydab(ii)=yyy(ib)-yyy(ia) ++ zdab(ii)=zzz(ib)-zzz(ia) ++ ++ if(keyinv(kk).eq.4)then ++ ++ xdac(ii)=xxx(ic)-xxx(ib) ++ ydac(ii)=yyy(ic)-yyy(ib) ++ zdac(ii)=zzz(ic)-zzz(ib) ++ ++ xdad(ii)=xxx(id)-xxx(ib) ++ ydad(ii)=yyy(id)-yyy(ib) ++ zdad(ii)=zzz(id)-zzz(ib) ++ ++ else ++ ++ xdac(ii)=xxx(ic)-xxx(ia) ++ ydac(ii)=yyy(ic)-yyy(ia) ++ zdac(ii)=zzz(ic)-zzz(ia) ++ ++ xdad(ii)=xxx(id)-xxx(ia) ++ ydad(ii)=yyy(id)-yyy(ia) ++ zdad(ii)=zzz(id)-zzz(ia) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdac,ydac,zdac) ++ call images(imcon,0,1,ii,cell,xdad,ydad,zdad) ++ ++c loop over all specified inversions ++ ++ ii=0 ++ do i=inv1,inv2 ++ ++ ii=ii+1 ++ ++c select potential energy function type ++ ++ kk=listinv(ii,1) ++ lcalcite=(keyinv(kk).eq.4) ++ ++c define components of bond vectors ++ ++ xab=xdab(ii) ++ yab=ydab(ii) ++ zab=zdab(ii) ++ rab2=xab*xab+yab*yab+zab*zab ++ rrab=1.d0/sqrt(rab2) ++ ++ xac=xdac(ii) ++ yac=ydac(ii) ++ zac=zdac(ii) ++ rac2=xac*xac+yac*yac+zac*zac ++ rrac=1.d0/sqrt(rac2) ++ ++ xad=xdad(ii) ++ yad=ydad(ii) ++ zad=zdad(ii) ++ rad2=xad*xad+yad*yad+zad*zad ++ rrad=1.d0/sqrt(rad2) ++ ++ if(lcalcite)then ++ ++c calculate vector normal to plane ++ ++ uux=yac*zad-zac*yad ++ uuy=zac*xad-xac*zad ++ uuz=xac*yad-yac*xad ++ uun=1.d0/sqrt(uux**2+uuy**2+uuz**2) ++ uux=uun*uux ++ uuy=uun*uuy ++ uuz=uun*uuz ++ uuu=xab*uux+yab*uuy+zab*uuz ++ ++ else ++ ++c scalar products of bond vectors ++ ++ rbc=xab*xac+yab*yac+zab*zac ++ rcd=xac*xad+yac*yad+zac*zad ++ rdb=xad*xab+yad*yab+zad*zab ++ ++c calculate bond-angle-plane vectors ++ ++ ubx=xac*rrac+xad*rrad ++ uby=yac*rrac+yad*rrad ++ ubz=zac*rrac+zad*rrad ++ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) ++ ubx=ubn*ubx ++ uby=ubn*uby ++ ubz=ubn*ubz ++ rub=xab*ubx+yab*uby+zab*ubz ++ ++ vbx=xac*rrac-xad*rrad ++ vby=yac*rrac-yad*rrad ++ vbz=zac*rrac-zad*rrad ++ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) ++ vbx=vbn*vbx ++ vby=vbn*vby ++ vbz=vbn*vbz ++ rvb=xab*vbx+yab*vby+zab*vbz ++ wwb=sqrt(rub**2+rvb**2) ++ ++ ucx=xad*rrad+xab*rrab ++ ucy=yad*rrad+yab*rrab ++ ucz=zad*rrad+zab*rrab ++ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) ++ ucx=ucn*ucx ++ ucy=ucn*ucy ++ ucz=ucn*ucz ++ ruc=xac*ucx+yac*ucy+zac*ucz ++ ++ vcx=xad*rrad-xab*rrab ++ vcy=yad*rrad-yab*rrab ++ vcz=zad*rrad-zab*rrab ++ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) ++ vcx=vcn*vcx ++ vcy=vcn*vcy ++ vcz=vcn*vcz ++ rvc=xac*vcx+yac*vcy+zac*vcz ++ wwc=sqrt(ruc**2+rvc**2) ++ ++ udx=xab*rrab+xac*rrac ++ udy=yab*rrab+yac*rrac ++ udz=zab*rrab+zac*rrac ++ udn=1.d0/sqrt(udx**2+udy**2+udz**2) ++ udx=udn*udx ++ udy=udn*udy ++ udz=udn*udz ++ rud=xad*udx+yad*udy+zad*udz ++ ++ vdx=xab*rrab-xac*rrac ++ vdy=yab*rrab-yac*rrac ++ vdz=zab*rrab-zac*rrac ++ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) ++ vdx=vdn*vdx ++ vdy=vdn*vdy ++ vdz=vdn*vdz ++ rvd=xad*vdx+yad*vdy+zad*vdz ++ wwd=sqrt(rud**2+rvd**2) ++ ++c calculate inversion angle cosines ++ ++ cosb=wwb*rrab ++ cosc=wwc*rrac ++ cosd=wwd*rrad ++ ++ endif ++ ++c calculate potential energy and scalar force term ++ ++ if(keyinv(kk).eq.1)then ++ ++c key=1 for harmonic inversion potential ++ ++ thb=acos(cosb) ++ thc=acos(cosc) ++ thd=acos(cosd) ++ omega=0.5d0*prminv(kk,1)*((thb-prminv(kk,2))**2+ ++ x (thc-prminv(kk,2))**2+(thd-prminv(kk,2))**2)/3.d0 ++ gamvir=0.d0 ++ ++ gamb=0.d0 ++ if(abs(thb).gt.1.d-12) ++ x gamb=prminv(kk,1)*(thb-prminv(kk,2))/(3.d0*sin(thb)) ++ gamc=0.d0 ++ if(abs(thc).gt.1.d-12) ++ x gamc=prminv(kk,1)*(thc-prminv(kk,2))/(3.d0*sin(thc)) ++ gamd=0.d0 ++ if(abs(thd).gt.1.d-12) ++ x gamd=prminv(kk,1)*(thd-prminv(kk,2))/(3.d0*sin(thd)) ++ ++ else if(keyinv(kk).eq.2)then ++ ++c key=2 for harmonic cosine inversion potential ++ ++ omega=0.5d0*prminv(kk,1)*((cosb-prminv(kk,2))**2+ ++ x (cosc-prminv(kk,2))**2+(cosb-prminv(kk,2))**2)/3.d0 ++ gamvir=0.d0 ++ ++ gamb=-prminv(kk,1)*(cosb-prminv(kk,2))/3.d0 ++ gamc=-prminv(kk,1)*(cosc-prminv(kk,2))/3.d0 ++ gamd=-prminv(kk,1)*(cosd-prminv(kk,2))/3.d0 ++ ++ else if(keyinv(kk).eq.3)then ++ ++c key=3 for planar inversion potentials ++ ++ omega=prminv(kk,1)*((1.d0-cosb)+(1.d0-cosc)+(1.d0-cosd))/3.d0 ++ gamvir=0.d0 ++ ++ gamb=prminv(kk,1)/3.d0 ++ gamc=prminv(kk,1)/3.d0 ++ gamd=prminv(kk,1)/3.d0 ++ ++ else if(keyinv(kk).eq.4)then ++ ++c key=4 for planar calcite potential ++ ++ uu2=uuu*uuu ++ omega=uu2*(prminv(kk,1)+prminv(kk,2)*uu2) ++ gamvir=uu2*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) ++ gamma=-uuu*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ gamvir=0.d0 ++ gamb=0.d0 ++ gamc=0.d0 ++ gamd=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listinv(ii,2) ++ ib=listinv(ii,3) ++ ic=listinv(ii,4) ++ id=listinv(ii,5) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ldrive=driven(ltype(id)) ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)then ++ inv_exc(atmolt(ia))=inv_exc(atmolt(ia))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ inv_fre=inv_fre-omega ++ omega=lambda1*omega ++ gamb=lambda1*gamb ++ gamc=lambda1*gamc ++ gamd=lambda1*gamd ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ inv_fre=inv_fre+omega ++ omega=lambda2*omega ++ gamb=lambda2*gamb ++ gamc=lambda2*gamc ++ gamd=lambda2*gamd ++ ++ endif ++ ++ endif ++ ++c calculate bond and u,v scalar products ++ ++ if(.not.lcalcite)then ++ ++ rubc=xab*ucx+yab*ucy+zab*ucz ++ rubd=xab*udx+yab*udy+zab*udz ++ rucd=xac*udx+yac*udy+zac*udz ++ rucb=xac*ubx+yac*uby+zac*ubz ++ rudb=xad*ubx+yad*uby+zad*ubz ++ rudc=xad*ucx+yad*ucy+zad*ucz ++ ++ rvbc=xab*vcx+yab*vcy+zab*vcz ++ rvbd=xab*vdx+yab*vdy+zab*vdz ++ rvcd=xac*vdx+yac*vdy+zac*vdz ++ rvcb=xac*vbx+yac*vby+zac*vbz ++ rvdb=xad*vbx+yad*vby+zad*vbz ++ rvdc=xad*vcx+yad*vcy+zad*vcz ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ enginv=enginv+omega ++ virinv=virinv+gamvir ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ inv_sol(atmolt(ia))=inv_sol(atmolt(ia))+omega ++ endif ++ ++c calculate atomic forces ++ ++ if(lcalcite)then ++ ++ fax=-gamma*uux ++ fay=-gamma*uuy ++ faz=-gamma*uuz ++ ++ fcx=gamma*uun*((yad*zab-zad*yab)-uuu*(yad*uuz-zad*uuy)) ++ fcy=gamma*uun*((zad*xab-xad*zab)-uuu*(zad*uux-xad*uuz)) ++ fcz=gamma*uun*((xad*yab-yad*xab)-uuu*(xad*uuy-yad*uux)) ++ ++ fdx=gamma*uun*((yab*zac-zab*yac)-uuu*(zac*uuy-yac*uuz)) ++ fdy=gamma*uun*((zab*xac-xab*zac)-uuu*(xac*uuz-zac*uux)) ++ fdz=gamma*uun*((xab*yac-yab*xac)-uuu*(yac*uux-xac*uuy)) ++ ++ fbx=-(fax+fcx+fdx) ++ fby=-(fay+fcy+fdy) ++ fbz=-(faz+fcz+fdz) ++ ++c stress tensor calculation for calcite terms ++ ++ strs(1)=strs(1)+uuu*gamma*uux*uux ++ strs(2)=strs(2)+uuu*gamma*uux*uuy ++ strs(3)=strs(3)+uuu*gamma*uux*uuz ++ strs(4)=strs(4)+uuu*gamma*uuy*uuy ++ strs(5)=strs(5)+uuu*gamma*uuy*uuz ++ strs(6)=strs(6)+uuu*gamma*uuz*uuz ++ ++ else ++ ++ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) ++ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) ++ x -rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) ++ x +rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) ++ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) ++ x -rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) ++ x +rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) ++ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) ++ x -rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) ++ x +rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) ++ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) ++ x -rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) ++ x +rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) ++ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) ++ x -rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) ++ x +rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) ++ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) ++ x -rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) ++ x +rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) ++ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) ++ x -rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) ++ x +rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) ++ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) ++ x -rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) ++ x +rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) ++ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) ++ x -rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) ++ x +rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fax=-(fbx+fcx+fdx) ++ fay=-(fby+fcy+fdy) ++ faz=-(fbz+fcz+fdz) ++ ++c stress tensor calculation for inversion terms ++ ++ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx ++ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx ++ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx ++ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy ++ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz ++ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)+fbx ++ fyy(ib)=fyy(ib)+fby ++ fzz(ib)=fzz(ib)+fbz ++ ++ fxx(ic)=fxx(ic)+fcx ++ fyy(ic)=fyy(ic)+fcy ++ fzz(ic)=fzz(ic)+fcz ++ ++ fxx(id)=fxx(id)+fdx ++ fyy(id)=fyy(id)+fdy ++ fzz(id)=fzz(id)+fdz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc+gamvir ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)+fbx ++ fyy_loc(ib)=fyy_loc(ib)+fby ++ fzz_loc(ib)=fzz_loc(ib)+fbz ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx ++ fyy_loc(ic)=fyy_loc(ic)+fcy ++ fzz_loc(ic)=fzz_loc(ic)+fcz ++ ++ fxx_loc(id)=fxx_loc(id)+fdx ++ fyy_loc(id)=fyy_loc(id)+fdy ++ fzz_loc(id)=fzz_loc(id)+fdz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx ++ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx ++ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx ++ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy ++ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz ++ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,449) ++ ++c sum contributions over all nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=enginv ++ buffer(2)=virinv ++ buffer(3)=inv_fre ++ buffer(4)=inv_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ enginv=buffer(1) ++ virinv=buffer(2) ++ inv_fre=buffer(3) ++ inv_vir=buffer(4) ++ ++ if(lsolva)then ++ ++ call gdsum(inv_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(inv_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdac,ydac,zdac,stat=fail2) ++ deallocate (xdad,ydad,zdad,stat=fail3) ++ ++ return ++ end subroutine invfrc ++ ++ end module inversion_module +diff -urN dl_class_1.9.orig/srcmod/lf_motion_module.f dl_class_1.9/srcmod/lf_motion_module.f +--- dl_class_1.9.orig/srcmod/lf_motion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_motion_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,2994 @@ ++ module lf_motion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for verlet leap frog integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use property_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration. ++c Must be used in conjunction with integration algorithms ++c ++c assume bond vectors dxx,dyy,dzz are input ++c dxx =xxx(i) - xxx(j) etc ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith august 1992. ++c amended - t. forester march 1994. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k ++ real(8) tolnce,tstep,vircon,stresh,dxx,dyy,dzz,strs1,strs2 ++ real(8) strs3,strs5,strs6,strs9,tstep2,esig,esig1 ++ real(8) dis,amti,amtj,omega2,gamma,gammi,gammj,dli,dlj ++ real(8) dxt,dyt,dzt,txx,tyy,tzz,xxt,yyt,zzt ++ ++ dimension stresh(9) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ ++c test size of work arrays ++ ++ safe=.true. ++ if(mxxdf.lt.nscons)safe=.false. ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,412) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c accumulators for stress tensor ++ ++ vircon=0.d0 ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dis=prmcon(listcon(k,1)) ++ esig1=abs(dxt(k)**2+dyt(k)**2+dzt(k)**2-dis**2)/dis ++ esig=max(esig,esig1) ++ ++ enddo ++ ++ esig=esig*0.5d0 ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c bypass calculations if all tolerances satisfied ++ ++ if(.not.safe)then ++ ++c initialise increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c set constraint parameters ++ ++ dis=prmcon(listcon(k,1)) ++ omega2=dis*dis ++ amti= tstep2/weight(i) ++ amtj=-tstep2/weight(j) ++ ++ if(lstfrz(i).ne.0) amti=0.d0 ++ if(lstfrz(j).ne.0) amtj=0.d0 ++ ++c constraint force parameter ++ ++ gamma=(omega2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/ ++ x (-2.d0*(amti-amtj)* ++ x (dxx(k)*dxt(k)+dyy(k)*dyt(k)+dzz(k)*dzt(k))) ++ ++c accumulate bond virial ++ ++ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1-gamma*dxx(k)*dxx(k) ++ strs2=strs2-gamma*dxx(k)*dyy(k) ++ strs3=strs3-gamma*dxx(k)*dzz(k) ++ strs5=strs5-gamma*dyy(k)*dyy(k) ++ strs6=strs6-gamma*dyy(k)*dzz(k) ++ strs9=strs9-gamma*dzz(k)*dzz(k) ++ ++c improve approximate atomic positions ++ ++ gammi=-gamma*amti ++ xxt(i)=xxt(i)+dxx(k)*gammi ++ yyt(i)=yyt(i)+dyy(k)*gammi ++ zzt(i)=zzt(i)+dzz(k)*gammi ++ ++ gammj=-gamma*amtj ++ xxt(j)=xxt(j)+dxx(k)*gammj ++ yyt(j)=yyt(j)+dyy(k)*gammj ++ zzt(j)=zzt(j)+dzz(k)*gammj ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ xxx(i)=xxx(i)+xxt(i)*dli ++ yyy(i)=yyy(i)+yyt(i)*dli ++ zzz(i)=zzz(i)+zzt(i)*dli ++ xxx(j)=xxx(j)+xxt(j)*dlj ++ yyy(j)=yyy(j)+yyt(j)*dlj ++ zzz(j)=zzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit for non-convergence ++ ++ if(.not.safe)return ++ ++c complete stress tensor ++ ++ stresh(1)=strs1 ++ stresh(2)=strs2 ++ stresh(3)=strs3 ++ stresh(4)=strs2 ++ stresh(5)=strs5 ++ stresh(6)=strs6 ++ stresh(7)=strs3 ++ stresh(8)=strs6 ++ stresh(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdshake_1 ++ ++ subroutine nve_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE ++c ++c parallel replicated data version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c amended - t.forester sept 1994 ++c amended - t.forester dec 1994 : block data ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 ++ integer iatm1,i,j,k ++ real(8) engke,tolnce,tstep,vircon,strkin,rstep ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(7) ++ ++c allocate working arrays ++ ++ do i=1,7 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) ++ do i=1,7 ++ if(fail(i).ne.0)call error(idnode,1380) ++ enddo ++ ++ safe=.false. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c move atoms by leapfrog algorithm ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++c calculate velocity correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep ++ ++ enddo ++ ++ endif ++ ++c calculate full timestep velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=0.5d0*(vxx(i)+uxx(i)) ++ vyy(i)=0.5d0*(vyy(i)+uyy(i)) ++ vzz(i)=0.5d0*(vzz(i)+uzz(i)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nve_1 ++ ++ subroutine nvt_e1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Evans ++c thermostat. ++c Comp. Phys. reports 1, 299, (1984) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond CONSTRAINTS. ++c ++c copyright - daresbury laboratory ++c author - t forester july 1993 ++c amended - w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 ++ integer iatm1,i,j,k,iter,mxiter ++ real(8) engke,tolnce,tstep,vircon,strkin ++ real(8) rstep,chit,viracc,strcon,vdotf ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),fail(7) ++ ++c allocate working arrays ++ ++ do i=1,7 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) ++ do i=1,7 ++ if(fail(i).ne.0)call error(idnode,1390) ++ enddo ++ ++ safe=.false. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial positions and velocities ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c begin temperature control iteration ++ ++ mxiter=3 ++ if(ntcons.eq.0)mxiter=2 ++ chit=0.d0 ++ ++ do iter=1,mxiter ++ ++c move atoms by leapfrog algorithm ++ ++ j=0 ++ ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxo(j)+tstep*(rmass(i)*fxx(i)-chit*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(rmass(i)*fyy(i)-chit*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(rmass(i)*fzz(i)-chit*vzz(i)) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c merge configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ chit=vdotf/engke ++ engke=0.5d0*engke ++ ++c end of thermal constraint iteration ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_e1 ++ ++ subroutine nvt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,taut,sigma,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester may 1993 ++c amended : t.forester sept 1994 ++c amended : t.forester dec 1994 : block data ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail ++ integer iatm0,iatm1,i,j,k,maxit,iter ++ real(8) engke,taut,sigma,tolnce,tstep,vircon,strkin,viracc ++ real(8) rstep,rtsq,chit0,strcon ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(8),strcon(9) ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1400) ++ enddo ++ ++ safe=.false. ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate kinetic energy at full timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=3 ++ if(ntcons.eq.0) maxit=maxit-1 ++ do iter=1,maxit ++ ++c temperature scaling coefficient - taut is the decay constant ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c unconstrained new positions with thermostat ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++c store uncorrected positions ++ ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c calculate kinetic energy ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate velocity at the full step ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_b1 ++ ++ subroutine nvt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c copyright - daresbury laboratory ++c author - t. forester may 1993 ++c amended - w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,i,j,k ++ integer iatm0,iatm1,maxit,iter ++ real(8) chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon ++ real(8) strkin,rstep,rtsq,qmass,chitp,chit0,viracc ++ real(8) chitnew,strcon ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(8),strcon(9) ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1410) ++ enddo ++ ++ safe=.false. ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate velocities at full time step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy at full time step ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c propagate chit ++ ++ chitp=2.d0*(engke-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=4 ++ if(ntcons.eq.0) maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++c store uncorrected positions ++ ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chit ++ ++ chitp=2.d0*(engke-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update thermostat ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ consv=conint+0.5d0*qmass*chit0**2 ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_h1 ++ ++ subroutine npt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and isotropic pressure control ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester dec 1993 ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter ++ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep ++ real(8) virtot,vircon,volm,strkin,beta,volm0,cell0 ++ real(8) elrc0,virlrc0,rstep,rtsq,psyst,chip0,scale ++ real(8) chit0,viracc,strcon ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),cell0(9),fail(8),strcon(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1420) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume and long range corrections ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1430) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial cell vectors ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate velocity at full timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy at current timestep ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c pressure control variable - taup is pressure relaxation time ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c temperature scaling coefficient - taut is temperature relaxation time ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0)maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+scale*xxo(j) ++ yyy(i)=tstep*uyy(i)+scale*yyo(j) ++ zzz(i)=tstep*uzz(i)+scale*zzo(j) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell tensor ++ ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chip and chit ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update volume ++ ++ volm=volm*chip0 ++ ++c scale cell vectors - isotropic ++ ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for use with tethers) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=scale ++ eta(5)=scale ++ eta(9)=scale ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine npt_b1 ++ ++ subroutine npt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat+piston. ++c ++c reference: Melchionna, Ciccotti and Holian, ++c Mol Phys 1993, 78, p533 ++c ++c parallel replicated data version ++c ++c for systems using bond constraints (using atomic pressure) ++c ++c copyright daresbury laboratory 1995 ++c author - s. melchionna april 1995 ++c and - t. forester april 1995 ++c amended - w. smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer i,j,k,iatm0,iatm1,fail,maxit,iter ++ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press ++ real(8) taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm ++ real(8) strcon,volm0,elrc0,virlrc0,rstep,rtsq,qmass ++ real(8) chipnew,chitp,chitnew,chit0,volnew,scale,viracc,vold ++ real(8) cons1,cons2,cons3,strkin,cell0 ++ real(8) pmass,totmas,chipp,chip0,com,vom ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strcon(9),fail(8),strkin(9),com(3),vom(3),cell0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1440) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1450) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate velocity at the full step ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c propagate chip ++ ++ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- ++ x chit*chip ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c propagate chit ++ ++ chitp=(2.d0*(engke-sigma)+pmass*chip**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0) maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell tensor ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chip and chit ++ ++ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++ chitp=(2.d0*(engke-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=chipnew ++ eta(5)=chipnew ++ eta(9)=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ cons3=0.5d0*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine npt_h1 ++ ++ subroutine nst_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and anisotropic pressure control ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester december 1993 ++c amended - w. smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons,mode ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter ++ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep ++ real(8) vircon,volm,beta,volm0,elrc0,virlrc0,rstep,rtsq,chit0 ++ real(8) viracc,strkin,strcon,cell0,stres0,uni ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),cell0(9),fail(8),stres0(9),uni(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data beta/7.3728d-3/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1460) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1470) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store original cell vectors and stress tensor ++ ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c current estimate of stres tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i) ++ enddo ++ ++c initial estimate of eta matrix and chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0)maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+ ++ x eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) ++ yyy(i)=tstep*uyy(i)+ ++ x eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) ++ zzz(i)=tstep*uzz(i)+ ++ x eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell parameters ++ ++ call mat_mul(eta,cell0,cell) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i) ++ enddo ++ ++c improved calculation of eta matrix and chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c end of thermostat and barostat iterations ++ ++ enddo ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust cell vectors - anisotropic ++ ++ call mat_mul(eta,cell0,cell) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nst_b1 ++ ++ subroutine nst_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat+piston. ++c ++c Parrinello - Rahman type : changing cell shape. ++c ++c reference: Melchionna, Ciccotti and Holian, ++c Mol Phys 1993, 78, p533 ++c ++c parallel replicated data version ++c ++c for systems using bond constraints (using atomic pressure) ++c ++c copyright daresbury laboratory 1995 ++c author - t. forester june 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter,mode ++ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press ++ real(8) taup,taut,sigma,temp,tolnce,tstep,vircon,volm ++ real(8) strcon,strkin,etanew,eta0,cell0,volm0,elrc0,virlrc0 ++ real(8) rstep,rtsq,pmass,qmass,totmas,com,vom,uni,fac ++ real(8) chitp,chitnew,chit0,xxa,yya,zza,etadot ++ real(8) viracc,cons1,cons2,cons3,vold,stres0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),fail(8),com(3),vom(3) ++ dimension etanew(9),eta0(9),cell0(9),stres0(9),uni(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data newjob/.true./,uni/1.d0,3*0.d0,1.d0,3*0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1480) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1490) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store original cell vectors and stress tensor ++ ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate position at current time step ++ ++ xxx(i)=xxo(j)+tstep*(vxo(j)+tstep*rmass(i)*fxx(i)) ++ yyy(i)=yyo(j)+tstep*(vyo(j)+tstep*rmass(i)*fyy(i)) ++ zzz(i)=zzo(j)+tstep*(vzo(j)+tstep*rmass(i)*fzz(i)) ++ ++c estimate velocity at the full step ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c initial estimate of stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i) ++ enddo ++ ++c propagation of eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0) maxit=maxit-1 ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(eta0(1)+chit0)*vxx(i)- ++ x eta0(4)*vyy(i)-eta0(7)*vzz(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(eta0(5)+chit0)*vyy(i)- ++ x eta0(2)*vxx(i)-eta0(8)*vzz(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(eta0(9)+chit0)*vzz(i)- ++ x eta0(3)*vxx(i)-eta0(6)*vyy(i)) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) ++ yya=(yyy(i)+yyo(j))*0.5d0-com(2) ++ zza=(zzz(i)+zzo(j))*0.5d0-com(3) ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x etanew(1)*xxa+etanew(4)*yya+etanew(7)*zza) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x etanew(2)*xxa+etanew(5)*yya+etanew(8)*zza) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x etanew(3)*xxa+etanew(6)*yya+etanew(9)*zza) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell parameters ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,etanew) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i) ++ enddo ++ ++c improved prediction of eta ++ ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c improved prediction of chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust cell vectors - anisotropic ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,eta) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=0.5d0*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nst_h1 ++ ++ end module lf_motion_module +diff -urN dl_class_1.9.orig/srcmod/lf_rotation1_module.f dl_class_1.9/srcmod/lf_rotation1_module.f +--- dl_class_1.9.orig/srcmod/lf_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_rotation1_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,5315 @@ ++ module lf_rotation1_module ++ ++c*********************************************************************** ++c ++c dl_poly module 1 for verlet leap frog rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use lf_motion_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to update the quaternion arrays as part of ++c the leapfrog algorithm ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c based on - t.forester oct. 1993 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safeq ++ integer igrp1,igrp2,jg,itq,ig ++ real(8) qn0,qn1,qn2,qn3,qn0a,qn1a,qn2a,qn3a,qn0b,qn1b,qn2b,qn3b ++ real(8) rnorm,tstep,quattol,eps ++ real(8) opx(msgrp),opy(msgrp),opz(msgrp) ++ real(8) oqx(msgrp),oqy(msgrp),oqz(msgrp) ++ ++ jg=0 ++ safeq=.true. ++ ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c first iteration of new quaternions (lab fixed) ++ ++ qn0=q0(ig)+(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn1=q1(ig)+( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn2=q2(ig)+( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn3=q3(ig)+(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) ++ x *tstep*pt5 ++ ++ qn0b=0.d0 ++ qn1b=0.d0 ++ qn2b=0.d0 ++ qn3b=0.d0 ++ ++ itq=0 ++ eps=1.0d9 ++ do while((itq.lt.mxquat).and.(eps.gt.quattol)) ++ ++ itq=itq+1 ++ ++ qn0a=pt5*(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) ++ x +pt5*(-qn1*oqx(jg)-qn2*oqy(jg)-qn3*oqz(jg)) ++ qn1a=pt5*( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) ++ x + pt5*( qn0*oqx(jg)-qn3*oqy(jg)+qn2*oqz(jg)) ++ qn2a=pt5*( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) ++ x + pt5*( qn3*oqx(jg)+qn0*oqy(jg)-qn1*oqz(jg)) ++ qn3a=pt5*(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) ++ x + pt5*(-qn2*oqx(jg)+qn1*oqy(jg)+qn0*oqz(jg)) ++ ++ qn0=q0(ig)+pt5*qn0a*tstep ++ qn1=q1(ig)+pt5*qn1a*tstep ++ qn2=q2(ig)+pt5*qn2a*tstep ++ qn3=q3(ig)+pt5*qn3a*tstep ++ ++ rnorm=1.d0/sqrt(qn0**2+qn1**2+qn2**2+qn3**2) ++ qn0=qn0*rnorm ++ qn1=qn1*rnorm ++ qn2=qn2*rnorm ++ qn3=qn3*rnorm ++ ++c convergence test ++ ++ eps=sqrt(((qn0a-qn0b)**2+(qn1a-qn1b)**2+(qn2a-qn2b)**2 ++ x +(qn3a-qn3b)**2)*tstep**2) ++ ++ qn0b=qn0a ++ qn1b=qn1a ++ qn2b=qn2a ++ qn3b=qn3a ++ ++ enddo ++ ++ if(itq.ge.mxquat) safeq=.false. ++ ++c store new quaternions ++ ++ q0(ig)=qn0 ++ q1(ig)=qn1 ++ q2(ig)=qn2 ++ q3(ig)=qn3 ++ ++ enddo ++ ++ return ++ end subroutine update_quaternions ++ ++ subroutine nveq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre ++ integer jg,ig,k,id,jr ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc ++ real(8) trx,try,trz,delx,dely,delz,engfke ++ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strgrp(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1500) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational rigid body motion ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) ++ ++c estimate velocity at full time step ++ ++ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c calculate rigid body kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore rigid body half timestep velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c store current angular velocity ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+delx*pt5 ++ opy(jg)=omy(ig)+dely*pt5 ++ opz(jg)=omz(ig)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omx(ig)+delx ++ uyy(ig)=omy(ig)+dely ++ uzz(ig)=omz(ig)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omx(ig)+delx*1.5d0 ++ oqy(jg)=omy(ig)+dely*1.5d0 ++ oqz(jg)=omz(ig)+delz*1.5d0 ++ ++c angular velocity at timestep n ++ ++ omx(ig)=omx(ig)+pt5*delx ++ omy(ig)=omy(ig)+pt5*dely ++ omz(ig)=omz(ig)+pt5*delz ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies - relative to c.o.m ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) ++ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) ++ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) ++ ++ return ++ end subroutine nveq_1 ++ ++ subroutine nvtq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,safeq,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer i,fail,igrp,igrp1,igrp2,ifre,ifre1,ifre2,jg,ig ++ integer j,k,jr,id,mxiter,iter,idum ++ real(8) engke,engrot,quattol,sigma,taut,tolnce,tstep,vircom ++ real(8) vircon,strkin,strgrp,rot,rstep,rtsq ++ real(8) engtrn,trx,try,trz,chit0,rgmas,engfke ++ real(8) vaa,vbb,vcc,engtot,viracc,strcon ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2,newjob ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1510) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engtot=engfke+engrot+engtrn ++ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=2 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+xxo(j) ++ yyy(i)=tstep*vyy(i)+yyo(j) ++ zzz(i)=tstep*uzz(i)+zzo(j) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c total kinetic energy ++ ++ engtot=engke+engrot ++ ++c improved prediction of chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_b1 ++ ++ subroutine nvtq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat. ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,safeq,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter ++ real(8) chit,consv,conint,engke,engrot,quattol,sigma,taut ++ real(8) tolnce,tstep,vircom,vircon,strkin,strgrp,strcon,rot ++ real(8) rstep,rtsq,qmass,engtrn,cons1,engtot,vaa,vbb,vcc ++ real(8) chit0,chitnew,chitp,viracc,rgmas,trx,try,trz,delx ++ real(8) dely,delz,engfke ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2,qmass,newjob ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1520) ++ enddo ++ ++ if(newjob)then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c propagate chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=4 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++ if(iter.eq.mxiter)then ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-chit0*gvxx(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-chit0*gvyy(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-chit0*gvzz(ig)) ++ ++c update positions ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)then ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++ endif ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ safeq=.true. ++ engrot=0.d0 ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c improved prediction of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update thermostat variable ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ cons1=0.5d0*qmass*chit0**2 ++ consv=conint+cons1 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_h1 ++ ++ subroutine nptq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, ++ x vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and barostat. ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,i,fail,igrp,igrp1,igrp2,idum,ifre,ifre1 ++ integer ifre2,j,jg,ig,jr,k,id,iter,mxiter ++ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut ++ real(8) tolnce,tstep,virtot,vircom,vircon,volm,rot,engfke,uni ++ real(8) cell0,beta,volm0,elrc0,virlrc0,rstep,rtsq ++ real(8) engtrn,trx,try,trz,chip0,scale,engtot,chit0,viracc,czero ++ real(8) rgmas,vaa,vbb,vcc,strkin,strcon,strgrp,psyst ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension fail(nnn),rot(9),cell0(9),czero(9),uni(9) ++ dimension strcon(9),strgrp(9),strkin(9) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0,igrp1,igrp2 ++ save ifre1,ifre2 ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1530) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1540) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c constraint stress tensor accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c current cell vectors ++ ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c pressure control variable - taup is the relaxation time ++ ++ engke=engfke+engtrn ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engtot=engke+engrot ++ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+scale*xxo(j) ++ yyy(i)=tstep*uyy(i)+scale*yyo(j) ++ zzz(i)=tstep*uzz(i)+scale*zzo(j) ++ ++ enddo ++ ++c estimate new cell tensor ++ ++ do i=1,9 ++ cell(i)=scale*czero(i) ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions : ++ ++ gcmx(ig)=scale*gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=scale*gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=scale*gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c total kinetic energy ++ ++ engtot=engke+engrot ++ ++c improved pressure control variable ++ ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c improved temperature scaling coefficient ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c scale cell vectors ++ ++ scale=((chip0*volm)/volm0)**(1.d0/3.d0) ++ ++ do i=1,9 ++ cell(i)=scale*cell0(i) ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nptq_b1 ++ ++ subroutine nptq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,virtot,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat and barostat (Melchionna et al variant) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter,idum ++ real(8) chip,chit,consv,conint,elrc,engke,engrot,virlrc,press ++ real(8) quattol,sigma,taup,taut,temp,tolnce,tstep,virtot,vircom ++ real(8) vircon,volm,cell0,rot,volm0,elrc0,rtsq,uni ++ real(8) virlrc0,strkin,rstep,qmass,pmass,strgrp,strcon ++ real(8) trx,try,trz,chipp,chipnew,chip0,engtot,chitp ++ real(8) chitnew,chit0,volnew,scale,viracc,rgmas ++ real(8) vaa,vbb,vcc,vold,cons1,cons2,cons3,delx,dely,delz ++ real(8) engtrn,totmas,com,vom,engfke ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension fail(nnn),rot(9),cell0(9),uni(9) ++ dimension strkin(9),strcon(9),strgrp(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1550) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1560) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c temporary stress tensor accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate velocity at full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c propagate chip ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircon-vircom-3.d0*press*volm)/pmass- ++ x chit*chip ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c propagate chit ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) ++ ++ enddo ++ ++c estimate new cell parameters ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)then ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-(chit0+chip0)* ++ x gvxx(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-(chit0+chip0)* ++ x gvyy(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-(chit0+chip0)* ++ x gvzz(ig)) ++ ++c advance positions using leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ ++ x chipnew*((gcmx(ig)+gcxo(jg))*0.5d0-com(1))) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ ++ x chipnew*((gcmy(ig)+gcyo(jg))*0.5d0-com(2))) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ ++ x chipnew*((gcmz(ig)+gczo(jg))*0.5d0-com(3))) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c improved prediction of chip ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c improved prediction of chit ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=1,9 ++ eta(i)=chipnew*uni(i) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ cons3=0.5d0*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nptq_h1 ++ ++ subroutine nstq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and barostat. (cell may change shape). ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,mode ++ integer ifre2,j,k,ig,jg,jr,id,iter,mxiter ++ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut ++ real(8) tolnce,tstep,vircom,vircon,volm,beta,uni,cell0 ++ real(8) volm0,elrc0,virlrc0,rot,rstep,rtsq,engfke ++ real(8) engtrn,trx,try,trz,engtot,chit0,rgmas ++ real(8) vaa,vbb,vcc,viracc,strkin,strcon,strgrp,stres0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strcon(9),strgrp(9),stres0(9),rot(9) ++ dimension fail(nnn),uni(9),cell0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./, beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxxdf),yyo(mxxdf),zzo(mxxdf),stat=fail(9)) ++ allocate (xx1(mxxdf),yy1(mxxdf),zz1(mxxdf),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1570) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1580) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe= (igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c temporary stress tensor accumulators and new cell ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++c construct current bond vectors - required by shake ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from coms ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c estimate kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c stress tensor of free atoms ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c estimate translational kinetic energy of rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c forces on centre of mass ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translational kinetic energy of rigid body ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c stress tensor of rigid body ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c calculate rotational kinetic energy of rigid bodies ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c find eta - taup is the relaxation time ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) ++ yyy(i)=tstep*uyy(i)+eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) ++ zzz(i)=tstep*uzz(i)+eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) ++ ++ enddo ++ ++c estimate new cell tensor ++ ++ call mat_mul(eta,cell0,cell) ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate current stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions : ++ ++ gcmx(ig)=tstep*uxx(ig)+eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+ ++ x eta(7)*gczo(jg) ++ gcmy(ig)=tstep*uyy(ig)+eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+ ++ x eta(8)*gczo(jg) ++ gcmz(ig)=tstep*uzz(ig)+eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+ ++ x eta(9)*gczo(jg) ++ ++c full step com velocity ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c complete stress tensor - add all contributions ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++c improved prediction of eta and chit ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c update cell vectors ++ ++ call mat_mul(eta,cell0,cell) ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nstq_b1 ++ ++ subroutine nstq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, ++ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, ++ x vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover like ++c thermostat and barostat. (cell may change shape). ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter,idum,mode ++ real(8) chit,conint,consv,elrc,engke,engrot,virlrc,press,quattol ++ real(8) sigma,taup,taut,temp,tolnce,tstep,vircom,vircon,volm ++ real(8) strkin,strcon,strgrp,eta0,etanew,rot,cell0,volm0,stres0 ++ real(8) elrc0,virlrc0,rstep,rtsq,qmass,pmass,totmas ++ real(8) engtrn,trx,try,trz,engtot,engfke,fac,etadot ++ real(8) chitp,chitnew,chit0,xxa,yya,zza,viracc,rgmas,uni ++ real(8) delx,dely,delz,vold,cons1,cons2,cons3 ++ real(8) vaa,vbb,vcc,chip,com,vom ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension eta0(9),etanew(9),rot(9),cell0(9),fail(nnn),uni(9) ++ dimension strkin(9),strcon(9),strgrp(9),stres0(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass,totmas ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1590) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1600) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c calculate total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise stress tensor accumulators ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate velocity at full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c estimate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c estimate rigid body translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep/gmass(id)*fmx(jg) ++ gvyy(ig)=gvyo(jg)+pt5*tstep/gmass(id)*fmy(jg) ++ gvzz(ig)=gvzo(jg)+pt5*tstep/gmass(id)*fmz(jg) ++ ++ enddo ++ ++c rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c rigid body stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rgid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velcoity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c calculate rotational kinetic energy of rigid bodies ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c propagate eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)- ++ x (chit0+eta0(1))*vxx(i)-eta0(4)*vyy(i)-eta0(7)*vzz(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)- ++ x eta0(2)*vxx(i)-(eta0(5)+chit0)*vyy(i)-eta0(8)*vzz(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)- ++ x eta0(3)*vxx(i)-eta0(6)*vyy(i)-(eta0(9)+chit0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) ++ yya=(yyy(i)+yyo(j))*0.5d0-com(2) ++ zza=(zzz(i)+zzo(j))*0.5d0-com(3) ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++ enddo ++ ++c estimate new cell parameters ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,etanew) ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas- ++ x (chit0+eta0(1))*gvxx(ig)-eta0(4)*gvyy(ig)-eta0(7)*gvzz(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas- ++ x eta0(2)*gvxx(ig)-(eta0(5)+chit0)*gvyy(ig)-eta0(8)*gvzz(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas- ++ x eta0(3)*gvxx(ig)-eta0(6)*gvyy(ig)-(eta0(9)+chit0)*gvzz(ig)) ++ ++c advance positions using leapfrog ++ ++ xxa=(gcmx(ig)+gcxo(jg))*0.5d0-com(1) ++ yya=(gcmy(ig)+gcyo(jg))*0.5d0-com(2) ++ zza=(gcmz(ig)+gczo(jg))*0.5d0-com(3) ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c full step com velocity ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++ endif ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c complete stress tensor - add all contributions ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++c improved prediction of eta and chit ++ ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=0.5d0*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nstq_h1 ++ ++ end module lf_rotation1_module +diff -urN dl_class_1.9.orig/srcmod/lf_rotation2_module.f dl_class_1.9/srcmod/lf_rotation2_module.f +--- dl_class_1.9.orig/srcmod/lf_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_rotation2_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,5007 @@ ++ module lf_rotation2_module ++ ++c*********************************************************************** ++c ++c dl_poly module 2 for verlet leap frog rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use lf_rotation1_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine nveq_2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engfke,engtrn ++ real(8) delx,dely,delz,trx,try,trz,vaa,vbb,vcc,viracc ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save newjob,igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1620) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c accumulators for constraint and virial stress tensor ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c start of shake cycle ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=1 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(j)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(j)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep/gmass(id)*fmx(jg) ++ uyy(jg)=gvyo(jg)+tstep/gmass(id)*fmy(jg) ++ uzz(jg)=gvzo(jg)+tstep/gmass(id)*fmz(jg) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)+tstep*uzz(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(uxx(jg)+gvxo(jg)) ++ gvyy(ig)=pt5*(uyy(jg)+gvyo(jg)) ++ gvzz(ig)=pt5*(uzz(jg)+gvzo(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++ opx(jg)=omxo(jg)+delx*pt5 ++ opy(jg)=omyo(jg)+dely*pt5 ++ opz(jg)=omzo(jg)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++c angular velocity at time step n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c total kinetic energy ++ ++ engke=engfke+engtrn ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,fmx,fmy,fmz,stat=fail(5)) ++ deallocate (tqx,tqy,tqz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nveq_2 ++ ++ subroutine nvtq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Berendsen thermostat. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engfke ++ real(8) rot,strkin,strgrp,strcon,engtrn,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,engtot,chit0 ++ real(8) sigma,taut ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save chit0,igrp1,igrp2,ifre1,ifre2,newjob ++ ++ data chit0/1.d0/,newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1630) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c accumulators for constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c shake and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=2 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c calculate full time velocity ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c update centre of mass velocities ++ ++ gvxx(ig)=gvxo(jg)+tstep/gmass(id)*fmx(jg) ++ gvyy(ig)=gvyo(jg)+tstep/gmass(id)*fmy(jg) ++ gvzz(ig)=gvzo(jg)+tstep/gmass(id)*fmz(jg) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c advance velocity by leapfrog ++ ++ gvxx(ig)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ gvyy(ig)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ gvzz(ig)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*gvzz(ig) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++ opx(jg)=(omxo(jg)+delx*pt5) ++ opy(jg)=(omyo(jg)+dely*pt5) ++ opz(jg)=(omzo(jg)+delz*pt5) ++ ++ enddo ++ ++c scaled angular velocity at timestep n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at full time step ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_b2 ++ ++ subroutine nvtq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover thermostat. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engtot ++ real(8) rot,strkin,strcon,strgrp,engtrn,engfke,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,sigma,taut,chit0 ++ real(8) chitnew,chitp,conint,consv,chit,qmass ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save newjob,igrp1,igrp2,ifre1,ifre2,qmass ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1640) ++ enddo ++ ++ if(newjob)then ++ ++c mass parameters for thermostat ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atoms displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat variable ++ ++ chit0=chit ++ ++c accumulators for constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=3 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0)* ++ x pt5*(vxx(i)+vxo(j))) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0)* ++ x pt5*(vyy(i)+vyo(j))) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0)* ++ x pt5*(vzz(i)+vzo(j))) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(vxo(j)+uxx(j)) ++ vyy(i)=pt5*(vyo(j)+uyy(j)) ++ vzz(i)=pt5*(vzo(j)+uzz(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-chit0* ++ x pt5*(gvxx(ig)+gvxo(jg))) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-chit0* ++ x pt5*(gvyy(ig)+gvyo(jg))) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-chit0* ++ x pt5*(gvzz(ig)+gvzo(jg))) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)+tstep*uzz(jg) ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10.and.icyc.gt.3)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c update thermostat variable ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ consv=conint+pt5*qmass*chit0**2 ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_h2 ++ ++ subroutine nptq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, ++ x virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Berendsen thermostat and barostat. ++c (cell may change volume) ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strgrp,strcon,engtrn,engfke,trx,try,trz ++ real(8) delx,dely,delz,czero ++ real(8) vaa,vbb,vcc,viracc,beta,elrc,virlrc,press,engtot ++ real(8) sigma,taup,taut,virtot,volm,cell0,elrc0,virlrc0 ++ real(8) chit0,volm0,chip0,psyst,scale ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension cell0(9),czero(9) ++ ++ save newjob,volm0,elrc0,virlrc0,czero,chit0,chip0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1670) ++ enddo ++ ++c store initial values of volume and long range corrections ++ ++ if(newjob) then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1660) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ newjob=.false. ++ ++ chit0=1.d0 ++ chip0=1.d0 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c set constraint stress and virial and inital cell vectors ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c length scaling parameter ++ ++ scale=chip0**(1.d0/3.d0) ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=3 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)*scale+tstep*uxx(j) ++ yyy(i)=yyo(i)*scale+tstep*uyy(j) ++ zzz(i)=zzo(i)*scale+tstep*uzz(j) ++ ++c estimate full step velocity ++ ++ vxx(i)=pt5*(vxo(j)+uxx(j)) ++ vyy(i)=pt5*(vyo(j)+uyy(j)) ++ vzz(i)=pt5*(vzo(j)+uzz(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)*scale+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)*scale+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)*scale+tstep*uzz(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=(omxo(jg)+pt5*delx) ++ opy(jg)=(omyo(jg)+pt5*dely) ++ opz(jg)=(omzo(jg)+pt5*delz) ++ ++ enddo ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c pressure control variable ++ ++ engke=engfke+engtrn ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c new estimate of chit ++ ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++c new cell parameters ++ ++ do i=1,9 ++ cell(i)=scale*cell0(i) ++ enddo ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c scale cell vectors ++ ++ scale=((chip0*volm)/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=scale*czero(i) ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=scale ++ eta(5)=scale ++ eta(9)=scale ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nptq_b2 ++ ++ subroutine nptq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover thermostat and barostat. ++c (cell may change volume) ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,com ++ real(8) rot,strkin,strcon,strgrp,vom,engtrn,trx,try,trz ++ real(8) delx,dely,delz,engfke ++ real(8) vaa,vbb,vcc,viracc,pmass,qmass,totmas,czero ++ real(8) chip,chit,consv,conint,elrc,virlrc,press,sigma,taup,taut ++ real(8) temp,virtot,cell0,volm0,elrc0,virlrc0 ++ real(8) chit0,chip0,chipnew,chipp,engtot,chitnew,chitp,volnew ++ real(8) scale,volm,vold,cons1,cons2,cons3 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension czero(9),cell0(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,czero,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1670) ++ enddo ++ ++ if(newjob) then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1680) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++c calculate system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat and barostat variables ++ ++ chit0=chit ++ chip0=chip ++ chipnew=chip ++ ++c initialise constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vxx(i)+vxo(j))) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vyy(i)+vyo(j))) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vzz(i)+vzo(j))) ++ ++c advance position using leapfrog ++ ++ xxx(i)=xxo(i)+tstep*(uxx(j)+ ++ x chipnew*((xxx(i)+xxo(i))*pt5-com(1))) ++ yyy(i)=yyo(i)+tstep*(uyy(j)+ ++ x chipnew*((yyy(i)+yyo(i))*pt5-com(2))) ++ zzz(i)=zzo(i)+tstep*(uzz(j)+ ++ x chipnew*((zzz(i)+zzo(i))*pt5-com(3))) ++ ++c estimate full step velocity ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvxx(ig)+gvxo(jg))) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvyy(ig)+gvyo(jg))) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvzz(ig)+gvzo(jg))) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ ++ x chipnew*((gcxo(jg)+gcmx(ig))*pt5-com(1))) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ ++ x chipnew*((gcyo(jg)+gcmy(ig))*pt5-com(2))) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ ++ x chipnew*((gczo(jg)+gcmz(ig))*pt5-com(3))) ++ ++c estimate full step velocities ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chip and chit ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=pt5*(chip+chipnew) ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++c estimate new cell tensor ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=czero(i)*scale ++ enddo ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors-isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=czero(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=chipnew ++ eta(5)=chipnew ++ eta(9)=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=pt5*qmass*chit0**2 ++ cons2=press*vold ++ cons3=pt5*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nptq_h2 ++ ++ subroutine nstq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints. Rigid body sites and constraint sites may ++c coincide. ++c ++c verlet leapfrog with Berendsen thermostat and barostat. ++c (cell may change shape) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq,newstep,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons,mode ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engtrn,trx,try,trz ++ real(8) delx,dely,delz,engfke ++ real(8) vaa,vbb,vcc,viracc,elrc,virlrc,press,sigma ++ real(8) taup,taut,volm,cell0,volm0,elrc0,chit0,uni ++ real(8) beta,stres0,engtot,virlrc0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension cell0(9),uni(9),stres0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,chit0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1690) ++ enddo ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob) then ++ ++ chit0=1.d0 ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1700) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c set virial, strain and stress tensors ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ eta(i)=uni(i) ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(j)+eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) ++ yyy(i)=tstep*uyy(j)+eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) ++ zzz(i)=tstep*uzz(j)+eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) ++ ++c calculate velocity at full time step ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c calculate thermostated velocities ++ ++ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c update positions ++ ++ gcmx(ig)=tstep*uxx(jg)+ ++ x eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+eta(7)*gczo(jg) ++ gcmy(ig)=tstep*uyy(jg)+ ++ x eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+eta(8)*gczo(jg) ++ gcmz(ig)=tstep*uzz(jg)+ ++ x eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+eta(9)*gczo(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=(omxo(jg)+pt5*delx) ++ opy(jg)=(omyo(jg)+pt5*dely) ++ opz(jg)=(omzo(jg)+pt5*delz) ++ ++ enddo ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c calculate total stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c calculate new cell tensor ++ ++ call mat_mul(eta,cell0,cell) ++ ++c calculate eta tensor ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nstq_b2 ++ ++ subroutine nstq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, ++ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, ++ x vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints- rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover like thermostat and barostat. ++c (cell may change shape) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm,mode ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engtrn,vxt,vyt,vzt,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,com,fac,etadot ++ real(8) chit,conint,consv,virlrc,elrc,press,sigma,taut,taup ++ real(8) volm,eta0,etanew,cell0,volm0,elrc0,virlrc0,pmass,qmass ++ real(8) totmas,chit0,xxa,yya,zza,chip,chitp,vom,engfke ++ real(8) chitnew,vold,cons1,cons2,cons3,temp,uni ++ real(8) stres0,engtot ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn),vom(3) ++ dimension cell0(9),eta0(9),etanew(9),stres0(9),uni(9),com(3) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1710) ++ enddo ++ ++ if(newjob) then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1720) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++c system total mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat and barostat variables and new cell ++ ++ chit0=chit ++ do i=1,9 ++ ++ eta0(i)=eta(i) ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c initialise constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c shake and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ vxt=pt5*(vxx(i)+vxo(j)) ++ vyt=pt5*(vyy(i)+vyo(j)) ++ vzt=pt5*(vzz(i)+vzo(j)) ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)- ++ x (eta0(1)+chit0)*vxt-eta0(4)*vyt-eta0(7)*vzt) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)- ++ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)- ++ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(i))*pt5-com(1) ++ yya=(yyy(i)+yyo(i))*pt5-com(2) ++ zza=(zzz(i)+zzo(i))*pt5-com(3) ++ ++ xxx(i)=xxo(i)+tstep*(uxx(j)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ yyy(i)=yyo(i)+tstep*(uyy(j)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ zzz(i)=zzo(i)+tstep*(uzz(j)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c calculate thermostated velocities ++ ++ vxt=pt5*(gvxx(ig)+gvxo(jg)) ++ vyt=pt5*(gvyy(ig)+gvyo(jg)) ++ vzt=pt5*(gvzz(ig)+gvzo(jg)) ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)- ++ x (chit0+eta0(1))*vxt-eta0(4)*vyt-eta0(7)*vzt) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)- ++ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)- ++ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) ++ ++c advance positions using leapfrog ++ ++ xxa=(gcmx(ig)+gcxo(jg))*pt5-com(1) ++ yya=(gcmy(ig)+gcyo(jg))*pt5-com(2) ++ zza=(gcmz(ig)+gczo(jg))*pt5-com(3) ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c estimate full step velocities ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c calculate total stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c propagate eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=pt5*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++c estimate new cell parameters ++ ++ call cell_propagate(tstep,cell,etanew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=pt5*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=pt5*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nstq_h2 ++ ++ subroutine qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for appling bond constraint corrections after ++c atomic integration. Assumes rigid bodies connected by constraints ++c If this is not so use rdshake_1 instead ++c Must be used in conjunction with leapfrog integration algorithms ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester june 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k ++ integer ik,ig,id,jj ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy ++ real(8) tzz,xxt,yyt,zzt,stresh,tstep2,esig,dis,dis2 ++ real(8) xxa,yya,zza,tax,tay,taz,doti,amti,amtj ++ real(8) trx,try,trz,vix,viy,viz,vxi,vyi,vzi ++ real(8) vjx,vjy,vjz,vxj,vyj,vzj,gamma,dli,dlj,rot ++ ++ real(8), allocatable :: redmass(:),esig1(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension stresh(9),rot(9) ++ ++ save newjob,esig1,redmass ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (redmass(mxcons),esig1(mxcons),stat=fail) ++ if(fail.ne.0)call error(idnode,1610) ++ newjob=.false. ++ ++ endif ++ ++c constraint virial ++ ++ vircon=0.d0 ++ ++c accumulators for stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c one iteration of constraint (shake) algorithm ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dis=prmcon(listcon(k,1)) ++ dis2=dis*dis ++ esig1(k)=0.5d0*(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 ++ esig=max(esig,abs(esig1(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c terminate iteration if all tolerances satisfied ++ ++ if (.not.safe) then ++ ++c initialise force increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c assign effective reduced mass ++ ++ if(newstep) then ++ ++ ig=lstbod(i) ++ ++ if(ig.eq.0) then ++ ++ amti=rmass(i) ++ ++ else ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c site to com in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ ++ x gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ ++ x gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ ++ x gzz(id,jj)*rot(9)) ++ ++c find cross product between interatomic vector and vector to com ++ ++ tax=yya*dzz(k)-zza*dyy(k) ++ tay=zza*dxx(k)-xxa*dzz(k) ++ taz=xxa*dyy(k)-yya*dxx(k) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++c direction of induced velocites in body frame ++ ++ vix=try*gzz(id,jj)-trz*gyy(id,jj) ++ viy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ viz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ vxi=vix*rot(1)+viy*rot(2)+viz*rot(3) ++ vyi=vix*rot(4)+viy*rot(5)+viz*rot(6) ++ vzi=vix*rot(7)+viy*rot(8)+viz*rot(9) ++ ++c find dot product between induced translational and rotational velocities ++ ++ doti=abs(vxi*dxx(k)+vyi*dyy(k)+vzi*dzz(k)) ++ doti=doti/dis2 ++ ++ amti=(1.d0/gmass(id)+doti) ++ ++ endif ++ ++ ig=lstbod(j) ++ if(ig.eq.0) then ++ ++ amtj=rmass(j) ++ ++ else ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c site to com in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ ++ x gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ ++ x gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ ++ x gzz(id,jj)*rot(9)) ++ ++c find cross product between interatomic vector and vector to com ++ ++ tax =yya*dzz(k)-zza*dyy(k) ++ tay =zza*dxx(k)-xxa*dzz(k) ++ taz =xxa*dyy(k)-yya*dxx(k) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++c direction of induced velocites in body frame ++ ++ vjx=try*gzz(id,jj)-trz*gyy(id,jj) ++ vjy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ vjz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ vxj=vjx*rot(1)+vjy*rot(2)+vjz*rot(3) ++ vyj=vjx*rot(4)+vjy*rot(5)+vjz*rot(6) ++ vzj=vjx*rot(7)+vjy*rot(8)+vjz*rot(9) ++ ++c find dot product between induced translational and rotational velocities ++ ++ doti=abs(vxj*dxx(k)+vyj*dyy(k)+vzj*dzz(k)) ++ doti=doti/dis2 ++ ++ amtj=(1.d0/gmass(id)+doti) ++ ++ endif ++ ++ redmass(k)=1.d0/(amti+amtj)/tstep2 ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig1(k)*redmass(k) ++ ++c accumulate bond virial ++ ++ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ stresh(1)=stresh(1)+gamma*dxx(k)*dxx(k) ++ stresh(2)=stresh(2)+gamma*dxx(k)*dyy(k) ++ stresh(3)=stresh(3)+gamma*dxx(k)*dzz(k) ++ stresh(5)=stresh(5)+gamma*dyy(k)*dyy(k) ++ stresh(6)=stresh(6)+gamma*dyy(k)*dzz(k) ++ stresh(9)=stresh(9)+gamma*dzz(k)*dzz(k) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)+dxx(k)*gamma ++ yyt(i)=yyt(i)+dyy(k)*gamma ++ zzt(i)=zzt(i)+dzz(k)*gamma ++ ++ xxt(j)=xxt(j)-dxx(k)*gamma ++ yyt(j)=yyt(j)-dyy(k)*gamma ++ zzt(j)=zzt(j)-dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+xxt(i)*dli ++ fyy(i)=fyy(i)+yyt(i)*dli ++ fzz(i)=fzz(i)+zzt(i)*dli ++ fxx(j)=fxx(j)+xxt(j)*dlj ++ fyy(j)=fyy(j)+yyt(j)*dlj ++ fzz(j)=fzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++c complete (symmetrical) stress tensor ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine qshake ++ ++ end module lf_rotation2_module +diff -urN dl_class_1.9.orig/srcmod/Makefile dl_class_1.9/srcmod/Makefile +--- dl_class_1.9.orig/srcmod/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/Makefile 2015-11-09 14:32:49.349871999 +0100 +@@ -0,0 +1,101 @@ ++# Master makefile for DL_POLY Classic ++# Author: W. Smith January Dec 2010 ++# ++#======================================================================= ++# Define default settings ++#======================================================================= ++ ++include ../Plumed.inc ++ ++ ++BINROOT = ../execute ++CC := $(CC) ++EX = DLPOLY.X ++EXE = $(BINROOT)/$(EX) ++FC=undefined ++SHELL=/bin/sh ++TYPE=par ++ ++#===================================================================== ++# Define object files ++ ++OBJ_MOD = parse_module.o setup_module.o error_module.o \ ++ site_module.o config_module.o pair_module.o utility_module.o \ ++ metafreeze_module.o solvation_module.o tether_module.o \ ++ vdw_module.o property_module.o rigid_body_module.o \ ++ angles_module.o bonds_module.o shake_module.o \ ++ inversion_module.o dihedral_module.o core_shell_module.o \ ++ exclude_module.o ewald_module.o coulomb_module.o\ ++ external_field_module.o four_body_module.o \ ++ hkewald_module.o metal_module.o ensemble_tools_module.o \ ++ temp_scalers_module.o three_body_module.o spme_module.o \ ++ tersoff_module.o neu_coul_module.o \ ++ nlist_builders_module.o forces_module.o \ ++ lf_motion_module.o lf_rotation1_module.o \ ++ lf_rotation2_module.o vv_motion_module.o \ ++ vv_rotation1_module.o vv_rotation2_module.o \ ++ pmf_module.o integrator_module.o optimiser_module.o \ ++ hyper_dynamics_module.o driver_module.o \ ++ define_system_module.o ++ ++OBJ_SRC = dlpoly.o ++ ++OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o ++ ++#===================================================================== ++# Define targets ++all: ++ @echo "Error - please specify a target machine!" ++ @echo "Permissible targets for this Makefile are:" ++ @echo " " ++ @echo "gfortran (parallel)" ++ @echo "woodcrest (parallel)" ++ @echo " " ++ @echo "Please examine Makefile for details" ++ ++# system specific targets follow : ++ ++#================== GNU Fortran, MPI version ============================== ++gfortran: ++ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ ++ LDFLAGS="$(LDFLAGS)" \ ++ FFLAGS="-c $(FFLAGS)" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#================= Woodcrest ========================================= ++woodcrest: ++ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ ++ FC=mpif90 FFLAGS="-c -O3" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#===================================================================== ++# Default code for parallel (MPI) execution ++ ++par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_DEPENDENCIES) ++ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_LOAD) ++ mv $(EX) $(EXE) ++ ++#===================================================================== ++# Check that a machine has been specified ++check: ++ @if test $(FC) = "undefined";\ ++ then echo "You must specify a target machine!"; \ ++ exit 99;\ ++ fi ++ ++#===================================================================== ++# Clean up the source directory ++clean: ++ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod ++ ++#===================================================================== ++# Declare dependencies ++.f.o: ++ $(FC) $(FFLAGS) $*.f ++.c.o: ++ $(CC) -c $*.c ++ ++#===================================================================== ++# Declare dependency on module files ++ ++$(OBJ_SRC): $(OBJ_MOD) +diff -urN dl_class_1.9.orig/srcmod/Makefile.plumedbck dl_class_1.9/srcmod/Makefile.plumedbck +--- dl_class_1.9.orig/srcmod/Makefile.plumedbck 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/Makefile.plumedbck 2011-02-22 12:46:11.000000000 +0100 +@@ -0,0 +1,98 @@ ++# Master makefile for DL_POLY Classic ++# Author: W. Smith January Dec 2010 ++# ++#======================================================================= ++# Define default settings ++#======================================================================= ++ ++BINROOT = ../execute ++CC = gcc ++EX = DLPOLY.X ++EXE = $(BINROOT)/$(EX) ++FC=undefined ++SHELL=/bin/sh ++TYPE=par ++ ++#===================================================================== ++# Define object files ++ ++OBJ_MOD = parse_module.o setup_module.o error_module.o \ ++ site_module.o config_module.o pair_module.o utility_module.o \ ++ metafreeze_module.o solvation_module.o tether_module.o \ ++ vdw_module.o property_module.o rigid_body_module.o \ ++ angles_module.o bonds_module.o shake_module.o \ ++ inversion_module.o dihedral_module.o core_shell_module.o \ ++ exclude_module.o ewald_module.o coulomb_module.o\ ++ external_field_module.o four_body_module.o \ ++ hkewald_module.o metal_module.o ensemble_tools_module.o \ ++ temp_scalers_module.o three_body_module.o spme_module.o \ ++ tersoff_module.o neu_coul_module.o \ ++ nlist_builders_module.o forces_module.o \ ++ lf_motion_module.o lf_rotation1_module.o \ ++ lf_rotation2_module.o vv_motion_module.o \ ++ vv_rotation1_module.o vv_rotation2_module.o \ ++ pmf_module.o integrator_module.o optimiser_module.o \ ++ hyper_dynamics_module.o driver_module.o \ ++ define_system_module.o ++ ++OBJ_SRC = dlpoly.o ++ ++OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o ++ ++#===================================================================== ++# Define targets ++all: ++ @echo "Error - please specify a target machine!" ++ @echo "Permissible targets for this Makefile are:" ++ @echo " " ++ @echo "gfortran (parallel)" ++ @echo "woodcrest (parallel)" ++ @echo " " ++ @echo "Please examine Makefile for details" ++ ++# system specific targets follow : ++ ++#================== GNU Fortran, MPI version ============================== ++gfortran: ++ $(MAKE) FC="mpif90" LD="mpif90 -o" \ ++ LDFLAGS="-O2 -ffast-math" \ ++ FFLAGS="-c -O2 -ffast-math" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#================= Woodcrest ========================================= ++woodcrest: ++ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ ++ FC=mpif90 FFLAGS="-c -O3" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#===================================================================== ++# Default code for parallel (MPI) execution ++ ++par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) ++ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) ++ mv $(EX) $(EXE) ++ ++#===================================================================== ++# Check that a machine has been specified ++check: ++ @if test $(FC) = "undefined";\ ++ then echo "You must specify a target machine!"; \ ++ exit 99;\ ++ fi ++ ++#===================================================================== ++# Clean up the source directory ++clean: ++ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod ++ ++#===================================================================== ++# Declare dependencies ++.f.o: ++ $(FC) $(FFLAGS) $*.f ++.c.o: ++ $(CC) -c $*.c ++ ++#===================================================================== ++# Declare dependency on module files ++ ++$(OBJ_SRC): $(OBJ_MOD) +diff -urN dl_class_1.9.orig/srcmod/merge_tools.f dl_class_1.9/srcmod/merge_tools.f +--- dl_class_1.9.orig/srcmod/merge_tools.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/merge_tools.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,670 @@ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging coordinate arrays across ++c a number of processors ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith november 1992. ++c MPI version - t. forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff,nsize,ierr,iatm1,iatm2 ++ integer j,i,k,jdnode,kdnode,katm1,katm2,iatm,katm ++ real*8 xxx(natms),yyy(natms),zzz(natms),buffer(nbuff) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++c check that buffer is large enough ++ ++ nsize=(natms+mxnode-1)/mxnode ++ if(nbuff.lt.6*nsize)call error(idnode,47) ++ ++c load initial transfer buffer ++ ++ j=0 ++ ++c set up this nodes atoms ++ ++ iatm1 = (idnode*natms)/mxnode + 1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ iatm = iatm2-iatm1+1 ++ ++ do i=iatm1,iatm2 ++ ++ buffer(j+1)=xxx(i) ++ buffer(j+2)=yyy(i) ++ buffer(j+3)=zzz(i) ++ j=j+3 ++ ++ enddo ++ ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c identity of incoming atoms ++ ++ katm1 = (kdnode*natms)/mxnode + 1 ++ katm2 = ((kdnode+1)*natms)/mxnode ++ katm = katm2-katm1 + 1 ++ ++c systolic data pulse to transfer data ++ ++ call MPI_IRECV(buffer(3*nsize+1),3*nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),3*nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ j=3*nsize ++ ++ do i=katm1,katm2 ++ ++ xxx(i)=buffer(j+1) ++ yyy(i)=buffer(j+2) ++ zzz(i)=buffer(j+3) ++ j=j+3 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,3*nsize ++ ++ buffer(i)=buffer(3*nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging together coordinate arrays ++c across a number of processors during rigid body algorithm ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t.forester november 1993 ++c systolic pulse version. T3D t.forester sept 1994 ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical safe ++ integer idnode,mxnode,natms,ierr,i,j,k,l,mxb,nout,nin ++ integer nin1,jdnode,j1,kdnode ++ integer lstme(natms) ++ real*8 xxx(mxatms),yyy(mxatms),zzz(mxatms),buffer(mxbuff) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ ++ safe =.true. ++ ++c load up buffers ++ ++ j=1 ++ l=1 ++ do while(lstme(l).gt.0.and.l.le.natms) ++ ++ i=lstme(l) ++ buffer(j+1)=dble(i) ++ buffer(j+2)=xxx(i) ++ buffer(j+3)=yyy(i) ++ buffer(j+4)=zzz(i) ++ j=j+4 ++ l=l+1 ++ ++ enddo ++ ++c length of message ++ ++ buffer(1) = dble(j) ++ ++c array position for incoming messages ++ ++ mxb = mxbuff/2 ++ ++c load initial transfer buffer ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c out going message size ++ ++ nout = nint(buffer(1)) ++ ++ call MPI_IRECV(nin,1,MPI_INTEGER, ++ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(nout,1,MPI_INTEGER,jdnode, ++ x Merge1_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++ call MPI_IRECV(buffer(mxb),nin,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),nout,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge1_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c check buffer array not exceeded ++ ++ if(nin.gt.mxbuff-mxb) safe =.false. ++ ++c position of first data element in incoming array ++ ++ nin1 = (nin-1)/4 ++ j = mxb+1 ++ ++ do j1=1,nin1 ++ ++ i = nint(buffer(j)) ++ xxx(i)=buffer(j+1) ++ yyy(i)=buffer(j+2) ++ zzz(i)=buffer(j+3) ++ j=j+4 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,nin ++ ++ buffer(i)=buffer(mxb-1+i) ++ ++ enddo ++ ++ enddo ++ ++c global check ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,47) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging coordinate arrays across ++c a number of processors ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t.forester february 1994 ++c T3D version - sept 1994 t.forester ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff,ierr,nsize,i,j,igrp1,igrp2 ++ integer k,jdnode,kdnode,kgrp1,kgrp2 ++ real*8 q0(ngrp),q1(ngrp),q2(ngrp),q3(ngrp),buffer(nbuff) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ ++c check that buffer is large enough ++ ++ nsize=(ngrp+mxnode-1)/mxnode ++ if(nbuff.lt.8*nsize)call error(idnode,47) ++ ++c load initial transfer buffer ++ ++ j=0 ++ ++ igrp1 = (idnode*ngrp)/mxnode+1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++ do i=igrp1,igrp2 ++ ++ buffer(j+1)=q0(i) ++ buffer(j+2)=q1(i) ++ buffer(j+3)=q2(i) ++ buffer(j+4)=q3(i) ++ j=j+4 ++ ++ enddo ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c identity of incoming groups ++ ++ kgrp1 = (kdnode*ngrp)/mxnode+1 ++ kgrp2 = ((kdnode+1)*ngrp)/mxnode ++ ++ call MPI_IRECV(buffer(4*nsize+1),4*nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge4_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),4*nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge4_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ j=4*nsize ++ ++ do i=kgrp1,kgrp2 ++ ++ q0(i)=buffer(j+1) ++ q1(i)=buffer(j+2) ++ q2(i)=buffer(j+3) ++ q3(i)=buffer(j+4) ++ j=j+4 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,4*nsize ++ ++ buffer(i)=buffer(4*nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for merging core-shell velocity data ++c to restore data replication on all nodes ++c ++c copyright - daresbury laboratory 1993 ++c author - w. smith february 1993 ++c MPI version - w. smith june 1995 ++c CPP version - w. smith june 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use config_module ++ use core_shell_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer idnode,mxnode,ntshl,ierr,i,j,k,n,m,ishl1,ishl2,nsize ++ integer jdnode,kshl1,kshl2,kdnode ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++c check that buffer is large enough ++ ++ nsize=8*((ntshl+mxnode-1)/mxnode) ++ ++ if(mxbuff.lt.2*nsize)call error(idnode,425) ++ ++c block indices ++ ++ ishl1 = (idnode*ntshl)/mxnode+1 ++ ishl2 = ((idnode+1)*ntshl)/mxnode ++ ++c load initial transfer buffer ++ ++ n=0 ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ buffer(n+1)=dble(i) ++ buffer(n+2)=dble(j) ++ buffer(n+3)=vxx(i) ++ buffer(n+4)=vyy(i) ++ buffer(n+5)=vzz(i) ++ buffer(n+6)=vxx(j) ++ buffer(n+7)=vyy(j) ++ buffer(n+8)=vzz(j) ++ n=n+8 ++ ++ enddo ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c systolic data pulse to transfer data ++ ++ call MPI_IRECV(buffer(nsize+1),nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Shell_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Shell_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ n=nsize ++ ++c block indices ++ ++ kshl1 = (kdnode*ntshl)/mxnode+1 ++ kshl2 = ((kdnode+1)*ntshl)/mxnode ++ ++ do m=kshl1,kshl2 ++ ++ i=nint(buffer(n+1)) ++ j=nint(buffer(n+2)) ++ ++ vxx(i)=buffer(n+3) ++ vyy(i)=buffer(n+4) ++ vzz(i)=buffer(n+5) ++ vxx(j)=buffer(n+6) ++ vyy(j)=buffer(n+7) ++ vzz(j)=buffer(n+8) ++ ++ n=n+8 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,nsize ++ ++ buffer(i)=buffer(nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for passing coordinate updates between ++c nodes during the shake iteration cycle ++c ++c parallel replicated data algorithm ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer idnode, mxnode, natms,ierr,i,k,j0,k0,n,jdnode,j ++ integer lishap(mxlshp),lashap(mxproc) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ real*8 xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ real*8 txx(mxatms),tyy(mxatms),tzz(mxatms) ++ real*8 buffer(mxbuff) ++ ++c store increments to be transferred ++ ++ do i=1,natms ++ ++ txx(i)=xxt(i) ++ tyy(i)=yyt(i) ++ tzz(i)=zzt(i) ++ ++ enddo ++ ++c transfer coordinate data to all nodes ++ ++ call gsync() ++ ++ do k=1,mxnode-1 ++ ++ i=0 ++ j0=0 ++ if(k.gt.1)j0=lashap(k-1) ++ ++ do j=j0+1,lashap(k) ++ ++ buffer(i+1)=txx(lishap(j)) ++ buffer(i+2)=tyy(lishap(j)) ++ buffer(i+3)=tzz(lishap(j)) ++ i=i+3 ++ ++ enddo ++ ++c inter node communication ++ ++ k0=0 ++ ++ if(k+1.lt.mxnode)k0=lashap(mxnode-k-1) ++ n=3*(lashap(mxnode-k)-k0) ++ jdnode=mod(idnode+k,mxnode) ++ ++c check for zero length messages ++ ++ if(n.gt.0) call MPI_IRECV(buffer(i+1),n,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Shmove_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ if(i.gt.0) call MPI_SEND(buffer(1),i,MPI_DOUBLE_PRECISION, ++ x jdnode,Shmove_tag+k,MPI_COMM_WORLD,ierr) ++ ++ if(n.gt.0) call MPI_WAIT(request,status,ierr) ++ ++c consolidate transferred data ++ ++ do j=k0+1,lashap(mxnode-k) ++ ++ xxt(lishap(j))=xxt(lishap(j))+buffer(i+1) ++ yyt(lishap(j))=yyt(lishap(j))+buffer(i+2) ++ zzt(lishap(j))=zzt(lishap(j))+buffer(i+3) ++ i=i+3 ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for splicing together coordinate arrays ++c across a number of processors during shake algorithm ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - w. smith march 1993 ++c ++c second version of splice ++c ++c********************************************************************* ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer idnode,natms,listme,listot,j,n3,i,lastot ++ real*8 xxx,yyy,zzz,buffer ++ ++ dimension listme(mxatms),listot(mxatms) ++ dimension xxx(natms),yyy(natms),zzz(natms) ++ dimension buffer(mxbuff) ++ ++c check buffer size ++ ++ if(mxbuff.lt.6*natms) call error(idnode,190) ++ ++c load initial transfer buffers ++ ++ j=3*natms ++ n3=3*natms ++ ++ do i=1,natms ++ ++ if(listot(i).gt.0)then ++ ++ if(listme(i).gt.0)then ++ ++ buffer(j+1)=xxx(i) ++ buffer(j+2)=yyy(i) ++ buffer(j+3)=zzz(i) ++ ++ else ++ ++ buffer(j+1)=0.d0 ++ buffer(j+2)=0.d0 ++ buffer(j+3)=0.d0 ++ ++ endif ++ ++ j=j+3 ++ ++ endif ++ ++ enddo ++ ++ lastot=j-n3 ++ ++c splice constraint coordinates ++ ++ if(lastot.gt.0) call gdsum(buffer(n3+1),lastot,buffer(1)) ++ ++c reconstitute coordinate arrays ++ ++ j=n3 ++ ++ do i=1,natms ++ ++ if(listot(i).gt.0)then ++ ++ xxx(i)=buffer(j+1)/dble(listot(i)) ++ yyy(i)=buffer(j+2)/dble(listot(i)) ++ zzz(i)=buffer(j+3)/dble(listot(i)) ++ ++ j=j+3 ++ ++ endif ++ ++ enddo ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/metafreeze_module.f dl_class_1.9/srcmod/metafreeze_module.f +--- dl_class_1.9.orig/srcmod/metafreeze_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/metafreeze_module.f 2012-04-24 18:30:31.000000000 +0200 +@@ -0,0 +1,3539 @@ ++ module metafreeze_module ++ ++c--------------------------------------------------------------------- ++c ++c Metafreeze module for metadynamics ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c Adapted for dl_poly classic w. smith dec 2010 ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++c Minimise usage by making everything private ++ ++ private ++ ++c--------------------------------------------------------------------- ++c P u b l i c R o u t i n e s ++c ... unless exposed here. ++c--------------------------------------------------------------------- ++ ++ public :: define_metadynamics ! Called to intitialise this module ++ public :: metafreeze_driver ! Called at every MD time-step ++ ++c--------------------------------------------------------------------- ++c P u b l i c V a r i a b l e s ++c--------------------------------------------------------------------- ++ ++ public :: lmetadyn ! Is this a metadynamics calculation? ++ public :: driven ! Is this atom site involved in metadynamics ++ public :: lstein,ltet,lglobpe,llocpe,ncolvar,nq4,nq6,ntet,hkey ++ public :: meta_step_int,globpe_scale,locpe_scale,ref_W_aug ++ public :: h_aug,wt_Dt ++ ++c Local copies of exluded atom arrays note that these are ++c not indexed by atom number, but by an index which loops ++c over the atoms handles by each MPI rank. ++ public :: mtd_nexatm,mtd_lexatm ++ ++c------------------------------------ ++c Populated from CONTROL file ++c------------------------------------ ++ ++ logical,save :: lmetadyn =.false. ! Master metadynamics flag ++ ++c------------------------------------------------------- ++c Energy, virial, stress and forces from 'local' pe ++c Populated by dlpoly energy routines ++c------------------------------------------------------- ++ ++ ++ public :: eng_loc,vir_loc,stress_loc ++ public :: fxx_loc,fyy_loc,fzz_loc ++ ++c---------------------------------------------------------------------- ++c Data accumulated for local potential energy (computed elsewhere) ++c---------------------------------------------------------------------- ++ ++ real(8),save :: eng_loc,vir_loc ++ real(8),dimension(9),save :: stress_loc ++ real(8),allocatable,dimension(:),save :: fxx_loc,fyy_loc,fzz_loc ++ ++c---------------------------------------------------------------------- ++c Arrays holding information on excluded interactions. Replicated ++c here to avoid a compilation dependency loop which would occur ++c if simply using the arrays already in exclude_module.f ++c---------------------------------------------------------------------- ++ integer,allocatable,dimension(:),save :: mtd_nexatm ++ integer,allocatable,dimension(:,:),save :: mtd_lexatm ++ ++c--------------------------------------------------------------------- ++c P r i v a t e V a r i a b l e s ++c--------------------------------------------------------------------- ++ ++c---------------------------------------------------------------- ++c Collective variables and derivatives of v_aug w.r.t colvars ++c---------------------------------------------------------------- ++ ++ integer,parameter :: maxhis = 150000 ! Size of history arrays ++ real(8),allocatable,dimension(:),save :: colvar,dcolvar ++ real(8),allocatable,dimension(:),save :: colvar_scale ++ ++c---------------------------------------------------------------- ++c Positions and heights of previous Gaussians in colvar space ++c---------------------------------------------------------------- ++ ++ real(8),allocatable,dimension(:,:),save :: colvar_his ++ real(8),allocatable,dimension(:),save :: w_aug ++ ++c------------------------------ ++c Read from CONTROL file ++c------------------------------ ++ ++ integer,save :: ncolvar = 0 ! Total number of collvars ++ logical,save :: lstein =.false. ! Q4/Q6 collective variables ++ logical,save :: ltet =.false. ! Tetrahedral order parameter ++ logical,save :: lglobpe =.false. ! Global potential energy ++ logical,save :: llocpe =.false. ! Local potential energy ++ ++ integer,save :: nq4 = 0 ! Number of Q4 pair types ++ integer,save :: nq6 = 0 ! Number of Q6 pair types ++ integer,save :: ntet = 0 ! Number of zeta triplets ++ ++ real(8),save :: globpe_scale = 1.0d0 ! Scaling factors for local ++ real(8),save :: locpe_scale = 1.0d0 ! and global pe colvars ++ ++ real(8),save :: ref_W_aug=1.0d0 ! Reference Gaussian height ++ real(8),save :: h_aug=1.0d0 ! Gaussian width ++ integer,save :: hkey=0 ! Height control scheme ++ real(8),save :: wt_Dt=100.0d0 ! "Well-tempered" parameter ++ integer,save :: meta_step_int=5 ! interval between depositions ++ ++c---------------------------------------- ++c Read from STEINHARDT or TETRAHEDRAL ++c---------------------------------------- ++ ++c Global Steinhardt order parameters ++ ++ real(8),allocatable,dimension(:),save :: q4_global ++ real(8),allocatable,dimension(:),save :: q6_global ++ ++c Global Tetrahedral order parameters ++ ++ real(8),allocatable,dimension(:),save :: zeta_global ++ ++c Bookkeeping arrays for order parameter computation ++ ++ character(8),allocatable,dimension(:,:),save :: q4label ++ character(8),allocatable,dimension(:,:),save :: q6label ++ character(8),allocatable,dimension(:),save :: zetalabel ++ ++c Inner and outer cutoffs ++ ++ real(8),allocatable,dimension(:,:),save :: q4cutoff ++ real(8),allocatable,dimension(:,:),save :: q6cutoff ++ real(8),allocatable,dimension(:,:),save :: zetacutoff ++ ++c Scaling factors for q4 and q6 ++ ++ real(8),allocatable,dimension(:),save :: q4scale ++ real(8),allocatable,dimension(:),save :: q6scale ++ real(8),allocatable,dimension(:),save :: zetascale ++ ++c Number of nearest neighbours for q4, q6 and zeta ++ ++ integer,allocatable,dimension(:),save :: q4nn,q6nn ++ integer,allocatable,dimension(:),save :: zetann ++ ++c------------------------------------------------------------ ++c Arrays holding data for computation of order parameters ++c------------------------------------------------------------ ++ ++c Steinhardt site-site interaction arrays ++ ++ integer,allocatable,dimension(:,:),save :: q4site ++ integer,allocatable,dimension(:,:),save :: q6site ++ integer,allocatable,dimension(:) ,save :: zetasite ++ ++c Number of included sites ++ ++ integer,allocatable,dimension(:),save :: q4ninc ++ integer,allocatable,dimension(:),save :: q6ninc ++ integer,allocatable,dimension(:),save :: zetaninc ++ ++c Real and imaginary parts of q4bar and q6bar ++ ++ real(8),allocatable,dimension(:,:),save :: ReQ6bar,ImQ6bar ++ real(8),allocatable,dimension(:,:),save :: ReQ4bar,ImQ4bar ++ ++c Max number of entries in co-ordination shell ++ ++ integer,parameter :: mxflist = 50 ++ integer :: mxninc ++ ++c Full neighbour list for Tetrahedral order parameter ++ ++ integer,allocatable,dimension(:) ,save :: nflist ++ integer,allocatable,dimension(:,:),save :: flist ++ ++c------------------------------------- ++c Internal bookkeeping ++c------------------------------------- ++ ++ logical,allocatable,dimension(:),save :: driven ! Metadynamics option ++ integer,save :: meta_step=1 ! Current metadynamics step number ++ real(8),save :: meta_energy ! Value of metadynamics bias potential ++ ++ integer,save :: wl_nbins=30 ! Number of bins for WL recursion ++ integer,save :: wl_cycle=0 ! Current WL cycle ++ real(8),save :: wl_range=0.175 ! range of WL ++ real(8),allocatable,dimension(:),save :: wl_bin ! WL bins ++ ++c-------------------------------------- ++c Miscellaneous internal variables ++c-------------------------------------- ++ ++ integer,allocatable,dimension(:) :: buff ! Comms buffer ++ ++c File units ++ ++ integer,save :: stn = 91 ! STEINHARDT ++ integer,save :: mtd = 92 ! METADYNAMICS ++ integer,save :: zta = 93 ! ZETA ++ integer,save :: wlb = 94 ! WL_BINS.DAT ++ ++c Error flag ++ ++ integer,dimension(100) :: ierr = 0 ++ ++c Local store of comms variables ++c Assuming no task farming, comms will require changing if farmed ++ ++ integer, save :: myrank,commsize ++ logical, save :: onroot ++ real(8),save :: kt ++ ++ contains ++ ++ Subroutine Metafreeze_Driver ++ x (imcon,natms,temp,nstep,engcfg,virtot,engord,virord) ++ ++c--------------------------------------------------------------------- ++c Top level metadynamics routine called after evaluation of all ++c other energetic and force terms within the main molecular ++c dynamics loop. ++c ++c 1. Computes the ncolvar order parameters ++c 2. Deposits a new Gaussian at the current collective variables ++c as the current number of steps reaches meta_step_int ++c 3. Computed the bias potential and its derivative w.r.t. the ++c ncolvar collective variables. ++c 4. Computes the forces stresses and virial resulting from the ++c bias ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : boltz ++ use config_module, only : fxx,fyy,fzz,stress ++ ++ implicit none ++ ++ integer,intent(in) :: nstep,imcon,natms ++ real(8),intent(in) :: engcfg,virtot,temp ++ real(8),intent(out) :: engord,virord ++ ++c Local variables ++ ++ integer :: k,iq,itet,ibin,nfail,my_meta_step ++ integer,save :: nlastg = 0 ++ real(8) :: height,buff1,wl_mean ++ logical :: flat,safe ++ ++c------------------------------------------------------ ++c Compute order parameters / collective variables ++c------------------------------------------------------ ++ ++c Steinhardt order parameters ++ ++ if ( nq4>0.or.nq6>0 ) call compute_steinhardt(imcon,natms) ++ ++ k = 1 ++ do iq = 1,nq4 ++ colvar(k) = q4_global(iq) ++ k = k + 1 ++ end do ++ do iq = 1,nq6 ++ colvar(k) = q6_global(iq) ++ k = k + 1 ++ end do ++ ++c Tetrahedral order parameters ++ ++ if ( ntet > 0 ) then ++ call compute_tet_nlist(imcon,natms) ++ call compute_tetrahedral(imcon,natms) ++ end if ++ ++ do itet = 1,ntet ++ colvar(k) = zeta_global(itet) ++ k = k + 1 ++ end do ++ ++c Energy order parameters ++ ++ if (lglobpe) then ++ colvar(k) = engcfg ++ k = k + 1 ++ end if ++ if (llocpe) then ++ ++c Global reduction of local virial and energy ++ ++ if ( commsize > 1 ) call gdsum(eng_loc,1,buff1) ++ if ( commsize > 1 ) call gdsum(vir_loc,1,buff1) ++ colvar(k) = eng_loc ++ k = k + 1 ++ end if ++ ++ if ( k-1/=ncolvar ) call Mfrz_Error(2500,0.d0) ++ ++ if ( hkey==1 ) then ++ k = int(dble(wl_nbins)*colvar(1)/wl_range) + 1 ++ if ( k < wl_nbins) wl_bin(k) = wl_bin(k) + 1.0d0 ++ end if ++ ++c-------------------------------------------------------- ++c Deposit a new Gaussian if now is the correct time ++c-------------------------------------------------------- ++ ++ if ( (mod(nstep,meta_step_int)==0).and.(nstep>nlastg) ) then ++ nlastg = nstep ! Avoid multiple depositions at the ++ ! same timestep (relaxed shell model) ++ ++ select case (hkey) ++ ++ case(0) ++ ++c Always deposit Gaussians of the same height ++ ++ height = ref_W_aug ++ ++ case(1) ++ ++c Wang-Landau style recursion ++ ++ open(unit=wlb,file='WL_BINS.DAT',status='replace') ++ ++ do ibin = 1,wl_nbins ++ write(wlb,*)ibin,wl_bin(ibin) ++ end do ++ ++ close(wlb) ++ ++ if ( ncolvar/=1 ) then ++ call Mfrz_Error(2501,0.d0) ++ else ++ ++ height = ref_W_aug*(0.5d0**dble(wl_cycle)) ++ ++ nfail = 0 ++ wl_mean = 0.d0 ++ do ibin = 6,wl_nbins-5 ++ wl_mean = wl_mean + wl_bin(ibin) ++ nfail = nfail + 1 ++ end do ++ wl_mean = wl_mean/dble(nfail) ++ ++ nfail = 0 ++ flat = .true. ++ do ibin = 6,wl_nbins-5 ++ if ( wl_bin(ibin) < 0.8d0*wl_mean ) then ++ if ( nfail > 2 ) flat = .false. ++ nfail = nfail + 1 ++ end if ++ end do ++ ++ if ( flat.and.(sum(wl_bin)>50.0d0) ) then ++ wl_cycle = wl_cycle + 1 ++ wl_bin = 0.0d0 ++ end if ++ ++ height = ref_W_aug*(0.5d0**dble(wl_cycle)) ++ ++ end if ++ ++ case(2) ++ ++c Well-tempered metadynamics ++ ++ meta_energy = 0.0d0 ++ call compute_bias_potential() ++ ++ height = ref_W_aug*exp(-meta_energy/wt_Dt) ++ ++ case default ++ ++ call Mfrz_Error(2502,0.d0) ++ ++ end select ++ ++ call deposit_gaussian(height,temp) ++ my_meta_step = (meta_step-1)/commsize + 1 ++ safe = ( maxhis >= my_meta_step ) ++ call gstate(safe) ++ if ( .not.safe ) call Mfrz_Error(2503,0.d0) ++ ++ end if ++ ++c----------------------------------------------------------- ++c Compute the bias potential and its derivatives w.r.t. ++c to the ncolvar collective variables. ++c----------------------------------------------------------- ++ ++ call compute_bias_potential() ++ ++c----------------------------------------------------------- ++c Add in the forces, stresses and virial contributions ++c from this derivative. ++c----------------------------------------------------------- ++ ++ virord = 0.0d0 ! Zero the virial ++ ++c Must compute contributions from pe order parameters ++c first before we change any forces. ++ ++ k = nq4+nq6+ntet+1 ++ ++c Energy order parameters ++ ++ if (lglobpe) then ++ ++ fxx(:) = fxx(:)*(1.0d0+dcolvar(k)) ++ fyy(:) = fyy(:)*(1.0d0+dcolvar(k)) ++ fzz(:) = fzz(:)*(1.0d0+dcolvar(k)) ++ ++c correct for later summation: ++ ++ virord = virord+dcolvar(k)*virtot/dble(commsize) ++ stress = stress*(1.0d0+dcolvar(k)) ++ ++ end if ++ if (llocpe) then ++ ++ fxx(:) = fxx(:) + fxx_loc(:)*dcolvar(k) ++ fyy(:) = fyy(:) + fyy_loc(:)*dcolvar(k) ++ fzz(:) = fzz(:) + fzz_loc(:)*dcolvar(k) ++ ++c correct for later summation: ++ ++ virord = virord + dcolvar(k)*vir_loc/dble(commsize) ++ stress = stress + stress_loc*dcolvar(k) ++ ++ end if ++ ++c Steinhardt order parameters ++ ++ if ( nq4>0.or.nq6>0 ) call ++ x compute_steinhardt_forces(imcon,natms,engord,virord) ++ ++c Tetrahedral order parameters ++ ++ if ( ntet > 0 ) call ++ x compute_tetrahedral_forces(imcon,natms,engord,virord) ++ ++c global reduction of virord ++ ++ if ( commsize > 1 ) call gdsum(virord,1,buff1) ++ ++ engord = meta_energy ++ ++c write(0,'("DEBUG : engord = ",F12.6)')engord/(temp*boltz) ++ ++ return ++ ++ end Subroutine Metafreeze_Driver ++ ++ Subroutine Deposit_Gaussian(height,temp) ++ ++c--------------------------------------------------------------------- ++c ++c Deposits a new Gaussian at the current collective variables and ++c appends to the METADYNAMICs file. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : boltz ++ ++ implicit none ++ ++ real(8),intent(in) :: height,temp ++ integer :: my_meta_step ++ character(11) :: fmtstring ++ ++c store current order parameters and Gaussian height ++ ++ if ( mod(meta_step-1,commsize) == myrank ) then ++ ++ my_meta_step = (meta_step-1)/commsize + 1 ++ w_aug(my_meta_step) = height ++ colvar_his(:,my_meta_step) = colvar(:) ++ ++ end if ++ ++ if (onroot) then ++ ++c Create format string ++ ++ write(fmtstring,'("(I8,",I1,"E15.6)")')ncolvar+1 ++ ++c write METADYNAMICS file ++ ++ open(unit=mtd,file='METADYNAMICS',status='old',position= ++ x 'append',iostat=ierr(1)) ++ write(unit=mtd,fmt=fmtstring)meta_step,colvar(:), ++ x height/(temp*boltz) ++ close(unit=mtd) ++ ++ end if ++ ++ meta_step = meta_step+1 ++ ++ return ++ ++ end Subroutine Deposit_Gaussian ++ ++ Subroutine Compute_Bias_Potential() ++ ++c--------------------------------------------------------------------- ++c ++c Computes the augmenting bias potential as a function of the ++c collective variables. Also computes the derivative of the bias ++c potential w.r.t. the collective variables required to compute ++c the metadynamics forces. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ integer :: istep,ic,k,my_meta_step ++ real(8) :: vsq,exp1,dWpsq ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++ allocate(buff1(1:2*(ncolvar+1)),stat=ierr(1)) ++ allocate(buff2(1:2*(ncolvar+1)),stat=ierr(2)) ++ ++ if (any(ierr/=0)) call Mfrz_Error(2504,0.d0) ++ ++c Set squared-width of gaussians ++ ++ dWpsq = 1.0d0/h_aug**2 ++ meta_energy = 0.0d0 ++ ++c Zero accumulators of derivative w.r.t. each order parameter ++ ++ dcolvar(:) = 0.0d0 ++ my_meta_step = (meta_step-1)/commsize + 1 ++ do istep=1,my_meta_step ++ ++ vsq = 0.0d0 ++ do ic = 1,ncolvar ++ vsq = vsq + ( colvar_scale(ic)*(colvar(ic) - ++ x colvar_his(ic,istep)) )**2 ++ end do ++ exp1 = w_aug(istep)*exp(-0.5d0*vsq*dWpsq) ++ do ic = 1,ncolvar ++ dcolvar(ic) = dcolvar(ic) - (colvar_scale(ic)**2)*exp1* ++ x (colvar(ic) - colvar_his(ic,istep))*dWpsq ++ end do ++ ++ meta_energy = meta_energy + exp1 ++ ++ end do ++ ++ buff1(1) = meta_energy ++ k = 2 ++ do ic = 1,ncolvar ++ buff1(k) = dcolvar(ic) ++ k = k + 1 ++ end do ++ ++ if ( commsize > 1 ) then ++ call gdsum(buff1,ncolvar+1,buff2) ++ end if ++ ++ meta_energy = buff1(1) ++ ++ k = 2 ++ do ic=1,ncolvar ++ dcolvar(ic) = buff1(k) ++ k = k + 1 ++ end do ++ ++c write(0,'("DEBUG : CV derivs = ",6F15.6)')dcolvar ++ ++ deallocate(buff1,buff2,stat=ierr(1)) ++ ++ return ++ ++ end Subroutine Compute_Bias_Potential ++ ++ Subroutine Define_Metadynamics(tm,ts,natms,ntpatm,temp) ++ ++c--------------------------------------------------------------------- ++c Processes the metadynamics input file. This is done in several ++c stages. ++c 1. Process the metadynamics control data read from the CONTROL ++c file, which defines the number of collective variables and ++c indicates if we need to read from auxilliary input files ++c (e.g. STEINHARDT or ZETA) which define order parameters. ++c 2. Read and process these auxilliary files. ++c 3. Process the information obtained from the CONTROL file which ++c controls the properties of the Gaussians used to build the ++c bias potential. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c Adapted w. smith - jan 2011 ++c ++c--------------------------------------------------------------------- ++ ++ use site_module ++ use config_module, only : ltype ++ use parse_module ++ ++ implicit none ++ ++ integer,intent(in) :: tm,ts,natms,ntpatm ++ real(8),intent(in) :: temp ++ ++c Local variables ++ ++ integer :: isite,jsite,ilin,i,iq,iatm0,iatm1,istrd,iatm,k,n,idum ++ logical :: lexist,go,safe ++ real(8) :: waug,dummy(1) ++ ++c Allocate the driven list. Modifications elsewhere in DLPOLY always ++c check if sites are driven (for accumulation of local PE) and hence ++c this should be allocated if this is a metadynamics run or not. ++ ++ allocate(driven(1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2505,0.d0) ++ driven = .false. ++ ++c Do nothing else if the metafreeze flag has not been set in CONTROL ++ ++ if (.not.lmetadyn) then ++ return ++ end if ++ ++ myrank=tm ++ commsize = ts ++ onroot = (myrank==0) ++ ++ ++c$$$ DEBUG ++cc$$$ if (onroot) write(0,'("================================")') ++cc$$$ if (onroot) write(0,'("Available sites from site module")') ++cc$$$ if (onroot) write(0,'("================================")') ++cc$$$ if (onroot) then ++cc$$$ do isite = 1,size(unqatm) ++cc$$$ write(0,'("Site index ",i4,": ",a8)')isite,unqatm(isite) ++cc$$$ end do ++cc$$$ end if ++ ++c Cannot bias the global and local PE in the same run. ++ ++ if ( lglobpe.and.llocpe ) call Mfrz_Error(2509,0.d0) ++ ++c Allocate local force arrays if anything is driven. ++ ++ allocate(fxx_loc(1:mxatms),stat=ierr(1)) ++ allocate(fyy_loc(1:mxatms),stat=ierr(2)) ++ allocate(fzz_loc(1:mxatms),stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2510,0.d0) ++ ++c Allocate arrays to hold collective variables ++ ++ allocate( colvar(1:ncolvar),stat=ierr(1)) ++ allocate(dcolvar(1:ncolvar),stat=ierr(2)) ++ allocate(colvar_his(1:ncolvar,1:maxhis),stat=ierr(3)) ++ allocate(colvar_scale(1:ncolvar),stat=ierr(4)) ++ allocate(w_aug(1:maxhis),stat=ierr(5)) ++ if (any(ierr/=0)) call Mfrz_Error(2511,0.d0) ++ ++c Allocate Wang-Landau bin array ++ ++ allocate(wl_bin(1:wl_nbins),stat=ierr(1)) ++ if (any(ierr/=0)) call Mfrz_Error(2512,0.d0) ++ wl_bin = 0.0d0 ++ ++c------------------------------------------------------------- ++c Process Steinhardt order parameter settings if present ++c------------------------------------------------------------- ++ ++ if ( lstein ) then ++ ++ allocate(q4label(1:2,1:nq4),stat=ierr(1)) ++ allocate(q6label(1:2,1:nq6),stat=ierr(2)) ++ allocate(q4cutoff(1:2,1:nq4),stat=ierr(3)) ++ allocate(q6cutoff(1:2,1:nq6),stat=ierr(4)) ++ allocate(q4scale(1:nq4),stat=ierr(5)) ++ allocate(q6scale(1:nq6),stat=ierr(6)) ++ allocate(q4nn(1:nq4),stat=ierr(7)) ++ allocate(q6nn(1:nq6),stat=ierr(8)) ++ allocate(q4ninc(1:nq4),stat=ierr(9)) ++ allocate(q6ninc(1:nq6),stat=ierr(10)) ++ allocate(buff(1:max(nq4,nq6)),stat=ierr(11)) ++ allocate(q4_global(1:nq4),stat=ierr(12)) ++ allocate(q6_global(1:nq6),stat=ierr(13)) ++ allocate(ReQ4Bar(-4:+4,1:nq4),stat=ierr(14)) ++ allocate(ImQ4Bar(-4:+4,1:nq4),stat=ierr(15)) ++ allocate(ReQ6Bar(-6:+6,1:nq6),stat=ierr(16)) ++ allocate(ImQ6Bar(-6:+6,1:nq6),stat=ierr(17)) ++ if (any(ierr/=0)) call Mfrz_Error(2515,0.d0) ++ ++c Open STEINHARDT file and process ++ ++ if (onroot) then ++ open(unit=stn,file='STEINHARDT',status='old',iostat=ierr(1)) ++ else ++ ierr(1)=0 ++ endif ++ call gisum(ierr(1),1,ierr(2)) ++ if ( ierr(1)/=0 ) call Mfrz_Error(2516,0.d0) ++ ++ ilin = 1 ++ safe=.true. ++ if (nq4>0) then ++ call getrec(safe,myrank,stn) ! Ignore q4 comment line ++ ilin = ilin + 1 ++ do i = 1,nq4 ++ call getrec(safe,myrank,stn) ++ if (safe) then ++ call getword(q4label(1,i),record,8,lenrec) ++ call getword(q4label(2,i),record,8,lenrec) ++ q4cutoff(1,i)=dblstr(record,lenrec,idum) ++ q4cutoff(2,i)=dblstr(record,lenrec,idum) ++ q4scale(i)=dblstr(record,lenrec,idum) ++ q4nn(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (nq6>0) then ++ call getrec(safe,myrank,stn) ! Ignore q6 comment line ++ ilin = ilin + 1 ++ do i = 1,nq6 ++ call getrec(safe,myrank,stn) ++ if (safe) then ++ call getword(q6label(1,i),record,8,lenrec) ++ call getword(q6label(2,i),record,8,lenrec) ++ q6cutoff(1,i)=dblstr(record,lenrec,idum) ++ q6cutoff(2,i)=dblstr(record,lenrec,idum) ++ q6scale(i)=dblstr(record,lenrec,idum) ++ q6nn(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (onroot) close(unit=stn) ++ ++ call gisum(ierr(1),ilin-1,ierr(ilin)) ++ do i = 1,ilin-1 ++ if (ierr(i)/=0) then ++ call Mfrz_Error(2521,dble(i)) ++ end if ++ end do ++ ++c Create array indicating which site-site connections use ++c which set of q4 cut-offs, scaling factors and num neighbours. ++ ++ allocate(q4site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2517,0.d0) ++ q4site(:,:) = 0 ++ ++ do isite = 1,ntpatm ++ do jsite = isite,ntpatm ++ do iq = 1,nq4 ++ if ((q4label(1,iq)==unqatm(isite)).and. ++ x (q4label(2,iq)==unqatm(jsite))) then ++ q4site(jsite,isite) = iq ++ q4site(isite,jsite) = iq ++ driven(jsite) = .true. ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ end do ++ ++ allocate(q6site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2518,0.d0) ++ q6site(:,:) = 0 ++ do isite = 1,ntpatm ++ do jsite = isite,ntpatm ++ do iq = 1,nq6 ++ if ((q6label(1,iq)==unqatm(isite)).and. ++ x q6label(2,iq)==unqatm(jsite)) then ++ q6site(jsite,isite) = iq ++ q6site(isite,jsite) = iq ++ driven(jsite) = .true. ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ end do ++ ++c Count number of included sites ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ q4ninc = 0 ++ q6ninc = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ isite = ltype(iatm) ++ ++ do iq = 1,nq4 ++ if (unqatm(isite)==q4label(1,iq)) q4ninc(iq) = q4ninc(iq) + 1 ++ end do ++ do iq = 1,nq6 ++ if (unqatm(isite)==q6label(1,iq)) q6ninc(iq) = q6ninc(iq) + 1 ++ end do ++ ++ end do ++ ++ if ( commsize > 0 ) then ++ if (nq4>0) call gisum(q4ninc,nq4,buff(1:nq4)) ++ if (nq6>0) call gisum(q6ninc,nq6,buff(1:nq6)) ++ end if ++ ++ deallocate(buff,stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) ++ ++ end if ! end if steinhardt order parameters ++ ++ if ( ltet ) then ++ ++ allocate(zetacutoff(1:2,1:ntet),stat=ierr(1)) ++ allocate(zeta_global(1:ntet),stat=ierr(2)) ++ allocate(zetascale(1:ntet),stat=ierr(3)) ++ allocate(zetalabel(1:ntet),stat=ierr(4)) ++ allocate(zetann(1:ntet),stat=ierr(5)) ++ allocate(zetaninc(1:ntet),stat=ierr(6)) ++ allocate(buff(1:ntet),stat=ierr(7)) ++ if (any(ierr/=0)) call Mfrz_Error(2522,0.d0) ++ ++c Open ZETA file and process ++ ++ if (onroot) then ++ open(unit=zta,file='ZETA',status='old',iostat=ierr(1)) ++ else ++ ierr(1)=0 ++ endif ++ call gisum(ierr(1),1,ierr(2)) ++ if ( ierr(1)/=0 ) call Mfrz_Error(2523,0.d0) ++ ++ ilin = 1 ++ safe=.true. ++ if (ntet>0) then ++ call getrec(safe,myrank,zta) ! Ignore comment line ++ ilin = ilin + 1 ++ do i = 1,ntet ++ call getrec(safe,myrank,zta) ++ if (safe) then ++ call getword(zetalabel(i),record,8,lenrec) ++ zetacutoff(1,i)=dblstr(record,lenrec,idum) ++ zetacutoff(2,i)=dblstr(record,lenrec,idum) ++ zetascale(i)=dblstr(record,lenrec,idum) ++ zetann(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (onroot) close(unit=zta) ++ ++ call gisum(ierr(1),ilin-1,ierr(ilin)) ++ do i = 1,ilin-1 ++ if (ierr(i)/=0) then ++ call Mfrz_Error(2529,dble(i)) ++ end if ++ end do ++ ++c Create array indicating which site-site connections use ++c which set of q4 cut-offs, scaling factors and num neighbours. ++ ++ allocate(zetasite(1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2524,0.d0) ++ zetasite(:) = 0 ++ ++ do isite = 1,size(unqatm) ++ do iq = 1,ntet ++ if (zetalabel(iq)==unqatm(isite)) then ++ zetasite(isite) = iq ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ ++c Count number of included sites ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ zetaninc(:) = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ isite = ltype(iatm) ++ ++ do iq = 1,ntet ++ if (unqatm(isite)==zetalabel(iq)) ++ x zetaninc(iq) = zetaninc(iq) + 1 ++ end do ++ end do ++ ++ if (commsize>1) then ++ if (ntet>0) call gisum(zetaninc,ntet,buff) ++ end if ++ ++c$$$ do iq = 1,ntet ++c$$$ write(0,'("Number of sites for zeta type ",I5," : ",I5)') ++c$$$ x iq,zetaninc(iq) ++c$$$ end do ++ ++ mxninc = max(100,4*maxval(zetaninc)/commsize) ++ allocate(nflist(1:mxninc),stat=ierr(1)) ++ allocate(flist(1:mxflist,1:mxninc),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2525,0.d0) ++ ++ deallocate(buff,stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) ++ ++ end if ! end if tetrahedral order parameters ++ ++c Check total number of collective variables (ncolvar) matches total ++c number specified by nq4, nq6, ntet and potential energy flags. ++ ++ k = 0 ++ if (llocpe ) k = k + 1 ++ if (lglobpe ) k = k + 1 ++ k = k + ntet + nq4 + nq6 ++ if ( k /= ncolvar ) call Mfrz_Error(2527,0.d0) ++ ++c populate colvar_scale ++ ++ k = 1 ++ do iq = 1,nq4 ++ colvar_scale(k) = q4scale(iq) ++ k = k + 1 ++ end do ++ do iq = 1,nq6 ++ colvar_scale(k) = q6scale(iq) ++ k = k + 1 ++ end do ++ do iq = 1,ntet ++ colvar_scale(k) = zetascale(iq) ++ k = k + 1 ++ end do ++ if (lglobpe) then ++ colvar_scale(k) = globpe_scale ++ k = k + 1 ++ end if ++ if (llocpe) then ++ colvar_scale(k) = locpe_scale ++ k = k + 1 ++ end if ++ ++c write(0,*)lglobpe,llocpe ++c write(0,'("DEBUG : CV Scaling factors : ",6F15.6)')colvar_scale(:) ++ ++ ++c Convert into internal units ++ ++ wt_Dt = wt_Dt*temp*boltz ++ ref_W_aug = ref_W_aug*temp*boltz ++ kt = temp*boltz ++ ++c--------------------------------------------------------------------- ++c Purge the METADYNAMICS file or re-open and read if this is a ++c restart. N.B. we assume a restart if REVOLD if present and ++c ignore keyres. ++c--------------------------------------------------------------------- ++ ++ if (onroot) then ++ inquire(file='REVOLD',exist=lexist) ++ else ++ lexist=.true. ++ endif ++ call gstate(lexist) ++ ++ if (lexist) then ++ ++c read contents of METADYNAMICS file ++ ++ if (onroot) then ++ ++ open(unit=mtd,file='METADYNAMICS',status='old',iostat=ierr(1)) ++ ++ k = 0 ++ do ++ read(unit=mtd,fmt=*,end=10)meta_step,colvar(:),waug ++ waug = waug*temp*boltz ++ if (k == 0) then ++ n = (meta_step-1)/commsize + 1 ++ colvar_his(:,n)=colvar(:) ++ w_aug(n)=waug ++ else ++ dummy(1)=dble(meta_step) ++ call csend(17947,dummy,1,k,idum) ++ call csend(17948,colvar,ncolvar,k,ierr(3)) ++ dummy(1)=waug ++ call csend(17949,dummy,1,k,ierr(4)) ++ end if ++ ++ k = k + 1 ++ if (k == commsize) k = 0 ++ end do ++ ++ 10 close(unit=mtd) ++ ++ do k=1,commsize-1 ++ dummy(1)=-dble(meta_step) ++ call csend(17947,dummy,1,k,ierr(2)) ++ end do ++ ++ else ++ ++ go = .true. ++ do while(go) ++ ++ call crecv(17947,dummy,1) ++ meta_step=nint(dummy(1)) ++ ierr(2)=0 ++ ++ if ( meta_step < 0 ) then ++ meta_step = -meta_step ++ go = .false. ++ else ++ call crecv(17948,colvar,ncolvar) ++ ierr(3)=0 ++ call crecv(17949,dummy,1) ++ waug=dummy(1) ++ ierr(4)=0 ++ n = (meta_step-1)/commsize + 1 ++ colvar_his(:,n)=colvar(:) ++ w_aug(n)=waug ++ end if ++ ++ enddo ++ ++ end if ++ call gisum(ierr(1),4,ierr(5)) ++ do i=1,4 ++ if (ierr(i)/=0) call Mfrz_Error(2531,0.d0) ++ enddo ++ meta_step = meta_step + 1 ++ ++ else ++ ++c purge any existing METADYNAMICS file ++ ++ if (onroot) then ++ ++ open(unit=mtd,file='METADYNAMICS',status='replace', ++ x iostat=ierr(1)) ++ close(unit=mtd) ++ ++ end if ++ ++ end if ++ ++ return ++ ++ end Subroutine Define_Metadynamics ++ ++ Function Fc(r,inner_cut,outer_cut) ++ ++c--------------------------------------------------------------------- ++c ++c Computes the smooth cut-off function used when computing an order ++c parameter as a function of pair separation. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 ++ real(8),intent(in) :: r,inner_cut,outer_cut ++ real(8) :: fc ++ ++ if ( r > outer_cut ) then ++ fc = 0.0d0 ++ elseif ( r > inner_cut ) then ++ fc = 0.5d0*cos((r-inner_cut)*Pi/(outer_cut-inner_cut))+0.5d0 ++ elseif ( r <= inner_cut ) then ++ fc = 1.0d0 ++ else ++ call Mfrz_Error(2532,r) ++ end if ++ ++ return ++ ++ end Function Fc ++ ++ Function Dfc(r,inner_cut,outer_cut) ++ ++c--------------------------------------------------------------------- ++c Computes the derivative of the smooth cut-off function used when ++c computing an order parameter as a function of pair separation. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 ++ real(8),intent(in) :: r,inner_cut,outer_cut ++ real(8) :: dfc ++ ++ if ( r > outer_cut ) then ++ dfc = 0.0d0 ++ elseif ( r > inner_cut ) then ++ dfc = -0.5d0*sin((r-inner_cut)*Pi/(outer_cut-inner_cut)) ++ x *Pi/(outer_cut-inner_cut) ++ else ++ dfc = 0.0d0 ++ end if ++ ++ return ++ ++ end Function Dfc ++ ++ subroutine compute_steinhardt(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c Computes nq4 Q4 and nq6 Q6 global order parameters. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use setup_module, only : mxlist ++ use utility_module, only : images ++ ++ implicit none ++ ++c Arguments ++ ++ integer,intent(in) :: imcon,natms ++ ++c sqrt(pi/13) , sqrt(pi/9) , 1/3 ++ ++ real(8),parameter :: rpibtt = 0.491590249d0 ++ real(8),parameter :: rpibn = 0.590817950d0 ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ ++c Prefactors for spherical harmonics with l = 6 ++ ++ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 ++ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 ++ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 ++ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 ++ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 ++ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 ++ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 ++ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 ++ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 ++ ++c Prefactors for spherical harmonics with l = 4 ++ ++ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 ++ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 ++ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 ++ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 ++ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 ++ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 ++ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 ++ ++c Maximum no. of entries in solvation list ++ ++ integer :: maxneigh ++ ++c Solvation shell information - Q4 ++ ++ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 ++ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 ++ integer,allocatable,dimension(:) :: solvlist4,solvtype4 ++ integer :: isolvmax4 ++ ++c Solvation shell information - Q6 ++ ++ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 ++ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 ++ integer,allocatable,dimension(:) :: solvlist6,solvtype6 ++ integer :: isolvmax6 ++ ++c separation vectors and powers thereof ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8) :: x,y,z ++ real(8) :: x2,y2,z2,x3,y3,z3 ++ real(8) :: x4,y4,z4,x5,y5,z5 ++ real(8) :: x6,y6,z6 ++ real(8) :: invrc,invrs ++ ++c list of separation vectors ++ integer :: numdst ++ integer,allocatable,dimension(:) :: dstlst ++ ++ ++c Comms buffers ++ ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++c Temporaries ++ ++ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar ++ ++c Loop counters ++ ++ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv ++ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type ++ integer :: itype,jtype,l,m,iq ++ ++ maxneigh = 100 ! Max number of atoms in coordination shell ++ ++ ierr = 0 ! Error flags ++ ++ ++c DQ - modified 10/12/11, arrays now big enough ++c to hold maximum number of neighbours plus ++c maximum number of excluded atoms. ++ allocate(xdf(1:mxlist+mxexcl),stat=ierr(1)) ++ allocate(ydf(1:mxlist+mxexcl),stat=ierr(2)) ++ allocate(zdf(1:mxlist+mxexcl),stat=ierr(3)) ++ ++c DQ - modified 10/12/11, array to hold a list of ++c all atom entries in the above three arrays ++ allocate(dstlst(1:mxlist+mxexcl),stat=ierr(4)) ++ ++ allocate(solvx4(1:maxneigh),stat=ierr(5)) ++ allocate(solvy4(1:maxneigh),stat=ierr(6)) ++ allocate(solvz4(1:maxneigh),stat=ierr(7)) ++ allocate(solvrmag4(1:maxneigh),stat=ierr(8)) ++ allocate(solvimag4(1:maxneigh),stat=ierr(9)) ++ allocate(solvrsq4 (1:maxneigh),stat=ierr(10)) ++ allocate(solvlist4(1:maxneigh),stat=ierr(11)) ++ allocate(solvtype4(1:maxneigh),stat=ierr(12)) ++ ++ allocate(solvx6(1:maxneigh),stat=ierr(13)) ++ allocate(solvy6(1:maxneigh),stat=ierr(14)) ++ allocate(solvz6(1:maxneigh),stat=ierr(15)) ++ allocate(solvrmag6(1:maxneigh),stat=ierr(16)) ++ allocate(solvimag6(1:maxneigh),stat=ierr(17)) ++ allocate(solvrsq6 (1:maxneigh),stat=ierr(18)) ++ allocate(solvlist6(1:maxneigh),stat=ierr(19)) ++ allocate(solvtype6(1:maxneigh),stat=ierr(20)) ++ if (any(ierr/=0)) call Mfrz_Error(2533,0.d0) ++ ++ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) ++ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) ++ ++c Zero accumulators used in Steinhardt order parameters ++ ++ ReQ6bar = 0.0d0 ++ ImQ6bar = 0.0d0 ++ ReQ4bar = 0.0d0 ++ ImQ4bar = 0.0d0 ++ ++c Set atoms looped over by current rank ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++c -------------------------------------------------------------- ++c Build a list of the required connections to iatm. This ++c differs depending on the version of DLPOLY we are using. ++c First we loop over atoms in the neighbour list of iatm. ++c--------------------------------------------------------------- ++ ++ ii = ii + 1 ++ isite=ltype(iatm) ++ limit=lentry(ii) ++ nn = 0 ++ do k = 1,limit ++ ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ dstlst(nn) = jatm ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++c -------------------------------------------------------------- ++c Next we loop over the excluded atom list of iatm and add ++c and pairs needed for computation of the current OP. ++c--------------------------------------------------------------- ++ ++ccc DEBUG ++ccc write(0,'("atom ",I5," has ",I5," excluded interactions")') ++ccc x iatm,mtd_nexatm(iatm) ++ ++ do k = 1,mtd_nexatm(ii) ++ ++ jatm = mtd_lexatm(ii,k) ++ jsite = ltype(jatm) ++ ++ccc DEBUG ++ccc write(0,'("Interaction with atom ",I5," is excluded. ")')jatm ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ dstlst(nn) = jatm ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++ccc DEBUG ++ccc write(0,'("Num neighbours to consider for atom ",I5," : ",I5)') ++ccc x iatm,nn ++ ++ numdst = nn ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ nn = 0 ++ isolvmax4 = 0 ++ isolvmax6 = 0 ++ isolv4 = 0 ++ isolv6 = 0 ++ ++ do k = 1,numdst ++ jatm = dstlst(k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ q4type = q4site(jsite,isite) ++ q6type = q6site(jsite,isite) ++ ++ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) ++ ++ if (nq4>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q4cutoff(2,q4type)**2 ) then ++ isolv4 = isolv4 + 1 ++ solvlist4(isolv4) = jatm ++ solvrsq4(isolv4) = tmpsq ++ solvrmag4(isolv4) = sqrt(tmpsq) ++ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) ++ solvx4(isolv4) = xdf(nn) ++ solvy4(isolv4) = ydf(nn) ++ solvz4(isolv4) = zdf(nn) ++ solvtype4(isolv4) = q4type ++ end if ++ end if ++ ++ if (nq6>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q6cutoff(2,q6type)**2 ) then ++ isolv6 = isolv6 + 1 ++ solvlist6(isolv6) = jatm ++ solvrsq6(isolv6) = tmpsq ++ solvrmag6(isolv6) = sqrt(tmpsq) ++ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) ++ solvx6(isolv6) = xdf(nn) ++ solvy6(isolv6) = ydf(nn) ++ solvz6(isolv6) = zdf(nn) ++ solvtype6(isolv6) = q6type ++ end if ++ end if ++ isolvmax4 = isolv4 ++ isolvmax6 = isolv6 ++ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) ++ x call Mfrz_Error(2535,0.d0) ++ ++ end do ! end loop over k ++ ++ccc write(0,'("Num in range for OPs on atom ",I5," : ",I5)') ++ccc x iatm,isolvmax4 ++ ++ ++c--------------------------------------------------------- ++c Compute Q4 Steinhardt order parameters ++c--------------------------------------------------------- ++ ++ if ( (nq4>0).and.isolvmax4>0 ) then ++ ++ do isolv4 = 1,isolvmax4 ++ ++ jatm = solvlist4(isolv4) ++ itype = solvtype4(isolv4) ++ ++ invrc = solvimag4(isolv4)**6 ++ invrs = solvimag4(isolv4)**4 ++ ++ x = solvx4(isolv4) ++ y = solvy4(isolv4) ++ z = solvz4(isolv4) ++ ++ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-4/+4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) ++ ++ ReQ4bar(-4,itype) = ReQ4bar(-4,itype) + f_ij*ReYlm ++ ImQ4bar(-4,itype) = ImQ4bar(-4,itype) + f_ij*ImYlm ++ ++ ReQ4bar(+4,itype) = ReQ4bar(+4,itype) + f_ij*ReYlm ++ ImQ4bar(+4,itype) = ImQ4bar(+4,itype) - f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-3/+3) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) ++ ++ ReQ4bar(-3,itype) = ReQ4bar(-3,itype) + f_ij*ReYlm ++ ImQ4bar(-3,itype) = ImQ4bar(-3,itype) + f_ij*ImYlm ++ ++ ReQ4bar(+3,itype) = ReQ4bar(+3,itype) - f_ij*ReYlm ++ ImQ4bar(+3,itype) = ImQ4bar(+3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-2/+2) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++ ReQ4bar(-2,itype) = ReQ4bar(-2,itype) + f_ij*ReYlm ++ ImQ4bar(-2,itype) = ImQ4bar(-2,itype) + f_ij*ImYlm ++ ++ ReQ4bar(+2,itype) = ReQ4bar(+2,itype) + f_ij*ReYlm ++ ImQ4bar(+2,itype) = ImQ4bar(+2,itype) - f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-1/+1) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ ++ ReQ4bar(-1,itype) = ReQ4bar(-1,itype) + f_ij*ReYlm ++ ImQ4bar(-1,itype) = ImQ4bar(-1,itype) + f_ij*ImYlm ++ ++ ReQ4bar(+1,itype) = ReQ4bar(+1,itype) - f_ij*ReYlm ++ ImQ4bar(+1,itype) = ImQ4bar(+1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(0) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ ReQ4bar(0,itype) = ReQ4bar(0,itype) + f_ij*ReYlm ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end if computing Q4 ++ ++c------------------------------------------------ ++c Compute Q6 Steinhardt order parameters ++c------------------------------------------------ ++ ++ if ( (nq6>0).and.isolvmax6>0 ) then ++ ++ do isolv6 = 1,isolvmax6 ++ ++ jatm = solvlist6(isolv6) ++ itype = solvtype6(isolv6) ++ ++ invrc = solvimag6(isolv6)**6 ++ invrs = solvimag6(isolv6)**4 ++ ++ x = solvx6(isolv6) ++ y = solvy6(isolv6) ++ z = solvz6(isolv6) ++ ++ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-6/+6) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) ++ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0*x*y5) ++ ++ ReQ6bar(-6,itype) = ReQ6bar(-6,itype) + f_ij*ReYlm ++ ImQ6bar(-6,itype) = ImQ6bar(-6,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+6,itype) = ReQ6bar(+6,itype) + f_ij*ReYlm ++ ImQ6bar(+6,itype) = ImQ6bar(+6,itype) - f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-5/+5) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) ++ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) ++ ++ ReQ6bar(-5,itype) = ReQ6bar(-5,itype) + f_ij*ReYlm ++ ImQ6bar(-5,itype) = ImQ6bar(-5,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+5,itype) = ReQ6bar(+5,itype) - f_ij*ReYlm ++ ImQ6bar(+5,itype) = ImQ6bar(+5,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-4/+4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) ++ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y+ ++ x 4.0d0*x*y3) ++ ++ ReQ6bar(-4,itype) = ReQ6bar(-4,itype) + f_ij*ReYlm ++ ImQ6bar(-4,itype) = ImQ6bar(-4,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+4,itype) = ReQ6bar(+4,itype) + f_ij*ReYlm ++ ImQ6bar(+4,itype) = ImQ6bar(+4,itype) - f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-3/+3) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (-x3+3.0d0*x*y2) ++ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (3.0d0*x2*y-y3) ++ ++ ReQ6bar(-3,itype) = ReQ6bar(-3,itype) + f_ij*ReYlm ++ ImQ6bar(-3,itype) = ImQ6bar(-3,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+3,itype) = ReQ6bar(+3,itype) - f_ij*ReYlm ++ ImQ6bar(+3,itype) = ImQ6bar(+3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-2/+2) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2*y2+ ++ x x4+2.0d0*x2*y2+y4)*(x2-y2) ++ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2-16.0d0* ++ x z2*y2+x4+2.0d0*x2*y2+y4)*x*y ++ ++ ReQ6bar(-2,itype) = ReQ6bar(-2,itype) + f_ij*ReYlm ++ ImQ6bar(-2,itype) = ImQ6bar(-2,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+2,itype) = ReQ6bar(+2,itype) + f_ij*ReYlm ++ ImQ6bar(+2,itype) = ImQ6bar(+2,itype) - f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-1/+1) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++ ReQ6bar(-1,itype) = ReQ6bar(-1,itype) + f_ij*ReYlm ++ ImQ6bar(-1,itype) = ImQ6bar(-1,itype) + f_ij*ImYlm ++ ++ ReQ6bar(+1,itype) = ReQ6bar(+1,itype) - f_ij*ReYlm ++ ImQ6bar(+1,itype) = ImQ6bar(+1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(0) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0*z4* ++ x y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4-5.0d0 ++ x *x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) ++ ++ ReQ6bar(0,itype) = ReQ6bar(0,itype) + f_ij*ReYlm ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end if computing Q6 ++ ++ end do ! end loop over iatm ++ ++c----------------------------------------------- ++c Global summation of order parameters ++c----------------------------------------------- ++ ++ l = 1 ++ do itype = 1,nq4 ++ do m = -4,4 ++ buff1(l) = ReQ4bar(m,itype) ++ l = l + 1 ++ end do ++ do m = -4,4 ++ buff1(l) = ImQ4bar(m,itype) ++ l = l + 1 ++ end do ++ end do ++ do itype = 1,nq6 ++ do m = -6,6 ++ buff1(l) = ReQ6bar(m,itype) ++ l = l + 1 ++ end do ++ do m = -6,6 ++ buff1(l) = ImQ6bar(m,itype) ++ l = l + 1 ++ end do ++ end do ++ ++ if (commsize>1) call gdsum(buff1,18*nq4+26*nq6,buff2) ++ ++ l = 1 ++ do itype = 1,nq4 ++ do m = -4,4 ++ ReQ4bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ do m = -4,4 ++ ImQ4bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ end do ++ do itype = 1,nq6 ++ do m = -6,6 ++ ReQ6bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ do m = -6,6 ++ ImQ6bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ end do ++ ++c--------------------------------------------------- ++c Final computation of global order parameters ++c--------------------------------------------------- ++ ++ l = 1 ++ do iq = 1,nq4 ++ tmpvar = 0.0d0 ++ do m = 1,18 ++ tmpvar = tmpvar + buff1(l)**2 ++ l = l + 1 ++ end do ++ q4_global(iq) = 4.0d0*rpibn*sqrt(tmpvar)/ ++ x dble(q4ninc(iq)*q4nn(iq)) ++ end do ++ ++ do iq = 1,nq6 ++ tmpvar = 0.0d0 ++ do m = 1,26 ++ tmpvar = tmpvar + buff1(l)**2 ++ l = l + 1 ++ end do ++ q6_global(iq) = 4.0d0*rpibtt*sqrt(tmpvar)/ ++ x dble(q6ninc(iq)*q6nn(iq)) ++ end do ++ ++c Tidy up ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ ++ deallocate(dstlst,stat=ierr(4)) ++ ++ deallocate(solvx4,stat=ierr(5)) ++ deallocate(solvy4,stat=ierr(6)) ++ deallocate(solvz4,stat=ierr(7)) ++ deallocate(solvrmag4,stat=ierr(8)) ++ deallocate(solvimag4,stat=ierr(9)) ++ deallocate(solvrsq4 ,stat=ierr(10)) ++ deallocate(solvlist4,stat=ierr(11)) ++ deallocate(solvtype4,stat=ierr(12)) ++ ++ deallocate(solvx6,stat=ierr(13)) ++ deallocate(solvy6,stat=ierr(14)) ++ deallocate(solvz6,stat=ierr(15)) ++ deallocate(solvrmag6,stat=ierr(16)) ++ deallocate(solvimag6,stat=ierr(17)) ++ deallocate(solvrsq6 ,stat=ierr(18)) ++ deallocate(solvlist6,stat=ierr(19)) ++ deallocate(solvtype6,stat=ierr(20)) ++ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) ++ ++ deallocate(buff1,stat=ierr(1)) ++ deallocate(buff2,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Steinhardt ++ ++ Subroutine Compute_Steinhardt_Forces(imcon,natms,engord,virord) ++ ++c--------------------------------------------------------------------- ++c ++c Computes forces from nq4 Q4 and nq6 Q6 global order parameters. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use setup_module, only : mxlist ++ use utility_module, only : images ++ implicit none ++ ++c Arguments ++ ++ integer,intent(in) :: imcon,natms ++ ++ real(8),intent(inout) :: engord,virord ++ ++c sqrt(pi/13) , sqrt(pi/9) , 1/3 ++ ++ real(8),parameter :: rpibtt = 0.491590249d0 ++ real(8),parameter :: rpibn = 0.590817950d0 ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ ++c Prefactors for spherical harmonics with l = 6 ++ ++ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 ++ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 ++ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 ++ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 ++ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 ++ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 ++ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 ++ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 ++ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 ++ ++c Prefactors for speherical harmonics with l = 4 ++ ++ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 ++ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 ++ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 ++ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 ++ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 ++ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 ++ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 ++ ++c Maximum no. of entries in solvation list ++ ++ integer :: maxneigh ++ ++c Solvation shell information - Q4 ++ ++ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 ++ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 ++ integer,allocatable,dimension(:) :: solvlist4,solvtype4 ++ integer :: isolvmax4 ++ ++c Solvation shell information - Q6 ++ ++ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 ++ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 ++ integer,allocatable,dimension(:) :: solvlist6,solvtype6 ++ integer :: isolvmax6 ++ ++c Prefactors arising from derivative of bias potential ++ ++ real(8),allocatable,dimension(:) :: q4prefactor,q6prefactor ++ ++c Separation vectors and powers thereof ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8) :: x,y,z ++ real(8) :: x2,y2,z2,x3,y3,z3 ++ real(8) :: x4,y4,z4,x5,y5,z5 ++ real(8) :: x6,y6,z6 ++ real(8) :: invrc,invrs,invrq ++ ++c list of separation vectors ++ integer :: numdst ++ integer,allocatable,dimension(:) :: dstlst ++ ++c Comms buffers ++ ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++c Temporaries ++ ++ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar,invrN ++ real(8) :: fx,fy,fz,fx2,fy2,fz2,prefactor2,fx1,fy1,fz1 ++ real(8) :: strs1,strs2,strs3,strs4,strs5,strs6,strs7,strs8,strs9 ++ ++ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv ++ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type ++ integer :: itype,jtype,l,m,iq ++ ++ maxneigh = 500 ! Max number of atoms in coordination shell ++ ++ ierr = 0 ! Error flags ++ ++c DQ - modified 10/12/11, arrays now big enough ++c to hold maximum number of neighbours plus ++c maximum number of excluded atoms. ++ allocate(xdf(1:mxlist+mxexcl),stat=ierr(1)) ++ allocate(ydf(1:mxlist+mxexcl),stat=ierr(2)) ++ allocate(zdf(1:mxlist+mxexcl),stat=ierr(3)) ++ ++c DQ - modified 10/12/11, array to hold a list of ++c all atom entries in the above three arrays ++ allocate(dstlst(1:mxlist+mxexcl),stat=ierr(4)) ++ ++ allocate(solvx4(1:maxneigh),stat=ierr(5)) ++ allocate(solvy4(1:maxneigh),stat=ierr(6)) ++ allocate(solvz4(1:maxneigh),stat=ierr(7)) ++ allocate(solvrmag4(1:maxneigh),stat=ierr(8)) ++ allocate(solvimag4(1:maxneigh),stat=ierr(9)) ++ allocate(solvrsq4 (1:maxneigh),stat=ierr(10)) ++ allocate(solvlist4(1:maxneigh),stat=ierr(11)) ++ allocate(solvtype4(1:maxneigh),stat=ierr(12)) ++ ++ allocate(solvx6(1:maxneigh),stat=ierr(13)) ++ allocate(solvy6(1:maxneigh),stat=ierr(14)) ++ allocate(solvz6(1:maxneigh),stat=ierr(15)) ++ allocate(solvrmag6(1:maxneigh),stat=ierr(16)) ++ allocate(solvimag6(1:maxneigh),stat=ierr(17)) ++ allocate(solvrsq6 (1:maxneigh),stat=ierr(18)) ++ allocate(solvlist6(1:maxneigh),stat=ierr(19)) ++ allocate(solvtype6(1:maxneigh),stat=ierr(20)) ++ if (any(ierr/=0)) call Mfrz_Error(2538,0.d0) ++ ++ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) ++ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) ++ ++ allocate(q4prefactor(1:nq4),stat=ierr(1)) ++ allocate(q6prefactor(1:nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) ++ ++c Compute the prefactors associated from dV_aug/d_q4 ++ ++ k = 1 ++ do iq = 1,nq4 ++ invrN = 1.0d0/dble(q4ninc(iq)*q4nn(iq)) ++ q4prefactor(iq) = -16.0d0*(rpibn**2)*(invrN**2)*dcolvar(k)/ ++ x Q4_global(iq) ++ k = k + 1 ++ end do ++ ++c Compute the prefactors associated from dV_aug/d_q6 ++ ++ do iq = 1,nq6 ++ invrN = 1.0d0/dble(q6ninc(iq)*q6nn(iq)) ++ q6prefactor(iq) = -16.0d0*(rpibtt**2)*(invrN**2)*dcolvar(k)/ ++ x Q6_global(iq) ++ k = k + 1 ++ end do ++ ++c write(0,'("DEBUG : q4prefactors = ",5F15.6)')q4prefactor ++ ++c Set atoms looper over by current rank ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ strs1 = 0.0d0 ++ strs2 = 0.0d0 ++ strs3 = 0.0d0 ++ strs4 = 0.0d0 ++ strs5 = 0.0d0 ++ strs6 = 0.0d0 ++ strs7 = 0.0d0 ++ strs8 = 0.0d0 ++ strs9 = 0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++c -------------------------------------------------------------- ++c Build a list of the required connections to iatm. This ++c differs depending on the version of DLPOLY we are using. ++c First we loop over atoms in the neighbour list of iatm. ++c--------------------------------------------------------------- ++ ++ ii = ii + 1 ++ isite=ltype(iatm) ++ limit=lentry(ii) ++ ++ nn = 0 ++ do k = 1,limit ++ ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ dstlst(nn) = jatm ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++c -------------------------------------------------------------- ++c Next we loop over the excluded atom list of iatm and add ++c and pairs needed for computation of the current OP. ++c--------------------------------------------------------------- ++ ++ccc DEBUG ++ccc write(0,'("atom ",I5," has ",I5," excluded interactions")') ++ccc x iatm,mtd_nexatm(iatm) ++ ++ do k = 1,mtd_nexatm(ii) ++ ++ jatm = mtd_lexatm(ii,k) ++ jsite = ltype(jatm) ++ ++ccc DEBUG ++ccc write(0,'("Interaction with atom ",I5," is excluded. ")')jatm ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ dstlst(nn) = jatm ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++ccc DEBUG ++ccc write(0,*) ++ ++ numdst = nn ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ nn = 0 ++ isolvmax4 = 0 ++ isolvmax6 = 0 ++ isolv4 = 0 ++ isolv6 = 0 ++ do k = 1,numdst ++ jatm = dstlst(k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ q4type = q4site(jsite,isite) ++ q6type = q6site(jsite,isite) ++ ++ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) ++ if (nq4>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q4cutoff(2,q4type)**2 ) then ++ isolv4 = isolv4 + 1 ++ solvlist4(isolv4) = jatm ++ solvrsq4(isolv4) = tmpsq ++ solvrmag4(isolv4) = sqrt(tmpsq) ++ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) ++ solvx4(isolv4) = xdf(nn) ++ solvy4(isolv4) = ydf(nn) ++ solvz4(isolv4) = zdf(nn) ++ solvtype4(isolv4) = q4type ++ end if ++ end if ++ ++ if (nq6>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q6cutoff(2,q6type)**2 ) then ++ isolv6 = isolv6 + 1 ++ solvlist6(isolv6) = jatm ++ solvrsq6(isolv6) = tmpsq ++ solvrmag6(isolv6) = sqrt(tmpsq) ++ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) ++ solvx6(isolv6) = xdf(nn) ++ solvy6(isolv6) = ydf(nn) ++ solvz6(isolv6) = zdf(nn) ++ solvtype6(isolv6) = q6type ++ end if ++ end if ++ isolvmax4 = isolv4 ++ isolvmax6 = isolv6 ++ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) ++ x call Mfrz_Error(2535,0.d0) ++ ++ end do ! end loop over k ++ ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++c Compute forces arising from Q4 order parameters ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++ ++ if ( (nq4>0).and.isolvmax4>0 ) then ++ ++ do isolv4 = 1,isolvmax4 ++ ++ jatm = solvlist4(isolv4) ++ itype = solvtype4(isolv4) ++ ++ invrc = solvimag4(isolv4)**6 ++ invrq = solvimag4(isolv4)**8 ++ invrs = solvimag4(isolv4)**4 ++ ++ x = solvx4(isolv4) ++ y = solvy4(isolv4) ++ z = solvz4(isolv4) ++ ++ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ df_ij = dfc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++ fx = 0.0d0 ++ fy = 0.0d0 ++ fz = 0.0d0 ++ ++c------------------------------------- ++c Gradient of f_ij w.r.t. r_{j} ++c------------------------------------- ++ ++ fx2 = df_ij*x*solvimag4(isolv4) ++ fy2 = df_ij*y*solvimag4(isolv4) ++ fz2 = df_ij*z*solvimag4(isolv4) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -4 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -4 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{4,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrc*ypre4m4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- ++ x 3.d0*z2*y2) ++ fy1 = -invrc*ypre4m4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* ++ x z2*x2-z2*y2) ++ fz1 = -invrc*ypre4m4*4.d0*z*(x4-6.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -4 (imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-4,itype) ++ ++c---------------------------------------------- ++c Gradient of Im(Y_{4,-4}) w.r.t r_{j} ++c---------------------------------------------- ++ ++ fx1 = invrc*ypre4m4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ ++ x y4+z2*y2) ++ fy1 = -invrc*ypre4m4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- ++ x 3.d0*z2*y2) ++ fz1 = invrc*ypre4m4*16.d0*x*y*z*(x2-y2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -3 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-3,itype) ++ ++c--------------------------------------------- ++c Gradient of Re(Y_{4,-3}) w.r.t r_{j} ++c--------------------------------------------- ++ ++ fx1 = -invrc*ypre4m3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+ ++ x 3.d0*y4+3.d0*z2*y2) ++ fy1 = -invrc*ypre4m3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+ ++ x 3.d0*z2) ++ fz1 = invrc*ypre4m3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -3 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-3,itype) ++ ++c-------------------------------------------------- ++c Gradient of Im(Y_{4,-3}) w.r.t r_{j} ++c-------------------------------------------------- ++ ++ fx1 = invrc*ypre4m3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) ++ fy1 = -invrc*ypre4m3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 ++ x -3.d0*z2*y2) ++ fz1 = -invrc*ypre4m3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -2 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-2,itype) ++ ++c--------------------------------------------- ++c Gradient of Re(Y_{4,-2}) w.r.t r_{j} ++c--------------------------------------------- ++ ++ fx1 = -invrc*ypre4m2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fy1 = invrc*ypre4m2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fz1 = invrc*ypre4m2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- ++ x 3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -2 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-2,itype) ++ ++c----------------------------------------- ++c Gradient of Im(Y_{4,-2}) w.r.t r_{j} ++c----------------------------------------- ++ ++ fx1 = -invrc*ypre4m2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ ++ x 6.d0*z4-y4) ++ fy1 = invrc*ypre4m2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 ++ x -6.d0*z4+x4) ++ fz1 = -invrc*ypre4m2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -1 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-1,itype) ++ ++c---------------------------------------- ++c Gradient of Re(Y_{4,-1}) w.r.t r_{j} ++c---------------------------------------- ++ ++ fx1 = invrc*ypre4m1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- ++ x 3.d0*y4) ++ fy1 = invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fz1 = -invrc*ypre4m1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -1 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fy1 = invrc*ypre4m1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4+ ++ x 3.d0*x4) ++ fz1 = invrc*ypre4m1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real spherical harmonics for m = 0 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++c-------------------------------------------------- ++c Force contributions from m = 0 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(0,itype) ++ ++c------------------------------------------- ++c Gradient of Re(Y_{4,0}) w.r.t r_{j} ++c------------------------------------------- ++ ++ fx1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ fy1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ fz1 = -20.d0*ypre4m0*invrc*z*(-4.d0*z2*x2-4.d0*z2*y2+3.d0* ++ x x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c Add into global force and stress arrays ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++c Virial ++ ++ virord = virord - (fx*x + fy*y + fz*z) ++ ++c Stress ++ ++ strs1=strs1+x*fx ++ strs2=strs2+x*fy ++ strs3=strs3+x*fz ++ strs5=strs5+y*fy ++ strs6=strs6+y*fz ++ strs9=strs9+z*fz ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end of computing Q4 ++ ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++c Compute forces arising from Q6 order parameters ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++ ++ if ( (nq6>0).and.isolvmax6>0 ) then ++ ++ do isolv6 = 1,isolvmax6 ++ ++ jatm = solvlist6(isolv6) ++ itype = solvtype6(isolv6) ++ ++ invrc = solvimag6(isolv6)**6 ++ invrq = solvimag6(isolv6)**8 ++ invrs = solvimag6(isolv6)**4 ++ ++ x = solvx6(isolv6) ++ y = solvy6(isolv6) ++ z = solvz6(isolv6) ++ ++ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ df_ij = dfc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++ fx = 0.0d0 ++ fy = 0.0d0 ++ fz = 0.0d0 ++ ++c---------------------------------------- ++c Gradient of f_ij w.r.t. r_{j} ++c---------------------------------------- ++ ++ fx2 = df_ij*x*solvimag6(isolv6) ++ fy2 = df_ij*y*solvimag6(isolv6) ++ fz2 = df_ij*z*solvimag6(isolv6) ++ ++c----------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -6 ++c----------------------------------------------------------- ++ ++ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) ++ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0* ++ x x*y5) ++ ++c----------------------------------------------------- ++c Force contributions from m = -6 (real part) ++c----------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-6,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrq*ypre6m6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ ++ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fy1 = -invrq*ypre6m6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+6.0d0 ++ x *x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+z2*y4) ++ fz1 = -invrq*ypre6m6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2* ++ x y4-y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c---------------------------------------------------------- ++c Force contributions from m = -6 (Imaginary part) ++c---------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-6,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrq*ypre6m6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0*x2* ++ x y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) ++ fy1 = -invrq*ypre6m6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2*y4- ++ x y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = invrq*ypre6m6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2*y2+ ++ x 3.0d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c--------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -5 ++c--------------------------------------------------------- ++ ++ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) ++ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) ++ ++c-------------------------------------------------- ++c Force contributions from m = -5 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-5,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6m5*invrq*z*(-x6+35.0d0*x4*y2-55.d0*x2*y4+ ++ x 5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) ++ fy1 = -2.0d0*ypre6m5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2 ++ x *y2+5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fz1 = -ypre6m5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -5 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-5,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.0d0*ypre6m5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2 ++ x -13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fy1 = -ypre6m5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4-y6+ ++ x 5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = ypre6m5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -4 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) ++ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y+4.0d0* ++ x x*y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -4 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.0d0*ypre6m4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ ++ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4* ++ x x2-60.0d0*z4*y2) ++ fy1 =-2.0d0*ypre6m4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 ++ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- ++ x 20.0d0*z4*y2) ++ fz1 =-2.0d0*ypre6m4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0 ++ x *x2-13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -4 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -4.0d0*ypre6m4*invrq*y*(x6-35.0d0*z2*x4-5.0d0*x2*y4 ++ x +80.0d0*z2*x2*y2+30*z4*x2-9.0d0*z2*y4-10*z4*y2-5.0d0 ++ x *x4*y2+y6) ++ fy1 = -4.0d0*ypre6m4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 ++ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 ++ x *y2-x6+5.0d0*x2*y4) ++ fz1 = 8.0d0*ypre6m4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- ++ x 13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -3 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (-x3+3.0d0*x*y2) ++ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (3.0d0*x2*y-y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-3,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 3.d0*ypre6m3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- ++ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- ++ x 8.d0*z4*y2+3.d0*y6) ++ fy1 = -6.d0*ypre6m3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+14.d0 ++ x *z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) ++ fz1 = -3.d0*ypre6m3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -3 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-3,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -6.d0*ypre6m3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 ++ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) ++ fy1 = -3.d0*ypre6m3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 ++ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 ++ x *z4*y2-3.d0*x6) ++ fz1 = 3.d0*ypre6m3*invrq*y*(3.d0*x2-y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -2 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2 ++ x *y2+x4+2.0d0*x2*y2+y4)*(x2-y2) ++ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2- ++ x 16.0d0*z2*y2+x4+2.0d0*x2*y2+y4)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-2,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6m2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- ++ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ ++ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) ++ fy1 = -2.d0*ypre6m2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ ++ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0* ++ x x2*y4+16.d0*z6-30.d0*z2*x2*y2) ++ fz1 = -2.d0*ypre6m2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 ++ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -2 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-2,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.d0*ypre6m2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2* ++ x y2-128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0* ++ x z2*y4+y6) ++ fy1 = -2.d0*ypre6m2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2* ++ x y4-128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0* ++ x z2*x4+x6) ++ fz1 = 4.d0*ypre6m2*invrq*z*x*y*(-64.d0*z2*x2-64.d0* ++ x z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -1 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 ++ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 ++ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6m1*invrq*z*(85.d0*z2*x4+70.d0*z2*x2*y2 ++ x -100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0 ++ x *z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) ++ fy1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2* ++ x y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fz1 = -ypre6m1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ ++ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- ++ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -1 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0* ++ x z2*y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fy1 = -ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2 ++ x *y4-100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6 ++ x -12.d0*z4*x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) ++ fz1 = ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4 ++ x *y2+8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0* ++ x z2*y4-5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real spherical harmonics for m = 0 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0 ++ x *z4*y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4 ++ x -5.0d0*x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) ++ ++c-------------------------------------------------- ++c Force contributions from m = 0 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(0,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,0}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 ++ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*x ++ fy1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 ++ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*y ++ fz1 = 42.d0*ypre6m0*invrq*z*(8.d0*z4*x2+8.d0*z4*y2-20.d0 ++ x *z2*x4-40.d0*z2*x2*y2-20.d0*z2*y4+5.d0*x6+15.d0*x4* ++ x y2+15.d0*x2*y4+5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++ ++c Add into global force and stress arrays ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++c Virial ++ ++ virord = virord - (fx*x + fy*y + fz*z) ++ ++c Stress ++ ++ strs1=strs1+x*fx ++ strs2=strs2+x*fy ++ strs3=strs3+x*fz ++ strs5=strs5+y*fy ++ strs6=strs6+y*fz ++ strs9=strs9+z*fz ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end of computing Q6 ++ ++ ++ end do ! end loop over iatm ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs1 ++ stress(2)=stress(2)+strs2 ++ stress(3)=stress(3)+strs3 ++ stress(4)=stress(4)+strs2 ++ stress(5)=stress(5)+strs5 ++ stress(6)=stress(6)+strs6 ++ stress(7)=stress(7)+strs3 ++ stress(8)=stress(8)+strs6 ++ stress(9)=stress(9)+strs9 ++ ++c tidy up ++ ++ ierr = 0 ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ ++ deallocate(dstlst,stat=ierr(4)) ++ ++ deallocate(solvx4,stat=ierr(5)) ++ deallocate(solvy4,stat=ierr(6)) ++ deallocate(solvz4,stat=ierr(7)) ++ deallocate(solvrmag4,stat=ierr(8)) ++ deallocate(solvimag4,stat=ierr(9)) ++ deallocate(solvrsq4 ,stat=ierr(10)) ++ deallocate(solvlist4,stat=ierr(11)) ++ deallocate(solvtype4,stat=ierr(12)) ++ ++ deallocate(solvx6,stat=ierr(13)) ++ deallocate(solvy6,stat=ierr(14)) ++ deallocate(solvz6,stat=ierr(15)) ++ deallocate(solvrmag6,stat=ierr(16)) ++ deallocate(solvimag6,stat=ierr(17)) ++ deallocate(solvrsq6 ,stat=ierr(18)) ++ deallocate(solvlist6,stat=ierr(19)) ++ deallocate(solvtype6,stat=ierr(20)) ++ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) ++ ++ deallocate(buff1,stat=ierr(1)) ++ deallocate(buff2,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) ++ ++ deallocate(q4prefactor,stat=ierr(1)) ++ deallocate(q6prefactor,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Steinhardt_Forces ++ ++ Subroutine Compute_Tet_Nlist(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c The existing neighbour list is not known by all nodes and ++c therefore we compute a new one from scratch rather than trying ++c to merge a full neighbour list across all MPI tasks or restore ++c symmetry. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ integer :: nlast,megatm ++ ++ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype ++ integer :: ninclude,ifi,ii,ztype,nnn,k ++ real(8) :: rsq,rangesq ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ ninclude = maxval(zetaninc) ++ ++ nlast = natms ++ megatm = natms ++ ++ nnn = int(dble(ninclude*nlast*1.2)/dble(megatm)) ++ ++ allocate(xdf(1:nnn),stat=ierr(1)) ++ allocate(ydf(1:nnn),stat=ierr(2)) ++ allocate(zdf(1:nnn),stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2541,0.d0) ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++ ztype = zetasite(itype) ++ if ( ztype==0 ) cycle ++ ++ nn = 0 ! Number of images to compute ++ ii = ii + 1 ! index for this list ++ ifi = 0 ! index for entries in this list ++ ++ if (ii>mxninc) call Mfrz_Error(2542,0.d0) ++ ++ do jatm = 1,nlast ++ ++ jtype = ltype(jatm) ++ ++ if ( itype/=jtype ) cycle ++ if ( iatm == jatm ) cycle ++ ++ nn = nn + 1 ++ xdf(nn) = xxx(iatm) - xxx(jatm) ! separation vector ++ ydf(nn) = yyy(iatm) - yyy(jatm) ++ zdf(nn) = zzz(iatm) - zzz(jatm) ++ ++ end do ++ ++ if ( nn > nnn ) call Mfrz_Error(2543,0.d0) ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ nn = 0 ++ do jatm = 1,nlast ++ ++ jtype = ltype(jatm) ++ ++ if ( itype/=jtype ) cycle ++ if ( iatm == jatm ) cycle ++ ++ nn = nn + 1 ++ rsq = xdf(nn)*xdf(nn) + ydf(nn)*ydf(nn) + zdf(nn)*zdf(nn) ++ ++ rangesq = zetacutoff(2,ztype)**2 ++ ++ if ( rsq < rangesq ) then ++ ++ ifi = ifi + 1 ++ flist(ifi,ii) = jatm ++ ++ end if ++ ++ end do ++ if ( ifi > mxflist ) call Mfrz_Error(2544,0.d0) ++ nflist(ii) = ifi ++ ++ end do ! end loop over iatm ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ if (any(ierr/=0))call Mfrz_Error(2545,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tet_Nlist ++ ++ Subroutine Compute_Tetrahedral(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ ++ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype ++ integer :: ninclude,ifi,ii,k,ztype,mm,katm,ktype,it ++ real(8) :: f_ij,f_ik,r_ij,r_ik,x,y,z,dot ++ real(8),parameter :: third=1.0d0/3.0d0 ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8),allocatable,dimension(:) :: buff1 ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ allocate(xdf(1:mxflist),stat=ierr(1)) ++ allocate(ydf(1:mxflist),stat=ierr(2)) ++ allocate(zdf(1:mxflist),stat=ierr(3)) ++ allocate(buff1(1:ntet),stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2546,0.d0) ++ ++ zeta_global(:) = 0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++c no tetrahedral contributions from this atom type? ++ ++ ztype = zetasite(itype) ++ if ( ztype == 0 ) cycle ++ ++ ii = ii + 1 ! index for this list ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector ++ ydf(k) = yyy(jatm) - yyy(iatm) ++ zdf(k) = zzz(jatm) - zzz(iatm) ++ ++ end do ++ ++ nn = nflist(ii) ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) ++ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ x = xdf(k) ; y = ydf(k) ; z = zdf(k) ++ ++c loop over all other entries katm ++ ++ do mm = k+1,nflist(ii) ++ ++c katm also in solvation shell of iatm ++ ++ katm = flist(mm,ii) ++ ++ r_ik = sqrt(xdf(mm)*xdf(mm) + ydf(mm)*ydf(mm) + ++ x zdf(mm)*zdf(mm)) ++ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++c The node holding the central atom keeps the contrib ++ ++ dot = (x*xdf(mm) + y*ydf(mm) + z*zdf(mm)) / (r_ij*r_ik) + ++ x third ++ zeta_global(ztype) = zeta_global(ztype) + f_ij*f_ik*dot*dot ++ end do ++ end do ++ ++ end do ++ ++ call gdsum(zeta_global(1),ntet,buff1(1:ntet)) ++ ++ do it = 1,ntet ++ zeta_global(it) = 1.0d0 - zeta_global(it)/dble(zetaninc(it)* ++ x zetann(it)) ++ end do ++ ++ deallocate(xdf ,stat=ierr(1)) ++ deallocate(ydf ,stat=ierr(2)) ++ deallocate(zdf ,stat=ierr(3)) ++ deallocate(buff1,stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tetrahedral ++ ++ Subroutine Compute_Tetrahedral_Forces(imcon,natms,engord,virord) ++ ++c--------------------------------------------------------------------- ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ real(8),intent(inout) :: engord,virord ++ ++ integer :: iatm,jatm,katm,iatm0,iatm1,istrd,nn ++ integer :: ii,k,m,itet,itype,jtype,ztype,it ++ ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ real(8) :: strs1,strs2,strs3,strs5,strs6,strs9 ++ real(8) :: xj,yj,zj,xk,yk,zk,tmpvar,tmpvar2,dot ++ real(8) :: r_ij,r_ik,f_ij,f_ik,df_ij,df_ik ++ real(8) :: invrij,invrik,ctheta ++ real(8) :: fxj,fyj,fzj,fxk,fyk,fzk ++ ++ real(8),dimension(3) :: rij_hat,rik_hat ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8),allocatable,dimension(:) :: tetprefactor ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ allocate(xdf(1:mxflist),stat=ierr(1)) ++ allocate(ydf(1:mxflist),stat=ierr(2)) ++ allocate(zdf(1:mxflist),stat=ierr(3)) ++ allocate(tetprefactor(1:ntet),stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2548,0.d0) ++ ++c Compute the prefactor ++ ++ k = nq4+nq6+1 ++ do it = 1,ntet ++ tetprefactor = dcolvar(k)/dble(zetaninc(it)*zetann(it)) ++ k = k + 1 ++ end do ++ ++c zero contribution to the stress tensor ++ ++ strs1=0.0d0 ++ strs2=0.0d0 ++ strs3=0.0d0 ++ strs5=0.0d0 ++ strs6=0.0d0 ++ strs9=0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++c no tetrahedral contributions from this atom type? ++ ++ ztype = zetasite(itype) ++ if ( ztype == 0 ) cycle ++ ++ ii = ii + 1 ! index for this list ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector ++ ydf(k) = yyy(jatm) - yyy(iatm) ++ zdf(k) = zzz(jatm) - zzz(iatm) ++ ++ end do ++ ++ nn = nflist(ii) ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) ++ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ df_ij = dfc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ xj = xdf(k) ; yj = ydf(k) ; zj = zdf(k) ++ ++ invrij = 1.0d0/r_ij ++ ++ rij_hat(1) = xj*invrij ++ rij_hat(2) = yj*invrij ++ rij_hat(3) = zj*invrij ++ ++ do m = k + 1,nflist(ii) ++ ++ r_ik = sqrt(xdf(m)*xdf(m) + ydf(m)*ydf(m) + zdf(m)*zdf(m)) ++ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ df_ik = dfc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ xk = xdf(m) ; yk = ydf(m) ; zk = zdf(m) ++ ++ invrik = 1.0d0/r_ik ++ ++ rik_hat(1) = xk*invrik ++ rik_hat(2) = yk*invrik ++ rik_hat(3) = zk*invrik ++ ++ ctheta = dot_product(rij_hat,rik_hat) ++ dot = ctheta + third ++ ++ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrij ++ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ij*f_ik ++ ++c force between atom i and atom j due to second term ++c i.e. ( f_ij*f_ik*dot*dot ) ++ ++ fxj = tmpvar*(rik_hat(1) - rij_hat(1)*ctheta) + ++ x tmpvar2*rij_hat(1) ++ fyj = tmpvar*(rik_hat(2) - rij_hat(2)*ctheta) + ++ x tmpvar2*rij_hat(2) ++ fzj = tmpvar*(rik_hat(3) - rij_hat(3)*ctheta) + ++ x tmpvar2*rij_hat(3) ++ ++ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrik ++ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ik*f_ij ++ ++c force between atom i and atom k due to second term ++c i.e ( f_ij*f_ik*dot*dot ) ++ ++ fxk = tmpvar*(rij_hat(1) - rik_hat(1)*ctheta) + ++ x tmpvar2*rik_hat(1) ++ fyk = tmpvar*(rij_hat(2) - rik_hat(2)*ctheta) + ++ x tmpvar2*rik_hat(2) ++ fzk = tmpvar*(rij_hat(3) - rik_hat(3)*ctheta) + ++ x tmpvar2*rik_hat(3) ++ ++c Add in to forces, virial and stress tensor ++ ++ katm = flist(m,ii) ++ ++ fxx(iatm) = fxx(iatm) + fxj + fxk ++ fyy(iatm) = fyy(iatm) + fyj + fyk ++ fzz(iatm) = fzz(iatm) + fzj + fzk ++ ++ fxx(jatm) = fxx(jatm) - fxj ++ fyy(jatm) = fyy(jatm) - fyj ++ fzz(jatm) = fzz(jatm) - fzj ++ ++ fxx(katm) = fxx(katm) - fxk ++ fyy(katm) = fyy(katm) - fyk ++ fzz(katm) = fzz(katm) - fzk ++ ++ virord = virord - fxj*xj - fyj*yj - fzj*zj ++ virord = virord - fxk*xk - fyk*yk - fzk*zk ++ ++ strs1 = strs1 + xk*fxk + xj*fxj ++ strs2 = strs2 + xk*fyk + xj*fyj ++ strs3 = strs3 + xk*fzk + xj*fzj ++ strs5 = strs5 + yk*fyk + yj*fyj ++ strs6 = strs6 + yk*fzk + yj*fzj ++ strs9 = strs9 + zk*fzk + zj*fzj ++ ++ end do ++ end do ++ end do ++ ++c Complete stress tensor ++ ++ stress(1)=stress(1)+strs1 ++ stress(2)=stress(2)+strs2 ++ stress(3)=stress(3)+strs3 ++ stress(4)=stress(4)+strs2 ++ stress(5)=stress(5)+strs5 ++ stress(6)=stress(6)+strs6 ++ stress(7)=stress(7)+strs3 ++ stress(8)=stress(8)+strs6 ++ stress(9)=stress(9)+strs9 ++ ++ ++c Tidy up ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tetrahedral_Forces ++ ++ Subroutine Mfrz_Error(kode,arg) ++ ++c--------------------------------------------------------------------- ++c ++c Author W. Smith Daresbury Laboratory January 2011 ++c Adapted from D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : nrite,nhist,nread,nconf,nstats, ++ x nrest,nfield,ntable,nevnt ++ ++ implicit none ++ integer,intent(in) :: kode ++ real(8),intent(in) :: arg ++ ++ if(onroot)then ++ ++ if(kode.eq.2500)then ++ ++ write(nrite,"( ++ x 'Error in number of collective variables - '// ++ x 'ncolvar too small?' ++ x )") ++ ++ elseif(kode.eq.2501)then ++ ++ write(nrite,"( ++ x 'Wang-Landau style recursion not yet implemented'// ++ x 'for ncolvar > 1' ++ x )") ++ ++ elseif(kode.eq.2502)then ++ ++ write(nrite,"('Unrecognised Gaussian height scheme')") ++ ++ elseif(kode.eq.2503)then ++ ++ write(nrite,"('Error maxhis exceeded in metadynamics')") ++ ++ elseif(kode.eq.2504)then ++ ++ write(nrite,"( ++ x 'Error allocating comms buffer in compute_bias_potential' ++ x )") ++ ++ elseif(kode.eq.2505)then ++ ++ write(nrite,"('Error allocating driven array')") ++ ++ elseif(kode.eq.2506)then ++ ++ write(nrite,"('Could not open METACONTROL')") ++ ++ elseif(kode.eq.2508)then ++ ++ write(nrite,"('Comms error in metadynamics setup')") ++ ++ elseif(kode.eq.2509)then ++ ++ write(nrite,"( ++ x 'Cannot bias local and global PE in same run' ++ x )") ++ ++ elseif(kode.eq.2510)then ++ ++ write(nrite,"('Error allocating local force arrays')") ++ ++ elseif(kode.eq.2511)then ++ ++ write(nrite,"( ++ x 'Error allocating collective variables arrays' ++ x )") ++ ++ elseif(kode.eq.2512)then ++ ++ write(nrite,"('Error allocating Wang-Landau bins')") ++ ++ elseif(kode.eq.2515)then ++ ++ write(nrite,"( ++ x 'Error allocating Steinhardt parameter arrays' ++ x )") ++ ++ elseif(kode.eq.2516)then ++ ++ write(nrite,"('Could not open STEINHARDT')") ++ ++ elseif(kode.eq.2517)then ++ ++ write(nrite,"('Error allocating q4site')") ++ ++ elseif(kode.eq.2518)then ++ ++ write(nrite,"('Error allocating q6site')") ++ ++ elseif(kode.eq.2519)then ++ ++ write(nrite,"('Error deallocating buff')") ++ ++ elseif(kode.eq.2521)then ++ ++ write(nrite,"('Error reading line ',i5,' of STEINHARDT' ++ x )")nint(arg) ++ ++ elseif(kode.eq.2522)then ++ ++ write(nrite,"( ++ x 'Error allocating Steinhardt parameter arrays' ++ x )") ++ ++ elseif(kode.eq.2523)then ++ ++ write(nrite,"('Could not open ZETA')") ++ ++ elseif(kode.eq.2524)then ++ ++ write(nrite,"('Error allocating zetasite')") ++ ++ elseif(kode.eq.2525)then ++ ++ write(nrite,"('Error allocating full neighbour list')") ++ ++ elseif(kode.eq.2527)then ++ ++ write(nrite,"( ++ x 'Number of collective variables incorrect for specified'// ++ x 'order parameters' ++ x )") ++ ++ elseif(kode.eq.2529)then ++ ++ write(nrite,"('Error reading line ',i5,' of ZETA' ++ x )")nint(arg) ++ ++ elseif(kode.eq.2531)then ++ ++ write(nrite,"('Comms error on reading METADYNAMICS')") ++ ++ elseif(kode.eq.2532)then ++ ++ write(nrite,"('Error in fc function - out of range')") ++ write(nrite,"('Value of r was ',1p,e14.6)")arg ++ ++ elseif(kode.eq.2533)then ++ ++ write(nrite,"( ++ x 'Error allocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2534)then ++ ++ write(nrite,"('Error allocating comms buffer arrays')") ++ ++ elseif(kode.eq.2535)then ++ ++ write(nrite,"('Solvation list overrun')") ++ ++ elseif(kode.eq.2536)then ++ ++ write(nrite,"( ++ x 'Error deallocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2537)then ++ ++ write(nrite,"('Error deallocating comms buffer arrays')") ++ ++ elseif(kode.eq.2538)then ++ ++ write(nrite,"( ++ x 'Error allocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2540)then ++ ++ write(nrite,"('Error allocating force prefactor arrays')") ++ ++ elseif(kode.eq.2541)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2542)then ++ ++ write(nrite,"( ++ x 'Error in metafreeze_module.f90 mxninc too small' ++ x )") ++ ++ elseif(kode.eq.2543)then ++ ++ write(nrite,"('nnn too small in compute_tet_nlist')") ++ ++ elseif(kode.eq.2544)then ++ ++ write(nrite,"('mxflist too small in metafreeze_module')") ++ ++ elseif(kode.eq.2545)then ++ ++ write(nrite,"( ++ x 'Memory deallocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2546)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2547)then ++ ++ write(nrite,"( ++ x 'Memory deallocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2548)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ endif ++ ++c close all i/o channels ++ ++ close (nrite) ++ close (nhist) ++ close (nread) ++ close (nconf) ++ close (nstats) ++ close (nrest) ++ close (nfield) ++ close (ntable) ++ close (nevnt) ++ close (stn) ++ close (zta) ++ close (mtd) ++ ++ endif ++ ++c shut down communications ++ ++ call gsync() ++ call exitcomms() ++ ++ end Subroutine Mfrz_Error ++ ++ end module metafreeze_module ++ +diff -urN dl_class_1.9.orig/srcmod/metal_module.f dl_class_1.9/srcmod/metal_module.f +--- dl_class_1.9.orig/srcmod/metal_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/metal_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1669 @@ ++ module metal_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining metal potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ logical lmetab ++ integer, allocatable :: ltpmet(:),lstmet(:) ++ real(8), allocatable :: prmmet(:,:),vmet(:,:,:),dmet(:,:,:) ++ real(8), allocatable :: rho(:),elrcm(:),vlrcm(:),fmet(:,:,:) ++ ++ save lmetab,ltpmet,lstmet,prmmet,vmet,dmet,fmet,rho,elrcm,vlrcm ++ ++ contains ++ ++ subroutine alloc_met_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ integer i,fail,idnode ++ ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (ltpmet(mxmet),stat=fail(1)) ++ allocate (lstmet(mxmet),stat=fail(2)) ++ allocate (prmmet(mxmet,mxpmet),stat=fail(3)) ++ allocate (vmet(mxgrid,mxmet,2),stat=fail(4)) ++ allocate (dmet(mxgrid,mxmet,2),stat=fail(5)) ++ allocate (rho(mxatms),stat=fail(6)) ++ allocate (elrcm(0:mxsmet),stat=fail(7)) ++ allocate (vlrcm(0:mxsmet),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1280) ++ enddo ++ ++ end subroutine alloc_met_arrays ++ ++ subroutine define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rmet,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining metal potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom1,atom2 ++ character*1 message(80) ++ integer idnode,ntpmet,ntpatm,idum,imet,j ++ integer keypot,numpar,katm1,katm2,keymet,ntab,i,fail,itpmet ++ integer jtpatm ++ real(8) rmet,engunit ++ ++ real(8), allocatable :: parpot(:) ++ allocate (parpot(mxpmet),stat=fail) ++ ++ ntpmet=intstr(record,lenrec,idum) ++ ++ lmetab=.false. ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified metal ', ++ x 'potentials',i10)") ntpmet ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ',3x, ++ x ' key',30x,'parameters'/,/)") ++ ++ endif ++ ++ if(ntpmet.ge.mxmet) call error(idnode,71) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do imet=1,mxmet ++ lstmet(imet)=0 ++ ltpmet(imet)=0 ++ enddo ++ ++ do itpmet=1,ntpmet ++ ++ do i=1,mxpmet ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'stch') then ++ keypot=1 ++ numpar=5 ++ else if(keyword(1:4).eq.'fnsc') then ++ keypot=2 ++ numpar=7 ++ else if(keyword(1:4).eq.'gupt') then ++ keypot=3 ++ numpar=5 ++ elseif(keyword(1:4).eq.'eam ') then ++ keypot=999 ++ lmetab=.true. ++ numpar=0 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,461) ++ endif ++ ++ if(.not.lmetab)then ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ parpot(4)=dblstr(record,lenrec,idum) ++ parpot(5)=dblstr(record,lenrec,idum) ++ parpot(6)=dblstr(record,lenrec,idum) ++ parpot(7)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,2a8,2x,a4,3x,1p,9e13.5)") ++ x atom1,atom2,keyword(1:4),(parpot(j),j=1,numpar) ++ ++ endif ++ ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm1.eq.0.or.katm2.eq.0) then ++ call error(idnode,463) ++ endif ++ ++ keymet=loc2(katm1,katm2) ++ ++c convert energies to internal unit ++ ++ if(keymet.ge.mxmet) call error(idnode,465) ++ ++ parpot(1)=parpot(1)*engunit ++ ++ if(keypot.eq.2)then ++ ++ parpot(2)=parpot(2)*engunit ++ parpot(3)=parpot(3)*engunit ++ parpot(5)=parpot(5)*engunit ++ ++ endif ++ ++ if(keypot.eq.3)then ++ parpot(4)=parpot(4)*engunit ++ endif ++ ++ if(lstmet(keymet).ne.0) call error(idnode,141) ++ lstmet(keymet)=itpmet ++ ltpmet(itpmet)=keypot ++ if(itpmet.gt.1)then ++ if(keypot.ne.ltpmet(itpmet-1))call error(idnode,72) ++ endif ++ ++ if(.not.lmetab)then ++ ++ do i=1,numpar ++ prmmet(itpmet,i)=parpot(i) ++ enddo ++ ++ endif ++ ++ enddo ++ ++c check for unspecified atom-atom potentials ++ ++ ntab=(ntpatm*(ntpatm+1))/2 ++ ++ if(ntpmet.lt.ntab) then ++ ++ call warning(idnode,110,0.d0,0.d0,0.d0) ++ ++ do i=1,ntab ++ if(lstmet(i).eq.0) lstmet(i)=ntpmet+1 ++ enddo ++ ++c set zero potential for undefined interactions ++ ++ do i=1,mxmet ++ ++ vmet(1,i,1)=0.d0 ++ vmet(1,i,2)=0.d0 ++ dmet(1,i,1)=0.d0 ++ dmet(1,i,2)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c generate metal force arrays ++ ++ call metgen(idnode,ntpatm,rmet) ++ ++ if(lmetab) ++ x call mettab(ntpatm,idnode,rmet,engunit) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_metals ++ ++ subroutine metdens ++ x (idnode,imcon,mxnode,natms,engmet,virden) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local density in metals ++c using the verlet neighbour list and sutton-chen potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,imcon,mxnode,natms,i,j,k,ii,k0,l ++ real(8) engmet,engtmp,virden,rhosqr,rrr,ppp,fk0,fk1,fk2,t1,t2 ++ ++ safe=.true. ++ ++c initialise energy accumulator ++ ++ engmet=0.d0 ++ virden=0.d0 ++ ++c initialise density array ++ ++ do i=1,natms ++ rho(i)=0.d0 ++ enddo ++ ++c calculate local atomic density ++ ++ ii=0 ++ ++c outer loop over atoms ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ enddo ++ ++ if(lmetab)then ++ ++c calculate EAM density contributions ++ ++ call eamden(safe,i,lentry(ii)) ++ ++ else ++ ++c calculate FS density contributions ++ ++ call fsden(safe,i,lentry(ii)) ++ ++ endif ++ ++ enddo ++ ++c global sum of local atomic densities ++ ++ if(mxnode.gt.1)call gdsum(rho,natms,buffer) ++ ++c calculate embedding energy ++ ++ if(lmetab)then ++ ++c density terms for eam potentials ++ ++ do i=1,natms ++ ++ if(rho(i).gt.0.d0)then ++ ++ k0=ltype(i) ++ rrr=rho(i)-fmet(2,k0,1) ++ l=min(nint(rrr/fmet(4,k0,1)),int(fmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=(rrr/fmet(4,k0,1))-dble(l) ++ ++c calculate embedding energy using 3-point interpolation ++ ++ fk0=fmet(l-1,k0,1) ++ fk1=fmet(l,k0,1) ++ fk2=fmet(l+1,k0,1) ++ ++ t1=fk1+(fk1-fk0)*ppp ++ t2=fk1+(fk2-fk1)*ppp ++ if(ppp.lt.0.d0)then ++ engtmp=-(t1+0.5d0*(t2-t1)*(ppp+1.d0)) ++ else ++ engtmp=-(t2+0.5d0*(t2-t1)*(ppp-1.d0)) ++ endif ++ ++ engmet=engmet+engtmp ++ ++c calculate derivative of embedding function wrt density using 3-point ++c interpolation - store result in rho array ++ ++ fk0=fmet(l-1,k0,2) ++ fk1=fmet(l,k0,2) ++ fk2=fmet(l+1,k0,2) ++ ++ t1=fk1+(fk1-fk0)*ppp ++ t2=fk1+(fk2-fk1)*ppp ++ if(ppp.lt.0.d0)then ++ rho(i)=(t1+0.5d0*(t2-t1)*(ppp+1.d0)) ++ else ++ rho(i)=(t2+0.5d0*(t2-t1)*(ppp-1.d0)) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ else ++ ++c analytical square root of density dependence ++ ++ do i=1,natms ++ ++ if(rho(i).gt.0.d0)then ++ ++ rhosqr=sqrt(rho(i)+elrcm(ltype(i))) ++ engmet=engmet+rhosqr ++ rho(i)=0.5d0/rhosqr ++ virden=virden+vlrcm(ltype(i))/rhosqr ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ engmet=-engmet/dble(mxnode) ++ virden=virden/dble(mxnode) ++ ++c check interpolation is safe ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ return ++ end subroutine metdens ++ ++ subroutine fsden(safe,iatm,ik) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local atomic density ++c for FS type metal potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer iatm,jatm,ik,m,k0,l ++ real(8) rdr,ai,aj,ab,rsq,rrr,ppp,t1,t2 ++ real(8) vk0,vk1,vk2,density ++ ++c start of primary loop for density ++ ++ ai=dble(ltype(iatm)) ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ++ aj=dble(ltype(jatm)) ++ if(ai.gt.aj) then ++ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 ++ else ++ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 ++ endif ++ ++ k0=lstmet(int(ab)) ++ ++ if((ltpmet(k0).ge.1).and.(abs(dmet(1,k0,1)).gt.0.d0))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++c apply cutoff condition ++ ++ if(rsq.le.dmet(3,k0,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,k0,1) ++ rrr=sqrt(rsq)-dmet(2,k0,1) ++ l=min(nint(rrr*rdr),int(dmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,k0,1) ++ vk1=dmet(l,k0,1) ++ vk2=dmet(l+1,k0,1) ++ ++ t1=vk1+ppp*(vk1-vk0) ++ t2=vk1+ppp*(vk2-vk1) ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ if(ai.gt.aj)then ++ ++ rho(iatm)=rho(iatm)+density*dmet(1,k0,2) ++ rho(jatm)=rho(jatm)+density*dmet(2,k0,2) ++ ++ else ++ ++ rho(iatm)=rho(iatm)+density*dmet(2,k0,2) ++ rho(jatm)=rho(jatm)+density*dmet(1,k0,2) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine fsden ++ ++ subroutine eamden(safe,iatm,ik) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local atomic density ++c for EAM type metal potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ logical safe ++ integer iatm,jatm,ik,m,l,ktyp1,ktyp2 ++ real(8) rdr,rsq,rrr,ppp,t1,t2 ++ real(8) vk0,vk1,vk2,density ++ ++c start of primary loop for density ++ ++ ktyp1=ltype(iatm) ++ ++ do m=1,ik ++ ++c first metal atom density ++ ++ jatm=ilist(m) ++ ktyp2=ltype(jatm) ++ ++ if(abs(dmet(1,ktyp2,1)).gt.0.d0)then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.le.dmet(3,ktyp2,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,ktyp2,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp2,1) ++ l=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,ktyp2,1) ++ vk1=dmet(l,ktyp2,1) ++ vk2=dmet(l+1,ktyp2,1) ++ ++ t1=vk1+ppp*(vk1-vk0) ++ t2=vk1+ppp*(vk2-vk1) ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ rho(iatm)=rho(iatm)+density ++ if(ktyp1.eq.ktyp2)rho(jatm)=rho(jatm)+density ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c second metal atom density ++ ++ if(ktyp1.ne.ktyp2)then ++ ++ if(abs(dmet(1,ktyp1,1)).gt.0.d0)then ++ ++c apply truncation of potential ++ ++ if(rsq.le.dmet(3,ktyp1,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,ktyp1,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp1,1) ++ l=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,ktyp1,1) ++ vk1=dmet(l,ktyp1,1) ++ vk2=dmet(l+1,ktyp1,1) ++ ++ t1=vk1+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*ppp ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ rho(jatm)=rho(jatm)+density ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine eamden ++ ++ subroutine metfrc(safe,iatm,ik,engmet,virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating metal forces ++c for EAM and FS potentials using a verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer iatm,jatm,ik,m,k0,l,ld,ktyp1,ktyp2 ++ real(8) engmet,virmet,strs ++ real(8) rdr,rsq,rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2 ++ real(8) gamma,gamma1,gamma2,gamma3,fx,fy,fz,fi ++ dimension fi(3),strs(6) ++ ++CDIR$ CACHE_ALIGN fi ++ ++c initialise potential energy and virial ++ ++ engmet=0.d0 ++ virmet=0.d0 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ ++c store forces for iatm ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ktyp1=ltype(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ktyp2=ltype(jatm) ++ k0=lstmet(loc2(ktyp1,ktyp2)) ++ ++ if((ltpmet(k0).gt.0).and.(abs(vmet(1,k0,1)).gt.0.d0))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.le.vmet(3,k0,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/vmet(4,k0,1) ++ rrr=sqrt(rsq)-vmet(2,k0,1) ++ l=min(nint(rrr*rdr),int(vmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ gamma1=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vmet(l-1,k0,1) ++ vk1=vmet(l,k0,1) ++ vk2=vmet(l+1,k0,1) ++ ++ t1=vk1+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*ppp ++ if(ppp.lt.0.d0)then ++ engmet=engmet+t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ engmet=engmet+t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++c calculate pair forces using 3-point interpolation ++ ++ gk0=vmet(l-1,k0,2) ++ gk1=vmet(l,k0,2) ++ gk2=vmet(l+1,k0,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma1=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma1=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++c calculate embedding forces using 3-point interpolation ++ ++ if(lmetab)then ++ ++ if(rsq.le.dmet(3,ktyp2,1)**2)then ++ ++ rdr=1.d0/dmet(4,ktyp2,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp2,1) ++ ld=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) ++ if(ld.lt.1)then ++ ++ safe=.false. ++ gamma2=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(ld) ++ ++ gk0=dmet(ld-1,ktyp2,2) ++ gk1=dmet(ld,ktyp2,2) ++ gk2=dmet(ld+1,ktyp2,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++ else ++ ++ gamma2=0.d0 ++ ++ endif ++ ++ if(ktyp1.eq.ktyp2)then ++ ++ gamma3=gamma2 ++ ++ elseif(rsq.le.dmet(3,ktyp1,1)**2)then ++ ++ rdr=1.d0/dmet(4,ktyp1,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp1,1) ++ ld=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) ++ if(ld.lt.1)then ++ ++ safe=.false. ++ gamma3=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(ld) ++ gk0=dmet(ld-1,ktyp1,2) ++ gk1=dmet(ld,ktyp1,2) ++ gk2=dmet(ld+1,ktyp1,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma3=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma3=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++ else ++ ++ gamma3=0.d0 ++ ++ endif ++ ++ gamma=(gamma1+(gamma2*rho(iatm)+gamma3*rho(jatm)))/rsq ++ ++ else ++ ++ if(safe.and.rsq.le.dmet(3,k0,1)**2)then ++ ++ gk0=dmet(l-1,k0,2) ++ gk1=dmet(l,k0,2) ++ gk2=dmet(l+1,k0,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ else ++ ++ gamma2=0.d0 ++ ++ endif ++ ++ if(ktyp1.gt.ktyp2)then ++ ++ gamma=(gamma1-gamma2*(rho(iatm)*dmet(1,k0,2)+ ++ x rho(jatm)*dmet(2,k0,2)))/rsq ++ ++ else ++ ++ gamma=(gamma1-gamma2*(rho(iatm)*dmet(2,k0,2)+ ++ x rho(jatm)*dmet(1,k0,2)))/rsq ++ ++ endif ++ ++ endif ++ ++c calculate forces ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++c calculate virial ++ ++ virmet=virmet-gamma*rsq ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ return ++ end subroutine metfrc ++ ++ subroutine metgen(idnode,ntpatm,rmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating potential energy and ++c force arrays for metal potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,kmet,mmet,katm1,katm2,ntpatm,imet,nmet ++ integer idnode,nnn,mmm ++ real(8) dlrpot,rmet,rrr,eps,sig,cc0,cc1,cc2,ccc ++ real(8) ddd,bet,cut1,cut2,aaa,rr0,ppp,qqq ++ ++c define grid resolution for potential arrays ++ ++ dlrpot=rmet/dble(mxgrid-1) ++ ++c construct arrays for metal potentials ++ ++ kmet=0 ++ do katm1=1,ntpatm ++ ++ do katm2=1,katm1 ++ ++ kmet=kmet+1 ++ imet=lstmet(kmet) ++ ++ if(ltpmet(imet).gt.0)then ++ ++c store array specification parameters ++ ++ vmet(1,imet,1)=dble(mxgrid) ++ vmet(2,imet,1)=0.d0 ++ vmet(3,imet,1)=rmet ++ vmet(4,imet,1)=dlrpot ++ ++ do i=1,4 ++ ++ vmet(i,imet,2)=vmet(i,imet,1) ++ dmet(i,imet,1)=vmet(i,imet,1) ++ dmet(i,imet,2)=0.d0 ++ ++ enddo ++ ++ if(ltpmet(imet).eq.1)then ++ ++c sutton-chen potentials ++ ++ eps=prmmet(imet,1) ++ sig=prmmet(imet,2) ++ nnn=nint(prmmet(imet,3)) ++ mmm=nint(prmmet(imet,4)) ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=eps*(sig/rrr)**nnn ++ vmet(i,imet,2)=dble(nnn)*eps*(sig/rrr)**nnn ++ dmet(i,imet,1)=(sig/rrr)**mmm ++ dmet(i,imet,2)=dble(mmm)*(sig/rrr)**mmm ++ ++ enddo ++ ++ if(katm1.eq.katm2)then ++ ++ dmet(1,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 ++ dmet(2,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 ++ ++ else ++ ++ nmet=lstmet((katm1*(katm1+1))/2) ++ mmet=lstmet((katm2*(katm2+1))/2) ++ dmet(1,imet,2)=(prmmet(nmet,1)*prmmet(nmet,5))**2 ++ dmet(2,imet,2)=(prmmet(mmet,1)*prmmet(mmet,5))**2 ++ ++ endif ++ ++ else if(ltpmet(imet).eq.2)then ++ ++c finnis sinclair potentials ++ ++ cc0=prmmet(imet,1) ++ cc1=prmmet(imet,2) ++ cc2=prmmet(imet,3) ++ ccc=prmmet(imet,4) ++ ddd=prmmet(imet,6) ++ bet=prmmet(imet,7) ++ cut1=ccc+4.d0*dlrpot ++ cut2=ddd+4.d0*dlrpot ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=0.d0 ++ vmet(i,imet,2)=0.d0 ++ dmet(i,imet,1)=0.d0 ++ dmet(i,imet,2)=0.d0 ++ ++ if(rrr.le.cut1)then ++ ++ vmet(i,imet,1)=(cc0+cc1*rrr+cc2*rrr*rrr)*(rrr-ccc)**2 ++ vmet(i,imet,2)=-rrr*(2.d0*(cc0+cc1*rrr+cc2*rrr*rrr)* ++ x (rrr-ccc)+(cc1+2.d0*cc2*rrr)*(rrr-ccc)**2) ++ ++ endif ++ ++ if(rrr.le.cut2)then ++ ++ dmet(i,imet,1)=(rrr-ddd)**2+bet*(rrr-ddd)**3/ddd ++ dmet(i,imet,2)=-rrr*(2.d0*(rrr-ddd)+ ++ x 3.d0*bet*(rrr-ddd)**2/ddd) ++ ++ endif ++ ++ enddo ++ ++ if(katm1.eq.katm2)then ++ ++ dmet(1,imet,2)=prmmet(imet,5)**2 ++ dmet(2,imet,2)=prmmet(imet,5)**2 ++ ++ else ++ ++ nmet=lstmet((katm1*(katm1+1))/2) ++ mmet=lstmet((katm2*(katm2+1))/2) ++ dmet(1,imet,2)=prmmet(nmet,5)**2 ++ dmet(2,imet,2)=prmmet(mmet,5)**2 ++ ++ endif ++ ++ else if(ltpmet(imet).eq.3)then ++ ++c gupta potentials ++ ++ aaa=prmmet(imet,1) ++ rr0=prmmet(imet,2) ++ ppp=prmmet(imet,3) ++ qqq=prmmet(imet,5) ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=aaa*exp(-ppp*(rrr-rr0)/rr0) ++ vmet(i,imet,2)=vmet(i,imet,1)*rrr*ppp/rr0 ++ dmet(i,imet,1)=exp(-2.d0*qqq*(rrr-rr0)/rr0) ++ dmet(i,imet,2)=2.d0*dmet(i,imet,1)*rrr*qqq/rr0 ++ ++ enddo ++ ++ dmet(1,imet,2)=prmmet(imet,4)**2 ++ dmet(2,imet,2)=prmmet(imet,4)**2 ++ ++ else if(.not.lmetab)then ++ ++ call error(idnode,151) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine metgen ++ ++ subroutine lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rmet,volm) ++ ++c************************************************************************* ++c ++c DL_POLY subroutine to evaluate long-range corrections to ++c pressure and energy in a periodic metal system. ++c ++c copyright daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*************************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,imcon,natms,ntpatm,i,ka,j ++ integer kmet,k0,k1,k2 ++ real(8) engunit,rmet,volm,twopi,forpi,eps,sig,nnn,mmm,ccc ++ real(8) elrcm0,elrcm1,elrcm2,vlrcm0,vlrcm1,vlrcm2,aaa,rr0,ppp ++ real(8) zet,qqq,eee ++ ++ save newjob ++ data newjob/.true./ ++ ++ twopi=2.0d0*pi ++ forpi=4.0d0*pi ++ ++c initalise counter arrays ++ ++ do i=1,mxsmet ++ numtyp(i)=0 ++ enddo ++ ++c evaluate species populations in system ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp(ka)=numtyp(ka)+1 ++ ++ enddo ++ ++c number densities ++ ++ do i=1,ntpatm ++ dens(i)=dble(numtyp(i))/volm ++ enddo ++ ++c long range corrections to density, energy and pressure ++ ++ do i=0,mxsmet ++ ++ elrcm(i)=0.d0 ++ vlrcm(i)=0.d0 ++ ++ enddo ++ ++ if(imcon.ne.0.and.imcon.ne.6) then ++ ++ kmet=0 ++ do i=1,ntpatm ++ ++ do j=1,i ++ ++ elrcm0=0.d0 ++ elrcm1=0.d0 ++ elrcm2=0.d0 ++ vlrcm0=0.d0 ++ vlrcm1=0.d0 ++ vlrcm2=0.d0 ++ ++ kmet=kmet+1 ++ k0=lstmet(kmet) ++ ++ if(ltpmet(k0).eq.1) then ++ ++c sutton-chen potentials ++ ++ eps=prmmet(k0,1) ++ sig=prmmet(k0,2) ++ nnn=prmmet(k0,3) ++ mmm=prmmet(k0,4) ++ ccc=prmmet(k0,5) ++ ++ elrcm0=eps*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) ++ vlrcm0=eps*nnn*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) ++ if(i.ne.j) then ++ elrcm0=elrcm0*2.d0 ++ vlrcm0=vlrcm0*2.d0 ++ endif ++ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 ++ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 ++ ++ if(i.eq.j) then ++ ++ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (eps*ccc)**2 ++ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 ++ ++ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (eps*ccc)**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 ++ ++ else ++ ++ k1=lstmet((i*(i+1))/2) ++ k2=lstmet((j*(j+1))/2) ++ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k1,1)*prmmet(k1,5))**2 ++ elrcm2=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k2,1)*prmmet(k2,5))**2 ++ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 ++ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 ++ ++ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k1,1)*prmmet(k1,5))**2 ++ vlrcm2=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k2,1)*prmmet(k2,5))**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 ++ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 ++ ++ endif ++ ++ else if(ltpmet(k0).eq.3) then ++ ++c gupta potentials ++ ++ aaa=prmmet(k0,1) ++ rr0=prmmet(k0,2) ++ ppp=prmmet(k0,3) ++ zet=prmmet(k0,4) ++ qqq=prmmet(k0,5) ++ eee=exp(-ppp*(rmet-rr0)/rr0) ++ ++ elrcm0=aaa*(rr0/ppp)*(rmet**2+2.d0*rmet*(rr0/ppp)+ ++ x 2.d0*(rr0/ppp)**2)*eee ++ vlrcm0=aaa*(rmet**3+3.d0*rmet**2*(rr0/ppp)+ ++ x 6.d0*rmet*(rr0/ppp)**2+6.d0*(rr0/rmet)**3)*eee ++ if(i.ne.j) then ++ elrcm0=elrcm0*2.d0 ++ vlrcm0=vlrcm0*2.d0 ++ endif ++ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 ++ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 ++ ++ eee=exp(-2.d0*qqq*(rmet-rr0)/rr0) ++ ++ if(i.eq.j) then ++ ++ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee*zet**2 ++ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 ++ ++ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 ++ ++ else ++ ++ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* ++ x zet**2 ++ elrcm2=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* ++ x zet**2 ++ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 ++ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 ++ ++ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm2=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 ++ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/, ++ x 'long range corrections for metal potentials',/)") ++ write(nrite, ++ x "('short range energy and virial corrections:', ++ x 1p,2e15.6,/)") ++ x elrcm(0)/engunit,vlrcm(0)/engunit ++ write(nrite, ++ x "('density dependent energy and virial corrections',/)") ++ ++ do i=1,ntpatm ++ ++ kmet=lstmet((i*(i+1))/2) ++ if(lstmet(kmet).gt.0)then ++ ++ write(nrite,"(25x,a8,1p,2e15.6)")unqatm(i), ++ x elrcm(i)/engunit,vlrcm(i)/engunit ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lrcmetal ++ ++ subroutine mettab(ntpatm,idnode,rmet,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading potential energy and ++c force arrays for EAM metal forces only ++c ++c copyright - daresbury laboratory ++c author - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 atom1,atom2,type ++ integer idnode,ntpatm,idum,fail ++ integer imet,katm1,katm2,jtpatm,i,j,k,ktype ++ integer numpot,numpts,ipot ++ real(8) rmet,engunit,start,finish ++ data fail/0/ ++ ++c allocate embedding array ++ ++ allocate(fmet(mxgrid,mxmet,2),stat=fail) ++ if(fail.ne.0)call error(idnode,36) ++ ++c define zero function for undefined interactions ++ ++ do i=1,mxmet ++ ++ fmet(1,i,1)=0.d0 ++ fmet(1,i,2)=0.d0 ++ ++ enddo ++ ++ if(idnode.eq.0)open (ntable,file='TABEAM') ++ ++c skip header record ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ ++c read number of potential functions in file ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ numpot=intstr(record,lenrec,idum) ++ ++ do ipot=1,numpot ++ ++c read data type, atom labels, number of points, start and end ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ ++c indentify data type ++ ++ ktype=1 ++ if(findstring('dens',record,idum).or. ++ x findstring('DENS',record,idum))ktype=2 ++ if(findstring('embe',record,idum).or. ++ x findstring('EMBE',record,idum))ktype=3 ++ call getword(type,record,8,lenrec) ++ ++c identify atom types ++ ++ call getword(atom1,record,8,lenrec) ++ if(ktype.eq.1)then ++ call getword(atom2,record,8,lenrec) ++ else ++ atom2=atom1 ++ endif ++ ++c data specifiers ++ ++ numpts=intstr(record,lenrec,idum) ++ start=dblstr(record,lenrec,idum) ++ finish=dblstr(record,lenrec,idum) ++ ++c check atom indentities ++ ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm1.eq.0.or.katm2.eq.0) then ++ if(idnode.eq.0) ++ x write(nrite,'(a)') ' **** '//atom1//' *** '//atom2//' ****' ++ call error(idnode,81) ++ endif ++ ++c check array dimensions ++ ++ if(mxbuff.lt.numpts+4)then ++ ++ if(idnode.eq.0) ++ x write(nrite,*) 'mxbuff must be >=',numpts+4,' in mettab' ++ call error(idnode,28) ++ ++ endif ++ ++c store working parameters (start shifted for DL_POLY interpolation) ++ ++ buffer(1)=dble(numpts+4) ++ buffer(4)=(finish-start)/dble(numpts-1) ++ buffer(2)=start-5.d0*buffer(4) ++ buffer(3)=finish ++ if(idnode.eq.0) ++ x write(nrite,"(16x,2a8,2x,a4,3x,1p,4e13.5)") ++ x atom1,atom2,type,dble(numpts),start,finish,buffer(4) ++ ++c read potential arrays ++ ++ k=4 ++ do j=1,(numpts+3)/4 ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ buffer(k+1)=dblstr(record,lenrec,idum) ++ buffer(k+2)=dblstr(record,lenrec,idum) ++ buffer(k+3)=dblstr(record,lenrec,idum) ++ buffer(k+4)=dblstr(record,lenrec,idum) ++ k=k+4 ++ ++ enddo ++ ++c copy data to internal arrays ++ ++ if(ktype.eq.1)then ++ ++c check range against specified cutoff ++ ++ if(rmet.lt.finish)call error(idnode,26) ++ ++c identify potential ++ ++ imet=lstmet(loc2(katm1,katm2)) ++ ++c pair potential terms ++ ++ vmet(1,imet,1)=buffer(1) ++ vmet(2,imet,1)=buffer(2) ++ vmet(3,imet,1)=buffer(3) ++ vmet(4,imet,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ vmet(i,imet,1)=0.d0 ++ else ++ vmet(i,imet,1)=buffer(i)*engunit ++ buffer(i)=buffer(i)*engunit ++ endif ++ ++ enddo ++ ++c calculate derivative of pair potential function ++ ++ call metal_deriv(imet,vmet,buffer) ++ ++c adapt derivatives for use in interpolation ++ ++ do i=5,numpts+4 ++ vmet(i,imet,2)=-(dble(i)*buffer(4)+buffer(2))* ++ x vmet(i,imet,2) ++ enddo ++ ++ else if(ktype.eq.2)then ++ ++c check range against specified cutoff ++ ++ if(rmet.lt.finish)call error(idnode,26) ++ ++c density terms ++ ++ dmet(1,katm1,1)=buffer(1) ++ dmet(2,katm1,1)=buffer(2) ++ dmet(3,katm1,1)=buffer(3) ++ dmet(4,katm1,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ dmet(i,katm1,1)=0.d0 ++ else ++ dmet(i,katm1,1)=buffer(i) ++ endif ++ ++ enddo ++ ++c calculate derivative of density function ++ ++ call metal_deriv(katm1,dmet,buffer) ++ ++c adapt derivatives for use in interpolation ++ ++ dmet(1,katm1,2)=0.d0 ++ dmet(2,katm1,2)=0.d0 ++ dmet(3,katm1,2)=0.d0 ++ dmet(4,katm1,2)=0.d0 ++ do i=5,numpts+4 ++ dmet(i,katm1,2)=-(dble(i)*buffer(4)+buffer(2))* ++ x dmet(i,katm1,2) ++ enddo ++ ++ else if(ktype.eq.3)then ++ ++c embedding function arrays ++ ++ fmet(1,katm1,1)=buffer(1) ++ fmet(2,katm1,1)=buffer(2) ++ fmet(3,katm1,1)=buffer(3) ++ fmet(4,katm1,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ fmet(i,katm1,1)=0.d0 ++ else ++ fmet(i,katm1,1)=buffer(i)*engunit ++ buffer(i)=buffer(i)*engunit ++ endif ++ ++ enddo ++ ++c calculate derivative of embedding function ++ ++ call metal_deriv(katm1,fmet,buffer) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (ntable) ++ ++ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') ++ x 'potential tables read from TABEAM file' ++ ++ return ++ end subroutine mettab ++ ++ subroutine metal_deriv(ityp,vvv,buffer) ++ ++c********************************************************************** ++c ++c calculate numerical derivatives of tabulated EAM metal potentials ++c ++c copyright - daresbury laboratory ++c author - w.smith march 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer ityp,i,npt ++ real(8) vvv,buffer,delmet,aa0,aa1,aa2,aa3,aa4,d1y,d2y,d3y,d4y ++ real(8) f0,f1,f2,f3,f4 ++ ++ dimension vvv(mxgrid,mxmet,2),buffer(mxbuff) ++ ++c interpolation parameters ++ ++ vvv(1,ityp,2)=buffer(1) ++ vvv(2,ityp,2)=buffer(2) ++ vvv(3,ityp,2)=buffer(3) ++ vvv(4,ityp,2)=buffer(4) ++ ++c construct interpolation table ++ ++ delmet=buffer(4) ++ npt=nint(buffer(1))-2 ++ do i=7,npt ++ ++ aa0=buffer(i) ++ f0=buffer(i-2)/aa0 ++ f1=buffer(i-1)/aa0 ++ f2=1.d0 ++ f3=buffer(i+1)/aa0 ++ f4=buffer(i+2)/aa0 ++ ++c calculate numerical differences for 5-point interpolation ++ ++ d1y=(f1-f0) ++ d2y=(f2-f1)-(f1-f0) ++ d3y=(f3-f0)+3.d0*(f1-f2) ++ d4y=(f4-f3)+3.d0*(f2-f3)+3.d0*(f2-f1)+(f0-f1) ++ ++c calculate polynomial coefficients ++ ++ aa0=aa0/delmet ++ aa4=d4y/24.d0 ++ aa3=(d3y+12.d0*aa4)/6.d0 ++ aa2=(d2y+6.d0*aa3-14.d0*aa4)/2.d0 ++ aa1=d1y+3.d0*aa2-7.d0*aa3+15.d0*aa4 ++ ++c calculate derivatives ++ ++ vvv(i,ityp,2)=aa1*aa0 ++ ++c derivatives at extremes of range ++ ++ if(i.eq.7)then ++ ++ vvv(5,ityp,2)=(aa1-4.d0*aa2+12.d0*aa3-32.d0*aa4)*aa0 ++ vvv(6,ityp,2)=(aa1-2.d0*aa2+3.d0*aa3-4.d0*aa4)*aa0 ++ ++ else if(i.eq.npt)then ++ ++ vvv(npt+1,ityp,2)=(aa1+2.d0*aa2+3.d0*aa3+4.d0*aa4)*aa0 ++ vvv(npt+2,ityp,2)=(aa1+4.d0*aa2+12.d0*aa3+32.d0*aa4)*aa0 ++ ++ endif ++ ++ enddo ++ ++c set derivatives to zero beyond end point of function ++ ++ do i=npt+3,mxgrid ++ vvv(i,ityp,2)=0.d0 ++ enddo ++ ++ return ++ end subroutine metal_deriv ++ ++ subroutine abort_eamtable_read(idnode,ntable) ++ ++c*********************************************************************** ++c ++c dl_poly error exit subroutine for reading TABEAM file ++c ++c copyright - daresbury laboratory ++c author - w. smith mar 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer idnode,ntable ++ ++ if(idnode.eq.0)close (ntable) ++ ++ call error(idnode,29) ++ ++ end subroutine abort_eamtable_read ++ ++ end module metal_module +diff -urN dl_class_1.9.orig/srcmod/neu_coul_module.f dl_class_1.9/srcmod/neu_coul_module.f +--- dl_class_1.9.orig/srcmod/neu_coul_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/neu_coul_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,731 @@ ++ module neu_coul_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining neutral group coulomb terms ++c copyright - daresbury laboratory ++c ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007 : solvation, free energy etc ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use ewald_module ++ use metafreeze_module ++ use pair_module ++ use setup_module ++ use solvation_module ++ ++ contains ++ ++ subroutine coul0neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c 1/r potential, no truncation or damping. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,epsq,chgprd,rsq,rrr,coul,reps,fcoul ++ real(8) fx,fy,fz ++ real(8) strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ reps=r4pie0/epsq ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(jatm)*chge(iatm)*reps ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++ rsq=rsqdf(m) ++ rrr=sqrt(rsq) ++ ++c calculate coulomb energy and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul0neu ++ ++ subroutine coul2neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a distance dependant dielectric `constant'. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,epsq,fx,fy,fz,chgprd,rrsq,coul,egamma ++ real(8) strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(iatm)*chge(jatm)*r4pie0/epsq ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate potential energy ++ ++ rrsq=1.d0/rsqdf(m) ++ coul=chgprd*rrsq ++ egamma=2.d0*coul*rrsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+2.d0*coul ++ coul=lambda1*coul ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-2.d0*coul ++ coul=lambda2*coul ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and Virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-2.d0*coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-2.d0*coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul2neu ++ ++ subroutine coul3neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq,rcut,alpha) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c reaction field potential ++c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) ++c adapted for fennell-gezelter coulombic model ++c by w.smith june 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester february 1995 ++c stress tensor - t.forester feb 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,newjob,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,erc1,fer1 ++ real(8) rcsq,b0,rfld0,rfld1,rfld2,chgprd,rsq,coul,omega,fcoul ++ real(8) fx,fy,fz,rrr,alpha,a1,a2,a3,a4,a5,pp,tt,exp1 ++ real(8) strs(6),strs_loc(6) ++ ++ save newjob,b0,rfld0,rfld1,rfld2,vcon,fcon ++ ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++c reaction field terms ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ ++c screened coulomb terms ++ ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/(rcut*rcut) ++ vcon=erc1+rfld2*rcut**2-rfld1 ++ fcon=rcut*fer1-rfld0*rcut ++ ++ endif ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(jatm)*chge(iatm)*r4pie0 ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ rrr=sqrt(rsq) ++ ++c error function terms ++ ++ tt=1.d0/(1.d0+pp*alpha*rrr) ++ exp1=exp(-(alpha*rrr)**2) ++ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rrr ++ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/rsq ++ ++c calculate potential energy ++ ++ omega=erc1-vcon+fcon*(rrr-rcut) ++ coul=chgprd*(omega+rfld2*rsq-rfld1) ++ ++c calculate forces ++ ++ fcoul=chgprd*(fer1-fcon/rrr-rfld0) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic force ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul3neu ++ ++ end module neu_coul_module +diff -urN dl_class_1.9.orig/srcmod/nlist_builders_module.f dl_class_1.9/srcmod/nlist_builders_module.f +--- dl_class_1.9.orig/srcmod/nlist_builders_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/nlist_builders_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,2216 @@ ++ module nlist_builders_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining neighbourlist builder routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use exclude_module ++ use pair_module ++ use setup_module ++ use utility_module ++ ++ contains ++ ++ subroutine nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to select and implement neighbour list ++c builders for short range force calculations ++c ++c copyright - daresbury laboratory ++c author - w. smith june 2006 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,loglnk,newjob,ltad ++ integer natms,idnode,mxnode,imcon,nneut,keyfce ++ real(8) rcut,delr,tstep ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++c skip if no pair force calculations required ++ ++ if(keyfce.gt.0)then ++ ++c test for updating the Verlet list ++ ++ if(ltad)then ++ ++ call vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) ++ ++ else ++ ++ call vertest(newlst,idnode,mxnode,natms,delr,tstep) ++ ++ endif ++ ++c set up nonbonded interaction (verlet) list ++ ++ newlst=(newjob.or.newlst) ++ ++ if(newlst)then ++ ++ if(.not.lneut)then ++ ++ if(lnsq)then ++ ++c calculate distant interactions explicitly ++ ++ call parlst_nsq(newlst,natms,idnode,mxnode,imcon,rcut) ++ ++ elseif(loglnk)then ++ ++c ignore real space distant interactions ++ ++ call parlink ++ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++ else ++ ++ call parlst ++ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++ endif ++ ++ else ++ ++ if(.not.loglnk)then ++ ++ call parneulst ++ x (newlst,lneut,nneut,idnode,mxnode,imcon,rcut, ++ x delr) ++ ++ else ++ ++ call parlinkneu ++ x (newlst,natms,nneut,idnode,mxnode,imcon, ++ x rcut,delr) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++ return ++ end subroutine nlist_driver ++ ++ subroutine parlst(newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atoms taken into account ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w.smith march 1992 ++c modified - t.forester october 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,lfrzi,ldo ++ integer natms,idnode,mxnode,imcon,ibig,last,mpm2 ++ integer npm2,idum,i,m,ii,j ++ real(8) rcut,delr,rclim,rsq ++ ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c check size of work array ++ ++ if(mxxdf.lt.(natms+1)/2)then ++ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', ++ x (natms+1)/2 ++ call error(idnode,474) ++ endif ++ ++c set control variables ++ ++ last=natms ++ lchk=.true. ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius ++ ++ rclim=(rcut+delr)**2 ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ noxatm(i)=1 ++ ++ enddo ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate atoms to neighbour list ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ ++c reject atoms in excluded pair list ++ ++ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) ++ x then ++ ++ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) ++ ++c reject frozen atom pairs ++ ++ else ++ ++ ldo=.true. ++ if(lfrzi)ldo=(lstfrz(j).eq.0) ++ ++ if(ldo)then ++ ++c calculate interatomic distance ++ ++ if(imcon.eq.6)then ++ ++ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii) ++ ++ else ++ ++ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii)+zdf(ii)*zdf(ii) ++ ++ endif ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.lt.rclim)then ++ ++ lentry(ii)=lentry(ii)+1 ++ ++ if(lentry(ii).gt.mxlist)then ++ ++ lchk=.false. ++ ibig=max(lentry(ii),ibig) ++ ++ endif ++ ++c compile neighbour list array ++ ++ if(lchk)then ++ ++ list(ii,lentry(ii))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be at least ',ibig ++ write(nrite,*) ' mxlist is currently ',mxlist ++ endif ++ call error(idnode,110) ++ ++ endif ++ ++c check all excluded atoms are accounted for ++ ++ do i=1,ii ++ ++ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. ++ ++ enddo ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk) call error(idnode,160) ++ ++ endif ++ ++ return ++ end subroutine parlst ++ ++ subroutine parlink(newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on link-cell method. ++c frozen atoms taken into account ++c ++c to be used with the link version of exclude :exclude_link ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester september 1993. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,linc,newjob,lfrzi,ldo ++ integer natms,idnode,mxnode,imcon,idum,nix,niy,niz,fail ++ integer i,ibig,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz,j,icell ++ integer ic,ii,kc,ik,jx,jy,jz,jc,ixl ++ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz ++ real(8) cx,cy,cz,sxd,syd,szd,xd,yd,zd,rsq ++ ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension nix(508),niy(508),niz(508) ++ ++ save newjob ++ data newjob/.true./ ++ ++ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1,2,0,0,-2,2,-1,1,0,-2,2,0, ++ x 0,-1,1,0,-1,1,-2,2,-2,2,-1,1,-1,1,-1,1,-2,2,0,-2,2,0,-2,2,-2,2, ++ x -1,1,-2,2,-2,2,-1,1,-2,2,-2,2,3,0,0,-3,3,-1,1,0,-3,3,0,0,-1,1,0, ++ x -1,1,-3,3,-3,3,-1,1,-1,1,-1,1,-3,3,-2,2,0,-3,3,0,0,-2,2,0,-2,2, ++ x -3,3,-3,3,-2,2,-1,1,-3,3,-3,3,-1,1,-1,1,-2,2,-2,2,-1,1,-2,2,-3,3, ++ x -3,3,-2,2,-2,2,-2,2,-3,3,0,-3,3,0,-3,3,-3,3,-1,1,-3,3,-3,3,-1,1, ++ x -3,3,-3,3,-2,2,-3,3,-3,3,-2,2,-3,3,-3,3,4,0,0,-4,4,-1,1,0,-4,4,0, ++ x 0,-1,1,0,-1,1,-4,4,-4,4,-1,1,-1,1,-1,1,-4,4,-2,2,0,-4,4,0,0,-2,2, ++ x 0,-2,2,-4,4,-4,4,-2,2,-1,1,-4,4,-4,4,-1,1,-1,1,-2,2,-2,2,-1,1,-2, ++ x 2,-4,4,-4,4,-2,2,-2,2,-2,2,-4,4,-3,3,0,-4,4,0,0,-3,3,0,-3,3,-4,4, ++ x -4,4,-3,3,-1,1,-4,4,-4,4,-1,1,-1,1,-3,3,-3,3,-1,1,-3,3,-4,4,-4,4, ++ x -3,3,-2,2,-4,4,-4,4,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3,-4,4,-4,4,-3,3, ++ x -3,3,-3,3,-4,4,0,-4,4,0,-4,4,-4,4,-1,1,-4,4,-4,4,-1,1,-4,4,-4,4, ++ x -2,2,-4,4,-4,4,-2,2,-4,4,-4,4,-3,3,-4,4,-4,4,-3,3,5,0,0,-5,5,-1, ++ x 1,0,-5,5,0,0,-1,1,0,-1,1,-5,5,-5,5,-1,1,-1,1,-1,1,-5,5,-2,2,0,-5, ++ x 5,0,0,-2,2,0,-2,2,-5,5,-5,5,-2,2,-1,1,-5,5,-5,5,-1,1,-1,1,-2,2, ++ x -2,2,-1,1,-2,2,-5,5,-5,5,-2,2,-2,2,-2,2,-5,5,-3,3,0,-5,5,0,0,-3, ++ x 3,0,-3,3,-5,5,-5,5,-3,3,-1,1,-5,5,-5,5,-1,1,-1,1,-3,3,-3,3,-1,1, ++ x -3,3,-5,5,-5,5,-3,3,-2,2,-5,5,-5,5,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3, ++ x -5,5,-5,5,-3,3,-3,3,-3,3/ ++ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1,0,2,0,1,1,2,2,-2,0,0,2, ++ x -1,0,0,1,-2,-2,-1,-1,1,1,2,2,-1,-1,1,1,2,2,-2,0,0,2,-2,-2,2,2,-2, ++ x -2,-1,-1,1,1,2,2,-2,-2,2,2,0,3,0,1,1,3,3,-3,0,0,3,-1,0,0,1,-3,-3, ++ x -1,-1,1,1,3,3,-1,-1,1,1,2,2,3,3,-3,0,0,3,-2,0,0,2,-3,-3,-2,-2,2, ++ x 2,3,3,-3,-3,-1,-1,1,1,3,3,-2,-2,-1,-1,1,1,2,2,-3,-3,-2,-2,2,2,3, ++ x 3,-2,-2,2,2,3,3,-3,0,0,3,-3,-3,3,3,-3,-3,-1,-1,1,1,3,3,-3,-3,3,3, ++ x -3,-3,-2,-2,2,2,3,3,-3,-3,3,3,0,4,0,1,1,4,4,-4,0,0,4,-1,0,0,1,-4, ++ x -4,-1,-1,1,1,4,4,-1,-1,1,1,2,2,4,4,-4,0,0,4,-2,0,0,2,-4,-4,-2,-2, ++ x 2,2,4,4,-4,-4,-1,-1,1,1,4,4,-2,-2,-1,-1,1,1,2,2,-4,-4,-2,-2,2,2, ++ x 4,4,-2,-2,2,2,3,3,4,4,-4,0,0,4,-3,0,0,3,-4,-4,-3,-3,3,3,4,4,-4, ++ x -4,-1,-1,1,1,4,4,-3,-3,-1,-1,1,1,3,3,-4,-4,-3,-3,3,3,4,4,-4,-4, ++ x -2,-2,2,2,4,4,-3,-3,-2,-2,2,2,3,3,-4,-4,-3,-3,3,3,4,4,-3,-3,3,3, ++ x 4,4,-4,0,0,4,-4,-4,4,4,-4,-4,-1,-1,1,1,4,4,-4,-4,4,4,-4,-4,-2,-2, ++ x 2,2,4,4,-4,-4,4,4,-4,-4,-3,-3,3,3,4,4,0,5,0,1,1,5,5,-5,0,0,5,-1, ++ x 0,0,1,-5,-5,-1,-1,1,1,5,5,-1,-1,1,1,2,2,5,5,-5,0,0,5,-2,0,0,2,-5, ++ x -5,-2,-2,2,2,5,5,-5,-5,-1,-1,1,1,5,5,-2,-2,-1,-1,1,1,2,2,-5,-5, ++ x -2,-2,2,2,5,5,-2,-2,2,2,3,3,5,5,-5,0,0,5,-3,0,0,3,-5,-5,-3,-3,3, ++ x 3,5,5,-5,-5,-1,-1,1,1,5,5,-3,-3,-1,-1,1,1,3,3,-5,-5,-3,-3,3,3,5, ++ x 5,-5,-5,-2,-2,2,2,5,5,-3,-3,-2,-2,2,2,3,3,-5,-5,-3,-3,3,3,5,5,-3, ++ x -3,3,3/ ++ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,0,0,1,1,1,1,2,2,2, ++ x 2,1,1,1,1,1,1,1,1,2,2,2,2,0,0,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2, ++ x 2,2,2,0,0,3,0,0,0,0,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,3,3,3,3,0,0, ++ x 0,0,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3, ++ x 3,3,2,2,2,2,2,2,2,2,3,3,3,3,0,0,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3, ++ x 2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,1,1,1,1,4,4,4,4,1, ++ x 1,1,1,1,1,1,1,4,4,4,4,0,0,0,0,2,2,2,2,4,4,4,4,1,1,1,1,1,1,1,1,2, ++ x 2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,4,4,4,4,0,0,0,0,3, ++ x 3,3,3,4,4,4,4,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,2, ++ x 2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4, ++ x 4,4,4,0,0,4,4,4,4,1,1,1,1,4,4,4,4,4,4,4,4,2,2,2,2,4,4,4,4,4,4,4, ++ x 4,3,3,3,3,4,4,4,4,4,4,4,4,0,0,5,0,0,0,0,1,1,1,1,5,5,5,5,1,1,1,1, ++ x 1,1,1,1,5,5,5,5,0,0,0,0,2,2,2,2,5,5,5,5,1,1,1,1,1,1,1,1,2,2,2,2, ++ x 2,2,2,2,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,5,5,5,5,0,0,0,0,3,3,3,3, ++ x 5,5,5,5,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,2,2,2,2, ++ x 2,2,2,2,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,5,5,5,5/ ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1890) ++ ++ if(newlst)then ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x call error(idnode,300) ++ lchk=.true. ++ ibig=0 ++ ++c zero link arrays ++ ++ do i=1,natms ++ link(i)=0 ++ enddo ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++c real space cut off ++ ++ rcsq=(rcut+delr)**2 ++ ++c create mock cell vector for non-periodic system ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++c find maximum x,y,z postions ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ ++ endif ++ ++ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) ++ ++ endif ++ ++ call dcell(cell,celprp) ++ call invert(cell,rcell,det) ++ ++c ratio of link cell length to cut off diameter - max value is 5 ++ ++c irat=nint((rcut+delr)/rlink) ++c irat=min(max(irat,1),5) ++ ++ irat=1 ++ ++ ++c number of subcells ++ ++ if (irat.eq.1)then ++ ++ nsbcll=14 ++ ++ elseif(irat.eq.2)then ++ ++ nsbcll=63 ++ ++ elseif(irat.eq.3)then ++ ++ nsbcll=156 ++ ++ elseif(irat.eq.4)then ++ ++ nsbcll=307 ++ ++ elseif(irat.eq.5)then ++ ++ nsbcll=508 ++ ++ endif ++ ++ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) ++ ily=int(celprp(8)*dble(irat)/(rcut+delr)) ++ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) ++ ++c check there are enough link cells ++ ++ linc=.true. ++ if(ilx.lt.2*irat+1)linc=.false. ++ if(ily.lt.2*irat+1)linc=.false. ++ if(ilz.lt.2*irat+1)linc=.false. ++ if(.not.linc) call error(idnode,305) ++ ncells=ilx*ily*ilz ++ if(ncells.gt.mxcell) call error(idnode,392) ++ ++c calculate link cell indices ++ ++ do i=1,ncells ++ ++ lct(i)=0 ++ ++ enddo ++ ++c link-cell cutoff for reduced space ++ ++ xdc=dble(ilx) ++ ydc=dble(ily) ++ zdc=dble(ilz) ++ ++c reduced space coordinates ++ if(newjob)then ++ ++ newjob=.false. ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(mxnode.gt.1) call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ do i=1,natms ++ ++ tx=xxx(i) ++ ty=yyy(i) ++ tz=zzz(i) ++ ++ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 ++ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 ++ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 ++ ++ enddo ++ ++c link neighbours ++ ++ do i=1,natms ++ ++ ix=min(int(xdc*uxx(i)),ilx-1) ++ iy=min(int(ydc*uyy(i)),ily-1) ++ iz=min(int(zdc*uzz(i)),ilz-1) ++ ++ icell=1+ix+ilx*(iy+ily*iz) ++ ++ j=lct(icell) ++ lct(icell)=i ++ link(i)=j ++ ++ enddo ++ ++c set control variables for loop over subcells ++ ++ ix=1 ++ iy=1 ++ iz=1 ++ ++c primary loop over subcells ++ ++ do ic=1,ncells ++ ++ ii=lct(ic) ++ if(ii.gt.0)then ++ ++c secondary loop over subcells ++ ++ ik=0 ++ ++ do kc=1,nsbcll ++ ++ i=ii ++ ++ cx=0.d0 ++ cy=0.d0 ++ cz=0.d0 ++ jx=ix+nix(kc) ++ jy=iy+niy(kc) ++ jz=iz+niz(kc) ++ ++c minimum image convention ++ ++ if(jx.gt.ilx)then ++ ++ jx=jx-ilx ++ cx=1.d0 ++ ++ elseif(jx.lt.1)then ++ ++ jx=jx+ilx ++ cx=-1.d0 ++ ++ endif ++ ++ if(jy.gt.ily)then ++ ++ jy=jy-ily ++ cy=1.d0 ++ ++ elseif(jy.lt.1)then ++ ++ jy=jy+ily ++ cy=-1.d0 ++ ++ endif ++ ++ if(jz.gt.ilz)then ++ ++ jz=jz-ilz ++ cz=1.d0 ++ ++ elseif(jz.lt.1)then ++ ++ jz=jz+ilz ++ cz=-1.d0 ++ ++ endif ++ ++c index of neighbouring cell ++ ++ jc=jx+ilx*((jy-1)+ily*(jz-1)) ++ j=lct(jc) ++ ++c ignore if empty ++ ++ if(j.gt.0)then ++ ++ do while(i.ne.0) ++ ++c test if site is of interest to this node ++ ++ if(mod(i-1,mxnode).eq.idnode)then ++ ++ ++c i's index for this processor ++ ik=((i-1)/mxnode)+1 ++ ++c test if i is a frozen atom ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++ if(ic.eq.jc) j=link(i) ++ if(j.gt.0)then ++ ++ do while(j.ne.0) ++ ++c test of frozen atom pairs ++ ++ ldo=.true. ++ if(lfrzi)ldo=(lstfrz(j).eq.0) ++ ++ if(ldo)then ++ ++c distance in real space : minimum image applied ++ ++ sxd=uxx(j)-uxx(i)+cx ++ syd=uyy(j)-uyy(i)+cy ++ szd=uzz(j)-uzz(i)+cz ++ ++ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd ++ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd ++ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd ++ ++ if(imcon.eq.6)then ++ ++ rsq=xd**2+yd**2 ++ ++ else ++ ++ rsq=xd**2+yd**2+zd**2 ++ ++ endif ++ ++c test of distance ++ if(rcsq.gt.rsq)then ++ ++c test for excluded atom ++ ++ linc=.true. ++ do ixl=1,nexatm(ik) ++ ++ if(lexatm(ik,ixl).eq.j) linc=.false. ++ ++ enddo ++ ++ if(linc)then ++ ++ lentry(ik)=lentry(ik)+1 ++ ++ if(lentry(ik).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ik)) ++ lchk=.false. ++ ++ else ++ ++ list(ik,lentry(ik))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ j=link(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ j=lct(jc) ++ i=link(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ ix=ix+1 ++ if(ix.gt.ilx)then ++ ++ ix=1 ++ iy=iy+1 ++ ++ if(iy.gt.ily)then ++ ++ iy=1 ++ iz=iz+1 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be >= ',ibig ++ write(nrite,*) ' mxlist is currenty ',mxlist ++ endif ++ call error(idnode,106) ++ ++ endif ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (uxx,uyy,uzz,stat=fail) ++ ++ return ++ end subroutine parlink ++ ++ subroutine parneulst(newlst,lneut,nneut,idnode,mxnode,imcon, ++ x rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atoms taken into account ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - t.forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,lneut,safe,lfrzi ++ integer nneut,idnode,mxnode,imcon,idum,fail,mpm2,npm2,ibig ++ integer i,ill,ia,im,jmlast,jmwrap,nuei1,nuei2,ii,jm1,jm,jj0,jj2 ++ integer j,ii1 ++ real(8) rcut,delr,rclim,fi,rrr,rcl1 ++ ++ logical, allocatable :: lms(:) ++ dimension fi(3) ++ ++ data fail/0/ ++ ++C DIR$ CACHE_ALIGN fi ++ ++c allocate work arrays ++ ++ allocate (lms(mxneut),stat=fail) ++ if(fail.ne.0)call error(idnode,1910) ++ ++ if(newlst.and.lneut)then ++ ++c set control variables ++ ++ safe=.true. ++ lchk= .true. ++ mpm2=(nneut+2)/2 ++ npm2=(nneut+1)/2 ++ ++c set cutoff radius ++ ++ rcl1=(rcut+delr) ++ rclim=(rcut+delr)**2 ++ ibig=0 ++ ill=0 ++ ++c construct pair force neighbour list: neutral groups ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++ ++c outer loop over groups ++ ++ ia=0 ++ ++ do im=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ if(im.ge.mpm2) mpm2=npm2 ++ ++ lms(1)=.false. ++ do j=2,mpm2 ++ lms(j)=.true. ++ enddo ++ ++ jmlast=min(nneut,im+mpm2-1) ++ jmwrap=max(0,im+mpm2-1-nneut) ++ ++c loop over atomic pairs ++ ++ nuei1=neulst(im) ++ nuei2=neulst(im+1)-1 ++ ++ do i=nuei1,nuei2 ++ ++ fi(1)=xxx(i) ++ fi(2)=yyy(i) ++ fi(3)=zzz(i) ++ lfrzi=(lstfrz(i).eq.0) ++ ++ ii=0 ++ jm1=1 ++ do jm=im+1,jmlast ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ xdf(ii)=fi(1)-xxx(j) ++ ydf(ii)=fi(2)-yyy(j) ++ zdf(ii)=fi(3)-zzz(j) ++ ++ else ++ ++ ibig=max(ibig,ii) ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ xdf(ii)=fi(1)-xxx(j) ++ ydf(ii)=fi(2)-yyy(j) ++ zdf(ii)=fi(3)-zzz(j) ++ ++ else ++ ++ safe=.false. ++ ibig=max(ibig,ii) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c apply minimum image convention ++ ++ ii1=min(ii,mxxdf) ++ call images(imcon,0,1,ii1,cell,xdf,ydf,zdf) ++ ++c search for those in cutoff ++ ++ ii=0 ++ jm1=1 ++ do jm=im+1,jmlast ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ if(lms(jm1))then ++ ++ if(lfrzi)then ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ elseif(lstfrz(j).eq.0)then ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ if(lms(jm1))then ++ ++ if(lfrzi)then ++ ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ elseif(lstfrz(j).eq.0)then ++ ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c compile neighbour list for ia ++c with running check of neighbour list array capacity ++ ++ jm1=0 ++ do jm=im,jmlast ++ ++ jm1=jm1+1 ++ if(.not.lms(jm1))then ++ ++ lentry(ia)=lentry(ia)+1 ++ if(lentry(ia).le.mxlist)then ++ ++ list(ia,lentry(ia))=jm ++ ++ else ++ ++ ill=max(ill,lentry(ia)) ++ lchk=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(.not.lms(jm1))then ++ ++ lentry(ia)=lentry(ia)+1 ++ if(lentry(ia).le.mxlist)then ++ ++ list(ia,lentry(ia))=jm ++ ++ else ++ ++ ill=max(ill,lentry(ia)) ++ lchk=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ if(.not.lchk)then ++ ++ call gimax(ill,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be at least ',ill ++ write(nrite,*) ' mxlist is currently ',mxlist ++ endif ++ call error(idnode,108) ++ ++ endif ++ ++c terminate job if work arrays exceeded ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*)'mxxdf must be at least ',ibig ++ write(nrite,*)'mxxdf is currently ',mxxdf ++ endif ++ call error(idnode,476) ++ endif ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(lms,stat=fail) ++ ++ return ++ end subroutine parneulst ++ ++ subroutine parlinkneu ++ x (newlst,natms,nneut,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on link-cell method with neutral groups ++c frozen atoms taken into account ++c ++c to be used with the link version of exclude :excludeneu_link ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1996 ++c author - t. forester january 1996. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,linc,newjob,lfrzi,ldo,swop ++ integer natms,nneut,idnode,mxnode,imcon,idum,fail,ibig ++ integer nix,niy,niz,i,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz ++ integer icell,j,ic,ii,kc,jx,jy,jz,jc,ineu,ik,jneu,ineua,jneua ++ integer ika,jneua1,i1,j1 ++ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz ++ real(8) cx,cy,cz,sxd,syd,szd,rsq,xd,yd,zd ++ ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension nix(14),niy(14),niz(14) ++ ++ save newjob ++ ++ data newjob/.true./ ++ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1/ ++ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1/ ++ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1/ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1900) ++ ++ lchk=.true. ++ ibig=0 ++ if(newlst)then ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x call error(idnode,300) ++ ++c zero link arrays ++ ++ do i=1,natms ++ ++ link(i)=0 ++ ++ enddo ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++c real space cut off ++ ++ rcsq=(rcut+delr)**2 ++c ++c create mock cell vector for non-periodic system ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++c find maximum x,y,z postions ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ ++ endif ++ ++ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) ++ ++ endif ++ ++ call dcell(cell,celprp) ++ call invert(cell,rcell,det) ++ ++c ratio of link cell length to cut off diameter ++ ++ irat=1 ++ ++c number of subcells ++ ++ nsbcll=14 ++ ++ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) ++ ily=int(celprp(8)*dble(irat)/(rcut+delr)) ++ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) ++c ++c check there are enough link cells ++ ++ linc=.false. ++ if(ilx.lt.2*irat+1) linc=.true. ++ if(ily.lt.2*irat+1) linc=.true. ++ if(ilz.lt.2*irat+1) linc=.true. ++ if(linc) call error(idnode,305) ++ ++ ncells=ilx*ily*ilz ++ if(ncells.gt.mxcell)then ++ ++ if(idnode.eq.0) write(nrite,*) 'mxcell must be >= ',ncells ++ call error(idnode,392) ++ ++ endif ++ ++c calculate link cell indices ++ ++ do i=1,ncells ++ ++ lct(i)=0 ++ ++ enddo ++ ++c link-cell cutoff for reduced space ++ ++ xdc=dble(ilx) ++ ydc=dble(ily) ++ zdc=dble(ilz) ++ ++c reduced space coordinates ++ if(newjob)then ++ ++ newjob=.false. ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(mxnode.gt.1) call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ do i=1,natms ++ ++ tx=xxx(i) ++ ty=yyy(i) ++ tz=zzz(i) ++ ++ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 ++ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 ++ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 ++ ++ enddo ++ ++c link neighbours ++ ++ do i=1,natms ++ ++ ix=min(int(xdc*uxx(i)),ilx-1) ++ iy=min(int(ydc*uyy(i)),ily-1) ++ iz=min(int(zdc*uzz(i)),ilz-1) ++ ++ icell=1+ix+ilx*(iy+ily*iz) ++ ++ j=lct(icell) ++ lct(icell)=i ++ link(i)=j ++ ++ enddo ++ ++c set control variables for loop over subcells ++ ++ ix=1 ++ iy=1 ++ iz=1 ++ ++c primary loop over subcells ++ ++ do ic=1,ncells ++ ++ ii=lct(ic) ++ if(ii.gt.0)then ++ ++c secondary loop over subcells ++ ++ do kc=1,nsbcll ++ ++ i=ii ++ ++ cx=0.d0 ++ cy=0.d0 ++ cz=0.d0 ++ jx=ix+nix(kc) ++ jy=iy+niy(kc) ++ jz=iz+niz(kc) ++ ++c minimum image convention ++ ++ if(jx.gt.ilx)then ++ ++ jx=jx-ilx ++ cx=1.d0 ++ ++ elseif(jx.lt.1)then ++ ++ jx=jx+ilx ++ cx=-1.d0 ++ ++ endif ++ ++ if(jy.gt.ily)then ++ ++ jy=jy-ily ++ cy=1.d0 ++ ++ elseif(jy.lt.1)then ++ ++ jy=jy+ily ++ cy=-1.d0 ++ ++ endif ++ ++ if(jz.gt.ilz)then ++ ++ jz=jz-ilz ++ cz=1.d0 ++ ++ elseif(jz.lt.1)then ++ ++ jz=jz+ilz ++ cz=-1.d0 ++ ++ endif ++ ++c index of neighbouring cell ++ ++ jc=jx+ilx*((jy-1)+ily*(jz-1)) ++ j=lct(jc) ++ ++c ignore if empty ++ ++ if(j.gt.0)then ++ ++ do while(i.ne.0) ++ ++c test if site is of interest to this node ++ ++ ineu=lstneu(i) ++ ik=0 ++ ++c i's group index for this processor ++ ++ if(mod(ineu-1,mxnode).eq.idnode) ++ x ik=((ineu-1)/mxnode)+1 ++ ++c test if i is a frozen atom ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++ if(ic.eq.jc) j=link(i) ++ if(j.gt.0)then ++ ++ do while(j.ne.0) ++ ++ jneu=lstneu(j) ++ ++c swop tests for switching of group indices, ++c ldo for 'doing' interaction ++ ++ swop=.false. ++ ldo=(ik.gt.0) ++ jneua=jneu ++ ineua=ineu ++ ika=ik ++ ++c keep only Brode-Ahlrichs pairs ++ ++ if(jneua.ge.ineua)then ++ ++ if(jneua-ineua.gt.nneut/2)then ++ ++ swop=(mod(jneu-1,mxnode).eq.idnode) ++ if(swop)then ++ ldo=((nneut+ineua-jneua).le.(nneut-1)/2) ++ else ++ ldo=.false. ++ endif ++ ++ endif ++ ++ elseif(nneut+jneua-ineua.gt.(nneut-1)/2)then ++ ++ swop=(mod(jneu-1,mxnode).eq.idnode) ++ if(swop)then ++ ldo=((ineua-jneua).le.nneut/2) ++ else ++ ldo=.false. ++ endif ++ ++ endif ++ ++ if(swop.and.ldo)then ++ jneua=ineu ++ ineua=jneu ++ ika=((jneu-1)/mxnode)+1 ++ endif ++ ++c test of frozen atom pairs ++ ++ if(lfrzi.and.ldo)ldo=(lstfrz(j).eq.0) ++ ++c check we haven't already included this group in the list ... ++ ++ jneua1=0 ++ do while ++ x (ldo.and.jneua1.lt.min(lentry(ika),mxlist)) ++ ++ jneua1=jneua1+1 ++ if(list(ika,jneua1).eq.jneua) ldo=.false. ++ ++ enddo ++ ++ if(ldo)then ++ ++c distance in real space : minimum image applied ++ ++ sxd=uxx(j)-uxx(i)+cx ++ syd=uyy(j)-uyy(i)+cy ++ szd=uzz(j)-uzz(i)+cz ++ ++ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd ++ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd ++ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd ++ ++ rsq=xd*xd+yd*yd+zd*zd ++ ++c test of distance ++ ++ if(rsq.lt.rcsq)then ++ ++ lentry(ika)=lentry(ika)+1 ++ if(lentry(ika).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ika)) ++ lchk=.false. ++ ++ else ++ ++ list(ika,lentry(ika))=jneua ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ j=link(j) ++ ++ enddo ++ ++ endif ++ ++ j=lct(jc) ++ i=link(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ ix=ix+1 ++ if(ix.gt.ilx)then ++ ++ ix=1 ++ iy=iy+1 ++ ++ if(iy.gt.ily)then ++ ++ iy=1 ++ iz=iz+1 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*)'mxlist must be at least ',ibig ++ write(nrite,*)'mxlist is currently ',mxlist ++ endif ++ call error(idnode,107) ++ ++ endif ++ ++c sort list into order .. ++c use link as a work array ++ ++ ik=0 ++ do i=1+idnode,nneut,mxnode ++ ++ ik=ik+1 ++ do j=1,lentry(ik) ++ ++ link(j)=list(ik,j) ++ ++ enddo ++ call shellsort(lentry(ik),link) ++ ++c ensure Brode-Ahlrichs ordering ++ ++ i1=lentry(ik)+1 ++ j1=0 ++ do j=1,lentry(ik) ++ ++ if(link(j).ge.i)then ++ ++ j1=j1+1 ++ list(ik,j1)=link(j) ++ i1=min(i1,j) ++ ++ endif ++ ++ enddo ++ ++ do j=1,i1-1 ++ ++ j1=j1+1 ++ list(ik,j1)=link(j) ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (uxx,uyy,uzz,stat=fail) ++ ++ return ++ end subroutine parlinkneu ++ ++ subroutine parlst_nsq ++ x (newlst,natms,idnode,mxnode,imcon,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atom option included ++c ++c to be used with multiple_nsq ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted - w.smith aug 2008 - solvation, excitation etc ++c ++c stress tensor : t.forester may 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst ++ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 ++ integer npm2,m,ii,j,idum ++ real(8) rcut,rclim,rsq,rrr ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c check size of work array ++ ++ if(mxxdf.lt.(natms+1)/2)then ++ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', ++ x (natms+1)/2 ++ call error(idnode,475) ++ endif ++ ++c set control variables ++ ++ last=natms ++ lchk=.true. ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius - ignore border width ++ ++ rclim=(rcut)**2 ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ noxatm(i)=1 ++ ++ enddo ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++c calculate interatomic displacements ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate atoms to neighbour list ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) ++ x then ++ ++ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) ++ ++ elseif(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then ++ ++c reject frozen atoms and calculate interatomic distance ++ ++ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.lt.rclim)then ++ ++ lentry(ii)=lentry(ii)+1 ++ ++ if(lentry(ii).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ii)) ++ lchk=.false. ++ ++ endif ++ ++c compile neighbour list array ++ ++ if(lchk)then ++ ++ list(ii,lentry(ii))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gisum(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be >= ',ibig ++ write(nrite,*) ' mxlist is currenty ',mxlist ++ endif ++ call error(idnode,109) ++ ++ endif ++ ++c check all excluded atoms are accounted for ++ ++ do i=1,ii ++ ++ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ ++ if(.not.lchk) call error(idnode,160) ++ ++ endif ++ ++ return ++ end subroutine parlst_nsq ++ ++ subroutine primlst(idnode,mxnode,natms,imcon,rprim) ++ ++c********************************************************************* ++c ++c dlpoly routine to split interaction list into primary and ++c secondary neighbours for use with multiple timestep method ++c ++c copyright daresbury laboratory ++c author - t. forester february 1993 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,imcon,ii,k,j,i ++ real(8) rprim,rprim2,rsq ++ ++ rprim2=rprim*rprim ++ ii=0 ++ ++ do i=1+idnode,natms,mxnode ++ ++ ii=ii+1 ++ ++ do j=1,lentry(ii) ++ ++ k=iabs(list(ii,j)) ++ xdf(j)=xxx(i)-xxx(k) ++ ydf(j)=yyy(i)-yyy(k) ++ zdf(j)=zzz(i)-zzz(k) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c assign atoms as primary or secondary ++ ++ ++ do j=1,lentry(ii) ++ ++c calculate interatomic distance ++ ++ rsq=xdf(j)**2+ydf(j)**2+zdf(j)**2 ++ ++ if(rsq.lt.rprim2)then ++ ++c compile primary neighbour list array : -ve indices ++ ++ list(ii,j)=-iabs(list(ii,j)) ++ ++ else ++ ++c compile secondary neighbour list array : +ve indices ++ ++ list(ii,j)=iabs(list(ii,j)) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine primlst ++ ++ subroutine prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++c*********************************************************************** ++c ++c dlpoly routine to partition neutral group list into ++c primary and secondary groups ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,ldo ++ integer imcon,idnode,mxnode,nneut,ineu,ia,jj,ibig,ii ++ integer jj0,jneu,j,i,idum ++ real(8) rprim,rclim,xi,yi,zi,rrr ++ ++ lchk=.true. ++ ++ if(newlst)then ++ ++c set primary cutoff limit ++ ++ rclim=rprim*rprim ++ ++c set list to negative - signal for seconary shell ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++ do jj=1,lentry(ia) ++ ++ list(ia,jj)=-abs(list(ia,jj)) ++ ++ enddo ++ ++ enddo ++ ++c loop over neutral group ineu sites ++ ++ lchk=.true. ++ ibig=0 ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++ ii=0 ++ do i=neulst(ineu),neulst(ineu+1)-1 ++ ++ xi=xxx(i) ++ yi=yyy(i) ++ zi=zzz(i) ++ ++ do jj=1,lentry(ia) ++ ++ jneu=-list(ia,jj) ++ jj0=neulst(jneu) ++ ++ if(ineu.eq.jneu) jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,neulst(jneu+1)-1 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ xdf(ii)=xi-xxx(j) ++ ydf(ii)=yi-yyy(j) ++ zdf(ii)=zi-zzz(j) ++ else ++ lchk=.false. ++ ibig=ii ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c apply minimum image convention ++ ++ ii=min(ii,mxxdf) ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate groups to primary or secondary shell ++c on basis of closest atom-atom interactions ++ ++ ii=0 ++ do i=neulst(ineu),neulst(ineu+1)-1 ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj) ++ ldo=(jneu.lt.0) ++ if(ldo)then ++ jneu=-jneu ++ jj0=neulst(jneu) ++ if(ineu.eq.jneu) jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,neulst(jneu+1)-1 ++ ++ if(ldo)then ++ ++ ii=min(ii+1,mxxdf) ++ ++ if(abs(xdf(ii)).lt.rprim)then ++ if(abs(ydf(ii)).lt.rprim)then ++ if(abs(zdf(ii)).lt.rprim)then ++ ++c calculate interatomic distance ++ ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c put in primary list if found any interaction close enough ++ ++ if(rrr.le.rclim)then ++ ldo=.false. ++ list(ia,jj)=jneu ++ endif ++ ++ endif ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) 'mxxdf must be at least ',ibig ++ write(nrite,*) 'mxxdf is currently ',mxxdf ++ endif ++ call error(idnode,477) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine prneulst ++ ++ subroutine vertest(newlst,idnode,mxnode,natms,delr,tstep) ++ ++c********************************************************************* ++c ++c DL_POLY subroutime to test for updating of Verlet list ++c replicated data version ++c ++c copyright daresbury laboratory 1993 ++c author - t. forester may 1993 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,newjob ++ integer idnode,mxnode,natms,i,j,k,moved,ibuff,fail ++ real(8) rmax,dr,delr,tstep ++ ++ real(8), allocatable :: xold(:),yold(:),zold(:) ++ ++ save newjob,xold,yold,zold ++ ++ data newjob/.true./,fail/0/ ++ ++ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) ++ ++ if(newjob)then ++ ++c set up initial arrays ++ ++ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=0.d0 ++ yold(j)=0.d0 ++ zold(j)=0.d0 ++ ++ enddo ++ ++ newjob=.false. ++ newlst=.true. ++ ++ else ++ ++c integrate velocities ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xold(j)+vxx(i) ++ yold(j)=yold(j)+vyy(i) ++ zold(j)=zold(j)+vzz(i) ++ ++ enddo ++ ++c maximum displacement ++ ++ rmax=(delr/2.d0)**2 ++ ++c test atomic displacements ++ ++ moved=0 ++ ++ do k=1,j ++ ++ dr=tstep**2*(xold(k)**2+yold(k)**2+zold(k)**2) ++ if(dr.gt.rmax) moved=moved+1 ++ ++ enddo ++ ++c global sum of moved atoms ++ ++ if(mxnode.gt.1) call gisum(moved,1,ibuff) ++ ++c test for new verlet list ++ ++ newlst=(moved.ge.2) ++ ++c update stored positions ++ ++ if(newlst)then ++ ++ do k=1,j ++ ++ xold(k)=0.d0 ++ yold(k)=0.d0 ++ zold(k)=0.d0 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine vertest ++ ++ subroutine vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) ++ ++c********************************************************************* ++c ++c DL_POLY subroutime to test for updating of Verlet list ++c replicated data version (version 2) ++c ++c copyright daresbury laboratory ++c author - w.smith 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,newjob ++ integer idnode,mxnode,natms,imcon,i,j,k,moved,ibuff,fail ++ real(8) rmax,dr,delr,tstep ++ ++ real(8), allocatable :: xold(:),yold(:),zold(:) ++ real(8), allocatable :: xdif(:),ydif(:),zdif(:) ++ ++ save newjob,xold,yold,zold ++ ++ data newjob/.true./,fail/0/ ++ ++ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) ++ ++c set up initial arrays ++ ++ allocate (xdif(msatms),ydif(msatms),zdif(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ if(newjob)then ++ ++ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ ++ enddo ++ ++ newjob=.false. ++ newlst=.true. ++ ++ else ++ ++c calculate atomic shifts ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xdif(j)=xxx(i)-xold(j) ++ ydif(j)=yyy(i)-yold(j) ++ zdif(j)=zzz(i)-zold(j) ++ ++ enddo ++ ++c minimum image calculation ++ ++ call images(imcon,0,1,j,cell,xdif,ydif,zdif) ++ ++c maximum displacement ++ ++ rmax=(delr/2.d0)**2 ++ ++c test atomic displacements ++ ++ moved=0 ++ ++ do k=1,j ++ ++ dr=(xdif(k)**2+ydif(k)**2+zdif(k)**2) ++ if(dr.gt.rmax)moved=moved+1 ++ ++ enddo ++ ++c global sum of moved atoms ++ ++ if(mxnode.gt.1) call gisum(moved,1,ibuff) ++ ++c test for new verlet list ++ ++ newlst=(moved.ge.2) ++ ++c update stored positions ++ ++ if(newlst)then ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c deallocate arrays ++ ++ deallocate(xdif,ydif,zdif,stat=fail) ++ ++ return ++ end subroutine vertest2 ++ ++ end module nlist_builders_module +diff -urN dl_class_1.9.orig/srcmod/optimiser_module.f dl_class_1.9/srcmod/optimiser_module.f +--- dl_class_1.9.orig/srcmod/optimiser_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/optimiser_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1144 @@ ++ module optimiser_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining structural optimiser routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: ggx(:),ggy(:),ggz(:) ++ real(8), allocatable :: hhx(:),hhy(:),hhz(:) ++ real(8), allocatable :: oxx(:),oyy(:),ozz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ ++ save hhx,hhy,hhz ++ ++ contains ++ ++ subroutine optimisation_selector ++ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, ++ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) ++ ++c*********************************************************************** ++c ++c dl_poly routine for selecting and running a nominated ++c structure optimisation algorithm using energy minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith june 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loptim,stropt,lzero ++ integer idnode,mxnode,natms,imcon,nscons,ngrp,ntfree,keystr ++ integer keytol,ntcons ++ real(8) engcfg,tstep,opttol,hnorm,grad0,grad1,ff1,sgn ++ ++ save grad0,grad1,ff1,sgn,hnorm ++ ++ stropt=.false. ++ ++ if(loptim)then ++ ++c conjugate gradient structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ else if(lzero)then ++ ++c zero kelvin structure optimisation ++ ++ call zero_kelvin ++ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) ++ ++ endif ++ ++ return ++ end subroutine optimisation_selector ++ ++ subroutine zero_kelvin ++ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) ++ ++c*********************************************************************** ++c ++c dl_poly routine for zero Kelvin temperature optimization ++c if velocity.Force < 0 then velocity is set to zero in ++c preparation for integration of equations of motion ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical stropt ++ integer idnode,mxnode,imcon,natms,ngrp,ntfree,fail,i ++ integer iatm0,iatm1,igrp1,igrp2,ifre1,ifre2,jr,ig,j,id ++ real(8) dot,fsq,fcomx,fcomy,fcomz,trx,try,trz,tax,tay,taz ++ real(8) rot,ggg,opttol ++ ++ dimension rot(9) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1920) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c check for convergence of forces ++ ++ ggg=0.d0 ++ do i=iatm0,iatm1 ++ ggg=ggg+fxx(i)**2+fyy(i)**2+fzz(i)**2 ++ enddo ++ ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ++c check convergence condition for forces ++ ++ if(opttol.ge.abs(ggg)/dble(natms))then ++ ++ stropt=.true. ++ return ++ ++ endif ++ ++ if(ngrp.eq.0) then ++ ++c take component of velocity in direction of force ++ ++ do i=iatm0,iatm1 ++ ++ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ if(dot.lt.0.d0) then ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) ++ fsq=dot/max(1.d-10,fsq) ++ vxx(i)=fxx(i)*fsq ++ vyy(i)=fyy(i)*fsq ++ vzz(i)=fzz(i)*fsq ++ ++ endif ++ ++ enddo ++ ++ else ++ ++c block indices for groups and free atoms ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do j=ifre1,ifre2 ++ ++c reset atomic velocities ++ ++ i=lstfre(j) ++ ++ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ if(dot.lt.0.d0) then ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) ++ fsq=dot/max(1.d-10,fsq) ++ vxx(i)=fxx(i)*fsq ++ vyy(i)=fyy(i)*fsq ++ vzz(i)=fzz(i)*fsq ++ ++ endif ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c reset rigid body velocites (linear and angular) ++ ++ fcomx=0.d0 ++ fcomy=0.d0 ++ fcomz=0.d0 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c forces on com ++ ++ fcomx=fcomx+fxx(i) ++ fcomy=fcomy+fyy(i) ++ fcomz=fcomz+fzz(i) ++ ++ enddo ++ ++ dot=gvxx(ig)*fcomx+gvyy(ig)*fcomy+gvzz(ig)*fcomz ++ if(dot.lt.0.d0) then ++ ++ gvxx(ig)=0.d0 ++ gvyy(ig)=0.d0 ++ gvzz(ig)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fcomx**2+fcomy**2+fcomz**2) ++ fsq=dot/max(1.d-10,fsq) ++ gvxx(ig)=fcomx*fsq ++ gvyy(ig)=fcomy*fsq ++ gvzz(ig)=fcomz*fsq ++ ++ endif ++ ++ enddo ++ ++c site to com distances ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ do j=1,numgsit(lstgtp(ig)) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ig) ++ yyt(jr)=yyy(i)-gcmy(ig) ++ zzt(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ trx=0.d0 ++ try=0.d0 ++ trz=0.d0 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ trx=trx+yyt(jr)*fzz(i)-zzt(jr)*fyy(i) ++ try=try+zzt(jr)*fxx(i)-xxt(jr)*fzz(i) ++ trz=trz+xxt(jr)*fyy(i)-yyt(jr)*fxx(i) ++ ++ enddo ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++c transform to body fixed frame ++ ++ tax=(trx*rot(1)+try*rot(4)+trz*rot(7))*rotinx(id,2) ++ tay=(trx*rot(2)+try*rot(5)+trz*rot(8))*rotiny(id,2) ++ taz=(trx*rot(3)+try*rot(6)+trz*rot(9))*rotinz(id,2) ++ ++ dot=omx(ig)*tax+omy(ig)*tay+omz(ig)*taz ++ if(dot.le.0.d0) then ++ ++ omx(ig)=0.d0 ++ omy(ig)=0.d0 ++ omz(ig)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of torque ++ ++ fsq=(tax**2+tay**2+taz**2) ++ fsq=dot/max(1.d-10,fsq) ++ omx(ig)=tax*fsq ++ omy(ig)=tay*fsq ++ omz(ig)=taz*fsq ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine zero_kelvin ++ ++ subroutine strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,fnew,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for optimising molecular structures ++c based on conjugate gradient method ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2005 ++c ++c note. basis of minimisation criterion : ++c keytol=0 : absolute force ++c keytol=1 : absolute energy ++c keytol=2 : absolute displacement ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ logical stropt,newjob,engchk ++ integer keystr,keytol,idnode,mxnode,natms,i,j,k ++ integer iatm0,iatm1,fail,ngrp,ntcons,nscons,jr ++ integer imcon,ig,jf,id,ntfree,igrp1,igrp2,ifre1,ifre2 ++ real(8) hnorm,grad0,grad1,grad2,ff1,stride,tstep,step ++ real(8) ggg,fnew,fff,gam2,sgn,opttol,dischk ++ ++ dimension fail(nnn) ++ ++ save iatm0,iatm1,igrp1,igrp2,engchk,ifre1,ifre2,newjob ++ ++ data newjob/.true./,engchk/.false./ ++ ++c define initial data ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ if(newjob)then ++ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(1)) ++ endif ++ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) ++ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(3)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(4)) ++ if(ngrp.gt.0)then ++ ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(6)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ if(ngrp.eq.0) ++ x allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxatms),dyy(mxatms),dzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ ++ endif ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1925) ++ enddo ++ ++ if(newjob)then ++ ++c define atoms for this node ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ newjob=.false. ++ ++ endif ++ ++c step length for relaxation ++ ++ if(ntcons.gt.0)then ++ step=tstep**2 ++ else ++ step=10.d0*tstep**2 ++ endif ++ ++c current system configuration energy ++ ++ fff=fnew ++ ++c initialise conjugate gradient position arrays ++ ++ do i=1,natms ++ ++ oxx(i)=xxx(i) ++ oyy(i)=yyy(i) ++ ozz(i)=zzz(i) ++ ggx(i)=0.d0 ++ ggy(i)=0.d0 ++ ggz(i)=0.d0 ++ ++ enddo ++ ++c define constraint bonds ++ ++ if(ntcons.gt.0)then ++ ++c calculate constraint bond vector ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate pseudo forces for constraint bonds ++ ++ call pseudo_shake(nscons,natms,mxnode,fff) ++ ++ do i=1,natms ++ ++ ggx(i)=fxx(i)+ggx(i) ++ ggy(i)=fyy(i)+ggy(i) ++ ggz(i)=fzz(i)+ggz(i) ++ ++ enddo ++ ++ else ++ ++ do i=1,natms ++ ++ ggx(i)=fxx(i) ++ ggy(i)=fyy(i) ++ ggz(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c calculate pseudo forces for rigid bodies ++ ++ if(ngrp.gt.0)call torque_split ++ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, ++ x uxx,uyy,uzz,dtx,dty,dtz) ++ ++c determine magnitude of 3N force vector ++ ++ ggg=0.d0 ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ enddo ++ ++ else ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ggg=sqrt(ggg) ++ ++c check convergence condition for forces ++ ++ if(keytol.eq.0.and.opttol.ge.abs(ggg)/dble(natms))stropt=.true. ++ ++ if(keystr.eq.0) then ++ ++c set original search direction ++ ++ ff1=fff ++ hnorm=ggg ++ grad0=ggg ++ grad1=ggg ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ ++ else ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ ++ enddo ++ ++ enddo ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ keystr=1 ++ sgn=1.d0 ++ ++ elseif(keystr.eq.1)then ++ ++c check convergence condition for energy ++ ++ if(engchk.and.keytol.eq.1.and. ++ x opttol.ge.abs(fff-ff1))stropt=.true. ++ engchk=.false. ++ ++c line search along chosen direction ++ ++ ff1=fff ++ grad2=grad1 ++ grad1=0.d0 ++ do i=iatm0,iatm1 ++ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=grad1 ++ call gdsum(buffer(1),1,buffer(2)) ++ grad1=buffer(1) ++ endif ++ grad1=sgn*grad1/hnorm ++ ++c linear extrapolation to minimum ++ ++ stride=sgn*step ++ if(grad1.lt.0.d0)then ++ ++ keystr=2 ++ stride=sgn*step*grad1/(grad2-grad1) ++ ++ endif ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ else ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ elseif(keystr.eq.2)then ++ ++c construct conjugate search vector ++ ++ ff1=fff ++ gam2=(ggg/grad0)**2 ++ hnorm=0.d0 ++ grad0=ggg ++ grad1=0.d0 ++ do i=iatm0,iatm1 ++ ++ hhx(i)=ggx(i)+gam2*hhx(i) ++ hhy(i)=ggy(i)+gam2*hhy(i) ++ hhz(i)=ggz(i)+gam2*hhz(i) ++ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 ++ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ ++ enddo ++ if(mxnode.gt.1)then ++ ++ buffer(1)=hnorm ++ buffer(2)=grad1 ++ call gdsum(buffer(1),2,buffer(3)) ++ hnorm=buffer(1) ++ grad1=buffer(2) ++ ++ endif ++ hnorm=sqrt(hnorm) ++ grad1=grad1/hnorm ++ sgn=sign(1.d0,grad1) ++ grad1=sgn*grad1 ++ stride=sgn*step ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ else ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ engchk=.true. ++ keystr=1 ++ ++ endif ++ ++c merge coordinate arrays ++ ++ if(mxnode.gt.1)then ++ ++ if(ngrp.eq.0)then ++ ++ call merge ++ x (idnode,mxnode,natms,mxbuff,oxx,oyy,ozz,buffer) ++ ++ else ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,oxx,oyy,ozz,buffer) ++ ++ endif ++ ++ endif ++ ++c reassign atomic positions and calculate max displacement ++ ++ dischk=0.d0 ++ do i=1,natms ++ ++ dischk=max(dischk,(xxx(i)-oxx(i))**2+ ++ x (yyy(i)-oyy(i))**2+(zzz(i)-ozz(i))**2) ++ ++ xxx(i)=oxx(i) ++ yyy(i)=oyy(i) ++ zzz(i)=ozz(i) ++ ++ enddo ++ ++c check convergence condition for position ++ ++ if(keytol.eq.2.and.keystr.gt.0.and. ++ x opttol.ge.sqrt(dischk))stropt=.true. ++ ++c deallocate working arrays ++ ++ deallocate(ggx,ggy,ggz,dtx,dty,dtz,oxx,oyy,ozz,stat=fail(1)) ++ if(ngrp.gt.0)then ++ deallocate(txx,tyy,tzz,uxx,uyy,uzz,stat=fail(2)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(3)) ++ if(ngrp.eq.0)deallocate(txx,tyy,tzz,stat=fail(4)) ++ ++ endif ++ ++ return ++ end subroutine strucopt ++ ++ subroutine pseudo_shake(nscons,natms,mxnode,fff) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine treating rigid bonds as stiff harmonic bonds ++c suitable for conjugate gradient minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ real(8), parameter :: harm=1.d6 ++ ++ integer i,j,k,natms,nscons,mxnode ++ real(8) fff,engbnd,dis,rrr,gamma ++ ++c calculate energy and force ++ ++ engbnd=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dis=prmcon(listcon(k,1)) ++ rrr=sqrt(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ engbnd=engbnd+0.5d0*harm*(rrr-dis)**2 ++ gamma=harm*(rrr-dis)/rrr ++ ggx(i)=ggx(i)-dxx(k)*gamma ++ ggy(i)=ggy(i)-dyy(k)*gamma ++ ggz(i)=ggz(i)-dzz(k)*gamma ++ ++ ggx(j)=ggx(j)+dxx(k)*gamma ++ ggy(j)=ggy(j)+dyy(k)*gamma ++ ggz(j)=ggz(j)+dzz(k)*gamma ++ ++ enddo ++ ++c global sum of pseudo forces ++ ++ call global_sum_forces(natms,mxnode,ggx,ggy,ggz) ++ if(mxnode.gt.1)then ++ buffer(1)=engbnd ++ call gdsum(buffer(1),1,buffer(2)) ++ engbnd=buffer(1) ++ endif ++ fff=fff+engbnd ++ ++ return ++ end subroutine pseudo_shake ++ ++ subroutine torque_split ++ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, ++ x uxx,uyy,uzz,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for resolving torques into equivalent atomic ++c forces suitable for conjugate gradient minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,ig,id,jr,jrs,ngrp,igrp1,igrp2,idnode,imcon,mxnode ++ ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,trq,txx,tyy,tzz ++ real(8) ggx,ggy,ggz,tmp,taq,scale ++ real(8) uxx,uyy,uzz,dtx,dty,dtz ++ ++ dimension ggx(mxatms),ggy(mxatms),ggz(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ dimension dtx(mxatms),dty(mxatms),dtz(mxatms) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c calculate centres of mass of rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uxx(jr)=xxx(i)-txx(ig) ++ uyy(jr)=yyy(i)-tyy(ig) ++ uzz(jr)=zzz(i)-tzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,uxx,uyy,uzz) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*uxx(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*uyy(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*uzz(jr) ++ ++ enddo ++ ++c final centre of mass ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c calculate atom displacements from rigid body com ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c resolve rigid body forces and torques to orthogonal atomic basis ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+ggx(i) ++ fmy=fmy+ggy(i) ++ fmz=fmz+ggz(i) ++ ++ enddo ++ fmx=fmx/dble(numgsit(id)) ++ fmy=fmy/dble(numgsit(id)) ++ fmz=fmz/dble(numgsit(id)) ++ ++c calculate torque on rigid body ++ ++ jr=jrs ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*ggz(i)-dtz(jr)*ggy(i) ++ tqy=tqy+dtz(jr)*ggx(i)-dtx(jr)*ggz(i) ++ tqz=tqz+dtx(jr)*ggy(i)-dty(jr)*ggx(i) ++ ++ enddo ++ ++c magnitude of torque ++ ++ trq=sqrt(tqx**2+tqy**2+tqz**2) ++ ++c construct unit vectors for new site forces ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ txx(i)=dty(jr)*tqz-tqy*dtz(jr) ++ tyy(i)=dtz(jr)*tqx-tqz*dtx(jr) ++ tzz(i)=dtx(jr)*tqy-tqx*dty(jr) ++ tmp=sqrt(txx(i)**2+tyy(i)**2+tzz(i)**2) ++ if(tmp.gt.1.d-10)then ++ ++ txx(i)=txx(i)/tmp ++ tyy(i)=tyy(i)/tmp ++ tzz(i)=tzz(i)/tmp ++ ++ else ++ ++ txx(i)=0.d0 ++ tyy(i)=0.d0 ++ tzz(i)=0.d0 ++ ++ endif ++ ++ enddo ++ ++c construct unit vectors for site location ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uxx(i)=(tyy(i)*tqz-tqy*tzz(i))/trq ++ uyy(i)=(tzz(i)*tqx-tqz*txx(i))/trq ++ uzz(i)=(txx(i)*tqy-tqx*tyy(i))/trq ++ ++ enddo ++ ++c scale unit vectors to working lengths ++ ++ jr=jrs ++ taq=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ tmp=dtx(jr)*uxx(i)+dty(jr)*uyy(i)+dtz(jr)*uzz(i) ++ taq=taq+tmp**2 ++ txx(i)=tmp*txx(i) ++ tyy(i)=tmp*tyy(i) ++ tzz(i)=tmp*tzz(i) ++ uxx(i)=tmp*uxx(i) ++ uyy(i)=tmp*uyy(i) ++ uzz(i)=tmp*uzz(i) ++ ++ enddo ++ ++c calculate force scale factor ++ ++ scale=trq/taq ++ ++c final site forces ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ txx(i)=scale*txx(i) ++ tyy(i)=scale*tyy(i) ++ tzz(i)=scale*tzz(i) ++ ggx(i)=fmx ++ ggy(i)=fmy ++ ggz(i)=fmz ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine torque_split ++ ++ subroutine turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++c*********************************************************************** ++c ++c dl_poly routine for updating positions of atoms in a rigid body ++c during a conjugate gradient minimisation ++c ++c copyright daresbury laboratory ++c author w.smith may 2006 ++c ++c note: coz=cos(theta)-1 ++c zin=sin(theta)/theta ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,jr,jf,ig,id,igrp1,igrp2,ifre1,ifre2 ++ real(8) step,hhx,hhy,hhz,uxx,uyy,uzz,txx,tyy,tzz ++ real(8) oxx,oyy,ozz,uuu,ttt,the2,coz,zin ++ ++ dimension hhx(mxatms),hhy(mxatms),hhz(mxatms) ++ dimension oxx(mxatms),oyy(mxatms),ozz(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++c update free atom positions ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ ++c update rigid body atoms ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uuu=uxx(i)**2+uyy(i)**2+uzz(i)**2 ++ if(uuu.gt.1.d-10)then ++ ++ ttt=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ the2=(ttt/uuu)*step**2 ++ ++ coz=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- ++ x the2/132.d0)/90.d0)/56.d0)/30.d0)/12.d0)/2.d0 ++ zin=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- ++ x the2/156.d0)/110.d0)/72.d0)/42.d0)/20.d0)/6.d0+1.d0 ++ ++ oxx(i)=oxx(i)+coz*uxx(i)+step*(hhx(i)+zin*txx(i)) ++ oyy(i)=oyy(i)+coz*uyy(i)+step*(hhy(i)+zin*tyy(i)) ++ ozz(i)=ozz(i)+coz*uzz(i)+step*(hhz(i)+zin*tzz(i)) ++ ++ else ++ ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine turn_rigid_body ++ ++ end module optimiser_module +diff -urN dl_class_1.9.orig/srcmod/pair_module.f dl_class_1.9/srcmod/pair_module.f +--- dl_class_1.9.orig/srcmod/pair_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pair_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,46 @@ ++ module pair_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining atom pair data ++c copyright - daresbury laboratory ++c author - w. smith mar 2004 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer, allocatable :: ilist(:),jlist(:) ++ real(8), allocatable :: xdf(:),ydf(:),zdf(:) ++ real(8), allocatable :: rsqdf(:) ++ ++ save ilist,jlist,xdf,ydf,zdf,rsqdf ++ ++ contains ++ ++ subroutine alloc_pair_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ allocate (ilist(mxxdf),stat=fail(1)) ++ allocate (jlist(mxxdf),stat=fail(2)) ++ allocate (xdf(mxxdf),stat=fail(3)) ++ allocate (ydf(mxxdf),stat=fail(4)) ++ allocate (zdf(mxxdf),stat=fail(5)) ++ allocate (rsqdf(mxxdf),stat=fail(6)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1940) ++ enddo ++ ++ end subroutine alloc_pair_arrays ++ ++ end module pair_module +diff -urN dl_class_1.9.orig/srcmod/parse_module.f dl_class_1.9/srcmod/parse_module.f +--- dl_class_1.9.orig/srcmod/parse_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/parse_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,585 @@ ++ module parse_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining parsing arrays ++c copyright - daresbury laboratory ++c author - w. smith jan 2004 ++c ++c*********************************************************************** ++ ++ integer, parameter :: lenrec=150 ++ character*1 record(lenrec) ++ save record ++ ++ contains ++ ++ subroutine getrec(safe,idnode,ifile) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to read a character string on one node ++c and broadcast it to all other nodes ++c ++c copyright daresbury laboratory 1994 ++c author w.smith december 1994 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ ++ character*150 line ++ integer export,import,idnode,ifile,i ++ dimension export(lenrec),import(lenrec) ++ ++ safe=.true. ++ ++ call gsync() ++ ++ if(idnode.eq.0)then ++ ++ read(ifile,'(a150)',end=100)line ++ ++ do i=1,lenrec ++ ++ record(i)=line(i:i) ++ export(i)=ichar(line(i:i)) ++ ++ enddo ++ ++ call gstate(safe) ++ call gisum(export,lenrec,import) ++ ++ return ++ ++ 100 safe=.false. ++ ++ call gstate(safe) ++ ++ else ++ ++ call gstate(safe) ++ if(.not.safe)return ++ ++ do i=1,lenrec ++ ++ export(i)=0 ++ ++ enddo ++ ++ call gisum(export,lenrec,import) ++ ++ do i=1,lenrec ++ ++ record(i)=char(export(i)) ++ ++ enddo ++ ++ return ++ ++ endif ++ ++ end subroutine getrec ++ ++ integer function intstr(word,len,lst) ++ ++c*********************************************************************** ++c ++c dl_poly function for extracting integers from a ++c character string ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith may 1994. ++c ++c parameters: ++c word - input character string ++c len - working length of character string ++c lst - location of space character at end of ++c integer string ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical flag,count,final ++ character*1 n,word,ksn ++ integer lst,len,j,isn ++ ++ dimension n(0:9),word(len) ++ data n/'0','1','2','3','4','5','6','7','8','9'/ ++ ++ isn=1 ++ lst=0 ++ ksn='+' ++ intstr=0 ++ flag=.false. ++ final=.false. ++ count=.false. ++ ++ do while(lst.lt.len.and.(.not.final)) ++ ++ lst=lst+1 ++ flag=.false. ++ ++ do j=0,9 ++ ++ if(n(j).eq.word(lst))then ++ ++ intstr=10*intstr+j ++ count=.true. ++ flag=.true. ++ ++ endif ++ ++ enddo ++ ++ if(count.and.(.not.flag))final=.true. ++ if(flag.and.ksn.eq.'-')isn=-1 ++ ksn=word(lst) ++ ++ enddo ++ ++ intstr=isn*intstr ++ ++ do j=lst,len ++ word(j-lst+1)=word(j) ++ enddo ++ do j=len-lst+2,len ++ word(j)=' ' ++ enddo ++ ++ return ++ end function intstr ++ ++ real(8) function dblstr(word,len,lst) ++ ++c*********************************************************************** ++c ++c dl_poly function for extracting double precisions from a ++c character string. ++c modified from dl_poly function intstr ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith may 1994. ++c modified - t. forester april 1994 ++c ++c parameters: ++c word - input character string ++c len - working length of character string ++c lst - location of space character at end of ++c double precision string ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 n,word,ksn,dot,d,e ++ logical flag,ldot,start,final ++ integer len,lst,iexp,idum,i,j,fail ++ real(8) sn,ten,one ++ dimension n(0:9),word(len) ++ character*1, allocatable :: work(:) ++ ++ data n/'0','1','2','3','4','5','6','7','8','9'/ ++ data dot/'.'/ ++ data d/'d'/ ++ data e/'e'/ ++ ++ allocate(work(len),stat=fail) ++ ++ lst=0 ++ sn=1.d0 ++ ksn='+' ++ ten=10.d0 ++ one=1.d0 ++ ++ dblstr=0.d0 ++ iexp=0 ++ idum=0 ++ start=.false. ++ ldot=.false. ++ final=.false. ++ ++ do while(lst.lt.len.and.(.not.final)) ++ ++ lst=lst+1 ++ flag=.false. ++ ++ do j=0,9 ++ ++ if(n(j).eq.word(lst))then ++ ++ dblstr=ten*dblstr+one*dble(j) ++ flag=.true. ++ start=.true. ++ ++ endif ++ ++ enddo ++ ++ if(dot.eq.word(lst))then ++ ++ flag=.true. ++ ten=1.d0 ++ ldot=.true. ++ start=.true. ++ ++ endif ++ ++ if(flag.and.ksn.eq.'-') sn=-1.d0 ++ if(ldot) one=one/10.d0 ++ ksn=word(lst) ++ if(ksn.eq."D")ksn="d" ++ if(ksn.eq."E")ksn="e" ++ ++ if(start)then ++ ++ if(d.eq.ksn.or.e.eq.ksn)then ++ ++ do i=1,len-lst ++ work(i)=word(i+lst) ++ enddo ++ iexp=intstr(work,len-lst,idum) ++ final=.true. ++ ++ endif ++ ++ if(.not.flag)final=.true. ++ ++ endif ++ ++ enddo ++ ++ dblstr=sn*dblstr*(10.d0**iexp) ++ lst=lst+idum ++ ++ do j=lst,len ++ word(j-lst+1)=word(j) ++ enddo ++ do j=len-lst+2,len ++ word(j)=' ' ++ enddo ++ ++ deallocate(work,stat=idum) ++ ++ return ++ end function dblstr ++ ++ subroutine strip(string,imax) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to strip blanks from start of a string ++c maximum length is 255 characters ++c ++c copyright daresbury laboratory 1993 ++c author t.forester july 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,imax,j ++ character*1 string(imax) ++ ++ do i=1,imax ++ ++ if(string(1).eq.' ')then ++ ++ do j=1,imax-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(imax)=' ' ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine strip ++ ++ subroutine lowcase(string,length) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to lowercase a string of up to 255 characters. ++c Transportable to non-ASCII machines ++c ++c copyright daresbury laboratory 1993 ++c author t. forester july 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 string(*) ++ character*1 letter ++ integer i,length ++ ++ do i=1,min(255,length) ++ ++ letter=string(i) ++ ++ if(letter.eq.'A')then ++ letter='a' ++ else if(letter.eq.'B')then ++ letter='b' ++ else if(letter.eq.'C')then ++ letter='c' ++ else if(letter.eq.'D')then ++ letter='d' ++ else if(letter.eq.'E')then ++ letter='e' ++ else if(letter.eq.'F')then ++ letter='f' ++ else if(letter.eq.'G')then ++ letter='g' ++ else if(letter.eq.'H')then ++ letter='h' ++ else if(letter.eq.'I')then ++ letter='i' ++ else if(letter.eq.'J')then ++ letter='j' ++ else if(letter.eq.'K')then ++ letter='k' ++ else if(letter.eq.'L')then ++ letter='l' ++ else if(letter.eq.'M')then ++ letter='m' ++ else if(letter.eq.'N')then ++ letter='n' ++ else if(letter.eq.'O')then ++ letter='o' ++ else if(letter.eq.'P')then ++ letter='p' ++ else if(letter.eq.'Q')then ++ letter='q' ++ else if(letter.eq.'R')then ++ letter='r' ++ else if(letter.eq.'S')then ++ letter='s' ++ else if(letter.eq.'T')then ++ letter='t' ++ else if(letter.eq.'U')then ++ letter='u' ++ else if(letter.eq.'V')then ++ letter='v' ++ else if(letter.eq.'W')then ++ letter='w' ++ else if(letter.eq.'X')then ++ letter='x' ++ else if(letter.eq.'Y')then ++ letter='y' ++ else if(letter.eq.'Z')then ++ letter='z' ++ endif ++ ++ string(i)=letter ++ ++ enddo ++ ++ return ++ end subroutine lowcase ++ ++ subroutine copystring(oldstr,newstr,length) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to copy one string into another ++c ++c copyright daresbury laboratory ++c author w. smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 newstr(*),oldstr(*) ++ integer i,length ++ ++ do i=1,length ++ ++ newstr(i)=oldstr(i) ++ ++ enddo ++ ++ return ++ end subroutine copystring ++ ++ logical function findstring(seek,string,here) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to find an explicit string in an input record ++c note: variable `seek' is a character string while variable ++c `string' is a character*1 array i.e. code is application specific ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,n,m,here ++ character*(*) seek ++ character*1 string(lenrec) ++ ++ m=lenrec ++ n=len(seek) ++ findstring=.false. ++ ++ here=0 ++ do while(here.le.m-n.and.(.not.findstring)) ++ ++ findstring=.true. ++ ++ do i=1,n ++ if(seek(i:i).ne.string(here+i))findstring=.false. ++ enddo ++ ++ here=here+1 ++ ++ enddo ++ ++ return ++ end function findstring ++ ++ subroutine striptext(string,length,nwords) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to strip leading text from a data record ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical final ++ integer length,nwords,i,j,k ++ character*1 string(length) ++ ++ do k=1,nwords ++ ++ i=0 ++ final=.false. ++ ++ do while(.not.final.and.i.lt.length) ++ ++ i=i+1 ++ ++ if(string(1).eq.' ')then ++ ++ final=.true. ++ ++ else ++ ++ do j=1,length-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(length)=' ' ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine striptext ++ ++ subroutine getword(word,string,len1,len2) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to fetch an 8 character word from a string ++c while ignoring leading blanks ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical final ++ character*8 word ++ integer len1,len2,i,j,k ++ character*1 wrdseq(len1),string(len2) ++ ++ do i=1,len1 ++ wrdseq(i)=' ' ++ enddo ++ ++ i=0 ++ k=0 ++ final=.false. ++ ++ do while(.not.final.and.i.lt.len2) ++ ++ i=i+1 ++ ++ if(string(1).eq.' ')then ++ ++ if(k.gt.0)final=.true. ++ ++ else ++ ++ k=k+1 ++ wrdseq(k)=string(1) ++ if(k.eq.len1)final=.true. ++ ++ endif ++ ++ do j=1,len2-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(len2)=' ' ++ ++ enddo ++ ++ word=mkwd8(wrdseq) ++ ++ return ++ end subroutine getword ++ ++ character*8 function mkwd8(string) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to make an 8 character word from a string ++c ++c copyright daresbury laboratory ++c author w.smith nov 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i ++ character*1 string(*) ++ ++ do i=1,8 ++ mkwd8(i:i)=string(i) ++ enddo ++ ++ return ++ end function mkwd8 ++ ++ end module parse_module ++ ++ +diff -urN dl_class_1.9.orig/srcmod/pass_tools.f dl_class_1.9/srcmod/pass_tools.f +--- dl_class_1.9.orig/srcmod/pass_tools.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pass_tools.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,318 @@ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about bond ++c constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection (i.e. this version may be intel specific) ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c MPI version t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical safe,lshmov ++ integer idnode,mxnode,natms,nscons,lashap,lishap,listme,ierr ++ integer listin,listot,listcon,lstfrz,i,j,k,jdnode,idum ++ ++ dimension listme(mxatms),listin(mxatms),listot(mxatms) ++ dimension lishap(mxlshp),lashap(mxproc),listcon(mxcons,3) ++ dimension lstfrz(mxatms) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ ++ safe=.true. ++ ++ do i=1,natms ++ ++ listme(i)=0 ++ ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ j=0 ++ call gsync() ++ do k=1,mxnode-1 ++ ++ jdnode=mod(idnode+mxnode-k,mxnode) ++ ++ call MPI_IRECV(listin,natms,MPI_INTEGER, ++ x MPI_ANY_SOURCE,Passcon_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(listme,natms,MPI_INTEGER,jdnode, ++ x Passcon_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++ do i=1,natms ++ ++ if((listme(i).gt.0).and.(listin(i).gt.0.and. ++ x lstfrz(i).eq.0))then ++ ++ j=j+1 ++ if(j.gt.mxlshp)then ++ ++ safe=.false. ++ ++ else ++ ++ lishap(j)=i ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ lashap(k)=j ++ ++ enddo ++ ++ endif ++ ++c check for global error condition ++ ++ if(mxnode.gt.1) call gstate(safe) ++ ++ if(.not.safe)call error(idnode,103) ++ ++ if(mxnode.gt.1) then ++ call gisum(j,1,idum) ++ if(idnode.eq.0) write(nrite,'(/,a,14x,i10)') ++ x ' shared atoms from passcon',j/2 ++ lshmov = (j.gt.0) ++ endif ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ ++ listot(i)=1 ++ ++ else ++ ++ listot(i)=0 ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gisum(listot,natms,listin) ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about PMF ++c constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection (i.e. this version may be intel specific) ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester august 1995. ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf ++ integer npmf,i,j,k ++ ++ dimension listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ dimension lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ ++ listpm(i)=0 ++ ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++c ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ ++ lstpmt(i)=1 ++ ++ else ++ ++ lstpmt(i)=0 ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gisum(lstpmt,natms,listin) ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about rigid body ++c atoms involved in bond constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester december 1995. ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical lcnb,safe ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,listin ++ integer listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp ++ integer numgsit,igrp1,igrp2,i,jr,igrp,itmols,imols,lgrp,id ++ integer jj,ik,j,k ++ ++ dimension listin(mxatms) ++ dimension listcon(mxcons,3),lstcsit(2*mxcons) ++ dimension lstout(mxatms),lstrgd(mxgatm) ++ dimension nummols(mxtmls),numgrp(mxtmls),numgsit(mxungp) ++ dimension lstgtp(mxgrp) ++ ++ integer status(MPI_STATUS_SIZE) ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ if(mxnode.gt.1) call gisum(listin,natms,lstout) ++ ++ safe = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ safe = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ safe = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ if(mxnode.gt.1) call gstate(safe) ++ lcnb = (.not.safe) ++ ++ return ++ end ++ ++ ++ +diff -urN dl_class_1.9.orig/srcmod/pmf_module.f dl_class_1.9/srcmod/pmf_module.f +--- dl_class_1.9.orig/srcmod/pmf_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pmf_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1911 @@ ++ module pmf_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining potential of mean force arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use ensemble_tools_module ++ use lf_motion_module ++ use lf_rotation1_module ++ use parse_module ++ use property_module ++ use setup_module ++ use shake_module ++ use vv_motion_module ++ use utility_module ++ ++ implicit none ++ ++ integer npmf ++ real(8) prmpmf,pmfnrm ++ real(8), allocatable :: pmfwght(:) ++ integer, allocatable :: numpmf(:) ++ integer, allocatable :: indpmf(:) ++ integer, allocatable :: listpm(:) ++ integer, allocatable :: lstpmt(:) ++ integer, allocatable :: lstpmf(:,:) ++ ++ dimension npmf(2),pmfnrm(2) ++ ++ save npmf,prmpmf,pmfnrm,pmfwght,numpmf,indpmf,listpm ++ save lstpmt,lstpmf ++ ++ contains ++ ++ subroutine alloc_pmf_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for allocating pmf arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,idnode,fail ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (pmfwght(mxspmf),stat=fail(1)) ++ allocate (indpmf(mxspmf),stat=fail(2)) ++ allocate (numpmf(mxtmls),stat=fail(3)) ++ allocate (listpm(mxpmf),stat=fail(4)) ++ allocate (lstpmt(mxpmf),stat=fail(5)) ++ allocate (lstpmf(mxspmf,mspmf),stat=fail(6)) ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1210) ++ enddo ++ ++ do i=1,mxtmls ++ numpmf(i)=0 ++ enddo ++ ++ end subroutine alloc_pmf_arrays ++ ++ subroutine define_pmf(safe,idnode,itmols,nspmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining pmf units ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,itmols,nspmf,ipmf,jpmf,iatm1,idum ++ real(8) wght ++ ++ numpmf(itmols)=1 ++ prmpmf=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,' PMF bondlength :', ++ x 5x,f20.10)") prmpmf ++ write(nrite, ++ x "(/,/,12x,'unit, site and weight details:' ++ x ,/,/,16x,'unit',6x,'index',5x,'weight')") ++ endif ++ ++ do ipmf=1,2 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ call strip(record,lenrec) ++ call lowcase(record,lenrec) ++ if(.not.findstring('pmf unit',record,idum)) ++ x call error(idnode,462) ++ npmf(ipmf)=intstr(record,lenrec,idum) ++ ++ do jpmf=1,npmf(ipmf) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ iatm1=intstr(record,lenrec,idum) ++ wght=dblstr(record,lenrec,idum) ++ if(wght.le.1.d-10) wght=1.d0 ++ ++ nspmf=nspmf+1 ++ ++ if(nspmf.gt.mxspmf) call error(idnode,460) ++ ++ indpmf(nspmf)=iatm1 ++ pmfwght(nspmf)=wght ++ ++ if(idnode.eq.0) then ++ ++ if(jpmf.eq.1) then ++ write(nrite,"(16x,i5,i10,f12.6)") ++ x ipmf,indpmf(nspmf),pmfwght(nspmf) ++ else ++ write(nrite,"(21x,i10,f12.6)") ++ x indpmf(nspmf),pmfwght(nspmf) ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine define_pmf ++ ++ subroutine pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxp,dyp,dzp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing vectors for PMF calculations ++c ++c copyright - daresbury laboratory ++c adapted by w.smith october 2005 ++c original by t.forester aug 1995 ++c ++c set variable img true for PBC shifted vectors ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical img ++ integer nspmf,imcon,k,jj,kk,ipmf,i,i1,i2 ++ ++ real(8) xxx(mxatms),yyy(mxatms),zzz(mxatms) ++ real(8) xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ real(8) xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ real(8) dxp(mspmf),dyp(mspmf),dzp(mspmf),cell(9) ++ ++ do k=1,nspmf ++ ++ jj=0 ++ kk=0 ++ ++c calculate difference vectors ++ ++ do ipmf=1,2 ++ ++ i1=lstpmf(jj+1,k) ++ ++c position difference vectors ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i2=lstpmf(jj,k) ++ xxt(i)=xxx(i2)-xxx(i1) ++ yyt(i)=yyy(i2)-yyy(i1) ++ zzt(i)=zzz(i2)-zzz(i1) ++ ++ enddo ++ ++c correct for periodic images - assume less than half box length ++ ++ if(img)call images(imcon,0,1,npmf(ipmf),cell,xxt,yyt,zzt) ++ ++c create weighted coordinate ++ ++ xxa(ipmf,k)=0.d0 ++ yya(ipmf,k)=0.d0 ++ zza(ipmf,k)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ kk=kk+1 ++ xxa(ipmf,k)=xxa(ipmf,k)+pmfwght(kk)*xxt(i) ++ yya(ipmf,k)=yya(ipmf,k)+pmfwght(kk)*yyt(i) ++ zza(ipmf,k)=zza(ipmf,k)+pmfwght(kk)*zzt(i) ++ ++ enddo ++ ++ xxa(ipmf,k)=xxa(ipmf,k)/pmfnrm(ipmf)+xxx(i1) ++ yya(ipmf,k)=yya(ipmf,k)/pmfnrm(ipmf)+yyy(i1) ++ zza(ipmf,k)=zza(ipmf,k)/pmfnrm(ipmf)+zzz(i1) ++ ++ enddo ++ ++ dxp(k)=xxa(2,k)-xxa(1,k) ++ dyp(k)=yya(2,k)-yya(1,k) ++ dzp(k)=zza(2,k)-zza(1,k) ++ ++ enddo ++ ++c periodic boundary condition for pmf vectors ++ ++ if(img)call images(imcon,0,1,nspmf,cell,dxp,dyp,dzp) ++ ++ return ++ end subroutine pmf_vectors ++ ++ subroutine pmflf ++ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE ++c and PMF_SHAKE - for potential of mean force calculations. ++c ++c parallel replicated data version : block data ++c adapted from dl_poly routine nve_1.f ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester aug 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ logical safe,lshmov,safep,unsafe,img ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf ++ integer fail,iatm0,iatm1,i,j,k,jj,ii,ipmf,icyc ++ real(8) engke,tolnce,tstep,vircon,virpmf,strpmf,summas ++ real(8) rstep,viracc,strkin,strcon ++ ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ dimension strpmf(9),strcon(9),strkin(9),summas(2),fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) ++ allocate(xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(3)) ++ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(4)) ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(5)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(8)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1220) ++ enddo ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c store initial values of position ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate mass terms for PMF units ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ ii=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(ii) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxp,dyp,dzp) ++ ++c move atoms by leapfrog algorithm ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c RDSHAKE procedure ++ ++ if(ntcons.gt.0.or.ntpmf.gt.0) then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c apply bond constraints ++ ++ viracc=0.d0 ++ if(ntcons.gt.0)call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c apply pmf constraints ++ ++ viracc=0.d0 ++ if(ntpmf.gt.0)call pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) ++ ++ enddo ++ ++ safep=.not.unsafe ++ ++c calculate velocity correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++c update corrected velocity ++ ++ j=j+1 ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxx(i))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyy(i))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzz(i))*weight(i)*rstep ++ ++ enddo ++ ++ endif ++ ++c calculate velocity at full time step ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=0.5d0*(vxx(i)+uxx(i)) ++ vyy(i)=0.5d0*(vyy(i)+uyy(i)) ++ vzz(i)=0.5d0*(vzz(i)+uzz(i)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c total contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(uxx,uyy,uzz,dxp,dyp,dzp,stat=fail(2)) ++ deallocate(txx,tyy,tzz,xxo,yyo,zzo,stat=fail(3)) ++ deallocate(dxt,dyt,dzt,xxa,yya,zza,stat=fail(4)) ++ ++ return ++ end subroutine pmflf ++ ++ subroutine pmflfq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon,safep,nspmf,ntpmf,virpmf) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=14 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob,safep,unsafe,img ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre ++ integer jg,ig,k,id,jr,nspmf,ntpmf,jj,ii,ipmf,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc,virpmf ++ real(8) trx,try,trz,delx,dely,delz,engfke,viracc ++ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz ++ real(8) strpmf,strcon,summas ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ ++ dimension strkin(9),strgrp(9),rot(9),fail(nnn) ++ ++ dimension strpmf(9),strcon(9),summas(2) ++ ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) ++ ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(13)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(14)) ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1500) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate mass terms for PMF units ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ ii=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(ii) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxp,dyp,dzp) ++ ++c move atoms by leapfrog algorithm ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0.or.ntpmf.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c apply bond constraints ++ ++ viracc=0.d0 ++ if(ntcons.gt.0)call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c apply pmf constraints ++ ++ viracc=0.d0 ++ if(ntpmf.gt.0)call pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) ++ ++ enddo ++ ++ safep=.not.unsafe ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational rigid body motion ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) ++ ++c estimate velocity at full time step ++ ++ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c calculate ridid body kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore rigid body half timestep velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c store current angular velocity ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+delx*pt5 ++ opy(jg)=omy(ig)+dely*pt5 ++ opz(jg)=omz(ig)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omx(ig)+delx ++ uyy(ig)=omy(ig)+dely ++ uzz(ig)=omz(ig)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omx(ig)+delx*1.5d0 ++ oqy(jg)=omy(ig)+dely*1.5d0 ++ oqz(jg)=omz(ig)+delz*1.5d0 ++ ++c angular velocity at timestep n ++ ++ omx(ig)=omx(ig)+pt5*delx ++ omy(ig)=omy(ig)+pt5*dely ++ omz(ig)=omz(ig)+pt5*delz ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i)+ ++ x strpmf(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies - relative to c.o.m ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) ++ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) ++ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) ++ deallocate(dxp,dyp,dzp,xxa,yya,zza,stat=fail(7)) ++ ++ return ++ end subroutine pmflfq_1 ++ ++ subroutine pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x virpmf,xxt,yyt,zzt,strpmf,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accummulates constraint force to maintain reaction coordinate ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory 1995 ++c author t.forester august 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,fail,icyc,k,jj ++ integer ii,i,ipmf ++ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas ++ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,strs1,strs2,strs3,strs5 ++ real(8) strs6,strs9,tstep2,dis,omega2,eps,gamma,gammi ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ dimension amt(2),strpmf(9),summas(2) ++ ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:),dsq(:) ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),dsq(mspmf), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1230) ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c accumulators for strpmf tensor ++ ++ virpmf=0.d0 ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safep=.false. ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c calculate bond constraint length ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxt,dyt,dzt) ++ ++ amt(1)= tstep2/summas(1) ++ amt(2)=-tstep2/summas(2) ++ ++ eps=0.d0 ++ dis=prmpmf ++ omega2=dis*dis ++ ++ do k=1,nspmf ++ ++ dsq(k)=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ eps=max(eps,abs((omega2-dsq(k))/(2.0d0*dis))) ++ ++ enddo ++ ++c check convergence condition ++ ++ safep=(eps.le.tolnce) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ gamma=(omega2-dsq(k))/(-2.d0*(amt(2)-amt(1))* ++ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) ++ ++c accumulate pmf virial ++ ++ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) ++ ++ strs1=strs1-gamma*dxp(k)*dxp(k) ++ strs2=strs2-gamma*dxp(k)*dyp(k) ++ strs3=strs3-gamma*dxp(k)*dzp(k) ++ strs5=strs5-gamma*dyp(k)*dyp(k) ++ strs6=strs6-gamma*dyp(k)*dzp(k) ++ strs9=strs9-gamma*dzp(k)*dzp(k) ++ ++c improve approximate atomic positions ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-gamma*amt(ipmf) ++ ++ do ii=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ xxx(i)=xxx(i)+dxp(k)*gammi ++ yyy(i)=yyy(i)+dyp(k)*gammi ++ zzz(i)=zzz(i)+dzp(k)*gammi ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c complete strpmf tensor ++ ++ strpmf(1)=strs1 ++ strpmf(2)=strs2 ++ strpmf(3)=strs3 ++ strpmf(4)=strs2 ++ strpmf(5)=strs5 ++ strpmf(6)=strs6 ++ strpmf(7)=strs3 ++ strpmf(8)=strs6 ++ strpmf(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=virpmf ++ call gdsum(buffer(1),1,buffer(2)) ++ virpmf=buffer(1) ++ call gdsum(strpmf,9,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxt,dyt,dzt,dsq,stat=fail) ++ ++ return ++ end subroutine pmf_shake ++ ++ subroutine pmfvv ++ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Velocity Verlet With PMF_RATTLE ++c for potential of mean force calculations. ++c ++c copyright - daresbury laboratory ++c adapted by w.smith october 2005 ++c original by t.forester aug 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical safe,lshmov,safep,unsafe,newjob,img ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf ++ integer isw,mxtop ++ integer fail,iatm0,iatm1,i,j,k,jj,i1,ipmf,icyc ++ real(8) engke,tolnce,tstep,vircon,virpmf,strcon,summas ++ real(8) viracc,strpmf,strkin ++ ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ ++ dimension strcon(9),strpmf(9),strkin(9),summas(2),fail(nnn) ++ save summas,newjob,strpmf ++ data newjob/.true./ ++ ++c set default safety flags ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ if(safe.and.safep)return ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ mxtop=max(mxcons,mspmf) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(3)) ++ allocate(dxt(mxtop),dyt(mxtop),dzt(mxtop),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(6)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1220) ++ enddo ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate mass terms for PMF units ++ ++ if(newjob)then ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i1=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(i1) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxp,dyp,dzp) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ if(isw.eq.1)then ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ if(isw.eq.1)then ++ ++c apply bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++ endif ++ ++c apply pmf constraints ++ ++ if(ntpmf.gt.0)then ++ ++ safep=.false. ++ call pmf_rattle_r ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, ++ x dxt,dyt,dzt,strcon) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ endif ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).le.1.d-10)) ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c apply rattle velocity constraints ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ ++ endif ++ ++c apply pmf velocity constraints ++ ++ if(ntpmf.gt.0)then ++ ++ safep=.false. ++ call pmf_rattle_v ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x summas,dxp,dyp,dzp,xxt,yyt,zzt,xxa,yya,zza,dxt,dyt,dzt) ++ ++ endif ++ ++ unsafe=(.not.(safe.and.safep)) ++ ++ endif ++ ++ enddo ++ ++ safep=(.not.unsafe) ++ ++c periodic boundary condition ++ ++ if(isw.eq.1)call images ++ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(isw.eq.2)then ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c total contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++ endif ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(isw.eq.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(dxp,dyp,dzp,dxt,dyt,dzt,stat=fail(2)) ++ deallocate(txx,tyy,tzz,xxa,yya,zza,stat=fail(3)) ++ ++ return ++ end subroutine pmfvv ++ ++ subroutine pmf_rattle_r ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x virpmf,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, ++ x dxt,dyt,dzt,strpmf) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accumulates constraint force to maintain reaction coordinate. ++c velocity verlet adaptation ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory ++c adapted by w.smith october 2005 ++c original t.forester august 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj ++ integer i1,i,ipmf ++ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas,gamma ++ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,tstep2,dis,omega2,eps,gammi ++ real(8) strs1,strs2,strs3,strs5,strs6,strs9,dxt,dyt,dzt,dsq ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ dimension amt(2),strpmf(9),summas(2) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c pmf virial ++ ++ virpmf=0.d0 ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c array bound check ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ img=.true. ++ safep=.false. ++ dis=prmpmf ++ omega2=dis*dis ++ amt(1)= tstep2/summas(1) ++ amt(2)=-tstep2/summas(2) ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxt,dyt,dzt) ++ ++c check convergence ++ ++ eps=0.d0 ++ ++ do k=1,nspmf ++ ++ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ eps=max(eps,abs((omega2-dsq)/dis)) ++ ++ enddo ++ ++ eps=eps*0.5d0 ++ ++c verification of convergence ++ ++ safep=(eps.lt.tolnce) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ gamma=(omega2-dsq)/(-(amt(2)-amt(1))* ++ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) ++ ++c accumulate pmf virial ++ ++ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) ++ ++ strs1=strs1-gamma*dxp(k)*dxp(k) ++ strs2=strs2-gamma*dxp(k)*dyp(k) ++ strs3=strs3-gamma*dxp(k)*dzp(k) ++ strs5=strs5-gamma*dyp(k)*dyp(k) ++ strs6=strs6-gamma*dyp(k)*dzp(k) ++ strs9=strs9-gamma*dzp(k)*dzp(k) ++ ++c improve approximate atomic positions and velocities ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-0.5d0*gamma*amt(ipmf) ++ ++ do i1=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ xxx(i)=xxx(i)+dxp(k)*gammi ++ yyy(i)=yyy(i)+dyp(k)*gammi ++ zzz(i)=zzz(i)+dzp(k)*gammi ++ vxx(i)=vxx(i)+dxp(k)*gammi/tstep ++ vyy(i)=vyy(i)+dyp(k)*gammi/tstep ++ vzz(i)=vzz(i)+dzp(k)*gammi/tstep ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ strpmf(1)=strs1 ++ strpmf(2)=strs2 ++ strpmf(3)=strs3 ++ strpmf(4)=strs2 ++ strpmf(5)=strs5 ++ strpmf(6)=strs6 ++ strpmf(7)=strs3 ++ strpmf(8)=strs6 ++ strpmf(9)=strs9 ++ ++c splice coordinate and velocity arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=virpmf ++ call gdsum(buffer(1),1,buffer(2)) ++ virpmf=buffer(1) ++ call gdsum(strpmf,9,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine pmf_rattle_r ++ ++ subroutine pmf_rattle_v ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce,summas, ++ x dxp,dyp,dzp,vxt,vyt,vzt,vxa,vya,vza,vxp,vyp,vzp) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accumulates velocity correction for second constraint condition ++c velocity verlet adaptation ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory ++c author w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj ++ integer i1,i,ipmf ++ real(8) tstep,tolnce,summas,gamma,vxt,vyt,vzt,vxa,vya,vza ++ real(8) vxp,vyp,vzp,dxp,dyp,dzp,amt,omega,eps,gammi,tolvel ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension vxp(mspmf),vyp(mspmf),vzp(mspmf) ++ dimension vxt(mxatms),vyt(mxatms),vzt(mxatms) ++ dimension vxa(2,mspmf),vya(2,mspmf),vza(2,mspmf) ++ dimension amt(2),summas(2) ++ ++c constraint convergence tolerance ++ ++ tolvel=tolnce/tstep ++ ++c array bound check ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ img=.false. ++ safep=.false. ++ amt(1)= 0.5d0*tstep/summas(1) ++ amt(2)=-0.5d0*tstep/summas(2) ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,vxx,vyy,vzz,vxt,vyt,vzt,vxa,vya,vza, ++ x vxp,vyp,vzp) ++ ++c check convergence ++ ++ eps=0.d0 ++ do k=1,nspmf ++ ++ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) ++ eps=max(eps,abs(omega)/prmpmf) ++ ++ enddo ++ ++c verification of convergence ++ ++ safep=(eps.lt.tolvel) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) ++ gamma=omega/((amt(2)-amt(1))* ++ x (dxp(k)**2+dyp(k)**2+dzp(k)**2)) ++ ++c improve approximate atomic velocities ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-gamma*amt(ipmf) ++ ++ do i1=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ vxx(i)=vxx(i)+dxp(k)*gammi ++ vyy(i)=vyy(i)+dyp(k)*gammi ++ vzz(i)=vzz(i)+dzp(k)*gammi ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1)call splice ++ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) ++ ++ return ++ end subroutine pmf_rattle_v ++ ++ end module pmf_module +diff -urN dl_class_1.9.orig/srcmod/property_module.f dl_class_1.9/srcmod/property_module.f +--- dl_class_1.9.orig/srcmod/property_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/property_module.f 2014-02-27 13:49:34.000000000 +0100 +@@ -0,0 +1,1318 @@ ++ module property_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation property data ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use setup_module ++ use site_module ++ use tether_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ real(8), allocatable :: rdf(:,:),zdens(:,:) ++ real(8), allocatable :: stpval(:),sumval(:) ++ real(8), allocatable :: ssqval(:),zumval(:) ++ real(8), allocatable :: ravval(:),stkval(:,:) ++ real(8), allocatable :: xx0(:),yy0(:),zz0(:) ++ real(8), allocatable :: amsd(:) ++ ++ save rdf,zdens,stpval,sumval,ssqval,xx0,yy0,zz0 ++ save zumval,ravval,stkval ++ ++ contains ++ ++ subroutine alloc_prp_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (zdens(mxzdn,mxatyp),stat=fail(1)) ++ allocate (rdf(mxrdf,mxxtyp),amsd(mxatyp),stat=fail(2)) ++ allocate (stpval(mxnstk),sumval(mxnstk),stat=fail(3)) ++ allocate (ssqval(mxnstk),zumval(mxnstk),stat=fail(4)) ++ allocate (ravval(mxnstk),stkval(mxstak,mxnstk),stat=fail(5)) ++ allocate (xx0(mxatms),yy0(mxatms),zz0(mxatms),stat=fail(6)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1740) ++ enddo ++ ++ end subroutine alloc_prp_arrays ++ ++ subroutine result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit,conint, ++ x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing simulation summary and ++c saving the restart data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith dec 1992. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 hms,dec ++ logical lgofr,lpgr,lzden,check,ltad,lbpd,goprint ++ ++ integer idnode,imcon,keyens,mxnode,natms,nzden,nstep,ntpatm ++ integer levcfg,numacc,numrdf,keybpd,i,iadd,io,j ++ real(8) chip,chit,conint,rcut,tstep,volm,timelp,avvol,zlen,dc ++ real(8) engcfg,virtot,vircom,prntim,simtim,tboost,chit_shl ++ ++c save restart data ++ ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++c for TAD and BPD system averages not generally meaningful ++c useful only for BPD in configurational sampling mode ++ ++ goprint=.not.(ltad.or.(lbpd.and.keybpd.gt.1)) ++ ++ if(goprint)then ++ ++c calculate final fluctuations ++ ++ do i=1,mxnstk ++ ssqval(i)=sqrt(max(0.d0,ssqval(i))) ++ enddo ++ ++c final averages and fluctuations ++ ++ call timchk(0,timelp) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'run terminated after',i8,' steps.', ++ x ' final averages calculated over',i8,' steps.',/,/)") ++ x nstep,numacc ++ write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x,'eng_cfg', ++ x 5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd',5x,'eng_ang',5x, ++ x 'eng_dih',5x,'eng_tet',/,1x,'time ',5x,' eng_pv',4x, ++ x 'temp_rot',5x,'vir_cfg',5x,'vir_vdw',5x,'vir_cou',5x, ++ x 'vir_bnd',5x,'vir_ang',5x,'vir_con',5x,'vir_tet',/, ++ x 1x,'cpu time',6x,'volume',4x,'temp_shl',5x,'eng_shl', ++ x 5x,'vir_shl',7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ write(nrite,'(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)') ++ x nstep,(sumval(i),i=1,9), ++ x simtim,dec,(sumval(i),i=10,18), ++ x prntim,hms,(sumval(i),i=19,27) ++ write(nrite,"(/,1x,' r.m.s. ',1p,9e12.4,/,1x,'fluctn. ', ++ x 1p,9e12.4,/,9x,9e12.4)") (ssqval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++c write out bias potential boost factor ++ ++ if(lbpd)write(nrite,"(/,/,1x, ++ x 'calculated bias potential boost factor',1p,e16.8)")tboost ++ ++ if(numacc.gt.0)then ++ iadd=27 ++ ++c write out estimated diffusion coefficients ++ ++ if(numacc.gt.0)then ++ ++ write(nrite,"(/,/,12x,'Approximate 3D Diffusion', ++ x ' coefficients (10^-9 m^2 / s)',/,/,12x,'atom',7x, ++ x ' D ')") ++ ++ do i=1,ntpatm ++ ++ iadd=iadd+1 ++ dc=(ravval(iadd)-sumval(iadd))/ ++ x (3.d0*dble(numacc-min(mxnstk,numacc-1))*tstep)*10.d0 ++ if(dc.lt.1d-10) dc=0.d0 ++ if(lbpd)dc=dc/tboost ++ write(nrite,'(12x,a8,1p,e13.4)') unqatm(i),dc ++ ++ enddo ++ ++ endif ++ ++c print out average pressure tensor ++ ++ write(nrite,"(/,/,16x,'Average pressure tensor', ++ x 39x,'r.m.s. fluctuations ',/)") ++ ++ do i=iadd,iadd+6,3 ++ write(nrite,'(9x,1p,3e12.4,24x,3e12.4)') ++ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) ++ enddo ++ iadd=iadd+9 ++ ++ write(nrite,'(/,12x,a,1p,e12.4)') 'trace/3. ', ++ x (sumval(iadd)+sumval(iadd-4)+sumval(iadd-8))/3.d0 ++ ++c write out mean cell vectors for npt ++ ++ if(keyens.gt.3.and.(keyens.le.7))then ++ ++ write(nrite,"(/,/,17x,'Average cell vectors', ++ x 41x,'r.m.s. fluctuations ',/)") ++ ++ do i=iadd,iadd+6,3 ++ write(nrite,'(3f20.10,9x,1p,3e12.4)') ++ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) ++ enddo ++ iadd=iadd+9 ++ ++ endif ++ ++c write out remaining registers ++ ++ check=.false. ++ do i=iadd+1,mxnstk ++ ++ if((abs(sumval(i)).gt.1.d-10).or. ++ x (abs(ssqval(i)).gt.1.d-10)) check=.true. ++ ++ enddo ++ ++ if(check)then ++ ++ write(nrite,"(/,/,12x, ++ x 'Remaining non-zero statistics registers ',/,/,12x, ++ x 'Register',7x,'Average value',8x,'r.m.s. fluc.')") ++ ++ do i=iadd+1,mxnstk ++ ++ if((abs(sumval(i)).gt.1.d-10).or. ++ x (abs(ssqval(i)).gt.1.d-10)) ++ x write(nrite,'(10x,i10,2f20.10)') i,sumval(i),ssqval(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c print out sample of final configuration ++ ++ write(nrite,"(/,/,1x,'sample of final configuration',/)") ++ write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',7x,'fx(i)',7x, ++ x 'fy(i)',7x,'fz(i)',/,/)") ++ io=(natms+19)/20 ++ ++ do i=1,natms,io ++ ++ write(nrite,"(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i), ++ x fxx(i),fyy(i),fzz(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c bypass printing averages for certain tad and bpd options ++ ++ if(goprint)then ++ ++c average volume ++ ++ avvol=sumval(19) ++ if(imcon.eq.0.or.imcon.eq.6)then ++ avvol=4.d0*pi/3.d0*rcut**3 ++ volm=avvol ++ endif ++ ++c calculate and print radial distribution functions ++ ++ if(lgofr.and.lpgr.and.(numrdf.gt.0))then ++ ++c scale densities for average volume ++ ++ do i=1,ntpatm ++ dens(i)=dens(i)*(volm/avvol) ++ enddo ++ ++ call rdf1 ++ x (lpgr,idnode,mxnode,ntpatm,numrdf,avvol,rcut) ++ ++ endif ++ ++ if(lzden.and.lpgr.and.(nzden.gt.0))then ++ call zden1(lpgr,idnode,mxnode,ntpatm,nzden,avvol,zlen) ++ endif ++ ++ if(imcon.eq.0)volm=0.d0 ++ ++ endif ++ ++c print final time check ++ ++ call timchk(1,timelp) ++ ++ return ++ end subroutine result ++ ++ subroutine diffsn0(idnode,natms,mxnode,tstep) ++ ++c*********************************************************************** ++c ++c DL_POLY routine for calculating displacements of sites from ++c t=0 positions ++c ++c use diffsn1 for mean squared displacements ++c ++c parallel version - replicated data. ++c ++c copyright daresbury laboratory 1993 ++c ++c author - t. forester june 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,mxnode,iatm1,iatm2,i ++ real(8) tstep ++ ++ save newjob,iatm1,iatm2 ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++ newjob=.false. ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ endif ++ ++ do i=iatm1,iatm2 ++ ++ xx0(i)=xx0(i)+vxx(i)*tstep ++ yy0(i)=yy0(i)+vyy(i)*tstep ++ zz0(i)=zz0(i)+vzz(i)*tstep ++ ++ enddo ++ ++ return ++ end subroutine diffsn0 ++ ++ subroutine diffsn1(idnode,natms,ntpatm,mxnode) ++ ++c*********************************************************************** ++c ++c DL_POLY routine for calculating mean squared displacements ++c ++c displacements calculated in diffsn0 ++c ++c parallel version - replicated data. ++c ++c copyright daresbury laboratory 1993 ++c ++c author - t. forester june 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,ntpatm,mxnode,iatm1,iatm2,k,i ++ ++ save newjob,iatm1,iatm2 ++ ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++ newjob=.false. ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ endif ++ ++c running sum of squared displacements ++ ++ do k=1,ntpatm ++ ++ amsd(k)=0.d0 ++ ++ enddo ++ ++c calculate square of displacements for each atom type ++ ++ do i=iatm1,iatm2 ++ ++ k=ltype(i) ++ amsd(k)=amsd(k)+xx0(i)**2+yy0(i)**2+zz0(i)**2 ++ ++ enddo ++ ++c global sum - replicated data strategy ++ ++ if(mxnode.gt.1)then ++ ++ do k=1,ntpatm ++ ++ buffer(k+ntpatm)=amsd(k) ++ ++ enddo ++ ++ call gdsum(buffer(1+ntpatm),ntpatm,buffer(1)) ++ ++ do k=1,ntpatm ++ ++ amsd(k)=buffer(k+ntpatm) ++ ++ enddo ++ ++ endif ++ ++c mean squared displacement ++ ++ do k=1,ntpatm ++ ++ amsd(k)=amsd(k)/dble(max(numtyp(k),1)) ++ ++ enddo ++ ++ return ++ end subroutine diffsn1 ++ ++ subroutine rdf0(iatm,ik,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for radial ++c distribution functions. ++c double precision accumulators ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm,ll,k ++ real(8) rcut,rcsq,rdelr,ai,aj,rsq,rrr ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut*rcut ++ ++c grid interval for rdf tables ++ ++ rdelr=dble(mxrdf)/rcut ++ ++c set up atom iatm type ++ ++ ai=ltype(iatm) ++ ++c start of primary loop for rdf accumulation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ++ aj=ltype(jatm) ++ if(ai.gt.aj)then ++ k=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ else ++ k=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ endif ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ll=Min(1+Int(rrr*rdelr),mxrdf) ++ ++c accumulate statistics ++ ++ rdf(ll,k)=rdf(ll,k)+1.d0 ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine rdf0 ++ ++ subroutine rdf1 ++ x (lpgr,idnode,mxnode,ntpatm,numrdf,volm,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating radial distribution functions ++c from accumulated data. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntpatm,numrdf,ia,ib,k,j ++ real(8) volm,factor,sum,rrr,dvol,gofr,rcut,delrdf ++ ++ logical lpgr,zero ++ ++ if(idnode.eq.0) write(nrite, ++ x "(/,/,12X,'RADIAL DISTRIBUTION FUNCTIONS',/,/, ++ x 'calculated using ',i10,' configurations')") numrdf ++ ++ if(lpgr)then ++ ++c open RDF file and write headers ++ ++ if(idnode.eq.0)then ++ ++ open(nrdfdt,file='RDFDAT') ++ ++ write(nrdfdt,'(80a1)')cfgname ++ write(nrdfdt,'(2i10)')mxxtyp,mxrdf ++ ++ endif ++ ++c default bin width ++ ++ delrdf=rcut/dble(mxrdf) ++ ++c construct rdf tables ++ ++ do ia=1,ntpatm ++ ++ do ib=ia,ntpatm ++ ++ k=(ib*(ib-1))/2+ia ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,'g(r) :',2a8,/,/,8x,'r',6x,'g(r)',9x,'n(r)',/)") ++ x unqatm(ia),unqatm(ib) ++ write(nrdfdt,'(2a8)')unqatm(ia),unqatm(ib) ++ ++ endif ++ ++c global sum of data on all nodes ++ ++ if(mxnode.gt.1) call gdsum(rdf(1,k),mxrdf,buffer) ++ ++c normalisation factor ++ ++ factor=volm*dens(ia)*dens(ib)*dble(numrdf) ++ if((ia.eq.ib).and.(volm*dens(ia).gt.1.d0)) ++ x factor=factor*0.5d0 ++ ++c running integration of rdf ++ ++ sum=0.d0 ++ ++c loop over distances ++ ++ zero=.true. ++ ++ do j=1,mxrdf ++ ++ if(zero.and.(j.lt.mxrdf-3)) ++ x zero=(rdf(j+2,k).le.0.d0) ++ ++ rrr=(dble(j)-0.5d0)*delrdf ++ dvol=4.d0*pi*(delrdf*rrr*rrr+(delrdf**3)/12.d0) ++ ++ gofr=rdf(j,k)/(factor*dvol) ++ sum=sum+gofr*dvol*dens(ib) ++ ++c print out information ++ ++ if(idnode.eq.0)then ++ ++ write(nrdfdt,"(1p,2e14.6)")rrr,gofr ++ if(.not.zero) ++ x write(nrite,"(f10.4,1p,2e14.6)")rrr,gofr,sum ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(idnode.eq.0)close (nrdfdt) ++ ++ endif ++ ++ return ++ end subroutine rdf1 ++ ++ subroutine static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating periodic data during the ++c molecular dynamics simulation and computing the rolling averages ++c ++c copyright daresbury laboratory 1992 ++c ++c author - w. smith august 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lbpd,lzeql,newjob ++ integer idnode,intsta,imcon,keyens,natms,nstack,nstep,j ++ integer nsteql,ntpatm,numacc,mxnode,i,iadd,k,kstak ++ integer nblock,keybpd,numbpd ++ real(8) consv,degfre,degrot,engang,engbnd,engcpe,engdih ++ real(8) enginv,engke,engrot,engsrp,engunit,engcfg,stpeng ++ real(8) stpeth,stpprs,stptmp,stpvir,stpvol,tstep,virbnd ++ real(8) engfbp,vircom,vircon,vircpe,virsrp,engfld,virfld ++ real(8) engtbp,virtbp,virpmf,virshl,engshl,engtet,virtet ++ real(8) degshl,shlke,virang,width,sclnv1,sclnv2,stprot ++ real(8) stpcns,stpshl,zistk,engmet,virmet,engter,virter ++ real(8) tbold,aterm,bterm,cterm,boost,tboost ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++c open statistics file for append ++ ++ if(newjob.and.idnode.eq.0.and.intsta.gt.0)then ++ ++ open(nstats,file='STATIS',position='append') ++ newjob=.false. ++ ++ endif ++ ++ if(idnode.eq.0.and.nstep.eq.intsta.and.intsta.gt.0)then ++ ++ write(nstats,'(80a1)') cfgname ++ if(abs(engunit-9648.530821d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-9648530.821d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kilo electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=DL_POLY Internal Units ')") ++ ++ endif ++ ++c calculate cell volume and minimum cell half-width ++ ++ if(imcon.eq.0)then ++ ++ width=0.d0 ++ ++ stpvol=0.d0 ++ do i=1,10 ++ celprp(i)=0.d0 ++ enddo ++ ++ else ++ ++ call dcell(cell,celprp) ++ stpvol=celprp(10) ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ ++ if(imcon.eq.4)then ++ ++ stpvol=0.5d0*celprp(10) ++ width=sqrt(3.d0)*cell(1)/4.d0 ++ ++ elseif(imcon.eq.5)then ++ ++ stpvol=0.5d0*celprp(10) ++ width=cell(1)/2.d0 ++ ++ elseif(imcon.eq.6)then ++ ++ width=min(celprp(7),celprp(8))/2.d0 ++ ++ elseif(imcon.eq.7)then ++ ++ stpvol=0.5d0*celprp(10) ++ ++ endif ++ ++ endif ++ ++c energetic properties of system ++ ++ stpvir=virsrp+vircpe+virbnd+vircon+vircom+virtbp+virang ++ x +virshl+virtet+virter+virmet+virfld ++ stpeng=engcfg+engke+engrot ++ stprot=2.d0*engrot/(boltz*max(1.d0,degrot)) ++ stpshl=2.d0*shlke/(boltz*max(1.d0,degshl)) ++ stptmp=2.d0*(engke+engrot)/(boltz*degfre) ++ stpprs=0.d0 ++ if(imcon.gt.0)stpprs=(2.d0*engke-stpvir)/(3.d0*stpvol) ++ stpeth=stpeng+stpprs*stpvol ++ stpcns=stpeng+consv ++ ++c convert pressure to units of katm ++ ++ stpprs=stpprs*prsunt ++ ++c calculate mean squared displacements ++c atomic displacements from origin of production run ++ ++ if((.not.lzeql).or.(nstep.gt.nsteql))then ++ ++ call diffsn0(idnode,natms,mxnode,tstep) ++ call diffsn1(idnode,natms,ntpatm,mxnode) ++ ++ endif ++ ++c zero statistics arrays ++ ++ if((nstep.le.0).or.(numacc.eq.0))then ++ ++ numacc=0 ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c store current values in statistics array ++ ++ stpval(1) =stpcns/engunit ++ stpval(2) =stptmp ++ stpval(3) =engcfg/engunit ++ stpval(4) =(engsrp+engmet+engter)/engunit ++ stpval(5) =engcpe/engunit ++ stpval(6) =engbnd/engunit ++ stpval(7) =(engang+engtbp)/engunit ++ stpval(8) =(engdih+enginv+engfbp)/engunit ++ stpval(9) =engtet/engunit ++ stpval(10)=stpeth/engunit ++ stpval(11)=stprot ++ stpval(12)=stpvir/engunit ++ stpval(13)=(virsrp+virmet+virter)/engunit ++ stpval(14)=vircpe/engunit ++ stpval(15)=virbnd/engunit ++ stpval(16)=(virtbp+virang)/engunit ++ stpval(17)=vircon/engunit ++ stpval(18)=virtet/engunit ++ stpval(19)=stpvol ++ stpval(20)=stpshl ++ stpval(21)=engshl/engunit ++ stpval(22)=virshl/engunit ++ stpval(23)=acos(celprp(6))*180.d0/pi ++ stpval(24)=acos(celprp(5))*180.d0/pi ++ stpval(25)=acos(celprp(4))*180.d0/pi ++ stpval(26)=virpmf/engunit ++ stpval(27)=stpprs ++ ++ iadd=27 ++ ++c mean squared displacements ++ ++ if((.not.lzeql).or.(nstep.gt.nsteql))then ++ ++ do k=1,ntpatm ++ ++ stpval(iadd+k)=amsd(k) ++ ++ enddo ++ ++ endif ++ ++ iadd=iadd+ntpatm ++ ++c stress tensor ++ ++ if(abs(stpvol).le.1.d-10) stpvol=1.d0 ++ do i=1,9 ++ stpval(iadd+i)=stress(i)*prsunt/(stpvol) ++ enddo ++ iadd=iadd+9 ++ ++c cell vectors ++ ++ if(keyens.gt.3.and.(keyens.le.7))then ++ do i=1,9 ++ stpval(iadd+i)=cell(i) ++ enddo ++ iadd=iadd+9 ++ endif ++ ++c check on number of variables for stack - ++ ++ if(iadd.gt.mxnstk) call error(idnode,170) ++ ++c accumulate totals over steps ++ ++ numacc=numacc+1 ++ sclnv2=1.d0/dble(numacc) ++ sclnv1=dble(numacc-1)/dble(numacc) ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++c calculate true thermodynamic averages in bias potential system ++c note integers numacc and numbpd should be equal in this case ++ ++ tbold=tboost*dble(numbpd)/dble(numbpd-1)-boost/dble(numbpd-1) ++ cterm=0.d0 ++ do i=1,mxnstk ++ ++ aterm=sumval(i)*tbold ++ bterm=ssqval(i)*tbold**2 ++ if(tbold.gt.0.d0)cterm=(bterm+aterm**2)/tbold ++ ssqval(i)=(sclnv1*(sclnv1*bterm+boost*sclnv2*(cterm+ ++ x (tbold*stpval(i)-2.d0*aterm)*stpval(i))))/tboost**2 ++ sumval(i)=(sclnv1*aterm+boost*sclnv2*stpval(i))/tboost ++ ++ enddo ++ ++ else ++ ++c calculate true thermodynamic averages in normal system ++ ++ do i=1,mxnstk ++ ++ ssqval(i)=sclnv1*(ssqval(i)+sclnv2*(stpval(i)-sumval(i))**2) ++ sumval(i)=sclnv1*sumval(i)+sclnv2*stpval(i) ++ ++ enddo ++ ++ endif ++ ++c write statistics file ++ ++ if(idnode.eq.0.and.intsta.gt.0)then ++ ++ if(mod(nstep,intsta).eq.0)then ++ ++ write(nstats,'(i10,1p,e14.6,0p,i10,/,(1p,5e14.6))') ++ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) ++ call flush(nstats) ++c$$$c write option for Excel spreadsheet ++c$$$ write(nstats,'(i10,1p,e14.6,0p,i10,300(1p,5e14.6))') ++c$$$ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) ++ ++ endif ++ ++ endif ++ ++c zero rolling average accumulators ++ ++ if(nstep.le.0)then ++ ++ numacc=0 ++ ++ do i=1,mxnstk ++ ++ zumval(i)=0.d0 ++ ++ do j=1,mxstak ++ ++ stkval(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c store quantities in stack ++ ++ kstak=mod(nstep-1,nstack)+1 ++ ++ if(nstep.gt.nstack)then ++ ++ do i=1,mxnstk ++ ++ zumval(i)=zumval(i)-stkval(kstak,i) ++ ++ enddo ++ ++ endif ++ ++ do i=1,mxnstk ++ ++ stkval(kstak,i)=stpval(i) ++ zumval(i)=zumval(i)+stpval(i) ++ ++ enddo ++ ++c calculate rolling averages ++ ++ zistk=min(nstack,nstep) ++ ++ do i=1,mxnstk ++ ++ ravval(i)=zumval(i)/zistk ++ ++ enddo ++ ++c zero accumulators during equilibration period ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numacc=0 ++ do i=1,mxnstk ++ ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c close statistics file at regular intervals ++ ++ if(.not.newjob.and.mod(nstep,ndump).eq.0)then ++ ++ if(idnode.eq.0)close (nstats) ++ newjob=.true. ++ ++ endif ++ ++ return ++ end subroutine static ++ ++ subroutine revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing restart files at job termination ++c or at selected intervals in simulation ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith dec 1992. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden ++ integer idnode,imcon,mxnode,natms,nstep,nzden,numacc,numrdf ++ integer levcfg,nsum,nbuff,i,j ++ real(8) chip,chit,conint,tstep,engcfg,rmxnode,virtot,vircom ++ real(8) tboost,chit_shl ++ ++ if(mxnode.gt.1)then ++ ++c merge displacement data ++ ++ call merge(idnode,mxnode,natms,mxbuff,xx0,yy0,zz0,buffer) ++ ++c globally sum rdf information before saving ++ ++ if(lgofr)then ++ ++c maximum rdfs that can be summed in each step ++ ++ nsum=mxbuff/mxrdf ++ if(nsum.eq.0) call error(idnode,200) ++ ++ nbuff=nsum*mxrdf ++ ++ do i=1,mxxtyp,nsum ++ ++ if((mxxtyp+1-i).lt.nsum) nbuff=(mxxtyp+1-i)*mxrdf ++ call gdsum(rdf(1,i),nbuff,buffer) ++ ++ enddo ++ ++ endif ++ ++c globally sum zden information before saving ++ ++ if(lzden)then ++ ++c maximum zdfs that can be summed in each step ++ ++ nsum=mxbuff/mxzdn ++ if(nsum.eq.0) call error(idnode,200) ++ ++ nbuff=nsum*mxzdn ++ ++ do i =1,mxatyp,nsum ++ ++ if((mxatyp+1-i).lt.nsum) nbuff=(mxatyp+1-i)*mxzdn ++ call gdsum(zdens(1,i),nbuff,buffer) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c node 0 handles i/o ++ ++ if(idnode.eq.0)then ++ ++c write configuration data to new configuration file ++ ++ call config_write('REVCON',levcfg,imcon,natms,engcfg) ++ ++c write accumulator data to dump file ++ ++ open(nrest,file='REVIVE',form='unformatted') ++ ++ write(nrest) dble(nstep),dble(numacc),dble(numrdf),chit, ++ x chip,conint,dble(nzden),tboost,chit_shl ++ write(nrest) virtot,vircom,eta,strcns,strbod ++ write(nrest) stpval ++ write(nrest) sumval ++ write(nrest) ssqval ++ write(nrest) zumval ++ write(nrest) ravval ++ write(nrest) stkval ++ write(nrest) xx0,yy0,zz0 ++ write(nrest) xxs,yys,zzs ++ if(lgofr) write(nrest) rdf ++ if(lzden) write(nrest) zdens ++ ++ close (nrest) ++ ++ endif ++ ++c divide rdf data between nodes ++ ++ rmxnode=1.d0/dble(mxnode) ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=rdf(j,i)*rmxnode ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c divide zdensity data between nodes ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ ++ zdens(j,i)=zdens(j,i)*rmxnode ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine revive ++ ++ subroutine zden0(idnode,natms,mxnode,nzden,zlen) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for density profile ++c zlen=length of cell in z direction ++c ++c double precision accumulators ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nzden,iatm,ll,k ++ real(8) zlen,zleno2,rzdn ++ ++c accumulator ++ ++ nzden=nzden+1 ++ ++c half of z length ++ ++ zleno2=zlen*0.5d0 ++ ++c grid interval for density profiles ++ ++ rzdn=dble(mxzdn)/zlen ++ ++c set up atom iatm type ++ ++ do iatm=idnode+1,natms,mxnode ++ ++ k =ltype(iatm) ++ ++ ll=int((zzz(iatm)+zleno2)*rzdn+1.0d0) ++ ++c accumulate statistic ++ ++ if(ll.gt.0.and.ll.le.mxzdn)zdens(ll,k)=zdens(ll,k)+1.d0 ++ ++ enddo ++ ++ return ++ end subroutine zden0 ++ ++ subroutine zden1 ++ x (lpgr,idnode,mxnode,ntpatm,nzden,volm,zlen) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating Z density profile ++c from accumulated data. ++c double precision version ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lpgr ++ integer idnode,mxnode,ntpatm,nzden,k,j ++ real(8) volm,zlen,delzdn,dvolz,factor,sum,rrr,rho ++ ++ if(idnode.eq.0) write(nrite, ++ x "(/,/,12X,'Z DENSITY PROFILES',/,/, ++ x 'calculated using ',i10,' configurations')") nzden ++ ++ if(lpgr)then ++ ++c open Z density file and write headers ++ ++ if(idnode.eq.0)then ++ ++ open(nzdndt,file='ZDNDAT') ++ ++ write(nzdndt,'(80a1)')cfgname ++ write(nzdndt,'(2i10)')ntpatm,mxzdn ++ ++ endif ++ ++c volume of z strip (arbitrary) ++ ++ delzdn=zlen/dble(mxzdn) ++ dvolz=(volm/zlen)*delzdn ++ ++c normalisation factor ++ ++ nzden=max(nzden,1) ++ factor=1.d0/(dble(nzden)*dvolz) ++ ++ do k=1,ntpatm ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,'rho(r) :',a8,/,/,8x,'r',6x,'rho',9x,'n(r)',/)") ++ x unqatm(k) ++ write(nzdndt,'(a8)')unqatm(k) ++ ++ endif ++ ++c global sum of data on all nodes ++ ++ if(mxnode.gt.1)call gdsum(zdens(1,k),mxzdn,buffer) ++ ++c running integration of z-density ++ ++ sum=0.d0 ++ ++c loop over distances ++ ++ do j=1,mxzdn ++ ++ rrr=(dble(j)-0.5d0)*delzdn-zlen*0.5d0 ++ rho=zdens(j,k)*factor ++ sum=sum+rho*dvolz ++ ++c print out information ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(f10.4,1p,2e14.6)") rrr,rho,sum ++ write(nzdndt,"(1p,2e14.6)") rrr,rho ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(idnode.eq.0)close (nzdndt) ++ ++ endif ++ ++ return ++ end subroutine zden1 ++ ++ subroutine rdf0neu(ik,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for radial ++c distribution functions. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c amended t. forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ik,m,iatm,jatm,ll,k ++ real(8) rcut,a0,a1,a2,a3,a4,a5,rcsq,rrcsq,sqlim,rdelr ++ real(8) ai,aj,rsq,rrr,sss ++ ++ data a0,a1,a2,a3,a4,a5/.0837557783d0,2.9399054d0,-7.8475201d0, ++ x 14.1328992d0,-12.6228528d0,4.32084948d0/ ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ rrcsq=1.d0/rcsq ++ sqlim=0.01d0*rcsq ++ ++c grid interval for rdf tables ++ ++ rdelr=dble(mxrdf)/rcut ++ ++c start of primary loop for rdf accumulation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ iatm=ilist(m) ++ ai=ltype(iatm) ++ ++ jatm=jlist(m) ++ aj=ltype(jatm) ++ ++ if(ai.gt.aj)then ++ ll=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ k=lstvdw(ll) ++ else ++ ll=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ k=lstvdw(ll) ++ endif ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++c determine interpolation panel for rdf table ++ ++ if(rsq.lt.sqlim)then ++ ++ rrr=sqrt(rsq) ++ ++ else ++ ++c interpolate square-root by polynomial plus newton-raphson ++ ++ sss=rsq*rrcsq ++ rrr=1.d0/ ++ x (a0 +sss*(a1+sss*(a2+sss*(a3+sss*(a4+sss*a5))))) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr)*sss*rcut ++ ++ endif ++ ++ ll=int(rrr*rdelr+0.999999d0) ++ ++c accumulate statistics ++ ++ rdf(ll,k)=rdf(ll,k)+1.d0 ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine rdf0neu ++ ++ end module property_module +diff -urN dl_class_1.9.orig/srcmod/rigid_body_module.f dl_class_1.9/srcmod/rigid_body_module.f +--- dl_class_1.9.orig/srcmod/rigid_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/rigid_body_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,243 @@ ++ module rigid_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining rigid body arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: omx(:),omy(:),omz(:) ++ real(8), allocatable :: gcmx(:),gcmy(:),gcmz(:) ++ real(8), allocatable :: gvxx(:),gvyy(:),gvzz(:),gmass(:) ++ real(8), allocatable :: q0(:),q1(:),q2(:),q3(:) ++ real(8), allocatable :: gxx(:,:),gyy(:,:),gzz(:,:) ++ real(8), allocatable :: rotinx(:,:),rotiny(:,:),rotinz(:,:) ++ integer, allocatable :: lstrgd(:),numgsit(:),lstgtp(:) ++ integer, allocatable :: listyp(:),lstgst(:,:),lstfre(:) ++ integer, allocatable :: lstme(:),lstbod(:),lstcsit(:) ++ ++ save omx,omy,omz,gcmx,gcmy,gcmz,gvxx,gvyy,gvzz,gmass ++ save q0,q1,q2,q3,gxx,gyy,gzz,rotinx,rotiny,rotinz ++ save lstrgd,numgsit,lstgtp,listyp,lstgst,lstfre,lstme ++ save lstbod,lstcsit ++ ++ contains ++ ++ subroutine alloc_rgbdy_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (omx(mxgrp),omy(mxgrp),omz(mxgrp),stat=fail(1)) ++ allocate (gcmx(mxgrp),gcmy(mxgrp),gcmz(mxgrp),stat=fail(2)) ++ allocate (gvxx(mxgrp),gvyy(mxgrp),gvzz(mxgrp),stat=fail(3)) ++ allocate (q0(mxgrp),q1(mxgrp),q2(mxgrp),q3(mxgrp),stat=fail(4)) ++ allocate (gxx(mxungp,mxngp),gyy(mxungp,mxngp),stat=fail(5)) ++ allocate (gzz(mxungp,mxngp),gmass(mxungp),stat=fail(6)) ++ allocate (rotinx(mxungp,2),rotiny(mxungp,2),stat=fail(7)) ++ allocate (rotinz(mxungp,2),lstgtp(mxgrp),stat=fail(8)) ++ allocate (lstrgd(mxgatm),numgsit(mxungp),stat=fail(9)) ++ allocate (listyp(mxungp),lstgst(mxungp,mxngp),stat=fail(10)) ++ allocate (lstfre(mxatms),lstme(mxatms),stat=fail(11)) ++ allocate (lstbod(mxatms),lstcsit(2*mxcons),stat=fail(12)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1013) ++ enddo ++ ++ end subroutine alloc_rgbdy_arrays ++ ++ subroutine define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c adapted - p-a cazade oct 2007, solvation, excitation etc. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lghost,site_test ++ integer idnode,itmols,ngrp,ntmp,idum,igrp ++ integer j,site,natmsr ++ ++ ngrp_ghost=0 ++ ntmp=intstr(record,lenrec,idum) ++ numgrp(itmols)=numgrp(itmols)+ntmp ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of rigid units ', ++ x 6x,i10)") ntmp ++ write(nrite,"(/,' rigid body details:',/,/,21x, ++ x 6x,'unit',3x,'indices',/) ") ++ endif ++ ++ do igrp=1,numgrp(itmols) ++ ++ ngrp=ngrp+1 ++ site_test=.true. ++ ++ if(ngrp.gt.mxungp) call error(idnode,301) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ numgsit(ngrp)=intstr(record,lenrec,idum) ++ if(numgsit(ngrp).gt.mxngp) ++ x call error (idnode,302) ++ ++ listyp(ngrp)=ngrp ++ ++ do j=1,numgsit(ngrp) ++ ++ site=intstr(record,lenrec,idum) ++ ++ if(site.eq.0)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ site=intstr(record,lenrec,idum) ++ ++ endif ++ ++ lstgst(ngrp,j)=site ++ ++ if(lghost)then ++ ++ if(site_test)then ++ ++ if(site+natmsr.ge.ind_fre(3))then ++ ++ site_test=.false. ++ ngrp_ghost=ngrp_ghost+1 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0) ++ x write(nrite,"(21x,10i10,100(/,21x,10i10))") ++ x listyp(ngrp),(lstgst(ngrp,j),j=1, ++ x numgsit(ngrp)) ++ ++ enddo ++ ++ numgrp(itmols)=numgrp(itmols)-ngrp_ghost ++ ngrp=ngrp-ngrp_ghost ++ ++ return ++ end subroutine define_rigid_body ++ ++ subroutine bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to calculate rigid body contributions to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author w.smith aug 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,j,ig,id,jr,igrp1,igrp2,idnode,mxnode,ngrp ++ real(8) vircom,strbod,dtx,dty,dtz ++ ++ dimension dtx(mxatms),dty(mxatms),dtz(mxatms),strbod(9) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c zero stress tensor accumulators ++ ++ vircom=0.d0 ++ do i=1,9 ++ strbod(i)=0.d0 ++ enddo ++ ++c convert atomic virial to molecular ++c note convention: virial(atom-atom)=-sum(Ri.Fi) ++c : virial(com-com)=-sum(Rcom.Fcom) so ++c virial(com-com)=virial(atom-atom)+sum((Ri-Rcom).Fi) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ vircom=vircom+ ++ x (dtx(jr)*fxx(i)+dty(jr)*fyy(i)+dtz(jr)*fzz(i)) ++ ++c stress tensor : rigid body contributions ++ ++ strbod(1)=strbod(1)-dtx(jr)*fxx(i) ++ strbod(2)=strbod(2)-dtx(jr)*fyy(i) ++ strbod(3)=strbod(3)-dtx(jr)*fzz(i) ++ strbod(4)=strbod(4)-dty(jr)*fxx(i) ++ strbod(5)=strbod(5)-dty(jr)*fyy(i) ++ strbod(6)=strbod(6)-dty(jr)*fzz(i) ++ strbod(7)=strbod(7)-dtz(jr)*fxx(i) ++ strbod(8)=strbod(8)-dtz(jr)*fyy(i) ++ strbod(9)=strbod(9)-dtz(jr)*fzz(i) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(strbod,9,buffer) ++ buffer(1)=vircom ++ call gdsum(buffer(1),1,buffer(2)) ++ vircom=buffer(1) ++ ++ endif ++ ++c symmetrise stress tensor ++ ++ strbod(2)=0.5d0*(strbod(2)+strbod(4)) ++ strbod(4)=strbod(2) ++ strbod(3)=0.5d0*(strbod(3)+strbod(7)) ++ strbod(7)=strbod(3) ++ strbod(6)=0.5d0*(strbod(6)+strbod(8)) ++ strbod(8)=strbod(6) ++ ++ return ++ end subroutine bodystress ++ ++ end module rigid_body_module +diff -urN dl_class_1.9.orig/srcmod/serial.f dl_class_1.9/srcmod/serial.f +--- dl_class_1.9.orig/srcmod/serial.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/serial.f 2015-11-09 14:15:45.064258843 +0100 +@@ -0,0 +1,543 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c dummy initcomms routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ return ++ end ++ ++ integer*8 function get_comms() ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY with PLUMED ++c ++c******************************************************************** ++ ++ implicit none ++ ++ get_comms=0 ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode ++ ++ idnode=0 ++ mxnode=1 ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c dummy mynode routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ mynode=0 ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c dummy nodedim routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ nodedim=0 ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c dummy numnodes routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ numnodes=1 ++ ++ return ++ end ++ ++ subroutine csend(msgtag,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c dummy csend routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer msgtag,length,pe,idum ++ ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine crecv(msgtag,buf,length) ++ ++c********************************************************************* ++c ++c dummy crecv routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer msgtag,length ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy isum for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ real(8) aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ stop ++ end ++ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms ++ integer lstme(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff ++ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode, mxnode, natms ++ integer lishap(*),lashap(*) ++ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,natms ++ integer listme(*),listot(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lshmov ++ integer idnode,mxnode,natms,nscons,i,j,k ++ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) ++ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) ++ integer lstfrz(mxatms) ++ ++ do i=1,natms ++ listme(i)=0 ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ listot(i)=1 ++ else ++ listot(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use error_module ++ use setup_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,i,j,k ++ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ integer lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ listpm(i)=0 ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++ ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ lstpmt(i)=1 ++ else ++ lstpmt(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lcnb ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 ++ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp ++ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) ++ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) ++ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ lcnb = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ lcnb = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ lcnb = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ lcnb = (.not.lcnb) ++ ++ return ++ end ++ +diff -urN dl_class_1.9.orig/srcmod/serial.f.preplumed dl_class_1.9/srcmod/serial.f.preplumed +--- dl_class_1.9.orig/srcmod/serial.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/serial.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,529 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c dummy initcomms routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode ++ ++ idnode=0 ++ mxnode=1 ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c dummy mynode routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ mynode=0 ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c dummy nodedim routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ nodedim=0 ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c dummy numnodes routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ numnodes=1 ++ ++ return ++ end ++ ++ subroutine csend(msgtag,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c dummy csend routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer msgtag,length,pe,idum ++ ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine crecv(msgtag,buf,length) ++ ++c********************************************************************* ++c ++c dummy crecv routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer msgtag,length ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy isum for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ real(8) aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ stop ++ end ++ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms ++ integer lstme(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff ++ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode, mxnode, natms ++ integer lishap(*),lashap(*) ++ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,natms ++ integer listme(*),listot(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lshmov ++ integer idnode,mxnode,natms,nscons,i,j,k ++ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) ++ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) ++ integer lstfrz(mxatms) ++ ++ do i=1,natms ++ listme(i)=0 ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ listot(i)=1 ++ else ++ listot(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use error_module ++ use setup_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,i,j,k ++ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ integer lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ listpm(i)=0 ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++ ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ lstpmt(i)=1 ++ else ++ lstpmt(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lcnb ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 ++ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp ++ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) ++ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) ++ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ lcnb = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ lcnb = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ lcnb = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ lcnb = (.not.lcnb) ++ ++ return ++ end ++ +diff -urN dl_class_1.9.orig/srcmod/setup_module.f dl_class_1.9/srcmod/setup_module.f +--- dl_class_1.9.orig/srcmod/setup_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/setup_module.f 2011-07-11 17:09:10.000000000 +0200 +@@ -0,0 +1,1664 @@ ++ module setup_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining default array sizes ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c note the following internal units apply everywhere ++c ++c unit of time (to) = 1 x 10**(-12) seconds ++c unit of length (lo) = 1 x 10**(-10) metres ++c unit of mass (mo) = 1.6605402 x 10**(-27) kilograms ++c unit of charge (qo) = 1.60217733 x 10**(-19) coulombs ++c unit of energy (eo) = 1.6605402 x 10**(-23) joules ++c unit of pressure (po) = 1.6605402 x 10**( 7) pascals ++c ++c********************************************************************* ++ ++ use parse_module ++ ++ implicit none ++ ++c FIXED PARAMETERS ++ ++c standard pi values ++ ++ real(8), parameter :: pi=3.141592653589793d0 ++ real(8), parameter :: sqrpi=1.7724538509055159d0 ++ ++c conversion factor for coulombic terms in internal units ++c i.e. (unit(charge)**2/(4 pi eps0 unit(length))/unit(energy) ++ ++ real(8), parameter :: r4pie0=138935.4835d0 ++ ++c boltzmann constant in internal units ++ ++ real(8), parameter :: boltz=8.31451115d-1 ++ ++c planck's constant in internal units ++ ++ real(8), parameter :: hbar=6.350780719d0 ++ ++c conversion factor for pressure from internal units to katm ++ ++ real(8), parameter :: prsunt=0.163882576d0 ++ ++c main input channel ++ ++ integer, parameter :: nread=5 ++ ++c main output channel ++ ++ integer, parameter :: nrite=6 ++ ++c force field input channel ++ ++ integer, parameter :: nfield=9 ++ ++c configuration file input channel ++ ++ integer, parameter :: nconf=10 ++ ++c statistical data file output channel ++ ++ integer, parameter :: nstats=20 ++ ++c trajectory history file channel ++ ++ integer, parameter :: nhist=21 ++ ++c acummulators restart dump file ++ ++ integer, parameter :: nrest=22 ++ ++c tabulated potential file channel ++ ++ integer, parameter :: ntable=23 ++ ++c rdf file channel number ++ ++ integer, parameter :: nrdfdt=24 ++ ++c z density file channel number ++ ++ integer, parameter :: nzdndt=25 ++ ++c hyperdynamics reference basin file ++ ++ integer, parameter :: nbsn=30 ++ ++c neb reaction path profile file ++ ++ integer, parameter :: npro=31 ++ ++c hyperdynamics events journal file ++ ++ integer, parameter :: nevnt=33 ++ ++c hyperdynamics tracking file ++ ++ integer, parameter :: ntrk=32 ++ ++c hyperdynamics restart file ++ ++ integer, parameter :: nhrs=35 ++ ++c free energy data file ++ ++ integer, parameter :: nfrnwr=41 ++ ++c solvation data file ++ ++ integer, parameter :: nsolwr=43 ++ ++c data dumping interval in event of system crash ++ ++ integer, parameter :: ndump=1000 ++ ++c maximum number of neb calculations ++ ++ integer, parameter :: maxneb=10 ++ ++c array allocation parameters (set by subroutine parset) ++ ++ integer kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp ++ integer mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell ++ integer mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid ++ integer mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang ++ integer mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw ++ integer mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd ++ integer mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp ++ integer mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl ++ integer kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke ++ integer mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp ++ integer mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc ++ integer mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol ++ ++ save kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp ++ save mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell ++ save mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid ++ save mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang ++ save mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw ++ save mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd ++ save mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp ++ save mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl ++ save kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke ++ save mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp ++ save mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc ++ save mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol ++ ++ contains ++ ++ subroutine parset(redirect,idnode,mxnode,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to determine required array sizes for ++c allocation of memory manager ++c ++c copyright daresbury laboratory 1997 ++c author - w.smith june 1997 ++c ++c*********************************************************************** ++ ++ logical loglnk,lewald,lspme,lhke,nolink,lcshft ++ logical lsolva,lfree,lfrmas,lghost,redirect ++ real(8) cell,celprp,rctbp,rcfbp,volm,xhi,yhi,zhi,rcut,rvdw ++ real(8) densvar,delr,cut,dens,ratio,drdf,dzdn,rcter,buffer ++ real(8) zlen ++ integer imcon,nhko,ilx,ily,ilz,ncells ++ integer idnode,mxnode,mxn1 ++ ++ dimension cell(9),celprp(10),buffer(10) ++ ++ lhke=.false. ++ lspme=.false. ++ lewald=.false. ++ lcshft=.false. ++ nolink=.false. ++ redirect=.false. ++ mxtmls_sol=1 ++ mxebuf_sol=1 ++ mxatms_sol=1 ++ mxtmls_fre=1 ++ mxewld_fre=1 ++ mxebuf_fre=1 ++ mxatms_fre=1 ++ mxatyp_exc=1 ++ mxtmls_exc=1 ++ ++c specify maximum and minimum nodes ++ ++ mxproc=mxnode ++ minnode=mxnode ++ ++c scan the FIELD file data ++ ++ call fldscan(idnode,mxn1,rctbp,rcfbp,rcter) ++ ++c scan CONFIG file data ++ ++ call cfgscan ++ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) ++ ++c scan CONTROL file data ++ ++ call conscan ++ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, ++ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, ++ x zlen,cell) ++ ++c set dimension of working coordinate arrays ++ ++ msatms=max(1,(mxatms+minnode-1)/minnode) ++ if(lsolva)mxatms_sol=mxatms ++ if(lfree.or.lghost)mxatms_fre=mxatms ++ ++c maximum number of molecule types ++ ++ mxtmls=max(mxtmls,1) ++ if(lsolva)mxtmls_sol=mxtmls ++ if(lfree)mxtmls_fre=mxtmls ++ if(lghost)then ++ ++ mxtmls_exc=mxtmls ++ mxtmls_fre=mxtmls ++ ++ endif ++ ++c maximum number of specified bondlength constraints ++ ++ mxtcon=max(mxtcon,1) ++ ++c maximum number of chemical bond potentials ++ ++ mxtbnd=max(mxtbnd,1) ++ ++c maximum number of different bond angle potentials ++ ++ mxtang=max(mxtang,1) ++ ++c maximum number of different torsional potentials ++ ++ mxtdih=max(mxtdih,1) ++ ++c maximum number of different inversion potentials ++ ++ mxtinv=max(mxtinv,1) ++ ++c maximum number of unique rigid body units ++ ++ mxungp=max(mxungp,1) ++ ++c maximum number of tethered atom potentials ++ ++ mxteth=max(mxteth,1) ++ ++c maximum number of core-shell units ++ ++ mxshl=max(mxshl,1) ++ ++c set maximum number of unique atom types ++ ++ mxatyp=max(1,mxatyp) ++ mxxtyp=(mxatyp*(mxatyp+1))/2 ++ if(lghost)mxatyp_exc=mxatyp ++ ++c maximum number of vdw potentials ++ ++ mxvdw=max(mxvdw,1)+1 ++ ++c maximum number of metal potentials ++ ++ mxmet=max(mxmet,1)+1 ++ mxsmet=mxatyp ++ ++c maximum number of tersoff potentials ++ ++ if(mxter.gt.0)then ++ ++ mxter=mxatyp ++ ++ endif ++ ++c maximum number of three body potentials ++ ++ if(mxtbp.eq.0)then ++ ++ mx2tbp=0 ++ ++ else ++ ++ mx2tbp=(mxatyp*(mxatyp+1))/2 ++ mxtbp=mx2tbp*mxatyp ++ ++ endif ++ ++c maximum number of four body potentials ++ ++ if(mxfbp.eq.0)then ++ ++ mx3fbp=0 ++ ++ else ++ ++ mx3fbp=(mxatyp*(mxatyp+1)*(mxatyp+2))/6 ++ mxfbp=mxatyp*mx3fbp ++ ++ endif ++ ++c maximum number of angular potential parameters ++ ++ mxpang=6 ++ ++c maximum number of three body potential parameters ++ ++ mxptbp=mxpang+1 ++ ++c maximum number of four body potential parameters ++ ++ mxpfbp=3 ++ ++c maximum number of parameters for dihedrals ++ ++ mxpdih=5 ++ ++c maximum number of parameters for inversion potentials ++ ++ mxpinv=2 ++ ++c maximum number of parameters for bond potentials ++ ++ mxpbnd=4 ++ ++c maximum number of parameters for vdw potentials ++ ++ mxpvdw=6 ++ ++c maximum number of parameters for metal potentials ++ ++ mxpmet=7 ++ ++c maximum number of parameters for tersoff potential ++ ++ mxpter=11 ++ ++c maximum number of external field parameters ++ ++ mxfld=10 ++ ++c maximum number of excluded atoms per atom ++ ++ mxexcl=max(mxexcl,1) ++ ++c maximum number of different sites in system ++ ++ mxsite=max(mxsite,1) ++ ++c maximum number of chemical bonds per node ++ ++ mxbond=max(1,(mxbond+minnode-1)/minnode) ++ ++c maximum number of bond angles per node ++ ++ mxangl=max(1,(mxangl+minnode-1)/minnode) ++ ++c maximum number of torsion angles per node ++ ++ mxdihd=max(1,(mxdihd+minnode-1)/minnode) ++ ++c maximum number of inversion potentials per node ++ ++ mxinv=max(1,(mxinv+minnode-1)/minnode) ++ ++c maximum number of constraints per node ++ ++ mxcons=max(1,2*((mxcons+minnode-1)/minnode)) ++ ++c maximum number of tethered atoms per node ++ ++ msteth=max(1,(msteth+minnode-1)/minnode) ++ ++c maximum size for working arrays for bonds, angles, dihedrals ++c inversion potentials, tethers and core-shell units ++ ++ msbad=max(mxbond,mxangl,mxdihd,mxinv,msteth,mxshl) ++ ++c maximum number of grid points in potentials arrays ++ ++ if(mxgrid.eq.0)then ++ ++ mxgrid=max(1000,int(rvdw/0.01d0+0.5d0)+4) ++ ++ endif ++ ++ mxegrd=0 ++ if(lewald.or.lspme.or.lhke.or.lcshft)mxegrd=mxgrid ++ ++c maximum dimension of rdf arrays ++ ++ mxrdf=max(128,int(rcut/drdf)) ++ ++c maximum dimension of zdensity arrays ++ ++ mxzdn=max(128,int(zlen/dzdn)) ++ ++c maximum number of rigid groups in system ++ ++ mxgrp=max(mxgrp,1) ++ ++c maximum number of rigid groups per node ++ ++ msgrp=max(1,(mxgrp+minnode-1)/minnode) ++ ++c maximum number of sites per rigid unit ++ ++ mxngp=max(mxngp,3) ++ ++c maximum number of sites in rigid units ++ ++ mxgatm=max(1,mxgatm) ++ ++c maximum number of timesteps in stack arrays ++ ++ mxstak=max(100,mxstak) ++ ++c maximum number of variables in stack arrays ++ ++ mxnstk=45+mxatyp ++ ++c dimension of shake shared atoms array ++ ++ mxlshp=max(mxcons*2,1) ++ ++c set dimension of working arrays in ewald sum ++ ++ mxewld=1 ++ mxebuf=1 ++ if(lewald)then ++ ++ mxftab=1 ++ mxewld=msatms ++ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)*(2*kmaxc+1)-1 ++ if(lfree.or.lghost)mxebuf=3*mxebuf ++ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 ++ ++ endif ++ ++c set dimension of working arrays in spme ++ ++ mxspme=1 ++ if(lspme)then ++ ++ mxspme=mxatms ++ mxftab=2*(kmaxd+kmaxe+kmaxf) ++ ++ endif ++ ++c set dimension of working arrays for HK ewald ++ ++ mxhko=1 ++ mxhke=1 ++ if(lhke)then ++ ++ mxhko=2 ++ mxewld=msatms ++ mxhke=msatms ++ if(nhko.gt.0)mxhko=max(2,nhko) ++ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)-1 ++ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 ++ ++ endif ++ ++ if(lsolva)mxebuf_sol=mxebuf ++ if(lfree.or.lghost)then ++ ++ mxebuf_fre=mxebuf ++ mxewld_fre=mxewld ++ ++ endif ++ ++c maximum dimension of principal transfer buffer ++ ++ mxbuff=max(6*mxatms,8*(mxcons+1),8*(mxgrp+1),mxnstk*mxstak, ++ x mxebuf,mxgrid,2*kmaxa*kmaxb*kmaxc,2*kmaxd*kmaxe*kmaxf, ++ x 10000) ++ ++c maximum size of verlet neighbour/link cell list for each atom ++c decide if link-cells in use or not ++ ++ cut=rcut+delr ++ dens=dble(mxatms)/volm ++ ratio=1.5d0*dens*(4.d0*pi/3.d0)*cut**3 ++ mxlist=min(nint(ratio),(mxatms+1)/2) ++ if(imcon.eq.0) then ++ ++ cell(1)=max(xhi+2.d0*cut,3.d0*cut) ++ cell(5)=max(yhi+2.d0*cut,3.d0*cut) ++ cell(9)=max(zhi+2.d0*cut,3.d0*cut) ++ ++ endif ++ if(imcon.eq.6)then ++ ++ cell(9)=max(zhi+2.d0*cut,3.d0*cut,cell(9)) ++ ++ endif ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ call dcell(cell,celprp) ++ ilx=int(celprp(7)/cut) ++ ily=int(celprp(8)/cut) ++ ilz=int(celprp(9)/cut) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(mxneut.gt.0.and.ncells.le.36) loglnk=.false. ++ ++ endif ++ ++ mxcell=1 ++ if(loglnk)then ++ ++ mxlist=14*nint(1.5d0*dens*celprp(10)/dble(ncells)) ++ mxcell=(ilx+2)*(ily+2)*(ilz+2) ++ ++ endif ++ ++ if(mxneut.gt.0)mxlist=(mxneut+1)/2 ++ mxlist=2*mxlist ++ if(mxtbp.gt.0.or.mxfbp.gt.0.or.mxter.gt.0)then ++ ++ if(mxtbp.gt.0)cut=min(cut,rctbp) ++ if(mxfbp.gt.0)cut=min(cut,rcfbp) ++ if(mxter.gt.0)cut=min(cut,rcter) ++ ilx=max(3,int(celprp(7)/cut)) ++ ily=max(3,int(celprp(8)/cut)) ++ ilz=max(3,int(celprp(9)/cut)) ++ mxcell=max(mxcell,(ilx+2)*(ily+2)*(ilz+2)) ++ ++ endif ++ mxcell=int(dble(mxcell)*densvar/100.d0) ++ mxlist=int(dble(mxlist)*densvar/100.d0) ++ mxlist=max(500,mxlist) ++ ++c maximum size for coordinate difference arrays ++ ++ mxxdf=max(mxlist,mxatms,mxcons,mxn1*mxn1*(mxneut+1)/2) ++ ++c maximum number of core-shell unit types ++ ++ mxtshl=max(mxtshl,1) ++ ++c potential of mean force array parameter ++ ++ mxpmf=max(mxpmf,1) ++ ++c number of pmf constraints on a processor ++ ++ mspmf=max(1,(mxpmf+minnode-1)/minnode) ++ ++c maximum number of sites to define pmf units ++ ++ mxspmf=max(mxspmf,1) ++ ++c maximum iterations in quaternion integration ++ ++ mxquat=100 ++ ++c maximum number of shake cycles ++ ++ mxshak=100 ++ ++c maximum b-spline interpolation order ++ ++ mxspl=12 ++ ++c increment mxneut ++ ++ if(mxneut.gt.0)mxneut=mxneut+1 ++ ++ return ++ ++ end subroutine parset ++ ++ subroutine fldscan(idnode,mxn1,rctbp,rcfbp,rcter) ++ ++c*********************************************************************** ++c ++c dl_poly routine for scanning the field file to determine the ++c required parameters ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith november 1994 ++c ++c*********************************************************************** ++ ++ integer, parameter :: mmk=1000 ++ ++ character*8 name,keyword,chr(mmk) ++ logical check,ltable,lmetab,safe,lneut,loop1,loop2 ++ real(8) rctbp,rcter,rcfbp,rct,ppp ++ integer mxn1,nxn1,idnode,nold ++ integer itmols,ksite,numsit,isite,nrept,ifrz,i,j ++ integer ishls,ibonds,numcon,numang,icon,iang,idih,numdih ++ integer numinv,iinv,numgrp,kgrp,numgsit,numteth,iteth ++ integer ipmf,jpmf,npmf,itpvdw,itptbp,itpfbp ++ integer itpter,k,nfld,nummols,idum,numshl,nneu ++ integer numbonds,itpmet,iii,ngrid ++ ++ mxtmls=0 ++ mxatms=0 ++ mxgrp=0 ++ mxtcon=0 ++ mxtbnd=0 ++ mxtang=0 ++ mxtdih=0 ++ mxtinv=0 ++ mxpmf=0 ++ mxspmf=0 ++ mxungp=0 ++ mxngp=0 ++ mxneut=0 ++ mxmet=0 ++ mxatyp=0 ++ mxn1=0 ++ nxn1=0 ++ nold=-1 ++ mxgatm=0 ++ mxteth=0 ++ msteth=0 ++ mxvdw=0 ++ mxtbp=0 ++ mxter=0 ++ mxexcl=0 ++ mxsite=0 ++ mxbond=0 ++ mxcons=0 ++ mxangl=0 ++ mxdihd=0 ++ mxinv=0 ++ mxshl=0 ++ mxtshl=0 ++ mxfbp=0 ++ mxgrid=0 ++ rctbp=0.d0 ++ rcter=0.d0 ++ rcfbp=0.d0 ++ safe=.true. ++ loop1=.true. ++ loop2=.true. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD') ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ ++ if(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ ++ elseif(findstring('molecu',record,idum))then ++ ++ mxtmls=intstr(record,lenrec,idum) ++ ++ do itmols=1,mxtmls ++ ++ loop2=.true. ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols=intstr(record,lenrec,idum) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++ numsit=intstr(record,lenrec,idum) ++ mxatms=mxatms+numsit*nummols ++ mxsite=mxsite+numsit ++ ksite=0 ++ do isite=1,numsit ++ ++ if(ksite.lt.numsit)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ call getword(name,record,8,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ nrept=intstr(record,lenrec,idum) ++ ifrz=intstr(record,lenrec,idum) ++ nneu=intstr(record,lenrec,idum) ++ if(nrept.eq.0)nrept=1 ++ if(lneut)then ++ if(nneu.ne.nold) nxn1=0 ++ nxn1=nxn1+nrept ++ mxn1=max(mxn1,nxn1) ++ nold=nneu ++ endif ++ ++ if(mxatyp.eq.0)then ++ ++ mxatyp=1 ++ chr(1)=name ++ ++ else ++ ++ check=.true. ++ do j=1,mxatyp ++ ++ if(name.eq.chr(j))check=.false. ++ ++ enddo ++ if(check)then ++ ++ mxatyp=mxatyp+1 ++ if(mxatyp.le.mmk)chr(mxatyp)=name ++ ++ endif ++ ++ endif ++ if(nrept.eq.0)nrept=1 ++ ksite=ksite+nrept ++ ++ endif ++ ++ enddo ++ ++ if(mmk.lt.mxatyp)call abortscan(34,idnode) ++ ++ if(lneut)mxneut=mxneut+nneu*nummols ++ ++ elseif(findstring('shell',record,idum))then ++ ++ numshl=intstr(record,40,idum) ++ mxtshl=mxtshl+numshl ++ mxshl=mxshl+nummols*numshl ++ ++ do ishls=1,numshl ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ numbonds=intstr(record,lenrec,idum) ++ mxtbnd=mxtbnd+numbonds ++ mxbond=mxbond+nummols*numbonds ++ ++ do ibonds=1,numbonds ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('constr',record,idum))then ++ ++ numcon=intstr(record,lenrec,idum) ++ mxtcon=mxtcon+numcon ++ mxcons=mxcons+nummols*numcon ++ ++ do icon=1,numcon ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('angles',record,idum))then ++ ++ numang=intstr(record,lenrec,idum) ++ mxtang=mxtang+numang ++ mxangl=mxangl+nummols*numang ++ ++ do iang=1,numang ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ numdih=intstr(record,lenrec,idum) ++ mxtdih=mxtdih+numdih ++ mxdihd=mxdihd+nummols*numdih ++ ++ do idih=1,numdih ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('invers',record,idum))then ++ ++ numinv=intstr(record,lenrec,idum) ++ mxtinv=mxtinv+numinv ++ mxinv=mxinv+nummols*numinv ++ ++ do iinv=1,numinv ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ numgrp=intstr(record,lenrec,idum) ++ mxungp=mxungp+numgrp ++ mxgrp=mxgrp+numgrp*nummols ++ ++ do kgrp=1,numgrp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ numgsit=intstr(record,lenrec,idum) ++ mxgatm=mxgatm+numgsit*nummols ++ mxngp=max(mxngp,numgsit) ++ do j=1,numgsit ++ ++ iii=intstr(record,lenrec,idum) ++ if(iii.eq.0)then ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ iii=intstr(record,lenrec,idum) ++ endif ++ ++ enddo ++ ++ enddo ++ ++ elseif(findstring('teth',record,idum))then ++ ++ numteth=intstr(record,lenrec,idum) ++ mxteth=mxteth+numteth ++ msteth=msteth+numteth*nummols ++ ++ do iteth=1,numteth ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ do ipmf=1,2 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ npmf=intstr(record,lenrec,idum) ++ mxspmf=mxspmf+npmf ++ ++ do jpmf=1,npmf ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ enddo ++ ++ mxpmf=mxpmf+nummols ++ ++ elseif(findstring('finish',record,idum))then ++ ++ loop2=.false. ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ if(findstring('tab',record,idum))ltable=.true. ++ mxvdw=intstr(record,lenrec,idum) ++ do itpvdw=1,mxvdw ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ if(findstring('tab',record,idum))ltable=.true. ++ ++ enddo ++ mxvdw=max(mxvdw,(mxatyp*(mxatyp+1))/2) ++ ++ if(ltable)then ++ ++ if(idnode.eq.0)open(ntable,file='TABLE') ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ mxgrid=max(mxgrid,intstr(record,lenrec,idum)) ++ ++ close (ntable) ++ ++ endif ++ ++ elseif(findstring('metal',record,idum))then ++ ++ if(findstring('eam',record,idum))lmetab=.true. ++ mxmet=intstr(record,lenrec,idum) ++ do itpmet=1,mxmet ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ if(findstring('eam',record,idum))lmetab=.true. ++ ++ enddo ++ mxmet=max(mxmet,(mxatyp*(mxatyp+1))/2) ++ ++ if(lmetab)then ++ ++ if(idnode.eq.0)open(ntable,file='TABEAM') ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ do i=1,intstr(record,lenrec,idum) ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ngrid=intstr(record,lenrec,idum) ++ mxgrid=max(mxgrid,ngrid+4) ++ do j=1,(ngrid+3)/4 ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ++ enddo ++ ++ enddo ++ ++ close (ntable) ++ ++ endif ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ mxtbp=intstr(record,lenrec,idum) ++ ++ do itptbp=1,mxtbp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ rct=dblstr(record,lenrec,idum) ++ rctbp=max(rctbp,rct) ++ ++ enddo ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ mxfbp=intstr(record,lenrec,idum) ++ do itpfbp=1,mxfbp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ rct=dblstr(record,lenrec,idum) ++ rcfbp=max(rcfbp,rct) ++ ++ enddo ++ ++ elseif(findstring('tersof',record,idum))then ++ ++ mxter=intstr(record,lenrec,idum) ++ ++ do itpter=1,mxter ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ rct=dblstr(record,lenrec,idum) ++ rcter=max(rcter,rct) ++ ++ enddo ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ nfld=intstr(record,lenrec,idum) ++ if(nfld.eq.0)nfld=5 ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ do k=1,nfld ++ ++ ppp=dblstr(record,lenrec,idum) ++ if(idum.gt.lenrec.and.k.lt.nfld)then ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ endif ++ ++ enddo ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(mxpmf.gt.0)mxpmf=mxatms ++ if(mxtcon.gt.0)mxexcl=max(mxexcl,6) ++ if(mxtbnd.gt.0)mxexcl=max(mxexcl,6) ++ if(mxtang.gt.0)mxexcl=max(mxexcl,16) ++ if(mxtdih.gt.0)mxexcl=max(mxexcl,50) ++ if(mxtinv.gt.0)mxexcl=max(mxexcl,50) ++ if(mxneut.gt.0)mxexcl=max(mxexcl,10*mxn1*mxn1) ++ if(mxgrp.gt.0)mxexcl=max(mxexcl,mxngp) ++ ++ return ++ ++ end subroutine fldscan ++ ++ subroutine cfgscan ++ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scanning the initial configuration ++c file to determine the number of atoms present ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith june 1997 ++c ++c note: volm is volume containing all particles, not system volume ++c ++c*********************************************************************** ++ ++ character*80 header ++ character*8 name ++ logical lvolm ++ real(8) cell,celprp,buffer,extra,volm,xhi,yhi,zhi ++ real(8) xxx,yyy,zzz,uuu,vvv,www,coz ++ integer idnode,nconf,imcon,i,levcfg ++ dimension cell(9),celprp(10),buffer(10),extra(5) ++ ++ imcon=0 ++ xhi=0.d0 ++ yhi=0.d0 ++ zhi=0.d0 ++ volm=0.d0 ++ do i=1,9 ++ ++ cell(i)=0.d0 ++ ++ enddo ++ if(idnode.eq.0)then ++ ++ open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ read(nconf,'(a80)',end=100)header ++ read(nconf,'(2i10)',end=100)levcfg,imcon ++ lvolm=(imcon.eq.0.or.imcon.eq.6) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.gt.0)then ++ ++ read(nconf,'(3f20.0)',end=100)cell(1),cell(2),cell(3) ++ read(nconf,'(3f20.0)',end=100)cell(4),cell(5),cell(6) ++ read(nconf,'(3f20.0)',end=100)cell(7),cell(8),cell(9) ++ call dcell(cell,celprp) ++ ++ endif ++ ++ if(.not.lvolm)then ++ ++ volm=celprp(10) ++ ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ endif ++ ++ i=0 ++ do while(.true.) ++ ++ i=i+1 ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ ++ else if(levcfg.eq.1)then ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ ++ else ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ ++ endif ++ ++ if(lvolm)then ++ ++ if(i.eq.1)then ++ ++ xhi=abs(xxx) ++ yhi=abs(yyy) ++ zhi=abs(zzz) ++ ++ else ++ ++ xhi=max(xhi,abs(xxx)) ++ yhi=max(yhi,abs(yyy)) ++ zhi=max(zhi,abs(zzz)) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ 100 continue ++ ++ if(imcon.eq.0)then ++ ++ volm=8.d0*xhi*yhi*zhi ++ ++ else if(imcon.eq.6)then ++ ++ coz=(cell(1)*cell(4)+cell(2)*cell(5)+cell(3)*cell(6))/ ++ x (celprp(1)*celprp(2)) ++ volm=2.d0*zhi*celprp(1)*celprp(2)*sqrt(1.d0-coz**2) ++ ++ endif ++ ++ close (nconf) ++ ++ endif ++ ++ extra(1)=dble(imcon) ++ extra(2)=xhi ++ extra(3)=yhi ++ extra(4)=zhi ++ extra(5)=volm ++ call gdsum(extra,5,buffer) ++ call gdsum(cell,9,buffer) ++ imcon=nint(extra(1)) ++ xhi=extra(2) ++ yhi=extra(3) ++ zhi=extra(4) ++ volm=extra(5) ++ ++ return ++ ++ end subroutine cfgscan ++ ++ subroutine conscan ++ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, ++ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, ++ x zlen,cell) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scanning the contents of the control file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith june 1997 ++c ++c*********************************************************************** ++ ++ logical safe,lewald,lspme,lhke,peek,nolink,lcshft,lmetad ++ logical lsolva,lfree,lfrmas,lghost,redirect ++ real(8) cell,celprp,rcut,rvdw,delr,eps,alpha,fac,tol,tol1 ++ real(8) densvar,drdf,dzdn,zlen ++ integer nhko,idnode,imcon,idum,jmp ++ integer nlatt,kmax1,kmax2,kmax3,kmaxpow2 ++ dimension celprp(10),cell(9) ++ ++ nhko=0 ++ mxstak=0 ++ kmaxa=0 ++ kmaxb=1 ++ kmaxc=1 ++ kmaxd=1 ++ kmaxe=1 ++ kmaxf=1 ++ rcut=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ drdf=0.05d0 ++ dzdn=0.05d0 ++ zlen=0.d0 ++ densvar=1.d2 ++ peek=.true. ++ lhke=.false. ++ lspme=.false. ++ lewald=.false. ++ lcshft=.false. ++ nolink=.false. ++ lghost=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lsolva=.false. ++ lmetad=.false. ++ redirect=.false. ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open (nread,file='CONTROL') ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ ++ do while(peek) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ call lowcase(record,lenrec) ++ if(record(1).ne.'#')then ++ ++ if(findstring('stack',record,idum))then ++ ++ mxstak=intstr(record,lenrec,idum) ++ ++ elseif(findstring('no link',record,idum))then ++ ++ nolink=.true. ++ ++ elseif(findstring('metafreeze',record,idum))then ++ ++ lmetad=.true. ++ do while(lmetad) ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ call lowcase(record,lenrec) ++ lmetad=.not.findstring('endmet',record,idum) ++ enddo ++ ++ elseif(findstring('redirect',record,idum))then ++ ++ redirect=.true. ++ ++ elseif(findstring('densvar',record,idum))then ++ ++ densvar=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('shift',record,idum).or. ++ x findstring('reaction',record,idum))then ++ ++ lcshft=.true. ++ ++ elseif(findstring('ewald',record,idum).or. ++ x findstring('spme',record,idum).or. ++ x findstring('hke',record,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ lhke=findstring('hke',record,idum) ++ lspme=findstring('spme',record,idum) ++ lewald=findstring('ewald',record,idum) ++ ++ if(findstring('precision',record,idum))then ++ ++ eps=dblstr(record,lenrec,idum) ++ if(lhke) then ++ ++ nhko=intstr(record,lenrec,idum) ++ nlatt=intstr(record,lenrec,idum) ++ nlatt=min(nlatt,2) ++ ++ endif ++ ++ if(rcut.lt.1.d-6)rcut=10.d0 ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(record,lenrec,idum) ++ kmax1=intstr(record,lenrec,idum) ++ kmax2=intstr(record,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=intstr(record,lenrec,idum) ++ ++ else ++ ++ kmax3=intstr(record,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c for spme double kmax and set to next power of 2, with current ++c upper limit of 512 ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxd=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxe=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxf=2 * kmaxpow2 ++ ++ elseif(lhke) then ++ ++ kmaxa=kmax1 ++ kmaxb=kmax2 ++ kmaxc=1 ++ ++ else ++ ++ kmaxa=kmax1 ++ kmaxb=kmax2 ++ kmaxc=kmax3 ++ ++ endif ++ ++ elseif(findstring('cut',record,idum))then ++ ++ rcut=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('rvdw',record,idum))then ++ ++ rvdw=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('delr',record,idum))then ++ ++ delr=dblstr(record,100,idum) ++ ++ else if(findstring('rdf',record,idum))then ++ ++ if(.not.findstring('print',record,idum))then ++ ++ jmp=intstr(record,lenrec,idum) ++ drdf=dblstr(record,lenrec,idum) ++ ++ endif ++ ++ else if(findstring('zden',record,idum))then ++ ++ jmp=intstr(record,lenrec,idum) ++ dzdn=dblstr(record,lenrec,idum) ++ zlen=dblstr(record,lenrec,idum) ++ if(dzdn.lt.1.d-8)then ++ ++ dzdn=0.1d0 ++ zlen=0.1d0*dble(128) ++ ++ elseif(zlen.lt.1.d-8)then ++ ++ zlen=dzdn*dble(128) ++ ++ endif ++ ++ elseif(findstring('solva',record,idum))then ++ ++ lsolva=.true. ++ ++ elseif(findstring('decomp',record,idum))then ++ ++ lsolva=.true. ++ ++ elseif(findstring('free',record,idum))then ++ ++ lfree=.true. ++ ++ elseif(findstring('excit',record,idum))then ++ ++ lghost=.true. ++ lsolva=.true. ++ ++ elseif(findstring('reset_mass',record,idum))then ++ ++ lfrmas=.true. ++ ++ elseif(findstring('switch',record,idum))then ++ ++ lghost=.true. ++ lsolva=.true. ++ ++ elseif(findstring('finish',record,idum))then ++ ++ peek=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (nread) ++ if(abs(rvdw).le.1.d-10)rvdw=rcut ++ if(drdf.lt.1.d-8)drdf=0.05d0 ++ if(dzdn.lt.1.d-8)dzdn=0.05d0 ++ ++ return ++ ++ end subroutine conscan ++ ++ subroutine abortscan(key,idnode) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for controlled exit of file scan ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c********************************************************************* ++ ++ integer key,idnode ++ ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY terminated due to error ', key ++ ++ if(key.eq.17)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from CONTROL file processing' ++ ++ else if(key.eq.52)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of FIELD file encountered' ++ ++ else if(key.eq.24)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABLE file' ++ ++ else if(key.eq.34)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - character array memory allocation failure' ++ ++ endif ++ ++ if(idnode.eq.0) then ++ close (nrite) ++ close (nhist) ++ close (nread) ++ close (nconf) ++ close (nstats) ++ close (nrest) ++ close (nfield) ++ close (ntable) ++ endif ++ ++ call gsync() ++ call exitcomms() ++ ++ return ++ end subroutine abortscan ++ ++ subroutine dcell(aaa,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to calculate the dimensional properties of ++c a simulation cell specified by the input matrix aaa. ++c the results are returned in the array bbb, with : ++c ++c bbb(1 to 3) - lengths of cell vectors ++c bbb(4 to 6) - cosines of cell angles ++c bbb(7 to 9) - perpendicular cell widths ++c bbb(10) - cell volume ++c ++c copyright daresbury laboratory 1992 ++c author - w. smith july 1992 ++c ++c*********************************************************************** ++ ++ real(8) aaa,bbb,axb1,axb2,axb3,bxc1,bxc2,bxc3,cxa1,cxa2,cxa3 ++ ++ dimension aaa(9),bbb(10) ++ ++c calculate lengths of cell vectors ++ ++ bbb(1)=sqrt(aaa(1)*aaa(1)+aaa(2)*aaa(2)+aaa(3)*aaa(3)) ++ bbb(2)=sqrt(aaa(4)*aaa(4)+aaa(5)*aaa(5)+aaa(6)*aaa(6)) ++ bbb(3)=sqrt(aaa(7)*aaa(7)+aaa(8)*aaa(8)+aaa(9)*aaa(9)) ++ ++c calculate cosines of cell angles ++ ++ bbb(4)=(aaa(1)*aaa(4)+aaa(2)*aaa(5)+aaa(3)*aaa(6))/(bbb(1)*bbb(2)) ++ bbb(5)=(aaa(1)*aaa(7)+aaa(2)*aaa(8)+aaa(3)*aaa(9))/(bbb(1)*bbb(3)) ++ bbb(6)=(aaa(4)*aaa(7)+aaa(5)*aaa(8)+aaa(6)*aaa(9))/(bbb(2)*bbb(3)) ++ ++c calculate vector products of cell vectors ++ ++ axb1=aaa(2)*aaa(6)-aaa(3)*aaa(5) ++ axb2=aaa(3)*aaa(4)-aaa(1)*aaa(6) ++ axb3=aaa(1)*aaa(5)-aaa(2)*aaa(4) ++ bxc1=aaa(5)*aaa(9)-aaa(6)*aaa(8) ++ bxc2=aaa(6)*aaa(7)-aaa(4)*aaa(9) ++ bxc3=aaa(4)*aaa(8)-aaa(5)*aaa(7) ++ cxa1=aaa(8)*aaa(3)-aaa(2)*aaa(9) ++ cxa2=aaa(1)*aaa(9)-aaa(3)*aaa(7) ++ cxa3=aaa(2)*aaa(7)-aaa(1)*aaa(8) ++ ++c calculate volume of cell ++ ++ bbb(10)=abs(aaa(1)*bxc1+aaa(2)*bxc2+aaa(3)*bxc3) ++ ++c calculate cell perpendicular widths ++ ++ bbb(7)=bbb(10)/sqrt(bxc1*bxc1+bxc2*bxc2+bxc3*bxc3) ++ bbb(8)=bbb(10)/sqrt(cxa1*cxa1+cxa2*cxa2+cxa3*cxa3) ++ bbb(9)=bbb(10)/sqrt(axb1*axb1+axb2*axb2+axb3*axb3) ++ ++ return ++ end subroutine dcell ++ ++ end module setup_module +diff -urN dl_class_1.9.orig/srcmod/shake_module.f dl_class_1.9/srcmod/shake_module.f +--- dl_class_1.9.orig/srcmod/shake_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/shake_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,152 @@ ++ module shake_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond shake arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmcon(:) ++ integer, allocatable :: listcon(:,:),listot(:) ++ integer, allocatable :: numcon(:),lstcon(:,:) ++ integer, allocatable :: listme(:),lishap(:),lashap(:) ++ ++ save prmcon,listcon,listot,numcon,lstcon,listme,lishap,lashap ++ ++ contains ++ ++ subroutine alloc_shake_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (prmcon(mxtcon),stat=fail(1)) ++ allocate (numcon(mxtmls),stat=fail(2)) ++ allocate (lstcon(mxtcon,2),stat=fail(3)) ++ allocate (listcon(mxcons,3),stat=fail(4)) ++ allocate (listme(mxatms),stat=fail(5)) ++ allocate (lishap(mxlshp),stat=fail(6)) ++ allocate (lashap(mxproc),stat=fail(7)) ++ allocate (listot(mxatms),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1070) ++ enddo ++ ++ do i=1,mxtmls ++ numcon(i)=0 ++ enddo ++ ++ end subroutine alloc_shake_arrays ++ ++ subroutine define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining constraints ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c adapted - p-a cazade oct 2007, solvation, excitation etc. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lghost ++ character*1 message(80) ++ integer idnode,itmols,nconst,nsite,ntmp,icnst ++ integer icnst1,iatm1,iatm2,isite1,isite2,idum,i ++ integer isol1,isol2,natmsr ++ ++ ntmp=intstr(record,lenrec,idum) ++ numcon(itmols)=numcon(itmols)+ntmp ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of bond constraints', ++ x 5x,i10)") ntmp ++ write(nrite,"(/,/,1x,'constraint bond details:', ++ x /,/,21x,5x,'index',5x,'index',2x,'bondlength',/) ++ x ") ++ endif ++ ++ icnst1 = numcon(itmols) ++ do icnst=1,icnst1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ iatm1 = intstr(record,lenrec,idum) ++ iatm2 = intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs(:) ++ ++ isite1 = nsite - numsit(itmols) + iatm1 ++ isite2 = nsite - numsit(itmols) + iatm2 ++ if(lghost)then ++ ++ isol1=natmsr+iatm1 ++ isol2=natmsr+iatm2 ++ ++ endif ++ ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0) then ++ ++ numcon(itmols) = numcon(itmols) -1 ++ if(idnode.eq.0) write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nconst=nconst+1 ++ ++ if(nconst.gt.mxtcon) call error(idnode,40) ++ ++ lstcon(nconst,1)= iatm1 ++ lstcon(nconst,2)= iatm2 ++ prmcon(nconst)=dblstr(record,lenrec,idum) ++ ++ if(lghost)then ++ ++ if((isol1.ge.ind_fre(3)).or.(isol2.ge.ind_fre(3)))then ++ ++ numcon(itmols)=numcon(itmols)-1 ++ ntcons_ghost=ntcons_ghost+1 ++ ++ endif ++ ++ endif ++ ++ if(idnode.eq.0) ++ x write(nrite,"(21x,2i10,f12.6)") ++ x lstcon(nconst,1),lstcon(nconst,2), ++ x prmcon(nconst) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_constraints ++ ++ end module shake_module +diff -urN dl_class_1.9.orig/srcmod/site_module.f dl_class_1.9/srcmod/site_module.f +--- dl_class_1.9.orig/srcmod/site_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/site_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,233 @@ ++ module site_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining atomic/site arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use error_module ++ use parse_module ++ use setup_module ++ ++ implicit none ++ ++ character*1, allocatable :: molnam(:,:) ++ character*8, allocatable :: sitnam(:),unqatm(:) ++ real(8), allocatable :: dens(:),chgsit(:),wgtsit(:) ++ integer, allocatable :: nexsit(:),lfzsit(:),numsit(:),ltpsit(:) ++ integer, allocatable :: nugrp(:),lexsit(:,:),numgrp(:) ++ integer, allocatable :: numtyp(:),numfrz(:),nummols(:) ++ ++ save numtyp,numfrz,dens,chgsit,wgtsit,sitnam,unqatm,nexsit ++ save lfzsit,numsit,ltpsit,nugrp,lexsit,numgrp,molnam,nummols ++ ++ contains ++ ++ subroutine alloc_site_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (chgsit(mxsite),stat=fail(1)) ++ allocate (wgtsit(mxsite),stat=fail(2)) ++ allocate (nexsit(mxsite),stat=fail(3)) ++ allocate (lfzsit(mxsite),stat=fail(4)) ++ allocate (nugrp(mxsite) ,stat=fail(5)) ++ allocate (ltpsit(mxsite),stat=fail(6)) ++ allocate (numsit(mxtmls),stat=fail(7)) ++ allocate (lexsit(mxsite,mxexcl),stat=fail(8)) ++ allocate (sitnam(mxsite),stat=fail(9)) ++ allocate (unqatm(mxsite),stat=fail(10)) ++ allocate (numgrp(mxtmls),stat=fail(11)) ++ allocate (numtyp(mxatyp),stat=fail(12)) ++ allocate (numfrz(mxatyp),stat=fail(13)) ++ allocate (dens(mxatyp),stat=fail(14)) ++ allocate (nummols(mxtmls),stat=fail(15)) ++ allocate (molnam(40,mxtmls),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1090) ++ enddo ++ ++ do i=1,mxtmls ++ numsit(i)=0 ++ enddo ++ ++ end subroutine alloc_site_arrays ++ ++ subroutine define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining atom types in system ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 atom1 ++ character*1 message(80) ++ logical lneut,safe,atmchk ++ integer idnode,itmols,nsite,ksite,ntpatm,isite,nrept ++ integer ifrz,neugp,irept,jsite,idum ++ real(8) weight,charge ++ ++ numsit(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of atoms/sites', ++ x 10x,i10)") numsit(itmols) ++ if(.not.lneut) ++ x write(nrite,"(/,/,1x,'atomic characteristics:', ++ x /,/,21x,' site',5x,'name',10x,'mass',8x, ++ x 'charge',4x,'repeat',4x,'freeze'/)") ++ if(lneut) ++ x write(nrite,"(/,/,1x,'atomic characteristics:',/ ++ x /,21x,' site',5x,'name',10x,'mass',8x,'charge', ++ x 4x,'repeat',4x,'freeze',3x,'chg grp')") ++ ++ endif ++ ++ do isite=1,numsit(itmols) ++ ++ if(ksite.lt.numsit(itmols))then ++ ++c read atom name, site number, mass, charge, freeze option ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ weight=dblstr(record,lenrec,idum) ++ charge=dblstr(record,lenrec,idum) ++ nrept=intstr(record,lenrec,idum) ++ ifrz =intstr(record,lenrec,idum) ++ neugp=intstr(record,lenrec,idum) ++ if(nrept.eq.0)nrept=1 ++ ksite=ksite+nrept ++ ++ if(idnode.eq.0) then ++ ++ if(.not.lneut) then ++ ++ write(nrite, ++ x "(21x,i5,5x,a8,2f12.5,2i10)") ++ x nsite+1,atom1,weight,charge,nrept, ++ x ifrz ++ ++ else ++ ++ write(nrite, ++ x "(21x,i5,5x,a8,2f12.5,3i10)") ++ x nsite+1,atom1,weight,charge,nrept, ++ x ifrz,neugp ++ ++ endif ++ ++ endif ++ ++ do irept=1,nrept ++ ++ nsite=nsite+1 ++ if(nsite.gt.mxsite) call error(idnode,20) ++ ++ sitnam(nsite)=atom1 ++ wgtsit(nsite)=weight ++ chgsit(nsite)=charge ++ lfzsit(nsite)=ifrz ++ nugrp(nsite)=neugp ++ ++ enddo ++ ++c establish list of unique atom types ++ ++ atmchk=.true. ++ ++ do jsite=1,ntpatm ++ ++ if(atom1.eq.unqatm(jsite)) then ++ ++ atmchk=.false. ++ do irept=nsite,nsite-nrept+1,-1 ++ ++ ltpsit(irept)=jsite ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ if(atmchk)then ++ ++ ntpatm=ntpatm+1 ++ if(ntpatm.gt.mxatyp)call error(idnode,14) ++ unqatm(ntpatm)=atom1 ++ ++ do irept=nsite,nsite-nrept+1,-1 ++ ++ ltpsit(irept)=ntpatm ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_atoms ++ ++ subroutine check_syschg(idnode,ntpmls,sumchg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for checking the system charge ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,ntpmls,jsite,itmols,lsite ++ real(8) sumchg ++ ++ jsite=0 ++ do itmols=1,ntpmls ++ ++ do lsite=1,numsit(itmols) ++ ++ jsite=jsite+1 ++ sumchg=sumchg+dble(nummols(itmols))*chgsit(jsite) ++ ++ enddo ++ ++ enddo ++ ++ if(abs(sumchg).gt.1.0d-6) then ++ ++ call warning(idnode,60,sumchg,0.d0,0.d0) ++ ++ endif ++ ++ return ++ end subroutine check_syschg ++ ++ end module site_module +diff -urN dl_class_1.9.orig/srcmod/solvation_module.f dl_class_1.9/srcmod/solvation_module.f +--- dl_class_1.9.orig/srcmod/solvation_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/solvation_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,996 @@ ++ module solvation_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining decomposition of energy arrays ++c to calculate solvation energies ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ use config_module ++ ++ implicit none ++ ++ logical lcomp(9) ++ ++ integer mxtmls_sol2,mxtmls_sol3,mxtmls_sol4 ++ integer ntcons_ghost,ngrp_ghost,nswitch,niswitch ++ integer mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 ++ integer nfrn,ifrn,mfree,kfree,ind_fre(4) ++ ++ real(8) pfree,lambda1,lambda2,dlambda,eng_kin_fre ++ real(8) elrc2,virlrc2,engsic0,engsic2,elrc_sav,qfix_fre ++ real(8) virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,vlrc_fre ++ real(8) qchg0,qchg1,qchg2,ang_fre,bnd_fre,dih_fre ++ real(8) inv_fre,tbp_fre,fbp_fre,cou_fre,elrc2_sav ++ real(8) vdw_fre,eng_cfg_fre,shl_fre,virlrc2_sav,vlrc_fre_sav ++ real(8) qchg_sav,vir_cfg_fre,ang_vir,bnd_vir,dih_vir ++ real(8) inv_vir,tbp_vir,fbp_vir,cou_vir,vdw_vir,shl_vir ++ ++ integer, allocatable :: atm_fre(:) ++ integer, allocatable :: atmolt(:),rigid_sol(:),const_sol(:) ++ integer, allocatable :: lstgot_sol(:),natm_sol(:) ++ ++ real(8), allocatable :: elrc_sol(:),elrc_sol_sav(:),shl_sol(:) ++ real(8), allocatable :: cou_sol(:),vdw_sol(:),bnd_sol(:) ++ real(8), allocatable :: ckc_sol_sum(:),cks_sol_sum(:) ++ real(8), allocatable :: cou_sol_sic(:),ebuf_sol1(:),inv_sol(:) ++ real(8), allocatable :: ang_sol(:),dih_sol(:),en3_sol(:) ++ real(8), allocatable :: qfix_sol(:),ebuf_sol2(:),en4_sol(:) ++ real(8), allocatable :: vdw_sol_lng(:),cou_sol_lng(:) ++ real(8), allocatable :: degfre_sol(:),degrot_sol(:),temp_sol(:) ++ real(8), allocatable :: vxo_sol(:),vyo_sol(:),vzo_sol(:) ++ real(8), allocatable :: ckc1(:),cks1(:),ckc2(:),cks2(:) ++ real(8), allocatable :: ckc_fre_sum(:),cks_fre_sum(:) ++ real(8), allocatable :: ebuf_exc1(:),ebuf_exc2(:) ++ real(8), allocatable :: vxo_fre(:),vyo_fre(:),vzo_fre(:) ++ real(8), allocatable :: elrc_exc(:),elrc_exc_sav(:) ++ real(8), allocatable :: cou_exc(:),vdw_exc(:),bnd_exc(:) ++ real(8), allocatable :: ang_exc(:),dih_exc(:),en4_exc(:) ++ real(8), allocatable :: vdw_exc_lng(:),cou_exc_lng(:) ++ real(8), allocatable :: shl_exc(:),en3_exc(:),inv_exc(:) ++ real(8), allocatable :: qfix_exc(:),cou_exc_sic(:),weight_sav(:) ++ ++ save atmolt,rigid_sol,const_sol,lstgot_sol,natm_sol,elrc_sol ++ save elrc_sol_sav,cou_sol,vdw_sol,bnd_sol,ckc_sol_sum,cks_sol_sum ++ save cou_sol_sic,ebuf_sol1,en4_sol,ang_sol,dih_sol,en3_sol ++ save qfix_sol,ebuf_sol2,shl_sol,vdw_sol_lng,cou_sol_lng,degfre_sol ++ save degrot_sol,inv_sol,temp_sol,vxo_sol,vyo_sol,vzo_sol ++ save mxtmls_sol2,mxtmls_sol3,mxtmls_sol4,lcomp ++ ++ save nfrn,ifrn,mfree,kfree,pfree,lambda1,lambda2,dlambda ++ save eng_kin_fre,elrc2,virlrc2,engsic0,engsic2,cks_fre_sum ++ save virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,qchg1,qchg2 ++ save ang_fre,bnd_fre,dih_fre,inv_fre,tbp_fre,fbp_fre,qchg0 ++ save cou_fre,vdw_fre,eng_cfg_fre,elrc2_sav,elrc_sav,vlrc_fre ++ save ang_vir,bnd_vir,dih_vir,inv_vir,tbp_vir,fbp_vir,cou_vir ++ save vdw_vir,shl_vir,vir_cfg_fre,qfix_fre,virlrc2_sav ++ save ind_fre,atm_fre,ckc1,cks1,ckc2,cks2,ckc_fre_sum ++ save ebuf_exc1,ebuf_exc2,vxo_fre,vyo_fre,vzo_fre,vlrc_fre_sav ++ save weight_sav ++ ++ save ntcons_ghost,ngrp_ghost,qchg_sav,nswitch,niswitch ++ save mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 ++ save cou_exc,vdw_exc,bnd_exc,ang_exc,dih_exc,en4_exc,vdw_exc_lng ++ save cou_exc_lng,shl_exc,en3_exc,inv_exc,elrc_exc,elrc_exc_sav ++ save qfix_exc,cou_exc_sic ++ ++ contains ++ ++ subroutine alloc_sol_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for allocating solvation module arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=37 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ mxtmls_sol2=((mxtmls_sol+1)*mxtmls_sol)/2 ++ mxtmls_sol3=(((mxtmls_sol+3)*mxtmls_sol+2)*mxtmls_sol)/6 ++ mxtmls_sol4=((((mxtmls_sol+6)*mxtmls_sol+11)*mxtmls_sol+6)* ++ x mxtmls_sol)/24 ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (cou_sol(mxtmls_sol2),stat=fail(1)) ++ allocate (vdw_sol(mxtmls_sol2),stat=fail(2)) ++ allocate (shl_sol(mxtmls_sol),stat=fail(3)) ++ allocate (ebuf_sol1(mxebuf_sol),stat=fail(4)) ++ allocate (cou_sol_sic(mxtmls_sol2),stat=fail(5)) ++ allocate (cks_sol_sum(mxtmls_sol),stat=fail(6)) ++ allocate (ckc_sol_sum(mxtmls_sol),stat=fail(7)) ++ allocate (bnd_sol(mxtmls_sol),stat=fail(8)) ++ allocate (ang_sol(mxtmls_sol),stat=fail(9)) ++ allocate (dih_sol(mxtmls_sol),stat=fail(10)) ++ allocate (atmolt(mxatms_sol),stat=fail(11)) ++ allocate (en3_sol(mxtmls_sol3),stat=fail(12)) ++ allocate (en4_sol(mxtmls_sol4),stat=fail(13)) ++ allocate (qfix_sol(mxtmls_sol),stat=fail(14)) ++ allocate (elrc_sol(mxtmls_sol2),stat=fail(15)) ++ allocate (elrc_sol_sav(mxtmls_sol2),stat=fail(16)) ++ allocate (ebuf_sol2(mxebuf_sol),stat=fail(23)) ++ allocate (rigid_sol(mxtmls_sol),stat=fail(24)) ++ allocate (const_sol(mxtmls_sol),stat=fail(25)) ++ allocate (degfre_sol(mxtmls_sol),stat=fail(26)) ++ allocate (degrot_sol(mxtmls_sol),stat=fail(27)) ++ allocate (natm_sol(mxtmls_sol),stat=fail(28)) ++ allocate (lstgot_sol(mxatms_sol),stat=fail(29)) ++ allocate (temp_sol(mxtmls_sol),stat=fail(30)) ++ allocate (vxo_sol(mxatms_sol),stat=fail(31)) ++ allocate (vyo_sol(mxatms_sol),stat=fail(32)) ++ allocate (vzo_sol(mxatms_sol),stat=fail(33)) ++ allocate (vdw_sol_lng(mxtmls_sol2),stat=fail(34)) ++ allocate (cou_sol_lng(mxtmls_sol2),stat=fail(35)) ++ allocate (inv_sol(mxtmls_sol),stat=fail(36)) ++ allocate (weight_sav(mxatms_fre),stat=fail(37)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++c initialise accumulators ++ ++ lcomp(:)=.false. ++ elrc_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ en3_sol(:)=0.d0 ++ en4_sol(:)=0.d0 ++ bnd_sol(:)=0.d0 ++ ang_sol(:)=0.d0 ++ dih_sol(:)=0.d0 ++ inv_sol(:)=0.d0 ++ ++ return ++ end subroutine alloc_sol_arrays ++ ++ subroutine solva_temp(idnode,mxnode,natms,keyver) ++ ++c*********************************************************************** ++c ++c dl_poly routine for solvation module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode,natms,keyver ++ real(8) vvx,vvy,vvz ++ ++ temp_sol(:)=0.d0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ if(keyver.eq.0)then ++ ++ vvx=0.5d0*(vxx(i)+vxo_sol(i)) ++ vvy=0.5d0*(vyy(i)+vyo_sol(i)) ++ vvz=0.5d0*(vzz(i)+vzo_sol(i)) ++ ++ else ++ ++ vvx=vxx(i) ++ vvy=vyy(i) ++ vvz=vzz(i) ++ ++ endif ++ ++ temp_sol(atmolt(i))=temp_sol(atmolt(i))+weight(i)* ++ x (vvx*vvx+vvy*vvy+vvz*vvz)/(boltz*degfre_sol(atmolt(i))) ++ ++ enddo ++ ++c global sum ++ ++ if(mxnode.gt.1)call gdsum(temp_sol,mxtmls_sol,buffer) ++ ++ return ++ end subroutine solva_temp ++ ++ subroutine alloc_free_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine to allocate free energy arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (ebuf_exc1(mxebuf_fre),stat=fail(1)) ++ allocate (ckc1(mxewld_fre),stat=fail(2)) ++ allocate (cks1(mxewld_fre),stat=fail(3)) ++ allocate (ckc2(mxewld_fre),stat=fail(4)) ++ allocate (cks2(mxewld_fre),stat=fail(5)) ++ allocate (cks_fre_sum(mxtmls_fre),stat=fail(6)) ++ allocate (ckc_fre_sum(mxtmls_fre),stat=fail(7)) ++ allocate (atm_fre(mxatms_fre),stat=fail(8)) ++ allocate (ebuf_exc2(mxebuf_fre),stat=fail(9)) ++ allocate (vxo_fre(mxatms_fre),stat=fail(10)) ++ allocate (vyo_fre(mxatms_fre),stat=fail(11)) ++ allocate (vzo_fre(mxatms_fre),stat=fail(12)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++ return ++ ++ end subroutine alloc_free_arrays ++ ++ subroutine lrcorrect_fre(lfree,volm,elrc,virlrc) ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical lfree ++ real(8) volm,elrc,virlrc ++ ++ elrc=elrc_sav*(volm_sav/volm) ++ elrc2=elrc2_sav*(volm_sav/volm) ++ virlrc=virlrc_sav*(volm_sav/volm) ++ virlrc2=virlrc2_sav*(volm_sav/volm) ++ if(lfree)then ++ elrc_fre=elrc_fre_sav*(volm_sav/volm) ++ vlrc_fre=vlrc_fre_sav*(volm_sav/volm) ++ endif ++ ++ end subroutine lrcorrect_fre ++ ++ subroutine free_kinetic(lfrmas,idnode,mxnode,keyver) ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module ++c calculate kinetic energy difference between states ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008: parallel version ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfrmas ++ integer i,idnode,mxnode,keyver ++ real(8) fac ++ ++ fac=dlambda ++ eng_kin_fre=0.d0 ++ ++ if(keyver.eq.0)then ++ ++ if(lfrmas)fac=dlambda/lambda1 ++ do i=ind_fre(1)+idnode,ind_fre(2),mxnode ++ ++ eng_kin_fre=eng_kin_fre- ++ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ ++ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) ++ ++ enddo ++ ++ if(lfrmas)fac=dlambda/lambda2 ++ do i=ind_fre(3)+idnode,ind_fre(4),mxnode ++ ++ eng_kin_fre=eng_kin_fre+ ++ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ ++ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) ++ ++ enddo ++ ++ eng_kin_fre=eng_kin_fre/8.d0 ++ ++ else ++ ++ if(lfrmas)fac=dlambda/lambda1 ++ do i=ind_fre(1)+idnode,ind_fre(2),mxnode ++ ++ eng_kin_fre=eng_kin_fre-fac*weight(i)*(vxx(i)**2+ ++ x vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ if(lfrmas)fac=dlambda/lambda2 ++ do i=ind_fre(3)+idnode,ind_fre(4),mxnode ++ ++ eng_kin_fre=eng_kin_fre+fac*weight(i)*(vxx(i)**2+ ++ x vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ eng_kin_fre=eng_kin_fre/2.d0 ++ ++ endif ++ ++c global sum ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=eng_kin_fre ++ call gdsum(buffer(1),1,buffer(2)) ++ eng_kin_fre=buffer(1) ++ ++ endif ++ ++ return ++ end subroutine free_kinetic ++ ++ subroutine freegen() ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module: select mixing scheme ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,fac1,fac2 ++ real(8) sigma1,sigma2,acc,arg,gss,tt,pp,a1,a2,a3,a4,a5,err ++ ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ ++ if(mfree.eq.1)then ++ ++c linear mixing ++ ++ lambda1=(1.d0-pfree) ++ lambda2=pfree ++ dlambda=1.d0 ++ ++ elseif(mfree.eq.2)then ++ ++c nonlinear mixing ++ ++ lambda1=(1.d0-pfree)**kfree ++ lambda2=(1.d0-(1.d0-pfree)**kfree) ++ dlambda=dble(kfree)*(1.d0-pfree)**(kfree-1) ++ ++ elseif(mfree.eq.3)then ++ ++c trigonmetric mixing ++ ++ lambda2=0.5d0*(1.d0+sin(pi*(pfree-0.5d0))) ++ lambda1=1.d0-lambda2 ++ dlambda=0.5d0*pi*cos(pi*(pfree-0.5d0)) ++ ++ elseif(mfree.eq.4)then ++ ++c error function mixing ++ ++ acc=12.d0 ++ arg=2.d0*sqrt(2.302585093*acc) ++ gss=exp(-(arg*(pfree-0.5d0))**2) ++ tt=1.d0/(1.d0+pp*arg*abs(pfree-0.5d0)) ++ err=1.d0-tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*gss ++ lambda2=0.5d0*(1.d0+sign(err,(pfree-0.5d0))) ++ lambda1=1.d0-lambda2 ++ dlambda=gss*arg/sqrpi ++ ++ elseif(mfree.eq.5)then ++ ++c polynomial mixing ++ ++ sigma1=0.d0 ++ ++ do i=0,kfree-1 ++ ++ fac1=1 ++ fac2=1 ++ ++ do j=0,i-1 ++ ++ fac1=fac1*(kfree-1+i-j) ++ fac2=fac2*(i-j) ++ ++ enddo ++ ++ sigma1=sigma1+(dble(fac1/fac2))*pfree**i ++ ++ enddo ++ ++ lambda1=sigma1*(1.d0-pfree)**kfree ++ lambda2=1.d0-lambda1 ++ dlambda=sigma1*kfree*(1.d0-pfree)**(kfree-1) ++ ++ sigma2=0.d0 ++ ++ do i=1,kfree-1 ++ ++ fac1=1 ++ fac2=1 ++ ++ do j=0,i-1 ++ ++ fac1=fac1*(kfree-1+i-j) ++ fac2=fac2*(i-j) ++ ++ enddo ++ ++ sigma2=sigma2+(dble(fac1*i/fac2))*pfree**(i-1) ++ ++ enddo ++ ++ dlambda=dlambda-sigma2*(1.d0-pfree)**kfree ++ ++ else ++ ++c spline kernel mixing ++ ++ arg=pfree-0.5d0 ++ lambda2=2.d0*pfree-8.d0*arg**3*(1.d0-abs(arg))-0.5d0 ++ lambda1=1.d0-lambda2 ++ dlambda=2.d0+arg**2*(32.d0*abs(arg)-24.d0) ++ ++ endif ++ ++ return ++ end subroutine freegen ++ ++ subroutine free_energy_write(idnode,nstep,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing free energy file at selected ++c intervals in simulation ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade dec 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,nstep ++ real(8) engunit ++ ++ save newjob ++ data newjob/.true./ ++ ++ if(idnode.eq.0)then ++ ++c open the FREENG file if new job or file closed ++ ++ if(newjob)then ++ ++ newjob = .false. ++ open(nfrnwr,file='FREENG',position='append') ++ ++ endif ++ ++ if(nstep.eq.nfrn.or.nstep.eq.ifrn)then ++ ++ write(nfrnwr,'(80a1)')cfgname ++ ++ if(abs(engunit-9648.530821d0).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=DL_POLY Internal UNITS ')") ++ ++ write(nfrnwr,'(1p,4e16.8)')pfree,lambda1,lambda2,dlambda ++ ++ endif ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ write(nfrnwr,"(i10,1p,2e16.8)") ++ x nstep,eng_cfg_fre/engunit,vir_cfg_fre/engunit ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine free_energy_write ++ ++ subroutine alloc_exi_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine to allocate excited state arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer, parameter :: nnn=15 ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ mxtmls_exc2=((mxtmls_exc+1)*mxtmls_exc)/2 ++ mxtmls_exc3=(((mxtmls_exc+3)*mxtmls_exc+2)*mxtmls_exc)/6 ++ mxtmls_exc4=((((mxtmls_exc+6)*mxtmls_exc+11)*mxtmls_exc+6)* ++ x mxtmls_exc)/24 ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (cou_exc(mxtmls_exc2),stat=fail(1)) ++ allocate (vdw_exc(mxtmls_exc2),stat=fail(2)) ++ allocate (bnd_exc(mxtmls_exc),stat=fail(3)) ++ allocate (ang_exc(mxtmls_exc),stat=fail(4)) ++ allocate (dih_exc(mxtmls_exc),stat=fail(5)) ++ allocate (en3_exc(mxtmls_exc3),stat=fail(6)) ++ allocate (en4_exc(mxtmls_exc4),stat=fail(7)) ++ allocate (shl_exc(mxtmls_exc),stat=fail(8)) ++ allocate (vdw_exc_lng(mxtmls_exc2),stat=fail(9)) ++ allocate (cou_exc_lng(mxtmls_exc2),stat=fail(10)) ++ allocate (inv_exc(mxtmls_exc),stat=fail(11)) ++ allocate (elrc_exc(mxtmls_exc2),stat=fail(12)) ++ allocate (elrc_exc_sav(mxtmls_exc2),stat=fail(13)) ++ allocate (qfix_exc(mxtmls_exc),stat=fail(14)) ++ allocate (cou_exc_sic(mxtmls_exc2),stat=fail(15)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++c initialise accumulators ++ ++ bnd_exc(:)=0.d0 ++ ang_exc(:)=0.d0 ++ dih_exc(:)=0.d0 ++ inv_exc(:)=0.d0 ++ en3_exc(:)=0.d0 ++ en4_exc(:)=0.d0 ++ elrc_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ return ++ end subroutine alloc_exi_arrays ++ ++ subroutine update_ghost(idnode,mxnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c update the positions of ghost atoms ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode ++ ++ if(ind_fre(1).lt.ind_fre(3))then ++ ++ ii=ind_fre(3) ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ xxx(ii)=xxx(i) ++ yyy(ii)=yyy(i) ++ zzz(ii)=zzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ else ++ ++ ii=ind_fre(1) ++ ++ do i=ind_fre(3),ind_fre(4) ++ ++ xxx(ii)=xxx(i) ++ yyy(ii)=yyy(i) ++ zzz(ii)=zzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine update_ghost ++ ++ subroutine copy_force(idnode,mxnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode ++ ++ ii=ind_fre(3) ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ fxx(ii)=fxx(i) ++ fyy(ii)=fyy(i) ++ fzz(ii)=fzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ return ++ end subroutine copy_force ++ ++ subroutine switch(elrc,virlrc) ++c*********************************************************************** ++c ++c dl_poly routine for switching system in excitation simulation ++c copyright - daresbury laboratory ++c author - w. smith sep 2008 ++c adapted from p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ real(8) :: swap,elrc,virlrc ++ real(8), allocatable :: cou_sic_swp(:),qfix_swp(:) ++ real(8), allocatable :: elrc_swp(:) ++ ++ allocate(cou_sic_swp(mxtmls_exc2),qfix_swp(mxtmls_exc)) ++ allocate(elrc_swp(mxtmls_exc2)) ++ ++ swap=elrc ++ elrc=elrc2 ++ elrc2=swap ++ ++ swap=engsic0 ++ engsic0=engsic2 ++ engsic2=swap ++ ++ swap=virlrc ++ virlrc=virlrc2 ++ virlrc2=swap ++ ++ swap=elrc_sav ++ elrc_sav=elrc2_sav ++ elrc2_sav=swap ++ ++ swap=virlrc_sav ++ virlrc_sav=virlrc2_sav ++ virlrc2_sav=swap ++ ++ swap=qchg0 ++ qchg0=qchg2 ++ qchg2=swap ++ ++ cou_sic_swp(:)=cou_sol_sic(:) ++ cou_sol_sic(:)=cou_exc_sic(:) ++ cou_exc_sic(:)=cou_sic_swp(:) ++ ++ qfix_swp(:)=qfix_sol(:) ++ qfix_sol(:)=qfix_exc(:) ++ qfix_exc(:)=qfix_swp(:) ++ ++ elrc_swp(:)=elrc_sol(:) ++ elrc_sol(:)=elrc_exc(:) ++ elrc_exc(:)=elrc_swp(:) ++ ++ elrc_swp(:)=elrc_sol_sav(:) ++ elrc_sol_sav(:)=elrc_exc_sav(:) ++ elrc_exc_sav(:)=elrc_swp(:) ++ ++ deallocate(elrc_swp,cou_sic_swp,qfix_swp) ++ ++ return ++ ++ end subroutine switch ++ ++ subroutine lrcorrect_sol(lghost,volm) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical :: lghost ++ real(8) :: volm ++ ++ elrc_sol(:)=elrc_sol_sav(:)*(volm_sav/volm) ++ if(lghost)elrc_exc(:)=elrc_exc_sav(:)*(volm_sav/volm) ++ ++ return ++ end subroutine lrcorrect_sol ++ ++ subroutine switch_atm(lfrmas) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excitation module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical lfrmas ++ integer i,at1_swap,at2_swap ++ ++ at1_swap=ind_fre(1) ++ at2_swap=ind_fre(2) ++ ind_fre(1)=ind_fre(3) ++ ind_fre(2)=ind_fre(4) ++ ind_fre(3)=at1_swap ++ ind_fre(4)=at2_swap ++ ++ if(lfrmas)then ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ atm_fre(i)=1 ++ weight(i)=lambda1*weight_sav(i) ++ ++ enddo ++ ++ do i=ind_fre(3),ind_fre(4) ++ ++ atm_fre(i)=2 ++ weight(i)=lambda2*weight_sav(i) ++ ++ enddo ++ ++ else ++ ++ do i=ind_fre(1),ind_fre(2) ++ atm_fre(i)=1 ++ enddo ++ ++ do i=ind_fre(3),ind_fre(4) ++ atm_fre(i)=2 ++ enddo ++ ++ endif ++ ++ return ++ end subroutine switch_atm ++ ++ subroutine solvation_write ++ x (lexcite,lswitch,idnode,natms,nstep,nsolva,isolva, ++ x tstep,engunit,elrc) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing solva file at selected ++c intervals in simulation ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade jun 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob,lexcite,lswitch ++ integer idnode,natms,nstep,nsolva,isolva,i,j,k ++ integer mxtmls2,mxtmls3,mxtmls4 ++ real(8) tstep,engunit,elrc ++ character*80 aa,bb,cc,dd ++ ++ save newjob ++ data newjob/.true./ ++ ++ mxtmls2=((mxtmls+1)*mxtmls)/2 ++ mxtmls3=(((mxtmls+3)*mxtmls+2)*mxtmls)/6 ++ mxtmls4=((((mxtmls+6)*mxtmls+11)*mxtmls+6)*mxtmls)/24 ++ ++ if(idnode.eq.0)then ++ ++c open the SOLVAT file if new job or file closed ++ ++ if(newjob)then ++ ++ newjob=.false. ++ open(nsolwr,file='SOLVAT',position='append') ++ ++ endif ++ ++c write file header block ++ ++ if(nstep.eq.nsolva.or.nstep.eq.isolva)then ++ ++ write(nsolwr,'(80a1)')cfgname ++ ++ if(abs(engunit-9648.530821d0).le.1.d-10)write(nsolwr, ++ x "('ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=DL_POLY Internal UNITS ')") ++ ++ write(nsolwr,'(2i10)')natms,mxtmls ++ write(nsolwr,'(1x,11a4)')' lex','lsw',' bnd',' ang', ++ x ' dih',' inv',' shl',' cou',' vdw',' 3bd',' 4bd' ++ write(nsolwr,'(11l4)')lexcite,lswitch,lcomp ++ ++ endif ++ ++c write out periodic data ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++c mark start of time step data ++ ++ if(lexcite)then ++ write(nsolwr,'("timestep",i10,f12.5,1p,2e14.6)') ++ x nstep,tstep,elrc/engunit,elrc2/engunit ++ else ++ write(nsolwr,'("timestep",i10,f12.5,1p,e14.6)') ++ x nstep,tstep,elrc/engunit ++ endif ++ ++c write intramolecular data ++ ++ write(nsolwr,'(1p,5e14.6)')temp_sol ++ if(lcomp(1))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')bnd_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(2))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')ang_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(3))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')dih_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(4))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')inv_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit ++ endif ++ endif ++ ++c write core-shell data ++ ++ if(lcomp(5))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')shl_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit ++ endif ++ endif ++ ++c write coulombic data ++ ++ if(lcomp(6))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')cou_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit ++ endif ++ endif ++ ++c write vdw data ++ ++ if(lcomp(7))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')vdw_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit ++ endif ++ endif ++ ++c write 3-body data ++ ++ if(lcomp(8))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')en3_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit ++ endif ++ endif ++ ++c write 4-body data ++ ++ if(lcomp(9))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')en4_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit ++ endif ++ endif ++ ++ endif ++ ++c close SOLVAT file at regular intervals ++ ++ if(.not.newjob.and.mod(nstep,ndump).eq.0)then ++ ++ close(nsolwr) ++ newjob=.true. ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine solvation_write ++ ++ end module solvation_module +diff -urN dl_class_1.9.orig/srcmod/spme_module.f dl_class_1.9/srcmod/spme_module.f +--- dl_class_1.9.orig/srcmod/spme_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/spme_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1175 @@ ++ module spme_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining spme arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use setup_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: csp(:),qqc(:,:,:),ffttable(:) ++ real(8), allocatable :: bspx(:,:), bspy(:,:), bspz(:,:) ++ real(8), allocatable :: bsdx(:,:), bsdy(:,:), bsdz(:,:) ++ integer, allocatable :: key1(:),key2(:),key3(:) ++ complex(8), allocatable :: ww1(:), ww2(:), ww3(:) ++ complex(8), allocatable :: qqq(:,:,:) ++ complex(8), allocatable :: bscx(:), bscy(:),bscz(:) ++CFFTW pointer, save :: fplan, bplan ++ ++ save csp,qqc,qqq,ww1,ww2,ww3,bscx,bscy,bscz,ffttable ++ save bspx,bspy,bspz,bsdx,bsdy,bsdz,key1,key2,key3 ++ ++ contains ++ ++ subroutine alloc_spme_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=9 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (csp(mxspl),ffttable(mxftab),stat=fail(1)) ++ allocate (bspx(mxspme,mxspl),bspy(mxspme,mxspl),stat=fail(2)) ++ allocate (bspz(mxspme,mxspl),bsdx(mxspme,mxspl),stat=fail(3)) ++ allocate (bsdy(mxspme,mxspl),bsdz(mxspme,mxspl),stat=fail(4)) ++ allocate (bscx(kmaxd),bscy(kmaxe),bscz(kmaxf),stat=fail(5)) ++ allocate (key1(kmaxd),key2(kmaxe),key3(kmaxf),stat=fail(6)) ++ allocate (ww1(kmaxd),ww2(kmaxe),ww3(kmaxf),stat=fail(7)) ++ allocate (qqc(kmaxd,kmaxe,kmaxf),stat=fail(8)) ++ allocate (qqq(kmaxd,kmaxe,kmaxf),stat=fail(9)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1750) ++ enddo ++ ++ end subroutine alloc_spme_arrays ++ ++ subroutine bspcoe(nospl,kmax1,kmax2,kmax3) ++ ++c********************************************************************** ++c ++c dl_poly subroutine to calculate B-spline coefficients for ++c Euler exponential splines. ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nospl,kmax1,kmax2,kmax3,k,i,j ++ complex(8) ccc ++ ++c calculate B-splines at knots ++ ++ csp(1)=0.d0 ++ csp(2)=1.d0 ++ ++ do k=3,nospl ++ ++ csp(k)=0.d0 ++ ++ do j=k,2,-1 ++ ++ csp(j)=(dble(j-1)*csp(j)+dble(k-j+1)*csp(j-1))/dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++c calculate B-spline coefficients ++ ++ do i=0,kmax1-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww1(mod(i*k,kmax1)+1) ++ ++ enddo ++ ++ bscx(i+1)=ww1(mod(i*(nospl-1),kmax1)+1)/ccc ++ ++ enddo ++ ++ do i=0,kmax2-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww2(mod(i*k,kmax2)+1) ++ ++ enddo ++ ++ bscy(i+1)=ww2(mod(i*(nospl-1),kmax2)+1)/ccc ++ ++ enddo ++ ++ do i=0,kmax3-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww3(mod(i*k,kmax3)+1) ++ ++ enddo ++ ++ bscz(i+1)=ww3(mod(i*(nospl-1),kmax3)+1)/ccc ++ ++ enddo ++ ++ return ++ end subroutine bspcoe ++ ++ subroutine bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to calculate B-splines for SPME method ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nospl,natms,idnode,mxnode,iatm0,iatm1,i,j,k ++ real(8) aaa,bbb,ccc,txx,tyy,tzz ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ ++c set up atoms numbers for nodes ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct B-splines ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,1)=1.d0 ++ bsdy(i,1)=1.d0 ++ bsdz(i,1)=1.d0 ++ bsdx(i,2)=-1.d0 ++ bsdy(i,2)=-1.d0 ++ bsdz(i,2)=-1.d0 ++ bspx(i,1)=txx(i)-int(txx(i)) ++ bspy(i,1)=tyy(i)-int(tyy(i)) ++ bspz(i,1)=tzz(i)-int(tzz(i)) ++ bspx(i,2)=1.d0-txx(i)+int(txx(i)) ++ bspy(i,2)=1.d0-tyy(i)+int(tyy(i)) ++ bspz(i,2)=1.d0-tzz(i)+int(tzz(i)) ++ ++ enddo ++ ++ do k=3,nospl ++ ++ do i=iatm0,iatm1 ++ ++ bspx(i,k)=0.d0 ++ bspy(i,k)=0.d0 ++ bspz(i,k)=0.d0 ++ ++ enddo ++ ++ do j=k,2,-1 ++ ++ if(k.eq.nospl)then ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,j)=bspx(i,j)-bspx(i,j-1) ++ bsdy(i,j)=bspy(i,j)-bspy(i,j-1) ++ bsdz(i,j)=bspz(i,j)-bspz(i,j-1) ++ ++ enddo ++ ++ endif ++ ++ do i=iatm0,iatm1 ++ ++ aaa=txx(i)+dble(j-1)-int(txx(i)) ++ bbb=tyy(i)+dble(j-1)-int(tyy(i)) ++ ccc=tzz(i)+dble(j-1)-int(tzz(i)) ++ bspx(i,j)=(aaa*bspx(i,j)+(dble(k)-aaa)*bspx(i,j-1))/ ++ x dble(k-1) ++ bspy(i,j)=(bbb*bspy(i,j)+(dble(k)-bbb)*bspy(i,j-1))/ ++ x dble(k-1) ++ bspz(i,j)=(ccc*bspz(i,j)+(dble(k)-ccc)*bspz(i,j-1))/ ++ x dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++ if(k.eq.nospl)then ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,1)=bspx(i,1) ++ bsdy(i,1)=bspy(i,1) ++ bsdz(i,1)=bspz(i,1) ++ ++ enddo ++ ++ endif ++ ++ do i=iatm0,iatm1 ++ ++ bspx(i,1)=(txx(i)-int(txx(i)))*bspx(i,1)/dble(k-1) ++ bspy(i,1)=(tyy(i)-int(tyy(i)))*bspy(i,1)/dble(k-1) ++ bspz(i,1)=(tzz(i)-int(tzz(i)))*bspz(i,1)/dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine bspgen ++ ++ subroutine ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engcpe,vircpe,alpha,volm,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using the smoothed particle mesh ewald method ++c due to Essmann et al J. Chem. Phys. 103 (1995) 8577. ++c ++c parallel replicated data version (part 1) ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c additional FFT code - j. geronowicz sept 1999 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob,lconsw ++ ++ integer idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl ++ integer npass,i,nnn,ipass,l,ll,k,kk,j,jj,fail,iatm0,iatm1 ++ real(8) engcpe,vircpe,alpha,volm,epsq,omg,bb1,bb2,bb3,qchg ++ real(8) twopi,engsic,rvolm,ralph,shiftx,shifty,shiftz,det,qfix ++ real(8) tx,ty,tz,rcpcut,rcpct2,rkx1,rky1,rkz1,rkx2,rky2,rkz2 ++ real(8) rkx3,rky3,rkz3,rksq,akv,eng1,den,scal1,tmp,rclprp ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++CESSL integer inc2,inc3 ++CSGIC real(8) nauxfft(4) ++ ++ dimension omg(9),rclprp(10) ++ complex(8) cpetot,vterm ++ save newjob,engsic,qchg,iatm0,iatm1 ++ ++ data newjob/.true./,fail/0/ ++CSGIC data nauxfft/3,0,0,0/ ++ ++c allocate temporary arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1760) ++ ++ npass=1 ++ lconsw=.true. ++ twopi=2.d0*pi ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++c set up atoms numbers for nodes ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate self interaction correction and net system charge ++ ++ qchg=0.d0 ++ engsic=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ qchg=qchg+chge(i) ++ engsic=engsic+chge(i)**2 ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=qchg ++ buffer(2)=engsic ++ call gdsum(buffer(1),2,buffer(3)) ++ qchg =buffer(1) ++ engsic=buffer(2) ++ ++ endif ++ ++ engsic=-r4pie0/epsq*alpha*engsic/sqrpi ++ ++c initialise the complex exponential arrays ++ ++CCRAY call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CESSL call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CFFTW call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CSGIC call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++ ++c initialise the default fft routine ++ ++ call dlpfft3(1,1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c calculate B-spline coefficients ++ ++ call bspcoe(nospl,kmax1,kmax2,kmax3) ++ ++ endif ++ ++c initialise coulombic potential energy ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c initalize stress tensor working arrays ++ ++ do i = 1,9 ++ omg(i) = 0.d0 ++ enddo ++ ++c set working parameters ++ ++ rvolm=twopi/volm ++ ralph=-0.25d0/alpha**2 ++ ++c set switch for TO, RD and HP boundary conditions ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) then ++ ++ npass=2 ++ lconsw=.false. ++ rvolm=0.5d0*rvolm ++ shiftx=0.5d0*dble(kmax1) ++ shifty=0.5d0*dble(kmax2) ++ shiftz=0.5d0*dble(kmax3) ++ if(imcon.eq.7)shiftz=0.d0 ++ ++ endif ++ ++c convert cell coordinates to fractional coordinates ++ ++ call invert(cell,rcell,det) ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ ++ do i=iatm0,iatm1 ++ ++ txx(i)=dble(kmax1)*(rcell(1)*xxx(i)+rcell(4)*yyy(i)+ ++ x rcell(7)*zzz(i)+0.5d0) ++ tyy(i)=dble(kmax2)*(rcell(2)*xxx(i)+rcell(5)*yyy(i)+ ++ x rcell(8)*zzz(i)+0.5d0) ++ tzz(i)=dble(kmax3)*(rcell(3)*xxx(i)+rcell(6)*yyy(i)+ ++ x rcell(9)*zzz(i)+0.5d0) ++ ++ enddo ++ ++c construct B-splines for atoms ++ ++ call bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) ++ ++c zero 3D charge array ++ ++ nnn=kmaxd*kmaxe*kmaxf ++ call set_block(nnn,0.d0,qqc) ++ ++c construct 3D charge array ++ ++ do ipass=1,npass ++ ++ do i=iatm0,iatm1 ++ ++ do l=1,nospl ++ ++ ll=int(tzz(i))-l+2 ++ if(ll.gt.kmax3)ll=1 ++ if(ll.lt.1)ll=ll+kmax3 ++ do k=1,nospl ++ ++ kk=int(tyy(i))-k+2 ++ if(kk.gt.kmax2)kk=1 ++ if(kk.lt.1)kk=kk+kmax2 ++ ++ do j=1,nospl ++ ++ jj=int(txx(i))-j+2 ++ if(jj.gt.kmax1)jj=1 ++ if(jj.lt.1)jj=jj+kmax1 ++ ++ qqc(jj,kk,ll)=qqc(jj,kk,ll)+ ++ x chge(i)*bspx(i,j)*bspy(i,k)*bspz(i,l) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(.not.lconsw)then ++ ++ do i=iatm0,iatm1 ++ ++ tx=txx(i)-shiftx ++ ty=tyy(i)-shifty ++ tz=tzz(i)-shiftz ++ txx(i)=txx(i)-sign(shiftx,tx) ++ tyy(i)=tyy(i)-sign(shifty,ty) ++ tzz(i)=tzz(i)-sign(shiftz,tz) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c global sum of charge array ++ ++ if(mxnode.gt.1) call gdsum(qqc,nnn,buffer) ++ ++c load charge array into complex array for FFT ++ ++ call cpy_rtc(nnn,qqc,qqq) ++ ++c calculate inverse 3D FFT of charge array (in place). ++ ++CFFTW call fftwnd_f77_one(fplan,qqq,0) ++ ++CESSL inc2=kmaxd ++CESSL inc3=kmaxd*kmaxe ++CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, ++CESSL x -1,1.d0,buffer,mxbuff) ++ ++CSGIC call zzfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++CCRAY call ccfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++ call dlpfft3(0,1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c set reciprocal space cutoff ++ ++ call dcell(rcell,rclprp) ++ ++ rcpcut=0.5d0*min(dble(kmax1)*rclprp(7),dble(kmax2)*rclprp(8), ++ x dble(kmax3)*rclprp(9)) ++ rcpcut=rcpcut*1.05d0*twopi ++ rcpct2=rcpcut**2 ++ ++c calculate convolution of charge array with gaussian function ++ ++ do l=1,kmax3 ++ ++ ll=l-1 ++ if(l.gt.kmax3/2)ll=l-kmax3-1 ++ tmp=twopi*dble(ll) ++ rkx1=tmp*rcell(3) ++ rky1=tmp*rcell(6) ++ rkz1=tmp*rcell(9) ++ bb3=real(bscz(l)*conjg(bscz(l))) ++ ++ do k=1,kmax2 ++ ++ kk=k-1 ++ if(k.gt.kmax2/2)kk=k-kmax2-1 ++ tmp=twopi*dble(kk) ++ rkx2=rkx1+tmp*rcell(2) ++ rky2=rky1+tmp*rcell(5) ++ rkz2=rkz1+tmp*rcell(8) ++ bb2=bb3*real(bscy(k)*conjg(bscy(k))) ++ ++ do j=1,kmax1 ++ ++ jj=j-1 ++ if(j.gt.kmax1/2)jj=j-kmax1-1 ++ tmp=twopi*dble(jj) ++ rkx3=rkx2+tmp*rcell(1) ++ rky3=rky2+tmp*rcell(4) ++ rkz3=rkz2+tmp*rcell(7) ++ bb1=bb2*real(bscx(j)*conjg(bscx(j))) ++ ++ rksq=rkx3*rkx3+rky3*rky3+rkz3*rkz3 ++ ++ if(rksq.gt.1.d-6.and.rksq.le.rcpct2)then ++ ++ vterm=bb1*exp(ralph*rksq)/rksq*qqq(j,k,l) ++ akv=2.d0*(1.d0/rksq-ralph)*real(vterm*conjg(qqq(j,k,l))) ++ omg(1)=omg(1)-rkx3*rkx3*akv ++ omg(5)=omg(5)-rky3*rky3*akv ++ omg(9)=omg(9)-rkz3*rkz3*akv ++ omg(2)=omg(2)-rkx3*rky3*akv ++ omg(3)=omg(3)-rkx3*rkz3*akv ++ omg(6)=omg(6)-rky3*rkz3*akv ++ qqq(j,k,l)=vterm ++ ++ else ++ ++ qqq(j,k,l)=(0.d0,0.d0) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++CFFTW call fftwnd_f77_one(bplan,qqq,0) ++CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, ++CESSL x 1,1.d0,buffer,mxbuff) ++ ++CSGIC call zzfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++CCRAY call ccfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++ call dlpfft3(0,-1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c calculate atomic forces ++ ++ call spme_for ++ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, ++ x epsq,txx,tyy,tzz) ++ ++c complete product of charge array and its gaussian convolution ++ ++ call ele_prd(nnn,qqq,qqc,qqq) ++ ++c correction for charged systems ++ ++ qfix=-(0.5d0*pi*r4pie0/epsq)*((qchg/alpha)**2/volm)/ ++ x dble(mxnode) ++ ++c calculate total energy ++ ++ call scl_csum(nnn,cpetot,qqq) ++ ++ eng1=real(cpetot) ++ den=1.d0/dble(npass) ++ engcpe=engcpe+(den*rvolm*r4pie0*eng1/epsq+engsic)/ ++ x dble(mxnode)+qfix ++ ++c calculate stress tensor (symmetrical) ++ ++ scal1=den*rvolm*r4pie0/(epsq*dble(mxnode)) ++ stress(1) = stress(1)+scal1*(omg(1)+eng1)+qfix ++ stress(2) = stress(2)+scal1*omg(2) ++ stress(3) = stress(3)+scal1*omg(3) ++ stress(4) = stress(4)+scal1*omg(2) ++ stress(5) = stress(5)+scal1*(omg(5)+eng1)+qfix ++ stress(6) = stress(6)+scal1*omg(6) ++ stress(7) = stress(7)+scal1*omg(3) ++ stress(8) = stress(8)+scal1*omg(6) ++ stress(9) = stress(9)+scal1*(omg(9)+eng1)+qfix ++ ++c virial term ++ ++ vircpe=vircpe-scal1*(omg(1)+omg(5)+omg(9)+3.d0*eng1)-3.d0*qfix ++ ++c deallocate temporary arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail) ++ ++ return ++ end subroutine ewald_spme ++ ++ subroutine spme_for ++ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, ++ x epsq,txx,tyy,tzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using smoothed particle mesh ewald method ++c ++c parallel replicated data version (part 1) ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith oct 1998 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,i,ll ++ integer iatm0,iatm1,kk,k,j,jj,l ++ real(8) rvolm,epsq,txx,tyy,tzz,fff,fac,bdx,bdy,bdz ++ real(8) det,qsum ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension fff(3) ++ ++ fac=-2.d0*rvolm*r4pie0/epsq ++ call invert(cell,rcell,det) ++ ++c set up atom numbers for nodes ++ ++ iatm0 = (idnode*natms)/mxnode + 1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++c calculate forces ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ do l=1,nospl ++ ++ ll=int(tzz(i))-l+2 ++ if(ll.gt.kmax3)ll=1 ++ if(ll.lt.1)ll=ll+kmax3 ++ ++ do k=1,nospl ++ ++ kk=int(tyy(i))-k+2 ++ if(kk.gt.kmax2)kk=1 ++ if(kk.lt.1)kk=kk+kmax2 ++ ++ do j=1,nospl ++ ++ jj=int(txx(i))-j+2 ++ if(jj.gt.kmax1)jj=1 ++ if(jj.lt.1)jj=jj+kmax1 ++ ++ qsum=real(qqq(jj,kk,ll)) ++ bdx=qsum*bsdx(i,j)*bspy(i,k)*bspz(i,l)*dble(kmax1) ++ bdy=qsum*bspx(i,j)*bsdy(i,k)*bspz(i,l)*dble(kmax2) ++ bdz=qsum*bspx(i,j)*bspy(i,k)*bsdz(i,l)*dble(kmax3) ++ ++ fxx(i)=fxx(i)+fac*chge(i)*(bdx*rcell(1)+bdy*rcell(2)+ ++ x bdz*rcell(3)) ++ fyy(i)=fyy(i)+fac*chge(i)*(bdx*rcell(4)+bdy*rcell(5)+ ++ x bdz*rcell(6)) ++ fzz(i)=fzz(i)+fac*chge(i)*(bdx*rcell(7)+bdy*rcell(8)+ ++ x bdz*rcell(9)) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c remove COM drift arising from SPME approximations ++ ++ fff(1)=0.d0 ++ fff(2)=0.d0 ++ fff(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ fff(1)=fff(1)+fxx(i) ++ fff(2)=fff(2)+fyy(i) ++ fff(3)=fff(3)+fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)call gdsum(fff,3,buffer) ++ ++ fff(1)=fff(1)/dble(natms) ++ fff(2)=fff(2)/dble(natms) ++ fff(3)=fff(3)/dble(natms) ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=fxx(i)-fff(1) ++ fyy(i)=fyy(i)-fff(2) ++ fzz(i)=fzz(i)-fff(3) ++ ++ enddo ++ ++ return ++ end subroutine spme_for ++ ++ subroutine dlpfft3 ++ x (ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,ww1,ww2,ww3,aaa) ++ ++c*********************************************************************** ++c ++c dl-poly 3D fast fourier transform routine (in place) ++c ++c copyright daresbury laboratory 1998 ++c author w smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lkx,lky,lkz ++ integer ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,i,idm,kkk ++ integer nu1,nu2,nu3,iii,jjj,j,jj2,num,l,kk1,k12,k ++ real(8) tpi,arg ++ ++ dimension key1(ndiv1),key2(ndiv2),key3(ndiv3) ++ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) ++ complex(8) ttt,aaa(ndiv1,ndiv2,ndiv3) ++ save nu1,nu2,nu3 ++ ++ data tpi/6.283185307179586d0/ ++ ++ if(ind.gt.0)then ++ ++c check FFT array dimensions ++ ++ idm=1 ++ lkx=.true. ++ lky=.true. ++ lkz=.true. ++ ++ do i=1,30 ++ ++ idm=2*idm ++ ++ if(idm.eq.ndiv1)then ++ ++ lkx=.false. ++ nu1=i ++ ++ endif ++ if(idm.eq.ndiv2)then ++ ++ lky=.false. ++ nu2=i ++ ++ endif ++ if(idm.eq.ndiv3)then ++ ++ lkz=.false. ++ nu3=i ++ ++ endif ++ ++ enddo ++ ++ if(lkx.or.lky.or.lkz)then ++ ++ write(*,*)'error - FFT array not 2**N' ++ stop ++ ++ endif ++ ++c set reverse bit address arrays ++ ++ do kkk=1,ndiv1 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu1 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key1(kkk)=iii+1 ++ ++ enddo ++ ++ do kkk=1,ndiv2 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu2 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key2(kkk)=iii+1 ++ ++ enddo ++ ++ do kkk=1,ndiv3 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu3 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key3(kkk)=iii+1 ++ ++ enddo ++ ++c initialise complex exponential factors ++ ++ ww1(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv1/2 ++ ++ arg=(tpi/dble(ndiv1))*dble(i) ++ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww1(ndiv1+1-i)=conjg(ww1(i+1)) ++ ++ enddo ++ ++ ww2(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv2/2 ++ ++ arg=(tpi/dble(ndiv2))*dble(i) ++ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww2(ndiv2+1-i)=conjg(ww2(i+1)) ++ ++ enddo ++ ++ ww3(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv3/2 ++ ++ arg=(tpi/dble(ndiv3))*dble(i) ++ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww3(ndiv3+1-i)=conjg(ww3(i+1)) ++ ++ enddo ++ ++ return ++ ++ endif ++ ++c take conjugate of exponentials if required ++ ++ if(isw.lt.0)then ++ ++ do i=1,ndiv1 ++ ++ ww1(i)=conjg(ww1(i)) ++ ++ enddo ++ ++ do i=1,ndiv2 ++ ++ ww2(i)=conjg(ww2(i)) ++ ++ enddo ++ ++ do i=1,ndiv3 ++ ++ ww3(i)=conjg(ww3(i)) ++ ++ enddo ++ ++ endif ++ ++c perform fourier transform in X direction ++ ++ kkk=0 ++ num=ndiv1/2 ++ ++ do l=1,nu1 ++ ++ do while(kkk.lt.ndiv1) ++ ++ do i=1,num ++ ++ iii=key1(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv2 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(k12,j,k)*ww1(iii) ++ aaa(k12,j,k)=aaa(kk1,j,k)-ttt ++ aaa(kk1,j,k)=aaa(kk1,j,k)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv1 ++ ++ iii=key1(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv2 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(kkk,j,k) ++ aaa(kkk,j,k)=aaa(iii,j,k) ++ aaa(iii,j,k)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c perform fourier transform in Y direction ++ ++ kkk=0 ++ num=ndiv2/2 ++ ++ do l=1,nu2 ++ ++ do while(kkk.lt.ndiv2) ++ ++ do i=1,num ++ ++ iii=key2(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(j,k12,k)*ww2(iii) ++ aaa(j,k12,k)=aaa(j,kk1,k)-ttt ++ aaa(j,kk1,k)=aaa(j,kk1,k)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv2 ++ ++ iii=key2(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(j,kkk,k) ++ aaa(j,kkk,k)=aaa(j,iii,k) ++ aaa(j,iii,k)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c perform fourier transform in Z direction ++ ++ kkk=0 ++ num=ndiv3/2 ++ ++ do l=1,nu3 ++ ++ do while(kkk.lt.ndiv3) ++ ++ do i=1,num ++ ++ iii=key3(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv2 ++ ++ ttt=aaa(j,k,k12)*ww3(iii) ++ aaa(j,k,k12)=aaa(j,k,kk1)-ttt ++ aaa(j,k,kk1)=aaa(j,k,kk1)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv3 ++ ++ iii=key3(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv2 ++ ++ ttt=aaa(j,k,kkk) ++ aaa(j,k,kkk)=aaa(j,k,iii) ++ aaa(j,k,iii)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c restore exponentials to unconjugated values if necessary ++ ++ if(isw.lt.0)then ++ ++ do i=1,ndiv1 ++ ++ ww1(i)=conjg(ww1(i)) ++ ++ enddo ++ ++ do i=1,ndiv2 ++ ++ ww2(i)=conjg(ww2(i)) ++ ++ enddo ++ ++ do i=1,ndiv3 ++ ++ ww3(i)=conjg(ww3(i)) ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine dlpfft3 ++ ++ subroutine spl_cexp(ndiv1,ndiv2,ndiv3,ww1,ww2,ww3) ++ ++c*********************************************************************** ++c ++c dl-poly routine to create complex exponential arrays for ++c b-splines ++c ++c copyright daresbury laboratory 1998 ++c author w smith oct 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ndiv1,ndiv2,ndiv3,i ++ real(8) tpi,arg ++ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) ++ ++ data tpi/6.283185307179586d0/ ++ ++c initialise complex exponential factors ++ ++ ww1(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv1/2 ++ ++ arg=(tpi/dble(ndiv1))*dble(i) ++ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww1(ndiv1+1-i)=conjg(ww1(i+1)) ++ ++ enddo ++ ++ ww2(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv2/2 ++ ++ arg=(tpi/dble(ndiv2))*dble(i) ++ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww2(ndiv2+1-i)=conjg(ww2(i+1)) ++ ++ enddo ++ ++ ww3(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv3/2 ++ ++ arg=(tpi/dble(ndiv3))*dble(i) ++ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww3(ndiv3+1-i)=conjg(ww3(i+1)) ++ ++ enddo ++ ++ return ++ end subroutine spl_cexp ++ ++ end module spme_module +diff -urN dl_class_1.9.orig/srcmod/temp_scalers_module.f dl_class_1.9/srcmod/temp_scalers_module.f +--- dl_class_1.9.orig/srcmod/temp_scalers_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/temp_scalers_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,768 @@ ++ module temp_scalers_module ++ ++c*********************************************************************** ++c ++c dl_poly module for temperature scaling routines ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use core_shell_module ++ use error_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use utility_module ++ ++ contains ++ ++ subroutine quench(imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for quenching the bond energies in the ++c initial structure of a molecule defined by constraints ++c ++c copyright - daresbury laboratory 1992 ++c author w.smith november 1992 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ integer imcon,idnode,mxnode,natms,nscons,i,j,k,icyc ++ integer fail ++ real(8) tolnce,ddd,esig,vvv,ww1,ww2 ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ dimension fail(3) ++ ++ data fail/0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(3)) ++ ++ do i=1,3 ++ if(fail(i).ne.0)call error(idnode,1770) ++ enddo ++ ++c calculate bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c normalise bond vectors ++ ++ do k=1,nscons ++ ++ ddd=sqrt(dxt(k)**2+dyt(k)**2+dzt(k)**2) ++ ++ dxt(k)=dxt(k)/ddd ++ dyt(k)=dyt(k)/ddd ++ dzt(k)=dzt(k)/ddd ++ ++ enddo ++ ++c start of quenching cycle ++ ++ icyc=0 ++ safe=.false. ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ uxx(i)=0.d0 ++ uyy(i)=0.d0 ++ uzz(i)=0.d0 ++ ++ enddo ++ ++c calculate velocity corrections and error ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ vvv=dxt(k)*(vxx(i)-vxx(j))+dyt(k)*(vyy(i)-vyy(j))+ ++ x dzt(k)*(vzz(i)-vzz(j)) ++ ++ esig=max(esig,abs(vvv)) ++ ++ ww1=weight(j)*vvv/(weight(i)+weight(j)) ++ ww2=weight(i)*vvv/(weight(i)+weight(j)) ++ uxx(i)=uxx(i)-ww1*dxt(k) ++ uyy(i)=uyy(i)-ww1*dyt(k) ++ uzz(i)=uzz(i)-ww1*dzt(k) ++ uxx(j)=uxx(j)+ww2*dxt(k) ++ uyy(j)=uyy(j)+ww2*dyt(k) ++ uzz(j)=uzz(j)+ww2*dzt(k) ++ ++ enddo ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)then ++ ++c transport velocity adjustments to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ call shmove ++ x (idnode,mxnode,natms,lashap,lishap,uxx,uyy,uzz, ++ x xxt,yyt,zzt,buffer) ++ ++ endif ++ ++c update velocities ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ vxx(i)=vxx(i)+uxx(i)/dble(listme(i)) ++ vyy(i)=vyy(i)+uyy(i)/dble(listme(i)) ++ vzz(i)=vzz(i)+uzz(i)/dble(listme(i)) ++ vxx(j)=vxx(j)+uxx(j)/dble(listme(j)) ++ vyy(j)=vyy(j)+uyy(j)/dble(listme(j)) ++ vzz(j)=vzz(j)+uzz(j)/dble(listme(j)) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit if quenching fails ++ ++ if(.not.safe)call error(idnode,70) ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1) call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,stat=fail(3)) ++ ++ return ++ end subroutine quench ++ ++ subroutine quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to convert atomic velocities to rigid body ++c c.o.m. and angular velocity ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993. ++c author - t.forester nov 1993. ++c amended - t.forester dec 1994 : block data. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,mxnode,natms,ngrp,fail,ig,jr,id ++ integer igrp1,igrp2,i,j ++ real(8) rot,wxx,wyy,wzz ++ ++ dimension rot(9) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1780) ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c translate atomic velocites to com velocity & angular velocity ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=0.d0 ++ gvyy(ig)=0.d0 ++ gvzz(ig)=0.d0 ++ omx(ig)=0.d0 ++ omy(ig)=0.d0 ++ omz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr =jr+1 ++ i =lstrgd(jr) ++ ++c centre of mass momentum ++ ++ gvxx(ig)=gvxx(ig)+weight(i)*vxx(i) ++ gvyy(ig)=gvyy(ig)+weight(i)*vyy(i) ++ gvzz(ig)=gvzz(ig)+weight(i)*vzz(i) ++ ++c distance to c.o.m of molecule ++ ++ xxt(jr)=xxx(i)-gcmx(ig) ++ yyt(jr)=yyy(i)-gcmy(ig) ++ zzt(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++c centre of mass velocity ++ ++ gvxx(ig)=gvxx(ig)/gmass(id) ++ gvyy(ig)=gvyy(ig)/gmass(id) ++ gvzz(ig)=gvzz(ig)/gmass(id) ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++c angular momentum accumulators ++ ++ wxx=0.d0 ++ wyy=0.d0 ++ wzz=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr =jr+1 ++ i =lstrgd(jr) ++ ++ wxx=wxx+weight(i)*(yyt(jr)*vzz(i)-zzt(jr)*vyy(i)) ++ wyy=wyy+weight(i)*(zzt(jr)*vxx(i)-xxt(jr)*vzz(i)) ++ wzz=wzz+weight(i)*(xxt(jr)*vyy(i)-yyt(jr)*vxx(i)) ++ ++ enddo ++ ++c angular velocity in body fixed frame ++ ++ omx(ig)=(rot(1)*wxx+rot(4)*wyy+rot(7)*wzz)*rotinx(id,2) ++ omy(ig)=(rot(2)*wxx+rot(5)*wyy+rot(8)*wzz)*rotiny(id,2) ++ omz(ig)=(rot(3)*wxx+rot(6)*wyy+rot(9)*wzz)*rotinz(id,2) ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr +1 ++ i=lstrgd(jr) ++ ++c site velocity in body frame ++ ++ wxx=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ wyy=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ wzz=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*wxx+rot(2)*wyy+rot(3)*wzz+gvxx(ig) ++ vyy(i)=rot(4)*wxx+rot(5)*wyy+rot(6)*wzz+gvyy(ig) ++ vzz(i)=rot(7)*wxx+rot(8)*wyy+rot(9)*wzz+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,omx,omy,omz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine quatqnch ++ ++ subroutine vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for scaling the velocity arrays to the ++c desired temperature ++c ++c zeroes angular momentum in non-periodic system. ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1992. ++c author - w.smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,imcon,natms,ngrp,iatm1,iatm2,i ++ real(8) sigma,roti,rotinv,cmx,cmy,cmz,cmvx,cmvy,cmvz,sysmas ++ real(8) amx,amy,amz,det,scale,rsq,wxx,wyy,wzz,sumke ++ ++ dimension roti(9),rotinv(9) ++ ++c block indices ++ ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++c calculate centre of mass position and motion of the system ++ ++ cmx=0.d0 ++ cmy=0.d0 ++ cmz=0.d0 ++ cmvx=0.d0 ++ cmvy=0.d0 ++ cmvz=0.d0 ++ sysmas=0.d0 ++ ++ do i=iatm1,iatm2 ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ cmx=cmx+weight(i)*xxx(i) ++ cmy=cmy+weight(i)*yyy(i) ++ cmz=cmz+weight(i)*zzz(i) ++ sysmas=sysmas+weight(i) ++ cmvx=cmvx+vxx(i)*weight(i) ++ cmvy=cmvy+vyy(i)*weight(i) ++ cmvz=cmvz+vzz(i)*weight(i) ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ buffer(8)=sysmas ++ buffer(9)=cmx ++ buffer(10)=cmy ++ buffer(11)=cmz ++ buffer(12)=cmvx ++ buffer(13)=cmvy ++ buffer(14)=cmvz ++ call gdsum(buffer(8),7,buffer(1)) ++ sysmas= buffer(8) ++ cmx=buffer(9) ++ cmy=buffer(10) ++ cmz=buffer(11) ++ cmvx=buffer(12) ++ cmvy=buffer(13) ++ cmvz=buffer(14) ++ endif ++ ++ cmx=cmx/sysmas ++ cmy=cmy/sysmas ++ cmz=cmz/sysmas ++ ++ cmvx=cmvx/sysmas ++ cmvy=cmvy/sysmas ++ cmvz=cmvz/sysmas ++ ++c remove centre of mass motion ++ ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ vxx(i)=vxx(i)-cmvx ++ vyy(i)=vyy(i)-cmvy ++ vzz(i)=vzz(i)-cmvz ++ ++ else ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ endif ++ ++ enddo ++ ++c zero angular momentum about centre of mass - non-periodic system ++ ++ if(imcon.eq.0)then ++ ++c move to centre of mass origin ++ ++ do i=1,natms ++ ++ xxx(i)=xxx(i)-cmx ++ yyy(i)=yyy(i)-cmy ++ zzz(i)=zzz(i)-cmz ++ ++ enddo ++ ++c angular momentum accumulators ++ ++ amx=0.d0 ++ amy=0.d0 ++ amz=0.d0 ++ ++c rotational inertia accumulators ++ ++ do i=1,9 ++ roti(i)=0.d0 ++ enddo ++ ++ do i=iatm1,iatm2 ++ ++ amx=amx+weight(i)*(yyy(i)*vzz(i)-zzz(i)*vyy(i)) ++ amy=amy+weight(i)*(zzz(i)*vxx(i)-xxx(i)*vzz(i)) ++ amz=amz+weight(i)*(xxx(i)*vyy(i)-yyy(i)*vxx(i)) ++ ++ rsq=xxx(i)**2+yyy(i)**2+zzz(i)**2 ++ roti(1)=roti(1)+weight(i)*(xxx(i)*xxx(i)-rsq) ++ roti(2)=roti(2)+weight(i)* xxx(i)*yyy(i) ++ roti(3)=roti(3)+weight(i)* xxx(i)*zzz(i) ++ roti(5)=roti(5)+weight(i)*(yyy(i)*yyy(i)-rsq) ++ roti(6)=roti(6)+weight(i)* yyy(i)*zzz(i) ++ roti(9)=roti(9)+weight(i)*(zzz(i)*zzz(i)-rsq) ++ ++ enddo ++ ++c complete rotational inertia matrix ++ ++ roti(4)=roti(2) ++ roti(7)=roti(3) ++ roti(8)=roti(6) ++ ++c global sum ++ ++ if(mxnode.gt.1)then ++ buffer(13)=amx ++ buffer(14)=amy ++ buffer(15)=amz ++ do i=1,9 ++ buffer(15+i)=roti(i) ++ enddo ++ call gdsum(buffer(13),12,buffer(1)) ++ amx=buffer(13) ++ amy=buffer(14) ++ amz=buffer(15) ++ do i=1,9 ++ roti(i)=buffer(15+i) ++ enddo ++ endif ++ ++c invert rotational inertia matrix ++ ++ call invert (roti,rotinv,det) ++ ++c correction to angular velocity ++ ++ wxx=rotinv(1)*amx+rotinv(2)*amy+rotinv(3)*amz ++ wyy=rotinv(4)*amx+rotinv(5)*amy+rotinv(6)*amz ++ wzz=rotinv(7)*amx+rotinv(8)*amy+rotinv(9)*amz ++ ++c correction to linear velocity ++ ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ vxx(i)=vxx(i)+(wyy*zzz(i)-wzz*yyy(i)) ++ vyy(i)=vyy(i)+(wzz*xxx(i)-wxx*zzz(i)) ++ vzz(i)=vzz(i)+(wxx*yyy(i)-wyy*xxx(i)) ++ ++ endif ++ ++ enddo ++ ++c reset positions to original reference frame ++ ++ do i=1,natms ++ ++ xxx(i)=xxx(i)+cmx ++ yyy(i)=yyy(i)+cmy ++ zzz(i)=zzz(i)+cmz ++ ++ enddo ++ ++ endif ++ ++c calculate temperature ++ ++ sumke=0.d0 ++ ++ do i=iatm1,iatm2 ++ ++ sumke=sumke+weight(i)* ++ x (vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ sumke=0.5d0*sumke ++ if(mxnode.gt.1)then ++ buffer(1)=sumke ++ call gdsum(buffer(1),1,buffer(2)) ++ sumke=buffer(1) ++ endif ++ ++c apply temperature scaling ++ ++ scale=1.d0 ++ if(sumke.gt.1.d-6)scale=sqrt(sigma/sumke) ++ ++ do i=1,natms ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++ if(ngrp.gt.0)then ++ call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ endif ++ ++ return ++ end subroutine vscaleg ++ ++ subroutine shlqnch(idnode,mxnode,ntshl,temp) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for quenching the internal bond energies ++c in ions defined by shell model ++c ++c copyright - daresbury laboratory 1994 ++c author w.smith july 1994 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m ++ real(8) temp,pke,rmu,dvx,dvy,dvz,tmx,tmy,tmz,scl ++ ++c permitted core-shell internal kinetic energy ++ ++ pke=boltz*temp*1.d-4 ++ ++c block indices ++ ++ ishl1 = (idnode*ntshl)/mxnode+1 ++ ishl2 = ((idnode+1)*ntshl)/mxnode ++ ++c calculate core and shell velocities from total momentum ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) ++ ++ if(rmu.gt.0.d0)then ++ ++ dvx=vxx(j)-vxx(i) ++ dvy=vyy(j)-vyy(i) ++ dvz=vzz(j)-vzz(i) ++ ++ scl=sqrt(pke/(rmu*(dvx*dvx+dvy*dvy+dvz*dvz))) ++ ++ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) ++ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) ++ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) ++ ++ vxx(i)=tmx/(weight(i)+weight(j))-scl*rmu*dvx/weight(i) ++ vxx(j)=tmx/(weight(i)+weight(j))+scl*rmu*dvx/weight(j) ++ vyy(i)=tmy/(weight(i)+weight(j))-scl*rmu*dvy/weight(i) ++ vyy(j)=tmy/(weight(i)+weight(j))+scl*rmu*dvy/weight(j) ++ vzz(i)=tmz/(weight(i)+weight(j))-scl*rmu*dvz/weight(i) ++ vzz(j)=tmz/(weight(i)+weight(j))+scl*rmu*dvz/weight(j) ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) ++ ++ return ++ end subroutine shlqnch ++ ++ subroutine regauss ++ x (idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for resetting the system velocities ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,mxnode,natms,ngrp,nscons ++ integer ntcons,ntshl,i,k,keyshl ++ real(8) temp,tolnce,sigma,rsq ++ ++c set atomic velocities from gaussian distribution ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch ++ x (idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ return ++ end subroutine regauss ++ ++ subroutine impact(khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c********************************************************************* ++c ++c DLPOLY routinue for impacting a selected atom with a specified ++c recoil energy ++c ++c copyright daresbury laboratory ++c author w.smith september 2007 ++c ++c********************************************************************* ++ ++ use config_module ++ use ensemble_tools_module ++ ++ implicit none ++ ++ integer i,khit,natms,idnode,mxnode,iatm0,iatm1 ++ real(8) ehit,vxo,vyo,vzo,xhit,yhit,zhit,fac,smass,vel ++ ++c store original particle velocity ++ ++ vxo=vxx(khit) ++ vyo=vyy(khit) ++ vzo=vzz(khit) ++ ++c determine recoil velocity ++ ++ vel=sqrt(2.d0*ehit/(weight(khit)*(xhit**2+yhit**2+zhit**2))) ++ ++c reassign particle velocity ++ ++ vxx(khit)=vel*xhit ++ vyy(khit)=vel*yhit ++ vzz(khit)=vel*zhit ++ ++c determine system mass ++ ++ smass=getmass(natms,idnode,mxnode) ++ ++c calculate net system velocity ++ ++ vxo=(vxx(khit)-vxo)*weight(khit)/smass ++ vyo=(vyy(khit)-vyo)*weight(khit)/smass ++ vzo=(vzz(khit)-vzo)*weight(khit)/smass ++ ++c reset system net velocity to zero ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vxo ++ vyy(i)=vyy(i)-vyo ++ vzz(i)=vzz(i)-vzo ++ ++ enddo ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ return ++ end subroutine impact ++ ++ end module temp_scalers_module +diff -urN dl_class_1.9.orig/srcmod/tersoff_module.f dl_class_1.9/srcmod/tersoff_module.f +--- dl_class_1.9.orig/srcmod/tersoff_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/tersoff_module.f 2011-04-16 16:13:06.000000000 +0200 +@@ -0,0 +1,1011 @@ ++ module tersoff_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining tersoff potential arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ integer, allocatable :: lstter(:),ltpter(:),lattsf(:) ++ real(8), allocatable :: prmter(:,:),prmter2(:,:) ++ real(8), allocatable :: vmbp(:,:,:),gmbp(:,:,:) ++ real(8), allocatable :: xtf(:),ytf(:),ztf(:),rtf(:) ++ real(8), allocatable :: ert(:),eat(:),grt(:),gat(:) ++ real(8), allocatable :: scr(:),gcr(:),gam(:),gvr(:) ++ ++ save xtf,ytf,ztf,rtf,ert,eat,grt,gat,scr,gcr,gam,filter ++ save prmter,prmter2,lstter,ltpter,lattsf,vmbp,gmbp ++ ++ contains ++ ++ subroutine alloc_ter_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=20 ++ ++ integer i,fail,idnode,npairs ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ npairs=(mxter*(mxter+1))/2 ++ allocate (prmter(mxter,mxpter),stat=fail(1)) ++ allocate (prmter2(2,npairs),stat=fail(2)) ++ allocate (lstter(mxter),stat=fail(3)) ++ allocate (ltpter(mxter),stat=fail(4)) ++ allocate (lattsf(mxatms),stat=fail(5)) ++ allocate (xtf(mxatms),stat=fail(6)) ++ allocate (ytf(mxatms),stat=fail(7)) ++ allocate (ztf(mxatms),stat=fail(8)) ++ allocate (rtf(mxatms),stat=fail(9)) ++ allocate (ert(mxatms),stat=fail(10)) ++ allocate (eat(mxatms),stat=fail(11)) ++ allocate (grt(mxatms),stat=fail(12)) ++ allocate (gat(mxatms),stat=fail(13)) ++ allocate (scr(mxatms),stat=fail(14)) ++ allocate (gcr(mxatms),stat=fail(15)) ++ allocate (gam(mxatms),stat=fail(16)) ++ allocate (gvr(mxatms),stat=fail(17)) ++ allocate (vmbp(mxgrid,npairs,3),stat=fail(18)) ++ allocate (gmbp(mxgrid,npairs,3),stat=fail(19)) ++ allocate (filter(mxsite),stat=fail(20)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1945) ++ enddo ++ ++ end subroutine alloc_ter_arrays ++ ++ subroutine define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining tersoff potentials ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1 ++ character*1 message(80) ++ integer fail,idnode,ntpter,ntpatm,i,idum,j,itpter ++ integer keypot,jtpatm,k,katm0,katm1,icross,npairs,ktyp ++ real(8) rctter,engunit ++ real(8), allocatable :: parpot(:) ++ data fail/0/ ++ ++ allocate (parpot(mxpter),stat=fail) ++ if(fail.ne.0)call error(idnode,1955) ++ ++ ntpter=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified tersoff ', ++ x 'atom potentials',i10)") ntpter ++ write(nrite,"(/,/,16x,'atom ',3x,' key',30x, ++ x 'parameters'/,/)") ++ ++ endif ++ if(ntpter.gt.mxter) call error(idnode,88) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ rctter=0.d0 ++ ++ do i=1,mxter ++ lstter(i)=-1 ++ enddo ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ k=0 ++ do i=1,mxter ++ do j=1,i ++ ++ k=k+1 ++ prmter2(1,k)=0.d0 ++ prmter2(2,k)=0.d0 ++ ++ enddo ++ enddo ++ ++ do itpter=1,ntpter ++ ++ do i=1,mxpter ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom0,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'ters') then ++ ++ keypot=1 ++ ++ else ++ ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,1972) ++ ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ! A_i ++ parpot(2)=dblstr(record,lenrec,idum) ! a_i ++ parpot(3)=dblstr(record,lenrec,idum) ! B_i ++ parpot(4)=dblstr(record,lenrec,idum) ! b_i ++ parpot(5)=dblstr(record,lenrec,idum) ! R_i ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ parpot(6)=dblstr(record,lenrec,idum) ! S_i ++ parpot(7)=dblstr(record,lenrec,idum) ! beta_i ++ parpot(8)=dblstr(record,lenrec,idum) ! eta_i ++ parpot(9)=dblstr(record,lenrec,idum) ! c_i ++ parpot(10)=dblstr(record,lenrec,idum) ! d_i ++ parpot(11)=dblstr(record,lenrec,idum) ! h_i ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(16x,a8,2x,a4,2x,1p,5e13.5)") ++ x atom0,keyword(1:4),(parpot(j),j=1,5) ++ write(nrite,"(32x,1p,5e13.5)")(parpot(j),j=6,mxpter) ++ ++ endif ++ ++ katm0=0 ++ ++ do jtpatm=1,ntpatm ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ enddo ++ ++ if(katm0.eq.0)call error(idnode,92) ++ ++ filter(katm0)=.true. ++ ++c convert parameters to internal units ++ ++ if(keypot.eq.1)then ++ ++ parpot(1)=parpot(1)*engunit ++ parpot(3)=parpot(3)*engunit ++ ++ endif ++ if(lstter(katm0).gt.-1) call error(idnode,21) ++ lstter(katm0)=itpter ++ ltpter(itpter)=keypot ++ ++c calculate max tersoff cutoff ++ ++ rctter=max(rctter,parpot(6)) ++ ++c store tersoff single atom potential parameters ++ ++ do i=1,mxpter ++ prmter(itpter,i)=parpot(i) ++ enddo ++ ++ enddo ++ ++ if(rctter.lt.1.d-6)call error(idnode,1953) ++ ++c start processing double atom potential parameters ++ ++ npairs=(ntpter*(ntpter+1))/2 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'number of tersoff ', ++ x 'cross terms',i10)") npairs ++ write(nrite,"(/,/,16x,'atom ','atom ',10x, ++ x 'parameters'/,/)") ++ ++ endif ++ ++ do icross=1,npairs ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call getword(atom0,record,8,lenrec) ++ call getword(atom1,record,8,lenrec) ++ ++ parpot(1)=dblstr(record,lenrec,idum) ! chi_ij ++ parpot(2)=dblstr(record,lenrec,idum) ! omega_ij ++ ++ katm0=0 ++ katm1=0 ++ ++ do jtpatm=1,ntpatm ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0)call error(idnode,92) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ ++ ktyp=loc2(lstter(katm0),lstter(katm1)) ++ prmter2(1,ktyp)=parpot(1) ++ prmter2(2,ktyp)=parpot(2) ++ ++ if(idnode.eq.0)write(nrite,"(16x,a8,a8,1p,2e13.5)") ++ x atom0,atom1,(parpot(j),j=1,2) ++ ++ enddo ++ ++c generate tersoff interpolation arrays ++ ++ call tergen(ntpatm,rctter) ++ ++ return ++ end subroutine define_tersoff ++ ++ subroutine tergen(ntpatm,rctter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating potential energy and ++c force arrays for tersoff forces only ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ntpatm,katm0,katm1,ipt,jpt,kpt,i ++ real(8) dlrpot,rctter,baij,saij,bbij,sbij,rij,sij,att,arg ++ real(8) rrr,rep ++ ++c define grid resolution for potential arrays ++ ++ dlrpot=rctter/dble(mxgrid-4) ++ ++c construct arrays for all types of short ranged potential ++ ++ do katm0=1,ntpatm ++ ++ if(filter(katm0))then ++ ++ ipt=lstter(katm0) ++ ++ do katm1=1,katm0 ++ ++ if(filter(katm1))then ++ ++ jpt=lstter(katm1) ++ ++ if((ltpter(ipt).eq.1).and.(ltpter(jpt).eq.1))then ++ ++ kpt=loc2(ipt,jpt) ++ ++c define tersoff parameters ++ ++ baij=sqrt(prmter(ipt,1)*prmter(jpt,1)) ++ saij=0.5d0*(prmter(ipt,2)+prmter(jpt,2)) ++ bbij=sqrt(prmter(ipt,3)*prmter(jpt,3)) ++ sbij=0.5d0*(prmter(ipt,4)+prmter(jpt,4)) ++ rij=sqrt(prmter(ipt,5)*prmter(jpt,5)) ++ sij=sqrt(prmter(ipt,6)*prmter(jpt,6)) ++ ++c store potential cutoff ++ ++ vmbp(1,kpt,1)=sij ++ ++c calculate screening function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ if(rrr.le.rij)then ++ ++ vmbp(i,kpt,1)=1.d0 ++ gmbp(i,kpt,1)=0.d0 ++ ++ else ++ ++ arg=pi*(rrr-rij)/(sij-rij) ++ vmbp(i,kpt,1)=0.5d0*(1.d0+cos(arg)) ++ gmbp(i,kpt,1)=0.5d0*pi*rrr*sin(arg)/(sij-rij) ++ ++ endif ++ ++ enddo ++ ++c calculate screened repulsion function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ rep=baij*exp(-saij*rrr) ++ vmbp(i,kpt,2)=rep*vmbp(i,kpt,1) ++ gmbp(i,kpt,2)=rep*(gmbp(i,kpt,1)+ ++ x saij*rrr*vmbp(i,kpt,1)) ++ ++ enddo ++ ++c calculate screened attraction function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ att=bbij*exp(-sbij*rrr) ++ vmbp(i,kpt,3)=att*vmbp(i,kpt,1) ++ gmbp(i,kpt,3)=att*(gmbp(i,kpt,1)+ ++ x sbij*rrr*vmbp(i,kpt,1)) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine tergen ++ ++ subroutine tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating potential and forces ++c due to a tersoff potential ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped, cubic or orthorhombic ++c cell geometry ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,natms,imcon,nix,niy,niz,i,j,nbx ++ integer nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz,jcell,iter ++ integer limit,ii,iatm ++ real(8) rctter,engter,virter,xm,ym,zm,det,cprp ++ real(8) xdc,ydc,zdc,sxx,syy,szz,strs ++ ++ dimension nix(27),niy(27),niz(27),cprp(10),strs(6) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise potential energy and virial ++ ++ engter=0.d0 ++ virter=0.d0 ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ cell(1)=2.d0*xm+rctter ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rctter ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rctter ++ ++ endif ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,1974) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rctter+1.d-6)) ++ nby=int(cprp(8)/(rctter+1.d-6)) ++ nbz=int(cprp(9)/(rctter+1.d-6)) ++ if(nbx.lt.3.or.nby.lt.3.or.nbz.lt.3)then ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,'(a,3i5)') ++ x 'tersoff link cell decomposition is',nbx,nby,nbz ++ ++ endif ++ ++ call error(idnode,1977) ++ ++ endif ++ ncells=nbx*nby*nbz ++ ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,'(a,i6)') ++ x 'number of required link cells in tersoff.f is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in tersoff.f is ',mxcell ++ call error(idnode,1976) ++ ++ endif ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of angles ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++c construct mini-list of neighbour cell contents ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ lattsf(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ iatm=lattsf(ii) ++ iter=lstter(ltype(iatm)) ++ ++ if(mod(iatm,mxnode).eq.idnode.and.iter.ge.0)then ++ ++c construct working arrays by interpolation ++ ++ call terint(iatm,limit,rctter) ++ ++c calculate three body (attractive) terms ++ ++ call tersoff3(ii,limit,engter,virter,strs) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c calculate stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,1978) ++ ++c global sum of three body potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engter ++ buffer(2)=virter ++ call gdsum(buffer(1),2,buffer(3)) ++ engter=buffer(1) ++ virter=buffer(2) ++ ++ endif ++ ++c remove effect of double counting ++ ++ engter=0.5d0*engter ++ virter=0.5d0*virter ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++ return ++ end subroutine tersoff ++ ++ subroutine terint(iatm,limit,rctter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing working arrays for ++c a tersoff potential using interpolation ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,jatm,jj,limit,iter,jter,jjter,ll ++ real(8) rctter,sxij,syij,szij,ppp,t1,t2,rdr ++ real(8) vk0,vk1,vk2,gk0,gk1,gk2 ++ ++ rdr=dble(mxgrid-4)/rctter ++ iter=lstter(ltype(iatm)) ++ ++c initialise working arrays ++ ++ do jj=1,limit ++ ++ xtf(jj)=0.d0 ++ ytf(jj)=0.d0 ++ ztf(jj)=0.d0 ++ rtf(jj)=0.d0 ++ ert(jj)=0.d0 ++ eat(jj)=0.d0 ++ grt(jj)=0.d0 ++ gat(jj)=0.d0 ++ scr(jj)=0.d0 ++ gcr(jj)=0.d0 ++ ++ enddo ++ ++c construct working arrays ++ ++ do jj=1,limit ++ ++ jatm=lattsf(jj) ++ jter=lstter(ltype(jatm)) ++ ++ if(jatm.ne.iatm.and.jter.ge.0)then ++ ++ sxij=xxx(jatm)-xxx(iatm) ++ sxij=sxij-nint(sxij) ++ syij=yyy(jatm)-yyy(iatm) ++ syij=syij-nint(syij) ++ szij=zzz(jatm)-zzz(iatm) ++ szij=szij-nint(szij) ++ ++ xtf(jj)=cell(1)*sxij+cell(4)*syij+cell(7)*szij ++ ytf(jj)=cell(2)*sxij+cell(5)*syij+cell(8)*szij ++ ztf(jj)=cell(3)*sxij+cell(6)*syij+cell(9)*szij ++ rtf(jj)=sqrt(xtf(jj)**2+ytf(jj)**2+ztf(jj)**2) ++ xtf(jj)=xtf(jj)/rtf(jj) ++ ytf(jj)=ytf(jj)/rtf(jj) ++ ztf(jj)=ztf(jj)/rtf(jj) ++ ++ jjter=loc2(iter,jter) ++ if(rtf(jj).le.vmbp(1,jjter,1))then ++ ++ ll=int(rdr*rtf(jj)) ++ ppp=rtf(jj)*rdr-dble(ll) ++ ++c interpolate screening function ++ ++ vk0=vmbp(ll,jjter,1) ++ vk1=vmbp(ll+1,jjter,1) ++ vk2=vmbp(ll+2,jjter,1) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ scr(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of screening function ++ ++ gk0=gmbp(ll,jjter,1) ++ gk1=gmbp(ll+1,jjter,1) ++ gk2=gmbp(ll+2,jjter,1) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gcr(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++c interpolate repulsive component of energy ++ ++ vk0=vmbp(ll,jjter,2) ++ vk1=vmbp(ll+1,jjter,2) ++ vk2=vmbp(ll+2,jjter,2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ert(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of repulsive function ++ ++ gk0=gmbp(ll,jjter,2) ++ gk1=gmbp(ll+1,jjter,2) ++ gk2=gmbp(ll+2,jjter,2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ grt(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++c interpolate attractive component of energy ++ ++ vk0=vmbp(ll,jjter,3) ++ vk1=vmbp(ll+1,jjter,3) ++ vk2=vmbp(ll+2,jjter,3) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ eat(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of attractive function ++ ++ gk0=gmbp(ll,jjter,3) ++ gk1=gmbp(ll+1,jjter,3) ++ gk2=gmbp(ll+2,jjter,3) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gat(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine terint ++ ++ subroutine tersoff3(ii,limit,engter,virter,strs) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating three body contributions ++c to a tersoff potential and tersoff potential, virial and ++c atomic forces ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical flag ++ integer iatm,jatm,katm,limit,ii,jj,kk ++ integer iter,jter,kter,jjter,kkter ++ real(8) cost,gtheta,ci,di,hi,gamma,gam_j,gam_k,eterm,gterm,strs ++ real(8) fxa,fya,fza,fxc,fyc,fzc,engter,virter,vterm,gam_ij,bi,ei ++ ++ dimension strs(6) ++ ++ iatm=lattsf(ii) ++ iter=lstter(ltype(iatm)) ++ ++ bi=prmter(iter,7) ++ ei=prmter(iter,8) ++ ci=prmter(iter,9) ++ di=prmter(iter,10) ++ hi=prmter(iter,11) ++ ++ do jj=1,limit ++ ++ jatm=lattsf(jj) ++ jter=lstter(ltype(jatm)) ++ if(jter.ge.0.and.iatm.ne.jatm)then ++ ++ jjter=loc2(iter,jter) ++ if(rtf(jj).le.vmbp(1,jjter,1))then ++ ++ flag=.false. ++ ++c potential energy and virial terms ++ ++ vterm=0.d0 ++ eterm=0.d0 ++ ++c initialise work arrays ++ ++ do kk=1,limit ++ ++ gam(kk)=0.d0 ++ gvr(kk)=0.d0 ++ ++ enddo ++ ++c calculate bond factor ++ ++ do kk=1,limit ++ ++ katm=lattsf(kk) ++ kter=lstter(ltype(katm)) ++ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then ++ ++ kkter=loc2(iter,kter) ++ ++ if(rtf(kk).le.vmbp(1,kkter,1))then ++ ++ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ztf(jj)*ztf(kk)) ++ gtheta=1.d0+(ci/di)**2-ci**2/(di**2+(hi-cost)**2) ++ eterm=eterm+gtheta*prmter2(2,kkter)*scr(kk) ++ vterm=vterm+gtheta*prmter2(2,kkter)*gcr(kk)*rtf(kk) ++ gvr(kk)=2.d0*ci**2*(hi-cost)/(di**2+(hi-cost)**2)**2 ++ gam(kk)=gtheta ++ flag=.true. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(flag)then ++ ++c tersoff energy and virial ++ ++ gam_ij=prmter2(1,jjter)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei) ++ gamma=0.5d0*prmter2(1,jjter)*bi*(bi*eterm)**(ei-1.d0)* ++ x eat(jj)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei-1.d0) ++ engter=engter+ert(jj)-gam_ij*eat(jj) ++ virter=virter+gamma*vterm+(grt(jj)-gam_ij*gat(jj))*rtf(jj) ++ ++c calculate 3-body forces ++ ++ do kk=1,limit ++ ++ katm=lattsf(kk) ++ kter=lstter(ltype(katm)) ++ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then ++ ++ kkter=loc2(iter,kter) ++ if(rtf(kk).le.vmbp(1,kkter,1))then ++ ++ gam_j=0.5d0*gamma*prmter2(2,kkter)*scr(kk)*gvr(kk) ++ gam_k=0.5d0*gamma*prmter2(2,kkter)*gcr(kk)*gam(kk) ++ ++c calculate contribution to atomic forces ++ ++ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ ++ x ztf(jj)*ztf(kk)) ++ ++ fxa=gam_j*(xtf(kk)-xtf(jj)*cost)/rtf(jj) ++ fya=gam_j*(ytf(kk)-ytf(jj)*cost)/rtf(jj) ++ fza=gam_j*(ztf(kk)-ztf(jj)*cost)/rtf(jj) ++ ++ fxc=gam_j*(xtf(jj)-xtf(kk)*cost)/rtf(kk)- ++ x gam_k*xtf(kk) ++ fyc=gam_j*(ytf(jj)-ytf(kk)*cost)/rtf(kk)- ++ x gam_k*ytf(kk) ++ fzc=gam_j*(ztf(jj)-ztf(kk)*cost)/rtf(kk)- ++ x gam_k*ztf(kk) ++ ++ fxx(jatm)=fxx(jatm)+fxa ++ fyy(jatm)=fyy(jatm)+fya ++ fzz(jatm)=fzz(jatm)+fza ++ ++ fxx(iatm)=fxx(iatm)-(fxa+fxc) ++ fyy(iatm)=fyy(iatm)-(fya+fyc) ++ fzz(iatm)=fzz(iatm)-(fza+fzc) ++ ++ fxx(katm)=fxx(katm)+fxc ++ fyy(katm)=fyy(katm)+fyc ++ fzz(katm)=fzz(katm)+fzc ++ ++c calculate contributions to stress tensor ++ ++ strs(1)=strs(1)+(fxa*xtf(jj)*rtf(jj)+ ++ x fxc*xtf(kk)*rtf(kk)) ++ strs(2)=strs(2)+(fxa*ytf(jj)*rtf(jj)+ ++ x fxc*ytf(kk)*rtf(kk)) ++ strs(3)=strs(3)+(fxa*ztf(jj)*rtf(jj)+ ++ x fxc*ztf(kk)*rtf(kk)) ++ strs(4)=strs(4)+(fya*ytf(jj)*rtf(jj)+ ++ x fyc*ytf(kk)*rtf(kk)) ++ strs(5)=strs(5)+(fya*ztf(jj)*rtf(jj)+ ++ x fyc*ztf(kk)*rtf(kk)) ++ strs(6)=strs(6)+(fza*ztf(jj)*rtf(jj)+ ++ x fzc*ztf(kk)*rtf(kk)) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ gam_ij=prmter2(1,jjter) ++ engter=engter+ert(jj)-gam_ij*eat(jj) ++ virter=virter+(grt(jj)-gam_ij*gat(jj))*rtf(jj) ++ ++ endif ++ ++c calculate two body force terms ++ ++ gterm=0.5d0*(grt(jj)-gam_ij*gat(jj)) ++ fxx(iatm)=fxx(iatm)+xtf(jj)*gterm ++ fyy(iatm)=fyy(iatm)+ytf(jj)*gterm ++ fzz(iatm)=fzz(iatm)+ztf(jj)*gterm ++ fxx(jatm)=fxx(jatm)-xtf(jj)*gterm ++ fyy(jatm)=fyy(jatm)-ytf(jj)*gterm ++ fzz(jatm)=fzz(jatm)-ztf(jj)*gterm ++ ++c calculate contributions to stress tensor ++ ++ strs(1)=strs(1)-gterm*rtf(jj)*xtf(jj)*xtf(jj) ++ strs(2)=strs(2)-gterm*rtf(jj)*xtf(jj)*ytf(jj) ++ strs(3)=strs(3)-gterm*rtf(jj)*xtf(jj)*ztf(jj) ++ strs(4)=strs(4)-gterm*rtf(jj)*ytf(jj)*ytf(jj) ++ strs(5)=strs(5)-gterm*rtf(jj)*ytf(jj)*ztf(jj) ++ strs(6)=strs(6)-gterm*rtf(jj)*ztf(jj)*ztf(jj) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine tersoff3 ++ ++ end module tersoff_module +diff -urN dl_class_1.9.orig/srcmod/tether_module.f dl_class_1.9/srcmod/tether_module.f +--- dl_class_1.9.orig/srcmod/tether_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/tether_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,447 @@ ++ module tether_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining tether potential arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmtet(:,:) ++ integer, allocatable :: listtet(:,:) ++ integer, allocatable :: numteth(:),keytet(:),lsttet(:) ++ real(8), allocatable :: xxs(:),yys(:),zzs(:) ++ ++ save prmtet,lsttet,listtet,numteth,keytet,xxs,yys,zzs ++ ++ contains ++ ++ subroutine alloc_tet_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (prmtet(mxteth,mxpbnd),stat=fail(1)) ++ allocate (numteth(mxtmls),stat=fail(2)) ++ allocate (keytet(mxteth),stat=fail(3)) ++ allocate (lsttet(mxteth),stat=fail(4)) ++ allocate (listtet(msteth,2),stat=fail(5)) ++ allocate (xxs(mxatms),stat=fail(6)) ++ allocate (yys(mxatms),stat=fail(7)) ++ allocate (zzs(mxatms),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1260) ++ enddo ++ ++ do i=1,mxtmls ++ numteth(i)=0 ++ enddo ++ ++ end subroutine alloc_tet_arrays ++ ++ subroutine define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining tether bonds ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ real(8) engunit ++ integer idnode,itmols,nteth,nsite,ntmp,iteth,iteth1,idum ++ integer iatm1,isite1,j,i ++ ++ ntmp=intstr(record,lenrec,idum) ++ numteth(itmols)=numteth(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of tethered atoms ', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,' tethered atom details:',/,/, ++ x 21x,7x,'key',6x,'atom',19x,'parameters',/) ") ++ endif ++ ++ iteth1=numteth(itmols) ++ do iteth=1,iteth1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ call strip(record,lenrec) ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ iatm1=intstr(record,lenrec,idum) ++ ++c test for frozen atom ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ ++ if(lfzsit(isite1).ne.0)then ++ ++ numteth(itmols)=numteth(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nteth=nteth+1 ++ if(nteth.gt.mxteth)call error(idnode,62) ++ ++ if(keyword(1:4).eq.'harm')then ++ keytet(nteth)=1 ++ elseif(keyword(1:4).eq.'rhrm')then ++ keytet(nteth)=2 ++ elseif(keyword(1:4).eq.'quar')then ++ keytet(nteth)=3 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,450) ++ endif ++ ++ lsttet(nteth)=iatm1 ++ prmtet(nteth,1)=dblstr(record,lenrec,idum) ++ prmtet(nteth,2)=dblstr(record,lenrec,idum) ++ prmtet(nteth,3)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,i10,1p,9e12.4)") ++ x keyword(1:4),lsttet(nteth), ++ x (prmtet(nteth,j),j=1,mxpbnd) ++ ++c convert energy units to internal units ++ ++ if(abs(keytet(nteth)).eq.1)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ elseif(abs(keytet(nteth)).eq.2)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ elseif(abs(keytet(nteth)).eq.3)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ prmtet(nteth,2)=prmtet(nteth,2)*engunit ++ prmtet(nteth,3)=prmtet(nteth,3)*engunit ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_tethers ++ ++ subroutine tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c*********************************************************************** ++c ++c dl_poly routine to tether atoms to initial positions ++c includes stress tensor ++c ++c replicated data version : block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester feb 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,imcon,natms,nstep,ntteth,i,ii,ia,kk ++ integer itet1,itet2,fail ++ ++ real(8) engtet,virtet,rab ++ real(8) rrab,omega,gamma ++ ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ ++ data safe/.true./ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) ++ if(fail.ne.0)call error(idnode,1270) ++ ++c set up reference positions at start of job ++ ++ if(nstep.le.1)then ++ ++ do i=1,natms ++ ++ xxs(i)=xxx(i) ++ yys(i)=yyy(i) ++ zzs(i)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++c check size of work arrays ++ ++ if((ntteth-mxnode+1)/mxnode.gt.msbad) call error(idnode,420) ++ ++c block indices ++ ++ itet1=(idnode*ntteth)/mxnode+1 ++ itet2=((idnode+1)*ntteth)/mxnode ++ ++ ii=0 ++ do i=itet1,itet2 ++ ++ ii=ii+1 ++ ++c atomic index ++ ++ ia= listtet(ii,2) ++ ++c tether vector ++ ++ xdab(ii)=xxx(ia)-xxs(ia) ++ ydab(ii)=yyy(ia)-yys(ia) ++ zdab(ii)=zzz(ia)-zzs(ia) ++ ++ enddo ++ ++c ignore periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ ++c zero tether energy and virial accumulators ++ ++ engtet=0.d0 ++ virtet=0.d0 ++ ++c loop over all specified tethered atoms ++ ++ ii=0 ++ do i=itet1,itet2 ++ ++ ii=ii+1 ++ ++c define components of bond vector ++ ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ ++c check for possible zero length vector ++ ++ if(rab.lt.1.d-10)then ++ ++ rrab =0.d0 ++ ++ else ++ ++ rrab=1.d0/rab ++ ++ endif ++ ++c index of potential function parameters ++ ++ kk=listtet(ii,1) ++ ++c calculate scalar constant terms ++ ++ if(keytet(kk).eq.1)then ++ ++c harmonic function ++ ++ omega=0.5d0*prmtet(kk,1)*rab**2 ++ gamma=prmtet(kk,1) ++ ++ elseif(keytet(kk).eq.2)then ++ ++c restrained harmonic: ++ ++ omega=0.5d0*prmtet(kk,1)*(min(rab,prmtet(kk,2)))**2 ++ x +prmtet(kk,1)*prmtet(kk,2)* ++ x (sign(max(rab-prmtet(kk,2),0.d0),rab)) ++ gamma=prmtet(kk,1)*(sign(min(rab,prmtet(kk,2)),rab))*rrab ++ ++ elseif(keytet(kk).eq.3)then ++ ++c quartic potential ++ ++ omega=0.5d0*prmtet(kk,1)*rab**2 + ++ x 1.d0/3.d0*prmtet(kk,2)*rab**3+ ++ x 0.25d0*prmtet(kk,3)*rab**4 ++ gamma=(prmtet(kk,1)*rab + ++ x prmtet(kk,2)*rab**2 + ++ x prmtet(kk,3)*rab**3)*rrab ++ ++ else ++ safe=.false. ++ omega=0.d0 ++ gamma=0.d0 ++ endif ++ ++ gamma=-gamma ++ ++c calculate tether energy and virial ++ ++ engtet=engtet+omega ++ virtet=virtet-gamma*rab*rab ++ ++c index of atom ++ ++ ia=listtet(ii,2) ++ ++c calculate atomic forces ++ ++ fxx(ia)=fxx(ia)+gamma*xdab(ii) ++ fyy(ia)=fyy(ia)+gamma*ydab(ii) ++ fzz(ia)=fzz(ia)+gamma*zdab(ii) ++ ++c stress tensor ++ ++ stress(1)=stress(1)+xdab(ii)*gamma*xdab(ii) ++ stress(2)=stress(2)+xdab(ii)*gamma*ydab(ii) ++ stress(3)=stress(3)+xdab(ii)*gamma*zdab(ii) ++ stress(4)=stress(4)+ydab(ii)*gamma*xdab(ii) ++ stress(5)=stress(5)+ydab(ii)*gamma*ydab(ii) ++ stress(6)=stress(6)+ydab(ii)*gamma*zdab(ii) ++ stress(7)=stress(7)+zdab(ii)*gamma*xdab(ii) ++ stress(8)=stress(8)+zdab(ii)*gamma*ydab(ii) ++ stress(9)=stress(9)+zdab(ii)*gamma*zdab(ii) ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,450) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(3)=engtet ++ buffer(4)=virtet ++ ++ call gdsum(buffer(3),2,buffer(1)) ++ ++ engtet=buffer(3) ++ virtet=buffer(4) ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail) ++ ++ return ++ end subroutine tethfrc ++ ++ subroutine xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++c*********************************************************************** ++c ++c dl_poly routine to scale positions with change in box shape ++c ++c parallel replicated data version ++c ++c copyright daresbury laboratory 1995 ++c author t.forester october 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,keyens,imcon,iatm0,iatm1,i ++ real(8) tstep,xa,ya,za,totmas,xcmo,ycmo,zcmo ++ ++c assign block of atoms to processor ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if((keyens.eq.4).or.(keyens.eq.6))then ++ ++c berendsen npt/nst ++ ++ do i=iatm0,iatm1 ++ ++ xa=eta(1)*xxs(i)+eta(2)*yys(i)+eta(3)*zzs(i) ++ ya=eta(4)*xxs(i)+eta(5)*yys(i)+eta(6)*zzs(i) ++ za=eta(7)*xxs(i)+eta(8)*yys(i)+eta(9)*zzs(i) ++ ++ xxs(i)=xa ++ yys(i)=ya ++ zzs(i)=za ++ ++ enddo ++ ++ elseif(keyens.eq.5.or.keyens.eq.7)then ++ ++c hoover npt/nst ++ ++ totmas=0.d0 ++ do i=1,natms ++ if(rmass(i).gt.0.d0)totmas=totmas+weight(i) ++ enddo ++ ++ xcmo=0.d0 ++ ycmo=0.d0 ++ zcmo=0.d0 ++ ++ do i=1,natms ++ ++ if(rmass(i).gt.0.d0)then ++ ++ xcmo=xcmo+weight(i)*xxs(i) ++ ycmo=ycmo+weight(i)*yys(i) ++ zcmo=zcmo+weight(i)*zzs(i) ++ ++ endif ++ ++ enddo ++ xcmo=xcmo/totmas ++ ycmo=ycmo/totmas ++ zcmo=zcmo/totmas ++ ++ do i=iatm0,iatm1 ++ ++ xa=xxs(i)-xcmo ++ ya=yys(i)-ycmo ++ za=zzs(i)-zcmo ++ ++ xxs(i)=xxs(i)+tstep*(eta(1)*xa+eta(2)*ya+eta(3)*za) ++ yys(i)=yys(i)+tstep*(eta(2)*xa+eta(5)*ya+eta(6)*za) ++ zzs(i)=zzs(i)+tstep*(eta(3)*xa+eta(6)*ya+eta(9)*za) ++ ++ enddo ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxs,yys,zzs) ++ ++ endif ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxs,yys,zzs,buffer) ++ ++ return ++ end subroutine xscale ++ ++ end module tether_module ++ +diff -urN dl_class_1.9.orig/srcmod/three_body_module.f dl_class_1.9/srcmod/three_body_module.f +--- dl_class_1.9.orig/srcmod/three_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/three_body_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,882 @@ ++ module three_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining three-body potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - w. smith aug 2008 : solvation, free energy excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ real(8), allocatable :: prmtbp(:,:),rcut3b(:) ++ integer, allocatable :: lsttbp(:),ltptbp(:),lattbp(:) ++ ++ save prmtbp,rcut3b,lsttbp,ltptbp,lattbp,filter ++ ++ contains ++ ++ subroutine alloc_tbp_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(6) ++ ++ do i=1,6 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmtbp(mxtbp,mxptbp),stat=fail(1)) ++ allocate (rcut3b(mxtbp),stat=fail(2)) ++ allocate (lsttbp(mxtbp),stat=fail(3)) ++ allocate (ltptbp(mxtbp),stat=fail(4)) ++ allocate (lattbp(mxatms),stat=fail(5)) ++ allocate (filter(mxsite),stat=fail(6)) ++ ++ do i=1,6 ++ if(fail(i).gt.0)call error(idnode,1170) ++ enddo ++ ++ end subroutine alloc_tbp_arrays ++ ++ subroutine define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining three body potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1,atom2 ++ character*1 message(80) ++ integer idnode,ntptbp,ntpatm,fail,i,itbp,itptbp,keypot ++ integer idum,katm1,katm2,katm0,j,keytbp,ktbp,jtpatm ++ real(8) rcuttb,engunit ++ real(8), allocatable :: parpot(:) ++ ++ data fail/0/ ++ ++ allocate (parpot(mxptbp),stat=fail) ++ if(fail.ne.0)call error(idnode,1180) ++ ++ ntptbp=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified three ', ++ x 'body potentials',i10)") ntptbp ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', ++ x 3x,' key',30x,'parameters'/,/)") ++ ++ endif ++ if(ntptbp.gt.mxtbp) call error(idnode,83) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ do itbp=1,mxtbp ++ lsttbp(itbp)=0 ++ enddo ++ ++ do itbp=1,mxtbp,mx2tbp ++ lsttbp(itbp)=-1 ++ enddo ++ ++ rcuttb=0.d0 ++ ++ do itptbp=1,ntptbp ++ ++ do i=1,mxptbp ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++c Note the order!! atom0 is central ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom0,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call lowcase(record,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'harm') then ++ keypot=0 ++ elseif(keyword(1:4).eq.'thrm') then ++ keypot=1 ++ elseif(keyword(1:4).eq.'shrm') then ++ keypot=2 ++ elseif(keyword(1:4).eq.'bvs1') then ++ keypot=3 ++ elseif(keyword(1:4).eq.'bvs2') then ++ keypot=4 ++ elseif(keyword(1:4).eq.'hbnd') then ++ keypot=5 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,442) ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ parpot(4)=dblstr(record,lenrec,idum) ++ parpot(5)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,3a8,4x,a4,1x,1p,9e13.5)") ++ x atom1,atom0,atom2,keyword(1:4),(parpot(j),j=1,mxptbp) ++ ++ katm0=0 ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0) ++ x call error(idnode,84) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ filter(katm2)=.true. ++ ++ keytbp=(max(katm1,katm2)*(max(katm1,katm2)-1))/2+ ++ x min(katm1,katm2)+(katm0-1)*mx2tbp ++ ++ if(keytbp.gt.mxtbp) call error(idnode,86) ++ ++c convert parameters to internal units ++ ++ parpot(1)=parpot(1)*engunit ++ if(keypot.ne.5)parpot(2)=parpot(2)*(pi/180.d0) ++ ++ if(lsttbp(keytbp).gt.0) call error(idnode,18) ++ lsttbp(keytbp)=itptbp ++ ltptbp(itptbp)=keypot ++ ktbp=mx2tbp*((keytbp-1)/mx2tbp)+1 ++ if(lsttbp(ktbp).lt.0)lsttbp(ktbp)=0 ++ ++c calculate max three body cutoff ++ ++ rcuttb=max(rcuttb,parpot(5)) ++ rcut3b(itptbp)=parpot(5) ++ ++c store three body potential parameters ++ ++ do i=1,4 ++ prmtbp(itptbp,i)=parpot(i) ++ enddo ++ if(mxptbp.ge.6) then ++ do i=6,mxptbp ++ prmtbp(itptbp,i-1)=parpot(i-1) ++ enddo ++ endif ++ enddo ++ ++ if(rcuttb.lt.1.d-6)call error(idnode,451) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_three_body ++ ++ subroutine thbfrc ++ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating three body forces arising ++c from the included angle between three atoms ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped cell geometry ++c ++c copyright - daresbury laboratory 1994 ++c author - w.smith mar 1994 ++c adapted - w.smith aug 2008 solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lskip ++ logical idrive,jdrive,kdrive ++ integer idnode,mxnode,natms,imcon,nix,niy,niz ++ integer i,nbx,nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz ++ integer j,jcell,ii,itbp,limit,last,ktbp,jtbp,jktbp,kktbp ++ integer ia,ib,ic,ktyp,jj,jk,kkk ++ real(8) rcuttb,engtbp,virtbp,tterm,uterm,xm,ym,zm,cprp,det ++ real(8) xdc,ydc,zdc,sxx,syy,szz,sxab,syab,szab,xab,yab,zab ++ real(8) rab,sxbc,sybc,szbc,xbc,ybc,zbc,rbc,xac,yac,zac,rac ++ real(8) rrab,rrbc,rrac,cost,sint,theta,pterm,gamma,vterm ++ real(8) gamsa,gamsb,gamsc,scrn,fxa,fya,fza,fxc,fyc,fzc,strs ++ real(8) strs_loc ++ ++ dimension nix(27),niy(27),niz(27),cprp(10),strs(6),strs_loc(9) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++ lskip=(lfree.or.lexcite) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ engtbp=0.d0 ++ virtbp=0.d0 ++ tbp_fre=0.d0 ++ tbp_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(8)=.true. ++ en3_sol(:)=0.d0 ++ if(lexcite)en3_exc(:)=0.d0 ++ ++ endif ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ do i=1,natms ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ enddo ++ ++ cell(1)=2.d0*xm+rcuttb ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rcuttb ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rcuttb ++ ++ endif ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,67) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rcuttb+1.d-6)) ++ nby=int(cprp(8)/(rcuttb+1.d-6)) ++ nbz=int(cprp(9)/(rcuttb+1.d-6)) ++ ncells=nbx*nby*nbz ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,'(a,i6)') ++ x 'number of required link cells in routine thbfrc is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in routine thbfrc is ',mxcell ++ call error(idnode,69) ++ ++ endif ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of angles ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++c construct mini-list of neighbour cell contents ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ lattbp(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ i=lattbp(ii) ++ itbp=mx2tbp*(ltype(i)-1) ++ if(mod(i,mxnode).eq.idnode.and.lsttbp(itbp+1).ge.0)then ++ ++ last=limit ++ ++ do kk=1,limit/2 ++ ++ if(kk.gt.(limit-1)/2)last=limit/2 ++ ++ do jj=1,last ++ ++ j=lattbp(jj) ++ jk=jj+kk ++ if(jk.gt.limit)jk=jk-limit ++ k=lattbp(jk) ++ if(i.ne.j.and.i.ne.k)then ++ ++ jtbp=max(ltype(j),ltype(k)) ++ ktbp=min(ltype(j),ltype(k)) ++ jktbp=itbp+(jtbp*(jtbp-1))/2+ktbp ++ kktbp=lsttbp(jktbp) ++ if(kktbp.gt.0)then ++ ++c make labels etc consistent with angfrc.f ++ ++ ia=j ++ ib=i ++ ic=k ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ++ endif ++ ++ if(lskip)then ++ ++ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. ++ x atm_fre(ic).eq.1).and.(atm_fre(ia).eq.2.or. ++ x atm_fre(ib).eq.2.or.atm_fre(ic).eq.2))cycle ++ ++ endif ++ ++ sxab=xxx(ia)-xxx(ib) ++ sxab=sxab-nint(sxab) ++ syab=yyy(ia)-yyy(ib) ++ syab=syab-nint(syab) ++ szab=zzz(ia)-zzz(ib) ++ szab=szab-nint(szab) ++ ++ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab ++ if(abs(xab).lt.rcuttb)then ++ ++ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab ++ if(abs(yab).lt.rcuttb)then ++ ++ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab ++ if(abs(zab).lt.rcuttb)then ++ ++ sxbc=xxx(ic)-xxx(ib) ++ sxbc=sxbc-nint(sxbc) ++ sybc=yyy(ic)-yyy(ib) ++ sybc=sybc-nint(sybc) ++ szbc=zzz(ic)-zzz(ib) ++ szbc=szbc-nint(szbc) ++ ++ xbc=cell(1)*sxbc+cell(4)*sybc+cell(7)*szbc ++ if(abs(xbc).lt.rcuttb)then ++ ++ ybc=cell(2)*sxbc+cell(5)*sybc+cell(8)*szbc ++ if(abs(ybc).lt.rcuttb)then ++ ++ zbc=cell(3)*sxbc+cell(6)*sybc+cell(9)*szbc ++ if(abs(zbc).lt.rcuttb)then ++ ++ ktyp=ltptbp(kktbp) ++ rab=sqrt(xab*xab+yab*yab+zab*zab) ++ rbc=sqrt(xbc*xbc+ybc*ybc+zbc*zbc) ++ ++ if(rcut3b(kktbp).ge.max(rab,rbc))then ++ ++ xac=xab-xbc ++ yac=yab-ybc ++ zac=zab-zbc ++ rac=sqrt(xac*xac+yac*yac+zac*zac) ++ ++ rrab=1.d0/rab ++ rrbc=1.d0/rbc ++ rrac=1.d0/rac ++ ++c normalise direction vectors ++ ++ xab=xab*rrab ++ yab=yab*rrab ++ zab=zab*rrab ++ ++ xbc=xbc*rrbc ++ ybc=ybc*rrbc ++ zbc=zbc*rrbc ++ ++ xac=xac*rrac ++ yac=yac*rrac ++ zac=zac*rrac ++ ++ cost=(xab*xbc+yab*ybc+zab*zbc) ++ if(abs(cost).gt.1.d0)cost=sign(1.d0,cost) ++ if(ktyp.ne.5)then ++ ++ sint=max(1.d-8,sqrt(1.d0-cost*cost)) ++ theta=acos(cost) ++ ++ endif ++ ++ if(ktyp.eq.0)then ++ ++c harmonic angle potential ++ ++ pterm=0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ gamma=prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.1)then ++ ++c truncated harmonic valence angle potential ++ ++ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,3)**8) ++ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,3)**8 ++ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ gamsa=(8.d0*pterm/prmtbp(kktbp,3)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmtbp(kktbp,3)**8)*rbc**7 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.2)then ++ ++c screened harmonic valence angle potential ++ ++ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) ++ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) ++ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ gamsa=(pterm/prmtbp(kktbp,3)) ++ gamsc=(pterm/prmtbp(kktbp,4)) ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.3)then ++ ++c screened vessal potential type 1 ++ ++ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) ++ pterm=scrn*prmtbp(kktbp,1)/ ++ x (8.d0*(prmtbp(kktbp,2)-pi)**2)* ++ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)**2 ++ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) ++ gamma=scrn*prmtbp(kktbp,1)/ ++ x (2.d0*(prmtbp(kktbp,2)-pi)**2)* ++ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)*(theta-pi)/sint ++ gamsa=(pterm/prmtbp(kktbp,3)) ++ gamsc=(pterm/prmtbp(kktbp,4)) ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.4)then ++ ++c truncated vessal potential type 2 - use with sw1 ++ ++ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,4)**8) ++ pterm=scrn*prmtbp(kktbp,1)*(theta**prmtbp(kktbp,3)* ++ x (theta-prmtbp(kktbp,2))**2*(theta+prmtbp(kktbp,2)- ++ x 2.d0*pi)**2-0.5d0*prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3) ++ x -1.d0)*(theta-prmtbp(kktbp,2))**2*(pi- ++ x prmtbp(kktbp,2))**3) ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,4)**8 ++ gamma=scrn*prmtbp(kktbp,1)*(theta**(prmtbp(kktbp,3)-1.d0)* ++ x (theta-prmtbp(kktbp,2))*(theta+prmtbp(kktbp,2)- ++ x 2.d0*pi)*((prmtbp(kktbp,3)+4.d0)*theta**2-2.d0*pi* ++ x (prmtbp(kktbp,3)+2.d0)*theta+prmtbp(kktbp,3)* ++ x prmtbp(kktbp,2)*(2.d0*pi-prmtbp(kktbp,2)))- ++ x prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3)-1.d0)* ++ x (theta-prmtbp(kktbp,2))*(pi-prmtbp(kktbp,2))**3)/sint ++ gamsa=(8.d0*pterm/prmtbp(kktbp,4)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmtbp(kktbp,4)**8)*rbc**7 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.5)then ++ ++ if(min(rab,rbc).lt.1.5d0)then ++ ++ scrn=(5.d0*(prmtbp(kktbp,2)/rac)**2-6.d0)* ++ x (prmtbp(kktbp,2)/rac)**10 ++ tterm=prmtbp(kktbp,1)*cost**4 ++ pterm=scrn*tterm ++ uterm=60.d0*((prmtbp(kktbp,2)/rac)**2-1.d0)* ++ x (prmtbp(kktbp,2)/rac)**10 ++ vterm=tterm*uterm ++ gamma=scrn*4.d0*prmtbp(kktbp,1)*cost**3 ++ gamsb=tterm*uterm/rac ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ pterm=0.d0 ++ vterm=0.d0 ++ gamma=0.d0 ++ gamsa=0.d0 ++ gamsb=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set triple index ++ ++ if(lsolva)kkk=loc3(atmolt(ia),atmolt(ib),atmolt(ic)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1) ++ x .and.(atm_fre(ic).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) ++ ++ if(lsolva)en3_exc(kkk)=en3_exc(kkk)+pterm ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1) ++ x .or.(atm_fre(ic).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ tbp_fre=tbp_fre-pterm ++ tbp_vir=tbp_vir-vterm ++ pterm=lambda1*pterm ++ vterm=lambda1*vterm ++ gamma=lambda1*gamma ++ gamsa=lambda1*gamsa ++ gamsb=lambda1*gamsb ++ gamsc=lambda1*gamsc ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2) ++ x .or.(atm_fre(ic).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ tbp_fre=tbp_fre+pterm ++ tbp_vir=tbp_vir+vterm ++ pterm=lambda2*pterm ++ vterm=lambda2*vterm ++ gamma=lambda2*gamma ++ gamsa=lambda2*gamsa ++ gamsb=lambda2*gamsb ++ gamsc=lambda2*gamsc ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential and virial ++ ++ engtbp=engtbp+pterm ++ virtbp=virtbp+vterm ++ ++ if(lsolva)en3_sol(kkk)=en3_sol(kkk)+pterm ++ ++c calculate atomic forces ++ ++ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab+gamsb*xac ++ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab+gamsb*yac ++ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab+gamsb*zac ++ ++ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc-gamsb*xac ++ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc-gamsb*yac ++ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc-gamsb*zac ++ ++ fxx(ia)=fxx(ia)+fxa ++ fyy(ia)=fyy(ia)+fya ++ fzz(ia)=fzz(ia)+fza ++ ++ fxx(ib)=fxx(ib)-fxa-fxc ++ fyy(ib)=fyy(ib)-fya-fyc ++ fzz(ib)=fzz(ib)-fza-fzc ++ ++ fxx(ic)=fxx(ic)+fxc ++ fyy(ic)=fyy(ic)+fyc ++ fzz(ic)=fzz(ic)+fzc ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc ++ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc ++ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc ++ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc ++ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn)then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+pterm ++ vir_loc=vir_loc+vterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fxa ++ fyy_loc(ia)=fyy_loc(ia)+fya ++ fzz_loc(ia)=fzz_loc(ia)+fza ++ ++ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc ++ fyy_loc(ib)=fyy_loc(ib)-fya-fyc ++ fzz_loc(ib)=fzz_loc(ib)-fza-fzc ++ ++ fxx_loc(ic)=fxx_loc(ic)+fxc ++ fyy_loc(ic)=fyy_loc(ic)+fyc ++ fzz_loc(ic)=fzz_loc(ic)+fzc ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc ++ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc ++ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc ++ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc ++ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,442) ++ ++c global sum of three body potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engtbp ++ buffer(2)=virtbp ++ buffer(3)=tbp_fre ++ buffer(4)=tbp_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engtbp=buffer(1) ++ virtbp=buffer(2) ++ tbp_fre=buffer(3) ++ tbp_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(en3_sol,mxtmls_sol3,buffer(1)) ++ if(lexcite)call gdsum(en3_exc,mxtmls_exc3,buffer(1)) ++ ++ endif ++ ++ endif ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++ return ++ ++ end subroutine thbfrc ++ ++ end module three_body_module +diff -urN dl_class_1.9.orig/srcmod/utility_module.f dl_class_1.9/srcmod/utility_module.f +--- dl_class_1.9.orig/srcmod/utility_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/utility_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1612 @@ ++ module utility_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ contains ++ ++ subroutine global_sum_forces(natms,mxnode,gxx,gyy,gzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to perform global sum of atomic forces as ++c requred by replicated data strategy ++c ++c copyright - daresbury laboratory ++c author - w.smith december 2005 ++c ++c*********************************************************************** ++ ++ use config_module ++ ++ implicit none ++ ++ integer natms,mxnode,i,j ++ real(8) gxx(*),gyy(*),gzz(*) ++ ++ if(mxnode.gt.1) then ++ ++ j=0 ++ do i=1,natms ++ ++ buffer(j+1)=gxx(i) ++ buffer(j+2)=gyy(i) ++ buffer(j+3)=gzz(i) ++ j=j+3 ++ ++ enddo ++ call gdsum(buffer(1),3*natms,buffer(3*natms+1)) ++ j=0 ++ do i=1,natms ++ ++ gxx(i)=buffer(j+1) ++ gyy(i)=buffer(j+2) ++ gzz(i)=buffer(j+3) ++ j=j+3 ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine global_sum_forces ++ ++ subroutine images ++ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating the minimum image ++c of atom pairs within a specified MD cell ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c T3D optimised version. t.forester july 1994 ++c ++c for ++c imcon=0 no boundary conditions apply ++c imcon=1 standard cubic boundaries apply ++c imcon=2 orthorhombic boundaries apply ++c imcon=3 parallelepiped boundaries apply ++c imcon=4 truncated octahedron boundaries apply ++c imcon=5 rhombic dodecahedron boundaries apply ++c imcon=6 x-y parallelogram boundary conditions : no periodicity in z ++c imcon=7 hexagonal prism boundaries apply ++c ++c note: in all cases the centre of the cell is at (0,0,0) ++c warning - replicated data version: does not re-merge ++c coordinate arrays ++c ++c*********************************************************************** ++ ++ use error_module ++ ++ implicit none ++ ++ integer imcon,idnode,mxnode,natms,iatm1,iatm2,i ++ real(8) cell,xxx,yyy,zzz,aaa,bbb,ccc,det,rt2,rt3,ssx ++ real(8) ssy,ssz,ddd,xss,yss,zss,rcell ++ ++ dimension xxx(*),yyy(*),zzz(*) ++ dimension cell(9),rcell(9) ++ ++ data rt2/1.41421356623d0/,rt3/1.7320508075d0/ ++ ++ if(imcon.gt.0) then ++ ++c block indices ++ ++ iatm1 = (idnode*natms)/mxnode+1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ endif ++ ++ if(imcon.eq.1)then ++ ++c standard cubic boundary conditions ++ ++ ++ aaa=1.d0/cell(1) ++ ++ do i=iatm1,iatm2 ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) ++ enddo ++ ++ else if(imcon.eq.2)then ++ ++c rectangular (slab) boundary conditions ++ ++ aaa=1.d0/cell(1) ++ bbb=1.d0/cell(5) ++ ccc=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(5)*nint(bbb*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(ccc*zzz(i)) ++ ++ enddo ++ ++ else if(imcon.eq.3)then ++ ++c parallelepiped boundary conditions ++ ++ call invert(cell,rcell,det) ++ ++ do i=iatm1,iatm2 ++ ++ ssx=(rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i)) ++ ssy=(rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i)) ++ ssz=(rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i)) ++ ++ xss=ssx-nint(ssx) ++ yss=ssy-nint(ssy) ++ zss=ssz-nint(ssz) ++ ++ xxx(i)=(cell(1)*xss+cell(4)*yss+cell(7)*zss) ++ yyy(i)=(cell(2)*xss+cell(5)*yss+cell(8)*zss) ++ zzz(i)=(cell(3)*xss+cell(6)*yss+cell(9)*zss) ++ ++ enddo ++ ++ else if(imcon.eq.4)then ++ ++c truncated octahedral boundary conditions ++ ++ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. ++ x abs(cell(5)-cell(9)).lt.1.d-6)) call error(idnode,130) ++ ++ aaa=1.d0/cell(1) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) ++ ++ if((abs(xxx(i))+abs(yyy(i))+abs(zzz(i))).ge. ++ x (0.75d0*cell(1)))then ++ ++ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) ++ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) ++ zzz(i)=zzz(i)-0.5d0*sign(cell(1),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ else if(imcon.eq.5)then ++ ++c rhombic dodecahedral boundary conditions ++ ++ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. ++ x abs(cell(9)-cell(1)*rt2).lt.1.d-6)) ++ x call error(idnode,140) ++ ++ aaa=1.d0/cell(1) ++ bbb=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(bbb*zzz(i)) ++ ++ if((abs(xxx(i))+abs(yyy(i))+abs(rt2*zzz(i))).ge. ++ x cell(1))then ++ ++ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) ++ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) ++ zzz(i)=zzz(i)-0.5d0*sign(cell(9),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ else if(imcon.eq.6) then ++ ++c x-y boundary conditions ++ ++ det = cell(1)*cell(5) - cell(2)*cell(4) ++ ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ ++ det = 1.d0/det ++ ++ rcell(1) = det*cell(5) ++ rcell(2) = -det*cell(2) ++ rcell(4) = -det*cell(4) ++ rcell(5) = det*cell(1) ++ ++ do i=iatm1,iatm2 ++ ++ ssx = rcell(1)*xxx(i) + rcell(4)*yyy(i) ++ ssy = rcell(2)*xxx(i) + rcell(5)*yyy(i) ++ ++ xss = ssx - nint(ssx) ++ yss = ssy - nint(ssy) ++ ++ xxx(i)=cell(1)*xss + cell(4)*yss ++ yyy(i)=cell(2)*xss + cell(5)*yss ++ ++ enddo ++ ++ else if(imcon.eq.7) then ++ ++c hexagonal prism boundary conditions ++ ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,135) ++ ++ aaa=cell(1)/(rt3*2.d0) ++ bbb=cell(1)/rt3 ++ ccc=rt3/cell(1) ++ ddd=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ yyy(i)=yyy(i)-bbb*nint(ccc*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(ddd*zzz(i)) ++ ++ if((abs(yyy(i))+abs(rt3*xxx(i))).ge.bbb)then ++ ++ xxx(i)=xxx(i)-rt3*sign(aaa,xxx(i)) ++ yyy(i)=yyy(i)-sign(aaa,yyy(i)) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine images ++ ++ subroutine config_write(fname,levcfg,imcon,natms,engcfg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing CONFIG files ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2007 ++c ++c*********************************************************************** ++ ++ use config_module ++ use setup_module ++ ++ implicit none ++ ++ character*6 fname ++ ++ integer i,natms,levcfg,imcon,nstep ++ real(8) engcfg ++ ++ open(nconf,file=fname,form='formatted') ++ ++ write(nconf,'(80a1)') cfgname ++ write(nconf,'(3i10,1p,g20.12)') levcfg,imcon,natms,engcfg ++ if(imcon.gt.0) write(nconf,'(3f20.12)') cell ++ ++ do i=1,natms ++ ++ write(nconf,'(a8,i10)') atmnam(i),i ++ write(nconf,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ if(levcfg.gt.0)write(nconf,'(3g20.12)') ++ x vxx(i),vyy(i),vzz(i) ++ if(levcfg.gt.1)write(nconf,'(3g20.12)') ++ x fxx(i),fyy(i),fzz(i) ++ ++ enddo ++ ++ close (nconf) ++ ++ return ++ end subroutine config_write ++ ++ subroutine bomb(idnode,nyr,nmn,ndy) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to set an expiry date in a compiled program ++c ++c copyright - daresbury laboratory ++c author - w. smith oct 2002 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ logical safe ++ integer info(8) ++ character*12 dat,tim,zon ++ integer idnode,nyr,nmn,ndy ++ ++ safe=.true. ++ ++ call date_and_time(dat,tim,zon,info) ++ ++ if(info(1).gt.nyr)then ++ ++ safe=.false. ++ ++ else if(info(1).eq.nyr)then ++ ++ if(info(2).gt.nmn)then ++ ++ safe=.false. ++ ++ else if(info(2).eq.nmn)then ++ ++ if(info(3).ge.ndy)safe=.false. ++ ++ endif ++ ++ endif ++ ++ if(.not.safe)then ++ ++ if(idnode.eq.0)write(nrite,'(a,/,a)') ++ x 'THE EXPIRY DATE OF THIS EXECUTABLE HAS PASSED.', ++ X 'PLEASE CONTACT W.SMITH@DL.AC.UK FOR A NEW LICENCE' ++ ++ call exitcomms() ++ ++ endif ++ ++ return ++ end subroutine bomb ++ ++ subroutine cpy_rtc(nnn,aaa,bbb) ++ ++c********************************************************************** ++c ++c dl_poly subroutine for copying a real array into a complex array ++c of the same dimension ++c ++c copyright daresbury laboratory 1998 ++c author w.smith oct 1998 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,nnn ++ real(8) aaa(*) ++ complex(8) bbb(*) ++ ++ do i=1,nnn ++ ++ bbb(i)=cmplx(aaa(i),0.d0,kind=8) ++ ++ enddo ++ ++ return ++ end subroutine cpy_rtc ++ ++ function duni() ++ ++c********************************************************************* ++c ++c dl_poly random number generator based on the universal ++c random number generator of marsaglia, zaman and tsang ++c (stats and prob. lett. 8 (1990) 35-39.) it must be ++c called once to initialise parameters u,c,cd,cm ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical new ++ integer ir,jr,i,j,k,l,m,ii,jj ++ real(4) s,t,u,c,cd,cm,uni ++ real(8) duni ++ dimension u(97) ++ save u,c,cd,cm,uni,ir,jr,new ++ data new/.true./ ++ ++ if(new)then ++ ++c initial values of i,j,k must be in range 1 to 178 (not all 1) ++c initial value of l must be in range 0 to 168. ++ ++ i=12 ++ j=34 ++ k=56 ++ l=78 ++c ++ ir=97 ++ jr=33 ++ new=.false. ++ ++ do 200 ii=1,97 ++ s=0.0 ++ t=0.5 ++ do 100 jj=1,24 ++ m=mod(mod(i*j,179)*k,179) ++ i=j ++ j=k ++ k=m ++ l=mod(53*l+1,169) ++ if(mod(l*m,64).ge.32)s=s+t ++ t=0.5*t ++ 100 continue ++ u(ii)=s ++ 200 continue ++ c = 362436.0/16777216.0 ++ cd= 7654321.0/16777216.0 ++ cm=16777213.0/16777216.0 ++ else ++ ++c calculate random number ++ uni=u(ir)-u(jr) ++ if(uni.lt.0.0)uni=uni+1.0 ++ u(ir)=uni ++ ir=ir-1 ++ if(ir.eq.0)ir=97 ++ jr=jr-1 ++ if(jr.eq.0)jr=97 ++ c=c-cd ++ if(c.lt.0.0)c=c+cm ++ uni=uni-c ++ if(uni.lt.0.0)uni=uni+1.0 ++ duni=dble(uni) ++ endif ++ ++ return ++ end function duni ++ ++ subroutine ele_prd(nnn,aaa,bbb,ccc) ++ ++c********************************************************************** ++c ++c dl_poly subroutine for element by element product of ++c a real array (bbb) and a complex array (ccc) ++c ++c copyright daresbury laboratory 1998 ++c author w.smith july 1998 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,nnn ++ real(8) bbb(*) ++ complex(8) aaa(*),ccc(*) ++ ++ do i=1,nnn ++ ++ aaa(i)=bbb(i)*ccc(i) ++ ++ enddo ++ ++ return ++ end subroutine ele_prd ++ ++ subroutine gauss(natms,vxx,vyy,vzz) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for constructing velocity arrays ++c with a gaussian distribution of unit variance. ++c ++c based on the Box-Muller method ++c ++c note - this version uses a universal random number ++c generator, which generates pseudo-random numbers between ++c 0 and 1. it is based on the algorithm of marsaglia, zaman ++c and tsang in: stats and prob. lett. 8 (1990) 35-39. ++c ++c copyright daresbury laboratory 2007 ++c author - w. smith nov 2007 ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ integer natms,i ++ real(8) vxx,vyy,vzz,rrr,rr1,rr2 ++ ++ dimension vxx(natms),vyy(natms),vzz(natms) ++ ++c initialise random number generator ++ ++ rrr=duni() ++ ++c calculate gaussian random numbers ++ ++ do i=1,2*(natms/2),2 ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vxx(i)=rr1*cos(rr2) ++ vxx(i+1)=rr1*sin(rr2) ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vyy(i)=rr1*cos(rr2) ++ vyy(i+1)=rr1*sin(rr2) ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vzz(i)=rr1*cos(rr2) ++ vzz(i+1)=rr1*sin(rr2) ++ ++ enddo ++ if(mod(natms,2).ne.0)then ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vxx(natms)=rr1*cos(rr2) ++ vyy(natms)=rr1*sin(rr2) ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vzz(natms)=rr1*cos(rr2) ++ ++ endif ++ ++ return ++ end subroutine gauss ++ ++ subroutine invert(a,b,d) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to invert a 3 * 3 matrix using cofactors ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith april 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ real(8) a,b,d,r ++ ++ dimension a(9),b(9) ++ ++c calculate adjoint matrix ++ b(1)=a(5)*a(9)-a(6)*a(8) ++ b(2)=a(3)*a(8)-a(2)*a(9) ++ b(3)=a(2)*a(6)-a(3)*a(5) ++ b(4)=a(6)*a(7)-a(4)*a(9) ++ b(5)=a(1)*a(9)-a(3)*a(7) ++ b(6)=a(3)*a(4)-a(1)*a(6) ++ b(7)=a(4)*a(8)-a(5)*a(7) ++ b(8)=a(2)*a(7)-a(1)*a(8) ++ b(9)=a(1)*a(5)-a(2)*a(4) ++ ++c calculate determinant ++ d=a(1)*b(1)+a(4)*b(2)+a(7)*b(3) ++ r=0.d0 ++ if(abs(d).gt.0.d0)r=1.d0/d ++ ++c complete inverse matrix ++ b(1)=r*b(1) ++ b(2)=r*b(2) ++ b(3)=r*b(3) ++ b(4)=r*b(4) ++ b(5)=r*b(5) ++ b(6)=r*b(6) ++ b(7)=r*b(7) ++ b(8)=r*b(8) ++ b(9)=r*b(9) ++ ++ return ++ end subroutine invert ++ ++ subroutine jacobi(a,v,n) ++ ++c*********************************************************************** ++c ++c diagonalisation of real symmetric matices by jacobi method ++c ++c input parameters: ++c ++c a(n,n) is the matrix to be diagonalised ++c v(n,n) is the eigenvector matrix ++c n is the dimension of the matrices ++c ++c jacobi processes lower triangle only (upper triangle unchanged) ++c ++c variable rho sets absolute tolerance on convergence ++c variable tes is a moving tolerance that diminishes ++c on each pass until at true convergence tesdlrpot) .or. (ngrid-4 /= nint(cutpot/delpot))) then ++ ++ if (idnode == 0) write(nrite,"( ++ x 'expected radial increment : ',1p,e15.7,/, ++ x 'TABLE radial increment : ',1p,e15.7,/,/, ++ x 'expected number of grid points : ',0p,i10,/, ++ x 'grid points in TABLE : ',i10)") ++ x dlrpot, delpot, mxgrid, ngrid ++ ++ call error(idnode,22) ++ ++ endif ++ ++ if(cutpot.lt.rcut) call error(idnode,504) ++ if(abs(1.d0-(delpot/dlrpot)).gt.1.0d-8) then ++ if(idnode.eq.0) write(nrite, ++ x "(/,' TABLE arrays resized for mxgrid=',i10)") mxgrid ++ endif ++ ++c read potential arrays for all pairs ++ ++ do ivdw=1,ntpvdw ++ ++c read potential arrays if potential not already defined ++ ++ if(ltpvdw(ivdw).eq.0)then ++ ++c read pair potential labels and long range corrections ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_table_read(idnode,ntable) ++ ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ prmvdw(ivdw,1)=dblstr(record,lenrec,idum) ++ prmvdw(ivdw,2)=dblstr(record,lenrec,idum) ++ ++ katom1=0 ++ katom2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katom1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katom2=jtpatm ++ ++ enddo ++ ++ if(katom1.eq.0.or.katom2.eq.0)then ++ if(idnode.eq.0) ++ x write(nrite,'(a)') '****',atom1,'***',atom2,'****' ++ call error(idnode,81) ++ endif ++ ++ keyvdw=loc2(katom1,katom2) ++ ++ if(lstvdw(keyvdw).ne.ivdw) call error(idnode,23) ++ ++c read potential arrays ++ ++ if(mxbuff.lt.ngrid) then ++ ++ if(idnode.eq.0) ++ x write(nrite,*) 'mxbuff must be >=',ngrid,' in fortab' ++ call error(idnode,48) ++ ++ endif ++ ++c read in potential arrays ++ ++ do i=1,(ngrid+3)/4 ++ ++ l=min(4,ngrid-(i-1)*4) ++ if (idnode == 0) then ++ read(unit=ntable, fmt=*, end=100) ++ x (buffer((i-1)*4+j),j=1,l) ++ else ++ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 ++ endif ++ ++ enddo ++ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) ++ ++c reconstruct arrays using 3pt interpolation ++ ++ rdr=1.d0/delpot ++ vvv(1,ivdw)=1.d0 ++ ggg(1,ivdw)=0.d0 ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ vk0=buffer(l) ++ vk1=buffer(l+1) ++ vk2=buffer(l+2) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ vvv(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 ++ ++ enddo ++ ++c read in force arrays ++ ++ do i=1,(ngrid+3)/4 ++ ++ l=min(4,ngrid-(i-1)*4) ++ if (idnode == 0) then ++ read(unit=ntable, fmt=*, end=100) ++ x (buffer((i-1)*4+j),j=1,l) ++ else ++ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 ++ endif ++ ++ enddo ++ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) ++ ++c reconstruct ggg arrays using 3pt interpolation ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ vk0=buffer(l) ++ vk1=buffer(l+1) ++ vk2=buffer(l+2) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ++ ggg(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c convert to internal units ++ ++ do k=1,ntpvdw ++ ++ if(ltpvdw(k).eq.0)then ++ ++ do i=1,mxgrid ++ ++ vvv(i,k)=vvv(i,k)*engunit ++ ggg(i,k)=ggg(i,k)*engunit ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (ntable) ++ ++ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') ++ x 'potential tables read from TABLE file' ++ ++ return ++ ++c end of file error exit ++ ++ 100 call abort_table_read(idnode,ntable) ++ ++ end subroutine fortab ++ ++ subroutine abort_table_read(idnode,ntable) ++ ++c*********************************************************************** ++c ++c dl_poly error exit subroutine for reading TABLE file ++c ++c copyright - daresbury laboratory ++c author - w. smith sept 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer idnode,ntable ++ ++ if(idnode.eq.0)close (ntable) ++ ++ call error(idnode,24) ++ ++ end subroutine abort_table_read ++ ++ subroutine srfrce ++ x (lsolva,lfree,lghost,iatm,ik,engsrp,virsrp,rcut,dlrpot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating short range force and ++c potential energy terms using verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c ++c version 3 ++c author - t. forester june 1993 ++c stress tensor added t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,k,l,kkk ++ real(8) engsrp,virsrp,rcut,dlrpot ++ real(8) ab,rrr,rsq,ppp,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,gamma ++ real(8) fi,rcsq,rdr,ai,aj,fx,fy,fz,omega ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c interpolation spacing ++ ++ rdr=1.d0/dlrpot ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engsrp=0.d0 ++ virsrp=0.d0 ++ ++c store forces for iatm ++ ++ ai=dble(ltype(iatm)) ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ aj=dble(ltype(jatm)) ++ ++ if(ai.gt.aj) then ++ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 ++ else ++ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 ++ endif ++ ++ k=lstvdw(int(ab)) ++ ++ if((ltpvdw(k).lt.100).and.(abs(vvv(1,k)).gt.1.d-10))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++ if(l.eq.0)then ++ ++ omega=vvv(1,k) ++ gamma=ggg(1,k) ++ ++ else ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre-omega ++ vdw_vir=vdw_vir+gamma*rsq ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre+omega ++ vdw_vir=vdw_vir-gamma*rsq ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential and virial ++ ++ engsrp=engsrp+omega ++ virsrp=virsrp-gamma*rsq ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega ++ ++c calculate forces ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-gamma*rsq ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine srfrce ++ ++ subroutine lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rcut,volm) ++ ++c************************************************************************* ++c ++c DL_POLY subroutine to evaluate long-range corrections to ++c pressure and energy in a periodic system. ++c ++c copyright daresbury laboratory 1993 ++c author - t. forester may 1993 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=10 ++ logical lsolva,lfree,lghost ++ integer idnode,imcon,keyfce,natms,ntpatm,i,ka,ntpvdw ++ integer ivdw,j,k,it,jt,kt,fail ++ real(8) natyp,nbtyp,nctyp,ndtyp,nafrz,nbfrz,ncfrz,ndfrz ++ real(8) elrc,engunit,virlrc,rcut,volm,twopi,eadd,padd ++ real(8) denprd,aaa,bbb,ccc,ddd,eee,eps,sig,rr0,ann,amm ++ real(8) denprd1,denprd2,denprd3,denprdf ++ integer, allocatable :: numtyp_sol0(:,:),numfrz_sol0(:,:) ++ integer, allocatable :: numtyp_sol1(:,:),numfrz_sol1(:,:) ++ integer, allocatable :: numtyp_sol2(:,:),numfrz_sol2(:,:) ++ integer, allocatable :: numtyp_fre(:,:),numfrz_fre(:,:) ++ real(8), allocatable :: elrc_sol0(:),elrc_exc0(:) ++ ++ dimension fail(nnn) ++ ++ twopi=2.0d0*pi ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ allocate (numtyp_fre(mxatyp,0:2),stat=fail(1)) ++ allocate (numfrz_fre(mxatyp,0:2),stat=fail(2)) ++ allocate (elrc_exc0(mxtmls_exc2),stat=fail(3)) ++ ++ endif ++ ++ if(lsolva)then ++ ++ allocate (elrc_sol0(mxtmls_sol2),stat=fail(4)) ++ allocate (numtyp_sol0(mxatyp,mxtmls),stat=fail(5)) ++ allocate (numfrz_sol0(mxatyp,mxtmls),stat=fail(6)) ++ ++ if(lghost)then ++ ++ allocate (numtyp_sol1(mxatyp,mxtmls),stat=fail(7)) ++ allocate (numfrz_sol1(mxatyp,mxtmls),stat=fail(8)) ++ allocate (numtyp_sol2(mxatyp,mxtmls),stat=fail(9)) ++ allocate (numfrz_sol2(mxatyp,mxtmls),stat=fail(10)) ++ ++ endif ++ ++ endif ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1015) ++ enddo ++ ++c initalise counter arrays ++ ++ do i=1,ntpatm ++ ++ numtyp(i)=0 ++ numfrz(i)=0 ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ numtyp_fre(:,:)=0 ++ numfrz_fre(:,:)=0 ++ ++ endif ++ ++ if(lsolva)then ++ ++ numtyp_sol0(:,:)=0 ++ numfrz_sol0(:,:)=0 ++ ++ if(lghost)then ++ ++ numtyp_sol1(:,:)=0 ++ numfrz_sol1(:,:)=0 ++ numtyp_sol2(:,:)=0 ++ numfrz_sol2(:,:)=0 ++ ++ endif ++ ++ endif ++ ++c evaluate number density in system ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp(ka)=numtyp(ka)+1 ++ if(lstfrz(i).ne.0)numfrz(ka)=numfrz(ka)+1 ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp_fre(ka,atm_fre(i))=numtyp_fre(ka,atm_fre(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_fre(ka,atm_fre(i))=numfrz_fre(ka,atm_fre(i))+1 ++ ++ enddo ++ ++ endif ++ ++ if(lsolva)then ++ ++ if(lghost)then ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ ++ if(atm_fre(i).eq.0)then ++ ++ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 ++ ++ elseif(atm_fre(i).eq.1)then ++ ++ numtyp_sol1(ka,atmolt(i))=numtyp_sol1(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol1(ka,atmolt(i))=numfrz_sol1(ka,atmolt(i))+1 ++ ++ elseif(atm_fre(i).eq.2)then ++ ++ numtyp_sol2(ka,atmolt(i))=numtyp_sol2(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol2(ka,atmolt(i))=numfrz_sol2(ka,atmolt(i))+1 ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities ++ ++ do i=1,ntpatm ++ dens(i)=dble(numtyp(i))/volm ++ enddo ++ ++c long range corrections to energy and pressure ++ ++ elrc=0.d0 ++ elrc2=0.d0 ++ virlrc=0.d0 ++ virlrc2=0.d0 ++ denprdf=0.d0 ++ volm_sav=0.d0 ++ elrc_fre=0.d0 ++ vlrc_fre=0.d0 ++ ++ if(imcon.ne.0.and.imcon.ne.6.and.ntpvdw.gt.0) then ++ ++ if(mod(keyfce,2).eq.1) then ++ ++ ivdw=0 ++ ++ do i=1,ntpatm ++ ++ do j=1,i ++ ++ eadd=0.d0 ++ padd=0.d0 ++ ++ ivdw=ivdw+1 ++ k=lstvdw(ivdw) ++ ++ if(ltpvdw(k).eq.0) then ++ ++c tabulated potential ++ ++ eadd=prmvdw(k,1) ++ padd=-prmvdw(k,2) ++ ++ else if(ltpvdw(k).eq.1) then ++ ++c 12-6 potential ++ ++ aaa=prmvdw(k,1) ++ bbb=prmvdw(k,2) ++ ++ eadd=aaa/(9.d0*rcut**9)-bbb/(3.d0*rcut**3) ++ padd=12.d0*aaa/(9.d0*rcut**9)-6.d0*bbb/(3.d0*rcut**3) ++ ++ else if(ltpvdw(k).eq.2) then ++ ++c Lennard Jones potential ++ ++ eps=prmvdw(k,1) ++ sig=prmvdw(k,2) ++ ++ eadd=4.d0*eps*(sig**12/(9.d0*rcut**9)- ++ x sig**6/(3.d0*rcut**3)) ++ padd=4.d0*eps*(12.d0*sig**12/(9.d0*rcut**9)- ++ x 2.d0*sig**6/(rcut**3)) ++ ++ else if(ltpvdw(k).eq.3) then ++ ++c n - m potential ++ ++ eps=prmvdw(k,1) ++ ann=prmvdw(k,2) ++ amm=prmvdw(k,3) ++ rr0=prmvdw(k,4) ++ ++ eadd=eps/(ann-amm)*(amm*rr0**ann/((ann-3.d0)* ++ x rcut**(ann-3.d0))-ann*rr0**amm/((amm-3.0d0)* ++ x rcut**(amm-3.d0))) ++ padd=eps/(ann-amm)*ann*amm*(rr0**ann/((ann-3.d0)* ++ x rcut**(ann-3.d0))-rr0**amm/((amm-3.0d0)* ++ x rcut**(amm-3.d0))) ++ ++ else if(ltpvdw(k).eq.4) then ++ ++c buckingham exp - 6 potential ++ ++ ccc=prmvdw(k,3) ++ ++ eadd=-ccc/(3.d0*rcut**3) ++ padd=-2.d0*ccc/(rcut**3) ++ ++ else if(ltpvdw(k).eq.5) then ++ ++c born huggins meyer exp -6 - 8 potential ++ ++ ddd=prmvdw(k,4) ++ eee=prmvdw(k,5) ++ ++ eadd=-ddd/(3.d0*rcut**3)-eee/(5.d0*rcut**5) ++ padd=-2.d0*ddd/(rcut**3)-8.d0*eee/(5.d0*rcut**5) ++ ++ else if(ltpvdw(k).eq.6) then ++ ++c hydrogen bond 12 - 10 potential ++ ++ aaa=prmvdw(k,1) ++ bbb=prmvdw(k,2) ++ ++ eadd=aaa/(9.d0*rcut**9)-bbb/(7.d0*rcut**7) ++ padd=12.d0*aaa/(9.d0*rcut**9)-1.d1*bbb/(7.d0*rcut**7) ++ ++ endif ++ ++ if(i.ne.j) then ++ ++ eadd=eadd*2.d0 ++ padd=padd*2.d0 ++ ++ endif ++ ++ if(.not.(lfree.or.lghost))then ++ ++ denprd=twopi*(dble(numtyp(i))*dble(numtyp(j))- ++ x dble(numfrz(i))*dble(numfrz(j)))/volm**2 ++ ++ else ++ ++ nafrz=dble(numfrz_fre(i,0)+numfrz_fre(i,1)) ++ natyp=dble(numtyp_fre(i,0)+numtyp_fre(i,1)) ++ nbfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,1)) ++ nbtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,1)) ++ ncfrz=dble(numfrz_fre(i,0)+numfrz_fre(i,2)) ++ nctyp=dble(numtyp_fre(i,0)+numtyp_fre(i,2)) ++ ndfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,2)) ++ ndtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,2)) ++ ++ if(lghost)then ++ ++ denprd=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 ++ denprd3=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 ++ ++ elseif(lfree)then ++ ++ denprd1=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 ++ denprd2=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 ++ denprd=lambda1*denprd1+lambda2*denprd2 ++ denprd3=lambda2*denprd1+lambda1*denprd2 ++ denprdf=denprd2-denprd1 ++ ++ endif ++ ++ endif ++ ++ elrc=elrc+volm*denprd*eadd ++ virlrc=virlrc-denprd*padd*volm ++ ++ if(lfree.or.lghost)then ++ ++ elrc2=elrc2+volm*denprd3*eadd ++ virlrc2=virlrc2-denprd3*padd*volm ++ if(lfree)then ++ elrc_fre=elrc_fre+volm*denprdf*eadd ++ vlrc_fre=vlrc_fre-denprdf*padd*volm ++ endif ++ ++ endif ++ ++ if(lsolva)then ++ ++ elrc_sol0(:)=0.d0 ++ if(lghost)elrc_exc0(:)=0.d0 ++ ++ do it=1,mxtmls ++ ++ do jt=1,mxtmls ++ ++ kt=loc2(it,jt) ++ ++ if(lghost)then ++ ++ natyp=dble(numtyp_sol0(i,it)+numtyp_sol1(i,it)) ++ nbtyp=dble(numtyp_sol0(j,jt)+numtyp_sol1(j,jt)) ++ nafrz=dble(numfrz_sol0(i,it)+numfrz_sol1(i,it)) ++ nbfrz=dble(numfrz_sol0(j,jt)+numfrz_sol1(j,jt)) ++ ++ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* ++ x nbtyp-nafrz*nbfrz)/volm**2 ++ ++ nctyp=dble(numtyp_sol0(i,it)+numtyp_sol2(i,it)) ++ ndtyp=dble(numtyp_sol0(j,jt)+numtyp_sol2(j,jt)) ++ ncfrz=dble(numfrz_sol0(i,it)+numfrz_sol2(i,it)) ++ ndfrz=dble(numfrz_sol0(j,jt)+numfrz_sol2(j,jt)) ++ ++ elrc_exc0(kt)=elrc_exc0(kt)+twopi*(nctyp* ++ x ndtyp-ncfrz*ndfrz)/volm**2 ++ ++ else ++ ++ natyp=dble(numtyp_sol0(i,it)) ++ nbtyp=dble(numtyp_sol0(j,jt)) ++ nafrz=dble(numfrz_sol0(i,it)) ++ nbfrz=dble(numfrz_sol0(j,jt)) ++ ++ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* ++ x nbtyp-nafrz*nbfrz)/volm**2 ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(lghost)then ++ ++ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) ++ elrc_exc(:)=elrc_exc(:)+volm*eadd*elrc_exc0(:) ++ ++ else ++ ++ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ elrc_sav=elrc ++ elrc2_sav=elrc2 ++ virlrc_sav=virlrc ++ virlrc2_sav=virlrc2 ++ elrc_fre_sav=elrc_fre ++ vlrc_fre_sav=vlrc_fre ++ ++ endif ++ ++ volm_sav=volm ++ ++ if(lghost)then ++ ++ elrc_sol_sav(:)=elrc_sol(:) ++ elrc_exc_sav(:)=elrc_exc(:) ++ ++ elseif(lsolva)then ++ ++ elrc_sol_sav(:)=elrc_sol(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,'long range correction for: vdw energy ',e15.6,/, ++ x 25x,': vdw pressure',e15.6)")elrc/engunit, ++ x prsunt*virlrc/(-3.d0*volm) ++ ++ if(lghost) ++ x write(nrite, ++ x "(/,/,'long range correction for: vdw energy ',e15.6,/, ++ x 25x,': vdw pressure',e15.6)")elrc2/engunit, ++ x prsunt*virlrc2/(-3.d0*volm) ++ ++ endif ++ ++c deallocate work arrays ++ ++ if(lfree.or.lghost) ++ x deallocate (elrc_exc0,numtyp_fre,numfrz_fre,stat=fail(1)) ++ ++ if(lsolva)then ++ ++ deallocate (elrc_sol0,numtyp_sol0,numfrz_sol0,stat=fail(2)) ++ ++ if(lghost)then ++ ++ deallocate (numtyp_sol1,numfrz_sol1,stat=fail(3)) ++ deallocate (numtyp_sol2,numfrz_sol2,stat=fail(4)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lrcorrect ++ ++ ++ subroutine srfrceneu ++ x (lsolva,lfree,lghost,ik,engsrp,virsrp,dlrpot,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating short range force and ++c potential energy terms using verlet neighbour list ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c ++c neutral groups ++c author - t. forester march 1994 ++c ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,l,k,kkk ++ real(8) engsrp,virsrp,dlrpot,rcut,rcsq,fx,fy,fz,omega,omega_exc ++ real(8) rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2,rdlpot,gamma ++ real(8) ai,aj,ak,rsq,strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lghost) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c reciprocal of interpolation spacing ++ ++ rdlpot=1.d0/dlrpot ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engsrp=0.d0 ++ virsrp=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ aj=ltype(jatm) ++ ai=ltype(iatm) ++ ++ if(ai.gt.aj) then ++ ak=(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ else ++ ak=(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ endif ++ k=lstvdw(int(ak)) ++ ++ if(abs(vvv(1,k)).gt.1.d-10)then ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.lt.rcsq) then ++ ++ rrr=sqrt(rsq) ++ ++c determine interpolation panel for force arrays ++ ++ l=int(rrr*rdlpot) ++ ppp=rrr*rdlpot-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engsrp=omega+engsrp ++ virsrp=virsrp-gamma*rsq ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-gamma*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine srfrceneu ++ ++ end module vdw_module +diff -urN dl_class_1.9.orig/srcmod/vv_motion_module.f dl_class_1.9/srcmod/vv_motion_module.f +--- dl_class_1.9.orig/srcmod/vv_motion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_motion_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,3031 @@ ++ module vv_motion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for velocity verlet integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module,only : lmetadyn ++ use property_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration. rattle algorithm ++c must be used in conjunction with integration algorithms ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check,safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,esig ++ real(8) txx,tyy,tzz,xxt,yyt,zzt,stresh,dx,dy,dz,dis,omega2 ++ real(8) strs1,strs2,strs3,strs5,strs6,strs9,amti,amtj,gamma ++ real(8) gammi,gammj,dli,dlj ++ ++ dimension stresh(9) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ ++c constraint virial ++ ++ vircon=0.d0 ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c test size of work arrays ++ ++ check=.true. ++ if(mxxdf.lt.nscons)check=.false. ++ if(mxnode.gt.1)call gstate(check) ++ if(.not.check)call error(idnode,412) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dx=dxt(k) ++ dy=dyt(k) ++ dz=dzt(k) ++ dis=prmcon(listcon(k,1)) ++ esig=max(esig,abs(dx*dx+dy*dy+dz*dz-dis*dis)/dis) ++ ++ enddo ++ ++ esig=esig*0.5d0 ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c bypass calculations if all tolerances satisfied ++ ++ if(.not.safe)then ++ ++c initialise increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c set constraint parameters ++ ++ dis=prmcon(listcon(k,1)) ++ omega2= dis*dis ++ amti= tstep*rmass(i) ++ amtj=-tstep*rmass(j) ++ ++c constraint force parameter ++ ++ dx=dxt(k) ++ dy=dyt(k) ++ dz=dzt(k) ++ ++ gamma=(omega2-(dx*dx+dy*dy+dz*dz))/ ++ x (-tstep*(amti-amtj)*(dxx(k)*dx+dyy(k)*dy+dzz(k)*dz)) ++ ++c accumulate bond virial ++ ++ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1-gamma*dxx(k)*dxx(k) ++ strs2=strs2-gamma*dxx(k)*dyy(k) ++ strs3=strs3-gamma*dxx(k)*dzz(k) ++ strs5=strs5-gamma*dyy(k)*dyy(k) ++ strs6=strs6-gamma*dyy(k)*dzz(k) ++ strs9=strs9-gamma*dzz(k)*dzz(k) ++ ++c improve approximate constraint force ++ ++ gammi=-0.5d0*gamma*amti ++ xxt(i)=xxt(i)+dxx(k)*gammi ++ yyt(i)=yyt(i)+dyy(k)*gammi ++ zzt(i)=zzt(i)+dzz(k)*gammi ++ ++ gammj=-0.5d0*gamma*amtj ++ xxt(j)=xxt(j)+dxx(k)*gammj ++ yyt(j)=yyt(j)+dyy(k)*gammj ++ zzt(j)=zzt(j)+dzz(k)*gammj ++ ++ enddo ++ ++c sum up constraint forces across nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov)call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.0d0/dble(listme(i)) ++ dlj=1.0d0/dble(listme(j)) ++ ++ xxx(i)=xxx(i)+tstep*dli*xxt(i) ++ yyy(i)=yyy(i)+tstep*dli*yyt(i) ++ zzz(i)=zzz(i)+tstep*dli*zzt(i) ++ xxx(j)=xxx(j)+tstep*dlj*xxt(j) ++ yyy(j)=yyy(j)+tstep*dlj*yyt(j) ++ zzz(j)=zzz(j)+tstep*dlj*zzt(j) ++ ++ vxx(i)=vxx(i)+dli*xxt(i) ++ vzz(i)=vzz(i)+dli*zzt(i) ++ vyy(i)=vyy(i)+dli*yyt(i) ++ vxx(j)=vxx(j)+dlj*xxt(j) ++ vyy(j)=vyy(j)+dlj*yyt(j) ++ vzz(j)=vzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit for non-convergence ++ ++ if(.not.safe)return ++ ++c complete stress tensor ++ ++ stresh(1)=strs1 ++ stresh(2)=strs2 ++ stresh(3)=strs3 ++ stresh(4)=strs2 ++ stresh(5)=strs5 ++ stresh(6)=strs6 ++ stresh(7)=strs3 ++ stresh(8)=strs6 ++ stresh(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdrattle_r ++ ++ subroutine rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for applying a bond constraints to ++c the velocities of the constrained atoms using the rattle ++c procedure (replicated data version) ++c ++c copyright - daresbury laboratory ++c author w.smith october 2002 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,natms,nscons,icyc ++ integer i,j,k ++ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt ++ real(8) esig,amti,amtj,gamma,gammi,gammj,dli,dlj,tolvel ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ ++c constraint convergence tolerance ++ ++ tolvel=tolnce/tstep ++ ++c start of rattle cycle ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate velocity constraint corrections ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ amti= 0.5d0*tstep*rmass(i) ++ amtj=-0.5d0*tstep*rmass(j) ++ ++c calculate constraint force parameter ++ ++ gamma=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ ++ x dzz(k)*(vzz(i)-vzz(j)))/((amti-amtj)* ++ x (dxx(k)**2+dyy(k)**2+dzz(k)**2)) ++ esig=max(esig,abs(gamma)) ++ ++c improve approximate constraint force ++ ++ gammi=-gamma*amti ++ xxt(i)=xxt(i)+gammi*dxx(k) ++ yyt(i)=yyt(i)+gammi*dyy(k) ++ zzt(i)=zzt(i)+gammi*dzz(k) ++ gammj=-gamma*amtj ++ xxt(j)=xxt(j)+gammj*dxx(k) ++ yyt(j)=yyt(j)+gammj*dyy(k) ++ zzt(j)=zzt(j)+gammj*dzz(k) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolvel) ++ if(mxnode.gt.1)then ++ ++ call gstate(safe) ++ ++ endif ++ ++c terminate iteration if constraints satisfied ++ ++ if(.not.safe)then ++ ++c transport velocity adjustments to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++c update velocities ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ vxx(i)=vxx(i)+dli*xxt(i) ++ vyy(i)=vyy(i)+dli*yyt(i) ++ vzz(i)=vzz(i)+dli*zzt(i) ++ dlj=1.d0/dble(listme(j)) ++ vxx(j)=vxx(j)+dlj*xxt(j) ++ vyy(j)=vyy(j)+dlj*yyt(j) ++ vzz(j)=vzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit if rattle fails ++ ++ if(.not.safe)return ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdrattle_v ++ ++ subroutine nvevv_1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nve ensemble ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,i,j,k ++ integer iatm0,iatm1 ++ real(8) tstep,engke,tolnce,vircon ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1980) ++ enddo ++ ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c update velocities for first and second stages ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvevv_1 ++ ++ subroutine nvtvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,taut,sigma,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,taut,sigma,engke,tolnce,vircon,chit ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1990) ++ enddo ++ ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c first pass of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++ engke=engke*chit**2 ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz, ++ x buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_b1 ++ ++ subroutine nvtvv_e1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - evans thermostat ++c Comp. Phys. reports 1, 299, (1984) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,engke,tolnce,vircon,vdotf,scale,chit ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2000) ++ enddo ++ ++ endif ++ ++ if(ntcons.eq.0)safe=.true. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ engke=0.5d0*engke ++ chit=0.5d0*vdotf/engke ++ ++c thermostat the velocities ++ ++ scale=(1.d0-0.5d0*tstep*chit) ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ engke=0.5d0*engke ++ chit=0.5d0*vdotf/engke ++ scale=(1.d0-0.5d0*tstep*chit) ++ ++c scale velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++ engke=engke*scale**2 ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_e1 ++ ++ subroutine nvtvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntshl,keyshl,tstep,taut,sigma,chit,consv,conint,engke, ++ x tolnce,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - nose-hoover thermostat ++c Molecular Physics 87 (1996) 1117 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,taut,sigma,chit,consv,conint,engke,tolnce,vircon ++ real(8) hstep,qmass ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2010) ++ enddo ++ ++ endif ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ hstep=0.5d0*tstep ++ qmass=2.d0*sigma*taut**2 ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c integrate and apply nvt thermostat ++ ++ call nvtscale ++ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, ++ x chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c integrate and apply nvt thermostat ++ ++ call nvtscale ++ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, ++ x chit,conint) ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_h1 ++ ++ subroutine nptvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical newjob,safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk ++ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce ++ real(8) virtot,vircon,volm,volm0,elrc0,virlrc0,psyst ++ real(8) chit,chip,scale,beta ++ ++ integer fail(nnn) ++ real(8) strkin(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2020) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2030) ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++ scale=1.d0 ++ ++ if(iter.eq.mxiter)then ++ ++c calculate system pressure ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ ++c apply Berendsen barostat taup is relaxation time ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++ endif ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=scale*xxx(i)+tstep*vxx(i) ++ yyy(i)=scale*yyy(i)+tstep*vyy(i) ++ zzz(i)=scale*zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c apply Berendsen thermostat taut is relaxation time ++ ++ engke=getkin(natms,idnode,mxnode) ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nptvv_b1 ++ ++ subroutine nptvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp,chip,chit, ++ x consv,conint,engke,elrc,tolnce,vircon,virtot,virlrc,volm, ++ x press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c npt ensemble - Melchionna, Ciccotti and Holian ++c Molecular Physics 78 (1993) 533 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith november 2002 ++c amended - w. smith january 2005: f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ integer, parameter :: ncyc=5 ++ ++ logical safe,lshmov,newjob ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc ++ real(8) tstep,taup,taut,sigma,temp,chip,chit,consv,conint ++ real(8) engke,elrc,tolnce,vircon,virtot,virlrc,volm,press ++ real(8) volm0,elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass ++ real(8) vzero,chit0,chip0,cons0,scale,fstep ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) cell0(9),com(3),vom(3),strkin(9),uni(9) ++ ++ save newjob,totmas,volm0,elrc0,virlrc0,dens0 ++ save cell0,iatm0,iatm1,hstep,qstep,fstep,pmass,qmass ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2040) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c inertia parameter for Nose-Hoover thermostat and barostat ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2050) ++ enddo ++ ++ endif ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metdynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c volume integration parameter ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptscale_p ++ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update positions ++ ++ scale=exp(tstep*chip) ++ do i=iatm0,iatm1 ++ ++ xxx(i)=scale*(xxx(i)-com(1))+tstep*vxx(i)+com(1) ++ yyy(i)=scale*(yyy(i)-com(2))+tstep*vyy(i)+com(2) ++ zzz(i)=scale*(zzz(i)-com(3))+tstep*vzz(i)+com(3) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptscale_p ++ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2+ ++ x 0.5d0*pmass*chip**2+press*volm ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nptvv_h1 ++ ++ subroutine nstvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c anisotropic npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical newjob,safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,mode ++ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce,beta ++ real(8) vircon,volm,volm0,elrc0,virlrc0,chit ++ real(8) xtmp,ytmp,ztmp ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) uni(9),strkin(9),celp(10) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2060) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2070) ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c extract previous constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c zero scaling matrix ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(iter.eq.mxiter)then ++ ++c calculate Berendsen barostat - taup is relaxation time ++ ++ do i=1,9 ++ eta(i)=tstep*beta*(stress(i)+strcns(i)- ++ x press*volm*uni(i))/(taup*volm)+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ endif ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xtmp=eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) ++ ytmp=eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) ++ ztmp=eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) ++ xxx(i)=tstep*vxx(i)+xtmp ++ yyy(i)=tstep*vyy(i)+ytmp ++ zzz(i)=tstep*vzz(i)+ztmp ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c apply Berendsen thermostat taut is relaxation time ++ ++ engke=getkin(natms,idnode,mxnode) ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nstvv_b1 ++ ++ subroutine nstvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma,temp,chit, ++ x consv,conint,engke,elrc,tolnce,vircon,virlrc,volm,press, ++ x chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c anisotropic npt ensemble - Melchionna, Ciccotti and Holian ++c Molecular Physics 78 (1993) 533 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith november 2002 ++c amended - w. smith january 2005 : f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ integer, parameter :: ncyc=5 ++ ++ logical safe,lshmov,newjob ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc,mode ++ real(8) tstep,taup,taut,sigma,temp,chit,consv,conint,chit0 ++ real(8) engke,elrc,tolnce,vircon,virlrc,volm,press,volm0 ++ real(8) elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass ++ real(8) cons0,cxx,cyy,czz,chip2,fstep ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) com(3),vom(3),czero(9),strkin(9),eta0(9),celp(10) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metdynamics shell thermostat variables ++ ++ data newjob/.true./ ++ ++ save newjob,totmas,volm0,elrc0,virlrc0,dens0 ++ save iatm0,iatm1,hstep,qstep,pmass,qmass,fstep ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2080) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c system total mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c inertia parameter for Nose-Hoover thermostat and barostat ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2090) ++ enddo ++ ++ endif ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metdynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ czero(i)=cell(i) ++ eta0(i)=eta(i) ++ ++ enddo ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c subtract kinetic terms from stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i) ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c calculate current volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstscale_p ++ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ ++ xxx(i)=xxx(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyy(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzz(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c subtract old constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c correct constraint bonds using rattle ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++c add new constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ cell(i)=czero(i) ++ eta(i)=eta0(i) ++ ++ enddo ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c add constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstscale_p ++ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nstvv_h1 ++ ++ end module vv_motion_module ++ +diff -urN dl_class_1.9.orig/srcmod/vv_rotation1_module.f dl_class_1.9/srcmod/vv_rotation1_module.f +--- dl_class_1.9.orig/srcmod/vv_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_rotation1_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,4701 @@ ++ module vv_rotation1_module ++ ++c*********************************************************************** ++c ++c dl_poly module 1 for velocity verlet rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module, only : lmetadyn ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use vv_motion_module ++ use utility_module ++ ++ contains ++ ++ subroutine rotate_omega ++ x (idnode,mxnode,ngrp,tstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for updating the angular velocity and momentum ++c for rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith sept 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,i,j,jr,jrs,ig,igrp1,igrp2,id ++ real(8) ftx,fty,ftz,fmx,fmy,fmz,tstep,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ ++ real(8) p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp) ++ real(8) dtx(mxatms),dty(mxatms),dtz(mxatms),rot(9) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ tq1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ tq2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ tq3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=p0(ig)+tq0*tstep ++ p1(ig)=p1(ig)+tq1*tstep ++ p2(ig)=p2(ig)+tq2*tstep ++ p3(ig)=p3(ig)+tq3*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++ enddo ++ ++ return ++ end subroutine rotate_omega ++ ++ subroutine nosquish(ig,tstep,qq0,qq1,qq2,qq3,pp0,pp1,pp2,pp3) ++ ++c*********************************************************************** ++c ++c dlpoly routine to implement the symplectic no_squish quaternion ++c algorithm of miller et al j.chem.phys 116 (2002) 8649 ++c ++c copyright daresbury laboratory ++c author m. leslie jan 2004 ++c amended w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer m,ig,id ++ real(8) zetax,zetay,zetaz,tstep,cs,sn,trstep ++ ++ integer, parameter :: mrot=10 ++ real(8), parameter :: ov4=0.25d0 ++ real(8), parameter :: ov8=0.125d0 ++ ++ real(8) qq0(*),qq1(*),qq2(*),qq3(*) ++ real(8) pp0(*),pp1(*),pp2(*),pp3(*) ++ ++ real(8) qn1(0:3),pq2(0:3),qn2(0:3),pq3(0:3) ++ real(8) qn3(0:3),pq4(0:3) ++ ++c rotational time step ++ ++ trstep=tstep/dble(mrot) ++ ++c rotation: iterate over mrot rotational time steps ++ ++ id=lstgtp(ig) ++ ++ do m=1,mrot ++ ++ zetaz=ov8*rotinz(id,2)*trstep* ++ x (-pp0(ig)*qq3(ig)+pp1(ig)*qq2(ig)- ++ x pp2(ig)*qq1(ig)+pp3(ig)*qq0(ig)) ++ cs=cos(zetaz) ++ sn=sin(zetaz) ++ qn1(0)=cs*qq0(ig)-sn*qq3(ig) ++ qn1(1)=cs*qq1(ig)+sn*qq2(ig) ++ qn1(2)=cs*qq2(ig)-sn*qq1(ig) ++ qn1(3)=cs*qq3(ig)+sn*qq0(ig) ++ pq2(0)=cs*pp0(ig)-sn*pp3(ig) ++ pq2(1)=cs*pp1(ig)+sn*pp2(ig) ++ pq2(2)=cs*pp2(ig)-sn*pp1(ig) ++ pq2(3)=cs*pp3(ig)+sn*pp0(ig) ++ ++ zetay=ov8*rotiny(id,2)*trstep* ++ x (-pq2(0)*qn1(2)-pq2(1)*qn1(3)+ ++ x pq2(2)*qn1(0)+pq2(3)*qn1(1)) ++ cs=cos(zetay) ++ sn=sin(zetay) ++ qn2(0)=cs*qn1(0)-sn*qn1(2) ++ qn2(1)=cs*qn1(1)-sn*qn1(3) ++ qn2(2)=cs*qn1(2)+sn*qn1(0) ++ qn2(3)=cs*qn1(3)+sn*qn1(1) ++ pq3(0)=cs*pq2(0)-sn*pq2(2) ++ pq3(1)=cs*pq2(1)-sn*pq2(3) ++ pq3(2)=cs*pq2(2)+sn*pq2(0) ++ pq3(3)=cs*pq2(3)+sn*pq2(1) ++ ++ zetax=ov4*rotinx(id,2)*trstep* ++ x (-pq3(0)*qn2(1)+pq3(1)*qn2(0)+ ++ x pq3(2)*qn2(3)-pq3(3)*qn2(2)) ++ cs=cos(zetax) ++ sn=sin(zetax) ++ qn3(0)=cs*qn2(0)-sn*qn2(1) ++ qn3(1)=cs*qn2(1)+sn*qn2(0) ++ qn3(2)=cs*qn2(2)+sn*qn2(3) ++ qn3(3)=cs*qn2(3)-sn*qn2(2) ++ pq4(0)=cs*pq3(0)-sn*pq3(1) ++ pq4(1)=cs*pq3(1)+sn*pq3(0) ++ pq4(2)=cs*pq3(2)+sn*pq3(3) ++ pq4(3)=cs*pq3(3)-sn*pq3(2) ++ ++ zetay=ov8*rotiny(id,2)*trstep* ++ x (-pq4(0)*qn3(2)-pq4(1)*qn3(3)+ ++ x pq4(2)*qn3(0)+pq4(3)*qn3(1)) ++ cs=cos(zetay) ++ sn=sin(zetay) ++ qn2(0)=cs*qn3(0)-sn*qn3(2) ++ qn2(1)=cs*qn3(1)-sn*qn3(3) ++ qn2(2)=cs*qn3(2)+sn*qn3(0) ++ qn2(3)=cs*qn3(3)+sn*qn3(1) ++ pq3(0)=cs*pq4(0)-sn*pq4(2) ++ pq3(1)=cs*pq4(1)-sn*pq4(3) ++ pq3(2)=cs*pq4(2)+sn*pq4(0) ++ pq3(3)=cs*pq4(3)+sn*pq4(1) ++ ++ zetaz=ov8*rotinz(id,2)*trstep* ++ x (-pq3(0)*qn2(3)+pq3(1)*qn2(2)- ++ x pq3(2)*qn2(1)+pq3(3)*qn2(0)) ++ cs=cos(zetaz) ++ sn=sin(zetaz) ++ qq0(ig)=cs*qn2(0)-sn*qn2(3) ++ qq1(ig)=cs*qn2(1)+sn*qn2(2) ++ qq2(ig)=cs*qn2(2)-sn*qn2(1) ++ qq3(ig)=cs*qn2(3)+sn*qn2(0) ++ pp0(ig)=cs*pq3(0)-sn*pq3(3) ++ pp1(ig)=cs*pq3(1)+sn*pq3(2) ++ pp2(ig)=cs*pq3(2)-sn*pq3(1) ++ pp3(ig)=cs*pq3(3)+sn*pq3(0) ++ ++ enddo ++ ++ return ++ end subroutine nosquish ++ ++ subroutine nveqvv_1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author m. leslie jan 2004 ++c amended w.smith jan 2005: f90 conversion ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,jrs,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,engfke ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2100) ++ enddo ++ ++ newjob=.false. ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c merge centre of mass velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge centre of mass position from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nveqvv_1 ++ ++ subroutine nvtqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1 ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,engfke ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2120) ++ enddo ++ ++ newjob=.false. ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algoritm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c exchange position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nvtqvv_b1 ++ ++ subroutine nvtqvv_h1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, ++ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr ++ integer id,ig,ifre,jrs,idum ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) engfke ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c nose-hoover inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2140) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c apply thermostat for first stage ++ ++ if(isw.eq.1)then ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ endif ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algoritm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++ engke=engfke+engtrn ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nvtqvv_h1 ++ ++ subroutine nptqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,chip,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 ++ real(8) virtot,psyst,press,taup,scale,engfke ++ ++ integer, parameter :: nnn=11 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2160) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ if(isw.eq.1)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) ++ ++ endif ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2170) ++ enddo ++ ++ newjob=.false. ++ if(ntcons.gt.0)safe=.false. ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta at start of time step ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c rigid body motion for first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 ++ ++ mxiter=1 ++ if(ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++ scale=1.d0 ++ ++ if(iter.eq.mxiter)then ++ ++c calculate system pressure ++ ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ ++c apply Berendsen barostat ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++ endif ++ ++c update centre of mass position ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=scale*gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=scale*gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=scale*gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=gcmx(ig)+ ++ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ yyy(i)=gcmy(ig)+ ++ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ zzz(i)=gcmz(ig)+ ++ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=scale*xxx(i)+tstep*vxx(i) ++ yyy(i)=scale*yyy(i)+tstep*vyy(i) ++ zzz(i)=scale*zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ if(isw.eq.1)then ++ ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) ++ deallocate(gxo,gyo,gzo,stat=fail(6)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine nptqvv_b1 ++ ++ subroutine nptqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virtot,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr ++ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) taup,temp,press,virtot,vzero,chit0,chip0,cons0 ++ real(8) chip,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas ++ real(8) volm0,scale,cxx,cyy,czz,engfke,fstep ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,hstep,qstep,fstep,pmass,qmass ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 ++ save totmas,dens0,cell0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2200) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) ++ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2210) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gcmx(ig)-com(1) ++ cyy=gcmy(ig)-com(2) ++ czz=gcmz(ig)-com(3) ++ gcmx(ig)=gcmx(ig)+tstep*(gvxx(ig)+chip*cxx) ++ gcmy(ig)=gcmy(ig)+tstep*(gvyy(ig)+chip*cyy) ++ gcmz(ig)=gcmz(ig)+tstep*(gvzz(ig)+chip*czz) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ xxx(i)=xxx(i)+tstep*(vxx(i)+chip*cxx) ++ yyy(i)=yyy(i)+tstep*(vyy(i)+chip*cyy) ++ zzz(i)=zzz(i)+tstep*(vzz(i)+chip*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c operations for second stage only ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c calculate conserved variable ++ ++ consv=conint+0.5d0*qmass*chit**2+press*volm ++ x +0.5d0*pmass*chip**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c end of iteration cycle ++ ++ enddo ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) ++ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) ++ ++ endif ++ ++ return ++ end subroutine nptqvv_h1 ++ ++ subroutine nstqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nst ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk,mode ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engfke ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 ++ real(8) press,taup,xtmp,ytmp,ztmp ++ ++ integer, parameter :: nnn=11 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ real(8) celp(10),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2240) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ if(isw.eq.1)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) ++ ++ endif ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2250) ++ enddo ++ ++ newjob=.false. ++ if(ntcons.gt.0)safe=.false. ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta at start of time step ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c rigid body motion for first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c extract previous constraint terms from stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 ++ ++ mxiter=1 ++ if(ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c zero scaling matrix ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(iter.eq.mxiter)then ++ ++c calculate Berendsen barostat ++ ++ do i=1,9 ++ eta(i)=tstep*beta*(stress(i)+strcns(i)- ++ x press*volm*uni(i))/(taup*volm)+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ endif ++ ++c update centre of mass position ++ ++ do ig=igrp1,igrp2 ++ ++ xtmp=eta(1)*gcmx(ig)+eta(4)*gcmy(ig)+eta(7)*gcmz(ig) ++ ytmp=eta(2)*gcmx(ig)+eta(5)*gcmy(ig)+eta(8)*gcmz(ig) ++ ztmp=eta(3)*gcmx(ig)+eta(6)*gcmy(ig)+eta(9)*gcmz(ig) ++ gcmx(ig)=tstep*gvxx(ig)+xtmp ++ gcmy(ig)=tstep*gvyy(ig)+ytmp ++ gcmz(ig)=tstep*gvzz(ig)+ztmp ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=gcmx(ig)+ ++ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ yyy(i)=gcmy(ig)+ ++ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ zzz(i)=gcmz(ig)+ ++ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=tstep*vxx(i)+ ++ x eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) ++ yyy(i)=tstep*vyy(i)+ ++ x eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) ++ zzz(i)=tstep*vzz(i)+ ++ x eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ if(isw.eq.1)then ++ ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) ++ deallocate(gxo,gyo,gzo,stat=fail(6)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine nstqvv_b1 ++ ++ subroutine nstqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr,mode ++ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) taup,temp,press,vzero,chit0,cons0 ++ real(8) chip2,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas ++ real(8) volm0,cxx,cyy,czz,engfke,fstep ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) ++ real(8) czero(9),eta0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,hstep,qstep,fstep,pmass,qmass ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 ++ save totmas,dens0 ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ if(newjob)then ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2280) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) ++ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2290) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ eta0(i)=eta(i) ++ czero(i)=cell(i) ++ ++ enddo ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, ++ x press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gcmx(ig)-com(1) ++ cyy=gcmy(ig)-com(2) ++ czz=gcmz(ig)-com(3) ++ gcmx(ig)=gcmx(ig)+ ++ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ gcmy(ig)=gcmy(ig)+ ++ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ gcmz(ig)=gcmz(ig)+ ++ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ k=k+1 ++ i=lstfre(ifre) ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ xxx(i)=xxx(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyy(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzz(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c subtract old constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c correct constraint bonds using rattle ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++c add new constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ eta(i)=eta0(i) ++ cell(i)=czero(i) ++ ++ enddo ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c operations for second stage only ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++c add constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c kinetic terms for stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, ++ x press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c end of iteration cycle ++ ++ enddo ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) ++ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) ++ ++ endif ++ ++ return ++ end subroutine nstqvv_h1 ++ ++ end module vv_rotation1_module ++ +diff -urN dl_class_1.9.orig/srcmod/vv_rotation2_module.f dl_class_1.9/srcmod/vv_rotation2_module.f +--- dl_class_1.9.orig/srcmod/vv_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_rotation2_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,5924 @@ ++ module vv_rotation2_module ++ ++c*********************************************************************** ++c ++c dl_poly module 2 for velocity verlet rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module, only : lmetadyn ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use vv_rotation1_module ++ use utility_module ++ ++ contains ++ ++ subroutine qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration in the velocity verlet scheme. assumes rigid ++c bodies connected by constraints. must be used in conjunction with ++c velocity verlet integration algorithm. note the iteration is ++c handled by the calling routine. ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k,ik ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy ++ real(8) tzz,xxt,yyt,zzt,stresh,strs1,strs2,strs3,strs5,strs6 ++ real(8) strs9,tstep2,esig,dis2,tqa,tqb,gamma,dli,dlj ++ ++ real(8), allocatable :: esig1(:),ggx(:),ggy(:),ggz(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension stresh(9),tqa(3),tqb(3) ++ ++ save newjob,esig1,ggx,ggy,ggz ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (esig1(mxcons),ggx(mxcons),ggy(mxcons),ggz(mxcons), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1615) ++ newjob=.false. ++ ++ endif ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c constraint bond vectors are dxx,dyy,dzz (input) ++ ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++ dis2=prmcon(listcon(k,1))**2 ++ esig1(k)=(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 ++ esig=max(esig,abs(esig1(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c continue if any tolerances unsatisfied ++ ++ if(.not.safe)then ++ ++c initialise force increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dis2=prmcon(listcon(k,1))**2 ++ ++ if(newstep)then ++ ++ call pivot(1,i,k,ik,tqa,dxx,dyy,dzz) ++ call pivot(1,j,k,ik,tqb,dxx,dyy,dzz) ++ ++ ggx(k)=tstep2*(tqa(1)+tqb(1))/dis2 ++ ggy(k)=tstep2*(tqa(2)+tqb(2))/dis2 ++ ggz(k)=tstep2*(tqa(3)+tqb(3))/dis2 ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig1(k)/(dxt(k)*ggx(k)+dyt(k)*ggy(k)+dzt(k)*ggz(k)) ++ ++c accumulate bond virial ++ ++ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1+gamma*dxx(k)*dxx(k) ++ strs2=strs2+gamma*dxx(k)*dyy(k) ++ strs3=strs3+gamma*dxx(k)*dzz(k) ++ strs5=strs5+gamma*dyy(k)*dyy(k) ++ strs6=strs6+gamma*dyy(k)*dzz(k) ++ strs9=strs9+gamma*dzz(k)*dzz(k) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)+dxx(k)*gamma ++ yyt(i)=yyt(i)+dyy(k)*gamma ++ zzt(i)=zzt(i)+dzz(k)*gamma ++ xxt(j)=xxt(j)-dxx(k)*gamma ++ yyt(j)=yyt(j)-dyy(k)*gamma ++ zzt(j)=zzt(j)-dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+xxt(i)*dli ++ fyy(i)=fyy(i)+yyt(i)*dli ++ fzz(i)=fzz(i)+zzt(i)*dli ++ fxx(j)=fxx(j)+xxt(j)*dlj ++ fyy(j)=fyy(j)+yyt(j)*dlj ++ fzz(j)=fzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++c complete stress tensor ++ ++ stresh(1)=stresh(1)+strs1 ++ stresh(2)=stresh(2)+strs2 ++ stresh(3)=stresh(3)+strs3 ++ stresh(4)=stresh(4)+strs2 ++ stresh(5)=stresh(5)+strs5 ++ stresh(6)=stresh(6)+strs6 ++ stresh(7)=stresh(7)+strs3 ++ stresh(8)=stresh(8)+strs6 ++ stresh(9)=stresh(9)+strs9 ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ ++ endif ++ ++ return ++ end subroutine qrattle_r ++ ++ subroutine qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration in the velocity verlet scheme. assumes rigid ++c bodies connected by constraints. must be used in conjunction with ++c velocity verlet integration algorithm. note the iteration is ++c handled by the calling routine. ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,mxnode,natms,nscons,i,j,k,ik ++ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,tqa,tqb ++ real(8) xxt,yyt,zzt,tstep2,esig,gamma,dli,dlj ++ real(8) tolvel ++ ++ real(8), allocatable :: esig2(:),hhx(:),hhy(:),hhz(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension tqa(3),tqb(3) ++ ++ save newjob,esig2,hhx,hhy,hhz ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (esig2(mxcons),hhx(mxcons),hhy(mxcons),hhz(mxcons), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1625) ++ newjob=.false. ++ ++ endif ++ ++c constraint bond vectors are dxx,dyy,dzz (input) ++ ++c half timestep ++ ++ tstep2=tstep/2.d0 ++ ++c tolerance for velocity convergence ++ ++ tolvel=tolnce/tstep ++ ++c calculate maximum error in constraint ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ esig2(k)=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ ++ x dzz(k)*(vzz(i)-vzz(j))) ++ esig=max(esig,abs(esig2(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolvel) ++ ++ if(mxnode.gt.1)then ++ call gstate(safe) ++ endif ++ ++c continue if all tolerances satisfied else return to calling routine ++ ++ if(.not.safe)then ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint correction ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(newstep)then ++ ++ call pivot(2,i,k,ik,tqa,dxx,dyy,dzz) ++ call pivot(2,j,k,ik,tqb,dxx,dyy,dzz) ++ ++ hhx(k)=tstep2*(tqa(1)+tqb(1)) ++ hhy(k)=tstep2*(tqa(2)+tqb(2)) ++ hhz(k)=tstep2*(tqa(3)+tqb(3)) ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig2(k)/(dxx(k)*hhx(k)+dyy(k)*hhy(k)+dzz(k)*hhz(k)) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)-dxx(k)*gamma ++ yyt(i)=yyt(i)-dyy(k)*gamma ++ zzt(i)=zzt(i)-dzz(k)*gamma ++ xxt(j)=xxt(j)+dxx(k)*gamma ++ yyt(j)=yyt(j)+dyy(k)*gamma ++ zzt(j)=zzt(j)+dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+dli*xxt(i) ++ fyy(i)=fyy(i)+dli*yyt(i) ++ fzz(i)=fzz(i)+dli*zzt(i) ++ fxx(j)=fxx(j)+dlj*xxt(j) ++ fyy(j)=fyy(j)+dlj*yyt(j) ++ fzz(j)=fzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine qrattle_v ++ ++ subroutine pivot(k,i,kk,ik,tqq,dxx,dyy,dzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for computing pivot vector for velocity ++c corrections to bonds between rigid bodies ++c must be used in conjunction with qrattle routines: ++c if k=1 - use with qrattle_r ++c if k=2 - use with qrattle_v ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer k,i,kk,ik,ig,id,jj ++ real(8) xxa,yya,zza,tax,tay,taz,trx,try,trz,vix,viy,viz ++ real(8) rot(9),tqq(3),dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ ++ ig=lstbod(i) ++ ++ if(ig.eq.0)then ++ ++c atoms in constraint bonds ++ ++ tqq(1)=dxx(kk)*rmass(i) ++ tqq(2)=dyy(kk)*rmass(i) ++ tqq(3)=dzz(kk)*rmass(i) ++ ++ else ++ ++c terms for rigid body atoms ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ tqq(1)=dxx(kk)/gmass(id) ++ tqq(2)=dyy(kk)/gmass(id) ++ tqq(3)=dzz(kk)/gmass(id) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c com-site vector in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+gzz(id,jj)*rot(9)) ++ ++c cross product of com-site vector and interatomic vector ++ ++ tax=yya*dzz(kk)-zza*dyy(kk) ++ tay=zza*dxx(kk)-xxa*dzz(kk) ++ taz=xxa*dyy(kk)-yya*dxx(kk) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++ if(k.eq.1)then ++ ++c direction of induced velocites in body frame ++ ++ vix=try*gzz(id,jj)-trz*gyy(id,jj) ++ viy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ viz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ tqq(1)=tqq(1)+vix*rot(1)+viy*rot(2)+viz*rot(3) ++ tqq(2)=tqq(2)+vix*rot(4)+viy*rot(5)+viz*rot(6) ++ tqq(3)=tqq(3)+vix*rot(7)+viy*rot(8)+viz*rot(9) ++ ++ elseif(k.eq.2)then ++ ++c transform to lab frame ++ ++ tqq(1)=tqq(1)+trx*rot(1)+try*rot(2)+trz*rot(3) ++ tqq(2)=tqq(2)+trx*rot(4)+try*rot(5)+trz*rot(6) ++ tqq(3)=tqq(3)+trx*rot(7)+try*rot(8)+trz*rot(9) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine pivot ++ ++ subroutine nveqvv_2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith jan 2005 ++c amended w.smith feb 2005: qrattle added ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2110) ++ enddo ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge free atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ ++ engke=engke+engtrn ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nveqvv_2 ++ ++ subroutine nvtqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke ++ real(8) engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(mxatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2130) ++ enddo ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engke+engtrn+engrot ++ engke=engke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nvtqvv_b2 ++ ++ subroutine nvtqvv_h2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, ++ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,engfke ++ real(8) taut,sigma,chit,hstep,qmass,conint,consv ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c nose-hoover inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2150) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c apply thermostat for first stage ++ ++ if(isw.eq.1)then ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ engke=engfke+engtrn ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nvtqvv_h2 ++ ++ subroutine nptqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sep 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig,ntpatm ++ integer iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke,engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit ++ real(8) volm,elrc0,elrc,virlrc0,virlrc,scale,psyst,virtot,chip ++ real(8) beta,press,taup,engfke,vzero ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ save newstep,newjob,volm0,elrc0,virlrc0,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2180) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(12)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(13)) ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2190) ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c cell parameters ++ ++ vzero=volm ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++ endif ++ ++c -------------- start of barostat iteration cycle ----------------- ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c calculate system pressure ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ ++c apply Berendsen barostat ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ chip=1.d0 ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++c reset constraint virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=scale*gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=scale*gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=scale*gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=scale*xxo(i)+tstep*vxx(i) ++ yyy(i)=scale*yyo(i)+tstep*vyy(i) ++ zzz(i)=scale*zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ if(isw.eq.2)call bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=uni(i)*scale ++ enddo ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ ++ return ++ end subroutine nptqvv_b2 ++ ++ subroutine nptqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virtot,virlrc,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm ++ integer jcyc,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,engfke ++ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv ++ real(8) cxx,cyy,czz,scale,virtot,press,chip,temp ++ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc ++ real(8) virlrc,elrc0,virlrc0,chit0,chip0,vzero,cons0 ++ ++ integer, parameter :: nnn=16 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: vx1(:),vy1(:),vz1(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas ++ save pmass ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2220) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) ++ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) ++ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), ++ x stat=fail(13)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), ++ x stat=fail(14)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) ++ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2230) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c store key config data at start of timestep ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c store rigid body positions ++ ++ do ig=1,ngrp ++ ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ do i=1,natms ++ ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++c integration of barostat and thermostat (part 1) ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore free atom velocities ++ ++ do i=1,natms ++ ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++c restore rigid body quaternions angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++c current constraint virial ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/vzero)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c reset constraint virial and stress ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) ++ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) ++ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) ++ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store intermediate velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vx1(i)=vxx(i) ++ vy1(i)=vyy(i) ++ vz1(i)=vzz(i) ++ ++ enddo ++ do ig=igrp1,igrp2 ++ ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gvx1(ig)=gvxx(ig) ++ gvy1(ig)=gvyy(ig) ++ gvz1(ig)=gvzz(ig) ++ ++ enddo ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c restore rigid body quaternions, angular momenta and velocities ++ ++ do ig=igrp1,igrp2 ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gvxx(ig)=gvx1(ig) ++ gvyy(ig)=gvy1(ig) ++ gvzz(ig)=gvz1(ig) ++ ++ enddo ++ ++c calculate new rigid body velocities ++ ++ call rotate_omega ++ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update centre of mass position by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gxo(ig)-com(1) ++ cyy=gyo(ig)-com(2) ++ czz=gzo(ig)-com(3) ++ gcmx(ig)=gxo(ig)+tstep*(gvxx(ig)+chip*cxx) ++ gcmy(ig)=gyo(ig)+tstep*(gvyy(ig)+chip*cyy) ++ gcmz(ig)=gzo(ig)+tstep*(gvzz(ig)+chip*czz) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxo(i)-com(1) ++ cyy=yyo(i)-com(2) ++ czz=zzo(i)-com(3) ++ xxx(i)=xxo(i)+tstep*(vxx(i)+chip*cxx) ++ yyy(i)=yyo(i)+tstep*(vyy(i)+chip*cyy) ++ zzz(i)=zzo(i)+tstep*(vzz(i)+chip*czz) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c integration of barostat and thermostat (part 2) ++ ++ if(isw.eq.2)then ++ ++c current constraint virial ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/vzero)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++ endif ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.2)then ++ ++c calculate conserved variable ++ ++ consv=conint+0.5d0*qmass*chit**2+press*volm ++ x +0.5d0*pmass*chip**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c merge velocity arrays ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c exchange position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(oxo,oyo,ozo,dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ ++ return ++ end subroutine nptqvv_h2 ++ ++ subroutine nstqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nst ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sep 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode ++ integer iter,mxiter,jrs ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke ++ real(8) engtrn,taut,sigma,chit ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ real(8) volm,elrc0,elrc,virlrc0,virlrc ++ real(8) beta,press,taup,engfke,hstep,vzero ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),uni(9),celp(10) ++ real(8) cell0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ save newstep,newjob,volm0,elrc0,virlrc0,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,hstep ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2260) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(12)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(13)) ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2270) ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c cell parameters ++ ++ vzero=volm ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c extract previous constraint terms from stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++ endif ++ ++c -------------- start of barostat iteration cycle ----------------- ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c calculate Berendsen barostat ++ ++ do i=1,9 ++ eta(i)=tstep*beta*((stress(i)+strcns(i))/volm- ++ x press*uni(i))/taup+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c reset constraint virial ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*hstep ++ p1(ig)=c1(jg)+tq1*hstep ++ p2(ig)=c2(jg)+tq2*hstep ++ p3(ig)=c3(jg)+tq3*hstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=tstep*gvxx(ig)+ ++ x eta(1)*gxo(jg)+eta(4)*gyo(jg)+eta(7)*gzo(jg) ++ gcmy(ig)=tstep*gvyy(ig)+ ++ x eta(2)*gxo(jg)+eta(5)*gyo(jg)+eta(8)*gzo(jg) ++ gcmz(ig)=tstep*gvzz(ig)+ ++ x eta(3)*gxo(jg)+eta(6)*gyo(jg)+eta(9)*gzo(jg) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=tstep*vxx(i)+ ++ x eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) ++ yyy(i)=tstep*vyy(i)+ ++ x eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) ++ zzz(i)=tstep*vzz(i)+ ++ x eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ if(isw.eq.2)call bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ ++ return ++ end subroutine nstqvv_b2 ++ ++ subroutine nstqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sept 2005 ++c adapted d. quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode ++ integer jcyc,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,engfke ++ real(8) vaa,vbb,vcc,opx,opy,opz ++ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv ++ real(8) cxx,cyy,czz,press,chip2,temp ++ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc ++ real(8) virlrc,elrc0,virlrc0,chit0,vzero,cons0 ++ ++ integer, parameter :: nnn=16 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) ++ real(8) cell0(9),eta0(9),stres0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: vx1(:),vy1(:),vz1(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas ++ save pmass ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2220) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) ++ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) ++ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), ++ x stat=fail(13)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), ++ x stat=fail(14)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) ++ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2230) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c store key config data at start of timestep ++ ++ vzero=volm ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ eta0(i)=eta(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c store rigid body positions ++ ++ do ig=1,ngrp ++ ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ do i=1,natms ++ ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++c integration of barostat and thermostat (part 1) ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ cell(i)=cell0(i) ++ eta(i)=eta0(i) ++ ++ enddo ++ ++c restore free atom velocities ++ ++ do i=1,natms ++ ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++c restore rigid body quaternions angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++c kinetic contributions to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, ++ x volm,strkin,strgrp) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c reset constraint virial and stress ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ stress(i)=stress(i)-strcns(i)-strbod(i) ++ strcns(i)=0.d0 ++ ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) ++ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) ++ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) ++ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store intermediate velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vx1(i)=vxx(i) ++ vy1(i)=vyy(i) ++ vz1(i)=vzz(i) ++ ++ enddo ++ do ig=igrp1,igrp2 ++ ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gvx1(ig)=gvxx(ig) ++ gvy1(ig)=gvyy(ig) ++ gvz1(ig)=gvzz(ig) ++ ++ enddo ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c restore rigid body quaternions, angular momenta and velocities ++ ++ do ig=igrp1,igrp2 ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gvxx(ig)=gvx1(ig) ++ gvyy(ig)=gvy1(ig) ++ gvzz(ig)=gvz1(ig) ++ ++ enddo ++ ++c calculate new rigid body velocities ++ ++ call rotate_omega ++ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update centre of mass position by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gxo(ig)-com(1) ++ cyy=gyo(ig)-com(2) ++ czz=gzo(ig)-com(3) ++ gcmx(ig)=gxo(ig)+ ++ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ gcmy(ig)=gyo(ig)+ ++ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ gcmz(ig)=gzo(ig)+ ++ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxo(i)-com(1) ++ cyy=yyo(i)-com(2) ++ czz=zzo(i)-com(3) ++ xxx(i)=xxo(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyo(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzo(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add new constraint terms to stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strbod(i) ++ enddo ++ ++ endif ++ ++c integration of barostat and thermostat (part 2) ++ ++ if(isw.eq.2)then ++ ++c kinetic contributions to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add kinetic and body contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, ++ x volm,strkin,strgrp) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c sum up all contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.2)then ++ ++c calculate conserved variable ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c merge velocity arrays ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nstqvv_h2 ++ ++ end module vv_rotation2_module -- GitLab From 39cfc61ec5910bf0b8d8d912abecb8e7fe9c4a5f Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 9 Nov 2015 17:59:54 +0100 Subject: [PATCH 0013/1311] Fix typo --- .../DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb index fa6e102be0..f8950cea9a 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'intel', 'version': '2015b'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] -builddependencies = [('PLUMED', '2.2')] +builddependencies = [('PLUMED', '2.2.0')] patches = [('plumed-2.2.patch', 1)] -- GitLab From a5fdeab2d85cb17b3e524955cf5d3e9c45c0b67f Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 10 Nov 2015 11:26:30 +0100 Subject: [PATCH 0014/1311] Reworked DL_POLY with plumed a bit --- ...eb => DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb} | 8 +++++--- .../{plumed-2.2.patch => PLUMED-2.2.0.patch} | 0 2 files changed, 5 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/d/DL_POLY_Classic/{DL_POLY_Classic-1.9-intel-2015b-plumed2.eb => DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb} (84%) rename easybuild/easyconfigs/d/DL_POLY_Classic/{plumed-2.2.patch => PLUMED-2.2.0.patch} (100%) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb similarity index 84% rename from easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb rename to easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb index f8950cea9a..d38be45cba 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-plumed2.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb @@ -2,7 +2,6 @@ easyblock = 'MakeCp' name = 'DL_POLY_Classic' version = '1.9' -versionsuffix = '-plumed2' homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' description = """DL_POLY Classic is a freely available molecular dynamics program developed @@ -13,9 +12,12 @@ toolchain = {'name': 'intel', 'version': '2015b'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] -builddependencies = [('PLUMED', '2.2.0')] +plumedversion = '2.2.0' +versionsuffix = '-PLUMED-%(plumedversion)s' -patches = [('plumed-2.2.patch', 1)] +dependencies = [('PLUMED', plumedversion)] + +patches = [('plumed-%(plumedversion)s.patch', 1)] prebuildopts = 'cd srcmod && ' buildopts = 'gfortran' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch similarity index 100% rename from easybuild/easyconfigs/d/DL_POLY_Classic/plumed-2.2.patch rename to easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch -- GitLab From 0a517d8a7d6a0811e0d92eab67c6fd40d225537c Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 10 Nov 2015 12:02:52 +0100 Subject: [PATCH 0015/1311] Fix template error --- .../DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb index d38be45cba..dcdb0de073 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb @@ -13,11 +13,12 @@ sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] plumedversion = '2.2.0' -versionsuffix = '-PLUMED-%(plumedversion)s' +versionsuffix = '-PLUMED-%s' % plumedversion dependencies = [('PLUMED', plumedversion)] -patches = [('plumed-%(plumedversion)s.patch', 1)] +# this patch needs to be regenerated for another version of PLUMED +patches = [('plumed-%s.patch' % plumedversion, 1)] prebuildopts = 'cd srcmod && ' buildopts = 'gfortran' -- GitLab From ae2010dd70c24115ce4f8c2d2b60b93e81bec309 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 10 Nov 2015 13:32:17 +0100 Subject: [PATCH 0016/1311] Fix typo --- .../DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb index dcdb0de073..caf84040c2 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb @@ -18,7 +18,7 @@ versionsuffix = '-PLUMED-%s' % plumedversion dependencies = [('PLUMED', plumedversion)] # this patch needs to be regenerated for another version of PLUMED -patches = [('plumed-%s.patch' % plumedversion, 1)] +patches = [('PLUMED-%s.patch' % plumedversion, 1)] prebuildopts = 'cd srcmod && ' buildopts = 'gfortran' -- GitLab From 6abfb7b29f3d2a04153fa611148e5b5c1c0ad1c1 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 16 Nov 2015 10:36:09 +0100 Subject: [PATCH 0017/1311] Fix PLUMED patch for DL_POLY Link dynamically with PLUMED --- easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch index 9e8fe4cde6..b6219c6207 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch @@ -8,7 +8,7 @@ diff -urN dl_class_1.9.orig/Plumed.cmake dl_class_1.9/Plumed.cmake +++ dl_class_1.9/Plumed.cmake 2015-11-09 14:26:25.657769545 +0100 @@ -0,0 +1,3 @@ +# PLUMED: runtime installation -+set(PLUMED_LOAD "$ENV{EBROOTPLUMED}/lib/plumed/obj/Plumed.o" -ldl ) ++set(PLUMED_LOAD -L$ENV{EBROOTPLUMED}/lib -lplumed -ldl ) +set(PLUMED_DEPENDENCIES ) diff -urN dl_class_1.9.orig/Plumed.h dl_class_1.9/Plumed.h --- dl_class_1.9.orig/Plumed.h 1970-01-01 01:00:00.000000000 +0100 @@ -519,7 +519,7 @@ diff -urN dl_class_1.9.orig/Plumed.inc dl_class_1.9/Plumed.inc +++ dl_class_1.9/Plumed.inc 2015-11-09 14:26:16.827714651 +0100 @@ -0,0 +1,3 @@ +# PLUMED: runtime installation -+PLUMED_LOAD= "$(EBROOTPLUMED)/lib/plumed/obj/Plumed.o" -ldl ++PLUMED_LOAD= -L$(EBROOTPLUMED)/lib -lplumed -ldl +PLUMED_DEPENDENCIES= diff -urN dl_class_1.9.orig/srcmod/angles_module.f dl_class_1.9/srcmod/angles_module.f --- dl_class_1.9.orig/srcmod/angles_module.f 1970-01-01 01:00:00.000000000 +0100 -- GitLab From 0f9d61816bad6deaacb7303979be51b7169de308 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 16 Nov 2015 11:46:24 +0100 Subject: [PATCH 0018/1311] Fix sanity check for libffi --- easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb index 535d967631..01fb77588e 100644 --- a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-intel-2015b.eb @@ -18,7 +18,7 @@ sources = [SOURCELOWER_TAR_GZ] patches = ['libffi-%(version)s_include-xmmintrin.patch'] sanity_check_paths = { - 'files': ['lib/libffi.%s' % SHLIB_EXT, 'lib/libffi.a'], + 'files': [('lib/libffi.%s' % SHLIB_EXT, 'lib64/libffi.%s' % SHLIB_EXT), ('lib/libffi.a', 'lib64/libffi.a')], 'dirs': [], } -- GitLab From d18119ee1b09e0ec28e141b412f930e5bc01a78a Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 16 Nov 2015 18:05:43 +0100 Subject: [PATCH 0019/1311] Added DL_POLY with Plumed-2.1.4 using foss/2015b --- .../b/Bison/Bison-3.0.4-foss-2015b.eb | 22 + .../b/byacc/byacc-20150711-foss-2015b.eb | 22 + ...OLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb | 39 + .../d/DL_POLY_Classic/PLUMED-2.1.4.patch | 95318 ++++++++++++++++ .../g/GMP/GMP-6.0.0a-foss-2015b.eb | 27 + .../easyconfigs/g/GSL/GSL-1.16-foss-2015b.eb | 18 + .../g/guile/guile-1.8.8-foss-2015b.eb | 31 + .../l/libffi/libffi-3.0.13-foss-2015b.eb | 25 + .../libmatheval-1.1.11-foss-2015b.eb | 33 + .../libunistring-0.9.3-foss-2015b.eb | 26 + .../easyconfigs/m/M4/M4-1.4.17-foss-2015b.eb | 23 + .../p/PLUMED/PLUMED-2.1.4-foss-2015b.eb | 42 + .../pkg-config-0.27.1-foss-2015b.eb | 27 + 13 files changed, 95653 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bison/Bison-3.0.4-foss-2015b.eb create mode 100644 easybuild/easyconfigs/b/byacc/byacc-20150711-foss-2015b.eb create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch create mode 100644 easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb create mode 100644 easybuild/easyconfigs/g/GSL/GSL-1.16-foss-2015b.eb create mode 100644 easybuild/easyconfigs/g/guile/guile-1.8.8-foss-2015b.eb create mode 100644 easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb create mode 100644 easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb create mode 100644 easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb create mode 100644 easybuild/easyconfigs/m/M4/M4-1.4.17-foss-2015b.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-foss-2015b.eb create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb diff --git a/easybuild/easyconfigs/b/Bison/Bison-3.0.4-foss-2015b.eb b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-foss-2015b.eb new file mode 100644 index 0000000000..5555d066b8 --- /dev/null +++ b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-foss-2015b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'Bison' +version = '3.0.4' + +homepage = 'http://www.gnu.org/software/bison' +description = """Bison is a general-purpose parser generator that converts an annotated context-free grammar + into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [('M4', '1.4.17')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["bison", "yacc"]] + ["lib/liby.a"], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/b/byacc/byacc-20150711-foss-2015b.eb b/easybuild/easyconfigs/b/byacc/byacc-20150711-foss-2015b.eb new file mode 100644 index 0000000000..6fabc38da7 --- /dev/null +++ b/easybuild/easyconfigs/b/byacc/byacc-20150711-foss-2015b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'byacc' +version = '20150711' + +homepage = 'http://invisible-island.net/byacc/byacc.html' +description = """Berkeley Yacc (byacc) is generally conceded to be the best yacc variant available. + In contrast to bison, it is written to avoid dependencies upon a particular compiler.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TGZ] +source_urls = ['ftp://invisible-island.net/byacc'] + +checksums = ['2700401030583c4e9169ac7ea7d08de8'] + +sanity_check_paths = { + 'files': ["bin/yacc"], + 'dirs': [] +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb new file mode 100644 index 0000000000..4f3144bb99 --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb @@ -0,0 +1,39 @@ +easyblock = 'MakeCp' + +name = 'DL_POLY_Classic' +version = '1.9' + +homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' +description = """DL_POLY Classic is a freely available molecular dynamics program developed + from the DL_POLY_2 package. This version does not install the java gui.""" + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'usempi': True} + +sources = ['dl_class_%(version)s.tar.gz'] +source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] + +plumedversion = '2.1.4' +versionsuffix = '-PLUMED-%s' % plumedversion + +dependencies = [('PLUMED', plumedversion)] + +# this patch needs to be regenerated for another version of PLUMED +patches = [('PLUMED-%s.patch' % plumedversion, 1)] + +prebuildopts = 'cd srcmod && ' +buildopts = 'gfortran' + +files_to_copy = [(["execute/cleanup", "execute/copy", "execute/DLPOLY.X", + "execute/gopoly", "execute/gui", "execute/select", + "execute/store", "execute/supa"], 'bin')] + +sanity_check_paths = { + 'files': ['bin/DLPOLY.X'], + 'dirs': [] +} + +# parallel build tends to break +parallel = 1 + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch new file mode 100644 index 0000000000..5f59693c28 --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch @@ -0,0 +1,95318 @@ +# This patch allows to use Plumed 2.1.4 with DL_POLY. It is autogenerated with the help +# of Plumed and https://groups.google.com/forum/#!topic/plumed-users/cWaIDU5F6Bw +# Follow the instructions on that forum and you can generate the patch below +# The makefile is also adjust to use the EB set values for building +# Ward Poelmans + +diff -urN dl_class_1.9.orig/build/MakePAR dl_class_1.9/build/MakePAR +--- dl_class_1.9.orig/build/MakePAR 2011-02-22 12:46:11.000000000 +0100 ++++ dl_class_1.9/build/MakePAR 2015-11-16 17:17:11.322040795 +0100 +@@ -6,10 +6,10 @@ + #======================================================================= + + BINROOT = ../execute +-CC = gcc ++CC := $(MPICC) + EX = DLPOLY.X + EXE = $(BINROOT)/$(EX) +-FC=undefined ++FC := $(MPIF90) + SHELL=/bin/sh + TYPE=par + +@@ -54,9 +54,9 @@ + + #================== GNU Fortran, MPI version ============================== + gfortran: +- $(MAKE) FC="mpif90" LD="mpif90 -o" \ +- LDFLAGS="-O2 -ffast-math" \ +- FFLAGS="-c -O2 -ffast-math" \ ++ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ ++ LDFLAGS="$(LDFLAGS)" \ ++ FFLAGS="-c $(FFLAGS)" \ + EX=$(EX) BINROOT=$(BINROOT) $(TYPE) + + #================= Woodcrest ========================================= +diff -urN dl_class_1.9.orig/Plumed.cmake dl_class_1.9/Plumed.cmake +--- dl_class_1.9.orig/Plumed.cmake 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.cmake 2015-11-16 17:23:39.940977000 +0100 +@@ -0,0 +1,3 @@ ++# PLUMED: runtime installation ++set(PLUMED_LOAD -L$ENV{EBROOTPLUMED}/lib -lplumed -ldl ) ++set(PLUMED_DEPENDENCIES) +diff -urN dl_class_1.9.orig/Plumed.h dl_class_1.9/Plumed.h +--- dl_class_1.9.orig/Plumed.h 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.h 2015-10-13 11:08:41.000000000 +0200 +@@ -0,0 +1,494 @@ ++/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ Copyright (c) 2011-2014 The plumed team ++ (see the PEOPLE file at the root of the distribution for a list of names) ++ ++ See http://www.plumed-code.org for more information. ++ ++ This file is part of plumed, version 2. ++ ++ plumed is free software: you can redistribute it and/or modify ++ it under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ plumed is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with plumed. If not, see . +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ ++#ifndef __PLUMED_wrapper_Plumed_h ++#define __PLUMED_wrapper_Plumed_h ++ ++/** ++\page ReferencePlumedH Reference for interfacing MD codes with PLUMED ++ ++ Plumed.h and Plumed.c contain the external plumed interface, which is used to ++ integrate it with MD engines. This interface is very general, and is expected ++ not to change across plumed versions. Plumed.c also implements a dummy version ++ of the interface, so as to allow a code to be fully linked even if the plumed ++ library is not available yet. These files could be directly included in the official ++ host MD distribution. In this manner, it will be sufficient to link the plumed ++ library at link time (on all systems) or directly at runtime (on system where ++ dynamic loading is enabled) to include plumed features. ++ ++ Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o ++ needs to be linked with the host MD code immediately (whereas the rest of plumed ++ could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we ++ link the Plumed.o file we would like not to need any C++ library linked. In this ++ manner, we do not need to know which C++ compiler will be used to compile plumed. ++ The C++ library is only linked to the "rest" of plumed, which actually use it. ++ Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ ++ (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, ++ which basically includes Plumed.c, is compiled with the C++ compiler). This will ++ allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into ++ Plumed.cpp), without the need of configuring a plain C compiler. ++ ++ Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed ++ is hidden inside a single object type, which is described in C by a structure ++ (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a ++ fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct ++ and class interfaces, but the first should be preferred. The reference interface ++ is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers ++ around it. ++ ++ In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. ++ In the C and FORTRAN interfaces, all the routines are named plumed_*, to ++ avoid potential name clashes. Notice that the entire plumed library ++ is implemented in C++, and it is hidden inside the PLMD namespace. ++ ++ Handlers to the plumed object can be converted among different representations, ++ to allow inter-operability among languages. In C, there are tools to convert ++ to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. ++ ++ These handlers only contain a pointer to the real structure, so that ++ when a plumed object is brought from one language to another, ++ it brings a reference to the same environment. ++ ++ Moreover, to simplify life in all cases where a single Plumed object is ++ required for the entire simulation (which covers most of the practical ++ applications with conventional MD codes) it is possible to take advantage ++ of a global interface, which is implicitly referring to a unique global instance. ++ The global object should still be initialized and finalized properly. ++ ++ The basic method to send a message to plumed is ++\verbatim ++ (C) plumed_cmd ++ (C++) PLMD::Plumed::cmd ++ (FORTRAN) PLUMED_F_CMD ++\endverbatim ++ ++ To initialize a plumed object, use: ++\verbatim ++ (C) plumed_create ++ (C++) (constructor of PLMD::Plumed) ++ (FORTRAN) PLUMED_F_CREATE ++\endverbatim ++ ++ To finalize it, use ++\verbatim ++ (C) plumed_finalize ++ (C++) (destructor of PLMD::Plumed) ++ (FORTRAN) PLUMED_F_FINALIZE ++\endverbatim ++ ++ To access to the global-object, use ++\verbatim ++ (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd ++ (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd ++ (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD ++\endverbatim ++ ++ To check if the global object has been initialized, use ++\verbatim ++ (C) plumed_ginitialized ++ (C++) PLMD::Plumed::ginitialized ++ (FORTRAN) PLUMED_F_GINITIALIZED ++\endverbatim ++ ++ To check if plumed library is available (this is useful for runtime linking), use ++\verbatim ++ (C) plumed_installed ++ (C++) PLMD::Plumed::installed ++ (FORTRAN) PLUMED_F_INSTALLED ++\endverbatim ++ ++ To convert handlers use ++\verbatim ++ (C) plumed_c2f (C to FORTRAN) ++ (C) plumed_f2c (FORTRAN to C) ++ (C++) Plumed(plumed) constructor (C to C++) ++ (C++) operator plumed() cast (C++ to C) ++ (C++) Plumed(char*) constructor (FORTRAN to C++) ++ (C++) toFortran(char*) (C++ to FORTRAN) ++\endverbatim ++ ++\verbatim ++ FORTRAN interface ++ SUBROUTINE PLUMED_F_INSTALLED(i) ++ INTEGER, INTENT(OUT) :: i ++ SUBROUTINE PLUMED_F_GINITIALIZED(i) ++ INTEGER, INTENT(OUT) :: i ++ SUBROUTINE PLUMED_F_GCREATE() ++ SUBROUTINE PLUMED_F_GCMD(key,val) ++ CHARACTER(LEN=*), INTENT(IN) :: key ++ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) ++ SUBROUTINE PLUMED_F_GFINALIZE() ++ SUBROUTINE PLUMED_F_GLOBAL(p) ++ CHARACTER(LEN=32), INTENT(OUT) :: p ++ SUBROUTINE PLUMED_F_CREATE(p) ++ CHARACTER(LEN=32), INTENT(OUT) :: p ++ SUBROUTINE PLUMED_F_CMD(p,key,val) ++ CHARACTER(LEN=32), INTENT(IN) :: p ++ CHARACTER(LEN=*), INTENT(IN) :: key ++ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) ++ SUBROUTINE PLUMED_F_FINALIZE(p) ++ CHARACTER(LEN=32), INTENT(IN) :: p ++\endverbatim ++ ++ The main routine is "cmd", which accepts two arguments: ++ key is a string containing the name of the command ++ val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed ++ is going to modify val in several cases (using a const_cast). ++ In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). ++ The set of possible keys is the real API of the plumed library, and will be expanded with time. ++ New commands will be added, but backward compatibility will be retained as long as possible. ++ ++ To pass plumed a callback function use the following syntax (not available in FORTRAN yet) ++\verbatim ++ plumed_function_holder ff; ++ ff.p=your_function; ++ plumed_cmd(plumed,"xxxx",&ff); ++\endverbatim ++ (this is passing the your_function() function to the "xxxx" command) ++*/ ++ ++#ifdef __cplusplus ++ extern "C" { ++#endif ++ ++/* Generic function pointer */ ++typedef void (*plumed_function_pointer)(void); ++ ++/** ++ \brief Holder for function pointer. ++ ++ To pass plumed a callback function use the following syntax: ++\verbatim ++ plumed_function_holder ff; ++ ff.p=your_function; ++ plumed_cmd(plumed,"xxxx",&ff); ++\endverbatim ++ (this is going to pass the your_function() function to the "xxxx" command) ++*/ ++ ++typedef struct { ++ plumed_function_pointer p; ++} plumed_function_holder; ++ ++/** ++ \brief Main plumed object ++ ++ This is an object containing a Plumed instance, which should be used in ++ the MD engine. It should first be initialized with plumed_create(), ++ then it communicates with the MD engine using plumed_cmd(). Finally, ++ before the termination, it should be deallocated with plumed_finalize(). ++ Its interface is very simple and general, and is expected ++ not to change across plumed versions. See \ref ReferencePlumedH. ++*/ ++typedef struct { ++/** ++ \private ++ \brief Void pointer holding the real PlumedMain structure ++*/ ++ void*p; ++} plumed; ++ ++/** \relates plumed ++ \brief Constructor ++ ++ \return The constructed plumed object ++*/ ++plumed plumed_create(void); ++ ++/** \relates plumed ++ \brief Tells p to execute a command ++ ++ \param p The plumed object on which command is acting ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), ++ but for some choice of key it can change the content ++*/ ++void plumed_cmd(plumed p,const char*key,const void*val); ++ ++/** \relates plumed ++ \brief Destructor ++ ++ \param p The plumed object to be deallocated ++*/ ++void plumed_finalize(plumed p); ++ ++/** \relates plumed ++ \brief Check if plumed is installed (for runtime binding) ++ ++ \return 1 if plumed is installed, to 0 otherwise ++*/ ++int plumed_installed(void); ++ ++/** \relates plumed ++ \brief Retrieves an handler to the global structure. ++*/ ++plumed plumed_global(void); ++ ++/** \relates plumed ++ \brief Check if the global interface has been initialized ++ ++ \return 1 if plumed has been initialized, 0 otherwise ++*/ ++int plumed_ginitialized(void); ++ ++/* global C interface, working on a global object */ ++ ++/** \relates plumed ++ \brief Constructor for the global interface. ++ ++ \note Equivalent to plumed_create(), but initialize a static global plumed object ++*/ ++void plumed_gcreate(void); ++ ++/** \relates plumed ++ \brief Tells to the global interface to execute a command. ++ ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), ++ but for some choice of key it can change the content ++ ++ \note Equivalent to plumed_cmd(), but skipping the plumed argument ++*/ ++void plumed_gcmd(const char* key,const void* val); ++ ++/** \relates plumed ++ \brief Destructor for the global interface. ++ ++ \note Equivalent to plumed_finalize(), but skipping the plumed argument ++*/ ++void plumed_gfinalize(void); ++ ++/* routines to convert char handler from/to plumed objects */ ++ ++/** \related plumed ++ \brief Converts a C handler to a FORTRAN handler ++ ++ \param p The C handler ++ \param c The FORTRAN handler (a char[32]) ++*/ ++void plumed_c2f(plumed p,char* c); ++ ++/** \related plumed ++ \brief Converts a FORTRAN handler to a C handler ++ \param c The FORTRAN handler (a char[32]) ++ \return The C handler ++*/ ++plumed plumed_f2c(const char* c); ++ ++#ifdef __cplusplus ++ } ++#endif ++ ++#ifdef __cplusplus ++ ++/* this is to include the NULL pointer */ ++#include ++ ++/* C++ interface is hidden in PLMD namespace (same as plumed library) */ ++namespace PLMD { ++ ++/** ++ C++ wrapper for \ref plumed. ++ ++ This class provides a C++ interface to PLUMED. ++*/ ++ ++class Plumed{ ++ plumed main; ++/** ++ keeps track if the object was created from scratch using ++ the defaults destructor (cloned=false) or if it was imported ++ from C or FORTRAN (cloned-true). In the latter case, the ++ plumed_finalize() method is not called when destructing the object, ++ since it is expected to be finalized in the C/FORTRAN code ++*/ ++ bool cloned; ++public: ++/** ++ Check if plumed is installed (for runtime binding) ++ \return true if plumed is installed, false otherwise ++*/ ++ static bool installed(); ++/** ++ Check if global-plumed has been initialized ++ \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been ++ called), false otherwise. ++*/ ++ static bool ginitialized(); ++/** ++ Initialize global-plumed ++*/ ++ static void gcreate(); ++/** ++ Send a command to global-plumed ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like gcmd("A","B"), ++ but for some choice of key it can change the content ++*/ ++ static void gcmd(const char* key,const void* val); ++/** ++ Finalize global-plumed ++*/ ++ static void gfinalize(); ++/** ++ Returns the Plumed global object ++ \return The Plumed global object ++*/ ++ static Plumed global(); ++/** ++ Constructor ++*/ ++ Plumed(); ++/** ++ Clone a Plumed object from a FORTRAN char* handler ++ \param c The FORTRAN handler (a char[32]). ++ ++ \attention The Plumed object created in this manner ++ will not finalize the corresponding plumed structure. ++ It is expected that the FORTRAN code calls plumed_c_finalize for it ++*/ ++ Plumed(const char*c); ++/** ++ Clone a Plumed object from a C plumed structure ++ \param p The C plumed structure. ++ ++ \attention The Plumed object created in this manner ++ will not finalize the corresponding plumed structure. ++ It is expected that the C code calls plumed_finalize for it ++*/ ++ Plumed(plumed p); ++private: ++/** Copy constructor is disabled (private and unimplemented) ++ The problem here is that after copying it will not be clear who is ++ going to finalize the corresponding plumed structure. ++*/ ++ Plumed(const Plumed&); ++/** Assignment operator is disabled (private and unimplemented) ++ The problem here is that after copying it will not be clear who is ++ going to finalize the corresponding plumed structure. ++*/ ++ Plumed&operator=(const Plumed&); ++public: ++/** ++ Retrieve the C plumed structure for this object ++*/ ++ operator plumed()const; ++/** ++ Retrieve a FORTRAN handler for this object ++ \param c The FORTRAN handler (a char[32]). ++*/ ++ void toFortran(char*c)const; ++/** ++ Send a command to this plumed object ++ \param key The name of the command to be executed ++ \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), ++ but for some choice of key it can change the content ++*/ ++ void cmd(const char*key,const void*val=NULL); ++/** ++ Destructor ++ ++ Destructor is virtual so as to allow correct inheritance from Plumed object. ++ To avoid linking problems with g++, I specify "inline" also here (in principle ++ it should be enough to specify it down in the definition of the function, but ++ for some reason that I do not understand g++ does not inline it properly in that ++ case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the ++ way it is done here seems to work properly). ++*/ ++ inline virtual ~Plumed(); ++}; ++ ++/* All methods are inlined so as to avoid the compilation of an extra c++ file */ ++ ++inline ++bool Plumed::installed(){ ++ return plumed_installed(); ++} ++ ++inline ++Plumed::Plumed(): ++ main(plumed_create()), ++ cloned(false) ++{} ++ ++inline ++Plumed::Plumed(const char*c): ++ main(plumed_f2c(c)), ++ cloned(true) ++{} ++ ++inline ++Plumed::Plumed(plumed p): ++ main(p), ++ cloned(true) ++{} ++ ++inline ++Plumed::operator plumed()const{ ++ return main; ++} ++ ++inline ++void Plumed::toFortran(char*c)const{ ++ plumed_c2f(main,c); ++} ++ ++inline ++void Plumed::cmd(const char*key,const void*val){ ++ plumed_cmd(main,key,val); ++} ++ ++inline ++Plumed::~Plumed(){ ++ if(!cloned)plumed_finalize(main); ++} ++ ++inline ++bool Plumed::ginitialized(){ ++ return plumed_ginitialized(); ++} ++ ++inline ++void Plumed::gcreate(){ ++ plumed_gcreate(); ++} ++ ++inline ++void Plumed::gcmd(const char* key,const void* val){ ++ plumed_gcmd(key,val); ++} ++ ++inline ++void Plumed::gfinalize(){ ++ plumed_gfinalize(); ++} ++ ++inline ++Plumed Plumed::global(){ ++ return plumed_global(); ++} ++ ++} ++ ++#endif ++ ++ ++#endif +diff -urN dl_class_1.9.orig/Plumed.inc dl_class_1.9/Plumed.inc +--- dl_class_1.9.orig/Plumed.inc 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/Plumed.inc 2015-11-16 17:22:29.921325000 +0100 +@@ -0,0 +1,3 @@ ++# PLUMED: runtime installation ++PLUMED_LOAD= -L$(EBROOTPLUMED)/lib -lplumed -ldl ++PLUMED_DEPENDENCIES= +diff -urN dl_class_1.9.orig/srcmod/angles_module.f dl_class_1.9/srcmod/angles_module.f +--- dl_class_1.9.orig/srcmod/angles_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/angles_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,741 @@ ++ module angles_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining valence angle potentials ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c modified - p.-a.cazade oct 2007 : solvation etc. ++c modified - d. quigley 2010 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmang(:,:) ++ integer, allocatable :: listang(:,:) ++ integer, allocatable :: numang(:),keyang(:),lstang(:,:) ++ ++ save prmang,listang,numang,keyang,lstang ++ ++ contains ++ ++ subroutine alloc_ang_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining valence angle potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmang(mxtang,mxpang),stat=fail(1)) ++ allocate (numang(mxtmls),stat=fail(2)) ++ allocate (keyang(mxtang),stat=fail(3)) ++ allocate (lstang(mxtang,3),stat=fail(4)) ++ allocate (listang(mxangl,4),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1010) ++ enddo ++ ++ do i=1,mxtmls ++ numang(i)=0 ++ enddo ++ ++ end subroutine alloc_ang_arrays ++ ++ subroutine define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining bond angles ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,nangle,nsite,ntmp,i,iang,iang1 ++ integer idum,iatm1,iatm2,iatm3,isite1,isite2,isite3,ia,ja ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numang(itmols)=numang(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of bond angles', ++ x 10x,i10)")ntmp ++ write(nrite,"(/,/,1x,'bond angle details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'f-const',7x,'angle',/)") ++ endif ++ ++ iang1=numang(itmols) ++ do iang=1,iang1 ++ ++c read bond angle potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3).ne.0)then ++ ++ numang(itmols)=numang(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nangle=nangle+1 ++ ++ if(nangle.gt.mxtang)call error(idnode,50) ++ ++ if(keyword(1:4).eq.'harm')then ++ keyang(nangle)=1 ++ elseif(keyword(1:4).eq.'-hrm')then ++ keyang(nangle)=-1 ++ elseif(keyword(1:4).eq.'quar')then ++ keyang(nangle)=2 ++ elseif(keyword(1:4).eq.'-qur')then ++ keyang(nangle)=-2 ++ elseif(keyword(1:4).eq.'thrm')then ++ keyang(nangle)=3 ++ elseif(keyword(1:4).eq.'-thm')then ++ keyang(nangle)=-3 ++ elseif(keyword(1:4).eq.'shrm')then ++ keyang(nangle)=4 ++ elseif(keyword(1:4).eq.'-shm')then ++ keyang(nangle)=-4 ++ elseif(keyword(1:4).eq.'bvs1')then ++ keyang(nangle)=5 ++ elseif(keyword(1:4).eq.'-bv1')then ++ keyang(nangle)=-5 ++ elseif(keyword(1:4).eq.'bvs2')then ++ keyang(nangle)=6 ++ elseif(keyword(1:4).eq.'-bv2')then ++ keyang(nangle)=-6 ++ elseif(keyword(1:4).eq.'hcos')then ++ keyang(nangle)=7 ++ elseif(keyword(1:4).eq.'-hcs')then ++ keyang(nangle)=-7 ++ elseif(keyword(1:4).eq.'cos ')then ++ keyang(nangle)=8 ++ elseif(keyword(1:4).eq.'-cos')then ++ keyang(nangle)=-8 ++ elseif(keyword(1:4).eq.'mmsb')then ++ keyang(nangle)=9 ++ elseif(keyword(1:4).eq.'-msb')then ++ keyang(nangle)=-9 ++ elseif(keyword(1:4).eq.'stst') then ++ keyang(nangle)=10 ++ elseif(keyword(1:4).eq.'-sts') then ++ keyang(nangle)=-10 ++ elseif(keyword(1:4).eq.'stbe') then ++ keyang(nangle)=11 ++ elseif(keyword(1:4).eq.'-stb') then ++ keyang(nangle)=-11 ++ elseif(keyword(1:4).eq.'cmps') then ++ keyang(nangle)=12 ++ elseif(keyword(1:4).eq.'-cmp') then ++ keyang(nangle)=-12 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,440) ++ endif ++ ++ lstang(nangle,1)=iatm1 ++ lstang(nangle,2)=iatm2 ++ lstang(nangle,3)=iatm3 ++ prmang(nangle,1)=dblstr(record,lenrec,idum) ++ prmang(nangle,2)=dblstr(record,lenrec,idum) ++ prmang(nangle,3)=dblstr(record,lenrec,idum) ++ prmang(nangle,4)=dblstr(record,lenrec,idum) ++ prmang(nangle,5)=dblstr(record,lenrec,idum) ++ prmang(nangle,6)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,3i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstang(nangle,ia),ia=1,3), ++ x (prmang(nangle,ja),ja=1,mxpang) ++ ++c convert energies to internal units ++ ++ prmang(nangle,1)=prmang(nangle,1)*engunit ++ if(abs(keyang(nangle)).eq.2)then ++ prmang(nangle,3)=prmang(nangle,3)*engunit ++ prmang(nangle,4)=prmang(nangle,4)*engunit ++ elseif(abs(keyang(nangle)).eq.12)then ++ prmang(nangle,2)=prmang(nangle,2)*engunit ++ prmang(nangle,3)=prmang(nangle,3)*engunit ++ endif ++ ++c convert angles to radians ++ ++ if(abs(keyang(nangle)).eq.12)then ++ prmang(nangle,4)=prmang(nangle,4)*(pi/180.d0) ++ elseif(abs(keyang(nangle)).ne.10)then ++ prmang(nangle,2)=prmang(nangle,2)*(pi/180.d0) ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_angles ++ ++ subroutine angfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating bond angle energy and ++c force terms in molecular dynamics. ++c ++c replicated data - blocked version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992 ++c modified - t. forester feb 1993 ++c modified - t. forester nov 1994 : block data ++c modified - t. forester may 1995 : stress tensor ++c modified - p.-a.cazade oct 2007 : solvation etc. ++c modified - d. quigley nov 2010 : metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive,kdrive ++ integer idnode,mxnode,imcon,ntangl,fail1,fail2 ++ integer ii,iang1,iang2,i,ia,ib,ic,kk,keya ++ real(8) engang,virang,theta,fxc,fyc,fzc,rab,xab ++ real(8) yab,zab,rbc,xbc,ybc,zbc,sint,cost,pterm,vterm ++ real(8) gamma,gamsa,gamsc,rrbc,rrab,fxa,fya,fza ++ real(8) strs(6),strs_loc(6) ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) ++ if(fail1.ne.fail2)call error(idnode,1020) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntangl-mxnode+1)/mxnode.gt.msbad)call error(idnode,419) ++ ++c block indices ++ ++ iang1=(idnode*ntangl)/mxnode+1 ++ iang2=((idnode+1)*ntangl)/mxnode ++ ++c zero accumulators ++ ++ engang=0.d0 ++ virang=0.d0 ++ ang_fre=0.d0 ++ ang_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(2)=.true. ++ ang_sol(:)=0.d0 ++ if(lexcite)ang_exc(:)=0.d0 ++ ++ endif ++ ++c calculate atom separation vectors ++ ++ ii=0 ++ do i=iang1,iang2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listang(ii,2) ++ ib=listang(ii,3) ++ ic=listang(ii,4) ++ ++c components of first bond vector ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++c components of second bond vector ++ ++ xdbc(ii)=xxx(ic)-xxx(ib) ++ ydbc(ii)=yyy(ic)-yyy(ib) ++ zdbc(ii)=zzz(ic)-zzz(ib) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) ++ ++c loop over all specified angle potentials ++ ++ ii=0 ++ do i=iang1,iang2 ++ ++ ii=ii+1 ++ ++c define components of first bond vector ++ ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ rrab=1.d0/rab ++ ++ xab=xdab(ii)*rrab ++ yab=ydab(ii)*rrab ++ zab=zdab(ii)*rrab ++ ++c define components of second bond vector ++ ++ rbc=sqrt(xdbc(ii)**2+ydbc(ii)**2+zdbc(ii)**2) ++ rrbc=1.d0/rbc ++ ++ xbc=xdbc(ii)*rrbc ++ ybc=ydbc(ii)*rrbc ++ zbc=zdbc(ii)*rrbc ++ ++c index of potential function parameters ++ ++ kk=listang(ii,1) ++ ++c determine bond angle and calculate potential energy ++ ++ cost=(xab*xbc+yab*ybc+zab*zbc) ++ theta=acos(cost) ++ sint=max(1.d-8,sqrt(1.d0-cost**2)) ++ ++ keya=abs(keyang(kk)) ++ ++ if(keya.eq.1)then ++ ++c harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2 ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.2)then ++ ++c quartic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2+ ++ x 1.d0/3.d0*prmang(kk,3)*(theta-prmang(kk,2))**3+ ++ x 0.25d0*prmang(kk,4)*(theta-prmang(kk,2))**4 ++ gamma=(prmang(kk,1)*(theta-prmang(kk,2))+ ++ x prmang(kk,3)*(theta-prmang(kk,2))**2+ ++ x prmang(kk,4)*(theta-prmang(kk,2))**3)/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.3)then ++ ++c truncated harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* ++ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8) ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))* ++ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8)/sint ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,3)**8 ++ gamsa=(8.d0*pterm/prmang(kk,3)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmang(kk,3)**8)*rbc**7 ++ ++ elseif(keya.eq.4)then ++ ++c screened harmonic potential ++ ++ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) ++ gamma=prmang(kk,1)*(theta-prmang(kk,2))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint ++ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) ++ gamsa=(pterm/prmang(kk,3)) ++ gamsc=(pterm/prmang(kk,4)) ++ ++ elseif(keya.eq.5)then ++ ++c screened vessal potential (type 1) ++ ++ pterm=(prmang(kk,1)/(8.d0*(prmang(kk,2)-pi)**2)* ++ x (((prmang(kk,2)-pi)**2-(theta-pi)**2)**2))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) ++ gamma=(prmang(kk,1)/(2.d0*(prmang(kk,2)-pi)**2)* ++ x ((prmang(kk,2)-pi)**2-(theta-pi)**2)*(theta-pi))* ++ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint ++ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) ++ gamsa=(pterm/prmang(kk,3)) ++ gamsc=(pterm/prmang(kk,4)) ++ ++ elseif(keya.eq.6)then ++ ++c truncated vessal potential (type 2) ++ ++ pterm=prmang(kk,1)*(theta**prmang(kk,3)*(theta-prmang(kk,2)) ++ x **2*(theta+prmang(kk,2)-2.d0*pi)**2-0.5d0*prmang(kk,3)*pi ++ x **(prmang(kk,3)-1.d0)*(theta-prmang(kk,2))**2*(pi-prmang(kk, ++ x 2))**3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8) ++ gamma=prmang(kk,1)*(theta**(prmang(kk,3)-1.d0)*(theta-prmang ++ x (kk,2))*(theta+prmang(kk,2)-2.d0*pi)*((prmang(kk,3)+4.d0)* ++ x theta**2-2.d0*pi*(prmang(kk,3)+2.d0)*theta+prmang(kk,3)* ++ x prmang(kk,2)*(2.d0*pi-prmang(kk,2)))-prmang(kk,3)*pi** ++ x (prmang(kk,3)-1.d0)*(theta-prmang(kk,2))*(pi-prmang(kk,2)) ++ x **3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8)/sint ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,4)**8 ++ gamsa=(8.d0*pterm/prmang(kk,4)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmang(kk,4)**8)*rbc**7 ++ ++ elseif(keya.eq.7)then ++ ++c harmonic cosine potential ++ ++ pterm=0.5d0*prmang(kk,1)*(cos(theta)-cos(prmang(kk,2)))**2 ++ gamma=-prmang(kk,1)*(cos(theta)-cos(prmang(kk,2))) ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.8)then ++ ++c ordinary cosine potential ++ ++ pterm=prmang(kk,1)*(1+cos(prmang(kk,3)*theta-prmang(kk,2))) ++ gamma=-prmang(kk,1)*prmang(kk,3)*sin(prmang(kk,3)*theta- ++ x prmang(kk,2))/sint ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ elseif(keya.eq.9)then ++ ++c mm3 stretch-bend potential ++ ++ pterm=prmang(kk,1)*(theta-prmang(kk,2))* ++ x (rab-prmang(kk,3))*(rbc-prmang(kk,4)) ++ gamma=prmang(kk,1)*(rab-prmang(kk,3))*(rbc- ++ x prmang(kk,4))/sint ++ gamsa=-prmang(kk,1)*(theta-prmang(kk,2))*(rbc-prmang(kk,4)) ++ gamsc=-prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ elseif(keya.eq.10)then ++ ++c compass stretch-stretch potential ++ ++ pterm=prmang(kk,1)*(rab-prmang(kk,2))*(rbc-prmang(kk,3)) ++ gamma=0.d0 ++ gamsa=-prmang(kk,1)*(rbc-prmang(kk,3)) ++ gamsc=-prmang(kk,1)*(rab-prmang(kk,2)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ elseif(keya.eq.11)then ++ ++c compass stretch-bend potential ++ ++ pterm=prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) ++ gamma=prmang(kk,1)*(rab-prmang(kk,3))/sint ++ gamsa=-prmang(kk,1)*(theta-prmang(kk,2)) ++ gamsc=0.d0 ++ vterm=-gamsa*rab ++ ++ elseif(keya.eq.12)then ++ ++c combined compass angle potential with 3 coupling terms ++ ++ pterm=prmang(kk,1)*(rab-prmang(kk,5))*(rbc-prmang(kk,6))+ ++ x (theta-prmang(kk,4))*(prmang(kk,2)*(rab-prmang(kk,5))+ ++ x prmang(kk,3)*(rbc-prmang(kk,6))) ++ gamma=(prmang(kk,2)*(rab-prmang(kk,5))+ ++ x prmang(kk,3)*(rbc-prmang(kk,6)))/sint ++ gamsa=-prmang(kk,2)*(theta-prmang(kk,4))- ++ x prmang(kk,1)*(rbc-prmang(kk,6)) ++ gamsc=-prmang(kk,3)*(theta-prmang(kk,4))- ++ x prmang(kk,1)*(rab-prmang(kk,5)) ++ vterm=-(gamsa*rab+gamsc*rbc) ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ pterm=0.d0 ++ vterm=0.d0 ++ gamma=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listang(ii,2) ++ ib=listang(ii,3) ++ ic=listang(ii,4) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) ++ ++ if(lsolva)then ++ ang_exc(atmolt(ia))=ang_exc(atmolt(ia))+pterm ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ ang_fre=ang_fre-pterm ++ ang_vir=ang_vir-vterm ++ pterm=lambda1*pterm ++ vterm=lambda1*vterm ++ gamma=lambda1*gamma ++ gamsa=lambda1*gamsa ++ gamsc=lambda1*gamsc ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ ang_fre=ang_fre+pterm ++ ang_vir=ang_vir+vterm ++ pterm=lambda2*pterm ++ vterm=lambda2*vterm ++ gamma=lambda2*gamma ++ gamsa=lambda2*gamsa ++ gamsc=lambda2*gamsc ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c sum potential energy and virial ++ ++ engang=engang+pterm ++ virang=virang+vterm ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ ang_sol(atmolt(ia))=ang_sol(atmolt(ia))+pterm ++ endif ++ ++c calculate atomic forces ++ ++ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab ++ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab ++ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab ++ ++ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc ++ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc ++ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc ++ ++c sum atomic forces ++ ++ fxx(ia)=fxx(ia)+fxa ++ fyy(ia)=fyy(ia)+fya ++ fzz(ia)=fzz(ia)+fza ++ ++ fxx(ib)=fxx(ib)-fxa-fxc ++ fyy(ib)=fyy(ib)-fya-fyc ++ fzz(ib)=fzz(ib)-fza-fzc ++ ++ fxx(ic)=fxx(ic)+fxc ++ fyy(ic)=fyy(ic)+fyc ++ fzz(ic)=fzz(ic)+fzc ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc ++ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc ++ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc ++ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc ++ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+pterm ++ vir_loc=vir_loc+vterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fxa ++ fyy_loc(ia)=fyy_loc(ia)+fya ++ fzz_loc(ia)=fzz_loc(ia)+fza ++ ++ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc ++ fyy_loc(ib)=fyy_loc(ib)-fya-fyc ++ fzz_loc(ib)=fzz_loc(ib)-fza-fzc ++ ++ fxx_loc(ic)=fxx_loc(ic)+fxc ++ fyy_loc(ic)=fyy_loc(ic)+fyc ++ fzz_loc(ic)=fzz_loc(ic)+fzc ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc ++ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc ++ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc ++ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc ++ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,440) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c sum up contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engang ++ buffer(2)=virang ++ buffer(3)=ang_fre ++ buffer(4)=ang_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engang=buffer(1) ++ virang=buffer(2) ++ ang_fre=buffer(3) ++ ang_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(ang_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(ang_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdbc,ydbc,zdbc,stat=fail2) ++ ++ return ++ end subroutine angfrc ++ ++ end module angles_module +diff -urN dl_class_1.9.orig/srcmod/basic_comms.f dl_class_1.9/srcmod/basic_comms.f +--- dl_class_1.9.orig/srcmod/basic_comms.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/basic_comms.f 2015-11-16 17:21:51.184041995 +0100 +@@ -0,0 +1,389 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c communication harness initialisation ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_init MPI_init_ ++ ++ call MPI_init(ierr) ++ ++ return ++ end ++ ++c PLUMED ++ integer*8 function get_comms() ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining the communicator ++c this is used by plumed ++c ++c author - G. Tribello ++c ++c********************************************************************* ++ ++ get_comms=MPI_COMM_WORLD ++ end ++ ++ subroutine machine(idnode,mxnode) ++c PLUMED ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining charcteristics of ++c the computer on which the program is being run ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,mynode,numnodes ++ ++ idnode=mynode() ++ mxnode=numnodes() ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c routine to determine identity of processing node ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ ++ ++ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c calculate dimension of hypercube ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer i,n,ierr,mxnode ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) ++ n=1 ++ nodedim = -1 ++ do i=0,16 ++ ++ if(n.eq.mxnode)nodedim=i ++ n=2*n ++ ++ enddo ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c calculate number of nodes ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) ++ ++ return ++ end ++ ++ subroutine csend(tagmsg,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c Intel-like csend (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length,pe,idum ++ ++ integer ierr ++ real(8) buf(*) ++ ++CMPIU define MPI_send MPI_send_ ++ ++ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, ++ x MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine crecv(tagmsg,buf,length) ++ ++c********************************************************************* ++c ++c Intel-like crecv (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length ++ ++ integer ierr ++ integer status(MPI_STATUS_SIZE) ++ real(8) buf(*) ++ ++CMPIU define MPI_RECV MPI_RECV_ ++ ++ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, ++ x tagmsg,MPI_COMM_WORLD,status,ierr) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for MPI - hypercube assumed ++c double precision version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,ierror ++ real(8) aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global maximum subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_MAX,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dl_poly global status subroutine : gisum version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c MPI version - t. forester may 1995 ++c ++c*********************************************************************** ++ ++ ++ implicit none ++ ++ logical check ++ integer i,idum ++ ++ i = 0 ++ if(.not.check) i = 1 ++ ++ call gisum(i,1,idum) ++ ++ check = (i.eq.0) ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c barrier / synchronization routine ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ierr ++ ++ include "comms.inc" ++ ++CMPIU define MPI_BARRIER MPI_BARRIER_ ++ ++ call MPI_BARRIER(MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c exitcomms: exit from communication harness ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++CMPIU define MPI_FINALIZE MPI_FINALIZE_ ++ ++ call MPI_FINALIZE(ierr) ++ call exit(0) ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/basic_comms.f.preplumed dl_class_1.9/srcmod/basic_comms.f.preplumed +--- dl_class_1.9.orig/srcmod/basic_comms.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/basic_comms.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,373 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c communication harness initialisation ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_init MPI_init_ ++ ++ call MPI_init(ierr) ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for obtaining charcteristics of ++c the computer on which the program is being run ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,mynode,numnodes ++ ++ idnode=mynode() ++ mxnode=numnodes() ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c routine to determine identity of processing node ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ ++ ++ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c calculate dimension of hypercube ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer i,n,ierr,mxnode ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) ++ n=1 ++ nodedim = -1 ++ do i=0,16 ++ ++ if(n.eq.mxnode)nodedim=i ++ n=2*n ++ ++ enddo ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c calculate number of nodes ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++ ++CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ ++ ++ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) ++ ++ return ++ end ++ ++ subroutine csend(tagmsg,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c Intel-like csend (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length,pe,idum ++ ++ integer ierr ++ real(8) buf(*) ++ ++CMPIU define MPI_send MPI_send_ ++ ++ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, ++ x MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine crecv(tagmsg,buf,length) ++ ++c********************************************************************* ++c ++c Intel-like crecv (double precision) ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer tagmsg,length ++ ++ integer ierr ++ integer status(MPI_STATUS_SIZE) ++ real(8) buf(*) ++ ++CMPIU define MPI_RECV MPI_RECV_ ++ ++ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, ++ x tagmsg,MPI_COMM_WORLD,status,ierr) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global summation subroutine for MPI - hypercube assumed ++c double precision version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,ierror ++ real(8) aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++ ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, ++ x MPI_SUM,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly global maximum subroutine for hypercube - MPI version ++c integer version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror ++ integer aaa(nnn),bbb(nnn) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE) ++CMPIU define MPI_allreduce MPI_allreduce_ ++ ++ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, ++ x MPI_MAX,MPI_COMM_WORLD,ierror) ++ ++ do i = 1,nnn ++ aaa(i) = bbb(i) ++ enddo ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dl_poly global status subroutine : gisum version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c MPI version - t. forester may 1995 ++c ++c*********************************************************************** ++ ++ ++ implicit none ++ ++ logical check ++ integer i,idum ++ ++ i = 0 ++ if(.not.check) i = 1 ++ ++ call gisum(i,1,idum) ++ ++ check = (i.eq.0) ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c barrier / synchronization routine ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ierr ++ ++ include "comms.inc" ++ ++CMPIU define MPI_BARRIER MPI_BARRIER_ ++ ++ call MPI_BARRIER(MPI_COMM_WORLD,ierr) ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c exitcomms: exit from communication harness ++c ++c copyright - daresbury laboratory ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer ierr ++CMPIU define MPI_FINALIZE MPI_FINALIZE_ ++ ++ call MPI_FINALIZE(ierr) ++ call exit(0) ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/bonds_module.f dl_class_1.9/srcmod/bonds_module.f +--- dl_class_1.9.orig/srcmod/bonds_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/bonds_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,579 @@ ++ module bonds_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c adapted for metadynamics ++c - d. quigley 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmbnd(:,:) ++ integer, allocatable :: listbnd(:,:) ++ integer, allocatable :: numbonds(:),keybnd(:),lstbnd(:,:) ++ ++ save prmbnd,listbnd,numbonds,keybnd,lstbnd ++ ++ contains ++ ++ subroutine alloc_bnd_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmbnd(mxtbnd,mxpbnd),stat=fail(1)) ++ allocate (numbonds(mxtmls),stat=fail(2)) ++ allocate (keybnd(mxtbnd),stat=fail(3)) ++ allocate (lstbnd(mxtbnd,3),stat=fail(4)) ++ allocate (listbnd(mxbond,4),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++ do i=1,mxtmls ++ numbonds(i)=0 ++ enddo ++ ++ end subroutine alloc_bnd_arrays ++ ++ subroutine define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining bonds ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,nbonds,nsite,ntmp,ibond,ibond1 ++ integer iatm1,iatm2,isite1,isite2,idum,i,j ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numbonds(itmols)=numbonds(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of chemical bonds', ++ x 7x,i10)")ntmp ++ write(nrite,"(/,/,1x,'chemical bond details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',28x, ++ x 'parameters', /)") ++ endif ++ ++ ibond1=numbonds(itmols) ++ do ibond=1,ibond1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0)then ++ ++ numbonds(itmols)=numbonds(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(12x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nbonds=nbonds+1 ++ if(nbonds.gt.mxtbnd)call error(idnode,30) ++ ++ if(keyword(1:4).eq.'harm')then ++ keybnd(nbonds)=1 ++ elseif(keyword(1:4).eq.'-hrm')then ++ keybnd(nbonds)=-1 ++ elseif(keyword(1:4).eq.'mors')then ++ keybnd(nbonds)=2 ++ elseif(keyword(1:4).eq.'-mrs')then ++ keybnd(nbonds)=-2 ++ elseif(keyword(1:4).eq.'12-6')then ++ keybnd(nbonds)=3 ++ elseif(keyword(1:4).eq.'-126')then ++ keybnd(nbonds)=-3 ++ elseif(keyword(1:4).eq.'rhrm')then ++ keybnd(nbonds)=4 ++ elseif(keyword(1:4).eq.'-rhm')then ++ keybnd(nbonds)=-4 ++ elseif(keyword(1:4).eq.'quar')then ++ keybnd(nbonds)=5 ++ elseif(keyword(1:4).eq.'-qur')then ++ keybnd(nbonds)=-5 ++ elseif(keyword(1:4).eq.'buck')then ++ keybnd(nbonds)=6 ++ elseif(keyword(1:4).eq.'-bck')then ++ keybnd(nbonds)=-6 ++ elseif(keyword(1:4).eq.'fene')then ++ keybnd(nbonds)=7 ++ elseif(keyword(1:4).eq.'-fen')then ++ keybnd(nbonds)=-7 ++ elseif(keyword(1:4).eq.'coul')then ++ keybnd(nbonds)=8 ++ elseif(keyword(1:4).eq.'-cou')then ++ keybnd(nbonds)=-8 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,444) ++ endif ++ ++ lstbnd(nbonds,1)=iatm1 ++ lstbnd(nbonds,2)=iatm2 ++ prmbnd(nbonds,1)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,2)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,3)=dblstr(record,lenrec,idum) ++ prmbnd(nbonds,4)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,2i10,2x,1p,10e15.6)") ++ x keyword(1:4),lstbnd(nbonds,1), ++ x lstbnd(nbonds,2),(prmbnd(nbonds,j),j=1,mxpbnd) ++c ++c convert energy units to internal units ++ ++ if(abs(keybnd(nbonds)).eq.3)then ++ prmbnd(nbonds,2)=prmbnd(nbonds,2)*engunit ++ endif ++ if(abs(keybnd(nbonds)).eq.5)then ++ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit ++ prmbnd(nbonds,4)=prmbnd(nbonds,4)*engunit ++ endif ++ if(abs(keybnd(nbonds)).eq.6)then ++ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit ++ endif ++ ++ if(abs(keybnd(nbonds)).ne.8) ++ x prmbnd(nbonds,1)=prmbnd(nbonds,1)*engunit ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_bonds ++ ++ subroutine bndfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating chemical bond energy and ++c force terms in molecular dynamics. ++c ++c replicated data - blocked data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c modified - t. forester march 1993 ++c modified - t. forester march 1994 ++c modified - t. forester may 1994 ++c modified - t. forester nov 1994 ++c modified - w. smith nov 2006 ++c modified - p.-a. cazade oct 2007, solvation etc. ++c modified - d. quigley 2007, metdynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive ++ integer i,fail,ibnd1,ibnd2,idnode,mxnode,ii,ia,ib,imcon ++ integer keyb,kk,ntbond ++ real(8) strs(6),strs_loc(6) ++ real(8) rab,rrab,omega,gamma,fx,fy,fz,engbnd,virbnd,epsq ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) ++ if(fail.ne.0)call error(idnode,1040) ++ ++c flag for undefined potential ++ ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntbond-mxnode+1)/mxnode.gt.msbad)call error(idnode,418) ++ ++c block indices ++ ++ ibnd1=(idnode*ntbond)/mxnode+1 ++ ibnd2=((idnode+1)*ntbond)/mxnode ++ ++c initialise accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ bnd_fre=0.d0 ++ bnd_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(1)=.true. ++ bnd_sol(:)=0.d0 ++ if(lexcite)bnd_exc(:)=0.d0 ++ ++ endif ++ ++c calculate atom separation vectors ++ ++ ii=0 ++ do i=ibnd1,ibnd2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listbnd(ii,2) ++ ib=listbnd(ii,3) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ ++ endif ++ ++c components of bond vector ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ ++c loop over all specified chemical bond potentials ++ ++ ii=0 ++ do i=ibnd1,ibnd2 ++ ++ ii=ii+1 ++ ++c define components of bond vector ++ ++ rrab=0.d0 ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ if(rab.gt.1.d-6)rrab=1.d0/rab ++ ++c index of potential function parameters ++ ++ kk=listbnd(ii,1) ++ keyb=abs(keybnd(kk)) ++ ++c calculate scalar constant terms ++ ++ if(keyb.eq.0)then ++ ++c null interaction ++ ++ omega=0.d0 ++ gamma=0.d0 ++ ++ elseif(keyb.eq.1)then ++ ++c harmonic potential ++ ++ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2 ++ gamma=prmbnd(kk,1)*(rab-prmbnd(kk,2))*rrab ++ ++ else if(keyb.eq.2)then ++ ++c morse potential ++ ++ omega=prmbnd(kk,1)*((1.d0-exp(-prmbnd(kk,3)* ++ x (rab-prmbnd(kk,2))))**2-1.d0) ++ gamma=2.d0*prmbnd(kk,1)*prmbnd(kk,3)*(1.d0- ++ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2))))* ++ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2)))*rrab ++ ++ else if(keyb.eq.3)then ++ ++c 12-6 potential ++ ++ omega=(prmbnd(kk,1)*rrab**6-prmbnd(kk,2))*rrab**6 ++ gamma=(6.d0*prmbnd(kk,2)-12.d0*prmbnd(kk,1)*rrab**6)* ++ x rrab**8 ++ ++ elseif(keyb.eq.4)then ++ ++c restrained harmonic ++ ++ rab=rab-prmbnd(kk,2) ++ omega=0.5d0*prmbnd(kk,1)*(min(abs(rab),prmbnd(kk,3)))**2 ++ x +prmbnd(kk,1)*prmbnd(kk,3)*max(abs(rab)-prmbnd(kk,3),0.d0) ++ gamma=rrab*prmbnd(kk,1)*(sign(min(abs(rab),prmbnd(kk,3)),rab)) ++ ++ elseif(keyb.eq.5)then ++ ++c quartic potential ++ ++ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2+ ++ x 1.d0/3.d0*prmbnd(kk,3)*(rab-prmbnd(kk,2))**3+ ++ x 0.25d0*prmbnd(kk,4)*(rab-prmbnd(kk,2))**4 ++ gamma=rrab*(prmbnd(kk,1)*(rab-prmbnd(kk,2))+ ++ x prmbnd(kk,3)*(rab-prmbnd(kk,2))**2+ ++ x prmbnd(kk,4)*(rab-prmbnd(kk,2))**3) ++ ++ else if(keyb.eq.6)then ++ ++c buckingham exp-6 potential ++ ++ omega=prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))-prmbnd(kk,3)* ++ x rrab**6 ++ gamma=-rrab*prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))/prmbnd(kk,2)+ ++ x 6.d0*prmbnd(kk,3)*rrab**8 ++ ++ else if(keyb.eq.7)then ++ ++c FENE bond potential ++ ++ omega=-0.5d0*prmbnd(kk,1)*prmbnd(kk,2)**2*log(1.d0- ++ x ((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) ++ gamma=rrab*prmbnd(kk,1)*(rab-prmbnd(kk,3))/ ++ x (1.d0-((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) ++ ++ else if(keyb.eq.8)then ++ ++c coulomb bond potential ++ ++ omega=prmbnd(kk,1)*prmbnd(kk,2)*rrab*r4pie0/epsq ++ gamma=-omega*rrab*rrab ++ ++ else ++ ++c undefined potential ++ ++ omega=0.d0 ++ gamma=0.d0 ++ safe=.false. ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listbnd(ii,2) ++ ib=listbnd(ii,3) ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib).eq.0) ++ ++ if(lsolva)then ++ bnd_exc(atmolt(ia))=bnd_exc(atmolt(ia))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ bnd_fre=bnd_fre-omega ++ bnd_vir=bnd_vir-gamma*rab*rab ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ bnd_fre=bnd_fre+omega ++ bnd_vir=bnd_vir+gamma*rab*rab ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate bond energy and virial ++ ++ engbnd=engbnd+omega ++ virbnd=virbnd+gamma*rab*rab ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ bnd_sol(atmolt(ia))=bnd_sol(atmolt(ia))+omega ++ endif ++ ++c calculate forces ++ ++ fx=-gamma*xdab(ii) ++ fy=-gamma*ydab(ii) ++ fz=-gamma*zdab(ii) ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(ib)=fxx(ib)-fx ++ fyy(ib)=fyy(ib)-fy ++ fzz(ib)=fzz(ib)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdab(ii)*fx ++ strs(2)=strs(2)+xdab(ii)*fy ++ strs(3)=strs(3)+xdab(ii)*fz ++ strs(4)=strs(4)+ydab(ii)*fy ++ strs(5)=strs(5)+ydab(ii)*fz ++ strs(6)=strs(6)+zdab(ii)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc+gamma*rab*rab ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(ib)=fxx_loc(ib)-fx ++ fyy_loc(ib)=fyy_loc(ib)-fy ++ fzz_loc(ib)=fzz_loc(ib)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdab(ii)*fx ++ strs_loc(2)=strs_loc(2)+xdab(ii)*fy ++ strs_loc(3)=strs_loc(3)+xdab(ii)*fz ++ strs_loc(4)=strs_loc(4)+ydab(ii)*fy ++ strs_loc(5)=strs_loc(5)+ydab(ii)*fz ++ strs_loc(6)=strs_loc(6)+zdab(ii)*fz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,444) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engbnd ++ buffer(2)=virbnd ++ buffer(3)=bnd_fre ++ buffer(4)=bnd_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engbnd=buffer(1) ++ virbnd=buffer(2) ++ bnd_fre=buffer(3) ++ bnd_vir=buffer(4) ++ ++ if(lsolva)then ++ ++ call gdsum(bnd_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(bnd_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail) ++ ++ return ++ end subroutine bndfrc ++ ++ end module bonds_module +diff -urN dl_class_1.9.orig/srcmod/comms.inc dl_class_1.9/srcmod/comms.inc +--- dl_class_1.9.orig/srcmod/comms.inc 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/comms.inc 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,42 @@ ++c********************************************************************* ++c ++c dl_poly include file for MPI, PVM and SHMEM ++c copyright - daresbury laboratory ++c ++c********************************************************************* ++ ++CMPIU define mpipriv mpipriv_ ++ ++ include "mpif.h" ++ ++c parameters for message tags ++ ++ integer Xgcopy_tag, Merge1_tag ++ integer Dgsum_tag1, Dgsum_tag2 ++ integer Igmax_tag1, Igmax_tag2 ++ integer Igsum_tag1, Igsum_tag2 ++ integer Shmove_tag, Merge_tag ++ integer Merge4_tag, Shell_tag ++ integer Gstate_tag1, Gstate_tag2 ++ integer Passcon_tag, Msgtag ++ ++c MPI tagsizes ++ ++ parameter( ++ $ Xgcopy_tag = 105, ++ $ Dgsum_tag1 = 6001, ++ $ Dgsum_tag2 = 9001, ++ $ Igsum_tag1 = 12001, ++ $ Igsum_tag2 = 15001, ++ $ Shmove_tag = 18001, ++ $ Merge_tag = 6001, ++ $ Merge1_tag = 9001, ++ $ Merge4_tag = 12001, ++ $ Gstate_tag1 = 15001, ++ $ Gstate_tag2 = 18001, ++ $ Shell_tag = 21001, ++ $ Passcon_tag = 3001, ++ $ Igmax_tag1 = 24001, ++ $ Igmax_tag2 = 27001, ++ $ Msgtag = 30000) ++ +diff -urN dl_class_1.9.orig/srcmod/config_module.f dl_class_1.9/srcmod/config_module.f +--- dl_class_1.9.orig/srcmod/config_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/config_module.f 2015-11-16 17:18:13.402475437 +0100 +@@ -0,0 +1,103 @@ ++ module config_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation configuration data ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ character*1 cfgname(80) ++ character*1 sysname(80) ++ real(8) cell(9),rcell(9),celprp(10) ++ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) ++ ++ character*8, allocatable :: atmnam(:) ++ real(8), allocatable :: xxx(:),yyy(:),zzz(:) ++ real(8), allocatable :: vxx(:),vyy(:),vzz(:) ++ real(8), allocatable :: fxx(:),fyy(:),fzz(:) ++ real(8), allocatable :: flx(:),fly(:),flz(:) ++ real(8), allocatable :: chge(:),weight(:),rmass(:) ++ integer, allocatable :: ltype(:),lstfrz(:) ++ integer, allocatable :: neulst(:),lstneu(:) ++ integer, allocatable :: lentry(:),list(:,:) ++ integer, allocatable :: lstout(:),link(:) ++ integer, allocatable :: lct(:),lst(:) ++ ++ real(8), allocatable :: buffer(:) ++ ++c PLUMED variables ++ logical, save :: lplumed ++c PLUMED variables ++ ++ save atmnam,neulst,lstneu,cfgname,sysname ++ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz ++ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz ++ save lentry,list,lstout,link,lct,lst,celprp,rmass ++ save eta,stress,stresl,strcns,rcell ++ ++ contains ++ ++ subroutine alloc_config_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining simulation configuration arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ integer, parameter :: nnn=27 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xxx(mxatms),stat=fail(1)) ++ allocate (yyy(mxatms),stat=fail(2)) ++ allocate (zzz(mxatms),stat=fail(3)) ++ allocate (vxx(mxatms),stat=fail(4)) ++ allocate (vyy(mxatms),stat=fail(5)) ++ allocate (vzz(mxatms),stat=fail(6)) ++ allocate (fxx(mxatms),stat=fail(7)) ++ allocate (fyy(mxatms),stat=fail(8)) ++ allocate (fzz(mxatms),stat=fail(9)) ++ allocate (weight(mxatms),stat=fail(11)) ++ allocate (chge(mxatms),stat=fail(12)) ++ allocate (ltype(mxatms),stat=fail(13)) ++ allocate (lstfrz(mxatms),stat=fail(14)) ++ allocate (flx(mxatms),stat=fail(15)) ++ allocate (fly(mxatms),stat=fail(16)) ++ allocate (flz(mxatms),stat=fail(17)) ++ allocate (atmnam(mxatms),stat=fail(18)) ++ allocate (neulst(mxneut),stat=fail(19)) ++ allocate (lstneu(mxatms),stat=fail(20)) ++ allocate (lstout(mxatms),stat=fail(21)) ++ allocate (lentry(msatms),stat=fail(22)) ++ allocate (list(msatms,mxlist),stat=fail(23)) ++ allocate (link(mxatms),stat=fail(24)) ++ allocate (lct(mxcell),stat=fail(25)) ++ allocate (lst(mxcell),stat=fail(26)) ++ allocate (rmass(mxatms),stat=fail(27)) ++ allocate (buffer(mxbuff),stat=fail(10)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1000) ++ endif ++ enddo ++ ++ end subroutine alloc_config_arrays ++ ++ end module config_module +diff -urN dl_class_1.9.orig/srcmod/config_module.f.preplumed dl_class_1.9/srcmod/config_module.f.preplumed +--- dl_class_1.9.orig/srcmod/config_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/config_module.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,99 @@ ++ module config_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation configuration data ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ character*1 cfgname(80) ++ character*1 sysname(80) ++ real(8) cell(9),rcell(9),celprp(10) ++ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) ++ ++ character*8, allocatable :: atmnam(:) ++ real(8), allocatable :: xxx(:),yyy(:),zzz(:) ++ real(8), allocatable :: vxx(:),vyy(:),vzz(:) ++ real(8), allocatable :: fxx(:),fyy(:),fzz(:) ++ real(8), allocatable :: flx(:),fly(:),flz(:) ++ real(8), allocatable :: chge(:),weight(:),rmass(:) ++ integer, allocatable :: ltype(:),lstfrz(:) ++ integer, allocatable :: neulst(:),lstneu(:) ++ integer, allocatable :: lentry(:),list(:,:) ++ integer, allocatable :: lstout(:),link(:) ++ integer, allocatable :: lct(:),lst(:) ++ ++ real(8), allocatable :: buffer(:) ++ ++ save atmnam,neulst,lstneu,cfgname,sysname ++ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz ++ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz ++ save lentry,list,lstout,link,lct,lst,celprp,rmass ++ save eta,stress,stresl,strcns,rcell ++ ++ contains ++ ++ subroutine alloc_config_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining simulation configuration arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ integer, parameter :: nnn=27 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xxx(mxatms),stat=fail(1)) ++ allocate (yyy(mxatms),stat=fail(2)) ++ allocate (zzz(mxatms),stat=fail(3)) ++ allocate (vxx(mxatms),stat=fail(4)) ++ allocate (vyy(mxatms),stat=fail(5)) ++ allocate (vzz(mxatms),stat=fail(6)) ++ allocate (fxx(mxatms),stat=fail(7)) ++ allocate (fyy(mxatms),stat=fail(8)) ++ allocate (fzz(mxatms),stat=fail(9)) ++ allocate (weight(mxatms),stat=fail(11)) ++ allocate (chge(mxatms),stat=fail(12)) ++ allocate (ltype(mxatms),stat=fail(13)) ++ allocate (lstfrz(mxatms),stat=fail(14)) ++ allocate (flx(mxatms),stat=fail(15)) ++ allocate (fly(mxatms),stat=fail(16)) ++ allocate (flz(mxatms),stat=fail(17)) ++ allocate (atmnam(mxatms),stat=fail(18)) ++ allocate (neulst(mxneut),stat=fail(19)) ++ allocate (lstneu(mxatms),stat=fail(20)) ++ allocate (lstout(mxatms),stat=fail(21)) ++ allocate (lentry(msatms),stat=fail(22)) ++ allocate (list(msatms,mxlist),stat=fail(23)) ++ allocate (link(mxatms),stat=fail(24)) ++ allocate (lct(mxcell),stat=fail(25)) ++ allocate (lst(mxcell),stat=fail(26)) ++ allocate (rmass(mxatms),stat=fail(27)) ++ allocate (buffer(mxbuff),stat=fail(10)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1000) ++ endif ++ enddo ++ ++ end subroutine alloc_config_arrays ++ ++ end module config_module +diff -urN dl_class_1.9.orig/srcmod/core_shell_module.f dl_class_1.9/srcmod/core_shell_module.f +--- dl_class_1.9.orig/srcmod/core_shell_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/core_shell_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,826 @@ ++ module core_shell_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining core_shell arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use parse_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmshl(:,:) ++ integer, allocatable :: listshl(:,:) ++ integer, allocatable :: numshl(:),lstshl(:,:) ++ ++ save prmshl,listshl,numshl,lstshl ++ ++ contains ++ ++ subroutine alloc_csh_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining core_shell arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(4) ++ ++ do i=1,4 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmshl(mxtshl,2),stat=fail(1)) ++ allocate (numshl(mxtmls),stat=fail(2)) ++ allocate (lstshl(mxtshl,2),stat=fail(3)) ++ allocate (listshl(mxshl,3),stat=fail(4)) ++ ++ do i=1,4 ++ if(fail(i).gt.0)call error(idnode,1100) ++ enddo ++ ++ do i=1,mxtmls ++ numshl(i)=0 ++ enddo ++ ++ end subroutine alloc_csh_arrays ++ ++ subroutine define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining core-shell units ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ logical safe ++ integer idnode,itmols,nshels,nsite,ntmp,ishls ++ integer iatm1,iatm2,isite1,isite2,keyshl,kshl,idum ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numshl(itmols)=numshl(itmols)+ntmp ++ kshl=intstr(record,lenrec,idum) ++ if(keyshl.eq.0)then ++ keyshl=kshl ++ elseif(kshl.ne.keyshl)then ++ call error(idnode,1960) ++ endif ++ if(idnode.eq.0) then ++ ++ write(nrite, ++ x "(/,1x,'number of core-shell units',5x,i10)") ++ x ntmp ++ if(keyshl.eq.1)then ++ ++ write(nrite, ++ x "(/,/,1x,'core-shell details:',/,/,21x, ++ x 5x,'index',5x,'index',6x,'parameter')") ++ ++ else ++ ++ write(nrite, ++ x "(/,/,1x,'core-shell details:',/,/,21x, ++ x 6x,'core',5x,'shell',6x,'parameter')") ++ ++ endif ++ ++ endif ++ ++ do ishls=1,numshl(itmols) ++ ++ nshels=nshels+1 ++ if(nshels.gt.mxtshl) call error(idnode,57) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ lstshl(nshels,1)=iatm1 ++ lstshl(nshels,2)=iatm2 ++ prmshl(nshels,1)=dblstr(record,lenrec,idum) ++ prmshl(nshels,2)=dblstr(record,lenrec,idum) ++ if(idnode.eq.0) write(nrite, ++ x "(21x,2i10,2f15.4)") ++ x lstshl(nshels,1),lstshl(nshels,2), ++ x prmshl(nshels,1),prmshl(nshels,2) ++ ++c test for frozen cores or shells ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0) ++ x call error(idnode,49) ++ ++c convert energy units to internal units ++ ++ prmshl(nshels,1)=prmshl(nshels,1)*engunit ++ prmshl(nshels,2)=prmshl(nshels,2)*engunit ++ ++ enddo ++ ++ return ++ end subroutine define_core_shell ++ ++ subroutine corshl(idnode,mxnode,ntshl,shlke) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating the internal kinetic ++c energy of core-shell units in the shell polarisation model ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith july 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m ++ real(8) shlke,ppp,ccc,sss ++ ++ shlke=0.d0 ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c loop over all specified core-shell pairs ++ ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of atoms involved ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c calculate atom translational kinetic energy ++ ++ ppp=((weight(i)*vxx(i)+weight(j)*vxx(j))**2 ++ x +(weight(i)*vyy(i)+weight(j)*vyy(j))**2 ++ x +(weight(i)*vzz(i)+weight(j)*vzz(j))**2) ++ x /(weight(i)+weight(j)) ++ ++c calculate individual core and shell kinetic energies ++ ++ ccc=weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ sss=weight(j)*(vxx(j)**2+vyy(j)**2+vzz(j)**2) ++ ++c calculate core-shell internal kinetic energy ++ ++ shlke=shlke+0.5d0*(ccc+sss-ppp) ++ ++ enddo ++ ++c global average of core-shell internal kinetic energy ++ ++ if(mxnode.gt.1)then ++ buffer(1)=shlke ++ call gdsum(buffer(1),1,buffer(2)) ++ shlke=buffer(1) ++ endif ++ ++ return ++ end subroutine corshl ++ ++ subroutine put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for placing shells on top of cores in the ++c shell model at the start of a simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith feb 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, allocatable :: ltop(:) ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m,fail ++ ++c allocate ltop array ++ ++ allocate(ltop(ntshl),stat=fail) ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c zero ltop array ++ ++ do i=1,ntshl ++ ltop(i)=0 ++ enddo ++ ++c loop over all specified core-shell pairs ++ ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of atoms involved ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c set shell and core positions equal ++ ++ ltop(m)=j ++ xxx(j)=xxx(i) ++ yyy(j)=yyy(i) ++ zzz(j)=zzz(i) ++ ++ enddo ++ ++c merge data on different processors ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,ntshl,ltop,xxx,yyy,zzz,buffer) ++ ++c deallocate ltop array ++ ++ deallocate(ltop,stat=fail) ++ ++ return ++ end subroutine put_shells_on_cores ++ ++ subroutine shlfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating shell model spring energy and ++c force terms in molecular dynamics. ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith july 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect ++ integer idnode,imcon,mxnode,ntshl,ishl1,ishl2,i,j,k,m,kk ++ real(8) engshl,virshl,rij2,omega,gamma,ffx,ffy,ffz,strs ++ ++ dimension strs(6) ++ ++c check adequate workspace is available ++ ++ if(mxxdf.lt.mxshl)call error(idnode,423) ++ ++c block indices ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c initialise accumulators ++ ++ engshl=0.d0 ++ virshl=0.d0 ++ shl_fre=0.d0 ++ shl_vir=0.d0 ++ ++ do i=1,6 ++ strs(i)=0.d0 ++ enddo ++ ++ if(lsolva)then ++ ++ lcomp(5)=.true. ++ shl_sol(:)=0.d0 ++ if(lexcite)shl_exc(:)=0.d0 ++ ++ endif ++ ++c calculate core-shell separation vectors ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c components of bond vector ++ ++ xdf(m)=xxx(i)-xxx(j) ++ ydf(m)=yyy(i)-yyy(j) ++ zdf(m)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,m,cell,xdf,ydf,zdf) ++ ++c loop over all specified core-shell units ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c index of potential parameters ++ ++ kk=listshl(m,1) ++ ++c core-shell separation ++ ++ rij2=xdf(m)**2+ydf(m)**2+zdf(m)**2 ++ ++c calculate scalar constant terms ++ ++ omega=(0.5d0*prmshl(kk,1)+0.25d0*prmshl(kk,2)*rij2)*rij2 ++ gamma=prmshl(kk,1)+prmshl(kk,2)*rij2 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(i)+atm_fre(i).eq.0) ++ ++ if(lsolva)then ++ shl_exc(atmolt(i))=shl_exc(atmolt(i))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ shl_fre=shl_fre-omega ++ shl_vir=shl_vir-gamma*rij2 ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ shl_fre=shl_fre+omega ++ shl_vir=shl_vir+gamma*rij2 ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate spring energy and virial ++ ++ engshl=engshl+omega ++ virshl=virshl+gamma*rij2 ++ ++ if(lsolva)then ++ shl_sol(atmolt(i))=shl_sol(atmolt(i))+omega ++ endif ++ ++c calculate spring forces ++ ++ ffx=-gamma*xdf(m) ++ ffy=-gamma*ydf(m) ++ ffz=-gamma*zdf(m) ++ ++ fxx(i)=fxx(i)+ffx ++ fyy(i)=fyy(i)+ffy ++ fzz(i)=fzz(i)+ffz ++ ++ fxx(j)=fxx(j)-ffx ++ fyy(j)=fyy(j)-ffy ++ fzz(j)=fzz(j)-ffz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*ffx ++ strs(2)=strs(2)+xdf(m)*ffy ++ strs(3)=strs(3)+xdf(m)*ffz ++ strs(4)=strs(4)+ydf(m)*ffy ++ strs(5)=strs(5)+ydf(m)*ffz ++ strs(6)=strs(6)+zdf(m)*ffz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1) then ++ ++ buffer(1)=engshl ++ buffer(2)=virshl ++ buffer(3)=shl_fre ++ buffer(4)=shl_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engshl=buffer(1) ++ virshl=buffer(2) ++ shl_fre=buffer(3) ++ shl_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(shl_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(shl_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine shlfrc ++ ++ subroutine check_shells(idnode,itmols,nshels,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to check no core-shell units are in ++c rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,itmols,nshels,ngrp,k1,ia,ib,kk ++ integer id,jj,ia1,jk,ib1 ++ ++ nshels=nshels-numshl(itmols) ++ do k1=1,numshl(itmols) ++ ++ nshels=nshels+1 ++ ia=lstshl(nshels,1) ++ ib=lstshl(nshels,2) ++ ++ ngrp=ngrp-numgrp(itmols) ++ ++ do kk=1,numgrp(itmols) ++ ++ ngrp=ngrp+1 ++ id=listyp(ngrp) ++ ++ do jj=1,numgsit(id)-1 ++ ++ ia1=lstgst(ngrp,jj) ++ if(ia1.eq.ia) then ++ ++ do jk=jj,numgsit(id) ++ ++ ib1=lstgst(ngrp,jk) ++ if(ib1.eq.ib) then ++ ++ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') ++ x 'error: sites ',ia,ib ++ call error(idnode,456) ++ ++ endif ++ ++ enddo ++ ++ elseif(ia1.eq.ib) then ++ ++ do jk=jj,numgsit(id) ++ ++ ib1=lstgst(ngrp,jk) ++ if(ib1.eq.ia) then ++ ++ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') ++ x 'error: sites ',ia,ib ++ call error(idnode,456) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ enddo ++ enddo ++ ++ return ++ end subroutine check_shells ++ ++ subroutine relax_shells ++ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep,rlxtol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for relaxing shells to zero force ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical relaxed,newjob ++ integer keyrlx,idnode,mxnode,natms,i,j,itmols,imols ++ integer iatm1,iatm2,fail,numopt,isite,ishls,jshls,lshls,ntpmls ++ integer nbuff ++ real(8) hnorm,grad0,grad1,grad2,stride,tstep,step ++ real(8) ggg,gam2,sgn,rlxtol ++ ++ dimension fail(4) ++ ++ integer, allocatable :: lstopt(:) ++ real(8), allocatable :: ggx(:),ggy(:),ggz(:) ++ real(8), allocatable :: hhx(:),hhy(:),hhz(:) ++ real(8), allocatable :: oxx(:),oyy(:),ozz(:) ++ ++ save hnorm,grad0,grad1,grad2,stride,lstopt ++ save ggx,ggy,ggz,hhx,hhy,hhz,oxx,oyy,ozz,numopt,nbuff,sgn ++ ++ data newjob/.true./,fail/0,0,0,0/ ++ ++c define initial data ++ ++ if(newjob)then ++ ++ newjob=.false. ++ allocate(lstopt(mxatms),stat=fail(1)) ++ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) ++ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(3)) ++ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1970) ++ enddo ++ ++c identify the shells ++ ++ isite=0 ++ ishls=0 ++ jshls=0 ++ do i=1,natms ++ ++ lstopt(i)=0 ++ ++ enddo ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do lshls=1,numshl(itmols) ++ ++ ishls=ishls+1 ++ lstopt(lstshl(lshls+jshls,2)+isite)=1 ++ ++ enddo ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ jshls=jshls+numshl(itmols) ++ ++ enddo ++ ++ numopt=ishls ++ ++ endif ++ ++c load coordinates of shells ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstopt(i).gt.0)then ++ ++ j=j+1 ++ oxx(j)=xxx(i) ++ oyy(j)=yyy(i) ++ ozz(j)=zzz(i) ++ ggx(j)=fxx(i) ++ ggy(j)=fyy(i) ++ ggz(j)=fzz(i) ++ ++ endif ++ ++ enddo ++ ++c step length for relaxation ++ ++ step=tstep**2 ++ ++c define atoms for this nodes ++ ++ iatm1=(idnode*numopt)/mxnode+1 ++ iatm2=((idnode+1)*numopt)/mxnode ++ ++ ggg=0.d0 ++ do i=iatm1,iatm2 ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ggg=sqrt(ggg) ++ ++c check convergence ++ ++ if(abs(ggg)/dble(numopt).lt.rlxtol)then ++ ++ relaxed=.true. ++ return ++ ++ endif ++ ++ if(keyrlx.eq.0) then ++ ++c set original search direction ++ ++ hnorm=ggg ++ grad0=ggg ++ grad2=ggg ++ do i=iatm1,iatm2 ++ ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ keyrlx=1 ++ sgn=1.d0 ++ ++ elseif(keyrlx.eq.1)then ++ ++c line search along chosen direction ++ ++ grad1=grad2 ++ grad2=0.d0 ++ do i=iatm1,iatm2 ++ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=grad2 ++ call gdsum(buffer(1),1,buffer(2)) ++ grad2=buffer(1) ++ endif ++ grad2=sgn*grad2/hnorm ++ ++c linear extrapolation to minimum ++ ++ stride=sgn*step ++ if(grad2.lt.0.d0)then ++ ++ keyrlx=2 ++ stride=sgn*step*grad2/(grad1-grad2) ++ ++ endif ++ ++ do i=iatm1,iatm2 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ elseif(keyrlx.eq.2)then ++ ++c construct conjugate search vector ++ ++ gam2=(ggg/grad0)**2 ++ hnorm=0.d0 ++ grad0=ggg ++ grad2=0.d0 ++ do i=iatm1,iatm2 ++ ++ hhx(i)=ggx(i)+gam2*hhx(i) ++ hhy(i)=ggy(i)+gam2*hhy(i) ++ hhz(i)=ggz(i)+gam2*hhz(i) ++ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 ++ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ ++ enddo ++ if(mxnode.gt.1)then ++ ++ buffer(1)=hnorm ++ buffer(2)=grad2 ++ call gdsum(buffer(1),2,buffer(3)) ++ hnorm=buffer(1) ++ grad2=buffer(2) ++ ++ endif ++ hnorm=sqrt(hnorm) ++ grad2=grad2/hnorm ++ sgn=sign(1.d0,grad2) ++ grad2=sgn*grad2 ++ ++ do i=iatm1,iatm2 ++ ++ oxx(i)=oxx(i)+sgn*step*hhx(i) ++ oyy(i)=oyy(i)+sgn*step*hhy(i) ++ ozz(i)=ozz(i)+sgn*step*hhz(i) ++ ++ enddo ++ ++ keyrlx=1 ++ ++ endif ++ ++c merge coordinate arrays ++ ++ if(mxnode.gt.1)then ++ ++ nbuff=6*(numopt+mxnode-1)/mxnode ++ call merge(idnode,mxnode,numopt,nbuff,oxx,oyy,ozz,buffer) ++ ++ endif ++ ++c unload coordinates of shells ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstopt(i).gt.0)then ++ ++ j=j+1 ++ xxx(i)=oxx(j) ++ yyy(i)=oyy(j) ++ zzz(i)=ozz(j) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine relax_shells ++ ++ end module core_shell_module +diff -urN dl_class_1.9.orig/srcmod/coulomb_module.f dl_class_1.9/srcmod/coulomb_module.f +--- dl_class_1.9.orig/srcmod/coulomb_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/coulomb_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1542 @@ ++ module coulomb_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining coulomb terms ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ewald_module ++ use metafreeze_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ ++ implicit none ++ ++ contains ++ ++ subroutine coul0 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c 1/r potential, no truncation or damping ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester february 1993 ++c stress tensor - t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) rcsq,chgea,rsq,chgprd,rrr,coul,fcoul,fi,fx,fy,fz ++ real(8) engcpe,vircpe,rcut,epsq,strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ++c coulomb potential and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul0 ++ ++ subroutine coul1 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a standard coulomb potential truncated at rcut ++c and shifted to zero at rcut. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith december 1992. ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c stress tensor t.forester may 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq,rcsq,chgea,rsq ++ real(8) fi,chgprd,omega,egamma,fx,fy,fz,rrr ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)*r4pie0/epsq ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++c start of primary loop for forces evaluation ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10) then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ++c calculate potential energy and virial ++ ++ omega=chgprd*(rcut-rrr)/(rrr*rcut) ++ egamma=chgprd/(rrr*rsq) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-omega ++ cou_vir=cou_vir+egamma*rsq ++ omega=lambda1*omega ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+omega ++ cou_vir=cou_vir-egamma*rsq ++ omega=lambda2*omega ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+omega ++ vircpe=vircpe-egamma*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+omega ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-egamma*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul1 ++ ++ subroutine coul2 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a distance dependant dielectric `constant'. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester april 1993 ++c stress tensor added - t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq ++ real(8) fi,rcsq,chgea,chgprd,rsq,rrsq,coul,egamma,fx,fy,fz ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++c calculate potential energy and Virial ++ ++ rrsq=1.d0/rsq ++ coul=chgprd*rrsq ++ egamma=2.d0*coul*rrsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+2.d0*coul ++ coul=lambda1*coul ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-2.d0*coul ++ coul=lambda2*coul ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and Virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-2.d0*coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-2.d0*coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul2 ++ ++ subroutine coul3 ++ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c reaction field potential ++c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) ++c adapted for fennell-gezelter coulombic model ++c by w.smith june 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester february 1995 ++c stress tensor - t.forester feb 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,l,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq ++ real(8) b0,rfld0,rfld1,rfld2,chgea,chgprd,rsq,coul,omega ++ real(8) fx,fy,fz,fcoul,rrr,vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 ++ real(8) strs(6),strs_loc(6) ++ dimension fi(3) ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c reaction field terms ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ ++c screened coulomb terms ++ ++ vcon=erc(mxegrd-4)+rfld2*rcut**2-rfld1 ++ fcon=rcut*fer(mxegrd-4)-rfld0*rcut ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ rdr=dble(mxegrd-4)/rcut ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++c calculate potential energy using 3-point interpolation ++ ++ vk0=erc(l) ++ vk1=erc(l+1) ++ vk2=erc(l+2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0-vcon+fcon*(rrr-rcut) ++ coul=chgprd*(omega+rfld2*rsq-rfld1) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=fer(l) ++ gk1=fer(l+1) ++ gk2=fer(l+2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr-rfld0) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic force ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul3 ++ ++ subroutine coul4 ++ X (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a force shifted coulomb potential. ++c adapted for fennell-gezelter coulombic model ++c by w.smith may 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester october 1995 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,l,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq,coul ++ real(8) strs9,chgea,chgprd,rsq,rrr,omega,fcoul,fx,fy,fz ++ real(8) vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c screened coulomb terms ++ ++ vcon=erc(mxegrd-4) ++ fcon=rcut*fer(mxegrd-4) ++ rdr=dble(mxegrd-4)/rcut ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ chgea=chge(iatm)*r4pie0/epsq ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++c start of primary loop for forces evaluation ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chgea*chge(jatm) ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++c apply truncation of potential ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++c calculate potential energy using 3-point interpolation ++ ++ vk0=erc(l) ++ vk1=erc(l+1) ++ vk2=erc(l+2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ coul=chgprd*(omega-vcon+fcon*(rrr-rcut)) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=fer(l) ++ gk1=fer(l+1) ++ gk2=fer(l+2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate the coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine coul4 ++ ++ subroutine coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcpe,vircpe) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic potential and forces ++c for the all-pairs algorithm beyond the range of the normal cutoff ++c i.e. the 'tertiary' forces. frozen atom option included ++c ++c to be used with multiple_nsq ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w.smith august 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip ++ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 ++ integer npm2,m,ii,j,idum,kkk ++ real(8) engcpe,epsq,rcut,vircpe,rsq,rrr,chgprd,fcoul,coul,rct2 ++ ++ lskip=(lfree.or.lghost) ++ ++c zero energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ flx(i)=0.d0 ++ fly(i)=0.d0 ++ flz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation accumulators ++ ++ if(lsolva)then ++ ++ cou_sol_lng(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc_lng(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c set control variables ++ ++ last=natms ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius ++ ++ rct2=rcut**2 ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ if(lskip)then ++ if(atm_fre(i)*atm_fre(j).eq.2)cycle ++ endif ++ ++c calculate interatomic displacements ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c calculate coulomb terms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ if(lskip)then ++ if(atm_fre(i)*atm_fre(j).eq.2)cycle ++ endif ++ ++ ii=ii+1 ++ if(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then ++ ++c reject frozen atoms and calculate interatomic distance ++ ++ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.ge.rct2)then ++ ++ chgprd=chge(i)*chge(j)*r4pie0/epsq ++ rrr=sqrt(rsq) ++ ++c calculate potential energy and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(i),atmolt(j)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(i)+atm_fre(j).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc_lng(kkk)=cou_exc_lng(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol_lng(kkk)=cou_sol_lng(kkk)+coul ++ ++c calculate forces ++ ++ flx(i)=flx(i)+fcoul*xdf(ii) ++ fly(i)=fly(i)+fcoul*ydf(ii) ++ flz(i)=flz(i)+fcoul*zdf(ii) ++ ++ flx(j)=flx(j)-fcoul*xdf(ii) ++ fly(j)=fly(j)-fcoul*ydf(ii) ++ flz(j)=flz(j)-fcoul*zdf(ii) ++ ++c stress tensor ++ ++ stresl(1)=stresl(1)+xdf(ii)*fcoul*xdf(ii) ++ stresl(2)=stresl(2)+xdf(ii)*fcoul*ydf(ii) ++ stresl(3)=stresl(3)+xdf(ii)*fcoul*zdf(ii) ++ stresl(5)=stresl(5)+ydf(ii)*fcoul*ydf(ii) ++ stresl(6)=stresl(6)+ydf(ii)*fcoul*zdf(ii) ++ stresl(9)=stresl(9)+zdf(ii)*fcoul*zdf(ii) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c complete stress tensor ++ ++ stresl(4)=stresl(2) ++ stresl(7)=stresl(3) ++ stresl(8)=stresl(6) ++ ++ return ++ end subroutine coul_nsq ++ ++ end module coulomb_module +diff -urN dl_class_1.9.orig/srcmod/define_system_module.f dl_class_1.9/srcmod/define_system_module.f +--- dl_class_1.9.orig/srcmod/define_system_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/define_system_module.f 2015-11-16 17:18:13.422475594 +0100 +@@ -0,0 +1,6004 @@ ++ module define_system_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007, solvation, free energy ++c and excitation ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use dihedral_module ++ use ensemble_tools_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use inversion_module ++ use metafreeze_module ++ use metal_module ++ use parse_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use vdw_module ++ ++ contains ++ ++ subroutine simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the simulation control ++c parameters ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992. ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c modified ++c author - t.forester may 1993 ++c amended - t.forester sept 1994 - dl_poly_1.1 ++c amended - t.forester nov 1994 - macro version ++c amended - w.smith dec 1994 - t3d adaptation ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 hms ++ character*1 directive(lenrec) ++ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc ++ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe ++ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill ++ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau ++ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo ++ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn ++ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit ++ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack ++ integer idum,imcon,keyver,keytol,nblock,blkout,numgau ++ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol ++ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units ++ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin ++ real(8) prntim ++ ++CSGIC real(8) dummy ++CCRAY real(8) dummy ++CFFTWc FFTW instruction codes ++CFFTW ++CFFTW integer FFTW_FORWARD,FFTW_BACKWARD ++CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) ++CFFTW ++CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL ++CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) ++CFFTW ++CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE ++CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) ++CFFTW ++CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM ++CFFTW parameter (FFTW_OUT_OF_PLACE=0) ++CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) ++CFFTW ++CFFTW integer FFTW_THREADSAFE ++CFFTW parameter (FFTW_THREADSAFE=128) ++CFFTW ++ ++c intitialize system variables: temperature,pressure,ensemble key ++c force key, cutoff, primary cutoff, verlet shell width, relative ++c dielectric constant,timestep,temperature scaling flag, ++c temp scaling interval ++ ++ mode=0 ++ nhko=0 ++ nlatt=0 ++ nsteql=0 ++ nstrun=0 ++ minstp=0 ++ keybpd=0 ++ keyres=0 ++ keyens=0 ++ keyver=0 ++ taut=0.d0 ++ nstbts=0 ++ nstbgr=0 ++ nsbzdn=0 ++ nstbpo=100 ++ nstack=mxstak ++ intsta=0 ++ nstraj=0 ++ istraj=1 ++ keytrj=0 ++ numgau=1 ++ alpha=0.d0 ++ kmax1=0 ++ kmax2=0 ++ kmax3=0 ++ nospl=min(8,mxspl) ++ isolva=1 ++ nsolva=0 ++ niswitch=0 ++ nswitch=0 ++ nofic=1000 ++ ++ fmax=1000.d0 ++ keyfce=0 ++ multt=1 ++ keytol=0 ++ tstep=0.d0 ++ temp=0.d0 ++ press=0.d0 ++ rcut=0.d0 ++ rprim=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ epsq=1.d0 ++ rlxtol=1.d0 ++ opttol=1.d0 ++ tolnce=1.d-8 ++ quattol=1.d-8 ++ timjob=0.d0 ++ timcls=0.d0 ++ delrdf=0.d0 ++ delzdn=0.d0 ++ zlen=0.d0 ++ ehit=0.d0 ++ xhit=0.d0 ++ yhit=0.d0 ++ zhit=0.d0 ++ vmin=0.d0 ++ ebias=0.d0 ++ catchrad=0.d0 ++ pfree=0.d0 ++ ++ lhit=.false. ++ lbpd=.false. ++ ltad=.false. ++ lneb=.false. ++ loop=.true. ++ lnfic=.false. ++ lpsoc=.false. ++ lzero=.false. ++ ltscal=.false. ++ lewald=.false. ++ lspme=.false. ++ lhke=.false. ++ lgofr=.false. ++ lpgr=.false. ++ lzeql=.true. ++ loptim=.false. ++ lminim=.false. ++ lminopt=.false. ++ ltraj=.false. ++ lfcap=.false. ++ ltemp=.false. ++ lstep=.false. ++ lcut=.false. ++ ldelr=.false. ++ lprim=.false. ++ lforc=.false. ++ lens=.false. ++ lvdw=.false. ++ lrvdw=.false. ++ lpres=.false. ++ kill=.false. ++ lnsq=.false. ++ lzden=.false. ++ nolink=.false. ++ newgau=.false. ++ prechk=.false. ++ tadall=.false. ++ lsolva=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lexcite=.false. ++ lswitch=.false. ++ lghost=.false. ++ nebgo=.true. ++ seek='all ' ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open(nread,file='CONTROL',status='old') ++ ++ ++c PlUMED defaults ++ lplumed=.false. ++c PLUMED defaults ++c read job title ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++ call copystring(record,sysname,80) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, ++ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") ++ x sysname ++ ++ endif ++ ++c read and process directives from CONTROL file ++ ++ do while(loop) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++c convert to lowercase and strip out leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('redirect',directive,idum))then ++ ++c ignore this option in this context ++ ++c PLUMED modifications ++ elseif(findstring('plumed',directive,idum))then ++ if(findstring('on',directive,idum)) lplumed=.true. ++ if(findstring('off',directive,idum)) lplumed=.false. ++c PLUMED modifications ++ cycle ++ ++ elseif(findstring('steps',directive,idum))then ++ ++c number of timesteps ++ ++ nstrun=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun ++ ++ elseif(findstring('integ',directive,idum))then ++ ++c choice of integration algorithm ++ ++ if(findstring('leapfrog',directive,idum))then ++ ++ keyver=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'leapfrog verlet integration selected')") ++ ++ elseif(findstring('velocity',directive,idum))then ++ ++ keyver=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'velocity verlet integration selected')") ++ ++ endif ++ ++ elseif(findstring('no fic',directive,idum))then ++ ++c cancel possible "flying ice cube" in Berendsen thermostats ++ ++ lnfic=.true. ++ nofic=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('shells',directive,idum).and. ++ x findstring('on',directive,idum).and. ++ x findstring('cores',directive,idum))then ++ ++c put shells on cores at start - shell model only (else null) ++ ++ lpsoc=.true. ++ ++ elseif(findstring('densvar',directive,idum))then ++ ++c specify allowed density variation ++ ++ densvar=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") ++ x densvar ++ ++ elseif(findstring('no link',directive,idum))then ++ ++c switch off link cell option ++ ++ nolink=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'link cells option deactivated')") ++ ++ elseif(findstring('equil',directive,idum))then ++ ++c number of equilibration timesteps ++ ++ nsteql=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration period ',3x,i10)")nsteql ++ ++ elseif(findstring('restart',directive,idum))then ++ ++c restart control ++ ++ if(findstring('noscale',directive,idum))then ++ ++ keyres=3 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'noscale restart requested')") ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ keyres=2 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'scaled restart requested')") ++ ++ else ++ ++ keyres=1 ++ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") ++ ++ endif ++ ++ elseif(findstring('ensemble',directive,idum))then ++ ++c ensemble selection ++ ++ call ensemble_selection(directive,lens,kill,idnode,keyens, ++ x mode,taut,taup) ++ ++ elseif(findstring('regauss',directive,idum))then ++ ++c re-initialise velocities option (regaussing) ++ ++ newgau=.true. ++ numgau=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'regaussing option activated', ++ x /,1x,'regaussing interval set to ',3x,i10)") ++ x numgau ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ nstbts=intstr(directive,lenrec,idum) ++ if(nstbts.gt.0)then ++ ltscal=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'temperature scaling on' ++ x /,1x,'temperature scaling interval',3x,i10)") ++ x nstbts ++ ++ endif ++ ++ elseif(findstring('rdf',directive,idum))then ++ ++ if(findstring('print',directive,idum))then ++ ++ lpgr=.true. ++ lpgr=(lgofr.and.lpgr) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'g(r) printing option on ')") ++ ++ else ++ ++ lgofr=.true. ++ nstbgr=intstr(directive,lenrec,idum) ++ delrdf=dblstr(directive,lenrec,idum) ++ if(nstbgr.eq.0)nstbgr=10 ++ if(delrdf.lt.1.d-8)delrdf=0.05d0 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'radial distribution functions on ', ++ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr ++ write(nrite, ++ x "(1x,'g(r) bin width ',3x,1p,e12.4)") ++ x delrdf ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('zden',directive,idum))then ++ ++ lzden=.true. ++ nsbzdn=intstr(directive,lenrec,idum) ++ delzdn=dblstr(directive,lenrec,idum) ++ zlen=dblstr(directive,lenrec,idum) ++ if(nsbzdn.eq.0)nsbzdn=10 ++ if(delzdn.lt.1.d-8)then ++ zlen=0.1d0*dble(mxzdn) ++ delzdn=0.1d0 ++ elseif(zlen.lt.1.d-8)then ++ zlen=delzdn*dble(mxzdn) ++ endif ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'Z density profile requested', ++ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn ++ write(nrite, ++ x "(1x,'zdensity bin width ',3x,1p,e12.4)") ++ x delzdn ++ write(nrite, ++ x "(1x,'zdensity range ',3x,1p,e12.4)") ++ x zlen ++ ++ endif ++ ++ elseif(findstring('collect',directive,idum))then ++ ++ lzeql=.false. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration included in overall averages')") ++ ++ elseif(findstring('neb',directive,idum))then ++ ++c activate nudged elastic band option ++ ++ call neb_option(directive,lneb,lminopt,idnode, ++ x numneb,keytol,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('impact',directive,idum))then ++ ++c activate the impact option ++ ++ if(lhit)call error(idnode,516) ++ lhit=.true. ++ khit=intstr(directive,lenrec,idum) ++ nhit=intstr(directive,lenrec,idum) ++ ehit=dblstr(directive,lenrec,idum) ++ xhit=dblstr(directive,lenrec,idum) ++ yhit=dblstr(directive,lenrec,idum) ++ zhit=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'impact option selected')") ++ write(nrite,"( ++ x /,1x,'identity of impact atom ',i10, ++ x /,1x,'time step of impact ',i10, ++ x /,1x,'impact recoil energy (keV) ',1p,e12.4, ++ x /,1x,'impact direction (x component) ',1p,e12.4, ++ x /,1x,'impact direction (y component) ',1p,e12.4, ++ x /,1x,'impact direction (z component) ',1p,e12.4)") ++ x khit,nhit,ehit,xhit,yhit,zhit ++ ++ endif ++ ++c convert impact energy from keV to internal units ++ ++ ehit=ehit*9648530.821d0 ++ ++ elseif(findstring('bpd',directive,idum))then ++ ++c activate the BPD option ++ ++ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, ++ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, ++ x catchrad,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('tad',directive,idum))then ++ ++c activate temperature accelerated dynamics option ++ ++ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, ++ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, ++ x deltad,opttol,hyp_units) ++ ++ elseif(findstring('minim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ minstp=intstr(directive,lenrec,idum) ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ lminim=.true. ++ loptim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'minimisation programme requested')") ++ write(nrite, ++ x "(1x,'structure minimisation interval ', ++ x 3x,i10)")minstp ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'structure minimisation tolerance', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('optim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ loptim=.true. ++ lminim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'structure optimisation requested')") ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'tolerance for structure optimisation ', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('zero',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ temp=1.d0 ++ lzero=.true. ++ loptim=.false. ++ lminim=.false. ++ ltemp=.true. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'zero K optimisation requested')") ++ write(nrite, ++ x "(' temperature reset to',1p,e12.4)")1.d0 ++ ++ endif ++ ++ else if(findstring('solva',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ else if(findstring('decomp',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ elseif(findstring('metafreeze',directive,idum).or. ++ x findstring('metadyn',directive,idum))then ++ ++c activate metadynamics option - d. quigley ++ ++ call metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++ else if(findstring('free',directive,idum))then ++ ++ call free_energy_option(directive,lfree,lfrmas,idnode) ++ ++ else if(findstring('excite',directive,idum))then ++ ++ call excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++ else if(findstring('switch',directive,idum))then ++ ++ call switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++ elseif(findstring('print',directive,idum))then ++ ++ nstbpo=intstr(directive,lenrec,idum) ++ nstbpo=max(nstbpo,1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data printing interval ',3x,i10)")nstbpo ++ ++ elseif(findstring('stack',directive,idum))then ++ ++ nstack=intstr(directive,lenrec,idum) ++ ++c reset stack limit if too large ++ ++ nstack=min(nstack,mxstak) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data stacking interval ',3x,i10)")nstack ++ ++ elseif(findstring('stats',directive,idum))then ++ ++ intsta=intstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'statistics file interval ',3x,i10)")intsta ++ ++ elseif(findstring('traj',directive,idum))then ++ ++ ltraj=.true. ++ nstraj=intstr(directive,lenrec,idum) ++ istraj=max(intstr(directive,lenrec,idum),1) ++ keytrj=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'trajectory file option on ', ++ x /,1x,'trajectory file start ',3x,i10, ++ x /,1x,'trajectory file interval ',3x,i10 ++ x /,1x,'trajectory file info key ',3x,i10)") ++ x nstraj,istraj,keytrj ++ ++ elseif(findstring('ewald',directive,idum).or. ++ x findstring('spme',directive,idum).or. ++ x findstring('hke',directive,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ call ewald_selection(directive,lhke,lspme,lewald,lcut, ++ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, ++ x kmax3,alpha,rcut) ++ ++ elseif(findstring('distan',directive,idum))then ++ ++ keyfce=4 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('coul',directive,idum))then ++ ++ keyfce=6 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Coulombic potential')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('shift',directive,idum))then ++ ++ keyfce=8 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('reaction',directive,idum))then ++ ++ keyfce=10 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : reaction field')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('cap',directive,idum))then ++ ++ lfcap=.true. ++ fm=dblstr(directive,lenrec,idum) ++ if(fm.gt.0.d0)fmax=fm ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax ++ ++ elseif(findstring('no vdw',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'short-range potential terms off')") ++ lvdw=.true. ++ ++ elseif(findstring('no elec',directive,idum))then ++ ++ keyfce=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'electrostatic potential terms off')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('mult',directive,idum))then ++ ++ multt=max(intstr(directive,lenrec,idum),1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'multiple timestep interval ',3x,i10)")multt ++ ++ elseif(findstring('timestep',directive,idum))then ++ ++ lstep=.true. ++ tstep=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep ++ ++ elseif(findstring('temp',directive,idum))then ++ ++ ltemp=.true. ++ temp=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp ++ ++ elseif(findstring('pres',directive,idum))then ++ ++ press=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press ++ ++c convert from katm to internal units of pressure ++ ++ press=press/prsunt ++ lpres=.true. ++ ++ elseif(findstring('prim',directive,idum))then ++ ++c primary cutoff ++ ++ lprim=.true. ++ rprim=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim ++ ++ elseif(findstring('rvdw',directive,idum))then ++ ++c cutoff for short range potentials ++ ++ rvdw=dblstr(directive,lenrec,idum) ++ lrvdw=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw ++ ++ elseif(findstring('delr',directive,idum))then ++ ++c Verlet shell width ++ ++ ldelr=.true. ++ delr=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr ++ ++ elseif(findstring('cut',directive,idum))then ++ ++c cutoff ++ ++ lcut=.true. ++ rcut=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut ++ ++ elseif(findstring('eps',directive,idum))then ++ ++c relative dielectric constant ++ ++ epsq=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq ++ ++ elseif(findstring('rlxtol',directive,idum))then ++ ++c force tolerance for shell relaxation ++ ++ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol ++ ++ elseif(findstring('shake',directive,idum))then ++ ++c tolerance for shake ++ ++ tolnce=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce ++ ++ elseif(findstring('quaternion',directive,idum))then ++ ++c tolerance for quaternion integration ++ ++ quattol=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol ++ ++ elseif(findstring('job time',directive,idum))then ++ ++c time for simulation (in seconds/minutes/hours/days or indefinite) ++ ++ if(findstring('indef',directive,idum))then ++ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 ++ else ++ timjob=dblstr(directive,lenrec,idum) ++ if(findstring('m',directive,idum))then ++ timjob=6.0d1*timjob ++ elseif(findstring('h',directive,idum))then ++ timjob=3.6d3*timjob ++ elseif(findstring('d',directive,idum))then ++ timjob=8.64d4*timjob ++ endif ++ endif ++ ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") ++ x hms,prntim ++ ++ elseif(findstring('close time',directive,idum))then ++ ++c time for winding up a job (in seconds) ++ ++ timcls=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls ++ ++ elseif(findstring('all pairs',directive,idum))then ++ ++c full minimum image - N^2 interactions each timestep ++ ++ lnsq=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'All-pairs requested for electrostatics')") ++ ++ elseif(findstring('nospl',directive,idum))then ++ ++c set ewald_spme interpolation order ++ ++ nospl=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('finish',directive,idum))then ++ ++c safe termination of reading CONTROL file ++ ++ loop=.false. ++ ++ else ++ ++c unrecognised directive in control file ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ enddo ++ ++c check on steps before temperature scaling ++ ++ if(nstbts.eq.0)nstbts=nstrun+1 ++ ++c conduct consistency checks on directives ++ ++ if(lminim)then ++ ++c ensure final configuration follows minimisation ++ ++ if(minstp.eq.0)minstp=nstrun ++ nstrun=minstp*(nstrun/minstp) ++ ++ endif ++ ++c check force activation options ++ ++ if(.not.lforc)then ++ ++c check if any forces are in operation ++ ++ if(.not.lvdw)then ++ ++ kill=.true. ++ call error(idnode,-383) ++ ++ endif ++ ++ else ++ ++c turn on short range forces ++ ++ if(lvdw)then ++ ++ if(keyfce.eq.0)then ++ ++ lcut=.true. ++ ldelr=.true. ++ ++ endif ++ ++ else ++ ++ keyfce=keyfce+1 ++ ++ endif ++ ++ endif ++ ++c if tad selected use only leap frog ++ ++ if(ltad.and.keyver.eq.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to leapfrog for TAD dynamics')") ++ keyver=0 ++ ++ endif ++ ++c error checking ++ ++ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then ++ ++ kill=.true. ++ call error(idnode,-2360) ++ ++ endif ++ ++ if(lsolva.or.lfree.or.lexcite.or.lswitch)then ++ ++ if(lspme)then ++ ++ kill=.true. ++ call error(idnode,-601) ++ ++ endif ++ ++ if(lhke)then ++ ++ kill=.true. ++ call error(idnode,-602) ++ ++ endif ++ ++ endif ++ ++ if(lghost.and.nstbgr.ne.isolva)then ++ ++ call warning(idnode,130,dble(isolva),0.d0,0.d0) ++ nstbgr=isolva ++ ++ endif ++ if(lfree.and.lgofr)then ++ ++ call warning(idnode,140,0.d0,0.d0,0.d0) ++ lgofr=.false. ++ lpgr=.false. ++ ++ endif ++ if(loptim)then ++ ++ temp=0.d0 ++ ++ elseif(.not.ltemp)then ++ ++ kill=.true. ++ call error(idnode,-380) ++ ++ endif ++ ++ if(.not.lstep)then ++ ++ kill=.true. ++ call error(idnode,-381) ++ ++ endif ++ ++ if(.not.lcut)then ++ ++ kill=.true. ++ call error(idnode,-382) ++ ++ endif ++ ++c check if van der Waals cutoff set ++ ++ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then ++ ++ if(rcut.gt.0.d0)then ++ ++ rvdw=rcut ++ ++ else ++ ++ kill=.true. ++ call error(idnode,-402) ++ ++ endif ++ ++ endif ++ ++ if(.not.ldelr)then ++ ++ kill=.true. ++ call error(idnode,-384) ++ ++ endif ++ ++ if(multt.gt.1)then ++ ++ if(.not.lprim)then ++ ++ kill=.true. ++ call error(idnode,-385) ++ ++ elseif(rprim.gt.rcut)then ++ ++ kill=.true. ++ call error(idnode,-386) ++ ++ endif ++ ++ endif ++ ++c check settings in nvt ensemble ++ ++ if(keyens.ge.2.and.keyens.le.3)then ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ ++ endif ++ ++c check settings in npt ensemble ++ ++ if(keyens.ge.4.and.keyens.le.7)then ++ ++ if(.not.lpres)then ++ ++ kill=.true. ++ call error(idnode,-387) ++ ++ endif ++ ++c check barostat and thermostat rates non zero ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ if(taup.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-466) ++ ++ endif ++ ++ endif ++ ++c check multiple timestep cutoffs are sensible ++ ++ if(multt.gt.1)then ++ if(rcut-rprim.lt.delr)then ++ ++ kill=.true. ++ call error(idnode,-398) ++ ++ endif ++ endif ++ ++c check rcut > rvdw (for verlet list constructor) ++ ++ if(rcut.lt.rvdw)then ++ ++ kill=.true. ++ call error(idnode,-400) ++ ++ endif ++ ++c check spme is not being used with incorrect pbc ++ ++ if(lspme)then ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ kill=.true. ++ call error(idnode,-513) ++ ++ endif ++ ++ endif ++ ++c check on all-pairs calculation request ++ ++ if(lnsq)then ++ ++ if(multt.eq.1)then ++ ++ kill=.true. ++ call error(idnode,-422) ++ ++ endif ++ ++ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then ++ ++ kill=.true. ++ call error(idnode,-424) ++ ++ endif ++ ++ endif ++ ++c cancel rdf option if no vdw or coulombic forces ++ ++ if(lgofr.and.keyfce.eq.0)then ++ ++ lgofr=.false. ++ call warning(idnode,120,0.d0,0.d0,0.d0) ++ ++ endif ++ ++ if(kill)call abort_control_read(2,idnode,nread) ++ ++c close CONTROL file ++ ++ if(idnode.eq.0)close(nread) ++ ++ return ++ end subroutine simdef ++ ++ subroutine sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the molecular specifications ++c of the system to be simulated ++c version for rigid unit data and neutral groups ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992. ++c amended - w.smith march 1994 ++c amended - t.forester april 1994 ++c amended - w.smith dec 1994 - getrec etc ++c amended - a.smondyrev may 2000 - keydih=5 for ++c ryckaert-bellemans potential in dihedrals ++c amended - a.smondyrev may 2000 - keydih=6 for ++c fluorinated ryckaert-bellemans potential in dihedrals ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf ++ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost ++ ++ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls ++ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite ++ integer nsite,nconst,nangle,ndihed,ninver,nbonds ++ integer nteth,nspmf,itmols,i,idum,keyver ++ integer ntpter,keyshl,iatm,natmsr,ntghost ++ ++ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb ++ real(8) sumchg ++ ++ data loop1/.true./,loop2/.true./ ++ ++c initialise system counters: atomic site index, number of ++c constraints, bond angles, dihedrals, inversions, chemical bonds, ++c unique atom types, total number of atoms, ++c total number of rigid groups, number of tethered atoms, ++c number of three body potentials ++ ++ nsite=0 ++ nconst=0 ++ nangle=0 ++ ndihed=0 ++ ninver=0 ++ nbonds=0 ++ ntpatm=0 ++ natms=0 ++ ngrp=0 ++ nteth=0 ++ ntptbp=0 ++ ntpter=0 ++ ntpmet=0 ++ ntpvdw=0 ++ ntpfbp=0 ++ nshels=0 ++ nspmf=0 ++ keyfld=0 ++ keyshl=0 ++ ntghost=0 ++ natmsr=0 ++ ntcons_ghost=0 ++ ++ lunits=.false. ++ lmols=.false. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ lshl=.false. ++ lpmf=.false. ++ engunit=1.d0 ++ ++ numbonds(:)=0 ++ numpmf(:)=0 ++ numcon(:)=0 ++ numdih(:)=0 ++ numinv(:)=0 ++ numgrp(:)=0 ++ numsit(:)=0 ++ numteth(:)=0 ++ numshl(:)=0 ++ npmf(:)=0 ++ indpmf(:)=0 ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD',status='old') ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c convert to lowercase and remove leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('units',record,idum))then ++ ++c identify energy unit for input/output ++ ++ lunits=.true. ++ call define_units(idnode,engunit) ++ ++c neutral group control option ++ ++ elseif(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ if(idnode.eq.0) ++ x write(nrite,"(/,' neutral group implementation in use')") ++ ++c can't have neutral groups with all-pairs ++ ++ if(lnsq)call error(idnode,426) ++ ++c specify molecular species ++ ++ elseif(findstring('molecu',record,idum))then ++ ++c number of molecular types ++ ++ if(lmols)call error(idnode,11) ++ lmols=.true. ++ ntpmls=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") ++ x ntpmls ++ ++ if(ntpmls.gt.mxtmls)call error(idnode,10) ++ ++c initialise total system charge ++ ++ sumchg=0.d0 ++ ++c read in molecular characteristics ++ ++ do itmols=1,ntpmls ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'molecular species type',9x,i10)") ++ x itmols ++ ++c name of molecular species ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call copystring(record,molnam(1,itmols),40) ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") ++ x (molnam(i,itmols),i=1,40) ++ ++c stop processing if energy unit has not been specified ++ ++ if(.not.lunits)call error(idnode,6) ++ ++c read molecular data ++ ++ loop2=.true. ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'number of molecules ', ++ x 10x,i10)")nummols(itmols) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++c read in atomic details ++ ++ call define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read core - shell spring parameters ++ ++ elseif(findstring('shell',record,idum))then ++ ++ lshl=.true. ++ call define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl, ++ x engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read chemical bond force constant and bondlength ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ call define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read bond atom indices and constraint bondlength ++ ++ elseif(findstring('constr',record,idum))then ++ ++ call define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read pmf bond atom indices, weights and constraint bondlength ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ if(lpmf)call error(idnode,484) ++ lpmf=.true. ++ call define_pmf(safe,idnode,itmols,nspmf) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular angular potential parameters ++ ++ elseif(findstring('angles',record,idum))then ++ ++ call define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular dihedral potential parameters ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ call define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular inversion potential parameters ++ ++ elseif(findstring('invers',record,idum))then ++ ++ call define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read rigid body data ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ call define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read tethered atom indices and tethering parameters ++ ++ elseif(findstring('teth',record,idum))then ++ ++ call define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c finish of data for one molecular type ++ ++ elseif(findstring('finish',record,idum))then ++ ++c running total of number of atoms in system ++ ++ natms=natms+nummols(itmols)*numsit(itmols) ++ if(natms.gt.mxatms)call error(idnode,75) ++ ++c check core-shell units are not both in same rigid body unit ++ ++ call check_shells(idnode,itmols,nshels,ngrp) ++ ++ loop2=.false. ++ ++ else ++ ++c error exit for unidentified directive in molecular data ++ ++ if(idnode.eq.0)write(nrite,'(12x,a)')record ++ call error(idnode,12) ++ ++ endif ++ ++ enddo ++ ++c construction of atmolt table for solvation calculation ++ ++ if(lsolva)then ++ ++ do iatm=natmsr+1,natms ++ atmolt(iatm)=itmols ++ enddo ++ natmsr=natms ++ ++ endif ++ ++ enddo ++ ++c construction of atm_fre table for free energy or excitation ++ ++ if(lfree.or.lexcite.or.lswitch)then ++ ++ atm_fre(:)=0 ++ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then ++ ++ do iatm=ind_fre(1),ind_fre(2) ++ atm_fre(iatm)=1 ++ enddo ++ ++ endif ++ ++ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then ++ ++ do iatm=ind_fre(3),ind_fre(4) ++ ++ atm_fre(iatm)=2 ++ if(lghost)ntghost=ntghost+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c calculate system charge ++ ++ call check_syschg(idnode,ntpmls,sumchg) ++ ++c read in the nonbonded potential energy parameters ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ call define_van_der_waals ++ x (safe,ltable,lunits,lmols,idnode,ntpvdw, ++ x ntpatm,keyfce,dlrpot,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the metal potential energy parameters ++ ++ elseif(findstring('met',record,idum))then ++ ++ call define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the three body potential energy parameters ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ call define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the tersoff potential energy parameters ++ ++ elseif(findstring('tersoff',record,idum))then ++ ++ call define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the four body potential energy parameters ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ call define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read external field data ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c normal end of FIELD file ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. ++ x mod(keyfce,2).eq.1)call error(idnode,145) ++ ++c error exit for unidentified directive ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(100a)')record ++ call abort_field_read(2,idnode,nfield) ++ ++ endif ++ ++ enddo ++ ++c close force field file ++ ++ if(idnode.eq.0)close (nfield) ++ ++ ++ if(lshl.and.idnode.eq.0)then ++ ++ if(keyshl.eq.1)write(nrite, ++ x "(/,/,'adiabatic shell model in operation')") ++ ++ if(keyshl.eq.2)write(nrite, ++ x "(/,/,'relaxed shell model in operation')") ++ ++ endif ++ ++ if(lshl.and.keyshl.eq.0)call error(idnode,1951) ++ ++c if metadynamics and shell selected use only velocity verlet ++ ++ if(lshl.and.lmetadyn.and.keyver.eq.0)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to velocity verlet for metadynamics')") ++ keyver=1 ++ ++ endif ++ ++ return ++ end subroutine sysdef ++ ++ subroutine sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the configuration data file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 atname(8) ++ ++ logical loglnk,safe,lneut,nolink,lfree,lfrmas ++ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt ++ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz ++ integer m,l,ncells,idum,mxnode ++ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc ++ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi ++ real(8) width,dum1,dum2,test,com(3) ++ ++c open the system input file ++ ++ if(idnode.eq.0)open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ call copystring(record,cfgname,80) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ levcfg=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'selected image convention',6x,i10)")imcon ++ ++c check config file contents for consistent data ++ ++ if((imcon.eq.0.or.imcon.eq.6).and. ++ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) ++ x call error(idnode,180) ++ ++ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) ++ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) ++ ++ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) ++ x call error(idnode,390) ++ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 ++ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.eq.0)then ++ ++c if no periodic boundaries - set zero values for cell ++c vectors and cell volume ++ ++ cell(:)=0.d0 ++ volm=0.d0 ++ ++ else ++ ++c read cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++ endif ++ ++c read the atomic coordinates ++ ++ indatm=0 ++ indnam=0 ++ indneu=0 ++ safe=.true. ++ ++ do k=1,ntpmls ++ ++ do l=1,nummols(k) ++ ++ do m=1,numsit(k) ++ ++ indatm=indatm+1 ++ ++ if(indatm.gt.mxatms)call error(idnode,45) ++ ++ xxx(indatm)=0.d0 ++ yyy(indatm)=0.d0 ++ zzz(indatm)=0.d0 ++ vxx(indatm)=0.d0 ++ vyy(indatm)=0.d0 ++ vzz(indatm)=0.d0 ++ fxx(indatm)=0.d0 ++ fyy(indatm)=0.d0 ++ fzz(indatm)=0.d0 ++ ++ if(idnode.eq.0)then ++ ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ ++ elseif(levcfg.eq.1)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ ++ else ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce ++ ++ endif ++ ++c strip blanks off atom name ++ ++ call strip(atname,8) ++ ++ if(sitnam(indnam+m).eq.mkwd8(atname))then ++ ++ xxx(indatm)=xcoord ++ yyy(indatm)=ycoord ++ zzz(indatm)=zcoord ++ ++ if(levcfg.gt.0)then ++ ++ vxx(indatm)=xveloc ++ vyy(indatm)=yveloc ++ vzz(indatm)=zveloc ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ fxx(indatm)=xforce ++ fyy(indatm)=yforce ++ fzz(indatm)=zforce ++ ++ endif ++ ++ else ++ ++ write(nrite,"(/,/,'unidentified atom label :',8a1, ++ x ': atom number ',i5)")atname,indatm ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ call gstate(safe) ++ if(.not.safe)call error(idnode,25) ++ ++ ltype(indatm)=ltpsit(indnam+m) ++ weight(indatm)=wgtsit(indnam+m) ++ chge(indatm)=chgsit(indnam+m) ++ atmnam(indatm)=sitnam(indnam+m) ++ lstfrz(indatm)=lfzsit(indnam+m) ++ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu ++ ++c reset atomic masses according to free energy definitions ++ ++ if(lfree)then ++ ++ weight_sav(indatm)=weight(indatm) ++ ++ if(lfrmas)then ++ ++ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then ++ weight(indatm)=lambda1*weight(indatm) ++ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) ++ x then ++ weight(indatm)=lambda2*weight(indatm) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ indneu=indneu+nugrp(indnam+numsit(k)) ++ ++ enddo ++ ++ indnam=indnam+numsit(k) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(xxx,indatm,buffer) ++ call gdsum(yyy,indatm,buffer) ++ call gdsum(zzz,indatm,buffer) ++ ++ if(levcfg.gt.0)then ++ ++ call gdsum(vxx,indatm,buffer) ++ call gdsum(vyy,indatm,buffer) ++ call gdsum(vzz,indatm,buffer) ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ call gdsum(fxx,indatm,buffer) ++ call gdsum(fyy,indatm,buffer) ++ call gdsum(fzz,indatm,buffer) ++ ++ endif ++ ++ endif ++ ++c check integrity of cell vectors : for cubic, TO and RD cases ++c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) ++ ++ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then ++ ++ axx=(abs(cell(1))+abs(cell(5)))/2.d0 ++ test=1.d-8*axx ++ if(abs(cell(1)-axx).gt.test)call error(idnode,410) ++ if(abs(cell(5)-axx).gt.test)call error(idnode,410) ++ if(imcon.eq.5)then ++ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) ++ x call error(idnode,410) ++ else ++ if(abs(cell(9)-axx).gt.test)call error(idnode,410) ++ endif ++ ++ endif ++ ++c check integrity of hexagonal prism cell vectors ++ ++ if(imcon.eq.7)then ++ ++ rt3=sqrt(3.d0) ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,410) ++ ++ endif ++ ++c check 2D PBC for imcon=6 ++ ++ if(imcon.eq.6)then ++ ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c check for diagonal cell matrix if appropriate ++ ++ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. ++ x (imcon.eq.5).or.(imcon.eq.7))then ++ ++ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c put centre of mass at centre of coordinates if imcon=0 ++ ++ if(imcon.eq.0)then ++ ++ totmas=getmass(indatm,idnode,mxnode) ++ call getcom(indatm,idnode,mxnode,totmas,com) ++ ++ do i=1,indatm ++ ++ xxx(i)=xxx(i)-com(1) ++ yyy(i)=yyy(i)-com(2) ++ zzz(i)=zzz(i)-com(3) ++ ++ enddo ++ ++ endif ++ ++c set widths if unset - needed for check on link cells below ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ xhi=abs(xxx(1)) ++ yhi=abs(yyy(1)) ++ zhi=abs(zzz(1)) ++ do i=2,indatm ++ ++ xhi=max(xhi,abs(xxx(i))) ++ yhi=max(yhi,abs(yyy(i))) ++ zhi=max(zhi,abs(zzz(i))) ++ ++ enddo ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ if(imcon.eq.6.and.cell(9).lt.1.d-6)then ++ ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ endif ++ ++c calculate dimensional properties of simulation cell ++ ++ call dcell(cell,celprp) ++ ++ if(imcon.eq.0)then ++ ++ volm=0.d0 ++ ++ elseif(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ else ++ ++ volm=celprp(10) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") ++ write(nrite,"(21x,3f12.6)")cell ++ ++ write(nrite, ++ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm ++ ++ endif ++ ++c check value of cutoff and reset if necessary ++ ++ if(imcon.gt.0)then ++ ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 ++ if(imcon.eq.5)width=cell(1)/2.d0 ++ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 ++ ++c halt program if potential cutoff exceeds cell width ++ ++ if(rcut.gt.width)call error(idnode,95) ++ ++ endif ++ ++c decide on whether to use link cells for verlet list constructor ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ ++ ilx=int(celprp(7)/(rcut+delr)) ++ ily=int(celprp(8)/(rcut+delr)) ++ ilz=int(celprp(9)/(rcut+delr)) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(lneut.and.ncells.le.36)loglnk=.false. ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(loglnk.and.ncells.gt.mxcell)then ++ ++ dum1=dble(ncells) ++ dum2=dble(mxcell) ++ call warning(idnode,90,dum1,dum2,dum2) ++ loglnk=.false. ++ ++ endif ++ ++ endif ++ ++ if(loglnk.and.idnode.eq.0) ++ x write(nrite,"(/,/,' link cell algorithm in use')") ++ ++ if(idnode.eq.0)close (nconf) ++ ++c ensure PBC compliance of starting structure ++ ++ if(keyres.eq.0.and.imcon.gt.0)then ++ ++ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ ++c error exit for config file read ++ ++ 100 call abort_config_read(2,idnode,nconf) ++ ++ end subroutine sysgen ++ ++ subroutine sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the REVIVE file data and ++c defining the initial thermodynamic and structural accumulators. ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc ++ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc ++ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw ++ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm ++ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost ++ real(8) chit_shl ++ ++c read or initialise accumulator arrays ++ ++ if(keyres.eq.1.and.idnode.eq.0)then ++ ++c read accumulator data from dump file ++ ++ open(nrest,file='REVOLD',form='unformatted') ++ ++ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, ++ x tboost,chit_shl ++ read(nrest) virtot,vircom,eta,strcns,strbod ++ read(nrest) stpval ++ read(nrest) sumval ++ read(nrest) ssqval ++ read(nrest) zumval ++ read(nrest) ravval ++ read(nrest) stkval ++ read(nrest) xx0,yy0,zz0 ++ read(nrest) xxs,yys,zzs ++ ++ if(lgofr) read(nrest)rdf ++ if(lzden) read(nrest)zdens ++ ++ nstep=nint(dnstep) ++ numacc=nint(dnumac) ++ numrdf=nint(dnumrd) ++ nzden=nint(dnzden) ++ close (nrest) ++ ++ else ++ ++c initialise step counters ++ ++ nstep=0 ++ numacc=0 ++ numrdf=0 ++ nzden=0 ++ ++c initialise temperature and pressure coupling parameters ++c and integral for conserved quantity ++ ++ chit=0.d0 ++ chip=0.d0 ++ conint=0.d0 ++ virtot=0.d0 ++ vircom=0.d0 ++ chit_shl=0.d0 ++ do i=1,9 ++ ++ eta(i)=0.d0 ++ strcns(i)=0.d0 ++ strbod(i)=0.d0 ++ ++ enddo ++ ++c initialise accumulator arrays ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ zumval(i)=0.d0 ++ ravval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ xxs(i)=0.d0 ++ yys(i)=0.d0 ++ zzs(i)=0.d0 ++ ++ enddo ++ ++ do j=1,mxnstk ++ ++ do i=1,mxstak ++ ++ stkval(i,j)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ zdens(j,i)=0.d0 ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c put shells on cores at start ++ ++ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) ++ x call put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c if restart then broadcast stored variables via a global sum ++ ++ if(keyres.eq.1.and.mxnode.gt.1)then ++ ++ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) ++ x call error(idnode,186) ++ ++ buffer(1)=chit ++ buffer(2)=chip ++ buffer(3)=conint ++ buffer(4)=dble(nstep) ++ buffer(5)=dble(numacc) ++ buffer(6)=dble(numrdf) ++ buffer(7)=dble(nzden) ++ buffer(8)=tboost ++ buffer(9)=virtot ++ buffer(10)=vircom ++ buffer(11)=chit_shl ++ call gdsum(buffer(1),11,buffer(12)) ++ chit=buffer(1) ++ chip=buffer(2) ++ conint=buffer(3) ++ nstep=nint(buffer(4)) ++ numacc=nint(buffer(5)) ++ numrdf=nint(buffer(6)) ++ nzden=nint(buffer(7)) ++ tboost=buffer(8) ++ virtot=buffer(9) ++ vircom=buffer(10) ++ chit_shl=buffer(11) ++ ++ call gdsum(eta,9,buffer) ++ call gdsum(strcns,9,buffer) ++ call gdsum(strbod,9,buffer) ++ call gdsum(stpval,mxnstk,buffer) ++ call gdsum(sumval,mxnstk,buffer) ++ call gdsum(ssqval,mxnstk,buffer) ++ call gdsum(zumval,mxnstk,buffer) ++ call gdsum(ravval,mxnstk,buffer) ++ call gdsum(stkval,mxnstk*mxstak,buffer) ++ call gdsum(xx0,natms,buffer) ++ call gdsum(yy0,natms,buffer) ++ call gdsum(zz0,natms,buffer) ++ call gdsum(xxs,natms,buffer) ++ call gdsum(yys,natms,buffer) ++ call gdsum(zzs,natms,buffer) ++ ++c for rdf table - broadcast and normalise ++ ++ if(lgofr)then ++ ++ do k=1,mxxtyp ++ ++ call gdsum(rdf(1,k),mxrdf,buffer) ++ ++ do j=1,mxrdf ++ rdf(j,k)=rdf(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do k=1,mxatyp ++ ++ call gdsum(zdens(1,k),mxzdn,buffer) ++ ++ do j=1,mxzdn ++ zdens(j,k)=zdens(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities and long-range corrections ++ ++ elrc=0.d0 ++ virlrc=0.d0 ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 ++ ++ call lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) ++ ++ if(lmetab.or.ntpmet.eq.0)then ++ ++ elrcm(0)=0.d0 ++ vlrcm(0)=0.d0 ++ ++ else ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 ++ ++ return ++ end subroutine sysinit ++ ++ subroutine systemp ++ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for setting the initial system temperature ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl ++ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq ++ ++c number of degrees of freedom ++c 3 for com translation ++c 3 for angular momentum about origin (non-periodic systems only) ++ ++ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre ++ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 ++ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) ++ degshl=dble(3*ntshl) ++ ++c lose one degree of freedom if temperature constrained ++c gaussian constraints ++ ++c if(keyens.eq.1)degfre=degfre-1.d0 ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, ++ x ' rotational degrees of freedom ',f20.0,/, ++ x ' shell pseudo degrees of freedom',f20.0)") ++ x degfre,degrot,degshl ++ if(degfre.lt.1.d0)call error(idnode,350) ++ ++c define reciprocal masses of atoms ++ ++ do i=1,natms ++ ++ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then ++ ++ rmass(i)=0.d0 ++ weight(i)=0.d0 ++ ++ else ++ ++ rmass(i)=1.d0/weight(i) ++ ++ endif ++ ++ enddo ++ ++c generate starting velocities ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++ if(keyres.eq.0)then ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ elseif(keyres.eq.1.or.keyres.eq.3)then ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ elseif(keyres.eq.2)then ++ ++ if(ngrp.gt.0)then ++ ++ call vscaleg ++ x (idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ elseif(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c print out sample of initial configuration ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'sample of starting configuration',/)") ++ ++ io=(natms+19)/20 ++ if((levcfg.le.1).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") ++ if((levcfg.eq.2).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', ++ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") ++ ++ do i=1,natms,io ++ ++ if(levcfg.le.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) ++ ++ elseif(levcfg.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i), ++ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine systemp ++ ++ subroutine sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine defining global bookkeeping ++c arrays ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost ++ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i ++ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl ++ integer ntghost,natms2 ++ real(8) degfre,degrot ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c neutral group bookkeeping ++ ++ call neutbook(lneut,idnode,natms,nneut) ++ ++c rigid body bookkeeping ++ ++ call quatbook ++ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, ++ x ntfree,degfre,degrot) ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost ++ ++ endif ++ ++c construct list of excluded pair interactions ++ ++ if(lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ call excludeneu(idnode,mxnode,nneut) ++ ++ elseif(.not.lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ ++ if(loglnk)then ++ ++ call exclude_link(idnode,mxnode,ntpmls) ++ ++ else ++ ++ call exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++ endif ++ ++ endif ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost ++ ++ endif ++ ++c construct interaction lists for bonded forces ++ ++ call intlist ++ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c adaptations for solvation and excitation simulations ++ ++ if(lsolva.or.lghost)then ++ ++ natmsf=0 ++ natmsl=0 ++ natm_sol(:)=0 ++ const_sol(:)=numcon(:)*nummols(:) ++ rigid_sol(:)=numgrp(:)*nummols(:) ++ ++ if(ngrp.eq.0)then ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ else ++ ++ ii=1 ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstgot_sol(ii).eq.isol)then ++ ii=ii+1 ++ else ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ ++ endif ++ ++ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost ++ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) ++ ++ endif ++ ++ return ++ end subroutine sysbook ++ ++ subroutine define_units(idnode,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting energy units ++c ++c copyright - daresbury laboratory ++c author - w. smith august 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,idum,i ++ real(8) engunit ++ logical blank ++ ++ blank=.true. ++ ++ do i=6,lenrec ++ if(record(i).ne.' ')blank=.false. ++ enddo ++ ++ if(blank)then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal ', ++ x 'units ')") ++ ++ elseif(findstring('ev',record,idum))then ++ ++ engunit=9648.530821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=electron volts ')") ++ ++ elseif(findstring('kev',record,idum))then ++ ++ engunit=9648530.821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kilo electron volts ')") ++ ++ elseif(findstring('kcal',record,idum))then ++ ++ engunit=418.4d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kcal/ mol ')") ++ ++ elseif(findstring('kj',record,idum))then ++ ++ engunit=1.d2 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kjoule/mol ')") ++ ++ elseif(findstring('k',record,idum))then ++ ++ engunit=boltz ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kelvin ')") ++ ++ elseif(findstring('internal',record,idum))then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal', ++ x ' units ')") ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(a)')record ++ call error(idnode,5) ++ ++ endif ++ ++ return ++ end subroutine define_units ++ ++ subroutine quatbook ++ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, ++ x degfre,degrot) ++ ++c************************************************************************** ++c ++c dl_poly subroutine for setting up bookkeeping for rigid bodies ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c************************************************************************* ++ ++ implicit none ++ ++ logical safe,pass1,pass2,linear,lsolva ++ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree ++ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id ++ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij ++ integer fngrp,lngrp ++ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 ++ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz ++ real(8) rotlim,rrr ++ ++ integer, allocatable :: ind(:,:),lstgot(:) ++ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) ++ ++ data fail/0,0,0,0,0/ ++ ++c allocate working arrays ++ ++ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) ++ allocate (accum(mxungp),stat=fail(5)) ++ do i=1,5 ++ if(fail(i).ne.0)call error(idnode,1790) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ igrp=0 ++ jgrp=0 ++ kgrp=0 ++ isite=0 ++ jr=0 ++ jt=0 ++ safe=.true. ++ degfre=0.d0 ++ degrot=0.d0 ++ ++c rigid body identifier ++ ++ do i=1,natms ++ lstbod(i)=0 ++ enddo ++ ++c number of rigid groups in system ++ ++ ngrp=0 ++ do itmols=1,ntpmls ++ ngrp=ngrp+nummols(itmols)*numgrp(itmols) ++ enddo ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if(igrp.le.mxgrp)then ++ ++ lstgtp(igrp)=listyp(lgrp+kgrp) ++ id=listyp(lgrp+kgrp) ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then ++ ++ jgrp=jgrp+1 ++ ++ do jj=1,numgsit(id) ++ ++ jr=jr+1 ++ jt=jt+1 ++ ++ if(jr.le.mxatms.and.jt.le.mxatms)then ++ ++ lstrgd(jr)=lstgst(id,jj)+isite ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do jj=1,numgsit(id) ++ ++ jt=jt+1 ++ if(jt.le.mxatms)then ++ ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,304) ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kgrp=kgrp+numgrp(itmols) ++ ++ enddo ++ ++ if(ngrp.eq.0)then ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0)then ++ ++ j=j+1 ++ lstfre(j)=i ++ ++ endif ++ ++ enddo ++ ntfree=j ++ ++ else ++ ++c centre of mass of groups ++c assumes group dimensions are smaller than half box width ++ ++ do i=1,natms ++ lstme(i)=0 ++ enddo ++ ++ do id=1,mxungp ++ gmass(id)=0.d0 ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ safe=.false. ++ if(abs(gmass(id)).lt.1.d-10)safe=.true. ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ xxt(jr)=xxx(i)-txx(ig) ++ yyt(jr)=yyy(i)-tyy(ig) ++ zzt(jr)=zzz(i)-tzz(ig) ++ if(safe)gmass(id)=gmass(id)+weight(i) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) ++ ++ enddo ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c global communications ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++c make sure all nodes have same copy of gmass ++ ++ if(mxnode.gt.1)then ++ ++ do id=1,mxungp ++ ++ accum(id)=0.d0 ++ if(gmass(id).gt.0.d0)accum(id)=1.d0 ++ ++ enddo ++ ++ call gdsum(gmass(1),mxungp,buffer(1)) ++ call gdsum(accum(1),mxungp,buffer(1)) ++ ++ do id=1,mxungp ++ ++ dnorm=max(1.d0,accum(id)) ++ gmass(id)=gmass(id)/dnorm ++ ++ enddo ++ ++ endif ++ ++c find a group of each type on this node to ++c find principal axis system of the group type ++ ++ do id=1,mxungp ++ ++ jr=0 ++ ij=0 ++ safe=.false. ++ ++ do while(.not.safe.and.ij.lt.ngrp) ++ ++ ij=ij+1 ++ jr=jr+numgsit(lstgtp(ij)) ++ if(lstgtp(ij).eq.id)safe=.true. ++ ++ enddo ++ ++ if(safe)then ++ ++c rotational inertia accumulator ++ ++ do k=1,3 ++ ++ do kk=1,3 ++ ++ rotinr(k,kk)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ij) ++ yyt(jr)=yyy(i)-gcmy(ij) ++ zzt(jr)=zzz(i)-gcmz(ij) ++ ++ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) ++ ++ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) ++ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) ++ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) ++ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) ++ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) ++ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) ++ ++ enddo ++ ++ rotinr(2,1)=rotinr(1,2) ++ rotinr(3,1)=rotinr(1,3) ++ rotinr(3,2)=rotinr(2,3) ++ ++ call jacobi(rotinr,rot1,3) ++ ++ rot(1)=rot1(1,1) ++ rot(4)=rot1(2,1) ++ rot(7)=rot1(3,1) ++ rot(2)=rot1(1,2) ++ rot(5)=rot1(2,2) ++ rot(8)=rot1(3,2) ++ rot(3)=rot1(1,3) ++ rot(6)=rot1(2,3) ++ rot(9)=rot1(3,3) ++ ++c rotational inertia accumulators ++ ++ rotinx(id,1)=0.d0 ++ rotiny(id,1)=0.d0 ++ rotinz(id,1)=0.d0 ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++c site positions in principal axis system ++ ++ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) ++ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) ++ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) ++ ++c impose rounding ++ ++ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 ++ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 ++ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 ++ ++c rotational inertia tensor of group type ++ ++ rotinx(id,1)=rotinx(id,1)+ ++ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) ++ rotiny(id,1)=rotiny(id,1)+ ++ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) ++ rotinz(id,1)=rotinz(id,1)+ ++ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) ++ ++ enddo ++ ++c set axis system such that: Ixx >=Iyy >=Izz ++ ++ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) ++ ++ if(rotxyz.ge.rotinx(id,1))then ++ ++ if(rotiny(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gyy(id,j) ++ gyy(id,j)=-a1 ++ ++ enddo ++ ++ rotiny(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ elseif(rotinz(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ rotinz(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ endif ++ ++ endif ++ ++ if(rotinz(id,1).gt.rotiny(id,1))then ++ ++ do j=1,numgsit(id) ++ ++ a1=gyy(id,j) ++ gyy(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ a1=rotinz(id,1) ++ rotinz(id,1)=rotiny(id,1) ++ rotiny(id,1)=a1 ++ ++ endif ++ ++c set up principal axis system in terms of site positions ++ ++c test for (near) linear unit ++ ++ ill=0 ++ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) ++ ++ if(rtall.gt.1.d-5)then ++ rotall=rtall ++ else ++ rotall=1.d0 ++ endif ++ ++ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) ++ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall ++ ++ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ ++ if(ill.ge.2)then ++ ++c point particle only ++ ++ ind(id,1)=1 ++ ind(id,2)=1 ++ ind(id,3)=1 ++ ++ do jj=1,9 ++ gaxs(id,jj)=0.d0 ++ enddo ++ ++ elseif(ill.eq.1)then ++ ++c linear molecule ++ ++ ind(id,1)=1 ++ ind(id,2)=2 ++ ind(id,3)=1 ++ ++ aa(1)=gxx(id,1)-gxx(id,2) ++ aa(4)=gyy(id,1)-gyy(id,2) ++ aa(7)=gzz(id,1)-gzz(id,2) ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++ call invert(aa,bb,det) ++ ++ if(abs(det).lt.1.d-5)call error(idnode,306) ++ ++ do j=1,9 ++ gaxs(id,j)=bb(j) ++ enddo ++ ++ elseif(ill.eq.0)then ++ ++c non-linear molecule ++ ++ i1=1 ++ i2=1 ++ i3=1 ++ pass1=.true. ++ dettest=1.d-1 ++ ++ do while(pass1.and.i2.lt.numgsit(id)-1) ++ ++ i2=i2+1 ++ i3=i2 ++ pass2=.true. ++ ++ do while(pass2.and.i3.lt.numgsit(id)) ++ ++ i3=i3+1 ++ ++ aa(1)=gxx(id,i1)-gxx(id,i2) ++ aa(4)=gyy(id,i1)-gyy(id,i2) ++ aa(7)=gzz(id,i1)-gzz(id,i2) ++ aa(2)=gxx(id,i1)-gxx(id,i3) ++ aa(5)=gyy(id,i1)-gyy(id,i3) ++ aa(8)=gzz(id,i1)-gzz(id,i3) ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c invert matrix ++ ++ call invert(aa,bb,det) ++ ++c check on size of determinant - to see if the 3 sites are ++c too close to being linear for safety. ++ ++ pass2=abs(det).lt.dettest ++ ++ enddo ++ ++ pass1=abs(det).lt.dettest ++ ++ enddo ++ ++ if(abs(det).lt.dettest)call error(idnode,306) ++ ++c store indices used ++ ++ ind(id,1)=i1 ++ ind(id,2)=i2 ++ ind(id,3)=i3 ++ ++c store coefficients ++ ++ do j=1,9 ++ ++ gaxs(id,j)=bb(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check that rigid unit does not contain frozen atoms ++ ++ safe=.true. ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ if(lstfrz(i).ne.0)safe=.false. ++ ++ enddo ++ ++ enddo ++ ++c global check on error condition ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,360) ++ ++c quaternions for all rigid groups in system ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ i1=lstrgd(jr+ind(id,1)) ++ i2=lstrgd(jr+ind(id,2)) ++ i3=lstrgd(jr+ind(id,3)) ++ ++ jr=jr+numgsit(id) ++ ++c group basis vectors ++ ++ aa(1)=xxx(i1)-xxx(i2) ++ aa(4)=yyy(i1)-yyy(i2) ++ aa(7)=zzz(i1)-zzz(i2) ++ ++ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) ++ ++ if(rotmin(id).gt.1.d-5)then ++ ++ aa(2)=xxx(i1)-xxx(i3) ++ aa(5)=yyy(i1)-yyy(i3) ++ aa(8)=zzz(i1)-zzz(i3) ++ ++ else ++ ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ endif ++ ++ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c group rotational matrix ++ ++ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) ++ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) ++ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) ++ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) ++ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) ++ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) ++ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) ++ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) ++ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) ++ ++c determine quaternions from rotational matrix ++ ++ aq=rot(1)+rot(5) ++ bq=rot(2)-rot(4) ++ cq=rot(6)-rot(8) ++ dq=rot(2)+rot(4) ++ eq=rot(3)+rot(7) ++ fq=rot(6)+rot(8) ++ gq=rot(3)-rot(7) ++ hq=rot(1)-rot(5) ++ ++ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) ++ ++ if(q0(ig).gt.1.d-4)then ++ ++ q1(ig)=-0.25d0*cq/q0(ig) ++ q2(ig)=0.25d0*gq/q0(ig) ++ q3(ig)=-0.25d0*bq/q0(ig) ++ ++ else ++ ++ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q1(ig).gt.1.d-4)then ++ ++ q2(ig)=0.25d0*dq/q1(ig) ++ q3(ig)=0.25d0*eq/q1(ig) ++ ++ else ++ ++ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q2(ig).gt.1.d-4)then ++ ++ q3(ig)=0.25d0*fq/q2(ig) ++ ++ else ++ ++ q3(ig)=1.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c normalise quaternions ++ ++ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) ++ q0(ig)=rnorm*q0(ig) ++ q1(ig)=rnorm*q1(ig) ++ q2(ig)=rnorm*q2(ig) ++ q3(ig)=rnorm*q3(ig) ++ ++ enddo ++ ++c test for redundant degrees of freedom ++c and ensure rotational inertias are non-zero ++ ++ degrot=0.d0 ++ ++ if(lsolva)then ++ degrot_sol(:)=0.d0 ++ endif ++ ++ do ig=1,ngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ enddo ++ ++c rotational degrees of freedom and rigid body contribution ++c to total degrees of freedom ++ ++ degrot=degrot+dble(ngrp)*3.d0 ++ degfre=degrot+dble(ngrp)*3.d0 ++ ++ if(lsolva)then ++ ++ fngrp=1 ++ lngrp=0 ++ ++ do itmols=1,mxtmls ++ ++ lngrp=lngrp+nummols(itmols)*numgrp(itmols) ++ ++ do ig=fngrp,lngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ enddo ++ ++ fngrp=lngrp+1 ++ ++ enddo ++ ++ endif ++ ++c summarise results ++ ++ if(idnode.eq.0)then ++ ++ if(gmass(1).gt.0.d0)then ++ ++ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' ++ ++ do id=1,mxungp ++ ++ if(gmass(id).gt.0.d0)then ++ ++ write(nrite,'(/,a,i10)')' group of type ',id ++ write(nrite,'(12x,a,f20.10)')' total mass ', ++ x gmass(id) ++ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', ++ x rotinx(id,1),rotiny(id,1),rotinz(id,1) ++ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', ++ x 'b coord','c coord' ++ do j=1,numgsit(id) ++ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), ++ x gyy(id,j),gzz(id,j) ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c find number of unique groups ++ ++ ngp=0 ++ do ig=1,ngrp ++ ngp=max(ngp,lstgtp(ig)) ++ enddo ++ ++c calculate reciprocal of rotational inertias ++ ++ do id=1,ngp ++ ++ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1))*1.d-5 ++ ++ if(rotinx(id,1).lt.rotlim)then ++ rotinx(id,2)=0.d0 ++ else ++ rotinx(id,2)=1.d0/rotinx(id,1) ++ endif ++ ++ if(rotiny(id,1).lt.rotlim)then ++ rotiny(id,2)=0.d0 ++ else ++ rotiny(id,2)=1.d0/rotiny(id,1) ++ endif ++ ++ if(rotinz(id,1).lt.rotlim)then ++ rotinz(id,2)=0.d0 ++ else ++ rotinz(id,2)=1.d0/rotinz(id,1) ++ endif ++ ++ enddo ++ ++c Check of quaternion set up with atomic positions ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c group type ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ ++ txx(jr)=xxx(i)-xxt(i) ++ tyy(jr)=yyy(i)-yyt(i) ++ tzz(jr)=zzz(i)-zzt(i) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,txx,tyy,tzz) ++ ++c set tolerance for testing quaternion setup. ++ ++ rsq=0.d0 ++ tol=1.d-2 ++ ++ do i=1,jr ++ ++ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ if(rrr.gt.tol)then ++ ++ rsq=rrr ++ ++ endif ++ ++ enddo ++ ++c exit if error in set up ++ ++ safe=.true. ++ if(rsq.gt.tol)safe=.false. ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)call error(idnode,310) ++ ++c sort lstgot into ascending order ++ ++ call shellsort(jt,lstgot) ++ ++c check that no site is in more than 1 rigid group ++ ++ i=1 ++ safe=.true. ++ do while(i.lt.jt) ++ ++ i=i+1 ++ linear=.true. ++ do while(linear) ++ ++ linear=.false. ++ ++ if(lstgot(i).eq.lstgot(i-1))then ++ ++ linear=.true. ++ safe=.false. ++ jt=jt-1 ++ ++ do j=i,jt ++ lstgot(j)=lstgot(j+1) ++ enddo ++ ++ endif ++ ++ if(i.ge.jt)linear=.false. ++ ++ enddo ++ ++ enddo ++ ++ if(.not.safe)call error(idnode,320) ++ ++c list of 'free' sites ++ ++ ii=1 ++ jj=0 ++ do i=1,natms ++ ++ if(lstgot(ii).eq.i)then ++ ++ ii=ii+1 ++ ++ else ++ ++ if(lstfrz(i).eq.0)then ++ jj=jj+1 ++ lstfre(jj)=i ++ endif ++ ++ endif ++ ++ enddo ++ ++c number of free sites ++ ++ ntfree=jj ++ ++c list of atoms integrated on this node ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ jr=jr+numgsit(id) ++ ++ enddo ++ ++ do i=1,jr ++ lstme(i)=lstrgd(i) ++ enddo ++ ++c block parameters for free atoms ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do i=ifre1,ifre2 ++ ++ jr=jr+1 ++ lstme(jr)=lstfre(i) ++ ++ enddo ++ ++c exchange quaternion data with other nodes ++ ++ if(mxnode.gt.1)call merge4 ++ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++ if(lsolva)lstgot_sol(:)=lstgot(:) ++ ++c deallocate work arrays ++ ++ deallocate (ind,lstgot,stat=fail(1)) ++ deallocate (txx,tyy,tzz,stat=fail(2)) ++ deallocate (xxt,yyt,zzt,stat=fail(3)) ++ deallocate (gaxs,rotmin,stat=fail(4)) ++ deallocate (accum,stat=fail(5)) ++ ++ return ++ end subroutine quatbook ++ ++ subroutine abort_field_read(kode,idnode,nfield) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting FIELD file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nfield ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(kode.eq.1)then ++ ++c end of field file error exit ++ ++ call error(idnode,52) ++ ++ elseif(kode.eq.2)then ++ ++c unrecognised directive in field file ++ ++ call error(idnode,4) ++ ++ endif ++ ++ return ++ end subroutine abort_field_read ++ ++ subroutine abort_control_read(kode,idnode,nread) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nread ++ ++ if(idnode.eq.0)close (nread) ++ ++ if(kode.eq.1)then ++ ++c end of control file error exit ++ ++ call error(idnode,53) ++ ++ elseif(kode.eq.2)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,0) ++ ++ endif ++ ++ return ++ end subroutine abort_control_read ++ ++ subroutine abort_config_read(kode,idnode,nconf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nconf ++ ++ if(idnode.eq.0)close (nconf) ++ ++ if(kode.eq.1)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,54) ++ ++ elseif(kode.eq.2)then ++ ++c end of config file error exit ++ ++ call error(idnode,55) ++ ++ endif ++ ++ return ++ end subroutine abort_config_read ++ ++ subroutine neutbook(lneut,idnode,natms,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for neutral group bookkeeping ++c ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lneut,safe ++ integer idnode,natms,nneut,i ++ ++ safe=.true. ++ ++c neutral group bookkeeping: sites must be listed consecutively ++ ++ if(lneut)then ++ ++ if(lstneu(1).ne.1)call error(idnode,230) ++ ++ neulst(1)=1 ++ nneut=1 ++ ++ do i=2,natms ++ ++ safe=.false. ++ if(lstneu(i).eq.lstneu(i-1))safe=.true. ++ if(lstneu(i).eq.lstneu(i-1)+1)then ++ ++ safe=.true. ++ nneut=nneut+1 ++ if(nneut.gt.mxneut)call error(idnode,220) ++ neulst(nneut)=i ++ ++ endif ++ ++ if(.not.safe)call error(idnode,230) ++ ++ enddo ++ ++ neulst(nneut+1)=natms+1 ++ ++ endif ++ ++ return ++ ++ end subroutine neutbook ++ ++ subroutine intlist ++ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the interaction lists ++c for the entire simulated system ++c ++c parallel replicated dat version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,safe1,lcnb,lchk,lfail ++ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons ++ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf ++ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle ++ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths ++ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 ++ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum ++ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 ++ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 ++ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle ++ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp ++ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail ++ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail ++ real(8) tol ++ ++ integer, allocatable :: itest(:),index(:),kscons(:) ++ integer, allocatable :: msite(:),mconst(:),listin(:) ++ ++ dimension fail(4) ++ ++ data fail/0,0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) ++ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) ++ allocate (listin(mxatms),stat=fail(3)) ++ allocate (kscons(0:mxproc-1),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1800) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ ibonds=0 ++ jbonds=0 ++ kbonds=0 ++ ipmf=0 ++ jpmf=0 ++ iangle=0 ++ jangle=0 ++ kangle=0 ++ idihed=0 ++ jdihed=0 ++ kdihed=0 ++ iinver=0 ++ jinver=0 ++ kinver=0 ++ iteths=0 ++ jteths=0 ++ kteths=0 ++ ishels=0 ++ jshels=0 ++ kshels=0 ++ safe=.true. ++ safe1=.true. ++ ++c find total number of bonds,pmf constraints,bond constraints, ++c angles,dihedrals,inversions, tethers,core-shells, in system ++c - ignoring frozen atoms ++ ++ ntbon0=0 ++ ntpmf0=0 ++ ntcon0=0 ++ ntang0=0 ++ ntdih0=0 ++ ntinv0=0 ++ nttet0=0 ++ ntshl0=0 ++ nscons=0 ++ ntcons=0 ++ ++ do itmols=1,ntpmls ++ ++ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) ++ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) ++ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) ++ ntang0=ntang0+nummols(itmols)*numang(itmols) ++ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) ++ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) ++ nttet0=nttet0+nummols(itmols)*numteth(itmols) ++ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) ++ ++ enddo ++ ++ isite=0 ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ ++c first and last index of bonds, angles etc for this node ++ ++ ibnd1=(idnode*ntbon0)/mxnode+1 ++ ibnd2=((idnode+1)*ntbon0)/mxnode ++ ++ ipmf1=(idnode*ntpmf0)/mxnode+1 ++ ipmf2=((idnode+1)*ntpmf0)/mxnode ++ ntpmf=ntpmf0 ++ nspmf=ipmf2+1-ipmf1 ++ ++ iang1=(idnode*ntang0)/mxnode+1 ++ iang2=((idnode+1)*ntang0)/mxnode ++ ++ idih1=(idnode*ntdih0)/mxnode+1 ++ idih2=((idnode+1)*ntdih0)/mxnode ++ ++ iinv1=(idnode*ntinv0)/mxnode+1 ++ iinv2=((idnode+1)*ntinv0)/mxnode ++ ++ itet1=(idnode*nttet0)/mxnode+1 ++ itet2=((idnode+1)*nttet0)/mxnode ++ ++ ishl1=(idnode*ntshl0)/mxnode+1 ++ ishl2=((idnode+1)*ntshl0)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct bond constraint list later ++c construct chemical bond interaction list ++ ++ do lbonds=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then ++ ++ jbonds=jbonds+1 ++ if(jbonds.le.mxbond)then ++ ++ listbnd(jbonds,1)=lbonds+kbonds ++ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) ++ x +isite ++ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,31) ++ ++c construct pmf site lists - no exclusions ++ ++ do lpmf=1,numpmf(itmols) ++ ++ ipmf=ipmf+1 ++ ++ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then ++ ++ jpmf=jpmf+1 ++ if(jpmf.le.mspmf)then ++ ++ nnn=npmf(1)+npmf(2) ++ if(nnn.le.mxspmf)then ++ ++ do jj=1,npmf(1)+npmf(2) ++ lstpmf(jj,jpmf)=indpmf(jj)+isite ++ enddo ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ else ++ ++ safe1=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe1) ++ if(.not.safe1)call error(idnode,458) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,460) ++ ++c construct valence angle interaction list ++ ++ do langle=1,numang(itmols) ++ ++ iangle=iangle+1 ++ ++ if(iangle.ge.iang1.and.iangle.le.iang2)then ++ ++ jangle=jangle+1 ++ if(jangle.le.mxangl)then ++ ++ listang(jangle,1)=langle+kangle ++ listang(jangle,2)=lstang(langle+kangle,1) ++ x +isite ++ listang(jangle,3)=lstang(langle+kangle,2) ++ x +isite ++ listang(jangle,4)=lstang(langle+kangle,3) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,51) ++ ++c construct dihedral angle interaction list ++ ++ do ldihed=1,numdih(itmols) ++ ++ idihed=idihed+1 ++ ++ if(idihed.ge.idih1.and.idihed.le.idih2)then ++ ++ jdihed=jdihed+1 ++ if(jdihed.le.mxdihd)then ++ ++ listdih(jdihed,1)=ldihed+kdihed ++ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) ++ x +isite ++ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) ++ x +isite ++ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) ++ x +isite ++ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,61) ++ ++c construct inversion potential list ++ ++ do linver=1,numinv(itmols) ++ ++ iinver=iinver+1 ++ ++ if(iinver.ge.iinv1.and.iinver.le.iinv2)then ++ ++ jinver=jinver+1 ++ if(jinver.le.mxinv)then ++ ++ listinv(jinver,1)=linver+kinver ++ listinv(jinver,2)=lstinv(linver+kinver,1) ++ x +isite ++ listinv(jinver,3)=lstinv(linver+kinver,2) ++ x +isite ++ listinv(jinver,4)=lstinv(linver+kinver,3) ++ x +isite ++ listinv(jinver,5)=lstinv(linver+kinver,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,77) ++ ++c construct tethered atoms interaction list ++ ++ do lteths=1,numteth(itmols) ++ ++ iteths=iteths+1 ++ ++ if(iteths.ge.itet1.and.iteths.le.itet2)then ++ ++ jteths=jteths+1 ++ if(jteths.le.msteth)then ++ ++ listtet(jteths,1)=lteths+kteths ++ listtet(jteths,2)=lsttet(lteths+kteths)+isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,63) ++ ++c construct core-shell list ++ ++ do lshels=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ if(ishels.ge.ishl1.and.ishels.le.ishl2)then ++ ++ jshels=jshels+1 ++ if(jshels.le.mxshl)then ++ ++ listshl(jshels,1)=lshels+kshels ++ listshl(jshels,2)=lstshl(lshels+kshels,1) ++ x +isite ++ listshl(jshels,3)=lstshl(lshels+kshels,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,59) ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kbonds=kbonds+numbonds(itmols) ++ kangle=kangle+numang(itmols) ++ kdihed=kdihed+numdih(itmols) ++ kinver=kinver+numinv(itmols) ++ kteths=kteths+numteth(itmols) ++ kshels=kshels+numshl(itmols) ++ ++ enddo ++ ++c store array counters for bookkeeping ++ ++ ntbond=ibonds ++ ntangl=iangle ++ ntdihd=idihed ++ ntinv=iinver ++ ntteth=iteths ++ ntshl=ishels ++ ++c pass bond constraint information to other nodes ++ ++ if(ntcon0.gt.0)then ++ ++ ntcons=ntcon0 ++ ++c find starting site no. and constraint no. for each molec. type ++ ++ msite(1)=0 ++ mconst(1)=0 ++ ++ do itmols=2,ntpmls ++ ++ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* ++ x nummols(itmols-1) ++ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) ++ ++ enddo ++ ++c sort molecules into ascending order of number of constraints ++ ++ do i=1,ntpmls ++ ++ itest(i)=numcon(i) ++ index(i)=0 ++ ++ enddo ++ ++ call shellsort(ntpmls,itest) ++ ++ do i=1,ntpmls ++ ++ lchk=.true. ++ do j=1,ntpmls ++ ++ if(itest(i).eq.numcon(j))then ++ ++ if(lchk)then ++ index(i)=j ++ lchk=.false. ++ ++ endif ++ ++ do ii=1,i-1 ++ if(index(ii).eq.j)lchk=.true. ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c load balance to within 10% ++ ++ tol=1.0d0+(0.10d0)/2.d0 ++ kcons=(ntcons)/mxnode ++ ntmp=0 ++ ++c find smallest constrained molecule to allocate to a node ++ ++ do i=1,ntpmls ++ ++ if(ntmp.le.mxnode)then ++ ++ if(numcon(index(i)).gt.0)then ++ ntmp=ntmp+nummols(index(i)) ++ klo=max(0,kcons-numcon(index(i))/2) ++ khi=klo+numcon(index(i))+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++c reset hi/lo limits if molecules contain too many constraints ++ ++ if(dble(khi)/dble(max(1,klo)).gt.tol)then ++ klo=nint(dble(kcons)/tol) ++ khi=nint(dble(kcons)*tol)+1 ++ endif ++ ++c store lo value for later ++ ++ klo0=klo ++ ++c begin assignment of constraints ---------------------------------- ++ ++ ifail=-1 ++ lfail=.true. ++ do while(lfail) ++ ++ ifail=ifail+1 ++ ++ if(ifail.gt.ntpmls)then ++ call error(idnode,432) ++ endif ++ ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ lconst=0 ++ ++c zero running totals of constraints on each processor ++ ++ do id=0,mxnode-1 ++ kscons(id)=0 ++ enddo ++ ++ iloop=0 ++ lfail=.false. ++ iconst=0 ++ jconst=0 ++ nnode=0 ++ ++c assign difficult molecules in blocks ++ ++ if(ifail.gt.0)then ++ ++ nfail=0 ++ do i=1,ifail ++ ++ ii=ntpmls+1-i ++ nfail=nfail+nummols(index(ii))*numcon(index(ii)) ++ ++ enddo ++ ++c decide on number of processors to split over ++ ++ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) ++ nnode=max(2,nnode) ++ nnode=min(nnode,mxnode) ++ ++c assign to processors 0..nnode-1 ++ ++ do id=0,nnode-1 ++ ++ nscons0=(id*nfail)/nnode+1 ++ nscons1=((id+1)*nfail)/nnode ++ ++ kscons(id)=nscons1+1-nscons0 ++ ++ enddo ++ ++c this processors block ++ ++ nscons0=(idnode*nfail)/nnode+1 ++ nscons1=((idnode+1)*nfail)/nnode ++ ++c assign in blocks ++ ++ do itmols=ntpmls,ntpmls-ifail+1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ ++c construct bond constraint list ++ ++ do lconst=1,numcon(ii) ++ ++ iconst=iconst+1 ++ ++ if(iconst.ge.nscons0.and.iconst.le.nscons1)then ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c assign non-problematic molecules ++ ++ jdnode=mod(nnode+1,mxnode) ++ ++ do itmols=ntpmls-ifail,1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ itry=0 ++ lchk=.true. ++ do while(lchk) ++ ++ if(kscons(jdnode)+icon.le.klo)then ++ ++ if(jdnode.ne.idnode)then ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ else ++ ++c construct bond constraint list ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ do lconst=1,numcon(ii) ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ ++ endif ++ ++ else ++ ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.true. ++ itry=itry+1 ++ ++ endif ++ ++ if(lchk.and.itry.gt.mxnode)then ++ ++ klo=kcons ++ kcons=khi ++ itry=0 ++ iloop=iloop+1 ++ ++ endif ++ ++c split molecule across nodes if have to ++ ++ if(iloop.gt.3)then ++ lfail=.true. ++ kcons=ntcons/mxnode ++ klo=klo0 ++ lchk=.false. ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c check no node has less than minimum number ++ ++ do id=0,mxnode-1 ++ if(kscons(id).lt.klo0)then ++ lfail=.true. ++ endif ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(mxnode.gt.1)call gimax(jconst,1,idum) ++ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') ++ x 'Number of constraints found ',jconst,'Max allowed ',mxcons ++ ++ call error(idnode,41) ++ ++ endif ++ ++ nscons=kscons(idnode) ++ ++ call passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++ endif ++ ++ if(npmf(1).gt.0)then ++ ++ call passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++ endif ++ ++c pass rigid body data ++ ++ lcnb=.false. ++ if(ntcons.gt.0.and.ngrp.gt.0)then ++ ++ call passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, ++ x numgsit) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(itest,index,msite,stat=fail(1)) ++ deallocate(mconst,kscons,listin,stat=fail(2)) ++ ++ return ++ end subroutine intlist ++ ++ subroutine ensemble_selection ++ x (directive,lens,kill,idnode,keyens,mode,taut,taup) ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ensemble and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical kill,lens ++ integer keyens,idnode,idum,mode ++ real(8) taut,taup ++ ++ if(findstring('nve',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'microcanonical ensemble')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('nvt',directive,idum))then ++ ++ if(findstring('evans',directive,idum))then ++ ++ keyens=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Evans Gaussian temperature constraints', ++ x ' in use')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('ber',directive,idum))then ++ ++ keyens=2 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen thermostat', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=3 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('npt',directive,idum))then ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=4 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen isotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=5 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('nst',directive,idum))then ++ ++ mode=0 ++ if(findstring('block',directive,idum))mode=1 ++ if(findstring('surf',directive,idum))mode=2 ++ if(findstring('slab',directive,idum))mode=3 ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=6 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen anisotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=7 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ if(mode.eq.0)then ++ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") ++ elseif(mode.eq.1)then ++ write(nrite, ++ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") ++ elseif(mode.eq.2)then ++ write(nrite, ++ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") ++ elseif(mode.eq.3)then ++ write(nrite, ++ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") ++ endif ++ ++ endif ++ ++ elseif(findstring('pmf',directive,idum))then ++ ++ keyens=8 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'potential of mean force calculation (NVE)')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ call error(idnode,-436) ++ kill=.true. ++ ++ endif ++ ++ return ++ end subroutine ensemble_selection ++ ++ subroutine neb_option ++ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, ++ x opttol,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for NEB option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical lneb,lminopt,endneb,safe ++ integer numneb,idnode,keytol,i,idum ++ real(8) sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ lminopt=.true. ++ lneb=.true. ++ endneb=.false. ++ numneb=intstr(directive,lenrec,idum) ++ if(numneb.eq.0)numneb=1 ++ numneb=min(maxneb,numneb) ++ ++ hyp_units=1.d0 ++ do while(.not.endneb) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endneb',directive,idum))then ++ endneb=.true. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('basin_1',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_1(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('basin_2',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_2(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'NEB calculation controls')") ++ write(nrite,"(/,1x,'identity of basin 1 ', ++ x 10i10)")(bsn_1(i),i=1,numneb) ++ write(nrite,"(1x,'identity of basin 2 ', ++ x 10i10)")(bsn_2(i),i=1,numneb) ++ write(nrite, ++ x "(1x,'NEB spring constant ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x sprneb,opttol,cunit ++ ++ call print_optim(keytol) ++ ++ endif ++ ++c units conversion ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine neb_option ++ ++ subroutine bpd_option ++ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, ++ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for bias potential ++c dynamics option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 directive(lenrec) ++ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo ++ integer keybpd,idnode,nblock,ntrack,keytol,idum ++ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(ltad)call error(idnode,2355) ++ lminopt=.true. ++ lbpd=.true. ++ endbpd=.false. ++ cunit=" dl_poly" ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'bias potential dynamics controls')") ++ ++ if(findstring('dyn',directive,idum))then ++ ++ keybpd=1 ++ hyp_units=energy_unit() ++ ebias=dblstr(directive,lenrec,idum) ++ vmin=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ if(idnode.eq.0)write(nrite,"( ++ x 1x,'dynamics option selected ', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4 ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,cunit ++ ++ elseif(findstring('path',directive,idum))then ++ ++ keybpd=2 ++ nebgo=.true. ++ hyp_units=1.d0 ++ do while(.not.endbpd) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endbpd',directive,idum))then ++ endbpd=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('noneb',directive,idum))then ++ nebgo=.false. ++ elseif(findstring('target',directive,idum))then ++ call getword(seek,directive,8,lenrec) ++ call getword(seek,directive,8,lenrec) ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('ebias',directive,idum))then ++ ebias=dblstr(directive,lenrec,idum) ++ elseif(findstring('vmin',directive,idum))then ++ vmin=dblstr(directive,lenrec,idum) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"( ++ x 1x,'dynamics with path analysis selected', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4, ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'configuration catch radius (A)',f10.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'atom type to be tracked ',2x,a8, ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit ++ if(nebgo)write(nrite, ++ x "(1x,'NEB spring constant ',e12.4)")sprneb ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ endif ++ ++ return ++ end subroutine bpd_option ++ ++ subroutine tad_option ++ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, ++ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for TAD option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe ++ integer idnode,nblock,ntrack,blkout,keytol,idum ++ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(lbpd)call error(idnode,2355) ++ lminopt=.true. ++ ltad=.true. ++ endtad=.false. ++ hyp_units=1.d0 ++ ++ do while(.not.endtad) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endtad',directive,idum))then ++ endtad=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('all',directive,idum))then ++ tadall=.true. ++ if(findstring('false',directive,idum))tadall=.false. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('blackout',directive,idum))then ++ blkout=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('deltad',directive,idum))then ++ deltad=dblstr(directive,lenrec,idum) ++ elseif(findstring('low_temp',directive,idum))then ++ tlow=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'TAD dynamics controls' ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'steps in blackout periods ',i10, ++ x /,1x,'configuration catch radius ',1p,e12.4, ++ x /,1x,'NEB spring constant ',e12.4, ++ x /,1x,'stopping parameter ',e12.4, ++ x /,1x,'target low temperature ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x nblock,ntrack,blkout,catchrad,sprneb,deltad, ++ x tlow,opttol,cunit ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ if(tadall)write(nrite, ++ x "(1x,'option for all basins analysis selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine tad_option ++ ++ subroutine metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for metadynamics option ++c copyright - daresbury laboratory ++c author - w. smith jan 2011 ++c ++c note: default values are set in metafreeze_module ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe ++ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int ++ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt ++ ++ lmetadyn=.true. ++ endmet=.false. ++ ++ do while(.not.endmet) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endmet',directive,idum))then ++ endmet=.true. ++ elseif(findstring('ncolvar',directive,idum))then ++ ncolvar=intstr(directive,lenrec,idum) ++ elseif(findstring('lstein',directive,idum))then ++ lstein=.true. ++ if(findstring('false',directive,idum))lstein=.false. ++ elseif(findstring('ltet',directive,idum))then ++ ltet=.true. ++ if(findstring('false',directive,idum))ltet=.false. ++ elseif(findstring('lglobpe',directive,idum))then ++ lglobpe=.true. ++ if(findstring('false',directive,idum))lglobpe=.false. ++ elseif(findstring('llocpe',directive,idum))then ++ llocpe=.true. ++ if(findstring('false',directive,idum))llocpe=.false. ++ elseif(findstring('globpe_scale',directive,idum))then ++ globpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('locpe_scale',directive,idum))then ++ locpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('nq4',directive,idum))then ++ nq4=intstr(directive,lenrec,idum) ++ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('nq6',directive,idum))then ++ nq6=intstr(directive,lenrec,idum) ++ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('ntet',directive,idum))then ++ ntet=intstr(directive,lenrec,idum) ++ elseif(findstring('meta_step_int',directive,idum))then ++ meta_step_int=intstr(directive,lenrec,idum) ++ elseif(findstring('ref_w_aug',directive,idum))then ++ ref_W_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('h_aug',directive,idum))then ++ h_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('hkey',directive,idum))then ++ hkey=intstr(directive,lenrec,idum) ++ elseif(findstring('wt_dt',directive,idum))then ++ wt_dt=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'metadynamics controls' ++ x /,1x,'total number of collective variables',i10, ++ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, ++ x /,1x,'tetrahedral parameters option (zeta)',l10, ++ x /,1x,'global potential parameter option ',l10, ++ x /,1x,'local potential parameter option ',l10, ++ x /,1x,'global potential param. scale factor',e12.4, ++ x /,1x,'local potential param. scale factor ',e12.4)") ++ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale ++ ++ write(nrite, ++ x "( 1x,'number of Q4 atom pair types ',i10, ++ x /,1x,'number of Q6 atom pair types ',i10, ++ x /,1x,'number of zeta atom triplet types ',i10)") ++ x nq4,nq6,ntet ++ ++ write(nrite, ++ x "( 1x,'gaussian deposition interval ',i10, ++ x /,1x,'reference gaussian height ',e12.4, ++ x /,1x,'gaussian width parameter ',e12.4, ++ x /,1x,'height control key ',i10, ++ x /,1x,'well-tempered control parameter ',e12.4)") ++ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt ++ ++ endif ++ ++ return ++ end subroutine metadyn_option ++ ++ subroutine ewald_selection ++ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, ++ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ewald method and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lhke,lspme,lewald,lcut,lforc,kill,safe ++ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum ++ integer kmaxpow2 ++ real(8) alpha,rcut,eps,tol,fac,tol1 ++ ++ lhke=findstring('hke',directive,idum) ++ lspme=findstring('spme',directive,idum) ++ lewald=findstring('ewald',directive,idum) ++ if(lewald)keyfce=2 ++ if(lspme)keyfce=12 ++ if(lhke)keyfce=14 ++ if(idnode.eq.0)open(nconf,file='CONFIG') ++ call getrec(safe,idnode,nconf) ++ call getrec(safe,idnode,nconf) ++ imcon=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then ++ ++ call error(idnode,-180) ++ kill=.true. ++ ++ endif ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps ++ ++ if(lhke)then ++ ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ if(nlatt.eq.0)nlatt=1 ++ if(nhko.eq.0)nhko=1 ++ ++ endif ++ ++ if(.not.lcut)then ++ call error(idnode,-433) ++ kill=.true. ++ else ++ ++c retreive cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(directive,lenrec,idum) ++ kmax1=intstr(directive,lenrec,idum) ++ kmax2=intstr(directive,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ ++ else ++ ++ kmax3=intstr(directive,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c if spme double kmax and set to next power of 2, with current upper ++c limit of 512. ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax1=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax2=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax3=2 * kmaxpow2 ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ close(nconf) ++ ++ if(lspme)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : SPME ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1/2,kmax2/2,kmax3/2 ++ ++ elseif(lhke)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 ',2i5)") ++ x alpha,kmax1,kmax2 ++ ++ write(nrite, ++ x "(1x,'HKE expansion order ',7x,i10, ++ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt ++ ++ else ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1,kmax2,kmax3 ++ ++ endif ++ ++ endif ++ ++ if(lspme)then ++ ++c Initialize fft tables ++ ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (fplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++CFFTW ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (bplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++ ++CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CSGIC x dummy,1,1,ffttable,dummy,dummy ) ++ ++CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CCRAY x dummy,1,1,ffttable,dummy,dummy ) ++ ++ endif ++ ++ if(lspme)then ++ ++ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ elseif(lhke)then ++ ++ if(kmax2.gt.kmaxb)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ else ++ ++ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ lforc=.true. ++ ++ return ++ end subroutine ewald_selection ++ ++ subroutine print_optim(keytol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing the optimisation option ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer keytol ++ ++ if(keytol.eq.0)then ++ write(nrite, ++ x "(1x,'convergence to minimum force selected')") ++ elseif(keytol.eq.1)then ++ write(nrite, ++ x "(1x,'convergence to minimum energy selected')") ++ else ++ write(nrite, ++ x "(1x,'convergence to minimum position selected')") ++ endif ++ ++ return ++ end subroutine print_optim ++ ++ function energy_unit() ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for assigning energy conversion factors ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idum ++ real(8) energy_unit ++ ++ energy_unit=1.d0 ++ if(findstring('ev',record,idum))then ++ energy_unit=9648.530821d0 ++ elseif(findstring('kev',record,idum))then ++ energy_unit=9648530.821d0 ++ elseif(findstring('kcal',record,idum))then ++ energy_unit=418.4d0 ++ elseif(findstring('kj',record,idum))then ++ energy_unit=1.d2 ++ elseif(findstring('k',record,idum))then ++ energy_unit=boltz ++ endif ++ ++ return ++ end function energy_unit ++ ++ subroutine solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for solvation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,endsol,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ endsol=.false. ++ ++ nsolva=intstr(directive,lenrec,idum) ++ isolva=intstr(directive,lenrec,idum) ++ ++ if(nsolva.eq.0.and.isolva.eq.0)then ++ ++ do while(.not.endsol) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endsol',directive,idum))then ++ endsol=.true. ++ elseif(findstring('enddec',directive,idum))then ++ endsol=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=max(intstr(directive,lenrec,idum),1) ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'solvation calculation selected', ++ x /,1x,'start of solvation calculation ',i10, ++ x /,1x,'solvation calculation interval ',i10)") ++ x nsolva,isolva ++ ++ endif ++ ++ return ++ end subroutine solvation_option ++ ++ subroutine free_energy_option(directive,lfree,lfrmas,idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for free energy option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lfree,lfrmas,endfre,safe ++ integer idnode,idum ++ ++ mfree=1 ++ kfree=1 ++ lfree=.true. ++ lfrmas=.false. ++ endfre=.false. ++ ++ do while(.not.endfre) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endfre',directive,idum))then ++ endfre=.true. ++ elseif(findstring('start',directive,idum))then ++ nfrn=intstr(directive,lenrec,idum) ++ elseif(findstring('interval',directive,idum))then ++ ifrn=intstr(directive,lenrec,idum) ++ elseif(findstring('lambda',directive,idum))then ++ pfree=dblstr(directive,lenrec,idum) ++ elseif(findstring('mix',directive,idum))then ++ mfree=intstr(directive,lenrec,idum) ++ elseif(findstring('expo',directive,idum))then ++ kfree=intstr(directive,lenrec,idum) ++ elseif(findstring('reset_mass',directive,idum))then ++ lfrmas=.true. ++ if(findstring('false',directive,idum))lfrmas=.false. ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(mfree.eq.1)kfree=1 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'free energy option selected', ++ x /,1x,'start of free energy calculation ',i10, ++ x /,1x,'sampling interval ',i10, ++ x /,1x,'free energy parameter (lambda) ',f10.3, ++ x /,1x,'mixing rule selected ',i10, ++ x /,1x,'mixing rule exponent ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10, ++ x /,1x,'mass scaling option ',l10)") ++ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas ++ ++ endif ++ ++c define free energy scaling parameters ++ ++ call freegen() ++ ++ return ++ end subroutine free_energy_option ++ ++ subroutine excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for excitation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lexcite,lghost,endexc,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lexcite=.true. ++ endexc=.false. ++ ++ do while(.not.endexc) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endexc',directive,idum))then ++ endexc=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'excitation option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,ind_fre ++ ++ endif ++ ++ return ++ end subroutine excitation_option ++ ++ subroutine switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for switching option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lswitch,lghost,endswi,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lswitch=.true. ++ endswi=.false. ++ niswitch=0 ++ ++ do while(.not.endswi) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endswi',directive,idum))then ++ endswi=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('period',directive,idum))then ++ niswitch=max(intstr(directive,lenrec,idum),2) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(niswitch.eq.0)niswitch=nsolva ++ nswitch=nsolva ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'switching option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'switching period ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,niswitch,ind_fre ++ ++ endif ++ ++ return ++ end subroutine switching_option ++ ++ end module define_system_module ++ +diff -urN dl_class_1.9.orig/srcmod/define_system_module.f.preplumed dl_class_1.9/srcmod/define_system_module.f.preplumed +--- dl_class_1.9.orig/srcmod/define_system_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/define_system_module.f.preplumed 2011-10-17 17:32:15.000000000 +0200 +@@ -0,0 +1,5994 @@ ++ module define_system_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007, solvation, free energy ++c and excitation ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use dihedral_module ++ use ensemble_tools_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use inversion_module ++ use metafreeze_module ++ use metal_module ++ use parse_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use vdw_module ++ ++ contains ++ ++ subroutine simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the simulation control ++c parameters ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992. ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c modified ++c author - t.forester may 1993 ++c amended - t.forester sept 1994 - dl_poly_1.1 ++c amended - t.forester nov 1994 - macro version ++c amended - w.smith dec 1994 - t3d adaptation ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 hms ++ character*1 directive(lenrec) ++ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc ++ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe ++ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill ++ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau ++ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo ++ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn ++ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit ++ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack ++ integer idum,imcon,keyver,keytol,nblock,blkout,numgau ++ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol ++ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units ++ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin ++ real(8) prntim ++ ++CSGIC real(8) dummy ++CCRAY real(8) dummy ++CFFTWc FFTW instruction codes ++CFFTW ++CFFTW integer FFTW_FORWARD,FFTW_BACKWARD ++CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) ++CFFTW ++CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL ++CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) ++CFFTW ++CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE ++CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) ++CFFTW ++CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM ++CFFTW parameter (FFTW_OUT_OF_PLACE=0) ++CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) ++CFFTW ++CFFTW integer FFTW_THREADSAFE ++CFFTW parameter (FFTW_THREADSAFE=128) ++CFFTW ++ ++c intitialize system variables: temperature,pressure,ensemble key ++c force key, cutoff, primary cutoff, verlet shell width, relative ++c dielectric constant,timestep,temperature scaling flag, ++c temp scaling interval ++ ++ mode=0 ++ nhko=0 ++ nlatt=0 ++ nsteql=0 ++ nstrun=0 ++ minstp=0 ++ keybpd=0 ++ keyres=0 ++ keyens=0 ++ keyver=0 ++ taut=0.d0 ++ nstbts=0 ++ nstbgr=0 ++ nsbzdn=0 ++ nstbpo=100 ++ nstack=mxstak ++ intsta=0 ++ nstraj=0 ++ istraj=1 ++ keytrj=0 ++ numgau=1 ++ alpha=0.d0 ++ kmax1=0 ++ kmax2=0 ++ kmax3=0 ++ nospl=min(8,mxspl) ++ isolva=1 ++ nsolva=0 ++ niswitch=0 ++ nswitch=0 ++ nofic=1000 ++ ++ fmax=1000.d0 ++ keyfce=0 ++ multt=1 ++ keytol=0 ++ tstep=0.d0 ++ temp=0.d0 ++ press=0.d0 ++ rcut=0.d0 ++ rprim=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ epsq=1.d0 ++ rlxtol=1.d0 ++ opttol=1.d0 ++ tolnce=1.d-8 ++ quattol=1.d-8 ++ timjob=0.d0 ++ timcls=0.d0 ++ delrdf=0.d0 ++ delzdn=0.d0 ++ zlen=0.d0 ++ ehit=0.d0 ++ xhit=0.d0 ++ yhit=0.d0 ++ zhit=0.d0 ++ vmin=0.d0 ++ ebias=0.d0 ++ catchrad=0.d0 ++ pfree=0.d0 ++ ++ lhit=.false. ++ lbpd=.false. ++ ltad=.false. ++ lneb=.false. ++ loop=.true. ++ lnfic=.false. ++ lpsoc=.false. ++ lzero=.false. ++ ltscal=.false. ++ lewald=.false. ++ lspme=.false. ++ lhke=.false. ++ lgofr=.false. ++ lpgr=.false. ++ lzeql=.true. ++ loptim=.false. ++ lminim=.false. ++ lminopt=.false. ++ ltraj=.false. ++ lfcap=.false. ++ ltemp=.false. ++ lstep=.false. ++ lcut=.false. ++ ldelr=.false. ++ lprim=.false. ++ lforc=.false. ++ lens=.false. ++ lvdw=.false. ++ lrvdw=.false. ++ lpres=.false. ++ kill=.false. ++ lnsq=.false. ++ lzden=.false. ++ nolink=.false. ++ newgau=.false. ++ prechk=.false. ++ tadall=.false. ++ lsolva=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lexcite=.false. ++ lswitch=.false. ++ lghost=.false. ++ nebgo=.true. ++ seek='all ' ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open(nread,file='CONTROL',status='old') ++ ++c read job title ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++ call copystring(record,sysname,80) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, ++ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") ++ x sysname ++ ++ endif ++ ++c read and process directives from CONTROL file ++ ++ do while(loop) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ ++c convert to lowercase and strip out leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('redirect',directive,idum))then ++ ++c ignore this option in this context ++ cycle ++ ++ elseif(findstring('steps',directive,idum))then ++ ++c number of timesteps ++ ++ nstrun=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun ++ ++ elseif(findstring('integ',directive,idum))then ++ ++c choice of integration algorithm ++ ++ if(findstring('leapfrog',directive,idum))then ++ ++ keyver=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'leapfrog verlet integration selected')") ++ ++ elseif(findstring('velocity',directive,idum))then ++ ++ keyver=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'velocity verlet integration selected')") ++ ++ endif ++ ++ elseif(findstring('no fic',directive,idum))then ++ ++c cancel possible "flying ice cube" in Berendsen thermostats ++ ++ lnfic=.true. ++ nofic=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('shells',directive,idum).and. ++ x findstring('on',directive,idum).and. ++ x findstring('cores',directive,idum))then ++ ++c put shells on cores at start - shell model only (else null) ++ ++ lpsoc=.true. ++ ++ elseif(findstring('densvar',directive,idum))then ++ ++c specify allowed density variation ++ ++ densvar=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") ++ x densvar ++ ++ elseif(findstring('no link',directive,idum))then ++ ++c switch off link cell option ++ ++ nolink=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'link cells option deactivated')") ++ ++ elseif(findstring('equil',directive,idum))then ++ ++c number of equilibration timesteps ++ ++ nsteql=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration period ',3x,i10)")nsteql ++ ++ elseif(findstring('restart',directive,idum))then ++ ++c restart control ++ ++ if(findstring('noscale',directive,idum))then ++ ++ keyres=3 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'noscale restart requested')") ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ keyres=2 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'scaled restart requested')") ++ ++ else ++ ++ keyres=1 ++ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") ++ ++ endif ++ ++ elseif(findstring('ensemble',directive,idum))then ++ ++c ensemble selection ++ ++ call ensemble_selection(directive,lens,kill,idnode,keyens, ++ x mode,taut,taup) ++ ++ elseif(findstring('regauss',directive,idum))then ++ ++c re-initialise velocities option (regaussing) ++ ++ newgau=.true. ++ numgau=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'regaussing option activated', ++ x /,1x,'regaussing interval set to ',3x,i10)") ++ x numgau ++ ++ elseif(findstring('scale',directive,idum))then ++ ++ nstbts=intstr(directive,lenrec,idum) ++ if(nstbts.gt.0)then ++ ltscal=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'temperature scaling on' ++ x /,1x,'temperature scaling interval',3x,i10)") ++ x nstbts ++ ++ endif ++ ++ elseif(findstring('rdf',directive,idum))then ++ ++ if(findstring('print',directive,idum))then ++ ++ lpgr=.true. ++ lpgr=(lgofr.and.lpgr) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'g(r) printing option on ')") ++ ++ else ++ ++ lgofr=.true. ++ nstbgr=intstr(directive,lenrec,idum) ++ delrdf=dblstr(directive,lenrec,idum) ++ if(nstbgr.eq.0)nstbgr=10 ++ if(delrdf.lt.1.d-8)delrdf=0.05d0 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'radial distribution functions on ', ++ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr ++ write(nrite, ++ x "(1x,'g(r) bin width ',3x,1p,e12.4)") ++ x delrdf ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('zden',directive,idum))then ++ ++ lzden=.true. ++ nsbzdn=intstr(directive,lenrec,idum) ++ delzdn=dblstr(directive,lenrec,idum) ++ zlen=dblstr(directive,lenrec,idum) ++ if(nsbzdn.eq.0)nsbzdn=10 ++ if(delzdn.lt.1.d-8)then ++ zlen=0.1d0*dble(mxzdn) ++ delzdn=0.1d0 ++ elseif(zlen.lt.1.d-8)then ++ zlen=delzdn*dble(mxzdn) ++ endif ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'Z density profile requested', ++ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn ++ write(nrite, ++ x "(1x,'zdensity bin width ',3x,1p,e12.4)") ++ x delzdn ++ write(nrite, ++ x "(1x,'zdensity range ',3x,1p,e12.4)") ++ x zlen ++ ++ endif ++ ++ elseif(findstring('collect',directive,idum))then ++ ++ lzeql=.false. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'equilibration included in overall averages')") ++ ++ elseif(findstring('neb',directive,idum))then ++ ++c activate nudged elastic band option ++ ++ call neb_option(directive,lneb,lminopt,idnode, ++ x numneb,keytol,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('impact',directive,idum))then ++ ++c activate the impact option ++ ++ if(lhit)call error(idnode,516) ++ lhit=.true. ++ khit=intstr(directive,lenrec,idum) ++ nhit=intstr(directive,lenrec,idum) ++ ehit=dblstr(directive,lenrec,idum) ++ xhit=dblstr(directive,lenrec,idum) ++ yhit=dblstr(directive,lenrec,idum) ++ zhit=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'impact option selected')") ++ write(nrite,"( ++ x /,1x,'identity of impact atom ',i10, ++ x /,1x,'time step of impact ',i10, ++ x /,1x,'impact recoil energy (keV) ',1p,e12.4, ++ x /,1x,'impact direction (x component) ',1p,e12.4, ++ x /,1x,'impact direction (y component) ',1p,e12.4, ++ x /,1x,'impact direction (z component) ',1p,e12.4)") ++ x khit,nhit,ehit,xhit,yhit,zhit ++ ++ endif ++ ++c convert impact energy from keV to internal units ++ ++ ehit=ehit*9648530.821d0 ++ ++ elseif(findstring('bpd',directive,idum))then ++ ++c activate the BPD option ++ ++ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, ++ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, ++ x catchrad,sprneb,opttol,hyp_units) ++ ++ elseif(findstring('tad',directive,idum))then ++ ++c activate temperature accelerated dynamics option ++ ++ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, ++ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, ++ x deltad,opttol,hyp_units) ++ ++ elseif(findstring('minim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ minstp=intstr(directive,lenrec,idum) ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ lminim=.true. ++ loptim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'minimisation programme requested')") ++ write(nrite, ++ x "(1x,'structure minimisation interval ', ++ x 3x,i10)")minstp ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'structure minimisation tolerance', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('optim',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ if(findstring('forc',directive,idum))keytol=0 ++ if(findstring('ener',directive,idum))keytol=1 ++ if(findstring('posi',directive,idum))keytol=2 ++ hyp_units=energy_unit() ++ opttol=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ loptim=.true. ++ lminim=.false. ++ lzero=.false. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'structure optimisation requested')") ++ call print_optim(keytol) ++ write(nrite, ++ x "(1x,'tolerance for structure optimisation ', ++ x 3x,1p,e12.4,1x,a8)")opttol,cunit ++ ++ endif ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ elseif(findstring('zero',directive,idum))then ++ ++ if(lminopt)call error(idnode,225) ++ temp=1.d0 ++ lzero=.true. ++ loptim=.false. ++ lminim=.false. ++ ltemp=.true. ++ ltscal=.false. ++ lminopt=.true. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'zero K optimisation requested')") ++ write(nrite, ++ x "(' temperature reset to',1p,e12.4)")1.d0 ++ ++ endif ++ ++ else if(findstring('solva',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ else if(findstring('decomp',directive,idum))then ++ ++ call solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++ elseif(findstring('metafreeze',directive,idum).or. ++ x findstring('metadyn',directive,idum))then ++ ++c activate metadynamics option - d. quigley ++ ++ call metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++ else if(findstring('free',directive,idum))then ++ ++ call free_energy_option(directive,lfree,lfrmas,idnode) ++ ++ else if(findstring('excite',directive,idum))then ++ ++ call excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++ else if(findstring('switch',directive,idum))then ++ ++ call switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++ elseif(findstring('print',directive,idum))then ++ ++ nstbpo=intstr(directive,lenrec,idum) ++ nstbpo=max(nstbpo,1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data printing interval ',3x,i10)")nstbpo ++ ++ elseif(findstring('stack',directive,idum))then ++ ++ nstack=intstr(directive,lenrec,idum) ++ ++c reset stack limit if too large ++ ++ nstack=min(nstack,mxstak) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'data stacking interval ',3x,i10)")nstack ++ ++ elseif(findstring('stats',directive,idum))then ++ ++ intsta=intstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'statistics file interval ',3x,i10)")intsta ++ ++ elseif(findstring('traj',directive,idum))then ++ ++ ltraj=.true. ++ nstraj=intstr(directive,lenrec,idum) ++ istraj=max(intstr(directive,lenrec,idum),1) ++ keytrj=intstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'trajectory file option on ', ++ x /,1x,'trajectory file start ',3x,i10, ++ x /,1x,'trajectory file interval ',3x,i10 ++ x /,1x,'trajectory file info key ',3x,i10)") ++ x nstraj,istraj,keytrj ++ ++ elseif(findstring('ewald',directive,idum).or. ++ x findstring('spme',directive,idum).or. ++ x findstring('hke',directive,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ call ewald_selection(directive,lhke,lspme,lewald,lcut, ++ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, ++ x kmax3,alpha,rcut) ++ ++ elseif(findstring('distan',directive,idum))then ++ ++ keyfce=4 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('coul',directive,idum))then ++ ++ keyfce=6 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Coulombic potential')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('shift',directive,idum))then ++ ++ keyfce=8 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('reaction',directive,idum))then ++ ++ keyfce=10 ++ alpha=0.d0 ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'Electrostatics : reaction field')") ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(.not.lcut)then ++ call error(idnode,-435) ++ kill=.true. ++ else ++ ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(1x,'Specified precision parameter : ',1p, ++ x e12.4)")eps ++ write(nrite, ++ x "(1x,'Calculated damping parameter: ',1p, ++ x e12.4)")alpha ++ ++ endif ++ ++ endif ++ ++ elseif(findstring('damp',directive,idum))then ++ ++ alpha=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(1x,'Specified damping parameter : ',1p,e12.4)") ++ x alpha ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('cap',directive,idum))then ++ ++ lfcap=.true. ++ fm=dblstr(directive,lenrec,idum) ++ if(fm.gt.0.d0)fmax=fm ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax ++ ++ elseif(findstring('no vdw',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'short-range potential terms off')") ++ lvdw=.true. ++ ++ elseif(findstring('no elec',directive,idum))then ++ ++ keyfce=0 ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'electrostatic potential terms off')") ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ ++ lforc=.true. ++ ++ elseif(findstring('mult',directive,idum))then ++ ++ multt=max(intstr(directive,lenrec,idum),1) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'multiple timestep interval ',3x,i10)")multt ++ ++ elseif(findstring('timestep',directive,idum))then ++ ++ lstep=.true. ++ tstep=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep ++ ++ elseif(findstring('temp',directive,idum))then ++ ++ ltemp=.true. ++ temp=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp ++ ++ elseif(findstring('pres',directive,idum))then ++ ++ press=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press ++ ++c convert from katm to internal units of pressure ++ ++ press=press/prsunt ++ lpres=.true. ++ ++ elseif(findstring('prim',directive,idum))then ++ ++c primary cutoff ++ ++ lprim=.true. ++ rprim=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim ++ ++ elseif(findstring('rvdw',directive,idum))then ++ ++c cutoff for short range potentials ++ ++ rvdw=dblstr(directive,lenrec,idum) ++ lrvdw=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw ++ ++ elseif(findstring('delr',directive,idum))then ++ ++c Verlet shell width ++ ++ ldelr=.true. ++ delr=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr ++ ++ elseif(findstring('cut',directive,idum))then ++ ++c cutoff ++ ++ lcut=.true. ++ rcut=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut ++ ++ elseif(findstring('eps',directive,idum))then ++ ++c relative dielectric constant ++ ++ epsq=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq ++ ++ elseif(findstring('rlxtol',directive,idum))then ++ ++c force tolerance for shell relaxation ++ ++ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol ++ ++ elseif(findstring('shake',directive,idum))then ++ ++c tolerance for shake ++ ++ tolnce=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce ++ ++ elseif(findstring('quaternion',directive,idum))then ++ ++c tolerance for quaternion integration ++ ++ quattol=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol ++ ++ elseif(findstring('job time',directive,idum))then ++ ++c time for simulation (in seconds/minutes/hours/days or indefinite) ++ ++ if(findstring('indef',directive,idum))then ++ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 ++ else ++ timjob=dblstr(directive,lenrec,idum) ++ if(findstring('m',directive,idum))then ++ timjob=6.0d1*timjob ++ elseif(findstring('h',directive,idum))then ++ timjob=3.6d3*timjob ++ elseif(findstring('d',directive,idum))then ++ timjob=8.64d4*timjob ++ endif ++ endif ++ ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") ++ x hms,prntim ++ ++ elseif(findstring('close time',directive,idum))then ++ ++c time for winding up a job (in seconds) ++ ++ timcls=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls ++ ++ elseif(findstring('all pairs',directive,idum))then ++ ++c full minimum image - N^2 interactions each timestep ++ ++ lnsq=.true. ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'All-pairs requested for electrostatics')") ++ ++ elseif(findstring('nospl',directive,idum))then ++ ++c set ewald_spme interpolation order ++ ++ nospl=intstr(directive,lenrec,idum) ++ ++ elseif(findstring('finish',directive,idum))then ++ ++c safe termination of reading CONTROL file ++ ++ loop=.false. ++ ++ else ++ ++c unrecognised directive in control file ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ enddo ++ ++c check on steps before temperature scaling ++ ++ if(nstbts.eq.0)nstbts=nstrun+1 ++ ++c conduct consistency checks on directives ++ ++ if(lminim)then ++ ++c ensure final configuration follows minimisation ++ ++ if(minstp.eq.0)minstp=nstrun ++ nstrun=minstp*(nstrun/minstp) ++ ++ endif ++ ++c check force activation options ++ ++ if(.not.lforc)then ++ ++c check if any forces are in operation ++ ++ if(.not.lvdw)then ++ ++ kill=.true. ++ call error(idnode,-383) ++ ++ endif ++ ++ else ++ ++c turn on short range forces ++ ++ if(lvdw)then ++ ++ if(keyfce.eq.0)then ++ ++ lcut=.true. ++ ldelr=.true. ++ ++ endif ++ ++ else ++ ++ keyfce=keyfce+1 ++ ++ endif ++ ++ endif ++ ++c if tad selected use only leap frog ++ ++ if(ltad.and.keyver.eq.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to leapfrog for TAD dynamics')") ++ keyver=0 ++ ++ endif ++ ++c error checking ++ ++ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then ++ ++ kill=.true. ++ call error(idnode,-2360) ++ ++ endif ++ ++ if(lsolva.or.lfree.or.lexcite.or.lswitch)then ++ ++ if(lspme)then ++ ++ kill=.true. ++ call error(idnode,-601) ++ ++ endif ++ ++ if(lhke)then ++ ++ kill=.true. ++ call error(idnode,-602) ++ ++ endif ++ ++ endif ++ ++ if(lghost.and.nstbgr.ne.isolva)then ++ ++ call warning(idnode,130,dble(isolva),0.d0,0.d0) ++ nstbgr=isolva ++ ++ endif ++ if(lfree.and.lgofr)then ++ ++ call warning(idnode,140,0.d0,0.d0,0.d0) ++ lgofr=.false. ++ lpgr=.false. ++ ++ endif ++ if(loptim)then ++ ++ temp=0.d0 ++ ++ elseif(.not.ltemp)then ++ ++ kill=.true. ++ call error(idnode,-380) ++ ++ endif ++ ++ if(.not.lstep)then ++ ++ kill=.true. ++ call error(idnode,-381) ++ ++ endif ++ ++ if(.not.lcut)then ++ ++ kill=.true. ++ call error(idnode,-382) ++ ++ endif ++ ++c check if van der Waals cutoff set ++ ++ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then ++ ++ if(rcut.gt.0.d0)then ++ ++ rvdw=rcut ++ ++ else ++ ++ kill=.true. ++ call error(idnode,-402) ++ ++ endif ++ ++ endif ++ ++ if(.not.ldelr)then ++ ++ kill=.true. ++ call error(idnode,-384) ++ ++ endif ++ ++ if(multt.gt.1)then ++ ++ if(.not.lprim)then ++ ++ kill=.true. ++ call error(idnode,-385) ++ ++ elseif(rprim.gt.rcut)then ++ ++ kill=.true. ++ call error(idnode,-386) ++ ++ endif ++ ++ endif ++ ++c check settings in nvt ensemble ++ ++ if(keyens.ge.2.and.keyens.le.3)then ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ ++ endif ++ ++c check settings in npt ensemble ++ ++ if(keyens.ge.4.and.keyens.le.7)then ++ ++ if(.not.lpres)then ++ ++ kill=.true. ++ call error(idnode,-387) ++ ++ endif ++ ++c check barostat and thermostat rates non zero ++ ++ if(taut.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-464) ++ ++ endif ++ if(taup.le.0.d0)then ++ ++ kill=.true. ++ call error(idnode,-466) ++ ++ endif ++ ++ endif ++ ++c check multiple timestep cutoffs are sensible ++ ++ if(multt.gt.1)then ++ if(rcut-rprim.lt.delr)then ++ ++ kill=.true. ++ call error(idnode,-398) ++ ++ endif ++ endif ++ ++c check rcut > rvdw (for verlet list constructor) ++ ++ if(rcut.lt.rvdw)then ++ ++ kill=.true. ++ call error(idnode,-400) ++ ++ endif ++ ++c check spme is not being used with incorrect pbc ++ ++ if(lspme)then ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ kill=.true. ++ call error(idnode,-513) ++ ++ endif ++ ++ endif ++ ++c check on all-pairs calculation request ++ ++ if(lnsq)then ++ ++ if(multt.eq.1)then ++ ++ kill=.true. ++ call error(idnode,-422) ++ ++ endif ++ ++ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then ++ ++ kill=.true. ++ call error(idnode,-424) ++ ++ endif ++ ++ endif ++ ++c cancel rdf option if no vdw or coulombic forces ++ ++ if(lgofr.and.keyfce.eq.0)then ++ ++ lgofr=.false. ++ call warning(idnode,120,0.d0,0.d0,0.d0) ++ ++ endif ++ ++ if(kill)call abort_control_read(2,idnode,nread) ++ ++c close CONTROL file ++ ++ if(idnode.eq.0)close(nread) ++ ++ return ++ end subroutine simdef ++ ++ subroutine sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading in the molecular specifications ++c of the system to be simulated ++c version for rigid unit data and neutral groups ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith may 1992. ++c amended - w.smith march 1994 ++c amended - t.forester april 1994 ++c amended - w.smith dec 1994 - getrec etc ++c amended - a.smondyrev may 2000 - keydih=5 for ++c ryckaert-bellemans potential in dihedrals ++c amended - a.smondyrev may 2000 - keydih=6 for ++c fluorinated ryckaert-bellemans potential in dihedrals ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf ++ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost ++ ++ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls ++ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite ++ integer nsite,nconst,nangle,ndihed,ninver,nbonds ++ integer nteth,nspmf,itmols,i,idum,keyver ++ integer ntpter,keyshl,iatm,natmsr,ntghost ++ ++ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb ++ real(8) sumchg ++ ++ data loop1/.true./,loop2/.true./ ++ ++c initialise system counters: atomic site index, number of ++c constraints, bond angles, dihedrals, inversions, chemical bonds, ++c unique atom types, total number of atoms, ++c total number of rigid groups, number of tethered atoms, ++c number of three body potentials ++ ++ nsite=0 ++ nconst=0 ++ nangle=0 ++ ndihed=0 ++ ninver=0 ++ nbonds=0 ++ ntpatm=0 ++ natms=0 ++ ngrp=0 ++ nteth=0 ++ ntptbp=0 ++ ntpter=0 ++ ntpmet=0 ++ ntpvdw=0 ++ ntpfbp=0 ++ nshels=0 ++ nspmf=0 ++ keyfld=0 ++ keyshl=0 ++ ntghost=0 ++ natmsr=0 ++ ntcons_ghost=0 ++ ++ lunits=.false. ++ lmols=.false. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ lshl=.false. ++ lpmf=.false. ++ engunit=1.d0 ++ ++ numbonds(:)=0 ++ numpmf(:)=0 ++ numcon(:)=0 ++ numdih(:)=0 ++ numinv(:)=0 ++ numgrp(:)=0 ++ numsit(:)=0 ++ numteth(:)=0 ++ numshl(:)=0 ++ npmf(:)=0 ++ indpmf(:)=0 ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD',status='old') ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c convert to lowercase and remove leading blanks ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.' ')then ++ ++c record is commented out ++ cycle ++ ++ elseif(findstring('units',record,idum))then ++ ++c identify energy unit for input/output ++ ++ lunits=.true. ++ call define_units(idnode,engunit) ++ ++c neutral group control option ++ ++ elseif(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ if(idnode.eq.0) ++ x write(nrite,"(/,' neutral group implementation in use')") ++ ++c can't have neutral groups with all-pairs ++ ++ if(lnsq)call error(idnode,426) ++ ++c specify molecular species ++ ++ elseif(findstring('molecu',record,idum))then ++ ++c number of molecular types ++ ++ if(lmols)call error(idnode,11) ++ lmols=.true. ++ ntpmls=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") ++ x ntpmls ++ ++ if(ntpmls.gt.mxtmls)call error(idnode,10) ++ ++c initialise total system charge ++ ++ sumchg=0.d0 ++ ++c read in molecular characteristics ++ ++ do itmols=1,ntpmls ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'molecular species type',9x,i10)") ++ x itmols ++ ++c name of molecular species ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call copystring(record,molnam(1,itmols),40) ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") ++ x (molnam(i,itmols),i=1,40) ++ ++c stop processing if energy unit has not been specified ++ ++ if(.not.lunits)call error(idnode,6) ++ ++c read molecular data ++ ++ loop2=.true. ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'number of molecules ', ++ x 10x,i10)")nummols(itmols) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++c read in atomic details ++ ++ call define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read core - shell spring parameters ++ ++ elseif(findstring('shell',record,idum))then ++ ++ lshl=.true. ++ call define_core_shell ++ x (safe,idnode,itmols,nshels,nsite,keyshl, ++ x engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read chemical bond force constant and bondlength ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ call define_bonds ++ x (safe,idnode,itmols,nbonds,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read bond atom indices and constraint bondlength ++ ++ elseif(findstring('constr',record,idum))then ++ ++ call define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read pmf bond atom indices, weights and constraint bondlength ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ if(lpmf)call error(idnode,484) ++ lpmf=.true. ++ call define_pmf(safe,idnode,itmols,nspmf) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular angular potential parameters ++ ++ elseif(findstring('angles',record,idum))then ++ ++ call define_angles ++ x (safe,idnode,itmols,nangle,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular dihedral potential parameters ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ call define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read intramolecular inversion potential parameters ++ ++ elseif(findstring('invers',record,idum))then ++ ++ call define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read rigid body data ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ call define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read tethered atom indices and tethering parameters ++ ++ elseif(findstring('teth',record,idum))then ++ ++ call define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c finish of data for one molecular type ++ ++ elseif(findstring('finish',record,idum))then ++ ++c running total of number of atoms in system ++ ++ natms=natms+nummols(itmols)*numsit(itmols) ++ if(natms.gt.mxatms)call error(idnode,75) ++ ++c check core-shell units are not both in same rigid body unit ++ ++ call check_shells(idnode,itmols,nshels,ngrp) ++ ++ loop2=.false. ++ ++ else ++ ++c error exit for unidentified directive in molecular data ++ ++ if(idnode.eq.0)write(nrite,'(12x,a)')record ++ call error(idnode,12) ++ ++ endif ++ ++ enddo ++ ++c construction of atmolt table for solvation calculation ++ ++ if(lsolva)then ++ ++ do iatm=natmsr+1,natms ++ atmolt(iatm)=itmols ++ enddo ++ natmsr=natms ++ ++ endif ++ ++ enddo ++ ++c construction of atm_fre table for free energy or excitation ++ ++ if(lfree.or.lexcite.or.lswitch)then ++ ++ atm_fre(:)=0 ++ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then ++ ++ do iatm=ind_fre(1),ind_fre(2) ++ atm_fre(iatm)=1 ++ enddo ++ ++ endif ++ ++ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then ++ ++ do iatm=ind_fre(3),ind_fre(4) ++ ++ atm_fre(iatm)=2 ++ if(lghost)ntghost=ntghost+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c calculate system charge ++ ++ call check_syschg(idnode,ntpmls,sumchg) ++ ++c read in the nonbonded potential energy parameters ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ call define_van_der_waals ++ x (safe,ltable,lunits,lmols,idnode,ntpvdw, ++ x ntpatm,keyfce,dlrpot,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the metal potential energy parameters ++ ++ elseif(findstring('met',record,idum))then ++ ++ call define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the three body potential energy parameters ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ call define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read the tersoff potential energy parameters ++ ++ elseif(findstring('tersoff',record,idum))then ++ ++ call define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read in the four body potential energy parameters ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ call define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c read external field data ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ if(.not.safe)call abort_field_read(1,idnode,nfield) ++ ++c normal end of FIELD file ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. ++ x mod(keyfce,2).eq.1)call error(idnode,145) ++ ++c error exit for unidentified directive ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(100a)')record ++ call abort_field_read(2,idnode,nfield) ++ ++ endif ++ ++ enddo ++ ++c close force field file ++ ++ if(idnode.eq.0)close (nfield) ++ ++ ++ if(lshl.and.idnode.eq.0)then ++ ++ if(keyshl.eq.1)write(nrite, ++ x "(/,/,'adiabatic shell model in operation')") ++ ++ if(keyshl.eq.2)write(nrite, ++ x "(/,/,'relaxed shell model in operation')") ++ ++ endif ++ ++ if(lshl.and.keyshl.eq.0)call error(idnode,1951) ++ ++c if metadynamics and shell selected use only velocity verlet ++ ++ if(lshl.and.lmetadyn.and.keyver.eq.0)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'switching to velocity verlet for metadynamics')") ++ keyver=1 ++ ++ endif ++ ++ return ++ end subroutine sysdef ++ ++ subroutine sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the configuration data file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 atname(8) ++ ++ logical loglnk,safe,lneut,nolink,lfree,lfrmas ++ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt ++ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz ++ integer m,l,ncells,idum,mxnode ++ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc ++ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi ++ real(8) width,dum1,dum2,test,com(3) ++ ++c open the system input file ++ ++ if(idnode.eq.0)open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ call copystring(record,cfgname,80) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ ++ levcfg=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'selected image convention',6x,i10)")imcon ++ ++c check config file contents for consistent data ++ ++ if((imcon.eq.0.or.imcon.eq.6).and. ++ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) ++ x call error(idnode,180) ++ ++ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) ++ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) ++ ++ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) ++ x call error(idnode,390) ++ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 ++ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.eq.0)then ++ ++c if no periodic boundaries - set zero values for cell ++c vectors and cell volume ++ ++ cell(:)=0.d0 ++ volm=0.d0 ++ ++ else ++ ++c read cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ if(.not.safe)call abort_config_read(1,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++ endif ++ ++c read the atomic coordinates ++ ++ indatm=0 ++ indnam=0 ++ indneu=0 ++ safe=.true. ++ ++ do k=1,ntpmls ++ ++ do l=1,nummols(k) ++ ++ do m=1,numsit(k) ++ ++ indatm=indatm+1 ++ ++ if(indatm.gt.mxatms)call error(idnode,45) ++ ++ xxx(indatm)=0.d0 ++ yyy(indatm)=0.d0 ++ zzz(indatm)=0.d0 ++ vxx(indatm)=0.d0 ++ vyy(indatm)=0.d0 ++ vzz(indatm)=0.d0 ++ fxx(indatm)=0.d0 ++ fyy(indatm)=0.d0 ++ fzz(indatm)=0.d0 ++ ++ if(idnode.eq.0)then ++ ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ ++ elseif(levcfg.eq.1)then ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ ++ else ++ ++ read(nconf,'(8a1)',end=100)atname ++ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord ++ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc ++ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce ++ ++ endif ++ ++c strip blanks off atom name ++ ++ call strip(atname,8) ++ ++ if(sitnam(indnam+m).eq.mkwd8(atname))then ++ ++ xxx(indatm)=xcoord ++ yyy(indatm)=ycoord ++ zzz(indatm)=zcoord ++ ++ if(levcfg.gt.0)then ++ ++ vxx(indatm)=xveloc ++ vyy(indatm)=yveloc ++ vzz(indatm)=zveloc ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ fxx(indatm)=xforce ++ fyy(indatm)=yforce ++ fzz(indatm)=zforce ++ ++ endif ++ ++ else ++ ++ write(nrite,"(/,/,'unidentified atom label :',8a1, ++ x ': atom number ',i5)")atname,indatm ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ call gstate(safe) ++ if(.not.safe)call error(idnode,25) ++ ++ ltype(indatm)=ltpsit(indnam+m) ++ weight(indatm)=wgtsit(indnam+m) ++ chge(indatm)=chgsit(indnam+m) ++ atmnam(indatm)=sitnam(indnam+m) ++ lstfrz(indatm)=lfzsit(indnam+m) ++ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu ++ ++c reset atomic masses according to free energy definitions ++ ++ if(lfree)then ++ ++ weight_sav(indatm)=weight(indatm) ++ ++ if(lfrmas)then ++ ++ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then ++ weight(indatm)=lambda1*weight(indatm) ++ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) ++ x then ++ weight(indatm)=lambda2*weight(indatm) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ indneu=indneu+nugrp(indnam+numsit(k)) ++ ++ enddo ++ ++ indnam=indnam+numsit(k) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(xxx,indatm,buffer) ++ call gdsum(yyy,indatm,buffer) ++ call gdsum(zzz,indatm,buffer) ++ ++ if(levcfg.gt.0)then ++ ++ call gdsum(vxx,indatm,buffer) ++ call gdsum(vyy,indatm,buffer) ++ call gdsum(vzz,indatm,buffer) ++ ++ endif ++ ++ if(levcfg.gt.1)then ++ ++ call gdsum(fxx,indatm,buffer) ++ call gdsum(fyy,indatm,buffer) ++ call gdsum(fzz,indatm,buffer) ++ ++ endif ++ ++ endif ++ ++c check integrity of cell vectors : for cubic, TO and RD cases ++c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) ++ ++ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then ++ ++ axx=(abs(cell(1))+abs(cell(5)))/2.d0 ++ test=1.d-8*axx ++ if(abs(cell(1)-axx).gt.test)call error(idnode,410) ++ if(abs(cell(5)-axx).gt.test)call error(idnode,410) ++ if(imcon.eq.5)then ++ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) ++ x call error(idnode,410) ++ else ++ if(abs(cell(9)-axx).gt.test)call error(idnode,410) ++ endif ++ ++ endif ++ ++c check integrity of hexagonal prism cell vectors ++ ++ if(imcon.eq.7)then ++ ++ rt3=sqrt(3.d0) ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,410) ++ ++ endif ++ ++c check 2D PBC for imcon=6 ++ ++ if(imcon.eq.6)then ++ ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c check for diagonal cell matrix if appropriate ++ ++ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. ++ x (imcon.eq.5).or.(imcon.eq.7))then ++ ++ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) ++ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) ++ ++ endif ++ ++c put centre of mass at centre of coordinates if imcon=0 ++ ++ if(imcon.eq.0)then ++ ++ totmas=getmass(indatm,idnode,mxnode) ++ call getcom(indatm,idnode,mxnode,totmas,com) ++ ++ do i=1,indatm ++ ++ xxx(i)=xxx(i)-com(1) ++ yyy(i)=yyy(i)-com(2) ++ zzz(i)=zzz(i)-com(3) ++ ++ enddo ++ ++ endif ++ ++c set widths if unset - needed for check on link cells below ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++ xhi=abs(xxx(1)) ++ yhi=abs(yyy(1)) ++ zhi=abs(zzz(1)) ++ do i=2,indatm ++ ++ xhi=max(xhi,abs(xxx(i))) ++ yhi=max(yhi,abs(yyy(i))) ++ zhi=max(zhi,abs(zzz(i))) ++ ++ enddo ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ if(imcon.eq.6.and.cell(9).lt.1.d-6)then ++ ++ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) ++ ++ endif ++ ++ endif ++ ++c calculate dimensional properties of simulation cell ++ ++ call dcell(cell,celprp) ++ ++ if(imcon.eq.0)then ++ ++ volm=0.d0 ++ ++ elseif(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ else ++ ++ volm=celprp(10) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") ++ write(nrite,"(21x,3f12.6)")cell ++ ++ write(nrite, ++ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm ++ ++ endif ++ ++c check value of cutoff and reset if necessary ++ ++ if(imcon.gt.0)then ++ ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 ++ if(imcon.eq.5)width=cell(1)/2.d0 ++ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 ++ ++c halt program if potential cutoff exceeds cell width ++ ++ if(rcut.gt.width)call error(idnode,95) ++ ++ endif ++ ++c decide on whether to use link cells for verlet list constructor ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ ++ ilx=int(celprp(7)/(rcut+delr)) ++ ily=int(celprp(8)/(rcut+delr)) ++ ilz=int(celprp(9)/(rcut+delr)) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(lneut.and.ncells.le.36)loglnk=.false. ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(loglnk.and.ncells.gt.mxcell)then ++ ++ dum1=dble(ncells) ++ dum2=dble(mxcell) ++ call warning(idnode,90,dum1,dum2,dum2) ++ loglnk=.false. ++ ++ endif ++ ++ endif ++ ++ if(loglnk.and.idnode.eq.0) ++ x write(nrite,"(/,/,' link cell algorithm in use')") ++ ++ if(idnode.eq.0)close (nconf) ++ ++c ensure PBC compliance of starting structure ++ ++ if(keyres.eq.0.and.imcon.gt.0)then ++ ++ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ ++c error exit for config file read ++ ++ 100 call abort_config_read(2,idnode,nconf) ++ ++ end subroutine sysgen ++ ++ subroutine sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading the REVIVE file data and ++c defining the initial thermodynamic and structural accumulators. ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c adapted - d. quigley nov 2010, metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc ++ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc ++ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw ++ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm ++ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost ++ real(8) chit_shl ++ ++c read or initialise accumulator arrays ++ ++ if(keyres.eq.1.and.idnode.eq.0)then ++ ++c read accumulator data from dump file ++ ++ open(nrest,file='REVOLD',form='unformatted') ++ ++ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, ++ x tboost,chit_shl ++ read(nrest) virtot,vircom,eta,strcns,strbod ++ read(nrest) stpval ++ read(nrest) sumval ++ read(nrest) ssqval ++ read(nrest) zumval ++ read(nrest) ravval ++ read(nrest) stkval ++ read(nrest) xx0,yy0,zz0 ++ read(nrest) xxs,yys,zzs ++ ++ if(lgofr) read(nrest)rdf ++ if(lzden) read(nrest)zdens ++ ++ nstep=nint(dnstep) ++ numacc=nint(dnumac) ++ numrdf=nint(dnumrd) ++ nzden=nint(dnzden) ++ close (nrest) ++ ++ else ++ ++c initialise step counters ++ ++ nstep=0 ++ numacc=0 ++ numrdf=0 ++ nzden=0 ++ ++c initialise temperature and pressure coupling parameters ++c and integral for conserved quantity ++ ++ chit=0.d0 ++ chip=0.d0 ++ conint=0.d0 ++ virtot=0.d0 ++ vircom=0.d0 ++ chit_shl=0.d0 ++ do i=1,9 ++ ++ eta(i)=0.d0 ++ strcns(i)=0.d0 ++ strbod(i)=0.d0 ++ ++ enddo ++ ++c initialise accumulator arrays ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ zumval(i)=0.d0 ++ ravval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ xxs(i)=0.d0 ++ yys(i)=0.d0 ++ zzs(i)=0.d0 ++ ++ enddo ++ ++ do j=1,mxnstk ++ ++ do i=1,mxstak ++ ++ stkval(i,j)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ zdens(j,i)=0.d0 ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c put shells on cores at start ++ ++ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) ++ x call put_shells_on_cores(idnode,mxnode,ntshl) ++ ++c if restart then broadcast stored variables via a global sum ++ ++ if(keyres.eq.1.and.mxnode.gt.1)then ++ ++ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) ++ x call error(idnode,186) ++ ++ buffer(1)=chit ++ buffer(2)=chip ++ buffer(3)=conint ++ buffer(4)=dble(nstep) ++ buffer(5)=dble(numacc) ++ buffer(6)=dble(numrdf) ++ buffer(7)=dble(nzden) ++ buffer(8)=tboost ++ buffer(9)=virtot ++ buffer(10)=vircom ++ buffer(11)=chit_shl ++ call gdsum(buffer(1),11,buffer(12)) ++ chit=buffer(1) ++ chip=buffer(2) ++ conint=buffer(3) ++ nstep=nint(buffer(4)) ++ numacc=nint(buffer(5)) ++ numrdf=nint(buffer(6)) ++ nzden=nint(buffer(7)) ++ tboost=buffer(8) ++ virtot=buffer(9) ++ vircom=buffer(10) ++ chit_shl=buffer(11) ++ ++ call gdsum(eta,9,buffer) ++ call gdsum(strcns,9,buffer) ++ call gdsum(strbod,9,buffer) ++ call gdsum(stpval,mxnstk,buffer) ++ call gdsum(sumval,mxnstk,buffer) ++ call gdsum(ssqval,mxnstk,buffer) ++ call gdsum(zumval,mxnstk,buffer) ++ call gdsum(ravval,mxnstk,buffer) ++ call gdsum(stkval,mxnstk*mxstak,buffer) ++ call gdsum(xx0,natms,buffer) ++ call gdsum(yy0,natms,buffer) ++ call gdsum(zz0,natms,buffer) ++ call gdsum(xxs,natms,buffer) ++ call gdsum(yys,natms,buffer) ++ call gdsum(zzs,natms,buffer) ++ ++c for rdf table - broadcast and normalise ++ ++ if(lgofr)then ++ ++ do k=1,mxxtyp ++ ++ call gdsum(rdf(1,k),mxrdf,buffer) ++ ++ do j=1,mxrdf ++ rdf(j,k)=rdf(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(lzden)then ++ ++ do k=1,mxatyp ++ ++ call gdsum(zdens(1,k),mxzdn,buffer) ++ ++ do j=1,mxzdn ++ zdens(j,k)=zdens(j,k)/dble(mxnode) ++ enddo ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities and long-range corrections ++ ++ elrc=0.d0 ++ virlrc=0.d0 ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 ++ ++ call lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) ++ ++ if(lmetab.or.ntpmet.eq.0)then ++ ++ elrcm(0)=0.d0 ++ vlrcm(0)=0.d0 ++ ++ else ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 ++ ++ return ++ end subroutine sysinit ++ ++ subroutine systemp ++ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for setting the initial system temperature ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl ++ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq ++ ++c number of degrees of freedom ++c 3 for com translation ++c 3 for angular momentum about origin (non-periodic systems only) ++ ++ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre ++ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 ++ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) ++ degshl=dble(3*ntshl) ++ ++c lose one degree of freedom if temperature constrained ++c gaussian constraints ++ ++c if(keyens.eq.1)degfre=degfre-1.d0 ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, ++ x ' rotational degrees of freedom ',f20.0,/, ++ x ' shell pseudo degrees of freedom',f20.0)") ++ x degfre,degrot,degshl ++ if(degfre.lt.1.d0)call error(idnode,350) ++ ++c define reciprocal masses of atoms ++ ++ do i=1,natms ++ ++ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then ++ ++ rmass(i)=0.d0 ++ weight(i)=0.d0 ++ ++ else ++ ++ rmass(i)=1.d0/weight(i) ++ ++ endif ++ ++ enddo ++ ++c generate starting velocities ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++ if(keyres.eq.0)then ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ elseif(keyres.eq.1.or.keyres.eq.3)then ++ ++ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ elseif(keyres.eq.2)then ++ ++ if(ngrp.gt.0)then ++ ++ call vscaleg ++ x (idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ elseif(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c print out sample of initial configuration ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'sample of starting configuration',/)") ++ ++ io=(natms+19)/20 ++ if((levcfg.le.1).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") ++ if((levcfg.eq.2).and.(idnode.eq.0)) ++ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', ++ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") ++ ++ do i=1,natms,io ++ ++ if(levcfg.le.1)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) ++ ++ elseif(levcfg.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i), ++ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine systemp ++ ++ subroutine sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine defining global bookkeeping ++c arrays ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith july 1997 ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost ++ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i ++ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl ++ integer ntghost,natms2 ++ real(8) degfre,degrot ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c neutral group bookkeeping ++ ++ call neutbook(lneut,idnode,natms,nneut) ++ ++c rigid body bookkeeping ++ ++ call quatbook ++ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, ++ x ntfree,degfre,degrot) ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost ++ ++ endif ++ ++c construct list of excluded pair interactions ++ ++ if(lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ call excludeneu(idnode,mxnode,nneut) ++ ++ elseif(.not.lneut)then ++ ++ call exclude(idnode,mxnode,natms,ntpmls) ++ ++ if(loglnk)then ++ ++ call exclude_link(idnode,mxnode,ntpmls) ++ ++ else ++ ++ call exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++ endif ++ ++ endif ++ ++c if excitation calculation, allow for ghost species ++ ++ if(lghost)then ++ ++ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost ++ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost ++ ++ endif ++ ++c construct interaction lists for bonded forces ++ ++ call intlist ++ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c adaptations for solvation and excitation simulations ++ ++ if(lsolva.or.lghost)then ++ ++ natmsf=0 ++ natmsl=0 ++ natm_sol(:)=0 ++ const_sol(:)=numcon(:)*nummols(:) ++ rigid_sol(:)=numgrp(:)*nummols(:) ++ ++ if(ngrp.eq.0)then ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ else ++ ++ ii=1 ++ ++ do itmols=1,mxtmls ++ ++ natmsl=natmsl+numsit(itmols)*nummols(itmols) ++ ++ do isol=natmsf+1,natmsl ++ ++ if(lstgot_sol(ii).eq.isol)then ++ ii=ii+1 ++ else ++ ++ if(lstfrz(isol).eq.0)then ++ natm_sol(itmols)=natm_sol(itmols)+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++ natmsf=natmsl ++ ++ enddo ++ ++ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 ++ ++ endif ++ ++ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost ++ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) ++ ++ endif ++ ++ return ++ end subroutine sysbook ++ ++ subroutine define_units(idnode,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting energy units ++c ++c copyright - daresbury laboratory ++c author - w. smith august 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,idum,i ++ real(8) engunit ++ logical blank ++ ++ blank=.true. ++ ++ do i=6,lenrec ++ if(record(i).ne.' ')blank=.false. ++ enddo ++ ++ if(blank)then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal ', ++ x 'units ')") ++ ++ elseif(findstring('ev',record,idum))then ++ ++ engunit=9648.530821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=electron volts ')") ++ ++ elseif(findstring('kev',record,idum))then ++ ++ engunit=9648530.821d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kilo electron volts ')") ++ ++ elseif(findstring('kcal',record,idum))then ++ ++ engunit=418.4d0 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kcal/ mol ')") ++ ++ elseif(findstring('kj',record,idum))then ++ ++ engunit=1.d2 ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kjoule/mol ')") ++ ++ elseif(findstring('k',record,idum))then ++ ++ engunit=boltz ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=kelvin ')") ++ ++ elseif(findstring('internal',record,idum))then ++ ++ if(idnode.eq.0) ++ x write(nrite,"(/,' energy units=dl_poly internal', ++ x ' units ')") ++ ++ else ++ ++ if(idnode.eq.0)write(nrite,'(a)')record ++ call error(idnode,5) ++ ++ endif ++ ++ return ++ end subroutine define_units ++ ++ subroutine quatbook ++ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, ++ x degfre,degrot) ++ ++c************************************************************************** ++c ++c dl_poly subroutine for setting up bookkeeping for rigid bodies ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c adapted - p.-a. cazade oct 2007, solvation etc ++c ++c************************************************************************* ++ ++ implicit none ++ ++ logical safe,pass1,pass2,linear,lsolva ++ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree ++ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id ++ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij ++ integer fngrp,lngrp ++ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 ++ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz ++ real(8) rotlim,rrr ++ ++ integer, allocatable :: ind(:,:),lstgot(:) ++ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) ++ ++ data fail/0,0,0,0,0/ ++ ++c allocate working arrays ++ ++ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) ++ allocate (accum(mxungp),stat=fail(5)) ++ do i=1,5 ++ if(fail(i).ne.0)call error(idnode,1790) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ igrp=0 ++ jgrp=0 ++ kgrp=0 ++ isite=0 ++ jr=0 ++ jt=0 ++ safe=.true. ++ degfre=0.d0 ++ degrot=0.d0 ++ ++c rigid body identifier ++ ++ do i=1,natms ++ lstbod(i)=0 ++ enddo ++ ++c number of rigid groups in system ++ ++ ngrp=0 ++ do itmols=1,ntpmls ++ ngrp=ngrp+nummols(itmols)*numgrp(itmols) ++ enddo ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if(igrp.le.mxgrp)then ++ ++ lstgtp(igrp)=listyp(lgrp+kgrp) ++ id=listyp(lgrp+kgrp) ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then ++ ++ jgrp=jgrp+1 ++ ++ do jj=1,numgsit(id) ++ ++ jr=jr+1 ++ jt=jt+1 ++ ++ if(jr.le.mxatms.and.jt.le.mxatms)then ++ ++ lstrgd(jr)=lstgst(id,jj)+isite ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do jj=1,numgsit(id) ++ ++ jt=jt+1 ++ if(jt.le.mxatms)then ++ ++ lstgot(jt)=lstgst(id,jj)+isite ++ lstbod(lstgst(id,jj)+isite)=igrp ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,304) ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kgrp=kgrp+numgrp(itmols) ++ ++ enddo ++ ++ if(ngrp.eq.0)then ++ ++ j=0 ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0)then ++ ++ j=j+1 ++ lstfre(j)=i ++ ++ endif ++ ++ enddo ++ ntfree=j ++ ++ else ++ ++c centre of mass of groups ++c assumes group dimensions are smaller than half box width ++ ++ do i=1,natms ++ lstme(i)=0 ++ enddo ++ ++ do id=1,mxungp ++ gmass(id)=0.d0 ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ safe=.false. ++ if(abs(gmass(id)).lt.1.d-10)safe=.true. ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ xxt(jr)=xxx(i)-txx(ig) ++ yyt(jr)=yyy(i)-tyy(ig) ++ zzt(jr)=zzz(i)-tzz(ig) ++ if(safe)gmass(id)=gmass(id)+weight(i) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) ++ ++ enddo ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c global communications ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++c make sure all nodes have same copy of gmass ++ ++ if(mxnode.gt.1)then ++ ++ do id=1,mxungp ++ ++ accum(id)=0.d0 ++ if(gmass(id).gt.0.d0)accum(id)=1.d0 ++ ++ enddo ++ ++ call gdsum(gmass(1),mxungp,buffer(1)) ++ call gdsum(accum(1),mxungp,buffer(1)) ++ ++ do id=1,mxungp ++ ++ dnorm=max(1.d0,accum(id)) ++ gmass(id)=gmass(id)/dnorm ++ ++ enddo ++ ++ endif ++ ++c find a group of each type on this node to ++c find principal axis system of the group type ++ ++ do id=1,mxungp ++ ++ jr=0 ++ ij=0 ++ safe=.false. ++ ++ do while(.not.safe.and.ij.lt.ngrp) ++ ++ ij=ij+1 ++ jr=jr+numgsit(lstgtp(ij)) ++ if(lstgtp(ij).eq.id)safe=.true. ++ ++ enddo ++ ++ if(safe)then ++ ++c rotational inertia accumulator ++ ++ do k=1,3 ++ ++ do kk=1,3 ++ ++ rotinr(k,kk)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ij) ++ yyt(jr)=yyy(i)-gcmy(ij) ++ zzt(jr)=zzz(i)-gcmz(ij) ++ ++ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) ++ ++ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) ++ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) ++ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) ++ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) ++ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) ++ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) ++ ++ enddo ++ ++ rotinr(2,1)=rotinr(1,2) ++ rotinr(3,1)=rotinr(1,3) ++ rotinr(3,2)=rotinr(2,3) ++ ++ call jacobi(rotinr,rot1,3) ++ ++ rot(1)=rot1(1,1) ++ rot(4)=rot1(2,1) ++ rot(7)=rot1(3,1) ++ rot(2)=rot1(1,2) ++ rot(5)=rot1(2,2) ++ rot(8)=rot1(3,2) ++ rot(3)=rot1(1,3) ++ rot(6)=rot1(2,3) ++ rot(9)=rot1(3,3) ++ ++c rotational inertia accumulators ++ ++ rotinx(id,1)=0.d0 ++ rotiny(id,1)=0.d0 ++ rotinz(id,1)=0.d0 ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstgot(jr) ++ ++c site positions in principal axis system ++ ++ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) ++ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) ++ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) ++ ++c impose rounding ++ ++ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 ++ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 ++ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 ++ ++c rotational inertia tensor of group type ++ ++ rotinx(id,1)=rotinx(id,1)+ ++ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) ++ rotiny(id,1)=rotiny(id,1)+ ++ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) ++ rotinz(id,1)=rotinz(id,1)+ ++ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) ++ ++ enddo ++ ++c set axis system such that: Ixx >=Iyy >=Izz ++ ++ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) ++ ++ if(rotxyz.ge.rotinx(id,1))then ++ ++ if(rotiny(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gyy(id,j) ++ gyy(id,j)=-a1 ++ ++ enddo ++ ++ rotiny(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ elseif(rotinz(id,1).ge.rotxyz)then ++ ++ do j=1,numgsit(id) ++ ++ a1=gxx(id,j) ++ gxx(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ rotinz(id,1)=rotinx(id,1) ++ rotinx(id,1)=rotxyz ++ ++ endif ++ ++ endif ++ ++ if(rotinz(id,1).gt.rotiny(id,1))then ++ ++ do j=1,numgsit(id) ++ ++ a1=gyy(id,j) ++ gyy(id,j)=gzz(id,j) ++ gzz(id,j)=-a1 ++ ++ enddo ++ ++ a1=rotinz(id,1) ++ rotinz(id,1)=rotiny(id,1) ++ rotiny(id,1)=a1 ++ ++ endif ++ ++c set up principal axis system in terms of site positions ++ ++c test for (near) linear unit ++ ++ ill=0 ++ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) ++ ++ if(rtall.gt.1.d-5)then ++ rotall=rtall ++ else ++ rotall=1.d0 ++ endif ++ ++ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) ++ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall ++ ++ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 ++ ++ if(ill.ge.2)then ++ ++c point particle only ++ ++ ind(id,1)=1 ++ ind(id,2)=1 ++ ind(id,3)=1 ++ ++ do jj=1,9 ++ gaxs(id,jj)=0.d0 ++ enddo ++ ++ elseif(ill.eq.1)then ++ ++c linear molecule ++ ++ ind(id,1)=1 ++ ind(id,2)=2 ++ ind(id,3)=1 ++ ++ aa(1)=gxx(id,1)-gxx(id,2) ++ aa(4)=gyy(id,1)-gyy(id,2) ++ aa(7)=gzz(id,1)-gzz(id,2) ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++ call invert(aa,bb,det) ++ ++ if(abs(det).lt.1.d-5)call error(idnode,306) ++ ++ do j=1,9 ++ gaxs(id,j)=bb(j) ++ enddo ++ ++ elseif(ill.eq.0)then ++ ++c non-linear molecule ++ ++ i1=1 ++ i2=1 ++ i3=1 ++ pass1=.true. ++ dettest=1.d-1 ++ ++ do while(pass1.and.i2.lt.numgsit(id)-1) ++ ++ i2=i2+1 ++ i3=i2 ++ pass2=.true. ++ ++ do while(pass2.and.i3.lt.numgsit(id)) ++ ++ i3=i3+1 ++ ++ aa(1)=gxx(id,i1)-gxx(id,i2) ++ aa(4)=gyy(id,i1)-gyy(id,i2) ++ aa(7)=gzz(id,i1)-gzz(id,i2) ++ aa(2)=gxx(id,i1)-gxx(id,i3) ++ aa(5)=gyy(id,i1)-gyy(id,i3) ++ aa(8)=gzz(id,i1)-gzz(id,i3) ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c invert matrix ++ ++ call invert(aa,bb,det) ++ ++c check on size of determinant - to see if the 3 sites are ++c too close to being linear for safety. ++ ++ pass2=abs(det).lt.dettest ++ ++ enddo ++ ++ pass1=abs(det).lt.dettest ++ ++ enddo ++ ++ if(abs(det).lt.dettest)call error(idnode,306) ++ ++c store indices used ++ ++ ind(id,1)=i1 ++ ind(id,2)=i2 ++ ind(id,3)=i3 ++ ++c store coefficients ++ ++ do j=1,9 ++ ++ gaxs(id,j)=bb(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check that rigid unit does not contain frozen atoms ++ ++ safe=.true. ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ if(lstfrz(i).ne.0)safe=.false. ++ ++ enddo ++ ++ enddo ++ ++c global check on error condition ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,360) ++ ++c quaternions for all rigid groups in system ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ i1=lstrgd(jr+ind(id,1)) ++ i2=lstrgd(jr+ind(id,2)) ++ i3=lstrgd(jr+ind(id,3)) ++ ++ jr=jr+numgsit(id) ++ ++c group basis vectors ++ ++ aa(1)=xxx(i1)-xxx(i2) ++ aa(4)=yyy(i1)-yyy(i2) ++ aa(7)=zzz(i1)-zzz(i2) ++ ++ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) ++ ++ if(rotmin(id).gt.1.d-5)then ++ ++ aa(2)=xxx(i1)-xxx(i3) ++ aa(5)=yyy(i1)-yyy(i3) ++ aa(8)=zzz(i1)-zzz(i3) ++ ++ else ++ ++ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) ++ ++ if(abs(aa(7)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(7)**2) ++ aa(2)=0.d0 ++ aa(5)=aa(7)/rsq ++ aa(8)=-aa(4)/rsq ++ ++ elseif(abs(aa(4)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(4)**2+aa(1)**2) ++ aa(2)=-aa(4)/rsq ++ aa(5)=aa(1)/rsq ++ aa(8)=0.d0 ++ ++ elseif(abs(aa(1)/rsq).gt.0.5d0)then ++ ++ rsq=sqrt(aa(1)**2+aa(7)**2) ++ aa(2)=-aa(7)/rsq ++ aa(5)=0.d0 ++ aa(8)=aa(1)/rsq ++ ++ endif ++ ++ endif ++ ++ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) ++ ++ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) ++ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) ++ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) ++ ++c group rotational matrix ++ ++ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) ++ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) ++ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) ++ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) ++ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) ++ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) ++ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) ++ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) ++ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) ++ ++c determine quaternions from rotational matrix ++ ++ aq=rot(1)+rot(5) ++ bq=rot(2)-rot(4) ++ cq=rot(6)-rot(8) ++ dq=rot(2)+rot(4) ++ eq=rot(3)+rot(7) ++ fq=rot(6)+rot(8) ++ gq=rot(3)-rot(7) ++ hq=rot(1)-rot(5) ++ ++ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) ++ ++ if(q0(ig).gt.1.d-4)then ++ ++ q1(ig)=-0.25d0*cq/q0(ig) ++ q2(ig)=0.25d0*gq/q0(ig) ++ q3(ig)=-0.25d0*bq/q0(ig) ++ ++ else ++ ++ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q1(ig).gt.1.d-4)then ++ ++ q2(ig)=0.25d0*dq/q1(ig) ++ q3(ig)=0.25d0*eq/q1(ig) ++ ++ else ++ ++ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) ++ ++ if(q2(ig).gt.1.d-4)then ++ ++ q3(ig)=0.25d0*fq/q2(ig) ++ ++ else ++ ++ q3(ig)=1.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c normalise quaternions ++ ++ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) ++ q0(ig)=rnorm*q0(ig) ++ q1(ig)=rnorm*q1(ig) ++ q2(ig)=rnorm*q2(ig) ++ q3(ig)=rnorm*q3(ig) ++ ++ enddo ++ ++c test for redundant degrees of freedom ++c and ensure rotational inertias are non-zero ++ ++ degrot=0.d0 ++ ++ if(lsolva)then ++ degrot_sol(:)=0.d0 ++ endif ++ ++ do ig=1,ngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot=degrot-1.d0 ++ endif ++ ++ enddo ++ ++c rotational degrees of freedom and rigid body contribution ++c to total degrees of freedom ++ ++ degrot=degrot+dble(ngrp)*3.d0 ++ degfre=degrot+dble(ngrp)*3.d0 ++ ++ if(lsolva)then ++ ++ fngrp=1 ++ lngrp=0 ++ ++ do itmols=1,mxtmls ++ ++ lngrp=lngrp+nummols(itmols)*numgrp(itmols) ++ ++ do ig=fngrp,lngrp ++ ++ id=lstgtp(ig) ++ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1)) ++ ++ if(rotall*rotinx(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotiny(id,1).lt.1.d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ if(rotall*rotinz(id,1).lt.1d-5)then ++ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 ++ endif ++ ++ enddo ++ ++ fngrp=lngrp+1 ++ ++ enddo ++ ++ endif ++ ++c summarise results ++ ++ if(idnode.eq.0)then ++ ++ if(gmass(1).gt.0.d0)then ++ ++ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' ++ ++ do id=1,mxungp ++ ++ if(gmass(id).gt.0.d0)then ++ ++ write(nrite,'(/,a,i10)')' group of type ',id ++ write(nrite,'(12x,a,f20.10)')' total mass ', ++ x gmass(id) ++ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', ++ x rotinx(id,1),rotiny(id,1),rotinz(id,1) ++ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', ++ x 'b coord','c coord' ++ do j=1,numgsit(id) ++ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), ++ x gyy(id,j),gzz(id,j) ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c find number of unique groups ++ ++ ngp=0 ++ do ig=1,ngrp ++ ngp=max(ngp,lstgtp(ig)) ++ enddo ++ ++c calculate reciprocal of rotational inertias ++ ++ do id=1,ngp ++ ++ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ ++ x rotinz(id,1))*1.d-5 ++ ++ if(rotinx(id,1).lt.rotlim)then ++ rotinx(id,2)=0.d0 ++ else ++ rotinx(id,2)=1.d0/rotinx(id,1) ++ endif ++ ++ if(rotiny(id,1).lt.rotlim)then ++ rotiny(id,2)=0.d0 ++ else ++ rotiny(id,2)=1.d0/rotiny(id,1) ++ endif ++ ++ if(rotinz(id,1).lt.rotlim)then ++ rotinz(id,2)=0.d0 ++ else ++ rotinz(id,2)=1.d0/rotinz(id,1) ++ endif ++ ++ enddo ++ ++c Check of quaternion set up with atomic positions ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c group type ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ ++ txx(jr)=xxx(i)-xxt(i) ++ tyy(jr)=yyy(i)-yyt(i) ++ tzz(jr)=zzz(i)-zzt(i) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,txx,tyy,tzz) ++ ++c set tolerance for testing quaternion setup. ++ ++ rsq=0.d0 ++ tol=1.d-2 ++ ++ do i=1,jr ++ ++ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ if(rrr.gt.tol)then ++ ++ rsq=rrr ++ ++ endif ++ ++ enddo ++ ++c exit if error in set up ++ ++ safe=.true. ++ if(rsq.gt.tol)safe=.false. ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)call error(idnode,310) ++ ++c sort lstgot into ascending order ++ ++ call shellsort(jt,lstgot) ++ ++c check that no site is in more than 1 rigid group ++ ++ i=1 ++ safe=.true. ++ do while(i.lt.jt) ++ ++ i=i+1 ++ linear=.true. ++ do while(linear) ++ ++ linear=.false. ++ ++ if(lstgot(i).eq.lstgot(i-1))then ++ ++ linear=.true. ++ safe=.false. ++ jt=jt-1 ++ ++ do j=i,jt ++ lstgot(j)=lstgot(j+1) ++ enddo ++ ++ endif ++ ++ if(i.ge.jt)linear=.false. ++ ++ enddo ++ ++ enddo ++ ++ if(.not.safe)call error(idnode,320) ++ ++c list of 'free' sites ++ ++ ii=1 ++ jj=0 ++ do i=1,natms ++ ++ if(lstgot(ii).eq.i)then ++ ++ ii=ii+1 ++ ++ else ++ ++ if(lstfrz(i).eq.0)then ++ jj=jj+1 ++ lstfre(jj)=i ++ endif ++ ++ endif ++ ++ enddo ++ ++c number of free sites ++ ++ ntfree=jj ++ ++c list of atoms integrated on this node ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ jr=jr+numgsit(id) ++ ++ enddo ++ ++ do i=1,jr ++ lstme(i)=lstrgd(i) ++ enddo ++ ++c block parameters for free atoms ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do i=ifre1,ifre2 ++ ++ jr=jr+1 ++ lstme(jr)=lstfre(i) ++ ++ enddo ++ ++c exchange quaternion data with other nodes ++ ++ if(mxnode.gt.1)call merge4 ++ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++ if(lsolva)lstgot_sol(:)=lstgot(:) ++ ++c deallocate work arrays ++ ++ deallocate (ind,lstgot,stat=fail(1)) ++ deallocate (txx,tyy,tzz,stat=fail(2)) ++ deallocate (xxt,yyt,zzt,stat=fail(3)) ++ deallocate (gaxs,rotmin,stat=fail(4)) ++ deallocate (accum,stat=fail(5)) ++ ++ return ++ end subroutine quatbook ++ ++ subroutine abort_field_read(kode,idnode,nfield) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting FIELD file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nfield ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(kode.eq.1)then ++ ++c end of field file error exit ++ ++ call error(idnode,52) ++ ++ elseif(kode.eq.2)then ++ ++c unrecognised directive in field file ++ ++ call error(idnode,4) ++ ++ endif ++ ++ return ++ end subroutine abort_field_read ++ ++ subroutine abort_control_read(kode,idnode,nread) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nread ++ ++ if(idnode.eq.0)close (nread) ++ ++ if(kode.eq.1)then ++ ++c end of control file error exit ++ ++ call error(idnode,53) ++ ++ elseif(kode.eq.2)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,0) ++ ++ endif ++ ++ return ++ end subroutine abort_control_read ++ ++ subroutine abort_config_read(kode,idnode,nconf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for aborting CONTROL file read ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer kode,idnode,nconf ++ ++ if(idnode.eq.0)close (nconf) ++ ++ if(kode.eq.1)then ++ ++c general error exit from field file processing ++ ++ call error(idnode,54) ++ ++ elseif(kode.eq.2)then ++ ++c end of config file error exit ++ ++ call error(idnode,55) ++ ++ endif ++ ++ return ++ end subroutine abort_config_read ++ ++ subroutine neutbook(lneut,idnode,natms,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for neutral group bookkeeping ++c ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lneut,safe ++ integer idnode,natms,nneut,i ++ ++ safe=.true. ++ ++c neutral group bookkeeping: sites must be listed consecutively ++ ++ if(lneut)then ++ ++ if(lstneu(1).ne.1)call error(idnode,230) ++ ++ neulst(1)=1 ++ nneut=1 ++ ++ do i=2,natms ++ ++ safe=.false. ++ if(lstneu(i).eq.lstneu(i-1))safe=.true. ++ if(lstneu(i).eq.lstneu(i-1)+1)then ++ ++ safe=.true. ++ nneut=nneut+1 ++ if(nneut.gt.mxneut)call error(idnode,220) ++ neulst(nneut)=i ++ ++ endif ++ ++ if(.not.safe)call error(idnode,230) ++ ++ enddo ++ ++ neulst(nneut+1)=natms+1 ++ ++ endif ++ ++ return ++ ++ end subroutine neutbook ++ ++ subroutine intlist ++ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, ++ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the interaction lists ++c for the entire simulated system ++c ++c parallel replicated dat version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,safe1,lcnb,lchk,lfail ++ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons ++ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf ++ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle ++ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths ++ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 ++ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum ++ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 ++ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 ++ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle ++ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp ++ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail ++ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail ++ real(8) tol ++ ++ integer, allocatable :: itest(:),index(:),kscons(:) ++ integer, allocatable :: msite(:),mconst(:),listin(:) ++ ++ dimension fail(4) ++ ++ data fail/0,0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) ++ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) ++ allocate (listin(mxatms),stat=fail(3)) ++ allocate (kscons(0:mxproc-1),stat=fail(4)) ++ do i=1,4 ++ if(fail(i).ne.0)call error(idnode,1800) ++ enddo ++ ++c initialise bookkeeping indices ++ ++ ibonds=0 ++ jbonds=0 ++ kbonds=0 ++ ipmf=0 ++ jpmf=0 ++ iangle=0 ++ jangle=0 ++ kangle=0 ++ idihed=0 ++ jdihed=0 ++ kdihed=0 ++ iinver=0 ++ jinver=0 ++ kinver=0 ++ iteths=0 ++ jteths=0 ++ kteths=0 ++ ishels=0 ++ jshels=0 ++ kshels=0 ++ safe=.true. ++ safe1=.true. ++ ++c find total number of bonds,pmf constraints,bond constraints, ++c angles,dihedrals,inversions, tethers,core-shells, in system ++c - ignoring frozen atoms ++ ++ ntbon0=0 ++ ntpmf0=0 ++ ntcon0=0 ++ ntang0=0 ++ ntdih0=0 ++ ntinv0=0 ++ nttet0=0 ++ ntshl0=0 ++ nscons=0 ++ ntcons=0 ++ ++ do itmols=1,ntpmls ++ ++ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) ++ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) ++ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) ++ ntang0=ntang0+nummols(itmols)*numang(itmols) ++ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) ++ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) ++ nttet0=nttet0+nummols(itmols)*numteth(itmols) ++ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) ++ ++ enddo ++ ++ isite=0 ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ ++c first and last index of bonds, angles etc for this node ++ ++ ibnd1=(idnode*ntbon0)/mxnode+1 ++ ibnd2=((idnode+1)*ntbon0)/mxnode ++ ++ ipmf1=(idnode*ntpmf0)/mxnode+1 ++ ipmf2=((idnode+1)*ntpmf0)/mxnode ++ ntpmf=ntpmf0 ++ nspmf=ipmf2+1-ipmf1 ++ ++ iang1=(idnode*ntang0)/mxnode+1 ++ iang2=((idnode+1)*ntang0)/mxnode ++ ++ idih1=(idnode*ntdih0)/mxnode+1 ++ idih2=((idnode+1)*ntdih0)/mxnode ++ ++ iinv1=(idnode*ntinv0)/mxnode+1 ++ iinv2=((idnode+1)*ntinv0)/mxnode ++ ++ itet1=(idnode*nttet0)/mxnode+1 ++ itet2=((idnode+1)*nttet0)/mxnode ++ ++ ishl1=(idnode*ntshl0)/mxnode+1 ++ ishl2=((idnode+1)*ntshl0)/mxnode ++ ++c loop over molecule types ++ ++ do itmols=1,ntpmls ++ ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct bond constraint list later ++c construct chemical bond interaction list ++ ++ do lbonds=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then ++ ++ jbonds=jbonds+1 ++ if(jbonds.le.mxbond)then ++ ++ listbnd(jbonds,1)=lbonds+kbonds ++ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) ++ x +isite ++ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,31) ++ ++c construct pmf site lists - no exclusions ++ ++ do lpmf=1,numpmf(itmols) ++ ++ ipmf=ipmf+1 ++ ++ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then ++ ++ jpmf=jpmf+1 ++ if(jpmf.le.mspmf)then ++ ++ nnn=npmf(1)+npmf(2) ++ if(nnn.le.mxspmf)then ++ ++ do jj=1,npmf(1)+npmf(2) ++ lstpmf(jj,jpmf)=indpmf(jj)+isite ++ enddo ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ else ++ ++ safe1=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe1) ++ if(.not.safe1)call error(idnode,458) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,460) ++ ++c construct valence angle interaction list ++ ++ do langle=1,numang(itmols) ++ ++ iangle=iangle+1 ++ ++ if(iangle.ge.iang1.and.iangle.le.iang2)then ++ ++ jangle=jangle+1 ++ if(jangle.le.mxangl)then ++ ++ listang(jangle,1)=langle+kangle ++ listang(jangle,2)=lstang(langle+kangle,1) ++ x +isite ++ listang(jangle,3)=lstang(langle+kangle,2) ++ x +isite ++ listang(jangle,4)=lstang(langle+kangle,3) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,51) ++ ++c construct dihedral angle interaction list ++ ++ do ldihed=1,numdih(itmols) ++ ++ idihed=idihed+1 ++ ++ if(idihed.ge.idih1.and.idihed.le.idih2)then ++ ++ jdihed=jdihed+1 ++ if(jdihed.le.mxdihd)then ++ ++ listdih(jdihed,1)=ldihed+kdihed ++ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) ++ x +isite ++ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) ++ x +isite ++ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) ++ x +isite ++ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,61) ++ ++c construct inversion potential list ++ ++ do linver=1,numinv(itmols) ++ ++ iinver=iinver+1 ++ ++ if(iinver.ge.iinv1.and.iinver.le.iinv2)then ++ ++ jinver=jinver+1 ++ if(jinver.le.mxinv)then ++ ++ listinv(jinver,1)=linver+kinver ++ listinv(jinver,2)=lstinv(linver+kinver,1) ++ x +isite ++ listinv(jinver,3)=lstinv(linver+kinver,2) ++ x +isite ++ listinv(jinver,4)=lstinv(linver+kinver,3) ++ x +isite ++ listinv(jinver,5)=lstinv(linver+kinver,4) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,77) ++ ++c construct tethered atoms interaction list ++ ++ do lteths=1,numteth(itmols) ++ ++ iteths=iteths+1 ++ ++ if(iteths.ge.itet1.and.iteths.le.itet2)then ++ ++ jteths=jteths+1 ++ if(jteths.le.msteth)then ++ ++ listtet(jteths,1)=lteths+kteths ++ listtet(jteths,2)=lsttet(lteths+kteths)+isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,63) ++ ++c construct core-shell list ++ ++ do lshels=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ if(ishels.ge.ishl1.and.ishels.le.ishl2)then ++ ++ jshels=jshels+1 ++ if(jshels.le.mxshl)then ++ ++ listshl(jshels,1)=lshels+kshels ++ listshl(jshels,2)=lstshl(lshels+kshels,1) ++ x +isite ++ listshl(jshels,3)=lstshl(lshels+kshels,2) ++ x +isite ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,59) ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ kbonds=kbonds+numbonds(itmols) ++ kangle=kangle+numang(itmols) ++ kdihed=kdihed+numdih(itmols) ++ kinver=kinver+numinv(itmols) ++ kteths=kteths+numteth(itmols) ++ kshels=kshels+numshl(itmols) ++ ++ enddo ++ ++c store array counters for bookkeeping ++ ++ ntbond=ibonds ++ ntangl=iangle ++ ntdihd=idihed ++ ntinv=iinver ++ ntteth=iteths ++ ntshl=ishels ++ ++c pass bond constraint information to other nodes ++ ++ if(ntcon0.gt.0)then ++ ++ ntcons=ntcon0 ++ ++c find starting site no. and constraint no. for each molec. type ++ ++ msite(1)=0 ++ mconst(1)=0 ++ ++ do itmols=2,ntpmls ++ ++ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* ++ x nummols(itmols-1) ++ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) ++ ++ enddo ++ ++c sort molecules into ascending order of number of constraints ++ ++ do i=1,ntpmls ++ ++ itest(i)=numcon(i) ++ index(i)=0 ++ ++ enddo ++ ++ call shellsort(ntpmls,itest) ++ ++ do i=1,ntpmls ++ ++ lchk=.true. ++ do j=1,ntpmls ++ ++ if(itest(i).eq.numcon(j))then ++ ++ if(lchk)then ++ index(i)=j ++ lchk=.false. ++ ++ endif ++ ++ do ii=1,i-1 ++ if(index(ii).eq.j)lchk=.true. ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c load balance to within 10% ++ ++ tol=1.0d0+(0.10d0)/2.d0 ++ kcons=(ntcons)/mxnode ++ ntmp=0 ++ ++c find smallest constrained molecule to allocate to a node ++ ++ do i=1,ntpmls ++ ++ if(ntmp.le.mxnode)then ++ ++ if(numcon(index(i)).gt.0)then ++ ntmp=ntmp+nummols(index(i)) ++ klo=max(0,kcons-numcon(index(i))/2) ++ khi=klo+numcon(index(i))+1 ++ endif ++ ++ endif ++ ++ enddo ++ ++c reset hi/lo limits if molecules contain too many constraints ++ ++ if(dble(khi)/dble(max(1,klo)).gt.tol)then ++ klo=nint(dble(kcons)/tol) ++ khi=nint(dble(kcons)*tol)+1 ++ endif ++ ++c store lo value for later ++ ++ klo0=klo ++ ++c begin assignment of constraints ---------------------------------- ++ ++ ifail=-1 ++ lfail=.true. ++ do while(lfail) ++ ++ ifail=ifail+1 ++ ++ if(ifail.gt.ntpmls)then ++ call error(idnode,432) ++ endif ++ ++ iconst=0 ++ jconst=0 ++ kconst=0 ++ lconst=0 ++ ++c zero running totals of constraints on each processor ++ ++ do id=0,mxnode-1 ++ kscons(id)=0 ++ enddo ++ ++ iloop=0 ++ lfail=.false. ++ iconst=0 ++ jconst=0 ++ nnode=0 ++ ++c assign difficult molecules in blocks ++ ++ if(ifail.gt.0)then ++ ++ nfail=0 ++ do i=1,ifail ++ ++ ii=ntpmls+1-i ++ nfail=nfail+nummols(index(ii))*numcon(index(ii)) ++ ++ enddo ++ ++c decide on number of processors to split over ++ ++ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) ++ nnode=max(2,nnode) ++ nnode=min(nnode,mxnode) ++ ++c assign to processors 0..nnode-1 ++ ++ do id=0,nnode-1 ++ ++ nscons0=(id*nfail)/nnode+1 ++ nscons1=((id+1)*nfail)/nnode ++ ++ kscons(id)=nscons1+1-nscons0 ++ ++ enddo ++ ++c this processors block ++ ++ nscons0=(idnode*nfail)/nnode+1 ++ nscons1=((idnode+1)*nfail)/nnode ++ ++c assign in blocks ++ ++ do itmols=ntpmls,ntpmls-ifail+1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ ++c construct bond constraint list ++ ++ do lconst=1,numcon(ii) ++ ++ iconst=iconst+1 ++ ++ if(iconst.ge.nscons0.and.iconst.le.nscons1)then ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c assign non-problematic molecules ++ ++ jdnode=mod(nnode+1,mxnode) ++ ++ do itmols=ntpmls-ifail,1,-1 ++ ++ ii=index(itmols) ++ icon=numcon(ii) ++ kconst=mconst(ii) ++ ++ do imols=1,nummols(ii) ++ ++ itry=0 ++ lchk=.true. ++ do while(lchk) ++ ++ if(kscons(jdnode)+icon.le.klo)then ++ ++ if(jdnode.ne.idnode)then ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ else ++ ++c construct bond constraint list ++ ++ isite=msite(ii)+(imols-1)*numsit(ii) ++ do lconst=1,numcon(ii) ++ ++ jconst=jconst+1 ++ ++ if(jconst.le.mxcons)then ++ ++ listcon(jconst,1)=lconst+kconst ++ iatom=lstcon(lconst+kconst,1)+isite ++ jatom=lstcon(lconst+kconst,2)+isite ++ listcon(jconst,2)=iatom ++ listcon(jconst,3)=jatom ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ kscons(jdnode)=kscons(jdnode)+icon ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.false. ++ ++ endif ++ ++ else ++ ++ jdnode=mod(jdnode+1,mxnode) ++ lchk=.true. ++ itry=itry+1 ++ ++ endif ++ ++ if(lchk.and.itry.gt.mxnode)then ++ ++ klo=kcons ++ kcons=khi ++ itry=0 ++ iloop=iloop+1 ++ ++ endif ++ ++c split molecule across nodes if have to ++ ++ if(iloop.gt.3)then ++ lfail=.true. ++ kcons=ntcons/mxnode ++ klo=klo0 ++ lchk=.false. ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c check no node has less than minimum number ++ ++ do id=0,mxnode-1 ++ if(kscons(id).lt.klo0)then ++ lfail=.true. ++ endif ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(mxnode.gt.1)call gimax(jconst,1,idum) ++ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') ++ x 'Number of constraints found ',jconst,'Max allowed ',mxcons ++ ++ call error(idnode,41) ++ ++ endif ++ ++ nscons=kscons(idnode) ++ ++ call passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++ endif ++ ++ if(npmf(1).gt.0)then ++ ++ call passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++ endif ++ ++c pass rigid body data ++ ++ lcnb=.false. ++ if(ntcons.gt.0.and.ngrp.gt.0)then ++ ++ call passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, ++ x numgsit) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(itest,index,msite,stat=fail(1)) ++ deallocate(mconst,kscons,listin,stat=fail(2)) ++ ++ return ++ end subroutine intlist ++ ++ subroutine ensemble_selection ++ x (directive,lens,kill,idnode,keyens,mode,taut,taup) ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ensemble and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical kill,lens ++ integer keyens,idnode,idum,mode ++ real(8) taut,taup ++ ++ if(findstring('nve',directive,idum))then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'microcanonical ensemble')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('nvt',directive,idum))then ++ ++ if(findstring('evans',directive,idum))then ++ ++ keyens=1 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Evans Gaussian temperature constraints', ++ x ' in use')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('ber',directive,idum))then ++ ++ keyens=2 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen thermostat', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=3 ++ taut=dblstr(directive,69,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4)") ++ x taut ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('npt',directive,idum))then ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=4 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen isotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=5 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ elseif(findstring('nst',directive,idum))then ++ ++ mode=0 ++ if(findstring('block',directive,idum))mode=1 ++ if(findstring('surf',directive,idum))mode=2 ++ if(findstring('slab',directive,idum))mode=3 ++ ++ if(findstring('ber',directive,idum))then ++ ++ keyens=6 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Berendsen anisotropic N-P-T', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ elseif(findstring('hoover',directive,idum))then ++ ++ keyens=7 ++ taut=dblstr(directive,lenrec,idum) ++ taup=dblstr(directive,lenrec,idum) ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', ++ x /,1x,'thermostat relaxation time ',1p,e12.4, ++ x /,1x,'barostat relaxation time ',1p,e12.4)") ++ x taut,taup ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ kill=.true. ++ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record ++ call error(idnode,-3) ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ if(mode.eq.0)then ++ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") ++ elseif(mode.eq.1)then ++ write(nrite, ++ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") ++ elseif(mode.eq.2)then ++ write(nrite, ++ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") ++ elseif(mode.eq.3)then ++ write(nrite, ++ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") ++ endif ++ ++ endif ++ ++ elseif(findstring('pmf',directive,idum))then ++ ++ keyens=8 ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'potential of mean force calculation (NVE)')") ++ if(lens)then ++ call error(idnode,-414) ++ kill=.true. ++ endif ++ lens=.true. ++ ++ else ++ ++ call error(idnode,-436) ++ kill=.true. ++ ++ endif ++ ++ return ++ end subroutine ensemble_selection ++ ++ subroutine neb_option ++ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, ++ x opttol,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for NEB option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical lneb,lminopt,endneb,safe ++ integer numneb,idnode,keytol,i,idum ++ real(8) sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ lminopt=.true. ++ lneb=.true. ++ endneb=.false. ++ numneb=intstr(directive,lenrec,idum) ++ if(numneb.eq.0)numneb=1 ++ numneb=min(maxneb,numneb) ++ ++ hyp_units=1.d0 ++ do while(.not.endneb) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endneb',directive,idum))then ++ endneb=.true. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('basin_1',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_1(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('basin_2',directive,idum))then ++ call striptext(directive,lenrec,1) ++ do i=1,numneb ++ bsn_2(i)=intstr(directive,lenrec,idum) ++ enddo ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,1x,'NEB calculation controls')") ++ write(nrite,"(/,1x,'identity of basin 1 ', ++ x 10i10)")(bsn_1(i),i=1,numneb) ++ write(nrite,"(1x,'identity of basin 2 ', ++ x 10i10)")(bsn_2(i),i=1,numneb) ++ write(nrite, ++ x "(1x,'NEB spring constant ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x sprneb,opttol,cunit ++ ++ call print_optim(keytol) ++ ++ endif ++ ++c units conversion ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine neb_option ++ ++ subroutine bpd_option ++ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, ++ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for bias potential ++c dynamics option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit,seek ++ character*1 directive(lenrec) ++ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo ++ integer keybpd,idnode,nblock,ntrack,keytol,idum ++ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(ltad)call error(idnode,2355) ++ lminopt=.true. ++ lbpd=.true. ++ endbpd=.false. ++ cunit=" dl_poly" ++ if(idnode.eq.0) ++ x write(nrite,"(/,1x,'bias potential dynamics controls')") ++ ++ if(findstring('dyn',directive,idum))then ++ ++ keybpd=1 ++ hyp_units=energy_unit() ++ ebias=dblstr(directive,lenrec,idum) ++ vmin=dblstr(directive,lenrec,idum) ++ call getword(cunit,directive,8,lenrec) ++ if(idnode.eq.0)write(nrite,"( ++ x 1x,'dynamics option selected ', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4 ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,cunit ++ ++ elseif(findstring('path',directive,idum))then ++ ++ keybpd=2 ++ nebgo=.true. ++ hyp_units=1.d0 ++ do while(.not.endbpd) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endbpd',directive,idum))then ++ endbpd=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('noneb',directive,idum))then ++ nebgo=.false. ++ elseif(findstring('target',directive,idum))then ++ call getword(seek,directive,8,lenrec) ++ call getword(seek,directive,8,lenrec) ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('ebias',directive,idum))then ++ ebias=dblstr(directive,lenrec,idum) ++ elseif(findstring('vmin',directive,idum))then ++ vmin=dblstr(directive,lenrec,idum) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"( ++ x 1x,'dynamics with path analysis selected', ++ x /,1x,'bias potential E_bias (kelvin)',f10.4, ++ x /,1x,'bias potential V_min (kelvin)',f10.4, ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'configuration catch radius (A)',f10.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'atom type to be tracked ',2x,a8, ++ x /,1x,'energy units ',2x,a8)") ++ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit ++ if(nebgo)write(nrite, ++ x "(1x,'NEB spring constant ',e12.4)")sprneb ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ endif ++ ++ return ++ end subroutine bpd_option ++ ++ subroutine tad_option ++ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, ++ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for TAD option ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 cunit ++ character*1 directive(lenrec) ++ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe ++ integer idnode,nblock,ntrack,blkout,keytol,idum ++ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units ++ ++ if(lminopt)call error(idnode,225) ++ if(lbpd)call error(idnode,2355) ++ lminopt=.true. ++ ltad=.true. ++ endtad=.false. ++ hyp_units=1.d0 ++ ++ do while(.not.endtad) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endtad',directive,idum))then ++ endtad=.true. ++ elseif(findstring('pre',directive,idum))then ++ prechk=.true. ++ if(findstring('false',directive,idum))prechk=.false. ++ elseif(findstring('all',directive,idum))then ++ tadall=.true. ++ if(findstring('false',directive,idum))tadall=.false. ++ elseif(findstring('units',directive,idum))then ++ hyp_units=energy_unit() ++ call getword(cunit,directive,8,lenrec) ++ call getword(cunit,directive,8,lenrec) ++ elseif(findstring('num_block',directive,idum))then ++ nblock=intstr(directive,lenrec,idum) ++ elseif(findstring('num_track',directive,idum))then ++ ntrack=intstr(directive,lenrec,idum) ++ elseif(findstring('blackout',directive,idum))then ++ blkout=intstr(directive,lenrec,idum) ++ elseif(findstring('catch_radius',directive,idum))then ++ catchrad=dblstr(directive,lenrec,idum) ++ elseif(findstring('neb_spring',directive,idum))then ++ sprneb=dblstr(directive,lenrec,idum) ++ elseif(findstring('deltad',directive,idum))then ++ deltad=dblstr(directive,lenrec,idum) ++ elseif(findstring('low_temp',directive,idum))then ++ tlow=dblstr(directive,lenrec,idum) ++ elseif(findstring('forc',directive,idum))then ++ keytol=0 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('ener',directive,idum))then ++ keytol=1 ++ opttol=dblstr(directive,lenrec,idum) ++ elseif(findstring('posi',directive,idum))then ++ keytol=2 ++ opttol=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'TAD dynamics controls' ++ x /,1x,'steps per time block ',i10, ++ x /,1x,'steps per tracking block ',i10, ++ x /,1x,'steps in blackout periods ',i10, ++ x /,1x,'configuration catch radius ',1p,e12.4, ++ x /,1x,'NEB spring constant ',e12.4, ++ x /,1x,'stopping parameter ',e12.4, ++ x /,1x,'target low temperature ',e12.4, ++ x /,1x,'minimisation tolerance ',e12.4, ++ x /,1x,'energy units ',2x,a8)") ++ x nblock,ntrack,blkout,catchrad,sprneb,deltad, ++ x tlow,opttol,cunit ++ if(prechk)write(nrite, ++ x "(1x,'transition prechecking option selected')") ++ if(tadall)write(nrite, ++ x "(1x,'option for all basins analysis selected')") ++ call print_optim(keytol) ++ ++ endif ++ ++c energy unit conversions ++ ++ sprneb=sprneb*hyp_units ++ if(keytol.lt.2)opttol=opttol*hyp_units ++ ++ return ++ end subroutine tad_option ++ ++ subroutine metadyn_option ++ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, ++ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, ++ x locpe_scale,ref_W_aug,h_aug,wt_Dt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for metadynamics option ++c copyright - daresbury laboratory ++c author - w. smith jan 2011 ++c ++c note: default values are set in metafreeze_module ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe ++ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int ++ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt ++ ++ lmetadyn=.true. ++ endmet=.false. ++ ++ do while(.not.endmet) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(record(1).eq.'#'.or.record(1).eq.'&')then ++c information only - skip record ++ cycle ++ elseif(findstring('endmet',directive,idum))then ++ endmet=.true. ++ elseif(findstring('ncolvar',directive,idum))then ++ ncolvar=intstr(directive,lenrec,idum) ++ elseif(findstring('lstein',directive,idum))then ++ lstein=.true. ++ if(findstring('false',directive,idum))lstein=.false. ++ elseif(findstring('ltet',directive,idum))then ++ ltet=.true. ++ if(findstring('false',directive,idum))ltet=.false. ++ elseif(findstring('lglobpe',directive,idum))then ++ lglobpe=.true. ++ if(findstring('false',directive,idum))lglobpe=.false. ++ elseif(findstring('llocpe',directive,idum))then ++ llocpe=.true. ++ if(findstring('false',directive,idum))llocpe=.false. ++ elseif(findstring('globpe_scale',directive,idum))then ++ globpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('locpe_scale',directive,idum))then ++ locpe_scale=dblstr(directive,lenrec,idum) ++ elseif(findstring('nq4',directive,idum))then ++ nq4=intstr(directive,lenrec,idum) ++ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('nq6',directive,idum))then ++ nq6=intstr(directive,lenrec,idum) ++ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! ++ elseif(findstring('ntet',directive,idum))then ++ ntet=intstr(directive,lenrec,idum) ++ elseif(findstring('meta_step_int',directive,idum))then ++ meta_step_int=intstr(directive,lenrec,idum) ++ elseif(findstring('ref_w_aug',directive,idum))then ++ ref_W_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('h_aug',directive,idum))then ++ h_aug=dblstr(directive,lenrec,idum) ++ elseif(findstring('hkey',directive,idum))then ++ hkey=intstr(directive,lenrec,idum) ++ elseif(findstring('wt_dt',directive,idum))then ++ wt_dt=dblstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'metadynamics controls' ++ x /,1x,'total number of collective variables',i10, ++ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, ++ x /,1x,'tetrahedral parameters option (zeta)',l10, ++ x /,1x,'global potential parameter option ',l10, ++ x /,1x,'local potential parameter option ',l10, ++ x /,1x,'global potential param. scale factor',e12.4, ++ x /,1x,'local potential param. scale factor ',e12.4)") ++ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale ++ ++ write(nrite, ++ x "( 1x,'number of Q4 atom pair types ',i10, ++ x /,1x,'number of Q6 atom pair types ',i10, ++ x /,1x,'number of zeta atom triplet types ',i10)") ++ x nq4,nq6,ntet ++ ++ write(nrite, ++ x "( 1x,'gaussian deposition interval ',i10, ++ x /,1x,'reference gaussian height ',e12.4, ++ x /,1x,'gaussian width parameter ',e12.4, ++ x /,1x,'height control key ',i10, ++ x /,1x,'well-tempered control parameter ',e12.4)") ++ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt ++ ++ endif ++ ++ return ++ end subroutine metadyn_option ++ ++ subroutine ewald_selection ++ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, ++ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the ewald method and reading ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lhke,lspme,lewald,lcut,lforc,kill,safe ++ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum ++ integer kmaxpow2 ++ real(8) alpha,rcut,eps,tol,fac,tol1 ++ ++ lhke=findstring('hke',directive,idum) ++ lspme=findstring('spme',directive,idum) ++ lewald=findstring('ewald',directive,idum) ++ if(lewald)keyfce=2 ++ if(lspme)keyfce=12 ++ if(lhke)keyfce=14 ++ if(idnode.eq.0)open(nconf,file='CONFIG') ++ call getrec(safe,idnode,nconf) ++ call getrec(safe,idnode,nconf) ++ imcon=intstr(record,lenrec,idum) ++ imcon=intstr(record,lenrec,idum) ++ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then ++ ++ call error(idnode,-180) ++ kill=.true. ++ ++ endif ++ ++ if(findstring('precision',directive,idum))then ++ ++ eps=dblstr(directive,lenrec,idum) ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps ++ ++ if(lhke)then ++ ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ if(nlatt.eq.0)nlatt=1 ++ if(nhko.eq.0)nhko=1 ++ ++ endif ++ ++ if(.not.lcut)then ++ call error(idnode,-433) ++ kill=.true. ++ else ++ ++c retreive cell vectors ++ ++ call getrec(safe,idnode,nconf) ++ cell(1)=dblstr(record,lenrec,idum) ++ cell(2)=dblstr(record,lenrec,idum) ++ cell(3)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(4)=dblstr(record,lenrec,idum) ++ cell(5)=dblstr(record,lenrec,idum) ++ cell(6)=dblstr(record,lenrec,idum) ++ call getrec(safe,idnode,nconf) ++ cell(7)=dblstr(record,lenrec,idum) ++ cell(8)=dblstr(record,lenrec,idum) ++ cell(9)=dblstr(record,lenrec,idum) ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(directive,lenrec,idum) ++ kmax1=intstr(directive,lenrec,idum) ++ kmax2=intstr(directive,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=min(intstr(directive,lenrec,idum),3) ++ nlatt=min(intstr(directive,lenrec,idum),2) ++ ++ else ++ ++ kmax3=intstr(directive,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c if spme double kmax and set to next power of 2, with current upper ++c limit of 512. ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax1=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax2=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ enddo ++ kmax3=2 * kmaxpow2 ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ close(nconf) ++ ++ if(lspme)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : SPME ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1/2,kmax2/2,kmax3/2 ++ ++ elseif(lhke)then ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 ',2i5)") ++ x alpha,kmax1,kmax2 ++ ++ write(nrite, ++ x "(1x,'HKE expansion order ',7x,i10, ++ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt ++ ++ else ++ ++ write(nrite, ++ x "(/,1x,'Electrostatics : Ewald sum ')") ++ ++ write(nrite, ++ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, ++ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") ++ x alpha,kmax1,kmax2,kmax3 ++ ++ endif ++ ++ endif ++ ++ if(lspme)then ++ ++c Initialize fft tables ++ ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (fplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++CFFTW ++CFFTW call fftw3d_f77_create_plan ++CFFTW x (bplan,kmaxd,kmaxe,kmaxf, ++CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) ++ ++CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CSGIC x dummy,1,1,ffttable,dummy,dummy ) ++ ++CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, ++CCRAY x dummy,1,1,ffttable,dummy,dummy ) ++ ++ endif ++ ++ if(lspme)then ++ ++ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ elseif(lhke)then ++ ++ if(kmax2.gt.kmaxb)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ else ++ ++ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then ++ ++ kill=.true. ++ call error(idnode,-185) ++ ++ endif ++ ++ endif ++ ++ if(lforc)then ++ call error(idnode,-416) ++ kill=.true. ++ endif ++ lforc=.true. ++ ++ return ++ end subroutine ewald_selection ++ ++ subroutine print_optim(keytol) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing the optimisation option ++c the required parameters ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer keytol ++ ++ if(keytol.eq.0)then ++ write(nrite, ++ x "(1x,'convergence to minimum force selected')") ++ elseif(keytol.eq.1)then ++ write(nrite, ++ x "(1x,'convergence to minimum energy selected')") ++ else ++ write(nrite, ++ x "(1x,'convergence to minimum position selected')") ++ endif ++ ++ return ++ end subroutine print_optim ++ ++ function energy_unit() ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for assigning energy conversion factors ++c copyright - daresbury laboratory ++c author - w. smith feb 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idum ++ real(8) energy_unit ++ ++ energy_unit=1.d0 ++ if(findstring('ev',record,idum))then ++ energy_unit=9648.530821d0 ++ elseif(findstring('kev',record,idum))then ++ energy_unit=9648530.821d0 ++ elseif(findstring('kcal',record,idum))then ++ energy_unit=418.4d0 ++ elseif(findstring('kj',record,idum))then ++ energy_unit=1.d2 ++ elseif(findstring('k',record,idum))then ++ energy_unit=boltz ++ endif ++ ++ return ++ end function energy_unit ++ ++ subroutine solvation_option ++ x (directive,lsolva,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for solvation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,endsol,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ endsol=.false. ++ ++ nsolva=intstr(directive,lenrec,idum) ++ isolva=intstr(directive,lenrec,idum) ++ ++ if(nsolva.eq.0.and.isolva.eq.0)then ++ ++ do while(.not.endsol) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endsol',directive,idum))then ++ endsol=.true. ++ elseif(findstring('enddec',directive,idum))then ++ endsol=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=max(intstr(directive,lenrec,idum),1) ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'solvation calculation selected', ++ x /,1x,'start of solvation calculation ',i10, ++ x /,1x,'solvation calculation interval ',i10)") ++ x nsolva,isolva ++ ++ endif ++ ++ return ++ end subroutine solvation_option ++ ++ subroutine free_energy_option(directive,lfree,lfrmas,idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for free energy option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lfree,lfrmas,endfre,safe ++ integer idnode,idum ++ ++ mfree=1 ++ kfree=1 ++ lfree=.true. ++ lfrmas=.false. ++ endfre=.false. ++ ++ do while(.not.endfre) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endfre',directive,idum))then ++ endfre=.true. ++ elseif(findstring('start',directive,idum))then ++ nfrn=intstr(directive,lenrec,idum) ++ elseif(findstring('interval',directive,idum))then ++ ifrn=intstr(directive,lenrec,idum) ++ elseif(findstring('lambda',directive,idum))then ++ pfree=dblstr(directive,lenrec,idum) ++ elseif(findstring('mix',directive,idum))then ++ mfree=intstr(directive,lenrec,idum) ++ elseif(findstring('expo',directive,idum))then ++ kfree=intstr(directive,lenrec,idum) ++ elseif(findstring('reset_mass',directive,idum))then ++ lfrmas=.true. ++ if(findstring('false',directive,idum))lfrmas=.false. ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(mfree.eq.1)kfree=1 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'free energy option selected', ++ x /,1x,'start of free energy calculation ',i10, ++ x /,1x,'sampling interval ',i10, ++ x /,1x,'free energy parameter (lambda) ',f10.3, ++ x /,1x,'mixing rule selected ',i10, ++ x /,1x,'mixing rule exponent ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10, ++ x /,1x,'mass scaling option ',l10)") ++ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas ++ ++ endif ++ ++c define free energy scaling parameters ++ ++ call freegen() ++ ++ return ++ end subroutine free_energy_option ++ ++ subroutine excitation_option ++ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for excitation option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lexcite,lghost,endexc,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lexcite=.true. ++ endexc=.false. ++ ++ do while(.not.endexc) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endexc',directive,idum))then ++ endexc=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'excitation option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,ind_fre ++ ++ endif ++ ++ return ++ end subroutine excitation_option ++ ++ subroutine switching_option ++ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading parameters for switching option ++c copyright - daresbury laboratory ++c authors - w. smith and p.-a. cazade jul 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 directive(lenrec) ++ logical lsolva,lswitch,lghost,endswi,safe ++ integer idnode,nsolva,isolva,idum ++ ++ lsolva=.true. ++ lghost=.true. ++ lswitch=.true. ++ endswi=.false. ++ niswitch=0 ++ ++ do while(.not.endswi) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abort_control_read(1,idnode,nread) ++ call lowcase(record,lenrec) ++ call strip(record,lenrec) ++ call copystring(record,directive,lenrec) ++ ++ if(findstring('endswi',directive,idum))then ++ endswi=.true. ++ elseif(findstring('start',directive,idum))then ++ nsolva=intstr(directive,lenrec,idum) ++ elseif(findstring('inter',directive,idum))then ++ isolva=intstr(directive,lenrec,idum) ++ elseif(findstring('period',directive,idum))then ++ niswitch=max(intstr(directive,lenrec,idum),2) ++ elseif(findstring('system_a',directive,idum))then ++ ind_fre(1)=intstr(directive,lenrec,idum) ++ ind_fre(2)=intstr(directive,lenrec,idum) ++ elseif(findstring('system_b',directive,idum))then ++ ind_fre(3)=intstr(directive,lenrec,idum) ++ ind_fre(4)=intstr(directive,lenrec,idum) ++ endif ++ ++ enddo ++ ++ if(niswitch.eq.0)niswitch=nsolva ++ nswitch=nsolva ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,1x,'switching option selected', ++ x /,1x,'energy decomposition start ',i10, ++ x /,1x,'energy decomposition interval ',i10, ++ x /,1x,'switching period ',i10, ++ x /,1x,'system A first atom ',i10, ++ x /,1x,'system A last atom ',i10, ++ x /,1x,'system B first atom ',i10, ++ x /,1x,'system B last atom ',i10)") ++ x nsolva,isolva,niswitch,ind_fre ++ ++ endif ++ ++ return ++ end subroutine switching_option ++ ++ end module define_system_module ++ +diff -urN dl_class_1.9.orig/srcmod/dihedral_module.f dl_class_1.9/srcmod/dihedral_module.f +--- dl_class_1.9.orig/srcmod/dihedral_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dihedral_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1121 @@ ++ module dihedral_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining dihedral potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted - p.-a. cazade oct 2007 : solvation, free energy, etc. ++c adapted - w.smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmdih(:,:) ++ integer, allocatable :: listdih(:,:) ++ integer, allocatable :: numdih(:),keydih(:),lstdih(:,:) ++ ++ save prmdih,listdih,numdih,keydih,lstdih ++ ++ contains ++ ++ subroutine alloc_dih_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmdih(mxtdih,mxpdih),stat=fail(1)) ++ allocate (numdih(mxtmls),stat=fail(2)) ++ allocate (keydih(mxtdih),stat=fail(3)) ++ allocate (lstdih(mxtdih,4),stat=fail(4)) ++ allocate (listdih(mxdihd,5),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1011) ++ enddo ++ ++ do i=1,mxtmls ++ numdih(i)=0 ++ enddo ++ ++ end subroutine alloc_dih_arrays ++ ++ subroutine define_dihedrals ++ x (safe,idnode,itmols,ndihed,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining dihedral angles ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,ndihed,nsite,ntmp,idih,idih1,i ++ integer iatm1,iatm2,iatm3,iatm4,idum,isite1,isite2,isite3 ++ integer isite4,ia,ja ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numdih(itmols)=numdih(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of dihedral angles', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,/,1x,'dihedral angle details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'index',5x,'f-const',7x,'angle', ++ x 8x,'trig',4x,'1-4 elec',5x,'1-4 vdw',/)") ++ endif ++ ++ idih1=numdih(itmols) ++ do idih=1,idih1 ++ ++c read dihedral bond angle potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ iatm4=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ isite4=nsite-numsit(itmols)+iatm4 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3)*lfzsit(isite4).ne.0)then ++ ++ numdih(itmols)=numdih(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ ndihed=ndihed+1 ++ ++ if(ndihed.gt.mxtdih)call error(idnode,60) ++ ++ if(keyword(1:4).eq.'cos ')then ++ keydih(ndihed)=1 ++ elseif(keyword(1:4).eq.'harm')then ++ keydih(ndihed)=2 ++ elseif(keyword(1:4).eq.'hcos')then ++ keydih(ndihed)=3 ++ elseif(keyword(1:4).eq.'cos3')then ++ keydih(ndihed)=4 ++ elseif(keyword(1:4).eq.'ryck')then ++ keydih(ndihed)=5 ++ elseif(keyword(1:4).eq.'rbf')then ++ keydih(ndihed)=6 ++ elseif(keyword(1:4).eq.'opls')then ++ keydih(ndihed)=7 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,448) ++ endif ++ ++ lstdih(ndihed,1)=iatm1 ++ lstdih(ndihed,2)=iatm2 ++ lstdih(ndihed,3)=iatm3 ++ lstdih(ndihed,4)=iatm4 ++ prmdih(ndihed,1)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,2)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,3)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,4)=dblstr(record,lenrec,idum) ++ prmdih(ndihed,5)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstdih(ndihed,ia),ia=1,4), ++ x (prmdih(ndihed,ja),ja=1,mxpdih) ++ ++c convert energies to internal units and angles to radians ++ ++ prmdih(ndihed,1)=prmdih(ndihed,1)*engunit ++ ++ if(keydih(ndihed).eq.4)then ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit ++ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit ++ ++ elseif(keydih(ndihed).eq.7)then ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit ++ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit ++ prmdih(ndihed,4)=prmdih(ndihed,4)*engunit ++ prmdih(ndihed,5)=prmdih(ndihed,5)*(pi/180.d0) ++ ++ else ++ ++ prmdih(ndihed,2)=prmdih(ndihed,2)*(pi/180.d0) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_dihedrals ++ ++ subroutine dihfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntdihd,keyfce, ++ x dlrpot,epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe, ++ x virdih,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating dihedral energy and force ++c terms in molecular dynamics. ++c ++c version 3: scale factors for reduces electrostatic and vdw ++c 1-4 interactions. ++c ++c NOTE: assumes 1-4 interactions are in the exclude list ++c ++c block as opposed to stride version ++c ++c copyright - daresbury laboratory ++c author - w. smith mar 1992 ++c modified - t. forester dec 1993 ++c modified - t. forester jun 1995 - stress tensor added ++c modified - a. smondyrev may 2000 - ryckaert-bellemans potentials ++c modified - p.-a. cazade oct 2007 - solvation etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect ++ logical idrive,jdrive,kdrive,ldrive ++ integer i,k,ii,kk,ntdihd,idnode,mxnode,idih1,idih2,ia,ib ++ integer ic,id,imcon,ka,kb,l,keyfce,fail1,fail2,fail3,kkk ++ real(8) phi,twopi,rtwopi,dterm,srpot ++ real(8) engdih,virdih,engc14,engs14,virs14,rrbc,xab,yab,erc,fer ++ real(8) zab,xbc,ybc,zbc,xcd,ycd,zcd,pbx,pby,pbz,pb2,rpb1,rpb2 ++ real(8) pcx,pcy,pcz,pc2,rpc1,rpc2,pbpc,cosp,sinp,rsinp,exp1 ++ real(8) gamma,fax,fay,faz,fcx,fcy,fcz,fb1x,fb1y,fb1z,fd1x,fd1y ++ real(8) fd1z,scale,xad,yad,zad,rad,chgprd,coul,fcoul,fx,fy,fz ++ real(8) ppp,dlrpot,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,epsq,engcpe ++ real(8) vircpe,rcut,rvdw,engsrp,virsrp,xac,yac,zac,vcon,fcon ++ real(8) virc14,b0,rfld0,rfld1,rfld2,alpha,a1,a2,a3,a4,a5,pp,tt ++ real(8) cou14_vir,vdw14_vir,strs(6),strs_loc(6) ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) ++ real(8), allocatable :: xdcd(:),ydcd(:),zdcd(:) ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ data fail1,fail2,fail3/0,0,0/ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) ++ allocate (xdcd(msbad),ydcd(msbad),zdcd(msbad),stat=fail3) ++ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) ++ x call error(idnode,1060) ++ ++ twopi=2.d0*pi ++ rtwopi=1.d0/twopi ++ safe=.true. ++ ++c check size of work arrays ++ ++ if((ntdihd-mxnode+1)/mxnode.gt.msbad) call error(idnode,421) ++ ++c block indices ++ ++ idih1=(idnode*ntdihd)/mxnode+1 ++ idih2=((idnode+1)*ntdihd)/mxnode ++ ++c initialise accumulators ++ ++ engdih=0.d0 ++ virdih=0.d0 ++ dih_fre=0.d0 ++ dih_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(3)=.true. ++ dih_sol(:)=0.d0 ++ if(lexcite)dih_exc(:)=0.d0 ++ ++ endif ++ ++ if(keyfce/2.eq.4)then ++ ++c constant terms for shifted coulombic potential ++ ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut ++ ++ elseif(keyfce/2.eq.5)then ++ ++c constant terms for reaction field potential ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut-rfld0*rcut ++ vcon=vcon+rfld2*rcut**2-rfld1 ++ ++ endif ++ ++c calculate bond vectors ++ ++ ii=0 ++ do i=idih1,idih2 ++ ++ ii=ii+1 ++ ++c indices of bonded atoms ++ ++ ia=listdih(ii,2) ++ ib=listdih(ii,3) ++ ic=listdih(ii,4) ++ id=listdih(ii,5) ++ ++c define components of bond vectors ++ ++ xdab(ii)=xxx(ia)-xxx(ib) ++ ydab(ii)=yyy(ia)-yyy(ib) ++ zdab(ii)=zzz(ia)-zzz(ib) ++ ++ xdbc(ii)=xxx(ib)-xxx(ic) ++ ydbc(ii)=yyy(ib)-yyy(ic) ++ zdbc(ii)=zzz(ib)-zzz(ic) ++ ++ xdcd(ii)=xxx(ic)-xxx(id) ++ ydcd(ii)=yyy(ic)-yyy(id) ++ zdcd(ii)=zzz(ic)-zzz(id) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) ++ call images(imcon,0,1,ii,cell,xdcd,ydcd,zdcd) ++ ++c zero dihedral energy accumulator ++ ++ engdih=0.d0 ++ virdih=0.d0 ++ ++c zero scaled 1-4 electrostatic and short range potential accumulators ++ ++ engc14=0.d0 ++ virc14=0.d0 ++ engs14=0.d0 ++ virs14=0.d0 ++ vdw14_vir=0.d0 ++ cou14_vir=0.d0 ++ ++c loop over all specified dihedrals ++ ++ ii=0 ++ do i=idih1,idih2 ++ ++c define components of bond vectors ++ ++ ii=ii+1 ++ ++ xab=xdab(ii) ++ yab=ydab(ii) ++ zab=zdab(ii) ++ ++ xbc=xdbc(ii) ++ ybc=ydbc(ii) ++ zbc=zdbc(ii) ++ rrbc=1.d0/sqrt(xbc*xbc+ybc*ybc+zbc*zbc) ++ ++ xcd=xdcd(ii) ++ ycd=ydcd(ii) ++ zcd=zdcd(ii) ++ ++ xac=xab+xbc ++ yac=yab+ybc ++ zac=zab+zbc ++ ++c construct first dihedral vector ++ ++ pbx=yab*zbc-zab*ybc ++ pby=zab*xbc-xab*zbc ++ pbz=xab*ybc-yab*xbc ++ pb2=pbx*pbx+pby*pby+pbz*pbz ++ rpb1=1.d0/sqrt(pb2) ++ rpb2=rpb1*rpb1 ++ ++c construct second dihedral vector ++ ++ pcx=ybc*zcd-zbc*ycd ++ pcy=zbc*xcd-xbc*zcd ++ pcz=xbc*ycd-ybc*xcd ++ pc2=pcx*pcx+pcy*pcy+pcz*pcz ++ rpc1=1.d0/sqrt(pc2) ++ rpc2=rpc1*rpc1 ++ ++c determine dihedral angle ++ ++ pbpc=pbx*pcx+pby*pcy+pbz*pcz ++ cosp=pbpc*rpb1*rpc1 ++ sinp=(xbc*(pcy*pbz-pcz*pby)+ybc*(pbx*pcz-pbz*pcx)+ ++ x zbc*(pcx*pby-pcy*pbx))*(rpb1*rpc1*rrbc) ++ ++ phi=atan2(sinp,cosp) ++ ++c avoid singularity in sinp ++ ++ sinp=sign(max(1.d-8,abs(sinp)),sinp) ++ rsinp=1.d0/sinp ++ ++c selection of potential energy function type ++ ++ kk=listdih(ii,1) ++ ++c calculate potential energy and scalar force term ++ ++ if(keydih(kk).eq.1)then ++ ++c key=1 for torsion dihedral potential ++ ++ dterm=prmdih(kk,1)*(1.d0+cos(prmdih(kk,3)*phi- ++ x prmdih(kk,2))) ++ gamma=-rpb1*rpc1*rsinp*prmdih(kk,1)*prmdih(kk,3)* ++ x sin(prmdih(kk,3)*phi-prmdih(kk,2)) ++ ++ else if(keydih(kk).eq.2)then ++ ++c key=2 for harmonic improper dihedral ++ ++ phi=phi-prmdih(kk,2) ++ phi=phi-nint(phi*rtwopi)*twopi ++ dterm=0.5d0*prmdih(kk,1)*(phi*phi) ++ gamma=rpb1*rpc1*rsinp*prmdih(kk,1)*phi ++ ++ else if(keydih(kk).eq.3)then ++ ++c key=3 for harmonic cosine dihedral ++ ++ dterm=0.5d0*prmdih(kk,1)*(cos(phi)- ++ x cos(prmdih(kk,2)))**2 ++ gamma=-rpb1*rpc1*prmdih(kk,1)*(cos(phi)-cos(prmdih(kk,2))) ++ ++ else if(keydih(kk).eq.4)then ++ ++c key=4 for 3-term cosine dihedral ++ ++ dterm=0.5d0*(prmdih(kk,1)*(1.d0+cos(phi))+ ++ x prmdih(kk,2)*(1.d0-cos(2.d0*phi))+prmdih(kk,3)* ++ x (1.d0+cos(3.d0*phi))) ++ gamma=-rpb1*rpc1*rsinp*0.5d0*(prmdih(kk,1)*sin(phi)- ++ x 2.d0*prmdih(kk,2)*sin(2.d0*phi)+3.d0*prmdih(kk,3)* ++ x sin(3.d0*phi)) ++ ++ else if(keydih(kk).eq.5)then ++ ++c key=5 for ryckaert-bellemans potential ++c chem.phys.lett., vol.30, p.123, 1975. ++c ATTENTION !!! Modified to have trans configuration ++c correspond to phi=180 rather than ++c phi=0 as in original form. ++ ++ dterm=prmdih(kk,1)*(1.116d0-1.462d0*cos(phi)- ++ x 1.578d0*(cos(phi))**2+0.368d0*(cos(phi))**3+ ++ x 3.156d0*(cos(phi))**4+3.788d0*(cos(phi))**5) ++ gamma=prmdih(kk,1)*(1.462d0+3.156d0*cos(phi)- ++ x 1.104d0*(cos(phi))**2-12.624d0*(cos(phi))**3- ++ x 18.94d0*(cos(phi))**4)*rpb1*rpc1 ++ ++ else if(keydih(kk).eq.6)then ++ ++c key=6 for fluorinated ryckaert-bellemans potential ++c Rice at al., JCP 104, 2101, (1996). ++ ++ dterm=prmdih(kk,1)*(3.55d0-2.78d0*cos(phi)- ++ x 3.56d0*(cos(phi))**2-1.64d0*(cos(phi))**3+ ++ x 7.13d0*(cos(phi))**4+12.84d0*(cos(phi))**5+ ++ x 9.67d0*exp(-56.d0*(phi-pi)**2)) ++ gamma=(prmdih(kk,1)*(2.78d0+7.12d0*cos(phi)+ ++ x 4.92d0*(cos(phi))**2-28.52d0*(cos(phi))**3- ++ x 64.2d0*(cos(phi))**4)-1083.04d0*(phi-pi)* ++ x exp(-56.0*(phi-pi)**2))*rpb1*rpc1 ++ ++ else if(keydih(kk).eq.7)then ++ ++c key=7 for opls cosine dihedral ++ ++ phi=phi-prmdih(kk,5) ++ dterm=prmdih(kk,1)+0.5d0*(prmdih(kk,2)* ++ x (1.d0+cos(phi))+prmdih(kk,3)*(1.d0-cos(2.d0*phi))+ ++ x prmdih(kk,4)*(1.d0+cos(3.d0*phi))) ++ gamma=-0.5d0*(prmdih(kk,2)*sin(phi)-2.d0*prmdih(kk,3)* ++ x sin(2.d0*phi)+3.d0*prmdih(kk,4)*sin(3.d0*phi))*rpb1* ++ x rpc1*rsinp ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ dterm=0.d0 ++ gamma=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listdih(ii,2) ++ ib=listdih(ii,3) ++ ic=listdih(ii,4) ++ id=listdih(ii,5) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ldrive=driven(ltype(id)) ++ ++ endif ++ ++c set selection control for angle potential ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)then ++ dih_exc(atmolt(ia))=dih_exc(atmolt(ia))+dterm ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ dih_fre=dih_fre-dterm ++ dterm=lambda1*dterm ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ dih_fre=dih_fre+dterm ++ dterm=lambda2*dterm ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy ++ ++ engdih=engdih+dterm ++ ++c calculate solvation energy for dihedral term ++ ++ if(lsolva)then ++ dih_sol(atmolt(ia))=dih_sol(atmolt(ia))+dterm ++ endif ++ ++c calculate atomic forces for dihedral term ++ ++ fax=gamma*((-pcy*zbc+pcz*ybc)-pbpc*rpb2*(-pby*zbc+pbz*ybc)) ++ fay=gamma*(( pcx*zbc-pcz*xbc)-pbpc*rpb2*( pbx*zbc-pbz*xbc)) ++ faz=gamma*((-pcx*ybc+pcy*xbc)-pbpc*rpb2*(-pbx*ybc+pby*xbc)) ++ ++ fcx=gamma*((-pcy*zab+pcz*yab)-pbpc*rpb2*(-pby*zab+pbz*yab)) ++ fcy=gamma*(( pcx*zab-pcz*xab)-pbpc*rpb2*( pbx*zab-pbz*xab)) ++ fcz=gamma*((-pcx*yab+pcy*xab)-pbpc*rpb2*(-pbx*yab+pby*xab)) ++ ++ fb1x=gamma*((-pby*zcd+pbz*ycd)-pbpc*rpc2*(-pcy*zcd+pcz*ycd)) ++ fb1y=gamma*(( pbx*zcd-pbz*xcd)-pbpc*rpc2*( pcx*zcd-pcz*xcd)) ++ fb1z=gamma*((-pbx*ycd+pby*xcd)-pbpc*rpc2*(-pcx*ycd+pcy*xcd)) ++ ++ fd1x=gamma*((-pby*zbc+pbz*ybc)-pbpc*rpc2*(-pcy*zbc+pcz*ybc)) ++ fd1y=gamma*(( pbx*zbc-pbz*xbc)-pbpc*rpc2*( pcx*zbc-pcz*xbc)) ++ fd1z=gamma*((-pbx*ybc+pby*xbc)-pbpc*rpc2*(-pcx*ybc+pcy*xbc)) ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)-fax-fcx+fb1x ++ fyy(ib)=fyy(ib)-fay-fcy+fb1y ++ fzz(ib)=fzz(ib)-faz-fcz+fb1z ++ ++ fxx(ic)=fxx(ic)+fcx-fb1x-fd1x ++ fyy(ic)=fyy(ic)+fcy-fb1y-fd1y ++ fzz(ic)=fzz(ic)+fcz-fb1z-fd1z ++ ++ fxx(id)=fxx(id)+fd1x ++ fyy(id)=fyy(id)+fd1y ++ fzz(id)=fzz(id)+fd1z ++ ++c stress tensor for dihedral term ++ ++ strs(1)=strs(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x ++ strs(2)=strs(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x ++ strs(3)=strs(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x ++ strs(4)=strs(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y ++ strs(5)=strs(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z ++ strs(6)=strs(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy (no virial) ++ ++ eng_loc=eng_loc+dterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)-fax-fcx+fb1x ++ fyy_loc(ib)=fyy_loc(ib)-fay-fcy+fb1y ++ fzz_loc(ib)=fzz_loc(ib)-faz-fcz+fb1z ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx-fb1x-fd1x ++ fyy_loc(ic)=fyy_loc(ic)+fcy-fb1y-fd1y ++ fzz_loc(ic)=fzz_loc(ic)+fcz-fb1z-fd1z ++ ++ fxx_loc(id)=fxx_loc(id)+fd1x ++ fyy_loc(id)=fyy_loc(id)+fd1y ++ fzz_loc(id)=fzz_loc(id)+fd1z ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x ++ strs_loc(2)=strs_loc(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x ++ strs_loc(3)=strs_loc(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x ++ strs_loc(4)=strs_loc(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y ++ strs_loc(5)=strs_loc(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z ++ strs_loc(6)=strs_loc(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z ++ ++ endif ++ ++c calculate 1-4 dihedral interactions (coulombic and short ranged) ++c assumes 1-4 interactions are in the exclude list ++ ++ kk=listdih(ii,1) ++ ++c bypass OPLS 1-4 terms (not present) ++ ++ if(keydih(kk).ne.7)then ++ ++c 1-4 electrostatics : adjust by weighting factor ++ ++ scale=prmdih(kk,4) ++ ++ xad=xac+xcd ++ yad=yac+ycd ++ zad=zac+zcd ++ ++ rad=sqrt(xad**2+yad**2+zad**2) ++ ++c scaled charge product*dielectric ++ ++ chgprd=scale*chge(ia)*chge(id)*r4pie0 ++ coul=0.d0 ++ fcoul=0.d0 ++ ++c truncation of potential for all schemes except ewald sum ++ ++ if(abs(chgprd).gt.1.d-10.and.keyfce.gt.0)then ++ ++c electrostatics by ewald sum ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6.or.keyfce/2.eq.7)then ++ ++ coul=chgprd/(epsq*rad) ++ fcoul=coul/(rad**2) ++ ++c distance dependent dielectric ++ ++ elseif(rcut.gt.rad)then ++ ++ if(keyfce/2.eq.2)then ++ ++ coul=chgprd/(epsq*rad**2) ++ fcoul=2.0d0*coul/(rad**2) ++ ++c unmodified coulombic ++ ++ else if(keyfce/2.eq.3)then ++ ++ coul=chgprd/(epsq*rad) ++ fcoul=coul/(rad**2) ++ ++c truncated and shifted coulombic ++ ++ else if(keyfce/2.eq.4)then ++ ++ tt=1.d0/(1.d0+pp*alpha*rad) ++ exp1=exp(-(alpha*rad)**2) ++ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad ++ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 ++ ++c calculate potential energy and forces ++ ++ coul=chgprd*(erc-vcon+fcon*(rad-rcut))/epsq ++ fcoul=chgprd*(fer-fcon/rad)/epsq ++ ++c reaction field ++ ++ else if(keyfce/2.eq.5)then ++ ++ tt=1.d0/(1.d0+pp*alpha*rad) ++ exp1=exp(-(alpha*rad)**2) ++ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad ++ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 ++ coul=chgprd*(erc-vcon+fcon*(rad-rcut)+ ++ x rfld2*rad*rad-rfld1) ++ fcoul=chgprd*(fer-fcon/rad-rfld0) ++ ++ elseif(keyfce/2.eq.0)then ++ ++ coul=0.d0 ++ fcoul=0.d0 ++ ++ else ++ ++ call error(idnode,446) ++ ++ endif ++ ++ endif ++ ++c set selection control for coulombic 1-4 terms ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then ++ ++c set selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(id).eq.0) ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou14_vir=cou14_vir+fcoul*rad**2 ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou14_vir=cou14_vir-fcoul*rad**2 ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c electrostatic energy and virial for 1-4 term ++ ++ engc14=engc14+coul ++ virc14=virc14-fcoul*rad**2 ++ ++c solvation energy for coulombic 1-4 term ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c coulombic force for 1-4 term ++ ++ fx=fcoul*xad ++ fy=fcoul*yad ++ fz=fcoul*zad ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(id)=fxx(id)-fx ++ fyy(id)=fyy(id)-fy ++ fzz(id)=fzz(id)-fz ++ ++c stress tensor for coulombic 1-4 term ++ ++ strs(1)=strs(1)+xad*fx ++ strs(2)=strs(2)+xad*fy ++ strs(3)=strs(3)+xad*fz ++ strs(4)=strs(4)+yad*fy ++ strs(5)=strs(5)+yad*fz ++ strs(6)=strs(6)+zad*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rad**2 ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(id)=fxx_loc(id)-fx ++ fyy_loc(id)=fyy_loc(id)-fy ++ fzz_loc(id)=fzz_loc(id)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xad*fx ++ strs_loc(2)=strs_loc(2)+xad*fy ++ strs_loc(3)=strs_loc(3)+xad*fz ++ strs_loc(4)=strs_loc(4)+yad*fy ++ strs_loc(5)=strs_loc(5)+yad*fz ++ strs_loc(6)=strs_loc(6)+zad*fz ++ ++ endif ++ ++ endif ++ ++c 1-4 short ranged : adjust by weighting factor ++ ++ scale=prmdih(kk,5) ++ gamma=0.d0 ++ ++ if(mod(keyfce,2).eq.1)then ++ ++c atomic and potential function indices ++ ++ ka=max(ltype(ia),ltype(id)) ++ kb=min(ltype(ia),ltype(id)) ++ k=lstvdw((ka*(ka-1))/2+kb) ++ ++ if(abs(scale*vvv(1,k)).gt.1.d-10)then ++ ++c apply truncation of potential ++ ++ if(rvdw.gt.rad)then ++ ++c determine interpolation panel for force arrays ++ ++ l=int(rad/dlrpot) ++ ppp=rad/dlrpot-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ++ srpot=scale*(t1+(t2-t1)*ppp*0.5d0) ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ ++ gamma=scale*(t1+(t2-t1)*ppp*0.5d0)/(rad**2) ++ ++c set selection control for short ranged 1-4 terms ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then ++ ++c set selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(id).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+srpot ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre-srpot ++ vdw14_vir=vdw14_vir+gamma*rad**2 ++ srpot=lambda1*srpot ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre+srpot ++ vdw14_vir=vdw14_vir-gamma*rad**2 ++ srpot=lambda2*srpot ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c short ranged energy and virial for 1-4 term ++ ++ engs14=engs14+srpot ++ virs14=virs14-gamma*rad**2 ++ ++c solvation energy for short ranged 1-4 term ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+srpot ++ ++c short ranged forces for 1-4 term ++ ++ fx=gamma*xad ++ fy=gamma*yad ++ fz=gamma*zad ++ ++ fxx(ia)=fxx(ia)+fx ++ fyy(ia)=fyy(ia)+fy ++ fzz(ia)=fzz(ia)+fz ++ ++ fxx(id)=fxx(id)-fx ++ fyy(id)=fyy(id)-fy ++ fzz(id)=fzz(id)-fz ++ ++c stress tensor for short ranged 1-4 term ++ ++ strs(1)=strs(1)+xad*fx ++ strs(2)=strs(2)+xad*fy ++ strs(3)=strs(3)+xad*fz ++ strs(4)=strs(4)+yad*fy ++ strs(5)=strs(5)+yad*fz ++ strs(6)=strs(6)+zad*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+srpot ++ vir_loc=vir_loc-gamma*rad**2 ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fx ++ fyy_loc(ia)=fyy_loc(ia)+fy ++ fzz_loc(ia)=fzz_loc(ia)+fz ++ ++ fxx_loc(id)=fxx_loc(id)-fx ++ fyy_loc(id)=fyy_loc(id)-fy ++ fzz_loc(id)=fzz_loc(id)-fz ++ ++c stress tensor for short ranged 1-4 term ++ ++ strs_loc(1)=strs_loc(1)+xad*fx ++ strs_loc(2)=strs_loc(2)+xad*fy ++ strs_loc(3)=strs_loc(3)+xad*fz ++ strs_loc(4)=strs_loc(4)+yad*fy ++ strs_loc(5)=strs_loc(5)+yad*fz ++ strs_loc(6)=strs_loc(6)+zad*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c sum contributions to potentials ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engdih ++ buffer(2)=engc14 ++ buffer(3)=virc14 ++ buffer(4)=engs14 ++ buffer(5)=virs14 ++ buffer(6)=dih_fre ++ buffer(7)=dih_vir ++ buffer(8)=vdw14_vir ++ buffer(9)=cou14_vir ++ call gdsum(buffer(1),9,buffer(10)) ++ engdih=buffer(1) ++ engc14=buffer(2) ++ virc14=buffer(3) ++ engs14=buffer(4) ++ virs14=buffer(5) ++ dih_fre=buffer(6) ++ dih_vir=buffer(7) ++ vdw14_vir=buffer(8) ++ cou14_vir=buffer(9) ++ ++ if(lsolva)then ++ ++ call gdsum(dih_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(dih_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ engcpe=engcpe+engc14 ++ vircpe=vircpe+virc14 ++ engsrp=engsrp+engs14 ++ virsrp=virsrp+virs14 ++ vdw_vir=vdw_vir+vdw14_vir ++ cou_vir=cou_vir+cou14_vir ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,448) ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdbc,ydbc,zdbc,stat=fail2) ++ deallocate (xdcd,ydcd,zdcd,stat=fail3) ++ ++ return ++ end subroutine dihfrc ++ ++ end module dihedral_module +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f dl_class_1.9/srcmod/dlpoly.f +--- dl_class_1.9.orig/srcmod/dlpoly.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f 2015-11-16 17:39:33.860700901 +0100 +@@ -0,0 +1,969 @@ ++ program dlpoly_classic ++ ++c*********************************************************************** ++c ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. ++c ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. ++c ++c neither the stfc, daresbury laboratory, ccp5 nor the authors ++c of this package claim that it is free from errors and do not ++c accept liability for any loss or damage that may arise from ++c its use. it is the users responsibility to verify that the ++c package dl_poly is fit for the purpose the user intends for ++c it. ++c ++c users of this package are recommended to consult the dl_poly ++c user manual for the full description of its use and purpose. ++c ++c authors: w.smith and t.r.forester 1995 ++c copyright daresbury laboratory 1995 ++c ++c DL_POLY CLASSIC VERSION 1.9 ++c ++c*********************************************************************** ++ ++c declare required modules ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use define_system_module ++ use dihedral_module ++ use driver_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use forces_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use integrator_module ++ use inversion_module ++ use metal_module ++ use metafreeze_module ++ use nlist_builders_module ++ use pair_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ character*1 hms,dec ++ character*8 seek ++ ++ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle ++ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb ++ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd ++ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect ++ ++ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn ++ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt ++ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj ++ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw ++ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp ++ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k ++ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit ++ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode ++ integer natms2,ntghost,nsolva,isolva,nofic ++ ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd ++ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint ++ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter ++ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom ++ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord ++ ++c PLUMED modifications ++ real(8) energyUnits,lengthUnits,timeUnits ++ integer(8) get_comms ++c PLUMED modifications ++ ++ real(8), allocatable :: tbuffer(:) ++ integer :: plumedavaiable ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ ++ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ ++ ++c set up the communications ++ ++ call initcomms() ++ call gsync() ++ ++c determine processor identities ++ ++ call machine(idnode,mxnode) ++ ++c activate for limited-life executable ++ ++CBOMB call bomb(idnode,2008,6,30) ++ ++ allocate (tbuffer(10),stat=memr) ++ ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file ++ ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ ++c allocate arrays for each function ++ ++ call alloc_ang_arrays(idnode) ++ call alloc_bnd_arrays(idnode) ++ call alloc_config_arrays(idnode) ++ call alloc_csh_arrays(idnode) ++ call alloc_dih_arrays(idnode) ++ call alloc_ewald_arrays(idnode) ++ call alloc_exc_arrays(idnode) ++ call alloc_exi_arrays(idnode) ++ call alloc_fbp_arrays(idnode) ++ call alloc_fld_arrays(idnode) ++ call alloc_free_arrays(idnode) ++ call alloc_hke_arrays(idnode) ++ call alloc_hyper_arrays(idnode) ++ call alloc_inv_arrays(idnode) ++ call alloc_met_arrays(idnode) ++ call alloc_pair_arrays(idnode) ++ call alloc_pmf_arrays(idnode) ++ call alloc_prp_arrays(idnode) ++ call alloc_rgbdy_arrays(idnode) ++ call alloc_shake_arrays(idnode) ++ call alloc_site_arrays(idnode) ++ call alloc_sol_arrays(idnode) ++ call alloc_spme_arrays(idnode) ++ call alloc_tbp_arrays(idnode) ++ call alloc_ter_arrays(idnode) ++ call alloc_tet_arrays(idnode) ++ call alloc_vdw_arrays(idnode) ++ ++c start clock ++ ++ call timchk(0,tzero) ++ ++c input the control parameters defining the simulation ++ ++ call simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c input the system force field ++ ++ call sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) ++ ++c construct initial configuration of system ++ ++ call sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c construct initial bookkeeping arrays ++ ++ call sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c reset atom numbers for excitation simulation ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c set initial system temperature ++ ++ call systemp ++ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c read thermodynamic and structural data from restart file ++ ++ call sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c metadynamics by d. quigley ++ ++ if(lmetadyn) ++ x call define_metadynamics(idnode,mxnode,natms,temp) ++ ++c synchronise LRC, SIC and system charge terms for switching ++ ++ llswitch=.false. ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod((nstep-nswitch)/niswitch,2).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.true. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c PLUMED modifications ++ if(lplumed)then ++ ++ call plumed_f_installed(plumedavaiable) ++ ++ if (plumedavaiable<=0) then ++ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" ++ stop ++ else ++ call plumed_f_gcreate() ++ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) ++ call plumed_f_gcmd("setRealPrecision"//char(0),8) ++ energyUnits=0.01 ++ lengthUnits=0.1 ++ timeUnits=1 ++ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) ++ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) ++ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) ++ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) ++ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) ++ call plumed_f_gcmd("setNatoms"//char(0),natms) ++ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) ++ call plumed_f_gcmd("setTimestep"//char(0),tstep) ++ call plumed_f_gcmd("init"//char(0),0) ++ end if ++ endif ++ ++c PLUMED modifications ++ ++c zero long range component of stress ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero contraint terms ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ if(lminim.or.loptim.or.ntcons.eq.0)then ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c define target kinetic energy ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ ++c time check ++ ++ call timchk(1,tzero) ++ ++c control variable for structure optimizer ++ ++ keystr=0 ++ stropt=.false. ++ ++ if(lminim)then ++ ++c first step of minimisation programme ++ ++ if(idnode.eq.0)write(nrite,"(1x,120('-'))") ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c calculate initial conditions for velocity verlet ++ ++ elseif(keyver.eq.1.and.nstep.eq.0)then ++ ++c kinetic stress tensor at start ++ ++ call dcell(cell,celprp) ++ width=min(celprp(7),celprp(8),celprp(9)) ++ call kinstress(natms,idnode,mxnode,stress) ++ engke=0.5d0*(stress(1)+stress(5)+stress(9)) ++ do i=1,9 ++ stress(i)=stress(i)/dble(mxnode) ++ enddo ++ ++c calculate initial forces ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++ endif ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++c construct the first reference state ++ ++ call hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++ endif ++ ++c perform selected NEB calculation ++ ++ if(lneb)then ++ ++ do i=1,numneb ++ ++ call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), ++ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++ call scan_profile(nturn,estar) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(1x,120('-'))") ++ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') ++ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ enddo ++ ++c bypass the MD cycle for this option ++ ++ recycle=.false. ++ ++ endif ++ ++c*********************************************************************** ++c start of molecular dynamics calculations ++c*********************************************************************** ++ ++ do while(recycle) ++ ++c increase step counter ++ ++ nstep=nstep+1 ++ recycle=(nstep.lt.nstrun) ++ ++c store velocities for free energy or solvation simulation ++ ++ if(keyver.eq.0)then ++ ++ if(lsolva)then ++ ++ vxo_sol(:)=vxx(:) ++ vyo_sol(:)=vyy(:) ++ vzo_sol(:)=vzz(:) ++ ++ elseif(lfree)then ++ ++ vxo_fre(:)=vxx(:) ++ vyo_fre(:)=vyy(:) ++ vzo_fre(:)=vzz(:) ++ ++ endif ++ ++ endif ++ ++c molecular switching option for excitation ++ ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod(nstep-nswitch,niswitch).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.not.llswitch ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c switch on the minimiser ++ ++ if(lminim)then ++ ++ lminnow=(mod(nstep,minstp).eq.0) ++ ++ endif ++ ++c conserved quantity (other than K + U) ++ ++ consv=0.d0 ++ ++c energy accumulators ++ ++ if(.not.lminnow)then ++ ++ engke=0.d0 ++ engrot=0.d0 ++ ++ endif ++ ++c calculate volume of simulation cell ++ ++ if(imcon.ne.0.and.imcon.ne.6)then ++ ++ call dcell(cell,celprp) ++ volm=celprp(10) ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ else ++ ++ volm=0.d0 ++ ++ endif ++ ++c reset sutton chen long range corrections (constant pressure only) ++ ++ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++c activate the impact option at designated time step ++ ++ if(lhit.and.nstep.eq.nhit)call impact ++ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c integrate equations of motion stage 1 of velocity verlet ++ ++ if(keyver.gt.0)then ++ ++ isw=1 ++ if(.not.loptim)then ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++ call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++ endif ++ ++ if(lminnow)then ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++ elseif(loptim.or.keyshl.ne.2)then ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++ else ++ ++ call shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++ endif ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c switching option for excitation simulation ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++c integrate equations of motion ++ ++ if(keyver.eq.0)then ++ ++c integrate equations of motion by leapfrog verlet ++ ++ if(.not.(loptim.or.lminnow))call lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++ else if(keyver.gt.0)then ++ ++c integrate equations of motion by velocity verlet (stage 2) ++ ++ isw=2 ++ if(.not.loptim)call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ endif ++ ++c update the atomic positions for the ghost molecule ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++c long range correction adjustment for free energy and solvation ++ ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++c application of transition analysis procedures ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++ engtke=engke+engrot ++ call hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate shell kinetic energy ++ ++ if(keyshl.eq.1)then ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++c apply temperature scaling ++ ++ if((ltscal.and.nstep.le.nsteql).and. ++ x mod(nstep-nsteql,nstbts).eq.0)then ++ ++ chit=0.d0 ++ chit_shl=0.d0 ++ chip=0.d0 ++ do i=1,9 ++ eta(i)=0.d0 ++ enddo ++ ++ if(keyshl.eq.1) then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c reset atom velocities at intervals if required ++ ++ if(newgau)then ++ ++ if(mod(nstep,numgau).eq.0)call regauss ++ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++ endif ++ ++c calculate physical quantities ++ ++ if(nstep.gt.0)call static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c z density calculation ++ ++ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then ++ ++ call zden0(idnode,natms,mxnode,nzden,zlen) ++ ++ endif ++ ++c terminate program if boundary conditions violated ++ ++ if(imcon.gt.0.and.rcut.gt.width)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ call error(idnode,95) ++ ++ endif ++ ++c line-printer output every nstbpo steps ++ ++ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then ++ ++ call timchk(0,timelp) ++ if(idnode.eq.0)then ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ if(mod(lines,npage).eq.0) ++ x write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, ++ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', ++ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, ++ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', ++ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") ++ x nstep,(stpval(i),i=1,9), ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) ++ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ lines=lines+1 ++ ++ endif ++ ++c report end of equilibration period ++ ++ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then ++ ++ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) ++ x write(nrite,"(/,/,1x,'switching off temperature ', ++ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep ++ ltscal=.false. ++ ++ endif ++ ++c write trajectory data ++ ++ if(ltraj.and.nstep.ge.nstraj) then ++ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then ++ ++ call traject ++ x (ltraj,idnode,imcon,istraj,keytrj,natms, ++ x nstraj,nstep,tstep) ++ ++ endif ++ ++ endif ++ ++c write solvation energy file ++ ++ if(lsolva.and.nstep.ge.nsolva)then ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ call solva_temp(idnode,mxnode,natms2,keyver) ++ call solvation_write(lexcite,lswitch,idnode,natms, ++ x nstep,nsolva,isolva,tstep,engunit,elrc) ++ ++ endif ++ ++ endif ++ ++c write free energy file ++ ++ if(lfree.and.nstep.ge.nfrn)then ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ call free_kinetic(lfrmas,idnode,mxnode,keyver) ++ call free_energy_write(idnode,nstep,engunit) ++ ++ endif ++ ++ endif ++ ++c save restart data in event of system crash ++ ++ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++ endif ++ ++c cycle time check ++ ++ call timchk(0,timelp) ++ recycle=(recycle.and.timjob-timelp.gt.timcls) ++ ++ enddo ++ ++c*********************************************************************** ++c end of molecular dynamics calculations ++c*********************************************************************** ++ ++c last time check ++ ++ call timchk(0,timelp) ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls ++ ++c shell relaxation convergence statistics ++ ++ if(.not.loptim.and.keyshl.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'shell relaxation statistics : average cycles = ', ++ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 ++ ++ endif ++ ++c produce summary of simulation ++ ++c PLUMED ++ if(lplumed) call plumed_f_gcmd() ++c PLUMED ++ ++ levcfg=2 ++ if(loptim)levcfg=0 ++ if(.not.lneb)call result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) ++ ++c write hyperdynamics restart file ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c close output channels ++ ++ if(idnode.eq.0) then ++ ++ close (nrite) ++ close (nstats) ++ close (nhist) ++ close (nevnt) ++ ++ endif ++ ++c terminate job ++ ++ call exitcomms() ++ ++ end +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f~ dl_class_1.9/srcmod/dlpoly.f~ +--- dl_class_1.9.orig/srcmod/dlpoly.f~ 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f~ 2015-11-16 17:31:56.327749683 +0100 +@@ -0,0 +1,969 @@ ++ program dlpoly_classic ++ ++c*********************************************************************** ++c ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. ++c ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. ++c ++c neither the stfc, daresbury laboratory, ccp5 nor the authors ++c of this package claim that it is free from errors and do not ++c accept liability for any loss or damage that may arise from ++c its use. it is the users responsibility to verify that the ++c package dl_poly is fit for the purpose the user intends for ++c it. ++c ++c users of this package are recommended to consult the dl_poly ++c user manual for the full description of its use and purpose. ++c ++c authors: w.smith and t.r.forester 1995 ++c copyright daresbury laboratory 1995 ++c ++c DL_POLY CLASSIC VERSION 1.9 ++c ++c*********************************************************************** ++ ++c declare required modules ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use define_system_module ++ use dihedral_module ++ use driver_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use forces_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use integrator_module ++ use inversion_module ++ use metal_module ++ use metafreeze_module ++ use nlist_builders_module ++ use pair_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ character*1 hms,dec ++ character*8 seek ++ ++ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle ++ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb ++ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd ++ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect ++ ++ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn ++ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt ++ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj ++ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw ++ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp ++ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k ++ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit ++ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode ++ integer natms2,ntghost,nsolva,isolva,nofic ++ ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd ++ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint ++ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter ++ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom ++ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord ++ ++c PLUMED modifications ++ real(8) energyUnits,lengthUnits,timeUnits ++ integer(8) get_comms ++c PLUMED modifications ++ ++ real(8), allocatable :: tbuffer(:) ++ integer :: plumedavaiable ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ ++ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ ++ ++c set up the communications ++ ++ call initcomms() ++ call gsync() ++ ++c determine processor identities ++ ++ call machine(idnode,mxnode) ++ ++c activate for limited-life executable ++ ++CBOMB call bomb(idnode,2008,6,30) ++ ++ allocate (tbuffer(10),stat=memr) ++ ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file ++ ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ ++c allocate arrays for each function ++ ++ call alloc_ang_arrays(idnode) ++ call alloc_bnd_arrays(idnode) ++ call alloc_config_arrays(idnode) ++ call alloc_csh_arrays(idnode) ++ call alloc_dih_arrays(idnode) ++ call alloc_ewald_arrays(idnode) ++ call alloc_exc_arrays(idnode) ++ call alloc_exi_arrays(idnode) ++ call alloc_fbp_arrays(idnode) ++ call alloc_fld_arrays(idnode) ++ call alloc_free_arrays(idnode) ++ call alloc_hke_arrays(idnode) ++ call alloc_hyper_arrays(idnode) ++ call alloc_inv_arrays(idnode) ++ call alloc_met_arrays(idnode) ++ call alloc_pair_arrays(idnode) ++ call alloc_pmf_arrays(idnode) ++ call alloc_prp_arrays(idnode) ++ call alloc_rgbdy_arrays(idnode) ++ call alloc_shake_arrays(idnode) ++ call alloc_site_arrays(idnode) ++ call alloc_sol_arrays(idnode) ++ call alloc_spme_arrays(idnode) ++ call alloc_tbp_arrays(idnode) ++ call alloc_ter_arrays(idnode) ++ call alloc_tet_arrays(idnode) ++ call alloc_vdw_arrays(idnode) ++ ++c start clock ++ ++ call timchk(0,tzero) ++ ++c input the control parameters defining the simulation ++ ++ call simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c input the system force field ++ ++ call sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) ++ ++c construct initial configuration of system ++ ++ call sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c construct initial bookkeeping arrays ++ ++ call sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c reset atom numbers for excitation simulation ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c set initial system temperature ++ ++ call systemp ++ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c read thermodynamic and structural data from restart file ++ ++ call sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c metadynamics by d. quigley ++ ++ if(lmetadyn) ++ x call define_metadynamics(idnode,mxnode,natms,temp) ++ ++c synchronise LRC, SIC and system charge terms for switching ++ ++ llswitch=.false. ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod((nstep-nswitch)/niswitch,2).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.true. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c PLUMED modifications ++ if(lplumed)then ++ ++ call plumed_f_installed(plumedavaiable) ++ ++ if (plumedavaiable<=0) then ++ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" ++ stop ++ else ++ call plumed_f_gcreate() ++ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) ++ call plumed_f_gcmd("setRealPrecision"//char(0),8) ++ energyUnits=0.01 ++ lengthUnits=0.1 ++ timeUnits=1 ++ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) ++ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) ++ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) ++ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) ++ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) ++ call plumed_f_gcmd("setNatoms"//char(0),natms) ++ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) ++ call plumed_f_gcmd("setTimestep"//char(0),tstep) ++ call plumed_f_gcmd("init"//char(0),0) ++ end if ++ endif ++ ++c PLUMED modifications ++ ++c zero long range component of stress ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero contraint terms ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ if(lminim.or.loptim.or.ntcons.eq.0)then ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c define target kinetic energy ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ ++c time check ++ ++ call timchk(1,tzero) ++ ++c control variable for structure optimizer ++ ++ keystr=0 ++ stropt=.false. ++ ++ if(lminim)then ++ ++c first step of minimisation programme ++ ++ if(idnode.eq.0)write(nrite,"(1x,120('-'))") ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c calculate initial conditions for velocity verlet ++ ++ elseif(keyver.eq.1.and.nstep.eq.0)then ++ ++c kinetic stress tensor at start ++ ++ call dcell(cell,celprp) ++ width=min(celprp(7),celprp(8),celprp(9)) ++ call kinstress(natms,idnode,mxnode,stress) ++ engke=0.5d0*(stress(1)+stress(5)+stress(9)) ++ do i=1,9 ++ stress(i)=stress(i)/dble(mxnode) ++ enddo ++ ++c calculate initial forces ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++ endif ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++c construct the first reference state ++ ++ call hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++ endif ++ ++c perform selected NEB calculation ++ ++ if(lneb)then ++ ++ do i=1,numneb ++ ++ call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), ++ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++ call scan_profile(nturn,estar) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(1x,120('-'))") ++ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') ++ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ enddo ++ ++c bypass the MD cycle for this option ++ ++ recycle=.false. ++ ++ endif ++ ++c*********************************************************************** ++c start of molecular dynamics calculations ++c*********************************************************************** ++ ++ do while(recycle) ++ ++c increase step counter ++ ++ nstep=nstep+1 ++ recycle=(nstep.lt.nstrun) ++ ++c store velocities for free energy or solvation simulation ++ ++ if(keyver.eq.0)then ++ ++ if(lsolva)then ++ ++ vxo_sol(:)=vxx(:) ++ vyo_sol(:)=vyy(:) ++ vzo_sol(:)=vzz(:) ++ ++ elseif(lfree)then ++ ++ vxo_fre(:)=vxx(:) ++ vyo_fre(:)=vyy(:) ++ vzo_fre(:)=vzz(:) ++ ++ endif ++ ++ endif ++ ++c molecular switching option for excitation ++ ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod(nstep-nswitch,niswitch).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.not.llswitch ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c switch on the minimiser ++ ++ if(lminim)then ++ ++ lminnow=(mod(nstep,minstp).eq.0) ++ ++ endif ++ ++c conserved quantity (other than K + U) ++ ++ consv=0.d0 ++ ++c energy accumulators ++ ++ if(.not.lminnow)then ++ ++ engke=0.d0 ++ engrot=0.d0 ++ ++ endif ++ ++c calculate volume of simulation cell ++ ++ if(imcon.ne.0.and.imcon.ne.6)then ++ ++ call dcell(cell,celprp) ++ volm=celprp(10) ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ else ++ ++ volm=0.d0 ++ ++ endif ++ ++c reset sutton chen long range corrections (constant pressure only) ++ ++ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++c activate the impact option at designated time step ++ ++ if(lhit.and.nstep.eq.nhit)call impact ++ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c integrate equations of motion stage 1 of velocity verlet ++ ++ if(keyver.gt.0)then ++ ++ isw=1 ++ if(.not.loptim)then ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++ call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++ endif ++ ++ if(lminnow)then ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++ elseif(loptim.or.keyshl.ne.2)then ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++ else ++ ++ call shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++ endif ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c switching option for excitation simulation ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++c integrate equations of motion ++ ++ if(keyver.eq.0)then ++ ++c integrate equations of motion by leapfrog verlet ++ ++ if(.not.(loptim.or.lminnow))call lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++ else if(keyver.gt.0)then ++ ++c integrate equations of motion by velocity verlet (stage 2) ++ ++ isw=2 ++ if(.not.loptim)call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ endif ++ ++c update the atomic positions for the ghost molecule ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++c long range correction adjustment for free energy and solvation ++ ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++c application of transition analysis procedures ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++ engtke=engke+engrot ++ call hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate shell kinetic energy ++ ++ if(keyshl.eq.1)then ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++c apply temperature scaling ++ ++ if((ltscal.and.nstep.le.nsteql).and. ++ x mod(nstep-nsteql,nstbts).eq.0)then ++ ++ chit=0.d0 ++ chit_shl=0.d0 ++ chip=0.d0 ++ do i=1,9 ++ eta(i)=0.d0 ++ enddo ++ ++ if(keyshl.eq.1) then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c reset atom velocities at intervals if required ++ ++ if(newgau)then ++ ++ if(mod(nstep,numgau).eq.0)call regauss ++ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++ endif ++ ++c calculate physical quantities ++ ++ if(nstep.gt.0)call static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c z density calculation ++ ++ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then ++ ++ call zden0(idnode,natms,mxnode,nzden,zlen) ++ ++ endif ++ ++c terminate program if boundary conditions violated ++ ++ if(imcon.gt.0.and.rcut.gt.width)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ call error(idnode,95) ++ ++ endif ++ ++c line-printer output every nstbpo steps ++ ++ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then ++ ++ call timchk(0,timelp) ++ if(idnode.eq.0)then ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ if(mod(lines,npage).eq.0) ++ x write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, ++ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', ++ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, ++ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', ++ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") ++ x nstep,(stpval(i),i=1,9), ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) ++ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ lines=lines+1 ++ ++ endif ++ ++c report end of equilibration period ++ ++ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then ++ ++ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) ++ x write(nrite,"(/,/,1x,'switching off temperature ', ++ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep ++ ltscal=.false. ++ ++ endif ++ ++c write trajectory data ++ ++ if(ltraj.and.nstep.ge.nstraj) then ++ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then ++ ++ call traject ++ x (ltraj,idnode,imcon,istraj,keytrj,natms, ++ x nstraj,nstep,tstep) ++ ++ endif ++ ++ endif ++ ++c write solvation energy file ++ ++ if(lsolva.and.nstep.ge.nsolva)then ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ call solva_temp(idnode,mxnode,natms2,keyver) ++ call solvation_write(lexcite,lswitch,idnode,natms, ++ x nstep,nsolva,isolva,tstep,engunit,elrc) ++ ++ endif ++ ++ endif ++ ++c write free energy file ++ ++ if(lfree.and.nstep.ge.nfrn)then ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ call free_kinetic(lfrmas,idnode,mxnode,keyver) ++ call free_energy_write(idnode,nstep,engunit) ++ ++ endif ++ ++ endif ++ ++c save restart data in event of system crash ++ ++ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++ endif ++ ++c cycle time check ++ ++ call timchk(0,timelp) ++ recycle=(recycle.and.timjob-timelp.gt.timcls) ++ ++ enddo ++ ++c*********************************************************************** ++c end of molecular dynamics calculations ++c*********************************************************************** ++ ++c last time check ++ ++ call timchk(0,timelp) ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls ++ ++c shell relaxation convergence statistics ++ ++ if(.not.loptim.and.keyshl.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'shell relaxation statistics : average cycles = ', ++ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 ++ ++ endif ++ ++c produce summary of simulation ++ ++ levcfg=2 ++ if(loptim)levcfg=0 ++ if(.not.lneb)call result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) ++ ++c PLUMED ++ if(lplumed) call plumed_f_gcmd() ++c PLUMED ++ ++c write hyperdynamics restart file ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c close output channels ++ ++ if(idnode.eq.0) then ++ ++ close (nrite) ++ close (nstats) ++ close (nhist) ++ close (nevnt) ++ ++ endif ++ ++c terminate job ++ ++ call exitcomms() ++ ++ end +diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.preplumed dl_class_1.9/srcmod/dlpoly.f.preplumed +--- dl_class_1.9.orig/srcmod/dlpoly.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/dlpoly.f.preplumed 2012-04-10 16:32:54.000000000 +0200 +@@ -0,0 +1,929 @@ ++ program dlpoly_classic ++ ++c*********************************************************************** ++c ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. ++c ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. ++c ++c neither the stfc, daresbury laboratory, ccp5 nor the authors ++c of this package claim that it is free from errors and do not ++c accept liability for any loss or damage that may arise from ++c its use. it is the users responsibility to verify that the ++c package dl_poly is fit for the purpose the user intends for ++c it. ++c ++c users of this package are recommended to consult the dl_poly ++c user manual for the full description of its use and purpose. ++c ++c authors: w.smith and t.r.forester 1995 ++c copyright daresbury laboratory 1995 ++c ++c DL_POLY CLASSIC VERSION 1.9 ++c ++c*********************************************************************** ++ ++c declare required modules ++ ++ use angles_module ++ use bonds_module ++ use config_module ++ use core_shell_module ++ use define_system_module ++ use dihedral_module ++ use driver_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use forces_module ++ use four_body_module ++ use hkewald_module ++ use hyper_dynamics_module ++ use integrator_module ++ use inversion_module ++ use metal_module ++ use metafreeze_module ++ use nlist_builders_module ++ use pair_module ++ use pmf_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use solvation_module ++ use spme_module ++ use temp_scalers_module ++ use tersoff_module ++ use tether_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ character*1 hms,dec ++ character*8 seek ++ ++ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle ++ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb ++ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd ++ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect ++ ++ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn ++ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt ++ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj ++ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw ++ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp ++ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree ++ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k ++ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit ++ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode ++ integer natms2,ntghost,nsolva,isolva,nofic ++ ++ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup ++ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd ++ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint ++ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter ++ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom ++ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim ++ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen ++ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol ++ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord ++ real(8), allocatable :: tbuffer(:) ++ ++ data timelp/0.d0/,lminnow/.false./,ntrack/10/ ++ data npage,lines/8,0/,recycle/.true./ ++ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ ++ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ ++ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ ++ ++c set up the communications ++ ++ call initcomms() ++ call gsync() ++ ++c determine processor identities ++ ++ call machine(idnode,mxnode) ++ ++c activate for limited-life executable ++ ++CBOMB call bomb(idnode,2008,6,30) ++ ++ allocate (tbuffer(10),stat=memr) ++ ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file ++ ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ ++c allocate arrays for each function ++ ++ call alloc_ang_arrays(idnode) ++ call alloc_bnd_arrays(idnode) ++ call alloc_config_arrays(idnode) ++ call alloc_csh_arrays(idnode) ++ call alloc_dih_arrays(idnode) ++ call alloc_ewald_arrays(idnode) ++ call alloc_exc_arrays(idnode) ++ call alloc_exi_arrays(idnode) ++ call alloc_fbp_arrays(idnode) ++ call alloc_fld_arrays(idnode) ++ call alloc_free_arrays(idnode) ++ call alloc_hke_arrays(idnode) ++ call alloc_hyper_arrays(idnode) ++ call alloc_inv_arrays(idnode) ++ call alloc_met_arrays(idnode) ++ call alloc_pair_arrays(idnode) ++ call alloc_pmf_arrays(idnode) ++ call alloc_prp_arrays(idnode) ++ call alloc_rgbdy_arrays(idnode) ++ call alloc_shake_arrays(idnode) ++ call alloc_site_arrays(idnode) ++ call alloc_sol_arrays(idnode) ++ call alloc_spme_arrays(idnode) ++ call alloc_tbp_arrays(idnode) ++ call alloc_ter_arrays(idnode) ++ call alloc_tet_arrays(idnode) ++ call alloc_vdw_arrays(idnode) ++ ++c start clock ++ ++ call timchk(0,tzero) ++ ++c input the control parameters defining the simulation ++ ++ call simdef ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) ++ ++c input the system force field ++ ++ call sysdef ++ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, ++ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) ++ ++ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) ++ ++c construct initial configuration of system ++ ++ call sysgen ++ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, ++ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) ++ ++c construct initial bookkeeping arrays ++ ++ call sysbook ++ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, ++ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, ++ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, ++ x ntghost,degfre,degrot) ++ ++c reset atom numbers for excitation simulation ++ ++ if(lghost)then ++ natms2=natms-ntghost ++ else ++ natms2=natms ++ endif ++ ++c set initial system temperature ++ ++ call systemp ++ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, ++ x tolnce) ++ ++c read thermodynamic and structural data from restart file ++ ++ call sysinit ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, ++ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, ++ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) ++ ++c metadynamics by d. quigley ++ ++ if(lmetadyn) ++ x call define_metadynamics(idnode,mxnode,natms,temp) ++ ++c synchronise LRC, SIC and system charge terms for switching ++ ++ llswitch=.false. ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod((nstep-nswitch)/niswitch,2).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.true. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c zero long range component of stress ++ ++ do i=1,9 ++ stresl(i)=0.d0 ++ enddo ++ ++c zero contraint terms ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ if(lminim.or.loptim.or.ntcons.eq.0)then ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c define target kinetic energy ++ ++ sigma=temp*boltz*degfre*0.5d0 ++ ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ ++c time check ++ ++ call timchk(1,tzero) ++ ++c control variable for structure optimizer ++ ++ keystr=0 ++ stropt=.false. ++ ++ if(lminim)then ++ ++c first step of minimisation programme ++ ++ if(idnode.eq.0)write(nrite,"(1x,120('-'))") ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c calculate initial conditions for velocity verlet ++ ++ elseif(keyver.eq.1.and.nstep.eq.0)then ++ ++c kinetic stress tensor at start ++ ++ call dcell(cell,celprp) ++ width=min(celprp(7),celprp(8),celprp(9)) ++ call kinstress(natms,idnode,mxnode,stress) ++ engke=0.5d0*(stress(1)+stress(5)+stress(9)) ++ do i=1,9 ++ stress(i)=stress(i)/dble(mxnode) ++ enddo ++ ++c calculate initial forces ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++ endif ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++c construct the first reference state ++ ++ call hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++ endif ++ ++c perform selected NEB calculation ++ ++ if(lneb)then ++ ++ do i=1,numneb ++ ++ call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), ++ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++ call scan_profile(nturn,estar) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(1x,120('-'))") ++ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') ++ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ enddo ++ ++c bypass the MD cycle for this option ++ ++ recycle=.false. ++ ++ endif ++ ++c*********************************************************************** ++c start of molecular dynamics calculations ++c*********************************************************************** ++ ++ do while(recycle) ++ ++c increase step counter ++ ++ nstep=nstep+1 ++ recycle=(nstep.lt.nstrun) ++ ++c store velocities for free energy or solvation simulation ++ ++ if(keyver.eq.0)then ++ ++ if(lsolva)then ++ ++ vxo_sol(:)=vxx(:) ++ vyo_sol(:)=vyy(:) ++ vzo_sol(:)=vzz(:) ++ ++ elseif(lfree)then ++ ++ vxo_fre(:)=vxx(:) ++ vyo_fre(:)=vyy(:) ++ vzo_fre(:)=vzz(:) ++ ++ endif ++ ++ endif ++ ++c molecular switching option for excitation ++ ++ if(lswitch)then ++ ++ if(nstep.ge.nswitch)then ++ ++ if(mod(nstep-nswitch,niswitch).eq.0)then ++ ++ call switch_atm(lfrmas) ++ call switch(elrc,virlrc) ++ llswitch=.not.llswitch ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c switch on the minimiser ++ ++ if(lminim)then ++ ++ lminnow=(mod(nstep,minstp).eq.0) ++ ++ endif ++ ++c conserved quantity (other than K + U) ++ ++ consv=0.d0 ++ ++c energy accumulators ++ ++ if(.not.lminnow)then ++ ++ engke=0.d0 ++ engrot=0.d0 ++ ++ endif ++ ++c calculate volume of simulation cell ++ ++ if(imcon.ne.0.and.imcon.ne.6)then ++ ++ call dcell(cell,celprp) ++ volm=celprp(10) ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ else ++ ++ volm=0.d0 ++ ++ endif ++ ++c reset sutton chen long range corrections (constant pressure only) ++ ++ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) ++ ++ endif ++ ++c activate the impact option at designated time step ++ ++ if(lhit.and.nstep.eq.nhit)call impact ++ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c integrate equations of motion stage 1 of velocity verlet ++ ++ if(keyver.gt.0)then ++ ++ isw=1 ++ if(.not.loptim)then ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++ call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++ endif ++ ++ if(lminnow)then ++ ++ call minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++ elseif(loptim.or.keyshl.ne.2)then ++ ++ call molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, ++ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, ++ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, ++ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, ++ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, ++ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, ++ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, ++ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) ++ ++ else ++ ++ call shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++ endif ++ ++c bias potential dynamics option - reset forces ++ ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c switching option for excitation simulation ++ ++ if(llswitch)call copy_force(idnode,mxnode) ++ ++c integrate equations of motion ++ ++ if(keyver.eq.0)then ++ ++c integrate equations of motion by leapfrog verlet ++ ++ if(.not.(loptim.or.lminnow))call lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++ else if(keyver.gt.0)then ++ ++c integrate equations of motion by velocity verlet (stage 2) ++ ++ isw=2 ++ if(.not.loptim)call vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) ++ ++ endif ++ ++c update the atomic positions for the ghost molecule ++ ++ if(lghost)call update_ghost(idnode,mxnode) ++ ++c long range correction adjustment for free energy and solvation ++ ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++ if(lfree.or.lghost) ++ x call lrcorrect_fre(lfree,volm,elrc,virlrc) ++ if(lsolva)call lrcorrect_sol(lghost,volm) ++ ++c application of transition analysis procedures ++ ++ if(ltad.or.(lbpd.and.keybpd.eq.2))then ++ ++ engtke=engke+engrot ++ call hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate shell kinetic energy ++ ++ if(keyshl.eq.1)then ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++ endif ++ ++c scale t=0 tether reference positions (constant pressure only) ++ ++ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then ++ ++ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++ endif ++ ++c apply temperature scaling ++ ++ if((ltscal.and.nstep.le.nsteql).and. ++ x mod(nstep-nsteql,nstbts).eq.0)then ++ ++ chit=0.d0 ++ chit_shl=0.d0 ++ chip=0.d0 ++ do i=1,9 ++ eta(i)=0.d0 ++ enddo ++ ++ if(keyshl.eq.1) then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++c reset atom velocities at intervals if required ++ ++ if(newgau)then ++ ++ if(mod(nstep,numgau).eq.0)call regauss ++ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++ endif ++ ++c calculate physical quantities ++ ++ if(nstep.gt.0)call static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c z density calculation ++ ++ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then ++ ++ call zden0(idnode,natms,mxnode,nzden,zlen) ++ ++ endif ++ ++c terminate program if boundary conditions violated ++ ++ if(imcon.gt.0.and.rcut.gt.width)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ call error(idnode,95) ++ ++ endif ++ ++c line-printer output every nstbpo steps ++ ++ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then ++ ++ call timchk(0,timelp) ++ if(idnode.eq.0)then ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ if(mod(lines,npage).eq.0) ++ x write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, ++ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', ++ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, ++ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', ++ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") ++ x nstep,(stpval(i),i=1,9), ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) ++ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ lines=lines+1 ++ ++ endif ++ ++c report end of equilibration period ++ ++ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then ++ ++ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) ++ x write(nrite,"(/,/,1x,'switching off temperature ', ++ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep ++ ltscal=.false. ++ ++ endif ++ ++c write trajectory data ++ ++ if(ltraj.and.nstep.ge.nstraj) then ++ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then ++ ++ call traject ++ x (ltraj,idnode,imcon,istraj,keytrj,natms, ++ x nstraj,nstep,tstep) ++ ++ endif ++ ++ endif ++ ++c write solvation energy file ++ ++ if(lsolva.and.nstep.ge.nsolva)then ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ call solva_temp(idnode,mxnode,natms2,keyver) ++ call solvation_write(lexcite,lswitch,idnode,natms, ++ x nstep,nsolva,isolva,tstep,engunit,elrc) ++ ++ endif ++ ++ endif ++ ++c write free energy file ++ ++ if(lfree.and.nstep.ge.nfrn)then ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ call free_kinetic(lfrmas,idnode,mxnode,keyver) ++ call free_energy_write(idnode,nstep,engunit) ++ ++ endif ++ ++ endif ++ ++c save restart data in event of system crash ++ ++ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then ++ ++ levcfg=2 ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++ endif ++ ++c cycle time check ++ ++ call timchk(0,timelp) ++ recycle=(recycle.and.timjob-timelp.gt.timcls) ++ ++ enddo ++ ++c*********************************************************************** ++c end of molecular dynamics calculations ++c*********************************************************************** ++ ++c last time check ++ ++ call timchk(0,timelp) ++ call get_prntime(hms,timjob,prntim) ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls ++ ++c shell relaxation convergence statistics ++ ++ if(.not.loptim.and.keyshl.eq.2)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,/,1x,'shell relaxation statistics : average cycles = ', ++ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 ++ ++ endif ++ ++c produce summary of simulation ++ ++ levcfg=2 ++ if(loptim)levcfg=0 ++ if(.not.lneb)call result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) ++ ++c write hyperdynamics restart file ++ ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c close output channels ++ ++ if(idnode.eq.0) then ++ ++ close (nrite) ++ close (nstats) ++ close (nhist) ++ close (nevnt) ++ ++ endif ++ ++c terminate job ++ ++ call exitcomms() ++ ++ end +diff -urN dl_class_1.9.orig/srcmod/driver_module.f dl_class_1.9/srcmod/driver_module.f +--- dl_class_1.9.orig/srcmod/driver_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/driver_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,498 @@ ++ module driver_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation driver routines ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use forces_module ++ use nlist_builders_module ++ use optimiser_module ++ use temp_scalers_module ++ ++ implicit none ++ ++ integer, parameter :: mxpass=250 ++ ++ contains ++ ++ subroutine molecular_dynamics ++ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero,newlst, ++ x stropt,cycle,ltad,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,keyfld,keyshl,keystr,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, ++ x ntpter,ntpvdw,ntshl,ntteth,ntcons,numrdf,nsolva,isolva, ++ x alpha,delr,dlrpot,drewd,elrc,engang,engbnd,engcpe,engdih, ++ x engfbp,engfld,enginv,engshl,engsrp,engtbp,engter,engtet, ++ x epsq,fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, ++ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih,virfbp,virfld, ++ x virinv,virlrc,virmet,virshl,virsrp,virtbp,virter,virtet,volm, ++ x engmet,virtot,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a standard ++c molecular dynamics simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero ++ logical newlst,stropt,cycle,ltad,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons ++ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,nsolva ++ integer isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,virtot ++ real(8) engord,virord ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c structure optimisation ++ ++ if(loptim.or.lzero)then ++ ++ call optimisation_selector ++ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, ++ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) ++ ++ if(stropt.and.idnode.eq.0) ++ x write(nrite,"(/,/,1x,'structure optimisation converged ', ++ x 'at step ',i6,/,/,/,1x,120('-'))") nstep ++ ++ cycle=(cycle.and.(.not.stropt)) ++ ++ endif ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++ return ++ end subroutine molecular_dynamics ++ ++ subroutine shell_relaxation ++ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, ++ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, ++ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, ++ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, ++ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, ++ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, ++ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, ++ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, ++ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, ++ x pass1,pass2,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a ++c relaxed shell molecular dynamics simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical,save :: lfirst = .true. ++ logical lfcap,lgofr,lneut,lnsq,loglnk,lzeql,ltad ++ logical newlst,relaxed,shgofr,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms ++ integer nhko,nlatt,nneut,nospl,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf ++ integer keyrlx,ntpmls,pass,nsolva,isolva,ia,ib,ishl ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,virtot,rlxtol ++ real(8) pass0,pass1,pass2,engord,virord ++ ++ real(8),allocatable,dimension(:),save :: xdcs,ydcs,zdcs ++ ++ pass=0 ++ keyrlx=0 ++ shgofr=lgofr ++ relaxed=.false. ++ ++ if(lfirst)then ++ ++ allocate(xdcs(1:ntshl)) ++ allocate(ydcs(1:ntshl)) ++ allocate(zdcs(1:ntshl)) ++ lfirst = .false. ++ ++ else ++ ++ do ishl=1,ntshl ++ ++ ia=listshl(ishl,2) ++ ib=listshl(ishl,3) ++ xxx(ib)=xxx(ia)+xdcs(ishl) ++ yyy(ib)=yyy(ia)+ydcs(ishl) ++ zzz(ib)=zzz(ia)+zdcs(ishl) ++ ++ enddo ++ ++ endif ++ ++ do while(.not.relaxed.and.pass.le.mxpass) ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++c relaxed shell option ++ ++ call relax_shells ++ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep, ++ x rlxtol) ++ ++ if(relaxed)then ++ ++ pass1=pass0*pass1 ++ pass0=pass0+1.d0 ++ pass1=pass1/pass0+pass/pass0 ++ pass2=max(dble(pass),pass2) ++c$$$ write(104,'("Relaxed shells before step: ",I5)')pass+1 ++ ++ endif ++ ++ pass=pass+1 ++ if(pass.gt.mxpass)call error(idnode,1950) ++ shgofr=.false. ++ ++c end of shell relaxation ++ ++ enddo ++ ++c store vector connecting the cores to the shells ++ ++ do ishl=1,ntshl ++ ++ ia=listshl(ishl,2) ++ ib=listshl(ishl,3) ++ xdcs(ishl)=xxx(ib)-xxx(ia) ++ ydcs(ishl)=yyy(ib)-yyy(ia) ++ zdcs(ishl)=zzz(ib)-zzz(ia) ++ ++ enddo ++ ++ call images(imcon,0,1,ntshl,cell,xdcs,ydcs,zdcs) ++ ++ return ++ end subroutine shell_relaxation ++ ++ subroutine minimiser ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, ++ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, ++ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, ++ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, ++ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, ++ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, ++ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, ++ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, ++ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, ++ x virtot,sigma,tolnce,engunit,engord,virord) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls in a ++c minimisation simulation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2007 ++c adapted - d.quigley nov 2010 metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,stropt,shgofr ++ logical conopt,newjob,ltad,lsolva,lfree,lghost ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keystr,pass,i ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,keytol ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,ntcons ++ integer fail,nsolva,isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter,sigma ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp,tolnce ++ real(8) virtbp,virter,virtet,volm,engmet,virtot,engcon ++ real(8) cfgmin,engunit,hnorm,grad0,grad1,ff1,sgn ++ real(8) engord,virord ++ ++ real(8), allocatable :: sxx(:),syy(:),szz(:) ++ ++ save cfgmin,newjob ++ ++ data newjob/.true./ ++ ++ pass=0 ++ keystr=0 ++ shgofr=.false. ++ stropt=.false. ++ ++c dummy variables ++ ++ ltad=.false. ++ lsolva=.false. ++ lfree=.false. ++ lghost=.false. ++ nsolva=0 ++ isolva=1 ++ ++c$$$c diagnostic printing (not usually active) ++c$$$ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ write(nrite,"(1x,120('-'), ++c$$$ x /,/,1x,' pass',5x,'eng_cfg',5x,'eng_vdw',5x,'eng_cou', ++c$$$ x 5x,'eng_bnd',5x,'eng_ang',5x,'eng_dih',5x,'eng_tet', ++c$$$ x 5x,'eng_met',/,1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++ do while(.not.stropt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c total virial (excluding constraint virial and c.o.m virial) ++c for npt routines note: virsrp already includes virlrc ++ ++ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet+virord ++ ++c conjugate gradient structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++c$$$c diagnostic printing (not usually active) ++c$$$ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ write(nrite,"(1x,i8,1p,8e12.4)") ++c$$$ x pass,engcfg/engunit,engsrp/engunit,engcpe/engunit, ++c$$$ x engbnd/engunit,engang/engunit,engdih/engunit,engtet/ ++c$$$ x engunit,engmet/engunit ++c$$$ write(nrite,"(1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++c end of structure minimisation ++ ++ enddo ++ ++c ensure constraints are satisfied ++ ++ if(stropt.and.ntcons.gt.0)then ++ ++ allocate(sxx(mxatms),syy(mxatms),szz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,9999) ++ ++c store current forces ++ ++ do i=1,natms ++ ++ sxx(i)=fxx(i) ++ syy(i)=fyy(i) ++ szz(i)=fzz(i) ++ ++ enddo ++ ++ keystr=0 ++ conopt=.false. ++ ++ do while(.not.conopt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ engcon=0.d0 ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c conjugate gradient structure optimisation of constraint bonds ++ ++ call strucopt ++ x (conopt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcon,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ enddo ++ ++c restore current forces ++ ++ do i=1,natms ++ ++ fxx(i)=sxx(i) ++ fyy(i)=syy(i) ++ fzz(i)=szz(i) ++ ++ enddo ++ ++ deallocate(sxx,syy,szz,stat=fail) ++ ++ endif ++ ++c write data summary ++ ++ if(idnode.eq.0)then ++ ++ if(stropt)then ++ ++ write(nrite,'(1x,"minimisation converged after ",i6," cycles" ++ x ," energy minimum: ",1pe12.4)')pass,engcfg/engunit ++ ++ else ++ ++ write(nrite,'(1x,"minimisation NOT converged after ",i6, ++ x " cycles")')pass ++ ++ endif ++ ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c reset velocities after structure optimisation ++ ++ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++c write out minimised structure if lowest obtained so far ++ ++ if(newjob.or.cfgmin.gt.engcfg)then ++ ++ if(idnode.eq.0)call config_write('CFGMIN',0,imcon,natms,engcfg) ++ cfgmin=engcfg ++ newjob=.false. ++ ++ endif ++ ++ return ++ end subroutine minimiser ++ ++ end module driver_module +diff -urN dl_class_1.9.orig/srcmod/ensemble_tools_module.f dl_class_1.9/srcmod/ensemble_tools_module.f +--- dl_class_1.9.orig/srcmod/ensemble_tools_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/ensemble_tools_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1934 @@ ++ module ensemble_tools_module ++ ++c*********************************************************************** ++c ++c dl_poly module defining tools for ensemble simulations ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use core_shell_module ++ use property_module ++ use rigid_body_module ++ use utility_module ++ ++ contains ++ ++ function getmass(natms,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate total system mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) getmass ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ getmass=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ getmass=getmass+weight(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=getmass ++ call gdsum(buffer(1),1,buffer(2)) ++ getmass=buffer(1) ++ ++ endif ++ ++ return ++ end function getmass ++ ++ subroutine getcom(natms,idnode,mxnode,totmas,com) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system centre of mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) totmas ++ ++ real(8) com(3) ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ com(1)=0.d0 ++ com(2)=0.d0 ++ com(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ com(1)=com(1)+weight(i)*xxx(i) ++ com(2)=com(2)+weight(i)*yyy(i) ++ com(3)=com(3)+weight(i)*zzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) call gdsum(com,3,buffer) ++ ++ com(1)=com(1)/totmas ++ com(2)=com(2)/totmas ++ com(3)=com(3)/totmas ++ ++ return ++ end subroutine getcom ++ ++ subroutine getvom(natms,idnode,mxnode,totmas,vom) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system centre of mass ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) totmas ++ ++ real(8) vom(3) ++ ++ iatm0 = (idnode*natms)/mxnode+1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++ vom(1)=0.d0 ++ vom(2)=0.d0 ++ vom(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ vom(1)=vom(1)+weight(i)*vxx(i) ++ vom(2)=vom(2)+weight(i)*vyy(i) ++ vom(3)=vom(3)+weight(i)*vzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) call gdsum(vom,3,buffer) ++ ++ vom(1)=vom(1)/totmas ++ vom(2)=vom(2)/totmas ++ vom(3)=vom(3)/totmas ++ ++ return ++ end subroutine getvom ++ ++ subroutine nvtscale ++ x (idnode,mxnode,natms,engke,sigma,tstep,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,sigma,tstep,qmass,chit,conint,scale,taut ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*qmass/taut**2 ++ ++c update chit to full step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++ return ++ end subroutine nvtscale ++ ++ subroutine nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,tstep,pmass,qmass,taut, ++ x chip,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith july 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,temp,sigma,tstep,pmass,qmass,chip,chit,conint,scale ++ real(8) taut ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) ++ ++c update chit to full step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++ return ++ end subroutine nptscale_t ++ ++ subroutine nptscale_p ++ x (idnode,mxnode,natms,engke,tstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT barostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm0,iatm1 ++ real(8) engke,tstep,pmass,chip,press,vircon,virtot ++ real(8) volm,scale,chit ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c propagate chip to 1/2 step ++ ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++c barostat the velocities ++ ++ scale=exp(-tstep*chip) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update volume parameter to full step ++ ++ volm=volm*exp(3.d0*tstep*chip) ++ ++c update chip to full step ++ ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++ return ++ end subroutine nptscale_p ++ ++ subroutine nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x tstep,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*qmass/taut**2 ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+tstep*(engke-sigma)/qmass ++ ++ return ++ end subroutine nvtqscl ++ ++ subroutine nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp,sigma, ++ x tstep,pmass,qmass,taut,chip,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip,pmass,temp ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 tstep ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full tstep ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) ++ ++c update chit to full tstep ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip**2-boltz*temp)/qmass ++ ++ return ++ end subroutine nptqscl_t ++ ++ subroutine nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,tstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,i,ngrp,ntfree,igrp1,igrp2,ifre1,ifre2 ++ integer j,ig ++ real(8) engke,tstep,pmass,chip,press,vircon,virtot ++ real(8) vircom,volm,scale,engtrn,engfke,chit ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate chip to 1/2 tstep ++ ++ engke=engfke+engtrn ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++c barostat the free atom velocities ++ ++ scale=exp(-tstep*chip) ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ ++c update volume parameter to full tstep ++ ++ volm=volm*exp(3.d0*tstep*chip) ++ ++c update chip to full tstep ++ ++ engke=engfke+engtrn ++ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- ++ x 3.d0*press*volm)/pmass-chip*chit) ++ ++ return ++ end subroutine nptqscl_p ++ ++ subroutine nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,tstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NST thermostat ++c ++c copyright daresbury laboratory ++c author - w.smith july 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 ++ real(8) engke,temp,sigma,tstep,pmass,qmass,chip2,chit,conint,scale ++ real(8) taut,fac(0:3) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engke=getkin(natms,idnode,mxnode) ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit) ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ engke=engke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++ return ++ end subroutine nstscale_t ++ ++ subroutine nstscale_p ++ x (idnode,mxnode,natms,mode,tstep,pmass,chit,press,volm) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c barostat the velocities ++ ++ do i=iatm0,iatm1 ++ ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c update volume to full time step ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c calculate kinetic energy and contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstscale_p ++ ++ subroutine nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,tstep,pmass,qmass,taut,chit,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig,mode ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip2,pmass,temp,fac(0:3) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++ return ++ end subroutine nstqscl_t ++ ++ subroutine nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),strgrp(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c subtract kinetic contribution from stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c barostat the free atom velocities ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c new system volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c add new kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqscl_p ++ ++ subroutine nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,tstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT thermostat ++c to atomic, group and quaternion momenta ++c ++c copyright daresbury laboratory ++c author - w.smith april 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 ++ integer ig,mode ++ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut ++ real(8) conint,scale,chip2,pmass,temp,fac(0:3) ++ real(8) strkin(9),strgrp(9) ++ data fac/9.d0,3.d0,2.d0,5.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c remove old kinetic term from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c calculate kinetic energy ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn+engrot ++ ++c update chit to 1/2 step ++ ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c thermostat scale parameter ++ ++ scale=exp(-tstep*chit) ++ ++c thermostat free atoms ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=scale*omx(ig) ++ omy(ig)=scale*omy(ig) ++ omz(ig)=scale*omz(ig) ++ gvxx(ig)=scale*gvxx(ig) ++ gvyy(ig)=scale*gvyy(ig) ++ gvzz(ig)=scale*gvzz(ig) ++ ++ enddo ++ ++c scale kinetic energy ++ ++ engfke=engfke*scale**2 ++ engtrn=engtrn*scale**2 ++ engrot=engrot*scale**2 ++ ++c scale kinetic energy tensors ++ ++ do i=1,9 ++ ++ strkin(i)=strkin(i)*scale**2 ++ strgrp(i)=strgrp(i)*scale**2 ++ ++ enddo ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) ++ ++c update chit to full step ++ ++ engke=engfke+engtrn+engrot ++ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ ++ x pmass*chip2-boltz*temp*fac(mode))/qmass ++ ++c add new kinetic terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ return ++ end subroutine nstqscl_t2 ++ ++ subroutine nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, ++ x strkin,strgrp) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c for system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit ++ real(8) strkin(9),strgrp(9),uni(9),celp(10) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c propagate barostat momentum to 1/2 step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c subtract kinetic contribution from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i)-strgrp(i) ++ enddo ++ ++c barostat the free atom velocities ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) ++ ++ enddo ++ ++c new cell vectors ++ ++ call cell_update(tstep,cell,eta) ++ ++c new system volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c add new kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- ++ x press*volm*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqscl_p2 ++ ++ subroutine cell_update(tstep,cell,eta) ++ ++c*********************************************************************** ++c ++c dlpoly utility to update the cell vectors in the hoover ++c nst algorithms (velocity verlet version) ++c ++c copyright daresbury laboratory ++c author w.smith july 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i ++ real(8) tstep,cell(9),eta(9),ctmp(9),uni(9) ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ do i=1,9 ++ ctmp(i)=uni(i)+tstep*eta(i) ++ enddo ++ ++ call mat_mul(ctmp,cell,cell) ++ ++ return ++ end subroutine cell_update ++ ++ subroutine cell_propagate(tstep,cell,eta) ++ ++c*********************************************************************** ++c ++c dlpoly utility to update the cell vectors in the hoover ++c nst algorithms (leapfrog version) ++c ++c copyright daresbury laboratory ++c author w.smith july 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i ++ real(8) tstep ++ real(8) cell(9),eta(9),aaa(9),bbb(9),uni(9) ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ do i=1,9 ++ aaa(i)=tstep*eta(i) ++ enddo ++ ++ call mat_mul(aaa,aaa,bbb) ++ ++ do i=1,9 ++ bbb(i)=uni(i)+aaa(i)+0.5d0*bbb(i) ++ enddo ++ ++ call mat_mul(bbb,cell,cell) ++ ++ return ++ end subroutine cell_propagate ++ ++ subroutine nstqmtk_p ++ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, ++ x engfke,engtrn,engrot,temp,sigma) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NPT anisotropic barostat ++c of martyna tobias and klein to atomic, group and quaternion ++c system with atomic sites and rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith may 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j ++ integer mode ++ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit,temp,sigma,degfre ++ real(8) engtke,engfke,engtrn,engrot,trace ++ real(8) strkin(9),strgrp(9),uni(9),ctmp(9) ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ degfre=2.d0*sigma/(temp*boltz) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c propagate barostat momentum to 1/2 step ++ ++ call invert(cell,ctmp,volm) ++ volm=abs(volm) ++ engtke=2.d0*(engfke+engtrn+engrot)/degfre ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ ++ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c barostat the free atom velocities ++ ++ trace=(eta(1)+eta(5)+eta(9))/degfre ++ ++ do j=ifre1,ifre2 ++ ++ i=lstfre(j) ++ txx=vxx(i) ++ tyy=vyy(i) ++ tzz=vzz(i) ++ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) ++ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) ++ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) ++ ++ enddo ++ ++c barostat the group translational velocities ++ ++ do ig=igrp1,igrp2 ++ ++ txx=gvxx(ig) ++ tyy=gvyy(ig) ++ tzz=gvzz(ig) ++ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) ++ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) ++ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) ++ ++ enddo ++ ++c update volume to full time step ++ ++ volm=volm*exp(tstep*(eta(1)+eta(5)+eta(9))) ++ ++c calculate kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate new kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=2.d0*(engfke+engtrn+engrot)/degfre ++ ++c propagate barostat momentum to full step ++ ++ do i=1,9 ++ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ ++ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ return ++ end subroutine nstqmtk_p ++ ++ subroutine kinstr(idnode,mxnode,natms,tstep) ++ ++c*********************************************************************** ++c ++c dlpoly routine to calculate the kinetic energy contribution to ++c the stress tensor ++c ++c assumes velocities are half-timestep behind forces ++c ++c replicated data version / block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester may 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,i,iatm1,iatm2 ++ real(8) tstep,vxt,vyt,vzt ++ ++c block indices ++ ++ iatm1 = (idnode*natms)/mxnode + 1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ do i = iatm1,iatm2 ++ ++ if(rmass(i).gt.0.d0) then ++ ++ vxt = vxx(i)+fxx(i)*rmass(i)*tstep*0.5d0 ++ vyt = vyy(i)+fyy(i)*rmass(i)*tstep*0.5d0 ++ vzt = vzz(i)+fzz(i)*rmass(i)*tstep*0.5d0 ++ ++ stress(1)=stress(1)-weight(i)*vxt*vxt ++ stress(2)=stress(2)-weight(i)*vxt*vyt ++ stress(3)=stress(3)-weight(i)*vxt*vzt ++ stress(4)=stress(4)-weight(i)*vyt*vxt ++ stress(5)=stress(5)-weight(i)*vyt*vyt ++ stress(6)=stress(6)-weight(i)*vyt*vzt ++ stress(7)=stress(7)-weight(i)*vzt*vxt ++ stress(8)=stress(8)-weight(i)*vzt*vyt ++ stress(9)=stress(9)-weight(i)*vzt*vzt ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine kinstr ++ ++ function getkin(natms,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,i,iatm0,iatm1 ++ real(8) getkin,engke ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ engke=0.d0 ++ ++ do i=iatm0,iatm1 ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkin=0.5d0*engke ++ ++ return ++ end function getkin ++ ++ function getkinf(ntfree,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic energy of atoms not in ++c rigid bodies ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ntfree,idnode,mxnode,i,j,ifre0,ifre1 ++ real(8) getkinf,engke ++ ++ ifre0=(idnode*ntfree)/mxnode+1 ++ ifre1=((idnode+1)*ntfree)/mxnode ++ ++ engke=0.d0 ++ ++ do j=ifre0,ifre1 ++ ++ i=lstfre(j) ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkinf=0.5d0*engke ++ ++ return ++ end function getkinf ++ ++ subroutine getking(ngrp,idnode,mxnode,engtrn,engrot) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c amended - w.smith january 2005 : f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engtrn,engrot ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engtrn=0.d0 ++ engrot=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c group kinetic energy ++ ++ engtrn=engtrn+ ++ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) ++ ++c rotational kinetic energy ++ ++ engrot=engrot+(rotinx(id,1)*omx(ig)**2 ++ x +rotiny(id,1)*omy(ig)**2 ++ x +rotinz(id,1)*omz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++ buffer(5)=engtrn ++ buffer(6)=engrot ++ call gdsum(buffer(5),2,buffer(1)) ++ engtrn=buffer(5) ++ engrot=buffer(6) ++ ++ endif ++ ++ engtrn=0.5d0*engtrn ++ engrot=0.5d0*engrot ++ ++ return ++ end subroutine getking ++ ++ function getkint(ngrp,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate translational kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engtrn,getkint ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engtrn=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c group kinetic energy ++ ++ engtrn=engtrn+ ++ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engtrn ++ call gdsum(buffer(1),1,buffer(2)) ++ engtrn=buffer(1) ++ ++ endif ++ ++ getkint=0.5d0*engtrn ++ ++ return ++ end function getkint ++ ++ function getkinr(ngrp,idnode,mxnode) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate rotational kinetic energy ++c for rigid groups only ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) engrot,getkinr ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ engrot=0.d0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c rotational kinetic energy ++ ++ engrot=engrot+(rotinx(id,1)*omx(ig)**2 ++ x +rotiny(id,1)*omy(ig)**2 ++ x +rotinz(id,1)*omz(ig)**2) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engrot ++ call gdsum(buffer(1),1,buffer(2)) ++ engrot=buffer(1) ++ ++ endif ++ ++ getkinr=0.5d0*engrot ++ ++ return ++ end function getkinr ++ ++ subroutine kinstress(natms,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author - w.smith november 2002 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,iatm0,iatm1,i ++ real(8) stresh(9) ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do i=iatm0,iatm1 ++ ++ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) ++ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) ++ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) ++ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) ++ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) ++ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstress ++ ++ subroutine kinstressg(ngrp,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c ++c********************************************************************* ++ ++ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id ++ real(8) stresh(9) ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ stresh(1)=stresh(1)+gmass(id)*gvxx(ig)*gvxx(ig) ++ stresh(2)=stresh(2)+gmass(id)*gvxx(ig)*gvyy(ig) ++ stresh(3)=stresh(3)+gmass(id)*gvxx(ig)*gvzz(ig) ++ stresh(5)=stresh(5)+gmass(id)*gvyy(ig)*gvyy(ig) ++ stresh(6)=stresh(6)+gmass(id)*gvyy(ig)*gvzz(ig) ++ stresh(9)=stresh(9)+gmass(id)*gvzz(ig)*gvzz(ig) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstressg ++ ++ subroutine getkins(natms,idnode,mxnode,getkin) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate system kinetic energy ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005: f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer natms,idnode,mxnode,iatm0,iatm1,i ++ real(8) getkin,engke ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ engke=0.d0 ++ ++ do i=iatm0,iatm1 ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ call gdsum(buffer(1),1,buffer(2)) ++ engke=buffer(1) ++ ++ endif ++ ++ getkin=0.5d0*engke ++ ++ return ++ end subroutine getkins ++ ++ subroutine kinstressf(ntfree,idnode,mxnode,stresh) ++ ++c********************************************************************* ++c ++c dl_poly routine to calculate kinetic contribution to the ++c stress tensor for unconstrained atoms ++c ++c copyright daresbury laboratory ++c author - m.leslie february 2003 ++c amended - w.smith january 2005: f90 conversion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer ntfree,idnode,mxnode,i,ifre1,ifre2,ifre ++ real(8) stresh(9) ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c initialise stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) ++ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) ++ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) ++ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) ++ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) ++ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) ++ ++ enddo ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c global sum of stress tensor ++ ++ if(mxnode.gt.1) call gdsum(stresh,9,buffer) ++ ++ return ++ end subroutine kinstressf ++ ++ subroutine nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,tstep,qmass_shl, ++ x taut,chit_shl,conint) ++ ++c********************************************************************* ++c ++c dl_poly routine to integrate and apply NVT thermostat ++c thermostats the core-shell relative motion ++c ++c copyright daresbury laboratory ++c author - w.smith october 2002 ++c amended - w.smith january 2005 : f90 conversion ++c adapted - d. quigley 2006 : core-shell motion ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,i,ishl1,ishl2,j,k,m ++ real(8) shlke,sigma_shl,tstep,qmass_shl,chit_shl,conint ++ real(8) dvx,dvy,dvz,tmx,tmy,tmz,rmu,scale,taut ++ ++ ishl1=(idnode*ntshl)/mxnode+1 ++ ishl2=((idnode+1)*ntshl)/mxnode ++ ++c calculate kinetic energy ++ ++ call corshl(idnode,mxnode,ntshl,shlke) ++ ++c update chit to 1/2 step ++ ++ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl ++ ++c thermostat the velocities ++ ++ scale=exp(-tstep*chit_shl) ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) ++ ++ if(rmu.gt.0.d0)then ++ ++ dvx=vxx(j)-vxx(i) ++ dvy=vyy(j)-vyy(i) ++ dvz=vzz(j)-vzz(i) ++ ++ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) ++ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) ++ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) ++ ++ vxx(i)=tmx/(weight(i)+weight(j))-scale*rmu*dvx/weight(i) ++ vxx(j)=tmx/(weight(i)+weight(j))+scale*rmu*dvx/weight(j) ++ vyy(i)=tmy/(weight(i)+weight(j))-scale*rmu*dvy/weight(i) ++ vyy(j)=tmy/(weight(i)+weight(j))+scale*rmu*dvy/weight(j) ++ vzz(i)=tmz/(weight(i)+weight(j))-scale*rmu*dvz/weight(i) ++ vzz(j)=tmz/(weight(i)+weight(j))+scale*rmu*dvz/weight(j) ++ ++ endif ++ ++ enddo ++ ++ shlke=shlke*scale**2 ++ ++c update chi to full step ++ ++ conint=conint+tstep*chit_shl*qmass_shl/taut**2 ++ ++c update chit to full step ++ ++ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl ++ ++ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) ++ ++ return ++ end subroutine nvtscale_shl ++ ++ end module ensemble_tools_module ++ +diff -urN dl_class_1.9.orig/srcmod/error_module.f dl_class_1.9/srcmod/error_module.f +--- dl_class_1.9.orig/srcmod/error_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/error_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1513 @@ ++ module error_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond potentials ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ contains ++ ++ subroutine error(idnode,iode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for printing error messages and bringing ++c about a controlled termination of the program ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c warning - this routine terminates the job. user must ensure ++c that all nodes are informed of error condition before this ++c subroutine is called. e.g. using subroutine gstate(). ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ logical kill ++ integer idnode,iode,kode ++ ++ kill=(iode.ge.0) ++ kode = abs(iode) ++ ++ if(idnode.eq.0)then ++ ++ if(kill)then ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY terminated due to error ', kode ++ ++ else ++ ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY will terminate due to error ', kode ++ ++ endif ++ ++ if(kode.lt.50)then ++ ++ if(kode.eq. 0)then ++ ++c dummy entry ++ ++ elseif(kode.eq. 3)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown directive found in CONTROL file' ++ elseif(kode.eq. 4)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown directive found in FIELD file' ++ elseif(kode.eq. 5)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown energy unit requested' ++ elseif(kode.eq. 6)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - energy unit not specified' ++ elseif(kode.eq. 7)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - energy unit respecified' ++ elseif(kode.eq. 8)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - time step not specified' ++ elseif(kode.eq.10)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many molecule types specified' ++ elseif(kode.eq.11)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate molecule directive in FIELD file' ++ elseif(kode.eq.12)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown molecule directive in FIELD file' ++ elseif(kode.eq.13)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - molecular species not yet specified' ++ elseif(kode.eq.14)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many unique atom types specified' ++ elseif(kode.eq.15)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate pair potential specified' ++ elseif(kode.eq.16)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from FIELD file processing' ++ elseif(kode.eq.17)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from CONTROL file processing' ++ elseif(kode.eq.18)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate 3-body potential specified' ++ elseif(kode.eq.19)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate 4-body potential specified' ++ elseif(kode.eq.20)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many molecule sites specified' ++ elseif(kode.eq.21)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate tersoff potential specified' ++ elseif(kode.eq.22)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unsuitable radial increment in TABLE file' ++ elseif(kode.eq.23)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incompatible FIELD and TABLE file potentials' ++ elseif(kode.eq.24)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABLE file' ++ elseif(kode.eq.25)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - wrong atom type found in CONFIG file' ++ elseif(kode.eq.26)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cutoff smaller than EAM potential range' ++ elseif(kode.eq.27)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incompatible FIELD and TABEAM file potentials' ++ elseif(kode.eq.28)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in mettab' ++ elseif(kode.eq.29)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABEAM file' ++ elseif(kode.eq.30)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many chemical bonds specified' ++ elseif(kode.eq.31)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many chemical bonds in system' ++ elseif(kode.eq.32)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - integer array memory allocation failure' ++ elseif(kode.eq.33)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - real array memory allocation failure' ++ elseif(kode.eq.34)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - character array memory allocation failure' ++ elseif(kode.eq.35)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - logical array memory allocation failure' ++ elseif(kode.eq.36)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - failed fmet array allocation in mettab' ++ elseif(kode.eq.40)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond constraints specified' ++ elseif(kode.eq.41)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond constraints in system' ++ elseif(kode.eq.42)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in merge1' ++ elseif(kode.eq.45)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many atoms in CONFIG file' ++ elseif(kode.eq.46)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - ewlbuf array too small in ewald1' ++ elseif(kode.eq.47)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in merge' ++ elseif(kode.eq.48)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer too small in fortab' ++ elseif(kode.eq.49)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - frozen core-shell unit specified' ++ endif ++ ++ elseif(kode.lt.100)then ++ ++ if(kode.eq.50)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond angles specified' ++ elseif(kode.eq.51)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many bond angles in system' ++ elseif(kode.eq.52)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of FIELD file encountered' ++ elseif(kode.eq.53)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of CONTROL file encountered' ++ elseif(kode.eq.54)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - problem reading CONFIG file' ++ elseif(kode.eq.55)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of CONFIG file encountered' ++ elseif(kode.eq.57)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many core-shell units specified' ++ elseif(kode.eq.59)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many core-shell units in system' ++ elseif(kode.eq.60)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many dihedral angles specified' ++ elseif(kode.eq.61)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many dihedral angles in system' ++ elseif(kode.eq.62)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tethered atoms specified' ++ elseif(kode.eq.63)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tethered atoms in system' ++ elseif(kode.eq.65)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many excluded pairs specified' ++ elseif(kode.eq.66)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition for HK ewald' ++ elseif(kode.eq.67)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in thbfrc' ++ elseif(kode.eq.69)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells required in thbfrc' ++ elseif(kode.eq.70)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - constraint bond quench failure' ++ elseif(kode.eq.71)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many metal potentials specified' ++ elseif(kode.eq.72)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - different metal potential types specified' ++ elseif(kode.eq.73)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many inversion potentials specified' ++ elseif(kode.eq.75)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many atoms in specified system' ++ elseif(kode.eq.77)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many inversion potentials in system' ++ elseif(kode.eq.79)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in fbpfrc' ++ elseif(kode.eq.80)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many pair potentials specified' ++ elseif(kode.eq.81)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in pair potential list' ++ elseif(kode.eq.82)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated pair potential index too large' ++ elseif(kode.eq.83)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many three body potentials specified' ++ elseif(kode.eq.84)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in 3-body potential list' ++ elseif(kode.eq.85)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - required velocities not in CONFIG file' ++ elseif(kode.eq.86)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated 3-body potential index too large' ++ elseif(kode.eq.87)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells required in fbpfrc' ++ elseif(kode.eq.88)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many tersoff potentials specified' ++ elseif(kode.eq.89)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many four body potentials specified' ++ elseif(kode.eq.90)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - system total electric charge nonzero' ++ elseif(kode.eq.91)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in 4-body potential list' ++ elseif(kode.eq.92)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in tersoff potential list' ++ elseif(kode.eq.93)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with rigid molecules' ++ elseif(kode.eq.95)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - potential cutoff exceeds half-cell width' ++ elseif(kode.eq.97)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with neutral groups' ++ elseif(kode.eq.99)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cannot use shell model with constraints' ++ endif ++ ++ elseif(kode.lt.150)then ++ ++ if(kode.eq.100)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - forces working arrays too small' ++ elseif(kode.eq.101)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated 4-body potential index too large' ++ elseif(kode.eq.102)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxproc exceeded in shake arrays' ++ elseif(kode.eq.103)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxlshp exceeded in shake arrays' ++ elseif(kode.eq.105)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - shake algorithm failed to converge' ++ elseif(kode.eq.106)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlink ' ++ x //'subroutine' ++ elseif(kode.eq.107)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlinkneu ' ++ x //'subroutine' ++ elseif(kode.eq.108)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parneulst ' ++ x //'subroutine' ++ elseif(kode.eq.109)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlst_nsq ' ++ x //'subroutine' ++ elseif(kode.eq.110)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neighbour list array too small in parlst ' ++ x //'subroutine' ++ elseif(kode.eq.112)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - vertest array too small' ++ elseif(kode.eq.120)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - invalid determinant in matrix inversion' ++ elseif(kode.eq.130)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect octahedral boundary condition' ++ elseif(kode.eq.135)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect hexagonal prism boundary condition' ++ elseif(kode.eq.140)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect dodecahedral boundary condition' ++ elseif(kode.eq.141)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - duplicate metal potential specified' ++ elseif(kode.eq.142)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - interpolation outside range of metal '// ++ x 'potential attempted' ++ elseif(kode.eq.145)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - no van der waals potentials defined' ++ endif ++ ++ elseif(kode.lt.200)then ++ ++ if(kode.eq.150)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown van der waals potential selected' ++ elseif(kode.eq.151)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unknown metal potential selected' ++ elseif(kode.eq.153)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - metals not permitted with multiple timestep' ++ elseif(kode.eq.160)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unaccounted for atoms in exclude list ' ++ elseif(kode.eq.170)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many variables for statistic array ' ++ elseif(kode.eq.180)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - Ewald sum requested in non-periodic system' ++ elseif(kode.eq.185)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many reciprocal space vectors' ++ elseif(kode.eq.186)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer array too small in sysgen' ++ elseif(kode.eq.190)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - buffer array too small in splice' ++ endif ++ ++ elseif(kode.lt.250)then ++ ++ if(kode.eq.200)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - rdf buffer array too small in revive' ++ elseif(kode.eq.220)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many neutral groups in system' ++ elseif(kode.eq.225)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - multiple selection of optimisation options' ++ elseif(kode.eq.230)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neutral groups improperly arranged' ++ endif ++ ++ elseif(kode.lt.300)then ++ ++ if(kode.eq.250)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - Ewald sum requested with neutral groups' ++ elseif(kode.eq.260)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - parameter mxexcl exceeded in excludeneu routine' ++ endif ++ ++ elseif(kode.lt.350)then ++ ++ if(kode.eq.300)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect boundary condition in parlink' ++ elseif(kode.eq.301)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid body types ' ++ elseif(kode.eq.302)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many sites in rigid body ' ++ elseif(kode.eq.303)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid bodies specified' ++ elseif(kode.eq.304)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many rigid body sites in system ' ++ elseif(kode.eq.305)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - box size too small for link cells' ++ elseif(kode.eq.306)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - failed to find principal axis system' ++ elseif(kode.eq.310)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - quaternion setup failed ' ++ elseif(kode.eq.320)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - site in multiple rigid bodies' ++ elseif(kode.eq.321)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - quaternion integrator failed' ++ elseif(kode.eq.330)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxewld parameter incorrect' ++ elseif(kode.eq.331)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxhke parameter incorrect' ++ elseif(kode.eq.332)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxhko parameter too small' ++ elseif(kode.eq.340)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - invalid integration option requested' ++ endif ++ ++ elseif(kode.lt.400)then ++ ++ if(kode.eq.350)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too few degrees of freedom' ++ elseif(kode.eq.360)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - frozen atom found in rigid body' ++ elseif(kode.eq.380)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation temperature not specified' ++ elseif(kode.eq.381)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation timestep not specified' ++ elseif(kode.eq.382)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation cutoff not specified' ++ elseif(kode.eq.383)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - simulation forces option not specified' ++ elseif(kode.eq.384)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - verlet strip width not specified' ++ elseif(kode.eq.385)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - primary cutoff not specified' ++ elseif(kode.eq.386)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - primary cutoff larger than rcut' ++ elseif(kode.eq.387)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - system pressure not specified' ++ elseif(kode.eq.388)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - npt incompatible with multiple timestep' ++ elseif(kode.eq.389)then ++ write(nrite,'(/,/,1x,a)') ++ x 'number of pimd beads not specified in field file' ++ elseif(kode.eq.390)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - npt ensemble requested in non-periodic system' ++ elseif(kode.eq.391)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - incorrect number of pimd beads in config file' ++ elseif(kode.eq.392)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many link cells requested' ++ elseif(kode.eq.394)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - minimum image arrays exceeded' ++ elseif(kode.eq.396)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - interpolation array exceeded' ++ elseif(kode.eq.398)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cutoff too small for rprim and delr' ++ endif ++ ++ elseif(kode.lt.450)then ++ ++ if(kode.eq.400)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - rvdw greater than cutoff' ++ elseif(kode.eq.402)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - van der waals cutoff unset' ++ elseif(kode.eq.410)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - cell not consistent with image convention' ++ elseif(kode.eq.412)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - mxxdf parameter too small for shake routine' ++ elseif(kode.eq.414)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - conflicting ensemble options in CONTROL file' ++ elseif(kode.eq.416)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - conflicting force options in CONTROL file' ++ elseif(kode.eq.418)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in bndfrc' ++ elseif(kode.eq.419)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in angfrc' ++ elseif(kode.eq.420)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in tethfrc' ++ elseif(kode.eq.421)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in dihfrc' ++ elseif(kode.eq.422)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - all-pairs must use multiple timestep' ++ elseif(kode.eq.423)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in shlfrc' ++ elseif(kode.eq.424)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - electrostatics incorrect for all-pairs' ++ elseif(kode.eq.425)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - transfer buffer array too small in shlmerge' ++ elseif(kode.eq.426)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - neutral groups not permitted with all-pairs' ++ elseif(kode.eq.427)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - bond vector work arrays too small in invfrc' ++ elseif(kode.eq.430)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - integration routine not available' ++ elseif(kode.eq.432)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - intlist failed to assign constraints ' ++ elseif(kode.eq.433)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - specify rcut before the Ewald sum precision' ++ elseif(kode.eq.434)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - illegal entry into STRESS related routine' ++ elseif(kode.eq.435)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - specify rcut before the coulomb precision' ++ elseif(kode.eq.436)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unrecognised ensemble ' ++ elseif(kode.eq.438)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - PMF constraints failed to converge' ++ elseif(kode.eq.440)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined angular potential' ++ elseif(kode.eq.442)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined three body potential' ++ elseif(kode.eq.443)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined four body potential' ++ elseif(kode.eq.444)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined bond potential' ++ elseif(kode.eq.445)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined many body potential' ++ elseif(kode.eq.446)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined electrostatic key in dihfrc' ++ elseif(kode.eq.447)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - 1-4 separation exceeds cutoff range' ++ elseif(kode.eq.448)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined dihedral potential' ++ elseif(kode.eq.449)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined inversion potential' ++ endif ++ ++ elseif(kode.lt.500)then ++ ++ if(kode.eq.450)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined tethering potential' ++ elseif(kode.eq.451)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - three body potential cutoff undefined' ++ elseif(kode.eq.452)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined pair potential' ++ elseif(kode.eq.453)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - four body potential cutoff undefined' ++ elseif(kode.eq.454)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined external field' ++ elseif(kode.eq.456)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - core and shell in same rigid unit' ++ elseif(kode.eq.458)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many PMF constraints - param. mspmf too ' ++ x //'small' ++ elseif(kode.eq.460)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - too many PMF sites - parameter mxspmf too small' ++ elseif(kode.eq.461)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - undefined metal potential' ++ elseif(kode.eq.462)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - PMF UNIT record expected' ++ elseif(kode.eq.463)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - unidentified atom in metal potential list' ++ elseif(kode.eq.464)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - thermostat time constant must be > 0.d0' ++ elseif(kode.eq.465)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - calculated pair potential index too large' ++ elseif(kode.eq.466)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - barostat time constant must be > 0.d0' ++ elseif(kode.eq.468)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - r0 too large for snm potential with current ' ++ x //'cutoff' ++ elseif(kode.eq.470)then ++ write(nrite,'(/,/,1x,a)') ++ x 'error - n= ',nsatms ++ call error(idnode,100) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c variables for array bound checking ++ ++ ibig=0 ++ safe=.true. ++ ++c initialise excluded atom arrays ++ ++ do i=1,mxsite ++ ++ nexsit(i)=0 ++ ++ enddo ++ ++ do i=1,msatms ++ ++ nexatm(i)=0 ++ ++ enddo ++ ++ do j=1,mxexcl ++ ++ do i=1,mxsite ++ ++ lexsit(i,j)=0 ++ ++ enddo ++ ++ do i=1,msatms ++ ++ lexatm(i,j)=0 ++ ++ enddo ++ ++ enddo ++ ++ ++c loop over molecules in system ++ ++ ibonds=0 ++ iangle=0 ++ iconst=0 ++ idihdr=0 ++ invers=0 ++ igrp =0 ++ isite =0 ++ ishels=0 ++ ++ do itmols=1,ntpmls ++ ++c exclude sites on basis of chemical bonds ++ ++ do i=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(keybnd(ibonds).gt.0)then ++ ++ ia=lstbnd(ibonds,1)+isite ++ ib=lstbnd(ibonds,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of bond constraints ++ ++ do i=1,numcon(itmols) ++ ++ iconst=iconst+1 ++ ia=lstcon(iconst,1)+isite ++ ib=lstcon(iconst,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ enddo ++ ++c exclude sites on basis of bond angles ++ ++ do i=1,numang(itmols) ++ ++ iangle=iangle+1 ++ if(keyang(iangle).gt.0)then ++ ia=lstang(iangle,1)+isite ++ ib=lstang(iangle,2)+isite ++ ic=lstang(iangle,3)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude on basis of rigid groups ++ ++ do i=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ id=listyp(igrp) ++ ++ do jj=1,numgsit(id)-1 ++ ++ ia=lstgst(igrp,jj)+isite ++ ++ do jk=jj+1,numgsit(id) ++ ++ ib=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c exclude sites on basis of 1-4 dihedral angles ++ ++ do i=1,numdih(itmols) ++ ++ idihdr=idihdr+1 ++ ia=lstdih(idihdr,1)+isite ++ ib=lstdih(idihdr,2)+isite ++ ic=lstdih(idihdr,3)+isite ++ id=lstdih(idihdr,4)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++c id - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ib-isite ++ lexsit(ib,nexsit(ib))=id-isite ++ endif ++ endif ++ ++c id - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ic-isite ++ lexsit(ic,nexsit(ic))=id-isite ++ endif ++ endif ++ ++c ia - id interaction: may need to reset vdw and elec scale factors ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.id-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(id)=nexsit(id)+1 ++ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(id)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=id-isite ++ lexsit(id,nexsit(id))=ia-isite ++ endif ++ ++ elseif(keydih(idihdr).ne.7)then ++ ++c if already excluded reset 1..4 vdw and coulombic scale factors ++ ++ check=((abs(prmdih(idihdr,4)).gt.1.d-10).or. ++ x (abs(prmdih(idihdr,5)).gt.1.d-10)) ++ ++ if(check)then ++ ++ a1=dble(itmols) ++ a2=dble(ia) ++ a3=dble(id) ++ call warning(idnode,20,a1,a2,a3) ++ ++ prmdih(idihdr,4)=0.d0 ++ prmdih(idihdr,5)=0.d0 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of inversion potentials ++ ++ do i=1,numinv(itmols) ++ ++ invers=invers+1 ++ ia=lstinv(invers,1)+isite ++ ib=lstinv(invers,2)+isite ++ ic=lstinv(invers,3)+isite ++ id=lstinv(invers,4)+isite ++ ++c check if already added to lists .. ++c ia - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c ib - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib),mxexcl) ++ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib)=nexsit(ib)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ib,nexsit(ib))=ic-isite ++ lexsit(ic,nexsit(ic))=ib-isite ++ endif ++ endif ++ ++c ia - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ic-isite ++ lexsit(ic,nexsit(ic))=ia-isite ++ endif ++ endif ++ ++c id - ib interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ib-isite ++ lexsit(ib,nexsit(ib))=id-isite ++ endif ++ endif ++ ++c id - ic interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(id),mxexcl) ++ if(lexsit(id,jz).eq.ic-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(id)=nexsit(id)+1 ++ nexsit(ic)=nexsit(ic)+1 ++ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(id),nexsit(ic)) ++ safe=.false. ++ else ++ lexsit(id,nexsit(id))=ic-isite ++ lexsit(ic,nexsit(ic))=id-isite ++ endif ++ endif ++ ++c ia - id interaction ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.id-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(id)=nexsit(id)+1 ++ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(id)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=id-isite ++ lexsit(id,nexsit(id))=ia-isite ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of core-shell units ++ ++ do i=1,numshl(itmols) ++ ++ ishels=ishels+1 ++ ++ ia=lstshl(ishels,1)+isite ++ ib=lstshl(ishels,2)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib-isite ++ lexsit(ib,nexsit(ib))=ia-isite ++ endif ++ endif ++ ++c exclude sites on basis of bonds to core-shell units ++ ++ ibonds=ibonds-numbonds(itmols) ++ do kk=1,numbonds(itmols) ++ ++ ibonds=ibonds+1 ++ ++ if(keybnd(ibonds).gt.0)then ++ ++ ia1=lstbnd(ibonds,1)+isite ++ ib1=lstbnd(ibonds,2)+isite ++ ++ if(ia.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ia.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia1),mxexcl) ++ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia1)=nexsit(ia1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia1,nexsit(ia1))=ib-isite ++ lexsit(ib,nexsit(ib))=ia1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ib.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ endif ++ ++ endif ++ if(ib.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ia1)=nexsit(ia1)+1 ++ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ia1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ia1-isite ++ lexsit(ia1,nexsit(ia1))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of constraint bonds to core-shell units ++ ++ iconst=iconst-numcon(itmols) ++ do kk=1,numcon(itmols) ++ ++ iconst=iconst+1 ++ ++ ia1=lstcon(iconst,1)+isite ++ ib1=lstcon(iconst,2)+isite ++ ++ if(ia.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ia.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia1),mxexcl) ++ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia1)=nexsit(ia1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ia1,nexsit(ia1))=ib-isite ++ lexsit(ib,nexsit(ib))=ia1-isite ++ endif ++ endif ++ ++ endif ++ ++ if(ib.eq.ia1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ endif ++ ++ endif ++ if(ib.eq.ib1)then ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ia1)=nexsit(ia1)+1 ++ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ia1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ia1-isite ++ lexsit(ia1,nexsit(ia1))=ia-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++c exclude sites on basis of rigid units involving core or shell ++ ++ igrp=igrp-numgrp(itmols) ++ do kk=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ id=listyp(igrp) ++ ++ do jj=1,numgsit(id) ++ ++ ia1=lstgst(igrp,jj)+isite ++ if(ia1.eq.ia)then ++ ++ do jk=1,numgsit(id) ++ ++ if(jk.ne.jj)then ++ ib1=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ib1),mxexcl) ++ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ib1)=nexsit(ib1)+1 ++ nexsit(ib)=nexsit(ib)+1 ++ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ib1),nexsit(ib)) ++ safe=.false. ++ else ++ lexsit(ib1,nexsit(ib1))=ib-isite ++ lexsit(ib,nexsit(ib))=ib1-isite ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ if(ia1.eq.ib)then ++ ++ do jk=1,numgsit(id) ++ ++ if(jk.ne.jj)then ++ ib1=lstgst(igrp,jk)+isite ++ ++c check interaction not already included ++ ++ lchk=.true. ++ do jz=1,min(nexsit(ia),mxexcl) ++ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. ++ enddo ++ if(lchk)then ++ nexsit(ia)=nexsit(ia)+1 ++ nexsit(ib1)=nexsit(ib1)+1 ++ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then ++ ibig=max(ibig,nexsit(ia),nexsit(ib1)) ++ safe=.false. ++ else ++ lexsit(ia,nexsit(ia))=ib1-isite ++ lexsit(ib1,nexsit(ib1))=ia-isite ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ isite=isite+numsit(itmols) ++ ++ enddo ++ ++ ntpsit=isite ++ ++c check for exceeded array bounds ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ if(mxnode.gt.1)call gimax(ibig,1,jj) ++ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl ++ call error(idnode,65) ++ endif ++ ++c remove redundant entries from exclusion list ++c (there shouldn't be any!) ++ ++ do i=1,ntpsit ++ ++ nlast=nexsit(i) ++ do j=1,nexsit(i)-1 ++ ++ if(j.lt.nlast)then ++ ++ kk=j ++ do k=j+1,nexsit(i) ++ ++ if(lexsit(i,j).eq.lexsit(i,k))then ++ ++ nlast=nlast-1 ++ lexsit(i,k)=0 ++ ++ else if(lexsit(i,k).gt.0)then ++ ++ kk=kk+1 ++ lexsav=lexsit(i,k) ++ lexsit(i,k)=0 ++ lexsit(i,kk)=lexsav ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ nexsit(i)=nlast ++ ++ enddo ++ ++ return ++ end subroutine exclude ++ ++ subroutine excludeneu(idnode,mxnode,nneut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c part 2 - neutral group implementation ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk ++ integer idnode,mxnode,nneut,ibig,iatom,jatom,last,mpm2 ++ integer npm2,m,ii,im,itmols,inoff,isoff,isit,iolsit,jm,jtmols ++ integer jnoff,jsoff,jsit,jolsit,jn1,jno1,jsite,jsite0,in1,ino1 ++ integer jj0,isite,ij,idum,it ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ ibig=0 ++ iatom=0 ++ jatom=0 ++ ++c generate all atomic pairs and check for exclusions ++c with Brode Ahlrichs ordering of groups ++ ++ last=nneut ++ lchk=.true. ++ mpm2=nneut/2+1 ++ npm2=(nneut-1)/2+1 ++ ++c outer loop over groups ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2-1 ++ ++c inner loop over groups - include intragroup interactions ++ ++ ii=0 ++ ++ do im=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ ++c first site in neutral group ++ ++ itmols=1 ++ inoff=0 ++ isoff=0 ++ isit=numsit(itmols)*nummols(itmols) ++ iolsit=numsit(itmols) ++ ++c calculate j group indices ++ ++ jm=im+m-1 ++ if(jm.gt.nneut)jm=jm-nneut ++ ++c inner loop over neutral groups ++ ++ jtmols=1 ++ jnoff=0 ++ jsoff=0 ++ jsit=numsit(jtmols)*nummols(jtmols) ++ jolsit=numsit(jtmols) ++ ++c test first sites in neutral group ++ ++ jatom=neulst(jm) ++ ++c establish pointer to sets ++ ++ do while(jatom.gt.jsit) ++ ++ jtmols=jtmols+1 ++ jnoff=jsit ++ jsoff=jsoff+jolsit ++ jsit=jsit+nummols(jtmols)*numsit(jtmols) ++ jolsit=numsit(jtmols) ++ ++ enddo ++ ++ jn1=jatom-jnoff ++ jno1=(jn1/jolsit)*jolsit ++ jsite=jn1-jno1 ++ if(jsite.eq.0)then ++ jsite=jolsit ++ jno1=jno1-jolsit ++ endif ++ jsite=jsite+jsoff ++ jsite0=jsite-1 ++ ++ do iatom=neulst(im),neulst(im+1)-1 ++ ++c establish pointer to sets ++ ++ do while(iatom.gt.isit) ++ ++ itmols=itmols+1 ++ inoff=isit ++ isoff=isoff+iolsit ++ isit=isit+nummols(itmols)*numsit(itmols) ++ iolsit=numsit(itmols) ++ ++ enddo ++ ++ in1=iatom-inoff ++ ino1=(in1/iolsit)*iolsit ++ isite=in1-ino1 ++ if(isite.eq.0)then ++ isite=iolsit ++ ino1=ino1-iolsit ++ endif ++ isite=isite+isoff ++ ++c test im and jm are neutral groups on same molecule ++ ++ if((jnoff.eq.inoff).and.(ino1.eq.jno1))then ++ if(abs(im-jm).lt.iolsit)then ++ ++ jj0=neulst(jm) ++ jsite=jsite0 ++ ++c special case for im=jm (ie. same group) ++ ++ if(im.eq.jm)then ++ ++ jj0=iatom+1 ++ jsite=isite ++ ++ endif ++ ++c test for excluded interaction ++ ++ do jatom=jj0,neulst(jm+1)-1 ++ ++ jsite=jsite+1 ++ ++ do ij=1,nexsit(isite) ++ ++ if(lexsit(isite,ij).eq.jsite-jsoff)then ++ ++ it=nexatm(ii) ++ ++ if(it+2.gt.mxexcl)then ++ ++ ibig=max(it+2,ibig) ++ nexatm(ii)=it+2 ++ lchk=.false. ++ ++ else ++ ++ lexatm(ii,it+1)=iatom ++ lexatm(ii,it+2)=jatom ++ nexatm(ii)=nexatm(ii)+2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c global check ++ ++ call gstate(lchk) ++ if(.not.lchk)then ++ ++ if(mxnode.gt.1)call gimax(ibig,1,idum) ++ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl ++ call error(idnode,260) ++ ++ endif ++ ++ return ++ end subroutine excludeneu ++ ++ subroutine exclude_link(idnode,mxnode,ntpmls) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c ++c part 2 - link cell implementation ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith june 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntpmls,iatom,jatom,lsite,ksite ++ integer itmols,imols,isite,kk,newatm,k ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ iatom=0 ++ jatom=0 ++ lsite=0 ++ ksite=0 ++ ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do isite=1,numsit(itmols) ++ ++ iatom=iatom+1 ++ ++ if(mod(iatom-1,mxnode).eq.idnode)then ++ ++ kk=0 ++ jatom=jatom+1 ++ ++ do k=1,nexsit(ksite+isite) ++ ++ newatm=lexsit(ksite+isite,k)+lsite ++ ++ kk=kk+1 ++ lexatm(jatom,kk)=newatm ++ ++ enddo ++ ++ nexatm(jatom)=kk ++ ++ endif ++ ++ enddo ++ ++ lsite=lsite+numsit(itmols) ++ ++ enddo ++ ++ ksite=ksite+numsit(itmols) ++ ++ enddo ++ ++ return ++ end subroutine exclude_link ++ ++ subroutine exclude_atom(idnode,mxnode,natms,ntpmls) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the excluded pair ++c interaction list of the system to be simulated ++c part 2 ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith june 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,ntpmls,iatom,jatom,lsite ++ integer ksite,itmols,isite,imols,k,kk,newatm,j,latom,i,ii ++ ++c construct excluded pair list for verlet neighbour correction ++ ++ iatom=0 ++ jatom=0 ++ lsite=0 ++ ksite=0 ++ ++ do itmols=1,ntpmls ++ ++ do imols=1,nummols(itmols) ++ ++ do isite=1,numsit(itmols) ++ ++ iatom=iatom+1 ++ ++ if(mod(iatom-1,mxnode).eq.idnode)then ++ ++ kk=0 ++ jatom=jatom+1 ++ ++ do k=1,nexsit(ksite+isite) ++ ++ newatm=lexsit(ksite+isite,k)+lsite ++ ++c keep only brode-ahlrichs combinations of indices ++ ++ if(((newatm.gt.iatom).and. ++ x (newatm-iatom.le.natms/2)).or. ++ x ((newatm.lt.iatom).and. ++ x (newatm+natms-iatom.le.(natms-1)/2)))then ++ ++ kk=kk+1 ++ lexatm(jatom,kk)=newatm ++ ++ if(kk.gt.1)then ++ ++c sort the excluded atom list in ascending indices ++ ++ do j=kk,2,-1 ++ ++ if(lexatm(jatom,j).lt.lexatm(jatom,j-1)) ++ x then ++ latom=lexatm(jatom,j) ++ lexatm(jatom,j)=lexatm(jatom,j-1) ++ lexatm(jatom,j-1)=latom ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ nexatm(jatom)=kk ++ ++ endif ++ ++ enddo ++ ++ lsite=lsite+numsit(itmols) ++ ++ enddo ++ ++ ksite=ksite+numsit(itmols) ++ ++ enddo ++ ++c final sort into brode-ahlrichs ordering ++ ++ ii=0 ++ do i=1+idnode,natms,mxnode ++ ++ ii=ii+1 ++ do j=1,nexatm(ii) ++ ++ if(lexatm(ii,1).lt.i)then ++ ++ latom=lexatm(ii,1) ++ ++ do k=1,nexatm(ii)-1 ++ ++ lexatm(ii,k)=lexatm(ii,k+1) ++ ++ enddo ++ ++ lexatm(ii,nexatm(ii))=latom ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine exclude_atom ++ ++ end module exclude_module ++ +diff -urN dl_class_1.9.orig/srcmod/external_field_module.f dl_class_1.9/srcmod/external_field_module.f +--- dl_class_1.9.orig/srcmod/external_field_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/external_field_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,347 @@ ++ module external_field_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining external field potential arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmfld(:) ++ ++ save prmfld ++ ++ contains ++ ++ subroutine alloc_fld_arrays(idnode) ++ ++ implicit none ++ ++ integer fail,idnode ++ ++ data fail/0/ ++ ++ allocate (prmfld(mxfld),stat=fail) ++ if(fail.ne.0)call error(idnode,1200) ++ ++ end subroutine alloc_fld_arrays ++ ++ subroutine define_external_field ++ x (safe,lunits,idnode,keyfld,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to define external fields ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c amended - p.-l. chau jun 2009 z-restraint option ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,keyfld,nfld,i,k,idum ++ real(8) engunit ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call strip(record,lenrec) ++ call lowcase(record,lenrec) ++ call copystring(record,message,80) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'elec') then ++ keyfld=1 ++ elseif(keyword(1:4).eq.'oshr') then ++ keyfld=2 ++ elseif(keyword(1:4).eq.'shrx') then ++ keyfld=3 ++ elseif(keyword(1:4).eq.'grav') then ++ keyfld=4 ++ elseif(keyword(1:4).eq.'magn') then ++ keyfld=5 ++ elseif(keyword(1:4).eq.'sphr') then ++ keyfld=6 ++ elseif(keyword(1:4).eq.'zbnd') then ++ keyfld=7 ++ elseif(keyword(1:4).eq.'zres') then ++ keyfld=9 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,454) ++ endif ++ ++ do i=1,mxfld ++ prmfld(i)=0.d0 ++ enddo ++ ++ nfld=intstr(record,lenrec,idum) ++ if(nfld.eq.0)nfld=5 ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ do k=1,nfld ++ ++ prmfld(k)=dblstr(record,lenrec,idum) ++ if(idum.gt.lenrec.and.k.lt.nfld)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'external field key ',13x,a4, ++ x /,/,30x,'external field parameters')") keyword(1:4) ++ write(nrite,"(2(/,1x,1p,5e15.5))") prmfld ++ ++ endif ++ ++c convert to internal units ++ ++ if(keyfld.eq.1.or.keyfld.eq.4.or.keyfld.eq.5) then ++ ++ if(.not.lunits)call error(idnode,6) ++ ++ do i=1,3 ++ prmfld(i)=prmfld(i)*engunit ++ enddo ++ ++ elseif(keyfld.eq.2.or.keyfld.eq.6.or.keyfld.eq.7) then ++ ++ prmfld(1)=prmfld(1)*engunit ++ ++ elseif(keyfld.eq.9) then ++ ++ prmfld(3)=prmfld(3)*engunit ++ ++ endif ++ ++ return ++ end subroutine define_external_field ++ ++ subroutine extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c*********************************************************************** ++c ++c dl_poly routine for application of an external field ++c ++c replicated data version / block data ++c ++c copyright daresbury laboratory 1993 ++c author - t.forester october 1993 ++c amended - t.forester dec 1994 ++c amended - p.-l. chau jun 2009 z-restraint option ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,keyfld,mxnode,natms,iatm1,iatm2,i,j ++ integer istart,ifinish,numresat ++ real(8) engfld,virfld,rz,rrr,gamma,zdif,totwgt ++ real(8) com(3) ++ ++c energy and virial accumulators ++ ++ engfld=0.d0 ++ virfld=0.d0 ++ ++c block indices ++ ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ if(keyfld.eq.1) then ++ ++c electric field: prmfld(1-3) are field components ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+chge(i)*prmfld(1) ++ fyy(i)=fyy(i)+chge(i)*prmfld(2) ++ fzz(i)=fzz(i)+chge(i)*prmfld(3) ++ ++ enddo ++ ++ elseif(keyfld.eq.2) then ++ ++c oscillating shear: orthorhombic box: Fx=a*cos(b.2.pi.z/L) ++ ++ rz=2.d0*pi/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+prmfld(1)*cos(prmfld(2)*zzz(i)*rz) ++ ++ enddo ++ ++ elseif(keyfld.eq.3.and.imcon.eq.6) then ++ ++c continuous shear of walls : 2D periodic box (imcon=6) ++c shear rate=prmfld(1) angstrom per ps for atoms at ++c abs(z) > prmfld(2) ++ ++ do i=iatm1,iatm2 ++ ++ if(abs(zzz(i)).gt.prmfld(2)) then ++ ++ vxx(i)=0.5d0*sign(prmfld(1),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.4) then ++ ++c gravitational field: field components given by prmfld(1-3) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+prmfld(1)*weight(i) ++ fyy(i)=fyy(i)+prmfld(2)*weight(i) ++ fzz(i)=fzz(i)+prmfld(3)*weight(i) ++ ++ enddo ++ ++ elseif(keyfld.eq.5) then ++ ++c magnetic field: field components given by prmfld(1-3) ++ ++ do i=iatm1,iatm2 ++ ++ fxx(i)=fxx(i)+(vyy(i)*prmfld(3)-vzz(i)*prmfld(2)) ++ x *chge(i) ++ fyy(i)=fyy(i)+(vzz(i)*prmfld(1)-vxx(i)*prmfld(3)) ++ x *chge(i) ++ fzz(i)=fzz(i)+(vxx(i)*prmfld(2)-vyy(i)*prmfld(1)) ++ x *chge(i) ++ ++ enddo ++ ++ elseif(keyfld.eq.6) then ++ ++c containing sphere : r^(-n) potential ++ ++ do i=iatm1,iatm2 ++ ++ rrr=sqrt(xxx(i)**2+yyy(i)**2+zzz(i)**2) ++ if(rrr.gt.prmfld(4)) then ++ rrr=prmfld(2)-rrr ++ if(rrr.lt.0.d0) rrr=0.1d0 ++ ++ gamma =prmfld(1)*rrr**(-prmfld(3)) ++ engfld=engfld+gamma ++ ++ gamma=-prmfld(3)*gamma/((prmfld(2)-rrr)*rrr) ++ ++ fxx(i)=fxx(i)+gamma*xxx(i) ++ fyy(i)=fyy(i)+gamma*yyy(i) ++ fzz(i)=fzz(i)+gamma*zzz(i) ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.7) then ++ ++c repulsive wall (harmonic) starting at z0 ++ ++ do i=iatm1,iatm2 ++ ++ if(prmfld(3)*zzz(i).gt.prmfld(3)*prmfld(2)) then ++ ++ zdif=zzz(i)-prmfld(2) ++ gamma=-prmfld(1)*zdif ++ ++ fzz(i)=fzz(i)+gamma ++ engfld=engfld-gamma*zdif/2. ++ ++ endif ++ ++ enddo ++ ++ elseif(keyfld.eq.9) then ++ ++c keyfld=9. restrain molecule z-position ++c prmfld(1) is number of first atom of restrained molecule ++c prmfld(2) is number of last atom of restrained molecule ++c prmfld(3) is the restraining constant ++c prmfld(4) is z-min ++c prmfld(5) is z-max ++ ++ istart=nint(prmfld(1)) ++ ifinish=nint(prmfld(2)) ++ numresat=ifinish-istart+1 ++ ++c calculate the centre of mass of the molecule ++ ++ call getcom_mol(istart,ifinish,imcon,idnode,mxnode,totwgt,com) ++ ++c apply restraint force according to location ++ ++ if(com(3).lt.prmfld(4))then ++ ++c if centre of mass is below z-min, activate restraining force ++ ++ do i=istart,ifinish ++ ++ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* ++ x (com(3)-prmfld(4)) ++ ++ enddo ++ ++ elseif(com(3).gt.prmfld(5))then ++ ++c if centre of mass if above z-max, activate restraining force ++ ++ do i=istart,ifinish ++ ++ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* ++ x (com(3)-prmfld(5)) ++ ++ enddo ++ ++ endif ++ ++ else ++ ++c unidentified field potential error exit ++ ++ call error(idnode,454) ++ ++ endif ++ ++c global sum of external field potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engfld ++ buffer(2)=virfld ++ call gdsum(buffer(1),2,buffer(3)) ++ engfld=buffer(1) ++ virfld=buffer(2) ++ ++ endif ++ ++ return ++ end subroutine extnfld ++ ++ end module external_field_module +diff -urN dl_class_1.9.orig/srcmod/forces_module.f dl_class_1.9/srcmod/forces_module.f +--- dl_class_1.9.orig/srcmod/forces_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/forces_module.f 2015-11-16 17:18:13.442475750 +0100 +@@ -0,0 +1,2970 @@ ++ module forces_module ++ ++c*********************************************************************** ++c ++c dl_poly module for calculation of atomic forces ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d. quigley : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use coulomb_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use metafreeze_module ++ use metal_module ++ use neu_coul_module ++ use nlist_builders_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ use spme_module ++ use tersoff_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ contains ++ ++ subroutine force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to manage the calculation of the atomic forces ++c from all force field terms. ++c ++c copyright - daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva ++ logical lfree,lghost,llsolva ++ ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet ++ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva ++ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld ++ ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih ++ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld ++ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord ++ ++ llsolva=.false. ++ ++c initialize energy and virial accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ engang=0.d0 ++ virang=0.d0 ++ engdih=0.d0 ++ virdih=0.d0 ++ enginv=0.d0 ++ virinv=0.d0 ++ engtbp=0.d0 ++ virtbp=0.d0 ++ engter=0.d0 ++ virter=0.d0 ++ engfbp=0.d0 ++ virfbp=0.d0 ++ engsrp=0.d0 ++ virsrp=0.d0 ++ engcpe=0.d0 ++ vircpe=0.d0 ++ engfld=0.d0 ++ virfld=0.d0 ++ engshl=0.d0 ++ virshl=0.d0 ++ shlke =0.d0 ++ engtet=0.d0 ++ virtet=0.d0 ++ engmet=0.d0 ++ virmet=0.d0 ++ virord=0.0d0 ++ engord=0.0d0 ++ ++ if(lmetadyn)then ++ ++ eng_loc=0.0d0 ++ vir_loc=0.0d0 ++ fxx_loc(:)=0.0d0 ++ fyy_loc(:)=0.0d0 ++ fzz_loc(:)=0.0d0 ++ stress_loc(:)=0.0d0 ++ ++ endif ++ ++c initialise free energy accumulators ++ ++ if(lfree)then ++ ++ ang_fre=0.d0 ++ bnd_fre=0.d0 ++ dih_fre=0.d0 ++ inv_fre=0.d0 ++ tbp_fre=0.d0 ++ fbp_fre=0.d0 ++ cou_fre=0.d0 ++ vdw_fre=0.d0 ++ shl_fre=0.d0 ++ ang_vir=0.d0 ++ bnd_vir=0.d0 ++ dih_vir=0.d0 ++ inv_vir=0.d0 ++ tbp_vir=0.d0 ++ fbp_vir=0.d0 ++ cou_vir=0.d0 ++ vdw_vir=0.d0 ++ shl_vir=0.d0 ++ eng_cfg_fre=0.d0 ++ vir_cfg_fre=0.d0 ++ ++ endif ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ if(keyfce/2.gt.0)lcomp(6)=.true. ++ if(mod(keyfce,2).eq.1)lcomp(7)=.true. ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ llsolva=.true. ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c initialise the force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ if(nstep.gt.0)then ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ endif ++ ++ if(keyfce.gt.0)then ++ ++c calculate pair forces, including coulombic forces ++ ++ if(lnsq)then ++ ++c multiple timestep - all-pairs ++ ++ call multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++ elseif(.not.lneut)then ++ ++c single timestep ++ ++ if(multt.eq.1)then ++ ++ call forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, ++ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, ++ x vircpe,virsrp,volm,engmet,virmet) ++ ++ else ++ ++ call multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++ ++ endif ++ ++ elseif(lneut)then ++ ++c neutral groups ++ ++ if(multt.eq.1)then ++ ++ call forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++ else ++ ++ call multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add in long range corrections to energy and pressure ++ ++ engsrp=engsrp+elrc ++ virsrp=virsrp+virlrc ++ engmet=engmet+elrcm(0) ++ virmet=virmet+vlrcm(0) ++ if(lfree)then ++ vdw_fre=vdw_fre+elrc_fre ++ vdw_vir=vdw_vir+vlrc_fre ++ endif ++ ++c calculate three body forces ++ ++ if(ntptbp.gt.0)call thbfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c calculate four body forces ++ ++ if(ntpfbp.gt.0)call fbpfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c calculate tersoff potential forces ++ ++ if(ntpter.gt.0)call tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c calculate bond forces ++ ++ if(ntbond.gt.0)call bndfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c calculate valence angle forces ++ ++ if(ntangl.gt.0)call angfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c calculate dihedral forces ++ ++ if(ntdihd.gt.0)call dihfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, ++ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) ++ ++c calculate inversion forces ++ ++ if(ntinv.gt.0)call invfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c calculate tethered atom forces ++ ++ if(ntteth.gt.0)call tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c calculate shell model forces ++ ++ if(keyshl.gt.0)call shlfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c external field ++ ++ if(keyfld.gt.0)call extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c metadynamics option : use potential energy as order parameter ++ ++ if(lmetadyn)then ++ ++ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ ++ x engtbp+engfbp+engshl+enginv+engter+engmet ++ ++ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet ++ ++ call metafreeze_driver ++ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) ++ ++ endif ++ ++c global summation of force arrays (basic replicated data strategy) ++ ++ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) ++ ++c global sum of stress arrays ++ ++ if(mxnode.gt.1)call gdsum(stress,9,buffer) ++ ++c add long range correction to diagonal terms of stress tensor ++ ++ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 ++ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 ++ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 ++ ++c cap forces in equilibration mode ++ ++ if(nstep.le.nsteql.and.lfcap) ++ x call fcap(lfcap,natms,fmax,temp) ++ ++c total configuration energy ++ ++ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ ++ x engfbp+engshl+enginv+engter+engmet ++ ++c PLUMED modifications ++ if(lplumed)then ++ call plumed_f_gcmd("setStep"//char(0),nstep) ++ call plumed_f_gcmd("setMasses"//char(0),weight) ++ call plumed_f_gcmd("setCharges"//char(0),chge) ++ call plumed_f_gcmd("setPositionsX"//char(0),xxx) ++ call plumed_f_gcmd("setPositionsY"//char(0),yyy) ++ call plumed_f_gcmd("setPositionsZ"//char(0),zzz) ++ call plumed_f_gcmd("setBox"//char(0),cell) ++ call plumed_f_gcmd("setEnergy"//char(0),engcfg) ++ call plumed_f_gcmd("setForcesX"//char(0),fxx) ++ call plumed_f_gcmd("setForcesY"//char(0),fyy) ++ call plumed_f_gcmd("setForcesZ"//char(0),fzz) ++ call plumed_f_gcmd("setVirial"//char(0),stress) ++ call plumed_f_gcmd("calc"//char(0) ) ++ endif ++c PLUMED modifications ++ ++c total derivative of the configurational free energy ++ ++ if(lfree)then ++ ++ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ ++ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) ++ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ ++ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) ++ ++ endif ++ ++c sum solvation and excitation energies for pair forces ++ ++ if(mxnode.gt.1)then ++ ++ if(llsolva)then ++ ++ call gdsum(vdw_sol,mxtmls_sol2,buffer) ++ call gdsum(cou_sol,mxtmls_sol2,buffer) ++ ++ if(lghost)then ++ ++ call gdsum(vdw_exc,mxtmls_exc2,buffer) ++ call gdsum(cou_exc,mxtmls_exc2,buffer) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add long range corrections to solvation terms ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) ++ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) ++ ++ endif ++ ++ return ++ end subroutine force_manager ++ ++ subroutine forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, ++ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, ++ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, ++ x virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c amended - t. forester sept 1994 ++c amended - w. smith june 1995 for metal potentials ++c ++c key: ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe ++ logical lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt ++ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf ++ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii ++ ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps ++ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lhke)then ++ ++ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++ else if(lewald.or.lspme.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c initialise force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c calculate local density in metals ++ ++ if(ntpmet.gt.0)then ++ ++ call metdens ++ x (idnode,imcon,mxnode,natms,engmet,virmet) ++ ++ stress(1)=stress(1)-virmet/3.d0 ++ stress(5)=stress(5)-virmet/3.d0 ++ stress(9)=stress(9)-virmet/3.d0 ++ ++ endif ++ ++c fourier contribution to coulombic forces in Ewald sum ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c hautman-klein-ewald method ++ ++ if(lhke)then ++ ++c fourier terms of hk-ewald ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engacc,viracc,alpha,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, ++ x drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c smoothed particle mesh ewald ++ ++ if(lspme)then ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c calculate metal forces and potential ++ ++ if(ntpmet.gt.0)then ++ ++ call metfrc(safe,i,lentry(ii),engacc,viracc) ++ ++ engmet=engmet+engacc ++ virmet=virmet+viracc ++ ++ endif ++ ++c calculate short range force and potential terms ++ ++ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, ++ x rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, ++ x viracc,drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0(i,lentry(ii),rcut) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check metal interpolation is safe ++ ++ if(ntpmet.gt.0)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ endif ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ eps=epsq ++ if(loglnk)eps=eps*2.0d0 ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ enddo ++ ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ numrdf=numrdf+1 ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=engmet ++ buffer(6)=virmet ++ buffer(7)=vdw_fre ++ buffer(8)=cou_fre ++ buffer(9)=vdw_vir ++ buffer(10)=cou_vir ++ call gdsum(buffer(1),10,buffer(11)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ engmet=buffer(5) ++ virmet=buffer(6) ++ vdw_fre=buffer(7) ++ cou_fre=buffer(8) ++ vdw_vir=buffer(9) ++ cou_vir=buffer(10) ++ ++ endif ++ ++ return ++ end subroutine forces ++ ++ subroutine forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c modified - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j ++ integer ibig,ia,ineu,isn,ik,nsolva,isolva ++ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe ++ real(8) virsrp,engacc,viracc,anorm,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension fail(2) ++ ++ data fail/0,0/ ++ ++c allocate working arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ do i=1,2 ++ if(fail(i).ne.0)call error(idnode,1820) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c initialise force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c initialise energy and virial accumulators ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c outer loop over neutral groups ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ newlst=.true. ++ ++ isn=1 ++ call neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0neu(ik,rcut) ++ ++ endif ++ ++ enddo ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,478) ++ endif ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c counter for rdf statistics outside loop structure ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ ++ return ++ end subroutine forces_neu ++ ++ subroutine multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++c*************************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c reciprocal space calculated on long time steps. ++c ++c copyright daresbury laboratory ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3,4 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ ++ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme ++ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt ++ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail ++ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 ++ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 ++ real(8) vircp1,engacl,engac2,virsr1 ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ if(newlst)nstep0=nstep ++ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) ++ ++c allocate working arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1840) ++ enddo ++ ++ endif ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lspme.or.lewald.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c zero force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS****************** ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ llsolva=lsolva ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate fourier contribution to secondary coulombic forces ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++c hautman-klein-ewald method ++ ++ elseif(lhke)then ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engac1,viracc,alpha,epsq) ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, ++ x virac2,drewd,rcut,epsq) ++ ++ engac1=engac1+engac2 ++ viracc=viracc+virac2 ++ ++ elseif(lspme)then ++ ++c smoothed particle mesh ewald ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ endif ++ ++ engcpl=engcpl+engac1 ++ vircpl=vircpl+viracc ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++c note: if using link cells - have double counted excluded ++c interactions use temporary adjustment to relative dielectric ++c constant ++ ++ eps=epsq ++ if(loglnk)eps=epsq*2.0d0 ++ ++c calculate self interaction corrections for fourier contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ enddo ++ ++ endif ++ ++c calculate pair contributions to secondary neighbour forces ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c calculate pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(newplst.or. ++ x (mod(nstep-nstep0,multt).le.1))then ++ ++ if(lhke)then ++ ++ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) ++ ++ else ++ ++ call ewald4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, ++ x drewd,rcut,epsq) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ engcpl=engcpl+engacl ++ vircpl=vircpl+viracl ++ ++ else ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i)+stresl(i)*ann ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ return ++ end subroutine multiple ++ ++ subroutine multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c multiple timestep option ++c ++c parallel replicated data version ++c ++c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory april 1994 ++c author - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c = 10,11 ----- reaction field : coul3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j ++ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe ++ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp ++ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension fail(nnn),stresp(9) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ if(newjob)then ++ ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) ++ ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) ++ endif ++ ++ endif ++ newjob=.false. ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1850) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c error if ewald sum requested ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c create list of primary and secondary neighbours ++ ++ if(newlst)nstep0=nstep ++ newplst=(mod(nstep-nstep0,multt).eq.0) ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++ endif ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress arrays ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c outer loop over neutral groups ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=-1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then ++ ++ call srfrceneu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ else ++ ++ call error(idnode,250) ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,479) ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresl(i)*ann+stresp(i) ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) ++ ++ return ++ end subroutine multiple_neu ++ ++ subroutine multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c to be used with all-pairs option ++c ++c flx,fly,flz : forces from electrostatics from r > rcut ++c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory 1993 ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c Ewald sum --- not used ++c = 4,5 ------ Distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c truncated and shifted coulombic -- not used ++c reaction field - not used ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr ++ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva ++ integer isolva,i,j ++ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut ++ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 ++ real(8) engsr2,virsr2,stresp,engacc,viracc ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data numlsts/-1/ ++ data newjob/.true./ ++ ++c allocate work arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1860) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++ if(lnsq)then ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) ++ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) ++ ++c set extended cutoff for electrostatics - secondary shell ++ ++ rcut1=rcut+delr ++ ++ if(newlst)nstep0=nstep ++ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) ++ ++c ********************PROCESS TERTIARY NEIGHBOURS********************* ++ ++ if(newplst)then ++ ++ call coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcp3,vircp3) ++ ++ endif ++ ++c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ if(newplst)then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcp2=0.d0 ++ vircp2=0.d0 ++ engsr2=0.d0 ++ virsr2=0.d0 ++ ++c zero secondary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ ii=0 ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic vectors ++ ++ ik=0 ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition only for interactions > rprim ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c short range forces for secondary shell ++ ++ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsr2=engsr2+engacc ++ virsr2=virsr2+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++c truncated shifted coulombic potential ++ ++ call error(idnode,424) ++ ++ endif ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ fpx(i)=fxx(i) ++ fpy(i)=fyy(i) ++ fpz(i)=fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stress(i) ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol(:) ++ cou_sol_put(:)=cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc(:) ++ cou_exc_put(:)=cou_exc(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero primary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate primary pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,424) ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary and tertiary neighbour contributions to ++c force, energy etc ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)+fpx(i)+flx(i) ++ fyy(i)=fyy(i)+fpy(i)+fly(i) ++ fzz(i)=fzz(i)+fpz(i)+flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i) ++ enddo ++ ++ engsrp=engsrp+engsr2 ++ virsrp=virsrp+virsr2 ++ ++ engcpe=engcpe+engcp2+engcp3 ++ vircpe=vircpe+vircp2+vircp3 ++ ++c calculate solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) ++ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) ++ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine multiple_nsq ++ ++ subroutine neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to create pair lists for neutral group ++c implementations. ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c ++c isn = -1 => secondary neighbours ++c isn = 1 => primary neighbours - must contain excld interactions ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,lexc ++ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 ++ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 ++ real(8) txx,tyy,tzz,uxx,uyy,uzz ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1830) ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c set cutoff radius ++ ++ ll=0 ++ ++c number of excludes found ++ ++ if(isn.lt.0)then ++ keyexc=nexatm(ia)+2 ++ else ++ keyexc=1 ++ endif ++ ++c do centre - centre distances ++ ++ lenia=lentry(ia) ++ ++ do j=1,lenia ++ ++ jneu=abs(list(ia,j)) ++ xxt(j)=uxx(ineu)-uxx(jneu) ++ yyt(j)=uyy(ineu)-uyy(jneu) ++ zzt(j)=uzz(ineu)-uzz(jneu) ++ ++ enddo ++ ++ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) ++ ++c working intragroup vectors of central group ++c - for periodic boundaries ++ ++ in0=neulst(ineu) ++ in1=neulst(ineu+1)-1 ++ ++c loop over neutral groups sites of a ++ ++ ++c loop over groups in list ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj)*isn ++ ++ if(jneu.gt.0)then ++ ++ do i=in0,in1 ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++ if(ineu.eq.jneu)jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++c reject atoms in excluded pair list ++ ++ lexc=.false. ++ ++ if(keyexc.lt.nexatm(ia))then ++ ++ if(lexatm(ia,keyexc).eq.i)then ++ if(lexatm(ia,keyexc+1).eq.j)then ++ lexc=.true. ++ keyexc=keyexc+2 ++ endif ++ endif ++ ++ endif ++ ++c reject frozen atom pairs ++ ++ if(lstfrz(i).ne.0)then ++ if(lstfrz(j).ne.0)lexc=.true. ++ endif ++ ++ if(.not.lexc)then ++ ++ ll=ll+1 ++ if(ll.le.mxxdf)then ++ ++ xdf(ll)=txx(i)+xxt(jj)-txx(j) ++ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) ++ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) ++ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 ++ ilist(ll)=i ++ jlist(ll)=j ++ ++ else ++ ++ lchk=.false. ++ ibig=max(ibig,ll) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine neutlst ++ ++ end module forces_module ++ +diff -urN dl_class_1.9.orig/srcmod/forces_module.f.preplumed dl_class_1.9/srcmod/forces_module.f.preplumed +--- dl_class_1.9.orig/srcmod/forces_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/forces_module.f.preplumed 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,2952 @@ ++ module forces_module ++ ++c*********************************************************************** ++c ++c dl_poly module for calculation of atomic forces ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - d. quigley : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use coulomb_module ++ use error_module ++ use ewald_module ++ use exclude_module ++ use external_field_module ++ use four_body_module ++ use hkewald_module ++ use metafreeze_module ++ use metal_module ++ use neu_coul_module ++ use nlist_builders_module ++ use pair_module ++ use property_module ++ use setup_module ++ use solvation_module ++ use spme_module ++ use tersoff_module ++ use three_body_module ++ use utility_module ++ use vdw_module ++ ++ contains ++ ++ subroutine force_manager ++ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to manage the calculation of the atomic forces ++c from all force field terms. ++c ++c copyright - daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva ++ logical lfree,lghost,llsolva ++ ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet ++ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva ++ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld ++ ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih ++ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld ++ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord ++ ++ llsolva=.false. ++ ++c initialize energy and virial accumulators ++ ++ engbnd=0.d0 ++ virbnd=0.d0 ++ engang=0.d0 ++ virang=0.d0 ++ engdih=0.d0 ++ virdih=0.d0 ++ enginv=0.d0 ++ virinv=0.d0 ++ engtbp=0.d0 ++ virtbp=0.d0 ++ engter=0.d0 ++ virter=0.d0 ++ engfbp=0.d0 ++ virfbp=0.d0 ++ engsrp=0.d0 ++ virsrp=0.d0 ++ engcpe=0.d0 ++ vircpe=0.d0 ++ engfld=0.d0 ++ virfld=0.d0 ++ engshl=0.d0 ++ virshl=0.d0 ++ shlke =0.d0 ++ engtet=0.d0 ++ virtet=0.d0 ++ engmet=0.d0 ++ virmet=0.d0 ++ virord=0.0d0 ++ engord=0.0d0 ++ ++ if(lmetadyn)then ++ ++ eng_loc=0.0d0 ++ vir_loc=0.0d0 ++ fxx_loc(:)=0.0d0 ++ fyy_loc(:)=0.0d0 ++ fzz_loc(:)=0.0d0 ++ stress_loc(:)=0.0d0 ++ ++ endif ++ ++c initialise free energy accumulators ++ ++ if(lfree)then ++ ++ ang_fre=0.d0 ++ bnd_fre=0.d0 ++ dih_fre=0.d0 ++ inv_fre=0.d0 ++ tbp_fre=0.d0 ++ fbp_fre=0.d0 ++ cou_fre=0.d0 ++ vdw_fre=0.d0 ++ shl_fre=0.d0 ++ ang_vir=0.d0 ++ bnd_vir=0.d0 ++ dih_vir=0.d0 ++ inv_vir=0.d0 ++ tbp_vir=0.d0 ++ fbp_vir=0.d0 ++ cou_vir=0.d0 ++ vdw_vir=0.d0 ++ shl_vir=0.d0 ++ eng_cfg_fre=0.d0 ++ vir_cfg_fre=0.d0 ++ ++ endif ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ if(keyfce/2.gt.0)lcomp(6)=.true. ++ if(mod(keyfce,2).eq.1)lcomp(7)=.true. ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++ llsolva=.true. ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c initialise the force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ if(nstep.gt.0)then ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ endif ++ ++ if(keyfce.gt.0)then ++ ++c calculate pair forces, including coulombic forces ++ ++ if(lnsq)then ++ ++c multiple timestep - all-pairs ++ ++ call multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++ elseif(.not.lneut)then ++ ++c single timestep ++ ++ if(multt.eq.1)then ++ ++ call forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, ++ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, ++ x vircpe,virsrp,volm,engmet,virmet) ++ ++ else ++ ++ call multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++ ++ endif ++ ++ elseif(lneut)then ++ ++c neutral groups ++ ++ if(multt.eq.1)then ++ ++ call forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++ else ++ ++ call multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add in long range corrections to energy and pressure ++ ++ engsrp=engsrp+elrc ++ virsrp=virsrp+virlrc ++ engmet=engmet+elrcm(0) ++ virmet=virmet+vlrcm(0) ++ if(lfree)then ++ vdw_fre=vdw_fre+elrc_fre ++ vdw_vir=vdw_vir+vlrc_fre ++ endif ++ ++c calculate three body forces ++ ++ if(ntptbp.gt.0)call thbfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c calculate four body forces ++ ++ if(ntpfbp.gt.0)call fbpfrc ++ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c calculate tersoff potential forces ++ ++ if(ntpter.gt.0)call tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c calculate bond forces ++ ++ if(ntbond.gt.0)call bndfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, ++ x engbnd,virbnd) ++ ++c calculate valence angle forces ++ ++ if(ntangl.gt.0)call angfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) ++ ++c calculate dihedral forces ++ ++ if(ntdihd.gt.0)call dihfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, ++ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) ++ ++c calculate inversion forces ++ ++ if(ntinv.gt.0)call invfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c calculate tethered atom forces ++ ++ if(ntteth.gt.0)call tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c calculate shell model forces ++ ++ if(keyshl.gt.0)call shlfrc ++ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) ++ ++c external field ++ ++ if(keyfld.gt.0)call extnfld ++ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) ++ ++c metadynamics option : use potential energy as order parameter ++ ++ if(lmetadyn)then ++ ++ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ ++ x engtbp+engfbp+engshl+enginv+engter+engmet ++ ++ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ ++ x virang+virshl+virtet+virmet ++ ++ call metafreeze_driver ++ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) ++ ++ endif ++ ++c global summation of force arrays (basic replicated data strategy) ++ ++ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) ++ ++c global sum of stress arrays ++ ++ if(mxnode.gt.1)call gdsum(stress,9,buffer) ++ ++c add long range correction to diagonal terms of stress tensor ++ ++ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 ++ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 ++ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 ++ ++c cap forces in equilibration mode ++ ++ if(nstep.le.nsteql.and.lfcap) ++ x call fcap(lfcap,natms,fmax,temp) ++ ++c total configuration energy ++ ++ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ ++ x engfbp+engshl+enginv+engter+engmet ++ ++c total derivative of the configurational free energy ++ ++ if(lfree)then ++ ++ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ ++ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) ++ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ ++ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) ++ ++ endif ++ ++c sum solvation and excitation energies for pair forces ++ ++ if(mxnode.gt.1)then ++ ++ if(llsolva)then ++ ++ call gdsum(vdw_sol,mxtmls_sol2,buffer) ++ call gdsum(cou_sol,mxtmls_sol2,buffer) ++ ++ if(lghost)then ++ ++ call gdsum(vdw_exc,mxtmls_exc2,buffer) ++ call gdsum(cou_exc,mxtmls_exc2,buffer) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c add long range corrections to solvation terms ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) ++ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) ++ ++ endif ++ ++ return ++ end subroutine force_manager ++ ++ subroutine forces ++ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, ++ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, ++ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, ++ x virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c amended - t. forester sept 1994 ++c amended - w. smith june 1995 for metal potentials ++c ++c key: ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe ++ logical lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt ++ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf ++ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii ++ ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps ++ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lhke)then ++ ++ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++ else if(lewald.or.lspme.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++c initialise force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c calculate local density in metals ++ ++ if(ntpmet.gt.0)then ++ ++ call metdens ++ x (idnode,imcon,mxnode,natms,engmet,virmet) ++ ++ stress(1)=stress(1)-virmet/3.d0 ++ stress(5)=stress(5)-virmet/3.d0 ++ stress(9)=stress(9)-virmet/3.d0 ++ ++ endif ++ ++c fourier contribution to coulombic forces in Ewald sum ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c hautman-klein-ewald method ++ ++ if(lhke)then ++ ++c fourier terms of hk-ewald ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engacc,viracc,alpha,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, ++ x drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c smoothed particle mesh ewald ++ ++ if(lspme)then ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ engcpe=engcpe+engac1 ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c calculate metal forces and potential ++ ++ if(ntpmet.gt.0)then ++ ++ call metfrc(safe,i,lentry(ii),engacc,viracc) ++ ++ engmet=engmet+engacc ++ virmet=virmet+viracc ++ ++ endif ++ ++c calculate short range force and potential terms ++ ++ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, ++ x rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, ++ x viracc,drewd,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0(i,lentry(ii),rcut) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c check metal interpolation is safe ++ ++ if(ntpmet.gt.0)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ endif ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ eps=epsq ++ if(loglnk)eps=eps*2.0d0 ++ ++c outer loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ enddo ++ ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then ++ ++ if(mod(nstep,nstbgr).eq.0)then ++ ++ numrdf=numrdf+1 ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=engmet ++ buffer(6)=virmet ++ buffer(7)=vdw_fre ++ buffer(8)=cou_fre ++ buffer(9)=vdw_vir ++ buffer(10)=cou_vir ++ call gdsum(buffer(1),10,buffer(11)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ engmet=buffer(5) ++ virmet=buffer(6) ++ vdw_fre=buffer(7) ++ cou_fre=buffer(8) ++ vdw_vir=buffer(9) ++ cou_vir=buffer(10) ++ ++ endif ++ ++ return ++ end subroutine forces ++ ++ subroutine forces_neu ++ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, ++ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, ++ x vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c ++c modified - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva ++ ++ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j ++ integer ibig,ia,ineu,isn,ik,nsolva,isolva ++ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe ++ real(8) virsrp,engacc,viracc,anorm,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension fail(2) ++ ++ data fail/0,0/ ++ ++c allocate working arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ do i=1,2 ++ if(fail(i).ne.0)call error(idnode,1820) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c initialise force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c initialise energy and virial accumulators ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c outer loop over neutral groups ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ newlst=.true. ++ ++ isn=1 ++ call neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)then ++ ++ call rdf0neu(ik,rcut) ++ ++ endif ++ ++ enddo ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,478) ++ endif ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c counter for rdf statistics outside loop structure ++ ++ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. ++ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ ++ return ++ end subroutine forces_neu ++ ++ subroutine multiple ++ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, ++ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, ++ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, ++ x rvdw,vircpe,virsrp,volm) ++c*************************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c reciprocal space calculated on long time steps. ++c ++c copyright daresbury laboratory ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ Ewald sum : ewald1,2,3,4 ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ truncated and shifted coulombic : coul4 ++c = 10,11 ----- reaction field : coul3 ++c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] ++c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ ++ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme ++ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt ++ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail ++ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik ++ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 ++ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 ++ real(8) vircp1,engacl,engac2,virsr1 ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ lhke=(keyfce/2.eq.7) ++ lspme=(keyfce/2.eq.6) ++ lewald=(keyfce/2.eq.1) ++ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) ++ if(newlst)nstep0=nstep ++ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) ++ ++c allocate working arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1840) ++ enddo ++ ++ endif ++ ++c create ewald interpolation arrays ++ ++ if(newjob)then ++ ++ if(lspme.or.lewald.or.lcshft)then ++ ++ call erfcgen(alpha,drewd,rcut) ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c zero force and stress arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS****************** ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ llsolva=lsolva ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate fourier contribution to secondary coulombic forces ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(lewald)then ++ ++ call ewald1 ++ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, ++ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) ++ ++c hautman-klein-ewald method ++ ++ elseif(lhke)then ++ ++ call hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engac1,viracc,alpha,epsq) ++ ++c real space terms of hk-ewald ++ ++ call hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, ++ x virac2,drewd,rcut,epsq) ++ ++ engac1=engac1+engac2 ++ viracc=viracc+virac2 ++ ++ elseif(lspme)then ++ ++c smoothed particle mesh ewald ++ ++ call ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engac1,viracc,alpha,volm,epsq) ++ ++ endif ++ ++ engcpl=engcpl+engac1 ++ vircpl=vircpl+viracc ++ ++c calculate corrections for intramolecular coulomb terms in ++c Ewald sum ++c note: if using link cells - have double counted excluded ++c interactions use temporary adjustment to relative dielectric ++c constant ++ ++ eps=epsq ++ if(loglnk)eps=epsq*2.0d0 ++ ++c calculate self interaction corrections for fourier contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,nexatm(ii) ++ ++ j=lexatm(ii,k) ++ jlist(k)=j ++ ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) ++ ++c calculate correction terms ++ ++ if(lhke)then ++ ++ call hkewald3(i,ii,engacc,viracc,eps) ++ ++ else ++ ++ call ewald3 ++ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) ++ ++ endif ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ enddo ++ ++ endif ++ ++c calculate pair contributions to secondary neighbour forces ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme)then ++ ++ call ewald2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c calculate pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of distance ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++c (real space contributions to ewald sum) ++ ++ if(lewald.or.lspme.or.lhke)then ++ ++ if(newplst.or. ++ x (mod(nstep-nstep0,multt).le.1))then ++ ++ if(lhke)then ++ ++ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) ++ ++ else ++ ++ call ewald4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, ++ x drewd,rcut,epsq) ++ ++ endif ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ engcpl=engcpl+engacl ++ vircpl=vircpl+viracl ++ ++ else ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ elseif(keyfce/2.eq.2)then ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call coul4 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i)+stresl(i)*ann ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ return ++ end subroutine multiple ++ ++ subroutine multiple_neu ++ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, ++ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rprim,rcut,rvdw,alpha,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating interatomic forces ++c using the verlet neighbour list ++c neutral group implemenation - no Ewald sum option ++c multiple timestep option ++c ++c parallel replicated data version ++c ++c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory april 1994 ++c author - t. forester april 1993 ++c key: ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c = 2,3 ------ invalid ++c = 4,5 ------ distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c = 8,9 ------ invalid ++c = 10,11 ----- reaction field : coul3 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr ++ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j ++ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe ++ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp ++ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha ++ ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension fail(nnn),stresp(9) ++ ++ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 ++ save engsr1,virsr1,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data newjob/.true./ ++ data numlsts/-1/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ if(newjob)then ++ ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) ++ ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) ++ endif ++ ++ endif ++ newjob=.false. ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1850) ++ enddo ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c error if ewald sum requested ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) ++ ++c create list of primary and secondary neighbours ++ ++ if(newlst)nstep0=nstep ++ newplst=(mod(nstep-nstep0,multt).eq.0) ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++ endif ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero force arrays ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress arrays ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c flag for accumulating rdfs ++ ++ lgr=.false. ++ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) ++ lgr=(lgr.and.(newplst.and.lgofr)) ++ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) ++ ++c intra group vectors com ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-xxx(jj0) ++ tyy(j)=yyy(j)-yyy(jj0) ++ tzz(j)=zzz(j)-zzz(jj0) ++ ++ enddo ++ ++ enddo ++ ++ call images(imcon,0,1,natms,cell,txx,tyy,tzz) ++ ++ do jneu=1,nneut ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++ xxx(j)=txx(j)+xxx(jj0) ++ yyy(j)=tyy(j)+yyy(jj0) ++ zzz(j)=tzz(j)+zzz(jj0) ++ ++ enddo ++ ++c centre of molecule ++ ++ uxx(jneu)=0.d0 ++ uyy(jneu)=0.d0 ++ uzz(jneu)=0.d0 ++ anorm=1.d0/dble(jj1-jj0+1) ++ ++ do j=jj0,jj1 ++ ++ uxx(jneu)=uxx(jneu)+xxx(j)*anorm ++ uyy(jneu)=uyy(jneu)+yyy(j)*anorm ++ uzz(jneu)=uzz(jneu)+zzz(j)*anorm ++ ++ enddo ++ ++c vector from site to geometric centre ++ ++ do j=jj0,jj1 ++ ++ txx(j)=xxx(j)-uxx(jneu) ++ tyy(j)=yyy(j)-uyy(jneu) ++ tzz(j)=zzz(j)-uzz(jneu) ++ ++ enddo ++ ++ enddo ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ lchk=.true. ++ ibig=0 ++ ia=0 ++ ++ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ engsrl=0.d0 ++ virsrl=0.d0 ++ ++c initialise solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c outer loop over neutral groups ++ ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=-1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then ++ ++ call srfrceneu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrl=engsrl+engacc ++ virsrl=virsrl+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpl=engcpl+engacc ++ vircpl=vircpl+viracc ++ ++ else ++ ++ call error(idnode,250) ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ flx(i)=fxx(i) ++ fly(i)=fyy(i) ++ flz(i)=fzz(i) ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++ do i=1,9 ++ ++ stresl(i)=stress(i) ++ stress(i)=0.d0 ++ ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol(:) ++ cou_sol_lng(:)=cou_sol(:) ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc(:) ++ cou_exc_lng(:)=cou_exc(:) ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++c calculate interatomic distances ++ ++ isn=1 ++ call neutlst ++ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c trap possible array bound exception ++ ++ ibig=max(ibig,ik) ++ if(ik.gt.mxxdf)ik=0 ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrceneu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.2)then ++ ++ call coul2neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++ call coul0neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,250) ++ ++ elseif(keyfce/2.eq.5)then ++ ++ call coul3neu ++ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ endif ++ ++c accumulate radial distribution functions out to rcut ++ ++ if(lgr)then ++ call rdf0neu(ik,rcut) ++ endif ++ ++ enddo ++ ++c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* ++ ++c check on validity of call to neutlst ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ if(.not.lchk)then ++ call gimax(ibig,1,i) ++ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig ++ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf ++ call error(idnode,479) ++ endif ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary neighbour contributions to force, energy etc ++ ++ if(newplst)then ++ ++ do i=1,natms ++ ++ fpx(i)=flx(i) ++ fpy(i)=fly(i) ++ fpz(i)=flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stresl(i) ++ enddo ++ ++ engsr1=engsrl ++ virsr1=virsrl ++ engcp1=engcpl ++ vircp1=vircpl ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol_lng(:) ++ cou_sol_put(:)=cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc_lng(:) ++ cou_exc_put(:)=cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c calculate force increments etc ++ ++ if(mod(nstep-nstep0,multt).eq.1)then ++ ++ do i=1,natms ++ ++ flx(i)=flx(i)-fpx(i) ++ fly(i)=fly(i)-fpy(i) ++ flz(i)=flz(i)-fpz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresl(i)=stresl(i)-stresp(i) ++ enddo ++ ++ virsrl=virsrl-virsr1 ++ engsrl=engsrl-engsr1 ++ vircpl=vircpl-vircp1 ++ engcpl=engcpl-engcp1 ++ ++c solvation and excitation increments ++ ++ if(lsolva)then ++ ++ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) ++ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) ++ ++ if(lghost)then ++ ++ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) ++ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c extrapolate long range terms ++ ++ ann=dble(mod(nstep-nstep0,multt)) ++ ++ do i=1,natms ++ ++ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) ++ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) ++ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresl(i)*ann+stresp(i) ++ enddo ++ ++ engsrp=engsr1+engsrl*ann+engsrp ++ virsrp=virsr1+virsrl*ann+virsrp ++ engcpe=engcp1+engcpl*ann+engcpe ++ vircpe=vircp1+vircpl*ann+vircpe ++ ++c solvation and excitation extrapolation ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) ++ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) ++ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) ++ ++ return ++ end subroutine multiple_neu ++ ++ subroutine multiple_nsq ++ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, ++ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, ++ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for multiple time step algorithm ++c to be used with all-pairs option ++c ++c flx,fly,flz : forces from electrostatics from r > rcut ++c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut ++c fxx,fyy,fzz : total force ++c ++c copyright daresbury laboratory 1993 ++c ++c author t. forester, may 1993 ++c ++c keyfce = odd ------ short range potentials calculated : srfrce ++c = 0,1 ------ no electrostatics ++c Ewald sum --- not used ++c = 4,5 ------ Distance dependent dielectric : coul2 ++c = 6,7 ------ coulombic : coul0 ++c truncated and shifted coulombic -- not used ++c reaction field - not used ++c ++c**************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=5 ++ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva ++ logical lfree,lghost,llsolva ++ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr ++ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva ++ integer isolva,i,j ++ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut ++ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 ++ real(8) engsr2,virsr2,stresp,engacc,viracc ++ ++ real(8), allocatable :: fpx(:),fpy(:),fpz(:) ++ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) ++ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) ++ ++ dimension stresp(9),fail(nnn) ++ ++ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz ++ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put ++ ++ data numlsts/-1/ ++ data newjob/.true./ ++ ++c allocate work arrays ++ ++ if(newjob)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) ++ if(lsolva)then ++ ++ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) ++ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) ++ if(lghost)then ++ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) ++ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) ++ endif ++ ++ endif ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1860) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++ if(lnsq)then ++ ++ llsolva=.false. ++ if(lsolva)then ++ llsolva=(mod(nstep-nsolva,isolva).eq.0) ++ endif ++ ++c divide neighbour list into primary and secondary neighbours ++ ++ if(newplst)then ++ ++ numlsts=numlsts+1 ++ call primlst(idnode,mxnode,natms,imcon,rprim) ++ ++ endif ++ ++c flag for accumulating rdfs ++ ++ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) ++ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) ++ ++c set extended cutoff for electrostatics - secondary shell ++ ++ rcut1=rcut+delr ++ ++ if(newlst)nstep0=nstep ++ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) ++ ++c ********************PROCESS TERTIARY NEIGHBOURS********************* ++ ++ if(newplst)then ++ ++ call coul_nsq ++ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, ++ x engcp3,vircp3) ++ ++ endif ++ ++c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** ++ ++c ********************PROCESS SECONDARY NEIGHBOURS******************** ++ ++ if(newplst)then ++ ++c zero accumulators for secondary neighbour energies and virial ++ ++ engcp2=0.d0 ++ vircp2=0.d0 ++ engsr2=0.d0 ++ virsr2=0.d0 ++ ++c zero secondary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++ ii=0 ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic vectors ++ ++ ik=0 ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition only for interactions > rprim ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c short range forces for secondary shell ++ ++ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then ++ ++ call srfrce ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsr2=engsr2+engacc ++ virsr2=virsr2+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) ++ ++ engcp2=engcp2+engacc ++ vircp2=vircp2+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++c truncated shifted coulombic potential ++ ++ call error(idnode,424) ++ ++ endif ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++ enddo ++ ++c store secondary forces and stress tensor ++ ++ do i=1,natms ++ ++ fpx(i)=fxx(i) ++ fpy(i)=fyy(i) ++ fpz(i)=fzz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stresp(i)=stress(i) ++ enddo ++ ++c store solvation and excitation arrays ++ ++ if(lsolva)then ++ ++ vdw_sol_put(:)=vdw_sol(:) ++ cou_sol_put(:)=cou_sol(:) ++ ++ if(lghost)then ++ ++ vdw_exc_put(:)=vdw_exc(:) ++ cou_exc_put(:)=cou_exc(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* ++ ++c ********************PROCESS PRIMARY NEIGHBOURS******************** ++ ++c zero accumulators for total energies and virials ++ ++ engcpe=0.d0 ++ engsrp=0.d0 ++ vircpe=0.d0 ++ virsrp=0.d0 ++ ++c zero primary forces ++ ++ do i=1,natms ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ enddo ++ ++c zero stress tensor ++ ++ do i=1,9 ++ stress(i)=0.d0 ++ enddo ++ ++c zero solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ ++ if(lghost)then ++ ++ vdw_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ ++ endif ++ ++ endif ++ ++c calculate primary pair force contributions ++ ++ ii=0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ ik=0 ++ ++ do k=1,lentry(ii) ++ ++ j=-list(ii,k) ++ ++ if(j.gt.0)then ++ ++ ik=ik+1 ++ ilist(ik)=j ++ xdf(ik)=xxx(i)-xxx(j) ++ ydf(ik)=yyy(i)-yyy(j) ++ zdf(ik)=zzz(i)-zzz(j) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) ++ ++c square of interatomic distances ++ ++ do k=1,ik ++ ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ ++ enddo ++ ++c accumulate radial distribution functions : out to rcut ++ ++ if(lgr)call rdf0(i,ik,rcut) ++ ++c calculate short range force and potential terms ++ ++ if(mod(keyfce,2).eq.1)then ++ ++ call srfrce ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) ++ ++ engsrp=engsrp+engacc ++ virsrp=virsrp+viracc ++ ++ endif ++ ++c calculate coulombic force and potential terms ++ ++ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then ++ ++ call error(idnode,424) ++ ++ elseif(keyfce/2.eq.2)then ++ ++c distance dependent dielectric ++ ++ call coul2 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.3)then ++ ++c coulombic potential ++ ++ call coul0 ++ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) ++ ++ engcpe=engcpe+engacc ++ vircpe=vircpe+viracc ++ ++ elseif(keyfce/2.eq.4)then ++ ++ call error(idnode,424) ++ ++ endif ++ ++ enddo ++ ++c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** ++ ++c counter for rdf statistics outside loop structure ++ ++ if(lgr)numrdf=numrdf+1 ++ ++c add in secondary and tertiary neighbour contributions to ++c force, energy etc ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)+fpx(i)+flx(i) ++ fyy(i)=fyy(i)+fpy(i)+fly(i) ++ fzz(i)=fzz(i)+fpz(i)+flz(i) ++ ++ enddo ++ ++ do i=1,9 ++ stress(i)=stress(i)+stresp(i) ++ enddo ++ ++ engsrp=engsrp+engsr2 ++ virsrp=virsrp+virsr2 ++ ++ engcpe=engcpe+engcp2+engcp3 ++ vircpe=vircpe+vircp2+vircp3 ++ ++c calculate solvation and excitation arrays ++ ++ if(llsolva)then ++ ++ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) ++ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) ++ ++ if(lghost)then ++ ++ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) ++ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) ++ ++ endif ++ ++ endif ++ ++c sum up contributions to short range and coulombic potential ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engsrp ++ buffer(2)=virsrp ++ buffer(3)=engcpe ++ buffer(4)=vircpe ++ buffer(5)=vdw_fre ++ buffer(6)=cou_fre ++ buffer(7)=vdw_vir ++ buffer(8)=cou_vir ++ call gdsum(buffer(1),8,buffer(9)) ++ engsrp=buffer(1) ++ virsrp=buffer(2) ++ engcpe=buffer(3) ++ vircpe=buffer(4) ++ vdw_fre=buffer(5) ++ cou_fre=buffer(6) ++ vdw_vir=buffer(7) ++ cou_vir=buffer(8) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine multiple_nsq ++ ++ subroutine neutlst ++ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, ++ x txx,tyy,tzz,uxx,uyy,uzz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to create pair lists for neutral group ++c implementations. ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c ++c isn = -1 => secondary neighbours ++c isn = 1 => primary neighbours - must contain excld interactions ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,lexc ++ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 ++ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 ++ real(8) txx,tyy,tzz,uxx,uyy,uzz ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1830) ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c set cutoff radius ++ ++ ll=0 ++ ++c number of excludes found ++ ++ if(isn.lt.0)then ++ keyexc=nexatm(ia)+2 ++ else ++ keyexc=1 ++ endif ++ ++c do centre - centre distances ++ ++ lenia=lentry(ia) ++ ++ do j=1,lenia ++ ++ jneu=abs(list(ia,j)) ++ xxt(j)=uxx(ineu)-uxx(jneu) ++ yyt(j)=uyy(ineu)-uyy(jneu) ++ zzt(j)=uzz(ineu)-uzz(jneu) ++ ++ enddo ++ ++ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) ++ ++c working intragroup vectors of central group ++c - for periodic boundaries ++ ++ in0=neulst(ineu) ++ in1=neulst(ineu+1)-1 ++ ++c loop over neutral groups sites of a ++ ++ ++c loop over groups in list ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj)*isn ++ ++ if(jneu.gt.0)then ++ ++ do i=in0,in1 ++ ++ jj0=neulst(jneu) ++ jj1=neulst(jneu+1)-1 ++ ++ if(ineu.eq.jneu)jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,jj1 ++ ++c reject atoms in excluded pair list ++ ++ lexc=.false. ++ ++ if(keyexc.lt.nexatm(ia))then ++ ++ if(lexatm(ia,keyexc).eq.i)then ++ if(lexatm(ia,keyexc+1).eq.j)then ++ lexc=.true. ++ keyexc=keyexc+2 ++ endif ++ endif ++ ++ endif ++ ++c reject frozen atom pairs ++ ++ if(lstfrz(i).ne.0)then ++ if(lstfrz(j).ne.0)lexc=.true. ++ endif ++ ++ if(.not.lexc)then ++ ++ ll=ll+1 ++ if(ll.le.mxxdf)then ++ ++ xdf(ll)=txx(i)+xxt(jj)-txx(j) ++ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) ++ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) ++ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 ++ ilist(ll)=i ++ jlist(ll)=j ++ ++ else ++ ++ lchk=.false. ++ ibig=max(ibig,ll) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine neutlst ++ ++ end module forces_module ++ +diff -urN dl_class_1.9.orig/srcmod/four_body_module.f dl_class_1.9/srcmod/four_body_module.f +--- dl_class_1.9.orig/srcmod/four_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/four_body_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,979 @@ ++ module four_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining four-body potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - w. smith aug 2008 : solvation, free energy, excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ real(8), allocatable :: prmfbp(:,:),rcut4b(:) ++ integer, allocatable :: lstfbp(:),ltpfbp(:),latfbp(:) ++ ++ save prmfbp,rcut4b,lstfbp,ltpfbp,latfbp,filter ++ ++ contains ++ ++ subroutine alloc_fbp_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(6) ++ ++ do i=1,6 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmfbp(mxfbp,mxpfbp),stat=fail(1)) ++ allocate (rcut4b(mxfbp),stat=fail(2)) ++ allocate (lstfbp(mxfbp),stat=fail(3)) ++ allocate (ltpfbp(mxfbp),stat=fail(4)) ++ allocate (latfbp(mxatms),stat=fail(5)) ++ allocate (filter(mxsite),stat=fail(6)) ++ ++ do i=1,6 ++ if(fail(i).gt.0)call error(idnode,1140) ++ enddo ++ ++ end subroutine alloc_fbp_arrays ++ ++ subroutine define_four_body ++ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, ++ x rcutfb,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining four body potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1,atom2,atom3 ++ character*1 message(80) ++ integer idnode,ntpfbp,ntpatm,ifbp,itpfbp,keypot,katm0 ++ integer i,katm1,katm2,katm3,jtpatm,ka1,ka2,ka3,keyfbp,kfbp ++ integer j,fail,idum ++ real(8) rcutfb,engunit ++ real(8), allocatable :: parpot(:) ++ ++ data fail/0/ ++ ++ allocate (parpot(mxpfbp),stat=fail) ++ if(fail.ne.0)call error(idnode,1150) ++ ++ ntpfbp=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified four ', ++ x 'body potentials',i10)") ntpfbp ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', ++ x 'atom 4 ',3x,' key',30x,'parameters'/,/)") ++ ++ endif ++ if(ntpfbp.gt.mxfbp) call error(idnode,89) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ do ifbp=1,mxfbp ++ lstfbp(ifbp)=0 ++ enddo ++ ++ do ifbp=1,mxfbp,mx3fbp ++ lstfbp(ifbp)=-1 ++ enddo ++ ++ rcutfb=0.d0 ++ ++ do itpfbp=1,ntpfbp ++ ++ do i=1,mxpfbp ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++c Note the order!! atom0 is the central atom ++ ++ call copystring(record,message,80) ++ call getword(atom0,record,8,lenrec) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call getword(atom3,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'harm') then ++ keypot=1 ++ elseif(keyword(1:4).eq.'hcos') then ++ keypot=2 ++ elseif(keyword(1:4).eq.'plan') then ++ keypot=3 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,443) ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,4a8,4x,a4,1x,1p,9e13.5)") ++ x atom0,atom1,atom2,atom3,keyword(1:4),(parpot(j),j=1,mxpfbp) ++ ++ katm0=0 ++ katm1=0 ++ katm2=0 ++ katm3=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ if(atom3.eq.unqatm(jtpatm))katm3=jtpatm ++ ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0.or. ++ x katm3.eq.0) call error(idnode,91) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ filter(katm2)=.true. ++ filter(katm3)=.true. ++ ++ ka1=max(katm1,katm2,katm3) ++ ka3=min(katm1,katm2,katm3) ++ ka2=katm1+katm2+katm3-ka1-ka3 ++ keyfbp=ka3+(ka2*(ka2-1))/2+(ka1*(ka1**2-1))/6+ ++ x (katm0-1)*mx3fbp ++ ++ if(keyfbp.gt.mxfbp) call error(idnode,101) ++ ++c convert parameters to internal units ++ ++ parpot(1)=parpot(1)*engunit ++ parpot(2)=parpot(2)*(pi/180.d0) ++ ++ if(keypot.eq.2)then ++ ++ parpot(2)=cos(parpot(2)) ++ ++ endif ++ ++ if(lstfbp(keyfbp).gt.0) call error(idnode,19) ++ lstfbp(keyfbp)=itpfbp ++ ltpfbp(itpfbp)=keypot ++ kfbp=mx3fbp*((keyfbp-1)/mx3fbp)+1 ++ if(lstfbp(kfbp).lt.0)lstfbp(kfbp)=0 ++ ++c calculate max four body cutoff ++ ++ rcutfb=max(rcutfb,parpot(3)) ++ rcut4b(itpfbp)=parpot(3) ++ ++c store four body potential parameters ++ ++ do i=1,mxpfbp ++ prmfbp(itpfbp,i)=parpot(i) ++ enddo ++ ++ enddo ++ ++ if(rcutfb.lt.1.d-6)call error(idnode,453) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_four_body ++ ++ subroutine fbpfrc ++ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcutfb, ++ x engfbp,virfbp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating four body inversion forces ++c arising from the inversion angle between three atoms around a ++c nominated central atom ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped cell geometry ++c ++c copyright - daresbury laboratory 1996 ++c author - w.smith july 1996 ++c adapted - w.smith aug 2008 solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lskip ++ logical idrive,jdrive,kdrive,ldrive ++ integer idnode,mxnode,natms,imcon,nix,niy,niz ++ integer i,j,k,nbx,nby,nbz,ncells,ix,iy,iz,icell,jx,jy ++ integer jz,jj,kk,ia,ib,ifbp,jfbp,kfbp,jklbd,kkfbp,ktyp,ii ++ integer ic,ll,id,lfbp,l,limit,jcell,kkk ++ real(8) rcutfb,engfbp,virfbp,vbn,vcn,pterm,xm,ym,zm ++ real(8) strs,cprp,det,xdc,ydc,zdc,sxx,syy,szz,sxab,strs_loc ++ real(8) syab,szab,xab,yab,zab,rab2,sxac,syac,szac,xac,yac ++ real(8) zac,rac2,sxad,syad,szad,xad,yad,zad,rad2,rrab,rrac ++ real(8) rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx,vby,vbz ++ real(8) rvb,wwb,ucx,ucy,ucz,ucn,ruc,vcx,vcy,vcz,rvc,wwc ++ real(8) udx,udy,udz,udn,rud,vdx,vdy,vdz,vdn,rvd,wwd,cosb ++ real(8) cosc,cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd ++ real(8) rucd,rucb,rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc ++ real(8) fax,fay,faz,fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz ++ dimension cprp(10),strs(6),nix(27),niy(27),niz(27),strs_loc(6) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++ lskip=(lfree.or.lexcite) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ engfbp=0.d0 ++ virfbp=0.d0 ++ fbp_fre=0.d0 ++ fbp_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(9)=.true. ++ en4_sol(:)=0.d0 ++ if(lexcite)en4_exc(:)=0.d0 ++ ++ endif ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ do i=1,natms ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ enddo ++ ++ cell(1)=2.d0*xm+rcutfb ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rcutfb ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rcutfb ++ ++ endif ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,79) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rcutfb+1.d-6)) ++ nby=int(cprp(8)/(rcutfb+1.d-6)) ++ nbz=int(cprp(9)/(rcutfb+1.d-6)) ++ ncells=nbx*nby*nbz ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) write(nrite,'(a,i6)') ++ x 'number of required link cells in routine fbpfrc is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in routine fbpfrc is ',mxcell ++ call error(idnode,87) ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of inversion ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ latfbp(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ ia=latfbp(ii) ++ if(lmetadyn)idrive=driven(ltype(ia)) ++ ifbp=mx3fbp*(ltype(ia)-1) ++ if(mod(ia,mxnode).eq.idnode.and.lstfbp(ifbp+1).ge.0)then ++ ++ do jj=1,limit-2 ++ ++ ib=latfbp(jj) ++ if(lmetadyn)jdrive=driven(ltype(ib)) ++ ++ do kk=jj+1,limit-1 ++ ++ ic=latfbp(kk) ++ if(lmetadyn)kdrive=driven(ltype(ic)) ++ ++ do ll=kk+1,limit ++ ++ id=latfbp(ll) ++ if(lmetadyn)ldrive=driven(ltype(id)) ++ ++ if(lskip)then ++ ++ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. ++ x atm_fre(ic).eq.1.or.atm_fre(id).eq.1).and. ++ x (atm_fre(ia).eq.2.or.atm_fre(ib).eq.2.or. ++ x atm_fre(ic).eq.2.or.atm_fre(id).eq.2))cycle ++ ++ endif ++ ++ jfbp=max(ltype(ib),ltype(ic),ltype(id)) ++ lfbp=min(ltype(ib),ltype(ic),ltype(id)) ++ kfbp=ltype(ib)+ltype(ic)+ltype(id)-jfbp-lfbp ++ jklbd=ifbp+lfbp+(kfbp*(kfbp-1))/2+(jfbp*(jfbp**2-1))/6 ++ kkfbp=lstfbp(jklbd) ++ if(kkfbp.gt.0)then ++ ++ sxab=xxx(ib)-xxx(ia) ++ sxab=sxab-nint(sxab) ++ syab=yyy(ib)-yyy(ia) ++ syab=syab-nint(syab) ++ szab=zzz(ib)-zzz(ia) ++ szab=szab-nint(szab) ++ ++ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab ++ if(abs(xab).lt.rcutfb)then ++ ++ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab ++ if(abs(yab).lt.rcutfb)then ++ ++ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab ++ if(abs(zab).lt.rcutfb)then ++ ++ rab2=xab*xab+yab*yab+zab*zab ++ ++ sxac=xxx(ic)-xxx(ia) ++ sxac=sxac-nint(sxac) ++ syac=yyy(ic)-yyy(ia) ++ syac=syac-nint(syac) ++ szac=zzz(ic)-zzz(ia) ++ szac=szac-nint(szac) ++ ++ xac=cell(1)*sxac+cell(4)*syac+cell(7)*szac ++ if(abs(xac).lt.rcutfb)then ++ ++ yac=cell(2)*sxac+cell(5)*syac+cell(8)*szac ++ if(abs(yac).lt.rcutfb)then ++ ++ zac=cell(3)*sxac+cell(6)*syac+cell(9)*szac ++ if(abs(zac).lt.rcutfb)then ++ ++ rac2=xac*xac+yac*yac+zac*zac ++ ++ sxad=xxx(id)-xxx(ia) ++ sxad=sxad-nint(sxad) ++ syad=yyy(id)-yyy(ia) ++ syad=syad-nint(syad) ++ szad=zzz(id)-zzz(ia) ++ szad=szad-nint(szad) ++ ++ xad=cell(1)*sxad+cell(4)*syad+cell(7)*szad ++ if(abs(xad).lt.rcutfb)then ++ ++ yad=cell(2)*sxad+cell(5)*syad+cell(8)*szad ++ if(abs(yad).lt.rcutfb)then ++ ++ zad=cell(3)*sxad+cell(6)*syad+cell(9)*szad ++ if(abs(zad).lt.rcutfb)then ++ ++ rad2=xad*xad+yad*yad+zad*zad ++ ++ if(rcut4b(kkfbp)**2.ge.max(rab2,rac2,rad2))then ++ ++ rrab=1.d0/sqrt(rab2) ++ rrac=1.d0/sqrt(rac2) ++ rrad=1.d0/sqrt(rad2) ++ ++ rbc=xab*xac+yab*yac+zab*zac ++ rcd=xac*xad+yac*yad+zac*zad ++ rdb=xad*xab+yad*yab+zad*zab ++ ++c calculate bond-angle-plane vectors ++ ++ ubx=xac*rrac+xad*rrad ++ uby=yac*rrac+yad*rrad ++ ubz=zac*rrac+zad*rrad ++ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) ++ ubx=ubn*ubx ++ uby=ubn*uby ++ ubz=ubn*ubz ++ rub=xab*ubx+yab*uby+zab*ubz ++ ++ vbx=xac*rrac-xad*rrad ++ vby=yac*rrac-yad*rrad ++ vbz=zac*rrac-zad*rrad ++ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) ++ vbx=vbn*vbx ++ vby=vbn*vby ++ vbz=vbn*vbz ++ rvb=xab*vbx+yab*vby+zab*vbz ++ wwb=sqrt(rub**2+rvb**2) ++ ++ ucx=xad*rrad+xab*rrab ++ ucy=yad*rrad+yab*rrab ++ ucz=zad*rrad+zab*rrab ++ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) ++ ucx=ucn*ucx ++ ucy=ucn*ucy ++ ucz=ucn*ucz ++ ruc=xac*ucx+yac*ucy+zac*ucz ++ ++ vcx=xad*rrad-xab*rrab ++ vcy=yad*rrad-yab*rrab ++ vcz=zad*rrad-zab*rrab ++ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) ++ vcx=vcn*vcx ++ vcy=vcn*vcy ++ vcz=vcn*vcz ++ rvc=xac*vcx+yac*vcy+zac*vcz ++ wwc=sqrt(ruc**2+rvc**2) ++ ++ udx=xab*rrab+xac*rrac ++ udy=yab*rrab+yac*rrac ++ udz=zab*rrab+zac*rrac ++ udn=1.d0/sqrt(udx**2+udy**2+udz**2) ++ udx=udn*udx ++ udy=udn*udy ++ udz=udn*udz ++ rud=xad*udx+yad*udy+zad*udz ++ ++ vdx=xab*rrab-xac*rrac ++ vdy=yab*rrab-yac*rrac ++ vdz=zab*rrab-zac*rrac ++ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) ++ vdx=vdn*vdx ++ vdy=vdn*vdy ++ vdz=vdn*vdz ++ rvd=xad*vdx+yad*vdy+zad*vdz ++ wwd=sqrt(rud**2+rvd**2) ++ ++c calculate inversion angle cosines ++ ++ cosb=wwb*rrab ++ cosc=wwc*rrac ++ cosd=wwd*rrad ++ if(abs(cosb).gt.1.d0)cosb=sign(1.d0,cosb) ++ if(abs(cosc).gt.1.d0)cosc=sign(1.d0,cosc) ++ if(abs(cosd).gt.1.d0)cosd=sign(1.d0,cosd) ++ ++c select potential energy function type ++ ++ ktyp=ltpfbp(kkfbp) ++ ++c calculate potential energy and scalar force term ++ ++ if(ktyp.eq.1)then ++ ++c key=1 for harmonic potential ++ ++ thb=acos(cosb) ++ thc=acos(cosc) ++ thd=acos(cosd) ++ ++ pterm=0.5d0*prmfbp(kkfbp,1)* ++ x ((thb-prmfbp(kkfbp,2))**2+ ++ x (thc-prmfbp(kkfbp,2))**2+ ++ x (thd-prmfbp(kkfbp,2))**2)/3.d0 ++ ++ gamb=0.d0 ++ if(abs(thb).gt.1.d-12)gamb=prmfbp(kkfbp,1)* ++ x (thb-prmfbp(kkfbp,2))/(3.d0*sin(thb)) ++ gamc=0.d0 ++ if(abs(thc).gt.1.d-12)gamc=prmfbp(kkfbp,1)* ++ x (thc-prmfbp(kkfbp,2))/(3.d0*sin(thc)) ++ gamd=0.d0 ++ if(abs(thd).gt.1.d-12)gamd=prmfbp(kkfbp,1)* ++ x (thd-prmfbp(kkfbp,2))/(3.d0*sin(thd)) ++ ++ else if(ktyp.eq.2)then ++ ++c key=2 for harmonic cosine inversion potential ++ ++ pterm=0.5d0*prmfbp(kkfbp,1)* ++ x ((cosb-prmfbp(kkfbp,2))**2+ ++ x (cosc-prmfbp(kkfbp,2))**2+ ++ x (cosd-prmfbp(kkfbp,2))**2)/3.d0 ++ ++ gamb=-prmfbp(kkfbp,1)*(cosb-prmfbp(kkfbp,2))/3.d0 ++ gamc=-prmfbp(kkfbp,1)*(cosc-prmfbp(kkfbp,2))/3.d0 ++ gamd=-prmfbp(kkfbp,1)*(cosd-prmfbp(kkfbp,2))/3.d0 ++ ++ else if(ktyp.eq.3)then ++ ++c key=3 for planar inversion potentials ++ ++ pterm=prmfbp(kkfbp,1)* ++ x (3.d0-cosb-cosc-cosd)/3.d0 ++ ++ gamb=-prmfbp(kkfbp,1)/3.d0 ++ gamc=-prmfbp(kkfbp,1)/3.d0 ++ gamd=-prmfbp(kkfbp,1)/3.d0 ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ pterm=0.d0 ++ gamb=0.d0 ++ gamc=0.d0 ++ gamd=0.d0 ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set quadruple index ++ ++ if(lsolva) ++ x kkk=loc4(atmolt(ia),atmolt(ib),atmolt(ic),atmolt(id)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)en4_exc(kkk)=en4_exc(kkk)+pterm ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ fbp_fre=fbp_fre-pterm ++ pterm=lambda1*pterm ++ gamb=lambda1*gamb ++ gamc=lambda1*gamc ++ gamd=lambda1*gamd ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ fbp_fre=fbp_fre+pterm ++ pterm=lambda2*pterm ++ gamb=lambda2*gamb ++ gamc=lambda2*gamc ++ gamd=lambda2*gamd ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential ++ ++ engfbp=engfbp+pterm ++ ++ if(lsolva)en4_sol(kkk)=en4_sol(kkk)+pterm ++ ++c calculate bond and u,v scalar products ++ ++ rubc=xab*ucx+yab*ucy+zab*ucz ++ rubd=xab*udx+yab*udy+zab*udz ++ rucd=xac*udx+yac*udy+zac*udz ++ rucb=xac*ubx+yac*uby+zac*ubz ++ rudb=xad*ubx+yad*uby+zad*ubz ++ rudc=xad*ucx+yad*ucy+zad*ucz ++ ++ rvbc=xab*vcx+yab*vcy+zab*vcz ++ rvbd=xab*vdx+yab*vdy+zab*vdz ++ rvcd=xac*vdx+yac*vdy+zac*vdz ++ rvcb=xac*vbx+yac*vby+zac*vbz ++ rvdb=xad*vbx+yad*vby+zad*vbz ++ rvdc=xad*vcx+yad*vcy+zad*vcz ++ ++c calculate atomic forces ++ ++ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) ++ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) ++ x - rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) ++ x + rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) ++ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) ++ x - rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) ++ x + rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) ++ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) ++ x - rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) ++ x * gamc*rrac/wwc ++ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) ++ x + rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) ++ x * gamd*rrad/wwd ++ ++ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) ++ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) ++ x - rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) ++ x + rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) ++ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) ++ x - rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) ++ x + rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) ++ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) ++ x - rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) ++ x * gamd*rrad/wwd ++ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) ++ x + rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) ++ x * gamb*rrab/wwb ++ ++ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) ++ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) ++ x - rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) ++ x + rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) ++ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) ++ x - rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) ++ x + rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) ++ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) ++ x - rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) ++ x * gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) ++ x + rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) ++ x * gamc*rrac/wwc ++ ++ fax=-(fbx+fcx+fdx) ++ fay=-(fby+fcy+fdy) ++ faz=-(fbz+fcz+fdz) ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)+fbx ++ fyy(ib)=fyy(ib)+fby ++ fzz(ib)=fzz(ib)+fbz ++ ++ fxx(ic)=fxx(ic)+fcx ++ fyy(ic)=fyy(ic)+fcy ++ fzz(ic)=fzz(ic)+fcz ++ ++ fxx(id)=fxx(id)+fdx ++ fyy(id)=fyy(id)+fdy ++ fzz(id)=fzz(id)+fdz ++ ++c stress tensor calculation for inversion terms ++ ++ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx ++ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx ++ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx ++ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy ++ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz ++ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy (no virial) ++ ++ eng_loc=eng_loc+pterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)+fbx ++ fyy_loc(ib)=fyy_loc(ib)+fby ++ fzz_loc(ib)=fzz_loc(ib)+fbz ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx ++ fyy_loc(ic)=fyy_loc(ic)+fcy ++ fzz_loc(ic)=fzz_loc(ic)+fcz ++ ++ fxx_loc(id)=fxx_loc(id)+fdx ++ fyy_loc(id)=fyy_loc(id)+fdy ++ fzz_loc(id)=fzz_loc(id)+fdz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx ++ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx ++ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx ++ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy ++ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz ++ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ ++ enddo ++ enddo ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,443) ++ ++c global sum of four body potential and virial ++ ++ buffer(1)=engfbp ++ buffer(2)=virfbp ++ buffer(3)=fbp_fre ++ buffer(4)=fbp_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engfbp=buffer(1) ++ virfbp=buffer(2) ++ fbp_fre=buffer(3) ++ fbp_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(en4_sol,mxtmls_sol4,buffer(1)) ++ if(lexcite)call gdsum(en4_exc,mxtmls_exc4,buffer(1)) ++ ++ endif ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine fbpfrc ++ ++ end module four_body_module +diff -urN dl_class_1.9.orig/srcmod/hkewald_module.f dl_class_1.9/srcmod/hkewald_module.f +--- dl_class_1.9.orig/srcmod/hkewald_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/hkewald_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1292 @@ ++ module hkewald_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining hautman-klein ewald sum arrays ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use exclude_module ++ use error_module ++ use pair_module ++ use property_module ++ use setup_module ++ ++ implicit none ++ ++ real(8), allocatable :: ahk(:),crn(:,:) ++ real(8), allocatable :: elc(:,:),els(:,:) ++ real(8), allocatable :: emc(:,:),ems(:,:) ++ real(8), allocatable :: zzn(:),zzd(:) ++ real(8), allocatable :: hon(:,:),znp(:,:) ++ real(8), allocatable :: dhn(:,:),zgs(:) ++ real(8), allocatable :: fon(:,:),zgc(:) ++ real(8), allocatable :: ckc(:),cks(:) ++ real(8), allocatable :: pp(:),sss(:) ++ ++ save ahk,crn,elc,els,emc,ems,zzn,zzd,hon,znp,dhn,zgs ++ save fon,zgc,ckc,cks,pp,sss ++ ++ contains ++ ++ subroutine alloc_hke_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=9 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (ahk(0:mxhko),crn(0:mxhko,0:mxhko),stat=fail(1)) ++ allocate (elc(mxewld,0:1),els(mxewld,0:1),stat=fail(2)) ++ allocate (emc(mxewld,0:kmaxb),ems(mxewld,0:kmaxb),stat=fail(3)) ++ allocate (zzn(mxxdf),zzd(mxxdf),stat=fail(4)) ++ allocate (hon(mxgrid,0:mxhko),znp(mxhke,0:2*mxhko),stat=fail(5)) ++ allocate (dhn(mxgrid,0:mxhko),zgs(0:2*mxhko),stat=fail(6)) ++ allocate (fon(mxegrd,0:7),zgc(0:2*mxhko),stat=fail(7)) ++ allocate (ckc(mxewld),cks(mxewld),stat=fail(8)) ++ allocate (pp(2*mxhko),sss(mxxdf),stat=fail(9)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1730) ++ enddo ++ ++ end subroutine alloc_hke_arrays ++ ++ subroutine hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating convergence function ++c arrays for hautman klein ewald method (up to order 3 only) ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith february 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,idnode,nhko,nlatt,k ++ real(8) alpha,drewd,rcut,ecut,den,fac,ss1,aaa,ss2 ++ ++ if(nhko.gt.mxhko)call error(idnode,332) ++ ++c define effective cutoff ++ ++ ecut=rcut*dble(2*nlatt+1) ++ ++c define grid resolution for potential arrays ++ ++ drewd=ecut/dble(mxegrd-4) ++ ++c calculate HKE coefficients ++ ++ ahk(0)=1.d0 ++ ++ do i=1,nhko ++ ++ ahk(i)=-0.25d0*ahk(i-1)*dble(2*i*(2*i-1))/dble(i*i) ++ ++ enddo ++ ++c generate convergence function arrays ++ ++ do i=1,mxegrd ++ ++ hon(i,0)=0.d0 ++ hon(i,1)=dble(i-1)*drewd ++ hon(i,2)=(2.d0*alpha/sqrpi)*exp(-(alpha*hon(i,1))**2) ++ ++ enddo ++ ++c generate error function and derivatives by recursion ++ ++ do k=100,1,-1 ++ ++ den=1.d0/dble(2*k-1) ++ fac=(2.d0*alpha**2)**(k-1) ++ ++ do i=1,mxegrd ++ ++ hon(i,0)=den*(hon(i,0)*hon(i,1)**2+fac*hon(i,2)) ++ ++ enddo ++ ++ if(k.le.2*nhko+2)then ++ ++ do i=1,mxegrd ++ ++ fon(i,k-1)=hon(i,0) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c zeroth order function ++c note: hon(1,0)=2.d0*alpha/sqrpi ++ ++ do i=1,mxegrd ++ ++ hon(i,0)= fon(i,0) ++ dhn(i,0)=-fon(i,1) ++ ++ enddo ++ ++ if(nhko.eq.0)then ++ ++ ss1=dble(mxegrd-1)*drewd ++ aaa=abs(1.d0-hon(mxegrd,nhko)*ss1) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c first order function ++c note: hon(1,1)=8.d0*alpha**3/(3.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,1)=-(2.d0*fon(i,1)-fon(i,2)*ss2) ++ dhn(i,1)= (4.d0*fon(i,2)-fon(i,3)*ss2) ++ ++ enddo ++ ++ if(nhko.eq.1)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c second order function ++c note: hon(1,2)=64.d0*alpha**5/(45.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,2)=(8.d0*fon(i,2)+ss2*(-8.d0*fon(i,3)+ss2*fon(i,4)))/9.d0 ++ dhn(i,2)=(-24.d0*fon(i,3)+ss2*(12.d0*fon(i,4)-ss2*fon(i,5))) ++ x /9.d0 ++ ++ enddo ++ ++ if(nhko.eq.2)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++c third order function (enough for anyone!) ++c note: hon(1,3)=768.d0*alpha**7/(14175.d0*sqrpi) ++ ++ do i=1,mxegrd ++ ++ ss2=(dble(i-1)*drewd)**2 ++ ++ hon(i,3)=-(48.d0*fon(i,3)+ss2*(-72.d0*fon(i,4)+ss2*( ++ x 18.d0*fon(i,5)-ss2*fon(i,6))))/225.d0 ++ dhn(i,3)= (192.d0*fon(i,4)+ss2*(-144.d0*fon(i,5)+ss2*( ++ x 24.d0*fon(i,6)-ss2*fon(i,7))))/225.d0 ++ ++ enddo ++ ++ if(nhko.eq.3)then ++ ++ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,100,aaa,0.d0,0.d0) ++ ++ endif ++ ++ return ++ ++ endif ++ ++ return ++ end subroutine hkgen ++ ++ subroutine hkewald1 ++ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, ++ x engcpe,vircpe,alpha,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using Hautman Klein Ewald method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith february 2000 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c note - in loop over all k vectors k=2pi(ll/cl,mm/cl) ++c the values of ll and mm are selected so that the symmetry of ++c reciprocal lattice is taken into account i.e. the following ++c rules apply. ++c ++c ll ranges over the values 0 to kmax1 only. ++c ++c mm ranges over 1 to kmax2 when ll=0 and over ++c -kmax2 to kmax2 otherwise. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,mxnode,natms,imcon,nhko,kmax1,kmax2,i ++ integer iatm0,iatm1,j,k,limit,mmin,l,ll,m,mm,n ++ real(8) engcpe,vircpe,alpha,epsq,twopi,ralph,area,rarea ++ real(8) det,rcpcut,rcpct2,aaa,engsic,pm1,pm2,term,ssx,ssy ++ real(8) tmp,rkx1,rky1,rkx2,rky2,rksq,rkk,fac,eterm,fng,fn0,gaus ++ real(8) bkk,force0,forcez,pterm,scale,cprop,omg,cs ++c$$$ real(8) erfc ++ ++ dimension cprop(10),omg(9) ++ ++ save newjob,engsic ++ ++ data newjob/.true./ ++ ++c initialise coulombic potential energy ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ if(alpha.lt.1.d-8)return ++ ++c set working parameters ++ ++ twopi=2.d0*pi ++ ralph=0.5d0/alpha ++ call dcell(cell,cprop) ++ area=cprop(1)*cprop(2)*sqrt(1.d0-cprop(4)**2) ++ rarea=pi/area ++ ++c set up atoms numbers for nodes ++ ++ iatm0 = (idnode*natms)/mxnode + 1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++c initalize stress tensor working arrays ++ ++ do i = 1,9 ++ ++ omg(i) = 0.d0 ++ ++ enddo ++ ++c construct reciprocal lattice vectors and set k vector range ++ ++ call invert(cell,rcell,det) ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ call dcell(rcell,cprop) ++ rcpcut=min(dble(kmax1)*cprop(7),dble(kmax2)*cprop(8))* ++ x 1.05d0*twopi ++ rcpct2=rcpcut**2 ++ ++c compute quantities for first entry ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++c pbc check and array bound checks ++ ++ if(imcon.ne.6)call error(idnode,66) ++ if(mxhke.ne.msatms) call error(idnode,331) ++ if(mxewld.ne.msatms) call error(idnode,330) ++ ++c check hk screening function at cutoff ++ ++ aaa=cerfr(ralph,rcpcut) ++c$$$ aaa=erfc(ralph*rcpcut)/rcpcut ++ ++ if(aaa.gt.1.d-4)then ++ ++ call warning(idnode,105,aaa,0.d0,0.d0) ++c call error(idnode,487) ++ ++ endif ++ ++c calculate self interaction correction ++ ++ engsic=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ engsic=engsic+chge(i)**2 ++ ++ enddo ++ ++ engsic=-r4pie0*alpha*engsic/(sqrpi*epsq) ++ ++c binomial coefficients ++ ++ k=0 ++ crn(0,0)=0.5d0 ++ do i=1,2*nhko ++ ++ pp(i)=1.d0 ++ pm1=pp(1) ++ ++ do j=2,i ++ ++ pm2=pp(j) ++ pp(j)=pm2+pm1 ++ pm1=pm2 ++ ++ enddo ++ ++ if(mod(i,2).eq.0)then ++ ++ k=k+1 ++ do j=0,k ++ ++ term=pp(j+1)*(-1.d0)**j ++ crn(j,k)=term ++ crn(k,j)=term ++ ++ enddo ++ ++ crn(k,k)=0.5d0*crn(k,k) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c calculate and store powers of z_i ++ ++ i=0 ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ znp(i,0)=1.d0 ++ znp(i,1)=zzz(j) ++ ++ enddo ++ ++ limit=i ++ ++ do k=2,2*nhko ++ ++ do i=1,limit ++ ++ znp(i,k)=znp(i,k-1)*znp(i,1) ++ ++ enddo ++ ++ enddo ++ ++c calculate and store exponential factors ++ ++ i=0 ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ elc(i,0)=1.d0 ++ emc(i,0)=1.d0 ++ els(i,0)=0.d0 ++ ems(i,0)=0.d0 ++ ssx=rcell(1)*xxx(j)+rcell(4)*yyy(j) ++ ssy=rcell(2)*xxx(j)+rcell(5)*yyy(j) ++ elc(i,1)=cos(twopi*ssx) ++ emc(i,1)=cos(twopi*ssy) ++ els(i,1)=sin(twopi*ssx) ++ ems(i,1)=sin(twopi*ssy) ++ ++ enddo ++ ++ do l=2,kmax2 ++ ++ do i=1,limit ++ ++ emc(i,l)=emc(i,l-1)*emc(i,1)-ems(i,l-1)*ems(i,1) ++ ems(i,l)=ems(i,l-1)*emc(i,1)+emc(i,l-1)*ems(i,1) ++ ++ enddo ++ ++ enddo ++ ++c start of main loop over k vectors ++ ++ mmin=1 ++ ++ do ll=0,kmax1 ++ ++ l=ll ++ tmp = twopi*dble(ll) ++ rkx1=tmp*rcell(1) ++ rky1=tmp*rcell(4) ++ ++c put cos(i,L) terms into cos(i,0) array ++ ++ if(l.eq.1) then ++ ++ do i=1,limit ++ ++ elc(i,0)=elc(i,1) ++ els(i,0)=els(i,1) ++ ++ enddo ++ ++ elseif(l.gt.1) then ++ ++ do i=1,limit ++ ++ cs=elc(i,0) ++ elc(i,0)=cs*elc(i,1)-els(i,0)*els(i,1) ++ els(i,0)=els(i,0)*elc(i,1)+cs*els(i,1) ++ ++ enddo ++ ++ endif ++ ++ do mm=mmin,kmax2 ++ ++ m=iabs(mm) ++ tmp = twopi*dble(mm) ++ rkx2=rkx1+tmp*rcell(2) ++ rky2=rky1+tmp*rcell(5) ++ ++c test on magnitude of k vector ++ ++ rksq=rkx2*rkx2+rky2*rky2 ++ ++ if(rksq.le.rcpct2)then ++ ++c calculate exp(ikr) terms and product with charges ++ ++ i=0 ++ ++ if(mm.ge.0)then ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)-els(i,0)*ems(i,m)) ++ cks(i)=chge(j)*(els(i,0)*emc(i,m)+ems(i,m)*elc(i,0)) ++ ++ enddo ++ ++ else ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ ++ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)+els(i,0)*ems(i,m)) ++ cks(i)=chge(j)*(els(i,0)*emc(i,m)-ems(i,m)*elc(i,0)) ++ ++ enddo ++ ++ endif ++ ++c calculate sum of products of powers of z_i and q_i exp(ik.s_i) ++ ++ do k=0,2*nhko ++ ++ zgc(k)=0.d0 ++ zgs(k)=0.d0 ++ ++ do i=1,limit ++ ++ zgc(k)=zgc(k)+ckc(i)*znp(i,k) ++ zgs(k)=zgs(k)+cks(i)*znp(i,k) ++ ++ enddo ++ ++ enddo ++ ++c perform global summation of zgc and zgs arrays ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(zgc(0),2*nhko+1,buffer) ++ call gdsum(zgs(0),2*nhko+1,buffer) ++ ++ endif ++ ++c calculate 0th order screening function ++ ++ rkk=sqrt(rksq) ++ fn0=cerfr(ralph,rkk) ++c$$$ fn0=erfc(ralph*rkk)/rkk ++ gaus=exp(-(ralph*rkk)**2)/(alpha*sqrpi) ++ ++c sum terms for orders of the screening function ++ ++ fac=1.d0 ++ ++ do k=0,nhko ++ ++c sum over z_i binomial contributions ++ ++ eterm=0.d0 ++ fng=fac*fn0 ++ do m=0,k ++ ++ n=2*k-m ++ ++c sum energy terms ++ ++ eterm=eterm+crn(m,k)*(zgc(m)*zgc(n)+zgs(m)*zgs(n)) ++ ++c calculate force contribution to each site ++ ++ i=0 ++ bkk=-fng*crn(m,k) ++ ++ do j=iatm0,iatm1 ++ ++ i=i+1 ++ force0=bkk*(znp(i,n)*(zgs(m)*ckc(i)-zgc(m)*cks(i))+ ++ x znp(i,m)*(zgs(n)*ckc(i)-zgc(n)*cks(i))) ++ fxx(j)=fxx(j)+rkx2*force0 ++ fyy(j)=fyy(j)+rky2*force0 ++ ++ omg(3)=omg(3)+rkx2*force0*zzz(j) ++ omg(6)=omg(6)+rky2*force0*zzz(j) ++ ++ if(k.gt.0)then ++ ++ if(m.eq.0)then ++ ++ forcez=bkk*dble(n)*znp(i,n-1)*(zgc(m)*ckc(i)+ ++ x zgs(m)*cks(i)) ++ ++ else ++ ++ forcez=bkk*(dble(m)*znp(i,m-1)*(zgc(n)*ckc(i)+ ++ x zgs(n)*cks(i))+dble(n)*znp(i,n-1)*(zgc(m)* ++ x ckc(i)+zgs(m)*cks(i))) ++ ++ endif ++ ++ omg(9)=omg(9)+forcez*zzz(j) ++ fzz(j)=fzz(j)+forcez ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c accumulate potential energy and stress tensor ++ ++ engcpe=engcpe+fng*eterm ++ pterm=(dble(2*k-1)*fng-fac*gaus)/rksq ++ omg(1)=omg(1)+eterm*(fng+pterm*rkx2*rkx2) ++ omg(5)=omg(5)+eterm*(fng+pterm*rky2*rky2) ++ omg(2)=omg(2)+eterm*pterm*rky2*rkx2 ++ fac=fac*rksq/(dble(2*(k+1))*dble(2*k+1)) ++ ++c end of loop over orders of screening function ++ ++ enddo ++ ++c end of if-block for rksq < rcpct2 ++ ++ endif ++ ++c end of inner loop over reciprocal lattice vectors ++ ++ enddo ++ ++ mmin=-kmax2 ++ ++c end of outer loop over reciprocal lattice vectors ++ ++ enddo ++ ++ engcpe=engcpe/dble(mxnode) ++ do i = 1,9 ++ ++ omg(i) = omg(i)/dble(mxnode) ++ ++ enddo ++ ++c add self interaction correction to potential ++ ++ scale=4.d0*rarea*r4pie0/epsq ++ engcpe=scale*engcpe+engsic ++ ++c virial term ++ ++ vircpe=vircpe-scale*(omg(1)+omg(5)+omg(9)) ++ ++c calculate final forces ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=scale*fxx(i) ++ fyy(i)=scale*fyy(i) ++ fzz(i)=scale*fzz(i) ++ ++ enddo ++ ++c calculate stress tensor (symmetrical) ++ ++ stress(1) = stress(1)+scale*omg(1) ++ stress(2) = stress(2)+scale*omg(2) ++ stress(3) = stress(3)+scale*omg(3) ++ stress(4) = stress(4)+scale*omg(2) ++ stress(5) = stress(5)+scale*omg(5) ++ stress(6) = stress(6)+scale*omg(6) ++ stress(7) = stress(7)+scale*omg(3) ++ stress(8) = stress(8)+scale*omg(6) ++ stress(9) = stress(9)+scale*omg(9) ++ ++ return ++ end subroutine hkewald1 ++ ++ subroutine hkewald2 ++ x (idnode,mxnode,nhko,nlatt,imcon,natms,engcpe, ++ x vircpe,drewd,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating real-space contributions to ++c the hautman-klein-ewald electrostatic method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith may 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,nhko,nlatt,imcon,natms,nix,niy ++ integer nboxes,i,j,k,n,m,ma,mpm2,npm2,ii,l0,l1,l2,last ++ real(8) engcpe,vircpe,drewd,rcut,epsq ++ real(8) step,rcsq,rdrewd,strs1,strs2,strs3 ++ real(8) strs5,strs6,strs9,dcx,dcy,udx,udy,fac,chgea,chgprd ++ real(8) ddx,ddy,ssx,ssy,ssq,coul,fcoul,rrr,ppp,vk0,vk1,vk2 ++ real(8) eterm,t1,t2,egamma,fx,fy,fz,det ++ ++ dimension nix(25),niy(25) ++ ++ data nix/ 0, 1, 1, 0,-1,-1,-1, 0, 1, 2, 2, ++ x 2, 1, 0,-1,-2,-2,-2,-2,-2,-1, 0, 1, 2, 2/ ++ data niy/ 0, 0, 1, 1, 1, 0,-1,-1,-1, 0, 1, ++ x 2, 2, 2, 2, 2, 1, 0,-1,-2,-2,-2,-2,-2,-1/ ++ ++CDIR$ CACHE_ALIGN fi ++ ++c check boundary condition ++ ++ if(imcon.ne.6)call error(idnode,66) ++ ++c number of neighbouring real space cells ++ ++ if(nlatt.gt.2)call error(idnode,488) ++ step=dble(2*nlatt+1) ++ nboxes=(2*nlatt+1)**2 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c set cutoff condition for pair forces ++ ++ rcsq=(step*rcut)**2 ++ ++c reciprocal of interpolation interval ++ ++ rdrewd = 1.d0/drewd ++ ++c reciprocal cell ++ ++ call invert(cell,rcell,det) ++ do i=1,9 ++ ++ rcell(i)=rcell(i)/step ++ ++ enddo ++ ++c initialise stress tensor accumulators ++ strs3 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs5 = 0.d0 ++ ++c loop over image cells, starting with central cell ++ ++ ma=1 ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++ do k=1,nboxes ++ ++ last=natms ++ dcx=dble(nix(k)) ++ dcy=dble(niy(k)) ++ udx=cell(1)*dcx+cell(4)*dcy ++ udy=cell(2)*dcx+cell(5)*dcy ++ ++c outer loop over atoms ++ ++ do m=ma,mpm2 ++ ++ fac=r4pie0/epsq ++ if(m.eq.0)fac=fac*0.5d0 ++ if(m.gt.npm2)last=mpm2 ++ ++c set initial array values ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ chgea=fac*chge(i) ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ chgprd=chgea*chge(j) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++ zzn(ii)=1.d0 ++ zzd(ii)=0.d0 ++ ++c calculate interatomic separation ++ ++ ddx=xxx(i)-xxx(j)+udx ++ ddy=yyy(i)-yyy(j)+udy ++ ssx=rcell(1)*ddx+rcell(4)*ddy ++ ssy=rcell(2)*ddx+rcell(5)*ddy ++ ssx=ssx-nint(ssx) ++ ssy=ssy-nint(ssy) ++ xdf(ii)=step*(ssx*cell(1)+ssy*cell(4)) ++ ydf(ii)=step*(ssx*cell(2)+ssy*cell(5)) ++ zdf(ii)=zzz(i)-zzz(j) ++ rsqdf(ii)=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c loop over HK orders ++ ++ do n=0,nhko ++ ++c inner loop over atoms ++ ++ ii=0 ++ do i=idnode+1,last,mxnode ++ ++ ii=ii+1 ++ chgea = fac*chge(i) ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ chgprd=chgea*chge(j) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c apply truncation of potential ++ ++ ssq=rsqdf(ii)-zdf(ii)*zdf(ii) ++ ++ if(rcsq.gt.ssq)then ++ ++c calculate potential energy and virial ++ ++ coul=0.d0 ++ fcoul=0.d0 ++ rrr = sqrt(rsqdf(ii)) ++ sss(ii)=sqrt(ssq) ++ ++ if(n.eq.0)then ++ ++ coul = chgprd/rrr ++ fcoul = coul/rsqdf(ii) ++ ++ endif ++ ++c interpolation parameters ++ ++ l0=int(sss(ii)*rdrewd) ++ ppp=sss(ii)*rdrewd-dble(l0) ++ l0=l0+1 ++ l1=l0+1 ++ l2=l0+2 ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0 = hon(l0,n) ++ vk1 = hon(l1,n) ++ vk2 = hon(l2,n) ++ t1 = vk0 + (vk1 - vk0)*ppp ++ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) ++ ++ eterm=(t1+(t2-t1)*ppp*0.5d0)*ahk(n)*chgprd ++ engcpe=engcpe+coul-eterm*zzn(ii) ++ ++c calculate forces using 3pt interpolation ++ ++ vk0 = dhn(l0,n) ++ vk1 = dhn(l1,n) ++ vk2 = dhn(l2,n) ++ ++ t1 = vk0 + (vk1 - vk0)*ppp ++ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) ++ ++c calculate in-plane forces ++ ++ egamma=fcoul+ ++ x (t1+(t2-t1)*ppp*0.5d0)*chgprd*zzn(ii)*ahk(n) ++ fx=egamma*xdf(ii) ++ fy=egamma*ydf(ii) ++ ++c calculate perpendicular forces ++ ++ fz=fcoul*zdf(ii)+2.d0*dble(n)*eterm*zzd(ii) ++ ++c add to force accumulators ++ ++ fxx(i)=fxx(i)+fx ++ fyy(i)=fyy(i)+fy ++ fzz(i)=fzz(i)+fz ++ ++ fxx(j)=fxx(j)-fx ++ fyy(j)=fyy(j)-fy ++ fzz(j)=fzz(j)-fz ++ ++c reset zzn array for next order of convergence function ++ ++ zzd(ii)=zzn(ii)*zdf(ii) ++ zzn(ii)=zzd(ii)*zdf(ii) ++ ++c calculate stress tensor ++ ++ strs1 = strs1 + xdf(ii)*fx ++ strs2 = strs2 + xdf(ii)*fy ++ strs3 = strs3 + xdf(ii)*fz ++ strs5 = strs5 + ydf(ii)*fy ++ strs6 = strs6 + ydf(ii)*fz ++ strs9 = strs9 + zdf(ii)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ ma=0 ++ ++ enddo ++ ++c calculate virial ++ ++ vircpe=vircpe-(strs1+strs5+strs9) ++ ++c complete stress tensor ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ return ++ end subroutine hkewald2 ++ ++ subroutine hkewald3(iatm,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating exclusion corrections to ++c the hautman-klein-ewald electrostatic method ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith may 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm ++ real(8) engcpe,vircpe,epsq,fx,fy,fz,strs1,strs2,strs3 ++ real(8) strs5,strs6,strs9,chgea,chgprd,rrr,rsq,coul,fcoul ++ ++CDIR$ CACHE_ALIGN fi ++ ++c initialise stress tensor accumulators ++ ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs3 = 0.d0 ++ strs5 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ ++ if(abs(chgea).gt.1.d-10)then ++ ++ do m=1,nexatm(ik) ++ ++c atomic index and charge product ++ ++ jatm=lexatm(ik,m) ++ chgprd=chgea*chge(jatm) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=xdf(m)**2+ydf(m)**2+zdf(m)**2 ++ rrr = sqrt(rsq) ++ ++c calculate potential energy and virial ++ ++ coul = chgprd/rrr ++ engcpe = engcpe - coul ++ ++c calculate forces ++ ++ fcoul = coul/rsq ++ fx = fcoul*xdf(m) ++ fy = fcoul*ydf(m) ++ fz = fcoul*zdf(m) ++ ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ ++c calculate stress tensor ++ ++ strs1 = strs1 - xdf(m)*fx ++ strs2 = strs2 - xdf(m)*fy ++ strs3 = strs3 - xdf(m)*fz ++ strs5 = strs5 - ydf(m)*fy ++ strs6 = strs6 - ydf(m)*fz ++ strs9 = strs9 - zdf(m)*fz ++ ++ endif ++ ++ enddo ++ ++c virial ++ ++ vircpe=vircpe-engcpe ++ ++c complete stress tensor ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ endif ++ ++ return ++ end subroutine hkewald3 ++ ++ subroutine hkewald4(iatm,ik,engcpe,vircpe,engcpl,vircpl,rcut,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using the hautman-klein-ewald method ++c ++c modified to allow direct calculation of primary (short-range) ++c interactions for multiple-time step corrections ++ ++c primary neighbours are taken out of the Ewald sum ++c electrostatics are evaluated directly instead ++c ++c parallel replicated data version - real space terms ++c ++c copyright - daresbury laboratory 2000 ++c author - w. smith july 2000 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm ++ real(8) engcpe,vircpe,engcpl,vircpl,rcut,epsq ++ real(8) fi,fli,rcsq,strs1,strs2,strs3,strs5,strs6 ++ real(8) strs9,strl1,strl2,strl3,strl5,strl6,strl9,chgea,chgprd ++ real(8) rsq,rrr,coul,egamma,fx,fy,fz ++ ++ dimension fi(3),fli(3) ++ ++CDIR$ CACHE_ALIGN fi ++CDIR$ CACHE_ALIGN fli ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++ engcpl=0.d0 ++ vircpl=0.d0 ++ ++c initialise stress tensor accumulators ++ ++ strs1 = 0.d0 ++ strs2 = 0.d0 ++ strs3 = 0.d0 ++ strs5 = 0.d0 ++ strs6 = 0.d0 ++ strs9 = 0.d0 ++ strl1 = 0.d0 ++ strl2 = 0.d0 ++ strl3 = 0.d0 ++ strl5 = 0.d0 ++ strl6 = 0.d0 ++ strl9 = 0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ chgea=chge(iatm)/epsq*r4pie0 ++ if(abs(chgea).gt.1.d-10)then ++ ++c temporary arrays for cache aligning ++ ++ fi(1) = fxx(iatm) ++ fi(2) = fyy(iatm) ++ fi(3) = fzz(iatm) ++ ++ fli(1) = flx(iatm) ++ fli(2) = fly(iatm) ++ fli(3) = flz(iatm) ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ jatm=ilist(m) ++ chgprd=chgea*chge(jatm) ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++c coulombic energy ++ ++ rrr = sqrt(rsq) ++ coul = chgprd/rrr ++ ++c sum contributions to the totals ++ ++ engcpe = engcpe + coul ++ engcpl = engcpl - coul ++ vircpe = vircpe - coul ++ vircpl = vircpl + coul ++ ++c calculate coulombic forces ++ ++ egamma = coul/rsq ++ ++ fx = egamma*xdf(m) ++ fy = egamma*ydf(m) ++ fz = egamma*zdf(m) ++ ++c add in contributions to instantaneous force ++ ++ fi(1) = fi(1) + fx ++ fi(2) = fi(2) + fy ++ fi(3) = fi(3) + fz ++ ++ fxx(jatm) = fxx(jatm) - fx ++ fyy(jatm) = fyy(jatm) - fy ++ fzz(jatm) = fzz(jatm) - fz ++ ++c add in contributions to the long-range force ++ ++ fli(1) = fli(1) - fx ++ fli(2) = fli(2) - fy ++ fli(3) = fli(3) - fz ++ ++ flx(jatm) = flx(jatm) + fx ++ fly(jatm) = fly(jatm) + fy ++ flz(jatm) = flz(jatm) + fz ++ ++c calculate long and short range stress tensors ++ ++ strs1 = strs1 + xdf(m)*fx ++ strl1 = strl1 - xdf(m)*fx ++ strs2 = strs2 + xdf(m)*fy ++ strl2 = strl2 - xdf(m)*fy ++ strs3 = strs3 + xdf(m)*fz ++ strl3 = strl3 - xdf(m)*fz ++ strs5 = strs5 + ydf(m)*fy ++ strl5 = strl5 - ydf(m)*fy ++ strs6 = strs6 + ydf(m)*fz ++ strl6 = strl6 - ydf(m)*fz ++ strs9 = strs9 + zdf(m)*fz ++ strl9 = strl9 - zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c copy back temporaries ++ ++ fxx(iatm) = fi(1) ++ fyy(iatm) = fi(2) ++ fzz(iatm) = fi(3) ++ ++ flx(iatm) = fli(1) ++ fly(iatm) = fli(2) ++ flz(iatm) = fli(3) ++ ++c complete stress tensor ++ ++ stresl(1) = stresl(1) + strl1 ++ stresl(2) = stresl(2) + strl2 ++ stresl(3) = stresl(3) + strl3 ++ stresl(4) = stresl(4) + strl2 ++ stresl(5) = stresl(5) + strl5 ++ stresl(6) = stresl(6) + strl6 ++ stresl(7) = stresl(7) + strl3 ++ stresl(8) = stresl(8) + strl6 ++ stresl(9) = stresl(9) + strl9 ++ ++ stress(1) = stress(1) + strs1 ++ stress(2) = stress(2) + strs2 ++ stress(3) = stress(3) + strs3 ++ stress(4) = stress(4) + strs2 ++ stress(5) = stress(5) + strs5 ++ stress(6) = stress(6) + strs6 ++ stress(7) = stress(7) + strs3 ++ stress(8) = stress(8) + strs6 ++ stress(9) = stress(9) + strs9 ++ ++ endif ++ ++ return ++ end subroutine hkewald4 ++ ++ function cerfr(alpha,rrr) ++ ++c*********************************************************************** ++c ++c dl_poly function for generating complementary error function ++c divided by r ++c ++c copyright - daresbury laboratory 2001 ++c author - w. smith february 2001 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer k ++ real(8) cerfr,sqrpi,h0,h1,alpha,rrr,rr2,fac ++ ++ sqrpi=1.7724538509055159d0 ++ ++c starting values ++ ++ h0=0.d0 ++ h1=(2.d0*alpha/sqrpi)*exp(-(alpha*rrr)**2) ++ ++c generate function by recursion ++ ++ rr2=rrr*rrr ++ do k=100,1,-1 ++ ++ fac=(2.d0*alpha**2)**(k-1) ++ h0=(h0*rr2+fac*h1)/dble(2*k-1) ++ ++ enddo ++ ++ cerfr=1.d0/rrr-h0 ++ ++ return ++ end function cerfr ++ ++ end module hkewald_module ++ +diff -urN dl_class_1.9.orig/srcmod/hyper_dynamics_module.f dl_class_1.9/srcmod/hyper_dynamics_module.f +--- dl_class_1.9.orig/srcmod/hyper_dynamics_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/hyper_dynamics_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,2821 @@ ++ module hyper_dynamics_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining hyperdynamics routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use forces_module ++ use nlist_builders_module ++ use optimiser_module ++ use property_module ++ use setup_module ++ use shake_module ++ use temp_scalers_module ++ use vv_motion_module ++ ++ implicit none ++ ++ integer, parameter :: mxtrn=10 ++ integer, parameter :: mxbsn=1000 ++ integer, parameter :: mxneb=8 ++ integer, parameter :: mxdiffs=300 ++ integer, parameter :: hyper_tag=35000 ++ ++ integer numbsn,numpro,numtrk,ndiff,maxtrk,numdark,home_bsn,numbpd ++ integer nbsa(mxbsn),nbsb(mxbsn),ktrn(mxtrn) ++ real(8) xtrn(mxtrn),ytrn(mxtrn) ++ real(8) tstop,tkeres,timhyp,timres,tboost,boost,vbase ++ ++ integer, allocatable :: idabsn(:),keymin(:) ++ real(8), allocatable :: xbas(:),ybas(:),zbas(:) ++ real(8), allocatable :: xchk(:),ychk(:),zchk(:) ++ real(8), allocatable :: xres(:),yres(:),zres(:) ++ real(8), allocatable :: vxrs(:),vyrs(:),vzrs(:) ++ real(8), allocatable :: fxrs(:),fyrs(:),fzrs(:) ++ real(8), allocatable :: xhyp(:),yhyp(:),zhyp(:) ++ real(8), allocatable :: vxhp(:),vyhp(:),vzhp(:) ++ real(8), allocatable :: fxhp(:),fyhp(:),fzhp(:) ++ real(8), allocatable :: xdiffs(:),ydiffs(:),zdiffs(:) ++ real(8), allocatable :: celneb(:,:),path(:),optk(:,:) ++ real(8), allocatable :: xneb(:),yneb(:),zneb(:),engneb(:) ++ real(8), allocatable :: fxneb(:),fyneb(:),fzneb(:) ++ real(8), allocatable :: hxneb(:),hyneb(:),hzneb(:) ++ real(8), allocatable :: taux(:),tauy(:),tauz(:) ++ real(8), allocatable :: track(:) ++ ++ integer bsn_1(maxneb),bsn_2(maxneb) ++ real(8) strhyp(9),strres(9),engbsn(2) ++ real(8) celbas(9),celhyp(9),celchk(9),celres(9) ++ ++ save numbsn,numtrk,numpro,ndiff,numdark,timres ++ save xbas,ybas,zbas,xchk,ychk,zchk,timhyp,vbase ++ save xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs ++ save xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp ++ save celbas,celhyp,celres,celchk,strhyp,strres ++ save idabsn,nbsa,nbsb,xdiffs,ydiffs,zdiffs,tkeres ++ save xneb,yneb,zneb,engneb,taux,tauy,tauz,keymin ++ save fxneb,fyneb,fzneb,hxneb,hyneb,hzneb,path ++ save optk,tstop,tboost,boost,numbpd ++ ++ contains ++ ++ subroutine alloc_hyper_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining hyperdynamics arrays and ++c initialising control variables ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ ++ integer i,fail,idnode,nebmax ++ dimension fail(nnn) ++ ++ nebmax=msatms*(mxneb+1) ++ ++c initialise control variables ++ ++ numbpd=0 ++ numtrk=0 ++ numbsn=0 ++ numpro=0 ++ ndiff=0 ++ numdark=0 ++ home_bsn=0 ++ tkeres=0.d0 ++ tstop=1.d30 ++ timhyp=0.d0 ++ timres=0.d0 ++ boost=1.d0 ++ tboost=0.d0 ++ vbase=-huge(1.d0) ++ do i=1,maxneb ++ bsn_1(i)=0 ++ bsn_2(i)=0 ++ enddo ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (xbas(msatms),ybas(msatms),zbas(msatms),stat=fail(1)) ++ allocate (xchk(msatms),ychk(msatms),zchk(msatms),stat=fail(2)) ++ allocate (xres(msatms),yres(msatms),zres(msatms),stat=fail(3)) ++ allocate (vxrs(msatms),vyrs(msatms),vzrs(msatms),stat=fail(4)) ++ allocate (fxrs(msatms),fyrs(msatms),fzrs(msatms),stat=fail(5)) ++ allocate (xhyp(msatms),yhyp(msatms),zhyp(msatms),stat=fail(6)) ++ allocate (vxhp(msatms),vyhp(msatms),vzhp(msatms),stat=fail(7)) ++ allocate (fxhp(msatms),fyhp(msatms),fzhp(msatms),stat=fail(8)) ++ allocate (xdiffs(mxdiffs),ydiffs(mxdiffs),zdiffs(mxdiffs), ++ x stat=fail(9)) ++ allocate (idabsn(mxdiffs),keymin(0:mxneb),stat=fail(10)) ++ allocate (xneb(nebmax),yneb(nebmax),zneb(nebmax),stat=fail(11)) ++ allocate (fxneb(nebmax),fyneb(nebmax),fzneb(nebmax),stat=fail(12)) ++ allocate (taux(msatms),tauy(msatms),tauz(msatms),stat=fail(13)) ++ allocate (engneb(0:mxneb),celneb(9,0:mxneb),path(0:mxneb), ++ x stat=fail(14)) ++ allocate (hxneb(nebmax),hyneb(nebmax),hzneb(nebmax),stat=fail(15)) ++ allocate (optk(5,0:mxneb),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)then ++ if(idnode.eq.0)write(nrite,'(10i5)')fail ++ call error(idnode,1115) ++ endif ++ enddo ++ ++ end subroutine alloc_hyper_arrays ++ ++ subroutine hyper_start ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, ++ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, ++ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, ++ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, ++ x hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for starting a hyperdynamics simulation ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,savflg ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,i,j ++ integer ntpvdw,ntshl,ntteth,numblock,iatm0,iatm1,ntcons ++ integer ktol,pass,fail,ntrack ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,engcfg ++ real(8) virlrc,cvgerr,dum,otol,cgerr,sigma,hyp_units ++ ++c allocate track array for BPD ++ ++ if(lbpd)then ++ allocate (track(0:nblock/ntrack),stat=fail) ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c current block number ++ ++ numblock=nstep/nblock ++ ++c open hyperdynamics journal file ++ ++ if(idnode.eq.0) ++ x open(nevnt,file="EVENTS",form='formatted',position='append') ++ ++c set up hyperdynamics for simulation start ++ ++ if(nstep.eq.0)then ++ ++c initialise bias potential boost factor ++ ++ numbpd=0 ++ boost=1.d0 ++ tboost=0.d0 ++ ++c set basin difference markers ++ ++ do i=1,mxbsn ++ ++ nbsa(i)=0 ++ nbsb(i)=0 ++ ++ enddo ++ ++c store the starting configuration ++ ++ savflg=.true. ++ tkeres=sigma ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++c minimise starting structure ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) ++ ++c define zero energy for BPD dynamics mode ++ ++ vbase=engcfg ++ ++c write events entry for minimisation ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x engcfg/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x engcfg/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c save minimised starting structure as basin file ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,engcfg) ++ ++c save details of starting home basin ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c restore the starting configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++ else ++ ++c restore previous data from hyperdynamics backup file ++ ++ call hyper_open(ltad,idnode,mxnode,natms,nsteql) ++ ++c reset home basin for hyperdynamics (home basin is 0 for TAD) ++ ++ if(lbpd)home_bsn=numbsn-1 ++ ++c store the current configuration ++ ++ savflg=.true. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c read minimised starting structure from home basin file ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,home_bsn,natms,imcon,idnode,engcfg) ++ ++c save details of current home basin ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c restore the current configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++ endif ++ ++ return ++ end subroutine hyper_start ++ ++ subroutine hyper_driver ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, ++ x tolnce,hyp_units,ebias,vmin) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for implementing a hyperdynamics simulation ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical lbpd,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb ++ logical lrefmin,same,savflg,recycle,scan,prechk,tadall,nebgo ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntrack ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw ++ integer ntshl,ntteth,blkout,numblock,bsn1,bsn2,itrack ++ integer nturn,ntcons,mdiff,newbsn,iatm0,iatm1,pass,i,j,itrk ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,catchrad ++ real(8) cvgerr,estar,engcfg,cfgtmp,engcpe,engsrp,catch ++ real(8) vircpe,engmet,virmet,virlrc,engtbp,virtbp,dum ++ real(8) engfbp,virfbp,engter,virter,engbnd,virbnd,engang ++ real(8) virang,engdih,virdih,enginv,virinv,engtet,virtet ++ real(8) engshl,shlke,virshl,engfld,virfld,virsrp,sprneb ++ real(8) deltad,deltal,tlow,timhop,timlow,engtke,tolnce,hyp_units ++ real(8) ebias,vmin ++ ++ data bsn1,bsn2/0,0/ ++ ++c control variables ++ ++ lneb=.false. ++ numblock=nstep/nblock ++ maxtrk=nblock/ntrack ++ if(numdark.eq.0)numdark=nsteql ++ lrefmin=(mod(nstep,nblock).eq.0) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c BPD/TAD simulation time ++ ++ timhyp=timhyp+tstep ++ ++c track the tboost value ++ ++ if(mod(nstep,ntrack).eq.0)track(mod(numtrk,maxtrk))=tboost ++ ++c provisional check for transition - compare current config with ++c the reference state (not in dark period) ++ ++ same=.true. ++ scan=.false. ++ if(prechk.and.(mod(nstep,ntrack).eq.0).and. ++ x (lbpd.or.(ltad.and.(nstep.gt.numdark))))then ++ ++ catch=0.65d0*catchrad ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catch) ++ ++ if(.not.same.and.idnode.eq.0)then ++ ++ write(nevnt,'("PRE",i10)')nstep ++ write(nrite,'(1x,"PRE",i10)')nstep ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++ if(.not.same.or.lrefmin)then ++ ++c store the current configuration ++ ++ savflg=.true. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c minimise current structure ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++c confirm any transition ++ ++ if(ltad)scan=.true. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c transition detected - proceed with transition analysis ++ ++ if(.not.same)then ++ ++c store new basin energy ++ ++ engbsn(2)=cfgtmp ++ ++c save new minimised state (bias potential dynamics only) ++ ++ if(lbpd)then ++ ++ do i=1,9 ++ celres(i)=cell(i) ++ enddo ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xres(j)=xxx(i) ++ yres(j)=yyy(i) ++ zres(j)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++c record transition (for TAD only if outside blackout period) ++ ++ if(lbpd.or.nstep.gt.numdark)then ++ ++c check if transition results in unique new basin (TAD only) ++ ++ if(ltad)call check_basins(newbsn,mdiff,mxnode) ++ ++c analysis of new basin ++ ++ if(lbpd.or.tadall.or.newbsn.eq.numbsn)then ++ ++c set difference counters and pointers (TAD only) ++ ++ if(ltad)then ++ ++ if(numbsn.gt.mxbsn)call error(idnode,2330) ++ ++ ndiff=mdiff ++ ++ if(numbsn.gt.1)then ++ nbsa(numbsn)=nbsb(numbsn-1)+1 ++ else ++ nbsa(numbsn)=1 ++ endif ++ ++ nbsb(numbsn)=mdiff ++ ++ endif ++ ++c save the basin file and store basin energy ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode, ++ x cfgtmp) ++ ++c determine minimum (reaction) path and activation energy ++ ++ if(nebgo)call neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, ++ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,cfgtmp,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++c analyse the transition - determine e-star and destination state ++ ++ if(nebgo)call transition_properties ++ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,nturn,numbsn,alpha,delr,dlrpot, ++ x drewd,elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr,estar, ++ x catchrad,hyp_units) ++ ++c estimate time of transition from past trajectory ++ ++ call transition_time ++ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl, ++ x ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, ++ x ntpter,ntrack,ntpvdw,ntshl,ntteth,ntcons,itrk, ++ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, ++ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) ++ ++c update TAD control variables ++ ++ if(ltad)then ++ ++c update blackout period ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ ++c calculate stopping time ++ ++ timlow=timhop*exp(-(estar/temp-estar/tlow)/boltz) ++ tstop=min(tstop,deltad*(timlow/deltad)**(tlow/temp)) ++ ++c write transition data for TAD only ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRA",i10,3i6,1p,4e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timlow,tstop ++ write(nevnt,'("BLK",2i10)')nstep,numdark ++ write(nrite,'(1x,"TRA",i10,3i6,1p,4e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timlow,tstop ++ write(nrite,'(1x,"BLK",2i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ elseif(nebgo.and.idnode.eq.0)then ++ ++c write transition data for bias potential dynamics with NEB ++ ++ write(nevnt,'("TRA",i10,3i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,'(1x,"TRA",i10,3i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,"(1x,120('-'))") ++ ++ numbpd=0 ++ tboost=0.0 ++ ++ elseif(idnode.eq.0)then ++ ++c write transition data for bias potential dynamics without NEB ++ ++ write(nevnt,'("TRA",i10,2i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,ebias/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,'(1x,"TRA",i10,2i6,1p,3e14.5)') ++ x nstep,home_bsn,numbsn-1,ebias/hyp_units, ++ x timhop,timhop*tboost ++ write(nrite,"(1x,120('-'))") ++ ++ numbpd=0 ++ tboost=0.0 ++ ++ endif ++ ++ else ++ ++c update blackout period when transition not unique (TAD only) ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRR",i10,3i6)')nstep,home_bsn,newbsn ++ write(nevnt,'("BLK",2i10)')nstep,numdark ++ write(nrite,'(1x,"TRR",i10,3i6)')nstep,home_bsn,newbsn ++ write(nrite,'(1x,"BLK",2i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++c actions when new basin has been visited before (TAD only) ++ ++ elseif(ltad)then ++ ++c ignore dark transition and extend blackout period (TAD only) ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("TRI",i10)')nstep ++ write(nrite,'(1x,"TRI",i10)')nstep ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ if(nstep.le.nsteql)then ++ ++ nsteql=nsteql+blkout ++ numdark=nsteql+blkout ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("EQL",2i10)')nstep,nsteql ++ write(nrite,'(1x,"EQL",2i10)')nstep,nsteql ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ else ++ ++ numdark=nblock*((nstep+blkout)/nblock+1) ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("BLK",3i10)')nstep,numdark ++ write(nrite,'(1x,"BLK",3i10)')nstep,numdark ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ if(ltad)then ++ ++c return to the block starting state after transition (TAD only) ++ ++ timhyp=timres ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++c scramble the velocities (and conserve system energy) ++ ++ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,tkeres,temp,tolnce) ++ ++ elseif(lbpd)then ++ ++c reset reference state to new basin (bias potential dynamics only) ++ ++ home_bsn=home_bsn+1 ++ engbsn(1)=engbsn(2) ++ ++ do i=1,9 ++ celbas(i)=celres(i) ++ enddo ++ ++ call invert(celbas,rcell,dum) ++ ++ do i=1,iatm1-iatm0+1 ++ ++ xbas(i)=rcell(1)*xres(i)+rcell(4)*yres(i)+rcell(7)*zres(i) ++ ybas(i)=rcell(2)*xres(i)+rcell(5)*yres(i)+rcell(8)*zres(i) ++ zbas(i)=rcell(3)*xres(i)+rcell(6)*yres(i)+rcell(9)*zres(i) ++ ++ enddo ++ ++c restore current hyperdynamics configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c reset boost factor ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++c no transition detected so restore current trajectory ++ ++ else ++ ++c restore the current configuration ++ ++ savflg=.false. ++ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, ++ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) ++ ++c save the block configuration as reset state (TAD only) ++ ++ if(ltad.and.lrefmin)then ++ ++ savflg=.true. ++ tkeres=engtke ++ timres=timhyp ++ call store_config(savflg,idnode,mxnode,natms,strres,celres, ++ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c close down if TAD stopping time reached ++ ++ if(ltad.and.tstop.lt.timhyp)recycle=.false. ++ ++c write a tracking file ++ ++ if(mod(nstep,ntrack).eq.0)then ++ ++ itrack=mod(numtrk,maxtrk) ++ call write_reference_config ++ x ('CFGTRK','TRACKS',ntrk,itrack,natms,imcon,idnode,engcfg) ++ ++ numtrk=numtrk+1 ++ ++ endif ++ ++ return ++ end subroutine hyper_driver ++ ++ subroutine define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling subroutine calls for a ++c structural minimisation to define a minimum state for ++c hyperdynamics simulations ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfcap,nogofr,lneut,lnsq,loglnk,stropt,lzeql ++ logical newlst,ltad,lsolva,lfree,lexcite ++ ++ integer idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp ++ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql ++ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet ++ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf ++ integer nblock,pass,mxpass,mstep,ntcons,nsolva,isolva ++ ++ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd ++ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp ++ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp ++ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp ++ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp ++ real(8) virtbp,virter,virtet,volm,engmet,cfgold,cvgerr ++ real(8) hnorm,grad0,grad1,ff1,sgn,engord,virord ++ ++ data mxpass/1000/ ++ ++c control variables ++ ++ pass=0 ++ keystr=0 ++ numrdf=0 ++ ltad=.true. ++ engcfg=1.d30 ++ stropt=.false. ++ nogofr=.false. ++ ++c dummy variables ++ ++ lsolva=.false. ++ lfree=.false. ++ lexcite=.false. ++ nsolva=0 ++ isolva=1 ++ engord=0.d0 ++ virord=0.d0 ++ ++c relax the current structure ++ ++ do while(.not.stropt.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ cfgold=engcfg ++ mstep=nstep+pass ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces ++ ++ call force_manager ++ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ cvgerr=abs(engcfg-cfgold) ++ ++ enddo ++ ++ return ++ end subroutine define_minimum_state ++ ++ subroutine write_reference_config ++ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) ++ ++c*********************************************************************** ++c ++c dlpoly utility to write a minimum structure file in CONFIG ++c format ++c ++c copyright daresbury laboratory ++c author w.smith june 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*6 fnam ++ character*4 tail ++ character*6 direct ++ integer nfil,nnn,i,natms,imcon,idnode,levcfg ++ real(8) engcfg ++ ++ levcfg=0 ++ ++c node zero handles i/o ++ ++ if(idnode.eq.0)then ++ ++c write configuration data to new configuration file ++ ++ write(tail,'(i4.4)')nnn ++ open(nfil,file=direct//'/'//fnam//tail,form='formatted') ++ ++ write(nfil,'(a10)')fnam//tail ++ write(nfil,'(3i10,g20.12)') levcfg,imcon,natms,engcfg ++ ++ if(imcon.gt.0) write(nfil,'(3f20.12)') cell ++ ++ do i=1,natms ++ ++ write(nfil,'(a8,i10)') atmnam(i),i ++ write(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ ++ enddo ++ ++ close (nfil) ++ ++ endif ++ ++ nnn=nnn+1 ++ ++ return ++ end subroutine write_reference_config ++ ++ subroutine read_reference_config ++ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) ++ ++c*********************************************************************** ++c ++c dlpoly utility to read a reference structure file in CONFIG ++c format ++c ++c copyright daresbury laboratory ++c author w.smith february 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*6 fnam ++ character*4 tail ++ character*6 direct ++ integer nfil,nnn,i,natms,imcon,idnode,levcfg ++ real(8) engcfg ++ ++c node zero handles i/o ++ ++ if(idnode.eq.0)then ++ ++c read configuration data from configuration file on proc 0 ++ ++ write(tail,'(i4.4)')nnn ++ open(nfil,file=direct//'/'//fnam//tail,form='formatted') ++ ++ read(nfil,*) ++ read(nfil,'(3i10,g20.12)')levcfg,imcon,natms,engcfg ++ buffer(1)=dble(levcfg) ++ buffer(2)=dble(imcon) ++ buffer(3)=dble(natms) ++ buffer(4)=engcfg ++ if(imcon.gt.0) read(nfil,'(3f20.12)') cell ++ do i=1,9 ++ buffer(i+4)=cell(i) ++ enddo ++ call gdsum(buffer(1),13,buffer(14)) ++ ++ do i=1,natms ++ ++ read(nfil,'(a8)') atmnam(i) ++ read(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ ++ enddo ++ ++ close (nfil) ++ ++ else ++ ++c gather data from configuration file on procs > 0 ++ ++ do i=1,13 ++ buffer(i)=0.d0 ++ enddo ++ call gdsum(buffer(1),13,buffer(14)) ++ ++ levcfg=nint(buffer(1)) ++ imcon=nint(buffer(2)) ++ natms=nint(buffer(3)) ++ engcfg=buffer(4) ++ do i=1,9 ++ cell(i)=buffer(i+4) ++ enddo ++ do i=1,natms ++ xxx(i)=0.d0 ++ yyy(i)=0.d0 ++ zzz(i)=0.d0 ++ enddo ++ ++ endif ++ ++c global gather of atomic coordinates ++ ++ call gdsum(xxx,natms,buffer) ++ call gdsum(yyy,natms,buffer) ++ call gdsum(zzz,natms,buffer) ++ ++ return ++ end subroutine read_reference_config ++ ++ subroutine store_config(lsave,idnode,mxnode,natms,strold,celold, ++ x xold,yold,zold,vxold,vyold,vzold,fxold,fyold,fzold) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for storing the current ++c configuration ++c ++c copyright daresbury laboratory ++c author w.smith sep 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical lsave ++ integer idnode,mxnode,natms,iatm0,iatm1,i,j ++ ++ real(8) strold(9),celold(9) ++ real(8) xold(msatms),yold(msatms),zold(msatms) ++ real(8) vxold(msatms),vyold(msatms),vzold(msatms) ++ real(8) fxold(msatms),fyold(msatms),fzold(msatms) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if(lsave)then ++ ++c save cell and stress tensors ++ ++ do i=1,9 ++ ++ celold(i)=cell(i) ++ strold(i)=stress(i) ++ ++ enddo ++ ++c save configuration ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ vxold(j)=vxx(i) ++ vyold(j)=vyy(i) ++ vzold(j)=vzz(i) ++ fxold(j)=fxx(i) ++ fyold(j)=fyy(i) ++ fzold(j)=fzz(i) ++ ++ enddo ++ ++ else ++ ++c restore cell and stress tensors ++ ++ do i=1,9 ++ ++ cell(i)=celold(i) ++ stress(i)=strold(i) ++ ++ enddo ++ ++c restore configuration ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxx(i)=xold(j) ++ yyy(i)=yold(j) ++ zzz(i)=zold(j) ++ vxx(i)=vxold(j) ++ vyy(i)=vyold(j) ++ vzz(i)=vzold(j) ++ fxx(i)=fxold(j) ++ fyy(i)=fyold(j) ++ fzz(i)=fzold(j) ++ ++ enddo ++ ++c replication of full configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine store_config ++ ++ subroutine check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for checking when a transition ++c has occured in a configuration ++c ++c copyright daresbury laboratory ++c author w.smith sep 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical same,safe,scan,all ++ integer idnode,mxnode,natms,imcon,nblock,mdiff ++ integer iatm0,iatm1,i,j ++ real(8) catchrad,catch2,rr2,dum,sxx,syy,szz,txx,tyy,tzz,pp2 ++ ++ all=(seek.eq.'all ') ++ ++c flag for comparing structures ++ ++ same=.true. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise search parameters ++ ++ catch2=catchrad**2 ++ ++c construct coordinate check arrays ++ ++ do i=1,9 ++ celchk(i)=cell(i) ++ enddo ++ ++c store structure in reduced coordinates (target atoms only) ++ ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ if(all.or.atmnam(i).eq.seek)then ++ ++ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ endif ++ ++ enddo ++ ++c compare current structure with reference basin ++ ++ j=0 ++ pp2=0.d0 ++ safe=.true. ++ mdiff=ndiff ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ if(all.or.atmnam(i).eq.seek)then ++ ++c calculate separations in reduced units ++ ++ sxx=xchk(j)-xbas(j) ++ syy=ychk(j)-ybas(j) ++ szz=zchk(j)-zbas(j) ++ ++c calculate minimum image separations ++ ++ sxx=sxx-nint(sxx) ++ syy=syy-nint(syy) ++ szz=szz-nint(szz) ++ ++c set trial structure at minimum displacements from reference ++ ++ xchk(j)=xbas(j)+sxx ++ ychk(j)=ybas(j)+syy ++ zchk(j)=zbas(j)+szz ++ ++c calculate atomic separations in real coordinates ++ ++ txx=(celchk(1)*xchk(j)+celchk(4)*ychk(j)+celchk(7)*zchk(j)) ++ x -(celbas(1)*xbas(j)+celbas(4)*ybas(j)+celbas(7)*zbas(j)) ++ tyy=(celchk(2)*xchk(j)+celchk(5)*ychk(j)+celchk(8)*zchk(j)) ++ x -(celbas(2)*xbas(j)+celbas(5)*ybas(j)+celbas(8)*zbas(j)) ++ tzz=(celchk(3)*xchk(j)+celchk(6)*ychk(j)+celchk(9)*zchk(j)) ++ x -(celbas(3)*xbas(j)+celbas(6)*ybas(j)+celbas(9)*zbas(j)) ++ ++c calculate total structural difference ++ ++ rr2=txx**2+tyy**2+tzz**2 ++ pp2=max(pp2,rr2) ++ ++c identify and store the displaced atoms ++ ++ if(scan.and.rr2.ge.catch2)then ++ ++ mdiff=mdiff+1 ++ ++ if(mdiff.le.mxdiffs)then ++ ++ idabsn(mdiff)=i ++ xdiffs(mdiff)=txx ++ ydiffs(mdiff)=tyy ++ zdiffs(mdiff)=tzz ++ ++ else ++ ++ safe=.false. ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c global check on diffs arrays ++ ++ if(scan)then ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)then ++ ++ if(idnode.eq.0)write(nrite, ++ x "(/,1x,'number of current diffs',i10)")mdiff ++ call error(idnode,2340) ++ ++ endif ++ ++ endif ++ ++c global transition check ++ ++ same=(pp2.lt.catch2) ++ if(mxnode.gt.1)call gstate(same) ++ ++ return ++ end subroutine check_for_transition ++ ++ subroutine check_basins(newbsn,mdiff,mxnode) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for checking that a new basin is not ++c one already known ++c ++c copyright daresbury laboratory ++c author w.smith jan 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical same ++ integer newbsn,ia,ib,ic,id,ibsn,i,j,k,mxnode,mdiff ++ ++ ibsn=1 ++ newbsn=0 ++ ib=mdiff ++ ia=ndiff+1 ++ same=.false. ++ do while(.not.same.and.ibsn.lt.numbsn) ++ ++ ic=nbsa(ibsn) ++ id=nbsb(ibsn) ++ ++ if(ib-ia.eq.id-ic)then ++ ++ same=.true. ++ ++ do k=0,ib-ia ++ ++ i=ia+k ++ j=ic+k ++ ++ if(.not.((idabsn(i).eq.idabsn(j)).and. ++ x (abs(xdiffs(i)-xdiffs(j)).lt.0.1d0).and. ++ x (abs(ydiffs(i)-ydiffs(j)).lt.0.1d0).and. ++ x (abs(zdiffs(i)-zdiffs(j)).lt.0.1d0)))same=.false. ++ ++ enddo ++ ++ endif ++ ++c check if same on all processors ++ ++ if(mxnode.gt.1)call gstate(same) ++ if(same)newbsn=ibsn ++ ++ ibsn=ibsn+1 ++ ++ enddo ++ ++c if not same - must be new basin! ++ ++ if(.not.same)newbsn=numbsn ++ ++ return ++ end subroutine check_basins ++ ++ subroutine neb_driver ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, ++ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, ++ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, ++ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, ++ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, ++ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, ++ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep,opttol,sprneb,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for controlling a nudged elastic band ++c calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lneb,newlst,lneut,lnsq,stropt ++ logical lzeql,loglnk,lfcap ++ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,mstep ++ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw ++ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl ++ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nscons ++ integer ngrp,keytol,ntfree,iatm0,iatm1,iatm2,ntcons ++ integer i,j,k,n,pass,mxpass,nkinks,bsn1,bsn2,itrk ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl ++ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep ++ real(8) sprneb,opttol,hyp_units,fac,xxn,yyn,zzn,tol,cvg,dum ++ ++ data mxpass/100/ ++ ++c control variables ++ ++ stropt=.false. ++ do n=0,mxneb ++ ++ keymin(n)=0 ++ do i=1,5 ++ optk(i,n)=0.d0 ++ enddo ++ ++ enddo ++ if(lneb)numpro=-(100*bsn1+bsn2) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c read in the required start and end point configurations ++ ++ if(lneb)then ++ ++c read data for first reference structure ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,bsn1,natms,imcon,idnode,engcfg) ++ ++ engbsn(1)=engcfg ++ ++ do i=1,9 ++ celbas(i)=cell(i) ++ enddo ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++c read data for second reference structure ++ ++ call read_reference_config ++ x ('CFGBSN','BASINS',nbsn,bsn2,natms,imcon,idnode,engcfg) ++ ++ engbsn(2)=engcfg ++ ++ do i=1,9 ++ celchk(i)=cell(i) ++ enddo ++ call invert(cell,rcell,dum) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ enddo ++ ++ endif ++ ++c construct initial `bead' configurations in chain ++ ++ k=0 ++ do n=0,mxneb ++ ++ j=0 ++ fac=dble(n)/dble(mxneb) ++ ++c construct linear mix of cell vectors ++ ++ do i=1,9 ++ celneb(i,n)=(1.d0-fac)*celbas(i)+fac*celchk(i) ++ enddo ++ ++c construct beads by linear interpolation ++ ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ ++ xxn=xbas(j)+fac*((xchk(j)-xbas(j))-nint(xchk(j)-xbas(j))) ++ yyn=ybas(j)+fac*((ychk(j)-ybas(j))-nint(ychk(j)-ybas(j))) ++ zzn=zbas(j)+fac*((zchk(j)-zbas(j))-nint(zchk(j)-zbas(j))) ++ xneb(k)=celneb(1,n)*xxn+celneb(4,n)*yyn+celneb(7,n)*zzn ++ yneb(k)=celneb(2,n)*xxn+celneb(5,n)*yyn+celneb(8,n)*zzn ++ zneb(k)=celneb(3,n)*xxn+celneb(6,n)*yyn+celneb(9,n)*zzn ++ ++ enddo ++ ++ enddo ++ ++c start of NEB optimisation ++ ++ pass=0 ++ safe=.false. ++ do while(.not.safe.and.pass.lt.mxpass) ++ ++ pass=pass+1 ++ safe=.true. ++ mstep=nstep+pass ++ ++c calculate system forces on all beads ++ ++ call neb_system_forces ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, ++ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, ++ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, ++ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, ++ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep) ++ ++c calculate spring forces on all beads ++ ++ call neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) ++ ++c energy minimisation of each bead ++ ++ do n=0,mxneb ++ ++c construct cell vectors for nth bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate and force arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ fxx(i)=fxneb(k) ++ fyy(i)=fyneb(k) ++ fzz(i)=fzneb(k) ++ ++ enddo ++ ++c restore search direction vector if keymin > 0 ++ ++ if(keymin(n).gt.0)then ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ hhx(i)=hxneb(k) ++ hhy(i)=hyneb(k) ++ hhz(i)=hzneb(k) ++ ++ enddo ++ ++ endif ++ ++c form complete global arrays ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ if(keymin(n).gt.0) ++ x call merge(idnode,mxnode,natms,mxbuff,hhx,hhy,hhz,buffer) ++ ++ endif ++ ++c structure optimisation ++ ++ call strucopt ++ x (stropt,keymin(n),keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,10.d0*opttol,engneb(n),optk(1,n), ++ x optk(2,n),optk(3,n),optk(4,n),optk(5,n)) ++ safe=safe.and.stropt ++ stropt=.false. ++ ++c update coordinate arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xneb(k)=xxx(i) ++ yneb(k)=yyy(i) ++ zneb(k)=zzz(i) ++ hxneb(k)=hhx(i) ++ hyneb(k)=hhy(i) ++ hzneb(k)=hhz(i) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c convergence check ++ ++c$$$ if(.not.safe)then ++c$$$ ++c$$$ call error(idnode,2320) ++c$$$ ++c$$$ else ++ ++c save neb profile ++ ++ call write_profile(idnode,mxnode,natms,hyp_units) ++ ++c write neb summary ++ ++ if(idnode.eq.0)then ++ ++ if(lneb)then ++ ++ write(nrite,'(/,1x,"summary of NEB calculation",/)') ++ write(nrite,'(1x,"path and energy for state",i4, ++ x " ---> state",i4," transition")')bsn1,bsn2 ++ write(nrite,'(1x,"convergence status :",l4)')safe ++ write(nrite,'(1x,"obtained after ",i4," iterations",/)')pass ++ ++ do n=0,mxneb ++ write(nrite,'(6x,1p,2e14.6)')path(n),engneb(n)/hyp_units ++ enddo ++ ++ else ++ ++ write(nevnt,'("NEB",i10,3i6,1p,2e14.5)') ++ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, ++ x engbsn(2)/hyp_units ++ write(nrite,'(1x,"NEB",i10,3i6,1p,2e14.5)') ++ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, ++ x engbsn(2)/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ endif ++ ++c$$$ endif ++ ++c end of NEB optimisation ++ ++ return ++ end subroutine neb_driver ++ ++ subroutine neb_system_forces ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, ++ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, ++ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, ++ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, ++ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, ++ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, ++ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, ++ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, ++ x engang,virang,engdih,virdih,enginv,virinv,engtet, ++ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, ++ x temp,tstep) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating system forces in a nudged ++c elastic band calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,ltad ++ logical lsolva,lfree,lexcite ++ integer idnode,mxnode,natms,imcon,nstbgr,nsteql,mstep ++ integer numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw ++ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl ++ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl ++ integer iatm0,iatm1,iatm2,i,k,n,nsolva,isolva ++ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw ++ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet ++ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp ++ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang ++ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl ++ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep ++ real(8) engord,virord ++ ++ numrdf=0 ++ ltad=.true. ++ nogofr=.false. ++ ++c dummy variables ++ ++ lsolva=.false. ++ lfree=.false. ++ lexcite=.false. ++ nsolva=0 ++ isolva=1 ++ engord=0.d0 ++ virord=0.d0 ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c calculate system forces for all beads ++ ++ do n=0,mxneb ++ ++c construct cell vectors for one bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate array for one bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ ++ enddo ++ ++c form complete global arrays ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c construct verlet neighbour list ++ ++ call nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c calculate atomic forces for one bead ++ ++ call force_manager ++ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, ++ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, ++ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, ++ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, ++ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, ++ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, ++ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, ++ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, ++ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, ++ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, ++ x engcfg,fmax,temp,engord,virord) ++ ++c store configuration energy of bead ++ ++ engneb(n)=engcfg ++ ++c frozen atoms option ++ ++ call freeze(natms) ++ ++c allocate forces to bead atoms ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ fxneb(k)=fxx(i) ++ fyneb(k)=fyy(i) ++ fzneb(k)=fzz(i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine neb_system_forces ++ ++ subroutine neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating spring forces in a nudged ++c elastic band calculation ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,k,n,kp,km,idnode,mxnode,natms,iatm0,iatm1,iatm2 ++ integer nkinks ++ real(8) rp2,rm2,tau2,fpar,vv0,vp1,vm1,aaa,bbb,txx,tyy,tzz ++ real(8) uxx,uyy,uzz,wxx,wyy,wzz,sxx,syy,szz,rxx,ryy,rzz ++ real(8) sprneb,fac,kink,det ++ real(8) rcella(9),rcellb(9),rcellc(9),cella(9),cellb(9),cellc(9) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c energies of first and last basins ++ ++ engneb(0)=engbsn(1) ++ engneb(mxneb)=engbsn(2) ++ ++c calculate spring tangents for all beads ++ ++ nkinks=0 ++ do n=1,mxneb-1 ++ ++ rp2=0.d0 ++ rm2=0.d0 ++ tau2=0.d0 ++ fpar=0.d0 ++ kink=0.d0 ++ vv0=engneb(n) ++ vp1=engneb(n+1) ++ vm1=engneb(n-1) ++ ++c calculate tangent vector and scalar product with system force ++ ++ if(vp1.gt.vv0.and.vv0.gt.vm1)then ++ ++ aaa=1.d0 ++ bbb=0.d0 ++ ++ else if(vp1.lt.vv0.and.vv0.lt.vm1)then ++ ++ aaa=0.d0 ++ bbb=1.d0 ++ ++ else if(vp1.gt.vm1)then ++ ++ aaa=max(abs(vp1-vv0),abs(vv0-vm1)) ++ bbb=min(abs(vp1-vv0),abs(vv0-vm1)) ++ ++ else ++ ++ aaa=min(abs(vp1-vv0),abs(vv0-vm1)) ++ bbb=max(abs(vp1-vv0),abs(vv0-vm1)) ++ ++ endif ++ ++c invert cell matrices ++ ++ do i=1,9 ++ cella(i)=celneb(i,n-1) ++ cellb(i)=celneb(i,n) ++ cellc(i)=celneb(i,n+1) ++ enddo ++ call invert(cella,rcella,det) ++ call invert(cellb,rcellb,det) ++ call invert(cellc,rcellc,det) ++ ++ j=0 ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ km=k-iatm2 ++ ++c calculate first spring vector (pbc corrected) ++ ++ sxx=rcellb(1)*xneb(k)+rcellb(4)*yneb(k)+rcellb(7)*zneb(k) ++ syy=rcellb(2)*xneb(k)+rcellb(5)*yneb(k)+rcellb(8)*zneb(k) ++ szz=rcellb(3)*xneb(k)+rcellb(6)*yneb(k)+rcellb(9)*zneb(k) ++ rxx=rcella(1)*xneb(km)+rcella(4)*yneb(km)+rcella(7)*zneb(km) ++ ryy=rcella(2)*xneb(km)+rcella(5)*yneb(km)+rcella(8)*zneb(km) ++ rzz=rcella(3)*xneb(km)+rcella(6)*yneb(km)+rcella(9)*zneb(km) ++ rxx=rxx-nint(rxx-sxx) ++ ryy=ryy-nint(ryy-syy) ++ rzz=rzz-nint(rzz-szz) ++ txx=xneb(k)- ++ x (rxx*celneb(1,n-1)+ryy*celneb(4,n-1)+rzz*celneb(7,n-1)) ++ tyy=yneb(k)- ++ x (rxx*celneb(2,n-1)+ryy*celneb(5,n-1)+rzz*celneb(8,n-1)) ++ tzz=zneb(k)- ++ x (rxx*celneb(3,n-1)+ryy*celneb(6,n-1)+rzz*celneb(9,n-1)) ++ ++c calculate second spring vector (pbc corrected) ++ ++ kp=k+iatm2 ++ rxx=rcellc(1)*xneb(kp)+rcellc(4)*yneb(kp)+rcellc(7)*zneb(kp) ++ ryy=rcellc(2)*xneb(kp)+rcellc(5)*yneb(kp)+rcellc(8)*zneb(kp) ++ rzz=rcellc(3)*xneb(kp)+rcellc(6)*yneb(kp)+rcellc(9)*zneb(kp) ++ rxx=rxx-nint(rxx-sxx) ++ ryy=ryy-nint(ryy-syy) ++ rzz=rzz-nint(rzz-szz) ++ uxx=-xneb(k)+ ++ x rxx*celneb(1,n+1)+ryy*celneb(4,n+1)+rzz*celneb(7,n+1) ++ uyy=-yneb(k)+ ++ x rxx*celneb(2,n+1)+ryy*celneb(5,n+1)+rzz*celneb(8,n+1) ++ uzz=-zneb(k)+ ++ x rxx*celneb(3,n+1)+ryy*celneb(6,n+1)+rzz*celneb(9,n+1) ++ ++ rp2=rp2+uxx*uxx+uyy*uyy+uzz*uzz ++ rm2=rm2+txx*txx+tyy*tyy+tzz*tzz ++ wxx=aaa*uxx+bbb*txx ++ wyy=aaa*uyy+bbb*tyy ++ wzz=aaa*uzz+bbb*tzz ++ taux(j)=wxx ++ tauy(j)=wyy ++ tauz(j)=wzz ++ tau2=tau2+wxx*wxx+wyy*wyy+wzz*wzz ++ fpar=fpar+wxx*fxneb(k)+wyy*fyneb(k)+wzz*fzneb(k) ++ kink=kink+txx*uxx+tyy*uyy+tzz*uzz ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=rp2 ++ buffer(2)=rm2 ++ buffer(3)=tau2 ++ buffer(4)=fpar ++ buffer(5)=kink ++ call gdsum(buffer(1),5,buffer(6)) ++ rp2=buffer(1) ++ rm2=buffer(2) ++ tau2=buffer(3) ++ fpar=buffer(4) ++ kink=buffer(5) ++ ++ endif ++ ++c check for kinking of NEB ++ ++ kink=cos(kink/sqrt(rp2*rm2)) ++ if(kink.lt.0.5d0)nkinks=nkinks+1 ++ ++c calculate final forces ++ ++ j=0 ++ k=n*iatm2 ++ tau2=sqrt(tau2) ++ fac=(sprneb*(sqrt(rp2)-sqrt(rm2))-fpar/tau2)/tau2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ fxneb(k)=fxneb(k)+fac*taux(j) ++ fyneb(k)=fyneb(k)+fac*tauy(j) ++ fzneb(k)=fzneb(k)+fac*tauz(j) ++ ++ enddo ++ ++ enddo ++ ++c abort if kinks detected ++ ++ if(nkinks.gt.0)then ++ ++ if(idnode.eq.0) ++ x write(nrite,'(1x,"number of kinks detected ",i6)')nkinks ++ call error(idnode,2350) ++ ++ endif ++ ++ return ++ end subroutine neb_spring_forces ++ ++ subroutine transition_properties ++ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons,kmax1, ++ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl, ++ x nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree, ++ x ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth, ++ x nturn,numbsn,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, ++ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,estar,catchrad,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for analysing the NEB path and determining ++c the destination state (if not end of chain). ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 seek ++ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,ltad,scan,same ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,pass ++ integer ntpvdw,ntshl,ntteth,nturn,i,k,n,iatm0,iatm1,iatm2 ++ integer numblock,numbsn,mdiff ++ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter ++ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp ++ real(8) virlrc,cvgerr,estar,catchrad,hyp_units ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++c analyse neb profile ++ ++ call scan_profile(nturn,estar) ++ ++c determine true new state from first maximum ++ ++ if(nturn.gt.1)then ++ ++ i=1 ++ do while(ktrn(i).ge.0) ++ i=i+1 ++ enddo ++ n=-ktrn(i) ++ ++c construct cell vectors for nth bead ++ ++ do i=1,9 ++ cell(i)=celneb(i,n) ++ enddo ++ ++c construct coordinate force arrays for nth bead ++ ++ k=n*iatm2 ++ do i=iatm0,iatm1 ++ ++ k=k+1 ++ xxx(i)=xneb(k) ++ yyy(i)=yneb(k) ++ zzz(i)=zneb(k) ++ ++ enddo ++ ++c now minimise structure - this is correct new state ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation ++ ++ numblock=nstep/nblock ++ ++ if(idnode.eq.0)then ++ ++ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++ x nstep,pass,numblock,keytol,opttol/hyp_units, ++ x cfgtmp/hyp_units,cvgerr/hyp_units ++ write(nrite,"(1x,120('-'))") ++ ++ endif ++ ++ if(ltad)then ++ ++c determine differences for new state (TAD only) ++ ++ scan=.true. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++c set difference counters and pointers ++ ++ if(numbsn.gt.mxbsn)call error(idnode,2330) ++ ++ ndiff=mdiff ++ ++ if(numbsn.gt.1)then ++ nbsa(numbsn)=nbsb(numbsn-1)+1 ++ else ++ nbsa(numbsn)=1 ++ endif ++ ++ nbsb(numbsn)=mdiff ++ ++c save minimised starting structure as basin file ++ ++ call write_reference_config ++ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,cfgtmp) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine transition_properties ++ ++ subroutine write_profile(idnode,mxnode,natms,hyp_units) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing profile file for NEB path ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2007 ++c ++c*********************************************************************** ++ ++ character*4 tail ++ integer idnode,mxnode,natms,i,j,k,n,iatm0,iatm1,iatm2 ++ real(8) hyp_units ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ iatm2=iatm1-iatm0+1 ++ ++ if(idnode.eq.0)then ++ ++c open profile data file ++ ++ if(numpro.lt.0)then ++ ++ write(tail,'(i4.4)')iabs(numpro) ++ open(npro,file='PROFILES'//'/'//'PRX'//tail//'.XY', ++ x form='formatted') ++ ++ else ++ ++ write(tail,'(i4.4)')numpro ++ open(npro,file='PROFILES'//'/'//'PRO'//tail//'.XY', ++ x form='formatted') ++ ++ endif ++ ++ endif ++ ++c calculate path ++ ++ path(0)=0.d0 ++ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(0), ++ x engneb(0)/hyp_units ++ ++ do n=1,mxneb ++ ++ path(n)=0.d0 ++ k=n*iatm2 ++ j=(n-1)*iatm2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ k=k+1 ++ path(n)=(xneb(k)-xneb(j))**2+(yneb(k)-yneb(j))**2+ ++ x (zneb(k)-zneb(j))**2+path(n) ++ ++ enddo ++ ++ if(mxnode.gt.1)call gdsum(path(n),1,buffer(1)) ++ ++ path(n)=sqrt(path(n))+path(n-1) ++ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(n), ++ x engneb(n)/hyp_units ++ ++ enddo ++ ++ numpro=numpro+1 ++ ++ if(idnode.eq.0)close(npro) ++ ++ return ++ end subroutine write_profile ++ ++ subroutine scan_profile(nturn,estar) ++ ++c********************************************************************* ++c ++c dl_poly routine for analysing neb energy profile ++c ++c copyright - daresbury laboratory ++c author - w.smith january 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer, parameter :: nscan=100 ++ ++ integer i,np,n1,n2,npnts,fail,nturn ++ real(8) di,dj,rpd,uu,vv,v0,ss,estar ++ real(8), allocatable :: aa(:),dd(:),gg(:),zz(:) ++ ++c allocate working arrays ++ ++ allocate (aa(0:mxneb),dd(0:mxneb),gg(0:mxneb),zz(0:mxneb), ++ x stat=fail) ++ ++ npnts=mxneb+1 ++ n1=npnts-1 ++ n2=npnts-2 ++ ++c calculate spline coefficients ++ ++ gg(0)=0.d0 ++ dd(0)=path(1)-path(0) ++ ++ do i=1,n1-1 ++ ++ dd(i)=path(i+1)-path(i) ++ gg(i)=2.d0*(path(i+1)-path(i-1)) ++ zz(i)=6.d0*((engneb(i+1)-engneb(i))/dd(i)- ++ x (engneb(i)-engneb(i-1))/dd(i-1)) ++ ++ enddo ++ ++ gg(n1)=0.d0 ++ dd(n1)=0.d0 ++ aa(0)=0.d0 ++ aa(1)=dd(1)/gg(1) ++ ++ do i=2,n2-1 ++ ++ gg(i)=gg(i)-dd(i-1)*aa(i-1) ++ aa(i)=dd(i)/gg(i) ++ ++ enddo ++ ++ gg(n1-1)=gg(n1-1)-dd(n2-1)*aa(n2-1) ++ gg(1)=zz(1)/gg(1) ++ ++ do i=2,n1-1 ++ gg(i)=(zz(i)-dd(i-1)*gg(i-1))/gg(i) ++ enddo ++ ++ do i=1,n2-1 ++ gg(n1-i)=gg(n1-i)-aa(n1-i)*gg(npnts-i) ++ enddo ++ ++c now scan across the profile locating maxima and minima ++ ++ np=1 ++ nturn=0 ++ ss=1.d0 ++ v0=engneb(0) ++ rpd=(path(npnts-1)-path(0))/dble(nscan) ++ ++ do i=2,nscan-1 ++ ++ uu=rpd*dble(i)+path(0) ++ ++ do while(np.lt.npnts.and.uu.gt.path(np)) ++ np=np+1 ++ enddo ++ ++ di=uu-path(np-1) ++ dj=path(np)-uu ++ vv=(di*engneb(np)+dj*engneb(np-1)-di*dj* ++ x ((dd(np-1)+dj)*gg(np-1)+(dd(np-1)+di)*gg(np))/6.d0)/dd(np-1) ++ ++ if(ss.gt.0.d0.and.vv.le.v0)then ++ ++ nturn=nturn+1 ++ xtrn(nturn)=uu ++ ytrn(nturn)=vv ++ ktrn(nturn)=np ++ ++ else if(ss.lt.0.d0.and.vv.gt.v0)then ++ ++ nturn=nturn+1 ++ xtrn(nturn)=uu ++ ytrn(nturn)=vv ++ ktrn(nturn)=-np ++ ++ endif ++ ++ ss=sign(1.d0,vv-v0) ++ v0=vv ++ ++ enddo ++ ++c estimated activation energy ++ ++ i=1 ++ do while(ktrn(i).lt.0) ++ i=i+1 ++ enddo ++ estar=ytrn(i)-engbsn(1) ++ ++c deallocate working arrays ++ ++ deallocate (aa,dd,gg,zz,stat=fail) ++ ++ return ++ end subroutine scan_profile ++ ++ subroutine transition_time ++ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3, ++ x multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntrack,ntpvdw,ntshl,ntteth, ++ x ntcons,itrk,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, ++ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, ++ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) ++ ++c********************************************************************* ++c ++c dl_poly routine for estimating the time of a transition ++c from a backlog of previous configurations ++c ++c copyright - daresbury laboratory ++c author - w.smith february 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ character*8 seek ++ logical same,minflg,lfcap,lneut,lnsq,loglnk,scan ++ logical lzeql,newlst ++ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol ++ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt ++ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond ++ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter ++ integer ntpvdw,ntshl,ntteth,ntcons,ntrack,itrk,mdiff,pass ++ integer nback,ntry,numblock ++ real(8) alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol ++ real(8) rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep ++ real(8) volm,cfgtmp,cvgerr,eng,tol,catchrad,timhop,hyp_units ++ ++c determine starting tracking file ++ ++ nback=min(numtrk,maxtrk) ++ ++c search track files for transition ++ ++ itrk=0 ++ same=.false. ++ ++ do while(.not.same.and.itrk.le.nback) ++ ++ itrk=itrk+1 ++ ntry=mod(numtrk-itrk,maxtrk) ++ ++ call read_reference_config ++ x ('CFGTRK','TRACKS',ntrk,ntry,natms,imcon,idnode,eng) ++ ++ call define_minimum_state ++ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, ++ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, ++ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, ++ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, ++ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, ++ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, ++ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, ++ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) ++ ++c write events entry for minimisation (normally deactivated) ++ ++c$$$ if(idnode.eq.0)then ++c$$$ ++c$$$ numblock=nstep/nblock ++c$$$ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') ++c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, ++c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units ++c$$$ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') ++c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, ++c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units ++c$$$ write(nrite,"(1x,120('-'))") ++c$$$ ++c$$$ endif ++ ++c check if still in base state ++ ++ scan=.false. ++ call check_for_transition ++ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, ++ x catchrad) ++ ++ enddo ++ ++ timhop=timhyp-tstep*dble(ntrack)*(dble(itrk)-0.5d0) ++ tboost=track(ntry) ++ ++ return ++ end subroutine transition_time ++ ++ subroutine scramble_velocities(idnode,natms) ++ ++c*********************************************************************** ++c ++c dlpoly hyperdynamics routine for randomising velocities after a ++c transition has occured (use with identical species only) ++c ++c copyright daresbury laboratory ++c author w.smith jan 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer idnode,natms,i,j,k,m,n ++ real(8) vvv ++ ++ do j=1,10 ++ ++ do i=1,natms ++ ++ k=int(natms*duni())+1 ++ vvv=vxx(i) ++ vxx(i)=vxx(k) ++ vxx(k)=vvv ++ m=int(natms*duni())+1 ++ vvv=vyy(i) ++ vyy(i)=vyy(m) ++ vyy(m)=vvv ++ n=int(natms*duni())+1 ++ vvv=vzz(i) ++ vzz(i)=vzz(n) ++ vzz(n)=vvv ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine scramble_velocities ++ ++ subroutine hyper_close(ltad,idnode,mxnode,natms,nsteql) ++ ++c*********************************************************************** ++c ++c dlpoly routine for saving hyperdynamics restart data ++c ++c copyright daresbury laboratory ++c author w.smith dec 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical ltad ++ integer idnode,mxnode,natms,nsteql ++ integer iatm0,iatm1,i,j,k,n,last,ierr,netdif ++ real(8) buff(2) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c total number of atomic differences ++ ++ buff(1)=dble(ndiff) ++ call gdsum(buff(1),1,buff(2)) ++ netdif=nint(buff(1)) ++ ++ if(idnode.eq.0)then ++ ++c open hyperdynamics restart file ++ ++ open(nhrs,file="HYPREV",form="unformatted") ++ ++c write control variables ++ ++ write(nhrs)ltad,dble(numbsn),dble(numtrk),dble(numpro), ++ x dble(netdif),dble(numdark),dble(nsteql),dble(numbpd), ++ x timhyp,timres,tstop,tkeres,tboost,vbase,strres,celres ++ write(nhrs)track ++ endif ++ ++ if(ltad.and.numbsn.gt.1)then ++ ++c load basin difference data ++ ++ n=0 ++ do i=1,numbsn-1 ++ ++ do j=nbsa(i),nbsb(i) ++ ++ buffer(n+1)=dble(idabsn(j)) ++ buffer(n+2)=dble(i) ++ buffer(n+3)=xdiffs(j) ++ buffer(n+4)=ydiffs(j) ++ buffer(n+5)=zdiffs(j) ++ n=n+5 ++ ++ enddo ++ ++ enddo ++ last=n ++ ++c write basin difference data ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ ++ call csend(hyper_tag+k,buff,1,k,ierr) ++ call crecv(2*hyper_tag+k,buff,1) ++ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) ++ last=nint(buff(1))+last ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buff,1) ++ buff(1)=dble(last) ++ call csend(2*hyper_tag+k,buff,1,0,ierr) ++ call csend(3*hyper_tag+k,buffer,last,0,ierr) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)write(nhrs)(buffer(i),i=1,last) ++ call gsync() ++ ++ endif ++ ++c load reference block configuration data ++ ++ j=0 ++ k=1 ++ do i=iatm0,iatm1 ++ ++ buffer(j+1)=xres(k) ++ buffer(j+2)=yres(k) ++ buffer(j+3)=zres(k) ++ j=j+3 ++ k=k+1 ++ ++ enddo ++ last=j ++ ++c write reference block configuration data ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buff,1,k,ierr) ++ call crecv(2*hyper_tag+k,buff,1) ++ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) ++ last=nint(buff(1))+last ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buff,1) ++ buff(1)=dble(last) ++ call csend(2*hyper_tag+k,buff,1,0,ierr) ++ call csend(3*hyper_tag+k,buffer,last,0,ierr) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)then ++ ++ write(nhrs)(buffer(i),i=1,last) ++ close(nhrs) ++ ++ endif ++ call gsync() ++ ++ return ++ end subroutine hyper_close ++ ++ subroutine hyper_open(ltad,idnode,mxnode,natms,nsteql) ++ ++c*********************************************************************** ++c ++c dlpoly routine for reading hyperdynamics restart data ++c ++c copyright daresbury laboratory ++c author w.smith dec 2007 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical ltad,mtad ++ integer idnode,mxnode,natms,nsteql ++ integer iatm0,iatm1,i,j,k,n,last,netdif,ierr ++ real(8) buff(1) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c restore control variables ++ ++ mtad=.true. ++ if(idnode.eq.0)then ++ ++c open hyperdynamics restart file ++ ++ open(nhrs,file="HYPOLD",form="unformatted") ++ ++ read(nhrs)mtad,(buffer(i),i=1,30) ++ read(nhrs)track ++ ++ else ++ ++ do i=1,30 ++ buffer(i)=0.d0 ++ enddo ++ track(:)=0.d0 ++ ++ endif ++ ++c check restart file is tad compatible ++ ++ call gstate(mtad) ++ if(ltad.and.(.not.mtad))call error(idnode,2341) ++ ++ call gdsum(buffer(1),31,buffer(32)) ++ ++ numbsn=nint(buffer(1)) ++ numtrk=nint(buffer(2)) ++ numpro=nint(buffer(3)) ++ netdif=nint(buffer(4)) ++ numdark=nint(buffer(5)) ++ nsteql=nint(buffer(6)) ++ numbpd=nint(buffer(7)) ++ timhyp=buffer(8) ++ timres=buffer(9) ++ tstop=buffer(10) ++ tkeres=buffer(11) ++ tboost=buffer(12) ++ vbase=buffer(13) ++ do i=1,9 ++ ++ strres(i)=buffer(i+13) ++ celres(i)=buffer(i+22) ++ ++ enddo ++ last=size(track) ++ call gdsum(track,last,buffer) ++ ++ if(ltad.and.numbsn.gt.1)then ++ ++c restore basin difference data ++ ++ last=5*netdif ++ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) ++ ++ do k=1,mxnode-1 ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buffer,last,k,ierr) ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buffer,last) ++ ++ endif ++ ++ enddo ++ ++c reject nonlocal basin difference data ++ ++ j=0 ++ do i=1,last,5 ++ ++ n=nint(buffer(i)) ++ if(n.ge.iatm0.and.n.le.iatm1)then ++ ++ buffer(j+1)=buffer(i) ++ buffer(j+2)=buffer(i+1) ++ buffer(j+3)=buffer(i+2) ++ buffer(j+4)=buffer(i+3) ++ buffer(j+5)=buffer(i+4) ++ j=j+5 ++ ++ endif ++ ++ enddo ++ last=j ++ ++c unload basin difference data ++ ++ n=0 ++ nbsa(1)=1 ++ do i=1,numbsn-1 ++ ++ if(i.gt.1)nbsa(i)=n+1 ++ ++ do j=1,last,5 ++ ++ if(nint(buffer(j+1)).eq.i)then ++ ++ n=n+1 ++ idabsn(n)=nint(buffer(j)) ++ xdiffs(n)=buffer(j+2) ++ ydiffs(n)=buffer(j+3) ++ zdiffs(n)=buffer(j+4) ++ ++ endif ++ ++ enddo ++ ++ nbsb(i)=n ++ ++ enddo ++ ndiff=n ++ call gsync() ++ ++ endif ++ ++c retrieve reference block configuration data ++ ++ last=3*natms ++ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) ++ ++ do k=1,mxnode-1 ++ ++c read reference block configuration data ++ ++ if(idnode.eq.0)then ++ ++ call csend(hyper_tag+k,buffer,last,k,ierr) ++ ++ elseif(k.eq.idnode)then ++ ++ call crecv(hyper_tag+k,buffer,last) ++ ++ endif ++ ++ enddo ++ ++c unload reference block configuration data ++ ++ n=1 ++ j=3*(iatm0-1) ++ do i=iatm0,iatm1 ++ ++ xres(n)=buffer(j+1) ++ yres(n)=buffer(j+2) ++ zres(n)=buffer(j+3) ++ j=j+3 ++ n=n+1 ++ ++ enddo ++ ++ if(idnode.eq.0)close(nhrs) ++ call gsync() ++ ++ return ++ end subroutine hyper_open ++ ++ subroutine bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scaling forces in a bias potential dynamics ++c simulation using hamelberg, mongan and mccammon factor ++c J. Chem. Phys. 120 (2004) 11919 ++c ++c copyright - daresbury laboratory ++c author - w. smith jan 2008 ++c ++c*********************************************************************** ++ ++ integer i,natms,mynode,keybpd ++ real(8) alpha,vmin,ebias,beta,temp,engcfg,eboost,hscale ++ real(8) engtmp ++ ++ boost=1.d0 ++ numbpd=numbpd+1 ++ ++c reset potential energy wrt base level ++ ++ if(keybpd.eq.1)then ++ engtmp=engcfg-vbase ++ else ++ engtmp=engcfg-engbsn(1) ++ endif ++ ++ if(ebias.gt.engtmp)then ++ ++c bias potental boost ++ ++ alpha=ebias*(ebias-vmin)/vmin ++ beta=1.d0/(boltz*temp*dble(natms)) ++ eboost=(ebias-engtmp)**2/(alpha+ebias-engtmp) ++ boost=exp(beta*eboost) ++ ++c bias potential forces scaling factor ++ ++ hscale=(alpha/(alpha+ebias-engtmp))**2 ++ ++c scale forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxx(i)*hscale ++ fyy(i)=fyy(i)*hscale ++ fzz(i)=fzz(i)*hscale ++ ++ enddo ++ ++ endif ++ ++c accumulative average of boost factor ++ ++ tboost=boost/dble(numbpd)+dble(numbpd-1)*tboost/dble(numbpd) ++ ++ return ++ end subroutine bpd_forces ++ ++ end module hyper_dynamics_module +diff -urN dl_class_1.9.orig/srcmod/integrator_module.f dl_class_1.9/srcmod/integrator_module.f +--- dl_class_1.9.orig/srcmod/integrator_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/integrator_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,624 @@ ++ module integrator_module ++ ++c*********************************************************************** ++c ++c dl_poly module for selecting verlet integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use error_module ++ use lf_motion_module ++ use lf_rotation1_module ++ use lf_rotation2_module ++ use pmf_module ++ use temp_scalers_module ++ use vv_motion_module ++ use vv_rotation1_module ++ use vv_rotation2_module ++ ++ contains ++ ++ subroutine lf_integrate ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the integration algorithm ++c to solve the the equations of motion. based on the leapfrog ++c verlet algorithm ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,safep,safeq,lcnb,lshmov,lnfic ++ integer idnode,mxnode,imcon,natms,ngrp,keyens,nscons,nofic ++ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep ++ real(8) tstep,engke,engrot,tolnce,quattol,vircon,vircom ++ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip ++ real(8) consv,conint,elrc,virlrc,virpmf ++ ++ safe=.true. ++ safeq=.true. ++ safep=.true. ++ ++ if(ngrp.eq.0) then ++ ++ if(keyens.eq.0) then ++ ++c verlet leapfrog ++ ++ call nve_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.1) then ++ ++c Evans Gaussian Temperature constraints ++ ++ call nvt_e1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.2) then ++ ++c Berendsen thermostat ++ ++ call nvt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,taut,sigma,tolnce,tstep,vircon) ++ ++ else if(keyens.eq.3) then ++ ++c Nose-Hoover thermostat ++ ++ call nvt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) ++ ++ elseif(keyens.eq.4) then ++ ++c Berendsen thermostat and isotropic barostat ++ ++ call npt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,virtot,vircon,volm) ++ ++ else if(keyens.eq.5) then ++ ++c Nose-Hoover thermostat and isotropic barostat ++ ++ call npt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) ++ ++ else if(keyens.eq.6) then ++ ++c Berendsen thermostat and barostat (cell shape varying) ++ ++ call nst_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma, ++ x tolnce,tstep,vircon,volm) ++ ++ else if(keyens.eq.7) then ++ ++c Nose-Hoover thermostat and barostat (cell shape varying) ++ ++ call nst_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) ++ ++ elseif(keyens.eq.8) then ++ ++c Potential of mean force in NVE ++ ++ call pmflf ++ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++ endif ++ ++ elseif(ngrp.gt.0) then ++ ++c apply rigid body equations of motion ++ ++ if(keyens.eq.0) then ++ ++ if(.not.lcnb) then ++ ++ call nveq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++ else ++ ++ call nveq_2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++ endif ++ ++ elseif(keyens.eq.1) then ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ elseif(keyens.eq.2) then ++ ++ if(.not.lcnb) then ++ ++ call nvtq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++ else ++ ++ call nvtq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.3) then ++ ++ if(.not.lcnb) then ++ ++ call nvtq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++ else ++ ++ call nvtq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.4) then ++ ++ if(.not.lcnb) then ++ ++ call nptq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, ++ x vircon,volm) ++ ++ else ++ ++ call nptq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, ++ x virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.5) then ++ ++ if(.not.lcnb) then ++ ++ call nptq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,virtot,vircom,vircon,volm) ++ ++ else ++ ++ call nptq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.6) then ++ ++ if(.not.lcnb) then ++ ++ call nstq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++ else ++ ++ call nstq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++ endif ++ ++ elseif(keyens.eq.7) then ++ ++ if(.not.lcnb) then ++ ++ call nstq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,volm) ++ ++ else ++ ++ call nstq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,volm) ++ ++ endif ++ ++ else ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ endif ++ ++ endif ++ ++c check on convergence of pmf-shake ++ ++ if(ntpmf.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safep) ++ if(.not.safep) call error(idnode,438) ++ ++ endif ++ ++c check on convergence of shake ++ ++ if(ntcons.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,105) ++ ++ endif ++ ++c check on convergence of quaternion algorithm ++ ++ if(ngrp.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safeq) ++ if(.not.safeq) call error(idnode,321) ++ ++ endif ++ ++c eliminate "flying ice cube" in long simulations (Berendsen) ++ ++ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then ++ ++ if(mod(nstep,nofic).eq.0)then ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lf_integrate ++ ++ subroutine vv_integrate ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint,elrc, ++ x virlrc,virpmf,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for selecting the integration algorithm ++c to solve the the equations of motion. based on the velocity ++c verlet algorithm ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,safep,lcnb,lshmov,lnfic ++ integer isw,idnode,mxnode,imcon,natms,ngrp,keyens,nscons ++ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep,nofic ++ integer ntshl,keyshl ++ real(8) tstep,engke,engrot,tolnce,vircon,vircom ++ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip ++ real(8) consv,conint,elrc,virlrc,virpmf,chit_shl,sigma_shl ++ ++ if(ngrp.eq.0) then ++ ++ if(keyens.eq.0) then ++ ++c verlet leapfrog ++ ++ call nvevv_1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,engke,tolnce,vircon) ++ ++ else if(keyens.eq.1) then ++ ++c Evans Gaussian Temperature constraints ++ ++ call nvtvv_e1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,engke,tolnce,vircon) ++ ++ else if(keyens.eq.2) then ++ ++c Berendsen thermostat ++ ++ call nvtvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,tstep,taut,sigma,engke,tolnce,vircon) ++ ++ else if(keyens.eq.3) then ++ ++c Nose-Hoover thermostat ++ ++ call nvtvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntshl,keyshl,tstep,taut,sigma,chit,consv, ++ x conint,engke,tolnce,vircon,chit_shl,sigma_shl) ++ ++ elseif(keyens.eq.4) then ++ ++c Berendsen thermostat and isotropic barostat ++ ++ call nptvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,virtot,vircon,volm) ++ ++ else if(keyens.eq.5) then ++ ++c Nose-Hoover thermostat and isotropic barostat ++ ++ call nptvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp, ++ x chip,chit,consv,conint,engke,elrc,tolnce,vircon, ++ x virtot,virlrc,volm,press,chit_shl,sigma_shl) ++ ++ else if(keyens.eq.6) then ++ ++c Berendsen thermostat and barostat (cell shape varying) ++ ++ call nstvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press, ++ x elrc,virlrc,tolnce,vircon,volm) ++ ++ else if(keyens.eq.7) then ++ ++c Nose-Hoover thermostat and barostat (cell shape varying) ++ ++ call nstvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chit,consv,conint,engke,elrc,tolnce,vircon, ++ x virlrc,volm,press,chit_shl,sigma_shl) ++ ++ elseif(keyens.eq.8) then ++ ++c Potential of mean force in NVE ++ ++ call pmfvv ++ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++ endif ++ ++ elseif(ngrp.gt.0) then ++ ++c apply rigid body equations of motion ++ ++ if(keyens.eq.0) then ++ ++ if(.not.lcnb) then ++ ++ call nveqvv_1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++ else ++ ++ call nveqvv_2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.1) then ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ elseif(keyens.eq.2) then ++ ++ if(.not.lcnb) then ++ ++ call nvtqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++ else ++ ++ call nvtqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++ endif ++ ++ elseif(keyens.eq.3) then ++ ++ if(.not.lcnb) then ++ ++ call nvtqvv_h1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, ++ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, ++ x sigma_shl) ++ ++ else ++ ++ call nvtqvv_h2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, ++ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, ++ x sigma_shl) ++ ++ endif ++ ++ elseif(keyens.eq.4) then ++ ++ if(.not.lcnb) then ++ ++ call nptqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++ else ++ ++ call nptqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++ endif ++ ++ elseif(keyens.eq.5) then ++ ++ if(.not.lcnb) then ++ ++ call nptqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virtot,virlrc,vircom,volm,press,chit_shl, ++ x sigma_shl) ++ ++ else ++ ++ call nptqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virtot,virlrc,volm,press,chit_shl, ++ x sigma_shl) ++ ++ endif ++ ++ elseif(keyens.eq.6) then ++ ++ if(.not.lcnb) then ++ ++ call nstqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, ++ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++ else ++ ++ call nstqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, ++ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++ endif ++ ++ elseif(keyens.eq.7) then ++ ++ if(.not.lcnb) then ++ ++ call nstqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++ else ++ ++ call nstqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) ++ ++ endif ++ ++ else ++ ++c invalid option ++ ++ call error(idnode,430) ++ ++ endif ++ ++ endif ++ ++c check on convergence of pmf-shake ++ ++ if(ntpmf.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safep) ++ if(.not.safep) call error(idnode,438) ++ ++ endif ++ ++c check on convergence of shake ++ ++ if(ntcons.gt.0) then ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,105) ++ ++ endif ++ ++c eliminate "flying ice cube" in long simulations (Berendsen) ++ ++ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then ++ ++ if(mod(nstep,nofic).eq.0)then ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine vv_integrate ++ ++ end module integrator_module +diff -urN dl_class_1.9.orig/srcmod/inversion_module.f dl_class_1.9/srcmod/inversion_module.f +--- dl_class_1.9.orig/srcmod/inversion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/inversion_module.f 2011-08-16 14:42:52.000000000 +0200 +@@ -0,0 +1,828 @@ ++ module inversion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining inversion potential arrays ++c copyright - daresbury laboratory ++c ++c author - w. smith sep 2003 ++c adapted - w. smith jun 2008 : solvation, free energy, excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prminv(:,:) ++ integer, allocatable :: listinv(:,:) ++ integer, allocatable :: numinv(:),keyinv(:),lstinv(:,:) ++ ++ save prminv,listinv,numinv,keyinv,lstinv ++ ++ contains ++ ++ subroutine alloc_inv_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(5) ++ ++ do i=1,5 ++ fail(i)=0 ++ enddo ++ ++ allocate (prminv(mxtinv,mxpinv),stat=fail(1)) ++ allocate (numinv(mxtmls),stat=fail(2)) ++ allocate (keyinv(mxtinv),stat=fail(3)) ++ allocate (lstinv(mxtinv,4),stat=fail(4)) ++ allocate (listinv(mxinv,5),stat=fail(5)) ++ ++ do i=1,5 ++ if(fail(i).gt.0)call error(idnode,1120) ++ enddo ++ ++ do i=1,mxtmls ++ numinv(i)=0 ++ enddo ++ ++ end subroutine alloc_inv_arrays ++ ++ subroutine define_inversions ++ x (safe,idnode,itmols,ninver,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining inversion angle potentials ++c note: includes calcite planar potential which is not strictly ++c an inversion potential and is different in implementation ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ integer idnode,itmols,ninver,nsite,ntmp,inv,inv1,i ++ integer iatm1,iatm2,iatm3,iatm4,isite1,isite2,isite3,isite4 ++ integer ia,ja,idum ++ real(8) engunit ++ ++ ntmp=intstr(record,lenrec,idum) ++ numinv(itmols)=numinv(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of inversion terms', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,/,1x,'inversion potential details:', ++ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, ++ x 'index',5x,'index',5x,'f-const',7x,'angle',/)") ++ endif ++ ++ inv1=numinv(itmols) ++ do inv=1,inv1 ++ ++c read inversion potential parameters ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ iatm1=intstr(record,lenrec,idum) ++ iatm2=intstr(record,lenrec,idum) ++ iatm3=intstr(record,lenrec,idum) ++ iatm4=intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ isite2=nsite-numsit(itmols)+iatm2 ++ isite3=nsite-numsit(itmols)+iatm3 ++ isite4=nsite-numsit(itmols)+iatm4 ++ ++ if(lfzsit(isite1)*lfzsit(isite2)* ++ x lfzsit(isite3)*lfzsit(isite4).ne.0)then ++ ++ numinv(itmols)=numinv(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ ninver=ninver+1 ++ ++ if(ninver.gt.mxtinv)call error(idnode,73) ++ ++ if(keyword(1:4).eq.'harm')then ++ keyinv(ninver)=1 ++ elseif(keyword(1:4).eq.'hcos')then ++ keyinv(ninver)=2 ++ elseif(keyword(1:4).eq.'plan')then ++ keyinv(ninver)=3 ++ elseif(keyword(1:4).eq.'calc')then ++ keyinv(ninver)=4 ++ else ++ if(idnode.eq.0)write(nrite,*)record ++ call error(idnode,449) ++ endif ++ ++ lstinv(ninver,1)=iatm1 ++ lstinv(ninver,2)=iatm2 ++ lstinv(ninver,3)=iatm3 ++ lstinv(ninver,4)=iatm4 ++ prminv(ninver,1)=dblstr(record,lenrec,idum) ++ prminv(ninver,2)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") ++ x keyword(1:4),(lstinv(ninver,ia),ia=1,4), ++ x (prminv(ninver,ja),ja=1,mxpinv) ++ ++c convert energies to internal units and angles to radians ++ ++ prminv(ninver,1)=prminv(ninver,1)*engunit ++ ++ if(keyinv(ninver).eq.2)then ++ ++ prminv(ninver,2)=cos(prminv(ninver,2)*(pi/180.d0)) ++ ++ elseif(keyinv(ninver).eq.4)then ++ ++ prminv(ninver,2)=prminv(ninver,2)*engunit ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_inversions ++ ++ subroutine invfrc ++ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntinv,enginv,virinv) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating inversion energy and force ++c terms in molecular dynamics. ++c ++c copyright - daresbury laboratory 1996 ++c author - w. smith may 1996 ++c modified - w.smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lcalcite ++ logical idrive,jdrive,kdrive,ldrive ++ integer idnode,imcon,mxnode,ntinv,fail1,fail2 ++ integer fail3,inv1,inv2,i,ii,ia,id,kk,ib,ic ++ real(8) strs(6),strs_loc(6) ++ real(8) xab,yab,zab,rab2,rrab,xac,yac,zac,rac2,rrac,xad,yad ++ real(8) zad,rad2,rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx ++ real(8) vby,vbz,rvb,wwb,ucx,ucy,ucz,ucn,vcx,vcy,vcz,rvc,wwc ++ real(8) udx,udy,udz,udn,vdx,vdy,vdz,vdn,rvd,wwd,cosb,cosc ++ real(8) cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd,rucd,rucb ++ real(8) rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc,fax,fay,faz ++ real(8) fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz,vbn,vcn,ruc,rud ++ real(8) uuu,uu2,uun,uux,uuy,uuz,enginv,virinv,omega,gamma ++ real(8) gamvir ++ ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ real(8), allocatable :: xdac(:),ydac(:),zdac(:) ++ real(8), allocatable :: xdad(:),ydad(:),zdad(:) ++ ++ data fail1,fail2,fail3/0,0,0/ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) ++ allocate (xdac(msbad),ydac(msbad),zdac(msbad),stat=fail2) ++ allocate (xdad(msbad),ydad(msbad),zdad(msbad),stat=fail3) ++ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) ++ x call error(idnode,1130) ++ ++c check size of work arrays ++ ++ if((ntinv-mxnode+1)/mxnode.gt.msbad)call error(idnode,427) ++ ++c block indices ++ ++ inv1=(idnode*ntinv)/mxnode+1 ++ inv2=((idnode+1)*ntinv)/mxnode ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ enginv=0.d0 ++ virinv=0.d0 ++ inv_fre=0.d0 ++ inv_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(4)=.true. ++ inv_sol(:)=0.d0 ++ if(lexcite)inv_exc(:)=0.d0 ++ ++ endif ++ ++c calculate bond vectors ++ ++ ii=0 ++ do i=inv1,inv2 ++ ++ ii=ii+1 ++ ++c potential energy function type ++ ++ kk=listinv(ii,1) ++ ++c indices of bonded atoms ++ ++ ia=listinv(ii,2) ++ ib=listinv(ii,3) ++ ic=listinv(ii,4) ++ id=listinv(ii,5) ++ ++c define components of bond vectors ++ ++ xdab(ii)=xxx(ib)-xxx(ia) ++ ydab(ii)=yyy(ib)-yyy(ia) ++ zdab(ii)=zzz(ib)-zzz(ia) ++ ++ if(keyinv(kk).eq.4)then ++ ++ xdac(ii)=xxx(ic)-xxx(ib) ++ ydac(ii)=yyy(ic)-yyy(ib) ++ zdac(ii)=zzz(ic)-zzz(ib) ++ ++ xdad(ii)=xxx(id)-xxx(ib) ++ ydad(ii)=yyy(id)-yyy(ib) ++ zdad(ii)=zzz(id)-zzz(ib) ++ ++ else ++ ++ xdac(ii)=xxx(ic)-xxx(ia) ++ ydac(ii)=yyy(ic)-yyy(ia) ++ zdac(ii)=zzz(ic)-zzz(ia) ++ ++ xdad(ii)=xxx(id)-xxx(ia) ++ ydad(ii)=yyy(id)-yyy(ia) ++ zdad(ii)=zzz(id)-zzz(ia) ++ ++ endif ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ call images(imcon,0,1,ii,cell,xdac,ydac,zdac) ++ call images(imcon,0,1,ii,cell,xdad,ydad,zdad) ++ ++c loop over all specified inversions ++ ++ ii=0 ++ do i=inv1,inv2 ++ ++ ii=ii+1 ++ ++c select potential energy function type ++ ++ kk=listinv(ii,1) ++ lcalcite=(keyinv(kk).eq.4) ++ ++c define components of bond vectors ++ ++ xab=xdab(ii) ++ yab=ydab(ii) ++ zab=zdab(ii) ++ rab2=xab*xab+yab*yab+zab*zab ++ rrab=1.d0/sqrt(rab2) ++ ++ xac=xdac(ii) ++ yac=ydac(ii) ++ zac=zdac(ii) ++ rac2=xac*xac+yac*yac+zac*zac ++ rrac=1.d0/sqrt(rac2) ++ ++ xad=xdad(ii) ++ yad=ydad(ii) ++ zad=zdad(ii) ++ rad2=xad*xad+yad*yad+zad*zad ++ rrad=1.d0/sqrt(rad2) ++ ++ if(lcalcite)then ++ ++c calculate vector normal to plane ++ ++ uux=yac*zad-zac*yad ++ uuy=zac*xad-xac*zad ++ uuz=xac*yad-yac*xad ++ uun=1.d0/sqrt(uux**2+uuy**2+uuz**2) ++ uux=uun*uux ++ uuy=uun*uuy ++ uuz=uun*uuz ++ uuu=xab*uux+yab*uuy+zab*uuz ++ ++ else ++ ++c scalar products of bond vectors ++ ++ rbc=xab*xac+yab*yac+zab*zac ++ rcd=xac*xad+yac*yad+zac*zad ++ rdb=xad*xab+yad*yab+zad*zab ++ ++c calculate bond-angle-plane vectors ++ ++ ubx=xac*rrac+xad*rrad ++ uby=yac*rrac+yad*rrad ++ ubz=zac*rrac+zad*rrad ++ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) ++ ubx=ubn*ubx ++ uby=ubn*uby ++ ubz=ubn*ubz ++ rub=xab*ubx+yab*uby+zab*ubz ++ ++ vbx=xac*rrac-xad*rrad ++ vby=yac*rrac-yad*rrad ++ vbz=zac*rrac-zad*rrad ++ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) ++ vbx=vbn*vbx ++ vby=vbn*vby ++ vbz=vbn*vbz ++ rvb=xab*vbx+yab*vby+zab*vbz ++ wwb=sqrt(rub**2+rvb**2) ++ ++ ucx=xad*rrad+xab*rrab ++ ucy=yad*rrad+yab*rrab ++ ucz=zad*rrad+zab*rrab ++ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) ++ ucx=ucn*ucx ++ ucy=ucn*ucy ++ ucz=ucn*ucz ++ ruc=xac*ucx+yac*ucy+zac*ucz ++ ++ vcx=xad*rrad-xab*rrab ++ vcy=yad*rrad-yab*rrab ++ vcz=zad*rrad-zab*rrab ++ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) ++ vcx=vcn*vcx ++ vcy=vcn*vcy ++ vcz=vcn*vcz ++ rvc=xac*vcx+yac*vcy+zac*vcz ++ wwc=sqrt(ruc**2+rvc**2) ++ ++ udx=xab*rrab+xac*rrac ++ udy=yab*rrab+yac*rrac ++ udz=zab*rrab+zac*rrac ++ udn=1.d0/sqrt(udx**2+udy**2+udz**2) ++ udx=udn*udx ++ udy=udn*udy ++ udz=udn*udz ++ rud=xad*udx+yad*udy+zad*udz ++ ++ vdx=xab*rrab-xac*rrac ++ vdy=yab*rrab-yac*rrac ++ vdz=zab*rrab-zac*rrac ++ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) ++ vdx=vdn*vdx ++ vdy=vdn*vdy ++ vdz=vdn*vdz ++ rvd=xad*vdx+yad*vdy+zad*vdz ++ wwd=sqrt(rud**2+rvd**2) ++ ++c calculate inversion angle cosines ++ ++ cosb=wwb*rrab ++ cosc=wwc*rrac ++ cosd=wwd*rrad ++ ++ endif ++ ++c calculate potential energy and scalar force term ++ ++ if(keyinv(kk).eq.1)then ++ ++c key=1 for harmonic inversion potential ++ ++ thb=acos(cosb) ++ thc=acos(cosc) ++ thd=acos(cosd) ++ omega=0.5d0*prminv(kk,1)*((thb-prminv(kk,2))**2+ ++ x (thc-prminv(kk,2))**2+(thd-prminv(kk,2))**2)/3.d0 ++ gamvir=0.d0 ++ ++ gamb=0.d0 ++ if(abs(thb).gt.1.d-12) ++ x gamb=prminv(kk,1)*(thb-prminv(kk,2))/(3.d0*sin(thb)) ++ gamc=0.d0 ++ if(abs(thc).gt.1.d-12) ++ x gamc=prminv(kk,1)*(thc-prminv(kk,2))/(3.d0*sin(thc)) ++ gamd=0.d0 ++ if(abs(thd).gt.1.d-12) ++ x gamd=prminv(kk,1)*(thd-prminv(kk,2))/(3.d0*sin(thd)) ++ ++ else if(keyinv(kk).eq.2)then ++ ++c key=2 for harmonic cosine inversion potential ++ ++ omega=0.5d0*prminv(kk,1)*((cosb-prminv(kk,2))**2+ ++ x (cosc-prminv(kk,2))**2+(cosb-prminv(kk,2))**2)/3.d0 ++ gamvir=0.d0 ++ ++ gamb=-prminv(kk,1)*(cosb-prminv(kk,2))/3.d0 ++ gamc=-prminv(kk,1)*(cosc-prminv(kk,2))/3.d0 ++ gamd=-prminv(kk,1)*(cosd-prminv(kk,2))/3.d0 ++ ++ else if(keyinv(kk).eq.3)then ++ ++c key=3 for planar inversion potentials ++ ++ omega=prminv(kk,1)*((1.d0-cosb)+(1.d0-cosc)+(1.d0-cosd))/3.d0 ++ gamvir=0.d0 ++ ++ gamb=prminv(kk,1)/3.d0 ++ gamc=prminv(kk,1)/3.d0 ++ gamd=prminv(kk,1)/3.d0 ++ ++ else if(keyinv(kk).eq.4)then ++ ++c key=4 for planar calcite potential ++ ++ uu2=uuu*uuu ++ omega=uu2*(prminv(kk,1)+prminv(kk,2)*uu2) ++ gamvir=uu2*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) ++ gamma=-uuu*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) ++ ++ else ++ ++c undefined potential ++ ++ safe=.false. ++ gamvir=0.d0 ++ gamb=0.d0 ++ gamc=0.d0 ++ gamd=0.d0 ++ ++ endif ++ ++c indices of bonded atoms ++ ++ ia=listinv(ii,2) ++ ib=listinv(ii,3) ++ ic=listinv(ii,4) ++ id=listinv(ii,5) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ldrive=driven(ltype(id)) ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. ++ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ ++ x atm_fre(id).eq.0) ++ ++ if(lsolva)then ++ inv_exc(atmolt(ia))=inv_exc(atmolt(ia))+omega ++ endif ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. ++ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ inv_fre=inv_fre-omega ++ omega=lambda1*omega ++ gamb=lambda1*gamb ++ gamc=lambda1*gamc ++ gamd=lambda1*gamd ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. ++ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ inv_fre=inv_fre+omega ++ omega=lambda2*omega ++ gamb=lambda2*gamb ++ gamc=lambda2*gamc ++ gamd=lambda2*gamd ++ ++ endif ++ ++ endif ++ ++c calculate bond and u,v scalar products ++ ++ if(.not.lcalcite)then ++ ++ rubc=xab*ucx+yab*ucy+zab*ucz ++ rubd=xab*udx+yab*udy+zab*udz ++ rucd=xac*udx+yac*udy+zac*udz ++ rucb=xac*ubx+yac*uby+zac*ubz ++ rudb=xad*ubx+yad*uby+zad*ubz ++ rudc=xad*ucx+yad*ucy+zad*ucz ++ ++ rvbc=xab*vcx+yab*vcy+zab*vcz ++ rvbd=xab*vdx+yab*vdy+zab*vdz ++ rvcd=xac*vdx+yac*vdy+zac*vdz ++ rvcb=xac*vbx+yac*vby+zac*vbz ++ rvdb=xad*vbx+yad*vby+zad*vbz ++ rvdc=xad*vcx+yad*vcy+zad*vcz ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ enginv=enginv+omega ++ virinv=virinv+gamvir ++ ++c calculate solvation energy ++ ++ if(lsolva)then ++ inv_sol(atmolt(ia))=inv_sol(atmolt(ia))+omega ++ endif ++ ++c calculate atomic forces ++ ++ if(lcalcite)then ++ ++ fax=-gamma*uux ++ fay=-gamma*uuy ++ faz=-gamma*uuz ++ ++ fcx=gamma*uun*((yad*zab-zad*yab)-uuu*(yad*uuz-zad*uuy)) ++ fcy=gamma*uun*((zad*xab-xad*zab)-uuu*(zad*uux-xad*uuz)) ++ fcz=gamma*uun*((xad*yab-yad*xab)-uuu*(xad*uuy-yad*uux)) ++ ++ fdx=gamma*uun*((yab*zac-zab*yac)-uuu*(zac*uuy-yac*uuz)) ++ fdy=gamma*uun*((zab*xac-xab*zac)-uuu*(xac*uuz-zac*uux)) ++ fdz=gamma*uun*((xab*yac-yab*xac)-uuu*(yac*uux-xac*uuy)) ++ ++ fbx=-(fax+fcx+fdx) ++ fby=-(fay+fcy+fdy) ++ fbz=-(faz+fcz+fdz) ++ ++c stress tensor calculation for calcite terms ++ ++ strs(1)=strs(1)+uuu*gamma*uux*uux ++ strs(2)=strs(2)+uuu*gamma*uux*uuy ++ strs(3)=strs(3)+uuu*gamma*uux*uuz ++ strs(4)=strs(4)+uuu*gamma*uuy*uuy ++ strs(5)=strs(5)+uuu*gamma*uuy*uuz ++ strs(6)=strs(6)+uuu*gamma*uuz*uuz ++ ++ else ++ ++ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) ++ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) ++ x -rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) ++ x +rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) ++ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) ++ x -rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) ++ x +rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) ++ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) ++ x -rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) ++ x *gamc*rrac/wwc ++ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) ++ x +rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) ++ x *gamd*rrad/wwd ++ ++ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) ++ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) ++ x -rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) ++ x +rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) ++ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) ++ x -rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) ++ x +rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) ++ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) ++ x -rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) ++ x *gamd*rrad/wwd ++ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) ++ x +rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) ++ x *gamb*rrab/wwb ++ ++ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) ++ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) ++ x -rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) ++ x +rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) ++ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) ++ x -rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) ++ x +rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) ++ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) ++ x -rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) ++ x *gamb*rrab/wwb ++ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) ++ x +rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) ++ x *gamc*rrac/wwc ++ ++ fax=-(fbx+fcx+fdx) ++ fay=-(fby+fcy+fdy) ++ faz=-(fbz+fcz+fdz) ++ ++c stress tensor calculation for inversion terms ++ ++ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx ++ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx ++ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx ++ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy ++ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz ++ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ fxx(ia)=fxx(ia)+fax ++ fyy(ia)=fyy(ia)+fay ++ fzz(ia)=fzz(ia)+faz ++ ++ fxx(ib)=fxx(ib)+fbx ++ fyy(ib)=fyy(ib)+fby ++ fzz(ib)=fzz(ib)+fbz ++ ++ fxx(ic)=fxx(ic)+fcx ++ fyy(ic)=fyy(ic)+fcy ++ fzz(ic)=fzz(ic)+fcz ++ ++ fxx(id)=fxx(id)+fdx ++ fyy(id)=fyy(id)+fdy ++ fzz(id)=fzz(id)+fdz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc+gamvir ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fax ++ fyy_loc(ia)=fyy_loc(ia)+fay ++ fzz_loc(ia)=fzz_loc(ia)+faz ++ ++ fxx_loc(ib)=fxx_loc(ib)+fbx ++ fyy_loc(ib)=fyy_loc(ib)+fby ++ fzz_loc(ib)=fzz_loc(ib)+fbz ++ ++ fxx_loc(ic)=fxx_loc(ic)+fcx ++ fyy_loc(ic)=fyy_loc(ic)+fcy ++ fzz_loc(ic)=fzz_loc(ic)+fcz ++ ++ fxx_loc(id)=fxx_loc(id)+fdx ++ fyy_loc(id)=fyy_loc(id)+fdy ++ fzz_loc(id)=fzz_loc(id)+fdz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx ++ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx ++ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx ++ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy ++ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz ++ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,449) ++ ++c sum contributions over all nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=enginv ++ buffer(2)=virinv ++ buffer(3)=inv_fre ++ buffer(4)=inv_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ enginv=buffer(1) ++ virinv=buffer(2) ++ inv_fre=buffer(3) ++ inv_vir=buffer(4) ++ ++ if(lsolva)then ++ ++ call gdsum(inv_sol(1),mxtmls,buffer(1)) ++ if(lexcite)call gdsum(inv_exc(1),mxtmls,buffer(1)) ++ ++ endif ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail1) ++ deallocate (xdac,ydac,zdac,stat=fail2) ++ deallocate (xdad,ydad,zdad,stat=fail3) ++ ++ return ++ end subroutine invfrc ++ ++ end module inversion_module +diff -urN dl_class_1.9.orig/srcmod/lf_motion_module.f dl_class_1.9/srcmod/lf_motion_module.f +--- dl_class_1.9.orig/srcmod/lf_motion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_motion_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,2994 @@ ++ module lf_motion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for verlet leap frog integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use property_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration. ++c Must be used in conjunction with integration algorithms ++c ++c assume bond vectors dxx,dyy,dzz are input ++c dxx =xxx(i) - xxx(j) etc ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith august 1992. ++c amended - t. forester march 1994. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k ++ real(8) tolnce,tstep,vircon,stresh,dxx,dyy,dzz,strs1,strs2 ++ real(8) strs3,strs5,strs6,strs9,tstep2,esig,esig1 ++ real(8) dis,amti,amtj,omega2,gamma,gammi,gammj,dli,dlj ++ real(8) dxt,dyt,dzt,txx,tyy,tzz,xxt,yyt,zzt ++ ++ dimension stresh(9) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ ++c test size of work arrays ++ ++ safe=.true. ++ if(mxxdf.lt.nscons)safe=.false. ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,412) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c accumulators for stress tensor ++ ++ vircon=0.d0 ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dis=prmcon(listcon(k,1)) ++ esig1=abs(dxt(k)**2+dyt(k)**2+dzt(k)**2-dis**2)/dis ++ esig=max(esig,esig1) ++ ++ enddo ++ ++ esig=esig*0.5d0 ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c bypass calculations if all tolerances satisfied ++ ++ if(.not.safe)then ++ ++c initialise increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c set constraint parameters ++ ++ dis=prmcon(listcon(k,1)) ++ omega2=dis*dis ++ amti= tstep2/weight(i) ++ amtj=-tstep2/weight(j) ++ ++ if(lstfrz(i).ne.0) amti=0.d0 ++ if(lstfrz(j).ne.0) amtj=0.d0 ++ ++c constraint force parameter ++ ++ gamma=(omega2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/ ++ x (-2.d0*(amti-amtj)* ++ x (dxx(k)*dxt(k)+dyy(k)*dyt(k)+dzz(k)*dzt(k))) ++ ++c accumulate bond virial ++ ++ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1-gamma*dxx(k)*dxx(k) ++ strs2=strs2-gamma*dxx(k)*dyy(k) ++ strs3=strs3-gamma*dxx(k)*dzz(k) ++ strs5=strs5-gamma*dyy(k)*dyy(k) ++ strs6=strs6-gamma*dyy(k)*dzz(k) ++ strs9=strs9-gamma*dzz(k)*dzz(k) ++ ++c improve approximate atomic positions ++ ++ gammi=-gamma*amti ++ xxt(i)=xxt(i)+dxx(k)*gammi ++ yyt(i)=yyt(i)+dyy(k)*gammi ++ zzt(i)=zzt(i)+dzz(k)*gammi ++ ++ gammj=-gamma*amtj ++ xxt(j)=xxt(j)+dxx(k)*gammj ++ yyt(j)=yyt(j)+dyy(k)*gammj ++ zzt(j)=zzt(j)+dzz(k)*gammj ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ xxx(i)=xxx(i)+xxt(i)*dli ++ yyy(i)=yyy(i)+yyt(i)*dli ++ zzz(i)=zzz(i)+zzt(i)*dli ++ xxx(j)=xxx(j)+xxt(j)*dlj ++ yyy(j)=yyy(j)+yyt(j)*dlj ++ zzz(j)=zzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit for non-convergence ++ ++ if(.not.safe)return ++ ++c complete stress tensor ++ ++ stresh(1)=strs1 ++ stresh(2)=strs2 ++ stresh(3)=strs3 ++ stresh(4)=strs2 ++ stresh(5)=strs5 ++ stresh(6)=strs6 ++ stresh(7)=strs3 ++ stresh(8)=strs6 ++ stresh(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdshake_1 ++ ++ subroutine nve_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE ++c ++c parallel replicated data version : block data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c amended - t.forester sept 1994 ++c amended - t.forester dec 1994 : block data ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 ++ integer iatm1,i,j,k ++ real(8) engke,tolnce,tstep,vircon,strkin,rstep ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(7) ++ ++c allocate working arrays ++ ++ do i=1,7 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) ++ do i=1,7 ++ if(fail(i).ne.0)call error(idnode,1380) ++ enddo ++ ++ safe=.false. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c move atoms by leapfrog algorithm ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++c calculate velocity correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep ++ ++ enddo ++ ++ endif ++ ++c calculate full timestep velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=0.5d0*(vxx(i)+uxx(i)) ++ vyy(i)=0.5d0*(vyy(i)+uyy(i)) ++ vzz(i)=0.5d0*(vzz(i)+uzz(i)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nve_1 ++ ++ subroutine nvt_e1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Evans ++c thermostat. ++c Comp. Phys. reports 1, 299, (1984) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond CONSTRAINTS. ++c ++c copyright - daresbury laboratory ++c author - t forester july 1993 ++c amended - w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 ++ integer iatm1,i,j,k,iter,mxiter ++ real(8) engke,tolnce,tstep,vircon,strkin ++ real(8) rstep,chit,viracc,strcon,vdotf ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),fail(7) ++ ++c allocate working arrays ++ ++ do i=1,7 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) ++ do i=1,7 ++ if(fail(i).ne.0)call error(idnode,1390) ++ enddo ++ ++ safe=.false. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial positions and velocities ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c begin temperature control iteration ++ ++ mxiter=3 ++ if(ntcons.eq.0)mxiter=2 ++ chit=0.d0 ++ ++ do iter=1,mxiter ++ ++c move atoms by leapfrog algorithm ++ ++ j=0 ++ ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxo(j)+tstep*(rmass(i)*fxx(i)-chit*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(rmass(i)*fyy(i)-chit*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(rmass(i)*fzz(i)-chit*vzz(i)) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c merge configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ chit=vdotf/engke ++ engke=0.5d0*engke ++ ++c end of thermal constraint iteration ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_e1 ++ ++ subroutine nvt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x engke,taut,sigma,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester may 1993 ++c amended : t.forester sept 1994 ++c amended : t.forester dec 1994 : block data ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail ++ integer iatm0,iatm1,i,j,k,maxit,iter ++ real(8) engke,taut,sigma,tolnce,tstep,vircon,strkin,viracc ++ real(8) rstep,rtsq,chit0,strcon ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(8),strcon(9) ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1400) ++ enddo ++ ++ safe=.false. ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate kinetic energy at full timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=3 ++ if(ntcons.eq.0) maxit=maxit-1 ++ do iter=1,maxit ++ ++c temperature scaling coefficient - taut is the decay constant ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c unconstrained new positions with thermostat ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++c store uncorrected positions ++ ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c calculate kinetic energy ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate velocity at the full step ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_b1 ++ ++ subroutine nvt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, ++ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c copyright - daresbury laboratory ++c author - t. forester may 1993 ++c amended - w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,i,j,k ++ integer iatm0,iatm1,maxit,iter ++ real(8) chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon ++ real(8) strkin,rstep,rtsq,qmass,chitp,chit0,viracc ++ real(8) chitnew,strcon ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),fail(8),strcon(9) ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1410) ++ enddo ++ ++ safe=.false. ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate velocities at full time step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy at full time step ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c propagate chit ++ ++ chitp=2.d0*(engke-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=4 ++ if(ntcons.eq.0) maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++c store uncorrected positions ++ ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1)then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chit ++ ++ chitp=2.d0*(engke-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update thermostat ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ consv=conint+0.5d0*qmass*chit0**2 ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nvt_h1 ++ ++ subroutine npt_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and isotropic pressure control ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester dec 1993 ++c amended - w.smith oct 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter ++ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep ++ real(8) virtot,vircon,volm,strkin,beta,volm0,cell0 ++ real(8) elrc0,virlrc0,rstep,rtsq,psyst,chip0,scale ++ real(8) chit0,viracc,strcon ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),cell0(9),fail(8),strcon(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1420) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume and long range corrections ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1430) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial cell vectors ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate velocity at full timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy at current timestep ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c pressure control variable - taup is pressure relaxation time ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c temperature scaling coefficient - taut is temperature relaxation time ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0)maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+scale*xxo(j) ++ yyy(i)=tstep*uyy(i)+scale*yyo(j) ++ zzz(i)=tstep*uzz(i)+scale*zzo(j) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell tensor ++ ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chip and chit ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update volume ++ ++ volm=volm*chip0 ++ ++c scale cell vectors - isotropic ++ ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for use with tethers) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=scale ++ eta(5)=scale ++ eta(9)=scale ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine npt_b1 ++ ++ subroutine npt_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat+piston. ++c ++c reference: Melchionna, Ciccotti and Holian, ++c Mol Phys 1993, 78, p533 ++c ++c parallel replicated data version ++c ++c for systems using bond constraints (using atomic pressure) ++c ++c copyright daresbury laboratory 1995 ++c author - s. melchionna april 1995 ++c and - t. forester april 1995 ++c amended - w. smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer i,j,k,iatm0,iatm1,fail,maxit,iter ++ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press ++ real(8) taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm ++ real(8) strcon,volm0,elrc0,virlrc0,rstep,rtsq,qmass ++ real(8) chipnew,chitp,chitnew,chit0,volnew,scale,viracc,vold ++ real(8) cons1,cons2,cons3,strkin,cell0 ++ real(8) pmass,totmas,chipp,chip0,com,vom ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strcon(9),fail(8),strkin(9),com(3),vom(3),cell0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1440) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1450) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate velocity at the full step ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c propagate chip ++ ++ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- ++ x chit*chip ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c propagate chit ++ ++ chitp=(2.d0*(engke-sigma)+pmass*chip**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0) maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell tensor ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c improved prediction of chip and chit ++ ++ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++ chitp=(2.d0*(engke-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=chipnew ++ eta(5)=chipnew ++ eta(9)=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ cons3=0.5d0*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c updated velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine npt_h1 ++ ++ subroutine nst_b1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, ++ x tstep,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and anisotropic pressure control ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester december 1993 ++c amended - w. smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons,mode ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter ++ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep ++ real(8) vircon,volm,beta,volm0,elrc0,virlrc0,rstep,rtsq,chit0 ++ real(8) viracc,strkin,strcon,cell0,stres0,uni ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),cell0(9),fail(8),stres0(9),uni(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data beta/7.3728d-3/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1460) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1470) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store original cell vectors and stress tensor ++ ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c current estimate of stres tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i) ++ enddo ++ ++c initial estimate of eta matrix and chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0)maxit=maxit-1 ++ ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+ ++ x eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) ++ yyy(i)=tstep*uyy(i)+ ++ x eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) ++ zzz(i)=tstep*uzz(i)+ ++ x eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell parameters ++ ++ call mat_mul(eta,cell0,cell) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c accumulate constraint virial terms ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i) ++ enddo ++ ++c improved calculation of eta matrix and chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c end of thermostat and barostat iterations ++ ++ enddo ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust cell vectors - anisotropic ++ ++ call mat_mul(eta,cell0,cell) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nst_b1 ++ ++ subroutine nst_h1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, ++ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, ++ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat+piston. ++c ++c Parrinello - Rahman type : changing cell shape. ++c ++c reference: Melchionna, Ciccotti and Holian, ++c Mol Phys 1993, 78, p533 ++c ++c parallel replicated data version ++c ++c for systems using bond constraints (using atomic pressure) ++c ++c copyright daresbury laboratory 1995 ++c author - t. forester june 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons ++ integer fail,i,j,k,iatm0,iatm1,maxit,iter,mode ++ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press ++ real(8) taup,taut,sigma,temp,tolnce,tstep,vircon,volm ++ real(8) strcon,strkin,etanew,eta0,cell0,volm0,elrc0,virlrc0 ++ real(8) rstep,rtsq,pmass,qmass,totmas,com,vom,uni,fac ++ real(8) chitp,chitnew,chit0,xxa,yya,zza,etadot ++ real(8) viracc,cons1,cons2,cons3,vold,stres0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ dimension strkin(9),strcon(9),fail(8),com(3),vom(3) ++ dimension etanew(9),eta0(9),cell0(9),stres0(9),uni(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ ++ data newjob/.true./,uni/1.d0,3*0.d0,1.d0,3*0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,8 ++ fail(i)=0 ++ enddo ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) ++ do i=1,8 ++ if(fail(i).ne.0)call error(idnode,1480) ++ enddo ++ ++ safe=.false. ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob)then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1490) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ newjob=.false. ++ ++ endif ++ ++c set up block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c initialise constraint virial accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store original cell vectors and stress tensor ++ ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate kinetic energy at current timestep ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c estimate position at current time step ++ ++ xxx(i)=xxo(j)+tstep*(vxo(j)+tstep*rmass(i)*fxx(i)) ++ yyy(i)=yyo(j)+tstep*(vyo(j)+tstep*rmass(i)*fyy(i)) ++ zzz(i)=zzo(j)+tstep*(vzo(j)+tstep*rmass(i)*fzz(i)) ++ ++c estimate velocity at the full step ++ ++ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c initial estimate of stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i) ++ enddo ++ ++c propagation of eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ maxit=5 ++ if(ntcons.eq.0) maxit=maxit-1 ++ do iter=1,maxit ++ ++c unconstrained new positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(eta0(1)+chit0)*vxx(i)- ++ x eta0(4)*vyy(i)-eta0(7)*vzz(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(eta0(5)+chit0)*vyy(i)- ++ x eta0(2)*vxx(i)-eta0(8)*vzz(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(eta0(9)+chit0)*vzz(i)- ++ x eta0(3)*vxx(i)-eta0(6)*vyy(i)) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) ++ yya=(yyy(i)+yyo(j))*0.5d0-com(2) ++ zza=(zzz(i)+zzo(j))*0.5d0-com(3) ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x etanew(1)*xxa+etanew(4)*yya+etanew(7)*zza) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x etanew(2)*xxa+etanew(5)*yya+etanew(8)*zza) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x etanew(3)*xxa+etanew(6)*yya+etanew(9)*zza) ++ ++ enddo ++ ++c start of bond constraint procedures ++ ++ if(ntcons.eq.0)safe=.true. ++ if(ntcons.gt.0)then ++ ++c store integrated positions ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c estimate new cell parameters ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,etanew) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i) ++ enddo ++ ++c improved prediction of eta ++ ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c improved prediction of chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust cell vectors - anisotropic ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,eta) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=0.5d0*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) ++ ++ return ++ end subroutine nst_h1 ++ ++ end module lf_motion_module +diff -urN dl_class_1.9.orig/srcmod/lf_rotation1_module.f dl_class_1.9/srcmod/lf_rotation1_module.f +--- dl_class_1.9.orig/srcmod/lf_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_rotation1_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,5315 @@ ++ module lf_rotation1_module ++ ++c*********************************************************************** ++c ++c dl_poly module 1 for verlet leap frog rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use lf_motion_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to update the quaternion arrays as part of ++c the leapfrog algorithm ++c ++c copyright daresbury laboratory ++c author - w.smith october 2005 ++c based on - t.forester oct. 1993 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safeq ++ integer igrp1,igrp2,jg,itq,ig ++ real(8) qn0,qn1,qn2,qn3,qn0a,qn1a,qn2a,qn3a,qn0b,qn1b,qn2b,qn3b ++ real(8) rnorm,tstep,quattol,eps ++ real(8) opx(msgrp),opy(msgrp),opz(msgrp) ++ real(8) oqx(msgrp),oqy(msgrp),oqz(msgrp) ++ ++ jg=0 ++ safeq=.true. ++ ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c first iteration of new quaternions (lab fixed) ++ ++ qn0=q0(ig)+(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn1=q1(ig)+( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn2=q2(ig)+( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) ++ x *tstep*pt5 ++ qn3=q3(ig)+(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) ++ x *tstep*pt5 ++ ++ qn0b=0.d0 ++ qn1b=0.d0 ++ qn2b=0.d0 ++ qn3b=0.d0 ++ ++ itq=0 ++ eps=1.0d9 ++ do while((itq.lt.mxquat).and.(eps.gt.quattol)) ++ ++ itq=itq+1 ++ ++ qn0a=pt5*(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) ++ x +pt5*(-qn1*oqx(jg)-qn2*oqy(jg)-qn3*oqz(jg)) ++ qn1a=pt5*( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) ++ x + pt5*( qn0*oqx(jg)-qn3*oqy(jg)+qn2*oqz(jg)) ++ qn2a=pt5*( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) ++ x + pt5*( qn3*oqx(jg)+qn0*oqy(jg)-qn1*oqz(jg)) ++ qn3a=pt5*(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) ++ x + pt5*(-qn2*oqx(jg)+qn1*oqy(jg)+qn0*oqz(jg)) ++ ++ qn0=q0(ig)+pt5*qn0a*tstep ++ qn1=q1(ig)+pt5*qn1a*tstep ++ qn2=q2(ig)+pt5*qn2a*tstep ++ qn3=q3(ig)+pt5*qn3a*tstep ++ ++ rnorm=1.d0/sqrt(qn0**2+qn1**2+qn2**2+qn3**2) ++ qn0=qn0*rnorm ++ qn1=qn1*rnorm ++ qn2=qn2*rnorm ++ qn3=qn3*rnorm ++ ++c convergence test ++ ++ eps=sqrt(((qn0a-qn0b)**2+(qn1a-qn1b)**2+(qn2a-qn2b)**2 ++ x +(qn3a-qn3b)**2)*tstep**2) ++ ++ qn0b=qn0a ++ qn1b=qn1a ++ qn2b=qn2a ++ qn3b=qn3a ++ ++ enddo ++ ++ if(itq.ge.mxquat) safeq=.false. ++ ++c store new quaternions ++ ++ q0(ig)=qn0 ++ q1(ig)=qn1 ++ q2(ig)=qn2 ++ q3(ig)=qn3 ++ ++ enddo ++ ++ return ++ end subroutine update_quaternions ++ ++ subroutine nveq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre ++ integer jg,ig,k,id,jr ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc ++ real(8) trx,try,trz,delx,dely,delz,engfke ++ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strgrp(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1500) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational rigid body motion ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) ++ ++c estimate velocity at full time step ++ ++ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c calculate rigid body kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore rigid body half timestep velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c store current angular velocity ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+delx*pt5 ++ opy(jg)=omy(ig)+dely*pt5 ++ opz(jg)=omz(ig)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omx(ig)+delx ++ uyy(ig)=omy(ig)+dely ++ uzz(ig)=omz(ig)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omx(ig)+delx*1.5d0 ++ oqy(jg)=omy(ig)+dely*1.5d0 ++ oqz(jg)=omz(ig)+delz*1.5d0 ++ ++c angular velocity at timestep n ++ ++ omx(ig)=omx(ig)+pt5*delx ++ omy(ig)=omy(ig)+pt5*dely ++ omz(ig)=omz(ig)+pt5*delz ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies - relative to c.o.m ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) ++ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) ++ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) ++ ++ return ++ end subroutine nveq_1 ++ ++ subroutine nvtq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat. ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,safeq,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer i,fail,igrp,igrp1,igrp2,ifre,ifre1,ifre2,jg,ig ++ integer j,k,jr,id,mxiter,iter,idum ++ real(8) engke,engrot,quattol,sigma,taut,tolnce,tstep,vircom ++ real(8) vircon,strkin,strgrp,rot,rstep,rtsq ++ real(8) engtrn,trx,try,trz,chit0,rgmas,engfke ++ real(8) vaa,vbb,vcc,engtot,viracc,strcon ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2,newjob ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1510) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engtot=engfke+engrot+engtrn ++ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=2 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+xxo(j) ++ yyy(i)=tstep*vyy(i)+yyo(j) ++ zzz(i)=tstep*uzz(i)+zzo(j) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c total kinetic energy ++ ++ engtot=engke+engrot ++ ++c improved prediction of chit ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_b1 ++ ++ subroutine nvtq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat. ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,safeq,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter ++ real(8) chit,consv,conint,engke,engrot,quattol,sigma,taut ++ real(8) tolnce,tstep,vircom,vircon,strkin,strgrp,strcon,rot ++ real(8) rstep,rtsq,qmass,engtrn,cons1,engtot,vaa,vbb,vcc ++ real(8) chit0,chitnew,chitp,viracc,rgmas,trx,try,trz,delx ++ real(8) dely,delz,engfke ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) ++ ++ save igrp1,igrp2,ifre1,ifre2,qmass,newjob ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1520) ++ enddo ++ ++ if(newjob)then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise constraint virial terms ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c propagate chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=4 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0.and.iter.eq.1) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++ if(iter.eq.mxiter)then ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-chit0*gvxx(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-chit0*gvyy(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-chit0*gvzz(ig)) ++ ++c update positions ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)then ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++ endif ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ safeq=.true. ++ engrot=0.d0 ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c improved prediction of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update thermostat variable ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ cons1=0.5d0*qmass*chit0**2 ++ consv=conint+cons1 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_h1 ++ ++ subroutine nptq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, ++ x vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and barostat. ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,i,fail,igrp,igrp1,igrp2,idum,ifre,ifre1 ++ integer ifre2,j,jg,ig,jr,k,id,iter,mxiter ++ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut ++ real(8) tolnce,tstep,virtot,vircom,vircon,volm,rot,engfke,uni ++ real(8) cell0,beta,volm0,elrc0,virlrc0,rstep,rtsq ++ real(8) engtrn,trx,try,trz,chip0,scale,engtot,chit0,viracc,czero ++ real(8) rgmas,vaa,vbb,vcc,strkin,strcon,strgrp,psyst ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension fail(nnn),rot(9),cell0(9),czero(9),uni(9) ++ dimension strcon(9),strgrp(9),strkin(9) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0,igrp1,igrp2 ++ save ifre1,ifre2 ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1530) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1540) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c constraint stress tensor accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c current cell vectors ++ ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity and temperature at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c pressure control variable - taup is the relaxation time ++ ++ engke=engfke+engtrn ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engtot=engke+engrot ++ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+scale*xxo(j) ++ yyy(i)=tstep*uyy(i)+scale*yyo(j) ++ zzz(i)=tstep*uzz(i)+scale*zzo(j) ++ ++ enddo ++ ++c estimate new cell tensor ++ ++ do i=1,9 ++ cell(i)=scale*czero(i) ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions : ++ ++ gcmx(ig)=scale*gcxo(jg)+tstep*uxx(ig) ++ gcmy(ig)=scale*gcyo(jg)+tstep*uyy(ig) ++ gcmz(ig)=scale*gczo(jg)+tstep*uzz(ig) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c total kinetic energy ++ ++ engtot=engke+engrot ++ ++c improved pressure control variable ++ ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c improved temperature scaling coefficient ++ ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c scale cell vectors ++ ++ scale=((chip0*volm)/volm0)**(1.d0/3.d0) ++ ++ do i=1,9 ++ cell(i)=scale*cell0(i) ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nptq_b1 ++ ++ subroutine nptq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,virtot,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover ++c thermostat and barostat (Melchionna et al variant) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter,idum ++ real(8) chip,chit,consv,conint,elrc,engke,engrot,virlrc,press ++ real(8) quattol,sigma,taup,taut,temp,tolnce,tstep,virtot,vircom ++ real(8) vircon,volm,cell0,rot,volm0,elrc0,rtsq,uni ++ real(8) virlrc0,strkin,rstep,qmass,pmass,strgrp,strcon ++ real(8) trx,try,trz,chipp,chipnew,chip0,engtot,chitp ++ real(8) chitnew,chit0,volnew,scale,viracc,rgmas ++ real(8) vaa,vbb,vcc,vold,cons1,cons2,cons3,delx,dely,delz ++ real(8) engtrn,totmas,com,vom,engfke ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension fail(nnn),rot(9),cell0(9),uni(9) ++ dimension strkin(9),strcon(9),strgrp(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,cell0,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1550) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1560) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c temporary stress tensor accumulators ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacements ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate velocity at full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate kinetic energy of rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translation kinetic energy of rigid bodies ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rigid body rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c propagate chip ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircon-vircom-3.d0*press*volm)/pmass- ++ x chit*chip ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c propagate chit ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) ++ ++ enddo ++ ++c estimate new cell parameters ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate force correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ if(iter.eq.mxiter)then ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-(chit0+chip0)* ++ x gvxx(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-(chit0+chip0)* ++ x gvyy(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-(chit0+chip0)* ++ x gvzz(ig)) ++ ++c advance positions using leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ ++ x chipnew*((gcmx(ig)+gcxo(jg))*0.5d0-com(1))) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ ++ x chipnew*((gcmy(ig)+gcyo(jg))*0.5d0-com(2))) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ ++ x chipnew*((gcmz(ig)+gczo(jg))*0.5d0-com(3))) ++ ++c calculate full step velocities ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c calculate rigid body rotational energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c improved prediction of chip ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=0.5d0*(chip+chipnew) ++ ++c improved prediction of chit ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=1,9 ++ eta(i)=chipnew*uni(i) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ cons3=0.5d0*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nptq_h1 ++ ++ subroutine nstq_b1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Berendsen ++c thermostat and barostat. (cell may change shape). ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principl axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,mode ++ integer ifre2,j,k,ig,jg,jr,id,iter,mxiter ++ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut ++ real(8) tolnce,tstep,vircom,vircon,volm,beta,uni,cell0 ++ real(8) volm0,elrc0,virlrc0,rot,rstep,rtsq,engfke ++ real(8) engtrn,trx,try,trz,engtot,chit0,rgmas ++ real(8) vaa,vbb,vcc,viracc,strkin,strcon,strgrp,stres0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension strkin(9),strcon(9),strgrp(9),stres0(9),rot(9) ++ dimension fail(nnn),uni(9),cell0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./, beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxxdf),yyo(mxxdf),zzo(mxxdf),stat=fail(9)) ++ allocate (xx1(mxxdf),yy1(mxxdf),zz1(mxxdf),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1570) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1580) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe= (igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c temporary stress tensor accumulators and new cell ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++c construct current bond vectors - required by shake ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from coms ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c estimate velocity at half-time step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c estimate kinetic energy of free atoms ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c stress tensor of free atoms ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c estimate translational kinetic energy of rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c forces on centre of mass ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) ++ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) ++ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) ++ ++ enddo ++ ++c translational kinetic energy of rigid body ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c stress tensor of rigid body ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velocity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c calculate rotational kinetic energy of rigid bodies ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c find eta - taup is the relaxation time ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c temperature scaling coefficient - taut is the relaxation time ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(i)+eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) ++ yyy(i)=tstep*uyy(i)+eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) ++ zzz(i)=tstep*uzz(i)+eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) ++ ++ enddo ++ ++c estimate new cell tensor ++ ++ call mat_mul(eta,cell0,cell) ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate current stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 ++ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 ++ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 ++ ++c update positions : ++ ++ gcmx(ig)=tstep*uxx(ig)+eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+ ++ x eta(7)*gczo(jg) ++ gcmy(ig)=tstep*uyy(ig)+eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+ ++ x eta(8)*gczo(jg) ++ gcmz(ig)=tstep*uzz(ig)+eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+ ++ x eta(9)*gczo(jg) ++ ++c full step com velocity ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 ++ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 ++ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 ++ uyy(ig)=(omyo(jg)+tstep*try)*chit0 ++ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 ++ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 ++ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c complete stress tensor - add all contributions ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++c improved prediction of eta and chit ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c update cell vectors ++ ++ call mat_mul(eta,cell0,cell) ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nstq_b1 ++ ++ subroutine nstq_h1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, ++ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, ++ x vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - verlet leapfrog with Hoover like ++c thermostat and barostat. (cell may change shape). ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principle axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 ++ integer j,k,ig,jg,jr,id,iter,mxiter,idum,mode ++ real(8) chit,conint,consv,elrc,engke,engrot,virlrc,press,quattol ++ real(8) sigma,taup,taut,temp,tolnce,tstep,vircom,vircon,volm ++ real(8) strkin,strcon,strgrp,eta0,etanew,rot,cell0,volm0,stres0 ++ real(8) elrc0,virlrc0,rstep,rtsq,qmass,pmass,totmas ++ real(8) engtrn,trx,try,trz,engtot,engfke,fac,etadot ++ real(8) chitp,chitnew,chit0,xxa,yya,zza,viracc,rgmas,uni ++ real(8) delx,dely,delz,vold,cons1,cons2,cons3 ++ real(8) vaa,vbb,vcc,chip,com,vom ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ dimension eta0(9),etanew(9),rot(9),cell0(9),fail(nnn),uni(9) ++ dimension strkin(9),strcon(9),strgrp(9),stres0(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass,totmas ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1590) ++ enddo ++ ++ if(newjob) then ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1600) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c calculate total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c initialise stress tensor accumulators ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c estimate velocity at full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c estimate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c estimate stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c estimate rigid body translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=gvxo(jg)+pt5*tstep/gmass(id)*fmx(jg) ++ gvyy(ig)=gvyo(jg)+pt5*tstep/gmass(id)*fmy(jg) ++ gvzz(ig)=gvzo(jg)+pt5*tstep/gmass(id)*fmz(jg) ++ ++ enddo ++ ++c rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c rigid body stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rgid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+pt5*tstep*trx ++ opy(jg)=omy(ig)+pt5*tstep*try ++ opz(jg)=omz(ig)+pt5*tstep*trz ++ ++ enddo ++ ++c store angular velcoity at timestep n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c calculate rotational kinetic energy of rigid bodies ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c propagate eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit*eta(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c begin iterations !!----------------------------------------------- ++ ++ mxiter=5 ++ if(ntcons.eq.0) mxiter=mxiter-1 ++ ++ do iter=1,mxiter ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)- ++ x (chit0+eta0(1))*vxx(i)-eta0(4)*vyy(i)-eta0(7)*vzz(i)) ++ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)- ++ x eta0(2)*vxx(i)-(eta0(5)+chit0)*vyy(i)-eta0(8)*vzz(i)) ++ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)- ++ x eta0(3)*vxx(i)-eta0(6)*vyy(i)-(eta0(9)+chit0)*vzz(i)) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) ++ yya=(yyy(i)+yyo(j))*0.5d0-com(2) ++ zza=(zzz(i)+zzo(j))*0.5d0-com(3) ++ ++ xxx(i)=xxo(j)+tstep*(uxx(i)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ yyy(i)=yyo(j)+tstep*(uyy(i)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ zzz(i)=zzo(j)+tstep*(uzz(i)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++ enddo ++ ++c estimate new cell parameters ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ call cell_propagate(tstep,cell,etanew) ++ ++ if(ntcons.eq.0) safe=.true. ++ if(ntcons.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint correction ++ ++ call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++c contribution to constraint virial ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c calculate other constraint corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate corrected velocity ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate velocity at the full step ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++ endif ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c ***** step 1 : integrate centre of mass motion ********* ++ ++ jg =0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate thermostated velocities ++ ++ rgmas=1.d0/gmass(id) ++ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas- ++ x (chit0+eta0(1))*gvxx(ig)-eta0(4)*gvyy(ig)-eta0(7)*gvzz(ig)) ++ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas- ++ x eta0(2)*gvxx(ig)-(eta0(5)+chit0)*gvyy(ig)-eta0(8)*gvzz(ig)) ++ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas- ++ x eta0(3)*gvxx(ig)-eta0(6)*gvyy(ig)-(eta0(9)+chit0)*gvzz(ig)) ++ ++c advance positions using leapfrog ++ ++ xxa=(gcmx(ig)+gcxo(jg))*0.5d0-com(1) ++ yya=(gcmy(ig)+gcyo(jg))*0.5d0-com(2) ++ zza=(gcmz(ig)+gczo(jg))*0.5d0-com(3) ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c full step com velocity ++ ++ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body kinetic energy and stress tensor ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ if(iter.eq.mxiter)then ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++ endif ++ ++c ****** step 2 : integrate rotational motion ********** ++ ++ jg=0 ++ safeq=.true. ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omxo(jg)+delx ++ uyy(ig)=omyo(jg)+dely ++ uzz(ig)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c complete stress tensor - add all contributions ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++c improved prediction of eta and chit ++ ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=0.5d0*(etanew(i)+eta(i)) ++ enddo ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=0.5d0*(chit+chitnew) ++ ++c end of thermostat/barostat iterations ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=0.5d0*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=0.5d0*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0) ++ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) ++ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) ++ ++ return ++ end subroutine nstq_h1 ++ ++ end module lf_rotation1_module +diff -urN dl_class_1.9.orig/srcmod/lf_rotation2_module.f dl_class_1.9/srcmod/lf_rotation2_module.f +--- dl_class_1.9.orig/srcmod/lf_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/lf_rotation2_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,5007 @@ ++ module lf_rotation2_module ++ ++c*********************************************************************** ++c ++c dl_poly module 2 for verlet leap frog rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use lf_rotation1_module ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine nveq_2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engfke,engtrn ++ real(8) delx,dely,delz,trx,try,trz,vaa,vbb,vcc,viracc ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save newjob,igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1620) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c accumulators for constraint and virial stress tensor ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c start of shake cycle ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=1 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(j)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(j)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep/gmass(id)*fmx(jg) ++ uyy(jg)=gvyo(jg)+tstep/gmass(id)*fmy(jg) ++ uzz(jg)=gvzo(jg)+tstep/gmass(id)*fmz(jg) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)+tstep*uzz(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(uxx(jg)+gvxo(jg)) ++ gvyy(ig)=pt5*(uyy(jg)+gvyo(jg)) ++ gvzz(ig)=pt5*(uzz(jg)+gvzo(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++ opx(jg)=omxo(jg)+delx*pt5 ++ opy(jg)=omyo(jg)+dely*pt5 ++ opz(jg)=omzo(jg)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++c angular velocity at time step n ++ ++ omx(ig)=opx(jg) ++ omy(ig)=opy(jg) ++ omz(ig)=opz(jg) ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c total kinetic energy ++ ++ engke=engfke+engtrn ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,fmx,fmy,fmz,stat=fail(5)) ++ deallocate (tqx,tqy,tqz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nveq_2 ++ ++ subroutine nvtq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, ++ x tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Berendsen thermostat. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engfke ++ real(8) rot,strkin,strgrp,strcon,engtrn,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,engtot,chit0 ++ real(8) sigma,taut ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save chit0,igrp1,igrp2,ifre1,ifre2,newjob ++ ++ data chit0/1.d0/,newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1630) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c accumulators for constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c shake and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=2 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c calculate full time velocity ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c update centre of mass velocities ++ ++ gvxx(ig)=gvxo(jg)+tstep/gmass(id)*fmx(jg) ++ gvyy(ig)=gvyo(jg)+tstep/gmass(id)*fmy(jg) ++ gvzz(ig)=gvzo(jg)+tstep/gmass(id)*fmz(jg) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c advance velocity by leapfrog ++ ++ gvxx(ig)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ gvyy(ig)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ gvzz(ig)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gcyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gczo(jg)+tstep*gvzz(ig) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++ opx(jg)=(omxo(jg)+delx*pt5) ++ opy(jg)=(omyo(jg)+dely*pt5) ++ opz(jg)=(omzo(jg)+delz*pt5) ++ ++ enddo ++ ++c scaled angular velocity at timestep n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at full time step ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_b2 ++ ++ subroutine nvtq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, ++ x sigma,taut,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover thermostat. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame (input) ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engtot ++ real(8) rot,strkin,strcon,strgrp,engtrn,engfke,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,sigma,taut,chit0 ++ real(8) chitnew,chitp,conint,consv,chit,qmass ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ ++ save newjob,igrp1,igrp2,ifre1,ifre2,qmass ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1640) ++ enddo ++ ++ if(newjob)then ++ ++c mass parameters for thermostat ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atoms displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat variable ++ ++ chit0=chit ++ ++c accumulators for constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=3 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0)* ++ x pt5*(vxx(i)+vxo(j))) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0)* ++ x pt5*(vyy(i)+vyo(j))) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0)* ++ x pt5*(vzz(i)+vzo(j))) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)+tstep*uxx(j) ++ yyy(i)=yyo(i)+tstep*uyy(j) ++ zzz(i)=zzo(i)+tstep*uzz(j) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(vxo(j)+uxx(j)) ++ vyy(i)=pt5*(vyo(j)+uyy(j)) ++ vzz(i)=pt5*(vzo(j)+uzz(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-chit0* ++ x pt5*(gvxx(ig)+gvxo(jg))) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-chit0* ++ x pt5*(gvyy(ig)+gvyo(jg))) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-chit0* ++ x pt5*(gvzz(ig)+gvzo(jg))) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)+tstep*uzz(jg) ++ ++c centre of mass velocities at half-step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=2.d0*(engtot-sigma)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10.and.icyc.gt.3)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c update thermostat variable ++ ++ chit=chitnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*qmass/taut**2 ++ consv=conint+pt5*qmass*chit0**2 ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nvtq_h2 ++ ++ subroutine nptq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, ++ x virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Berendsen thermostat and barostat. ++c (cell may change volume) ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strgrp,strcon,engtrn,engfke,trx,try,trz ++ real(8) delx,dely,delz,czero ++ real(8) vaa,vbb,vcc,viracc,beta,elrc,virlrc,press,engtot ++ real(8) sigma,taup,taut,virtot,volm,cell0,elrc0,virlrc0 ++ real(8) chit0,volm0,chip0,psyst,scale ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension cell0(9),czero(9) ++ ++ save newjob,volm0,elrc0,virlrc0,czero,chit0,chip0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1670) ++ enddo ++ ++c store initial values of volume and long range corrections ++ ++ if(newjob) then ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1660) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ newjob=.false. ++ ++ chit0=1.d0 ++ chip0=1.d0 ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c set constraint stress and virial and inital cell vectors ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c length scaling parameter ++ ++ scale=chip0**(1.d0/3.d0) ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=3 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(i)*scale+tstep*uxx(j) ++ yyy(i)=yyo(i)*scale+tstep*uyy(j) ++ zzz(i)=zzo(i)*scale+tstep*uzz(j) ++ ++c estimate full step velocity ++ ++ vxx(i)=pt5*(vxo(j)+uxx(j)) ++ vyy(i)=pt5*(vyo(j)+uyy(j)) ++ vzz(i)=pt5*(vzo(j)+uzz(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)*scale+tstep*uxx(jg) ++ gcmy(ig)=gcyo(jg)*scale+tstep*uyy(jg) ++ gcmz(ig)=gczo(jg)*scale+tstep*uzz(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=(omxo(jg)+pt5*delx) ++ opy(jg)=(omyo(jg)+pt5*dely) ++ opz(jg)=(omzo(jg)+pt5*delz) ++ ++ enddo ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c pressure control variable ++ ++ engke=engfke+engtrn ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ chip0=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip0**(1.d0/3.d0) ++ ++c new estimate of chit ++ ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++c new cell parameters ++ ++ do i=1,9 ++ cell(i)=scale*cell0(i) ++ enddo ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c scale cell vectors ++ ++ scale=((chip0*volm)/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=scale*czero(i) ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=scale ++ eta(5)=scale ++ eta(9)=scale ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nptq_b2 ++ ++ subroutine nptq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, ++ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, ++ x tstep,vircom,vircon,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover thermostat and barostat. ++c (cell may change volume) ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,com ++ real(8) rot,strkin,strcon,strgrp,vom,engtrn,trx,try,trz ++ real(8) delx,dely,delz,engfke ++ real(8) vaa,vbb,vcc,viracc,pmass,qmass,totmas,czero ++ real(8) chip,chit,consv,conint,elrc,virlrc,press,sigma,taup,taut ++ real(8) temp,virtot,cell0,volm0,elrc0,virlrc0 ++ real(8) chit0,chip0,chipnew,chipp,engtot,chitnew,chitp,volnew ++ real(8) scale,volm,vold,cons1,cons2,cons3 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension czero(9),cell0(9),com(3),vom(3) ++ ++ save newjob,volm0,elrc0,virlrc0,czero,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1670) ++ enddo ++ ++ if(newjob) then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1680) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ do i=1,9 ++ czero(i)=cell(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++c calculate system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat and barostat variables ++ ++ chit0=chit ++ chip0=chip ++ chipnew=chip ++ ++c initialise constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vxx(i)+vxo(j))) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vyy(i)+vyo(j))) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)* ++ x pt5*(vzz(i)+vzo(j))) ++ ++c advance position using leapfrog ++ ++ xxx(i)=xxo(i)+tstep*(uxx(j)+ ++ x chipnew*((xxx(i)+xxo(i))*pt5-com(1))) ++ yyy(i)=yyo(i)+tstep*(uyy(j)+ ++ x chipnew*((yyy(i)+yyo(i))*pt5-com(2))) ++ zzz(i)=zzo(i)+tstep*(uzz(j)+ ++ x chipnew*((zzz(i)+zzo(i))*pt5-com(3))) ++ ++c estimate full step velocity ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c calculate kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvxx(ig)+gvxo(jg))) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvyy(ig)+gvyo(jg))) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-(chit0+chip0)* ++ x pt5*(gvzz(ig)+gvzo(jg))) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ ++ x chipnew*((gcxo(jg)+gcmx(ig))*pt5-com(1))) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ ++ x chipnew*((gcyo(jg)+gcmy(ig))*pt5-com(2))) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ ++ x chipnew*((gczo(jg)+gcmz(ig))*pt5-com(3))) ++ ++c estimate full step velocities ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c new estimate of chip and chit ++ ++ engke=engfke+engtrn ++ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- ++ x chit0*chip0 ++ chipnew=chip+tstep*chipp ++ chip0=pt5*(chip+chipnew) ++ ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++c estimate new cell tensor ++ ++ volnew=volm*exp(3.d0*tstep*chipnew) ++ scale=(volnew/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=czero(i)*scale ++ enddo ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update volume ++ ++ vold=volm ++ volm=volm*exp(3.d0*tstep*chipnew) ++ ++c scale cell vectors-isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=czero(i)*scale ++ enddo ++ ++c construct scaling tensor (for later!) ++ ++ do i=2,8 ++ eta(i)=0.d0 ++ enddo ++ eta(1)=chipnew ++ eta(5)=chipnew ++ eta(9)=chipnew ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ chip=chipnew ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) ++ cons1=pt5*qmass*chit0**2 ++ cons2=press*vold ++ cons3=pt5*pmass*chip0**2 ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nptq_h2 ++ ++ subroutine nstq_b2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, ++ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints. Rigid body sites and constraint sites may ++c coincide. ++c ++c verlet leapfrog with Berendsen thermostat and barostat. ++c (cell may change shape) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith nov 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob,safeq,newstep,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons,mode ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engtrn,trx,try,trz ++ real(8) delx,dely,delz,engfke ++ real(8) vaa,vbb,vcc,viracc,elrc,virlrc,press,sigma ++ real(8) taup,taut,volm,cell0,volm0,elrc0,chit0,uni ++ real(8) beta,stres0,engtot,virlrc0 ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) ++ dimension cell0(9),uni(9),stres0(9) ++ ++ save newjob,volm0,elrc0,virlrc0,chit0,dens0 ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ data beta/7.3728d-3/ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1690) ++ enddo ++ ++c store initial values of volume, long range corrections etc ++ ++ if(newjob) then ++ ++ chit0=1.d0 ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1700) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c set virial, strain and stress tensors ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ eta(i)=uni(i) ++ strcns(i)=0.d0 ++ cell0(i)=cell(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c shake iterations and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 ++ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 ++ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 ++ ++c update positions ++ ++ xxx(i)=tstep*uxx(j)+eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) ++ yyy(i)=tstep*uyy(j)+eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) ++ zzz(i)=tstep*uzz(j)+eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) ++ ++c calculate velocity at full time step ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :*********** ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c calculate thermostated velocities ++ ++ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 ++ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 ++ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 ++ ++c update positions ++ ++ gcmx(ig)=tstep*uxx(jg)+ ++ x eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+eta(7)*gczo(jg) ++ gcmy(ig)=tstep*uyy(jg)+ ++ x eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+eta(8)*gczo(jg) ++ gcmz(ig)=tstep*uzz(jg)+ ++ x eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+eta(9)*gczo(jg) ++ ++c centre of mass velocities at full step ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=(omxo(jg)+pt5*delx) ++ opy(jg)=(omyo(jg)+pt5*dely) ++ opz(jg)=(omzo(jg)+pt5*delz) ++ ++ enddo ++ ++c scaled angular velocity at time step n ++ ++ omx(ig)=opx(jg)*chit0 ++ omy(ig)=opy(jg)*chit0 ++ omz(ig)=opz(jg)*chit0 ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 ++ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 ++ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=(omxo(jg)+delx)*chit0 ++ uyy(jg)=(omyo(jg)+dely)*chit0 ++ uzz(jg)=(omzo(jg)+delz)*chit0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c calculate total stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c calculate new cell tensor ++ ++ call mat_mul(eta,cell0,cell) ++ ++c calculate eta tensor ++ ++ do i=1,9 ++ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c new estimate of chit ++ ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update volume ++ ++ volm=volm*eta(1)*eta(5)*eta(9) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nstq_b2 ++ ++ subroutine nstq_h2 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, ++ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, ++ x vircom,vircon,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints- rigid body sites and constraint sites ++c may coincide. ++c ++c verlet leapfrog with Hoover like thermostat and barostat. ++c (cell may change shape) ++c ++c parallel replicated data version : block data ++c ++c for systems using bond constraints ++c ++c tqx,tqy,tqz=torque in lab fixed frame (input) ++c omx,omy,omz=angular velocity in body fixed frame (principal axis) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1995 ++c author t.forester june 1995 ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newstep,newjob,cycle ++ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons ++ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 ++ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm,mode ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) rot,strkin,strcon,strgrp,engtrn,vxt,vyt,vzt,trx,try,trz ++ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,com,fac,etadot ++ real(8) chit,conint,consv,virlrc,elrc,press,sigma,taut,taup ++ real(8) volm,eta0,etanew,cell0,volm0,elrc0,virlrc0,pmass,qmass ++ real(8) totmas,chit0,xxa,yya,zza,chip,chitp,vom,engfke ++ real(8) chitnew,vold,cons1,cons2,cons3,temp,uni ++ real(8) stres0,engtot ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: fmx(:),fmy(:),fmz(:) ++ real(8), allocatable :: tqx(:),tqy(:),tqz(:) ++ real(8), allocatable :: omxo(:),omyo(:),omzo(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) ++ ++ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn),vom(3) ++ dimension cell0(9),eta0(9),etanew(9),stres0(9),uni(9),com(3) ++ ++ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass ++ save igrp1,igrp2,ifre1,ifre2,totmas ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) ++ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) ++ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) ++ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) ++ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), ++ x stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1710) ++ enddo ++ ++ if(newjob) then ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ qmass=2.0d0*sigma*taut**2 ++ pmass=2.0d0*sigma*taup**2 ++ ++c store initial values of volume, long range corrections etc ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ fail(1)=0 ++ allocate (dens0(mxatyp),stat=fail(1)) ++ if(fail(1).ne.0)call error(idnode,1720) ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++c system total mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ cycle=.true. ++ ++c ensure total momentum is zero ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++c correction to velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ omxo(jg)=omx(ig) ++ omyo(jg)=omy(ig) ++ omzo(jg)=omz(ig) ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ gvxo(jg)=gvxx(ig) ++ gvyo(jg)=gvyy(ig) ++ gvzo(jg)=gvzz(ig) ++ qn0(jg)=q0(ig) ++ qn1(jg)=q1(ig) ++ qn2(jg)=q2(ig) ++ qn3(jg)=q3(ig) ++ ++ enddo ++ ++c calculate centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c calculate atom displacement from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxo(i)-gcxo(jg) ++ dty(jr)=yyo(i)-gcyo(jg) ++ dtz(jr)=zzo(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c initial thermostat and barostat variables and new cell ++ ++ chit0=chit ++ do i=1,9 ++ ++ eta0(i)=eta(i) ++ cell0(i)=cell(i) ++ ++ enddo ++ ++c initialise constraint stress and virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ stres0(i)=stress(i) ++ ++ enddo ++ ++c shake and thermostat iterations start here ++ ++ icyc=0 ++ mxshak1=mxshak ++ if(ntcons.eq.0)mxshak1=4 ++ do while(cycle.and.icyc.le.mxshak1) ++ ++ icyc=icyc+1 ++ ++c restore cell vectors ++ ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore original quaternions for this step ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ q0(ig)=qn0(jg) ++ q1(ig)=qn1(jg) ++ q2(ig)=qn2(jg) ++ q3(ig)=qn3(jg) ++ ++ enddo ++ ++c integrate unconstrained new positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity using leapfrog ++ ++ vxt=pt5*(vxx(i)+vxo(j)) ++ vyt=pt5*(vyy(i)+vyo(j)) ++ vzt=pt5*(vzz(i)+vzo(j)) ++ ++ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)- ++ x (eta0(1)+chit0)*vxt-eta0(4)*vyt-eta0(7)*vzt) ++ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)- ++ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) ++ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)- ++ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) ++ ++c advance positions using leapfrog ++ ++ xxa=(xxx(i)+xxo(i))*pt5-com(1) ++ yya=(yyy(i)+yyo(i))*pt5-com(2) ++ zza=(zzz(i)+zzo(i))*pt5-com(3) ++ ++ xxx(i)=xxo(i)+tstep*(uxx(j)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ yyy(i)=yyo(i)+tstep*(uyy(j)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ zzz(i)=zzo(i)+tstep*(uzz(j)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c estimate full step velocities ++ ++ vxx(i)=pt5*(uxx(j)+vxo(j)) ++ vyy(i)=pt5*(uyy(j)+vyo(j)) ++ vzz(i)=pt5*(uzz(j)+vzo(j)) ++ ++ enddo ++ ++c kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore half step velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=uxx(j) ++ vyy(i)=uyy(j) ++ vzz(i)=uzz(j) ++ ++ enddo ++ ++c ********: rigid body motion - thermostated :************ ++ ++c translational kinetic energy ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate centre of mass forces ++ ++ fmx(jg)=0.d0 ++ fmy(jg)=0.d0 ++ fmz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ fmx(jg)=fmx(jg)+fxx(i) ++ fmy(jg)=fmy(jg)+fyy(i) ++ fmz(jg)=fmz(jg)+fzz(i) ++ ++ enddo ++ ++c calculate thermostated velocities ++ ++ vxt=pt5*(gvxx(ig)+gvxo(jg)) ++ vyt=pt5*(gvyy(ig)+gvyo(jg)) ++ vzt=pt5*(gvzz(ig)+gvzo(jg)) ++ ++ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)- ++ x (chit0+eta0(1))*vxt-eta0(4)*vyt-eta0(7)*vzt) ++ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)- ++ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) ++ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)- ++ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) ++ ++c advance positions using leapfrog ++ ++ xxa=(gcmx(ig)+gcxo(jg))*pt5-com(1) ++ yya=(gcmy(ig)+gcyo(jg))*pt5-com(2) ++ zza=(gcmz(ig)+gczo(jg))*pt5-com(3) ++ ++ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ ++ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) ++ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ ++ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) ++ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ ++ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) ++ ++c estimate full step velocities ++ ++ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) ++ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) ++ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gvxx(ig)=uxx(jg) ++ gvyy(ig)=uyy(jg) ++ gvzz(ig)=uzz(jg) ++ ++ enddo ++ ++c calculate rigid body stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx(jg)=0.d0 ++ tqy(jg)=0.d0 ++ tqz(jg)=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c angular velocity at time step n (first guess) ++ ++ opx(jg)=omxo(jg) ++ opy(jg)=omyo(jg) ++ opz(jg)=omzo(jg) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* ++ x rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* ++ x rotinx(id,2) ++ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* ++ x rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* ++ x rotiny(id,2) ++ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* ++ x rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* ++ x rotinz(id,2) ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omxo(jg)+pt5*tstep*trx ++ opy(jg)=omyo(jg)+pt5*tstep*try ++ opz(jg)=omzo(jg)+pt5*tstep*trz ++ ++ enddo ++ ++c correction due to thermostat ++ ++ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) ++ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) ++ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) ++ ++c angular velocity at time step n ++ ++ omx(ig)=omxo(jg)+delx*pt5 ++ omy(ig)=omyo(jg)+dely*pt5 ++ omz(ig)=omzo(jg)+delz*pt5 ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(jg)=omxo(jg)+delx ++ uyy(jg)=omyo(jg)+dely ++ uzz(jg)=omzo(jg)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omxo(jg)+delx*1.5d0 ++ oqy(jg)=omyo(jg)+dely*1.5d0 ++ oqz(jg)=omzo(jg)+delz*1.5d0 ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step velocities ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(jg) ++ omy(ig)=uyy(jg) ++ omz(ig)=uzz(jg) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge new atomic coordinates ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c calculate total stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++c propagate eta ++ ++ fac=9.d0 ++ do i=1,9 ++ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- ++ x chit0*eta0(i)) ++ enddo ++ if(mode.gt.0)then ++ fac=5.d0 ++ etanew(3)=0.d0 ++ etanew(6)=0.d0 ++ etanew(7)=0.d0 ++ etanew(8)=0.d0 ++ if(mode.lt.3)then ++ fac=3.d0 ++ etanew(2)=0.d0 ++ etanew(4)=0.d0 ++ if(mode.eq.2)then ++ fac=2.d0 ++ etanew(1)=0.5d0*(etanew(1)+etanew(5)) ++ etanew(5)=etanew(1) ++ endif ++ endif ++ endif ++ do i=1,9 ++ eta0(i)=pt5*(etanew(i)+eta(i)) ++ enddo ++ ++c propagate chit ++ ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ engke=engfke+engtrn ++ engtot=engke+engrot ++ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass ++ chitnew=chit+tstep*chitp ++ chit0=pt5*(chit+chitnew) ++ ++c estimate new cell parameters ++ ++ call cell_propagate(tstep,cell,etanew) ++ ++ if(ntcons.gt.0) then ++ ++c apply constraint correction ++ ++ newstep=.false. ++ if(icyc.eq.1)newstep=.true. ++ ++ call qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ if(abs(viracc).le.1.d-10)cycle=.false. ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++ enddo ++ ++c update thermostat and barostat variables ++ ++ chit=chitnew ++ do i=1,9 ++ eta(i)=etanew(i) ++ enddo ++ ++c update volume ++ ++ chip=eta(1)+eta(5)+eta(9) ++ vold=volm ++ volm=volm*exp(tstep*chip) ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c conserved quantity less kinetic and potential energy ++ ++ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) ++ cons1=pt5*qmass*chit0**2 ++ cons2=press*vold ++ etadot=sdot0(9,eta0,eta0) ++ if(mode.eq.2)etadot=etadot-eta0(1)**2 ++ cons3=pt5*pmass*etadot ++ consv=conint+cons1+cons2+cons3 ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c merge new quaternions ++ ++ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) ++ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) ++ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) ++ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) ++ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) ++ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) ++ ++ return ++ end subroutine nstq_h2 ++ ++ subroutine qshake ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for appling bond constraint corrections after ++c atomic integration. Assumes rigid bodies connected by constraints ++c If this is not so use rdshake_1 instead ++c Must be used in conjunction with leapfrog integration algorithms ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester june 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k ++ integer ik,ig,id,jj ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy ++ real(8) tzz,xxt,yyt,zzt,stresh,tstep2,esig,dis,dis2 ++ real(8) xxa,yya,zza,tax,tay,taz,doti,amti,amtj ++ real(8) trx,try,trz,vix,viy,viz,vxi,vyi,vzi ++ real(8) vjx,vjy,vjz,vxj,vyj,vzj,gamma,dli,dlj,rot ++ ++ real(8), allocatable :: redmass(:),esig1(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension stresh(9),rot(9) ++ ++ save newjob,esig1,redmass ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (redmass(mxcons),esig1(mxcons),stat=fail) ++ if(fail.ne.0)call error(idnode,1610) ++ newjob=.false. ++ ++ endif ++ ++c constraint virial ++ ++ vircon=0.d0 ++ ++c accumulators for stress tensor ++ ++ do i=1,9 ++ stresh(i)=0.d0 ++ enddo ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c one iteration of constraint (shake) algorithm ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dis=prmcon(listcon(k,1)) ++ dis2=dis*dis ++ esig1(k)=0.5d0*(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 ++ esig=max(esig,abs(esig1(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c terminate iteration if all tolerances satisfied ++ ++ if (.not.safe) then ++ ++c initialise force increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c assign effective reduced mass ++ ++ if(newstep) then ++ ++ ig=lstbod(i) ++ ++ if(ig.eq.0) then ++ ++ amti=rmass(i) ++ ++ else ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c site to com in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ ++ x gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ ++ x gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ ++ x gzz(id,jj)*rot(9)) ++ ++c find cross product between interatomic vector and vector to com ++ ++ tax=yya*dzz(k)-zza*dyy(k) ++ tay=zza*dxx(k)-xxa*dzz(k) ++ taz=xxa*dyy(k)-yya*dxx(k) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++c direction of induced velocites in body frame ++ ++ vix=try*gzz(id,jj)-trz*gyy(id,jj) ++ viy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ viz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ vxi=vix*rot(1)+viy*rot(2)+viz*rot(3) ++ vyi=vix*rot(4)+viy*rot(5)+viz*rot(6) ++ vzi=vix*rot(7)+viy*rot(8)+viz*rot(9) ++ ++c find dot product between induced translational and rotational velocities ++ ++ doti=abs(vxi*dxx(k)+vyi*dyy(k)+vzi*dzz(k)) ++ doti=doti/dis2 ++ ++ amti=(1.d0/gmass(id)+doti) ++ ++ endif ++ ++ ig=lstbod(j) ++ if(ig.eq.0) then ++ ++ amtj=rmass(j) ++ ++ else ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c site to com in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ ++ x gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ ++ x gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ ++ x gzz(id,jj)*rot(9)) ++ ++c find cross product between interatomic vector and vector to com ++ ++ tax =yya*dzz(k)-zza*dyy(k) ++ tay =zza*dxx(k)-xxa*dzz(k) ++ taz =xxa*dyy(k)-yya*dxx(k) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++c direction of induced velocites in body frame ++ ++ vjx=try*gzz(id,jj)-trz*gyy(id,jj) ++ vjy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ vjz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ vxj=vjx*rot(1)+vjy*rot(2)+vjz*rot(3) ++ vyj=vjx*rot(4)+vjy*rot(5)+vjz*rot(6) ++ vzj=vjx*rot(7)+vjy*rot(8)+vjz*rot(9) ++ ++c find dot product between induced translational and rotational velocities ++ ++ doti=abs(vxj*dxx(k)+vyj*dyy(k)+vzj*dzz(k)) ++ doti=doti/dis2 ++ ++ amtj=(1.d0/gmass(id)+doti) ++ ++ endif ++ ++ redmass(k)=1.d0/(amti+amtj)/tstep2 ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig1(k)*redmass(k) ++ ++c accumulate bond virial ++ ++ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ stresh(1)=stresh(1)+gamma*dxx(k)*dxx(k) ++ stresh(2)=stresh(2)+gamma*dxx(k)*dyy(k) ++ stresh(3)=stresh(3)+gamma*dxx(k)*dzz(k) ++ stresh(5)=stresh(5)+gamma*dyy(k)*dyy(k) ++ stresh(6)=stresh(6)+gamma*dyy(k)*dzz(k) ++ stresh(9)=stresh(9)+gamma*dzz(k)*dzz(k) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)+dxx(k)*gamma ++ yyt(i)=yyt(i)+dyy(k)*gamma ++ zzt(i)=zzt(i)+dzz(k)*gamma ++ ++ xxt(j)=xxt(j)-dxx(k)*gamma ++ yyt(j)=yyt(j)-dyy(k)*gamma ++ zzt(j)=zzt(j)-dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+xxt(i)*dli ++ fyy(i)=fyy(i)+yyt(i)*dli ++ fzz(i)=fzz(i)+zzt(i)*dli ++ fxx(j)=fxx(j)+xxt(j)*dlj ++ fyy(j)=fyy(j)+yyt(j)*dlj ++ fzz(j)=fzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++c complete (symmetrical) stress tensor ++ ++ stresh(4)=stresh(2) ++ stresh(7)=stresh(3) ++ stresh(8)=stresh(6) ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine qshake ++ ++ end module lf_rotation2_module +diff -urN dl_class_1.9.orig/srcmod/Makefile dl_class_1.9/srcmod/Makefile +--- dl_class_1.9.orig/srcmod/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/Makefile 2015-11-16 17:18:13.342474971 +0100 +@@ -0,0 +1,101 @@ ++# Master makefile for DL_POLY Classic ++# Author: W. Smith January Dec 2010 ++# ++#======================================================================= ++# Define default settings ++#======================================================================= ++ ++include ../Plumed.inc ++ ++ ++BINROOT = ../execute ++CC := $(MPICC) ++EX = DLPOLY.X ++EXE = $(BINROOT)/$(EX) ++FC := $(MPIF90) ++SHELL=/bin/sh ++TYPE=par ++ ++#===================================================================== ++# Define object files ++ ++OBJ_MOD = parse_module.o setup_module.o error_module.o \ ++ site_module.o config_module.o pair_module.o utility_module.o \ ++ metafreeze_module.o solvation_module.o tether_module.o \ ++ vdw_module.o property_module.o rigid_body_module.o \ ++ angles_module.o bonds_module.o shake_module.o \ ++ inversion_module.o dihedral_module.o core_shell_module.o \ ++ exclude_module.o ewald_module.o coulomb_module.o\ ++ external_field_module.o four_body_module.o \ ++ hkewald_module.o metal_module.o ensemble_tools_module.o \ ++ temp_scalers_module.o three_body_module.o spme_module.o \ ++ tersoff_module.o neu_coul_module.o \ ++ nlist_builders_module.o forces_module.o \ ++ lf_motion_module.o lf_rotation1_module.o \ ++ lf_rotation2_module.o vv_motion_module.o \ ++ vv_rotation1_module.o vv_rotation2_module.o \ ++ pmf_module.o integrator_module.o optimiser_module.o \ ++ hyper_dynamics_module.o driver_module.o \ ++ define_system_module.o ++ ++OBJ_SRC = dlpoly.o ++ ++OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o ++ ++#===================================================================== ++# Define targets ++all: ++ @echo "Error - please specify a target machine!" ++ @echo "Permissible targets for this Makefile are:" ++ @echo " " ++ @echo "gfortran (parallel)" ++ @echo "woodcrest (parallel)" ++ @echo " " ++ @echo "Please examine Makefile for details" ++ ++# system specific targets follow : ++ ++#================== GNU Fortran, MPI version ============================== ++gfortran: ++ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ ++ LDFLAGS="$(LDFLAGS)" \ ++ FFLAGS="-c $(FFLAGS)" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#================= Woodcrest ========================================= ++woodcrest: ++ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ ++ FC=mpif90 FFLAGS="-c -O3" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#===================================================================== ++# Default code for parallel (MPI) execution ++ ++par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_DEPENDENCIES) ++ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_LOAD) ++ mv $(EX) $(EXE) ++ ++#===================================================================== ++# Check that a machine has been specified ++check: ++ @if test $(FC) = "undefined";\ ++ then echo "You must specify a target machine!"; \ ++ exit 99;\ ++ fi ++ ++#===================================================================== ++# Clean up the source directory ++clean: ++ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod ++ ++#===================================================================== ++# Declare dependencies ++.f.o: ++ $(FC) $(FFLAGS) $*.f ++.c.o: ++ $(CC) -c $*.c ++ ++#===================================================================== ++# Declare dependency on module files ++ ++$(OBJ_SRC): $(OBJ_MOD) +diff -urN dl_class_1.9.orig/srcmod/Makefile.plumedbck dl_class_1.9/srcmod/Makefile.plumedbck +--- dl_class_1.9.orig/srcmod/Makefile.plumedbck 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/Makefile.plumedbck 2015-11-16 17:17:11.322040795 +0100 +@@ -0,0 +1,98 @@ ++# Master makefile for DL_POLY Classic ++# Author: W. Smith January Dec 2010 ++# ++#======================================================================= ++# Define default settings ++#======================================================================= ++ ++BINROOT = ../execute ++CC := $(MPICC) ++EX = DLPOLY.X ++EXE = $(BINROOT)/$(EX) ++FC := $(MPIF90) ++SHELL=/bin/sh ++TYPE=par ++ ++#===================================================================== ++# Define object files ++ ++OBJ_MOD = parse_module.o setup_module.o error_module.o \ ++ site_module.o config_module.o pair_module.o utility_module.o \ ++ metafreeze_module.o solvation_module.o tether_module.o \ ++ vdw_module.o property_module.o rigid_body_module.o \ ++ angles_module.o bonds_module.o shake_module.o \ ++ inversion_module.o dihedral_module.o core_shell_module.o \ ++ exclude_module.o ewald_module.o coulomb_module.o\ ++ external_field_module.o four_body_module.o \ ++ hkewald_module.o metal_module.o ensemble_tools_module.o \ ++ temp_scalers_module.o three_body_module.o spme_module.o \ ++ tersoff_module.o neu_coul_module.o \ ++ nlist_builders_module.o forces_module.o \ ++ lf_motion_module.o lf_rotation1_module.o \ ++ lf_rotation2_module.o vv_motion_module.o \ ++ vv_rotation1_module.o vv_rotation2_module.o \ ++ pmf_module.o integrator_module.o optimiser_module.o \ ++ hyper_dynamics_module.o driver_module.o \ ++ define_system_module.o ++ ++OBJ_SRC = dlpoly.o ++ ++OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o ++ ++#===================================================================== ++# Define targets ++all: ++ @echo "Error - please specify a target machine!" ++ @echo "Permissible targets for this Makefile are:" ++ @echo " " ++ @echo "gfortran (parallel)" ++ @echo "woodcrest (parallel)" ++ @echo " " ++ @echo "Please examine Makefile for details" ++ ++# system specific targets follow : ++ ++#================== GNU Fortran, MPI version ============================== ++gfortran: ++ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ ++ LDFLAGS="$(LDFLAGS)" \ ++ FFLAGS="-c $(FFLAGS)" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#================= Woodcrest ========================================= ++woodcrest: ++ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ ++ FC=mpif90 FFLAGS="-c -O3" \ ++ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) ++ ++#===================================================================== ++# Default code for parallel (MPI) execution ++ ++par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) ++ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) ++ mv $(EX) $(EXE) ++ ++#===================================================================== ++# Check that a machine has been specified ++check: ++ @if test $(FC) = "undefined";\ ++ then echo "You must specify a target machine!"; \ ++ exit 99;\ ++ fi ++ ++#===================================================================== ++# Clean up the source directory ++clean: ++ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod ++ ++#===================================================================== ++# Declare dependencies ++.f.o: ++ $(FC) $(FFLAGS) $*.f ++.c.o: ++ $(CC) -c $*.c ++ ++#===================================================================== ++# Declare dependency on module files ++ ++$(OBJ_SRC): $(OBJ_MOD) +diff -urN dl_class_1.9.orig/srcmod/merge_tools.f dl_class_1.9/srcmod/merge_tools.f +--- dl_class_1.9.orig/srcmod/merge_tools.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/merge_tools.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,670 @@ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging coordinate arrays across ++c a number of processors ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith november 1992. ++c MPI version - t. forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff,nsize,ierr,iatm1,iatm2 ++ integer j,i,k,jdnode,kdnode,katm1,katm2,iatm,katm ++ real*8 xxx(natms),yyy(natms),zzz(natms),buffer(nbuff) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++c check that buffer is large enough ++ ++ nsize=(natms+mxnode-1)/mxnode ++ if(nbuff.lt.6*nsize)call error(idnode,47) ++ ++c load initial transfer buffer ++ ++ j=0 ++ ++c set up this nodes atoms ++ ++ iatm1 = (idnode*natms)/mxnode + 1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ iatm = iatm2-iatm1+1 ++ ++ do i=iatm1,iatm2 ++ ++ buffer(j+1)=xxx(i) ++ buffer(j+2)=yyy(i) ++ buffer(j+3)=zzz(i) ++ j=j+3 ++ ++ enddo ++ ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c identity of incoming atoms ++ ++ katm1 = (kdnode*natms)/mxnode + 1 ++ katm2 = ((kdnode+1)*natms)/mxnode ++ katm = katm2-katm1 + 1 ++ ++c systolic data pulse to transfer data ++ ++ call MPI_IRECV(buffer(3*nsize+1),3*nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),3*nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ j=3*nsize ++ ++ do i=katm1,katm2 ++ ++ xxx(i)=buffer(j+1) ++ yyy(i)=buffer(j+2) ++ zzz(i)=buffer(j+3) ++ j=j+3 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,3*nsize ++ ++ buffer(i)=buffer(3*nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging together coordinate arrays ++c across a number of processors during rigid body algorithm ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t.forester november 1993 ++c systolic pulse version. T3D t.forester sept 1994 ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical safe ++ integer idnode,mxnode,natms,ierr,i,j,k,l,mxb,nout,nin ++ integer nin1,jdnode,j1,kdnode ++ integer lstme(natms) ++ real*8 xxx(mxatms),yyy(mxatms),zzz(mxatms),buffer(mxbuff) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ ++ safe =.true. ++ ++c load up buffers ++ ++ j=1 ++ l=1 ++ do while(lstme(l).gt.0.and.l.le.natms) ++ ++ i=lstme(l) ++ buffer(j+1)=dble(i) ++ buffer(j+2)=xxx(i) ++ buffer(j+3)=yyy(i) ++ buffer(j+4)=zzz(i) ++ j=j+4 ++ l=l+1 ++ ++ enddo ++ ++c length of message ++ ++ buffer(1) = dble(j) ++ ++c array position for incoming messages ++ ++ mxb = mxbuff/2 ++ ++c load initial transfer buffer ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c out going message size ++ ++ nout = nint(buffer(1)) ++ ++ call MPI_IRECV(nin,1,MPI_INTEGER, ++ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(nout,1,MPI_INTEGER,jdnode, ++ x Merge1_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++ call MPI_IRECV(buffer(mxb),nin,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),nout,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge1_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c check buffer array not exceeded ++ ++ if(nin.gt.mxbuff-mxb) safe =.false. ++ ++c position of first data element in incoming array ++ ++ nin1 = (nin-1)/4 ++ j = mxb+1 ++ ++ do j1=1,nin1 ++ ++ i = nint(buffer(j)) ++ xxx(i)=buffer(j+1) ++ yyy(i)=buffer(j+2) ++ zzz(i)=buffer(j+3) ++ j=j+4 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,nin ++ ++ buffer(i)=buffer(mxb-1+i) ++ ++ enddo ++ ++ enddo ++ ++c global check ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,47) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for merging coordinate arrays across ++c a number of processors ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t.forester february 1994 ++c T3D version - sept 1994 t.forester ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c********************************************************************* ++ ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff,ierr,nsize,i,j,igrp1,igrp2 ++ integer k,jdnode,kdnode,kgrp1,kgrp2 ++ real*8 q0(ngrp),q1(ngrp),q2(ngrp),q3(ngrp),buffer(nbuff) ++ ++ include "comms.inc" ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ ++c check that buffer is large enough ++ ++ nsize=(ngrp+mxnode-1)/mxnode ++ if(nbuff.lt.8*nsize)call error(idnode,47) ++ ++c load initial transfer buffer ++ ++ j=0 ++ ++ igrp1 = (idnode*ngrp)/mxnode+1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++ do i=igrp1,igrp2 ++ ++ buffer(j+1)=q0(i) ++ buffer(j+2)=q1(i) ++ buffer(j+3)=q2(i) ++ buffer(j+4)=q3(i) ++ j=j+4 ++ ++ enddo ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c identity of incoming groups ++ ++ kgrp1 = (kdnode*ngrp)/mxnode+1 ++ kgrp2 = ((kdnode+1)*ngrp)/mxnode ++ ++ call MPI_IRECV(buffer(4*nsize+1),4*nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Merge4_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),4*nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Merge4_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ j=4*nsize ++ ++ do i=kgrp1,kgrp2 ++ ++ q0(i)=buffer(j+1) ++ q1(i)=buffer(j+2) ++ q2(i)=buffer(j+3) ++ q3(i)=buffer(j+4) ++ j=j+4 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,4*nsize ++ ++ buffer(i)=buffer(4*nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for merging core-shell velocity data ++c to restore data replication on all nodes ++c ++c copyright - daresbury laboratory 1993 ++c author - w. smith february 1993 ++c MPI version - w. smith june 1995 ++c CPP version - w. smith june 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use config_module ++ use core_shell_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer idnode,mxnode,ntshl,ierr,i,j,k,n,m,ishl1,ishl2,nsize ++ integer jdnode,kshl1,kshl2,kdnode ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++c check that buffer is large enough ++ ++ nsize=8*((ntshl+mxnode-1)/mxnode) ++ ++ if(mxbuff.lt.2*nsize)call error(idnode,425) ++ ++c block indices ++ ++ ishl1 = (idnode*ntshl)/mxnode+1 ++ ishl2 = ((idnode+1)*ntshl)/mxnode ++ ++c load initial transfer buffer ++ ++ n=0 ++ m=0 ++ ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++c indices of core and shell ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ buffer(n+1)=dble(i) ++ buffer(n+2)=dble(j) ++ buffer(n+3)=vxx(i) ++ buffer(n+4)=vyy(i) ++ buffer(n+5)=vzz(i) ++ buffer(n+6)=vxx(j) ++ buffer(n+7)=vyy(j) ++ buffer(n+8)=vzz(j) ++ n=n+8 ++ ++ enddo ++ ++ call gsync() ++ ++c identity of neighbour node for systolic transfer ++ ++ jdnode=mod(idnode+1,mxnode) ++ ++ do k=1,mxnode-1 ++ ++c identity of node of origin of incoming data ++ ++ kdnode=mod(idnode+mxnode-k,mxnode) ++ ++c systolic data pulse to transfer data ++ ++ call MPI_IRECV(buffer(nsize+1),nsize,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Shell_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(buffer(1),nsize,MPI_DOUBLE_PRECISION,jdnode, ++ x Shell_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++c merge the incoming data into current arrays ++ ++ n=nsize ++ ++c block indices ++ ++ kshl1 = (kdnode*ntshl)/mxnode+1 ++ kshl2 = ((kdnode+1)*ntshl)/mxnode ++ ++ do m=kshl1,kshl2 ++ ++ i=nint(buffer(n+1)) ++ j=nint(buffer(n+2)) ++ ++ vxx(i)=buffer(n+3) ++ vyy(i)=buffer(n+4) ++ vzz(i)=buffer(n+5) ++ vxx(j)=buffer(n+6) ++ vyy(j)=buffer(n+7) ++ vzz(j)=buffer(n+8) ++ ++ n=n+8 ++ ++ enddo ++ ++c shift new data to start of buffer ++ ++ do i=1,nsize ++ ++ buffer(i)=buffer(nsize+i) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for passing coordinate updates between ++c nodes during the shake iteration cycle ++c ++c parallel replicated data algorithm ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c MPI version - t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ integer idnode, mxnode, natms,ierr,i,k,j0,k0,n,jdnode,j ++ integer lishap(mxlshp),lashap(mxproc) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ real*8 xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ real*8 txx(mxatms),tyy(mxatms),tzz(mxatms) ++ real*8 buffer(mxbuff) ++ ++c store increments to be transferred ++ ++ do i=1,natms ++ ++ txx(i)=xxt(i) ++ tyy(i)=yyt(i) ++ tzz(i)=zzt(i) ++ ++ enddo ++ ++c transfer coordinate data to all nodes ++ ++ call gsync() ++ ++ do k=1,mxnode-1 ++ ++ i=0 ++ j0=0 ++ if(k.gt.1)j0=lashap(k-1) ++ ++ do j=j0+1,lashap(k) ++ ++ buffer(i+1)=txx(lishap(j)) ++ buffer(i+2)=tyy(lishap(j)) ++ buffer(i+3)=tzz(lishap(j)) ++ i=i+3 ++ ++ enddo ++ ++c inter node communication ++ ++ k0=0 ++ ++ if(k+1.lt.mxnode)k0=lashap(mxnode-k-1) ++ n=3*(lashap(mxnode-k)-k0) ++ jdnode=mod(idnode+k,mxnode) ++ ++c check for zero length messages ++ ++ if(n.gt.0) call MPI_IRECV(buffer(i+1),n,MPI_DOUBLE_PRECISION, ++ x MPI_ANY_SOURCE,Shmove_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ if(i.gt.0) call MPI_SEND(buffer(1),i,MPI_DOUBLE_PRECISION, ++ x jdnode,Shmove_tag+k,MPI_COMM_WORLD,ierr) ++ ++ if(n.gt.0) call MPI_WAIT(request,status,ierr) ++ ++c consolidate transferred data ++ ++ do j=k0+1,lashap(mxnode-k) ++ ++ xxt(lishap(j))=xxt(lishap(j))+buffer(i+1) ++ yyt(lishap(j))=yyt(lishap(j))+buffer(i+2) ++ zzt(lishap(j))=zzt(lishap(j))+buffer(i+3) ++ i=i+3 ++ ++ enddo ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for splicing together coordinate arrays ++c across a number of processors during shake algorithm ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - w. smith march 1993 ++c ++c second version of splice ++c ++c********************************************************************* ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer idnode,natms,listme,listot,j,n3,i,lastot ++ real*8 xxx,yyy,zzz,buffer ++ ++ dimension listme(mxatms),listot(mxatms) ++ dimension xxx(natms),yyy(natms),zzz(natms) ++ dimension buffer(mxbuff) ++ ++c check buffer size ++ ++ if(mxbuff.lt.6*natms) call error(idnode,190) ++ ++c load initial transfer buffers ++ ++ j=3*natms ++ n3=3*natms ++ ++ do i=1,natms ++ ++ if(listot(i).gt.0)then ++ ++ if(listme(i).gt.0)then ++ ++ buffer(j+1)=xxx(i) ++ buffer(j+2)=yyy(i) ++ buffer(j+3)=zzz(i) ++ ++ else ++ ++ buffer(j+1)=0.d0 ++ buffer(j+2)=0.d0 ++ buffer(j+3)=0.d0 ++ ++ endif ++ ++ j=j+3 ++ ++ endif ++ ++ enddo ++ ++ lastot=j-n3 ++ ++c splice constraint coordinates ++ ++ if(lastot.gt.0) call gdsum(buffer(n3+1),lastot,buffer(1)) ++ ++c reconstitute coordinate arrays ++ ++ j=n3 ++ ++ do i=1,natms ++ ++ if(listot(i).gt.0)then ++ ++ xxx(i)=buffer(j+1)/dble(listot(i)) ++ yyy(i)=buffer(j+2)/dble(listot(i)) ++ zzz(i)=buffer(j+3)/dble(listot(i)) ++ ++ j=j+3 ++ ++ endif ++ ++ enddo ++ ++ return ++ end +diff -urN dl_class_1.9.orig/srcmod/metafreeze_module.f dl_class_1.9/srcmod/metafreeze_module.f +--- dl_class_1.9.orig/srcmod/metafreeze_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/metafreeze_module.f 2011-07-26 18:53:41.000000000 +0200 +@@ -0,0 +1,3990 @@ ++ module metafreeze_module ++ ++c--------------------------------------------------------------------- ++c ++c Metafreeze module for metadynamics ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c Adapted for dl_poly classic w. smith dec 2010 ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++c Minimise usage by making everything private ++ ++ private ++ ++c--------------------------------------------------------------------- ++c P u b l i c R o u t i n e s ++c ... unless exposed here. ++c--------------------------------------------------------------------- ++ ++ public :: define_metadynamics ! Called to intitialise this module ++ public :: metafreeze_driver ! Called at every MD time-step ++ ++c--------------------------------------------------------------------- ++c P u b l i c V a r i a b l e s ++c--------------------------------------------------------------------- ++ ++ public :: lmetadyn ! Is this a metadynamics calculation? ++ public :: driven ! Is this atom site involved in metadynamics ++ public :: lstein,ltet,lglobpe,llocpe,ncolvar,nq4,nq6,ntet,hkey ++ public :: meta_step_int,globpe_scale,locpe_scale,ref_W_aug ++ public :: h_aug,wt_Dt ++ ++c------------------------------------ ++c Populated from CONTROL file ++c------------------------------------ ++ ++ logical,save :: lmetadyn =.false. ! Master metadynamics flag ++ ++c------------------------------------------------------- ++c Energy, virial, stress and forces from 'local' pe ++c Populated by dlpoly energy routines ++c------------------------------------------------------- ++ ++ ++ public :: eng_loc,vir_loc,stress_loc ++ public :: fxx_loc,fyy_loc,fzz_loc ++ ++c---------------------------------------------------------------------- ++c Data accumulated for local potential energy (computed elsewhere) ++c---------------------------------------------------------------------- ++ ++ real(8),save :: eng_loc,vir_loc ++ real(8),dimension(9),save :: stress_loc ++ real(8),allocatable,dimension(:),save :: fxx_loc,fyy_loc,fzz_loc ++ ++c--------------------------------------------------------------------- ++c P r i v a t e V a r i a b l e s ++c--------------------------------------------------------------------- ++ ++c---------------------------------------------------------------- ++c Collective variables and derivatives of v_aug w.r.t colvars ++c---------------------------------------------------------------- ++ ++ integer,parameter :: maxhis = 150000 ! Size of history arrays ++ real(8),allocatable,dimension(:),save :: colvar,dcolvar ++ real(8),allocatable,dimension(:),save :: colvar_scale ++ ++c---------------------------------------------------------------- ++c Positions and heights of previous Gaussians in colvar space ++c---------------------------------------------------------------- ++ ++ real(8),allocatable,dimension(:,:),save :: colvar_his ++ real(8),allocatable,dimension(:),save :: w_aug ++ ++c------------------------------ ++c Read from CONTROL file ++c------------------------------ ++ ++ integer,save :: ncolvar = 0 ! Total number of collvars ++ logical,save :: lstein =.false. ! Q4/Q6 collective variables ++ logical,save :: ltet =.false. ! Tetrahedral order parameter ++ logical,save :: lglobpe =.false. ! Global potential energy ++ logical,save :: llocpe =.false. ! Local potential energy ++ ++ integer,save :: nq4 = 0 ! Number of Q4 pair types ++ integer,save :: nq6 = 0 ! Number of Q6 pair types ++ integer,save :: ntet = 0 ! Number of zeta triplets ++ ++ real(8),save :: globpe_scale = 1.0d0 ! Scaling factors for local ++ real(8),save :: locpe_scale = 1.0d0 ! and global pe colvars ++ ++ real(8),save :: ref_W_aug=1.0d0 ! Reference Gaussian height ++ real(8),save :: h_aug=1.0d0 ! Gaussian width ++ integer,save :: hkey=0 ! Height control scheme ++ real(8),save :: wt_Dt=100.0d0 ! "Well-tempered" parameter ++ integer,save :: meta_step_int=5 ! interval between depositions ++ ++c---------------------------------------- ++c Read from STEINHARDT or TETRAHEDRAL ++c---------------------------------------- ++ ++c Global Steinhardt order parameters ++ ++ real(8),allocatable,dimension(:),save :: q4_global ++ real(8),allocatable,dimension(:),save :: q6_global ++ ++c Global Tetrahedral order parameters ++ ++ real(8),allocatable,dimension(:),save :: zeta_global ++ ++c Bookkeeping arrays for order parameter computation ++ ++ character(8),allocatable,dimension(:,:),save :: q4label ++ character(8),allocatable,dimension(:,:),save :: q6label ++ character(8),allocatable,dimension(:),save :: zetalabel ++ ++c Inner and outer cutoffs ++ ++ real(8),allocatable,dimension(:,:),save :: q4cutoff ++ real(8),allocatable,dimension(:,:),save :: q6cutoff ++ real(8),allocatable,dimension(:,:),save :: zetacutoff ++ ++c Scaling factors for q4 and q6 ++ ++ real(8),allocatable,dimension(:),save :: q4scale ++ real(8),allocatable,dimension(:),save :: q6scale ++ real(8),allocatable,dimension(:),save :: zetascale ++ ++c Number of nearest neighbours for q4, q6 and zeta ++ ++ integer,allocatable,dimension(:),save :: q4nn,q6nn ++ integer,allocatable,dimension(:),save :: zetann ++ ++c------------------------------------------------------------ ++c Arrays holding data for computation of order parameters ++c------------------------------------------------------------ ++ ++c Steinhardt site-site interaction arrays ++ ++ integer,allocatable,dimension(:,:),save :: q4site ++ integer,allocatable,dimension(:,:),save :: q6site ++ integer,allocatable,dimension(:) ,save :: zetasite ++ ++c Number of included sites ++ ++ integer,allocatable,dimension(:),save :: q4ninc ++ integer,allocatable,dimension(:),save :: q6ninc ++ integer,allocatable,dimension(:),save :: zetaninc ++ ++c Real and imaginary parts of q4bar and q6bar ++ ++ real(8),allocatable,dimension(:,:),save :: ReQ6bar,ImQ6bar ++ real(8),allocatable,dimension(:,:),save :: ReQ4bar,ImQ4bar ++ ++c Max number of entries in co-ordination shell ++ ++ integer,parameter :: mxflist = 50 ++ integer :: mxninc ++ ++c Full neighbour list for Tetrahedral order parameter ++ ++ integer,allocatable,dimension(:) ,save :: nflist ++ integer,allocatable,dimension(:,:),save :: flist ++ ++c------------------------------------- ++c Internal bookkeeping ++c------------------------------------- ++ ++ logical,allocatable,dimension(:),save :: driven ! Metadynamics option ++ integer,save :: meta_step=1 ! Current metadynamics step number ++ real(8),save :: meta_energy ! Value of metadynamics bias potential ++ ++ integer,save :: wl_nbins=30 ! Number of bins for WL recursion ++ integer,save :: wl_cycle=0 ! Current WL cycle ++ real(8),save :: wl_range=0.175 ! range of WL ++ real(8),allocatable,dimension(:),save :: wl_bin ! WL bins ++ ++c-------------------------------------- ++c Miscellaneous internal variables ++c-------------------------------------- ++ ++ integer,allocatable,dimension(:) :: buff ! Comms buffer ++ ++c File units ++ ++ integer,save :: stn = 91 ! STEINHARDT ++ integer,save :: mtd = 92 ! METADYNAMICS ++ integer,save :: zta = 93 ! ZETA ++ integer,save :: wlb = 94 ! WL_BINS.DAT ++ ++c Error flag ++ ++ integer,dimension(100) :: ierr = 0 ++ ++c Local store of comms variables ++c Assuming no task farming, comms will require changing if farmed ++ ++ integer, save :: myrank,commsize ++ logical, save :: onroot ++ real(8),save :: kt ++ ++ contains ++ ++ Subroutine Metafreeze_Driver ++ x (imcon,natms,temp,nstep,engcfg,virtot,engord,virord) ++ ++c--------------------------------------------------------------------- ++c Top level metadynamics routine called after evaluation of all ++c other energetic and force terms within the main molecular ++c dynamics loop. ++c ++c 1. Computes the ncolvar order parameters ++c 2. Deposits a new Gaussian at the current collective variables ++c as the current number of steps reaches meta_step_int ++c 3. Computed the bias potential and its derivative w.r.t. the ++c ncolvar collective variables. ++c 4. Computes the forces stresses and virial resulting from the ++c bias ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : boltz ++ use config_module, only : fxx,fyy,fzz,stress ++ ++ implicit none ++ ++ integer,intent(in) :: nstep,imcon,natms ++ real(8),intent(in) :: engcfg,virtot,temp ++ real(8),intent(out) :: engord,virord ++ ++c Local variables ++ ++ integer :: k,iq,itet,ibin,nfail,my_meta_step ++ integer,save :: nlastg = 0 ++ real(8) :: height,buff1,wl_mean ++ logical :: flat,safe ++ ++c------------------------------------------------------ ++c Compute order parameters / collective variables ++c------------------------------------------------------ ++ ++c Steinhardt order parameters ++ ++ if ( nq4>0.or.nq6>0 ) call compute_steinhardt(imcon,natms) ++ ++ k = 1 ++ do iq = 1,nq4 ++ colvar(k) = q4_global(iq) ++ k = k + 1 ++ end do ++ do iq = 1,nq6 ++ colvar(k) = q6_global(iq) ++ k = k + 1 ++ end do ++ ++c Tetrahedral order parameters ++ ++ if ( ntet > 0 ) then ++ call compute_tet_nlist(imcon,natms) ++ call compute_tetrahedral(imcon,natms) ++ end if ++ ++ do itet = 1,ntet ++ colvar(k) = zeta_global(itet) ++ k = k + 1 ++ end do ++ ++c Energy order parameters ++ ++ if (lglobpe) then ++ colvar(k) = engcfg ++ k = k + 1 ++ end if ++ if (llocpe) then ++ ++c Global reduction of local virial and energy ++ ++ if ( commsize > 1 ) call gdsum(eng_loc,1,buff1) ++ if ( commsize > 1 ) call gdsum(vir_loc,1,buff1) ++ colvar(k) = eng_loc ++ k = k + 1 ++ end if ++ ++ if ( k-1/=ncolvar ) call Mfrz_Error(2500,0.d0) ++ ++ if ( hkey==1 ) then ++ k = int(dble(wl_nbins)*colvar(1)/wl_range) + 1 ++ if ( k < wl_nbins) wl_bin(k) = wl_bin(k) + 1.0d0 ++ end if ++ ++c-------------------------------------------------------- ++c Deposit a new Gaussian if now is the correct time ++c-------------------------------------------------------- ++ ++ if ( (mod(nstep,meta_step_int)==0).and.(nstep>nlastg) ) then ++ nlastg = nstep ! Avoid multiple depositions at the ++ ! same timestep (relaxed shell model) ++ ++ select case (hkey) ++ ++ case(0) ++ ++c Always deposit Gaussians of the same height ++ ++ height = ref_W_aug ++ ++ case(1) ++ ++c Wang-Landau style recursion ++ ++ open(unit=wlb,file='WL_BINS.DAT',status='replace') ++ ++ do ibin = 1,wl_nbins ++ write(wlb,*)ibin,wl_bin(ibin) ++ end do ++ ++ close(wlb) ++ ++ if ( ncolvar/=1 ) then ++ call Mfrz_Error(2501,0.d0) ++ else ++ ++ height = ref_W_aug*(0.5d0**dble(wl_cycle)) ++ ++ nfail = 0 ++ wl_mean = 0.d0 ++ do ibin = 6,wl_nbins-5 ++ wl_mean = wl_mean + wl_bin(ibin) ++ nfail = nfail + 1 ++ end do ++ wl_mean = wl_mean/dble(nfail) ++ ++ nfail = 0 ++ flat = .true. ++ do ibin = 6,wl_nbins-5 ++ if ( wl_bin(ibin) < 0.8d0*wl_mean ) then ++ if ( nfail > 2 ) flat = .false. ++ nfail = nfail + 1 ++ end if ++ end do ++ ++ if ( flat.and.(sum(wl_bin)>50.0d0) ) then ++ wl_cycle = wl_cycle + 1 ++ wl_bin = 0.0d0 ++ end if ++ ++ height = ref_W_aug*(0.5d0**dble(wl_cycle)) ++ ++ end if ++ ++ case(2) ++ ++c Well-tempered metadynamics ++ ++ meta_energy = 0.0d0 ++ call compute_bias_potential() ++ ++ height = ref_W_aug*exp(-meta_energy/wt_Dt) ++ ++ case default ++ ++ call Mfrz_Error(2502,0.d0) ++ ++ end select ++ ++ call deposit_gaussian(height,temp) ++ my_meta_step = (meta_step-1)/commsize + 1 ++ safe = ( maxhis >= my_meta_step ) ++ call gstate(safe) ++ if ( .not.safe ) call Mfrz_Error(2503,0.d0) ++ ++ end if ++ ++c----------------------------------------------------------- ++c Compute the bias potential and its derivatives w.r.t. ++c to the ncolvar collective variables. ++c----------------------------------------------------------- ++ ++ call compute_bias_potential() ++ ++c----------------------------------------------------------- ++c Add in the forces, stresses and virial contributions ++c from this derivative. ++c----------------------------------------------------------- ++ ++ virord = 0.0d0 ! Zero the virial ++ ++c Must compute contributions from pe order parameters ++c first before we change any forces. ++ ++ k = nq4+nq6+ntet+1 ++ ++c Energy order parameters ++ ++ if (lglobpe) then ++ ++ fxx(:) = fxx(:)*(1.0d0+dcolvar(k)) ++ fyy(:) = fyy(:)*(1.0d0+dcolvar(k)) ++ fzz(:) = fzz(:)*(1.0d0+dcolvar(k)) ++ ++c correct for later summation: ++ ++ virord = virord+dcolvar(k)*virtot/dble(commsize) ++ stress = stress*(1.0d0+dcolvar(k)) ++ ++ end if ++ if (llocpe) then ++ ++ fxx(:) = fxx(:) + fxx_loc(:)*dcolvar(k) ++ fyy(:) = fyy(:) + fyy_loc(:)*dcolvar(k) ++ fzz(:) = fzz(:) + fzz_loc(:)*dcolvar(k) ++ ++c correct for later summation: ++ ++ virord = virord + dcolvar(k)*vir_loc/dble(commsize) ++ stress = stress + stress_loc*dcolvar(k) ++ ++ end if ++ ++c Steinhardt order parameters ++ ++ if ( nq4>0.or.nq6>0 ) call ++ x compute_steinhardt_forces(imcon,natms,engord,virord) ++ ++c Tetrahedral order parameters ++ ++ if ( ntet > 0 ) call ++ x compute_tetrahedral_forces(imcon,natms,engord,virord) ++ ++c global reduction of virord ++ ++ if ( commsize > 1 ) call gdsum(virord,1,buff1) ++ ++ engord = meta_energy ++ ++ return ++ ++ end Subroutine Metafreeze_Driver ++ ++ Subroutine Deposit_Gaussian(height,temp) ++ ++c--------------------------------------------------------------------- ++c ++c Deposits a new Gaussian at the current collective variables and ++c appends to the METADYNAMICs file. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : boltz ++ ++ implicit none ++ ++ real(8),intent(in) :: height,temp ++ integer :: my_meta_step ++ character(11) :: fmtstring ++ ++c store current order parameters and Gaussian height ++ ++ if ( mod(meta_step-1,commsize) == myrank ) then ++ ++ my_meta_step = (meta_step-1)/commsize + 1 ++ w_aug(my_meta_step) = height ++ colvar_his(:,my_meta_step) = colvar(:) ++ ++ end if ++ ++ if (onroot) then ++ ++c Create format string ++ ++ write(fmtstring,'("(I8,",I1,"E15.6)")')ncolvar+1 ++ ++c write METADYNAMICS file ++ ++ open(unit=mtd,file='METADYNAMICS',status='old',position= ++ x 'append',iostat=ierr(1)) ++ write(unit=mtd,fmt=fmtstring)meta_step,colvar(:), ++ x height/(temp*boltz) ++ close(unit=mtd) ++ ++ end if ++ ++ meta_step = meta_step+1 ++ ++ return ++ ++ end Subroutine Deposit_Gaussian ++ ++ Subroutine Compute_Bias_Potential() ++ ++c--------------------------------------------------------------------- ++c ++c Computes the augmenting bias potential as a function of the ++c collective variables. Also computes the derivative of the bias ++c potential w.r.t. the collective variables required to compute ++c the metadynamics forces. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ integer :: istep,ic,k,my_meta_step ++ real(8) :: vsq,exp1,dWpsq ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++ allocate(buff1(1:2*(ncolvar+1)),stat=ierr(1)) ++ allocate(buff2(1:2*(ncolvar+1)),stat=ierr(2)) ++ ++ if (any(ierr/=0)) call Mfrz_Error(2504,0.d0) ++ ++c Set squared-width of gaussians ++ ++ dWpsq = 1.0d0/h_aug**2 ++ meta_energy = 0.0d0 ++ ++c Zero accumulators of derivative w.r.t. each order parameter ++ ++ dcolvar(:) = 0.0d0 ++ my_meta_step = (meta_step-1)/commsize + 1 ++ do istep=1,my_meta_step ++ ++ vsq = 0.0d0 ++ do ic = 1,ncolvar ++ vsq = vsq + ( colvar_scale(ic)*(colvar(ic) - ++ x colvar_his(ic,istep)) )**2 ++ end do ++ exp1 = w_aug(istep)*exp(-0.5d0*vsq*dWpsq) ++ do ic = 1,ncolvar ++ dcolvar(ic) = dcolvar(ic) - (colvar_scale(ic)**2)*exp1* ++ x (colvar(ic) - colvar_his(ic,istep))*dWpsq ++ end do ++ ++ meta_energy = meta_energy + exp1 ++ ++ end do ++ ++ buff1(1) = meta_energy ++ k = 2 ++ do ic = 1,ncolvar ++ buff1(k) = dcolvar(ic) ++ k = k + 1 ++ end do ++ ++ if ( commsize > 1 ) then ++ call gdsum(buff1,ncolvar+1,buff2) ++ end if ++ ++ meta_energy = buff1(1) ++ ++ k = 2 ++ do ic=1,ncolvar ++ dcolvar(ic) = buff1(k) ++ k = k + 1 ++ end do ++ ++ deallocate(buff1,buff2,stat=ierr(1)) ++ ++ return ++ ++ end Subroutine Compute_Bias_Potential ++ ++ Subroutine Define_Metadynamics(tm,ts,natms,temp) ++ ++c--------------------------------------------------------------------- ++c Processes the metadynamics input file. This is done in several ++c stages. ++c 1. Process the metadynamics control data read from the CONTROL ++c file, which defines the number of collective variables and ++c indicates if we need to read from auxilliary input files ++c (e.g. STEINHARDT or ZETA) which define order parameters. ++c 2. Read and process these auxilliary files. ++c 3. Process the information obtained from the CONTROL file which ++c controls the properties of the Gaussians used to build the ++c bias potential. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c Adapted w. smith - jan 2011 ++c ++c--------------------------------------------------------------------- ++ ++ use site_module ++ use config_module, only : ltype ++ use parse_module ++ ++ implicit none ++ ++ integer,intent(in) :: tm,ts,natms ++ real(8),intent(in) :: temp ++ ++c Local variables ++ ++ integer :: isite,jsite,ilin,i,iq,iatm0,iatm1,istrd,iatm,k,n,idum ++ logical :: lexist,go,safe ++ real(8) :: waug,dummy(1) ++ ++c Allocate the driven list. Modifications elsewhere in DLPOLY always ++c check if sites are driven (for accumulation of local PE) and hence ++c this should be allocated if this is a metadynamics run or not. ++ ++ allocate(driven(1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2505,0.d0) ++ driven = .false. ++ ++c Do nothing else if the metafreeze flag has not been set in CONTROL ++ ++ if (.not.lmetadyn) then ++ return ++ end if ++ ++c Make local copy of rank and communicator size and set onroot flag ++ ++ myrank=tm ++ commsize = ts ++ onroot = (myrank==0) ++ ++c$$$ DEBUG ++cc$$$ if (onroot) write(0,'("================================")') ++cc$$$ if (onroot) write(0,'("Available sites from site module")') ++cc$$$ if (onroot) write(0,'("================================")') ++cc$$$ if (onroot) then ++cc$$$ do isite = 1,size(unqatm) ++cc$$$ write(0,'("Site index ",i4,": ",a8)')isite,unqatm(isite) ++cc$$$ end do ++cc$$$ end if ++ ++c Cannot bias the global and local PE in the same run. ++ ++ if ( lglobpe.and.llocpe ) call Mfrz_Error(2509,0.d0) ++ ++c Allocate local force arrays if anything is driven. ++ ++ allocate(fxx_loc(1:mxatms),stat=ierr(1)) ++ allocate(fyy_loc(1:mxatms),stat=ierr(2)) ++ allocate(fzz_loc(1:mxatms),stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2510,0.d0) ++ ++c Allocate arrays to hold collective variables ++ ++ allocate( colvar(1:ncolvar),stat=ierr(1)) ++ allocate(dcolvar(1:ncolvar),stat=ierr(2)) ++ allocate(colvar_his(1:ncolvar,1:maxhis),stat=ierr(3)) ++ allocate(colvar_scale(1:ncolvar),stat=ierr(4)) ++ allocate(w_aug(1:maxhis),stat=ierr(5)) ++ if (any(ierr/=0)) call Mfrz_Error(2511,0.d0) ++ ++c Allocate Wang-Landau bin array ++ ++ allocate(wl_bin(1:wl_nbins),stat=ierr(1)) ++ if (any(ierr/=0)) call Mfrz_Error(2512,0.d0) ++ wl_bin = 0.0d0 ++ ++c------------------------------------------------------------- ++c Process Steinhardt order parameter settings if present ++c------------------------------------------------------------- ++ ++ if ( lstein ) then ++ ++ allocate(q4label(1:2,1:nq4),stat=ierr(1)) ++ allocate(q6label(1:2,1:nq6),stat=ierr(2)) ++ allocate(q4cutoff(1:2,1:nq4),stat=ierr(3)) ++ allocate(q6cutoff(1:2,1:nq6),stat=ierr(4)) ++ allocate(q4scale(1:nq4),stat=ierr(5)) ++ allocate(q6scale(1:nq6),stat=ierr(6)) ++ allocate(q4nn(1:nq4),stat=ierr(7)) ++ allocate(q6nn(1:nq6),stat=ierr(8)) ++ allocate(q4ninc(1:nq4),stat=ierr(9)) ++ allocate(q6ninc(1:nq6),stat=ierr(10)) ++ allocate(buff(1:max(nq4,nq6)),stat=ierr(11)) ++ allocate(q4_global(1:nq4),stat=ierr(12)) ++ allocate(q6_global(1:nq6),stat=ierr(13)) ++ allocate(ReQ4Bar(-4:+4,1:nq4),stat=ierr(14)) ++ allocate(ImQ4Bar(-4:+4,1:nq4),stat=ierr(15)) ++ allocate(ReQ6Bar(-6:+6,1:nq6),stat=ierr(16)) ++ allocate(ImQ6Bar(-6:+6,1:nq6),stat=ierr(17)) ++ if (any(ierr/=0)) call Mfrz_Error(2515,0.d0) ++ ++c Open STEINHARDT file and process ++ ++ if (onroot) then ++ open(unit=stn,file='STEINHARDT',status='old',iostat=ierr(1)) ++ else ++ ierr(1)=0 ++ endif ++ call gisum(ierr(1),1,ierr(2)) ++ if ( ierr(1)/=0 ) call Mfrz_Error(2516,0.d0) ++ ++ ilin = 1 ++ safe=.true. ++ if (nq4>0) then ++ call getrec(safe,myrank,stn) ! Ignore q4 comment line ++ ilin = ilin + 1 ++ do i = 1,nq4 ++ call getrec(safe,myrank,stn) ++ if (safe) then ++ call getword(q4label(1,i),record,8,lenrec) ++ call getword(q4label(2,i),record,8,lenrec) ++ q4cutoff(1,i)=dblstr(record,lenrec,idum) ++ q4cutoff(2,i)=dblstr(record,lenrec,idum) ++ q4scale(i)=dblstr(record,lenrec,idum) ++ q4nn(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (nq6>0) then ++ call getrec(safe,myrank,stn) ! Ignore q6 comment line ++ ilin = ilin + 1 ++ do i = 1,nq6 ++ call getrec(safe,myrank,stn) ++ if (safe) then ++ call getword(q6label(1,i),record,8,lenrec) ++ call getword(q6label(2,i),record,8,lenrec) ++ q6cutoff(1,i)=dblstr(record,lenrec,idum) ++ q6cutoff(2,i)=dblstr(record,lenrec,idum) ++ q6scale(i)=dblstr(record,lenrec,idum) ++ q6nn(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (onroot) close(unit=stn) ++ ++ call gisum(ierr(1),ilin-1,ierr(ilin)) ++ do i = 1,ilin-1 ++ if (ierr(i)/=0) then ++ call Mfrz_Error(2521,dble(i)) ++ end if ++ end do ++ ++c Create array indicating which site-site connections use ++c which set of q4 cut-offs, scaling factors and num neighbours. ++ ++ allocate(q4site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2517,0.d0) ++ q4site(:,:) = 0 ++ ++ do isite = 1,size(unqatm) ++ do jsite = isite,size(unqatm) ++ do iq = 1,nq4 ++ if ((q4label(1,iq)==unqatm(isite)).and. ++ x q4label(2,iq)==unqatm(jsite)) then ++ q4site(jsite,isite) = iq ++ q4site(isite,jsite) = iq ++ driven(jsite) = .true. ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ end do ++ ++ allocate(q6site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2518,0.d0) ++ q6site(:,:) = 0 ++ do isite = 1,size(unqatm) ++ do jsite = isite,size(unqatm) ++ do iq = 1,nq6 ++ if ((q6label(1,iq)==unqatm(isite)).and. ++ x q6label(2,iq)==unqatm(jsite)) then ++ q6site(jsite,isite) = iq ++ q6site(isite,jsite) = iq ++ driven(jsite) = .true. ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ end do ++ ++c Count number of included sites ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ q4ninc = 0 ++ q6ninc = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ isite = ltype(iatm) ++ ++ do iq = 1,nq4 ++ if (unqatm(isite)==q4label(1,iq)) q4ninc(iq) = q4ninc(iq) + 1 ++ end do ++ do iq = 1,nq6 ++ if (unqatm(isite)==q6label(1,iq)) q6ninc(iq) = q6ninc(iq) + 1 ++ end do ++ ++ end do ++ ++ if ( commsize > 0 ) then ++ if (nq4>0) call gisum(q4ninc,nq4,buff(1:nq4)) ++ if (nq6>0) call gisum(q6ninc,nq6,buff(1:nq6)) ++ end if ++ ++ deallocate(buff,stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) ++ ++ end if ! end if steinhardt order parameters ++ ++ if ( ltet ) then ++ ++ allocate(zetacutoff(1:2,1:ntet),stat=ierr(1)) ++ allocate(zeta_global(1:ntet),stat=ierr(2)) ++ allocate(zetascale(1:ntet),stat=ierr(3)) ++ allocate(zetalabel(1:ntet),stat=ierr(4)) ++ allocate(zetann(1:ntet),stat=ierr(5)) ++ allocate(zetaninc(1:ntet),stat=ierr(6)) ++ allocate(buff(1:ntet),stat=ierr(7)) ++ if (any(ierr/=0)) call Mfrz_Error(2522,0.d0) ++ ++c Open ZETA file and process ++ ++ if (onroot) then ++ open(unit=zta,file='ZETA',status='old',iostat=ierr(1)) ++ else ++ ierr(1)=0 ++ endif ++ call gisum(ierr(1),1,ierr(2)) ++ if ( ierr(1)/=0 ) call Mfrz_Error(2523,0.d0) ++ ++ ilin = 1 ++ safe=.true. ++ if (ntet>0) then ++ call getrec(safe,myrank,zta) ! Ignore comment line ++ ilin = ilin + 1 ++ do i = 1,ntet ++ read(unit=zta,fmt=*,iostat=ierr(ilin)) ++ x zetalabel(i),zetacutoff(:,i),zetascale(i),zetann(i) ++ call getrec(safe,myrank,zta) ++ if (safe) then ++ call getword(zetalabel(i),record,8,lenrec) ++ zetacutoff(1,i)=dblstr(record,lenrec,idum) ++ zetacutoff(2,i)=dblstr(record,lenrec,idum) ++ zetascale(i)=dblstr(record,lenrec,idum) ++ zetann(i)=intstr(record,lenrec,idum) ++ ierr(ilin)=0 ++ else ++ ierr(ilin)=1 ++ endif ++ ilin = ilin + 1 ++ end do ++ end if ++ if (onroot) close(unit=zta) ++ ++ call gisum(ierr(1),ilin-1,ierr(ilin)) ++ do i = 1,ilin-1 ++ if (ierr(i)/=0) then ++ call Mfrz_Error(2529,dble(i)) ++ end if ++ end do ++ ++c Create array indicating which site-site connections use ++c which set of q4 cut-offs, scaling factors and num neighbours. ++ ++ allocate(zetasite(1:size(unqatm)),stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2524,0.d0) ++ zetasite(:) = 0 ++ ++ do isite = 1,size(unqatm) ++ do iq = 1,ntet ++ if (zetalabel(iq)==unqatm(isite)) then ++ zetasite(isite) = iq ++ driven(isite) = .true. ++ end if ++ end do ++ end do ++ ++c Count number of included sites ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ zetaninc(:) = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ isite = ltype(iatm) ++ ++ do iq = 1,ntet ++ if (unqatm(isite)==zetalabel(iq)) ++ x zetaninc(iq) = zetaninc(iq) + 1 ++ end do ++ end do ++ ++ if (commsize>1) then ++ if (ntet>0) call gisum(zetaninc,ntet,buff) ++ end if ++ ++c$$$ do iq = 1,ntet ++c$$$ write(0,'("Number of sites for zeta type ",I5," : ",I5)') ++c$$$ x iq,zetaninc(iq) ++c$$$ end do ++ ++ mxninc = max(100,2*maxval(zetaninc)/commsize) ++ allocate(nflist(1:mxninc),stat=ierr(1)) ++ allocate(flist(1:mxflist,1:mxninc),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2525,0.d0) ++ ++ deallocate(buff,stat=ierr(1)) ++ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) ++ ++ end if ! end if tetrahedral order parameters ++ ++c Check total number of collective variables (ncolvar) matches total ++c number specified by nq4, nq6, ntet and potential energy flags. ++ ++ k = 0 ++ if (llocpe ) k = k + 1 ++ if (lglobpe ) k = k + 1 ++ k = k + ntet + nq4 + nq6 ++ if ( k /= ncolvar ) call Mfrz_Error(2527,0.d0) ++ ++c populate colvar_scale ++ ++ k = 1 ++ do iq = 1,nq4 ++ colvar_scale(k) = q4scale(iq) ++ k = k + 1 ++ end do ++ do iq = 1,nq6 ++ colvar_scale(k) = q6scale(iq) ++ k = k + 1 ++ end do ++ do iq = 1,ntet ++ colvar_scale(k) = zetascale(iq) ++ k = k + 1 ++ end do ++ if (lglobpe) then ++ colvar_scale(k) = globpe_scale ++ k = k + 1 ++ end if ++ if (llocpe) then ++ colvar_scale(k) = locpe_scale ++ k = k + 1 ++ end if ++ ++ ++c Convert into internal units ++ ++ wt_Dt = wt_Dt*temp*boltz ++ ref_W_aug = ref_W_aug*temp*boltz ++ kt = temp*boltz ++ ++c--------------------------------------------------------------------- ++c Purge the METADYNAMICS file or re-open and read if this is a ++c restart. N.B. we assume a restart if REVOLD if present and ++c ignore keyres. ++c--------------------------------------------------------------------- ++ ++ if (onroot) then ++ inquire(file='REVOLD',exist=lexist) ++ else ++ lexist=.true. ++ endif ++ call gstate(lexist) ++ ++ if (lexist) then ++ ++c read contents of METADYNAMICS file ++ ++ if (onroot) then ++ ++ open(unit=mtd,file='METADYNAMICS',status='old',iostat=ierr(1)) ++ ++ k = 0 ++ do ++ read(unit=mtd,fmt=*,end=10)meta_step,colvar(:),waug ++ waug = waug*temp*boltz ++ if (k == 0) then ++ n = (meta_step-1)/commsize + 1 ++ colvar_his(:,n)=colvar(:) ++ w_aug(n)=waug ++ else ++ dummy(1)=dble(meta_step) ++ call csend(17947,dummy,1,k,idum) ++ call csend(17948,colvar,ncolvar,k,ierr(3)) ++ dummy(1)=waug ++ call csend(17949,dummy,1,k,ierr(4)) ++ end if ++ ++ k = k + 1 ++ if (k == commsize) k = 0 ++ end do ++ ++ 10 close(unit=mtd) ++ ++ do k=1,commsize-1 ++ dummy(1)=-dble(meta_step) ++ call csend(17947,dummy,1,k,ierr(2)) ++ end do ++ ++ else ++ ++ go = .true. ++ do while(go) ++ ++ call crecv(17947,dummy,1) ++ meta_step=nint(dummy(1)) ++ ierr(2)=0 ++ ++ if ( meta_step < 0 ) then ++ meta_step = -meta_step ++ go = .false. ++ else ++ call crecv(17948,colvar,ncolvar) ++ ierr(3)=0 ++ call crecv(17949,dummy,1) ++ waug=dummy(1) ++ ierr(4)=0 ++ n = (meta_step-1)/commsize + 1 ++ colvar_his(:,n)=colvar(:) ++ w_aug(n)=waug ++ end if ++ ++ enddo ++ ++ end if ++ call gisum(ierr(1),4,ierr(5)) ++ do i=1,4 ++ if (ierr(i)/=0) call Mfrz_Error(2531,0.d0) ++ enddo ++ meta_step = meta_step + 1 ++ ++ else ++ ++c purge any existing METADYNAMICS file ++ ++ if (onroot) then ++ ++ open(unit=mtd,file='METADYNAMICS',status='replace', ++ x iostat=ierr(1)) ++ close(unit=mtd) ++ ++ end if ++ ++ end if ++ ++ return ++ ++ end Subroutine Define_Metadynamics ++ ++ Function Fc(r,inner_cut,outer_cut) ++ ++c--------------------------------------------------------------------- ++c ++c Computes the smooth cut-off function used when computing an order ++c parameter as a function of pair separation. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 ++ real(8),intent(in) :: r,inner_cut,outer_cut ++ real(8) :: fc ++ ++ if ( r > outer_cut ) then ++ fc = 0.0d0 ++ elseif ( r > inner_cut ) then ++ fc = 0.5d0*cos((r-inner_cut)*Pi/(outer_cut-inner_cut))+0.5d0 ++ elseif ( r <= inner_cut ) then ++ fc = 1.0d0 ++ else ++ call Mfrz_Error(2532,r) ++ end if ++ ++ return ++ ++ end Function Fc ++ ++ Function Dfc(r,inner_cut,outer_cut) ++ ++c--------------------------------------------------------------------- ++c Computes the derivative of the smooth cut-off function used when ++c computing an order parameter as a function of pair separation. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley ++c ++c--------------------------------------------------------------------- ++ ++ implicit none ++ ++ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 ++ real(8),intent(in) :: r,inner_cut,outer_cut ++ real(8) :: dfc ++ ++ if ( r > outer_cut ) then ++ dfc = 0.0d0 ++ elseif ( r > inner_cut ) then ++ dfc = -0.5d0*sin((r-inner_cut)*Pi/(outer_cut-inner_cut)) ++ x *Pi/(outer_cut-inner_cut) ++ else ++ dfc = 0.0d0 ++ end if ++ ++ return ++ ++ end Function Dfc ++ ++ subroutine compute_steinhardt(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c Computes nq4 Q4 and nq6 Q6 global order parameters. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use setup_module, only : mxlist ++ use utility_module, only : images ++ ++ implicit none ++ ++c Arguments ++ ++ integer,intent(in) :: imcon,natms ++ ++c sqrt(pi/13) , sqrt(pi/9) , 1/3 ++ ++ real(8),parameter :: rpibtt = 0.491590249d0 ++ real(8),parameter :: rpibn = 0.590817950d0 ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ ++c Prefactors for spherical harmonics with l = 6 ++ ++ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 ++ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 ++ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 ++ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 ++ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 ++ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 ++ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 ++ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 ++ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 ++ ++c Prefactors for spherical harmonics with l = 4 ++ ++ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 ++ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 ++ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 ++ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 ++ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 ++ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 ++ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 ++ ++c Maximum no. of entries in solvation list ++ ++ integer :: maxneigh ++ ++c Solvation shell information - Q4 ++ ++ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 ++ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 ++ integer,allocatable,dimension(:) :: solvlist4,solvtype4 ++ integer :: isolvmax4 ++ ++c Solvation shell information - Q6 ++ ++ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 ++ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 ++ integer,allocatable,dimension(:) :: solvlist6,solvtype6 ++ integer :: isolvmax6 ++ ++c separation vectors and powers thereof ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8) :: x,y,z ++ real(8) :: x2,y2,z2,x3,y3,z3 ++ real(8) :: x4,y4,z4,x5,y5,z5 ++ real(8) :: x6,y6,z6 ++ real(8) :: invrc,invrs ++ ++c Comms buffers ++ ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++c Temporaries ++ ++ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar ++ ++c Loop counters ++ ++ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv ++ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type ++ integer :: itype,jtype,l,m,iq ++ ++ maxneigh = 100 ! Max number of atoms in coordination shell ++ ++ ierr = 0 ! Error flags ++ ++ allocate(xdf(1:mxlist),stat=ierr(1)) ++ allocate(ydf(1:mxlist),stat=ierr(2)) ++ allocate(zdf(1:mxlist),stat=ierr(3)) ++ ++ allocate(solvx4(1:maxneigh),stat=ierr(4)) ++ allocate(solvy4(1:maxneigh),stat=ierr(5)) ++ allocate(solvz4(1:maxneigh),stat=ierr(6)) ++ allocate(solvrmag4(1:maxneigh),stat=ierr(7)) ++ allocate(solvimag4(1:maxneigh),stat=ierr(8)) ++ allocate(solvrsq4 (1:maxneigh),stat=ierr(9)) ++ allocate(solvlist4(1:maxneigh),stat=ierr(10)) ++ allocate(solvtype4(1:maxneigh),stat=ierr(11)) ++ ++ allocate(solvx6(1:maxneigh),stat=ierr(12)) ++ allocate(solvy6(1:maxneigh),stat=ierr(13)) ++ allocate(solvz6(1:maxneigh),stat=ierr(14)) ++ allocate(solvrmag6(1:maxneigh),stat=ierr(15)) ++ allocate(solvimag6(1:maxneigh),stat=ierr(16)) ++ allocate(solvrsq6 (1:maxneigh),stat=ierr(17)) ++ allocate(solvlist6(1:maxneigh),stat=ierr(18)) ++ allocate(solvtype6(1:maxneigh),stat=ierr(19)) ++ if (any(ierr/=0)) call Mfrz_Error(2533,0.d0) ++ ++ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) ++ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) ++ ++c Zero accumulators used in Steinhardt order parameters ++ ++ ReQ6bar = 0.0d0 ++ ImQ6bar = 0.0d0 ++ ReQ4bar = 0.0d0 ++ ImQ4bar = 0.0d0 ++ ++c Set atoms looped over by current rank ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++c -------------------------------------------------------------- ++c Build a list of the required connections to iatm. This ++c differs depending on the version of DLPOLY we are using. ++c Note that excluded pairs will NOT have connections ++c computed and are therefore not included in computation ++c of these order parameters. ++c--------------------------------------------------------------- ++ ++ ii = ii + 1 ++ isite=ltype(iatm) ++ limit=lentry(ii) ++ nn = 0 ++ do k = 1,limit ++ ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ nn = 0 ++ isolvmax4 = 0 ++ isolvmax6 = 0 ++ isolv4 = 0 ++ isolv6 = 0 ++ do k = 1,limit ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ q4type = q4site(jsite,isite) ++ q6type = q6site(jsite,isite) ++ ++ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) ++ ++ if (nq4>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q4cutoff(2,q4type)**2 ) then ++ isolv4 = isolv4 + 1 ++ solvlist4(isolv4) = jatm ++ solvrsq4(isolv4) = tmpsq ++ solvrmag4(isolv4) = sqrt(tmpsq) ++ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) ++ solvx4(isolv4) = xdf(nn) ++ solvy4(isolv4) = ydf(nn) ++ solvz4(isolv4) = zdf(nn) ++ solvtype4(isolv4) = q4type ++ end if ++ end if ++ ++ if (nq6>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q6cutoff(2,q6type)**2 ) then ++ isolv6 = isolv6 + 1 ++ solvlist6(isolv6) = jatm ++ solvrsq6(isolv6) = tmpsq ++ solvrmag6(isolv6) = sqrt(tmpsq) ++ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) ++ solvx6(isolv6) = xdf(nn) ++ solvy6(isolv6) = ydf(nn) ++ solvz6(isolv6) = zdf(nn) ++ solvtype6(isolv6) = q6type ++ end if ++ end if ++ isolvmax4 = isolv4 ++ isolvmax6 = isolv6 ++ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) ++ x call Mfrz_Error(2535,0.d0) ++ ++ end do ! end loop over k ++ ++c--------------------------------------------------------- ++c Compute Q4 Steinhardt order parameters ++c--------------------------------------------------------- ++ ++ if ( (nq4>0).and.isolvmax4>0 ) then ++ ++ do isolv4 = 1,isolvmax4 ++ ++ jatm = solvlist4(isolv4) ++ itype = solvtype4(isolv4) ++ ++ invrc = solvimag4(isolv4)**6 ++ invrs = solvimag4(isolv4)**4 ++ ++ x = solvx4(isolv4) ++ y = solvy4(isolv4) ++ z = solvz4(isolv4) ++ ++ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) ++ ++ ReQ4bar(-4,itype) = ReQ4bar(-4,itype) + f_ij*ReYlm ++ ImQ4bar(-4,itype) = ImQ4bar(-4,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-3) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) ++ ++ ReQ4bar(-3,itype) = ReQ4bar(-3,itype) + f_ij*ReYlm ++ ImQ4bar(-3,itype) = ImQ4bar(-3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-2) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++ ReQ4bar(-2,itype) = ReQ4bar(-2,itype) + f_ij*ReYlm ++ ImQ4bar(-2,itype) = ImQ4bar(-2,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(-1) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ ++ ReQ4bar(-1,itype) = ReQ4bar(-1,itype) + f_ij*ReYlm ++ ImQ4bar(-1,itype) = ImQ4bar(-1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(0) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ ReQ4bar(0,itype) = ReQ4bar(0,itype) + f_ij*ReYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(1) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4p1*invrs*z*(-4.d0*z2+3.d0*x2+3.0d0*y2)*x ++ ImYlm = -ypre4p1*invrs*z*(-4.d0*z2+3.d0*x2+3.0d0*y2)*y ++ ++ ReQ4bar(+1,itype) = ReQ4bar(+1,itype) + f_ij*ReYlm ++ ImQ4bar(+1,itype) = ImQ4bar(+1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(2) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre4p2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = -ypre4p2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++ ReQ4bar(+2,itype) = ReQ4bar(+2,itype) + f_ij*ReYlm ++ ImQ4bar(+2,itype) = ImQ4bar(+2,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(3) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4p3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = ypre4p3*invrs*z*(3.d0*x2*y-y3) ++ ++ ReQ4bar(+3,itype) = ReQ4bar(+3,itype) + f_ij*ReYlm ++ ImQ4bar(+3,itype) = ImQ4bar(+3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary contribution to Q4bar(4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre4p4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre4p4*invrs*(4.d0*x3*y-4.d0*x*y3) ++ ++ ReQ4bar(+4,itype) = ReQ4bar(+4,itype) + f_ij*ReYlm ++ ImQ4bar(+4,itype) = ImQ4bar(+4,itype) + f_ij*ImYlm ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end if computing Q4 ++ ++c------------------------------------------------ ++c Compute Q6 Steinhardt order parameters ++c------------------------------------------------ ++ ++ if ( (nq6>0).and.isolvmax6>0 ) then ++ ++ do isolv6 = 1,isolvmax6 ++ ++ jatm = solvlist6(isolv6) ++ itype = solvtype6(isolv6) ++ ++ invrc = solvimag6(isolv6)**6 ++ invrs = solvimag6(isolv6)**4 ++ ++ x = solvx6(isolv6) ++ y = solvy6(isolv6) ++ z = solvz6(isolv6) ++ ++ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-6) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) ++ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0*x*y5) ++ ++ ReQ6bar(-6,itype) = ReQ6bar(-6,itype) + f_ij*ReYlm ++ ImQ6bar(-6,itype) = ImQ6bar(-6,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-5) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) ++ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) ++ ++ ReQ6bar(-5,itype) = ReQ6bar(-5,itype) + f_ij*ReYlm ++ ImQ6bar(-5,itype) = ImQ6bar(-5,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) ++ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y- ++ x 4.0d0*x*y3) ++ ++ ReQ6bar(-4,itype) = ReQ6bar(-4,itype) + f_ij*ReYlm ++ ImQ6bar(-4,itype) = ImQ6bar(-4,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-3) ++c---------------------------------------------------------- ++ ++ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (-x3+3.0d0*x*y2) ++ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (3.0d0*x2*y-y3) ++ ++ ReQ6bar(-3,itype) = ReQ6bar(-3,itype) + f_ij*ReYlm ++ ImQ6bar(-3,itype) = ImQ6bar(-3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-2) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2*y2+ ++ x x4+2.0d0*x2*y2+y4)*(x2-y2) ++ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2-16.0d0* ++ x z2*y2+x4+2.0d0*x2*y2+y4)*x*y ++ ++ ReQ6bar(-2,itype) = ReQ6bar(-2,itype) + f_ij*ReYlm ++ ImQ6bar(-2,itype) = ImQ6bar(-2,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(-1) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++ ReQ6bar(-1,itype) = ReQ6bar(-1,itype) + f_ij*ReYlm ++ ImQ6bar(-1,itype) = ImQ6bar(-1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(0) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0*z4* ++ x y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4-5.0d0 ++ x *x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) ++ ++ ReQ6bar(0,itype) = ReQ6bar(0,itype) + f_ij*ReYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(1) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ ++ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++ ReQ6bar(1,itype) = ReQ6bar(1,itype) + f_ij*ReYlm ++ ImQ6bar(1,itype) = ImQ6bar(1,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(2) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0*z2*y2+ ++ x x4+2.d0*x2*y2+y4)*(x2-y2) ++ ImYlm = 2.d0*ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0*z2*y2+ ++ x x4+2.d0*x2*y2+y4)*x*y ++ ++ ReQ6bar(2,itype) = ReQ6bar(2,itype) + f_ij*ReYlm ++ ImQ6bar(2,itype) = ImQ6bar(2,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(3) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* ++ x (x3-3.d0*x*y2) ++ ImYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* ++ x (3.d0*x2*y-y3) ++ ++ ReQ6bar(3,itype) = ReQ6bar(3,itype) + f_ij*ReYlm ++ ImQ6bar(3,itype) = ImQ6bar(3,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(4) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(4.d0*x3*y-4.d0*x*y3) ++ ++ ReQ6bar(4,itype) = ReQ6bar(4,itype) + f_ij*ReYlm ++ ImQ6bar(4,itype) = ImQ6bar(4,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(5) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p5*invrc*z*(x5-10.d0*x3*y2+5.d0*x*y4) ++ ImYlm = ypre6p5*invrc*z*(5.d0*x4*y-10.d0*x2*y3+y5) ++ ++ ReQ6bar(5,itype) = ReQ6bar(5,itype) + f_ij*ReYlm ++ ImQ6bar(5,itype) = ImQ6bar(5,itype) + f_ij*ImYlm ++ ++c---------------------------------------------------------- ++c Real and imaginary conribution to Q6bar(6) ++c---------------------------------------------------------- ++ ++ ReYlm = ypre6p6*invrc*(x6-15.d0*x4*y2+15.d0*x2*y4-y6) ++ ImYlm = ypre6p6*invrc*(6.d0*x5*y-20.d0*x3*y3+6.d0*x*y5) ++ ++ ReQ6bar(6,itype) = ReQ6bar(6,itype) + f_ij*ReYlm ++ ImQ6bar(6,itype) = ImQ6bar(6,itype) + f_ij*ImYlm ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end if computing Q6 ++ ++ end do ! end loop over iatm ++ ++c----------------------------------------------- ++c Global summation of order parameters ++c----------------------------------------------- ++ ++ l = 1 ++ do itype = 1,nq4 ++ do m = -4,4 ++ buff1(l) = ReQ4bar(m,itype) ++ l = l + 1 ++ end do ++ do m = -4,4 ++ buff1(l) = ImQ4bar(m,itype) ++ l = l + 1 ++ end do ++ end do ++ do itype = 1,nq6 ++ do m = -6,6 ++ buff1(l) = ReQ6bar(m,itype) ++ l = l + 1 ++ end do ++ do m = -6,6 ++ buff1(l) = ImQ6bar(m,itype) ++ l = l + 1 ++ end do ++ end do ++ ++ if (commsize>1) call gdsum(buff1,18*nq4+26*nq6,buff2) ++ ++ l = 1 ++ do itype = 1,nq4 ++ do m = -4,4 ++ ReQ4bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ do m = -4,4 ++ ImQ4bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ end do ++ do itype = 1,nq6 ++ do m = -6,6 ++ ReQ6bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ do m = -6,6 ++ ImQ6bar(m,itype) = buff1(l) ++ l = l + 1 ++ end do ++ end do ++ ++c--------------------------------------------------- ++c Final computation of global order parameters ++c--------------------------------------------------- ++ ++ l = 1 ++ do iq = 1,nq4 ++ tmpvar = 0.0d0 ++ do m = 1,18 ++ tmpvar = tmpvar + buff1(l)**2 ++ l = l + 1 ++ end do ++ q4_global(iq) = 4.0d0*rpibn*sqrt(tmpvar)/ ++ x dble(q4ninc(iq)*q4nn(iq)) ++ end do ++ ++ do iq = 1,nq6 ++ tmpvar = 0.0d0 ++ do m = 1,26 ++ tmpvar = tmpvar + buff1(l)**2 ++ l = l + 1 ++ end do ++ q6_global(iq) = 4.0d0*rpibtt*sqrt(tmpvar)/ ++ x dble(q6ninc(iq)*q6nn(iq)) ++ end do ++ ++c Tidy up ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ ++ deallocate(solvx4,stat=ierr(4)) ++ deallocate(solvy4,stat=ierr(5)) ++ deallocate(solvz4,stat=ierr(6)) ++ deallocate(solvrmag4,stat=ierr(7)) ++ deallocate(solvimag4,stat=ierr(8)) ++ deallocate(solvrsq4 ,stat=ierr(9)) ++ deallocate(solvlist4,stat=ierr(10)) ++ deallocate(solvtype4,stat=ierr(11)) ++ ++ deallocate(solvx6,stat=ierr(12)) ++ deallocate(solvy6,stat=ierr(13)) ++ deallocate(solvz6,stat=ierr(14)) ++ deallocate(solvrmag6,stat=ierr(15)) ++ deallocate(solvimag6,stat=ierr(16)) ++ deallocate(solvrsq6 ,stat=ierr(17)) ++ deallocate(solvlist6,stat=ierr(18)) ++ deallocate(solvtype6,stat=ierr(19)) ++ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) ++ ++ deallocate(buff1,stat=ierr(1)) ++ deallocate(buff2,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Steinhardt ++ ++ Subroutine Compute_Steinhardt_Forces(imcon,natms,engord,virord) ++ ++c--------------------------------------------------------------------- ++c ++c Computes forces from nq4 Q4 and nq6 Q6 global order parameters. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use setup_module, only : mxlist ++ use utility_module, only : images ++ implicit none ++ ++c Arguments ++ ++ integer,intent(in) :: imcon,natms ++ ++ real(8),intent(inout) :: engord,virord ++ ++c sqrt(pi/13) , sqrt(pi/9) , 1/3 ++ ++ real(8),parameter :: rpibtt = 0.491590249d0 ++ real(8),parameter :: rpibn = 0.590817950d0 ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ ++c Prefactors for spherical harmonics with l = 6 ++ ++ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 ++ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 ++ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 ++ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 ++ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 ++ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 ++ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 ++ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 ++ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 ++ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 ++ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 ++ ++c Prefactors for speherical harmonics with l = 4 ++ ++ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 ++ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 ++ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 ++ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 ++ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 ++ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 ++ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 ++ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 ++ ++c Maximum no. of entries in solvation list ++ ++ integer :: maxneigh ++ ++c Solvation shell information - Q4 ++ ++ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 ++ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 ++ integer,allocatable,dimension(:) :: solvlist4,solvtype4 ++ integer :: isolvmax4 ++ ++c Solvation shell information - Q6 ++ ++ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 ++ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 ++ integer,allocatable,dimension(:) :: solvlist6,solvtype6 ++ integer :: isolvmax6 ++ ++c Prefactors arising from derivative of bias potential ++ ++ real(8),allocatable,dimension(:) :: q4prefactor,q6prefactor ++ ++c Separation vectors and powers thereof ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8) :: x,y,z ++ real(8) :: x2,y2,z2,x3,y3,z3 ++ real(8) :: x4,y4,z4,x5,y5,z5 ++ real(8) :: x6,y6,z6 ++ real(8) :: invrc,invrs,invrq ++ ++c Comms buffers ++ ++ real(8),allocatable,dimension(:) :: buff1,buff2 ++ ++c Temporaries ++ ++ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar,invrN ++ real(8) :: fx,fy,fz,fx2,fy2,fz2,prefactor2,fx1,fy1,fz1 ++ real(8) :: strs1,strs2,strs3,strs4,strs5,strs6,strs7,strs8,strs9 ++ ++ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv ++ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type ++ integer :: itype,jtype,l,m,iq ++ ++ maxneigh = 500 ! Max number of atoms in coordination shell ++ ++ ierr = 0 ! Error flags ++ ++ allocate(xdf(1:mxlist),stat=ierr(1)) ++ allocate(ydf(1:mxlist),stat=ierr(2)) ++ allocate(zdf(1:mxlist),stat=ierr(3)) ++ ++ allocate(solvx4(1:maxneigh),stat=ierr(4)) ++ allocate(solvy4(1:maxneigh),stat=ierr(5)) ++ allocate(solvz4(1:maxneigh),stat=ierr(6)) ++ allocate(solvrmag4(1:maxneigh),stat=ierr(7)) ++ allocate(solvimag4(1:maxneigh),stat=ierr(8)) ++ allocate(solvrsq4 (1:maxneigh),stat=ierr(9)) ++ allocate(solvlist4(1:maxneigh),stat=ierr(10)) ++ allocate(solvtype4(1:maxneigh),stat=ierr(11)) ++ ++ allocate(solvx6(1:maxneigh),stat=ierr(12)) ++ allocate(solvy6(1:maxneigh),stat=ierr(13)) ++ allocate(solvz6(1:maxneigh),stat=ierr(14)) ++ allocate(solvrmag6(1:maxneigh),stat=ierr(15)) ++ allocate(solvimag6(1:maxneigh),stat=ierr(16)) ++ allocate(solvrsq6 (1:maxneigh),stat=ierr(17)) ++ allocate(solvlist6(1:maxneigh),stat=ierr(18)) ++ allocate(solvtype6(1:maxneigh),stat=ierr(19)) ++ if (any(ierr/=0)) call Mfrz_Error(2538,0.d0) ++ ++ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) ++ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) ++ ++ allocate(q4prefactor(1:nq4),stat=ierr(1)) ++ allocate(q6prefactor(1:nq6),stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) ++ ++c Compute the prefactors associated from dV_aug/d_q4 ++ ++ k = 1 ++ do iq = 1,nq4 ++ invrN = 1.0d0/dble(q4ninc(iq)*q4nn(iq)) ++ q4prefactor(iq) = -16.0d0*(rpibn**2)*(invrN**2)*dcolvar(k)/ ++ x Q4_global(iq) ++ k = k + 1 ++ end do ++ ++c Compute the prefactors associated from dV_aug/d_q6 ++ ++ do iq = 1,nq6 ++ invrN = 1.0d0/dble(q6ninc(iq)*q6nn(iq)) ++ q6prefactor(iq) = -16.0d0*(rpibtt**2)*(invrN**2)*dcolvar(k)/ ++ x Q6_global(iq) ++ k = k + 1 ++ end do ++ ++c Set atoms looper over by current rank ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ strs1 = 0.0d0 ++ strs2 = 0.0d0 ++ strs3 = 0.0d0 ++ strs4 = 0.0d0 ++ strs5 = 0.0d0 ++ strs6 = 0.0d0 ++ strs7 = 0.0d0 ++ strs8 = 0.0d0 ++ strs9 = 0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++c--------------------------------------------------------------- ++c Build a list of the required connections to iatm. This ++c differs depending on the version of DLPOLY we are using. ++c Note that excluded pairs will NOT have connections ++c computed. ++c--------------------------------------------------------------- ++ ++ ii = ii + 1 ++ isite=ltype(iatm) ++ limit=lentry(ii) ++ ++ nn = 0 ++ do k = 1,limit ++ ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ xdf(nn)=xxx(jatm)-xxx(iatm) ++ ydf(nn)=yyy(jatm)-yyy(iatm) ++ zdf(nn)=zzz(jatm)-zzz(iatm) ++ ++ end do ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ nn = 0 ++ isolvmax4 = 0 ++ isolvmax6 = 0 ++ isolv4 = 0 ++ isolv6 = 0 ++ do k = 1,limit ++ jatm = list(ii,k) ++ jsite = ltype(jatm) ++ ++ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle ++ ++ nn = nn + 1 ++ ++ q4type = q4site(jsite,isite) ++ q6type = q6site(jsite,isite) ++ ++ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) ++ if (nq4>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q4cutoff(2,q4type)**2 ) then ++ isolv4 = isolv4 + 1 ++ solvlist4(isolv4) = jatm ++ solvrsq4(isolv4) = tmpsq ++ solvrmag4(isolv4) = sqrt(tmpsq) ++ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) ++ solvx4(isolv4) = xdf(nn) ++ solvy4(isolv4) = ydf(nn) ++ solvz4(isolv4) = zdf(nn) ++ solvtype4(isolv4) = q4type ++ end if ++ end if ++ ++ if (nq6>0) then ++ ++c Add to solvation lists if within cut-off ++ ++ if ( tmpsq < q6cutoff(2,q6type)**2 ) then ++ isolv6 = isolv6 + 1 ++ solvlist6(isolv6) = jatm ++ solvrsq6(isolv6) = tmpsq ++ solvrmag6(isolv6) = sqrt(tmpsq) ++ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) ++ solvx6(isolv6) = xdf(nn) ++ solvy6(isolv6) = ydf(nn) ++ solvz6(isolv6) = zdf(nn) ++ solvtype6(isolv6) = q6type ++ end if ++ end if ++ isolvmax4 = isolv4 ++ isolvmax6 = isolv6 ++ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) ++ x call Mfrz_Error(2535,0.d0) ++ ++ end do ! end loop over k ++ ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++c Compute forces arising from Q4 order parameters ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++ ++ if ( (nq4>0).and.isolvmax4>0 ) then ++ ++ do isolv4 = 1,isolvmax4 ++ ++ jatm = solvlist4(isolv4) ++ itype = solvtype4(isolv4) ++ ++ invrc = solvimag4(isolv4)**6 ++ invrq = solvimag4(isolv4)**8 ++ invrs = solvimag4(isolv4)**4 ++ ++ x = solvx4(isolv4) ++ y = solvy4(isolv4) ++ z = solvz4(isolv4) ++ ++ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ df_ij = dfc(solvrmag4(isolv4),q4cutoff(1,itype), ++ x q4cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++ fx = 0.0d0 ++ fy = 0.0d0 ++ fz = 0.0d0 ++ ++c------------------------------------- ++c Gradient of f_ij w.r.t. r_{j} ++c------------------------------------- ++ ++ fx2 = df_ij*x*solvimag4(isolv4) ++ fy2 = df_ij*y*solvimag4(isolv4) ++ fz2 = df_ij*z*solvimag4(isolv4) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -4 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -4 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{4,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrc*ypre4m4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- ++ x 3.d0*z2*y2) ++ fy1 = -invrc*ypre4m4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* ++ x z2*x2-z2*y2) ++ fz1 = -invrc*ypre4m4*4.d0*z*(x4-6.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -4 (imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(-4,itype) ++ ++c---------------------------------------------- ++c Gradient of Im(Y_{4,-4}) w.r.t r_{j} ++c---------------------------------------------- ++ ++ fx1 = invrc*ypre4m4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ ++ x y4+z2*y2) ++ fy1 = -invrc*ypre4m4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- ++ x 3.d0*z2*y2) ++ fz1 = invrc*ypre4m4*16.d0*x*y*z*(x2-y2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -3 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(-3,itype) ++ ++c--------------------------------------------- ++c Gradient of Re(Y_{4,-3}) w.r.t r_{j} ++c--------------------------------------------- ++ ++ fx1 = -invrc*ypre4m3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+ ++ x 3.d0*y4+3.d0*z2*y2) ++ fy1 = -invrc*ypre4m3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+ ++ x 3.d0*z2) ++ fz1 = invrc*ypre4m3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -3 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(-3,itype) ++ ++c-------------------------------------------------- ++c Gradient of Im(Y_{4,-3}) w.r.t r_{j} ++c-------------------------------------------------- ++ ++ fx1 = invrc*ypre4m3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) ++ fy1 = -invrc*ypre4m3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 ++ x -3.d0*z2*y2) ++ fz1 = -invrc*ypre4m3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -2 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(-2,itype) ++ ++c--------------------------------------------- ++c Gradient of Re(Y_{4,-2}) w.r.t r_{j} ++c--------------------------------------------- ++ ++ fx1 = -invrc*ypre4m2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fy1 = invrc*ypre4m2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fz1 = invrc*ypre4m2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- ++ x 3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -2 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(-2,itype) ++ ++c----------------------------------------- ++c Gradient of Im(Y_{4,-2}) w.r.t r_{j} ++c----------------------------------------- ++ ++ fx1 = -invrc*ypre4m2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ ++ x 6.d0*z4-y4) ++ fy1 = invrc*ypre4m2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 ++ x -6.d0*z4+x4) ++ fz1 = -invrc*ypre4m2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -1 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(-1,itype) ++ ++c---------------------------------------- ++c Gradient of Re(Y_{4,-1}) w.r.t r_{j} ++c---------------------------------------- ++ ++ fx1 = invrc*ypre4m1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- ++ x 3.d0*y4) ++ fy1 = invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fz1 = -invrc*ypre4m1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -1 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fy1 = invrc*ypre4m1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4+ ++ x 3.d0*x4) ++ fz1 = invrc*ypre4m1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real spherical harmonics for m = 0 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++c-------------------------------------------------- ++c Force contributions from m = 0 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(0,itype) ++ ++c------------------------------------------- ++c Gradient of Re(Y_{4,0}) w.r.t r_{j} ++c------------------------------------------- ++ ++ fx1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ fy1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ fz1 = -20.d0*ypre4m0*invrc*z*(-4.d0*z2*x2-4.d0*z2*y2+3.d0* ++ x x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +1 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x ++ ImYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = +1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(+1,itype) ++ ++c------------------------------------------- ++c Gradient of Re(Y_{4,+1}) w.r.t r_{j} ++c------------------------------------------- ++ ++ fx1 = invrc*ypre4p1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- ++ x 3.d0*y4) ++ fy1 = invrc*ypre4p1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fz1 = -invrc*ypre4p1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------ ++c Force contributions from m = +1 (imaginary part) ++c------------------------------------------------------ ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(+1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,+1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrc*ypre4p1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) ++ fy1 = -invrc*ypre4p1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4 ++ x +3.d0*x4) ++ fz1 = -invrc*ypre4p1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ ++ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = 2 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre4p2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) ++ ImYlm = -ypre4p2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = 2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(+2,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{4,+2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4p2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fy1 = invrc*ypre4p2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- ++ x 3.d0*z4+x2*y2) ++ fz1 = invrc*ypre4p2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- ++ x 3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = 2 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(+2,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,+2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrc*ypre4p2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ ++ x 6.d0*z4-y4) ++ fy1 = -invrc*ypre4p2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 ++ x -6.d0*z4+x4) ++ fz1 = invrc*ypre4p2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = 3 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre4p3*invrs*z*(x3-3.d0*x*y2) ++ ImYlm = -ypre4p3*invrs*z*(-3.d0*x2*y+y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = +3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(+3,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{4,+3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4p3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+3.d0*y4 ++ x +3.d0*z2*y2) ++ fy1 = -invrc*ypre4p3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+3.d0*z2) ++ fz1 = invrc*ypre4p3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = +3 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(+3,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,+3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4p3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) ++ fy1 = invrc*ypre4p3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 ++ x -3.d0*z2*y2) ++ fz1 = invrc*ypre4p3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +4 ++c------------------------------------------------------------- ++ ++ ReYlm = ypre4p4*invrs*(x4-6.d0*x2*y2+y4) ++ ImYlm = -ypre4p4*invrs*(-4.d0*x3*y+4.d0*x*y3) ++ ++c------------------------------------------------------- ++c Force contributions from m = +4 (real part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ReQ4bar(+4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{4,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrc*ypre4p4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- ++ x 3.d0*z2*y2) ++ fy1 = -invrc*ypre4p4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* ++ x z2*x2-z2*y2) ++ fz1 = -invrc*ypre4p4*4.d0*z*(x4-6.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c------------------------------------------------------- ++c Force contributions from m = -4 (imaginary part) ++c------------------------------------------------------- ++ ++ prefactor2 = q4prefactor(itype)*ImQ4bar(+4,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{4,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrc*ypre4p4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ ++ x y4+z2*y2) ++ fy1 = invrc*ypre4p4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- ++ x 3.d0*z2*y2) ++ fz1 = -invrc*ypre4p4*16.d0*x*y*z*(x2-y2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c Add into global force and stress arrays ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++c Virial ++ ++ virord = virord - (fx*x + fy*y + fz*z) ++ ++c Stress ++ ++ strs1=strs1+x*fx ++ strs2=strs2+x*fy ++ strs3=strs3+x*fz ++ strs5=strs5+y*fy ++ strs6=strs6+y*fz ++ strs9=strs9+z*fz ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end of computing Q4 ++ ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++c Compute forces arising from Q6 order parameters ++c--------------------------------------------------------- ++c--------------------------------------------------------- ++ ++ if ( (nq6>0).and.isolvmax6>0 ) then ++ ++ do isolv6 = 1,isolvmax6 ++ ++ jatm = solvlist6(isolv6) ++ itype = solvtype6(isolv6) ++ ++ invrc = solvimag6(isolv6)**6 ++ invrq = solvimag6(isolv6)**8 ++ invrs = solvimag6(isolv6)**4 ++ ++ x = solvx6(isolv6) ++ y = solvy6(isolv6) ++ z = solvz6(isolv6) ++ ++ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ df_ij = dfc(solvrmag6(isolv6),q6cutoff(1,itype), ++ x q6cutoff(2,itype)) ++ ++ x2 = x*x ++ y2 = y*y ++ z2 = z*z ++ ++ x3 = x2*x ++ y3 = y2*y ++ z3 = z2*z ++ ++ x4 = x2*x2 ++ y4 = y2*y2 ++ z4 = z2*z2 ++ ++ x5 = x4*x ++ y5 = y4*y ++ z5 = z4*z ++ ++ x6 = x4*x2 ++ y6 = y4*y2 ++ z6 = z4*z2 ++ ++ fx = 0.0d0 ++ fy = 0.0d0 ++ fz = 0.0d0 ++ ++c---------------------------------------- ++c Gradient of f_ij w.r.t. r_{j} ++c---------------------------------------- ++ ++ fx2 = df_ij*x*solvimag6(isolv6) ++ fy2 = df_ij*y*solvimag6(isolv6) ++ fz2 = df_ij*z*solvimag6(isolv6) ++ ++c----------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -6 ++c----------------------------------------------------------- ++ ++ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) ++ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0* ++ x x*y5) ++ ++c----------------------------------------------------- ++c Force contributions from m = -6 (real part) ++c----------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-6,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrq*ypre6m6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ ++ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fy1 = -invrq*ypre6m6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+6.0d0 ++ x *x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2-z2*y4) ++ fz1 = -invrq*ypre6m6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2* ++ x y4-y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c---------------------------------------------------------- ++c Force contributions from m = -6 (Imaginary part) ++c---------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-6,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -invrq*ypre6m6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0*x2* ++ x y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) ++ fy1 = -invrq*ypre6m6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2*y4- ++ x y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = invrq*ypre6m6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2*y2+ ++ x 3.0d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c--------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -5 ++c--------------------------------------------------------- ++ ++ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) ++ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) ++ ++c-------------------------------------------------- ++c Force contributions from m = -5 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-5,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6m5*invrq*z*(-x6+35.0d0*x4*y2-55.d0*x2*y4+ ++ x 5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) ++ fy1 = -2.0d0*ypre6m5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2 ++ x *y2+5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fz1 = -ypre6m5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -5 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-5,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.0d0*ypre6m5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2 ++ x -13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fy1 = -ypre6m5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4-y6+ ++ x 5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = ypre6m5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -4 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) ++ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y-4.0d0* ++ x x*y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -4 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.0d0*ypre6m4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ ++ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4* ++ x x2-60.0d0*z4*y2) ++ fy1 =-2.0d0*ypre6m4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 ++ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- ++ x 20.0d0*z4*y2) ++ fz1 =-2.0d0*ypre6m4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0 ++ x *x2-13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -4 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-4,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.0d0*ypre6m4*invrq*y*(x4-6.0d0*x2*y2+y4)*(-13.0d0 ++ x *x2-13.0d0*y2+20.0d0*z2) ++ fy1 = -4.0d0*ypre6m4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 ++ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 ++ x *y2-x6+5.0d0*x2*y4) ++ fz1 = 8.0d0*ypre6m4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- ++ x 13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -3 ++c-------------------------------------------------------- ++ ++ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (-x3+3.0d0*x*y2) ++ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* ++ x (3.0d0*x2*y-y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = -3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-3,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 3.d0*ypre6m3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- ++ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- ++ x 8.d0*z4*y2+3.d0*y6) ++ fy1 = -6.d0*ypre6m3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+14.d0 ++ x *z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) ++ fz1 = -3.d0*ypre6m3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -3 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-3,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -6.d0*ypre6m3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 ++ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) ++ fy1 = -3.d0*ypre6m3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 ++ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 ++ x *z4*y2-3.d0*x6) ++ fz1 = 3.d0*ypre6m3*invrq*z*(3.d0*x2-y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -2 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2 ++ x *y2+x4+2.0d0*x2*y2+y4)*(x2-y2) ++ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2- ++ x 16.0d0*z2*y2+x4+2.0d0*x2*y2+y4)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-2,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6m2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- ++ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ ++ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) ++ fy1 = -2.d0*ypre6m2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ ++ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0* ++ x x2*y4+16.d0*z6-30.d0*z2*x2*y2) ++ fz1 = -2.d0*ypre6m2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 ++ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -2 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-2,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.d0*ypre6m2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2* ++ x y2-128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0* ++ x z2*y4+y6) ++ fy1 = -2.d0*ypre6m2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2* ++ x y4-128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0* ++ x z2*x4+x6) ++ fz1 = 4.d0*ypre6m2*invrq*z*x*y*(-64.d0*z2*x2-64.d0* ++ x z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = -1 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 ++ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 ++ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = -1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6m1*invrq*z*(85.d0*x2*x4+70.d0*z2*x2*y2 ++ x -100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0 ++ x *z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) ++ fy1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2* ++ x y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fz1 = -ypre6m1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ ++ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- ++ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = -1 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(-1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,-1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0* ++ x z2*y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fy1 = -ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2 ++ x *y4-100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6 ++ x -12.d0*z4*x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) ++ fz1 = ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4 ++ x *y2+8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0* ++ x z2*y4-5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real spherical harmonics for m = 0 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0 ++ x *z4*y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4 ++ x -5.0d0*x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) ++ ++c-------------------------------------------------- ++c Force contributions from m = 0 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(0,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,0}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 ++ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*x ++ fy1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 ++ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y2)*y ++ fz1 = 42.d0*ypre6m0*invrq*z*(8.d0*z4*x2+8.d0*z4*y2-20.d0 ++ x *z2*x4-40.d0*z2*x2*y2-20.d0*z2*y4+5.d0*x6+15.d0*x4* ++ x y2+15.d0*x2*y4+5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +1 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0 ++ x *z2*y2+5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x ++ ImYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0 ++ x *z2*y2+5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y ++ ++c-------------------------------------------------- ++c Force contributions from m = +1 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(1,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6p1*invrq*z*(85.d0*x2*x4+70.d0*z2*x2*y2- ++ x 100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0* ++ x z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) ++ fy1 = -2.d0*ypre6p1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2*y2 ++ x +44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fz1 = -ypre6p1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ ++ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- ++ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 1 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(1,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,1}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2*y2+ ++ x 44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) ++ fy1 = ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2*y4- ++ x 100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6-12.d0*z4 ++ x *x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) ++ fz1 = -ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4*y2+ ++ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- ++ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +2 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0* ++ x z2*y2+x4+2.d0*x2*y2+y4)*(x2-y2) ++ ImYlm = 2.d0*ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0* ++ x z2*y2+x4+2.d0*x2*y2+y4)*x*y ++ ++c-------------------------------------------------- ++c Force contributions from m = +2 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(2,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6p2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- ++ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ ++ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) ++ fy1 = -2.d0*ypre6p2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ ++ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0 ++ x *x2*y4+16.d0*z6-30.d0*z2*x2*y2) ++ fz1 = -2.d0*ypre6p2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 ++ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 2 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(2,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,2}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.d0*ypre6p2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2*y2- ++ x 128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0*z2*y4+y6) ++ fy1 = 2.d0*ypre6p2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2*y4- ++ x 128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0*z2*x4+x6) ++ fz1 = -4.d0*ypre6p2*invrq*z*x*y*(-64.d0*z2*x2-64.d0*z2*y2+ ++ x 16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +3 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* ++ x (x3-3.d0*x*y2) ++ ImYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* ++ x (3.d0*x2*y-y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = +3 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(3,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 3.d0*ypre6p3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- ++ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- ++ x 8.d0*z4*y2+3.d0*y6) ++ fy1 = -6.d0*ypre6p3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+ ++ x 14.d0*z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) ++ fz1 = -3.d0*ypre6p3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 3 (Imaginary part ) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(3,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,3}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 6.d0*ypre6p3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 ++ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) ++ fy1 = 3.d0*ypre6p3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 ++ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 ++ x *z4*y2-3.d0*x6) ++ fz1 = -3.d0*ypre6p3*invrq*z*(3.d0*x2-y2)*(-13.d0*z2*x2- ++ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +4 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(x4-6.d0*x2*y2+y4) ++ ImYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(4.d0*x3*y-4.d0* ++ x x*y3) ++ ++c-------------------------------------------------- ++c Force contributions from m = +4 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(4,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.0d0*ypre6p4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ ++ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4*x2 ++ x -60.0d0*z4*y2) ++ fy1 =-2.0d0*ypre6p4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 ++ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- ++ x 20.0d0*z4*y2) ++ fz1 =-2.0d0*ypre6p4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0* ++ x x2-13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 4 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(4,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,4}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.0d0*ypre6p4*invrq*y*(x4-6.0d0*x2*y2+y4)*(-13.0d0 ++ x *x2-13.0d0*y2+20.0d0*z2) ++ fy1 = 4.0d0*ypre6p4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 ++ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 ++ x *y2-x6+5.0d0*x2*y4) ++ fz1 = -8.0d0*ypre6p4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- ++ x 13.0d0*y2+20.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +5 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p5*invrc*z*(x5-10.d0*x3*y2+5.d0*x*y4) ++ ImYlm = ypre6p5*invrc*z*(5.d0*x4*y-10.d0*x2*y3+y5) ++ ++c-------------------------------------------------- ++c Force contributions from m = +5 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(5,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = ypre6p5*invrq*z*(-x6+35.0d0*x4*y2-55*x2*y4 ++ x +5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) ++ fy1 = -2.0d0*ypre6p5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2*y2 ++ x +5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fz1 = -ypre6p5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 5 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(5,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,5}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = 2.0d0*ypre6p5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2- ++ x 13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) ++ fy1 = +ypre6p5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4- ++ x y6+5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = -ypre6p5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* ++ x (-x2-y2+5.0d0*z2) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c-------------------------------------------------------- ++c Real and imaginary spherical harmonics for m = +6 ++c-------------------------------------------------------- ++ ++ ReYlm = ypre6p6*invrc*(x6-15.d0*x4*y2+15.d0*x2*y4-y6) ++ ImYlm = ypre6p6*invrc*(6.d0*x5*y-20.d0*x3*y3+6.d0*x*y5) ++ ++c-------------------------------------------------- ++c Force contributions from m = +6 (real part) ++c-------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ReQ6bar(6,itype) ++ ++c-------------------------------------------- ++c Gradient of Re(Y_{6,6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrq*ypre6p6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ ++ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fy1 = -invrq*ypre6p6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+ ++ x 6.0d0*x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2-z2*y4) ++ fz1 = -invrq*ypre6p6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2 ++ x *y4-y6) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) ++ ++c-------------------------------------------------------- ++c Force contributions from m = 6 (Imaginary part) ++c-------------------------------------------------------- ++ ++ prefactor2 = q6prefactor(itype)*ImQ6bar(6,itype) ++ ++c-------------------------------------------- ++c Gradient of Im(Y_{6,6}) w.r.t r_{j} ++c-------------------------------------------- ++ ++ fx1 = invrq*ypre6p6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0* ++ x x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) ++ fy1 = invrq*ypre6p6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2* ++ x y4-y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) ++ fz1 = -invrq*ypre6p6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2* ++ x y2+3.0d0*y4) ++ ++ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) ++ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) ++ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) ++ ++c Add into global force and stress arrays ++ ++ fxx(jatm) = fxx(jatm) + fx ++ fyy(jatm) = fyy(jatm) + fy ++ fzz(jatm) = fzz(jatm) + fz ++ fxx(iatm) = fxx(iatm) - fx ++ fyy(iatm) = fyy(iatm) - fy ++ fzz(iatm) = fzz(iatm) - fz ++ ++c Virial ++ ++ virord = virord - (fx*x + fy*y + fz*z) ++ ++c Stress ++ ++ strs1=strs1+x*fx ++ strs2=strs2+x*fy ++ strs3=strs3+x*fz ++ strs5=strs5+y*fy ++ strs6=strs6+y*fz ++ strs9=strs9+z*fz ++ ++ end do ! end loop over connection list for iatm ++ ++ end if ! end of computing Q6 ++ ++ ++ end do ! end loop over iatm ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs1 ++ stress(2)=stress(2)+strs2 ++ stress(3)=stress(3)+strs3 ++ stress(4)=stress(4)+strs2 ++ stress(5)=stress(5)+strs5 ++ stress(6)=stress(6)+strs6 ++ stress(7)=stress(7)+strs3 ++ stress(8)=stress(8)+strs6 ++ stress(9)=stress(9)+strs9 ++ ++c tidy up ++ ++ ierr = 0 ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ ++ deallocate(solvx4,stat=ierr(4)) ++ deallocate(solvy4,stat=ierr(5)) ++ deallocate(solvz4,stat=ierr(6)) ++ deallocate(solvrmag4,stat=ierr(7)) ++ deallocate(solvimag4,stat=ierr(8)) ++ deallocate(solvrsq4 ,stat=ierr(9)) ++ deallocate(solvlist4,stat=ierr(10)) ++ deallocate(solvtype4,stat=ierr(11)) ++ ++ deallocate(solvx6,stat=ierr(12)) ++ deallocate(solvy6,stat=ierr(13)) ++ deallocate(solvz6,stat=ierr(14)) ++ deallocate(solvrmag6,stat=ierr(15)) ++ deallocate(solvimag6,stat=ierr(16)) ++ deallocate(solvrsq6 ,stat=ierr(17)) ++ deallocate(solvlist6,stat=ierr(18)) ++ deallocate(solvtype6,stat=ierr(19)) ++ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) ++ ++ deallocate(buff1,stat=ierr(1)) ++ deallocate(buff2,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) ++ ++ deallocate(q4prefactor,stat=ierr(1)) ++ deallocate(q6prefactor,stat=ierr(2)) ++ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Steinhardt_Forces ++ ++ Subroutine Compute_Tet_Nlist(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c The existing neighbour list is not known by all nodes and ++c therefore we compute a new one from scratch rather than trying ++c to merge a full neighbour list across all MPI tasks or restore ++c symmetry. ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ integer :: nlast,megatm ++ ++ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype ++ integer :: ninclude,ifi,ii,ztype,nnn,k ++ real(8) :: rsq,rangesq ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ ninclude = maxval(zetaninc) ++ ++ nlast = natms ++ megatm = natms ++ ++ nnn = int(dble(ninclude*nlast*1.2)/dble(megatm)) ++ ++ allocate(xdf(1:nnn),stat=ierr(1)) ++ allocate(ydf(1:nnn),stat=ierr(2)) ++ allocate(zdf(1:nnn),stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2541,0.d0) ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++ ztype = zetasite(itype) ++ if ( ztype==0 ) cycle ++ ++ nn = 0 ! Number of images to compute ++ ii = ii + 1 ! index for this list ++ ifi = 0 ! index for entries in this list ++ ++ if (ii>mxninc) call Mfrz_Error(2542,0.d0) ++ ++ do jatm = 1,nlast ++ ++ jtype = ltype(jatm) ++ ++ if ( itype/=jtype ) cycle ++ if ( iatm == jatm ) cycle ++ ++ nn = nn + 1 ++ xdf(nn) = xxx(iatm) - xxx(jatm) ! separation vector ++ ydf(nn) = yyy(iatm) - yyy(jatm) ++ zdf(nn) = zzz(iatm) - zzz(jatm) ++ ++ end do ++ ++ if ( nn > nnn ) call Mfrz_Error(2543,0.d0) ++ ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ nn = 0 ++ do jatm = 1,nlast ++ ++ jtype = ltype(jatm) ++ ++ if ( itype/=jtype ) cycle ++ if ( iatm == jatm ) cycle ++ ++ nn = nn + 1 ++ rsq = xdf(nn)*xdf(nn) + ydf(nn)*ydf(nn) + zdf(nn)*zdf(nn) ++ ++ rangesq = zetacutoff(2,ztype)**2 ++ ++ if ( rsq < rangesq ) then ++ ++ ifi = ifi + 1 ++ flist(ifi,ii) = jatm ++ ++ end if ++ ++ end do ++ if ( ifi > mxflist ) call Mfrz_Error(2544,0.d0) ++ nflist(ii) = ifi ++ ++ end do ! end loop over iatm ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ if (any(ierr/=0))call Mfrz_Error(2545,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tet_Nlist ++ ++ Subroutine Compute_Tetrahedral(imcon,natms) ++ ++c--------------------------------------------------------------------- ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ ++ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype ++ integer :: ninclude,ifi,ii,k,ztype,mm,katm,ktype,it ++ real(8) :: f_ij,f_ik,r_ij,r_ik,x,y,z,dot ++ real(8),parameter :: third=1.0d0/3.0d0 ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8),allocatable,dimension(:) :: buff1 ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ allocate(xdf(1:mxflist),stat=ierr(1)) ++ allocate(ydf(1:mxflist),stat=ierr(2)) ++ allocate(zdf(1:mxflist),stat=ierr(3)) ++ allocate(buff1(1:ntet),stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2546,0.d0) ++ ++ zeta_global(:) = 0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++c no tetrahedral contributions from this atom type? ++ ++ ztype = zetasite(itype) ++ if ( ztype == 0 ) cycle ++ ++ ii = ii + 1 ! index for this list ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector ++ ydf(k) = yyy(jatm) - yyy(iatm) ++ zdf(k) = zzz(jatm) - zzz(iatm) ++ ++ end do ++ ++ nn = nflist(ii) ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) ++ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ x = xdf(k) ; y = ydf(k) ; z = zdf(k) ++ ++c loop over all other entries katm ++ ++ do mm = k+1,nflist(ii) ++ ++c katm also in solvation shell of iatm ++ ++ katm = flist(mm,ii) ++ ++ r_ik = sqrt(xdf(mm)*xdf(mm) + ydf(mm)*ydf(mm) + ++ x zdf(mm)*zdf(mm)) ++ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++c The node holding the central atom keeps the contrib ++ ++ dot = (x*xdf(mm) + y*ydf(mm) + z*zdf(mm)) / (r_ij*r_ik) + ++ x third ++ zeta_global(ztype) = zeta_global(ztype) + f_ij*f_ik*dot*dot ++ end do ++ end do ++ ++ end do ++ ++ call gdsum(zeta_global(1),ntet,buff1(1:ntet)) ++ ++ do it = 1,ntet ++ zeta_global(it) = 1.0d0 - zeta_global(it)/dble(zetaninc(it)* ++ x zetann(it)) ++ end do ++ ++ deallocate(xdf ,stat=ierr(1)) ++ deallocate(ydf ,stat=ierr(2)) ++ deallocate(zdf ,stat=ierr(3)) ++ deallocate(buff1,stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tetrahedral ++ ++ Subroutine Compute_Tetrahedral_Forces(imcon,natms,engord,virord) ++ ++c--------------------------------------------------------------------- ++c ++c Author D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use config_module ++ use site_module ++ use utility_module, only : images ++ ++ implicit none ++ integer,intent(in) :: imcon,natms ++ real(8),intent(inout) :: engord,virord ++ ++ integer :: iatm,jatm,katm,iatm0,iatm1,istrd,nn ++ integer :: ii,k,m,itet,itype,jtype,ztype,it ++ ++ real(8),parameter :: third = 1.0d0/3.0d0 ++ real(8) :: strs1,strs2,strs3,strs5,strs6,strs9 ++ real(8) :: xj,yj,zj,xk,yk,zk,tmpvar,tmpvar2,dot ++ real(8) :: r_ij,r_ik,f_ij,f_ik,df_ij,df_ik ++ real(8) :: invrij,invrik,ctheta ++ real(8) :: fxj,fyj,fzj,fxk,fyk,fzk ++ ++ real(8),dimension(3) :: rij_hat,rik_hat ++ ++ real(8),allocatable,dimension(:) :: xdf,ydf,zdf ++ real(8),allocatable,dimension(:) :: tetprefactor ++ ++ iatm0 = myrank+1 ++ iatm1 = natms ++ istrd = commsize ++ ++ allocate(xdf(1:mxflist),stat=ierr(1)) ++ allocate(ydf(1:mxflist),stat=ierr(2)) ++ allocate(zdf(1:mxflist),stat=ierr(3)) ++ allocate(tetprefactor(1:ntet),stat=ierr(4)) ++ if (any(ierr/=0)) call Mfrz_Error(2548,0.d0) ++ ++c Compute the prefactor ++ ++ k = nq4+nq6+1 ++ do it = 1,ntet ++ tetprefactor = dcolvar(k)/dble(zetaninc(it)*zetann(it)) ++ k = k + 1 ++ end do ++ ++c zero contribution to the stress tensor ++ ++ strs1=0.0d0 ++ strs2=0.0d0 ++ strs3=0.0d0 ++ strs5=0.0d0 ++ strs6=0.0d0 ++ strs9=0.0d0 ++ ++ ii = 0 ++ do iatm = iatm0,iatm1,istrd ++ ++ itype = ltype(iatm) ++ ++c no tetrahedral contributions from this atom type? ++ ++ ztype = zetasite(itype) ++ if ( ztype == 0 ) cycle ++ ++ ii = ii + 1 ! index for this list ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector ++ ydf(k) = yyy(jatm) - yyy(iatm) ++ zdf(k) = zzz(jatm) - zzz(iatm) ++ ++ end do ++ ++ nn = nflist(ii) ++ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) ++ ++ do k = 1,nflist(ii) ++ ++ jatm = flist(k,ii) ++ ++ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) ++ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ df_ij = dfc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ xj = xdf(k) ; yj = ydf(k) ; zj = zdf(k) ++ ++ invrij = 1.0d0/r_ij ++ ++ rij_hat(1) = xj*invrij ++ rij_hat(2) = yj*invrij ++ rij_hat(3) = zj*invrij ++ ++ do m = k + 1,nflist(ii) ++ ++ r_ik = sqrt(xdf(m)*xdf(m) + ydf(m)*ydf(m) + zdf(m)*zdf(m)) ++ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ df_ik = dfc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) ++ ++ xk = xdf(m) ; yk = ydf(m) ; zk = zdf(m) ++ ++ invrik = 1.0d0/r_ik ++ ++ rik_hat(1) = xk*invrik ++ rik_hat(2) = yk*invrik ++ rik_hat(3) = zk*invrik ++ ++ ctheta = dot_product(rij_hat,rik_hat) ++ dot = ctheta + third ++ ++ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrij ++ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ij*f_ik ++ ++c force between atom i and atom j due to second term ++c i.e. ( f_ij*f_ik*dot*dot ) ++ ++ fxj = tmpvar*(rik_hat(1) - rij_hat(1)*ctheta) + ++ x tmpvar2*rij_hat(1) ++ fyj = tmpvar*(rik_hat(2) - rij_hat(2)*ctheta) + ++ x tmpvar2*rij_hat(2) ++ fzj = tmpvar*(rik_hat(3) - rij_hat(3)*ctheta) + ++ x tmpvar2*rij_hat(3) ++ ++ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrik ++ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ik*f_ij ++ ++c force between atom i and atom k due to second term ++c i.e ( f_ij*f_ik*dot*dot ) ++ ++ fxk = tmpvar*(rij_hat(1) - rik_hat(1)*ctheta) + ++ x tmpvar2*rik_hat(1) ++ fyk = tmpvar*(rij_hat(2) - rik_hat(2)*ctheta) + ++ x tmpvar2*rik_hat(2) ++ fzk = tmpvar*(rij_hat(3) - rik_hat(3)*ctheta) + ++ x tmpvar2*rik_hat(3) ++ ++c Add in to forces, virial and stress tensor ++ ++ katm = flist(m,ii) ++ ++ fxx(iatm) = fxx(iatm) + fxj + fxk ++ fyy(iatm) = fyy(iatm) + fyj + fyk ++ fzz(iatm) = fzz(iatm) + fzj + fzk ++ ++ fxx(jatm) = fxx(jatm) - fxj ++ fyy(jatm) = fyy(jatm) - fyj ++ fzz(jatm) = fzz(jatm) - fzj ++ ++ fxx(katm) = fxx(katm) - fxk ++ fyy(katm) = fyy(katm) - fyk ++ fzz(katm) = fzz(katm) - fzk ++ ++ virord = virord - fxj*xj - fyj*yj - fzj*zj ++ virord = virord - fxk*xk - fyk*yk - fzk*zk ++ ++ strs1 = strs1 + xk*fxk + xj*fxj ++ strs2 = strs2 + xk*fyk + xj*fyj ++ strs3 = strs3 + xk*fzk + xj*fzj ++ strs5 = strs5 + yk*fyk + yj*fyj ++ strs6 = strs6 + yk*fzk + yj*fzj ++ strs9 = strs9 + zk*fzk + zj*fzj ++ ++ end do ++ end do ++ end do ++ ++c Complete stress tensor ++ ++ stress(1)=stress(1)+strs1 ++ stress(2)=stress(2)+strs2 ++ stress(3)=stress(3)+strs3 ++ stress(4)=stress(4)+strs2 ++ stress(5)=stress(5)+strs5 ++ stress(6)=stress(6)+strs6 ++ stress(7)=stress(7)+strs3 ++ stress(8)=stress(8)+strs6 ++ stress(9)=stress(9)+strs9 ++ ++ ++c Tidy up ++ ++ deallocate(xdf,stat=ierr(1)) ++ deallocate(ydf,stat=ierr(2)) ++ deallocate(zdf,stat=ierr(3)) ++ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) ++ ++ return ++ ++ end Subroutine Compute_Tetrahedral_Forces ++ ++ Subroutine Mfrz_Error(kode,arg) ++ ++c--------------------------------------------------------------------- ++c ++c Author W. Smith Daresbury Laboratory January 2011 ++c Adapted from D. Quigley - University of Warwick ++c Copyright D. Quigley October 2008 ++c ++c--------------------------------------------------------------------- ++ ++ use setup_module, only : nrite,nhist,nread,nconf,nstats, ++ x nrest,nfield,ntable,nevnt ++ ++ implicit none ++ integer,intent(in) :: kode ++ real(8),intent(in) :: arg ++ ++ if(onroot)then ++ ++ if(kode.eq.2500)then ++ ++ write(nrite,"( ++ x 'Error in number of collective variables - '// ++ x 'ncolvar too small?' ++ x )") ++ ++ elseif(kode.eq.2501)then ++ ++ write(nrite,"( ++ x 'Wang-Landau style recursion not yet implemented'// ++ x 'for ncolvar > 1' ++ x )") ++ ++ elseif(kode.eq.2502)then ++ ++ write(nrite,"('Unrecognised Gaussian height scheme')") ++ ++ elseif(kode.eq.2503)then ++ ++ write(nrite,"('Error maxhis exceeded in metadynamics')") ++ ++ elseif(kode.eq.2504)then ++ ++ write(nrite,"( ++ x 'Error allocating comms buffer in compute_bias_potential' ++ x )") ++ ++ elseif(kode.eq.2505)then ++ ++ write(nrite,"('Error allocating driven array')") ++ ++ elseif(kode.eq.2506)then ++ ++ write(nrite,"('Could not open METACONTROL')") ++ ++ elseif(kode.eq.2508)then ++ ++ write(nrite,"('Comms error in metadynamics setup')") ++ ++ elseif(kode.eq.2509)then ++ ++ write(nrite,"( ++ x 'Cannot bias local and global PE in same run' ++ x )") ++ ++ elseif(kode.eq.2510)then ++ ++ write(nrite,"('Error allocating local force arrays')") ++ ++ elseif(kode.eq.2511)then ++ ++ write(nrite,"( ++ x 'Error allocating collective variables arrays' ++ x )") ++ ++ elseif(kode.eq.2512)then ++ ++ write(nrite,"('Error allocating Wang-Landau bins')") ++ ++ elseif(kode.eq.2515)then ++ ++ write(nrite,"( ++ x 'Error allocating Steinhardt parameter arrays' ++ x )") ++ ++ elseif(kode.eq.2516)then ++ ++ write(nrite,"('Could not open STEINHARDT')") ++ ++ elseif(kode.eq.2517)then ++ ++ write(nrite,"('Error allocating q4site')") ++ ++ elseif(kode.eq.2518)then ++ ++ write(nrite,"('Error allocating q6site')") ++ ++ elseif(kode.eq.2519)then ++ ++ write(nrite,"('Error deallocating buff')") ++ ++ elseif(kode.eq.2521)then ++ ++ write(nrite,"('Error reading line ',i5,' of STEINHARDT' ++ x )")nint(arg) ++ ++ elseif(kode.eq.2522)then ++ ++ write(nrite,"( ++ x 'Error allocating Steinhardt parameter arrays' ++ x )") ++ ++ elseif(kode.eq.2523)then ++ ++ write(nrite,"('Could not open ZETA')") ++ ++ elseif(kode.eq.2524)then ++ ++ write(nrite,"('Error allocating zetasite')") ++ ++ elseif(kode.eq.2525)then ++ ++ write(nrite,"('Error allocating full neighbour list')") ++ ++ elseif(kode.eq.2527)then ++ ++ write(nrite,"( ++ x 'Number of collective variables incorrect for specified'// ++ x 'order parameters' ++ x )") ++ ++ elseif(kode.eq.2529)then ++ ++ write(nrite,"('Error reading line ',i5,' of ZETA' ++ x )")nint(arg) ++ ++ elseif(kode.eq.2531)then ++ ++ write(nrite,"('Comms error on reading METADYNAMICS')") ++ ++ elseif(kode.eq.2532)then ++ ++ write(nrite,"('Error in fc function - out of range')") ++ write(nrite,"('Value of r was ',1p,e14.6)")arg ++ ++ elseif(kode.eq.2533)then ++ ++ write(nrite,"( ++ x 'Error allocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2534)then ++ ++ write(nrite,"('Error allocating comms buffer arrays')") ++ ++ elseif(kode.eq.2535)then ++ ++ write(nrite,"('Solvation list overrun')") ++ ++ elseif(kode.eq.2536)then ++ ++ write(nrite,"( ++ x 'Error deallocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2537)then ++ ++ write(nrite,"('Error deallocating comms buffer arrays')") ++ ++ elseif(kode.eq.2538)then ++ ++ write(nrite,"( ++ x 'Error allocating solvation arrays for metadynamics' ++ x )") ++ ++ elseif(kode.eq.2540)then ++ ++ write(nrite,"('Error allocating force prefactor arrays')") ++ ++ elseif(kode.eq.2541)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2542)then ++ ++ write(nrite,"( ++ x 'Error in metafreeze_module.f90 mxninc too small' ++ x )") ++ ++ elseif(kode.eq.2543)then ++ ++ write(nrite,"('nnn too small in compute_tet_nlist')") ++ ++ elseif(kode.eq.2544)then ++ ++ write(nrite,"('mxflist too small in metafreeze_module')") ++ ++ elseif(kode.eq.2545)then ++ ++ write(nrite,"( ++ x 'Memory deallocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2546)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2547)then ++ ++ write(nrite,"( ++ x 'Memory deallocation error in compute_tet_nlist' ++ x )") ++ ++ elseif(kode.eq.2548)then ++ ++ write(nrite,"( ++ x 'Memory allocation error in compute_tet_nlist' ++ x )") ++ ++ endif ++ ++c close all i/o channels ++ ++ close (nrite) ++ close (nhist) ++ close (nread) ++ close (nconf) ++ close (nstats) ++ close (nrest) ++ close (nfield) ++ close (ntable) ++ close (nevnt) ++ close (stn) ++ close (zta) ++ close (mtd) ++ ++ endif ++ ++c shut down communications ++ ++ call gsync() ++ call exitcomms() ++ ++ end Subroutine Mfrz_Error ++ ++ end module metafreeze_module ++ +diff -urN dl_class_1.9.orig/srcmod/metal_module.f dl_class_1.9/srcmod/metal_module.f +--- dl_class_1.9.orig/srcmod/metal_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/metal_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1669 @@ ++ module metal_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining metal potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use parse_module ++ use property_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ logical lmetab ++ integer, allocatable :: ltpmet(:),lstmet(:) ++ real(8), allocatable :: prmmet(:,:),vmet(:,:,:),dmet(:,:,:) ++ real(8), allocatable :: rho(:),elrcm(:),vlrcm(:),fmet(:,:,:) ++ ++ save lmetab,ltpmet,lstmet,prmmet,vmet,dmet,fmet,rho,elrcm,vlrcm ++ ++ contains ++ ++ subroutine alloc_met_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ integer i,fail,idnode ++ ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (ltpmet(mxmet),stat=fail(1)) ++ allocate (lstmet(mxmet),stat=fail(2)) ++ allocate (prmmet(mxmet,mxpmet),stat=fail(3)) ++ allocate (vmet(mxgrid,mxmet,2),stat=fail(4)) ++ allocate (dmet(mxgrid,mxmet,2),stat=fail(5)) ++ allocate (rho(mxatms),stat=fail(6)) ++ allocate (elrcm(0:mxsmet),stat=fail(7)) ++ allocate (vlrcm(0:mxsmet),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1280) ++ enddo ++ ++ end subroutine alloc_met_arrays ++ ++ subroutine define_metals ++ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rmet,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining metal potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom1,atom2 ++ character*1 message(80) ++ integer idnode,ntpmet,ntpatm,idum,imet,j ++ integer keypot,numpar,katm1,katm2,keymet,ntab,i,fail,itpmet ++ integer jtpatm ++ real(8) rmet,engunit ++ ++ real(8), allocatable :: parpot(:) ++ allocate (parpot(mxpmet),stat=fail) ++ ++ ntpmet=intstr(record,lenrec,idum) ++ ++ lmetab=.false. ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified metal ', ++ x 'potentials',i10)") ntpmet ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ',3x, ++ x ' key',30x,'parameters'/,/)") ++ ++ endif ++ ++ if(ntpmet.ge.mxmet) call error(idnode,71) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do imet=1,mxmet ++ lstmet(imet)=0 ++ ltpmet(imet)=0 ++ enddo ++ ++ do itpmet=1,ntpmet ++ ++ do i=1,mxpmet ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'stch') then ++ keypot=1 ++ numpar=5 ++ else if(keyword(1:4).eq.'fnsc') then ++ keypot=2 ++ numpar=7 ++ else if(keyword(1:4).eq.'gupt') then ++ keypot=3 ++ numpar=5 ++ elseif(keyword(1:4).eq.'eam ') then ++ keypot=999 ++ lmetab=.true. ++ numpar=0 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,461) ++ endif ++ ++ if(.not.lmetab)then ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ parpot(4)=dblstr(record,lenrec,idum) ++ parpot(5)=dblstr(record,lenrec,idum) ++ parpot(6)=dblstr(record,lenrec,idum) ++ parpot(7)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,2a8,2x,a4,3x,1p,9e13.5)") ++ x atom1,atom2,keyword(1:4),(parpot(j),j=1,numpar) ++ ++ endif ++ ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm1.eq.0.or.katm2.eq.0) then ++ call error(idnode,463) ++ endif ++ ++ keymet=loc2(katm1,katm2) ++ ++c convert energies to internal unit ++ ++ if(keymet.ge.mxmet) call error(idnode,465) ++ ++ parpot(1)=parpot(1)*engunit ++ ++ if(keypot.eq.2)then ++ ++ parpot(2)=parpot(2)*engunit ++ parpot(3)=parpot(3)*engunit ++ parpot(5)=parpot(5)*engunit ++ ++ endif ++ ++ if(keypot.eq.3)then ++ parpot(4)=parpot(4)*engunit ++ endif ++ ++ if(lstmet(keymet).ne.0) call error(idnode,141) ++ lstmet(keymet)=itpmet ++ ltpmet(itpmet)=keypot ++ if(itpmet.gt.1)then ++ if(keypot.ne.ltpmet(itpmet-1))call error(idnode,72) ++ endif ++ ++ if(.not.lmetab)then ++ ++ do i=1,numpar ++ prmmet(itpmet,i)=parpot(i) ++ enddo ++ ++ endif ++ ++ enddo ++ ++c check for unspecified atom-atom potentials ++ ++ ntab=(ntpatm*(ntpatm+1))/2 ++ ++ if(ntpmet.lt.ntab) then ++ ++ call warning(idnode,110,0.d0,0.d0,0.d0) ++ ++ do i=1,ntab ++ if(lstmet(i).eq.0) lstmet(i)=ntpmet+1 ++ enddo ++ ++c set zero potential for undefined interactions ++ ++ do i=1,mxmet ++ ++ vmet(1,i,1)=0.d0 ++ vmet(1,i,2)=0.d0 ++ dmet(1,i,1)=0.d0 ++ dmet(1,i,2)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c generate metal force arrays ++ ++ call metgen(idnode,ntpatm,rmet) ++ ++ if(lmetab) ++ x call mettab(ntpatm,idnode,rmet,engunit) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_metals ++ ++ subroutine metdens ++ x (idnode,imcon,mxnode,natms,engmet,virden) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local density in metals ++c using the verlet neighbour list and sutton-chen potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,imcon,mxnode,natms,i,j,k,ii,k0,l ++ real(8) engmet,engtmp,virden,rhosqr,rrr,ppp,fk0,fk1,fk2,t1,t2 ++ ++ safe=.true. ++ ++c initialise energy accumulator ++ ++ engmet=0.d0 ++ virden=0.d0 ++ ++c initialise density array ++ ++ do i=1,natms ++ rho(i)=0.d0 ++ enddo ++ ++c calculate local atomic density ++ ++ ii=0 ++ ++c outer loop over atoms ++ ++ do i=idnode+1,natms,mxnode ++ ++ ii=ii+1 ++ ++c calculate interatomic distances ++ ++ do k=1,lentry(ii) ++ ++ j=list(ii,k) ++ ilist(k)=j ++ xdf(k)=xxx(i)-xxx(j) ++ ydf(k)=yyy(i)-yyy(j) ++ zdf(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary conditions ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c square of distances ++ ++ do k=1,lentry(ii) ++ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 ++ enddo ++ ++ if(lmetab)then ++ ++c calculate EAM density contributions ++ ++ call eamden(safe,i,lentry(ii)) ++ ++ else ++ ++c calculate FS density contributions ++ ++ call fsden(safe,i,lentry(ii)) ++ ++ endif ++ ++ enddo ++ ++c global sum of local atomic densities ++ ++ if(mxnode.gt.1)call gdsum(rho,natms,buffer) ++ ++c calculate embedding energy ++ ++ if(lmetab)then ++ ++c density terms for eam potentials ++ ++ do i=1,natms ++ ++ if(rho(i).gt.0.d0)then ++ ++ k0=ltype(i) ++ rrr=rho(i)-fmet(2,k0,1) ++ l=min(nint(rrr/fmet(4,k0,1)),int(fmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=(rrr/fmet(4,k0,1))-dble(l) ++ ++c calculate embedding energy using 3-point interpolation ++ ++ fk0=fmet(l-1,k0,1) ++ fk1=fmet(l,k0,1) ++ fk2=fmet(l+1,k0,1) ++ ++ t1=fk1+(fk1-fk0)*ppp ++ t2=fk1+(fk2-fk1)*ppp ++ if(ppp.lt.0.d0)then ++ engtmp=-(t1+0.5d0*(t2-t1)*(ppp+1.d0)) ++ else ++ engtmp=-(t2+0.5d0*(t2-t1)*(ppp-1.d0)) ++ endif ++ ++ engmet=engmet+engtmp ++ ++c calculate derivative of embedding function wrt density using 3-point ++c interpolation - store result in rho array ++ ++ fk0=fmet(l-1,k0,2) ++ fk1=fmet(l,k0,2) ++ fk2=fmet(l+1,k0,2) ++ ++ t1=fk1+(fk1-fk0)*ppp ++ t2=fk1+(fk2-fk1)*ppp ++ if(ppp.lt.0.d0)then ++ rho(i)=(t1+0.5d0*(t2-t1)*(ppp+1.d0)) ++ else ++ rho(i)=(t2+0.5d0*(t2-t1)*(ppp-1.d0)) ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ else ++ ++c analytical square root of density dependence ++ ++ do i=1,natms ++ ++ if(rho(i).gt.0.d0)then ++ ++ rhosqr=sqrt(rho(i)+elrcm(ltype(i))) ++ engmet=engmet+rhosqr ++ rho(i)=0.5d0/rhosqr ++ virden=virden+vlrcm(ltype(i))/rhosqr ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ engmet=-engmet/dble(mxnode) ++ virden=virden/dble(mxnode) ++ ++c check interpolation is safe ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,142) ++ ++ return ++ end subroutine metdens ++ ++ subroutine fsden(safe,iatm,ik) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local atomic density ++c for FS type metal potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer iatm,jatm,ik,m,k0,l ++ real(8) rdr,ai,aj,ab,rsq,rrr,ppp,t1,t2 ++ real(8) vk0,vk1,vk2,density ++ ++c start of primary loop for density ++ ++ ai=dble(ltype(iatm)) ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ++ aj=dble(ltype(jatm)) ++ if(ai.gt.aj) then ++ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 ++ else ++ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 ++ endif ++ ++ k0=lstmet(int(ab)) ++ ++ if((ltpmet(k0).ge.1).and.(abs(dmet(1,k0,1)).gt.0.d0))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++c apply cutoff condition ++ ++ if(rsq.le.dmet(3,k0,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,k0,1) ++ rrr=sqrt(rsq)-dmet(2,k0,1) ++ l=min(nint(rrr*rdr),int(dmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,k0,1) ++ vk1=dmet(l,k0,1) ++ vk2=dmet(l+1,k0,1) ++ ++ t1=vk1+ppp*(vk1-vk0) ++ t2=vk1+ppp*(vk2-vk1) ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ if(ai.gt.aj)then ++ ++ rho(iatm)=rho(iatm)+density*dmet(1,k0,2) ++ rho(jatm)=rho(jatm)+density*dmet(2,k0,2) ++ ++ else ++ ++ rho(iatm)=rho(iatm)+density*dmet(2,k0,2) ++ rho(jatm)=rho(jatm)+density*dmet(1,k0,2) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine fsden ++ ++ subroutine eamden(safe,iatm,ik) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating local atomic density ++c for EAM type metal potentials ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ logical safe ++ integer iatm,jatm,ik,m,l,ktyp1,ktyp2 ++ real(8) rdr,rsq,rrr,ppp,t1,t2 ++ real(8) vk0,vk1,vk2,density ++ ++c start of primary loop for density ++ ++ ktyp1=ltype(iatm) ++ ++ do m=1,ik ++ ++c first metal atom density ++ ++ jatm=ilist(m) ++ ktyp2=ltype(jatm) ++ ++ if(abs(dmet(1,ktyp2,1)).gt.0.d0)then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.le.dmet(3,ktyp2,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,ktyp2,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp2,1) ++ l=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,ktyp2,1) ++ vk1=dmet(l,ktyp2,1) ++ vk2=dmet(l+1,ktyp2,1) ++ ++ t1=vk1+ppp*(vk1-vk0) ++ t2=vk1+ppp*(vk2-vk1) ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ rho(iatm)=rho(iatm)+density ++ if(ktyp1.eq.ktyp2)rho(jatm)=rho(jatm)+density ++ ++ endif ++ ++ endif ++ ++ endif ++ ++c second metal atom density ++ ++ if(ktyp1.ne.ktyp2)then ++ ++ if(abs(dmet(1,ktyp1,1)).gt.0.d0)then ++ ++c apply truncation of potential ++ ++ if(rsq.le.dmet(3,ktyp1,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/dmet(4,ktyp1,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp1,1) ++ l=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate density using 3-point interpolation ++ ++ vk0=dmet(l-1,ktyp1,1) ++ vk1=dmet(l,ktyp1,1) ++ vk2=dmet(l+1,ktyp1,1) ++ ++ t1=vk1+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*ppp ++ if(ppp.lt.0.d0)then ++ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ rho(jatm)=rho(jatm)+density ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine eamden ++ ++ subroutine metfrc(safe,iatm,ik,engmet,virmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating metal forces ++c for EAM and FS potentials using a verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer iatm,jatm,ik,m,k0,l,ld,ktyp1,ktyp2 ++ real(8) engmet,virmet,strs ++ real(8) rdr,rsq,rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2 ++ real(8) gamma,gamma1,gamma2,gamma3,fx,fy,fz,fi ++ dimension fi(3),strs(6) ++ ++CDIR$ CACHE_ALIGN fi ++ ++c initialise potential energy and virial ++ ++ engmet=0.d0 ++ virmet=0.d0 ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ ++c store forces for iatm ++ ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ktyp1=ltype(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ktyp2=ltype(jatm) ++ k0=lstmet(loc2(ktyp1,ktyp2)) ++ ++ if((ltpmet(k0).gt.0).and.(abs(vmet(1,k0,1)).gt.0.d0))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.le.vmet(3,k0,1)**2)then ++ ++c interpolation parameters ++ ++ rdr=1.d0/vmet(4,k0,1) ++ rrr=sqrt(rsq)-vmet(2,k0,1) ++ l=min(nint(rrr*rdr),int(vmet(1,k0,1))-1) ++ if(l.lt.1)then ++ ++ safe=.false. ++ gamma1=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vmet(l-1,k0,1) ++ vk1=vmet(l,k0,1) ++ vk2=vmet(l+1,k0,1) ++ ++ t1=vk1+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*ppp ++ if(ppp.lt.0.d0)then ++ engmet=engmet+t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ engmet=engmet+t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++c calculate pair forces using 3-point interpolation ++ ++ gk0=vmet(l-1,k0,2) ++ gk1=vmet(l,k0,2) ++ gk2=vmet(l+1,k0,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma1=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma1=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++c calculate embedding forces using 3-point interpolation ++ ++ if(lmetab)then ++ ++ if(rsq.le.dmet(3,ktyp2,1)**2)then ++ ++ rdr=1.d0/dmet(4,ktyp2,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp2,1) ++ ld=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) ++ if(ld.lt.1)then ++ ++ safe=.false. ++ gamma2=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(ld) ++ ++ gk0=dmet(ld-1,ktyp2,2) ++ gk1=dmet(ld,ktyp2,2) ++ gk2=dmet(ld+1,ktyp2,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++ else ++ ++ gamma2=0.d0 ++ ++ endif ++ ++ if(ktyp1.eq.ktyp2)then ++ ++ gamma3=gamma2 ++ ++ elseif(rsq.le.dmet(3,ktyp1,1)**2)then ++ ++ rdr=1.d0/dmet(4,ktyp1,1) ++ rrr=sqrt(rsq)-dmet(2,ktyp1,1) ++ ld=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) ++ if(ld.lt.1)then ++ ++ safe=.false. ++ gamma3=0.d0 ++ ++ else ++ ++ ppp=rrr*rdr-dble(ld) ++ gk0=dmet(ld-1,ktyp1,2) ++ gk1=dmet(ld,ktyp1,2) ++ gk2=dmet(ld+1,ktyp1,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma3=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma3=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ endif ++ ++ else ++ ++ gamma3=0.d0 ++ ++ endif ++ ++ gamma=(gamma1+(gamma2*rho(iatm)+gamma3*rho(jatm)))/rsq ++ ++ else ++ ++ if(safe.and.rsq.le.dmet(3,k0,1)**2)then ++ ++ gk0=dmet(l-1,k0,2) ++ gk1=dmet(l,k0,2) ++ gk2=dmet(l+1,k0,2) ++ ++ t1=gk1+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*ppp ++ if(ppp.lt.0.d0)then ++ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) ++ else ++ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) ++ endif ++ ++ else ++ ++ gamma2=0.d0 ++ ++ endif ++ ++ if(ktyp1.gt.ktyp2)then ++ ++ gamma=(gamma1-gamma2*(rho(iatm)*dmet(1,k0,2)+ ++ x rho(jatm)*dmet(2,k0,2)))/rsq ++ ++ else ++ ++ gamma=(gamma1-gamma2*(rho(iatm)*dmet(2,k0,2)+ ++ x rho(jatm)*dmet(1,k0,2)))/rsq ++ ++ endif ++ ++ endif ++ ++c calculate forces ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++c calculate virial ++ ++ virmet=virmet-gamma*rsq ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ return ++ end subroutine metfrc ++ ++ subroutine metgen(idnode,ntpatm,rmet) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating potential energy and ++c force arrays for metal potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,kmet,mmet,katm1,katm2,ntpatm,imet,nmet ++ integer idnode,nnn,mmm ++ real(8) dlrpot,rmet,rrr,eps,sig,cc0,cc1,cc2,ccc ++ real(8) ddd,bet,cut1,cut2,aaa,rr0,ppp,qqq ++ ++c define grid resolution for potential arrays ++ ++ dlrpot=rmet/dble(mxgrid-1) ++ ++c construct arrays for metal potentials ++ ++ kmet=0 ++ do katm1=1,ntpatm ++ ++ do katm2=1,katm1 ++ ++ kmet=kmet+1 ++ imet=lstmet(kmet) ++ ++ if(ltpmet(imet).gt.0)then ++ ++c store array specification parameters ++ ++ vmet(1,imet,1)=dble(mxgrid) ++ vmet(2,imet,1)=0.d0 ++ vmet(3,imet,1)=rmet ++ vmet(4,imet,1)=dlrpot ++ ++ do i=1,4 ++ ++ vmet(i,imet,2)=vmet(i,imet,1) ++ dmet(i,imet,1)=vmet(i,imet,1) ++ dmet(i,imet,2)=0.d0 ++ ++ enddo ++ ++ if(ltpmet(imet).eq.1)then ++ ++c sutton-chen potentials ++ ++ eps=prmmet(imet,1) ++ sig=prmmet(imet,2) ++ nnn=nint(prmmet(imet,3)) ++ mmm=nint(prmmet(imet,4)) ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=eps*(sig/rrr)**nnn ++ vmet(i,imet,2)=dble(nnn)*eps*(sig/rrr)**nnn ++ dmet(i,imet,1)=(sig/rrr)**mmm ++ dmet(i,imet,2)=dble(mmm)*(sig/rrr)**mmm ++ ++ enddo ++ ++ if(katm1.eq.katm2)then ++ ++ dmet(1,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 ++ dmet(2,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 ++ ++ else ++ ++ nmet=lstmet((katm1*(katm1+1))/2) ++ mmet=lstmet((katm2*(katm2+1))/2) ++ dmet(1,imet,2)=(prmmet(nmet,1)*prmmet(nmet,5))**2 ++ dmet(2,imet,2)=(prmmet(mmet,1)*prmmet(mmet,5))**2 ++ ++ endif ++ ++ else if(ltpmet(imet).eq.2)then ++ ++c finnis sinclair potentials ++ ++ cc0=prmmet(imet,1) ++ cc1=prmmet(imet,2) ++ cc2=prmmet(imet,3) ++ ccc=prmmet(imet,4) ++ ddd=prmmet(imet,6) ++ bet=prmmet(imet,7) ++ cut1=ccc+4.d0*dlrpot ++ cut2=ddd+4.d0*dlrpot ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=0.d0 ++ vmet(i,imet,2)=0.d0 ++ dmet(i,imet,1)=0.d0 ++ dmet(i,imet,2)=0.d0 ++ ++ if(rrr.le.cut1)then ++ ++ vmet(i,imet,1)=(cc0+cc1*rrr+cc2*rrr*rrr)*(rrr-ccc)**2 ++ vmet(i,imet,2)=-rrr*(2.d0*(cc0+cc1*rrr+cc2*rrr*rrr)* ++ x (rrr-ccc)+(cc1+2.d0*cc2*rrr)*(rrr-ccc)**2) ++ ++ endif ++ ++ if(rrr.le.cut2)then ++ ++ dmet(i,imet,1)=(rrr-ddd)**2+bet*(rrr-ddd)**3/ddd ++ dmet(i,imet,2)=-rrr*(2.d0*(rrr-ddd)+ ++ x 3.d0*bet*(rrr-ddd)**2/ddd) ++ ++ endif ++ ++ enddo ++ ++ if(katm1.eq.katm2)then ++ ++ dmet(1,imet,2)=prmmet(imet,5)**2 ++ dmet(2,imet,2)=prmmet(imet,5)**2 ++ ++ else ++ ++ nmet=lstmet((katm1*(katm1+1))/2) ++ mmet=lstmet((katm2*(katm2+1))/2) ++ dmet(1,imet,2)=prmmet(nmet,5)**2 ++ dmet(2,imet,2)=prmmet(mmet,5)**2 ++ ++ endif ++ ++ else if(ltpmet(imet).eq.3)then ++ ++c gupta potentials ++ ++ aaa=prmmet(imet,1) ++ rr0=prmmet(imet,2) ++ ppp=prmmet(imet,3) ++ qqq=prmmet(imet,5) ++ ++ do i=5,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ vmet(i,imet,1)=aaa*exp(-ppp*(rrr-rr0)/rr0) ++ vmet(i,imet,2)=vmet(i,imet,1)*rrr*ppp/rr0 ++ dmet(i,imet,1)=exp(-2.d0*qqq*(rrr-rr0)/rr0) ++ dmet(i,imet,2)=2.d0*dmet(i,imet,1)*rrr*qqq/rr0 ++ ++ enddo ++ ++ dmet(1,imet,2)=prmmet(imet,4)**2 ++ dmet(2,imet,2)=prmmet(imet,4)**2 ++ ++ else if(.not.lmetab)then ++ ++ call error(idnode,151) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine metgen ++ ++ subroutine lrcmetal ++ x (idnode,imcon,natms,ntpatm,engunit,rmet,volm) ++ ++c************************************************************************* ++c ++c DL_POLY subroutine to evaluate long-range corrections to ++c pressure and energy in a periodic metal system. ++c ++c copyright daresbury laboratory ++c author - w. smith june 1995 ++c amended - w. smith march 2006 ++c ++c*************************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,imcon,natms,ntpatm,i,ka,j ++ integer kmet,k0,k1,k2 ++ real(8) engunit,rmet,volm,twopi,forpi,eps,sig,nnn,mmm,ccc ++ real(8) elrcm0,elrcm1,elrcm2,vlrcm0,vlrcm1,vlrcm2,aaa,rr0,ppp ++ real(8) zet,qqq,eee ++ ++ save newjob ++ data newjob/.true./ ++ ++ twopi=2.0d0*pi ++ forpi=4.0d0*pi ++ ++c initalise counter arrays ++ ++ do i=1,mxsmet ++ numtyp(i)=0 ++ enddo ++ ++c evaluate species populations in system ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp(ka)=numtyp(ka)+1 ++ ++ enddo ++ ++c number densities ++ ++ do i=1,ntpatm ++ dens(i)=dble(numtyp(i))/volm ++ enddo ++ ++c long range corrections to density, energy and pressure ++ ++ do i=0,mxsmet ++ ++ elrcm(i)=0.d0 ++ vlrcm(i)=0.d0 ++ ++ enddo ++ ++ if(imcon.ne.0.and.imcon.ne.6) then ++ ++ kmet=0 ++ do i=1,ntpatm ++ ++ do j=1,i ++ ++ elrcm0=0.d0 ++ elrcm1=0.d0 ++ elrcm2=0.d0 ++ vlrcm0=0.d0 ++ vlrcm1=0.d0 ++ vlrcm2=0.d0 ++ ++ kmet=kmet+1 ++ k0=lstmet(kmet) ++ ++ if(ltpmet(k0).eq.1) then ++ ++c sutton-chen potentials ++ ++ eps=prmmet(k0,1) ++ sig=prmmet(k0,2) ++ nnn=prmmet(k0,3) ++ mmm=prmmet(k0,4) ++ ccc=prmmet(k0,5) ++ ++ elrcm0=eps*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) ++ vlrcm0=eps*nnn*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) ++ if(i.ne.j) then ++ elrcm0=elrcm0*2.d0 ++ vlrcm0=vlrcm0*2.d0 ++ endif ++ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 ++ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 ++ ++ if(i.eq.j) then ++ ++ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (eps*ccc)**2 ++ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 ++ ++ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (eps*ccc)**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 ++ ++ else ++ ++ k1=lstmet((i*(i+1))/2) ++ k2=lstmet((j*(j+1))/2) ++ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k1,1)*prmmet(k1,5))**2 ++ elrcm2=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k2,1)*prmmet(k2,5))**2 ++ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 ++ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 ++ ++ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k1,1)*prmmet(k1,5))**2 ++ vlrcm2=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* ++ x (prmmet(k2,1)*prmmet(k2,5))**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 ++ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 ++ ++ endif ++ ++ else if(ltpmet(k0).eq.3) then ++ ++c gupta potentials ++ ++ aaa=prmmet(k0,1) ++ rr0=prmmet(k0,2) ++ ppp=prmmet(k0,3) ++ zet=prmmet(k0,4) ++ qqq=prmmet(k0,5) ++ eee=exp(-ppp*(rmet-rr0)/rr0) ++ ++ elrcm0=aaa*(rr0/ppp)*(rmet**2+2.d0*rmet*(rr0/ppp)+ ++ x 2.d0*(rr0/ppp)**2)*eee ++ vlrcm0=aaa*(rmet**3+3.d0*rmet**2*(rr0/ppp)+ ++ x 6.d0*rmet*(rr0/ppp)**2+6.d0*(rr0/rmet)**3)*eee ++ if(i.ne.j) then ++ elrcm0=elrcm0*2.d0 ++ vlrcm0=vlrcm0*2.d0 ++ endif ++ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 ++ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 ++ ++ eee=exp(-2.d0*qqq*(rmet-rr0)/rr0) ++ ++ if(i.eq.j) then ++ ++ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee*zet**2 ++ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 ++ ++ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 ++ ++ else ++ ++ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* ++ x zet**2 ++ elrcm2=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ ++ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* ++ x zet**2 ++ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 ++ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 ++ ++ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm2=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ ++ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* ++ x eee*zet**2 ++ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 ++ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/, ++ x 'long range corrections for metal potentials',/)") ++ write(nrite, ++ x "('short range energy and virial corrections:', ++ x 1p,2e15.6,/)") ++ x elrcm(0)/engunit,vlrcm(0)/engunit ++ write(nrite, ++ x "('density dependent energy and virial corrections',/)") ++ ++ do i=1,ntpatm ++ ++ kmet=lstmet((i*(i+1))/2) ++ if(lstmet(kmet).gt.0)then ++ ++ write(nrite,"(25x,a8,1p,2e15.6)")unqatm(i), ++ x elrcm(i)/engunit,vlrcm(i)/engunit ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lrcmetal ++ ++ subroutine mettab(ntpatm,idnode,rmet,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for reading potential energy and ++c force arrays for EAM metal forces only ++c ++c copyright - daresbury laboratory ++c author - w. smith march 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 atom1,atom2,type ++ integer idnode,ntpatm,idum,fail ++ integer imet,katm1,katm2,jtpatm,i,j,k,ktype ++ integer numpot,numpts,ipot ++ real(8) rmet,engunit,start,finish ++ data fail/0/ ++ ++c allocate embedding array ++ ++ allocate(fmet(mxgrid,mxmet,2),stat=fail) ++ if(fail.ne.0)call error(idnode,36) ++ ++c define zero function for undefined interactions ++ ++ do i=1,mxmet ++ ++ fmet(1,i,1)=0.d0 ++ fmet(1,i,2)=0.d0 ++ ++ enddo ++ ++ if(idnode.eq.0)open (ntable,file='TABEAM') ++ ++c skip header record ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ ++c read number of potential functions in file ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ numpot=intstr(record,lenrec,idum) ++ ++ do ipot=1,numpot ++ ++c read data type, atom labels, number of points, start and end ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ ++c indentify data type ++ ++ ktype=1 ++ if(findstring('dens',record,idum).or. ++ x findstring('DENS',record,idum))ktype=2 ++ if(findstring('embe',record,idum).or. ++ x findstring('EMBE',record,idum))ktype=3 ++ call getword(type,record,8,lenrec) ++ ++c identify atom types ++ ++ call getword(atom1,record,8,lenrec) ++ if(ktype.eq.1)then ++ call getword(atom2,record,8,lenrec) ++ else ++ atom2=atom1 ++ endif ++ ++c data specifiers ++ ++ numpts=intstr(record,lenrec,idum) ++ start=dblstr(record,lenrec,idum) ++ finish=dblstr(record,lenrec,idum) ++ ++c check atom indentities ++ ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm1.eq.0.or.katm2.eq.0) then ++ if(idnode.eq.0) ++ x write(nrite,'(a)') ' **** '//atom1//' *** '//atom2//' ****' ++ call error(idnode,81) ++ endif ++ ++c check array dimensions ++ ++ if(mxbuff.lt.numpts+4)then ++ ++ if(idnode.eq.0) ++ x write(nrite,*) 'mxbuff must be >=',numpts+4,' in mettab' ++ call error(idnode,28) ++ ++ endif ++ ++c store working parameters (start shifted for DL_POLY interpolation) ++ ++ buffer(1)=dble(numpts+4) ++ buffer(4)=(finish-start)/dble(numpts-1) ++ buffer(2)=start-5.d0*buffer(4) ++ buffer(3)=finish ++ if(idnode.eq.0) ++ x write(nrite,"(16x,2a8,2x,a4,3x,1p,4e13.5)") ++ x atom1,atom2,type,dble(numpts),start,finish,buffer(4) ++ ++c read potential arrays ++ ++ k=4 ++ do j=1,(numpts+3)/4 ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_eamtable_read(idnode,ntable) ++ buffer(k+1)=dblstr(record,lenrec,idum) ++ buffer(k+2)=dblstr(record,lenrec,idum) ++ buffer(k+3)=dblstr(record,lenrec,idum) ++ buffer(k+4)=dblstr(record,lenrec,idum) ++ k=k+4 ++ ++ enddo ++ ++c copy data to internal arrays ++ ++ if(ktype.eq.1)then ++ ++c check range against specified cutoff ++ ++ if(rmet.lt.finish)call error(idnode,26) ++ ++c identify potential ++ ++ imet=lstmet(loc2(katm1,katm2)) ++ ++c pair potential terms ++ ++ vmet(1,imet,1)=buffer(1) ++ vmet(2,imet,1)=buffer(2) ++ vmet(3,imet,1)=buffer(3) ++ vmet(4,imet,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ vmet(i,imet,1)=0.d0 ++ else ++ vmet(i,imet,1)=buffer(i)*engunit ++ buffer(i)=buffer(i)*engunit ++ endif ++ ++ enddo ++ ++c calculate derivative of pair potential function ++ ++ call metal_deriv(imet,vmet,buffer) ++ ++c adapt derivatives for use in interpolation ++ ++ do i=5,numpts+4 ++ vmet(i,imet,2)=-(dble(i)*buffer(4)+buffer(2))* ++ x vmet(i,imet,2) ++ enddo ++ ++ else if(ktype.eq.2)then ++ ++c check range against specified cutoff ++ ++ if(rmet.lt.finish)call error(idnode,26) ++ ++c density terms ++ ++ dmet(1,katm1,1)=buffer(1) ++ dmet(2,katm1,1)=buffer(2) ++ dmet(3,katm1,1)=buffer(3) ++ dmet(4,katm1,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ dmet(i,katm1,1)=0.d0 ++ else ++ dmet(i,katm1,1)=buffer(i) ++ endif ++ ++ enddo ++ ++c calculate derivative of density function ++ ++ call metal_deriv(katm1,dmet,buffer) ++ ++c adapt derivatives for use in interpolation ++ ++ dmet(1,katm1,2)=0.d0 ++ dmet(2,katm1,2)=0.d0 ++ dmet(3,katm1,2)=0.d0 ++ dmet(4,katm1,2)=0.d0 ++ do i=5,numpts+4 ++ dmet(i,katm1,2)=-(dble(i)*buffer(4)+buffer(2))* ++ x dmet(i,katm1,2) ++ enddo ++ ++ else if(ktype.eq.3)then ++ ++c embedding function arrays ++ ++ fmet(1,katm1,1)=buffer(1) ++ fmet(2,katm1,1)=buffer(2) ++ fmet(3,katm1,1)=buffer(3) ++ fmet(4,katm1,1)=buffer(4) ++ ++ do i=5,mxgrid ++ ++ if(i-4.gt.numpts)then ++ fmet(i,katm1,1)=0.d0 ++ else ++ fmet(i,katm1,1)=buffer(i)*engunit ++ buffer(i)=buffer(i)*engunit ++ endif ++ ++ enddo ++ ++c calculate derivative of embedding function ++ ++ call metal_deriv(katm1,fmet,buffer) ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (ntable) ++ ++ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') ++ x 'potential tables read from TABEAM file' ++ ++ return ++ end subroutine mettab ++ ++ subroutine metal_deriv(ityp,vvv,buffer) ++ ++c********************************************************************** ++c ++c calculate numerical derivatives of tabulated EAM metal potentials ++c ++c copyright - daresbury laboratory ++c author - w.smith march 2006 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer ityp,i,npt ++ real(8) vvv,buffer,delmet,aa0,aa1,aa2,aa3,aa4,d1y,d2y,d3y,d4y ++ real(8) f0,f1,f2,f3,f4 ++ ++ dimension vvv(mxgrid,mxmet,2),buffer(mxbuff) ++ ++c interpolation parameters ++ ++ vvv(1,ityp,2)=buffer(1) ++ vvv(2,ityp,2)=buffer(2) ++ vvv(3,ityp,2)=buffer(3) ++ vvv(4,ityp,2)=buffer(4) ++ ++c construct interpolation table ++ ++ delmet=buffer(4) ++ npt=nint(buffer(1))-2 ++ do i=7,npt ++ ++ aa0=buffer(i) ++ f0=buffer(i-2)/aa0 ++ f1=buffer(i-1)/aa0 ++ f2=1.d0 ++ f3=buffer(i+1)/aa0 ++ f4=buffer(i+2)/aa0 ++ ++c calculate numerical differences for 5-point interpolation ++ ++ d1y=(f1-f0) ++ d2y=(f2-f1)-(f1-f0) ++ d3y=(f3-f0)+3.d0*(f1-f2) ++ d4y=(f4-f3)+3.d0*(f2-f3)+3.d0*(f2-f1)+(f0-f1) ++ ++c calculate polynomial coefficients ++ ++ aa0=aa0/delmet ++ aa4=d4y/24.d0 ++ aa3=(d3y+12.d0*aa4)/6.d0 ++ aa2=(d2y+6.d0*aa3-14.d0*aa4)/2.d0 ++ aa1=d1y+3.d0*aa2-7.d0*aa3+15.d0*aa4 ++ ++c calculate derivatives ++ ++ vvv(i,ityp,2)=aa1*aa0 ++ ++c derivatives at extremes of range ++ ++ if(i.eq.7)then ++ ++ vvv(5,ityp,2)=(aa1-4.d0*aa2+12.d0*aa3-32.d0*aa4)*aa0 ++ vvv(6,ityp,2)=(aa1-2.d0*aa2+3.d0*aa3-4.d0*aa4)*aa0 ++ ++ else if(i.eq.npt)then ++ ++ vvv(npt+1,ityp,2)=(aa1+2.d0*aa2+3.d0*aa3+4.d0*aa4)*aa0 ++ vvv(npt+2,ityp,2)=(aa1+4.d0*aa2+12.d0*aa3+32.d0*aa4)*aa0 ++ ++ endif ++ ++ enddo ++ ++c set derivatives to zero beyond end point of function ++ ++ do i=npt+3,mxgrid ++ vvv(i,ityp,2)=0.d0 ++ enddo ++ ++ return ++ end subroutine metal_deriv ++ ++ subroutine abort_eamtable_read(idnode,ntable) ++ ++c*********************************************************************** ++c ++c dl_poly error exit subroutine for reading TABEAM file ++c ++c copyright - daresbury laboratory ++c author - w. smith mar 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer idnode,ntable ++ ++ if(idnode.eq.0)close (ntable) ++ ++ call error(idnode,29) ++ ++ end subroutine abort_eamtable_read ++ ++ end module metal_module +diff -urN dl_class_1.9.orig/srcmod/neu_coul_module.f dl_class_1.9/srcmod/neu_coul_module.f +--- dl_class_1.9.orig/srcmod/neu_coul_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/neu_coul_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,731 @@ ++ module neu_coul_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining neutral group coulomb terms ++c copyright - daresbury laboratory ++c ++c author - w. smith aug 2006 ++c adapted - p.-a. cazade oct 2007 : solvation, free energy etc ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use ewald_module ++ use metafreeze_module ++ use pair_module ++ use setup_module ++ use solvation_module ++ ++ contains ++ ++ subroutine coul0neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c 1/r potential, no truncation or damping. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,epsq,chgprd,rsq,rrr,coul,reps,fcoul ++ real(8) fx,fy,fz ++ real(8) strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ reps=r4pie0/epsq ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(jatm)*chge(iatm)*reps ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++ rsq=rsqdf(m) ++ rrr=sqrt(rsq) ++ ++c calculate coulomb energy and force ++ ++ coul=chgprd/rrr ++ fcoul=coul/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+coul ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-coul ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul0neu ++ ++ subroutine coul2neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces ++c assuming a distance dependant dielectric `constant'. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,epsq,fx,fy,fz,chgprd,rrsq,coul,egamma ++ real(8) strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(iatm)*chge(jatm)*r4pie0/epsq ++ ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate potential energy ++ ++ rrsq=1.d0/rsqdf(m) ++ coul=chgprd*rrsq ++ egamma=2.d0*coul*rrsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+2.d0*coul ++ coul=lambda1*coul ++ egamma=lambda1*egamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-2.d0*coul ++ coul=lambda2*coul ++ egamma=lambda2*egamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and Virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-2.d0*coul ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate forces ++ ++ fx=egamma*xdf(m) ++ fy=egamma*ydf(m) ++ fz=egamma*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-2.d0*coul ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul2neu ++ ++ subroutine coul3neu ++ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq,rcut,alpha) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic force. ++c reaction field potential ++c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) ++c adapted for fennell-gezelter coulombic model ++c by w.smith june 2007 ++c Ref: CJ Fennell and JD Gezelter, J Chem Phys, ++c 124, 234104, (2006) ++c adapted for solvation, free energy and excitation ++c - p.-a. cazade oct 2007 ++c ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester february 1995 ++c stress tensor - t.forester feb 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lexcite,lselect,lskip,newjob,idrive,jdrive ++ integer ik,m,iatm,jatm,kkk ++ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,erc1,fer1 ++ real(8) rcsq,b0,rfld0,rfld1,rfld2,chgprd,rsq,coul,omega,fcoul ++ real(8) fx,fy,fz,rrr,alpha,a1,a2,a3,a4,a5,pp,tt,exp1 ++ real(8) strs(6),strs_loc(6) ++ ++ save newjob,b0,rfld0,rfld1,rfld2,vcon,fcon ++ ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++c reaction field terms ++ ++ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) ++ rfld0=b0/rcut**3 ++ rfld1=(1.d0+b0*0.5d0)/rcut ++ rfld2=rfld0*0.5d0 ++ ++c screened coulomb terms ++ ++ tt=1.d0/(1.d0+pp*alpha*rcut) ++ exp1=exp(-(alpha*rcut)**2) ++ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut ++ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/(rcut*rcut) ++ vcon=erc1+rfld2*rcut**2-rfld1 ++ fcon=rcut*fer1-rfld0*rcut ++ ++ endif ++ ++ lskip=(lfree.or.lexcite) ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic index and charge product ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ chgprd=chge(jatm)*chge(iatm)*r4pie0 ++ if(abs(chgprd).gt.1.d-10)then ++ ++c calculate interatomic distance ++ ++ rsq=rsqdf(m) ++ rrr=sqrt(rsq) ++ ++c error function terms ++ ++ tt=1.d0/(1.d0+pp*alpha*rrr) ++ exp1=exp(-(alpha*rrr)**2) ++ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rrr ++ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/rsq ++ ++c calculate potential energy ++ ++ omega=erc1-vcon+fcon*(rrr-rcut) ++ coul=chgprd*(omega+rfld2*rsq-rfld1) ++ ++c calculate forces ++ ++ fcoul=chgprd*(fer1-fcon/rrr-rfld0) ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre-coul ++ cou_vir=cou_vir+fcoul*rsq ++ coul=lambda1*coul ++ fcoul=lambda1*fcoul ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ cou_fre=cou_fre+coul ++ cou_vir=cou_vir-fcoul*rsq ++ coul=lambda2*coul ++ fcoul=lambda2*fcoul ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate coulombic energy and virial ++ ++ engcpe=engcpe+coul ++ vircpe=vircpe-fcoul*rsq ++ ++c calculate solvation energy ++ ++ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul ++ ++c calculate coulombic force ++ ++ fx=fcoul*xdf(m) ++ fy=fcoul*ydf(m) ++ fz=fcoul*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local definitions ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+coul ++ vir_loc=vir_loc-fcoul*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine coul3neu ++ ++ end module neu_coul_module +diff -urN dl_class_1.9.orig/srcmod/nlist_builders_module.f dl_class_1.9/srcmod/nlist_builders_module.f +--- dl_class_1.9.orig/srcmod/nlist_builders_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/nlist_builders_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,2216 @@ ++ module nlist_builders_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining neighbourlist builder routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use exclude_module ++ use pair_module ++ use setup_module ++ use utility_module ++ ++ contains ++ ++ subroutine nlist_driver ++ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, ++ x nneut,keyfce,rcut,delr,tstep) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to select and implement neighbour list ++c builders for short range force calculations ++c ++c copyright - daresbury laboratory ++c author - w. smith june 2006 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,lneut,lnsq,loglnk,newjob,ltad ++ integer natms,idnode,mxnode,imcon,nneut,keyfce ++ real(8) rcut,delr,tstep ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++c skip if no pair force calculations required ++ ++ if(keyfce.gt.0)then ++ ++c test for updating the Verlet list ++ ++ if(ltad)then ++ ++ call vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) ++ ++ else ++ ++ call vertest(newlst,idnode,mxnode,natms,delr,tstep) ++ ++ endif ++ ++c set up nonbonded interaction (verlet) list ++ ++ newlst=(newjob.or.newlst) ++ ++ if(newlst)then ++ ++ if(.not.lneut)then ++ ++ if(lnsq)then ++ ++c calculate distant interactions explicitly ++ ++ call parlst_nsq(newlst,natms,idnode,mxnode,imcon,rcut) ++ ++ elseif(loglnk)then ++ ++c ignore real space distant interactions ++ ++ call parlink ++ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++ else ++ ++ call parlst ++ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++ endif ++ ++ else ++ ++ if(.not.loglnk)then ++ ++ call parneulst ++ x (newlst,lneut,nneut,idnode,mxnode,imcon,rcut, ++ x delr) ++ ++ else ++ ++ call parlinkneu ++ x (newlst,natms,nneut,idnode,mxnode,imcon, ++ x rcut,delr) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ newjob=.false. ++ ++ return ++ end subroutine nlist_driver ++ ++ subroutine parlst(newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atoms taken into account ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w.smith march 1992 ++c modified - t.forester october 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,lfrzi,ldo ++ integer natms,idnode,mxnode,imcon,ibig,last,mpm2 ++ integer npm2,idum,i,m,ii,j ++ real(8) rcut,delr,rclim,rsq ++ ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c check size of work array ++ ++ if(mxxdf.lt.(natms+1)/2)then ++ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', ++ x (natms+1)/2 ++ call error(idnode,474) ++ endif ++ ++c set control variables ++ ++ last=natms ++ lchk=.true. ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius ++ ++ rclim=(rcut+delr)**2 ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ noxatm(i)=1 ++ ++ enddo ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate atoms to neighbour list ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ ++c reject atoms in excluded pair list ++ ++ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) ++ x then ++ ++ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) ++ ++c reject frozen atom pairs ++ ++ else ++ ++ ldo=.true. ++ if(lfrzi)ldo=(lstfrz(j).eq.0) ++ ++ if(ldo)then ++ ++c calculate interatomic distance ++ ++ if(imcon.eq.6)then ++ ++ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii) ++ ++ else ++ ++ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii)+zdf(ii)*zdf(ii) ++ ++ endif ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.lt.rclim)then ++ ++ lentry(ii)=lentry(ii)+1 ++ ++ if(lentry(ii).gt.mxlist)then ++ ++ lchk=.false. ++ ibig=max(lentry(ii),ibig) ++ ++ endif ++ ++c compile neighbour list array ++ ++ if(lchk)then ++ ++ list(ii,lentry(ii))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be at least ',ibig ++ write(nrite,*) ' mxlist is currently ',mxlist ++ endif ++ call error(idnode,110) ++ ++ endif ++ ++c check all excluded atoms are accounted for ++ ++ do i=1,ii ++ ++ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. ++ ++ enddo ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk) call error(idnode,160) ++ ++ endif ++ ++ return ++ end subroutine parlst ++ ++ subroutine parlink(newlst,natms,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on link-cell method. ++c frozen atoms taken into account ++c ++c to be used with the link version of exclude :exclude_link ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1993 ++c author - t. forester september 1993. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,linc,newjob,lfrzi,ldo ++ integer natms,idnode,mxnode,imcon,idum,nix,niy,niz,fail ++ integer i,ibig,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz,j,icell ++ integer ic,ii,kc,ik,jx,jy,jz,jc,ixl ++ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz ++ real(8) cx,cy,cz,sxd,syd,szd,xd,yd,zd,rsq ++ ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension nix(508),niy(508),niz(508) ++ ++ save newjob ++ data newjob/.true./ ++ ++ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1,2,0,0,-2,2,-1,1,0,-2,2,0, ++ x 0,-1,1,0,-1,1,-2,2,-2,2,-1,1,-1,1,-1,1,-2,2,0,-2,2,0,-2,2,-2,2, ++ x -1,1,-2,2,-2,2,-1,1,-2,2,-2,2,3,0,0,-3,3,-1,1,0,-3,3,0,0,-1,1,0, ++ x -1,1,-3,3,-3,3,-1,1,-1,1,-1,1,-3,3,-2,2,0,-3,3,0,0,-2,2,0,-2,2, ++ x -3,3,-3,3,-2,2,-1,1,-3,3,-3,3,-1,1,-1,1,-2,2,-2,2,-1,1,-2,2,-3,3, ++ x -3,3,-2,2,-2,2,-2,2,-3,3,0,-3,3,0,-3,3,-3,3,-1,1,-3,3,-3,3,-1,1, ++ x -3,3,-3,3,-2,2,-3,3,-3,3,-2,2,-3,3,-3,3,4,0,0,-4,4,-1,1,0,-4,4,0, ++ x 0,-1,1,0,-1,1,-4,4,-4,4,-1,1,-1,1,-1,1,-4,4,-2,2,0,-4,4,0,0,-2,2, ++ x 0,-2,2,-4,4,-4,4,-2,2,-1,1,-4,4,-4,4,-1,1,-1,1,-2,2,-2,2,-1,1,-2, ++ x 2,-4,4,-4,4,-2,2,-2,2,-2,2,-4,4,-3,3,0,-4,4,0,0,-3,3,0,-3,3,-4,4, ++ x -4,4,-3,3,-1,1,-4,4,-4,4,-1,1,-1,1,-3,3,-3,3,-1,1,-3,3,-4,4,-4,4, ++ x -3,3,-2,2,-4,4,-4,4,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3,-4,4,-4,4,-3,3, ++ x -3,3,-3,3,-4,4,0,-4,4,0,-4,4,-4,4,-1,1,-4,4,-4,4,-1,1,-4,4,-4,4, ++ x -2,2,-4,4,-4,4,-2,2,-4,4,-4,4,-3,3,-4,4,-4,4,-3,3,5,0,0,-5,5,-1, ++ x 1,0,-5,5,0,0,-1,1,0,-1,1,-5,5,-5,5,-1,1,-1,1,-1,1,-5,5,-2,2,0,-5, ++ x 5,0,0,-2,2,0,-2,2,-5,5,-5,5,-2,2,-1,1,-5,5,-5,5,-1,1,-1,1,-2,2, ++ x -2,2,-1,1,-2,2,-5,5,-5,5,-2,2,-2,2,-2,2,-5,5,-3,3,0,-5,5,0,0,-3, ++ x 3,0,-3,3,-5,5,-5,5,-3,3,-1,1,-5,5,-5,5,-1,1,-1,1,-3,3,-3,3,-1,1, ++ x -3,3,-5,5,-5,5,-3,3,-2,2,-5,5,-5,5,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3, ++ x -5,5,-5,5,-3,3,-3,3,-3,3/ ++ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1,0,2,0,1,1,2,2,-2,0,0,2, ++ x -1,0,0,1,-2,-2,-1,-1,1,1,2,2,-1,-1,1,1,2,2,-2,0,0,2,-2,-2,2,2,-2, ++ x -2,-1,-1,1,1,2,2,-2,-2,2,2,0,3,0,1,1,3,3,-3,0,0,3,-1,0,0,1,-3,-3, ++ x -1,-1,1,1,3,3,-1,-1,1,1,2,2,3,3,-3,0,0,3,-2,0,0,2,-3,-3,-2,-2,2, ++ x 2,3,3,-3,-3,-1,-1,1,1,3,3,-2,-2,-1,-1,1,1,2,2,-3,-3,-2,-2,2,2,3, ++ x 3,-2,-2,2,2,3,3,-3,0,0,3,-3,-3,3,3,-3,-3,-1,-1,1,1,3,3,-3,-3,3,3, ++ x -3,-3,-2,-2,2,2,3,3,-3,-3,3,3,0,4,0,1,1,4,4,-4,0,0,4,-1,0,0,1,-4, ++ x -4,-1,-1,1,1,4,4,-1,-1,1,1,2,2,4,4,-4,0,0,4,-2,0,0,2,-4,-4,-2,-2, ++ x 2,2,4,4,-4,-4,-1,-1,1,1,4,4,-2,-2,-1,-1,1,1,2,2,-4,-4,-2,-2,2,2, ++ x 4,4,-2,-2,2,2,3,3,4,4,-4,0,0,4,-3,0,0,3,-4,-4,-3,-3,3,3,4,4,-4, ++ x -4,-1,-1,1,1,4,4,-3,-3,-1,-1,1,1,3,3,-4,-4,-3,-3,3,3,4,4,-4,-4, ++ x -2,-2,2,2,4,4,-3,-3,-2,-2,2,2,3,3,-4,-4,-3,-3,3,3,4,4,-3,-3,3,3, ++ x 4,4,-4,0,0,4,-4,-4,4,4,-4,-4,-1,-1,1,1,4,4,-4,-4,4,4,-4,-4,-2,-2, ++ x 2,2,4,4,-4,-4,4,4,-4,-4,-3,-3,3,3,4,4,0,5,0,1,1,5,5,-5,0,0,5,-1, ++ x 0,0,1,-5,-5,-1,-1,1,1,5,5,-1,-1,1,1,2,2,5,5,-5,0,0,5,-2,0,0,2,-5, ++ x -5,-2,-2,2,2,5,5,-5,-5,-1,-1,1,1,5,5,-2,-2,-1,-1,1,1,2,2,-5,-5, ++ x -2,-2,2,2,5,5,-2,-2,2,2,3,3,5,5,-5,0,0,5,-3,0,0,3,-5,-5,-3,-3,3, ++ x 3,5,5,-5,-5,-1,-1,1,1,5,5,-3,-3,-1,-1,1,1,3,3,-5,-5,-3,-3,3,3,5, ++ x 5,-5,-5,-2,-2,2,2,5,5,-3,-3,-2,-2,2,2,3,3,-5,-5,-3,-3,3,3,5,5,-3, ++ x -3,3,3/ ++ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,0,0,1,1,1,1,2,2,2, ++ x 2,1,1,1,1,1,1,1,1,2,2,2,2,0,0,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2, ++ x 2,2,2,0,0,3,0,0,0,0,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,3,3,3,3,0,0, ++ x 0,0,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3, ++ x 3,3,2,2,2,2,2,2,2,2,3,3,3,3,0,0,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3, ++ x 2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,1,1,1,1,4,4,4,4,1, ++ x 1,1,1,1,1,1,1,4,4,4,4,0,0,0,0,2,2,2,2,4,4,4,4,1,1,1,1,1,1,1,1,2, ++ x 2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,4,4,4,4,0,0,0,0,3, ++ x 3,3,3,4,4,4,4,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,2, ++ x 2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4, ++ x 4,4,4,0,0,4,4,4,4,1,1,1,1,4,4,4,4,4,4,4,4,2,2,2,2,4,4,4,4,4,4,4, ++ x 4,3,3,3,3,4,4,4,4,4,4,4,4,0,0,5,0,0,0,0,1,1,1,1,5,5,5,5,1,1,1,1, ++ x 1,1,1,1,5,5,5,5,0,0,0,0,2,2,2,2,5,5,5,5,1,1,1,1,1,1,1,1,2,2,2,2, ++ x 2,2,2,2,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,5,5,5,5,0,0,0,0,3,3,3,3, ++ x 5,5,5,5,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,2,2,2,2, ++ x 2,2,2,2,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,5,5,5,5/ ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1890) ++ ++ if(newlst)then ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x call error(idnode,300) ++ lchk=.true. ++ ibig=0 ++ ++c zero link arrays ++ ++ do i=1,natms ++ link(i)=0 ++ enddo ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++c real space cut off ++ ++ rcsq=(rcut+delr)**2 ++ ++c create mock cell vector for non-periodic system ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++c find maximum x,y,z postions ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ ++ endif ++ ++ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) ++ ++ endif ++ ++ call dcell(cell,celprp) ++ call invert(cell,rcell,det) ++ ++c ratio of link cell length to cut off diameter - max value is 5 ++ ++c irat=nint((rcut+delr)/rlink) ++c irat=min(max(irat,1),5) ++ ++ irat=1 ++ ++ ++c number of subcells ++ ++ if (irat.eq.1)then ++ ++ nsbcll=14 ++ ++ elseif(irat.eq.2)then ++ ++ nsbcll=63 ++ ++ elseif(irat.eq.3)then ++ ++ nsbcll=156 ++ ++ elseif(irat.eq.4)then ++ ++ nsbcll=307 ++ ++ elseif(irat.eq.5)then ++ ++ nsbcll=508 ++ ++ endif ++ ++ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) ++ ily=int(celprp(8)*dble(irat)/(rcut+delr)) ++ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) ++ ++c check there are enough link cells ++ ++ linc=.true. ++ if(ilx.lt.2*irat+1)linc=.false. ++ if(ily.lt.2*irat+1)linc=.false. ++ if(ilz.lt.2*irat+1)linc=.false. ++ if(.not.linc) call error(idnode,305) ++ ncells=ilx*ily*ilz ++ if(ncells.gt.mxcell) call error(idnode,392) ++ ++c calculate link cell indices ++ ++ do i=1,ncells ++ ++ lct(i)=0 ++ ++ enddo ++ ++c link-cell cutoff for reduced space ++ ++ xdc=dble(ilx) ++ ydc=dble(ily) ++ zdc=dble(ilz) ++ ++c reduced space coordinates ++ if(newjob)then ++ ++ newjob=.false. ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(mxnode.gt.1) call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ do i=1,natms ++ ++ tx=xxx(i) ++ ty=yyy(i) ++ tz=zzz(i) ++ ++ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 ++ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 ++ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 ++ ++ enddo ++ ++c link neighbours ++ ++ do i=1,natms ++ ++ ix=min(int(xdc*uxx(i)),ilx-1) ++ iy=min(int(ydc*uyy(i)),ily-1) ++ iz=min(int(zdc*uzz(i)),ilz-1) ++ ++ icell=1+ix+ilx*(iy+ily*iz) ++ ++ j=lct(icell) ++ lct(icell)=i ++ link(i)=j ++ ++ enddo ++ ++c set control variables for loop over subcells ++ ++ ix=1 ++ iy=1 ++ iz=1 ++ ++c primary loop over subcells ++ ++ do ic=1,ncells ++ ++ ii=lct(ic) ++ if(ii.gt.0)then ++ ++c secondary loop over subcells ++ ++ ik=0 ++ ++ do kc=1,nsbcll ++ ++ i=ii ++ ++ cx=0.d0 ++ cy=0.d0 ++ cz=0.d0 ++ jx=ix+nix(kc) ++ jy=iy+niy(kc) ++ jz=iz+niz(kc) ++ ++c minimum image convention ++ ++ if(jx.gt.ilx)then ++ ++ jx=jx-ilx ++ cx=1.d0 ++ ++ elseif(jx.lt.1)then ++ ++ jx=jx+ilx ++ cx=-1.d0 ++ ++ endif ++ ++ if(jy.gt.ily)then ++ ++ jy=jy-ily ++ cy=1.d0 ++ ++ elseif(jy.lt.1)then ++ ++ jy=jy+ily ++ cy=-1.d0 ++ ++ endif ++ ++ if(jz.gt.ilz)then ++ ++ jz=jz-ilz ++ cz=1.d0 ++ ++ elseif(jz.lt.1)then ++ ++ jz=jz+ilz ++ cz=-1.d0 ++ ++ endif ++ ++c index of neighbouring cell ++ ++ jc=jx+ilx*((jy-1)+ily*(jz-1)) ++ j=lct(jc) ++ ++c ignore if empty ++ ++ if(j.gt.0)then ++ ++ do while(i.ne.0) ++ ++c test if site is of interest to this node ++ ++ if(mod(i-1,mxnode).eq.idnode)then ++ ++ ++c i's index for this processor ++ ik=((i-1)/mxnode)+1 ++ ++c test if i is a frozen atom ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++ if(ic.eq.jc) j=link(i) ++ if(j.gt.0)then ++ ++ do while(j.ne.0) ++ ++c test of frozen atom pairs ++ ++ ldo=.true. ++ if(lfrzi)ldo=(lstfrz(j).eq.0) ++ ++ if(ldo)then ++ ++c distance in real space : minimum image applied ++ ++ sxd=uxx(j)-uxx(i)+cx ++ syd=uyy(j)-uyy(i)+cy ++ szd=uzz(j)-uzz(i)+cz ++ ++ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd ++ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd ++ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd ++ ++ if(imcon.eq.6)then ++ ++ rsq=xd**2+yd**2 ++ ++ else ++ ++ rsq=xd**2+yd**2+zd**2 ++ ++ endif ++ ++c test of distance ++ if(rcsq.gt.rsq)then ++ ++c test for excluded atom ++ ++ linc=.true. ++ do ixl=1,nexatm(ik) ++ ++ if(lexatm(ik,ixl).eq.j) linc=.false. ++ ++ enddo ++ ++ if(linc)then ++ ++ lentry(ik)=lentry(ik)+1 ++ ++ if(lentry(ik).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ik)) ++ lchk=.false. ++ ++ else ++ ++ list(ik,lentry(ik))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ j=link(j) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ j=lct(jc) ++ i=link(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ ix=ix+1 ++ if(ix.gt.ilx)then ++ ++ ix=1 ++ iy=iy+1 ++ ++ if(iy.gt.ily)then ++ ++ iy=1 ++ iz=iz+1 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be >= ',ibig ++ write(nrite,*) ' mxlist is currenty ',mxlist ++ endif ++ call error(idnode,106) ++ ++ endif ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (uxx,uyy,uzz,stat=fail) ++ ++ return ++ end subroutine parlink ++ ++ subroutine parneulst(newlst,lneut,nneut,idnode,mxnode,imcon, ++ x rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atoms taken into account ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - t.forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,lneut,safe,lfrzi ++ integer nneut,idnode,mxnode,imcon,idum,fail,mpm2,npm2,ibig ++ integer i,ill,ia,im,jmlast,jmwrap,nuei1,nuei2,ii,jm1,jm,jj0,jj2 ++ integer j,ii1 ++ real(8) rcut,delr,rclim,fi,rrr,rcl1 ++ ++ logical, allocatable :: lms(:) ++ dimension fi(3) ++ ++ data fail/0/ ++ ++C DIR$ CACHE_ALIGN fi ++ ++c allocate work arrays ++ ++ allocate (lms(mxneut),stat=fail) ++ if(fail.ne.0)call error(idnode,1910) ++ ++ if(newlst.and.lneut)then ++ ++c set control variables ++ ++ safe=.true. ++ lchk= .true. ++ mpm2=(nneut+2)/2 ++ npm2=(nneut+1)/2 ++ ++c set cutoff radius ++ ++ rcl1=(rcut+delr) ++ rclim=(rcut+delr)**2 ++ ibig=0 ++ ill=0 ++ ++c construct pair force neighbour list: neutral groups ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++ ++c outer loop over groups ++ ++ ia=0 ++ ++ do im=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ if(im.ge.mpm2) mpm2=npm2 ++ ++ lms(1)=.false. ++ do j=2,mpm2 ++ lms(j)=.true. ++ enddo ++ ++ jmlast=min(nneut,im+mpm2-1) ++ jmwrap=max(0,im+mpm2-1-nneut) ++ ++c loop over atomic pairs ++ ++ nuei1=neulst(im) ++ nuei2=neulst(im+1)-1 ++ ++ do i=nuei1,nuei2 ++ ++ fi(1)=xxx(i) ++ fi(2)=yyy(i) ++ fi(3)=zzz(i) ++ lfrzi=(lstfrz(i).eq.0) ++ ++ ii=0 ++ jm1=1 ++ do jm=im+1,jmlast ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ xdf(ii)=fi(1)-xxx(j) ++ ydf(ii)=fi(2)-yyy(j) ++ zdf(ii)=fi(3)-zzz(j) ++ ++ else ++ ++ ibig=max(ibig,ii) ++ safe=.false. ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ xdf(ii)=fi(1)-xxx(j) ++ ydf(ii)=fi(2)-yyy(j) ++ zdf(ii)=fi(3)-zzz(j) ++ ++ else ++ ++ safe=.false. ++ ibig=max(ibig,ii) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c apply minimum image convention ++ ++ ii1=min(ii,mxxdf) ++ call images(imcon,0,1,ii1,cell,xdf,ydf,zdf) ++ ++c search for those in cutoff ++ ++ ii=0 ++ jm1=1 ++ do jm=im+1,jmlast ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ if(lms(jm1))then ++ ++ if(lfrzi)then ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ elseif(lstfrz(j).eq.0)then ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(lms(jm1))then ++ ++ jj0=neulst(jm) ++ jj2=neulst(jm+1)-1 ++ ++ do j=jj0,jj2 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ ++ if(lms(jm1))then ++ ++ if(lfrzi)then ++ ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ elseif(lstfrz(j).eq.0)then ++ ++ if(abs(zdf(ii)).lt.rcl1)then ++ if(abs(ydf(ii)).lt.rcl1)then ++ if(abs(xdf(ii)).lt.rcl1)then ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ if(rrr.lt.rclim) lms(jm1)=.false. ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c compile neighbour list for ia ++c with running check of neighbour list array capacity ++ ++ jm1=0 ++ do jm=im,jmlast ++ ++ jm1=jm1+1 ++ if(.not.lms(jm1))then ++ ++ lentry(ia)=lentry(ia)+1 ++ if(lentry(ia).le.mxlist)then ++ ++ list(ia,lentry(ia))=jm ++ ++ else ++ ++ ill=max(ill,lentry(ia)) ++ lchk=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ do jm=1,jmwrap ++ ++ jm1=jm1+1 ++ if(.not.lms(jm1))then ++ ++ lentry(ia)=lentry(ia)+1 ++ if(lentry(ia).le.mxlist)then ++ ++ list(ia,lentry(ia))=jm ++ ++ else ++ ++ ill=max(ill,lentry(ia)) ++ lchk=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ if(.not.lchk)then ++ ++ call gimax(ill,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be at least ',ill ++ write(nrite,*) ' mxlist is currently ',mxlist ++ endif ++ call error(idnode,108) ++ ++ endif ++ ++c terminate job if work arrays exceeded ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*)'mxxdf must be at least ',ibig ++ write(nrite,*)'mxxdf is currently ',mxxdf ++ endif ++ call error(idnode,476) ++ endif ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(lms,stat=fail) ++ ++ return ++ end subroutine parneulst ++ ++ subroutine parlinkneu ++ x (newlst,natms,nneut,idnode,mxnode,imcon,rcut,delr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on link-cell method with neutral groups ++c frozen atoms taken into account ++c ++c to be used with the link version of exclude :excludeneu_link ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1996 ++c author - t. forester january 1996. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst,linc,newjob,lfrzi,ldo,swop ++ integer natms,nneut,idnode,mxnode,imcon,idum,fail,ibig ++ integer nix,niy,niz,i,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz ++ integer icell,j,ic,ii,kc,jx,jy,jz,jc,ineu,ik,jneu,ineua,jneua ++ integer ika,jneua1,i1,j1 ++ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz ++ real(8) cx,cy,cz,sxd,syd,szd,rsq,xd,yd,zd ++ ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ ++ dimension nix(14),niy(14),niz(14) ++ ++ save newjob ++ ++ data newjob/.true./ ++ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1/ ++ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1/ ++ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1/ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1900) ++ ++ lchk=.true. ++ ibig=0 ++ if(newlst)then ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x call error(idnode,300) ++ ++c zero link arrays ++ ++ do i=1,natms ++ ++ link(i)=0 ++ ++ enddo ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ ++ enddo ++ ++c real space cut off ++ ++ rcsq=(rcut+delr)**2 ++c ++c create mock cell vector for non-periodic system ++ ++ if(imcon.eq.0.or.imcon.eq.6)then ++ ++c find maximum x,y,z postions ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ if(imcon.eq.0)then ++ ++ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) ++ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ ++ endif ++ ++ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) ++ ++ endif ++ ++ call dcell(cell,celprp) ++ call invert(cell,rcell,det) ++ ++c ratio of link cell length to cut off diameter ++ ++ irat=1 ++ ++c number of subcells ++ ++ nsbcll=14 ++ ++ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) ++ ily=int(celprp(8)*dble(irat)/(rcut+delr)) ++ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) ++c ++c check there are enough link cells ++ ++ linc=.false. ++ if(ilx.lt.2*irat+1) linc=.true. ++ if(ily.lt.2*irat+1) linc=.true. ++ if(ilz.lt.2*irat+1) linc=.true. ++ if(linc) call error(idnode,305) ++ ++ ncells=ilx*ily*ilz ++ if(ncells.gt.mxcell)then ++ ++ if(idnode.eq.0) write(nrite,*) 'mxcell must be >= ',ncells ++ call error(idnode,392) ++ ++ endif ++ ++c calculate link cell indices ++ ++ do i=1,ncells ++ ++ lct(i)=0 ++ ++ enddo ++ ++c link-cell cutoff for reduced space ++ ++ xdc=dble(ilx) ++ ydc=dble(ily) ++ zdc=dble(ilz) ++ ++c reduced space coordinates ++ if(newjob)then ++ ++ newjob=.false. ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(mxnode.gt.1) call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++ do i=1,natms ++ ++ tx=xxx(i) ++ ty=yyy(i) ++ tz=zzz(i) ++ ++ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 ++ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 ++ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 ++ ++ enddo ++ ++c link neighbours ++ ++ do i=1,natms ++ ++ ix=min(int(xdc*uxx(i)),ilx-1) ++ iy=min(int(ydc*uyy(i)),ily-1) ++ iz=min(int(zdc*uzz(i)),ilz-1) ++ ++ icell=1+ix+ilx*(iy+ily*iz) ++ ++ j=lct(icell) ++ lct(icell)=i ++ link(i)=j ++ ++ enddo ++ ++c set control variables for loop over subcells ++ ++ ix=1 ++ iy=1 ++ iz=1 ++ ++c primary loop over subcells ++ ++ do ic=1,ncells ++ ++ ii=lct(ic) ++ if(ii.gt.0)then ++ ++c secondary loop over subcells ++ ++ do kc=1,nsbcll ++ ++ i=ii ++ ++ cx=0.d0 ++ cy=0.d0 ++ cz=0.d0 ++ jx=ix+nix(kc) ++ jy=iy+niy(kc) ++ jz=iz+niz(kc) ++ ++c minimum image convention ++ ++ if(jx.gt.ilx)then ++ ++ jx=jx-ilx ++ cx=1.d0 ++ ++ elseif(jx.lt.1)then ++ ++ jx=jx+ilx ++ cx=-1.d0 ++ ++ endif ++ ++ if(jy.gt.ily)then ++ ++ jy=jy-ily ++ cy=1.d0 ++ ++ elseif(jy.lt.1)then ++ ++ jy=jy+ily ++ cy=-1.d0 ++ ++ endif ++ ++ if(jz.gt.ilz)then ++ ++ jz=jz-ilz ++ cz=1.d0 ++ ++ elseif(jz.lt.1)then ++ ++ jz=jz+ilz ++ cz=-1.d0 ++ ++ endif ++ ++c index of neighbouring cell ++ ++ jc=jx+ilx*((jy-1)+ily*(jz-1)) ++ j=lct(jc) ++ ++c ignore if empty ++ ++ if(j.gt.0)then ++ ++ do while(i.ne.0) ++ ++c test if site is of interest to this node ++ ++ ineu=lstneu(i) ++ ik=0 ++ ++c i's group index for this processor ++ ++ if(mod(ineu-1,mxnode).eq.idnode) ++ x ik=((ineu-1)/mxnode)+1 ++ ++c test if i is a frozen atom ++ ++ lfrzi=(lstfrz(i).ne.0) ++ ++ if(ic.eq.jc) j=link(i) ++ if(j.gt.0)then ++ ++ do while(j.ne.0) ++ ++ jneu=lstneu(j) ++ ++c swop tests for switching of group indices, ++c ldo for 'doing' interaction ++ ++ swop=.false. ++ ldo=(ik.gt.0) ++ jneua=jneu ++ ineua=ineu ++ ika=ik ++ ++c keep only Brode-Ahlrichs pairs ++ ++ if(jneua.ge.ineua)then ++ ++ if(jneua-ineua.gt.nneut/2)then ++ ++ swop=(mod(jneu-1,mxnode).eq.idnode) ++ if(swop)then ++ ldo=((nneut+ineua-jneua).le.(nneut-1)/2) ++ else ++ ldo=.false. ++ endif ++ ++ endif ++ ++ elseif(nneut+jneua-ineua.gt.(nneut-1)/2)then ++ ++ swop=(mod(jneu-1,mxnode).eq.idnode) ++ if(swop)then ++ ldo=((ineua-jneua).le.nneut/2) ++ else ++ ldo=.false. ++ endif ++ ++ endif ++ ++ if(swop.and.ldo)then ++ jneua=ineu ++ ineua=jneu ++ ika=((jneu-1)/mxnode)+1 ++ endif ++ ++c test of frozen atom pairs ++ ++ if(lfrzi.and.ldo)ldo=(lstfrz(j).eq.0) ++ ++c check we haven't already included this group in the list ... ++ ++ jneua1=0 ++ do while ++ x (ldo.and.jneua1.lt.min(lentry(ika),mxlist)) ++ ++ jneua1=jneua1+1 ++ if(list(ika,jneua1).eq.jneua) ldo=.false. ++ ++ enddo ++ ++ if(ldo)then ++ ++c distance in real space : minimum image applied ++ ++ sxd=uxx(j)-uxx(i)+cx ++ syd=uyy(j)-uyy(i)+cy ++ szd=uzz(j)-uzz(i)+cz ++ ++ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd ++ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd ++ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd ++ ++ rsq=xd*xd+yd*yd+zd*zd ++ ++c test of distance ++ ++ if(rsq.lt.rcsq)then ++ ++ lentry(ika)=lentry(ika)+1 ++ if(lentry(ika).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ika)) ++ lchk=.false. ++ ++ else ++ ++ list(ika,lentry(ika))=jneua ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ j=link(j) ++ ++ enddo ++ ++ endif ++ ++ j=lct(jc) ++ i=link(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ ix=ix+1 ++ if(ix.gt.ilx)then ++ ++ ix=1 ++ iy=iy+1 ++ ++ if(iy.gt.ily)then ++ ++ iy=1 ++ iz=iz+1 ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*)'mxlist must be at least ',ibig ++ write(nrite,*)'mxlist is currently ',mxlist ++ endif ++ call error(idnode,107) ++ ++ endif ++ ++c sort list into order .. ++c use link as a work array ++ ++ ik=0 ++ do i=1+idnode,nneut,mxnode ++ ++ ik=ik+1 ++ do j=1,lentry(ik) ++ ++ link(j)=list(ik,j) ++ ++ enddo ++ call shellsort(lentry(ik),link) ++ ++c ensure Brode-Ahlrichs ordering ++ ++ i1=lentry(ik)+1 ++ j1=0 ++ do j=1,lentry(ik) ++ ++ if(link(j).ge.i)then ++ ++ j1=j1+1 ++ list(ik,j1)=link(j) ++ i1=min(i1,j) ++ ++ endif ++ ++ enddo ++ ++ do j=1,i1-1 ++ ++ j1=j1+1 ++ list(ik,j1)=link(j) ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (uxx,uyy,uzz,stat=fail) ++ ++ return ++ end subroutine parlinkneu ++ ++ subroutine parlst_nsq ++ x (newlst,natms,idnode,mxnode,imcon,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing the verlet neighbour ++c list based on the brode-ahlrichs scheme ++c frozen atom option included ++c ++c to be used with multiple_nsq ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c adapted - w.smith aug 2008 - solvation, excitation etc ++c ++c stress tensor : t.forester may 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lchk,newlst ++ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 ++ integer npm2,m,ii,j,idum ++ real(8) rcut,rclim,rsq,rrr ++ ++ if(newlst)then ++ ++ ibig=0 ++ ++c check size of work array ++ ++ if(mxxdf.lt.(natms+1)/2)then ++ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', ++ x (natms+1)/2 ++ call error(idnode,475) ++ endif ++ ++c set control variables ++ ++ last=natms ++ lchk=.true. ++ mpm2=natms/2 ++ npm2=(natms-1)/2 ++ ++c set cutoff radius - ignore border width ++ ++ rclim=(rcut)**2 ++ ++c construct pair force neighbour list ++ ++ do i=1,msatms ++ ++ lentry(i)=0 ++ noxatm(i)=1 ++ ++ enddo ++ ++c outer loop over atoms ++ ++ do m=1,mpm2 ++ ++ if(m.gt.npm2)last=mpm2 ++ ++c inner loop over atoms ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++c calculate interatomic displacements ++ ++ ii=ii+1 ++ xdf(ii)=xxx(i)-xxx(j) ++ ydf(ii)=yyy(i)-yyy(j) ++ zdf(ii)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate atoms to neighbour list ++ ++ ii=0 ++ ++ do i=idnode+1,last,mxnode ++ ++c calculate atom indices ++ ++ j=i+m ++ if(j.gt.natms)j=j-natms ++ ++ ii=ii+1 ++ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) ++ x then ++ ++ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) ++ ++ elseif(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then ++ ++c reject frozen atoms and calculate interatomic distance ++ ++ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c running check of neighbour list array capacity ++ ++ if(rsq.lt.rclim)then ++ ++ lentry(ii)=lentry(ii)+1 ++ ++ if(lentry(ii).gt.mxlist)then ++ ++ ibig=max(ibig,lentry(ii)) ++ lchk=.false. ++ ++ endif ++ ++c compile neighbour list array ++ ++ if(lchk)then ++ ++ list(ii,lentry(ii))=j ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c terminate job if neighbour list array exceeded ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ ++ if(.not.lchk)then ++ ++ call gisum(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) ' mxlist must be >= ',ibig ++ write(nrite,*) ' mxlist is currenty ',mxlist ++ endif ++ call error(idnode,109) ++ ++ endif ++ ++c check all excluded atoms are accounted for ++ ++ do i=1,ii ++ ++ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. ++ ++ enddo ++ ++ if(mxnode.gt.1)call gstate(lchk) ++ ++ if(.not.lchk) call error(idnode,160) ++ ++ endif ++ ++ return ++ end subroutine parlst_nsq ++ ++ subroutine primlst(idnode,mxnode,natms,imcon,rprim) ++ ++c********************************************************************* ++c ++c dlpoly routine to split interaction list into primary and ++c secondary neighbours for use with multiple timestep method ++c ++c copyright daresbury laboratory ++c author - t. forester february 1993 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,imcon,ii,k,j,i ++ real(8) rprim,rprim2,rsq ++ ++ rprim2=rprim*rprim ++ ii=0 ++ ++ do i=1+idnode,natms,mxnode ++ ++ ii=ii+1 ++ ++ do j=1,lentry(ii) ++ ++ k=iabs(list(ii,j)) ++ xdf(j)=xxx(i)-xxx(k) ++ ydf(j)=yyy(i)-yyy(k) ++ zdf(j)=zzz(i)-zzz(k) ++ ++ enddo ++ ++c apply minimum image convention ++ ++ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) ++ ++c assign atoms as primary or secondary ++ ++ ++ do j=1,lentry(ii) ++ ++c calculate interatomic distance ++ ++ rsq=xdf(j)**2+ydf(j)**2+zdf(j)**2 ++ ++ if(rsq.lt.rprim2)then ++ ++c compile primary neighbour list array : -ve indices ++ ++ list(ii,j)=-iabs(list(ii,j)) ++ ++ else ++ ++c compile secondary neighbour list array : +ve indices ++ ++ list(ii,j)=iabs(list(ii,j)) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine primlst ++ ++ subroutine prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) ++ ++c*********************************************************************** ++c ++c dlpoly routine to partition neutral group list into ++c primary and secondary groups ++c loops over group ineu ++c ++c replicated data version ++c ++c copyright daresbury laboratory 1994 ++c author t.forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newlst,lchk,ldo ++ integer imcon,idnode,mxnode,nneut,ineu,ia,jj,ibig,ii ++ integer jj0,jneu,j,i,idum ++ real(8) rprim,rclim,xi,yi,zi,rrr ++ ++ lchk=.true. ++ ++ if(newlst)then ++ ++c set primary cutoff limit ++ ++ rclim=rprim*rprim ++ ++c set list to negative - signal for seconary shell ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++ do jj=1,lentry(ia) ++ ++ list(ia,jj)=-abs(list(ia,jj)) ++ ++ enddo ++ ++ enddo ++ ++c loop over neutral group ineu sites ++ ++ lchk=.true. ++ ibig=0 ++ ++ ia=0 ++ do ineu=idnode+1,nneut,mxnode ++ ++ ia=ia+1 ++ ++ ii=0 ++ do i=neulst(ineu),neulst(ineu+1)-1 ++ ++ xi=xxx(i) ++ yi=yyy(i) ++ zi=zzz(i) ++ ++ do jj=1,lentry(ia) ++ ++ jneu=-list(ia,jj) ++ jj0=neulst(jneu) ++ ++ if(ineu.eq.jneu) jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,neulst(jneu+1)-1 ++ ++ ii=ii+1 ++ if(ii.le.mxxdf)then ++ xdf(ii)=xi-xxx(j) ++ ydf(ii)=yi-yyy(j) ++ zdf(ii)=zi-zzz(j) ++ else ++ lchk=.false. ++ ibig=ii ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c apply minimum image convention ++ ++ ii=min(ii,mxxdf) ++ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) ++ ++c allocate groups to primary or secondary shell ++c on basis of closest atom-atom interactions ++ ++ ii=0 ++ do i=neulst(ineu),neulst(ineu+1)-1 ++ ++ do jj=1,lentry(ia) ++ ++ jneu=list(ia,jj) ++ ldo=(jneu.lt.0) ++ if(ldo)then ++ jneu=-jneu ++ jj0=neulst(jneu) ++ if(ineu.eq.jneu) jj0=i+1 ++ ++c loop over jneu sites ++ ++ do j=jj0,neulst(jneu+1)-1 ++ ++ if(ldo)then ++ ++ ii=min(ii+1,mxxdf) ++ ++ if(abs(xdf(ii)).lt.rprim)then ++ if(abs(ydf(ii)).lt.rprim)then ++ if(abs(zdf(ii)).lt.rprim)then ++ ++c calculate interatomic distance ++ ++ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 ++ ++c put in primary list if found any interaction close enough ++ ++ if(rrr.le.rclim)then ++ ldo=.false. ++ list(ia,jj)=jneu ++ endif ++ ++ endif ++ endif ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) call gstate(lchk) ++ if(.not.lchk)then ++ ++ call gimax(ibig,1,idum) ++ if(idnode.eq.0)then ++ write(nrite,*) 'mxxdf must be at least ',ibig ++ write(nrite,*) 'mxxdf is currently ',mxxdf ++ endif ++ call error(idnode,477) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine prneulst ++ ++ subroutine vertest(newlst,idnode,mxnode,natms,delr,tstep) ++ ++c********************************************************************* ++c ++c DL_POLY subroutime to test for updating of Verlet list ++c replicated data version ++c ++c copyright daresbury laboratory 1993 ++c author - t. forester may 1993 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,newjob ++ integer idnode,mxnode,natms,i,j,k,moved,ibuff,fail ++ real(8) rmax,dr,delr,tstep ++ ++ real(8), allocatable :: xold(:),yold(:),zold(:) ++ ++ save newjob,xold,yold,zold ++ ++ data newjob/.true./,fail/0/ ++ ++ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) ++ ++ if(newjob)then ++ ++c set up initial arrays ++ ++ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=0.d0 ++ yold(j)=0.d0 ++ zold(j)=0.d0 ++ ++ enddo ++ ++ newjob=.false. ++ newlst=.true. ++ ++ else ++ ++c integrate velocities ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xold(j)+vxx(i) ++ yold(j)=yold(j)+vyy(i) ++ zold(j)=zold(j)+vzz(i) ++ ++ enddo ++ ++c maximum displacement ++ ++ rmax=(delr/2.d0)**2 ++ ++c test atomic displacements ++ ++ moved=0 ++ ++ do k=1,j ++ ++ dr=tstep**2*(xold(k)**2+yold(k)**2+zold(k)**2) ++ if(dr.gt.rmax) moved=moved+1 ++ ++ enddo ++ ++c global sum of moved atoms ++ ++ if(mxnode.gt.1) call gisum(moved,1,ibuff) ++ ++c test for new verlet list ++ ++ newlst=(moved.ge.2) ++ ++c update stored positions ++ ++ if(newlst)then ++ ++ do k=1,j ++ ++ xold(k)=0.d0 ++ yold(k)=0.d0 ++ zold(k)=0.d0 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine vertest ++ ++ subroutine vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) ++ ++c********************************************************************* ++c ++c DL_POLY subroutime to test for updating of Verlet list ++c replicated data version (version 2) ++c ++c copyright daresbury laboratory ++c author - w.smith 2007 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical newlst,newjob ++ integer idnode,mxnode,natms,imcon,i,j,k,moved,ibuff,fail ++ real(8) rmax,dr,delr,tstep ++ ++ real(8), allocatable :: xold(:),yold(:),zold(:) ++ real(8), allocatable :: xdif(:),ydif(:),zdif(:) ++ ++ save newjob,xold,yold,zold ++ ++ data newjob/.true./,fail/0/ ++ ++ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) ++ ++c set up initial arrays ++ ++ allocate (xdif(msatms),ydif(msatms),zdif(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ if(newjob)then ++ ++ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1930) ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ ++ enddo ++ ++ newjob=.false. ++ newlst=.true. ++ ++ else ++ ++c calculate atomic shifts ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xdif(j)=xxx(i)-xold(j) ++ ydif(j)=yyy(i)-yold(j) ++ zdif(j)=zzz(i)-zold(j) ++ ++ enddo ++ ++c minimum image calculation ++ ++ call images(imcon,0,1,j,cell,xdif,ydif,zdif) ++ ++c maximum displacement ++ ++ rmax=(delr/2.d0)**2 ++ ++c test atomic displacements ++ ++ moved=0 ++ ++ do k=1,j ++ ++ dr=(xdif(k)**2+ydif(k)**2+zdif(k)**2) ++ if(dr.gt.rmax)moved=moved+1 ++ ++ enddo ++ ++c global sum of moved atoms ++ ++ if(mxnode.gt.1) call gisum(moved,1,ibuff) ++ ++c test for new verlet list ++ ++ newlst=(moved.ge.2) ++ ++c update stored positions ++ ++ if(newlst)then ++ ++ j=0 ++ do i=idnode+1,natms,mxnode ++ ++ j=j+1 ++ xold(j)=xxx(i) ++ yold(j)=yyy(i) ++ zold(j)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c deallocate arrays ++ ++ deallocate(xdif,ydif,zdif,stat=fail) ++ ++ return ++ end subroutine vertest2 ++ ++ end module nlist_builders_module +diff -urN dl_class_1.9.orig/srcmod/optimiser_module.f dl_class_1.9/srcmod/optimiser_module.f +--- dl_class_1.9.orig/srcmod/optimiser_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/optimiser_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1144 @@ ++ module optimiser_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining structural optimiser routines ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: ggx(:),ggy(:),ggz(:) ++ real(8), allocatable :: hhx(:),hhy(:),hhz(:) ++ real(8), allocatable :: oxx(:),oyy(:),ozz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ ++ save hhx,hhy,hhz ++ ++ contains ++ ++ subroutine optimisation_selector ++ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, ++ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) ++ ++c*********************************************************************** ++c ++c dl_poly routine for selecting and running a nominated ++c structure optimisation algorithm using energy minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith june 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical loptim,stropt,lzero ++ integer idnode,mxnode,natms,imcon,nscons,ngrp,ntfree,keystr ++ integer keytol,ntcons ++ real(8) engcfg,tstep,opttol,hnorm,grad0,grad1,ff1,sgn ++ ++ save grad0,grad1,ff1,sgn,hnorm ++ ++ stropt=.false. ++ ++ if(loptim)then ++ ++c conjugate gradient structure optimisation ++ ++ call strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++ else if(lzero)then ++ ++c zero kelvin structure optimisation ++ ++ call zero_kelvin ++ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) ++ ++ endif ++ ++ return ++ end subroutine optimisation_selector ++ ++ subroutine zero_kelvin ++ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) ++ ++c*********************************************************************** ++c ++c dl_poly routine for zero Kelvin temperature optimization ++c if velocity.Force < 0 then velocity is set to zero in ++c preparation for integration of equations of motion ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester march 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical stropt ++ integer idnode,mxnode,imcon,natms,ngrp,ntfree,fail,i ++ integer iatm0,iatm1,igrp1,igrp2,ifre1,ifre2,jr,ig,j,id ++ real(8) dot,fsq,fcomx,fcomy,fcomz,trx,try,trz,tax,tay,taz ++ real(8) rot,ggg,opttol ++ ++ dimension rot(9) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1920) ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c check for convergence of forces ++ ++ ggg=0.d0 ++ do i=iatm0,iatm1 ++ ggg=ggg+fxx(i)**2+fyy(i)**2+fzz(i)**2 ++ enddo ++ ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ++c check convergence condition for forces ++ ++ if(opttol.ge.abs(ggg)/dble(natms))then ++ ++ stropt=.true. ++ return ++ ++ endif ++ ++ if(ngrp.eq.0) then ++ ++c take component of velocity in direction of force ++ ++ do i=iatm0,iatm1 ++ ++ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ if(dot.lt.0.d0) then ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) ++ fsq=dot/max(1.d-10,fsq) ++ vxx(i)=fxx(i)*fsq ++ vyy(i)=fyy(i)*fsq ++ vzz(i)=fzz(i)*fsq ++ ++ endif ++ ++ enddo ++ ++ else ++ ++c block indices for groups and free atoms ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ do j=ifre1,ifre2 ++ ++c reset atomic velocities ++ ++ i=lstfre(j) ++ ++ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ if(dot.lt.0.d0) then ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) ++ fsq=dot/max(1.d-10,fsq) ++ vxx(i)=fxx(i)*fsq ++ vyy(i)=fyy(i)*fsq ++ vzz(i)=fzz(i)*fsq ++ ++ endif ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c reset rigid body velocites (linear and angular) ++ ++ fcomx=0.d0 ++ fcomy=0.d0 ++ fcomz=0.d0 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c forces on com ++ ++ fcomx=fcomx+fxx(i) ++ fcomy=fcomy+fyy(i) ++ fcomz=fcomz+fzz(i) ++ ++ enddo ++ ++ dot=gvxx(ig)*fcomx+gvyy(ig)*fcomy+gvzz(ig)*fcomz ++ if(dot.lt.0.d0) then ++ ++ gvxx(ig)=0.d0 ++ gvyy(ig)=0.d0 ++ gvzz(ig)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of force ++ ++ fsq=(fcomx**2+fcomy**2+fcomz**2) ++ fsq=dot/max(1.d-10,fsq) ++ gvxx(ig)=fcomx*fsq ++ gvyy(ig)=fcomy*fsq ++ gvzz(ig)=fcomz*fsq ++ ++ endif ++ ++ enddo ++ ++c site to com distances ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ do j=1,numgsit(lstgtp(ig)) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxt(jr)=xxx(i)-gcmx(ig) ++ yyt(jr)=yyy(i)-gcmy(ig) ++ zzt(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ trx=0.d0 ++ try=0.d0 ++ trz=0.d0 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ trx=trx+yyt(jr)*fzz(i)-zzt(jr)*fyy(i) ++ try=try+zzt(jr)*fxx(i)-xxt(jr)*fzz(i) ++ trz=trz+xxt(jr)*fyy(i)-yyt(jr)*fxx(i) ++ ++ enddo ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++c transform to body fixed frame ++ ++ tax=(trx*rot(1)+try*rot(4)+trz*rot(7))*rotinx(id,2) ++ tay=(trx*rot(2)+try*rot(5)+trz*rot(8))*rotiny(id,2) ++ taz=(trx*rot(3)+try*rot(6)+trz*rot(9))*rotinz(id,2) ++ ++ dot=omx(ig)*tax+omy(ig)*tay+omz(ig)*taz ++ if(dot.le.0.d0) then ++ ++ omx(ig)=0.d0 ++ omy(ig)=0.d0 ++ omz(ig)=0.d0 ++ ++ else ++ ++c take component of velocity in direction of torque ++ ++ fsq=(tax**2+tay**2+taz**2) ++ fsq=dot/max(1.d-10,fsq) ++ omx(ig)=tax*fsq ++ omy(ig)=tay*fsq ++ omz(ig)=taz*fsq ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine zero_kelvin ++ ++ subroutine strucopt ++ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, ++ x imcon,ngrp,ntfree,tstep,opttol,fnew,hnorm,grad0,grad1, ++ x ff1,sgn) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for optimising molecular structures ++c based on conjugate gradient method ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2005 ++c ++c note. basis of minimisation criterion : ++c keytol=0 : absolute force ++c keytol=1 : absolute energy ++c keytol=2 : absolute displacement ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ logical stropt,newjob,engchk ++ integer keystr,keytol,idnode,mxnode,natms,i,j,k ++ integer iatm0,iatm1,fail,ngrp,ntcons,nscons,jr ++ integer imcon,ig,jf,id,ntfree,igrp1,igrp2,ifre1,ifre2 ++ real(8) hnorm,grad0,grad1,grad2,ff1,stride,tstep,step ++ real(8) ggg,fnew,fff,gam2,sgn,opttol,dischk ++ ++ dimension fail(nnn) ++ ++ save iatm0,iatm1,igrp1,igrp2,engchk,ifre1,ifre2,newjob ++ ++ data newjob/.true./,engchk/.false./ ++ ++c define initial data ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ if(newjob)then ++ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(1)) ++ endif ++ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) ++ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(3)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(4)) ++ if(ngrp.gt.0)then ++ ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(6)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ if(ngrp.eq.0) ++ x allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxatms),dyy(mxatms),dzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ ++ endif ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1925) ++ enddo ++ ++ if(newjob)then ++ ++c define atoms for this node ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++ newjob=.false. ++ ++ endif ++ ++c step length for relaxation ++ ++ if(ntcons.gt.0)then ++ step=tstep**2 ++ else ++ step=10.d0*tstep**2 ++ endif ++ ++c current system configuration energy ++ ++ fff=fnew ++ ++c initialise conjugate gradient position arrays ++ ++ do i=1,natms ++ ++ oxx(i)=xxx(i) ++ oyy(i)=yyy(i) ++ ozz(i)=zzz(i) ++ ggx(i)=0.d0 ++ ggy(i)=0.d0 ++ ggz(i)=0.d0 ++ ++ enddo ++ ++c define constraint bonds ++ ++ if(ntcons.gt.0)then ++ ++c calculate constraint bond vector ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate pseudo forces for constraint bonds ++ ++ call pseudo_shake(nscons,natms,mxnode,fff) ++ ++ do i=1,natms ++ ++ ggx(i)=fxx(i)+ggx(i) ++ ggy(i)=fyy(i)+ggy(i) ++ ggz(i)=fzz(i)+ggz(i) ++ ++ enddo ++ ++ else ++ ++ do i=1,natms ++ ++ ggx(i)=fxx(i) ++ ggy(i)=fyy(i) ++ ggz(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c calculate pseudo forces for rigid bodies ++ ++ if(ngrp.gt.0)call torque_split ++ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, ++ x uxx,uyy,uzz,dtx,dty,dtz) ++ ++c determine magnitude of 3N force vector ++ ++ ggg=0.d0 ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ enddo ++ ++ else ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ buffer(1)=ggg ++ call gdsum(buffer(1),1,buffer(2)) ++ ggg=buffer(1) ++ endif ++ ggg=sqrt(ggg) ++ ++c check convergence condition for forces ++ ++ if(keytol.eq.0.and.opttol.ge.abs(ggg)/dble(natms))stropt=.true. ++ ++ if(keystr.eq.0) then ++ ++c set original search direction ++ ++ ff1=fff ++ hnorm=ggg ++ grad0=ggg ++ grad1=ggg ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ ++ else ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ ++ enddo ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ hhx(i)=ggx(i) ++ hhy(i)=ggy(i) ++ hhz(i)=ggz(i) ++ ++ enddo ++ ++ enddo ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ keystr=1 ++ sgn=1.d0 ++ ++ elseif(keystr.eq.1)then ++ ++c check convergence condition for energy ++ ++ if(engchk.and.keytol.eq.1.and. ++ x opttol.ge.abs(fff-ff1))stropt=.true. ++ engchk=.false. ++ ++c line search along chosen direction ++ ++ ff1=fff ++ grad2=grad1 ++ grad1=0.d0 ++ do i=iatm0,iatm1 ++ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ enddo ++ if(mxnode.gt.1)then ++ buffer(1)=grad1 ++ call gdsum(buffer(1),1,buffer(2)) ++ grad1=buffer(1) ++ endif ++ grad1=sgn*grad1/hnorm ++ ++c linear extrapolation to minimum ++ ++ stride=sgn*step ++ if(grad1.lt.0.d0)then ++ ++ keystr=2 ++ stride=sgn*step*grad1/(grad2-grad1) ++ ++ endif ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ else ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ elseif(keystr.eq.2)then ++ ++c construct conjugate search vector ++ ++ ff1=fff ++ gam2=(ggg/grad0)**2 ++ hnorm=0.d0 ++ grad0=ggg ++ grad1=0.d0 ++ do i=iatm0,iatm1 ++ ++ hhx(i)=ggx(i)+gam2*hhx(i) ++ hhy(i)=ggy(i)+gam2*hhy(i) ++ hhz(i)=ggz(i)+gam2*hhz(i) ++ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 ++ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) ++ ++ enddo ++ if(mxnode.gt.1)then ++ ++ buffer(1)=hnorm ++ buffer(2)=grad1 ++ call gdsum(buffer(1),2,buffer(3)) ++ hnorm=buffer(1) ++ grad1=buffer(2) ++ ++ endif ++ hnorm=sqrt(hnorm) ++ grad1=grad1/hnorm ++ sgn=sign(1.d0,grad1) ++ grad1=sgn*grad1 ++ stride=sgn*step ++ ++ if(ngrp.eq.0)then ++ ++ do i=iatm0,iatm1 ++ ++ oxx(i)=oxx(i)+stride*hhx(i) ++ oyy(i)=oyy(i)+stride*hhy(i) ++ ozz(i)=ozz(i)+stride*hhz(i) ++ ++ enddo ++ ++ else ++ ++ call turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++ endif ++ ++ engchk=.true. ++ keystr=1 ++ ++ endif ++ ++c merge coordinate arrays ++ ++ if(mxnode.gt.1)then ++ ++ if(ngrp.eq.0)then ++ ++ call merge ++ x (idnode,mxnode,natms,mxbuff,oxx,oyy,ozz,buffer) ++ ++ else ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,oxx,oyy,ozz,buffer) ++ ++ endif ++ ++ endif ++ ++c reassign atomic positions and calculate max displacement ++ ++ dischk=0.d0 ++ do i=1,natms ++ ++ dischk=max(dischk,(xxx(i)-oxx(i))**2+ ++ x (yyy(i)-oyy(i))**2+(zzz(i)-ozz(i))**2) ++ ++ xxx(i)=oxx(i) ++ yyy(i)=oyy(i) ++ zzz(i)=ozz(i) ++ ++ enddo ++ ++c check convergence condition for position ++ ++ if(keytol.eq.2.and.keystr.gt.0.and. ++ x opttol.ge.sqrt(dischk))stropt=.true. ++ ++c deallocate working arrays ++ ++ deallocate(ggx,ggy,ggz,dtx,dty,dtz,oxx,oyy,ozz,stat=fail(1)) ++ if(ngrp.gt.0)then ++ deallocate(txx,tyy,tzz,uxx,uyy,uzz,stat=fail(2)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(3)) ++ if(ngrp.eq.0)deallocate(txx,tyy,tzz,stat=fail(4)) ++ ++ endif ++ ++ return ++ end subroutine strucopt ++ ++ subroutine pseudo_shake(nscons,natms,mxnode,fff) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine treating rigid bonds as stiff harmonic bonds ++c suitable for conjugate gradient minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ real(8), parameter :: harm=1.d6 ++ ++ integer i,j,k,natms,nscons,mxnode ++ real(8) fff,engbnd,dis,rrr,gamma ++ ++c calculate energy and force ++ ++ engbnd=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dis=prmcon(listcon(k,1)) ++ rrr=sqrt(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ engbnd=engbnd+0.5d0*harm*(rrr-dis)**2 ++ gamma=harm*(rrr-dis)/rrr ++ ggx(i)=ggx(i)-dxx(k)*gamma ++ ggy(i)=ggy(i)-dyy(k)*gamma ++ ggz(i)=ggz(i)-dzz(k)*gamma ++ ++ ggx(j)=ggx(j)+dxx(k)*gamma ++ ggy(j)=ggy(j)+dyy(k)*gamma ++ ggz(j)=ggz(j)+dzz(k)*gamma ++ ++ enddo ++ ++c global sum of pseudo forces ++ ++ call global_sum_forces(natms,mxnode,ggx,ggy,ggz) ++ if(mxnode.gt.1)then ++ buffer(1)=engbnd ++ call gdsum(buffer(1),1,buffer(2)) ++ engbnd=buffer(1) ++ endif ++ fff=fff+engbnd ++ ++ return ++ end subroutine pseudo_shake ++ ++ subroutine torque_split ++ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, ++ x uxx,uyy,uzz,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for resolving torques into equivalent atomic ++c forces suitable for conjugate gradient minimisation ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,ig,id,jr,jrs,ngrp,igrp1,igrp2,idnode,imcon,mxnode ++ ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,trq,txx,tyy,tzz ++ real(8) ggx,ggy,ggz,tmp,taq,scale ++ real(8) uxx,uyy,uzz,dtx,dty,dtz ++ ++ dimension ggx(mxatms),ggy(mxatms),ggz(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ dimension dtx(mxatms),dty(mxatms),dtz(mxatms) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c calculate centres of mass of rigid bodies ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c working com is first site in group ++ ++ i=lstrgd(jr+1) ++ txx(ig)=xxx(i) ++ tyy(ig)=yyy(i) ++ tzz(ig)=zzz(i) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uxx(jr)=xxx(i)-txx(ig) ++ uyy(jr)=yyy(i)-tyy(ig) ++ uzz(jr)=zzz(i)-tzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum image from working com ++ ++ call images(imcon,0,1,jr,cell,uxx,uyy,uzz) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=0.d0 ++ gcmy(ig)=0.d0 ++ gcmz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ gcmx(ig)=gcmx(ig)+weight(i)*uxx(jr) ++ gcmy(ig)=gcmy(ig)+weight(i)*uyy(jr) ++ gcmz(ig)=gcmz(ig)+weight(i)*uzz(jr) ++ ++ enddo ++ ++c final centre of mass ++ ++ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) ++ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) ++ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) ++ ++ enddo ++ ++c calculate atom displacements from rigid body com ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c resolve rigid body forces and torques to orthogonal atomic basis ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+ggx(i) ++ fmy=fmy+ggy(i) ++ fmz=fmz+ggz(i) ++ ++ enddo ++ fmx=fmx/dble(numgsit(id)) ++ fmy=fmy/dble(numgsit(id)) ++ fmz=fmz/dble(numgsit(id)) ++ ++c calculate torque on rigid body ++ ++ jr=jrs ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*ggz(i)-dtz(jr)*ggy(i) ++ tqy=tqy+dtz(jr)*ggx(i)-dtx(jr)*ggz(i) ++ tqz=tqz+dtx(jr)*ggy(i)-dty(jr)*ggx(i) ++ ++ enddo ++ ++c magnitude of torque ++ ++ trq=sqrt(tqx**2+tqy**2+tqz**2) ++ ++c construct unit vectors for new site forces ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ txx(i)=dty(jr)*tqz-tqy*dtz(jr) ++ tyy(i)=dtz(jr)*tqx-tqz*dtx(jr) ++ tzz(i)=dtx(jr)*tqy-tqx*dty(jr) ++ tmp=sqrt(txx(i)**2+tyy(i)**2+tzz(i)**2) ++ if(tmp.gt.1.d-10)then ++ ++ txx(i)=txx(i)/tmp ++ tyy(i)=tyy(i)/tmp ++ tzz(i)=tzz(i)/tmp ++ ++ else ++ ++ txx(i)=0.d0 ++ tyy(i)=0.d0 ++ tzz(i)=0.d0 ++ ++ endif ++ ++ enddo ++ ++c construct unit vectors for site location ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uxx(i)=(tyy(i)*tqz-tqy*tzz(i))/trq ++ uyy(i)=(tzz(i)*tqx-tqz*txx(i))/trq ++ uzz(i)=(txx(i)*tqy-tqx*tyy(i))/trq ++ ++ enddo ++ ++c scale unit vectors to working lengths ++ ++ jr=jrs ++ taq=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ tmp=dtx(jr)*uxx(i)+dty(jr)*uyy(i)+dtz(jr)*uzz(i) ++ taq=taq+tmp**2 ++ txx(i)=tmp*txx(i) ++ tyy(i)=tmp*tyy(i) ++ tzz(i)=tmp*tzz(i) ++ uxx(i)=tmp*uxx(i) ++ uyy(i)=tmp*uyy(i) ++ uzz(i)=tmp*uzz(i) ++ ++ enddo ++ ++c calculate force scale factor ++ ++ scale=trq/taq ++ ++c final site forces ++ ++ jr=jrs ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ txx(i)=scale*txx(i) ++ tyy(i)=scale*tyy(i) ++ tzz(i)=scale*tzz(i) ++ ggx(i)=fmx ++ ggy(i)=fmy ++ ggz(i)=fmz ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine torque_split ++ ++ subroutine turn_rigid_body ++ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, ++ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) ++ ++c*********************************************************************** ++c ++c dl_poly routine for updating positions of atoms in a rigid body ++c during a conjugate gradient minimisation ++c ++c copyright daresbury laboratory ++c author w.smith may 2006 ++c ++c note: coz=cos(theta)-1 ++c zin=sin(theta)/theta ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,jr,jf,ig,id,igrp1,igrp2,ifre1,ifre2 ++ real(8) step,hhx,hhy,hhz,uxx,uyy,uzz,txx,tyy,tzz ++ real(8) oxx,oyy,ozz,uuu,ttt,the2,coz,zin ++ ++ dimension hhx(mxatms),hhy(mxatms),hhz(mxatms) ++ dimension oxx(mxatms),oyy(mxatms),ozz(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) ++ ++c update free atom positions ++ ++ do jf=ifre1,ifre2 ++ ++ i=lstfre(jf) ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ enddo ++ ++c update rigid body atoms ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ uuu=uxx(i)**2+uyy(i)**2+uzz(i)**2 ++ if(uuu.gt.1.d-10)then ++ ++ ttt=txx(i)**2+tyy(i)**2+tzz(i)**2 ++ the2=(ttt/uuu)*step**2 ++ ++ coz=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- ++ x the2/132.d0)/90.d0)/56.d0)/30.d0)/12.d0)/2.d0 ++ zin=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- ++ x the2/156.d0)/110.d0)/72.d0)/42.d0)/20.d0)/6.d0+1.d0 ++ ++ oxx(i)=oxx(i)+coz*uxx(i)+step*(hhx(i)+zin*txx(i)) ++ oyy(i)=oyy(i)+coz*uyy(i)+step*(hhy(i)+zin*tyy(i)) ++ ozz(i)=ozz(i)+coz*uzz(i)+step*(hhz(i)+zin*tzz(i)) ++ ++ else ++ ++ oxx(i)=oxx(i)+step*hhx(i) ++ oyy(i)=oyy(i)+step*hhy(i) ++ ozz(i)=ozz(i)+step*hhz(i) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine turn_rigid_body ++ ++ end module optimiser_module +diff -urN dl_class_1.9.orig/srcmod/pair_module.f dl_class_1.9/srcmod/pair_module.f +--- dl_class_1.9.orig/srcmod/pair_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pair_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,46 @@ ++ module pair_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining atom pair data ++c copyright - daresbury laboratory ++c author - w. smith mar 2004 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer, allocatable :: ilist(:),jlist(:) ++ real(8), allocatable :: xdf(:),ydf(:),zdf(:) ++ real(8), allocatable :: rsqdf(:) ++ ++ save ilist,jlist,xdf,ydf,zdf,rsqdf ++ ++ contains ++ ++ subroutine alloc_pair_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ allocate (ilist(mxxdf),stat=fail(1)) ++ allocate (jlist(mxxdf),stat=fail(2)) ++ allocate (xdf(mxxdf),stat=fail(3)) ++ allocate (ydf(mxxdf),stat=fail(4)) ++ allocate (zdf(mxxdf),stat=fail(5)) ++ allocate (rsqdf(mxxdf),stat=fail(6)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1940) ++ enddo ++ ++ end subroutine alloc_pair_arrays ++ ++ end module pair_module +diff -urN dl_class_1.9.orig/srcmod/parse_module.f dl_class_1.9/srcmod/parse_module.f +--- dl_class_1.9.orig/srcmod/parse_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/parse_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,585 @@ ++ module parse_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining parsing arrays ++c copyright - daresbury laboratory ++c author - w. smith jan 2004 ++c ++c*********************************************************************** ++ ++ integer, parameter :: lenrec=150 ++ character*1 record(lenrec) ++ save record ++ ++ contains ++ ++ subroutine getrec(safe,idnode,ifile) ++ ++c********************************************************************* ++c ++c dl_poly subroutine to read a character string on one node ++c and broadcast it to all other nodes ++c ++c copyright daresbury laboratory 1994 ++c author w.smith december 1994 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ ++ character*150 line ++ integer export,import,idnode,ifile,i ++ dimension export(lenrec),import(lenrec) ++ ++ safe=.true. ++ ++ call gsync() ++ ++ if(idnode.eq.0)then ++ ++ read(ifile,'(a150)',end=100)line ++ ++ do i=1,lenrec ++ ++ record(i)=line(i:i) ++ export(i)=ichar(line(i:i)) ++ ++ enddo ++ ++ call gstate(safe) ++ call gisum(export,lenrec,import) ++ ++ return ++ ++ 100 safe=.false. ++ ++ call gstate(safe) ++ ++ else ++ ++ call gstate(safe) ++ if(.not.safe)return ++ ++ do i=1,lenrec ++ ++ export(i)=0 ++ ++ enddo ++ ++ call gisum(export,lenrec,import) ++ ++ do i=1,lenrec ++ ++ record(i)=char(export(i)) ++ ++ enddo ++ ++ return ++ ++ endif ++ ++ end subroutine getrec ++ ++ integer function intstr(word,len,lst) ++ ++c*********************************************************************** ++c ++c dl_poly function for extracting integers from a ++c character string ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith may 1994. ++c ++c parameters: ++c word - input character string ++c len - working length of character string ++c lst - location of space character at end of ++c integer string ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical flag,count,final ++ character*1 n,word,ksn ++ integer lst,len,j,isn ++ ++ dimension n(0:9),word(len) ++ data n/'0','1','2','3','4','5','6','7','8','9'/ ++ ++ isn=1 ++ lst=0 ++ ksn='+' ++ intstr=0 ++ flag=.false. ++ final=.false. ++ count=.false. ++ ++ do while(lst.lt.len.and.(.not.final)) ++ ++ lst=lst+1 ++ flag=.false. ++ ++ do j=0,9 ++ ++ if(n(j).eq.word(lst))then ++ ++ intstr=10*intstr+j ++ count=.true. ++ flag=.true. ++ ++ endif ++ ++ enddo ++ ++ if(count.and.(.not.flag))final=.true. ++ if(flag.and.ksn.eq.'-')isn=-1 ++ ksn=word(lst) ++ ++ enddo ++ ++ intstr=isn*intstr ++ ++ do j=lst,len ++ word(j-lst+1)=word(j) ++ enddo ++ do j=len-lst+2,len ++ word(j)=' ' ++ enddo ++ ++ return ++ end function intstr ++ ++ real(8) function dblstr(word,len,lst) ++ ++c*********************************************************************** ++c ++c dl_poly function for extracting double precisions from a ++c character string. ++c modified from dl_poly function intstr ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith may 1994. ++c modified - t. forester april 1994 ++c ++c parameters: ++c word - input character string ++c len - working length of character string ++c lst - location of space character at end of ++c double precision string ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 n,word,ksn,dot,d,e ++ logical flag,ldot,start,final ++ integer len,lst,iexp,idum,i,j,fail ++ real(8) sn,ten,one ++ dimension n(0:9),word(len) ++ character*1, allocatable :: work(:) ++ ++ data n/'0','1','2','3','4','5','6','7','8','9'/ ++ data dot/'.'/ ++ data d/'d'/ ++ data e/'e'/ ++ ++ allocate(work(len),stat=fail) ++ ++ lst=0 ++ sn=1.d0 ++ ksn='+' ++ ten=10.d0 ++ one=1.d0 ++ ++ dblstr=0.d0 ++ iexp=0 ++ idum=0 ++ start=.false. ++ ldot=.false. ++ final=.false. ++ ++ do while(lst.lt.len.and.(.not.final)) ++ ++ lst=lst+1 ++ flag=.false. ++ ++ do j=0,9 ++ ++ if(n(j).eq.word(lst))then ++ ++ dblstr=ten*dblstr+one*dble(j) ++ flag=.true. ++ start=.true. ++ ++ endif ++ ++ enddo ++ ++ if(dot.eq.word(lst))then ++ ++ flag=.true. ++ ten=1.d0 ++ ldot=.true. ++ start=.true. ++ ++ endif ++ ++ if(flag.and.ksn.eq.'-') sn=-1.d0 ++ if(ldot) one=one/10.d0 ++ ksn=word(lst) ++ if(ksn.eq."D")ksn="d" ++ if(ksn.eq."E")ksn="e" ++ ++ if(start)then ++ ++ if(d.eq.ksn.or.e.eq.ksn)then ++ ++ do i=1,len-lst ++ work(i)=word(i+lst) ++ enddo ++ iexp=intstr(work,len-lst,idum) ++ final=.true. ++ ++ endif ++ ++ if(.not.flag)final=.true. ++ ++ endif ++ ++ enddo ++ ++ dblstr=sn*dblstr*(10.d0**iexp) ++ lst=lst+idum ++ ++ do j=lst,len ++ word(j-lst+1)=word(j) ++ enddo ++ do j=len-lst+2,len ++ word(j)=' ' ++ enddo ++ ++ deallocate(work,stat=idum) ++ ++ return ++ end function dblstr ++ ++ subroutine strip(string,imax) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to strip blanks from start of a string ++c maximum length is 255 characters ++c ++c copyright daresbury laboratory 1993 ++c author t.forester july 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,imax,j ++ character*1 string(imax) ++ ++ do i=1,imax ++ ++ if(string(1).eq.' ')then ++ ++ do j=1,imax-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(imax)=' ' ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine strip ++ ++ subroutine lowcase(string,length) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to lowercase a string of up to 255 characters. ++c Transportable to non-ASCII machines ++c ++c copyright daresbury laboratory 1993 ++c author t. forester july 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 string(*) ++ character*1 letter ++ integer i,length ++ ++ do i=1,min(255,length) ++ ++ letter=string(i) ++ ++ if(letter.eq.'A')then ++ letter='a' ++ else if(letter.eq.'B')then ++ letter='b' ++ else if(letter.eq.'C')then ++ letter='c' ++ else if(letter.eq.'D')then ++ letter='d' ++ else if(letter.eq.'E')then ++ letter='e' ++ else if(letter.eq.'F')then ++ letter='f' ++ else if(letter.eq.'G')then ++ letter='g' ++ else if(letter.eq.'H')then ++ letter='h' ++ else if(letter.eq.'I')then ++ letter='i' ++ else if(letter.eq.'J')then ++ letter='j' ++ else if(letter.eq.'K')then ++ letter='k' ++ else if(letter.eq.'L')then ++ letter='l' ++ else if(letter.eq.'M')then ++ letter='m' ++ else if(letter.eq.'N')then ++ letter='n' ++ else if(letter.eq.'O')then ++ letter='o' ++ else if(letter.eq.'P')then ++ letter='p' ++ else if(letter.eq.'Q')then ++ letter='q' ++ else if(letter.eq.'R')then ++ letter='r' ++ else if(letter.eq.'S')then ++ letter='s' ++ else if(letter.eq.'T')then ++ letter='t' ++ else if(letter.eq.'U')then ++ letter='u' ++ else if(letter.eq.'V')then ++ letter='v' ++ else if(letter.eq.'W')then ++ letter='w' ++ else if(letter.eq.'X')then ++ letter='x' ++ else if(letter.eq.'Y')then ++ letter='y' ++ else if(letter.eq.'Z')then ++ letter='z' ++ endif ++ ++ string(i)=letter ++ ++ enddo ++ ++ return ++ end subroutine lowcase ++ ++ subroutine copystring(oldstr,newstr,length) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to copy one string into another ++c ++c copyright daresbury laboratory ++c author w. smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 newstr(*),oldstr(*) ++ integer i,length ++ ++ do i=1,length ++ ++ newstr(i)=oldstr(i) ++ ++ enddo ++ ++ return ++ end subroutine copystring ++ ++ logical function findstring(seek,string,here) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to find an explicit string in an input record ++c note: variable `seek' is a character string while variable ++c `string' is a character*1 array i.e. code is application specific ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,n,m,here ++ character*(*) seek ++ character*1 string(lenrec) ++ ++ m=lenrec ++ n=len(seek) ++ findstring=.false. ++ ++ here=0 ++ do while(here.le.m-n.and.(.not.findstring)) ++ ++ findstring=.true. ++ ++ do i=1,n ++ if(seek(i:i).ne.string(here+i))findstring=.false. ++ enddo ++ ++ here=here+1 ++ ++ enddo ++ ++ return ++ end function findstring ++ ++ subroutine striptext(string,length,nwords) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to strip leading text from a data record ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical final ++ integer length,nwords,i,j,k ++ character*1 string(length) ++ ++ do k=1,nwords ++ ++ i=0 ++ final=.false. ++ ++ do while(.not.final.and.i.lt.length) ++ ++ i=i+1 ++ ++ if(string(1).eq.' ')then ++ ++ final=.true. ++ ++ else ++ ++ do j=1,length-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(length)=' ' ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine striptext ++ ++ subroutine getword(word,string,len1,len2) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to fetch an 8 character word from a string ++c while ignoring leading blanks ++c ++c copyright daresbury laboratory ++c author w.smith jan 2004 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical final ++ character*8 word ++ integer len1,len2,i,j,k ++ character*1 wrdseq(len1),string(len2) ++ ++ do i=1,len1 ++ wrdseq(i)=' ' ++ enddo ++ ++ i=0 ++ k=0 ++ final=.false. ++ ++ do while(.not.final.and.i.lt.len2) ++ ++ i=i+1 ++ ++ if(string(1).eq.' ')then ++ ++ if(k.gt.0)final=.true. ++ ++ else ++ ++ k=k+1 ++ wrdseq(k)=string(1) ++ if(k.eq.len1)final=.true. ++ ++ endif ++ ++ do j=1,len2-1 ++ ++ string(j)=string(j+1) ++ ++ enddo ++ ++ string(len2)=' ' ++ ++ enddo ++ ++ word=mkwd8(wrdseq) ++ ++ return ++ end subroutine getword ++ ++ character*8 function mkwd8(string) ++ ++c*********************************************************************** ++c ++c DL_POLY routine to make an 8 character word from a string ++c ++c copyright daresbury laboratory ++c author w.smith nov 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i ++ character*1 string(*) ++ ++ do i=1,8 ++ mkwd8(i:i)=string(i) ++ enddo ++ ++ return ++ end function mkwd8 ++ ++ end module parse_module ++ ++ +diff -urN dl_class_1.9.orig/srcmod/pass_tools.f dl_class_1.9/srcmod/pass_tools.f +--- dl_class_1.9.orig/srcmod/pass_tools.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pass_tools.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,318 @@ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about bond ++c constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection (i.e. this version may be intel specific) ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith august 1992. ++c MPI version t.forester may 1995 ++c CPP version - w.smith may 1995 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical safe,lshmov ++ integer idnode,mxnode,natms,nscons,lashap,lishap,listme,ierr ++ integer listin,listot,listcon,lstfrz,i,j,k,jdnode,idum ++ ++ dimension listme(mxatms),listin(mxatms),listot(mxatms) ++ dimension lishap(mxlshp),lashap(mxproc),listcon(mxcons,3) ++ dimension lstfrz(mxatms) ++ ++ integer status(MPI_STATUS_SIZE), request ++ ++CMPIU define MPI_SEND MPI_SEND_ ++CMPIU define MPI_IRECV MPI_IRECV_ ++CMPIU define MPI_WAIT MPI_WAIT_ ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ ++ safe=.true. ++ ++ do i=1,natms ++ ++ listme(i)=0 ++ ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ j=0 ++ call gsync() ++ do k=1,mxnode-1 ++ ++ jdnode=mod(idnode+mxnode-k,mxnode) ++ ++ call MPI_IRECV(listin,natms,MPI_INTEGER, ++ x MPI_ANY_SOURCE,Passcon_tag+k,MPI_COMM_WORLD,request,ierr) ++ ++ call MPI_SEND(listme,natms,MPI_INTEGER,jdnode, ++ x Passcon_tag+k,MPI_COMM_WORLD,ierr) ++ ++ call MPI_WAIT(request,status,ierr) ++ ++ do i=1,natms ++ ++ if((listme(i).gt.0).and.(listin(i).gt.0.and. ++ x lstfrz(i).eq.0))then ++ ++ j=j+1 ++ if(j.gt.mxlshp)then ++ ++ safe=.false. ++ ++ else ++ ++ lishap(j)=i ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ lashap(k)=j ++ ++ enddo ++ ++ endif ++ ++c check for global error condition ++ ++ if(mxnode.gt.1) call gstate(safe) ++ ++ if(.not.safe)call error(idnode,103) ++ ++ if(mxnode.gt.1) then ++ call gisum(j,1,idum) ++ if(idnode.eq.0) write(nrite,'(/,a,14x,i10)') ++ x ' shared atoms from passcon',j/2 ++ lshmov = (j.gt.0) ++ endif ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ ++ listot(i)=1 ++ ++ else ++ ++ listot(i)=0 ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gisum(listot,natms,listin) ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about PMF ++c constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection (i.e. this version may be intel specific) ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester august 1995. ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf ++ integer npmf,i,j,k ++ ++ dimension listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ dimension lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ ++ listpm(i)=0 ++ ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++c ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ ++ lstpmt(i)=1 ++ ++ else ++ ++ lstpmt(i)=0 ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)call gisum(lstpmt,natms,listin) ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for passing information about rigid body ++c atoms involved in bond constraints between nodes ++c ++c parallel replicated data version assuming direct node-node ++c connection ++c ++c copyright - daresbury laboratory 1995 ++c author - t. forester december 1995. ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ ++ implicit none ++ ++ include "comms.inc" ++ ++ logical lcnb,safe ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,listin ++ integer listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp ++ integer numgsit,igrp1,igrp2,i,jr,igrp,itmols,imols,lgrp,id ++ integer jj,ik,j,k ++ ++ dimension listin(mxatms) ++ dimension listcon(mxcons,3),lstcsit(2*mxcons) ++ dimension lstout(mxatms),lstrgd(mxgatm) ++ dimension nummols(mxtmls),numgrp(mxtmls),numgsit(mxungp) ++ dimension lstgtp(mxgrp) ++ ++ integer status(MPI_STATUS_SIZE) ++ ++ if(mxproc.lt.mxnode)call error(idnode,102) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ if(mxnode.gt.1) call gisum(listin,natms,lstout) ++ ++ safe = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ safe = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ safe = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ if(mxnode.gt.1) call gstate(safe) ++ lcnb = (.not.safe) ++ ++ return ++ end ++ ++ ++ +diff -urN dl_class_1.9.orig/srcmod/pmf_module.f dl_class_1.9/srcmod/pmf_module.f +--- dl_class_1.9.orig/srcmod/pmf_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/pmf_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1911 @@ ++ module pmf_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining potential of mean force arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use ensemble_tools_module ++ use lf_motion_module ++ use lf_rotation1_module ++ use parse_module ++ use property_module ++ use setup_module ++ use shake_module ++ use vv_motion_module ++ use utility_module ++ ++ implicit none ++ ++ integer npmf ++ real(8) prmpmf,pmfnrm ++ real(8), allocatable :: pmfwght(:) ++ integer, allocatable :: numpmf(:) ++ integer, allocatable :: indpmf(:) ++ integer, allocatable :: listpm(:) ++ integer, allocatable :: lstpmt(:) ++ integer, allocatable :: lstpmf(:,:) ++ ++ dimension npmf(2),pmfnrm(2) ++ ++ save npmf,prmpmf,pmfnrm,pmfwght,numpmf,indpmf,listpm ++ save lstpmt,lstpmf ++ ++ contains ++ ++ subroutine alloc_pmf_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for allocating pmf arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,idnode,fail ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (pmfwght(mxspmf),stat=fail(1)) ++ allocate (indpmf(mxspmf),stat=fail(2)) ++ allocate (numpmf(mxtmls),stat=fail(3)) ++ allocate (listpm(mxpmf),stat=fail(4)) ++ allocate (lstpmt(mxpmf),stat=fail(5)) ++ allocate (lstpmf(mxspmf,mspmf),stat=fail(6)) ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1210) ++ enddo ++ ++ do i=1,mxtmls ++ numpmf(i)=0 ++ enddo ++ ++ end subroutine alloc_pmf_arrays ++ ++ subroutine define_pmf(safe,idnode,itmols,nspmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining pmf units ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,itmols,nspmf,ipmf,jpmf,iatm1,idum ++ real(8) wght ++ ++ numpmf(itmols)=1 ++ prmpmf=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,' PMF bondlength :', ++ x 5x,f20.10)") prmpmf ++ write(nrite, ++ x "(/,/,12x,'unit, site and weight details:' ++ x ,/,/,16x,'unit',6x,'index',5x,'weight')") ++ endif ++ ++ do ipmf=1,2 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ call strip(record,lenrec) ++ call lowcase(record,lenrec) ++ if(.not.findstring('pmf unit',record,idum)) ++ x call error(idnode,462) ++ npmf(ipmf)=intstr(record,lenrec,idum) ++ ++ do jpmf=1,npmf(ipmf) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ iatm1=intstr(record,lenrec,idum) ++ wght=dblstr(record,lenrec,idum) ++ if(wght.le.1.d-10) wght=1.d0 ++ ++ nspmf=nspmf+1 ++ ++ if(nspmf.gt.mxspmf) call error(idnode,460) ++ ++ indpmf(nspmf)=iatm1 ++ pmfwght(nspmf)=wght ++ ++ if(idnode.eq.0) then ++ ++ if(jpmf.eq.1) then ++ write(nrite,"(16x,i5,i10,f12.6)") ++ x ipmf,indpmf(nspmf),pmfwght(nspmf) ++ else ++ write(nrite,"(21x,i10,f12.6)") ++ x indpmf(nspmf),pmfwght(nspmf) ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine define_pmf ++ ++ subroutine pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxp,dyp,dzp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing vectors for PMF calculations ++c ++c copyright - daresbury laboratory ++c adapted by w.smith october 2005 ++c original by t.forester aug 1995 ++c ++c set variable img true for PBC shifted vectors ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical img ++ integer nspmf,imcon,k,jj,kk,ipmf,i,i1,i2 ++ ++ real(8) xxx(mxatms),yyy(mxatms),zzz(mxatms) ++ real(8) xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ real(8) xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ real(8) dxp(mspmf),dyp(mspmf),dzp(mspmf),cell(9) ++ ++ do k=1,nspmf ++ ++ jj=0 ++ kk=0 ++ ++c calculate difference vectors ++ ++ do ipmf=1,2 ++ ++ i1=lstpmf(jj+1,k) ++ ++c position difference vectors ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i2=lstpmf(jj,k) ++ xxt(i)=xxx(i2)-xxx(i1) ++ yyt(i)=yyy(i2)-yyy(i1) ++ zzt(i)=zzz(i2)-zzz(i1) ++ ++ enddo ++ ++c correct for periodic images - assume less than half box length ++ ++ if(img)call images(imcon,0,1,npmf(ipmf),cell,xxt,yyt,zzt) ++ ++c create weighted coordinate ++ ++ xxa(ipmf,k)=0.d0 ++ yya(ipmf,k)=0.d0 ++ zza(ipmf,k)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ kk=kk+1 ++ xxa(ipmf,k)=xxa(ipmf,k)+pmfwght(kk)*xxt(i) ++ yya(ipmf,k)=yya(ipmf,k)+pmfwght(kk)*yyt(i) ++ zza(ipmf,k)=zza(ipmf,k)+pmfwght(kk)*zzt(i) ++ ++ enddo ++ ++ xxa(ipmf,k)=xxa(ipmf,k)/pmfnrm(ipmf)+xxx(i1) ++ yya(ipmf,k)=yya(ipmf,k)/pmfnrm(ipmf)+yyy(i1) ++ zza(ipmf,k)=zza(ipmf,k)/pmfnrm(ipmf)+zzz(i1) ++ ++ enddo ++ ++ dxp(k)=xxa(2,k)-xxa(1,k) ++ dyp(k)=yya(2,k)-yya(1,k) ++ dzp(k)=zza(2,k)-zza(1,k) ++ ++ enddo ++ ++c periodic boundary condition for pmf vectors ++ ++ if(img)call images(imcon,0,1,nspmf,cell,dxp,dyp,dzp) ++ ++ return ++ end subroutine pmf_vectors ++ ++ subroutine pmflf ++ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE ++c and PMF_SHAKE - for potential of mean force calculations. ++c ++c parallel replicated data version : block data ++c adapted from dl_poly routine nve_1.f ++c ++c copyright - daresbury laboratory 1995 ++c author - t.forester aug 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ logical safe,lshmov,safep,unsafe,img ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf ++ integer fail,iatm0,iatm1,i,j,k,jj,ii,ipmf,icyc ++ real(8) engke,tolnce,tstep,vircon,virpmf,strpmf,summas ++ real(8) rstep,viracc,strkin,strcon ++ ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ dimension strpmf(9),strcon(9),strkin(9),summas(2),fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) ++ allocate(xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(3)) ++ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(4)) ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(5)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(8)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1220) ++ enddo ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c store initial values of position ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate mass terms for PMF units ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ ii=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(ii) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxp,dyp,dzp) ++ ++c move atoms by leapfrog algorithm ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ ++ j=0 ++ do i=iatm0,iatm1 ++ ++ j=j+1 ++ ++c update velocities ++ ++ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) ++ ++c update positions ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++c RDSHAKE procedure ++ ++ if(ntcons.gt.0.or.ntpmf.gt.0) then ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c apply bond constraints ++ ++ viracc=0.d0 ++ if(ntcons.gt.0)call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c apply pmf constraints ++ ++ viracc=0.d0 ++ if(ntpmf.gt.0)call pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) ++ ++ enddo ++ ++ safep=.not.unsafe ++ ++c calculate velocity correction ++ ++ j=0 ++ rstep=1.d0/tstep ++ do i=iatm0,iatm1 ++ ++c update corrected velocity ++ ++ j=j+1 ++ uxx(i)=(xxx(i)-xxo(j))*rstep ++ uyy(i)=(yyy(i)-yyo(j))*rstep ++ uzz(i)=(zzz(i)-zzo(j))*rstep ++ ++c calculate the corrected forces ++ ++ fxx(i)=(uxx(i)-vxx(i))*weight(i)*rstep ++ fyy(i)=(uyy(i)-vyy(i))*weight(i)*rstep ++ fzz(i)=(uzz(i)-vzz(i))*weight(i)*rstep ++ ++ enddo ++ ++ endif ++ ++c calculate velocity at full time step ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=0.5d0*(vxx(i)+uxx(i)) ++ vyy(i)=0.5d0*(vyy(i)+uyy(i)) ++ vzz(i)=0.5d0*(vzz(i)+uzz(i)) ++ ++ enddo ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c total contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++c restore half step velocity ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(uxx,uyy,uzz,dxp,dyp,dzp,stat=fail(2)) ++ deallocate(txx,tyy,tzz,xxo,yyo,zzo,stat=fail(3)) ++ deallocate(dxt,dyt,dzt,xxa,yya,zza,stat=fail(4)) ++ ++ return ++ end subroutine pmflf ++ ++ subroutine pmflfq_1 ++ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, ++ x vircon,safep,nspmf,ntpmf,virpmf) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using implicit leapfrog quaternion algorithm ++c plus bond constraints - PROVIDED rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c tqx,tqy,tqz = torque in lab fixed frame ++c omx,omy,omz = angular velocity in body fixed frame (principal axis) ++c rotinx,y,z = rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory 1993 ++c author t.forester october 1993 ++c amended t.forester dec 1994 : block data ++c amended w.smith sep 1999 : euler equation ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=14 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,safeq,lshmov,newjob,safep,unsafe,img ++ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre ++ integer jg,ig,k,id,jr,nspmf,ntpmf,jj,ii,ipmf,icyc ++ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon ++ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc,virpmf ++ real(8) trx,try,trz,delx,dely,delz,engfke,viracc ++ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz ++ real(8) strpmf,strcon,summas ++ ++ real(8), allocatable :: opx(:),opy(:),opz(:) ++ real(8), allocatable :: oqx(:),oqy(:),oqz(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xx1(:),yy1(:),zz1(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) ++ ++ ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ ++ dimension strkin(9),strgrp(9),rot(9),fail(nnn) ++ ++ dimension strpmf(9),strcon(9),summas(2) ++ ++ save igrp1,igrp2,ifre1,ifre2 ++ ++ data newjob/.true./ ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) ++ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) ++ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) ++ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) ++ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) ++ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) ++ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) ++ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) ++ ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(13)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(14)) ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1500) ++ enddo ++ ++ if(newjob)then ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ newjob=.false. ++ ++ endif ++ ++ safe=.false. ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c store initial values of position and velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ xxo(j)=xxx(i) ++ yyo(j)=yyy(i) ++ zzo(j)=zzz(i) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ gcxo(jg)=gcmx(ig) ++ gcyo(jg)=gcmy(ig) ++ gczo(jg)=gcmz(ig) ++ ++ enddo ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate mass terms for PMF units ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ ii=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(ii) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxp,dyp,dzp) ++ ++c move atoms by leapfrog algorithm ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ ++c calculate atom displacements from rigid body com ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcxo(jg) ++ dty(jr)=yyy(i)-gcyo(jg) ++ dtz(jr)=zzz(i)-gczo(jg) ++ ++ enddo ++ ++ enddo ++ ++c minimum images ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c integrate 'free' particles ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c advance velocity by leapfrog ++ ++ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) ++ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) ++ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) ++ ++c advance position by leapfrog ++ ++ xxx(i)=xxo(j)+tstep*uxx(i) ++ yyy(i)=yyo(j)+tstep*uyy(i) ++ zzz(i)=zzo(j)+tstep*uzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0.or.ntpmf.gt.0) then ++ ++c store integrated positions ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ j=j+1 ++ xx1(j)=xxx(i) ++ yy1(j)=yyy(i) ++ zz1(j)=zzz(i) ++ ++ enddo ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c apply bond constraints ++ ++ viracc=0.d0 ++ if(ntcons.gt.0)call rdshake_1 ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++c apply pmf constraints ++ ++ viracc=0.d0 ++ if(ntpmf.gt.0)call pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) ++ ++ enddo ++ ++ safep=.not.unsafe ++ ++c calculate force and velocity corrections ++ ++ j=0 ++ rstep=1.d0/tstep ++ rtsq=1.d0/tstep**2 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++c calculate force correction ++ ++ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq ++ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq ++ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq ++ ++c calculate velocity correction ++ ++ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep ++ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep ++ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep ++ ++ enddo ++ ++c end of shake corrections ++ ++ endif ++ ++c estimate full step velocity ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ ++ vxx(i)=0.5d0*(uxx(i)+vxo(j)) ++ vyy(i)=0.5d0*(uyy(i)+vyo(j)) ++ vzz(i)=0.5d0*(uzz(i)+vzo(j)) ++ ++ enddo ++ ++c calculate new kinetic energy at current timestep ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ ++c restore free atom half step velocity ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=uxx(i) ++ vyy(i)=uyy(i) ++ vzz(i)=uzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++c translational rigid body motion ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++c calculate net force on rigid body ++ ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c advance velocity by leapfrog ++ ++ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++c advance position by leapfrog ++ ++ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) ++ ++c estimate velocity at full time step ++ ++ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) ++ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) ++ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) ++ ++ enddo ++ ++c calculate rigid body translational kinetic energy ++ ++ engtrn=getkint(ngrp,idnode,mxnode) ++ ++c total translational kinetic energy ++ ++ engke=engtrn+engfke ++ ++c calculate ridid body kinetic stress tensor ++ ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c restore rigid body half timestep velocity ++ ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=uxx(ig) ++ gvyy(ig)=uyy(ig) ++ gvzz(ig)=uzz(ig) ++ ++ enddo ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate torques in lab frame ++ ++ jr=0 ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ id=lstgtp(ig) ++ ++ tqx=0.d0 ++ tqy=0.d0 ++ tqz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c store current angular velocity ++ ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ ++c iterate angular velocity for time step n (e. yezdimer) ++ ++ do i=1,5 ++ ++ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) ++ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) ++ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) ++ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) ++ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) ++ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) ++ ++ delx=tstep*trx ++ dely=tstep*try ++ delz=tstep*trz ++ ++c improved angular velocity at time step n ++ ++ opx(jg)=omx(ig)+delx*pt5 ++ opy(jg)=omy(ig)+dely*pt5 ++ opz(jg)=omz(ig)+delz*pt5 ++ ++ enddo ++ ++c angular velocity at time step n+1/2 ++ ++ uxx(ig)=omx(ig)+delx ++ uyy(ig)=omy(ig)+dely ++ uzz(ig)=omz(ig)+delz ++ ++c angular velocity at time step n+1 (needed for quat algorithm) ++ ++ oqx(jg)=omx(ig)+delx*1.5d0 ++ oqy(jg)=omy(ig)+dely*1.5d0 ++ oqz(jg)=omz(ig)+delz*1.5d0 ++ ++c angular velocity at timestep n ++ ++ omx(ig)=omx(ig)+pt5*delx ++ omy(ig)=omy(ig)+pt5*dely ++ omz(ig)=omz(ig)+pt5*delz ++ ++ enddo ++ ++c rotational kinetic energy ++ ++ engrot=getkinr(ngrp,idnode,mxnode) ++ ++c restore half step angular velocity ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ opx(jg)=omx(ig) ++ opy(jg)=omy(ig) ++ opz(jg)=omz(ig) ++ omx(ig)=uxx(ig) ++ omy(ig)=uyy(ig) ++ omz(ig)=uzz(ig) ++ ++ enddo ++ ++c assign new quaternions ++ ++ call update_quaternions ++ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) ++ ++c complete stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i)+ ++ x strpmf(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++c minimum images of group positions and particle positions ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c new atomic positions for atoms in rigid bodies - relative to c.o.m ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1) then ++ ++c merge new group coordinates and velocities ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c ensure all atoms are within cell boundaries ++ ++ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) ++ ++c deallocate work arrays ++ ++ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) ++ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) ++ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) ++ deallocate(dxp,dyp,dzp,xxa,yya,zza,stat=fail(7)) ++ ++ return ++ end subroutine pmflfq_1 ++ ++ subroutine pmf_shake ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x virpmf,xxt,yyt,zzt,strpmf,summas,dxp,dyp,dzp, ++ x xxa,yya,zza) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accummulates constraint force to maintain reaction coordinate ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory 1995 ++c author t.forester august 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,fail,icyc,k,jj ++ integer ii,i,ipmf ++ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas ++ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,strs1,strs2,strs3,strs5 ++ real(8) strs6,strs9,tstep2,dis,omega2,eps,gamma,gammi ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ dimension amt(2),strpmf(9),summas(2) ++ ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:),dsq(:) ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),dsq(mspmf), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1230) ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c accumulators for strpmf tensor ++ ++ virpmf=0.d0 ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safep=.false. ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c calculate bond constraint length ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, ++ x xxa,yya,zza,dxt,dyt,dzt) ++ ++ amt(1)= tstep2/summas(1) ++ amt(2)=-tstep2/summas(2) ++ ++ eps=0.d0 ++ dis=prmpmf ++ omega2=dis*dis ++ ++ do k=1,nspmf ++ ++ dsq(k)=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ eps=max(eps,abs((omega2-dsq(k))/(2.0d0*dis))) ++ ++ enddo ++ ++c check convergence condition ++ ++ safep=(eps.le.tolnce) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ gamma=(omega2-dsq(k))/(-2.d0*(amt(2)-amt(1))* ++ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) ++ ++c accumulate pmf virial ++ ++ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) ++ ++ strs1=strs1-gamma*dxp(k)*dxp(k) ++ strs2=strs2-gamma*dxp(k)*dyp(k) ++ strs3=strs3-gamma*dxp(k)*dzp(k) ++ strs5=strs5-gamma*dyp(k)*dyp(k) ++ strs6=strs6-gamma*dyp(k)*dzp(k) ++ strs9=strs9-gamma*dzp(k)*dzp(k) ++ ++c improve approximate atomic positions ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-gamma*amt(ipmf) ++ ++ do ii=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ xxx(i)=xxx(i)+dxp(k)*gammi ++ yyy(i)=yyy(i)+dyp(k)*gammi ++ zzz(i)=zzz(i)+dzp(k)*gammi ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c complete strpmf tensor ++ ++ strpmf(1)=strs1 ++ strpmf(2)=strs2 ++ strpmf(3)=strs3 ++ strpmf(4)=strs2 ++ strpmf(5)=strs5 ++ strpmf(6)=strs6 ++ strpmf(7)=strs3 ++ strpmf(8)=strs6 ++ strpmf(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=virpmf ++ call gdsum(buffer(1),1,buffer(2)) ++ virpmf=buffer(1) ++ call gdsum(strpmf,9,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxt,dyt,dzt,dsq,stat=fail) ++ ++ return ++ end subroutine pmf_shake ++ ++ subroutine pmfvv ++ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, ++ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics. Velocity Verlet With PMF_RATTLE ++c for potential of mean force calculations. ++c ++c copyright - daresbury laboratory ++c adapted by w.smith october 2005 ++c original by t.forester aug 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical safe,lshmov,safep,unsafe,newjob,img ++ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf ++ integer isw,mxtop ++ integer fail,iatm0,iatm1,i,j,k,jj,i1,ipmf,icyc ++ real(8) engke,tolnce,tstep,vircon,virpmf,strcon,summas ++ real(8) viracc,strpmf,strkin ++ ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxp(:),dyp(:),dzp(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) ++ ++ dimension strcon(9),strpmf(9),strkin(9),summas(2),fail(nnn) ++ save summas,newjob,strpmf ++ data newjob/.true./ ++ ++c set default safety flags ++ ++ safe=(ntcons.eq.0) ++ safep=(ntpmf.eq.0) ++ if(safe.and.safep)return ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ mxtop=max(mxcons,mspmf) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) ++ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(3)) ++ allocate(dxt(mxtop),dyt(mxtop),dzt(mxtop),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(6)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1220) ++ enddo ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate mass terms for PMF units ++ ++ if(newjob)then ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ summas(ipmf)=0.d0 ++ pmfnrm(ipmf)=0.d0 ++ ++ do i=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i1=lstpmf(jj,1) ++ summas(ipmf)=summas(ipmf)+weight(i1) ++ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) ++ ++ enddo ++ ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c calculate PMF bond constraints and store initial positions ++ ++ img=.true. ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxp,dyp,dzp) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ if(isw.eq.1)then ++ ++c constraint virials ++ ++ vircon=0.d0 ++ virpmf=0.d0 ++ ++c temporary stress tensor accumulators ++ ++ do i=1,9 ++ ++ strcns(i)=0.d0 ++ strpmf(i)=0.d0 ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c apply constraint corrections - iteratively ++ ++ icyc=0 ++ unsafe=.true. ++ ++ do while(unsafe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ if(isw.eq.1)then ++ ++c apply bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcon) ++ ++ vircon=vircon+viracc ++ do i=1,9 ++ strcns(i)=strcns(i)+strcon(i) ++ enddo ++ ++ endif ++ ++c apply pmf constraints ++ ++ if(ntpmf.gt.0)then ++ ++ safep=.false. ++ call pmf_rattle_r ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x viracc,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, ++ x dxt,dyt,dzt,strcon) ++ ++ virpmf=virpmf+viracc ++ do i=1,9 ++ strpmf(i)=strpmf(i)+strcon(i) ++ enddo ++ ++ endif ++ ++ unsafe=(.not.(safe.and.safep.and.abs(viracc).le.1.d-10)) ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c apply rattle velocity constraints ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ ++ endif ++ ++c apply pmf velocity constraints ++ ++ if(ntpmf.gt.0)then ++ ++ safep=.false. ++ call pmf_rattle_v ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x summas,dxp,dyp,dzp,xxt,yyt,zzt,xxa,yya,zza,dxt,dyt,dzt) ++ ++ endif ++ ++ unsafe=(.not.(safe.and.safep)) ++ ++ endif ++ ++ enddo ++ ++ safep=(.not.unsafe) ++ ++c periodic boundary condition ++ ++ if(isw.eq.1)call images ++ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++ if(isw.eq.2)then ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c total contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) ++ enddo ++ ++c add pmf and constraint virials ++ ++ vircon=vircon+virpmf ++ ++ endif ++ ++c global exchange of configuration data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ if(isw.eq.1)call merge ++ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ if(ntcons.gt.0)call merge ++ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) ++ deallocate(dxp,dyp,dzp,dxt,dyt,dzt,stat=fail(2)) ++ deallocate(txx,tyy,tzz,xxa,yya,zza,stat=fail(3)) ++ ++ return ++ end subroutine pmfvv ++ ++ subroutine pmf_rattle_r ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, ++ x virpmf,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, ++ x dxt,dyt,dzt,strpmf) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accumulates constraint force to maintain reaction coordinate. ++c velocity verlet adaptation ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory ++c adapted by w.smith october 2005 ++c original t.forester august 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj ++ integer i1,i,ipmf ++ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas,gamma ++ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,tstep2,dis,omega2,eps,gammi ++ real(8) strs1,strs2,strs3,strs5,strs6,strs9,dxt,dyt,dzt,dsq ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) ++ dimension amt(2),strpmf(9),summas(2) ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c pmf virial ++ ++ virpmf=0.d0 ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c array bound check ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ img=.true. ++ safep=.false. ++ dis=prmpmf ++ omega2=dis*dis ++ amt(1)= tstep2/summas(1) ++ amt(2)=-tstep2/summas(2) ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, ++ x dxt,dyt,dzt) ++ ++c check convergence ++ ++ eps=0.d0 ++ ++ do k=1,nspmf ++ ++ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ eps=max(eps,abs((omega2-dsq)/dis)) ++ ++ enddo ++ ++ eps=eps*0.5d0 ++ ++c verification of convergence ++ ++ safep=(eps.lt.tolnce) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 ++ gamma=(omega2-dsq)/(-(amt(2)-amt(1))* ++ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) ++ ++c accumulate pmf virial ++ ++ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) ++ ++ strs1=strs1-gamma*dxp(k)*dxp(k) ++ strs2=strs2-gamma*dxp(k)*dyp(k) ++ strs3=strs3-gamma*dxp(k)*dzp(k) ++ strs5=strs5-gamma*dyp(k)*dyp(k) ++ strs6=strs6-gamma*dyp(k)*dzp(k) ++ strs9=strs9-gamma*dzp(k)*dzp(k) ++ ++c improve approximate atomic positions and velocities ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-0.5d0*gamma*amt(ipmf) ++ ++ do i1=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ xxx(i)=xxx(i)+dxp(k)*gammi ++ yyy(i)=yyy(i)+dyp(k)*gammi ++ zzz(i)=zzz(i)+dzp(k)*gammi ++ vxx(i)=vxx(i)+dxp(k)*gammi/tstep ++ vyy(i)=vyy(i)+dyp(k)*gammi/tstep ++ vzz(i)=vzz(i)+dzp(k)*gammi/tstep ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ strpmf(1)=strs1 ++ strpmf(2)=strs2 ++ strpmf(3)=strs3 ++ strpmf(4)=strs2 ++ strpmf(5)=strs5 ++ strpmf(6)=strs6 ++ strpmf(7)=strs3 ++ strpmf(8)=strs6 ++ strpmf(9)=strs9 ++ ++c splice coordinate and velocity arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=virpmf ++ call gdsum(buffer(1),1,buffer(2)) ++ virpmf=buffer(1) ++ call gdsum(strpmf,9,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) ++ call splice ++ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine pmf_rattle_r ++ ++ subroutine pmf_rattle_v ++ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce,summas, ++ x dxp,dyp,dzp,vxt,vyt,vzt,vxa,vya,vza,vxp,vyp,vzp) ++ ++c*********************************************************************** ++c ++c dlpoly constraint subroutine for potential of mean force calc. ++c accumulates velocity correction for second constraint condition ++c velocity verlet adaptation ++c ++c assume bond vectors dxp,dyp,dzp are input ++c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc ++c ++c copyright daresbury laboratory ++c author w.smith october 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safep,img ++ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj ++ integer i1,i,ipmf ++ real(8) tstep,tolnce,summas,gamma,vxt,vyt,vzt,vxa,vya,vza ++ real(8) vxp,vyp,vzp,dxp,dyp,dzp,amt,omega,eps,gammi,tolvel ++ ++ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) ++ dimension vxp(mspmf),vyp(mspmf),vzp(mspmf) ++ dimension vxt(mxatms),vyt(mxatms),vzt(mxatms) ++ dimension vxa(2,mspmf),vya(2,mspmf),vza(2,mspmf) ++ dimension amt(2),summas(2) ++ ++c constraint convergence tolerance ++ ++ tolvel=tolnce/tstep ++ ++c array bound check ++ ++ if(mxcons.lt.nspmf) call error(idnode,492) ++ if(mspmf .lt.nspmf) call error(idnode,458) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ img=.false. ++ safep=.false. ++ amt(1)= 0.5d0*tstep/summas(1) ++ amt(2)=-0.5d0*tstep/summas(2) ++ ++ do while(.not.safep.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ call pmf_vectors ++ x (img,nspmf,imcon,cell,vxx,vyy,vzz,vxt,vyt,vzt,vxa,vya,vza, ++ x vxp,vyp,vzp) ++ ++c check convergence ++ ++ eps=0.d0 ++ do k=1,nspmf ++ ++ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) ++ eps=max(eps,abs(omega)/prmpmf) ++ ++ enddo ++ ++c verification of convergence ++ ++ safep=(eps.lt.tolvel) ++ ++c bypass calculations if converged ++ ++ if(.not.safep)then ++ ++ do k=1,nspmf ++ ++ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) ++ gamma=omega/((amt(2)-amt(1))* ++ x (dxp(k)**2+dyp(k)**2+dzp(k)**2)) ++ ++c improve approximate atomic velocities ++ ++ jj=0 ++ do ipmf=1,2 ++ ++ gammi=-gamma*amt(ipmf) ++ ++ do i1=1,npmf(ipmf) ++ ++ jj=jj+1 ++ i=lstpmf(jj,k) ++ ++ vxx(i)=vxx(i)+dxp(k)*gammi ++ vyy(i)=vyy(i)+dyp(k)*gammi ++ vzz(i)=vzz(i)+dzp(k)*gammi ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1)call splice ++ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) ++ ++ return ++ end subroutine pmf_rattle_v ++ ++ end module pmf_module +diff -urN dl_class_1.9.orig/srcmod/property_module.f dl_class_1.9/srcmod/property_module.f +--- dl_class_1.9.orig/srcmod/property_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/property_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,1318 @@ ++ module property_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining simulation property data ++c copyright - daresbury laboratory ++c author - w. smith nov 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use pair_module ++ use setup_module ++ use site_module ++ use tether_module ++ use utility_module ++ use vdw_module ++ ++ implicit none ++ ++ real(8), allocatable :: rdf(:,:),zdens(:,:) ++ real(8), allocatable :: stpval(:),sumval(:) ++ real(8), allocatable :: ssqval(:),zumval(:) ++ real(8), allocatable :: ravval(:),stkval(:,:) ++ real(8), allocatable :: xx0(:),yy0(:),zz0(:) ++ real(8), allocatable :: amsd(:) ++ ++ save rdf,zdens,stpval,sumval,ssqval,xx0,yy0,zz0 ++ save zumval,ravval,stkval ++ ++ contains ++ ++ subroutine alloc_prp_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (zdens(mxzdn,mxatyp),stat=fail(1)) ++ allocate (rdf(mxrdf,mxxtyp),amsd(mxatyp),stat=fail(2)) ++ allocate (stpval(mxnstk),sumval(mxnstk),stat=fail(3)) ++ allocate (ssqval(mxnstk),zumval(mxnstk),stat=fail(4)) ++ allocate (ravval(mxnstk),stkval(mxstak,mxnstk),stat=fail(5)) ++ allocate (xx0(mxatms),yy0(mxatms),zz0(mxatms),stat=fail(6)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1740) ++ enddo ++ ++ end subroutine alloc_prp_arrays ++ ++ subroutine result ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit,conint, ++ x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing simulation summary and ++c saving the restart data ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith dec 1992. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*1 hms,dec ++ logical lgofr,lpgr,lzden,check,ltad,lbpd,goprint ++ ++ integer idnode,imcon,keyens,mxnode,natms,nzden,nstep,ntpatm ++ integer levcfg,numacc,numrdf,keybpd,i,iadd,io,j ++ real(8) chip,chit,conint,rcut,tstep,volm,timelp,avvol,zlen,dc ++ real(8) engcfg,virtot,vircom,prntim,simtim,tboost,chit_shl ++ ++c save restart data ++ ++ call revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++c for TAD and BPD system averages not generally meaningful ++c useful only for BPD in configurational sampling mode ++ ++ goprint=.not.(ltad.or.(lbpd.and.keybpd.gt.1)) ++ ++ if(goprint)then ++ ++c calculate final fluctuations ++ ++ do i=1,mxnstk ++ ssqval(i)=sqrt(max(0.d0,ssqval(i))) ++ enddo ++ ++c final averages and fluctuations ++ ++ call timchk(0,timelp) ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,1x,'run terminated after',i8,' steps.', ++ x ' final averages calculated over',i8,' steps.',/,/)") ++ x nstep,numacc ++ write(nrite,"(1x,120('-'), ++ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x,'eng_cfg', ++ x 5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd',5x,'eng_ang',5x, ++ x 'eng_dih',5x,'eng_tet',/,1x,'time ',5x,' eng_pv',4x, ++ x 'temp_rot',5x,'vir_cfg',5x,'vir_vdw',5x,'vir_cou',5x, ++ x 'vir_bnd',5x,'vir_ang',5x,'vir_con',5x,'vir_tet',/, ++ x 1x,'cpu time',6x,'volume',4x,'temp_shl',5x,'eng_shl', ++ x 5x,'vir_shl',7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', ++ x 7x,'press',/,/, ++ x 1x,120('-'))") ++ ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) ++ write(nrite,'(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)') ++ x nstep,(sumval(i),i=1,9), ++ x simtim,dec,(sumval(i),i=10,18), ++ x prntim,hms,(sumval(i),i=19,27) ++ write(nrite,"(/,1x,' r.m.s. ',1p,9e12.4,/,1x,'fluctn. ', ++ x 1p,9e12.4,/,9x,9e12.4)") (ssqval(i),i=1,27) ++ write(nrite,"(1x,120('-'))") ++ ++c write out bias potential boost factor ++ ++ if(lbpd)write(nrite,"(/,/,1x, ++ x 'calculated bias potential boost factor',1p,e16.8)")tboost ++ ++ if(numacc.gt.0)then ++ iadd=27 ++ ++c write out estimated diffusion coefficients ++ ++ if(numacc.gt.0)then ++ ++ write(nrite,"(/,/,12x,'Approximate 3D Diffusion', ++ x ' coefficients (10^-9 m^2 / s)',/,/,12x,'atom',7x, ++ x ' D ')") ++ ++ do i=1,ntpatm ++ ++ iadd=iadd+1 ++ dc=(ravval(iadd)-sumval(iadd))/ ++ x (3.d0*dble(numacc-min(mxnstk,numacc-1))*tstep)*10.d0 ++ if(dc.lt.1d-10) dc=0.d0 ++ if(lbpd)dc=dc/tboost ++ write(nrite,'(12x,a8,1p,e13.4)') unqatm(i),dc ++ ++ enddo ++ ++ endif ++ ++c print out average pressure tensor ++ ++ write(nrite,"(/,/,16x,'Average pressure tensor', ++ x 39x,'r.m.s. fluctuations ',/)") ++ ++ do i=iadd,iadd+6,3 ++ write(nrite,'(9x,1p,3e12.4,24x,3e12.4)') ++ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) ++ enddo ++ iadd=iadd+9 ++ ++ write(nrite,'(/,12x,a,1p,e12.4)') 'trace/3. ', ++ x (sumval(iadd)+sumval(iadd-4)+sumval(iadd-8))/3.d0 ++ ++c write out mean cell vectors for npt ++ ++ if(keyens.gt.3.and.(keyens.le.7))then ++ ++ write(nrite,"(/,/,17x,'Average cell vectors', ++ x 41x,'r.m.s. fluctuations ',/)") ++ ++ do i=iadd,iadd+6,3 ++ write(nrite,'(3f20.10,9x,1p,3e12.4)') ++ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) ++ enddo ++ iadd=iadd+9 ++ ++ endif ++ ++c write out remaining registers ++ ++ check=.false. ++ do i=iadd+1,mxnstk ++ ++ if((abs(sumval(i)).gt.1.d-10).or. ++ x (abs(ssqval(i)).gt.1.d-10)) check=.true. ++ ++ enddo ++ ++ if(check)then ++ ++ write(nrite,"(/,/,12x, ++ x 'Remaining non-zero statistics registers ',/,/,12x, ++ x 'Register',7x,'Average value',8x,'r.m.s. fluc.')") ++ ++ do i=iadd+1,mxnstk ++ ++ if((abs(sumval(i)).gt.1.d-10).or. ++ x (abs(ssqval(i)).gt.1.d-10)) ++ x write(nrite,'(10x,i10,2f20.10)') i,sumval(i),ssqval(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c print out sample of final configuration ++ ++ write(nrite,"(/,/,1x,'sample of final configuration',/)") ++ write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', ++ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',7x,'fx(i)',7x, ++ x 'fy(i)',7x,'fz(i)',/,/)") ++ io=(natms+19)/20 ++ ++ do i=1,natms,io ++ ++ write(nrite,"(1x,i6,1p,3e12.4,3e12.4,3e12.4)") ++ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i), ++ x fxx(i),fyy(i),fzz(i) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c bypass printing averages for certain tad and bpd options ++ ++ if(goprint)then ++ ++c average volume ++ ++ avvol=sumval(19) ++ if(imcon.eq.0.or.imcon.eq.6)then ++ avvol=4.d0*pi/3.d0*rcut**3 ++ volm=avvol ++ endif ++ ++c calculate and print radial distribution functions ++ ++ if(lgofr.and.lpgr.and.(numrdf.gt.0))then ++ ++c scale densities for average volume ++ ++ do i=1,ntpatm ++ dens(i)=dens(i)*(volm/avvol) ++ enddo ++ ++ call rdf1 ++ x (lpgr,idnode,mxnode,ntpatm,numrdf,avvol,rcut) ++ ++ endif ++ ++ if(lzden.and.lpgr.and.(nzden.gt.0))then ++ call zden1(lpgr,idnode,mxnode,ntpatm,nzden,avvol,zlen) ++ endif ++ ++ if(imcon.eq.0)volm=0.d0 ++ ++ endif ++ ++c print final time check ++ ++ call timchk(1,timelp) ++ ++ return ++ end subroutine result ++ ++ subroutine diffsn0(idnode,natms,mxnode,tstep) ++ ++c*********************************************************************** ++c ++c DL_POLY routine for calculating displacements of sites from ++c t=0 positions ++c ++c use diffsn1 for mean squared displacements ++c ++c parallel version - replicated data. ++c ++c copyright daresbury laboratory 1993 ++c ++c author - t. forester june 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,mxnode,iatm1,iatm2,i ++ real(8) tstep ++ ++ save newjob,iatm1,iatm2 ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++ newjob=.false. ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ endif ++ ++ do i=iatm1,iatm2 ++ ++ xx0(i)=xx0(i)+vxx(i)*tstep ++ yy0(i)=yy0(i)+vyy(i)*tstep ++ zz0(i)=zz0(i)+vzz(i)*tstep ++ ++ enddo ++ ++ return ++ end subroutine diffsn0 ++ ++ subroutine diffsn1(idnode,natms,ntpatm,mxnode) ++ ++c*********************************************************************** ++c ++c DL_POLY routine for calculating mean squared displacements ++c ++c displacements calculated in diffsn0 ++c ++c parallel version - replicated data. ++c ++c copyright daresbury laboratory 1993 ++c ++c author - t. forester june 1993 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,ntpatm,mxnode,iatm1,iatm2,k,i ++ ++ save newjob,iatm1,iatm2 ++ ++ data newjob/.true./ ++ ++ if(newjob)then ++ ++ newjob=.false. ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++ endif ++ ++c running sum of squared displacements ++ ++ do k=1,ntpatm ++ ++ amsd(k)=0.d0 ++ ++ enddo ++ ++c calculate square of displacements for each atom type ++ ++ do i=iatm1,iatm2 ++ ++ k=ltype(i) ++ amsd(k)=amsd(k)+xx0(i)**2+yy0(i)**2+zz0(i)**2 ++ ++ enddo ++ ++c global sum - replicated data strategy ++ ++ if(mxnode.gt.1)then ++ ++ do k=1,ntpatm ++ ++ buffer(k+ntpatm)=amsd(k) ++ ++ enddo ++ ++ call gdsum(buffer(1+ntpatm),ntpatm,buffer(1)) ++ ++ do k=1,ntpatm ++ ++ amsd(k)=buffer(k+ntpatm) ++ ++ enddo ++ ++ endif ++ ++c mean squared displacement ++ ++ do k=1,ntpatm ++ ++ amsd(k)=amsd(k)/dble(max(numtyp(k),1)) ++ ++ enddo ++ ++ return ++ end subroutine diffsn1 ++ ++ subroutine rdf0(iatm,ik,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for radial ++c distribution functions. ++c double precision accumulators ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,ik,m,jatm,ll,k ++ real(8) rcut,rcsq,rdelr,ai,aj,rsq,rrr ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut*rcut ++ ++c grid interval for rdf tables ++ ++ rdelr=dble(mxrdf)/rcut ++ ++c set up atom iatm type ++ ++ ai=ltype(iatm) ++ ++c start of primary loop for rdf accumulation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ ++ aj=ltype(jatm) ++ if(ai.gt.aj)then ++ k=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ else ++ k=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ endif ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ ll=int(rrr*rdelr+0.999999d0) ++ ++c accumulate statistics ++ ++ if(ll.le.mxrdf)rdf(ll,k)=rdf(ll,k)+1.d0 ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine rdf0 ++ ++ subroutine rdf1 ++ x (lpgr,idnode,mxnode,ntpatm,numrdf,volm,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating radial distribution functions ++c from accumulated data. ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ntpatm,numrdf,ia,ib,k,j ++ real(8) volm,factor,sum,rrr,dvol,gofr,rcut,delrdf ++ ++ logical lpgr,zero ++ ++ if(idnode.eq.0) write(nrite, ++ x "(/,/,12X,'RADIAL DISTRIBUTION FUNCTIONS',/,/, ++ x 'calculated using ',i10,' configurations')") numrdf ++ ++ if(lpgr)then ++ ++c open RDF file and write headers ++ ++ if(idnode.eq.0)then ++ ++ open(nrdfdt,file='RDFDAT') ++ ++ write(nrdfdt,'(80a1)')cfgname ++ write(nrdfdt,'(2i10)')mxxtyp,mxrdf ++ ++ endif ++ ++c default bin width ++ ++ delrdf=rcut/dble(mxrdf) ++ ++c construct rdf tables ++ ++ do ia=1,ntpatm ++ ++ do ib=ia,ntpatm ++ ++ k=(ib*(ib-1))/2+ia ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,'g(r) :',2a8,/,/,8x,'r',6x,'g(r)',9x,'n(r)',/)") ++ x unqatm(ia),unqatm(ib) ++ write(nrdfdt,'(2a8)')unqatm(ia),unqatm(ib) ++ ++ endif ++ ++c global sum of data on all nodes ++ ++ if(mxnode.gt.1) call gdsum(rdf(1,k),mxrdf,buffer) ++ ++c normalisation factor ++ ++ factor=volm*dens(ia)*dens(ib)*dble(numrdf) ++ if((ia.eq.ib).and.(volm*dens(ia).gt.1.d0)) ++ x factor=factor*0.5d0 ++ ++c running integration of rdf ++ ++ sum=0.d0 ++ ++c loop over distances ++ ++ zero=.true. ++ ++ do j=1,mxrdf ++ ++ if(zero.and.(j.lt.mxrdf-3)) ++ x zero=(rdf(j+2,k).le.0.d0) ++ ++ rrr=(dble(j)-0.5d0)*delrdf ++ dvol=4.d0*pi*(delrdf*rrr*rrr+(delrdf**3)/12.d0) ++ ++ gofr=rdf(j,k)/(factor*dvol) ++ sum=sum+gofr*dvol*dens(ib) ++ ++c print out information ++ ++ if(idnode.eq.0)then ++ ++ write(nrdfdt,"(1p,2e14.6)")rrr,gofr ++ if(.not.zero) ++ x write(nrite,"(f10.4,1p,2e14.6)")rrr,gofr,sum ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(idnode.eq.0)close (nrdfdt) ++ ++ endif ++ ++ return ++ end subroutine rdf1 ++ ++ subroutine static ++ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating periodic data during the ++c molecular dynamics simulation and computing the rolling averages ++c ++c copyright daresbury laboratory 1992 ++c ++c author - w. smith august 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lbpd,lzeql,newjob ++ integer idnode,intsta,imcon,keyens,natms,nstack,nstep,j ++ integer nsteql,ntpatm,numacc,mxnode,i,iadd,k,kstak ++ integer nblock,keybpd,numbpd ++ real(8) consv,degfre,degrot,engang,engbnd,engcpe,engdih ++ real(8) enginv,engke,engrot,engsrp,engunit,engcfg,stpeng ++ real(8) stpeth,stpprs,stptmp,stpvir,stpvol,tstep,virbnd ++ real(8) engfbp,vircom,vircon,vircpe,virsrp,engfld,virfld ++ real(8) engtbp,virtbp,virpmf,virshl,engshl,engtet,virtet ++ real(8) degshl,shlke,virang,width,sclnv1,sclnv2,stprot ++ real(8) stpcns,stpshl,zistk,engmet,virmet,engter,virter ++ real(8) tbold,aterm,bterm,cterm,boost,tboost ++ ++ save newjob ++ ++ data newjob/.true./ ++ ++c open statistics file for append ++ ++ if(newjob.and.idnode.eq.0.and.intsta.gt.0)then ++ ++ open(nstats,file='STATIS',position='append') ++ newjob=.false. ++ ++ endif ++ ++ if(idnode.eq.0.and.nstep.eq.intsta.and.intsta.gt.0)then ++ ++ write(nstats,'(80a1)') cfgname ++ if(abs(engunit-9648.530821d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-9648530.821d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kilo electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nstats, ++ x "(' ENERGY UNITS=DL_POLY Internal Units ')") ++ ++ endif ++ ++c calculate cell volume and minimum cell half-width ++ ++ if(imcon.eq.0)then ++ ++ width=0.d0 ++ ++ stpvol=0.d0 ++ do i=1,10 ++ celprp(i)=0.d0 ++ enddo ++ ++ else ++ ++ call dcell(cell,celprp) ++ stpvol=celprp(10) ++ width=min(celprp(7),celprp(8),celprp(9))/2.d0 ++ ++ if(imcon.eq.4)then ++ ++ stpvol=0.5d0*celprp(10) ++ width=sqrt(3.d0)*cell(1)/4.d0 ++ ++ elseif(imcon.eq.5)then ++ ++ stpvol=0.5d0*celprp(10) ++ width=cell(1)/2.d0 ++ ++ elseif(imcon.eq.6)then ++ ++ width=min(celprp(7),celprp(8))/2.d0 ++ ++ elseif(imcon.eq.7)then ++ ++ stpvol=0.5d0*celprp(10) ++ ++ endif ++ ++ endif ++ ++c energetic properties of system ++ ++ stpvir=virsrp+vircpe+virbnd+vircon+vircom+virtbp+virang ++ x +virshl+virtet+virter+virmet+virfld ++ stpeng=engcfg+engke+engrot ++ stprot=2.d0*engrot/(boltz*max(1.d0,degrot)) ++ stpshl=2.d0*shlke/(boltz*max(1.d0,degshl)) ++ stptmp=2.d0*(engke+engrot)/(boltz*degfre) ++ stpprs=0.d0 ++ if(imcon.gt.0)stpprs=(2.d0*engke-stpvir)/(3.d0*stpvol) ++ stpeth=stpeng+stpprs*stpvol ++ stpcns=stpeng+consv ++ ++c convert pressure to units of katm ++ ++ stpprs=stpprs*prsunt ++ ++c calculate mean squared displacements ++c atomic displacements from origin of production run ++ ++ if((.not.lzeql).or.(nstep.gt.nsteql))then ++ ++ call diffsn0(idnode,natms,mxnode,tstep) ++ call diffsn1(idnode,natms,ntpatm,mxnode) ++ ++ endif ++ ++c zero statistics arrays ++ ++ if((nstep.le.0).or.(numacc.eq.0))then ++ ++ numacc=0 ++ ++ do i=1,mxnstk ++ ++ stpval(i)=0.d0 ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ ++ enddo ++ ++ do i=1,mxatms ++ ++ xx0(i)=0.d0 ++ yy0(i)=0.d0 ++ zz0(i)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c store current values in statistics array ++ ++ stpval(1) =stpcns/engunit ++ stpval(2) =stptmp ++ stpval(3) =engcfg/engunit ++ stpval(4) =(engsrp+engmet+engter)/engunit ++ stpval(5) =engcpe/engunit ++ stpval(6) =engbnd/engunit ++ stpval(7) =(engang+engtbp)/engunit ++ stpval(8) =(engdih+enginv+engfbp)/engunit ++ stpval(9) =engtet/engunit ++ stpval(10)=stpeth/engunit ++ stpval(11)=stprot ++ stpval(12)=stpvir/engunit ++ stpval(13)=(virsrp+virmet+virter)/engunit ++ stpval(14)=vircpe/engunit ++ stpval(15)=virbnd/engunit ++ stpval(16)=(virtbp+virang)/engunit ++ stpval(17)=vircon/engunit ++ stpval(18)=virtet/engunit ++ stpval(19)=stpvol ++ stpval(20)=stpshl ++ stpval(21)=engshl/engunit ++ stpval(22)=virshl/engunit ++ stpval(23)=acos(celprp(6))*180.d0/pi ++ stpval(24)=acos(celprp(5))*180.d0/pi ++ stpval(25)=acos(celprp(4))*180.d0/pi ++ stpval(26)=virpmf/engunit ++ stpval(27)=stpprs ++ ++ iadd=27 ++ ++c mean squared displacements ++ ++ if((.not.lzeql).or.(nstep.gt.nsteql))then ++ ++ do k=1,ntpatm ++ ++ stpval(iadd+k)=amsd(k) ++ ++ enddo ++ ++ endif ++ ++ iadd=iadd+ntpatm ++ ++c stress tensor ++ ++ if(abs(stpvol).le.1.d-10) stpvol=1.d0 ++ do i=1,9 ++ stpval(iadd+i)=stress(i)*prsunt/(stpvol) ++ enddo ++ iadd=iadd+9 ++ ++c cell vectors ++ ++ if(keyens.gt.3.and.(keyens.le.7))then ++ do i=1,9 ++ stpval(iadd+i)=cell(i) ++ enddo ++ iadd=iadd+9 ++ endif ++ ++c check on number of variables for stack - ++ ++ if(iadd.gt.mxnstk) call error(idnode,170) ++ ++c accumulate totals over steps ++ ++ numacc=numacc+1 ++ sclnv2=1.d0/dble(numacc) ++ sclnv1=dble(numacc-1)/dble(numacc) ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++c calculate true thermodynamic averages in bias potential system ++c note integers numacc and numbpd should be equal in this case ++ ++ tbold=tboost*dble(numbpd)/dble(numbpd-1)-boost/dble(numbpd-1) ++ cterm=0.d0 ++ do i=1,mxnstk ++ ++ aterm=sumval(i)*tbold ++ bterm=ssqval(i)*tbold**2 ++ if(tbold.gt.0.d0)cterm=(bterm+aterm**2)/tbold ++ ssqval(i)=(sclnv1*(sclnv1*bterm+boost*sclnv2*(cterm+ ++ x (tbold*stpval(i)-2.d0*aterm)*stpval(i))))/tboost**2 ++ sumval(i)=(sclnv1*aterm+boost*sclnv2*stpval(i))/tboost ++ ++ enddo ++ ++ else ++ ++c calculate true thermodynamic averages in normal system ++ ++ do i=1,mxnstk ++ ++ ssqval(i)=sclnv1*(ssqval(i)+sclnv2*(stpval(i)-sumval(i))**2) ++ sumval(i)=sclnv1*sumval(i)+sclnv2*stpval(i) ++ ++ enddo ++ ++ endif ++ ++c write statistics file ++ ++ if(idnode.eq.0.and.intsta.gt.0)then ++ ++ if(mod(nstep,intsta).eq.0)then ++ ++ write(nstats,'(i10,1p,e14.6,0p,i10,/,(1p,5e14.6))') ++ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) ++ call flush(nstats) ++c$$$c write option for Excel spreadsheet ++c$$$ write(nstats,'(i10,1p,e14.6,0p,i10,300(1p,5e14.6))') ++c$$$ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) ++ ++ endif ++ ++ endif ++ ++c zero rolling average accumulators ++ ++ if(nstep.le.0)then ++ ++ numacc=0 ++ ++ do i=1,mxnstk ++ ++ zumval(i)=0.d0 ++ ++ do j=1,mxstak ++ ++ stkval(j,i)=0.d0 ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c store quantities in stack ++ ++ kstak=mod(nstep-1,nstack)+1 ++ ++ if(nstep.gt.nstack)then ++ ++ do i=1,mxnstk ++ ++ zumval(i)=zumval(i)-stkval(kstak,i) ++ ++ enddo ++ ++ endif ++ ++ do i=1,mxnstk ++ ++ stkval(kstak,i)=stpval(i) ++ zumval(i)=zumval(i)+stpval(i) ++ ++ enddo ++ ++c calculate rolling averages ++ ++ zistk=min(nstack,nstep) ++ ++ do i=1,mxnstk ++ ++ ravval(i)=zumval(i)/zistk ++ ++ enddo ++ ++c zero accumulators during equilibration period ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numacc=0 ++ do i=1,mxnstk ++ ++ sumval(i)=0.d0 ++ ssqval(i)=0.d0 ++ ++ enddo ++ ++ endif ++ ++c close statistics file at regular intervals ++ ++ if(.not.newjob.and.mod(nstep,ndump).eq.0)then ++ ++ if(idnode.eq.0)close (nstats) ++ newjob=.true. ++ ++ endif ++ ++ return ++ end subroutine static ++ ++ subroutine revive ++ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, ++ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, ++ x tboost,chit_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing restart files at job termination ++c or at selected intervals in simulation ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith dec 1992. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lgofr,lzden ++ integer idnode,imcon,mxnode,natms,nstep,nzden,numacc,numrdf ++ integer levcfg,nsum,nbuff,i,j ++ real(8) chip,chit,conint,tstep,engcfg,rmxnode,virtot,vircom ++ real(8) tboost,chit_shl ++ ++ if(mxnode.gt.1)then ++ ++c merge displacement data ++ ++ call merge(idnode,mxnode,natms,mxbuff,xx0,yy0,zz0,buffer) ++ ++c globally sum rdf information before saving ++ ++ if(lgofr)then ++ ++c maximum rdfs that can be summed in each step ++ ++ nsum=mxbuff/mxrdf ++ if(nsum.eq.0) call error(idnode,200) ++ ++ nbuff=nsum*mxrdf ++ ++ do i=1,mxxtyp,nsum ++ ++ if((mxxtyp+1-i).lt.nsum) nbuff=(mxxtyp+1-i)*mxrdf ++ call gdsum(rdf(1,i),nbuff,buffer) ++ ++ enddo ++ ++ endif ++ ++c globally sum zden information before saving ++ ++ if(lzden)then ++ ++c maximum zdfs that can be summed in each step ++ ++ nsum=mxbuff/mxzdn ++ if(nsum.eq.0) call error(idnode,200) ++ ++ nbuff=nsum*mxzdn ++ ++ do i =1,mxatyp,nsum ++ ++ if((mxatyp+1-i).lt.nsum) nbuff=(mxatyp+1-i)*mxzdn ++ call gdsum(zdens(1,i),nbuff,buffer) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c node 0 handles i/o ++ ++ if(idnode.eq.0)then ++ ++c write configuration data to new configuration file ++ ++ call config_write('REVCON',levcfg,imcon,natms,engcfg) ++ ++c write accumulator data to dump file ++ ++ open(nrest,file='REVIVE',form='unformatted') ++ ++ write(nrest) dble(nstep),dble(numacc),dble(numrdf),chit, ++ x chip,conint,dble(nzden),tboost,chit_shl ++ write(nrest) virtot,vircom,eta,strcns,strbod ++ write(nrest) stpval ++ write(nrest) sumval ++ write(nrest) ssqval ++ write(nrest) zumval ++ write(nrest) ravval ++ write(nrest) stkval ++ write(nrest) xx0,yy0,zz0 ++ write(nrest) xxs,yys,zzs ++ if(lgofr) write(nrest) rdf ++ if(lzden) write(nrest) zdens ++ ++ close (nrest) ++ ++ endif ++ ++c divide rdf data between nodes ++ ++ rmxnode=1.d0/dble(mxnode) ++ ++ if(lgofr)then ++ ++ do i=1,mxxtyp ++ ++ do j=1,mxrdf ++ ++ rdf(j,i)=rdf(j,i)*rmxnode ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++c divide zdensity data between nodes ++ ++ if(lzden)then ++ ++ do i=1,mxatyp ++ ++ do j=1,mxzdn ++ ++ zdens(j,i)=zdens(j,i)*rmxnode ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine revive ++ ++ subroutine zden0(idnode,natms,mxnode,nzden,zlen) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for density profile ++c zlen=length of cell in z direction ++c ++c double precision accumulators ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nzden,iatm,ll,k ++ real(8) zlen,zleno2,rzdn ++ ++c accumulator ++ ++ nzden=nzden+1 ++ ++c half of z length ++ ++ zleno2=zlen*0.5d0 ++ ++c grid interval for density profiles ++ ++ rzdn=dble(mxzdn)/zlen ++ ++c set up atom iatm type ++ ++ do iatm=idnode+1,natms,mxnode ++ ++ k =ltype(iatm) ++ ++ ll=int((zzz(iatm)+zleno2)*rzdn+1.0d0) ++ ++c accumulate statistic ++ ++ if(ll.gt.0.and.ll.le.mxzdn)zdens(ll,k)=zdens(ll,k)+1.d0 ++ ++ enddo ++ ++ return ++ end subroutine zden0 ++ ++ subroutine zden1 ++ x (lpgr,idnode,mxnode,ntpatm,nzden,volm,zlen) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating Z density profile ++c from accumulated data. ++c double precision version ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lpgr ++ integer idnode,mxnode,ntpatm,nzden,k,j ++ real(8) volm,zlen,delzdn,dvolz,factor,sum,rrr,rho ++ ++ if(idnode.eq.0) write(nrite, ++ x "(/,/,12X,'Z DENSITY PROFILES',/,/, ++ x 'calculated using ',i10,' configurations')") nzden ++ ++ if(lpgr)then ++ ++c open Z density file and write headers ++ ++ if(idnode.eq.0)then ++ ++ open(nzdndt,file='ZDNDAT') ++ ++ write(nzdndt,'(80a1)')cfgname ++ write(nzdndt,'(2i10)')ntpatm,mxzdn ++ ++ endif ++ ++c volume of z strip (arbitrary) ++ ++ delzdn=zlen/dble(mxzdn) ++ dvolz=(volm/zlen)*delzdn ++ ++c normalisation factor ++ ++ nzden=max(nzden,1) ++ factor=1.d0/(dble(nzden)*dvolz) ++ ++ do k=1,ntpatm ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,'rho(r) :',a8,/,/,8x,'r',6x,'rho',9x,'n(r)',/)") ++ x unqatm(k) ++ write(nzdndt,'(a8)')unqatm(k) ++ ++ endif ++ ++c global sum of data on all nodes ++ ++ if(mxnode.gt.1)call gdsum(zdens(1,k),mxzdn,buffer) ++ ++c running integration of z-density ++ ++ sum=0.d0 ++ ++c loop over distances ++ ++ do j=1,mxzdn ++ ++ rrr=(dble(j)-0.5d0)*delzdn-zlen*0.5d0 ++ rho=zdens(j,k)*factor ++ sum=sum+rho*dvolz ++ ++c print out information ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(f10.4,1p,2e14.6)") rrr,rho,sum ++ write(nzdndt,"(1p,2e14.6)") rrr,rho ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(idnode.eq.0)close (nzdndt) ++ ++ endif ++ ++ return ++ end subroutine zden1 ++ ++ subroutine rdf0neu(ik,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for accumulating statistic for radial ++c distribution functions. ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1994 ++c author - t. forester march 1994 ++c amended t. forester april 1994 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ik,m,iatm,jatm,ll,k ++ real(8) rcut,a0,a1,a2,a3,a4,a5,rcsq,rrcsq,sqlim,rdelr ++ real(8) ai,aj,rsq,rrr,sss ++ ++ data a0,a1,a2,a3,a4,a5/.0837557783d0,2.9399054d0,-7.8475201d0, ++ x 14.1328992d0,-12.6228528d0,4.32084948d0/ ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ rrcsq=1.d0/rcsq ++ sqlim=0.01d0*rcsq ++ ++c grid interval for rdf tables ++ ++ rdelr=dble(mxrdf)/rcut ++ ++c start of primary loop for rdf accumulation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ iatm=ilist(m) ++ ai=ltype(iatm) ++ ++ jatm=jlist(m) ++ aj=ltype(jatm) ++ ++ if(ai.gt.aj)then ++ ll=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ k=lstvdw(ll) ++ else ++ ll=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ k=lstvdw(ll) ++ endif ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++c determine interpolation panel for rdf table ++ ++ if(rsq.lt.sqlim)then ++ ++ rrr=sqrt(rsq) ++ ++ else ++ ++c interpolate square-root by polynomial plus newton-raphson ++ ++ sss=rsq*rrcsq ++ rrr=1.d0/ ++ x (a0 +sss*(a1+sss*(a2+sss*(a3+sss*(a4+sss*a5))))) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) ++ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr)*sss*rcut ++ ++ endif ++ ++ ll=int(rrr*rdelr+0.999999d0) ++ ++c accumulate statistics ++ ++ rdf(ll,k)=rdf(ll,k)+1.d0 ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine rdf0neu ++ ++ end module property_module +diff -urN dl_class_1.9.orig/srcmod/rigid_body_module.f dl_class_1.9/srcmod/rigid_body_module.f +--- dl_class_1.9.orig/srcmod/rigid_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/rigid_body_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,243 @@ ++ module rigid_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining rigid body arrays ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: omx(:),omy(:),omz(:) ++ real(8), allocatable :: gcmx(:),gcmy(:),gcmz(:) ++ real(8), allocatable :: gvxx(:),gvyy(:),gvzz(:),gmass(:) ++ real(8), allocatable :: q0(:),q1(:),q2(:),q3(:) ++ real(8), allocatable :: gxx(:,:),gyy(:,:),gzz(:,:) ++ real(8), allocatable :: rotinx(:,:),rotiny(:,:),rotinz(:,:) ++ integer, allocatable :: lstrgd(:),numgsit(:),lstgtp(:) ++ integer, allocatable :: listyp(:),lstgst(:,:),lstfre(:) ++ integer, allocatable :: lstme(:),lstbod(:),lstcsit(:) ++ ++ save omx,omy,omz,gcmx,gcmy,gcmz,gvxx,gvyy,gvzz,gmass ++ save q0,q1,q2,q3,gxx,gyy,gzz,rotinx,rotiny,rotinz ++ save lstrgd,numgsit,lstgtp,listyp,lstgst,lstfre,lstme ++ save lstbod,lstcsit ++ ++ contains ++ ++ subroutine alloc_rgbdy_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (omx(mxgrp),omy(mxgrp),omz(mxgrp),stat=fail(1)) ++ allocate (gcmx(mxgrp),gcmy(mxgrp),gcmz(mxgrp),stat=fail(2)) ++ allocate (gvxx(mxgrp),gvyy(mxgrp),gvzz(mxgrp),stat=fail(3)) ++ allocate (q0(mxgrp),q1(mxgrp),q2(mxgrp),q3(mxgrp),stat=fail(4)) ++ allocate (gxx(mxungp,mxngp),gyy(mxungp,mxngp),stat=fail(5)) ++ allocate (gzz(mxungp,mxngp),gmass(mxungp),stat=fail(6)) ++ allocate (rotinx(mxungp,2),rotiny(mxungp,2),stat=fail(7)) ++ allocate (rotinz(mxungp,2),lstgtp(mxgrp),stat=fail(8)) ++ allocate (lstrgd(mxgatm),numgsit(mxungp),stat=fail(9)) ++ allocate (listyp(mxungp),lstgst(mxungp,mxngp),stat=fail(10)) ++ allocate (lstfre(mxatms),lstme(mxatms),stat=fail(11)) ++ allocate (lstbod(mxatms),lstcsit(2*mxcons),stat=fail(12)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1013) ++ enddo ++ ++ end subroutine alloc_rgbdy_arrays ++ ++ subroutine define_rigid_body ++ x (safe,lghost,idnode,itmols,ngrp,natmsr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c adapted - p-a cazade oct 2007, solvation, excitation etc. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lghost,site_test ++ integer idnode,itmols,ngrp,ntmp,idum,igrp ++ integer j,site,natmsr ++ ++ ngrp_ghost=0 ++ ntmp=intstr(record,lenrec,idum) ++ numgrp(itmols)=numgrp(itmols)+ntmp ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of rigid units ', ++ x 6x,i10)") ntmp ++ write(nrite,"(/,' rigid body details:',/,/,21x, ++ x 6x,'unit',3x,'indices',/) ") ++ endif ++ ++ do igrp=1,numgrp(itmols) ++ ++ ngrp=ngrp+1 ++ site_test=.true. ++ ++ if(ngrp.gt.mxungp) call error(idnode,301) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ numgsit(ngrp)=intstr(record,lenrec,idum) ++ if(numgsit(ngrp).gt.mxngp) ++ x call error (idnode,302) ++ ++ listyp(ngrp)=ngrp ++ ++ do j=1,numgsit(ngrp) ++ ++ site=intstr(record,lenrec,idum) ++ ++ if(site.eq.0)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ site=intstr(record,lenrec,idum) ++ ++ endif ++ ++ lstgst(ngrp,j)=site ++ ++ if(lghost)then ++ ++ if(site_test)then ++ ++ if(site+natmsr.ge.ind_fre(3))then ++ ++ site_test=.false. ++ ngrp_ghost=ngrp_ghost+1 ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0) ++ x write(nrite,"(21x,10i10,100(/,21x,10i10))") ++ x listyp(ngrp),(lstgst(ngrp,j),j=1, ++ x numgsit(ngrp)) ++ ++ enddo ++ ++ numgrp(itmols)=numgrp(itmols)-ngrp_ghost ++ ngrp=ngrp-ngrp_ghost ++ ++ return ++ end subroutine define_rigid_body ++ ++ subroutine bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dlpoly routine to calculate rigid body contributions to the ++c stress tensor ++c ++c copyright daresbury laboratory ++c author w.smith aug 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,j,ig,id,jr,igrp1,igrp2,idnode,mxnode,ngrp ++ real(8) vircom,strbod,dtx,dty,dtz ++ ++ dimension dtx(mxatms),dty(mxatms),dtz(mxatms),strbod(9) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c zero stress tensor accumulators ++ ++ vircom=0.d0 ++ do i=1,9 ++ strbod(i)=0.d0 ++ enddo ++ ++c convert atomic virial to molecular ++c note convention: virial(atom-atom)=-sum(Ri.Fi) ++c : virial(com-com)=-sum(Rcom.Fcom) so ++c virial(com-com)=virial(atom-atom)+sum((Ri-Rcom).Fi) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ vircom=vircom+ ++ x (dtx(jr)*fxx(i)+dty(jr)*fyy(i)+dtz(jr)*fzz(i)) ++ ++c stress tensor : rigid body contributions ++ ++ strbod(1)=strbod(1)-dtx(jr)*fxx(i) ++ strbod(2)=strbod(2)-dtx(jr)*fyy(i) ++ strbod(3)=strbod(3)-dtx(jr)*fzz(i) ++ strbod(4)=strbod(4)-dty(jr)*fxx(i) ++ strbod(5)=strbod(5)-dty(jr)*fyy(i) ++ strbod(6)=strbod(6)-dty(jr)*fzz(i) ++ strbod(7)=strbod(7)-dtz(jr)*fxx(i) ++ strbod(8)=strbod(8)-dtz(jr)*fyy(i) ++ strbod(9)=strbod(9)-dtz(jr)*fzz(i) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call gdsum(strbod,9,buffer) ++ buffer(1)=vircom ++ call gdsum(buffer(1),1,buffer(2)) ++ vircom=buffer(1) ++ ++ endif ++ ++c symmetrise stress tensor ++ ++ strbod(2)=0.5d0*(strbod(2)+strbod(4)) ++ strbod(4)=strbod(2) ++ strbod(3)=0.5d0*(strbod(3)+strbod(7)) ++ strbod(7)=strbod(3) ++ strbod(6)=0.5d0*(strbod(6)+strbod(8)) ++ strbod(8)=strbod(6) ++ ++ return ++ end subroutine bodystress ++ ++ end module rigid_body_module +diff -urN dl_class_1.9.orig/srcmod/serial.f dl_class_1.9/srcmod/serial.f +--- dl_class_1.9.orig/srcmod/serial.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/serial.f 2015-11-16 17:18:13.452475827 +0100 +@@ -0,0 +1,543 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c dummy initcomms routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ return ++ end ++ ++ integer*8 function get_comms() ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY with PLUMED ++c ++c******************************************************************** ++ ++ implicit none ++ ++ get_comms=0 ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode ++ ++ idnode=0 ++ mxnode=1 ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c dummy mynode routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ mynode=0 ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c dummy nodedim routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ nodedim=0 ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c dummy numnodes routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ numnodes=1 ++ ++ return ++ end ++ ++ subroutine csend(msgtag,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c dummy csend routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer msgtag,length,pe,idum ++ ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine crecv(msgtag,buf,length) ++ ++c********************************************************************* ++c ++c dummy crecv routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer msgtag,length ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy isum for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ real(8) aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ stop ++ end ++ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms ++ integer lstme(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff ++ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode, mxnode, natms ++ integer lishap(*),lashap(*) ++ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,natms ++ integer listme(*),listot(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lshmov ++ integer idnode,mxnode,natms,nscons,i,j,k ++ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) ++ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) ++ integer lstfrz(mxatms) ++ ++ do i=1,natms ++ listme(i)=0 ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ listot(i)=1 ++ else ++ listot(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use error_module ++ use setup_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,i,j,k ++ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ integer lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ listpm(i)=0 ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++ ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ lstpmt(i)=1 ++ else ++ lstpmt(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lcnb ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 ++ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp ++ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) ++ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) ++ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ lcnb = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ lcnb = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ lcnb = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ lcnb = (.not.lcnb) ++ ++ return ++ end ++ +diff -urN dl_class_1.9.orig/srcmod/serial.f.preplumed dl_class_1.9/srcmod/serial.f.preplumed +--- dl_class_1.9.orig/srcmod/serial.f.preplumed 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/serial.f.preplumed 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,529 @@ ++ subroutine initcomms() ++ ++c********************************************************************* ++c ++c dummy initcomms routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ return ++ end ++ ++ subroutine machine(idnode,mxnode) ++ ++c********************************************************************* ++c ++c dummy machine routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode ++ ++ idnode=0 ++ mxnode=1 ++ ++ return ++ end ++ ++ integer function mynode() ++ ++c********************************************************************* ++c ++c dummy mynode routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ mynode=0 ++ ++ return ++ end ++ ++ integer function nodedim() ++ ++c********************************************************************* ++c ++c dummy nodedim routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ nodedim=0 ++ ++ return ++ end ++ ++ integer function numnodes() ++ ++c********************************************************************* ++c ++c dummy numnodes routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ numnodes=1 ++ ++ return ++ end ++ ++ subroutine csend(msgtag,buf,length,pe,idum) ++ ++c********************************************************************* ++c ++c dummy csend routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c******************************************************************** ++ ++ implicit none ++ ++ integer msgtag,length,pe,idum ++ ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine crecv(msgtag,buf,length) ++ ++c********************************************************************* ++c ++c dummy crecv routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer msgtag,length ++ real(8) buf(*) ++ ++ return ++ end ++ ++ subroutine gisum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy isum for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gdsum(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ real(8) aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gimax(aaa,nnn,bbb) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nnn ++ integer aaa(*),bbb(*) ++ ++ return ++ end ++ ++ subroutine gstate(check) ++ ++c*********************************************************************** ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check ++ ++ return ++ end ++ ++ subroutine gsync() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ return ++ end ++ ++ subroutine exitcomms() ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ stop ++ end ++ ++ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ implicit none ++ ++ integer idnode,mxnode,natms,nbuff ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,natms ++ integer lstme(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,nbuff ++ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine shlmerge(idnode,mxnode,ntshl) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl ++ ++ return ++ end ++ ++ subroutine shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode, mxnode, natms ++ integer lishap(*),lashap(*) ++ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,natms ++ integer listme(*),listot(*) ++ real(8) xxx(*),yyy(*),zzz(*),buffer(*) ++ ++ return ++ end ++ ++ subroutine passcon ++ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, ++ x listin,listot,listcon,lstfrz) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lshmov ++ integer idnode,mxnode,natms,nscons,i,j,k ++ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) ++ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) ++ integer lstfrz(mxatms) ++ ++ do i=1,natms ++ listme(i)=0 ++ enddo ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ listme(i)=listme(i)+1 ++ listme(j)=listme(j)+1 ++ ++ enddo ++ ++c keep record of all atoms subject to constraints ++ ++ do i=1,natms ++ ++ if(listme(i).gt.0)then ++ listot(i)=1 ++ else ++ listot(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passpmf ++ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use error_module ++ use setup_module ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,nspmf,i,j,k ++ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) ++ integer lstpmf(mxspmf,mspmf),npmf(2) ++ ++ if(mxpmf.lt.natms) call error(idnode,490) ++ ++ do i=1,natms ++ listpm(i)=0 ++ enddo ++ ++ do k=1,nspmf ++ ++ do j = 1,npmf(1)+npmf(2) ++ ++ i=lstpmf(j,k) ++ listpm(i)= 1 ++ ++ enddo ++ ++ enddo ++ ++c keep record of all atoms subject to pmf constraints ++ ++ do i=1,natms ++ ++ if(listpm(i).gt.0)then ++ lstpmt(i)=1 ++ else ++ lstpmt(i)=0 ++ endif ++ ++ enddo ++ ++ return ++ end ++ ++ subroutine passquat ++ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, ++ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) ++ ++c********************************************************************* ++c ++c dummy routine for serial DL_POLY ++c copyright daresbury laboratory ++c author - w.smith ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ logical lcnb ++ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 ++ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp ++ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) ++ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) ++ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) ++ ++c block indices for groups ++ ++ igrp1 = (idnode*ngrp)/mxnode + 1 ++ igrp2 = ((idnode+1)*ngrp)/mxnode ++ ++c locate site indices of atoms in constraints ++ ++ do i = 1,natms ++ listin(i) = 0 ++ enddo ++ ++c loop over molecule types ++ ++ jr = 0 ++ igrp = 0 ++ do itmols=1,ntpmls ++ ++c loop over molecules in system ++ ++ do imols=1,nummols(itmols) ++ ++c construct rigid body site list: each processor has a different copy ++ ++ do lgrp=1,numgrp(itmols) ++ ++ igrp=igrp+1 ++ ++ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then ++ ++ id = lstgtp(igrp) ++ do jj = 1,numgsit(id) ++ ++ jr = jr +1 ++ i = lstrgd(jr) ++ listin(i) = jj ++ ++ enddo ++ endif ++ enddo ++ enddo ++ enddo ++ ++ lcnb = .true. ++ ik = 0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(listin(i).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(i) ++ lcnb = .false. ++ endif ++ ++ if(listin(j).ne.0) then ++ ik = ik + 1 ++ lstcsit(ik) = listin(j) ++ lcnb = .false. ++ endif ++ ++ enddo ++ ++c lcnb flags bodies connected by constraints ++ ++ lcnb = (.not.lcnb) ++ ++ return ++ end ++ +diff -urN dl_class_1.9.orig/srcmod/setup_module.f dl_class_1.9/srcmod/setup_module.f +--- dl_class_1.9.orig/srcmod/setup_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/setup_module.f 2011-07-11 17:09:10.000000000 +0200 +@@ -0,0 +1,1664 @@ ++ module setup_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining default array sizes ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c note the following internal units apply everywhere ++c ++c unit of time (to) = 1 x 10**(-12) seconds ++c unit of length (lo) = 1 x 10**(-10) metres ++c unit of mass (mo) = 1.6605402 x 10**(-27) kilograms ++c unit of charge (qo) = 1.60217733 x 10**(-19) coulombs ++c unit of energy (eo) = 1.6605402 x 10**(-23) joules ++c unit of pressure (po) = 1.6605402 x 10**( 7) pascals ++c ++c********************************************************************* ++ ++ use parse_module ++ ++ implicit none ++ ++c FIXED PARAMETERS ++ ++c standard pi values ++ ++ real(8), parameter :: pi=3.141592653589793d0 ++ real(8), parameter :: sqrpi=1.7724538509055159d0 ++ ++c conversion factor for coulombic terms in internal units ++c i.e. (unit(charge)**2/(4 pi eps0 unit(length))/unit(energy) ++ ++ real(8), parameter :: r4pie0=138935.4835d0 ++ ++c boltzmann constant in internal units ++ ++ real(8), parameter :: boltz=8.31451115d-1 ++ ++c planck's constant in internal units ++ ++ real(8), parameter :: hbar=6.350780719d0 ++ ++c conversion factor for pressure from internal units to katm ++ ++ real(8), parameter :: prsunt=0.163882576d0 ++ ++c main input channel ++ ++ integer, parameter :: nread=5 ++ ++c main output channel ++ ++ integer, parameter :: nrite=6 ++ ++c force field input channel ++ ++ integer, parameter :: nfield=9 ++ ++c configuration file input channel ++ ++ integer, parameter :: nconf=10 ++ ++c statistical data file output channel ++ ++ integer, parameter :: nstats=20 ++ ++c trajectory history file channel ++ ++ integer, parameter :: nhist=21 ++ ++c acummulators restart dump file ++ ++ integer, parameter :: nrest=22 ++ ++c tabulated potential file channel ++ ++ integer, parameter :: ntable=23 ++ ++c rdf file channel number ++ ++ integer, parameter :: nrdfdt=24 ++ ++c z density file channel number ++ ++ integer, parameter :: nzdndt=25 ++ ++c hyperdynamics reference basin file ++ ++ integer, parameter :: nbsn=30 ++ ++c neb reaction path profile file ++ ++ integer, parameter :: npro=31 ++ ++c hyperdynamics events journal file ++ ++ integer, parameter :: nevnt=33 ++ ++c hyperdynamics tracking file ++ ++ integer, parameter :: ntrk=32 ++ ++c hyperdynamics restart file ++ ++ integer, parameter :: nhrs=35 ++ ++c free energy data file ++ ++ integer, parameter :: nfrnwr=41 ++ ++c solvation data file ++ ++ integer, parameter :: nsolwr=43 ++ ++c data dumping interval in event of system crash ++ ++ integer, parameter :: ndump=1000 ++ ++c maximum number of neb calculations ++ ++ integer, parameter :: maxneb=10 ++ ++c array allocation parameters (set by subroutine parset) ++ ++ integer kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp ++ integer mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell ++ integer mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid ++ integer mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang ++ integer mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw ++ integer mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd ++ integer mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp ++ integer mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl ++ integer kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke ++ integer mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp ++ integer mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc ++ integer mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol ++ ++ save kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp ++ save mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell ++ save mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid ++ save mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang ++ save mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw ++ save mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd ++ save mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp ++ save mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl ++ save kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke ++ save mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp ++ save mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc ++ save mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol ++ ++ contains ++ ++ subroutine parset(redirect,idnode,mxnode,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to determine required array sizes for ++c allocation of memory manager ++c ++c copyright daresbury laboratory 1997 ++c author - w.smith june 1997 ++c ++c*********************************************************************** ++ ++ logical loglnk,lewald,lspme,lhke,nolink,lcshft ++ logical lsolva,lfree,lfrmas,lghost,redirect ++ real(8) cell,celprp,rctbp,rcfbp,volm,xhi,yhi,zhi,rcut,rvdw ++ real(8) densvar,delr,cut,dens,ratio,drdf,dzdn,rcter,buffer ++ real(8) zlen ++ integer imcon,nhko,ilx,ily,ilz,ncells ++ integer idnode,mxnode,mxn1 ++ ++ dimension cell(9),celprp(10),buffer(10) ++ ++ lhke=.false. ++ lspme=.false. ++ lewald=.false. ++ lcshft=.false. ++ nolink=.false. ++ redirect=.false. ++ mxtmls_sol=1 ++ mxebuf_sol=1 ++ mxatms_sol=1 ++ mxtmls_fre=1 ++ mxewld_fre=1 ++ mxebuf_fre=1 ++ mxatms_fre=1 ++ mxatyp_exc=1 ++ mxtmls_exc=1 ++ ++c specify maximum and minimum nodes ++ ++ mxproc=mxnode ++ minnode=mxnode ++ ++c scan the FIELD file data ++ ++ call fldscan(idnode,mxn1,rctbp,rcfbp,rcter) ++ ++c scan CONFIG file data ++ ++ call cfgscan ++ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) ++ ++c scan CONTROL file data ++ ++ call conscan ++ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, ++ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, ++ x zlen,cell) ++ ++c set dimension of working coordinate arrays ++ ++ msatms=max(1,(mxatms+minnode-1)/minnode) ++ if(lsolva)mxatms_sol=mxatms ++ if(lfree.or.lghost)mxatms_fre=mxatms ++ ++c maximum number of molecule types ++ ++ mxtmls=max(mxtmls,1) ++ if(lsolva)mxtmls_sol=mxtmls ++ if(lfree)mxtmls_fre=mxtmls ++ if(lghost)then ++ ++ mxtmls_exc=mxtmls ++ mxtmls_fre=mxtmls ++ ++ endif ++ ++c maximum number of specified bondlength constraints ++ ++ mxtcon=max(mxtcon,1) ++ ++c maximum number of chemical bond potentials ++ ++ mxtbnd=max(mxtbnd,1) ++ ++c maximum number of different bond angle potentials ++ ++ mxtang=max(mxtang,1) ++ ++c maximum number of different torsional potentials ++ ++ mxtdih=max(mxtdih,1) ++ ++c maximum number of different inversion potentials ++ ++ mxtinv=max(mxtinv,1) ++ ++c maximum number of unique rigid body units ++ ++ mxungp=max(mxungp,1) ++ ++c maximum number of tethered atom potentials ++ ++ mxteth=max(mxteth,1) ++ ++c maximum number of core-shell units ++ ++ mxshl=max(mxshl,1) ++ ++c set maximum number of unique atom types ++ ++ mxatyp=max(1,mxatyp) ++ mxxtyp=(mxatyp*(mxatyp+1))/2 ++ if(lghost)mxatyp_exc=mxatyp ++ ++c maximum number of vdw potentials ++ ++ mxvdw=max(mxvdw,1)+1 ++ ++c maximum number of metal potentials ++ ++ mxmet=max(mxmet,1)+1 ++ mxsmet=mxatyp ++ ++c maximum number of tersoff potentials ++ ++ if(mxter.gt.0)then ++ ++ mxter=mxatyp ++ ++ endif ++ ++c maximum number of three body potentials ++ ++ if(mxtbp.eq.0)then ++ ++ mx2tbp=0 ++ ++ else ++ ++ mx2tbp=(mxatyp*(mxatyp+1))/2 ++ mxtbp=mx2tbp*mxatyp ++ ++ endif ++ ++c maximum number of four body potentials ++ ++ if(mxfbp.eq.0)then ++ ++ mx3fbp=0 ++ ++ else ++ ++ mx3fbp=(mxatyp*(mxatyp+1)*(mxatyp+2))/6 ++ mxfbp=mxatyp*mx3fbp ++ ++ endif ++ ++c maximum number of angular potential parameters ++ ++ mxpang=6 ++ ++c maximum number of three body potential parameters ++ ++ mxptbp=mxpang+1 ++ ++c maximum number of four body potential parameters ++ ++ mxpfbp=3 ++ ++c maximum number of parameters for dihedrals ++ ++ mxpdih=5 ++ ++c maximum number of parameters for inversion potentials ++ ++ mxpinv=2 ++ ++c maximum number of parameters for bond potentials ++ ++ mxpbnd=4 ++ ++c maximum number of parameters for vdw potentials ++ ++ mxpvdw=6 ++ ++c maximum number of parameters for metal potentials ++ ++ mxpmet=7 ++ ++c maximum number of parameters for tersoff potential ++ ++ mxpter=11 ++ ++c maximum number of external field parameters ++ ++ mxfld=10 ++ ++c maximum number of excluded atoms per atom ++ ++ mxexcl=max(mxexcl,1) ++ ++c maximum number of different sites in system ++ ++ mxsite=max(mxsite,1) ++ ++c maximum number of chemical bonds per node ++ ++ mxbond=max(1,(mxbond+minnode-1)/minnode) ++ ++c maximum number of bond angles per node ++ ++ mxangl=max(1,(mxangl+minnode-1)/minnode) ++ ++c maximum number of torsion angles per node ++ ++ mxdihd=max(1,(mxdihd+minnode-1)/minnode) ++ ++c maximum number of inversion potentials per node ++ ++ mxinv=max(1,(mxinv+minnode-1)/minnode) ++ ++c maximum number of constraints per node ++ ++ mxcons=max(1,2*((mxcons+minnode-1)/minnode)) ++ ++c maximum number of tethered atoms per node ++ ++ msteth=max(1,(msteth+minnode-1)/minnode) ++ ++c maximum size for working arrays for bonds, angles, dihedrals ++c inversion potentials, tethers and core-shell units ++ ++ msbad=max(mxbond,mxangl,mxdihd,mxinv,msteth,mxshl) ++ ++c maximum number of grid points in potentials arrays ++ ++ if(mxgrid.eq.0)then ++ ++ mxgrid=max(1000,int(rvdw/0.01d0+0.5d0)+4) ++ ++ endif ++ ++ mxegrd=0 ++ if(lewald.or.lspme.or.lhke.or.lcshft)mxegrd=mxgrid ++ ++c maximum dimension of rdf arrays ++ ++ mxrdf=max(128,int(rcut/drdf)) ++ ++c maximum dimension of zdensity arrays ++ ++ mxzdn=max(128,int(zlen/dzdn)) ++ ++c maximum number of rigid groups in system ++ ++ mxgrp=max(mxgrp,1) ++ ++c maximum number of rigid groups per node ++ ++ msgrp=max(1,(mxgrp+minnode-1)/minnode) ++ ++c maximum number of sites per rigid unit ++ ++ mxngp=max(mxngp,3) ++ ++c maximum number of sites in rigid units ++ ++ mxgatm=max(1,mxgatm) ++ ++c maximum number of timesteps in stack arrays ++ ++ mxstak=max(100,mxstak) ++ ++c maximum number of variables in stack arrays ++ ++ mxnstk=45+mxatyp ++ ++c dimension of shake shared atoms array ++ ++ mxlshp=max(mxcons*2,1) ++ ++c set dimension of working arrays in ewald sum ++ ++ mxewld=1 ++ mxebuf=1 ++ if(lewald)then ++ ++ mxftab=1 ++ mxewld=msatms ++ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)*(2*kmaxc+1)-1 ++ if(lfree.or.lghost)mxebuf=3*mxebuf ++ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 ++ ++ endif ++ ++c set dimension of working arrays in spme ++ ++ mxspme=1 ++ if(lspme)then ++ ++ mxspme=mxatms ++ mxftab=2*(kmaxd+kmaxe+kmaxf) ++ ++ endif ++ ++c set dimension of working arrays for HK ewald ++ ++ mxhko=1 ++ mxhke=1 ++ if(lhke)then ++ ++ mxhko=2 ++ mxewld=msatms ++ mxhke=msatms ++ if(nhko.gt.0)mxhko=max(2,nhko) ++ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)-1 ++ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 ++ ++ endif ++ ++ if(lsolva)mxebuf_sol=mxebuf ++ if(lfree.or.lghost)then ++ ++ mxebuf_fre=mxebuf ++ mxewld_fre=mxewld ++ ++ endif ++ ++c maximum dimension of principal transfer buffer ++ ++ mxbuff=max(6*mxatms,8*(mxcons+1),8*(mxgrp+1),mxnstk*mxstak, ++ x mxebuf,mxgrid,2*kmaxa*kmaxb*kmaxc,2*kmaxd*kmaxe*kmaxf, ++ x 10000) ++ ++c maximum size of verlet neighbour/link cell list for each atom ++c decide if link-cells in use or not ++ ++ cut=rcut+delr ++ dens=dble(mxatms)/volm ++ ratio=1.5d0*dens*(4.d0*pi/3.d0)*cut**3 ++ mxlist=min(nint(ratio),(mxatms+1)/2) ++ if(imcon.eq.0) then ++ ++ cell(1)=max(xhi+2.d0*cut,3.d0*cut) ++ cell(5)=max(yhi+2.d0*cut,3.d0*cut) ++ cell(9)=max(zhi+2.d0*cut,3.d0*cut) ++ ++ endif ++ if(imcon.eq.6)then ++ ++ cell(9)=max(zhi+2.d0*cut,3.d0*cut,cell(9)) ++ ++ endif ++ ++ if(nolink)then ++ ++ loglnk=.false. ++ ++ else ++ ++ loglnk=.true. ++ call dcell(cell,celprp) ++ ilx=int(celprp(7)/cut) ++ ily=int(celprp(8)/cut) ++ ilz=int(celprp(9)/cut) ++ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. ++ ncells=ilx*ily*ilz ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. ++ if(mxneut.gt.0.and.ncells.le.36) loglnk=.false. ++ ++ endif ++ ++ mxcell=1 ++ if(loglnk)then ++ ++ mxlist=14*nint(1.5d0*dens*celprp(10)/dble(ncells)) ++ mxcell=(ilx+2)*(ily+2)*(ilz+2) ++ ++ endif ++ ++ if(mxneut.gt.0)mxlist=(mxneut+1)/2 ++ mxlist=2*mxlist ++ if(mxtbp.gt.0.or.mxfbp.gt.0.or.mxter.gt.0)then ++ ++ if(mxtbp.gt.0)cut=min(cut,rctbp) ++ if(mxfbp.gt.0)cut=min(cut,rcfbp) ++ if(mxter.gt.0)cut=min(cut,rcter) ++ ilx=max(3,int(celprp(7)/cut)) ++ ily=max(3,int(celprp(8)/cut)) ++ ilz=max(3,int(celprp(9)/cut)) ++ mxcell=max(mxcell,(ilx+2)*(ily+2)*(ilz+2)) ++ ++ endif ++ mxcell=int(dble(mxcell)*densvar/100.d0) ++ mxlist=int(dble(mxlist)*densvar/100.d0) ++ mxlist=max(500,mxlist) ++ ++c maximum size for coordinate difference arrays ++ ++ mxxdf=max(mxlist,mxatms,mxcons,mxn1*mxn1*(mxneut+1)/2) ++ ++c maximum number of core-shell unit types ++ ++ mxtshl=max(mxtshl,1) ++ ++c potential of mean force array parameter ++ ++ mxpmf=max(mxpmf,1) ++ ++c number of pmf constraints on a processor ++ ++ mspmf=max(1,(mxpmf+minnode-1)/minnode) ++ ++c maximum number of sites to define pmf units ++ ++ mxspmf=max(mxspmf,1) ++ ++c maximum iterations in quaternion integration ++ ++ mxquat=100 ++ ++c maximum number of shake cycles ++ ++ mxshak=100 ++ ++c maximum b-spline interpolation order ++ ++ mxspl=12 ++ ++c increment mxneut ++ ++ if(mxneut.gt.0)mxneut=mxneut+1 ++ ++ return ++ ++ end subroutine parset ++ ++ subroutine fldscan(idnode,mxn1,rctbp,rcfbp,rcter) ++ ++c*********************************************************************** ++c ++c dl_poly routine for scanning the field file to determine the ++c required parameters ++c ++c copyright - daresbury laboratory 1994 ++c author - w. smith november 1994 ++c ++c*********************************************************************** ++ ++ integer, parameter :: mmk=1000 ++ ++ character*8 name,keyword,chr(mmk) ++ logical check,ltable,lmetab,safe,lneut,loop1,loop2 ++ real(8) rctbp,rcter,rcfbp,rct,ppp ++ integer mxn1,nxn1,idnode,nold ++ integer itmols,ksite,numsit,isite,nrept,ifrz,i,j ++ integer ishls,ibonds,numcon,numang,icon,iang,idih,numdih ++ integer numinv,iinv,numgrp,kgrp,numgsit,numteth,iteth ++ integer ipmf,jpmf,npmf,itpvdw,itptbp,itpfbp ++ integer itpter,k,nfld,nummols,idum,numshl,nneu ++ integer numbonds,itpmet,iii,ngrid ++ ++ mxtmls=0 ++ mxatms=0 ++ mxgrp=0 ++ mxtcon=0 ++ mxtbnd=0 ++ mxtang=0 ++ mxtdih=0 ++ mxtinv=0 ++ mxpmf=0 ++ mxspmf=0 ++ mxungp=0 ++ mxngp=0 ++ mxneut=0 ++ mxmet=0 ++ mxatyp=0 ++ mxn1=0 ++ nxn1=0 ++ nold=-1 ++ mxgatm=0 ++ mxteth=0 ++ msteth=0 ++ mxvdw=0 ++ mxtbp=0 ++ mxter=0 ++ mxexcl=0 ++ mxsite=0 ++ mxbond=0 ++ mxcons=0 ++ mxangl=0 ++ mxdihd=0 ++ mxinv=0 ++ mxshl=0 ++ mxtshl=0 ++ mxfbp=0 ++ mxgrid=0 ++ rctbp=0.d0 ++ rcter=0.d0 ++ rcfbp=0.d0 ++ safe=.true. ++ loop1=.true. ++ loop2=.true. ++ lneut=.false. ++ ltable=.false. ++ lmetab=.false. ++ ++c open force field data file ++ ++ if(idnode.eq.0)open (nfield,file='FIELD') ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++c read and process directives from field file ++ ++ do while(loop1) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ ++ if(findstring('neut',record,idum))then ++ ++ lneut=.true. ++ ++ elseif(findstring('molecu',record,idum))then ++ ++ mxtmls=intstr(record,lenrec,idum) ++ ++ do itmols=1,mxtmls ++ ++ loop2=.true. ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ do while(loop2) ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ ++ ksite=0 ++ ++ if(findstring('nummol',record,idum))then ++ ++ nummols=intstr(record,lenrec,idum) ++ ++ elseif(findstring('atoms',record,idum))then ++ ++ numsit=intstr(record,lenrec,idum) ++ mxatms=mxatms+numsit*nummols ++ mxsite=mxsite+numsit ++ ksite=0 ++ do isite=1,numsit ++ ++ if(ksite.lt.numsit)then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ call getword(name,record,8,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ nrept=intstr(record,lenrec,idum) ++ ifrz=intstr(record,lenrec,idum) ++ nneu=intstr(record,lenrec,idum) ++ if(nrept.eq.0)nrept=1 ++ if(lneut)then ++ if(nneu.ne.nold) nxn1=0 ++ nxn1=nxn1+nrept ++ mxn1=max(mxn1,nxn1) ++ nold=nneu ++ endif ++ ++ if(mxatyp.eq.0)then ++ ++ mxatyp=1 ++ chr(1)=name ++ ++ else ++ ++ check=.true. ++ do j=1,mxatyp ++ ++ if(name.eq.chr(j))check=.false. ++ ++ enddo ++ if(check)then ++ ++ mxatyp=mxatyp+1 ++ if(mxatyp.le.mmk)chr(mxatyp)=name ++ ++ endif ++ ++ endif ++ if(nrept.eq.0)nrept=1 ++ ksite=ksite+nrept ++ ++ endif ++ ++ enddo ++ ++ if(mmk.lt.mxatyp)call abortscan(34,idnode) ++ ++ if(lneut)mxneut=mxneut+nneu*nummols ++ ++ elseif(findstring('shell',record,idum))then ++ ++ numshl=intstr(record,40,idum) ++ mxtshl=mxtshl+numshl ++ mxshl=mxshl+nummols*numshl ++ ++ do ishls=1,numshl ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('bonds',record,idum))then ++ ++ numbonds=intstr(record,lenrec,idum) ++ mxtbnd=mxtbnd+numbonds ++ mxbond=mxbond+nummols*numbonds ++ ++ do ibonds=1,numbonds ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('constr',record,idum))then ++ ++ numcon=intstr(record,lenrec,idum) ++ mxtcon=mxtcon+numcon ++ mxcons=mxcons+nummols*numcon ++ ++ do icon=1,numcon ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('angles',record,idum))then ++ ++ numang=intstr(record,lenrec,idum) ++ mxtang=mxtang+numang ++ mxangl=mxangl+nummols*numang ++ ++ do iang=1,numang ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('dihedr',record,idum))then ++ ++ numdih=intstr(record,lenrec,idum) ++ mxtdih=mxtdih+numdih ++ mxdihd=mxdihd+nummols*numdih ++ ++ do idih=1,numdih ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('invers',record,idum))then ++ ++ numinv=intstr(record,lenrec,idum) ++ mxtinv=mxtinv+numinv ++ mxinv=mxinv+nummols*numinv ++ ++ do iinv=1,numinv ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('rigid',record,idum))then ++ ++ numgrp=intstr(record,lenrec,idum) ++ mxungp=mxungp+numgrp ++ mxgrp=mxgrp+numgrp*nummols ++ ++ do kgrp=1,numgrp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ numgsit=intstr(record,lenrec,idum) ++ mxgatm=mxgatm+numgsit*nummols ++ mxngp=max(mxngp,numgsit) ++ do j=1,numgsit ++ ++ iii=intstr(record,lenrec,idum) ++ if(iii.eq.0)then ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ iii=intstr(record,lenrec,idum) ++ endif ++ ++ enddo ++ ++ enddo ++ ++ elseif(findstring('teth',record,idum))then ++ ++ numteth=intstr(record,lenrec,idum) ++ mxteth=mxteth+numteth ++ msteth=msteth+numteth*nummols ++ ++ do iteth=1,numteth ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ elseif(findstring('pmf',record,idum))then ++ ++ do ipmf=1,2 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ npmf=intstr(record,lenrec,idum) ++ mxspmf=mxspmf+npmf ++ ++ do jpmf=1,npmf ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ enddo ++ ++ enddo ++ ++ mxpmf=mxpmf+nummols ++ ++ elseif(findstring('finish',record,idum))then ++ ++ loop2=.false. ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ elseif(findstring('vdw',record,idum))then ++ ++ if(findstring('tab',record,idum))ltable=.true. ++ mxvdw=intstr(record,lenrec,idum) ++ do itpvdw=1,mxvdw ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ if(findstring('tab',record,idum))ltable=.true. ++ ++ enddo ++ mxvdw=max(mxvdw,(mxatyp*(mxatyp+1))/2) ++ ++ if(ltable)then ++ ++ if(idnode.eq.0)open(ntable,file='TABLE') ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ mxgrid=max(mxgrid,intstr(record,lenrec,idum)) ++ ++ close (ntable) ++ ++ endif ++ ++ elseif(findstring('metal',record,idum))then ++ ++ if(findstring('eam',record,idum))lmetab=.true. ++ mxmet=intstr(record,lenrec,idum) ++ do itpmet=1,mxmet ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call lowcase(record,lenrec) ++ if(findstring('eam',record,idum))lmetab=.true. ++ ++ enddo ++ mxmet=max(mxmet,(mxatyp*(mxatyp+1))/2) ++ ++ if(lmetab)then ++ ++ if(idnode.eq.0)open(ntable,file='TABEAM') ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ do i=1,intstr(record,lenrec,idum) ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ngrid=intstr(record,lenrec,idum) ++ mxgrid=max(mxgrid,ngrid+4) ++ do j=1,(ngrid+3)/4 ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abortscan(24,idnode) ++ ++ enddo ++ ++ enddo ++ ++ close (ntable) ++ ++ endif ++ ++ elseif(findstring('tbp',record,idum))then ++ ++ mxtbp=intstr(record,lenrec,idum) ++ ++ do itptbp=1,mxtbp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ rct=dblstr(record,lenrec,idum) ++ rctbp=max(rctbp,rct) ++ ++ enddo ++ ++ elseif(findstring('fbp',record,idum))then ++ ++ mxfbp=intstr(record,lenrec,idum) ++ do itpfbp=1,mxfbp ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(name,record,8,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ppp=dblstr(record,lenrec,idum) ++ ppp=dblstr(record,lenrec,idum) ++ rct=dblstr(record,lenrec,idum) ++ rcfbp=max(rcfbp,rct) ++ ++ enddo ++ ++ elseif(findstring('tersof',record,idum))then ++ ++ mxter=intstr(record,lenrec,idum) ++ ++ do itpter=1,mxter ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ rct=dblstr(record,lenrec,idum) ++ rcter=max(rcter,rct) ++ ++ enddo ++ ++ elseif(findstring('extern',record,idum))then ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ nfld=intstr(record,lenrec,idum) ++ if(nfld.eq.0)nfld=5 ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ ++ do k=1,nfld ++ ++ ppp=dblstr(record,lenrec,idum) ++ if(idum.gt.lenrec.and.k.lt.nfld)then ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)call abortscan(52,idnode) ++ endif ++ ++ enddo ++ ++ elseif(findstring('close',record,idum))then ++ ++ loop1=.false. ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (nfield) ++ ++ if(mxpmf.gt.0)mxpmf=mxatms ++ if(mxtcon.gt.0)mxexcl=max(mxexcl,6) ++ if(mxtbnd.gt.0)mxexcl=max(mxexcl,6) ++ if(mxtang.gt.0)mxexcl=max(mxexcl,16) ++ if(mxtdih.gt.0)mxexcl=max(mxexcl,50) ++ if(mxtinv.gt.0)mxexcl=max(mxexcl,50) ++ if(mxneut.gt.0)mxexcl=max(mxexcl,10*mxn1*mxn1) ++ if(mxgrp.gt.0)mxexcl=max(mxexcl,mxngp) ++ ++ return ++ ++ end subroutine fldscan ++ ++ subroutine cfgscan ++ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scanning the initial configuration ++c file to determine the number of atoms present ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith june 1997 ++c ++c note: volm is volume containing all particles, not system volume ++c ++c*********************************************************************** ++ ++ character*80 header ++ character*8 name ++ logical lvolm ++ real(8) cell,celprp,buffer,extra,volm,xhi,yhi,zhi ++ real(8) xxx,yyy,zzz,uuu,vvv,www,coz ++ integer idnode,nconf,imcon,i,levcfg ++ dimension cell(9),celprp(10),buffer(10),extra(5) ++ ++ imcon=0 ++ xhi=0.d0 ++ yhi=0.d0 ++ zhi=0.d0 ++ volm=0.d0 ++ do i=1,9 ++ ++ cell(i)=0.d0 ++ ++ enddo ++ if(idnode.eq.0)then ++ ++ open (nconf,file='CONFIG') ++ ++c read the CONFIG file header ++ ++ read(nconf,'(a80)',end=100)header ++ read(nconf,'(2i10)',end=100)levcfg,imcon ++ lvolm=(imcon.eq.0.or.imcon.eq.6) ++ ++c specify molecular dynamics simulation cell ++ ++ if(imcon.gt.0)then ++ ++ read(nconf,'(3f20.0)',end=100)cell(1),cell(2),cell(3) ++ read(nconf,'(3f20.0)',end=100)cell(4),cell(5),cell(6) ++ read(nconf,'(3f20.0)',end=100)cell(7),cell(8),cell(9) ++ call dcell(cell,celprp) ++ ++ endif ++ ++ if(.not.lvolm)then ++ ++ volm=celprp(10) ++ ++ if(imcon.eq.4)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.5)then ++ ++ volm=0.5d0*celprp(10) ++ ++ elseif(imcon.eq.7)then ++ ++ volm=0.5d0*celprp(10) ++ ++ endif ++ ++ endif ++ ++ i=0 ++ do while(.true.) ++ ++ i=i+1 ++ if(levcfg.eq.0)then ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ ++ else if(levcfg.eq.1)then ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ ++ else ++ ++ read(nconf,'(a8)',end=100) name ++ read(nconf,'(3f20.0)')xxx,yyy,zzz ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ read(nconf,'(3f20.0)')uuu,vvv,www ++ ++ endif ++ ++ if(lvolm)then ++ ++ if(i.eq.1)then ++ ++ xhi=abs(xxx) ++ yhi=abs(yyy) ++ zhi=abs(zzz) ++ ++ else ++ ++ xhi=max(xhi,abs(xxx)) ++ yhi=max(yhi,abs(yyy)) ++ zhi=max(zhi,abs(zzz)) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ 100 continue ++ ++ if(imcon.eq.0)then ++ ++ volm=8.d0*xhi*yhi*zhi ++ ++ else if(imcon.eq.6)then ++ ++ coz=(cell(1)*cell(4)+cell(2)*cell(5)+cell(3)*cell(6))/ ++ x (celprp(1)*celprp(2)) ++ volm=2.d0*zhi*celprp(1)*celprp(2)*sqrt(1.d0-coz**2) ++ ++ endif ++ ++ close (nconf) ++ ++ endif ++ ++ extra(1)=dble(imcon) ++ extra(2)=xhi ++ extra(3)=yhi ++ extra(4)=zhi ++ extra(5)=volm ++ call gdsum(extra,5,buffer) ++ call gdsum(cell,9,buffer) ++ imcon=nint(extra(1)) ++ xhi=extra(2) ++ yhi=extra(3) ++ zhi=extra(4) ++ volm=extra(5) ++ ++ return ++ ++ end subroutine cfgscan ++ ++ subroutine conscan ++ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, ++ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, ++ x zlen,cell) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for scanning the contents of the control file ++c ++c copyright - daresbury laboratory 1997 ++c author - w. smith june 1997 ++c ++c*********************************************************************** ++ ++ logical safe,lewald,lspme,lhke,peek,nolink,lcshft,lmetad ++ logical lsolva,lfree,lfrmas,lghost,redirect ++ real(8) cell,celprp,rcut,rvdw,delr,eps,alpha,fac,tol,tol1 ++ real(8) densvar,drdf,dzdn,zlen ++ integer nhko,idnode,imcon,idum,jmp ++ integer nlatt,kmax1,kmax2,kmax3,kmaxpow2 ++ dimension celprp(10),cell(9) ++ ++ nhko=0 ++ mxstak=0 ++ kmaxa=0 ++ kmaxb=1 ++ kmaxc=1 ++ kmaxd=1 ++ kmaxe=1 ++ kmaxf=1 ++ rcut=0.d0 ++ rvdw=0.d0 ++ delr=0.d0 ++ drdf=0.05d0 ++ dzdn=0.05d0 ++ zlen=0.d0 ++ densvar=1.d2 ++ peek=.true. ++ lhke=.false. ++ lspme=.false. ++ lewald=.false. ++ lcshft=.false. ++ nolink=.false. ++ lghost=.false. ++ lfree=.false. ++ lfrmas=.false. ++ lsolva=.false. ++ lmetad=.false. ++ redirect=.false. ++ ++c open the simulation input file ++ ++ if(idnode.eq.0)open (nread,file='CONTROL') ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ ++ do while(peek) ++ ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ call lowcase(record,lenrec) ++ if(record(1).ne.'#')then ++ ++ if(findstring('stack',record,idum))then ++ ++ mxstak=intstr(record,lenrec,idum) ++ ++ elseif(findstring('no link',record,idum))then ++ ++ nolink=.true. ++ ++ elseif(findstring('metafreeze',record,idum))then ++ ++ lmetad=.true. ++ do while(lmetad) ++ call getrec(safe,idnode,nread) ++ if(.not.safe)call abortscan(17,idnode) ++ call lowcase(record,lenrec) ++ lmetad=.not.findstring('endmet',record,idum) ++ enddo ++ ++ elseif(findstring('redirect',record,idum))then ++ ++ redirect=.true. ++ ++ elseif(findstring('densvar',record,idum))then ++ ++ densvar=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('shift',record,idum).or. ++ x findstring('reaction',record,idum))then ++ ++ lcshft=.true. ++ ++ elseif(findstring('ewald',record,idum).or. ++ x findstring('spme',record,idum).or. ++ x findstring('hke',record,idum))then ++ ++c read Ewald or HK-Ewald or SPM-Ewald sum parameters ++ ++ lhke=findstring('hke',record,idum) ++ lspme=findstring('spme',record,idum) ++ lewald=findstring('ewald',record,idum) ++ ++ if(findstring('precision',record,idum))then ++ ++ eps=dblstr(record,lenrec,idum) ++ if(lhke) then ++ ++ nhko=intstr(record,lenrec,idum) ++ nlatt=intstr(record,lenrec,idum) ++ nlatt=min(nlatt,2) ++ ++ endif ++ ++ if(rcut.lt.1.d-6)rcut=10.d0 ++ ++c compute alpha and the kmax ++ ++ if(lewald.or.lspme)then ++ ++ call dcell(cell,celprp) ++ eps=min(abs(eps),0.5d0) ++ tol=sqrt(abs(log(eps*rcut))) ++ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut ++ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) ++ fac=1.d0 ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) ++ x fac=2.d0**(1.d0/3.d0) ++ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) ++ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) ++ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) ++ ++ elseif(lhke)then ++ ++ if(nhko.eq.0)then ++ if(eps.le.1.d-6)then ++ alpha=3.46d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=3.14d0/rcut ++ else ++ alpha=2.76d0/rcut ++ endif ++ elseif(nhko.eq.1)then ++ if(eps.le.1.d-6)then ++ alpha=4.37d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.08d0/rcut ++ else ++ alpha=3.75d0/rcut ++ endif ++ elseif(nhko.eq.2)then ++ if(eps.le.1.d-6)then ++ alpha=5.01d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=4.74d0/rcut ++ else ++ alpha=4.44d0/rcut ++ endif ++ elseif(nhko.eq.3)then ++ if(eps.le.1.d-6)then ++ alpha=5.55d0/rcut ++ elseif(eps.le.1.d-5)then ++ alpha=5.28d0/rcut ++ else ++ alpha=5.00d0/rcut ++ endif ++ endif ++ alpha=alpha/dble(2*nlatt+1) ++ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 ++ call dcell(cell,celprp) ++ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) ++ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) ++ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) ++ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) ++ kmax3=1 ++ ++ endif ++ ++ else ++ ++ alpha=dblstr(record,lenrec,idum) ++ kmax1=intstr(record,lenrec,idum) ++ kmax2=intstr(record,lenrec,idum) ++ ++ if(lhke)then ++ ++ kmax3=1 ++ nhko=intstr(record,lenrec,idum) ++ ++ else ++ ++ kmax3=intstr(record,lenrec,idum) ++ ++ endif ++ ++ endif ++ ++c for spme double kmax and set to next power of 2, with current ++c upper limit of 512 ++ ++ if(lspme)then ++ ++ kmaxpow2=1 ++ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxd=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxe=2 * kmaxpow2 ++ ++ kmaxpow2=1 ++ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) ++ kmaxpow2=kmaxpow2 * 2 ++ end do ++ kmaxf=2 * kmaxpow2 ++ ++ elseif(lhke) then ++ ++ kmaxa=kmax1 ++ kmaxb=kmax2 ++ kmaxc=1 ++ ++ else ++ ++ kmaxa=kmax1 ++ kmaxb=kmax2 ++ kmaxc=kmax3 ++ ++ endif ++ ++ elseif(findstring('cut',record,idum))then ++ ++ rcut=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('rvdw',record,idum))then ++ ++ rvdw=dblstr(record,lenrec,idum) ++ ++ elseif(findstring('delr',record,idum))then ++ ++ delr=dblstr(record,100,idum) ++ ++ else if(findstring('rdf',record,idum))then ++ ++ if(.not.findstring('print',record,idum))then ++ ++ jmp=intstr(record,lenrec,idum) ++ drdf=dblstr(record,lenrec,idum) ++ ++ endif ++ ++ else if(findstring('zden',record,idum))then ++ ++ jmp=intstr(record,lenrec,idum) ++ dzdn=dblstr(record,lenrec,idum) ++ zlen=dblstr(record,lenrec,idum) ++ if(dzdn.lt.1.d-8)then ++ ++ dzdn=0.1d0 ++ zlen=0.1d0*dble(128) ++ ++ elseif(zlen.lt.1.d-8)then ++ ++ zlen=dzdn*dble(128) ++ ++ endif ++ ++ elseif(findstring('solva',record,idum))then ++ ++ lsolva=.true. ++ ++ elseif(findstring('decomp',record,idum))then ++ ++ lsolva=.true. ++ ++ elseif(findstring('free',record,idum))then ++ ++ lfree=.true. ++ ++ elseif(findstring('excit',record,idum))then ++ ++ lghost=.true. ++ lsolva=.true. ++ ++ elseif(findstring('reset_mass',record,idum))then ++ ++ lfrmas=.true. ++ ++ elseif(findstring('switch',record,idum))then ++ ++ lghost=.true. ++ lsolva=.true. ++ ++ elseif(findstring('finish',record,idum))then ++ ++ peek=.false. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (nread) ++ if(abs(rvdw).le.1.d-10)rvdw=rcut ++ if(drdf.lt.1.d-8)drdf=0.05d0 ++ if(dzdn.lt.1.d-8)dzdn=0.05d0 ++ ++ return ++ ++ end subroutine conscan ++ ++ subroutine abortscan(key,idnode) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for controlled exit of file scan ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c********************************************************************* ++ ++ integer key,idnode ++ ++ write(nrite,'(/,/,1x,a,i5)') ++ x 'DL_POLY terminated due to error ', key ++ ++ if(key.eq.17)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - strange exit from CONTROL file processing' ++ ++ else if(key.eq.52)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of FIELD file encountered' ++ ++ else if(key.eq.24)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - end of file encountered in TABLE file' ++ ++ else if(key.eq.34)then ++ ++ write(nrite,'(/,/,1x,a)') ++ x 'error - character array memory allocation failure' ++ ++ endif ++ ++ if(idnode.eq.0) then ++ close (nrite) ++ close (nhist) ++ close (nread) ++ close (nconf) ++ close (nstats) ++ close (nrest) ++ close (nfield) ++ close (ntable) ++ endif ++ ++ call gsync() ++ call exitcomms() ++ ++ return ++ end subroutine abortscan ++ ++ subroutine dcell(aaa,bbb) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to calculate the dimensional properties of ++c a simulation cell specified by the input matrix aaa. ++c the results are returned in the array bbb, with : ++c ++c bbb(1 to 3) - lengths of cell vectors ++c bbb(4 to 6) - cosines of cell angles ++c bbb(7 to 9) - perpendicular cell widths ++c bbb(10) - cell volume ++c ++c copyright daresbury laboratory 1992 ++c author - w. smith july 1992 ++c ++c*********************************************************************** ++ ++ real(8) aaa,bbb,axb1,axb2,axb3,bxc1,bxc2,bxc3,cxa1,cxa2,cxa3 ++ ++ dimension aaa(9),bbb(10) ++ ++c calculate lengths of cell vectors ++ ++ bbb(1)=sqrt(aaa(1)*aaa(1)+aaa(2)*aaa(2)+aaa(3)*aaa(3)) ++ bbb(2)=sqrt(aaa(4)*aaa(4)+aaa(5)*aaa(5)+aaa(6)*aaa(6)) ++ bbb(3)=sqrt(aaa(7)*aaa(7)+aaa(8)*aaa(8)+aaa(9)*aaa(9)) ++ ++c calculate cosines of cell angles ++ ++ bbb(4)=(aaa(1)*aaa(4)+aaa(2)*aaa(5)+aaa(3)*aaa(6))/(bbb(1)*bbb(2)) ++ bbb(5)=(aaa(1)*aaa(7)+aaa(2)*aaa(8)+aaa(3)*aaa(9))/(bbb(1)*bbb(3)) ++ bbb(6)=(aaa(4)*aaa(7)+aaa(5)*aaa(8)+aaa(6)*aaa(9))/(bbb(2)*bbb(3)) ++ ++c calculate vector products of cell vectors ++ ++ axb1=aaa(2)*aaa(6)-aaa(3)*aaa(5) ++ axb2=aaa(3)*aaa(4)-aaa(1)*aaa(6) ++ axb3=aaa(1)*aaa(5)-aaa(2)*aaa(4) ++ bxc1=aaa(5)*aaa(9)-aaa(6)*aaa(8) ++ bxc2=aaa(6)*aaa(7)-aaa(4)*aaa(9) ++ bxc3=aaa(4)*aaa(8)-aaa(5)*aaa(7) ++ cxa1=aaa(8)*aaa(3)-aaa(2)*aaa(9) ++ cxa2=aaa(1)*aaa(9)-aaa(3)*aaa(7) ++ cxa3=aaa(2)*aaa(7)-aaa(1)*aaa(8) ++ ++c calculate volume of cell ++ ++ bbb(10)=abs(aaa(1)*bxc1+aaa(2)*bxc2+aaa(3)*bxc3) ++ ++c calculate cell perpendicular widths ++ ++ bbb(7)=bbb(10)/sqrt(bxc1*bxc1+bxc2*bxc2+bxc3*bxc3) ++ bbb(8)=bbb(10)/sqrt(cxa1*cxa1+cxa2*cxa2+cxa3*cxa3) ++ bbb(9)=bbb(10)/sqrt(axb1*axb1+axb2*axb2+axb3*axb3) ++ ++ return ++ end subroutine dcell ++ ++ end module setup_module +diff -urN dl_class_1.9.orig/srcmod/shake_module.f dl_class_1.9/srcmod/shake_module.f +--- dl_class_1.9.orig/srcmod/shake_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/shake_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,152 @@ ++ module shake_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining bond shake arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmcon(:) ++ integer, allocatable :: listcon(:,:),listot(:) ++ integer, allocatable :: numcon(:),lstcon(:,:) ++ integer, allocatable :: listme(:),lishap(:),lashap(:) ++ ++ save prmcon,listcon,listot,numcon,lstcon,listme,lishap,lashap ++ ++ contains ++ ++ subroutine alloc_shake_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (prmcon(mxtcon),stat=fail(1)) ++ allocate (numcon(mxtmls),stat=fail(2)) ++ allocate (lstcon(mxtcon,2),stat=fail(3)) ++ allocate (listcon(mxcons,3),stat=fail(4)) ++ allocate (listme(mxatms),stat=fail(5)) ++ allocate (lishap(mxlshp),stat=fail(6)) ++ allocate (lashap(mxproc),stat=fail(7)) ++ allocate (listot(mxatms),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1070) ++ enddo ++ ++ do i=1,mxtmls ++ numcon(i)=0 ++ enddo ++ ++ end subroutine alloc_shake_arrays ++ ++ subroutine define_constraints ++ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining constraints ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c adapted - p-a cazade oct 2007, solvation, excitation etc. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lghost ++ character*1 message(80) ++ integer idnode,itmols,nconst,nsite,ntmp,icnst ++ integer icnst1,iatm1,iatm2,isite1,isite2,idum,i ++ integer isol1,isol2,natmsr ++ ++ ntmp=intstr(record,lenrec,idum) ++ numcon(itmols)=numcon(itmols)+ntmp ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of bond constraints', ++ x 5x,i10)") ntmp ++ write(nrite,"(/,/,1x,'constraint bond details:', ++ x /,/,21x,5x,'index',5x,'index',2x,'bondlength',/) ++ x ") ++ endif ++ ++ icnst1 = numcon(itmols) ++ do icnst=1,icnst1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ iatm1 = intstr(record,lenrec,idum) ++ iatm2 = intstr(record,lenrec,idum) ++ ++c test for frozen atom pairs(:) ++ ++ isite1 = nsite - numsit(itmols) + iatm1 ++ isite2 = nsite - numsit(itmols) + iatm2 ++ if(lghost)then ++ ++ isol1=natmsr+iatm1 ++ isol2=natmsr+iatm2 ++ ++ endif ++ ++ if(lfzsit(isite1)*lfzsit(isite2).ne.0) then ++ ++ numcon(itmols) = numcon(itmols) -1 ++ if(idnode.eq.0) write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nconst=nconst+1 ++ ++ if(nconst.gt.mxtcon) call error(idnode,40) ++ ++ lstcon(nconst,1)= iatm1 ++ lstcon(nconst,2)= iatm2 ++ prmcon(nconst)=dblstr(record,lenrec,idum) ++ ++ if(lghost)then ++ ++ if((isol1.ge.ind_fre(3)).or.(isol2.ge.ind_fre(3)))then ++ ++ numcon(itmols)=numcon(itmols)-1 ++ ntcons_ghost=ntcons_ghost+1 ++ ++ endif ++ ++ endif ++ ++ if(idnode.eq.0) ++ x write(nrite,"(21x,2i10,f12.6)") ++ x lstcon(nconst,1),lstcon(nconst,2), ++ x prmcon(nconst) ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_constraints ++ ++ end module shake_module +diff -urN dl_class_1.9.orig/srcmod/site_module.f dl_class_1.9/srcmod/site_module.f +--- dl_class_1.9.orig/srcmod/site_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/site_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,233 @@ ++ module site_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining atomic/site arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use error_module ++ use parse_module ++ use setup_module ++ ++ implicit none ++ ++ character*1, allocatable :: molnam(:,:) ++ character*8, allocatable :: sitnam(:),unqatm(:) ++ real(8), allocatable :: dens(:),chgsit(:),wgtsit(:) ++ integer, allocatable :: nexsit(:),lfzsit(:),numsit(:),ltpsit(:) ++ integer, allocatable :: nugrp(:),lexsit(:,:),numgrp(:) ++ integer, allocatable :: numtyp(:),numfrz(:),nummols(:) ++ ++ save numtyp,numfrz,dens,chgsit,wgtsit,sitnam,unqatm,nexsit ++ save lfzsit,numsit,ltpsit,nugrp,lexsit,numgrp,molnam,nummols ++ ++ contains ++ ++ subroutine alloc_site_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=16 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (chgsit(mxsite),stat=fail(1)) ++ allocate (wgtsit(mxsite),stat=fail(2)) ++ allocate (nexsit(mxsite),stat=fail(3)) ++ allocate (lfzsit(mxsite),stat=fail(4)) ++ allocate (nugrp(mxsite) ,stat=fail(5)) ++ allocate (ltpsit(mxsite),stat=fail(6)) ++ allocate (numsit(mxtmls),stat=fail(7)) ++ allocate (lexsit(mxsite,mxexcl),stat=fail(8)) ++ allocate (sitnam(mxsite),stat=fail(9)) ++ allocate (unqatm(mxsite),stat=fail(10)) ++ allocate (numgrp(mxtmls),stat=fail(11)) ++ allocate (numtyp(mxatyp),stat=fail(12)) ++ allocate (numfrz(mxatyp),stat=fail(13)) ++ allocate (dens(mxatyp),stat=fail(14)) ++ allocate (nummols(mxtmls),stat=fail(15)) ++ allocate (molnam(40,mxtmls),stat=fail(16)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1090) ++ enddo ++ ++ do i=1,mxtmls ++ numsit(i)=0 ++ enddo ++ ++ end subroutine alloc_site_arrays ++ ++ subroutine define_atoms ++ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining atom types in system ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ character*8 atom1 ++ character*1 message(80) ++ logical lneut,safe,atmchk ++ integer idnode,itmols,nsite,ksite,ntpatm,isite,nrept ++ integer ifrz,neugp,irept,jsite,idum ++ real(8) weight,charge ++ ++ numsit(itmols)=intstr(record,lenrec,idum) ++ if(idnode.eq.0) then ++ write(nrite,"(/,1x,'number of atoms/sites', ++ x 10x,i10)") numsit(itmols) ++ if(.not.lneut) ++ x write(nrite,"(/,/,1x,'atomic characteristics:', ++ x /,/,21x,' site',5x,'name',10x,'mass',8x, ++ x 'charge',4x,'repeat',4x,'freeze'/)") ++ if(lneut) ++ x write(nrite,"(/,/,1x,'atomic characteristics:',/ ++ x /,21x,' site',5x,'name',10x,'mass',8x,'charge', ++ x 4x,'repeat',4x,'freeze',3x,'chg grp')") ++ ++ endif ++ ++ do isite=1,numsit(itmols) ++ ++ if(ksite.lt.numsit(itmols))then ++ ++c read atom name, site number, mass, charge, freeze option ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ weight=dblstr(record,lenrec,idum) ++ charge=dblstr(record,lenrec,idum) ++ nrept=intstr(record,lenrec,idum) ++ ifrz =intstr(record,lenrec,idum) ++ neugp=intstr(record,lenrec,idum) ++ if(nrept.eq.0)nrept=1 ++ ksite=ksite+nrept ++ ++ if(idnode.eq.0) then ++ ++ if(.not.lneut) then ++ ++ write(nrite, ++ x "(21x,i5,5x,a8,2f12.5,2i10)") ++ x nsite+1,atom1,weight,charge,nrept, ++ x ifrz ++ ++ else ++ ++ write(nrite, ++ x "(21x,i5,5x,a8,2f12.5,3i10)") ++ x nsite+1,atom1,weight,charge,nrept, ++ x ifrz,neugp ++ ++ endif ++ ++ endif ++ ++ do irept=1,nrept ++ ++ nsite=nsite+1 ++ if(nsite.gt.mxsite) call error(idnode,20) ++ ++ sitnam(nsite)=atom1 ++ wgtsit(nsite)=weight ++ chgsit(nsite)=charge ++ lfzsit(nsite)=ifrz ++ nugrp(nsite)=neugp ++ ++ enddo ++ ++c establish list of unique atom types ++ ++ atmchk=.true. ++ ++ do jsite=1,ntpatm ++ ++ if(atom1.eq.unqatm(jsite)) then ++ ++ atmchk=.false. ++ do irept=nsite,nsite-nrept+1,-1 ++ ++ ltpsit(irept)=jsite ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ if(atmchk)then ++ ++ ntpatm=ntpatm+1 ++ if(ntpatm.gt.mxatyp)call error(idnode,14) ++ unqatm(ntpatm)=atom1 ++ ++ do irept=nsite,nsite-nrept+1,-1 ++ ++ ltpsit(irept)=ntpatm ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_atoms ++ ++ subroutine check_syschg(idnode,ntpmls,sumchg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for checking the system charge ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,ntpmls,jsite,itmols,lsite ++ real(8) sumchg ++ ++ jsite=0 ++ do itmols=1,ntpmls ++ ++ do lsite=1,numsit(itmols) ++ ++ jsite=jsite+1 ++ sumchg=sumchg+dble(nummols(itmols))*chgsit(jsite) ++ ++ enddo ++ ++ enddo ++ ++ if(abs(sumchg).gt.1.0d-6) then ++ ++ call warning(idnode,60,sumchg,0.d0,0.d0) ++ ++ endif ++ ++ return ++ end subroutine check_syschg ++ ++ end module site_module +diff -urN dl_class_1.9.orig/srcmod/solvation_module.f dl_class_1.9/srcmod/solvation_module.f +--- dl_class_1.9.orig/srcmod/solvation_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/solvation_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,996 @@ ++ module solvation_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining decomposition of energy arrays ++c to calculate solvation energies ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ use setup_module ++ use error_module ++ use config_module ++ ++ implicit none ++ ++ logical lcomp(9) ++ ++ integer mxtmls_sol2,mxtmls_sol3,mxtmls_sol4 ++ integer ntcons_ghost,ngrp_ghost,nswitch,niswitch ++ integer mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 ++ integer nfrn,ifrn,mfree,kfree,ind_fre(4) ++ ++ real(8) pfree,lambda1,lambda2,dlambda,eng_kin_fre ++ real(8) elrc2,virlrc2,engsic0,engsic2,elrc_sav,qfix_fre ++ real(8) virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,vlrc_fre ++ real(8) qchg0,qchg1,qchg2,ang_fre,bnd_fre,dih_fre ++ real(8) inv_fre,tbp_fre,fbp_fre,cou_fre,elrc2_sav ++ real(8) vdw_fre,eng_cfg_fre,shl_fre,virlrc2_sav,vlrc_fre_sav ++ real(8) qchg_sav,vir_cfg_fre,ang_vir,bnd_vir,dih_vir ++ real(8) inv_vir,tbp_vir,fbp_vir,cou_vir,vdw_vir,shl_vir ++ ++ integer, allocatable :: atm_fre(:) ++ integer, allocatable :: atmolt(:),rigid_sol(:),const_sol(:) ++ integer, allocatable :: lstgot_sol(:),natm_sol(:) ++ ++ real(8), allocatable :: elrc_sol(:),elrc_sol_sav(:),shl_sol(:) ++ real(8), allocatable :: cou_sol(:),vdw_sol(:),bnd_sol(:) ++ real(8), allocatable :: ckc_sol_sum(:),cks_sol_sum(:) ++ real(8), allocatable :: cou_sol_sic(:),ebuf_sol1(:),inv_sol(:) ++ real(8), allocatable :: ang_sol(:),dih_sol(:),en3_sol(:) ++ real(8), allocatable :: qfix_sol(:),ebuf_sol2(:),en4_sol(:) ++ real(8), allocatable :: vdw_sol_lng(:),cou_sol_lng(:) ++ real(8), allocatable :: degfre_sol(:),degrot_sol(:),temp_sol(:) ++ real(8), allocatable :: vxo_sol(:),vyo_sol(:),vzo_sol(:) ++ real(8), allocatable :: ckc1(:),cks1(:),ckc2(:),cks2(:) ++ real(8), allocatable :: ckc_fre_sum(:),cks_fre_sum(:) ++ real(8), allocatable :: ebuf_exc1(:),ebuf_exc2(:) ++ real(8), allocatable :: vxo_fre(:),vyo_fre(:),vzo_fre(:) ++ real(8), allocatable :: elrc_exc(:),elrc_exc_sav(:) ++ real(8), allocatable :: cou_exc(:),vdw_exc(:),bnd_exc(:) ++ real(8), allocatable :: ang_exc(:),dih_exc(:),en4_exc(:) ++ real(8), allocatable :: vdw_exc_lng(:),cou_exc_lng(:) ++ real(8), allocatable :: shl_exc(:),en3_exc(:),inv_exc(:) ++ real(8), allocatable :: qfix_exc(:),cou_exc_sic(:),weight_sav(:) ++ ++ save atmolt,rigid_sol,const_sol,lstgot_sol,natm_sol,elrc_sol ++ save elrc_sol_sav,cou_sol,vdw_sol,bnd_sol,ckc_sol_sum,cks_sol_sum ++ save cou_sol_sic,ebuf_sol1,en4_sol,ang_sol,dih_sol,en3_sol ++ save qfix_sol,ebuf_sol2,shl_sol,vdw_sol_lng,cou_sol_lng,degfre_sol ++ save degrot_sol,inv_sol,temp_sol,vxo_sol,vyo_sol,vzo_sol ++ save mxtmls_sol2,mxtmls_sol3,mxtmls_sol4,lcomp ++ ++ save nfrn,ifrn,mfree,kfree,pfree,lambda1,lambda2,dlambda ++ save eng_kin_fre,elrc2,virlrc2,engsic0,engsic2,cks_fre_sum ++ save virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,qchg1,qchg2 ++ save ang_fre,bnd_fre,dih_fre,inv_fre,tbp_fre,fbp_fre,qchg0 ++ save cou_fre,vdw_fre,eng_cfg_fre,elrc2_sav,elrc_sav,vlrc_fre ++ save ang_vir,bnd_vir,dih_vir,inv_vir,tbp_vir,fbp_vir,cou_vir ++ save vdw_vir,shl_vir,vir_cfg_fre,qfix_fre,virlrc2_sav ++ save ind_fre,atm_fre,ckc1,cks1,ckc2,cks2,ckc_fre_sum ++ save ebuf_exc1,ebuf_exc2,vxo_fre,vyo_fre,vzo_fre,vlrc_fre_sav ++ save weight_sav ++ ++ save ntcons_ghost,ngrp_ghost,qchg_sav,nswitch,niswitch ++ save mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 ++ save cou_exc,vdw_exc,bnd_exc,ang_exc,dih_exc,en4_exc,vdw_exc_lng ++ save cou_exc_lng,shl_exc,en3_exc,inv_exc,elrc_exc,elrc_exc_sav ++ save qfix_exc,cou_exc_sic ++ ++ contains ++ ++ subroutine alloc_sol_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for allocating solvation module arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=37 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ mxtmls_sol2=((mxtmls_sol+1)*mxtmls_sol)/2 ++ mxtmls_sol3=(((mxtmls_sol+3)*mxtmls_sol+2)*mxtmls_sol)/6 ++ mxtmls_sol4=((((mxtmls_sol+6)*mxtmls_sol+11)*mxtmls_sol+6)* ++ x mxtmls_sol)/24 ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (cou_sol(mxtmls_sol2),stat=fail(1)) ++ allocate (vdw_sol(mxtmls_sol2),stat=fail(2)) ++ allocate (shl_sol(mxtmls_sol),stat=fail(3)) ++ allocate (ebuf_sol1(mxebuf_sol),stat=fail(4)) ++ allocate (cou_sol_sic(mxtmls_sol2),stat=fail(5)) ++ allocate (cks_sol_sum(mxtmls_sol),stat=fail(6)) ++ allocate (ckc_sol_sum(mxtmls_sol),stat=fail(7)) ++ allocate (bnd_sol(mxtmls_sol),stat=fail(8)) ++ allocate (ang_sol(mxtmls_sol),stat=fail(9)) ++ allocate (dih_sol(mxtmls_sol),stat=fail(10)) ++ allocate (atmolt(mxatms_sol),stat=fail(11)) ++ allocate (en3_sol(mxtmls_sol3),stat=fail(12)) ++ allocate (en4_sol(mxtmls_sol4),stat=fail(13)) ++ allocate (qfix_sol(mxtmls_sol),stat=fail(14)) ++ allocate (elrc_sol(mxtmls_sol2),stat=fail(15)) ++ allocate (elrc_sol_sav(mxtmls_sol2),stat=fail(16)) ++ allocate (ebuf_sol2(mxebuf_sol),stat=fail(23)) ++ allocate (rigid_sol(mxtmls_sol),stat=fail(24)) ++ allocate (const_sol(mxtmls_sol),stat=fail(25)) ++ allocate (degfre_sol(mxtmls_sol),stat=fail(26)) ++ allocate (degrot_sol(mxtmls_sol),stat=fail(27)) ++ allocate (natm_sol(mxtmls_sol),stat=fail(28)) ++ allocate (lstgot_sol(mxatms_sol),stat=fail(29)) ++ allocate (temp_sol(mxtmls_sol),stat=fail(30)) ++ allocate (vxo_sol(mxatms_sol),stat=fail(31)) ++ allocate (vyo_sol(mxatms_sol),stat=fail(32)) ++ allocate (vzo_sol(mxatms_sol),stat=fail(33)) ++ allocate (vdw_sol_lng(mxtmls_sol2),stat=fail(34)) ++ allocate (cou_sol_lng(mxtmls_sol2),stat=fail(35)) ++ allocate (inv_sol(mxtmls_sol),stat=fail(36)) ++ allocate (weight_sav(mxatms_fre),stat=fail(37)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++c initialise accumulators ++ ++ lcomp(:)=.false. ++ elrc_sol(:)=0.d0 ++ cou_sol(:)=0.d0 ++ vdw_sol(:)=0.d0 ++ en3_sol(:)=0.d0 ++ en4_sol(:)=0.d0 ++ bnd_sol(:)=0.d0 ++ ang_sol(:)=0.d0 ++ dih_sol(:)=0.d0 ++ inv_sol(:)=0.d0 ++ ++ return ++ end subroutine alloc_sol_arrays ++ ++ subroutine solva_temp(idnode,mxnode,natms,keyver) ++ ++c*********************************************************************** ++c ++c dl_poly routine for solvation module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode,natms,keyver ++ real(8) vvx,vvy,vvz ++ ++ temp_sol(:)=0.d0 ++ ++ do i=idnode+1,natms,mxnode ++ ++ if(keyver.eq.0)then ++ ++ vvx=0.5d0*(vxx(i)+vxo_sol(i)) ++ vvy=0.5d0*(vyy(i)+vyo_sol(i)) ++ vvz=0.5d0*(vzz(i)+vzo_sol(i)) ++ ++ else ++ ++ vvx=vxx(i) ++ vvy=vyy(i) ++ vvz=vzz(i) ++ ++ endif ++ ++ temp_sol(atmolt(i))=temp_sol(atmolt(i))+weight(i)* ++ x (vvx*vvx+vvy*vvy+vvz*vvz)/(boltz*degfre_sol(atmolt(i))) ++ ++ enddo ++ ++c global sum ++ ++ if(mxnode.gt.1)call gdsum(temp_sol,mxtmls_sol,buffer) ++ ++ return ++ end subroutine solva_temp ++ ++ subroutine alloc_free_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine to allocate free energy arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (ebuf_exc1(mxebuf_fre),stat=fail(1)) ++ allocate (ckc1(mxewld_fre),stat=fail(2)) ++ allocate (cks1(mxewld_fre),stat=fail(3)) ++ allocate (ckc2(mxewld_fre),stat=fail(4)) ++ allocate (cks2(mxewld_fre),stat=fail(5)) ++ allocate (cks_fre_sum(mxtmls_fre),stat=fail(6)) ++ allocate (ckc_fre_sum(mxtmls_fre),stat=fail(7)) ++ allocate (atm_fre(mxatms_fre),stat=fail(8)) ++ allocate (ebuf_exc2(mxebuf_fre),stat=fail(9)) ++ allocate (vxo_fre(mxatms_fre),stat=fail(10)) ++ allocate (vyo_fre(mxatms_fre),stat=fail(11)) ++ allocate (vzo_fre(mxatms_fre),stat=fail(12)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++ return ++ ++ end subroutine alloc_free_arrays ++ ++ subroutine lrcorrect_fre(lfree,volm,elrc,virlrc) ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical lfree ++ real(8) volm,elrc,virlrc ++ ++ elrc=elrc_sav*(volm_sav/volm) ++ elrc2=elrc2_sav*(volm_sav/volm) ++ virlrc=virlrc_sav*(volm_sav/volm) ++ virlrc2=virlrc2_sav*(volm_sav/volm) ++ if(lfree)then ++ elrc_fre=elrc_fre_sav*(volm_sav/volm) ++ vlrc_fre=vlrc_fre_sav*(volm_sav/volm) ++ endif ++ ++ end subroutine lrcorrect_fre ++ ++ subroutine free_kinetic(lfrmas,idnode,mxnode,keyver) ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module ++c calculate kinetic energy difference between states ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008: parallel version ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lfrmas ++ integer i,idnode,mxnode,keyver ++ real(8) fac ++ ++ fac=dlambda ++ eng_kin_fre=0.d0 ++ ++ if(keyver.eq.0)then ++ ++ if(lfrmas)fac=dlambda/lambda1 ++ do i=ind_fre(1)+idnode,ind_fre(2),mxnode ++ ++ eng_kin_fre=eng_kin_fre- ++ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ ++ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) ++ ++ enddo ++ ++ if(lfrmas)fac=dlambda/lambda2 ++ do i=ind_fre(3)+idnode,ind_fre(4),mxnode ++ ++ eng_kin_fre=eng_kin_fre+ ++ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ ++ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) ++ ++ enddo ++ ++ eng_kin_fre=eng_kin_fre/8.d0 ++ ++ else ++ ++ if(lfrmas)fac=dlambda/lambda1 ++ do i=ind_fre(1)+idnode,ind_fre(2),mxnode ++ ++ eng_kin_fre=eng_kin_fre-fac*weight(i)*(vxx(i)**2+ ++ x vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ if(lfrmas)fac=dlambda/lambda2 ++ do i=ind_fre(3)+idnode,ind_fre(4),mxnode ++ ++ eng_kin_fre=eng_kin_fre+fac*weight(i)*(vxx(i)**2+ ++ x vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ eng_kin_fre=eng_kin_fre/2.d0 ++ ++ endif ++ ++c global sum ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=eng_kin_fre ++ call gdsum(buffer(1),1,buffer(2)) ++ eng_kin_fre=buffer(1) ++ ++ endif ++ ++ return ++ end subroutine free_kinetic ++ ++ subroutine freegen() ++ ++c*********************************************************************** ++c ++c dl_poly routine for free energy module: select mixing scheme ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,j,fac1,fac2 ++ real(8) sigma1,sigma2,acc,arg,gss,tt,pp,a1,a2,a3,a4,a5,err ++ ++ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ ++ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ ++ ++ if(mfree.eq.1)then ++ ++c linear mixing ++ ++ lambda1=(1.d0-pfree) ++ lambda2=pfree ++ dlambda=1.d0 ++ ++ elseif(mfree.eq.2)then ++ ++c nonlinear mixing ++ ++ lambda1=(1.d0-pfree)**kfree ++ lambda2=(1.d0-(1.d0-pfree)**kfree) ++ dlambda=dble(kfree)*(1.d0-pfree)**(kfree-1) ++ ++ elseif(mfree.eq.3)then ++ ++c trigonmetric mixing ++ ++ lambda2=0.5d0*(1.d0+sin(pi*(pfree-0.5d0))) ++ lambda1=1.d0-lambda2 ++ dlambda=0.5d0*pi*cos(pi*(pfree-0.5d0)) ++ ++ elseif(mfree.eq.4)then ++ ++c error function mixing ++ ++ acc=12.d0 ++ arg=2.d0*sqrt(2.302585093*acc) ++ gss=exp(-(arg*(pfree-0.5d0))**2) ++ tt=1.d0/(1.d0+pp*arg*abs(pfree-0.5d0)) ++ err=1.d0-tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*gss ++ lambda2=0.5d0*(1.d0+sign(err,(pfree-0.5d0))) ++ lambda1=1.d0-lambda2 ++ dlambda=gss*arg/sqrpi ++ ++ elseif(mfree.eq.5)then ++ ++c polynomial mixing ++ ++ sigma1=0.d0 ++ ++ do i=0,kfree-1 ++ ++ fac1=1 ++ fac2=1 ++ ++ do j=0,i-1 ++ ++ fac1=fac1*(kfree-1+i-j) ++ fac2=fac2*(i-j) ++ ++ enddo ++ ++ sigma1=sigma1+(dble(fac1/fac2))*pfree**i ++ ++ enddo ++ ++ lambda1=sigma1*(1.d0-pfree)**kfree ++ lambda2=1.d0-lambda1 ++ dlambda=sigma1*kfree*(1.d0-pfree)**(kfree-1) ++ ++ sigma2=0.d0 ++ ++ do i=1,kfree-1 ++ ++ fac1=1 ++ fac2=1 ++ ++ do j=0,i-1 ++ ++ fac1=fac1*(kfree-1+i-j) ++ fac2=fac2*(i-j) ++ ++ enddo ++ ++ sigma2=sigma2+(dble(fac1*i/fac2))*pfree**(i-1) ++ ++ enddo ++ ++ dlambda=dlambda-sigma2*(1.d0-pfree)**kfree ++ ++ else ++ ++c spline kernel mixing ++ ++ arg=pfree-0.5d0 ++ lambda2=2.d0*pfree-8.d0*arg**3*(1.d0-abs(arg))-0.5d0 ++ lambda1=1.d0-lambda2 ++ dlambda=2.d0+arg**2*(32.d0*abs(arg)-24.d0) ++ ++ endif ++ ++ return ++ end subroutine freegen ++ ++ subroutine free_energy_write(idnode,nstep,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing free energy file at selected ++c intervals in simulation ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade dec 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob ++ integer idnode,natms,nstep ++ real(8) engunit ++ ++ save newjob ++ data newjob/.true./ ++ ++ if(idnode.eq.0)then ++ ++c open the FREENG file if new job or file closed ++ ++ if(newjob)then ++ ++ newjob = .false. ++ open(nfrnwr,file='FREENG',position='append') ++ ++ endif ++ ++ if(nstep.eq.nfrn.or.nstep.eq.ifrn)then ++ ++ write(nfrnwr,'(80a1)')cfgname ++ ++ if(abs(engunit-9648.530821d0).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nfrnwr, ++ x "(' ENERGY UNITS=DL_POLY Internal UNITS ')") ++ ++ write(nfrnwr,'(1p,4e16.8)')pfree,lambda1,lambda2,dlambda ++ ++ endif ++ ++ if(mod(nstep-nfrn,ifrn).eq.0)then ++ ++ write(nfrnwr,"(i10,1p,2e16.8)") ++ x nstep,eng_cfg_fre/engunit,vir_cfg_fre/engunit ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine free_energy_write ++ ++ subroutine alloc_exi_arrays(idnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine to allocate excited state arrays ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer, parameter :: nnn=15 ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ mxtmls_exc2=((mxtmls_exc+1)*mxtmls_exc)/2 ++ mxtmls_exc3=(((mxtmls_exc+3)*mxtmls_exc+2)*mxtmls_exc)/6 ++ mxtmls_exc4=((((mxtmls_exc+6)*mxtmls_exc+11)*mxtmls_exc+6)* ++ x mxtmls_exc)/24 ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (cou_exc(mxtmls_exc2),stat=fail(1)) ++ allocate (vdw_exc(mxtmls_exc2),stat=fail(2)) ++ allocate (bnd_exc(mxtmls_exc),stat=fail(3)) ++ allocate (ang_exc(mxtmls_exc),stat=fail(4)) ++ allocate (dih_exc(mxtmls_exc),stat=fail(5)) ++ allocate (en3_exc(mxtmls_exc3),stat=fail(6)) ++ allocate (en4_exc(mxtmls_exc4),stat=fail(7)) ++ allocate (shl_exc(mxtmls_exc),stat=fail(8)) ++ allocate (vdw_exc_lng(mxtmls_exc2),stat=fail(9)) ++ allocate (cou_exc_lng(mxtmls_exc2),stat=fail(10)) ++ allocate (inv_exc(mxtmls_exc),stat=fail(11)) ++ allocate (elrc_exc(mxtmls_exc2),stat=fail(12)) ++ allocate (elrc_exc_sav(mxtmls_exc2),stat=fail(13)) ++ allocate (qfix_exc(mxtmls_exc),stat=fail(14)) ++ allocate (cou_exc_sic(mxtmls_exc2),stat=fail(15)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1030) ++ enddo ++ ++c initialise accumulators ++ ++ bnd_exc(:)=0.d0 ++ ang_exc(:)=0.d0 ++ dih_exc(:)=0.d0 ++ inv_exc(:)=0.d0 ++ en3_exc(:)=0.d0 ++ en4_exc(:)=0.d0 ++ elrc_exc(:)=0.d0 ++ cou_exc(:)=0.d0 ++ vdw_exc(:)=0.d0 ++ ++ return ++ end subroutine alloc_exi_arrays ++ ++ subroutine update_ghost(idnode,mxnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c update the positions of ghost atoms ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode ++ ++ if(ind_fre(1).lt.ind_fre(3))then ++ ++ ii=ind_fre(3) ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ xxx(ii)=xxx(i) ++ yyy(ii)=yyy(i) ++ zzz(ii)=zzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ else ++ ++ ii=ind_fre(1) ++ ++ do i=ind_fre(3),ind_fre(4) ++ ++ xxx(ii)=xxx(i) ++ yyy(ii)=yyy(i) ++ zzz(ii)=zzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine update_ghost ++ ++ subroutine copy_force(idnode,mxnode) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer i,ii,idnode,mxnode ++ ++ ii=ind_fre(3) ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ fxx(ii)=fxx(i) ++ fyy(ii)=fyy(i) ++ fzz(ii)=fzz(i) ++ ++ ii=ii+1 ++ ++ enddo ++ ++ return ++ end subroutine copy_force ++ ++ subroutine switch(elrc,virlrc) ++c*********************************************************************** ++c ++c dl_poly routine for switching system in excitation simulation ++c copyright - daresbury laboratory ++c author - w. smith sep 2008 ++c adapted from p.-a. cazade oct 2007 ++c ++c*********************************************************************** ++ ++ real(8) :: swap,elrc,virlrc ++ real(8), allocatable :: cou_sic_swp(:),qfix_swp(:) ++ real(8), allocatable :: elrc_swp(:) ++ ++ allocate(cou_sic_swp(mxtmls_exc2),qfix_swp(mxtmls_exc)) ++ allocate(elrc_swp(mxtmls_exc2)) ++ ++ swap=elrc ++ elrc=elrc2 ++ elrc2=swap ++ ++ swap=engsic0 ++ engsic0=engsic2 ++ engsic2=swap ++ ++ swap=virlrc ++ virlrc=virlrc2 ++ virlrc2=swap ++ ++ swap=elrc_sav ++ elrc_sav=elrc2_sav ++ elrc2_sav=swap ++ ++ swap=virlrc_sav ++ virlrc_sav=virlrc2_sav ++ virlrc2_sav=swap ++ ++ swap=qchg0 ++ qchg0=qchg2 ++ qchg2=swap ++ ++ cou_sic_swp(:)=cou_sol_sic(:) ++ cou_sol_sic(:)=cou_exc_sic(:) ++ cou_exc_sic(:)=cou_sic_swp(:) ++ ++ qfix_swp(:)=qfix_sol(:) ++ qfix_sol(:)=qfix_exc(:) ++ qfix_exc(:)=qfix_swp(:) ++ ++ elrc_swp(:)=elrc_sol(:) ++ elrc_sol(:)=elrc_exc(:) ++ elrc_exc(:)=elrc_swp(:) ++ ++ elrc_swp(:)=elrc_sol_sav(:) ++ elrc_sol_sav(:)=elrc_exc_sav(:) ++ elrc_exc_sav(:)=elrc_swp(:) ++ ++ deallocate(elrc_swp,cou_sic_swp,qfix_swp) ++ ++ return ++ ++ end subroutine switch ++ ++ subroutine lrcorrect_sol(lghost,volm) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excited state module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical :: lghost ++ real(8) :: volm ++ ++ elrc_sol(:)=elrc_sol_sav(:)*(volm_sav/volm) ++ if(lghost)elrc_exc(:)=elrc_exc_sav(:)*(volm_sav/volm) ++ ++ return ++ end subroutine lrcorrect_sol ++ ++ subroutine switch_atm(lfrmas) ++ ++c*********************************************************************** ++c ++c dl_poly routine for excitation module ++c copyright - daresbury laboratory ++c author - p.-a. cazade oct 2007 ++c adapted - w.smith aug 2008 ++c ++c*********************************************************************** ++ ++ logical lfrmas ++ integer i,at1_swap,at2_swap ++ ++ at1_swap=ind_fre(1) ++ at2_swap=ind_fre(2) ++ ind_fre(1)=ind_fre(3) ++ ind_fre(2)=ind_fre(4) ++ ind_fre(3)=at1_swap ++ ind_fre(4)=at2_swap ++ ++ if(lfrmas)then ++ ++ do i=ind_fre(1),ind_fre(2) ++ ++ atm_fre(i)=1 ++ weight(i)=lambda1*weight_sav(i) ++ ++ enddo ++ ++ do i=ind_fre(3),ind_fre(4) ++ ++ atm_fre(i)=2 ++ weight(i)=lambda2*weight_sav(i) ++ ++ enddo ++ ++ else ++ ++ do i=ind_fre(1),ind_fre(2) ++ atm_fre(i)=1 ++ enddo ++ ++ do i=ind_fre(3),ind_fre(4) ++ atm_fre(i)=2 ++ enddo ++ ++ endif ++ ++ return ++ end subroutine switch_atm ++ ++ subroutine solvation_write ++ x (lexcite,lswitch,idnode,natms,nstep,nsolva,isolva, ++ x tstep,engunit,elrc) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing solva file at selected ++c intervals in simulation ++c ++c copyright - daresbury laboratory ++c author - p.-a. cazade jun 2007 ++c adapted - w. smith aug 2008 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob,lexcite,lswitch ++ integer idnode,natms,nstep,nsolva,isolva,i,j,k ++ integer mxtmls2,mxtmls3,mxtmls4 ++ real(8) tstep,engunit,elrc ++ character*80 aa,bb,cc,dd ++ ++ save newjob ++ data newjob/.true./ ++ ++ mxtmls2=((mxtmls+1)*mxtmls)/2 ++ mxtmls3=(((mxtmls+3)*mxtmls+2)*mxtmls)/6 ++ mxtmls4=((((mxtmls+6)*mxtmls+11)*mxtmls+6)*mxtmls)/24 ++ ++ if(idnode.eq.0)then ++ ++c open the SOLVAT file if new job or file closed ++ ++ if(newjob)then ++ ++ newjob=.false. ++ open(nsolwr,file='SOLVAT',position='append') ++ ++ endif ++ ++c write file header block ++ ++ if(nstep.eq.nsolva.or.nstep.eq.isolva)then ++ ++ write(nsolwr,'(80a1)')cfgname ++ ++ if(abs(engunit-9648.530821d0).le.1.d-10)write(nsolwr, ++ x "('ENERGY UNITS=electron Volts ')") ++ if(abs(engunit-418.4d0).le.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kcal/mol ')") ++ if(abs(engunit-1.d2).le.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kjoule/mol ')") ++ if(abs(engunit-boltz).lt.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=kelvin ')") ++ if(abs(engunit-1.d0).lt.1.d-10) write(nsolwr, ++ x "('ENERGY UNITS=DL_POLY Internal UNITS ')") ++ ++ write(nsolwr,'(2i10)')natms,mxtmls ++ write(nsolwr,'(1x,11a4)')' lex','lsw',' bnd',' ang', ++ x ' dih',' inv',' shl',' cou',' vdw',' 3bd',' 4bd' ++ write(nsolwr,'(11l4)')lexcite,lswitch,lcomp ++ ++ endif ++ ++c write out periodic data ++ ++ if(mod(nstep-nsolva,isolva).eq.0)then ++ ++c mark start of time step data ++ ++ if(lexcite)then ++ write(nsolwr,'("timestep",i10,f12.5,1p,2e14.6)') ++ x nstep,tstep,elrc/engunit,elrc2/engunit ++ else ++ write(nsolwr,'("timestep",i10,f12.5,1p,e14.6)') ++ x nstep,tstep,elrc/engunit ++ endif ++ ++c write intramolecular data ++ ++ write(nsolwr,'(1p,5e14.6)')temp_sol ++ if(lcomp(1))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')bnd_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(2))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')ang_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(3))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')dih_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit ++ endif ++ endif ++ if(lcomp(4))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')inv_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit ++ endif ++ endif ++ ++c write core-shell data ++ ++ if(lcomp(5))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')shl_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit ++ endif ++ endif ++ ++c write coulombic data ++ ++ if(lcomp(6))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')cou_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit ++ endif ++ endif ++ ++c write vdw data ++ ++ if(lcomp(7))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')vdw_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit ++ endif ++ endif ++ ++c write 3-body data ++ ++ if(lcomp(8))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')en3_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit ++ endif ++ endif ++ ++c write 4-body data ++ ++ if(lcomp(9))then ++ if(lexcite)then ++ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit ++ write(nsolwr,'(1p,5e14.6)')en4_exc(:)/engunit ++ else ++ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit ++ endif ++ endif ++ ++ endif ++ ++c close SOLVAT file at regular intervals ++ ++ if(.not.newjob.and.mod(nstep,ndump).eq.0)then ++ ++ close(nsolwr) ++ newjob=.true. ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine solvation_write ++ ++ end module solvation_module +diff -urN dl_class_1.9.orig/srcmod/spme_module.f dl_class_1.9/srcmod/spme_module.f +--- dl_class_1.9.orig/srcmod/spme_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/spme_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1175 @@ ++ module spme_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining spme arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use setup_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: csp(:),qqc(:,:,:),ffttable(:) ++ real(8), allocatable :: bspx(:,:), bspy(:,:), bspz(:,:) ++ real(8), allocatable :: bsdx(:,:), bsdy(:,:), bsdz(:,:) ++ integer, allocatable :: key1(:),key2(:),key3(:) ++ complex(8), allocatable :: ww1(:), ww2(:), ww3(:) ++ complex(8), allocatable :: qqq(:,:,:) ++ complex(8), allocatable :: bscx(:), bscy(:),bscz(:) ++CFFTW pointer, save :: fplan, bplan ++ ++ save csp,qqc,qqq,ww1,ww2,ww3,bscx,bscy,bscz,ffttable ++ save bspx,bspy,bspz,bsdx,bsdy,bsdz,key1,key2,key3 ++ ++ contains ++ ++ subroutine alloc_spme_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=9 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate (csp(mxspl),ffttable(mxftab),stat=fail(1)) ++ allocate (bspx(mxspme,mxspl),bspy(mxspme,mxspl),stat=fail(2)) ++ allocate (bspz(mxspme,mxspl),bsdx(mxspme,mxspl),stat=fail(3)) ++ allocate (bsdy(mxspme,mxspl),bsdz(mxspme,mxspl),stat=fail(4)) ++ allocate (bscx(kmaxd),bscy(kmaxe),bscz(kmaxf),stat=fail(5)) ++ allocate (key1(kmaxd),key2(kmaxe),key3(kmaxf),stat=fail(6)) ++ allocate (ww1(kmaxd),ww2(kmaxe),ww3(kmaxf),stat=fail(7)) ++ allocate (qqc(kmaxd,kmaxe,kmaxf),stat=fail(8)) ++ allocate (qqq(kmaxd,kmaxe,kmaxf),stat=fail(9)) ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1750) ++ enddo ++ ++ end subroutine alloc_spme_arrays ++ ++ subroutine bspcoe(nospl,kmax1,kmax2,kmax3) ++ ++c********************************************************************** ++c ++c dl_poly subroutine to calculate B-spline coefficients for ++c Euler exponential splines. ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nospl,kmax1,kmax2,kmax3,k,i,j ++ complex(8) ccc ++ ++c calculate B-splines at knots ++ ++ csp(1)=0.d0 ++ csp(2)=1.d0 ++ ++ do k=3,nospl ++ ++ csp(k)=0.d0 ++ ++ do j=k,2,-1 ++ ++ csp(j)=(dble(j-1)*csp(j)+dble(k-j+1)*csp(j-1))/dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++c calculate B-spline coefficients ++ ++ do i=0,kmax1-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww1(mod(i*k,kmax1)+1) ++ ++ enddo ++ ++ bscx(i+1)=ww1(mod(i*(nospl-1),kmax1)+1)/ccc ++ ++ enddo ++ ++ do i=0,kmax2-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww2(mod(i*k,kmax2)+1) ++ ++ enddo ++ ++ bscy(i+1)=ww2(mod(i*(nospl-1),kmax2)+1)/ccc ++ ++ enddo ++ ++ do i=0,kmax3-1 ++ ++ ccc=(0.d0,0.d0) ++ ++ do k=0,nospl-2 ++ ++ ccc=ccc+csp(k+2)*ww3(mod(i*k,kmax3)+1) ++ ++ enddo ++ ++ bscz(i+1)=ww3(mod(i*(nospl-1),kmax3)+1)/ccc ++ ++ enddo ++ ++ return ++ end subroutine bspcoe ++ ++ subroutine bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to calculate B-splines for SPME method ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer nospl,natms,idnode,mxnode,iatm0,iatm1,i,j,k ++ real(8) aaa,bbb,ccc,txx,tyy,tzz ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ ++c set up atoms numbers for nodes ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct B-splines ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,1)=1.d0 ++ bsdy(i,1)=1.d0 ++ bsdz(i,1)=1.d0 ++ bsdx(i,2)=-1.d0 ++ bsdy(i,2)=-1.d0 ++ bsdz(i,2)=-1.d0 ++ bspx(i,1)=txx(i)-int(txx(i)) ++ bspy(i,1)=tyy(i)-int(tyy(i)) ++ bspz(i,1)=tzz(i)-int(tzz(i)) ++ bspx(i,2)=1.d0-txx(i)+int(txx(i)) ++ bspy(i,2)=1.d0-tyy(i)+int(tyy(i)) ++ bspz(i,2)=1.d0-tzz(i)+int(tzz(i)) ++ ++ enddo ++ ++ do k=3,nospl ++ ++ do i=iatm0,iatm1 ++ ++ bspx(i,k)=0.d0 ++ bspy(i,k)=0.d0 ++ bspz(i,k)=0.d0 ++ ++ enddo ++ ++ do j=k,2,-1 ++ ++ if(k.eq.nospl)then ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,j)=bspx(i,j)-bspx(i,j-1) ++ bsdy(i,j)=bspy(i,j)-bspy(i,j-1) ++ bsdz(i,j)=bspz(i,j)-bspz(i,j-1) ++ ++ enddo ++ ++ endif ++ ++ do i=iatm0,iatm1 ++ ++ aaa=txx(i)+dble(j-1)-int(txx(i)) ++ bbb=tyy(i)+dble(j-1)-int(tyy(i)) ++ ccc=tzz(i)+dble(j-1)-int(tzz(i)) ++ bspx(i,j)=(aaa*bspx(i,j)+(dble(k)-aaa)*bspx(i,j-1))/ ++ x dble(k-1) ++ bspy(i,j)=(bbb*bspy(i,j)+(dble(k)-bbb)*bspy(i,j-1))/ ++ x dble(k-1) ++ bspz(i,j)=(ccc*bspz(i,j)+(dble(k)-ccc)*bspz(i,j-1))/ ++ x dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++ if(k.eq.nospl)then ++ ++ do i=iatm0,iatm1 ++ ++ bsdx(i,1)=bspx(i,1) ++ bsdy(i,1)=bspy(i,1) ++ bsdz(i,1)=bspz(i,1) ++ ++ enddo ++ ++ endif ++ ++ do i=iatm0,iatm1 ++ ++ bspx(i,1)=(txx(i)-int(txx(i)))*bspx(i,1)/dble(k-1) ++ bspy(i,1)=(tyy(i)-int(tyy(i)))*bspy(i,1)/dble(k-1) ++ bspz(i,1)=(tzz(i)-int(tzz(i)))*bspz(i,1)/dble(k-1) ++ ++ enddo ++ ++ enddo ++ ++ return ++ end subroutine bspgen ++ ++ subroutine ewald_spme ++ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, ++ x engcpe,vircpe,alpha,volm,epsq) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using the smoothed particle mesh ewald method ++c due to Essmann et al J. Chem. Phys. 103 (1995) 8577. ++c ++c parallel replicated data version (part 1) ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith july 1998 ++c additional FFT code - j. geronowicz sept 1999 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical newjob,lconsw ++ ++ integer idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl ++ integer npass,i,nnn,ipass,l,ll,k,kk,j,jj,fail,iatm0,iatm1 ++ real(8) engcpe,vircpe,alpha,volm,epsq,omg,bb1,bb2,bb3,qchg ++ real(8) twopi,engsic,rvolm,ralph,shiftx,shifty,shiftz,det,qfix ++ real(8) tx,ty,tz,rcpcut,rcpct2,rkx1,rky1,rkz1,rkx2,rky2,rkz2 ++ real(8) rkx3,rky3,rkz3,rksq,akv,eng1,den,scal1,tmp,rclprp ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++CESSL integer inc2,inc3 ++CSGIC real(8) nauxfft(4) ++ ++ dimension omg(9),rclprp(10) ++ complex(8) cpetot,vterm ++ save newjob,engsic,qchg,iatm0,iatm1 ++ ++ data newjob/.true./,fail/0/ ++CSGIC data nauxfft/3,0,0,0/ ++ ++c allocate temporary arrays ++ ++ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1760) ++ ++ npass=1 ++ lconsw=.true. ++ twopi=2.d0*pi ++ ++ if(newjob)then ++ ++ newjob=.false. ++ ++c set up atoms numbers for nodes ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c calculate self interaction correction and net system charge ++ ++ qchg=0.d0 ++ engsic=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ qchg=qchg+chge(i) ++ engsic=engsic+chge(i)**2 ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=qchg ++ buffer(2)=engsic ++ call gdsum(buffer(1),2,buffer(3)) ++ qchg =buffer(1) ++ engsic=buffer(2) ++ ++ endif ++ ++ engsic=-r4pie0/epsq*alpha*engsic/sqrpi ++ ++c initialise the complex exponential arrays ++ ++CCRAY call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CESSL call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CFFTW call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++CSGIC call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) ++ ++c initialise the default fft routine ++ ++ call dlpfft3(1,1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c calculate B-spline coefficients ++ ++ call bspcoe(nospl,kmax1,kmax2,kmax3) ++ ++ endif ++ ++c initialise coulombic potential energy ++ ++ engcpe=0.d0 ++ vircpe=0.d0 ++ ++c initalize stress tensor working arrays ++ ++ do i = 1,9 ++ omg(i) = 0.d0 ++ enddo ++ ++c set working parameters ++ ++ rvolm=twopi/volm ++ ralph=-0.25d0/alpha**2 ++ ++c set switch for TO, RD and HP boundary conditions ++ ++ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) then ++ ++ npass=2 ++ lconsw=.false. ++ rvolm=0.5d0*rvolm ++ shiftx=0.5d0*dble(kmax1) ++ shifty=0.5d0*dble(kmax2) ++ shiftz=0.5d0*dble(kmax3) ++ if(imcon.eq.7)shiftz=0.d0 ++ ++ endif ++ ++c convert cell coordinates to fractional coordinates ++ ++ call invert(cell,rcell,det) ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ ++ do i=iatm0,iatm1 ++ ++ txx(i)=dble(kmax1)*(rcell(1)*xxx(i)+rcell(4)*yyy(i)+ ++ x rcell(7)*zzz(i)+0.5d0) ++ tyy(i)=dble(kmax2)*(rcell(2)*xxx(i)+rcell(5)*yyy(i)+ ++ x rcell(8)*zzz(i)+0.5d0) ++ tzz(i)=dble(kmax3)*(rcell(3)*xxx(i)+rcell(6)*yyy(i)+ ++ x rcell(9)*zzz(i)+0.5d0) ++ ++ enddo ++ ++c construct B-splines for atoms ++ ++ call bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) ++ ++c zero 3D charge array ++ ++ nnn=kmaxd*kmaxe*kmaxf ++ call set_block(nnn,0.d0,qqc) ++ ++c construct 3D charge array ++ ++ do ipass=1,npass ++ ++ do i=iatm0,iatm1 ++ ++ do l=1,nospl ++ ++ ll=int(tzz(i))-l+2 ++ if(ll.gt.kmax3)ll=1 ++ if(ll.lt.1)ll=ll+kmax3 ++ do k=1,nospl ++ ++ kk=int(tyy(i))-k+2 ++ if(kk.gt.kmax2)kk=1 ++ if(kk.lt.1)kk=kk+kmax2 ++ ++ do j=1,nospl ++ ++ jj=int(txx(i))-j+2 ++ if(jj.gt.kmax1)jj=1 ++ if(jj.lt.1)jj=jj+kmax1 ++ ++ qqc(jj,kk,ll)=qqc(jj,kk,ll)+ ++ x chge(i)*bspx(i,j)*bspy(i,k)*bspz(i,l) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ if(.not.lconsw)then ++ ++ do i=iatm0,iatm1 ++ ++ tx=txx(i)-shiftx ++ ty=tyy(i)-shifty ++ tz=tzz(i)-shiftz ++ txx(i)=txx(i)-sign(shiftx,tx) ++ tyy(i)=tyy(i)-sign(shifty,ty) ++ tzz(i)=tzz(i)-sign(shiftz,tz) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c global sum of charge array ++ ++ if(mxnode.gt.1) call gdsum(qqc,nnn,buffer) ++ ++c load charge array into complex array for FFT ++ ++ call cpy_rtc(nnn,qqc,qqq) ++ ++c calculate inverse 3D FFT of charge array (in place). ++ ++CFFTW call fftwnd_f77_one(fplan,qqq,0) ++ ++CESSL inc2=kmaxd ++CESSL inc3=kmaxd*kmaxe ++CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, ++CESSL x -1,1.d0,buffer,mxbuff) ++ ++CSGIC call zzfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++CCRAY call ccfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++ call dlpfft3(0,1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c set reciprocal space cutoff ++ ++ call dcell(rcell,rclprp) ++ ++ rcpcut=0.5d0*min(dble(kmax1)*rclprp(7),dble(kmax2)*rclprp(8), ++ x dble(kmax3)*rclprp(9)) ++ rcpcut=rcpcut*1.05d0*twopi ++ rcpct2=rcpcut**2 ++ ++c calculate convolution of charge array with gaussian function ++ ++ do l=1,kmax3 ++ ++ ll=l-1 ++ if(l.gt.kmax3/2)ll=l-kmax3-1 ++ tmp=twopi*dble(ll) ++ rkx1=tmp*rcell(3) ++ rky1=tmp*rcell(6) ++ rkz1=tmp*rcell(9) ++ bb3=real(bscz(l)*conjg(bscz(l))) ++ ++ do k=1,kmax2 ++ ++ kk=k-1 ++ if(k.gt.kmax2/2)kk=k-kmax2-1 ++ tmp=twopi*dble(kk) ++ rkx2=rkx1+tmp*rcell(2) ++ rky2=rky1+tmp*rcell(5) ++ rkz2=rkz1+tmp*rcell(8) ++ bb2=bb3*real(bscy(k)*conjg(bscy(k))) ++ ++ do j=1,kmax1 ++ ++ jj=j-1 ++ if(j.gt.kmax1/2)jj=j-kmax1-1 ++ tmp=twopi*dble(jj) ++ rkx3=rkx2+tmp*rcell(1) ++ rky3=rky2+tmp*rcell(4) ++ rkz3=rkz2+tmp*rcell(7) ++ bb1=bb2*real(bscx(j)*conjg(bscx(j))) ++ ++ rksq=rkx3*rkx3+rky3*rky3+rkz3*rkz3 ++ ++ if(rksq.gt.1.d-6.and.rksq.le.rcpct2)then ++ ++ vterm=bb1*exp(ralph*rksq)/rksq*qqq(j,k,l) ++ akv=2.d0*(1.d0/rksq-ralph)*real(vterm*conjg(qqq(j,k,l))) ++ omg(1)=omg(1)-rkx3*rkx3*akv ++ omg(5)=omg(5)-rky3*rky3*akv ++ omg(9)=omg(9)-rkz3*rkz3*akv ++ omg(2)=omg(2)-rkx3*rky3*akv ++ omg(3)=omg(3)-rkx3*rkz3*akv ++ omg(6)=omg(6)-rky3*rkz3*akv ++ qqq(j,k,l)=vterm ++ ++ else ++ ++ qqq(j,k,l)=(0.d0,0.d0) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++CFFTW call fftwnd_f77_one(bplan,qqq,0) ++CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, ++CESSL x 1,1.d0,buffer,mxbuff) ++ ++CSGIC call zzfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++CCRAY call ccfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, ++CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) ++ ++ call dlpfft3(0,-1,kmax1,kmax2,kmax3,key1,key2,key3, ++ x ww1,ww2,ww3,qqq) ++ ++c calculate atomic forces ++ ++ call spme_for ++ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, ++ x epsq,txx,tyy,tzz) ++ ++c complete product of charge array and its gaussian convolution ++ ++ call ele_prd(nnn,qqq,qqc,qqq) ++ ++c correction for charged systems ++ ++ qfix=-(0.5d0*pi*r4pie0/epsq)*((qchg/alpha)**2/volm)/ ++ x dble(mxnode) ++ ++c calculate total energy ++ ++ call scl_csum(nnn,cpetot,qqq) ++ ++ eng1=real(cpetot) ++ den=1.d0/dble(npass) ++ engcpe=engcpe+(den*rvolm*r4pie0*eng1/epsq+engsic)/ ++ x dble(mxnode)+qfix ++ ++c calculate stress tensor (symmetrical) ++ ++ scal1=den*rvolm*r4pie0/(epsq*dble(mxnode)) ++ stress(1) = stress(1)+scal1*(omg(1)+eng1)+qfix ++ stress(2) = stress(2)+scal1*omg(2) ++ stress(3) = stress(3)+scal1*omg(3) ++ stress(4) = stress(4)+scal1*omg(2) ++ stress(5) = stress(5)+scal1*(omg(5)+eng1)+qfix ++ stress(6) = stress(6)+scal1*omg(6) ++ stress(7) = stress(7)+scal1*omg(3) ++ stress(8) = stress(8)+scal1*omg(6) ++ stress(9) = stress(9)+scal1*(omg(9)+eng1)+qfix ++ ++c virial term ++ ++ vircpe=vircpe-scal1*(omg(1)+omg(5)+omg(9)+3.d0*eng1)-3.d0*qfix ++ ++c deallocate temporary arrays ++ ++ deallocate (txx,tyy,tzz,stat=fail) ++ ++ return ++ end subroutine ewald_spme ++ ++ subroutine spme_for ++ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, ++ x epsq,txx,tyy,tzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating coulombic forces in a ++c periodic system using smoothed particle mesh ewald method ++c ++c parallel replicated data version (part 1) ++c ++c copyright - daresbury laboratory 1998 ++c author - w. smith oct 1998 ++c ++c part 1 - reciprocal space terms (fourier part) ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,i,ll ++ integer iatm0,iatm1,kk,k,j,jj,l ++ real(8) rvolm,epsq,txx,tyy,tzz,fff,fac,bdx,bdy,bdz ++ real(8) det,qsum ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension fff(3) ++ ++ fac=-2.d0*rvolm*r4pie0/epsq ++ call invert(cell,rcell,det) ++ ++c set up atom numbers for nodes ++ ++ iatm0 = (idnode*natms)/mxnode + 1 ++ iatm1 = ((idnode+1)*natms)/mxnode ++ ++c calculate forces ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=0.d0 ++ fyy(i)=0.d0 ++ fzz(i)=0.d0 ++ ++ do l=1,nospl ++ ++ ll=int(tzz(i))-l+2 ++ if(ll.gt.kmax3)ll=1 ++ if(ll.lt.1)ll=ll+kmax3 ++ ++ do k=1,nospl ++ ++ kk=int(tyy(i))-k+2 ++ if(kk.gt.kmax2)kk=1 ++ if(kk.lt.1)kk=kk+kmax2 ++ ++ do j=1,nospl ++ ++ jj=int(txx(i))-j+2 ++ if(jj.gt.kmax1)jj=1 ++ if(jj.lt.1)jj=jj+kmax1 ++ ++ qsum=real(qqq(jj,kk,ll)) ++ bdx=qsum*bsdx(i,j)*bspy(i,k)*bspz(i,l)*dble(kmax1) ++ bdy=qsum*bspx(i,j)*bsdy(i,k)*bspz(i,l)*dble(kmax2) ++ bdz=qsum*bspx(i,j)*bspy(i,k)*bsdz(i,l)*dble(kmax3) ++ ++ fxx(i)=fxx(i)+fac*chge(i)*(bdx*rcell(1)+bdy*rcell(2)+ ++ x bdz*rcell(3)) ++ fyy(i)=fyy(i)+fac*chge(i)*(bdx*rcell(4)+bdy*rcell(5)+ ++ x bdz*rcell(6)) ++ fzz(i)=fzz(i)+fac*chge(i)*(bdx*rcell(7)+bdy*rcell(8)+ ++ x bdz*rcell(9)) ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++ enddo ++ ++c remove COM drift arising from SPME approximations ++ ++ fff(1)=0.d0 ++ fff(2)=0.d0 ++ fff(3)=0.d0 ++ ++ do i=iatm0,iatm1 ++ ++ fff(1)=fff(1)+fxx(i) ++ fff(2)=fff(2)+fyy(i) ++ fff(3)=fff(3)+fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)call gdsum(fff,3,buffer) ++ ++ fff(1)=fff(1)/dble(natms) ++ fff(2)=fff(2)/dble(natms) ++ fff(3)=fff(3)/dble(natms) ++ ++ do i=iatm0,iatm1 ++ ++ fxx(i)=fxx(i)-fff(1) ++ fyy(i)=fyy(i)-fff(2) ++ fzz(i)=fzz(i)-fff(3) ++ ++ enddo ++ ++ return ++ end subroutine spme_for ++ ++ subroutine dlpfft3 ++ x (ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,ww1,ww2,ww3,aaa) ++ ++c*********************************************************************** ++c ++c dl-poly 3D fast fourier transform routine (in place) ++c ++c copyright daresbury laboratory 1998 ++c author w smith july 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lkx,lky,lkz ++ integer ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,i,idm,kkk ++ integer nu1,nu2,nu3,iii,jjj,j,jj2,num,l,kk1,k12,k ++ real(8) tpi,arg ++ ++ dimension key1(ndiv1),key2(ndiv2),key3(ndiv3) ++ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) ++ complex(8) ttt,aaa(ndiv1,ndiv2,ndiv3) ++ save nu1,nu2,nu3 ++ ++ data tpi/6.283185307179586d0/ ++ ++ if(ind.gt.0)then ++ ++c check FFT array dimensions ++ ++ idm=1 ++ lkx=.true. ++ lky=.true. ++ lkz=.true. ++ ++ do i=1,30 ++ ++ idm=2*idm ++ ++ if(idm.eq.ndiv1)then ++ ++ lkx=.false. ++ nu1=i ++ ++ endif ++ if(idm.eq.ndiv2)then ++ ++ lky=.false. ++ nu2=i ++ ++ endif ++ if(idm.eq.ndiv3)then ++ ++ lkz=.false. ++ nu3=i ++ ++ endif ++ ++ enddo ++ ++ if(lkx.or.lky.or.lkz)then ++ ++ write(*,*)'error - FFT array not 2**N' ++ stop ++ ++ endif ++ ++c set reverse bit address arrays ++ ++ do kkk=1,ndiv1 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu1 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key1(kkk)=iii+1 ++ ++ enddo ++ ++ do kkk=1,ndiv2 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu2 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key2(kkk)=iii+1 ++ ++ enddo ++ ++ do kkk=1,ndiv3 ++ ++ iii=0 ++ jjj=kkk-1 ++ ++ do j=1,nu3 ++ ++ jj2=jjj/2 ++ iii=2*(iii-jj2)+jjj ++ jjj=jj2 ++ ++ enddo ++ ++ key3(kkk)=iii+1 ++ ++ enddo ++ ++c initialise complex exponential factors ++ ++ ww1(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv1/2 ++ ++ arg=(tpi/dble(ndiv1))*dble(i) ++ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww1(ndiv1+1-i)=conjg(ww1(i+1)) ++ ++ enddo ++ ++ ww2(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv2/2 ++ ++ arg=(tpi/dble(ndiv2))*dble(i) ++ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww2(ndiv2+1-i)=conjg(ww2(i+1)) ++ ++ enddo ++ ++ ww3(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv3/2 ++ ++ arg=(tpi/dble(ndiv3))*dble(i) ++ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww3(ndiv3+1-i)=conjg(ww3(i+1)) ++ ++ enddo ++ ++ return ++ ++ endif ++ ++c take conjugate of exponentials if required ++ ++ if(isw.lt.0)then ++ ++ do i=1,ndiv1 ++ ++ ww1(i)=conjg(ww1(i)) ++ ++ enddo ++ ++ do i=1,ndiv2 ++ ++ ww2(i)=conjg(ww2(i)) ++ ++ enddo ++ ++ do i=1,ndiv3 ++ ++ ww3(i)=conjg(ww3(i)) ++ ++ enddo ++ ++ endif ++ ++c perform fourier transform in X direction ++ ++ kkk=0 ++ num=ndiv1/2 ++ ++ do l=1,nu1 ++ ++ do while(kkk.lt.ndiv1) ++ ++ do i=1,num ++ ++ iii=key1(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv2 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(k12,j,k)*ww1(iii) ++ aaa(k12,j,k)=aaa(kk1,j,k)-ttt ++ aaa(kk1,j,k)=aaa(kk1,j,k)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv1 ++ ++ iii=key1(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv2 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(kkk,j,k) ++ aaa(kkk,j,k)=aaa(iii,j,k) ++ aaa(iii,j,k)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c perform fourier transform in Y direction ++ ++ kkk=0 ++ num=ndiv2/2 ++ ++ do l=1,nu2 ++ ++ do while(kkk.lt.ndiv2) ++ ++ do i=1,num ++ ++ iii=key2(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(j,k12,k)*ww2(iii) ++ aaa(j,k12,k)=aaa(j,kk1,k)-ttt ++ aaa(j,kk1,k)=aaa(j,kk1,k)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv2 ++ ++ iii=key2(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv3 ++ ++ ttt=aaa(j,kkk,k) ++ aaa(j,kkk,k)=aaa(j,iii,k) ++ aaa(j,iii,k)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c perform fourier transform in Z direction ++ ++ kkk=0 ++ num=ndiv3/2 ++ ++ do l=1,nu3 ++ ++ do while(kkk.lt.ndiv3) ++ ++ do i=1,num ++ ++ iii=key3(kkk/num+1) ++ kk1=kkk+1 ++ k12=kk1+num ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv2 ++ ++ ttt=aaa(j,k,k12)*ww3(iii) ++ aaa(j,k,k12)=aaa(j,k,kk1)-ttt ++ aaa(j,k,kk1)=aaa(j,k,kk1)+ttt ++ ++ enddo ++ ++ enddo ++ ++ kkk=kkk+1 ++ ++ enddo ++ ++ kkk=kkk+num ++ ++ enddo ++ ++ kkk=0 ++ num=num/2 ++ ++ enddo ++ ++c unscramble the fft using bit address array ++ ++ do kkk=1,ndiv3 ++ ++ iii=key3(kkk) ++ ++ if(iii.gt.kkk)then ++ ++ do j=1,ndiv1 ++ ++ do k=1,ndiv2 ++ ++ ttt=aaa(j,k,kkk) ++ aaa(j,k,kkk)=aaa(j,k,iii) ++ aaa(j,k,iii)=ttt ++ ++ enddo ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c restore exponentials to unconjugated values if necessary ++ ++ if(isw.lt.0)then ++ ++ do i=1,ndiv1 ++ ++ ww1(i)=conjg(ww1(i)) ++ ++ enddo ++ ++ do i=1,ndiv2 ++ ++ ww2(i)=conjg(ww2(i)) ++ ++ enddo ++ ++ do i=1,ndiv3 ++ ++ ww3(i)=conjg(ww3(i)) ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine dlpfft3 ++ ++ subroutine spl_cexp(ndiv1,ndiv2,ndiv3,ww1,ww2,ww3) ++ ++c*********************************************************************** ++c ++c dl-poly routine to create complex exponential arrays for ++c b-splines ++c ++c copyright daresbury laboratory 1998 ++c author w smith oct 1998 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ndiv1,ndiv2,ndiv3,i ++ real(8) tpi,arg ++ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) ++ ++ data tpi/6.283185307179586d0/ ++ ++c initialise complex exponential factors ++ ++ ww1(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv1/2 ++ ++ arg=(tpi/dble(ndiv1))*dble(i) ++ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww1(ndiv1+1-i)=conjg(ww1(i+1)) ++ ++ enddo ++ ++ ww2(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv2/2 ++ ++ arg=(tpi/dble(ndiv2))*dble(i) ++ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww2(ndiv2+1-i)=conjg(ww2(i+1)) ++ ++ enddo ++ ++ ww3(1)=(1.d0,0.d0) ++ ++ do i=1,ndiv3/2 ++ ++ arg=(tpi/dble(ndiv3))*dble(i) ++ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) ++ ww3(ndiv3+1-i)=conjg(ww3(i+1)) ++ ++ enddo ++ ++ return ++ end subroutine spl_cexp ++ ++ end module spme_module +diff -urN dl_class_1.9.orig/srcmod/temp_scalers_module.f dl_class_1.9/srcmod/temp_scalers_module.f +--- dl_class_1.9.orig/srcmod/temp_scalers_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/temp_scalers_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,768 @@ ++ module temp_scalers_module ++ ++c*********************************************************************** ++c ++c dl_poly module for temperature scaling routines ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ use config_module ++ use core_shell_module ++ use error_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use utility_module ++ ++ contains ++ ++ subroutine quench(imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for quenching the bond energies in the ++c initial structure of a molecule defined by constraints ++c ++c copyright - daresbury laboratory 1992 ++c author w.smith november 1992 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ integer imcon,idnode,mxnode,natms,nscons,i,j,k,icyc ++ integer fail ++ real(8) tolnce,ddd,esig,vvv,ww1,ww2 ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: uxx(:),uyy(:),uzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ dimension fail(3) ++ ++ data fail/0,0,0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) ++ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(3)) ++ ++ do i=1,3 ++ if(fail(i).ne.0)call error(idnode,1770) ++ enddo ++ ++c calculate bond vectors ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c normalise bond vectors ++ ++ do k=1,nscons ++ ++ ddd=sqrt(dxt(k)**2+dyt(k)**2+dzt(k)**2) ++ ++ dxt(k)=dxt(k)/ddd ++ dyt(k)=dyt(k)/ddd ++ dzt(k)=dzt(k)/ddd ++ ++ enddo ++ ++c start of quenching cycle ++ ++ icyc=0 ++ safe=.false. ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ uxx(i)=0.d0 ++ uyy(i)=0.d0 ++ uzz(i)=0.d0 ++ ++ enddo ++ ++c calculate velocity corrections and error ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ vvv=dxt(k)*(vxx(i)-vxx(j))+dyt(k)*(vyy(i)-vyy(j))+ ++ x dzt(k)*(vzz(i)-vzz(j)) ++ ++ esig=max(esig,abs(vvv)) ++ ++ ww1=weight(j)*vvv/(weight(i)+weight(j)) ++ ww2=weight(i)*vvv/(weight(i)+weight(j)) ++ uxx(i)=uxx(i)-ww1*dxt(k) ++ uyy(i)=uyy(i)-ww1*dyt(k) ++ uzz(i)=uzz(i)-ww1*dzt(k) ++ uxx(j)=uxx(j)+ww2*dxt(k) ++ uyy(j)=uyy(j)+ww2*dyt(k) ++ uzz(j)=uzz(j)+ww2*dzt(k) ++ ++ enddo ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++ if(.not.safe)then ++ ++c transport velocity adjustments to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ call shmove ++ x (idnode,mxnode,natms,lashap,lishap,uxx,uyy,uzz, ++ x xxt,yyt,zzt,buffer) ++ ++ endif ++ ++c update velocities ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ vxx(i)=vxx(i)+uxx(i)/dble(listme(i)) ++ vyy(i)=vyy(i)+uyy(i)/dble(listme(i)) ++ vzz(i)=vzz(i)+uzz(i)/dble(listme(i)) ++ vxx(j)=vxx(j)+uxx(j)/dble(listme(j)) ++ vyy(j)=vyy(j)+uyy(j)/dble(listme(j)) ++ vzz(j)=vzz(j)+uzz(j)/dble(listme(j)) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit if quenching fails ++ ++ if(.not.safe)call error(idnode,70) ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1) call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail(1)) ++ deallocate (uxx,uyy,uzz,stat=fail(2)) ++ deallocate (dxt,dyt,dzt,stat=fail(3)) ++ ++ return ++ end subroutine quench ++ ++ subroutine quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to convert atomic velocities to rigid body ++c c.o.m. and angular velocity ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1993. ++c author - t.forester nov 1993. ++c amended - t.forester dec 1994 : block data. ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,mxnode,natms,ngrp,fail,ig,jr,id ++ integer igrp1,igrp2,i,j ++ real(8) rot,wxx,wyy,wzz ++ ++ dimension rot(9) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ ++ data fail/0/ ++ ++c allocate work arrays ++ ++ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) ++ if(fail.ne.0)call error(idnode,1780) ++ ++c block indices for groups ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c translate atomic velocites to com velocity & angular velocity ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ gvxx(ig)=0.d0 ++ gvyy(ig)=0.d0 ++ gvzz(ig)=0.d0 ++ omx(ig)=0.d0 ++ omy(ig)=0.d0 ++ omz(ig)=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr =jr+1 ++ i =lstrgd(jr) ++ ++c centre of mass momentum ++ ++ gvxx(ig)=gvxx(ig)+weight(i)*vxx(i) ++ gvyy(ig)=gvyy(ig)+weight(i)*vyy(i) ++ gvzz(ig)=gvzz(ig)+weight(i)*vzz(i) ++ ++c distance to c.o.m of molecule ++ ++ xxt(jr)=xxx(i)-gcmx(ig) ++ yyt(jr)=yyy(i)-gcmy(ig) ++ zzt(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++c centre of mass velocity ++ ++ gvxx(ig)=gvxx(ig)/gmass(id) ++ gvyy(ig)=gvyy(ig)/gmass(id) ++ gvzz(ig)=gvzz(ig)/gmass(id) ++ ++ enddo ++ ++ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c rotational matrix ++ ++ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 ++ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) ++ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) ++ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) ++ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 ++ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) ++ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) ++ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) ++ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 ++ ++c angular momentum accumulators ++ ++ wxx=0.d0 ++ wyy=0.d0 ++ wzz=0.d0 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr =jr+1 ++ i =lstrgd(jr) ++ ++ wxx=wxx+weight(i)*(yyt(jr)*vzz(i)-zzt(jr)*vyy(i)) ++ wyy=wyy+weight(i)*(zzt(jr)*vxx(i)-xxt(jr)*vzz(i)) ++ wzz=wzz+weight(i)*(xxt(jr)*vyy(i)-yyt(jr)*vxx(i)) ++ ++ enddo ++ ++c angular velocity in body fixed frame ++ ++ omx(ig)=(rot(1)*wxx+rot(4)*wyy+rot(7)*wzz)*rotinx(id,2) ++ omy(ig)=(rot(2)*wxx+rot(5)*wyy+rot(8)*wzz)*rotiny(id,2) ++ omz(ig)=(rot(3)*wxx+rot(6)*wyy+rot(9)*wzz)*rotinz(id,2) ++ ++ jr=jr-numgsit(id) ++ do j=1,numgsit(id) ++ ++ jr=jr +1 ++ i=lstrgd(jr) ++ ++c site velocity in body frame ++ ++ wxx=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ wyy=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ wzz=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*wxx+rot(2)*wyy+rot(3)*wzz+gvxx(ig) ++ vyy(i)=rot(4)*wxx+rot(5)*wyy+rot(6)*wzz+gvyy(ig) ++ vzz(i)=rot(7)*wxx+rot(8)*wyy+rot(9)*wzz+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,omx,omy,omz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c deallocate work arrays ++ ++ deallocate (xxt,yyt,zzt,stat=fail) ++ ++ return ++ end subroutine quatqnch ++ ++ subroutine vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for scaling the velocity arrays to the ++c desired temperature ++c ++c zeroes angular momentum in non-periodic system. ++c ++c parallel replicated data version : block data ++c ++c copyright daresbury laboratory 1992. ++c author - w.smith july 1992 ++c amended - t.forester oct 1993 ++c amended - t.forester dec 1994 : block data ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,imcon,natms,ngrp,iatm1,iatm2,i ++ real(8) sigma,roti,rotinv,cmx,cmy,cmz,cmvx,cmvy,cmvz,sysmas ++ real(8) amx,amy,amz,det,scale,rsq,wxx,wyy,wzz,sumke ++ ++ dimension roti(9),rotinv(9) ++ ++c block indices ++ ++ iatm1=(idnode*natms)/mxnode+1 ++ iatm2=((idnode+1)*natms)/mxnode ++ ++c calculate centre of mass position and motion of the system ++ ++ cmx=0.d0 ++ cmy=0.d0 ++ cmz=0.d0 ++ cmvx=0.d0 ++ cmvy=0.d0 ++ cmvz=0.d0 ++ sysmas=0.d0 ++ ++ do i=iatm1,iatm2 ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ cmx=cmx+weight(i)*xxx(i) ++ cmy=cmy+weight(i)*yyy(i) ++ cmz=cmz+weight(i)*zzz(i) ++ sysmas=sysmas+weight(i) ++ cmvx=cmvx+vxx(i)*weight(i) ++ cmvy=cmvy+vyy(i)*weight(i) ++ cmvz=cmvz+vzz(i)*weight(i) ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ buffer(8)=sysmas ++ buffer(9)=cmx ++ buffer(10)=cmy ++ buffer(11)=cmz ++ buffer(12)=cmvx ++ buffer(13)=cmvy ++ buffer(14)=cmvz ++ call gdsum(buffer(8),7,buffer(1)) ++ sysmas= buffer(8) ++ cmx=buffer(9) ++ cmy=buffer(10) ++ cmz=buffer(11) ++ cmvx=buffer(12) ++ cmvy=buffer(13) ++ cmvz=buffer(14) ++ endif ++ ++ cmx=cmx/sysmas ++ cmy=cmy/sysmas ++ cmz=cmz/sysmas ++ ++ cmvx=cmvx/sysmas ++ cmvy=cmvy/sysmas ++ cmvz=cmvz/sysmas ++ ++c remove centre of mass motion ++ ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ vxx(i)=vxx(i)-cmvx ++ vyy(i)=vyy(i)-cmvy ++ vzz(i)=vzz(i)-cmvz ++ ++ else ++ ++ vxx(i)=0.d0 ++ vyy(i)=0.d0 ++ vzz(i)=0.d0 ++ ++ endif ++ ++ enddo ++ ++c zero angular momentum about centre of mass - non-periodic system ++ ++ if(imcon.eq.0)then ++ ++c move to centre of mass origin ++ ++ do i=1,natms ++ ++ xxx(i)=xxx(i)-cmx ++ yyy(i)=yyy(i)-cmy ++ zzz(i)=zzz(i)-cmz ++ ++ enddo ++ ++c angular momentum accumulators ++ ++ amx=0.d0 ++ amy=0.d0 ++ amz=0.d0 ++ ++c rotational inertia accumulators ++ ++ do i=1,9 ++ roti(i)=0.d0 ++ enddo ++ ++ do i=iatm1,iatm2 ++ ++ amx=amx+weight(i)*(yyy(i)*vzz(i)-zzz(i)*vyy(i)) ++ amy=amy+weight(i)*(zzz(i)*vxx(i)-xxx(i)*vzz(i)) ++ amz=amz+weight(i)*(xxx(i)*vyy(i)-yyy(i)*vxx(i)) ++ ++ rsq=xxx(i)**2+yyy(i)**2+zzz(i)**2 ++ roti(1)=roti(1)+weight(i)*(xxx(i)*xxx(i)-rsq) ++ roti(2)=roti(2)+weight(i)* xxx(i)*yyy(i) ++ roti(3)=roti(3)+weight(i)* xxx(i)*zzz(i) ++ roti(5)=roti(5)+weight(i)*(yyy(i)*yyy(i)-rsq) ++ roti(6)=roti(6)+weight(i)* yyy(i)*zzz(i) ++ roti(9)=roti(9)+weight(i)*(zzz(i)*zzz(i)-rsq) ++ ++ enddo ++ ++c complete rotational inertia matrix ++ ++ roti(4)=roti(2) ++ roti(7)=roti(3) ++ roti(8)=roti(6) ++ ++c global sum ++ ++ if(mxnode.gt.1)then ++ buffer(13)=amx ++ buffer(14)=amy ++ buffer(15)=amz ++ do i=1,9 ++ buffer(15+i)=roti(i) ++ enddo ++ call gdsum(buffer(13),12,buffer(1)) ++ amx=buffer(13) ++ amy=buffer(14) ++ amz=buffer(15) ++ do i=1,9 ++ roti(i)=buffer(15+i) ++ enddo ++ endif ++ ++c invert rotational inertia matrix ++ ++ call invert (roti,rotinv,det) ++ ++c correction to angular velocity ++ ++ wxx=rotinv(1)*amx+rotinv(2)*amy+rotinv(3)*amz ++ wyy=rotinv(4)*amx+rotinv(5)*amy+rotinv(6)*amz ++ wzz=rotinv(7)*amx+rotinv(8)*amy+rotinv(9)*amz ++ ++c correction to linear velocity ++ ++ do i=1,natms ++ ++ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then ++ ++ vxx(i)=vxx(i)+(wyy*zzz(i)-wzz*yyy(i)) ++ vyy(i)=vyy(i)+(wzz*xxx(i)-wxx*zzz(i)) ++ vzz(i)=vzz(i)+(wxx*yyy(i)-wyy*xxx(i)) ++ ++ endif ++ ++ enddo ++ ++c reset positions to original reference frame ++ ++ do i=1,natms ++ ++ xxx(i)=xxx(i)+cmx ++ yyy(i)=yyy(i)+cmy ++ zzz(i)=zzz(i)+cmz ++ ++ enddo ++ ++ endif ++ ++c calculate temperature ++ ++ sumke=0.d0 ++ ++ do i=iatm1,iatm2 ++ ++ sumke=sumke+weight(i)* ++ x (vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ ++ enddo ++ ++ sumke=0.5d0*sumke ++ if(mxnode.gt.1)then ++ buffer(1)=sumke ++ call gdsum(buffer(1),1,buffer(2)) ++ sumke=buffer(1) ++ endif ++ ++c apply temperature scaling ++ ++ scale=1.d0 ++ if(sumke.gt.1.d-6)scale=sqrt(sigma/sumke) ++ ++ do i=1,natms ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++ if(ngrp.gt.0)then ++ call quatqnch(idnode,imcon,mxnode,natms,ngrp) ++ ++ endif ++ ++ return ++ end subroutine vscaleg ++ ++ subroutine shlqnch(idnode,mxnode,ntshl,temp) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for quenching the internal bond energies ++c in ions defined by shell model ++c ++c copyright - daresbury laboratory 1994 ++c author w.smith july 1994 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m ++ real(8) temp,pke,rmu,dvx,dvy,dvz,tmx,tmy,tmz,scl ++ ++c permitted core-shell internal kinetic energy ++ ++ pke=boltz*temp*1.d-4 ++ ++c block indices ++ ++ ishl1 = (idnode*ntshl)/mxnode+1 ++ ishl2 = ((idnode+1)*ntshl)/mxnode ++ ++c calculate core and shell velocities from total momentum ++ ++ m=0 ++ do k=ishl1,ishl2 ++ ++ m=m+1 ++ ++ i=listshl(m,2) ++ j=listshl(m,3) ++ ++ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) ++ ++ if(rmu.gt.0.d0)then ++ ++ dvx=vxx(j)-vxx(i) ++ dvy=vyy(j)-vyy(i) ++ dvz=vzz(j)-vzz(i) ++ ++ scl=sqrt(pke/(rmu*(dvx*dvx+dvy*dvy+dvz*dvz))) ++ ++ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) ++ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) ++ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) ++ ++ vxx(i)=tmx/(weight(i)+weight(j))-scl*rmu*dvx/weight(i) ++ vxx(j)=tmx/(weight(i)+weight(j))+scl*rmu*dvx/weight(j) ++ vyy(i)=tmy/(weight(i)+weight(j))-scl*rmu*dvy/weight(i) ++ vyy(j)=tmy/(weight(i)+weight(j))+scl*rmu*dvy/weight(j) ++ vzz(i)=tmz/(weight(i)+weight(j))-scl*rmu*dvz/weight(i) ++ vzz(j)=tmz/(weight(i)+weight(j))+scl*rmu*dvz/weight(j) ++ ++ endif ++ ++ enddo ++ ++ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) ++ ++ return ++ end subroutine shlqnch ++ ++ subroutine regauss ++ x (idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, ++ x ntshl,keyshl,sigma,temp,tolnce) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for resetting the system velocities ++c ++c copyright - daresbury laboratory ++c author - w. smith may 2007 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,imcon,mxnode,natms,ngrp,nscons ++ integer ntcons,ntshl,i,k,keyshl ++ real(8) temp,tolnce,sigma,rsq ++ ++c set atomic velocities from gaussian distribution ++ ++ call gauss(natms,vxx,vyy,vzz) ++ ++ do i=1,natms ++ ++ rsq=sqrt(rmass(i)) ++ vxx(i)=vxx(i)*rsq ++ vyy(i)=vyy(i)*rsq ++ vzz(i)=vzz(i)*rsq ++ ++ enddo ++ ++ if(ntcons.gt.0)call quench ++ x (imcon,idnode,mxnode,natms,nscons,tolnce) ++ ++ if(ngrp.gt.0)call quatqnch ++ x (idnode,imcon,mxnode,natms,ngrp) ++ ++ if(keyshl.eq.1)then ++ ++ do k=1,4 ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ call shlqnch(idnode,mxnode,ntshl,temp) ++ ++ enddo ++ ++ else ++ ++ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) ++ ++ endif ++ ++ return ++ end subroutine regauss ++ ++ subroutine impact(khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) ++ ++c********************************************************************* ++c ++c DLPOLY routinue for impacting a selected atom with a specified ++c recoil energy ++c ++c copyright daresbury laboratory ++c author w.smith september 2007 ++c ++c********************************************************************* ++ ++ use config_module ++ use ensemble_tools_module ++ ++ implicit none ++ ++ integer i,khit,natms,idnode,mxnode,iatm0,iatm1 ++ real(8) ehit,vxo,vyo,vzo,xhit,yhit,zhit,fac,smass,vel ++ ++c store original particle velocity ++ ++ vxo=vxx(khit) ++ vyo=vyy(khit) ++ vzo=vzz(khit) ++ ++c determine recoil velocity ++ ++ vel=sqrt(2.d0*ehit/(weight(khit)*(xhit**2+yhit**2+zhit**2))) ++ ++c reassign particle velocity ++ ++ vxx(khit)=vel*xhit ++ vyy(khit)=vel*yhit ++ vzz(khit)=vel*zhit ++ ++c determine system mass ++ ++ smass=getmass(natms,idnode,mxnode) ++ ++c calculate net system velocity ++ ++ vxo=(vxx(khit)-vxo)*weight(khit)/smass ++ vyo=(vyy(khit)-vyo)*weight(khit)/smass ++ vzo=(vzz(khit)-vzo)*weight(khit)/smass ++ ++c reset system net velocity to zero ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vxo ++ vyy(i)=vyy(i)-vyo ++ vzz(i)=vzz(i)-vzo ++ ++ enddo ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ return ++ end subroutine impact ++ ++ end module temp_scalers_module +diff -urN dl_class_1.9.orig/srcmod/tersoff_module.f dl_class_1.9/srcmod/tersoff_module.f +--- dl_class_1.9.orig/srcmod/tersoff_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/tersoff_module.f 2011-04-16 16:13:06.000000000 +0200 +@@ -0,0 +1,1011 @@ ++ module tersoff_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining tersoff potential arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ integer, allocatable :: lstter(:),ltpter(:),lattsf(:) ++ real(8), allocatable :: prmter(:,:),prmter2(:,:) ++ real(8), allocatable :: vmbp(:,:,:),gmbp(:,:,:) ++ real(8), allocatable :: xtf(:),ytf(:),ztf(:),rtf(:) ++ real(8), allocatable :: ert(:),eat(:),grt(:),gat(:) ++ real(8), allocatable :: scr(:),gcr(:),gam(:),gvr(:) ++ ++ save xtf,ytf,ztf,rtf,ert,eat,grt,gat,scr,gcr,gam,filter ++ save prmter,prmter2,lstter,ltpter,lattsf,vmbp,gmbp ++ ++ contains ++ ++ subroutine alloc_ter_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=20 ++ ++ integer i,fail,idnode,npairs ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ npairs=(mxter*(mxter+1))/2 ++ allocate (prmter(mxter,mxpter),stat=fail(1)) ++ allocate (prmter2(2,npairs),stat=fail(2)) ++ allocate (lstter(mxter),stat=fail(3)) ++ allocate (ltpter(mxter),stat=fail(4)) ++ allocate (lattsf(mxatms),stat=fail(5)) ++ allocate (xtf(mxatms),stat=fail(6)) ++ allocate (ytf(mxatms),stat=fail(7)) ++ allocate (ztf(mxatms),stat=fail(8)) ++ allocate (rtf(mxatms),stat=fail(9)) ++ allocate (ert(mxatms),stat=fail(10)) ++ allocate (eat(mxatms),stat=fail(11)) ++ allocate (grt(mxatms),stat=fail(12)) ++ allocate (gat(mxatms),stat=fail(13)) ++ allocate (scr(mxatms),stat=fail(14)) ++ allocate (gcr(mxatms),stat=fail(15)) ++ allocate (gam(mxatms),stat=fail(16)) ++ allocate (gvr(mxatms),stat=fail(17)) ++ allocate (vmbp(mxgrid,npairs,3),stat=fail(18)) ++ allocate (gmbp(mxgrid,npairs,3),stat=fail(19)) ++ allocate (filter(mxsite),stat=fail(20)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1945) ++ enddo ++ ++ end subroutine alloc_ter_arrays ++ ++ subroutine define_tersoff ++ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining tersoff potentials ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1 ++ character*1 message(80) ++ integer fail,idnode,ntpter,ntpatm,i,idum,j,itpter ++ integer keypot,jtpatm,k,katm0,katm1,icross,npairs,ktyp ++ real(8) rctter,engunit ++ real(8), allocatable :: parpot(:) ++ data fail/0/ ++ ++ allocate (parpot(mxpter),stat=fail) ++ if(fail.ne.0)call error(idnode,1955) ++ ++ ntpter=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified tersoff ', ++ x 'atom potentials',i10)") ntpter ++ write(nrite,"(/,/,16x,'atom ',3x,' key',30x, ++ x 'parameters'/,/)") ++ ++ endif ++ if(ntpter.gt.mxter) call error(idnode,88) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ rctter=0.d0 ++ ++ do i=1,mxter ++ lstter(i)=-1 ++ enddo ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ k=0 ++ do i=1,mxter ++ do j=1,i ++ ++ k=k+1 ++ prmter2(1,k)=0.d0 ++ prmter2(2,k)=0.d0 ++ ++ enddo ++ enddo ++ ++ do itpter=1,ntpter ++ ++ do i=1,mxpter ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call copystring(record,message,80) ++ call getword(atom0,record,8,lenrec) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'ters') then ++ ++ keypot=1 ++ ++ else ++ ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,1972) ++ ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ! A_i ++ parpot(2)=dblstr(record,lenrec,idum) ! a_i ++ parpot(3)=dblstr(record,lenrec,idum) ! B_i ++ parpot(4)=dblstr(record,lenrec,idum) ! b_i ++ parpot(5)=dblstr(record,lenrec,idum) ! R_i ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ parpot(6)=dblstr(record,lenrec,idum) ! S_i ++ parpot(7)=dblstr(record,lenrec,idum) ! beta_i ++ parpot(8)=dblstr(record,lenrec,idum) ! eta_i ++ parpot(9)=dblstr(record,lenrec,idum) ! c_i ++ parpot(10)=dblstr(record,lenrec,idum) ! d_i ++ parpot(11)=dblstr(record,lenrec,idum) ! h_i ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(16x,a8,2x,a4,2x,1p,5e13.5)") ++ x atom0,keyword(1:4),(parpot(j),j=1,5) ++ write(nrite,"(32x,1p,5e13.5)")(parpot(j),j=6,mxpter) ++ ++ endif ++ ++ katm0=0 ++ ++ do jtpatm=1,ntpatm ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ enddo ++ ++ if(katm0.eq.0)call error(idnode,92) ++ ++ filter(katm0)=.true. ++ ++c convert parameters to internal units ++ ++ if(keypot.eq.1)then ++ ++ parpot(1)=parpot(1)*engunit ++ parpot(3)=parpot(3)*engunit ++ ++ endif ++ if(lstter(katm0).gt.-1) call error(idnode,21) ++ lstter(katm0)=itpter ++ ltpter(itpter)=keypot ++ ++c calculate max tersoff cutoff ++ ++ rctter=max(rctter,parpot(6)) ++ ++c store tersoff single atom potential parameters ++ ++ do i=1,mxpter ++ prmter(itpter,i)=parpot(i) ++ enddo ++ ++ enddo ++ ++ if(rctter.lt.1.d-6)call error(idnode,1953) ++ ++c start processing double atom potential parameters ++ ++ npairs=(ntpter*(ntpter+1))/2 ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,"(/,/,1x,'number of tersoff ', ++ x 'cross terms',i10)") npairs ++ write(nrite,"(/,/,16x,'atom ','atom ',10x, ++ x 'parameters'/,/)") ++ ++ endif ++ ++ do icross=1,npairs ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++ call getword(atom0,record,8,lenrec) ++ call getword(atom1,record,8,lenrec) ++ ++ parpot(1)=dblstr(record,lenrec,idum) ! chi_ij ++ parpot(2)=dblstr(record,lenrec,idum) ! omega_ij ++ ++ katm0=0 ++ katm1=0 ++ ++ do jtpatm=1,ntpatm ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0)call error(idnode,92) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ ++ ktyp=loc2(lstter(katm0),lstter(katm1)) ++ prmter2(1,ktyp)=parpot(1) ++ prmter2(2,ktyp)=parpot(2) ++ ++ if(idnode.eq.0)write(nrite,"(16x,a8,a8,1p,2e13.5)") ++ x atom0,atom1,(parpot(j),j=1,2) ++ ++ enddo ++ ++c generate tersoff interpolation arrays ++ ++ call tergen(ntpatm,rctter) ++ ++ return ++ end subroutine define_tersoff ++ ++ subroutine tergen(ntpatm,rctter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for generating potential energy and ++c force arrays for tersoff forces only ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w. smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer ntpatm,katm0,katm1,ipt,jpt,kpt,i ++ real(8) dlrpot,rctter,baij,saij,bbij,sbij,rij,sij,att,arg ++ real(8) rrr,rep ++ ++c define grid resolution for potential arrays ++ ++ dlrpot=rctter/dble(mxgrid-4) ++ ++c construct arrays for all types of short ranged potential ++ ++ do katm0=1,ntpatm ++ ++ if(filter(katm0))then ++ ++ ipt=lstter(katm0) ++ ++ do katm1=1,katm0 ++ ++ if(filter(katm1))then ++ ++ jpt=lstter(katm1) ++ ++ if((ltpter(ipt).eq.1).and.(ltpter(jpt).eq.1))then ++ ++ kpt=loc2(ipt,jpt) ++ ++c define tersoff parameters ++ ++ baij=sqrt(prmter(ipt,1)*prmter(jpt,1)) ++ saij=0.5d0*(prmter(ipt,2)+prmter(jpt,2)) ++ bbij=sqrt(prmter(ipt,3)*prmter(jpt,3)) ++ sbij=0.5d0*(prmter(ipt,4)+prmter(jpt,4)) ++ rij=sqrt(prmter(ipt,5)*prmter(jpt,5)) ++ sij=sqrt(prmter(ipt,6)*prmter(jpt,6)) ++ ++c store potential cutoff ++ ++ vmbp(1,kpt,1)=sij ++ ++c calculate screening function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ if(rrr.le.rij)then ++ ++ vmbp(i,kpt,1)=1.d0 ++ gmbp(i,kpt,1)=0.d0 ++ ++ else ++ ++ arg=pi*(rrr-rij)/(sij-rij) ++ vmbp(i,kpt,1)=0.5d0*(1.d0+cos(arg)) ++ gmbp(i,kpt,1)=0.5d0*pi*rrr*sin(arg)/(sij-rij) ++ ++ endif ++ ++ enddo ++ ++c calculate screened repulsion function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ rep=baij*exp(-saij*rrr) ++ vmbp(i,kpt,2)=rep*vmbp(i,kpt,1) ++ gmbp(i,kpt,2)=rep*(gmbp(i,kpt,1)+ ++ x saij*rrr*vmbp(i,kpt,1)) ++ ++ enddo ++ ++c calculate screened attraction function ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ ++ att=bbij*exp(-sbij*rrr) ++ vmbp(i,kpt,3)=att*vmbp(i,kpt,1) ++ gmbp(i,kpt,3)=att*(gmbp(i,kpt,1)+ ++ x sbij*rrr*vmbp(i,kpt,1)) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine tergen ++ ++ subroutine tersoff ++ x (idnode,mxnode,natms,imcon,rctter,engter,virter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating potential and forces ++c due to a tersoff potential ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped, cubic or orthorhombic ++c cell geometry ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,natms,imcon,nix,niy,niz,i,j,nbx ++ integer nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz,jcell,iter ++ integer limit,ii,iatm ++ real(8) rctter,engter,virter,xm,ym,zm,det,cprp ++ real(8) xdc,ydc,zdc,sxx,syy,szz,strs ++ ++ dimension nix(27),niy(27),niz(27),cprp(10),strs(6) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise potential energy and virial ++ ++ engter=0.d0 ++ virter=0.d0 ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ ++ do i=1,natms ++ ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ ++ enddo ++ ++ cell(1)=2.d0*xm+rctter ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rctter ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rctter ++ ++ endif ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,1974) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rctter+1.d-6)) ++ nby=int(cprp(8)/(rctter+1.d-6)) ++ nbz=int(cprp(9)/(rctter+1.d-6)) ++ if(nbx.lt.3.or.nby.lt.3.or.nbz.lt.3)then ++ ++ if(idnode.eq.0)then ++ ++ write(nrite,'(a,3i5)') ++ x 'tersoff link cell decomposition is',nbx,nby,nbz ++ ++ endif ++ ++ call error(idnode,1977) ++ ++ endif ++ ncells=nbx*nby*nbz ++ ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,'(a,i6)') ++ x 'number of required link cells in tersoff.f is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in tersoff.f is ',mxcell ++ call error(idnode,1976) ++ ++ endif ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of angles ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++c construct mini-list of neighbour cell contents ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ lattsf(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ iatm=lattsf(ii) ++ iter=lstter(ltype(iatm)) ++ ++ if(mod(iatm,mxnode).eq.idnode.and.iter.ge.0)then ++ ++c construct working arrays by interpolation ++ ++ call terint(iatm,limit,rctter) ++ ++c calculate three body (attractive) terms ++ ++ call tersoff3(ii,limit,engter,virter,strs) ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c calculate stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,1978) ++ ++c global sum of three body potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engter ++ buffer(2)=virter ++ call gdsum(buffer(1),2,buffer(3)) ++ engter=buffer(1) ++ virter=buffer(2) ++ ++ endif ++ ++c remove effect of double counting ++ ++ engter=0.5d0*engter ++ virter=0.5d0*virter ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++ return ++ end subroutine tersoff ++ ++ subroutine terint(iatm,limit,rctter) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for constructing working arrays for ++c a tersoff potential using interpolation ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer iatm,jatm,jj,limit,iter,jter,jjter,ll ++ real(8) rctter,sxij,syij,szij,ppp,t1,t2,rdr ++ real(8) vk0,vk1,vk2,gk0,gk1,gk2 ++ ++ rdr=dble(mxgrid-4)/rctter ++ iter=lstter(ltype(iatm)) ++ ++c initialise working arrays ++ ++ do jj=1,limit ++ ++ xtf(jj)=0.d0 ++ ytf(jj)=0.d0 ++ ztf(jj)=0.d0 ++ rtf(jj)=0.d0 ++ ert(jj)=0.d0 ++ eat(jj)=0.d0 ++ grt(jj)=0.d0 ++ gat(jj)=0.d0 ++ scr(jj)=0.d0 ++ gcr(jj)=0.d0 ++ ++ enddo ++ ++c construct working arrays ++ ++ do jj=1,limit ++ ++ jatm=lattsf(jj) ++ jter=lstter(ltype(jatm)) ++ ++ if(jatm.ne.iatm.and.jter.ge.0)then ++ ++ sxij=xxx(jatm)-xxx(iatm) ++ sxij=sxij-nint(sxij) ++ syij=yyy(jatm)-yyy(iatm) ++ syij=syij-nint(syij) ++ szij=zzz(jatm)-zzz(iatm) ++ szij=szij-nint(szij) ++ ++ xtf(jj)=cell(1)*sxij+cell(4)*syij+cell(7)*szij ++ ytf(jj)=cell(2)*sxij+cell(5)*syij+cell(8)*szij ++ ztf(jj)=cell(3)*sxij+cell(6)*syij+cell(9)*szij ++ rtf(jj)=sqrt(xtf(jj)**2+ytf(jj)**2+ztf(jj)**2) ++ xtf(jj)=xtf(jj)/rtf(jj) ++ ytf(jj)=ytf(jj)/rtf(jj) ++ ztf(jj)=ztf(jj)/rtf(jj) ++ ++ jjter=loc2(iter,jter) ++ if(rtf(jj).le.vmbp(1,jjter,1))then ++ ++ ll=int(rdr*rtf(jj)) ++ ppp=rtf(jj)*rdr-dble(ll) ++ ++c interpolate screening function ++ ++ vk0=vmbp(ll,jjter,1) ++ vk1=vmbp(ll+1,jjter,1) ++ vk2=vmbp(ll+2,jjter,1) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ scr(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of screening function ++ ++ gk0=gmbp(ll,jjter,1) ++ gk1=gmbp(ll+1,jjter,1) ++ gk2=gmbp(ll+2,jjter,1) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gcr(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++c interpolate repulsive component of energy ++ ++ vk0=vmbp(ll,jjter,2) ++ vk1=vmbp(ll+1,jjter,2) ++ vk2=vmbp(ll+2,jjter,2) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ert(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of repulsive function ++ ++ gk0=gmbp(ll,jjter,2) ++ gk1=gmbp(ll+1,jjter,2) ++ gk2=gmbp(ll+2,jjter,2) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ grt(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++c interpolate attractive component of energy ++ ++ vk0=vmbp(ll,jjter,3) ++ vk1=vmbp(ll+1,jjter,3) ++ vk2=vmbp(ll+2,jjter,3) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ eat(jj)=t1+(t2-t1)*ppp*0.5d0 ++ ++c interpolate derivative of attractive function ++ ++ gk0=gmbp(ll,jjter,3) ++ gk1=gmbp(ll+1,jjter,3) ++ gk2=gmbp(ll+2,jjter,3) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gat(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine terint ++ ++ subroutine tersoff3(ii,limit,engter,virter,strs) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating three body contributions ++c to a tersoff potential and tersoff potential, virial and ++c atomic forces ++c ++c based on potential form defined in: ++c J. Tersoff, Phys. Rev. B 39 (1989) 5566. ++c ++c copyright - daresbury laboratory ++c author - w.smith dec 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical flag ++ integer iatm,jatm,katm,limit,ii,jj,kk ++ integer iter,jter,kter,jjter,kkter ++ real(8) cost,gtheta,ci,di,hi,gamma,gam_j,gam_k,eterm,gterm,strs ++ real(8) fxa,fya,fza,fxc,fyc,fzc,engter,virter,vterm,gam_ij,bi,ei ++ ++ dimension strs(6) ++ ++ iatm=lattsf(ii) ++ iter=lstter(ltype(iatm)) ++ ++ bi=prmter(iter,7) ++ ei=prmter(iter,8) ++ ci=prmter(iter,9) ++ di=prmter(iter,10) ++ hi=prmter(iter,11) ++ ++ do jj=1,limit ++ ++ jatm=lattsf(jj) ++ jter=lstter(ltype(jatm)) ++ if(jter.ge.0.and.iatm.ne.jatm)then ++ ++ jjter=loc2(iter,jter) ++ if(rtf(jj).le.vmbp(1,jjter,1))then ++ ++ flag=.false. ++ ++c potential energy and virial terms ++ ++ vterm=0.d0 ++ eterm=0.d0 ++ ++c initialise work arrays ++ ++ do kk=1,limit ++ ++ gam(kk)=0.d0 ++ gvr(kk)=0.d0 ++ ++ enddo ++ ++c calculate bond factor ++ ++ do kk=1,limit ++ ++ katm=lattsf(kk) ++ kter=lstter(ltype(katm)) ++ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then ++ ++ kkter=loc2(iter,kter) ++ ++ if(rtf(kk).le.vmbp(1,kkter,1))then ++ ++ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ztf(jj)*ztf(kk)) ++ gtheta=1.d0+(ci/di)**2-ci**2/(di**2+(hi-cost)**2) ++ eterm=eterm+gtheta*prmter2(2,kkter)*scr(kk) ++ vterm=vterm+gtheta*prmter2(2,kkter)*gcr(kk)*rtf(kk) ++ gvr(kk)=2.d0*ci**2*(hi-cost)/(di**2+(hi-cost)**2)**2 ++ gam(kk)=gtheta ++ flag=.true. ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ if(flag)then ++ ++c tersoff energy and virial ++ ++ gam_ij=prmter2(1,jjter)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei) ++ gamma=0.5d0*prmter2(1,jjter)*bi*(bi*eterm)**(ei-1.d0)* ++ x eat(jj)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei-1.d0) ++ engter=engter+ert(jj)-gam_ij*eat(jj) ++ virter=virter+gamma*vterm+(grt(jj)-gam_ij*gat(jj))*rtf(jj) ++ ++c calculate 3-body forces ++ ++ do kk=1,limit ++ ++ katm=lattsf(kk) ++ kter=lstter(ltype(katm)) ++ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then ++ ++ kkter=loc2(iter,kter) ++ if(rtf(kk).le.vmbp(1,kkter,1))then ++ ++ gam_j=0.5d0*gamma*prmter2(2,kkter)*scr(kk)*gvr(kk) ++ gam_k=0.5d0*gamma*prmter2(2,kkter)*gcr(kk)*gam(kk) ++ ++c calculate contribution to atomic forces ++ ++ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ ++ x ztf(jj)*ztf(kk)) ++ ++ fxa=gam_j*(xtf(kk)-xtf(jj)*cost)/rtf(jj) ++ fya=gam_j*(ytf(kk)-ytf(jj)*cost)/rtf(jj) ++ fza=gam_j*(ztf(kk)-ztf(jj)*cost)/rtf(jj) ++ ++ fxc=gam_j*(xtf(jj)-xtf(kk)*cost)/rtf(kk)- ++ x gam_k*xtf(kk) ++ fyc=gam_j*(ytf(jj)-ytf(kk)*cost)/rtf(kk)- ++ x gam_k*ytf(kk) ++ fzc=gam_j*(ztf(jj)-ztf(kk)*cost)/rtf(kk)- ++ x gam_k*ztf(kk) ++ ++ fxx(jatm)=fxx(jatm)+fxa ++ fyy(jatm)=fyy(jatm)+fya ++ fzz(jatm)=fzz(jatm)+fza ++ ++ fxx(iatm)=fxx(iatm)-(fxa+fxc) ++ fyy(iatm)=fyy(iatm)-(fya+fyc) ++ fzz(iatm)=fzz(iatm)-(fza+fzc) ++ ++ fxx(katm)=fxx(katm)+fxc ++ fyy(katm)=fyy(katm)+fyc ++ fzz(katm)=fzz(katm)+fzc ++ ++c calculate contributions to stress tensor ++ ++ strs(1)=strs(1)+(fxa*xtf(jj)*rtf(jj)+ ++ x fxc*xtf(kk)*rtf(kk)) ++ strs(2)=strs(2)+(fxa*ytf(jj)*rtf(jj)+ ++ x fxc*ytf(kk)*rtf(kk)) ++ strs(3)=strs(3)+(fxa*ztf(jj)*rtf(jj)+ ++ x fxc*ztf(kk)*rtf(kk)) ++ strs(4)=strs(4)+(fya*ytf(jj)*rtf(jj)+ ++ x fyc*ytf(kk)*rtf(kk)) ++ strs(5)=strs(5)+(fya*ztf(jj)*rtf(jj)+ ++ x fyc*ztf(kk)*rtf(kk)) ++ strs(6)=strs(6)+(fza*ztf(jj)*rtf(jj)+ ++ x fzc*ztf(kk)*rtf(kk)) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ gam_ij=prmter2(1,jjter) ++ engter=engter+ert(jj)-gam_ij*eat(jj) ++ virter=virter+(grt(jj)-gam_ij*gat(jj))*rtf(jj) ++ ++ endif ++ ++c calculate two body force terms ++ ++ gterm=0.5d0*(grt(jj)-gam_ij*gat(jj)) ++ fxx(iatm)=fxx(iatm)+xtf(jj)*gterm ++ fyy(iatm)=fyy(iatm)+ytf(jj)*gterm ++ fzz(iatm)=fzz(iatm)+ztf(jj)*gterm ++ fxx(jatm)=fxx(jatm)-xtf(jj)*gterm ++ fyy(jatm)=fyy(jatm)-ytf(jj)*gterm ++ fzz(jatm)=fzz(jatm)-ztf(jj)*gterm ++ ++c calculate contributions to stress tensor ++ ++ strs(1)=strs(1)-gterm*rtf(jj)*xtf(jj)*xtf(jj) ++ strs(2)=strs(2)-gterm*rtf(jj)*xtf(jj)*ytf(jj) ++ strs(3)=strs(3)-gterm*rtf(jj)*xtf(jj)*ztf(jj) ++ strs(4)=strs(4)-gterm*rtf(jj)*ytf(jj)*ytf(jj) ++ strs(5)=strs(5)-gterm*rtf(jj)*ytf(jj)*ztf(jj) ++ strs(6)=strs(6)-gterm*rtf(jj)*ztf(jj)*ztf(jj) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine tersoff3 ++ ++ end module tersoff_module +diff -urN dl_class_1.9.orig/srcmod/tether_module.f dl_class_1.9/srcmod/tether_module.f +--- dl_class_1.9.orig/srcmod/tether_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/tether_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,447 @@ ++ module tether_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining tether potential arrays ++c ++c copyright - daresbury laboratory ++c author - w. smith oct 2003 ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use parse_module ++ use setup_module ++ use site_module ++ use utility_module ++ ++ implicit none ++ ++ real(8), allocatable :: prmtet(:,:) ++ integer, allocatable :: listtet(:,:) ++ integer, allocatable :: numteth(:),keytet(:),lsttet(:) ++ real(8), allocatable :: xxs(:),yys(:),zzs(:) ++ ++ save prmtet,lsttet,listtet,numteth,keytet,xxs,yys,zzs ++ ++ contains ++ ++ subroutine alloc_tet_arrays(idnode) ++ ++ implicit none ++ ++ integer, parameter :: nnn=8 ++ ++ integer i,fail,idnode ++ dimension fail(nnn) ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate (prmtet(mxteth,mxpbnd),stat=fail(1)) ++ allocate (numteth(mxtmls),stat=fail(2)) ++ allocate (keytet(mxteth),stat=fail(3)) ++ allocate (lsttet(mxteth),stat=fail(4)) ++ allocate (listtet(msteth,2),stat=fail(5)) ++ allocate (xxs(mxatms),stat=fail(6)) ++ allocate (yys(mxatms),stat=fail(7)) ++ allocate (zzs(mxatms),stat=fail(8)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1260) ++ enddo ++ ++ do i=1,mxtmls ++ numteth(i)=0 ++ enddo ++ ++ end subroutine alloc_tet_arrays ++ ++ subroutine define_tethers ++ x (safe,idnode,itmols,nteth,nsite,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining tether bonds ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ character*8 keyword ++ character*1 message(80) ++ real(8) engunit ++ integer idnode,itmols,nteth,nsite,ntmp,iteth,iteth1,idum ++ integer iatm1,isite1,j,i ++ ++ ntmp=intstr(record,lenrec,idum) ++ numteth(itmols)=numteth(itmols)+ntmp ++ if(idnode.eq.0)then ++ write(nrite,"(/,1x,'number of tethered atoms ', ++ x 6x,i10)")ntmp ++ write(nrite,"(/,' tethered atom details:',/,/, ++ x 21x,7x,'key',6x,'atom',19x,'parameters',/) ") ++ endif ++ ++ iteth1=numteth(itmols) ++ do iteth=1,iteth1 ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ call strip(record,lenrec) ++ call copystring(record,message,80) ++ call lowcase(record,4) ++ call getword(keyword,record,4,lenrec) ++ ++ iatm1=intstr(record,lenrec,idum) ++ ++c test for frozen atom ++ ++ isite1=nsite-numsit(itmols)+iatm1 ++ ++ if(lfzsit(isite1).ne.0)then ++ ++ numteth(itmols)=numteth(itmols)-1 ++ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') ++ x '*** frozen *** ',(message(i),i=1,40) ++ ++ else ++ ++ nteth=nteth+1 ++ if(nteth.gt.mxteth)call error(idnode,62) ++ ++ if(keyword(1:4).eq.'harm')then ++ keytet(nteth)=1 ++ elseif(keyword(1:4).eq.'rhrm')then ++ keytet(nteth)=2 ++ elseif(keyword(1:4).eq.'quar')then ++ keytet(nteth)=3 ++ else ++ if(idnode.eq.0)write(nrite,*)message ++ call error(idnode,450) ++ endif ++ ++ lsttet(nteth)=iatm1 ++ prmtet(nteth,1)=dblstr(record,lenrec,idum) ++ prmtet(nteth,2)=dblstr(record,lenrec,idum) ++ prmtet(nteth,3)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(27x,a4,i10,1p,9e12.4)") ++ x keyword(1:4),lsttet(nteth), ++ x (prmtet(nteth,j),j=1,mxpbnd) ++ ++c convert energy units to internal units ++ ++ if(abs(keytet(nteth)).eq.1)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ elseif(abs(keytet(nteth)).eq.2)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ elseif(abs(keytet(nteth)).eq.3)then ++ prmtet(nteth,1)=prmtet(nteth,1)*engunit ++ prmtet(nteth,2)=prmtet(nteth,2)*engunit ++ prmtet(nteth,3)=prmtet(nteth,3)*engunit ++ endif ++ ++ endif ++ ++ enddo ++ ++ return ++ end subroutine define_tethers ++ ++ subroutine tethfrc ++ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) ++ ++c*********************************************************************** ++c ++c dl_poly routine to tether atoms to initial positions ++c includes stress tensor ++c ++c replicated data version : block data ++c ++c copyright daresbury laboratory 1994 ++c author t.forester feb 1994 ++c amended t.forester dec 1994 : block data ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,imcon,natms,nstep,ntteth,i,ii,ia,kk ++ integer itet1,itet2,fail ++ ++ real(8) engtet,virtet,rab ++ real(8) rrab,omega,gamma ++ ++ real(8), allocatable :: xdab(:),ydab(:),zdab(:) ++ ++ data safe/.true./ ++ ++ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) ++ if(fail.ne.0)call error(idnode,1270) ++ ++c set up reference positions at start of job ++ ++ if(nstep.le.1)then ++ ++ do i=1,natms ++ ++ xxs(i)=xxx(i) ++ yys(i)=yyy(i) ++ zzs(i)=zzz(i) ++ ++ enddo ++ ++ endif ++ ++c check size of work arrays ++ ++ if((ntteth-mxnode+1)/mxnode.gt.msbad) call error(idnode,420) ++ ++c block indices ++ ++ itet1=(idnode*ntteth)/mxnode+1 ++ itet2=((idnode+1)*ntteth)/mxnode ++ ++ ii=0 ++ do i=itet1,itet2 ++ ++ ii=ii+1 ++ ++c atomic index ++ ++ ia= listtet(ii,2) ++ ++c tether vector ++ ++ xdab(ii)=xxx(ia)-xxs(ia) ++ ydab(ii)=yyy(ia)-yys(ia) ++ zdab(ii)=zzz(ia)-zzs(ia) ++ ++ enddo ++ ++c ignore periodic boundary condition ++ ++ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) ++ ++c zero tether energy and virial accumulators ++ ++ engtet=0.d0 ++ virtet=0.d0 ++ ++c loop over all specified tethered atoms ++ ++ ii=0 ++ do i=itet1,itet2 ++ ++ ii=ii+1 ++ ++c define components of bond vector ++ ++ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) ++ ++c check for possible zero length vector ++ ++ if(rab.lt.1.d-10)then ++ ++ rrab =0.d0 ++ ++ else ++ ++ rrab=1.d0/rab ++ ++ endif ++ ++c index of potential function parameters ++ ++ kk=listtet(ii,1) ++ ++c calculate scalar constant terms ++ ++ if(keytet(kk).eq.1)then ++ ++c harmonic function ++ ++ omega=0.5d0*prmtet(kk,1)*rab**2 ++ gamma=prmtet(kk,1) ++ ++ elseif(keytet(kk).eq.2)then ++ ++c restrained harmonic: ++ ++ omega=0.5d0*prmtet(kk,1)*(min(rab,prmtet(kk,2)))**2 ++ x +prmtet(kk,1)*prmtet(kk,2)* ++ x (sign(max(rab-prmtet(kk,2),0.d0),rab)) ++ gamma=prmtet(kk,1)*(sign(min(rab,prmtet(kk,2)),rab))*rrab ++ ++ elseif(keytet(kk).eq.3)then ++ ++c quartic potential ++ ++ omega=0.5d0*prmtet(kk,1)*rab**2 + ++ x 1.d0/3.d0*prmtet(kk,2)*rab**3+ ++ x 0.25d0*prmtet(kk,3)*rab**4 ++ gamma=(prmtet(kk,1)*rab + ++ x prmtet(kk,2)*rab**2 + ++ x prmtet(kk,3)*rab**3)*rrab ++ ++ else ++ safe=.false. ++ omega=0.d0 ++ gamma=0.d0 ++ endif ++ ++ gamma=-gamma ++ ++c calculate tether energy and virial ++ ++ engtet=engtet+omega ++ virtet=virtet-gamma*rab*rab ++ ++c index of atom ++ ++ ia=listtet(ii,2) ++ ++c calculate atomic forces ++ ++ fxx(ia)=fxx(ia)+gamma*xdab(ii) ++ fyy(ia)=fyy(ia)+gamma*ydab(ii) ++ fzz(ia)=fzz(ia)+gamma*zdab(ii) ++ ++c stress tensor ++ ++ stress(1)=stress(1)+xdab(ii)*gamma*xdab(ii) ++ stress(2)=stress(2)+xdab(ii)*gamma*ydab(ii) ++ stress(3)=stress(3)+xdab(ii)*gamma*zdab(ii) ++ stress(4)=stress(4)+ydab(ii)*gamma*xdab(ii) ++ stress(5)=stress(5)+ydab(ii)*gamma*ydab(ii) ++ stress(6)=stress(6)+ydab(ii)*gamma*zdab(ii) ++ stress(7)=stress(7)+zdab(ii)*gamma*xdab(ii) ++ stress(8)=stress(8)+zdab(ii)*gamma*ydab(ii) ++ stress(9)=stress(9)+zdab(ii)*gamma*zdab(ii) ++ ++ enddo ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1)call gstate(safe) ++ if(.not.safe)call error(idnode,450) ++ ++c sum contributions to potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(3)=engtet ++ buffer(4)=virtet ++ ++ call gdsum(buffer(3),2,buffer(1)) ++ ++ engtet=buffer(3) ++ virtet=buffer(4) ++ ++ endif ++ ++ deallocate (xdab,ydab,zdab,stat=fail) ++ ++ return ++ end subroutine tethfrc ++ ++ subroutine xscale(idnode,mxnode,natms,keyens,imcon,tstep) ++ ++c*********************************************************************** ++c ++c dl_poly routine to scale positions with change in box shape ++c ++c parallel replicated data version ++c ++c copyright daresbury laboratory 1995 ++c author t.forester october 1995 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,natms,keyens,imcon,iatm0,iatm1,i ++ real(8) tstep,xa,ya,za,totmas,xcmo,ycmo,zcmo ++ ++c assign block of atoms to processor ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if((keyens.eq.4).or.(keyens.eq.6))then ++ ++c berendsen npt/nst ++ ++ do i=iatm0,iatm1 ++ ++ xa=eta(1)*xxs(i)+eta(2)*yys(i)+eta(3)*zzs(i) ++ ya=eta(4)*xxs(i)+eta(5)*yys(i)+eta(6)*zzs(i) ++ za=eta(7)*xxs(i)+eta(8)*yys(i)+eta(9)*zzs(i) ++ ++ xxs(i)=xa ++ yys(i)=ya ++ zzs(i)=za ++ ++ enddo ++ ++ elseif(keyens.eq.5.or.keyens.eq.7)then ++ ++c hoover npt/nst ++ ++ totmas=0.d0 ++ do i=1,natms ++ if(rmass(i).gt.0.d0)totmas=totmas+weight(i) ++ enddo ++ ++ xcmo=0.d0 ++ ycmo=0.d0 ++ zcmo=0.d0 ++ ++ do i=1,natms ++ ++ if(rmass(i).gt.0.d0)then ++ ++ xcmo=xcmo+weight(i)*xxs(i) ++ ycmo=ycmo+weight(i)*yys(i) ++ zcmo=zcmo+weight(i)*zzs(i) ++ ++ endif ++ ++ enddo ++ xcmo=xcmo/totmas ++ ycmo=ycmo/totmas ++ zcmo=zcmo/totmas ++ ++ do i=iatm0,iatm1 ++ ++ xa=xxs(i)-xcmo ++ ya=yys(i)-ycmo ++ za=zzs(i)-zcmo ++ ++ xxs(i)=xxs(i)+tstep*(eta(1)*xa+eta(2)*ya+eta(3)*za) ++ yys(i)=yys(i)+tstep*(eta(2)*xa+eta(5)*ya+eta(6)*za) ++ zzs(i)=zzs(i)+tstep*(eta(3)*xa+eta(6)*ya+eta(9)*za) ++ ++ enddo ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxs,yys,zzs) ++ ++ endif ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxs,yys,zzs,buffer) ++ ++ return ++ end subroutine xscale ++ ++ end module tether_module ++ +diff -urN dl_class_1.9.orig/srcmod/three_body_module.f dl_class_1.9/srcmod/three_body_module.f +--- dl_class_1.9.orig/srcmod/three_body_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/three_body_module.f 2011-02-21 10:56:11.000000000 +0100 +@@ -0,0 +1,882 @@ ++ module three_body_module ++ ++c*********************************************************************** ++c ++c dl_poly module for defining three-body potential arrays ++c copyright - daresbury laboratory ++c author - w. smith sep 2003 ++c adapted - w. smith aug 2008 : solvation, free energy excitation ++c adapted - w. smith jan 2011 : metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use error_module ++ use metafreeze_module ++ use parse_module ++ use setup_module ++ use site_module ++ use solvation_module ++ use utility_module ++ ++ implicit none ++ ++ logical, allocatable :: filter(:) ++ real(8), allocatable :: prmtbp(:,:),rcut3b(:) ++ integer, allocatable :: lsttbp(:),ltptbp(:),lattbp(:) ++ ++ save prmtbp,rcut3b,lsttbp,ltptbp,lattbp,filter ++ ++ contains ++ ++ subroutine alloc_tbp_arrays(idnode) ++ ++ implicit none ++ ++ integer i,fail,idnode ++ dimension fail(6) ++ ++ do i=1,6 ++ fail(i)=0 ++ enddo ++ ++ allocate (prmtbp(mxtbp,mxptbp),stat=fail(1)) ++ allocate (rcut3b(mxtbp),stat=fail(2)) ++ allocate (lsttbp(mxtbp),stat=fail(3)) ++ allocate (ltptbp(mxtbp),stat=fail(4)) ++ allocate (lattbp(mxatms),stat=fail(5)) ++ allocate (filter(mxsite),stat=fail(6)) ++ ++ do i=1,6 ++ if(fail(i).gt.0)call error(idnode,1170) ++ enddo ++ ++ end subroutine alloc_tbp_arrays ++ ++ subroutine define_three_body ++ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for defining three body potentials ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2003 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lunits,lmols ++ character*8 keyword ++ character*8 atom0,atom1,atom2 ++ character*1 message(80) ++ integer idnode,ntptbp,ntpatm,fail,i,itbp,itptbp,keypot ++ integer idum,katm1,katm2,katm0,j,keytbp,ktbp,jtpatm ++ real(8) rcuttb,engunit ++ real(8), allocatable :: parpot(:) ++ ++ data fail/0/ ++ ++ allocate (parpot(mxptbp),stat=fail) ++ if(fail.ne.0)call error(idnode,1180) ++ ++ ntptbp=intstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,"(/,/,1x,'number of specified three ', ++ x 'body potentials',i10)") ntptbp ++ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', ++ x 3x,' key',30x,'parameters'/,/)") ++ ++ endif ++ if(ntptbp.gt.mxtbp) call error(idnode,83) ++ if(.not.lunits) call error(idnode,6) ++ if(.not.lmols) call error(idnode,13) ++ ++ do i=1,mxsite ++ filter(i)=.false. ++ enddo ++ ++ do itbp=1,mxtbp ++ lsttbp(itbp)=0 ++ enddo ++ ++ do itbp=1,mxtbp,mx2tbp ++ lsttbp(itbp)=-1 ++ enddo ++ ++ rcuttb=0.d0 ++ ++ do itptbp=1,ntptbp ++ ++ do i=1,mxptbp ++ parpot(i)=0.d0 ++ enddo ++ ++ call getrec(safe,idnode,nfield) ++ if(.not.safe)return ++ ++c Note the order!! atom0 is central ++ ++ call copystring(record,message,80) ++ call getword(atom1,record,8,lenrec) ++ call getword(atom0,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ call lowcase(record,lenrec) ++ call getword(keyword,record,4,lenrec) ++ ++ if(keyword(1:4).eq.'harm') then ++ keypot=0 ++ elseif(keyword(1:4).eq.'thrm') then ++ keypot=1 ++ elseif(keyword(1:4).eq.'shrm') then ++ keypot=2 ++ elseif(keyword(1:4).eq.'bvs1') then ++ keypot=3 ++ elseif(keyword(1:4).eq.'bvs2') then ++ keypot=4 ++ elseif(keyword(1:4).eq.'hbnd') then ++ keypot=5 ++ else ++ if(idnode.eq.0) write(nrite,*) message ++ call error(idnode,442) ++ endif ++ ++ parpot(1)=dblstr(record,lenrec,idum) ++ parpot(2)=dblstr(record,lenrec,idum) ++ parpot(3)=dblstr(record,lenrec,idum) ++ parpot(4)=dblstr(record,lenrec,idum) ++ parpot(5)=dblstr(record,lenrec,idum) ++ ++ if(idnode.eq.0) ++ x write(nrite,"(16x,3a8,4x,a4,1x,1p,9e13.5)") ++ x atom1,atom0,atom2,keyword(1:4),(parpot(j),j=1,mxptbp) ++ ++ katm0=0 ++ katm1=0 ++ katm2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm ++ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm ++ ++ enddo ++ ++ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0) ++ x call error(idnode,84) ++ ++ filter(katm0)=.true. ++ filter(katm1)=.true. ++ filter(katm2)=.true. ++ ++ keytbp=(max(katm1,katm2)*(max(katm1,katm2)-1))/2+ ++ x min(katm1,katm2)+(katm0-1)*mx2tbp ++ ++ if(keytbp.gt.mxtbp) call error(idnode,86) ++ ++c convert parameters to internal units ++ ++ parpot(1)=parpot(1)*engunit ++ if(keypot.ne.5)parpot(2)=parpot(2)*(pi/180.d0) ++ ++ if(lsttbp(keytbp).gt.0) call error(idnode,18) ++ lsttbp(keytbp)=itptbp ++ ltptbp(itptbp)=keypot ++ ktbp=mx2tbp*((keytbp-1)/mx2tbp)+1 ++ if(lsttbp(ktbp).lt.0)lsttbp(ktbp)=0 ++ ++c calculate max three body cutoff ++ ++ rcuttb=max(rcuttb,parpot(5)) ++ rcut3b(itptbp)=parpot(5) ++ ++c store three body potential parameters ++ ++ do i=1,4 ++ prmtbp(itptbp,i)=parpot(i) ++ enddo ++ if(mxptbp.ge.6) then ++ do i=6,mxptbp ++ prmtbp(itptbp,i-1)=parpot(i-1) ++ enddo ++ endif ++ enddo ++ ++ if(rcuttb.lt.1.d-6)call error(idnode,451) ++ ++ deallocate (parpot,stat=fail) ++ ++ return ++ end subroutine define_three_body ++ ++ subroutine thbfrc ++ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcuttb, ++ x engtbp,virtbp) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating three body forces arising ++c from the included angle between three atoms ++c ++c Note: the subroutine converts coordinates to reduced units ++c to avoid a call to images.f. The link cell algorithm used ++c here necessitates a parallelepiped cell geometry ++c ++c copyright - daresbury laboratory 1994 ++c author - w.smith mar 1994 ++c adapted - w.smith aug 2008 solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lsolva,lfree,lexcite,lselect,lskip ++ logical idrive,jdrive,kdrive ++ integer idnode,mxnode,natms,imcon,nix,niy,niz ++ integer i,nbx,nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz ++ integer j,jcell,ii,itbp,limit,last,ktbp,jtbp,jktbp,kktbp ++ integer ia,ib,ic,ktyp,jj,jk,kkk ++ real(8) rcuttb,engtbp,virtbp,tterm,uterm,xm,ym,zm,cprp,det ++ real(8) xdc,ydc,zdc,sxx,syy,szz,sxab,syab,szab,xab,yab,zab ++ real(8) rab,sxbc,sybc,szbc,xbc,ybc,zbc,rbc,xac,yac,zac,rac ++ real(8) rrab,rrbc,rrac,cost,sint,theta,pterm,gamma,vterm ++ real(8) gamsa,gamsb,gamsc,scrn,fxa,fya,fza,fxc,fyc,fzc,strs ++ real(8) strs_loc ++ ++ dimension nix(27),niy(27),niz(27),cprp(10),strs(6),strs_loc(9) ++ ++ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, ++ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ ++ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, ++ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ ++ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ ++ ++ lskip=(lfree.or.lexcite) ++ ++c flag for undefined potentials ++ ++ safe=.true. ++ ++c initialise accumulators ++ ++ engtbp=0.d0 ++ virtbp=0.d0 ++ tbp_fre=0.d0 ++ tbp_vir=0.d0 ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++ if(lsolva)then ++ ++ lcomp(8)=.true. ++ en3_sol(:)=0.d0 ++ if(lexcite)en3_exc(:)=0.d0 ++ ++ endif ++ ++c create mock cell vectors for non-periodic system ++ ++ if(imcon.eq.0) then ++ ++ xm=0.d0 ++ ym=0.d0 ++ zm=0.d0 ++ do i=1,natms ++ xm=max(xm,abs(xxx(i))) ++ ym=max(ym,abs(yyy(i))) ++ zm=max(zm,abs(zzz(i))) ++ enddo ++ ++ cell(1)=2.d0*xm+rcuttb ++ cell(2)=0.d0 ++ cell(3)=0.d0 ++ cell(4)=0.d0 ++ cell(5)=2.d0*ym+rcuttb ++ cell(6)=0.d0 ++ cell(7)=0.d0 ++ cell(8)=0.d0 ++ cell(9)=2.d0*zm+rcuttb ++ ++ endif ++ ++c check for appropriate boundary conditions ++ ++ if(imcon.gt.3)call error(idnode,67) ++ call invert(cell,rcell,det) ++ call dcell(cell,cprp) ++ ++c calculate link cell numbers ++ ++ nbx=int(cprp(7)/(rcuttb+1.d-6)) ++ nby=int(cprp(8)/(rcuttb+1.d-6)) ++ nbz=int(cprp(9)/(rcuttb+1.d-6)) ++ ncells=nbx*nby*nbz ++ if(ncells.gt.mxcell) then ++ ++ if(idnode.eq.0) then ++ ++ write(nrite,'(a,i6)') ++ x 'number of required link cells in routine thbfrc is ',ncells ++ write(nrite,'(a,i6)') ++ x 'number of default link cells in routine thbfrc is ',mxcell ++ call error(idnode,69) ++ ++ endif ++ ++ endif ++ ++c transform atomic coordinates and construct link cells ++ ++ do l=1,ncells ++ ++ lct(l)=0 ++ lst(l)=0 ++ ++ enddo ++ ++ xdc=dble(nbx) ++ ydc=dble(nby) ++ zdc=dble(nbz) ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) ++ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) ++ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) ++ ++ xxx(i)=sxx ++ yyy(i)=syy ++ zzz(i)=szz ++ ++ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) ++ iy=min(int(ydc*(syy+0.5d0)),nby-1) ++ iz=min(int(zdc*(szz+0.5d0)),nbz-1) ++ k=1+ix+nbx*(iy+nby*iz) ++ lst(k)=lst(k)+1 ++ link(i)=lct(k) ++ lct(k)=i ++ ++ endif ++ ++ enddo ++ ++c loop over central atoms of angles ++ ++ ix=0 ++ iy=1 ++ iz=1 ++ do icell=1,ncells ++ ++ ix=ix+1 ++ if(ix.gt.nbx)then ++ ix=1 ++ iy=iy+1 ++ if(iy.gt.nby)then ++ iy=1 ++ iz=iz+1 ++ endif ++ endif ++ ++c construct mini-list of neighbour cell contents ++ ++ k=0 ++ do kk=1,27 ++ ++ jx=ix+nix(kk) ++ jy=iy+niy(kk) ++ jz=iz+niz(kk) ++ ++ if(jx.gt.nbx)jx=1 ++ if(jy.gt.nby)jy=1 ++ if(jz.gt.nbz)jz=1 ++ if(jx.lt.1)jx=jx+nbx ++ if(jy.lt.1)jy=jy+nby ++ if(jz.lt.1)jz=jz+nbz ++ ++ jcell=jx+nbx*(jy-1+nby*(jz-1)) ++ j=lct(jcell) ++ ++ do ii=1,lst(jcell) ++ ++ k=k+1 ++ lattbp(k)=j ++ j=link(j) ++ ++ enddo ++ ++ enddo ++ ++ limit=k ++ ++ do ii=1,lst(icell) ++ ++ i=lattbp(ii) ++ itbp=mx2tbp*(ltype(i)-1) ++ if(mod(i,mxnode).eq.idnode.and.lsttbp(itbp+1).ge.0)then ++ ++ last=limit ++ ++ do kk=1,limit/2 ++ ++ if(kk.gt.(limit-1)/2)last=limit/2 ++ ++ do jj=1,last ++ ++ j=lattbp(jj) ++ jk=jj+kk ++ if(jk.gt.limit)jk=jk-limit ++ k=lattbp(jk) ++ if(i.ne.j.and.i.ne.k)then ++ ++ jtbp=max(ltype(j),ltype(k)) ++ ktbp=min(ltype(j),ltype(k)) ++ jktbp=itbp+(jtbp*(jtbp-1))/2+ktbp ++ kktbp=lsttbp(jktbp) ++ if(kktbp.gt.0)then ++ ++c make labels etc consistent with angfrc.f ++ ++ ia=j ++ ib=i ++ ic=k ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(ia)) ++ jdrive=driven(ltype(ib)) ++ kdrive=driven(ltype(ic)) ++ ++ endif ++ ++ if(lskip)then ++ ++ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. ++ x atm_fre(ic).eq.1).and.(atm_fre(ia).eq.2.or. ++ x atm_fre(ib).eq.2.or.atm_fre(ic).eq.2))cycle ++ ++ endif ++ ++ sxab=xxx(ia)-xxx(ib) ++ sxab=sxab-nint(sxab) ++ syab=yyy(ia)-yyy(ib) ++ syab=syab-nint(syab) ++ szab=zzz(ia)-zzz(ib) ++ szab=szab-nint(szab) ++ ++ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab ++ if(abs(xab).lt.rcuttb)then ++ ++ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab ++ if(abs(yab).lt.rcuttb)then ++ ++ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab ++ if(abs(zab).lt.rcuttb)then ++ ++ sxbc=xxx(ic)-xxx(ib) ++ sxbc=sxbc-nint(sxbc) ++ sybc=yyy(ic)-yyy(ib) ++ sybc=sybc-nint(sybc) ++ szbc=zzz(ic)-zzz(ib) ++ szbc=szbc-nint(szbc) ++ ++ xbc=cell(1)*sxbc+cell(4)*sybc+cell(7)*szbc ++ if(abs(xbc).lt.rcuttb)then ++ ++ ybc=cell(2)*sxbc+cell(5)*sybc+cell(8)*szbc ++ if(abs(ybc).lt.rcuttb)then ++ ++ zbc=cell(3)*sxbc+cell(6)*sybc+cell(9)*szbc ++ if(abs(zbc).lt.rcuttb)then ++ ++ ktyp=ltptbp(kktbp) ++ rab=sqrt(xab*xab+yab*yab+zab*zab) ++ rbc=sqrt(xbc*xbc+ybc*ybc+zbc*zbc) ++ ++ if(rcut3b(kktbp).ge.max(rab,rbc))then ++ ++ xac=xab-xbc ++ yac=yab-ybc ++ zac=zab-zbc ++ rac=sqrt(xac*xac+yac*yac+zac*zac) ++ ++ rrab=1.d0/rab ++ rrbc=1.d0/rbc ++ rrac=1.d0/rac ++ ++c normalise direction vectors ++ ++ xab=xab*rrab ++ yab=yab*rrab ++ zab=zab*rrab ++ ++ xbc=xbc*rrbc ++ ybc=ybc*rrbc ++ zbc=zbc*rrbc ++ ++ xac=xac*rrac ++ yac=yac*rrac ++ zac=zac*rrac ++ ++ cost=(xab*xbc+yab*ybc+zab*zbc) ++ if(abs(cost).gt.1.d0)cost=sign(1.d0,cost) ++ if(ktyp.ne.5)then ++ ++ sint=max(1.d-8,sqrt(1.d0-cost*cost)) ++ theta=acos(cost) ++ ++ endif ++ ++ if(ktyp.eq.0)then ++ ++c harmonic angle potential ++ ++ pterm=0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ gamma=prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ ++ vterm=0.d0 ++ gamsa=0.d0 ++ gamsc=0.d0 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.1)then ++ ++c truncated harmonic valence angle potential ++ ++ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,3)**8) ++ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,3)**8 ++ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ gamsa=(8.d0*pterm/prmtbp(kktbp,3)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmtbp(kktbp,3)**8)*rbc**7 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.2)then ++ ++c screened harmonic valence angle potential ++ ++ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) ++ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 ++ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) ++ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint ++ gamsa=(pterm/prmtbp(kktbp,3)) ++ gamsc=(pterm/prmtbp(kktbp,4)) ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.3)then ++ ++c screened vessal potential type 1 ++ ++ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) ++ pterm=scrn*prmtbp(kktbp,1)/ ++ x (8.d0*(prmtbp(kktbp,2)-pi)**2)* ++ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)**2 ++ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) ++ gamma=scrn*prmtbp(kktbp,1)/ ++ x (2.d0*(prmtbp(kktbp,2)-pi)**2)* ++ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)*(theta-pi)/sint ++ gamsa=(pterm/prmtbp(kktbp,3)) ++ gamsc=(pterm/prmtbp(kktbp,4)) ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.4)then ++ ++c truncated vessal potential type 2 - use with sw1 ++ ++ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,4)**8) ++ pterm=scrn*prmtbp(kktbp,1)*(theta**prmtbp(kktbp,3)* ++ x (theta-prmtbp(kktbp,2))**2*(theta+prmtbp(kktbp,2)- ++ x 2.d0*pi)**2-0.5d0*prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3) ++ x -1.d0)*(theta-prmtbp(kktbp,2))**2*(pi- ++ x prmtbp(kktbp,2))**3) ++ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,4)**8 ++ gamma=scrn*prmtbp(kktbp,1)*(theta**(prmtbp(kktbp,3)-1.d0)* ++ x (theta-prmtbp(kktbp,2))*(theta+prmtbp(kktbp,2)- ++ x 2.d0*pi)*((prmtbp(kktbp,3)+4.d0)*theta**2-2.d0*pi* ++ x (prmtbp(kktbp,3)+2.d0)*theta+prmtbp(kktbp,3)* ++ x prmtbp(kktbp,2)*(2.d0*pi-prmtbp(kktbp,2)))- ++ x prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3)-1.d0)* ++ x (theta-prmtbp(kktbp,2))*(pi-prmtbp(kktbp,2))**3)/sint ++ gamsa=(8.d0*pterm/prmtbp(kktbp,4)**8)*rab**7 ++ gamsc=(8.d0*pterm/prmtbp(kktbp,4)**8)*rbc**7 ++ gamsb=0.d0 ++ ++ elseif(ktyp.eq.5)then ++ ++ if(min(rab,rbc).lt.1.5d0)then ++ ++ scrn=(5.d0*(prmtbp(kktbp,2)/rac)**2-6.d0)* ++ x (prmtbp(kktbp,2)/rac)**10 ++ tterm=prmtbp(kktbp,1)*cost**4 ++ pterm=scrn*tterm ++ uterm=60.d0*((prmtbp(kktbp,2)/rac)**2-1.d0)* ++ x (prmtbp(kktbp,2)/rac)**10 ++ vterm=tterm*uterm ++ gamma=scrn*4.d0*prmtbp(kktbp,1)*cost**3 ++ gamsb=tterm*uterm/rac ++ gamsa=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++ else ++ ++ safe=.false. ++ pterm=0.d0 ++ vterm=0.d0 ++ gamma=0.d0 ++ gamsa=0.d0 ++ gamsb=0.d0 ++ gamsc=0.d0 ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set triple index ++ ++ if(lsolva)kkk=loc3(atmolt(ia),atmolt(ib),atmolt(ic)) ++ ++ if(lexcite)then ++ ++c selected excitation option ++ ++ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1) ++ x .and.(atm_fre(ic).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) ++ ++ if(lsolva)en3_exc(kkk)=en3_exc(kkk)+pterm ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1) ++ x .or.(atm_fre(ic).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ tbp_fre=tbp_fre-pterm ++ tbp_vir=tbp_vir-vterm ++ pterm=lambda1*pterm ++ vterm=lambda1*vterm ++ gamma=lambda1*gamma ++ gamsa=lambda1*gamsa ++ gamsb=lambda1*gamsb ++ gamsc=lambda1*gamsc ++ ++ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2) ++ x .or.(atm_fre(ic).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ tbp_fre=tbp_fre+pterm ++ tbp_vir=tbp_vir+vterm ++ pterm=lambda2*pterm ++ vterm=lambda2*vterm ++ gamma=lambda2*gamma ++ gamsa=lambda2*gamsa ++ gamsb=lambda2*gamsb ++ gamsc=lambda2*gamsc ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential and virial ++ ++ engtbp=engtbp+pterm ++ virtbp=virtbp+vterm ++ ++ if(lsolva)en3_sol(kkk)=en3_sol(kkk)+pterm ++ ++c calculate atomic forces ++ ++ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab+gamsb*xac ++ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab+gamsb*yac ++ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab+gamsb*zac ++ ++ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc-gamsb*xac ++ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc-gamsb*yac ++ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc-gamsb*zac ++ ++ fxx(ia)=fxx(ia)+fxa ++ fyy(ia)=fyy(ia)+fya ++ fzz(ia)=fzz(ia)+fza ++ ++ fxx(ib)=fxx(ib)-fxa-fxc ++ fyy(ib)=fyy(ib)-fya-fyc ++ fzz(ib)=fzz(ib)-fza-fzc ++ ++ fxx(ic)=fxx(ic)+fxc ++ fyy(ic)=fyy(ic)+fyc ++ fzz(ic)=fzz(ic)+fzc ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc ++ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc ++ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc ++ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc ++ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn)then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+pterm ++ vir_loc=vir_loc+vterm ++ ++c local forces ++ ++ fxx_loc(ia)=fxx_loc(ia)+fxa ++ fyy_loc(ia)=fyy_loc(ia)+fya ++ fzz_loc(ia)=fzz_loc(ia)+fza ++ ++ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc ++ fyy_loc(ib)=fyy_loc(ib)-fya-fyc ++ fzz_loc(ib)=fzz_loc(ib)-fza-fzc ++ ++ fxx_loc(ic)=fxx_loc(ic)+fxc ++ fyy_loc(ic)=fyy_loc(ic)+fyc ++ fzz_loc(ic)=fzz_loc(ic)+fzc ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc ++ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc ++ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc ++ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc ++ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc ++ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc ++ ++ endif ++ ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ enddo ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++c check for undefined potentials ++ ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe) call error(idnode,442) ++ ++c global sum of three body potential and virial ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engtbp ++ buffer(2)=virtbp ++ buffer(3)=tbp_fre ++ buffer(4)=tbp_vir ++ call gdsum(buffer(1),4,buffer(5)) ++ engtbp=buffer(1) ++ virtbp=buffer(2) ++ tbp_fre=buffer(3) ++ tbp_vir=buffer(4) ++ ++c sum up solvation energies ++ ++ if(lsolva)then ++ ++ call gdsum(en3_sol,mxtmls_sol3,buffer(1)) ++ if(lexcite)call gdsum(en3_exc,mxtmls_exc3,buffer(1)) ++ ++ endif ++ ++ endif ++ ++c restore coordinate array to original representation ++ ++ do i=1,natms ++ ++ if(filter(ltype(i)))then ++ ++ sxx=xxx(i) ++ syy=yyy(i) ++ szz=zzz(i) ++ ++ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz ++ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz ++ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz ++ ++ endif ++ ++ enddo ++ ++c restore cell vector ++ ++ if(imcon.eq.0) then ++ cell(1)=0.d0 ++ cell(5)=0.d0 ++ cell(9)=0.d0 ++ endif ++ ++ return ++ ++ end subroutine thbfrc ++ ++ end module three_body_module +diff -urN dl_class_1.9.orig/srcmod/utility_module.f dl_class_1.9/srcmod/utility_module.f +--- dl_class_1.9.orig/srcmod/utility_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/utility_module.f 2010-12-22 13:27:23.000000000 +0100 +@@ -0,0 +1,1612 @@ ++ module utility_module ++ ++c*********************************************************************** ++c ++c dl_poly module for utility subroutines and functions ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ contains ++ ++ subroutine global_sum_forces(natms,mxnode,gxx,gyy,gzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to perform global sum of atomic forces as ++c requred by replicated data strategy ++c ++c copyright - daresbury laboratory ++c author - w.smith december 2005 ++c ++c*********************************************************************** ++ ++ use config_module ++ ++ implicit none ++ ++ integer natms,mxnode,i,j ++ real(8) gxx(*),gyy(*),gzz(*) ++ ++ if(mxnode.gt.1) then ++ ++ j=0 ++ do i=1,natms ++ ++ buffer(j+1)=gxx(i) ++ buffer(j+2)=gyy(i) ++ buffer(j+3)=gzz(i) ++ j=j+3 ++ ++ enddo ++ call gdsum(buffer(1),3*natms,buffer(3*natms+1)) ++ j=0 ++ do i=1,natms ++ ++ gxx(i)=buffer(j+1) ++ gyy(i)=buffer(j+2) ++ gzz(i)=buffer(j+3) ++ j=j+3 ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine global_sum_forces ++ ++ subroutine images ++ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating the minimum image ++c of atom pairs within a specified MD cell ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992. ++c T3D optimised version. t.forester july 1994 ++c ++c for ++c imcon=0 no boundary conditions apply ++c imcon=1 standard cubic boundaries apply ++c imcon=2 orthorhombic boundaries apply ++c imcon=3 parallelepiped boundaries apply ++c imcon=4 truncated octahedron boundaries apply ++c imcon=5 rhombic dodecahedron boundaries apply ++c imcon=6 x-y parallelogram boundary conditions : no periodicity in z ++c imcon=7 hexagonal prism boundaries apply ++c ++c note: in all cases the centre of the cell is at (0,0,0) ++c warning - replicated data version: does not re-merge ++c coordinate arrays ++c ++c*********************************************************************** ++ ++ use error_module ++ ++ implicit none ++ ++ integer imcon,idnode,mxnode,natms,iatm1,iatm2,i ++ real(8) cell,xxx,yyy,zzz,aaa,bbb,ccc,det,rt2,rt3,ssx ++ real(8) ssy,ssz,ddd,xss,yss,zss,rcell ++ ++ dimension xxx(*),yyy(*),zzz(*) ++ dimension cell(9),rcell(9) ++ ++ data rt2/1.41421356623d0/,rt3/1.7320508075d0/ ++ ++ if(imcon.gt.0) then ++ ++c block indices ++ ++ iatm1 = (idnode*natms)/mxnode+1 ++ iatm2 = ((idnode+1)*natms)/mxnode ++ ++ endif ++ ++ if(imcon.eq.1)then ++ ++c standard cubic boundary conditions ++ ++ ++ aaa=1.d0/cell(1) ++ ++ do i=iatm1,iatm2 ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) ++ enddo ++ ++ else if(imcon.eq.2)then ++ ++c rectangular (slab) boundary conditions ++ ++ aaa=1.d0/cell(1) ++ bbb=1.d0/cell(5) ++ ccc=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(5)*nint(bbb*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(ccc*zzz(i)) ++ ++ enddo ++ ++ else if(imcon.eq.3)then ++ ++c parallelepiped boundary conditions ++ ++ call invert(cell,rcell,det) ++ ++ do i=iatm1,iatm2 ++ ++ ssx=(rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i)) ++ ssy=(rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i)) ++ ssz=(rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i)) ++ ++ xss=ssx-nint(ssx) ++ yss=ssy-nint(ssy) ++ zss=ssz-nint(ssz) ++ ++ xxx(i)=(cell(1)*xss+cell(4)*yss+cell(7)*zss) ++ yyy(i)=(cell(2)*xss+cell(5)*yss+cell(8)*zss) ++ zzz(i)=(cell(3)*xss+cell(6)*yss+cell(9)*zss) ++ ++ enddo ++ ++ else if(imcon.eq.4)then ++ ++c truncated octahedral boundary conditions ++ ++ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. ++ x abs(cell(5)-cell(9)).lt.1.d-6)) call error(idnode,130) ++ ++ aaa=1.d0/cell(1) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) ++ ++ if((abs(xxx(i))+abs(yyy(i))+abs(zzz(i))).ge. ++ x (0.75d0*cell(1)))then ++ ++ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) ++ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) ++ zzz(i)=zzz(i)-0.5d0*sign(cell(1),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ else if(imcon.eq.5)then ++ ++c rhombic dodecahedral boundary conditions ++ ++ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. ++ x abs(cell(9)-cell(1)*rt2).lt.1.d-6)) ++ x call error(idnode,140) ++ ++ aaa=1.d0/cell(1) ++ bbb=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) ++ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(bbb*zzz(i)) ++ ++ if((abs(xxx(i))+abs(yyy(i))+abs(rt2*zzz(i))).ge. ++ x cell(1))then ++ ++ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) ++ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) ++ zzz(i)=zzz(i)-0.5d0*sign(cell(9),zzz(i)) ++ ++ endif ++ ++ enddo ++ ++ else if(imcon.eq.6) then ++ ++c x-y boundary conditions ++ ++ det = cell(1)*cell(5) - cell(2)*cell(4) ++ ++ if(abs(det).lt.1.d-6)call error(idnode,120) ++ ++ det = 1.d0/det ++ ++ rcell(1) = det*cell(5) ++ rcell(2) = -det*cell(2) ++ rcell(4) = -det*cell(4) ++ rcell(5) = det*cell(1) ++ ++ do i=iatm1,iatm2 ++ ++ ssx = rcell(1)*xxx(i) + rcell(4)*yyy(i) ++ ssy = rcell(2)*xxx(i) + rcell(5)*yyy(i) ++ ++ xss = ssx - nint(ssx) ++ yss = ssy - nint(ssy) ++ ++ xxx(i)=cell(1)*xss + cell(4)*yss ++ yyy(i)=cell(2)*xss + cell(5)*yss ++ ++ enddo ++ ++ else if(imcon.eq.7) then ++ ++c hexagonal prism boundary conditions ++ ++ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) ++ x call error(idnode,135) ++ ++ aaa=cell(1)/(rt3*2.d0) ++ bbb=cell(1)/rt3 ++ ccc=rt3/cell(1) ++ ddd=1.d0/cell(9) ++ ++ do i=iatm1,iatm2 ++ ++ yyy(i)=yyy(i)-bbb*nint(ccc*yyy(i)) ++ zzz(i)=zzz(i)-cell(9)*nint(ddd*zzz(i)) ++ ++ if((abs(yyy(i))+abs(rt3*xxx(i))).ge.bbb)then ++ ++ xxx(i)=xxx(i)-rt3*sign(aaa,xxx(i)) ++ yyy(i)=yyy(i)-sign(aaa,yyy(i)) ++ ++ endif ++ ++ enddo ++ ++ endif ++ ++ return ++ end subroutine images ++ ++ subroutine config_write(fname,levcfg,imcon,natms,engcfg) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for writing CONFIG files ++c ++c copyright - daresbury laboratory ++c author - w. smith aug 2007 ++c ++c*********************************************************************** ++ ++ use config_module ++ use setup_module ++ ++ implicit none ++ ++ character*6 fname ++ ++ integer i,natms,levcfg,imcon,nstep ++ real(8) engcfg ++ ++ open(nconf,file=fname,form='formatted') ++ ++ write(nconf,'(80a1)') cfgname ++ write(nconf,'(3i10,1p,g20.12)') levcfg,imcon,natms,engcfg ++ if(imcon.gt.0) write(nconf,'(3f20.12)') cell ++ ++ do i=1,natms ++ ++ write(nconf,'(a8,i10)') atmnam(i),i ++ write(nconf,'(3g20.10)') xxx(i),yyy(i),zzz(i) ++ if(levcfg.gt.0)write(nconf,'(3g20.12)') ++ x vxx(i),vyy(i),vzz(i) ++ if(levcfg.gt.1)write(nconf,'(3g20.12)') ++ x fxx(i),fyy(i),fzz(i) ++ ++ enddo ++ ++ close (nconf) ++ ++ return ++ end subroutine config_write ++ ++ subroutine bomb(idnode,nyr,nmn,ndy) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to set an expiry date in a compiled program ++c ++c copyright - daresbury laboratory ++c author - w. smith oct 2002 ++c ++c*********************************************************************** ++ ++ use setup_module ++ ++ implicit none ++ ++ logical safe ++ integer info(8) ++ character*12 dat,tim,zon ++ integer idnode,nyr,nmn,ndy ++ ++ safe=.true. ++ ++ call date_and_time(dat,tim,zon,info) ++ ++ if(info(1).gt.nyr)then ++ ++ safe=.false. ++ ++ else if(info(1).eq.nyr)then ++ ++ if(info(2).gt.nmn)then ++ ++ safe=.false. ++ ++ else if(info(2).eq.nmn)then ++ ++ if(info(3).ge.ndy)safe=.false. ++ ++ endif ++ ++ endif ++ ++ if(.not.safe)then ++ ++ if(idnode.eq.0)write(nrite,'(a,/,a)') ++ x 'THE EXPIRY DATE OF THIS EXECUTABLE HAS PASSED.', ++ X 'PLEASE CONTACT W.SMITH@DL.AC.UK FOR A NEW LICENCE' ++ ++ call exitcomms() ++ ++ endif ++ ++ return ++ end subroutine bomb ++ ++ subroutine cpy_rtc(nnn,aaa,bbb) ++ ++c********************************************************************** ++c ++c dl_poly subroutine for copying a real array into a complex array ++c of the same dimension ++c ++c copyright daresbury laboratory 1998 ++c author w.smith oct 1998 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,nnn ++ real(8) aaa(*) ++ complex(8) bbb(*) ++ ++ do i=1,nnn ++ ++ bbb(i)=cmplx(aaa(i),0.d0,kind=8) ++ ++ enddo ++ ++ return ++ end subroutine cpy_rtc ++ ++ function duni() ++ ++c********************************************************************* ++c ++c dl_poly random number generator based on the universal ++c random number generator of marsaglia, zaman and tsang ++c (stats and prob. lett. 8 (1990) 35-39.) it must be ++c called once to initialise parameters u,c,cd,cm ++c ++c copyright daresbury laboratory 1992 ++c author - w.smith july 1992 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical new ++ integer ir,jr,i,j,k,l,m,ii,jj ++ real(4) s,t,u,c,cd,cm,uni ++ real(8) duni ++ dimension u(97) ++ save u,c,cd,cm,uni,ir,jr,new ++ data new/.true./ ++ ++ if(new)then ++ ++c initial values of i,j,k must be in range 1 to 178 (not all 1) ++c initial value of l must be in range 0 to 168. ++ ++ i=12 ++ j=34 ++ k=56 ++ l=78 ++c ++ ir=97 ++ jr=33 ++ new=.false. ++ ++ do 200 ii=1,97 ++ s=0.0 ++ t=0.5 ++ do 100 jj=1,24 ++ m=mod(mod(i*j,179)*k,179) ++ i=j ++ j=k ++ k=m ++ l=mod(53*l+1,169) ++ if(mod(l*m,64).ge.32)s=s+t ++ t=0.5*t ++ 100 continue ++ u(ii)=s ++ 200 continue ++ c = 362436.0/16777216.0 ++ cd= 7654321.0/16777216.0 ++ cm=16777213.0/16777216.0 ++ else ++ ++c calculate random number ++ uni=u(ir)-u(jr) ++ if(uni.lt.0.0)uni=uni+1.0 ++ u(ir)=uni ++ ir=ir-1 ++ if(ir.eq.0)ir=97 ++ jr=jr-1 ++ if(jr.eq.0)jr=97 ++ c=c-cd ++ if(c.lt.0.0)c=c+cm ++ uni=uni-c ++ if(uni.lt.0.0)uni=uni+1.0 ++ duni=dble(uni) ++ endif ++ ++ return ++ end function duni ++ ++ subroutine ele_prd(nnn,aaa,bbb,ccc) ++ ++c********************************************************************** ++c ++c dl_poly subroutine for element by element product of ++c a real array (bbb) and a complex array (ccc) ++c ++c copyright daresbury laboratory 1998 ++c author w.smith july 1998 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer i,nnn ++ real(8) bbb(*) ++ complex(8) aaa(*),ccc(*) ++ ++ do i=1,nnn ++ ++ aaa(i)=bbb(i)*ccc(i) ++ ++ enddo ++ ++ return ++ end subroutine ele_prd ++ ++ subroutine gauss(natms,vxx,vyy,vzz) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for constructing velocity arrays ++c with a gaussian distribution of unit variance. ++c ++c based on the Box-Muller method ++c ++c note - this version uses a universal random number ++c generator, which generates pseudo-random numbers between ++c 0 and 1. it is based on the algorithm of marsaglia, zaman ++c and tsang in: stats and prob. lett. 8 (1990) 35-39. ++c ++c copyright daresbury laboratory 2007 ++c author - w. smith nov 2007 ++c ++c********************************************************************* ++ ++ use setup_module ++ ++ implicit none ++ ++ integer natms,i ++ real(8) vxx,vyy,vzz,rrr,rr1,rr2 ++ ++ dimension vxx(natms),vyy(natms),vzz(natms) ++ ++c initialise random number generator ++ ++ rrr=duni() ++ ++c calculate gaussian random numbers ++ ++ do i=1,2*(natms/2),2 ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vxx(i)=rr1*cos(rr2) ++ vxx(i+1)=rr1*sin(rr2) ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vyy(i)=rr1*cos(rr2) ++ vyy(i+1)=rr1*sin(rr2) ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vzz(i)=rr1*cos(rr2) ++ vzz(i+1)=rr1*sin(rr2) ++ ++ enddo ++ if(mod(natms,2).ne.0)then ++ ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vxx(natms)=rr1*cos(rr2) ++ vyy(natms)=rr1*sin(rr2) ++ rr1=sqrt(-2.d0*log(duni())) ++ rr2=2.d0*pi*duni() ++ vzz(natms)=rr1*cos(rr2) ++ ++ endif ++ ++ return ++ end subroutine gauss ++ ++ subroutine invert(a,b,d) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine to invert a 3 * 3 matrix using cofactors ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith april 1992 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ real(8) a,b,d,r ++ ++ dimension a(9),b(9) ++ ++c calculate adjoint matrix ++ b(1)=a(5)*a(9)-a(6)*a(8) ++ b(2)=a(3)*a(8)-a(2)*a(9) ++ b(3)=a(2)*a(6)-a(3)*a(5) ++ b(4)=a(6)*a(7)-a(4)*a(9) ++ b(5)=a(1)*a(9)-a(3)*a(7) ++ b(6)=a(3)*a(4)-a(1)*a(6) ++ b(7)=a(4)*a(8)-a(5)*a(7) ++ b(8)=a(2)*a(7)-a(1)*a(8) ++ b(9)=a(1)*a(5)-a(2)*a(4) ++ ++c calculate determinant ++ d=a(1)*b(1)+a(4)*b(2)+a(7)*b(3) ++ r=0.d0 ++ if(abs(d).gt.0.d0)r=1.d0/d ++ ++c complete inverse matrix ++ b(1)=r*b(1) ++ b(2)=r*b(2) ++ b(3)=r*b(3) ++ b(4)=r*b(4) ++ b(5)=r*b(5) ++ b(6)=r*b(6) ++ b(7)=r*b(7) ++ b(8)=r*b(8) ++ b(9)=r*b(9) ++ ++ return ++ end subroutine invert ++ ++ subroutine jacobi(a,v,n) ++ ++c*********************************************************************** ++c ++c diagonalisation of real symmetric matices by jacobi method ++c ++c input parameters: ++c ++c a(n,n) is the matrix to be diagonalised ++c v(n,n) is the eigenvector matrix ++c n is the dimension of the matrices ++c ++c jacobi processes lower triangle only (upper triangle unchanged) ++c ++c variable rho sets absolute tolerance on convergence ++c variable tes is a moving tolerance that diminishes ++c on each pass until at true convergence tesdlrpot) .or. (ngrid-4 /= nint(cutpot/delpot))) then ++ ++ if (idnode == 0) write(nrite,"( ++ x 'expected radial increment : ',1p,e15.7,/, ++ x 'TABLE radial increment : ',1p,e15.7,/,/, ++ x 'expected number of grid points : ',0p,i10,/, ++ x 'grid points in TABLE : ',i10)") ++ x dlrpot, delpot, mxgrid, ngrid ++ ++ call error(idnode,22) ++ ++ endif ++ ++ if(cutpot.lt.rcut) call error(idnode,504) ++ if(abs(1.d0-(delpot/dlrpot)).gt.1.0d-8) then ++ if(idnode.eq.0) write(nrite, ++ x "(/,' TABLE arrays resized for mxgrid=',i10)") mxgrid ++ endif ++ ++c read potential arrays for all pairs ++ ++ do ivdw=1,ntpvdw ++ ++c read potential arrays if potential not already defined ++ ++ if(ltpvdw(ivdw).eq.0)then ++ ++c read pair potential labels and long range corrections ++ ++ call getrec(safe,idnode,ntable) ++ if(.not.safe)call abort_table_read(idnode,ntable) ++ ++ call getword(atom1,record,8,lenrec) ++ call getword(atom2,record,8,lenrec) ++ prmvdw(ivdw,1)=dblstr(record,lenrec,idum) ++ prmvdw(ivdw,2)=dblstr(record,lenrec,idum) ++ ++ katom1=0 ++ katom2=0 ++ ++ do jtpatm=1,ntpatm ++ ++ if(atom1.eq.unqatm(jtpatm))katom1=jtpatm ++ if(atom2.eq.unqatm(jtpatm))katom2=jtpatm ++ ++ enddo ++ ++ if(katom1.eq.0.or.katom2.eq.0)then ++ if(idnode.eq.0) ++ x write(nrite,'(a)') '****',atom1,'***',atom2,'****' ++ call error(idnode,81) ++ endif ++ ++ keyvdw=loc2(katom1,katom2) ++ ++ if(lstvdw(keyvdw).ne.ivdw) call error(idnode,23) ++ ++c read potential arrays ++ ++ if(mxbuff.lt.ngrid) then ++ ++ if(idnode.eq.0) ++ x write(nrite,*) 'mxbuff must be >=',ngrid,' in fortab' ++ call error(idnode,48) ++ ++ endif ++ ++c read in potential arrays ++ ++ do i=1,(ngrid+3)/4 ++ ++ l=min(4,ngrid-(i-1)*4) ++ if (idnode == 0) then ++ read(unit=ntable, fmt=*, end=100) ++ x (buffer((i-1)*4+j),j=1,l) ++ else ++ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 ++ endif ++ ++ enddo ++ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) ++ ++c reconstruct arrays using 3pt interpolation ++ ++ rdr=1.d0/delpot ++ vvv(1,ivdw)=1.d0 ++ ggg(1,ivdw)=0.d0 ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ vk0=buffer(l) ++ vk1=buffer(l+1) ++ vk2=buffer(l+2) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ vvv(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 ++ ++ enddo ++ ++c read in force arrays ++ ++ do i=1,(ngrid+3)/4 ++ ++ l=min(4,ngrid-(i-1)*4) ++ if (idnode == 0) then ++ read(unit=ntable, fmt=*, end=100) ++ x (buffer((i-1)*4+j),j=1,l) ++ else ++ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 ++ endif ++ ++ enddo ++ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) ++ ++c reconstruct ggg arrays using 3pt interpolation ++ ++ do i=2,mxgrid ++ ++ rrr=dble(i)*dlrpot ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ vk0=buffer(l) ++ vk1=buffer(l+1) ++ vk2=buffer(l+2) ++ ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ ++ ggg(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c convert to internal units ++ ++ do k=1,ntpvdw ++ ++ if(ltpvdw(k).eq.0)then ++ ++ do i=1,mxgrid ++ ++ vvv(i,k)=vvv(i,k)*engunit ++ ggg(i,k)=ggg(i,k)*engunit ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++ if(idnode.eq.0)close (ntable) ++ ++ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') ++ x 'potential tables read from TABLE file' ++ ++ return ++ ++c end of file error exit ++ ++ 100 call abort_table_read(idnode,ntable) ++ ++ end subroutine fortab ++ ++ subroutine abort_table_read(idnode,ntable) ++ ++c*********************************************************************** ++c ++c dl_poly error exit subroutine for reading TABLE file ++c ++c copyright - daresbury laboratory ++c author - w. smith sept 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ integer idnode,ntable ++ ++ if(idnode.eq.0)close (ntable) ++ ++ call error(idnode,24) ++ ++ end subroutine abort_table_read ++ ++ subroutine srfrce ++ x (lsolva,lfree,lghost,iatm,ik,engsrp,virsrp,rcut,dlrpot) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating short range force and ++c potential energy terms using verlet neighbour list ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c ++c version 3 ++c author - t. forester june 1993 ++c stress tensor added t.forester may 1994 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer iatm,ik,m,jatm,k,l,kkk ++ real(8) engsrp,virsrp,rcut,dlrpot ++ real(8) ab,rrr,rsq,ppp,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,gamma ++ real(8) fi,rcsq,rdr,ai,aj,fx,fy,fz,omega ++ real(8) strs(6),strs_loc(6) ++ ++ dimension fi(3) ++ ++CDIR$ CACHE_ALIGN fi ++ ++ lskip=(lfree.or.lghost) ++ if(lmetadyn)idrive=driven(ltype(iatm)) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c interpolation spacing ++ ++ rdr=1.d0/dlrpot ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engsrp=0.d0 ++ virsrp=0.d0 ++ ++c store forces for iatm ++ ++ ai=dble(ltype(iatm)) ++ fi(1)=fxx(iatm) ++ fi(2)=fyy(iatm) ++ fi(3)=fzz(iatm) ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ jatm=ilist(m) ++ if(lmetadyn)jdrive=driven(ltype(jatm)) ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ aj=dble(ltype(jatm)) ++ ++ if(ai.gt.aj) then ++ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 ++ else ++ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 ++ endif ++ ++ k=lstvdw(int(ab)) ++ ++ if((ltpvdw(k).lt.100).and.(abs(vvv(1,k)).gt.1.d-10))then ++ ++c apply truncation of potential ++ ++ rsq=rsqdf(m) ++ ++ if(rcsq.gt.rsq)then ++ ++ rrr=sqrt(rsq) ++ l=int(rrr*rdr) ++ ppp=rrr*rdr-dble(l) ++ ++ if(l.eq.0)then ++ ++ omega=vvv(1,k) ++ gamma=ggg(1,k) ++ ++ else ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq ++ ++ endif ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre-omega ++ vdw_vir=vdw_vir+gamma*rsq ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ vdw_fre=vdw_fre+omega ++ vdw_vir=vdw_vir-gamma*rsq ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential and virial ++ ++ engsrp=engsrp+omega ++ virsrp=virsrp-gamma*rsq ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega ++ ++c calculate forces ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fi(1)=fi(1)+fx ++ fi(2)=fi(2)+fy ++ fi(3)=fi(3)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-gamma*rsq ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c load temps back to fxx(iatm) etc ++ ++ fxx(iatm)=fi(1) ++ fyy(iatm)=fi(2) ++ fzz(iatm)=fi(3) ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine srfrce ++ ++ subroutine lrcorrect ++ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, ++ x ntpatm,ntpvdw,elrc,engunit,virlrc,rcut,volm) ++ ++c************************************************************************* ++c ++c DL_POLY subroutine to evaluate long-range corrections to ++c pressure and energy in a periodic system. ++c ++c copyright daresbury laboratory 1993 ++c author - t. forester may 1993 ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*************************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=10 ++ logical lsolva,lfree,lghost ++ integer idnode,imcon,keyfce,natms,ntpatm,i,ka,ntpvdw ++ integer ivdw,j,k,it,jt,kt,fail ++ real(8) natyp,nbtyp,nctyp,ndtyp,nafrz,nbfrz,ncfrz,ndfrz ++ real(8) elrc,engunit,virlrc,rcut,volm,twopi,eadd,padd ++ real(8) denprd,aaa,bbb,ccc,ddd,eee,eps,sig,rr0,ann,amm ++ real(8) denprd1,denprd2,denprd3,denprdf ++ integer, allocatable :: numtyp_sol0(:,:),numfrz_sol0(:,:) ++ integer, allocatable :: numtyp_sol1(:,:),numfrz_sol1(:,:) ++ integer, allocatable :: numtyp_sol2(:,:),numfrz_sol2(:,:) ++ integer, allocatable :: numtyp_fre(:,:),numfrz_fre(:,:) ++ real(8), allocatable :: elrc_sol0(:),elrc_exc0(:) ++ ++ dimension fail(nnn) ++ ++ twopi=2.0d0*pi ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ allocate (numtyp_fre(mxatyp,0:2),stat=fail(1)) ++ allocate (numfrz_fre(mxatyp,0:2),stat=fail(2)) ++ allocate (elrc_exc0(mxtmls_exc2),stat=fail(3)) ++ ++ endif ++ ++ if(lsolva)then ++ ++ allocate (elrc_sol0(mxtmls_sol2),stat=fail(4)) ++ allocate (numtyp_sol0(mxatyp,mxtmls),stat=fail(5)) ++ allocate (numfrz_sol0(mxatyp,mxtmls),stat=fail(6)) ++ ++ if(lghost)then ++ ++ allocate (numtyp_sol1(mxatyp,mxtmls),stat=fail(7)) ++ allocate (numfrz_sol1(mxatyp,mxtmls),stat=fail(8)) ++ allocate (numtyp_sol2(mxatyp,mxtmls),stat=fail(9)) ++ allocate (numfrz_sol2(mxatyp,mxtmls),stat=fail(10)) ++ ++ endif ++ ++ endif ++ ++ do i=1,nnn ++ if(fail(i).ne.0)call error(idnode,1015) ++ enddo ++ ++c initalise counter arrays ++ ++ do i=1,ntpatm ++ ++ numtyp(i)=0 ++ numfrz(i)=0 ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ numtyp_fre(:,:)=0 ++ numfrz_fre(:,:)=0 ++ ++ endif ++ ++ if(lsolva)then ++ ++ numtyp_sol0(:,:)=0 ++ numfrz_sol0(:,:)=0 ++ ++ if(lghost)then ++ ++ numtyp_sol1(:,:)=0 ++ numfrz_sol1(:,:)=0 ++ numtyp_sol2(:,:)=0 ++ numfrz_sol2(:,:)=0 ++ ++ endif ++ ++ endif ++ ++c evaluate number density in system ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp(ka)=numtyp(ka)+1 ++ if(lstfrz(i).ne.0)numfrz(ka)=numfrz(ka)+1 ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp_fre(ka,atm_fre(i))=numtyp_fre(ka,atm_fre(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_fre(ka,atm_fre(i))=numfrz_fre(ka,atm_fre(i))+1 ++ ++ enddo ++ ++ endif ++ ++ if(lsolva)then ++ ++ if(lghost)then ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ ++ if(atm_fre(i).eq.0)then ++ ++ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 ++ ++ elseif(atm_fre(i).eq.1)then ++ ++ numtyp_sol1(ka,atmolt(i))=numtyp_sol1(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol1(ka,atmolt(i))=numfrz_sol1(ka,atmolt(i))+1 ++ ++ elseif(atm_fre(i).eq.2)then ++ ++ numtyp_sol2(ka,atmolt(i))=numtyp_sol2(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol2(ka,atmolt(i))=numfrz_sol2(ka,atmolt(i))+1 ++ ++ endif ++ ++ enddo ++ ++ else ++ ++ do i=1,natms ++ ++ ka=ltype(i) ++ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 ++ if(lstfrz(i).ne.0) ++ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c number densities ++ ++ do i=1,ntpatm ++ dens(i)=dble(numtyp(i))/volm ++ enddo ++ ++c long range corrections to energy and pressure ++ ++ elrc=0.d0 ++ elrc2=0.d0 ++ virlrc=0.d0 ++ virlrc2=0.d0 ++ denprdf=0.d0 ++ volm_sav=0.d0 ++ elrc_fre=0.d0 ++ vlrc_fre=0.d0 ++ ++ if(imcon.ne.0.and.imcon.ne.6.and.ntpvdw.gt.0) then ++ ++ if(mod(keyfce,2).eq.1) then ++ ++ ivdw=0 ++ ++ do i=1,ntpatm ++ ++ do j=1,i ++ ++ eadd=0.d0 ++ padd=0.d0 ++ ++ ivdw=ivdw+1 ++ k=lstvdw(ivdw) ++ ++ if(ltpvdw(k).eq.0) then ++ ++c tabulated potential ++ ++ eadd=prmvdw(k,1) ++ padd=-prmvdw(k,2) ++ ++ else if(ltpvdw(k).eq.1) then ++ ++c 12-6 potential ++ ++ aaa=prmvdw(k,1) ++ bbb=prmvdw(k,2) ++ ++ eadd=aaa/(9.d0*rcut**9)-bbb/(3.d0*rcut**3) ++ padd=12.d0*aaa/(9.d0*rcut**9)-6.d0*bbb/(3.d0*rcut**3) ++ ++ else if(ltpvdw(k).eq.2) then ++ ++c Lennard Jones potential ++ ++ eps=prmvdw(k,1) ++ sig=prmvdw(k,2) ++ ++ eadd=4.d0*eps*(sig**12/(9.d0*rcut**9)- ++ x sig**6/(3.d0*rcut**3)) ++ padd=4.d0*eps*(12.d0*sig**12/(9.d0*rcut**9)- ++ x 2.d0*sig**6/(rcut**3)) ++ ++ else if(ltpvdw(k).eq.3) then ++ ++c n - m potential ++ ++ eps=prmvdw(k,1) ++ ann=prmvdw(k,2) ++ amm=prmvdw(k,3) ++ rr0=prmvdw(k,4) ++ ++ eadd=eps/(ann-amm)*(amm*rr0**ann/((ann-3.d0)* ++ x rcut**(ann-3.d0))-ann*rr0**amm/((amm-3.0d0)* ++ x rcut**(amm-3.d0))) ++ padd=eps/(ann-amm)*ann*amm*(rr0**ann/((ann-3.d0)* ++ x rcut**(ann-3.d0))-rr0**amm/((amm-3.0d0)* ++ x rcut**(amm-3.d0))) ++ ++ else if(ltpvdw(k).eq.4) then ++ ++c buckingham exp - 6 potential ++ ++ ccc=prmvdw(k,3) ++ ++ eadd=-ccc/(3.d0*rcut**3) ++ padd=-2.d0*ccc/(rcut**3) ++ ++ else if(ltpvdw(k).eq.5) then ++ ++c born huggins meyer exp -6 - 8 potential ++ ++ ddd=prmvdw(k,4) ++ eee=prmvdw(k,5) ++ ++ eadd=-ddd/(3.d0*rcut**3)-eee/(5.d0*rcut**5) ++ padd=-2.d0*ddd/(rcut**3)-8.d0*eee/(5.d0*rcut**5) ++ ++ else if(ltpvdw(k).eq.6) then ++ ++c hydrogen bond 12 - 10 potential ++ ++ aaa=prmvdw(k,1) ++ bbb=prmvdw(k,2) ++ ++ eadd=aaa/(9.d0*rcut**9)-bbb/(7.d0*rcut**7) ++ padd=12.d0*aaa/(9.d0*rcut**9)-1.d1*bbb/(7.d0*rcut**7) ++ ++ endif ++ ++ if(i.ne.j) then ++ ++ eadd=eadd*2.d0 ++ padd=padd*2.d0 ++ ++ endif ++ ++ if(.not.(lfree.or.lghost))then ++ ++ denprd=twopi*(dble(numtyp(i))*dble(numtyp(j))- ++ x dble(numfrz(i))*dble(numfrz(j)))/volm**2 ++ ++ else ++ ++ nafrz=dble(numfrz_fre(i,0)+numfrz_fre(i,1)) ++ natyp=dble(numtyp_fre(i,0)+numtyp_fre(i,1)) ++ nbfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,1)) ++ nbtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,1)) ++ ncfrz=dble(numfrz_fre(i,0)+numfrz_fre(i,2)) ++ nctyp=dble(numtyp_fre(i,0)+numtyp_fre(i,2)) ++ ndfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,2)) ++ ndtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,2)) ++ ++ if(lghost)then ++ ++ denprd=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 ++ denprd3=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 ++ ++ elseif(lfree)then ++ ++ denprd1=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 ++ denprd2=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 ++ denprd=lambda1*denprd1+lambda2*denprd2 ++ denprd3=lambda2*denprd1+lambda1*denprd2 ++ denprdf=denprd2-denprd1 ++ ++ endif ++ ++ endif ++ ++ elrc=elrc+volm*denprd*eadd ++ virlrc=virlrc-denprd*padd*volm ++ ++ if(lfree.or.lghost)then ++ ++ elrc2=elrc2+volm*denprd3*eadd ++ virlrc2=virlrc2-denprd3*padd*volm ++ if(lfree)then ++ elrc_fre=elrc_fre+volm*denprdf*eadd ++ vlrc_fre=vlrc_fre-denprdf*padd*volm ++ endif ++ ++ endif ++ ++ if(lsolva)then ++ ++ elrc_sol0(:)=0.d0 ++ if(lghost)elrc_exc0(:)=0.d0 ++ ++ do it=1,mxtmls ++ ++ do jt=1,mxtmls ++ ++ kt=loc2(it,jt) ++ ++ if(lghost)then ++ ++ natyp=dble(numtyp_sol0(i,it)+numtyp_sol1(i,it)) ++ nbtyp=dble(numtyp_sol0(j,jt)+numtyp_sol1(j,jt)) ++ nafrz=dble(numfrz_sol0(i,it)+numfrz_sol1(i,it)) ++ nbfrz=dble(numfrz_sol0(j,jt)+numfrz_sol1(j,jt)) ++ ++ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* ++ x nbtyp-nafrz*nbfrz)/volm**2 ++ ++ nctyp=dble(numtyp_sol0(i,it)+numtyp_sol2(i,it)) ++ ndtyp=dble(numtyp_sol0(j,jt)+numtyp_sol2(j,jt)) ++ ncfrz=dble(numfrz_sol0(i,it)+numfrz_sol2(i,it)) ++ ndfrz=dble(numfrz_sol0(j,jt)+numfrz_sol2(j,jt)) ++ ++ elrc_exc0(kt)=elrc_exc0(kt)+twopi*(nctyp* ++ x ndtyp-ncfrz*ndfrz)/volm**2 ++ ++ else ++ ++ natyp=dble(numtyp_sol0(i,it)) ++ nbtyp=dble(numtyp_sol0(j,jt)) ++ nafrz=dble(numfrz_sol0(i,it)) ++ nbfrz=dble(numfrz_sol0(j,jt)) ++ ++ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* ++ x nbtyp-nafrz*nbfrz)/volm**2 ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(lghost)then ++ ++ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) ++ elrc_exc(:)=elrc_exc(:)+volm*eadd*elrc_exc0(:) ++ ++ else ++ ++ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++ enddo ++ ++ if(lfree.or.lghost)then ++ ++ elrc_sav=elrc ++ elrc2_sav=elrc2 ++ virlrc_sav=virlrc ++ virlrc2_sav=virlrc2 ++ elrc_fre_sav=elrc_fre ++ vlrc_fre_sav=vlrc_fre ++ ++ endif ++ ++ volm_sav=volm ++ ++ if(lghost)then ++ ++ elrc_sol_sav(:)=elrc_sol(:) ++ elrc_exc_sav(:)=elrc_exc(:) ++ ++ elseif(lsolva)then ++ ++ elrc_sol_sav(:)=elrc_sol(:) ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ if(idnode.eq.0)then ++ ++ write(nrite, ++ x "(/,/,'long range correction for: vdw energy ',e15.6,/, ++ x 25x,': vdw pressure',e15.6)")elrc/engunit, ++ x prsunt*virlrc/(-3.d0*volm) ++ ++ if(lghost) ++ x write(nrite, ++ x "(/,/,'long range correction for: vdw energy ',e15.6,/, ++ x 25x,': vdw pressure',e15.6)")elrc2/engunit, ++ x prsunt*virlrc2/(-3.d0*volm) ++ ++ endif ++ ++c deallocate work arrays ++ ++ if(lfree.or.lghost) ++ x deallocate (elrc_exc0,numtyp_fre,numfrz_fre,stat=fail(1)) ++ ++ if(lsolva)then ++ ++ deallocate (elrc_sol0,numtyp_sol0,numfrz_sol0,stat=fail(2)) ++ ++ if(lghost)then ++ ++ deallocate (numtyp_sol1,numfrz_sol1,stat=fail(3)) ++ deallocate (numtyp_sol2,numfrz_sol2,stat=fail(4)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine lrcorrect ++ ++ ++ subroutine srfrceneu ++ x (lsolva,lfree,lghost,ik,engsrp,virsrp,dlrpot,rcut) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for calculating short range force and ++c potential energy terms using verlet neighbour list ++c neutral group implementation ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory 1992 ++c author - w. smith march 1992 ++c ++c neutral groups ++c author - t. forester march 1994 ++c ++c adapted - p.-a. cazade oct 2007: solvation, free energy etc ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive ++ integer ik,m,iatm,jatm,l,k,kkk ++ real(8) engsrp,virsrp,dlrpot,rcut,rcsq,fx,fy,fz,omega,omega_exc ++ real(8) rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2,rdlpot,gamma ++ real(8) ai,aj,ak,rsq,strs(6),strs_loc(6) ++ ++ lskip=(lfree.or.lghost) ++ ++c set cutoff condition for pair forces ++ ++ rcsq=rcut**2 ++ ++c reciprocal of interpolation spacing ++ ++ rdlpot=1.d0/dlrpot ++ ++c initialise stress tensor accumulators ++ ++ strs(:)=0.d0 ++ strs_loc(:)=0.d0 ++ ++c initialise potential energy and virial ++ ++ engsrp=0.d0 ++ virsrp=0.d0 ++ ++c start of primary loop for forces evaluation ++ ++ do m=1,ik ++ ++c atomic and potential function indices ++ ++ iatm=ilist(m) ++ jatm=jlist(m) ++ ++c metadynamics local definitions ++ ++ if(lmetadyn)then ++ ++ idrive=driven(ltype(iatm)) ++ jdrive=driven(ltype(jatm)) ++ ++ endif ++ ++ if(lskip)then ++ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle ++ endif ++ ++ aj=ltype(jatm) ++ ai=ltype(iatm) ++ ++ if(ai.gt.aj) then ++ ak=(ai*(ai-1.d0)*0.5d0+aj+0.5d0) ++ else ++ ak=(aj*(aj-1.d0)*0.5d0+ai+0.5d0) ++ endif ++ k=lstvdw(int(ak)) ++ ++ if(abs(vvv(1,k)).gt.1.d-10)then ++ ++ rsq=rsqdf(m) ++ ++ if(rsq.lt.rcsq) then ++ ++ rrr=sqrt(rsq) ++ ++c determine interpolation panel for force arrays ++ ++ l=int(rrr*rdlpot) ++ ppp=rrr*rdlpot-dble(l) ++ ++c calculate interaction energy using 3-point interpolation ++ ++ vk0=vvv(l,k) ++ vk1=vvv(l+1,k) ++ vk2=vvv(l+2,k) ++ t1=vk0+(vk1-vk0)*ppp ++ t2=vk1+(vk2-vk1)*(ppp-1.0d0) ++ omega=t1+(t2-t1)*ppp*0.5d0 ++ ++c calculate forces using 3-point interpolation ++ ++ gk0=ggg(l,k) ++ gk1=ggg(l+1,k) ++ gk2=ggg(l+2,k) ++ t1=gk0+(gk1-gk0)*ppp ++ t2=gk1+(gk2-gk1)*(ppp-1.0d0) ++ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq ++ ++c set selection control ++ ++ lselect=.true. ++ ++c set double index ++ ++ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) ++ ++ if(lghost)then ++ ++c selected excitation option ++ ++ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then ++ ++c reset selection control ++ ++ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) ++ ++ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega ++ ++ endif ++ ++ elseif(lfree)then ++ ++c selected free energy option ++ ++ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then ++ ++c set hamiltonian mixing parameter ++ ++ omega=lambda1*omega ++ gamma=lambda1*gamma ++ ++ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then ++ ++c set hamiltonian mixing parameter ++ ++ omega=lambda2*omega ++ gamma=lambda2*gamma ++ ++ endif ++ ++ endif ++ ++ if(lselect)then ++ ++c calculate potential energy and virial ++ ++ engsrp=omega+engsrp ++ virsrp=virsrp-gamma*rsq ++ ++ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega ++ ++ fx=gamma*xdf(m) ++ fy=gamma*ydf(m) ++ fz=gamma*zdf(m) ++ ++ fxx(iatm)=fxx(iatm)+fx ++ fyy(iatm)=fyy(iatm)+fy ++ fzz(iatm)=fzz(iatm)+fz ++ ++ fxx(jatm)=fxx(jatm)-fx ++ fyy(jatm)=fyy(jatm)-fy ++ fzz(jatm)=fzz(jatm)-fz ++ ++c calculate stress tensor ++ ++ strs(1)=strs(1)+xdf(m)*fx ++ strs(2)=strs(2)+xdf(m)*fy ++ strs(3)=strs(3)+xdf(m)*fz ++ strs(4)=strs(4)+ydf(m)*fy ++ strs(5)=strs(5)+ydf(m)*fz ++ strs(6)=strs(6)+zdf(m)*fz ++ ++ endif ++ ++c metadynamics local parameters ++ ++ if(lmetadyn.and.(idrive.or.jdrive))then ++ ++c local energy and virial ++ ++ eng_loc=eng_loc+omega ++ vir_loc=vir_loc-gamma*rsq ++ ++c local forces ++ ++ fxx_loc(iatm)=fxx_loc(iatm)+fx ++ fyy_loc(iatm)=fyy_loc(iatm)+fy ++ fzz_loc(iatm)=fzz_loc(iatm)+fz ++ ++ fxx_loc(jatm)=fxx_loc(jatm)-fx ++ fyy_loc(jatm)=fyy_loc(jatm)-fy ++ fzz_loc(jatm)=fzz_loc(jatm)-fz ++ ++c local stress tensor ++ ++ strs_loc(1)=strs_loc(1)+xdf(m)*fx ++ strs_loc(2)=strs_loc(2)+xdf(m)*fy ++ strs_loc(3)=strs_loc(3)+xdf(m)*fz ++ strs_loc(4)=strs_loc(4)+ydf(m)*fy ++ strs_loc(5)=strs_loc(5)+ydf(m)*fz ++ strs_loc(6)=strs_loc(6)+zdf(m)*fz ++ ++ endif ++ ++ endif ++ ++ endif ++ ++ enddo ++ ++c complete stress tensor ++ ++ stress(1)=stress(1)+strs(1) ++ stress(2)=stress(2)+strs(2) ++ stress(3)=stress(3)+strs(3) ++ stress(4)=stress(4)+strs(2) ++ stress(5)=stress(5)+strs(4) ++ stress(6)=stress(6)+strs(5) ++ stress(7)=stress(7)+strs(3) ++ stress(8)=stress(8)+strs(5) ++ stress(9)=stress(9)+strs(6) ++ ++ if(lmetadyn)then ++ ++ stress_loc(1)=stress_loc(1)+strs_loc(1) ++ stress_loc(2)=stress_loc(2)+strs_loc(2) ++ stress_loc(3)=stress_loc(3)+strs_loc(3) ++ stress_loc(4)=stress_loc(4)+strs_loc(2) ++ stress_loc(5)=stress_loc(5)+strs_loc(4) ++ stress_loc(6)=stress_loc(6)+strs_loc(5) ++ stress_loc(7)=stress_loc(7)+strs_loc(3) ++ stress_loc(8)=stress_loc(8)+strs_loc(5) ++ stress_loc(9)=stress_loc(9)+strs_loc(6) ++ ++ endif ++ ++ return ++ end subroutine srfrceneu ++ ++ end module vdw_module +diff -urN dl_class_1.9.orig/srcmod/vv_motion_module.f dl_class_1.9/srcmod/vv_motion_module.f +--- dl_class_1.9.orig/srcmod/vv_motion_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_motion_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,3031 @@ ++ module vv_motion_module ++ ++c*********************************************************************** ++c ++c dl_poly module for velocity verlet integration schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module,only : lmetadyn ++ use property_module ++ use setup_module ++ use shake_module ++ use site_module ++ use utility_module ++ ++ contains ++ ++ subroutine rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration. rattle algorithm ++c must be used in conjunction with integration algorithms ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical check,safe,lshmov ++ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,esig ++ real(8) txx,tyy,tzz,xxt,yyt,zzt,stresh,dx,dy,dz,dis,omega2 ++ real(8) strs1,strs2,strs3,strs5,strs6,strs9,amti,amtj,gamma ++ real(8) gammi,gammj,dli,dlj ++ ++ dimension stresh(9) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ ++c constraint virial ++ ++ vircon=0.d0 ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c test size of work arrays ++ ++ check=.true. ++ if(mxxdf.lt.nscons)check=.false. ++ if(mxnode.gt.1)call gstate(check) ++ if(.not.check)call error(idnode,412) ++ ++c application of constraint (shake) algorithm ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++c set bond parameter ++ ++ dx=dxt(k) ++ dy=dyt(k) ++ dz=dzt(k) ++ dis=prmcon(listcon(k,1)) ++ esig=max(esig,abs(dx*dx+dy*dy+dz*dz-dis*dis)/dis) ++ ++ enddo ++ ++ esig=esig*0.5d0 ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c bypass calculations if all tolerances satisfied ++ ++ if(.not.safe)then ++ ++c initialise increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c set constraint parameters ++ ++ dis=prmcon(listcon(k,1)) ++ omega2= dis*dis ++ amti= tstep*rmass(i) ++ amtj=-tstep*rmass(j) ++ ++c constraint force parameter ++ ++ dx=dxt(k) ++ dy=dyt(k) ++ dz=dzt(k) ++ ++ gamma=(omega2-(dx*dx+dy*dy+dz*dz))/ ++ x (-tstep*(amti-amtj)*(dxx(k)*dx+dyy(k)*dy+dzz(k)*dz)) ++ ++c accumulate bond virial ++ ++ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1-gamma*dxx(k)*dxx(k) ++ strs2=strs2-gamma*dxx(k)*dyy(k) ++ strs3=strs3-gamma*dxx(k)*dzz(k) ++ strs5=strs5-gamma*dyy(k)*dyy(k) ++ strs6=strs6-gamma*dyy(k)*dzz(k) ++ strs9=strs9-gamma*dzz(k)*dzz(k) ++ ++c improve approximate constraint force ++ ++ gammi=-0.5d0*gamma*amti ++ xxt(i)=xxt(i)+dxx(k)*gammi ++ yyt(i)=yyt(i)+dyy(k)*gammi ++ zzt(i)=zzt(i)+dzz(k)*gammi ++ ++ gammj=-0.5d0*gamma*amtj ++ xxt(j)=xxt(j)+dxx(k)*gammj ++ yyt(j)=yyt(j)+dyy(k)*gammj ++ zzt(j)=zzt(j)+dzz(k)*gammj ++ ++ enddo ++ ++c sum up constraint forces across nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov)call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.0d0/dble(listme(i)) ++ dlj=1.0d0/dble(listme(j)) ++ ++ xxx(i)=xxx(i)+tstep*dli*xxt(i) ++ yyy(i)=yyy(i)+tstep*dli*yyt(i) ++ zzz(i)=zzz(i)+tstep*dli*zzt(i) ++ xxx(j)=xxx(j)+tstep*dlj*xxt(j) ++ yyy(j)=yyy(j)+tstep*dlj*yyt(j) ++ zzz(j)=zzz(j)+tstep*dlj*zzt(j) ++ ++ vxx(i)=vxx(i)+dli*xxt(i) ++ vzz(i)=vzz(i)+dli*zzt(i) ++ vyy(i)=vyy(i)+dli*yyt(i) ++ vxx(j)=vxx(j)+dlj*xxt(j) ++ vyy(j)=vyy(j)+dlj*yyt(j) ++ vzz(j)=vzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit for non-convergence ++ ++ if(.not.safe)return ++ ++c complete stress tensor ++ ++ stresh(1)=strs1 ++ stresh(2)=strs2 ++ stresh(3)=strs3 ++ stresh(4)=strs2 ++ stresh(5)=strs5 ++ stresh(6)=strs6 ++ stresh(7)=strs3 ++ stresh(8)=strs6 ++ stresh(9)=strs9 ++ ++c splice coordinate arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(stresh,9,buffer) ++ call splice ++ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) ++ call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdrattle_r ++ ++ subroutine rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ ++c********************************************************************* ++c ++c dl_poly subroutine for applying a bond constraints to ++c the velocities of the constrained atoms using the rattle ++c procedure (replicated data version) ++c ++c copyright - daresbury laboratory ++c author w.smith october 2002 ++c ++c********************************************************************* ++ ++ implicit none ++ ++ logical safe ++ integer idnode,mxnode,natms,nscons,icyc ++ integer i,j,k ++ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt ++ real(8) esig,amti,amtj,gamma,gammi,gammj,dli,dlj,tolvel ++ ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ ++c constraint convergence tolerance ++ ++ tolvel=tolnce/tstep ++ ++c start of rattle cycle ++ ++ icyc=0 ++ safe=.false. ++ ++ do while(.not.safe.and.icyc.lt.mxshak) ++ ++ icyc=icyc+1 ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate velocity constraint corrections ++ ++ esig=0.d0 ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ amti= 0.5d0*tstep*rmass(i) ++ amtj=-0.5d0*tstep*rmass(j) ++ ++c calculate constraint force parameter ++ ++ gamma=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ ++ x dzz(k)*(vzz(i)-vzz(j)))/((amti-amtj)* ++ x (dxx(k)**2+dyy(k)**2+dzz(k)**2)) ++ esig=max(esig,abs(gamma)) ++ ++c improve approximate constraint force ++ ++ gammi=-gamma*amti ++ xxt(i)=xxt(i)+gammi*dxx(k) ++ yyt(i)=yyt(i)+gammi*dyy(k) ++ zzt(i)=zzt(i)+gammi*dzz(k) ++ gammj=-gamma*amtj ++ xxt(j)=xxt(j)+gammj*dxx(k) ++ yyt(j)=yyt(j)+gammj*dyy(k) ++ zzt(j)=zzt(j)+gammj*dzz(k) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolvel) ++ if(mxnode.gt.1)then ++ ++ call gstate(safe) ++ ++ endif ++ ++c terminate iteration if constraints satisfied ++ ++ if(.not.safe)then ++ ++c transport velocity adjustments to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++c update velocities ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ vxx(i)=vxx(i)+dli*xxt(i) ++ vyy(i)=vyy(i)+dli*yyt(i) ++ vzz(i)=vzz(i)+dli*zzt(i) ++ dlj=1.d0/dble(listme(j)) ++ vxx(j)=vxx(j)+dlj*xxt(j) ++ vyy(j)=vyy(j)+dlj*yyt(j) ++ vzz(j)=vzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c error exit if rattle fails ++ ++ if(.not.safe)return ++ ++c splice velocity arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++ return ++ end subroutine rdrattle_v ++ ++ subroutine nvevv_1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nve ensemble ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,i,j,k ++ integer iatm0,iatm1 ++ real(8) tstep,engke,tolnce,vircon ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1980) ++ enddo ++ ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c update velocities for first and second stages ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strkin(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvevv_1 ++ ++ subroutine nvtvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,taut,sigma,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,taut,sigma,engke,tolnce,vircon,chit ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,1990) ++ enddo ++ ++ endif ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c first pass of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++ engke=engke*chit**2 ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz, ++ x buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_b1 ++ ++ subroutine nvtvv_e1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x tstep,engke,tolnce,vircon) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - evans thermostat ++c Comp. Phys. reports 1, 299, (1984) ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,engke,tolnce,vircon,vdotf,scale,chit ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2000) ++ enddo ++ ++ endif ++ ++ if(ntcons.eq.0)safe=.true. ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ engke=0.5d0*engke ++ chit=0.5d0*vdotf/engke ++ ++c thermostat the velocities ++ ++ scale=(1.d0-0.5d0*tstep*chit) ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate kinetic energy and evans thermostat parameter ++ ++ engke=0.d0 ++ vdotf=0.d0 ++ do i=iatm0,iatm1 ++ ++ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) ++ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) ++ ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++ buffer(1)=engke ++ buffer(2)=vdotf ++ call gdsum(buffer(1),2,buffer(3)) ++ engke=buffer(1) ++ vdotf=buffer(2) ++ ++ endif ++ engke=0.5d0*engke ++ chit=0.5d0*vdotf/engke ++ scale=(1.d0-0.5d0*tstep*chit) ++ ++c scale velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=scale*vxx(i) ++ vyy(i)=scale*vyy(i) ++ vzz(i)=scale*vzz(i) ++ ++ enddo ++ ++ engke=engke*scale**2 ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_e1 ++ ++ subroutine nvtvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntshl,keyshl,tstep,taut,sigma,chit,consv,conint,engke, ++ x tolnce,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c nvt ensemble - nose-hoover thermostat ++c Molecular Physics 87 (1996) 1117 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith october 2002 ++c amended - w. smith january 2005 : f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=4 ++ ++ logical safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons ++ integer i,j,k,iatm0,iatm1 ++ real(8) tstep,taut,sigma,chit,consv,conint,engke,tolnce,vircon ++ real(8) hstep,qmass ++ integer fail(nnn) ++ real(8) strkin(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ safe=.true. ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2010) ++ enddo ++ ++ endif ++ ++c inertia parameter for Nose-Hoover thermostat ++ ++ hstep=0.5d0*tstep ++ qmass=2.d0*sigma*taut**2 ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ if(ntcons.gt.0) ++ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c integrate and apply nvt thermostat ++ ++ call nvtscale ++ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, ++ x chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c integrate and apply nvt thermostat ++ ++ call nvtscale ++ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, ++ x chit,conint) ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) ++ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) ++ ++ endif ++ ++ return ++ end subroutine nvtvv_h1 ++ ++ subroutine nptvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,virtot,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical newjob,safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk ++ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce ++ real(8) virtot,vircon,volm,volm0,elrc0,virlrc0,psyst ++ real(8) chit,chip,scale,beta ++ ++ integer fail(nnn) ++ real(8) strkin(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2020) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2030) ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engke=getkin(natms,idnode,mxnode) ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++ scale=1.d0 ++ ++ if(iter.eq.mxiter)then ++ ++c calculate system pressure ++ ++ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) ++ ++c apply Berendsen barostat taup is relaxation time ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++ endif ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=scale*xxx(i)+tstep*vxx(i) ++ yyy(i)=scale*yyy(i)+tstep*vyy(i) ++ zzz(i)=scale*zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c apply Berendsen thermostat taut is relaxation time ++ ++ engke=getkin(natms,idnode,mxnode) ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nptvv_b1 ++ ++ subroutine nptvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp,chip,chit, ++ x consv,conint,engke,elrc,tolnce,vircon,virtot,virlrc,volm, ++ x press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c npt ensemble - Melchionna, Ciccotti and Holian ++c Molecular Physics 78 (1993) 533 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith november 2002 ++c amended - w. smith january 2005: f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ integer, parameter :: ncyc=5 ++ ++ logical safe,lshmov,newjob ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc ++ real(8) tstep,taup,taut,sigma,temp,chip,chit,consv,conint ++ real(8) engke,elrc,tolnce,vircon,virtot,virlrc,volm,press ++ real(8) volm0,elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass ++ real(8) vzero,chit0,chip0,cons0,scale,fstep ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) cell0(9),com(3),vom(3),strkin(9),uni(9) ++ ++ save newjob,totmas,volm0,elrc0,virlrc0,dens0 ++ save cell0,iatm0,iatm1,hstep,qstep,fstep,pmass,qmass ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2040) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c inertia parameter for Nose-Hoover thermostat and barostat ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2050) ++ enddo ++ ++ endif ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metdynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c volume integration parameter ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptscale_p ++ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update positions ++ ++ scale=exp(tstep*chip) ++ do i=iatm0,iatm1 ++ ++ xxx(i)=scale*(xxx(i)-com(1))+tstep*vxx(i)+com(1) ++ yyy(i)=scale*(yyy(i)-com(2))+tstep*vyy(i)+com(2) ++ zzz(i)=scale*(zzz(i)-com(3))+tstep*vzz(i)+com(3) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptscale_p ++ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, ++ x volm,press,vircon,virtot) ++ ++c integrate and apply npt thermostat ++ ++ call nptscale_t ++ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, ++ x taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2+ ++ x 0.5d0*pmass*chip**2+press*volm ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nptvv_h1 ++ ++ subroutine nstvv_b1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, ++ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press,elrc, ++ x virlrc,tolnce,vircon,volm) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c anisotropic npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith december 2002 ++c amended - w. smith january 2005 : f90 conversion ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ ++ logical newjob,safe,lshmov ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,mode ++ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce,beta ++ real(8) vircon,volm,volm0,elrc0,virlrc0,chit ++ real(8) xtmp,ytmp,ztmp ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) uni(9),strkin(9),celp(10) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2060) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2070) ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c extract previous constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c zero scaling matrix ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(iter.eq.mxiter)then ++ ++c calculate Berendsen barostat - taup is relaxation time ++ ++ do i=1,9 ++ eta(i)=tstep*beta*(stress(i)+strcns(i)- ++ x press*volm*uni(i))/(taup*volm)+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ endif ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ xtmp=eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) ++ ytmp=eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) ++ ztmp=eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) ++ xxx(i)=tstep*vxx(i)+xtmp ++ yyy(i)=tstep*vyy(i)+ytmp ++ zzz(i)=tstep*vzz(i)+ztmp ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c second pass of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c apply Berendsen thermostat taut is relaxation time ++ ++ engke=getkin(natms,idnode,mxnode) ++ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nstvv_b1 ++ ++ subroutine nstvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, ++ x ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma,temp,chit, ++ x consv,conint,engke,elrc,tolnce,vircon,virlrc,volm,press, ++ x chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for integrating newtonian equations of ++c motion in molecular dynamics - velocity verlet incorporating ++c bond constraints via the shake/rattle algorithm ++c ++c anisotropic npt ensemble - Melchionna, Ciccotti and Holian ++c Molecular Physics 78 (1993) 533 ++c ++c parallel replicated data version ++c ++c copyright - daresbury laboratory ++c author - w. smith november 2002 ++c amended - w. smith january 2005 : f90 conversion ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=7 ++ integer, parameter :: ncyc=5 ++ ++ logical safe,lshmov,newjob ++ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm ++ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc,mode ++ real(8) tstep,taup,taut,sigma,temp,chit,consv,conint,chit0 ++ real(8) engke,elrc,tolnce,vircon,virlrc,volm,press,volm0 ++ real(8) elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass ++ real(8) cons0,cxx,cyy,czz,chip2,fstep ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ ++ integer fail(nnn) ++ real(8) com(3),vom(3),czero(9),strkin(9),eta0(9),celp(10) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metdynamics shell thermostat variables ++ ++ data newjob/.true./ ++ ++ save newjob,totmas,volm0,elrc0,virlrc0,dens0 ++ save iatm0,iatm1,hstep,qstep,pmass,qmass,fstep ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2080) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c system total mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c inertia parameter for Nose-Hoover thermostat and barostat ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2090) ++ enddo ++ ++ endif ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metdynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ czero(i)=cell(i) ++ eta0(i)=eta(i) ++ ++ enddo ++ do i=iatm0,iatm1 ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++ endif ++ ++c subtract kinetic terms from stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ do i=1,9 ++ stress(i)=stress(i)-strkin(i) ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw = 1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c calculate current volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metdynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstscale_p ++ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update positions ++ ++ do i=iatm0,iatm1 ++ ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ ++ xxx(i)=xxx(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyy(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzz(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c subtract old constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c correct constraint bonds using rattle ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++c add new constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ cell(i)=czero(i) ++ eta(i)=eta0(i) ++ ++ enddo ++ do i=iatm0,iatm1 ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c second stage of velocity verlet algorithm ++ ++ else ++ ++c update velocities ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++ if(ntcons.gt.0)then ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c add constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++c correct constraint bond velocities using rattle ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstscale_p ++ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstscale_t ++ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, ++ x pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=iatm0,iatm1 ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++c merge velocity data ++ ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstress(natms,idnode,mxnode,strkin) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ if(mxnode.gt.1) ++ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c deallocate working arrays ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nstvv_h1 ++ ++ end module vv_motion_module ++ +diff -urN dl_class_1.9.orig/srcmod/vv_rotation1_module.f dl_class_1.9/srcmod/vv_rotation1_module.f +--- dl_class_1.9.orig/srcmod/vv_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_rotation1_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,4701 @@ ++ module vv_rotation1_module ++ ++c*********************************************************************** ++c ++c dl_poly module 1 for velocity verlet rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module, only : lmetadyn ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use vv_motion_module ++ use utility_module ++ ++ contains ++ ++ subroutine rotate_omega ++ x (idnode,mxnode,ngrp,tstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for updating the angular velocity and momentum ++c for rigid bodies ++c ++c copyright - daresbury laboratory ++c author - w. smith sept 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer idnode,mxnode,ngrp,i,j,jr,jrs,ig,igrp1,igrp2,id ++ real(8) ftx,fty,ftz,fmx,fmy,fmz,tstep,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ ++ real(8) p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp) ++ real(8) dtx(mxatms),dty(mxatms),dtz(mxatms),rot(9) ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ tq1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ tq2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ tq3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=p0(ig)+tq0*tstep ++ p1(ig)=p1(ig)+tq1*tstep ++ p2(ig)=p2(ig)+tq2*tstep ++ p3(ig)=p3(ig)+tq3*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) ++ ++ enddo ++ ++ return ++ end subroutine rotate_omega ++ ++ subroutine nosquish(ig,tstep,qq0,qq1,qq2,qq3,pp0,pp1,pp2,pp3) ++ ++c*********************************************************************** ++c ++c dlpoly routine to implement the symplectic no_squish quaternion ++c algorithm of miller et al j.chem.phys 116 (2002) 8649 ++c ++c copyright daresbury laboratory ++c author m. leslie jan 2004 ++c amended w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer m,ig,id ++ real(8) zetax,zetay,zetaz,tstep,cs,sn,trstep ++ ++ integer, parameter :: mrot=10 ++ real(8), parameter :: ov4=0.25d0 ++ real(8), parameter :: ov8=0.125d0 ++ ++ real(8) qq0(*),qq1(*),qq2(*),qq3(*) ++ real(8) pp0(*),pp1(*),pp2(*),pp3(*) ++ ++ real(8) qn1(0:3),pq2(0:3),qn2(0:3),pq3(0:3) ++ real(8) qn3(0:3),pq4(0:3) ++ ++c rotational time step ++ ++ trstep=tstep/dble(mrot) ++ ++c rotation: iterate over mrot rotational time steps ++ ++ id=lstgtp(ig) ++ ++ do m=1,mrot ++ ++ zetaz=ov8*rotinz(id,2)*trstep* ++ x (-pp0(ig)*qq3(ig)+pp1(ig)*qq2(ig)- ++ x pp2(ig)*qq1(ig)+pp3(ig)*qq0(ig)) ++ cs=cos(zetaz) ++ sn=sin(zetaz) ++ qn1(0)=cs*qq0(ig)-sn*qq3(ig) ++ qn1(1)=cs*qq1(ig)+sn*qq2(ig) ++ qn1(2)=cs*qq2(ig)-sn*qq1(ig) ++ qn1(3)=cs*qq3(ig)+sn*qq0(ig) ++ pq2(0)=cs*pp0(ig)-sn*pp3(ig) ++ pq2(1)=cs*pp1(ig)+sn*pp2(ig) ++ pq2(2)=cs*pp2(ig)-sn*pp1(ig) ++ pq2(3)=cs*pp3(ig)+sn*pp0(ig) ++ ++ zetay=ov8*rotiny(id,2)*trstep* ++ x (-pq2(0)*qn1(2)-pq2(1)*qn1(3)+ ++ x pq2(2)*qn1(0)+pq2(3)*qn1(1)) ++ cs=cos(zetay) ++ sn=sin(zetay) ++ qn2(0)=cs*qn1(0)-sn*qn1(2) ++ qn2(1)=cs*qn1(1)-sn*qn1(3) ++ qn2(2)=cs*qn1(2)+sn*qn1(0) ++ qn2(3)=cs*qn1(3)+sn*qn1(1) ++ pq3(0)=cs*pq2(0)-sn*pq2(2) ++ pq3(1)=cs*pq2(1)-sn*pq2(3) ++ pq3(2)=cs*pq2(2)+sn*pq2(0) ++ pq3(3)=cs*pq2(3)+sn*pq2(1) ++ ++ zetax=ov4*rotinx(id,2)*trstep* ++ x (-pq3(0)*qn2(1)+pq3(1)*qn2(0)+ ++ x pq3(2)*qn2(3)-pq3(3)*qn2(2)) ++ cs=cos(zetax) ++ sn=sin(zetax) ++ qn3(0)=cs*qn2(0)-sn*qn2(1) ++ qn3(1)=cs*qn2(1)+sn*qn2(0) ++ qn3(2)=cs*qn2(2)+sn*qn2(3) ++ qn3(3)=cs*qn2(3)-sn*qn2(2) ++ pq4(0)=cs*pq3(0)-sn*pq3(1) ++ pq4(1)=cs*pq3(1)+sn*pq3(0) ++ pq4(2)=cs*pq3(2)+sn*pq3(3) ++ pq4(3)=cs*pq3(3)-sn*pq3(2) ++ ++ zetay=ov8*rotiny(id,2)*trstep* ++ x (-pq4(0)*qn3(2)-pq4(1)*qn3(3)+ ++ x pq4(2)*qn3(0)+pq4(3)*qn3(1)) ++ cs=cos(zetay) ++ sn=sin(zetay) ++ qn2(0)=cs*qn3(0)-sn*qn3(2) ++ qn2(1)=cs*qn3(1)-sn*qn3(3) ++ qn2(2)=cs*qn3(2)+sn*qn3(0) ++ qn2(3)=cs*qn3(3)+sn*qn3(1) ++ pq3(0)=cs*pq4(0)-sn*pq4(2) ++ pq3(1)=cs*pq4(1)-sn*pq4(3) ++ pq3(2)=cs*pq4(2)+sn*pq4(0) ++ pq3(3)=cs*pq4(3)+sn*pq4(1) ++ ++ zetaz=ov8*rotinz(id,2)*trstep* ++ x (-pq3(0)*qn2(3)+pq3(1)*qn2(2)- ++ x pq3(2)*qn2(1)+pq3(3)*qn2(0)) ++ cs=cos(zetaz) ++ sn=sin(zetaz) ++ qq0(ig)=cs*qn2(0)-sn*qn2(3) ++ qq1(ig)=cs*qn2(1)+sn*qn2(2) ++ qq2(ig)=cs*qn2(2)-sn*qn2(1) ++ qq3(ig)=cs*qn2(3)+sn*qn2(0) ++ pp0(ig)=cs*pq3(0)-sn*pq3(3) ++ pp1(ig)=cs*pq3(1)+sn*pq3(2) ++ pp2(ig)=cs*pq3(2)-sn*pq3(1) ++ pp3(ig)=cs*pq3(3)+sn*pq3(0) ++ ++ enddo ++ ++ return ++ end subroutine nosquish ++ ++ subroutine nveqvv_1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author m. leslie jan 2004 ++c amended w.smith jan 2005: f90 conversion ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,jrs,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,engfke ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2100) ++ enddo ++ ++ newjob=.false. ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c merge centre of mass velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge centre of mass position from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nveqvv_1 ++ ++ subroutine nvtqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1 ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,engfke ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2120) ++ enddo ++ ++ newjob=.false. ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algoritm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c exchange position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nvtqvv_b1 ++ ++ subroutine nvtqvv_h1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, ++ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=6 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr ++ integer id,ig,ifre,jrs,idum ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) engfke ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,p0,p1,p2,p3 ++ ++ data newjob/.true./ ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c nose-hoover inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2140) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c apply thermostat for first stage ++ ++ if(isw.eq.1)then ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ endif ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++c operations common to first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algoritm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxx(i)+tstep*vxx(i) ++ yyy(i)=yyy(i)+tstep*vyy(i) ++ zzz(i)=zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++ engke=engfke+engtrn ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ endif ++ ++ return ++ end subroutine nvtqvv_h1 ++ ++ subroutine nptqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,chip,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 ++ real(8) virtot,psyst,press,taup,scale,engfke ++ ++ integer, parameter :: nnn=11 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2160) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ if(isw.eq.1)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) ++ ++ endif ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2170) ++ enddo ++ ++ newjob=.false. ++ if(ntcons.gt.0)safe=.false. ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta at start of time step ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c rigid body motion for first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 ++ ++ mxiter=1 ++ if(ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++ scale=1.d0 ++ ++ if(iter.eq.mxiter)then ++ ++c calculate system pressure ++ ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ ++c apply Berendsen barostat ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++ endif ++ ++c update centre of mass position ++ ++ do ig=igrp1,igrp2 ++ ++ gcmx(ig)=scale*gcmx(ig)+tstep*gvxx(ig) ++ gcmy(ig)=scale*gcmy(ig)+tstep*gvyy(ig) ++ gcmz(ig)=scale*gcmz(ig)+tstep*gvzz(ig) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=gcmx(ig)+ ++ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ yyy(i)=gcmy(ig)+ ++ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ zzz(i)=gcmz(ig)+ ++ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=scale*xxx(i)+tstep*vxx(i) ++ yyy(i)=scale*yyy(i)+tstep*vyy(i) ++ zzz(i)=scale*zzz(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=scale*uni(i) ++ enddo ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ if(isw.eq.1)then ++ ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) ++ deallocate(gxo,gyo,gzo,stat=fail(6)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine nptqvv_b1 ++ ++ subroutine nptqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virtot,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr ++ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) taup,temp,press,virtot,vzero,chit0,chip0,cons0 ++ real(8) chip,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas ++ real(8) volm0,scale,cxx,cyy,czz,engfke,fstep ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,hstep,qstep,fstep,pmass,qmass ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 ++ save totmas,dens0,cell0 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2200) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) ++ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2210) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gcmx(ig)-com(1) ++ cyy=gcmy(ig)-com(2) ++ czz=gcmz(ig)-com(3) ++ gcmx(ig)=gcmx(ig)+tstep*(gvxx(ig)+chip*cxx) ++ gcmy(ig)=gcmy(ig)+tstep*(gvyy(ig)+chip*cyy) ++ gcmz(ig)=gcmz(ig)+tstep*(gvzz(ig)+chip*czz) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ xxx(i)=xxx(i)+tstep*(vxx(i)+chip*cxx) ++ yyy(i)=yyy(i)+tstep*(vyy(i)+chip*cyy) ++ zzz(i)=zzz(i)+tstep*(vzz(i)+chip*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c operations for second stage only ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ do icyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/volm0)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c calculate conserved variable ++ ++ consv=conint+0.5d0*qmass*chit**2+press*volm ++ x +0.5d0*pmass*chip**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c end of iteration cycle ++ ++ enddo ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) ++ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) ++ ++ endif ++ ++ return ++ end subroutine nptqvv_h1 ++ ++ subroutine nstqvv_b1 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nst ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk,mode ++ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engfke ++ real(8) tqx,tqy,tqz,ftx,fty,ftz ++ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz ++ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke ++ real(8) chit,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 ++ real(8) press,taup,xtmp,ytmp,ztmp ++ ++ integer, parameter :: nnn=11 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ real(8) celp(10),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ ++ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++ safe=.true. ++ ++ if(newjob)then ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2240) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c atom block indices ++ ++ iatm0=(idnode*natms)/mxnode+1 ++ iatm1=((idnode+1)*natms)/mxnode ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) ++ ++ if(isw.eq.1)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) ++ ++ endif ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2250) ++ enddo ++ ++ newjob=.false. ++ if(ntcons.gt.0)safe=.false. ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta at start of time step ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities 1/2 time step first and second stages ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c rigid body motion for first and second stages ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*pt5*tstep ++ p1(ig)=p1(ig)+qt1*pt5*tstep ++ p2(ig)=p2(ig)+qt2*pt5*tstep ++ p3(ig)=p3(ig)+qt3*pt5*tstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c store current integration variables ++ ++ if(ntcons.gt.0)then ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c extract previous constraint terms from stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++ endif ++ ++c iteration required if ntcons > 0 ++ ++ mxiter=1 ++ if(ntcons.gt.0)mxiter=2 ++ do iter=1,mxiter ++ ++c zero scaling matrix ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(iter.eq.mxiter)then ++ ++c calculate Berendsen barostat ++ ++ do i=1,9 ++ eta(i)=tstep*beta*(stress(i)+strcns(i)- ++ x press*volm*uni(i))/(taup*volm)+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++ endif ++ ++c update centre of mass position ++ ++ do ig=igrp1,igrp2 ++ ++ xtmp=eta(1)*gcmx(ig)+eta(4)*gcmy(ig)+eta(7)*gcmz(ig) ++ ytmp=eta(2)*gcmx(ig)+eta(5)*gcmy(ig)+eta(8)*gcmz(ig) ++ ztmp=eta(3)*gcmx(ig)+eta(6)*gcmy(ig)+eta(9)*gcmz(ig) ++ gcmx(ig)=tstep*gvxx(ig)+xtmp ++ gcmy(ig)=tstep*gvyy(ig)+ytmp ++ gcmz(ig)=tstep*gvzz(ig)+ztmp ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=gcmx(ig)+ ++ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ yyy(i)=gcmy(ig)+ ++ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ zzz(i)=gcmz(ig)+ ++ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=tstep*vxx(i)+ ++ x eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) ++ yyy(i)=tstep*vyy(i)+ ++ x eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) ++ zzz(i)=tstep*vzz(i)+ ++ x eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++ endif ++ ++ if(iter.lt.mxiter)then ++ ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ ++ enddo ++ ++ endif ++ ++ enddo ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c end of first stage of velocity verlet algorithm ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++ endif ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities ++ ++ do i=iatm0,iatm1 ++ ++ if(lstfrz(i).eq.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c merge group velocities from all processors ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) ++ ++ if(isw.eq.1)then ++ ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) ++ deallocate(gxo,gyo,gzo,stat=fail(6)) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine nstqvv_b1 ++ ++ subroutine nstqvv_h1 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly routine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - provided rigid body sites ++c and constraint sites do not coincide. ++c ++c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith may 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ integer, parameter :: nnn=12 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ logical safe,lshmov,newjob ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree ++ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr,mode ++ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc ++ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep ++ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn ++ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc ++ real(8) taup,temp,press,vzero,chit0,cons0 ++ real(8) chip2,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas ++ real(8) volm0,cxx,cyy,czz,engfke,fstep ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) ++ real(8) czero(9),eta0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newjob,hstep,qstep,fstep,pmass,qmass ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 ++ save totmas,dens0 ++ ++ data newjob/.true./ ++ ++ safe=.true. ++ if(newjob)then ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2280) ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) ++ if(ntcons.gt.0)then ++ ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) ++ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) ++ ++ endif ++ if(newjob)then ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) ++ endif ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2290) ++ enddo ++ ++ newjob=.false. ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++ if(ntcons.gt.0)then ++ ++c construct current bond vectors ++ ++ do k=1,nscons ++ ++c indices of atoms in bond ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate current bond vector ++ ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition for bond vectors ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store current integration variables if ntcons > 0 ++ ++ if(ntcons.gt.0)then ++ ++ vzero=volm ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ eta0(i)=eta(i) ++ czero(i)=cell(i) ++ ++ enddo ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, ++ x press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c update free atom velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* Rigid body motion **************************** ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c calculate com force arrays ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) ++ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) ++ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) ++ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) ++ ++c update quaternion momenta by 1/2 time step ++ ++ p0(ig)=p0(ig)+qt0*hstep ++ p1(ig)=p1(ig)+qt1*hstep ++ p2(ig)=p2(ig)+qt2*hstep ++ p3(ig)=p3(ig)+qt3*hstep ++ ++c update centre of mass velocity by 1/2 time step ++ ++ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c move centre of mass by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gcmx(ig)-com(1) ++ cyy=gcmy(ig)-com(2) ++ czz=gcmz(ig)-com(3) ++ gcmx(ig)=gcmx(ig)+ ++ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ gcmy(ig)=gcmy(ig)+ ++ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ gcmz(ig)=gcmz(ig)+ ++ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c rotate rigid groups: nosquish algorithm ++ ++ do ig=igrp1,igrp2 ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ enddo ++ ++c new atomic positions for atoms in rigid bodies-relative to c.o.m ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) ++ x +gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) ++ x +gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) ++ x +gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ k=k+1 ++ i=lstfre(ifre) ++ cxx=xxx(i)-com(1) ++ cyy=yyy(i)-com(2) ++ czz=zzz(i)-com(3) ++ xxx(i)=xxx(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyy(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzz(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge position data ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply shake corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c subtract old constraint terms from stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++c correct constraint bonds using rattle ++ ++ safe=.false. ++ call rdrattle_r ++ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, ++ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, ++ x txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ if(.not.safe)return ++ ++c add new constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore original integration parameters if iter < mxiter ++ ++ if(iter.lt.mxiter)then ++ ++ volm=vzero ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ eta(i)=eta0(i) ++ cell(i)=czero(i) ++ ++ enddo ++ do i=1,natms ++ ++ xxx(i)=xxo(i) ++ yyy(i)=yyo(i) ++ zzz(i)=zzo(i) ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ do ig=1,ngrp ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gcmx(ig)=gxo(ig) ++ gcmy(ig)=gyo(ig) ++ gcmz(ig)=gzo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++ endif ++ ++ endif ++ ++c operations for second stage only ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotation matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities from all nodes ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c correct constraint bond velocities using rattle ++ ++ if(ntcons.gt.0)then ++ ++ safe=.false. ++ call rdrattle_v ++ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, ++ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) ++ if(.not.safe)return ++ ++c add constraint terms to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c kinetic terms for stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strkin(i)+strgrp(i)+strbod(i) ++ enddo ++ ++ do icyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, ++ x press,volm) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, ++ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++ engke=engfke+engtrn ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c end of second stage of velocity verlet algorithm ++ ++ endif ++ ++c end of iteration cycle ++ ++ enddo ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do kk=1,ntpatm ++ dens(kk)=dens0(kk)*(volm0/volm) ++ enddo ++ ++c deallocate working arrays ++ ++ deallocate(dtx,dty,dtz,stat=fail(1)) ++ ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) ++ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) ++ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) ++ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) ++ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) ++ ++ endif ++ ++ return ++ end subroutine nstqvv_h1 ++ ++ end module vv_rotation1_module ++ +diff -urN dl_class_1.9.orig/srcmod/vv_rotation2_module.f dl_class_1.9/srcmod/vv_rotation2_module.f +--- dl_class_1.9.orig/srcmod/vv_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 ++++ dl_class_1.9/srcmod/vv_rotation2_module.f 2011-02-22 12:46:30.000000000 +0100 +@@ -0,0 +1,5924 @@ ++ module vv_rotation2_module ++ ++c*********************************************************************** ++c ++c dl_poly module 2 for velocity verlet rotational integration ++c schemes ++c copyright - daresbury laboratory ++c author - w. smith aug 2006 ++c adapted - d. quigley - metadynamics ++c ++c*********************************************************************** ++ ++ use config_module ++ use ensemble_tools_module ++ use error_module ++ use metafreeze_module, only : lmetadyn ++ use property_module ++ use rigid_body_module ++ use setup_module ++ use shake_module ++ use site_module ++ use vv_rotation1_module ++ use utility_module ++ ++ contains ++ ++ subroutine qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration in the velocity verlet scheme. assumes rigid ++c bodies connected by constraints. must be used in conjunction with ++c velocity verlet integration algorithm. note the iteration is ++c handled by the calling routine. ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k,ik ++ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy ++ real(8) tzz,xxt,yyt,zzt,stresh,strs1,strs2,strs3,strs5,strs6 ++ real(8) strs9,tstep2,esig,dis2,tqa,tqb,gamma,dli,dlj ++ ++ real(8), allocatable :: esig1(:),ggx(:),ggy(:),ggz(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) ++ dimension stresh(9),tqa(3),tqb(3) ++ ++ save newjob,esig1,ggx,ggy,ggz ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (esig1(mxcons),ggx(mxcons),ggy(mxcons),ggz(mxcons), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1615) ++ newjob=.false. ++ ++ endif ++ ++c accumulators for stress tensor ++ ++ strs1=0.d0 ++ strs2=0.d0 ++ strs3=0.d0 ++ strs5=0.d0 ++ strs6=0.d0 ++ strs9=0.d0 ++ ++c timestep squared ++ ++ tstep2=tstep*tstep ++ ++c constraint bond vectors are dxx,dyy,dzz (input) ++ ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++c calculate temporary bond vector ++ ++ dxt(k)=xxx(i)-xxx(j) ++ dyt(k)=yyy(i)-yyy(j) ++ dzt(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++c periodic boundary condition ++ ++ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) ++ ++c calculate maximum error in bondlength ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++ dis2=prmcon(listcon(k,1))**2 ++ esig1(k)=(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 ++ esig=max(esig,abs(esig1(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolnce) ++ ++ if(mxnode.gt.1)call gstate(safe) ++ ++c continue if any tolerances unsatisfied ++ ++ if(.not.safe)then ++ ++c initialise force increment arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint forces ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dis2=prmcon(listcon(k,1))**2 ++ ++ if(newstep)then ++ ++ call pivot(1,i,k,ik,tqa,dxx,dyy,dzz) ++ call pivot(1,j,k,ik,tqb,dxx,dyy,dzz) ++ ++ ggx(k)=tstep2*(tqa(1)+tqb(1))/dis2 ++ ggy(k)=tstep2*(tqa(2)+tqb(2))/dis2 ++ ggz(k)=tstep2*(tqa(3)+tqb(3))/dis2 ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig1(k)/(dxt(k)*ggx(k)+dyt(k)*ggy(k)+dzt(k)*ggz(k)) ++ ++c accumulate bond virial ++ ++ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) ++ ++ strs1=strs1+gamma*dxx(k)*dxx(k) ++ strs2=strs2+gamma*dxx(k)*dyy(k) ++ strs3=strs3+gamma*dxx(k)*dzz(k) ++ strs5=strs5+gamma*dyy(k)*dyy(k) ++ strs6=strs6+gamma*dyy(k)*dzz(k) ++ strs9=strs9+gamma*dzz(k)*dzz(k) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)+dxx(k)*gamma ++ yyt(i)=yyt(i)+dyy(k)*gamma ++ zzt(i)=zzt(i)+dzz(k)*gamma ++ xxt(j)=xxt(j)-dxx(k)*gamma ++ yyt(j)=yyt(j)-dyy(k)*gamma ++ zzt(j)=zzt(j)-dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+xxt(i)*dli ++ fyy(i)=fyy(i)+yyt(i)*dli ++ fzz(i)=fzz(i)+zzt(i)*dli ++ fxx(j)=fxx(j)+xxt(j)*dlj ++ fyy(j)=fyy(j)+yyt(j)*dlj ++ fzz(j)=fzz(j)+zzt(j)*dlj ++ ++ enddo ++ ++c complete stress tensor ++ ++ stresh(1)=stresh(1)+strs1 ++ stresh(2)=stresh(2)+strs2 ++ stresh(3)=stresh(3)+strs3 ++ stresh(4)=stresh(4)+strs2 ++ stresh(5)=stresh(5)+strs5 ++ stresh(6)=stresh(6)+strs6 ++ stresh(7)=stresh(7)+strs3 ++ stresh(8)=stresh(8)+strs6 ++ stresh(9)=stresh(9)+strs9 ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ ++ endif ++ ++ return ++ end subroutine qrattle_r ++ ++ subroutine qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for applying bond constraint corrections after ++c atomic integration in the velocity verlet scheme. assumes rigid ++c bodies connected by constraints. must be used in conjunction with ++c velocity verlet integration algorithm. note the iteration is ++c handled by the calling routine. ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ logical safe,lshmov,newstep,newjob ++ integer fail,idnode,mxnode,natms,nscons,i,j,k,ik ++ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,tqa,tqb ++ real(8) xxt,yyt,zzt,tstep2,esig,gamma,dli,dlj ++ real(8) tolvel ++ ++ real(8), allocatable :: esig2(:),hhx(:),hhy(:),hhz(:) ++ ++ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) ++ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) ++ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ dimension tqa(3),tqb(3) ++ ++ save newjob,esig2,hhx,hhy,hhz ++ ++ data newjob/.true./,fail/0/ ++ ++ if(newjob)then ++ ++ allocate (esig2(mxcons),hhx(mxcons),hhy(mxcons),hhz(mxcons), ++ x stat=fail) ++ if(fail.ne.0)call error(idnode,1625) ++ newjob=.false. ++ ++ endif ++ ++c constraint bond vectors are dxx,dyy,dzz (input) ++ ++c half timestep ++ ++ tstep2=tstep/2.d0 ++ ++c tolerance for velocity convergence ++ ++ tolvel=tolnce/tstep ++ ++c calculate maximum error in constraint ++ ++ esig=0.d0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ esig2(k)=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ ++ x dzz(k)*(vzz(i)-vzz(j))) ++ esig=max(esig,abs(esig2(k))) ++ ++ enddo ++ ++c global verification of convergence ++ ++ safe=(esig.lt.tolvel) ++ ++ if(mxnode.gt.1)then ++ call gstate(safe) ++ endif ++ ++c continue if all tolerances satisfied else return to calling routine ++ ++ if(.not.safe)then ++ ++c initialise velocity correction arrays ++ ++ do i=1,natms ++ ++ xxt(i)=0.d0 ++ yyt(i)=0.d0 ++ zzt(i)=0.d0 ++ ++ enddo ++ ++c calculate constraint correction ++ ++ ik=0 ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ if(newstep)then ++ ++ call pivot(2,i,k,ik,tqa,dxx,dyy,dzz) ++ call pivot(2,j,k,ik,tqb,dxx,dyy,dzz) ++ ++ hhx(k)=tstep2*(tqa(1)+tqb(1)) ++ hhy(k)=tstep2*(tqa(2)+tqb(2)) ++ hhz(k)=tstep2*(tqa(3)+tqb(3)) ++ ++ endif ++ ++c constraint force parameter ++ ++ gamma=esig2(k)/(dxx(k)*hhx(k)+dyy(k)*hhy(k)+dzz(k)*hhz(k)) ++ ++c improved atomic force ++ ++ xxt(i)=xxt(i)-dxx(k)*gamma ++ yyt(i)=yyt(i)-dyy(k)*gamma ++ zzt(i)=zzt(i)-dzz(k)*gamma ++ xxt(j)=xxt(j)+dxx(k)*gamma ++ yyt(j)=yyt(j)+dyy(k)*gamma ++ zzt(j)=zzt(j)+dzz(k)*gamma ++ ++ enddo ++ ++c transport temporary positions to other nodes ++ ++ if(mxnode.gt.1)then ++ ++ if(lshmov) call shmove ++ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, ++ x txx,tyy,tzz,buffer) ++ ++ endif ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ ++ dli=1.d0/dble(listme(i)) ++ dlj=1.d0/dble(listme(j)) ++ ++ fxx(i)=fxx(i)+dli*xxt(i) ++ fyy(i)=fyy(i)+dli*yyt(i) ++ fzz(i)=fzz(i)+dli*zzt(i) ++ fxx(j)=fxx(j)+dlj*xxt(j) ++ fyy(j)=fyy(j)+dlj*yyt(j) ++ fzz(j)=fzz(j)+dlj*zzt(j) ++ ++ enddo ++ ++c splice force arrays across nodes ++ ++ if(mxnode.gt.1)then ++ ++ call splice ++ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine qrattle_v ++ ++ subroutine pivot(k,i,kk,ik,tqq,dxx,dyy,dzz) ++ ++c*********************************************************************** ++c ++c dl_poly subroutine for computing pivot vector for velocity ++c corrections to bonds between rigid bodies ++c must be used in conjunction with qrattle routines: ++c if k=1 - use with qrattle_r ++c if k=2 - use with qrattle_v ++c ++c copyright - daresbury laboratory ++c author - w. smith february 2005 ++c ++c*********************************************************************** ++ ++ implicit none ++ ++ integer k,i,kk,ik,ig,id,jj ++ real(8) xxa,yya,zza,tax,tay,taz,trx,try,trz,vix,viy,viz ++ real(8) rot(9),tqq(3),dxx(mxcons),dyy(mxcons),dzz(mxcons) ++ ++ ig=lstbod(i) ++ ++ if(ig.eq.0)then ++ ++c atoms in constraint bonds ++ ++ tqq(1)=dxx(kk)*rmass(i) ++ tqq(2)=dyy(kk)*rmass(i) ++ tqq(3)=dzz(kk)*rmass(i) ++ ++ else ++ ++c terms for rigid body atoms ++ ++ ik=ik+1 ++ id=lstgtp(ig) ++ ++ tqq(1)=dxx(kk)/gmass(id) ++ tqq(2)=dyy(kk)/gmass(id) ++ tqq(3)=dzz(kk)/gmass(id) ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ jj=lstcsit(ik) ++ ++c com-site vector in lab frame ++ ++ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+gzz(id,jj)*rot(3)) ++ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+gzz(id,jj)*rot(6)) ++ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+gzz(id,jj)*rot(9)) ++ ++c cross product of com-site vector and interatomic vector ++ ++ tax=yya*dzz(kk)-zza*dyy(kk) ++ tay=zza*dxx(kk)-xxa*dzz(kk) ++ taz=xxa*dyy(kk)-yya*dxx(kk) ++ ++c transform to body fixed frame ++ ++ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) ++ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) ++ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) ++ ++ if(k.eq.1)then ++ ++c direction of induced velocites in body frame ++ ++ vix=try*gzz(id,jj)-trz*gyy(id,jj) ++ viy=trz*gxx(id,jj)-trx*gzz(id,jj) ++ viz=trx*gyy(id,jj)-try*gxx(id,jj) ++ ++c transform to lab frame ++ ++ tqq(1)=tqq(1)+vix*rot(1)+viy*rot(2)+viz*rot(3) ++ tqq(2)=tqq(2)+vix*rot(4)+viy*rot(5)+viz*rot(6) ++ tqq(3)=tqq(3)+vix*rot(7)+viy*rot(8)+viz*rot(9) ++ ++ elseif(k.eq.2)then ++ ++c transform to lab frame ++ ++ tqq(1)=tqq(1)+trx*rot(1)+try*rot(2)+trz*rot(3) ++ tqq(2)=tqq(2)+trx*rot(4)+try*rot(5)+trz*rot(6) ++ tqq(3)=tqq(3)+trx*rot(7)+try*rot(8)+trz*rot(9) ++ ++ endif ++ ++ endif ++ ++ return ++ end subroutine pivot ++ ++ subroutine nveqvv_2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith jan 2005 ++c amended w.smith feb 2005: qrattle added ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2110) ++ enddo ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge free atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ ++ engke=engke+engtrn ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nveqvv_2 ++ ++ subroutine nvtqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, ++ x vircom,vircon) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nvt ensemble - Berendsen thermostat (n.b. not symplectic) ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith mar 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke ++ real(8) engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(mxatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2130) ++ enddo ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engke+engtrn+engrot ++ engke=engke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nvtqvv_b2 ++ ++ subroutine nvtqvv_h2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, ++ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,engfke ++ real(8) taut,sigma,chit,hstep,qmass,conint,consv ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9) ++ ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2 ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c nose-hoover inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(4)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(5)) ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) ++ if(isw.eq.2)then ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) ++ endif ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2150) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c initialise constraint virial ++ ++ if(isw.eq.1)then ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c apply thermostat for first stage ++ ++ if(isw.eq.1)then ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=xxo(i)+tstep*vxx(i) ++ yyy(i)=yyo(i)+tstep*vyy(i) ++ zzz(i)=zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ else ++ ++c second stage of velocity verlet algorithm ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c apply thermostat for second stage and calculate kinetic energy ++ ++ call nvtqscl ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, ++ x hstep,qmass,taut,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ engke=engfke+engtrn ++ ++c conserved quantity less kinetic and potential energy terms ++ ++ consv=conint+0.5d0*qmass*chit**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c restore forces if isw = 2 ++ ++ if(isw.eq.2)then ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nvtqvv_h2 ++ ++ subroutine nptqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c npt ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sep 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,jrs,icyc,mxshk,idum,ig,ntpatm ++ integer iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke,engtrn ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit ++ real(8) volm,elrc0,elrc,virlrc0,virlrc,scale,psyst,virtot,chip ++ real(8) beta,press,taup,engfke,vzero ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ save newstep,newjob,volm0,elrc0,virlrc0,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./,beta/7.3728d-3/ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2180) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(12)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(13)) ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2190) ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c cell parameters ++ ++ vzero=volm ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engke=engfke+engtrn ++ ++ endif ++ ++c -------------- start of barostat iteration cycle ----------------- ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c calculate system pressure ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) ++ ++c apply Berendsen barostat ++ ++ chip=1.d0+beta*tstep*(psyst-press)/taup ++ chip=1.d0 ++ scale=chip**(1.d0/3.d0) ++ volm=chip*volm ++ ++c reset cell parameters for new volume ++ ++ do i=1,9 ++ cell(i)=scale*cell(i) ++ enddo ++ ++c reset constraint virial ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) ++ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) ++ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*pt5*tstep ++ p1(ig)=c1(jg)+tq1*pt5*tstep ++ p2(ig)=c2(jg)+tq2*pt5*tstep ++ p3(ig)=c3(jg)+tq3*pt5*tstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=scale*gxo(jg)+tstep*gvxx(ig) ++ gcmy(ig)=scale*gyo(jg)+tstep*gvyy(ig) ++ gcmz(ig)=scale*gzo(jg)+tstep*gvzz(ig) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=scale*xxo(i)+tstep*vxx(i) ++ yyy(i)=scale*yyo(i)+tstep*vyy(i) ++ zzz(i)=scale*zzo(i)+tstep*vzz(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ if(isw.eq.2)call bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor for tethered bonds ++ ++ do i=1,9 ++ eta(i)=uni(i)*scale ++ enddo ++ ++ endif ++ ++ if(isw.eq.2)then ++ ++c calculate kinetic energy ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ ++ return ++ end subroutine nptqvv_b2 ++ ++ subroutine nptqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, ++ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virtot,virlrc,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith april 2005 ++c adapted d.quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm ++ integer jcyc,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,engfke ++ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv ++ real(8) cxx,cyy,czz,scale,virtot,press,chip,temp ++ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc ++ real(8) virlrc,elrc0,virlrc0,chit0,chip0,vzero,cons0 ++ ++ integer, parameter :: nnn=16 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: vx1(:),vy1(:),vz1(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas ++ save pmass ++ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2220) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) ++ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) ++ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), ++ x stat=fail(13)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), ++ x stat=fail(14)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) ++ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2230) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c store key config data at start of timestep ++ ++ vzero=volm ++ chit0=chit ++ chip0=chip ++ cons0=conint ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c store rigid body positions ++ ++ do ig=1,ngrp ++ ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ do i=1,natms ++ ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++c integration of barostat and thermostat (part 1) ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ chit=chit0 ++ chip=chip0 ++ conint=cons0 ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c restore free atom velocities ++ ++ do i=1,natms ++ ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++c restore rigid body quaternions angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++c current constraint virial ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/vzero)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++c reset constraint virial and stress ++ ++ vircon=0.d0 ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) ++ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) ++ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) ++ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store intermediate velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vx1(i)=vxx(i) ++ vy1(i)=vyy(i) ++ vz1(i)=vzz(i) ++ ++ enddo ++ do ig=igrp1,igrp2 ++ ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gvx1(ig)=gvxx(ig) ++ gvy1(ig)=gvyy(ig) ++ gvz1(ig)=gvzz(ig) ++ ++ enddo ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c restore rigid body quaternions, angular momenta and velocities ++ ++ do ig=igrp1,igrp2 ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gvxx(ig)=gvx1(ig) ++ gvyy(ig)=gvy1(ig) ++ gvzz(ig)=gvz1(ig) ++ ++ enddo ++ ++c calculate new rigid body velocities ++ ++ call rotate_omega ++ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update centre of mass position by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gxo(ig)-com(1) ++ cyy=gyo(ig)-com(2) ++ czz=gzo(ig)-com(3) ++ gcmx(ig)=gxo(ig)+tstep*(gvxx(ig)+chip*cxx) ++ gcmy(ig)=gyo(ig)+tstep*(gvyy(ig)+chip*cyy) ++ gcmz(ig)=gzo(ig)+tstep*(gvzz(ig)+chip*czz) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxo(i)-com(1) ++ cyy=yyo(i)-com(2) ++ czz=zzo(i)-com(3) ++ xxx(i)=xxo(i)+tstep*(vxx(i)+chip*cxx) ++ yyy(i)=yyo(i)+tstep*(vyy(i)+chip*cyy) ++ zzz(i)=zzo(i)+tstep*(vzz(i)+chip*czz) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c integration of barostat and thermostat (part 2) ++ ++ if(isw.eq.2)then ++ ++c current constraint virial ++ ++ vircon=-(strcns(1)+strcns(5)+strcns(9)) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply npt barostat ++ ++ call nptqscl_p ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, ++ x chip,chit,volm,press,vircon,virtot,vircom) ++ ++c integrate and apply npt thermostat ++ ++ call nptqscl_t ++ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c scale cell vectors - isotropic ++ ++ scale=(volm/vzero)**(1.d0/3.d0) ++ do i=1,9 ++ cell(i)=cell0(i)*scale ++ enddo ++ ++ endif ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.2)then ++ ++c calculate conserved variable ++ ++ consv=conint+0.5d0*qmass*chit**2+press*volm ++ x +0.5d0*pmass*chip**2 ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c merge velocity arrays ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++c construct scaling tensor (for tethered atoms) ++ ++ do i=1,9 ++ eta(i)=chip*uni(i) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c exchange position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(oxo,oyo,ozo,dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ ++ return ++ end subroutine nptqvv_h2 ++ ++ subroutine nstqvv_b2 ++ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, ++ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, ++ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nst ensemble - Berendsen thermostat and barostat ++c (n.b. not symplectic) ++c ++c isothermal compressibility (beta) set to that of liquid water ++c = 0.007372 dlpoly units ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sep 2005 ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode ++ integer iter,mxiter,jrs ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke ++ real(8) engtrn,taut,sigma,chit ++ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 ++ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 ++ real(8) volm,elrc0,elrc,virlrc0,virlrc ++ real(8) beta,press,taup,engfke,hstep,vzero ++ ++ integer, parameter :: nnn=13 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),uni(9),celp(10) ++ real(8) cell0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ ++ save newstep,newjob,volm0,elrc0,virlrc0,dens0 ++ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,hstep ++ ++ data newjob/.true./,beta/7.3728d-3/ ++ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ ++ ++c set array alocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c timestep parameters ++ ++ hstep=pt5*tstep ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2260) ++ ++c store initial values of volume and long range corrections ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ ++ newjob=.false. ++ ++ endif ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) ++ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) ++ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) ++ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), ++ x stat=fail(12)) ++ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), ++ x stat=fail(13)) ++ ++c check array allocation error flags ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2270) ++ enddo ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c calculate quaternion momenta at start of time step ++ ++ if(isw.eq.1)then ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) ++ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) ++ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) ++ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store key config data at start of time step ++ ++ if(isw.eq.1)then ++ ++c cell parameters ++ ++ vzero=volm ++ do i=1,9 ++ cell0(i)=cell(i) ++ enddo ++ ++c atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c rigid body positions ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ gxo(j)=gcmx(i) ++ gyo(j)=gcmy(i) ++ gzo(j)=gcmz(i) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxo(j)=vxx(i) ++ vyo(j)=vyy(i) ++ vzo(j)=vzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, momenta and cartesian velocities ++ ++ j=0 ++ do i=igrp1,igrp2 ++ ++ j=j+1 ++ b0(j)=q0(i) ++ b1(j)=q1(i) ++ b2(j)=q2(i) ++ b3(j)=q3(i) ++ c0(j)=p0(i) ++ c1(j)=p1(i) ++ c2(j)=p2(i) ++ c3(j)=p3(i) ++ gvxo(j)=gvxx(i) ++ gvyo(j)=gvyy(i) ++ gvzo(j)=gvzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c extract previous constraint terms from stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)-strcns(i) ++ enddo ++ ++ endif ++ ++c -------------- start of barostat iteration cycle ----------------- ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++ do i=1,9 ++ eta(i)=uni(i) ++ enddo ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ do i=1,9 ++ cell(i)=cell0(i) ++ enddo ++ ++c calculate Berendsen barostat ++ ++ do i=1,9 ++ eta(i)=tstep*beta*((stress(i)+strcns(i))/volm- ++ x press*uni(i))/taup+uni(i) ++ enddo ++ if(mode.gt.0)then ++ eta(3)=0.d0 ++ eta(6)=0.d0 ++ eta(7)=0.d0 ++ eta(8)=0.d0 ++ if(mode.lt.3)then ++ eta(2)=0.d0 ++ eta(4)=0.d0 ++ if(mode.eq.2)then ++ eta(1)=0.5d0*(eta(1)+eta(5)) ++ eta(5)=eta(1) ++ endif ++ endif ++ endif ++ ++c reset cell parameters for new volume ++ ++ call mat_mul(eta,cell,cell) ++ ++c calculate new volume ++ ++ call dcell(cell,celp) ++ volm=celp(10) ++ ++c reset constraint virial ++ ++ vircon=0.d0 ++ ++ do i=1,9 ++ strcns(i)=0.d0 ++ enddo ++ ++ endif ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ j=0 ++ do ifre=ifre1,ifre2 ++ ++ j=j+1 ++ i=lstfre(ifre) ++ vxx(i)=vxo(j)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vyo(j)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vzo(j)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c operations common to first and second stages ++ ++ jg=0 ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c fmx,fmy,fmz represent force on c.o.m. ++ ++ jrs=jr ++ fmx=0.d0 ++ fmy=0.d0 ++ fmz=0.d0 ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ fmx=fmx+fxx(i) ++ fmy=fmy+fyy(i) ++ fmz=fmz+fzz(i) ++ ++ enddo ++ ++c current rotational matrix ++ ++ jg=jg+1 ++ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) ++ ++c calculate torque in principal frame ++ ++ jr=jrs ++ ftx=0.d0 ++ fty=0.d0 ++ ftz=0.d0 ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) ++ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) ++ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) ++ ++ enddo ++ ++ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) ++ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) ++ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) ++ ++c calculate quaternion torques ++ ++ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) ++ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) ++ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) ++ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) ++ ++c update quaternion momentum by half timestep ++ ++ p0(ig)=c0(jg)+tq0*hstep ++ p1(ig)=c1(jg)+tq1*hstep ++ p2(ig)=c2(jg)+tq2*hstep ++ p3(ig)=c3(jg)+tq3*hstep ++ ++c update centre of mass velocity by half timestep ++ ++ gvxx(ig)=gvxo(jg)+fmx*hstep/gmass(id) ++ gvyy(ig)=gvyo(jg)+fmy*hstep/gmass(id) ++ gvzz(ig)=gvzo(jg)+fmz*hstep/gmass(id) ++ ++ enddo ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++ jg=0 ++ do ig=igrp1,igrp2 ++ ++ jg=jg+1 ++ ++c update centre of mass position by full time step ++ ++ gcmx(ig)=tstep*gvxx(ig)+ ++ x eta(1)*gxo(jg)+eta(4)*gyo(jg)+eta(7)*gzo(jg) ++ gcmy(ig)=tstep*gvyy(ig)+ ++ x eta(2)*gxo(jg)+eta(5)*gyo(jg)+eta(8)*gzo(jg) ++ gcmz(ig)=tstep*gvzz(ig)+ ++ x eta(3)*gxo(jg)+eta(6)*gyo(jg)+eta(9)*gzo(jg) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ q0(ig)=b0(jg) ++ q1(ig)=b1(jg) ++ q2(ig)=b2(jg) ++ q3(ig)=b3(jg) ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ xxx(i)=tstep*vxx(i)+ ++ x eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) ++ yyy(i)=tstep*vyy(i)+ ++ x eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) ++ zzz(i)=tstep*vzz(i)+ ++ x eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c rigid body contribution to stress tensor ++ ++ if(isw.eq.2)call bodystress ++ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ endif ++ ++c calculate kinetic energy ++ ++ if(isw.eq.2)then ++ ++ engfke=getkinf(ntfree,idnode,mxnode) ++ call getking(ngrp,idnode,mxnode,engtrn,engrot) ++ engtke=engfke+engtrn+engrot ++ engke=engfke+engtrn ++ ++c apply Berendsen thermostat - taut is the relaxation time ++ ++ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) ++ ++ engke=engke*chit**2 ++ engtrn=engtrn*chit**2 ++ engrot=engrot*chit**2 ++ ++c thermostat velocities of free particles ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ if(lstfrz(i).ne.0)then ++ ++ vxx(i)=chit*vxx(i) ++ vyy(i)=chit*vyy(i) ++ vzz(i)=chit*vzz(i) ++ ++ endif ++ ++ enddo ++ ++c thermostat rigid body velocities ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ omx(ig)=chit*omx(ig) ++ omy(ig)=chit*omy(ig) ++ omz(ig)=chit*omz(ig) ++ gvxx(ig)=chit*gvxx(ig) ++ gvyy(ig)=chit*gvyy(ig) ++ gvzz(ig)=chit*gvzz(ig) ++ ++ enddo ++ ++c kinetic contribution to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) ++ enddo ++ ++ endif ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ ++ return ++ end subroutine nstqvv_b2 ++ ++ subroutine nstqvv_h2 ++ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, ++ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, ++ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, ++ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) ++ ++c*********************************************************************** ++c ++c dlpoly subroutine to integrate rigid body equations of motion ++c using the symplectic no_squish quaternion algorithm of ++c miller et al j.chem.phys 116 (2002) 8649 ++c plus bond constraints - including rigid body sites linked ++c by constraint sites (qrattle algorithm) ++c ++c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 ++c ++c parallel replicated data version : block data ++c ++c omx,omy,omz=angular velocity in body fixed frame (principal axes) ++c rotinx,y,z =rotational inertia in body fixed frame ++c ++c copyright daresbury laboratory ++c author w.smith sept 2005 ++c adapted d. quigley : metadynamics ++c ++c********************************************************************** ++ ++ implicit none ++ ++ logical newstep,safe,lshmov,newjob ++ ++ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons ++ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr ++ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode ++ integer jcyc,iter,mxiter ++ ++ real(8) engke,engrot,tolnce,tstep,vircom,vircon ++ real(8) engtrn,engfke ++ real(8) vaa,vbb,vcc,opx,opy,opz ++ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv ++ real(8) cxx,cyy,czz,press,chip2,temp ++ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc ++ real(8) virlrc,elrc0,virlrc0,chit0,vzero,cons0 ++ ++ integer, parameter :: nnn=16 ++ integer, parameter :: ncyc=5 ++ real(8), parameter :: pt5=0.5d0 ++ ++ integer fail(nnn) ++ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) ++ real(8) cell0(9),eta0(9),stres0(9) ++ ++ real(8), allocatable :: dens0(:) ++ real(8), allocatable :: xxo(:),yyo(:),zzo(:) ++ real(8), allocatable :: vxo(:),vyo(:),vzo(:) ++ real(8), allocatable :: vx1(:),vy1(:),vz1(:) ++ real(8), allocatable :: fxo(:),fyo(:),fzo(:) ++ real(8), allocatable :: gxo(:),gyo(:),gzo(:) ++ real(8), allocatable :: oxo(:),oyo(:),ozo(:) ++ real(8), allocatable :: dxx(:),dyy(:),dzz(:) ++ real(8), allocatable :: txx(:),tyy(:),tzz(:) ++ real(8), allocatable :: xxt(:),yyt(:),zzt(:) ++ real(8), allocatable :: dxt(:),dyt(:),dzt(:) ++ real(8), allocatable :: dtx(:),dty(:),dtz(:) ++ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) ++ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) ++ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) ++ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) ++ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) ++ ++c metadynamics shell thermostat variables ++ ++ integer ntshl,keyshl ++ real(8) sigma_shl ++ ++ logical,save :: lfirst=.true. ++ real(8) :: chit_shl ++ real(8),save :: qmass_shl ++ real(8) :: shlke ++ ++c end metadynamics shell thermostat variables ++ ++ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 ++ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas ++ save pmass ++ ++ data newjob/.true./ ++ ++c set array allocation error flags ++ ++ do i=1,nnn ++ fail(i)=0 ++ enddo ++ ++c assign initial parameters ++ ++ if(newjob)then ++ ++c store intitial parameters ++ ++ volm0=volm ++ elrc0=elrc ++ virlrc0=virlrc ++ hstep=0.5d0*tstep ++ fstep=0.5d0*tstep/dble(ncyc) ++ qstep=0.25d0*tstep/dble(ncyc) ++ ++c allocate density storage array ++ ++ fail(1)=0 ++ allocate(dens0(mxatyp),stat=fail(1)) ++ if(fail(1).gt.0)call error(idnode,2220) ++ ++ do i=1,ntpatm ++ dens0(i)=dens(i) ++ enddo ++ ++c total system mass ++ ++ totmas=getmass(natms,idnode,mxnode) ++ ++c nose-hoover thermostat and barostat inertia parameter ++ ++ qmass=2.d0*sigma*taut**2 ++ pmass=2.d0*sigma*taup**2 ++ ++c free atom block indices ++ ++ ifre1=(idnode*ntfree)/mxnode+1 ++ ifre2=((idnode+1)*ntfree)/mxnode ++ ++c group block indices ++ ++ igrp1=(idnode*ngrp)/mxnode+1 ++ igrp2=((idnode+1)*ngrp)/mxnode ++ ++c check work arrays are large enough ++ ++ safe=(igrp2-igrp1+1.le.msgrp) ++ if(mxnode.gt.1) call gstate(safe) ++ if(.not.safe)then ++ igrp=igrp2-igrp1+1 ++ call gimax(igrp,1,idum) ++ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp ++ call error(idnode,506) ++ endif ++ ++ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) ++ newjob=.false. ++ ++ endif ++ ++ if(ntcons.gt.0)safe=.false. ++ ++c allocate working arrays ++ ++ if(isw.eq.1)then ++ ++ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) ++ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) ++ ++ endif ++ if(ntcons.gt.0)then ++ ++ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) ++ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) ++ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) ++ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) ++ ++ endif ++ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) ++ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) ++ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) ++ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) ++ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) ++ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), ++ x stat=fail(13)) ++ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), ++ x stat=fail(14)) ++ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) ++ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) ++ ++ do i=1,nnn ++ if(fail(i).gt.0)call error(idnode,2230) ++ enddo ++ ++ if(lmetadyn.and.lfirst.and.(ntshl>0))then ++ if(idnode.eq.0)then ++ write(*,*)"Warning - Metadynamics Modification" ++ write(*,*)"=========================" ++ write(*,*)"Coupling core-shell motion thermostat at 1 K" ++ endif ++ lfirst=.false. ++c use same relaxation time for global and core-shell? ++ qmass_shl=2.d0*sigma_shl*taut**2 ++ endif ++ ++c construct current bond vectors ++ ++ if(ntcons.gt.0)then ++ ++ do k=1,nscons ++ ++ i=listcon(k,2) ++ j=listcon(k,3) ++ dxx(k)=xxx(i)-xxx(j) ++ dyy(k)=yyy(i)-yyy(j) ++ dzz(k)=zzz(i)-zzz(j) ++ ++ enddo ++ ++ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) ++ ++ endif ++ ++c atom displacement from rigid body centre of mass ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++ dtx(jr)=xxx(i)-gcmx(ig) ++ dty(jr)=yyy(i)-gcmy(ig) ++ dtz(jr)=zzz(i)-gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c periodic boundary condition for displacement vectors ++ ++ call images(imcon,0,1,jr,cell,dtx,dty,dtz) ++ ++c store key config data at start of timestep ++ ++ vzero=volm ++ chit0=chit ++ cons0=conint ++ do i=1,9 ++ ++ cell0(i)=cell(i) ++ eta0(i)=eta(i) ++ stres0(i)=stress(i) ++ ++ enddo ++ ++ if(isw.eq.1)then ++ ++c remove system centre of mass velocity ++ ++ call getvom(natms,idnode,mxnode,totmas,vom) ++ ++ do i=1,natms ++ ++ vxx(i)=vxx(i)-vom(1) ++ vyy(i)=vyy(i)-vom(2) ++ vzz(i)=vzz(i)-vom(3) ++ ++ enddo ++ ++ do ig=1,ngrp ++ ++ gvxx(ig)=gvxx(ig)-vom(1) ++ gvyy(ig)=gvyy(ig)-vom(2) ++ gvzz(ig)=gvzz(ig)-vom(3) ++ ++ enddo ++ ++c store atom positions ++ ++ do i=1,natms ++ ++ xxo(i)=xxx(i) ++ yyo(i)=yyy(i) ++ zzo(i)=zzz(i) ++ ++ enddo ++ ++c store rigid body positions ++ ++ do ig=1,ngrp ++ ++ gxo(ig)=gcmx(ig) ++ gyo(ig)=gcmy(ig) ++ gzo(ig)=gcmz(ig) ++ ++ enddo ++ ++ endif ++ ++c store free atom velocities ++ ++ do i=1,natms ++ ++ vxo(i)=vxx(i) ++ vyo(i)=vyy(i) ++ vzo(i)=vzz(i) ++ ++ enddo ++ ++c store forces ++ ++ do i=1,natms ++ ++ fxo(i)=fxx(i) ++ fyo(i)=fyy(i) ++ fzo(i)=fzz(i) ++ ++ enddo ++ ++c store rigid body quaternions, angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ b0(ig)=q0(ig) ++ b1(ig)=q1(ig) ++ b2(ig)=q2(ig) ++ b3(ig)=q3(ig) ++ oxo(ig)=omx(ig) ++ oyo(ig)=omy(ig) ++ ozo(ig)=omz(ig) ++ gvxo(ig)=gvxx(ig) ++ gvyo(ig)=gvyy(ig) ++ gvzo(ig)=gvzz(ig) ++ ++ enddo ++ ++c iteration necessary if ntcons > 0 and isw=1 ++ ++ mxiter=1 ++ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 ++ do iter=1,mxiter ++ ++c integration of barostat and thermostat (part 1) ++ ++ if(isw.eq.1)then ++ ++c restore cell parameters ++ ++ volm=vzero ++ chit=chit0 ++ conint=cons0 ++ do i=1,9 ++ ++ cell(i)=cell0(i) ++ eta(i)=eta0(i) ++ ++ enddo ++ ++c restore free atom velocities ++ ++ do i=1,natms ++ ++ vxx(i)=vxo(i) ++ vyy(i)=vyo(i) ++ vzz(i)=vzo(i) ++ ++ enddo ++ ++c restore rigid body quaternions angular and cartesian velocities ++ ++ do ig=1,ngrp ++ ++ omx(ig)=oxo(ig) ++ omy(ig)=oyo(ig) ++ omz(ig)=ozo(ig) ++ gvxx(ig)=gvxo(ig) ++ gvyy(ig)=gvyo(ig) ++ gvzz(ig)=gvzo(ig) ++ ++ enddo ++ ++c kinetic contributions to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, ++ x volm,strkin,strgrp) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c reset constraint virial and stress ++ ++ vircon=0.d0 ++ do i=1,9 ++ ++ stress(i)=stress(i)-strcns(i)-strbod(i) ++ strcns(i)=0.d0 ++ ++ enddo ++ ++c calculate quaternion momenta ++ ++ do ig=igrp1,igrp2 ++ ++ id=lstgtp(ig) ++ opx=omx(ig)*rotinx(id,1) ++ opy=omy(ig)*rotiny(id,1) ++ opz=omz(ig)*rotinz(id,1) ++ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) ++ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) ++ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) ++ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) ++ ++ enddo ++ ++ endif ++ ++c store intermediate velocities ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vx1(i)=vxx(i) ++ vy1(i)=vyy(i) ++ vz1(i)=vzz(i) ++ ++ enddo ++ do ig=igrp1,igrp2 ++ ++ c0(ig)=p0(ig) ++ c1(ig)=p1(ig) ++ c2(ig)=p2(ig) ++ c3(ig)=p3(ig) ++ gvx1(ig)=gvxx(ig) ++ gvy1(ig)=gvyy(ig) ++ gvz1(ig)=gvzz(ig) ++ ++ enddo ++ ++c -------------- start of shake iteration cycle ------------------- ++ ++ icyc=0 ++ mxshk=1 ++ safe=.false. ++ newstep=.true. ++ if(ntcons.gt.0)mxshk=mxshak ++ ++ do while(.not.safe.and.icyc.lt.mxshk) ++ ++ icyc=icyc+1 ++ ++c update velocities of free atoms 1/2 timestep ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) ++ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) ++ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) ++ ++ enddo ++ ++c ************* rigid body motion **************************** ++ ++c restore rigid body quaternions, angular momenta and velocities ++ ++ do ig=igrp1,igrp2 ++ ++ q0(ig)=b0(ig) ++ q1(ig)=b1(ig) ++ q2(ig)=b2(ig) ++ q3(ig)=b3(ig) ++ p0(ig)=c0(ig) ++ p1(ig)=c1(ig) ++ p2(ig)=c2(ig) ++ p3(ig)=c3(ig) ++ gvxx(ig)=gvx1(ig) ++ gvyy(ig)=gvy1(ig) ++ gvzz(ig)=gvz1(ig) ++ ++ enddo ++ ++c calculate new rigid body velocities ++ ++ call rotate_omega ++ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) ++ ++c first stage of velocity verlet algorithm ++ ++ if(isw.eq.1)then ++ ++c calculate system centre of mass ++ ++ call getcom(natms,idnode,mxnode,totmas,com) ++ ++c update centre of mass position by full time step ++ ++ do ig=igrp1,igrp2 ++ ++ cxx=gxo(ig)-com(1) ++ cyy=gyo(ig)-com(2) ++ czz=gzo(ig)-com(3) ++ gcmx(ig)=gxo(ig)+ ++ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ gcmy(ig)=gyo(ig)+ ++ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ gcmz(ig)=gzo(ig)+ ++ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++c calculate rotation of rigid groups: nosquish algorithm ++ ++ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) ++ ++ enddo ++ ++c merge group coms from all nodes ++ ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++c new atomic positions for atoms in rigid bodies - relative to com ++ ++ k=0 ++ do ig=igrp1,igrp2 ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++ id=lstgtp(ig) ++ do j=1,numgsit(id) ++ ++ k=k+1 ++ i=lstme(k) ++ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ ++ x rot(3)*gzz(id,j)+gcmx(ig) ++ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ ++ x rot(6)*gzz(id,j)+gcmy(ig) ++ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ ++ x rot(9)*gzz(id,j)+gcmz(ig) ++ ++ enddo ++ ++ enddo ++ ++c update positions of free particles to full time step ++ ++ do ifre=ifre1,ifre2 ++ ++ i=lstfre(ifre) ++ cxx=xxo(i)-com(1) ++ cyy=yyo(i)-com(2) ++ czz=zzo(i)-com(3) ++ xxx(i)=xxo(i)+ ++ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) ++ yyy(i)=yyo(i)+ ++ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) ++ zzz(i)=zzo(i)+ ++ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) ++ ++ enddo ++ ++c merge atom positions ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ ++c apply rattle corrections to bond constraints ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ call qrattle_r ++ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, ++ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, ++ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) ++ ++ endif ++ ++c end of first stage ++ ++ endif ++ ++c second stage of velocity verlet algorithm ++ ++ if(isw.eq.2)then ++ ++ jr=0 ++ do ig=igrp1,igrp2 ++ ++c new angular momenta and velocities ++ ++ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ ++ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) ++ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ ++ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) ++ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- ++ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) ++ ++ id=lstgtp(ig) ++ ++ omx(ig)=opx*rotinx(id,2) ++ omy(ig)=opy*rotiny(id,2) ++ omz(ig)=opz*rotinz(id,2) ++ ++c new rotational matrix ++ ++ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) ++ ++c new atomic velocites ++ ++ do j=1,numgsit(id) ++ ++ jr=jr+1 ++ i=lstrgd(jr) ++ ++c new atomic velocites in body frame ++ ++ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) ++ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) ++ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) ++ ++c new atomic velocites in lab frame ++ ++ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) ++ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) ++ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) ++ ++ enddo ++ ++ enddo ++ ++c merge velocities and forces from all nodes ++ ++ if(ntcons.gt.0)then ++ ++ if(mxnode.gt.1)then ++ ++ call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ call merge1 ++ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) ++ ++ endif ++ ++c correct constraint bond velocities using rattle ++ ++ call qrattle_v ++ x (newstep,safe,lshmov,idnode,mxnode,natms, ++ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, ++ x xxt,yyt,zzt) ++ ++ endif ++ ++c end of second stage ++ ++ endif ++ ++ newstep=.false. ++ ++ enddo ++ ++c check shake convergence ++ ++ if(.not.safe)call error(idnode,105) ++ ++c sum constraint virial and stress across processors ++ ++ if(mxnode.gt.1.and.isw.eq.1)then ++ ++ buffer(1)=vircon ++ call gdsum(buffer(1),1,buffer(2)) ++ vircon=buffer(1) ++ call gdsum(strcns,9,buffer) ++ ++ endif ++ ++c -------------- end of shake iteration cycle ------------------- ++ ++c calculate rigid body contribution to stress tensor ++ ++ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) ++ ++c add new constraint terms to stress tensor ++ ++ if(isw.eq.1)then ++ ++ do i=1,9 ++ stress(i)=stress(i)+strcns(i)+strbod(i) ++ enddo ++ ++ endif ++ ++c integration of barostat and thermostat (part 2) ++ ++ if(isw.eq.2)then ++ ++c kinetic contributions to stress tensor ++ ++ call kinstressf(ntfree,idnode,mxnode,strkin) ++ call kinstressg(ngrp,idnode,mxnode,strgrp) ++ ++c add kinetic and body contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++ do jcyc=1,ncyc ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++c integrate and apply nst barostat ++ ++ call nstqscl_p2 ++ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, ++ x volm,strkin,strgrp) ++ ++c integrate and apply nst thermostat ++ ++ call nstqscl_t2 ++ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, ++ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) ++ ++c metadynamics shell thermostat ++c ==================================================== ++c Must first merge update velocities as the core-shell ++c velocites are not distributed according to the same ++c rules. ++c ==================================================== ++ if(lmetadyn.and.keyshl.eq.1)then ++ if(mxnode.gt.1)call merge ++ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) ++ call nvtscale_shl ++ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, ++ x taut,chit_shl,conint) ++ endif ++ ++ enddo ++ ++c translational kinetic energy ++ ++ engke=engfke+engtrn ++ ++c sum up all contributions to stress tensor ++ ++ do i=1,9 ++ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) ++ enddo ++ ++ endif ++ ++c restore forces ++ ++ do i=1,natms ++ ++ fxx(i)=fxo(i) ++ fyy(i)=fyo(i) ++ fzz(i)=fzo(i) ++ ++ enddo ++ ++c -------------- end of barostat iteration cycle ---------------- ++ ++ enddo ++ ++ if(isw.eq.2)then ++ ++c calculate conserved variable ++ ++ chip2=sdot0(9,eta,eta) ++ if(mode.eq.2)chip2=chip2-eta(1)**2 ++ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm ++ ++c metadynamics shell thermostat ++ ++ if(lmetadyn.and.keyshl.eq.1)then ++ consv=consv+0.5d0*qmass_shl*chit_shl**2 ++ endif ++ ++c merge velocity arrays ++ ++ if(mxnode.gt.1)call merge1 ++ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c adjust long range corrections and number density ++ ++ elrc=elrc0*(volm0/volm) ++ virlrc=virlrc0*(volm0/volm) ++ do k=1,ntpatm ++ dens(k)=dens0(k)*(volm0/volm) ++ enddo ++ ++ if(mxnode.gt.1)then ++ ++c merge new group coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) ++ ++c merge new atomic coordinates and velocities ++ ++ if(isw.eq.1) ++ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) ++ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) ++ ++ endif ++ ++c periodic boundary condition ++ ++ if(isw.eq.2)then ++ ++ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) ++ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) ++ ++c merge position data ++ ++ if(mxnode.gt.1)then ++ ++ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) ++ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) ++ ++ endif ++ ++ endif ++ ++c deallocate working arrays ++ ++ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) ++ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) ++ deallocate(dtx,dty,dtz,stat=fail(3)) ++ if(isw.eq.1)then ++ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) ++ endif ++ if(ntcons.gt.0)then ++ ++ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) ++ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) ++ ++ endif ++ if(isw.eq.2)then ++ deallocate(fxo,fyo,fzo,stat=fail(7)) ++ endif ++ ++ return ++ end subroutine nstqvv_h2 ++ ++ end module vv_rotation2_module diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb b/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb new file mode 100644 index 0000000000..ab0d6b9ba8 --- /dev/null +++ b/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'GMP' +version = '6.0.0a' + +homepage = 'http://gmplib.org/' +description = """GMP is a free library for arbitrary precision arithmetic, +operating on signed integers, rational numbers, and floating point numbers. """ + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'pic': True, 'precise': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [GNU_SOURCE] + +# enable C++ interface +configopts = '--enable-cxx' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libgmp.%s' % SHLIB_EXT, 'include/gmp.h'], + 'dirs': [], +} + +moduleclass = 'math' + diff --git a/easybuild/easyconfigs/g/GSL/GSL-1.16-foss-2015b.eb b/easybuild/easyconfigs/g/GSL/GSL-1.16-foss-2015b.eb new file mode 100644 index 0000000000..ed67148304 --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-1.16-foss-2015b.eb @@ -0,0 +1,18 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = '1.16' + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting.""" + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/g/guile/guile-1.8.8-foss-2015b.eb b/easybuild/easyconfigs/g/guile/guile-1.8.8-foss-2015b.eb new file mode 100644 index 0000000000..ad804aa4b1 --- /dev/null +++ b/easybuild/easyconfigs/g/guile/guile-1.8.8-foss-2015b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'guile' +version = '1.8.8' + +homepage = 'http://www.gnu.org/software/guile' +description = """Guile is the GNU Ubiquitous Intelligent Language for Extensions, + the official extension language for the GNU operating system.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libtool', '2.4.6', '', ('GNU', '4.9.3-2.25')), + ('GMP', '6.0.0a'), + ('libunistring', '0.9.3'), + ('pkg-config', '0.27.1'), + ('libffi', '3.0.13'), + ('libreadline', '6.3'), +] + +configopts = " --enable-error-on-warning=no" + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["guile", 'guile-config', 'guile-snarf', 'guile-tools']] + ["lib/libguile.a", "include/libguile.h"], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb new file mode 100644 index 0000000000..dac06d1c8d --- /dev/null +++ b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'libffi' +version = '3.0.13' + +homepage = 'http://sourceware.org/libffi/' +description = """The libffi library provides a portable, high level programming interface to various calling +conventions. This allows a programmer to call any function specified by a call interface description at run-time.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = [ + 'ftp://sourceware.org/pub/libffi/', + 'http://www.mirrorservice.org/sites/sourceware.org/pub/libffi/', +] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['libffi-%(version)s_include-xmmintrin.patch'] + +sanity_check_paths = { + 'files': [('lib/libffi.%s' % SHLIB_EXT, 'lib64/libffi.%s' % SHLIB_EXT), ('lib/libffi.a', 'lib64/libffi.a')], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb new file mode 100644 index 0000000000..2fd935d0b5 --- /dev/null +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libmatheval' +version = '1.1.11' + +homepage = 'http://www.gnu.org/software/libmatheval/' +description = """GNU libmatheval is a library (callable from C and Fortran) to parse + and evaluate symbolic expressions input as text.""" + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('flex', '2.5.39'), + ('Bison', '3.0.4'), + ('byacc', '20150711'), + ('guile', '1.8.8'), +] + +configopts = '--with-pic ' + +# fix for guile-config being broken because shebang line contains full path to bin/guile +configopts += 'GUILE_CONFIG="$EBROOTGUILE/bin/guile -e main -s $EBROOTGUILE/bin/guile-config"' + +sanity_check_paths = { + 'files': ['lib/libmatheval.a', 'include/matheval.h'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb new file mode 100644 index 0000000000..91f9c37650 --- /dev/null +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libunistring' +version = '0.9.3' + +homepage = 'http://www.gnu.org/software/libunistring/' +description = """This library provides functions for manipulating Unicode strings and for manipulating C strings + according to the Unicode standard.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +patches = ['libunistring_icc_builtin_nan-inf.patch'] + +parallel = 1 + +sanity_check_paths = { + 'files' : ['lib/libunistring.a', 'lib/libunistring.so'] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs' : ['include/unistring'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.17-foss-2015b.eb b/easybuild/easyconfigs/m/M4/M4-1.4.17-foss-2015b.eb new file mode 100644 index 0000000000..b66775c7a6 --- /dev/null +++ b/easybuild/easyconfigs/m/M4/M4-1.4.17-foss-2015b.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'M4' +version = '1.4.17' + +homepage = 'http://www.gnu.org/software/m4/m4.html' +description = """GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible + although it has some extensions (for example, handling more than 9 positional parameters to macros). + GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +configopts = "--enable-cxx" + +sanity_check_paths = { + 'files': ["bin/m4"], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-foss-2015b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-foss-2015b.eb new file mode 100644 index 0000000000..fc4323d74a --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-foss-2015b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.1.4' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '1.16'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.so', 'lib/libplumed.so'], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.so', + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb new file mode 100644 index 0000000000..73c06e7f1b --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.27.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +# don't use PAX, it might break. +tar_config_opts = True + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://pkgconfig.freedesktop.org/releases/'] + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From bf480ff21168394c545130e497ad7d433053a889 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 17 Nov 2015 10:16:01 +0100 Subject: [PATCH 0020/1311] Move DL_POLY 1.9 with PLUMED 2.2 from intel to foss The PLUMED module does not get along with intel mpi. Only foss seems to work. --- ...-2.2.0.eb => DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/d/DL_POLY_Classic/{DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb => DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb} (95%) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb similarity index 95% rename from easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb rename to easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb index caf84040c2..e386c9a274 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2015b-PLUMED-2.2.0.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb @@ -7,7 +7,7 @@ homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' description = """DL_POLY Classic is a freely available molecular dynamics program developed from the DL_POLY_2 package. This version does not install the java gui.""" -toolchain = {'name': 'intel', 'version': '2015b'} +toolchain = {'name': 'foss', 'version': '2015b'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] -- GitLab From 5069c91268b9cfc3785279bed3a78e9ac445d217 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 17 Nov 2015 10:53:43 +0100 Subject: [PATCH 0021/1311] Add PLUMED 2.2 and 2.1 for intel & foss --- .../p/PLUMED/PLUMED-2.1.4-intel-2015b.eb | 42 +++++++++++++++++++ .../p/PLUMED/PLUMED-2.2.0-foss-2015b.eb | 42 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-intel-2015b.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-foss-2015b.eb diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-intel-2015b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-intel-2015b.eb new file mode 100644 index 0000000000..ec5fd48964 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.1.4-intel-2015b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.1.4' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'intel', 'version': '2015b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '1.16'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.so', 'lib/libplumed.so'], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.so', + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-foss-2015b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-foss-2015b.eb new file mode 100644 index 0000000000..c12f858946 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.0-foss-2015b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.2.0' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '1.16'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.so', 'lib/libplumed.so'], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.so', + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From 4a843c0ab1fd84f5bc356bede4d22b8dab1e9e64 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 2 Dec 2015 20:10:45 +0100 Subject: [PATCH 0022/1311] Fix remarks --- easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb | 2 -- .../easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb | 2 -- 2 files changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb index dac06d1c8d..e22ff76c36 100644 --- a/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libffi/libffi-3.0.13-foss-2015b.eb @@ -15,8 +15,6 @@ source_urls = [ ] sources = [SOURCELOWER_TAR_GZ] -patches = ['libffi-%(version)s_include-xmmintrin.patch'] - sanity_check_paths = { 'files': [('lib/libffi.%s' % SHLIB_EXT, 'lib64/libffi.%s' % SHLIB_EXT), ('lib/libffi.a', 'lib64/libffi.a')], 'dirs': [], diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb index 91f9c37650..acf2b33dbf 100644 --- a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb @@ -12,8 +12,6 @@ toolchain = {'name': 'foss', 'version': '2015b'} sources = [SOURCELOWER_TAR_GZ] source_urls = [GNU_SOURCE] -patches = ['libunistring_icc_builtin_nan-inf.patch'] - parallel = 1 sanity_check_paths = { -- GitLab From b5c913f955d3b047e39ae8f04c14a8a3a6b789f1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 16 Jan 2016 11:15:43 +0100 Subject: [PATCH 0023/1311] fix remarks --- .../m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb index 213b10dd3a..d1f506aa9d 100644 --- a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb +++ b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb @@ -14,7 +14,7 @@ connected to the treatment of highly degenerate states.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = ['http://www.kvant.kemi.uu.se/molcas/'] +# download requires registration, see http://www.kvant.kemi.uu.se/molcas/ sources = ['%(namelower)s-%(version)s%(versionsuffix)s.tgz'] unpack_options = "--transform='s,^%(namelower)s-%(version)s%(versionsuffix)s,%(namelower)s_files,'" @@ -26,10 +26,11 @@ postinstallcmds = [ 'cp %(installdir)s/%(namelower)s_files/sbin/molcas.driver %(installdir)s/bin/molcas', ] +modextravars = {'MOLCAS': '%(installdir)s/%(namelower)s_files'} + sanity_check_paths = { 'files': ['bin/molcas'], 'dirs': ['bin'], } moduleclass = 'chem' -modextravars = {'MOLCAS': '%(installdir)s/%(namelower)s_files'} -- GitLab From 54ea3dda2e54e6e0a92ac20c44fc8fdc6d8bc156 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 26 Jan 2016 12:22:43 +1300 Subject: [PATCH 0024/1311] Added explanations for unpack_options and postinstallcmds --- .../m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb index d1f506aa9d..2bf90d3dc1 100644 --- a/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb +++ b/easybuild/easyconfigs/m/Molcas/Molcas-8.0-15.06.18_CentOS_6.6_x86_64.eb @@ -16,11 +16,20 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # download requires registration, see http://www.kvant.kemi.uu.se/molcas/ sources = ['%(namelower)s-%(version)s%(versionsuffix)s.tgz'] + +# The Molcas installation procedure creates a binary in a separate directory, +# but that binary depends on being able to find the originally extracted files. +# Because we don't want to rely on root privileges, and we do want to use +# EasyBuild paths, this means we need to extract Molcas to a subdirectory of +# the proposed installation directory. unpack_options = "--transform='s,^%(namelower)s-%(version)s%(versionsuffix)s,%(namelower)s_files,'" buildininstalldir = True skipsteps = ['install'] +# For the same reason as the tarball needs an extraction prefix, we need to +# finish up the installation by taking the Molcas driver and moving it to an +# EasyBuild style binary directory. postinstallcmds = [ 'mkdir -p %(installdir)s/bin', 'cp %(installdir)s/%(namelower)s_files/sbin/molcas.driver %(installdir)s/bin/molcas', -- GitLab From ed1dc57c34f1545070e4342fda5de040fa88636c Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 24 Feb 2016 13:57:11 +1300 Subject: [PATCH 0025/1311] Updates to extensions --- .../p/Python/Python-2.7.11-foss-2015a.eb | 89 +++++++++++++++++-- 1 file changed, 82 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index 34c45f4ac7..17fa65688e 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -8,7 +8,7 @@ description = """Python is a programming language that lets you work more quickl toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.10.1' +numpyversion = '1.10.2' scipyversion = '0.16.1' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] @@ -32,10 +32,10 @@ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! # package versions updated May 28th 2015 exts_list = [ - ('setuptools', '18.7.1', { + ('setuptools', '20.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], }), - ('pip', '7.1.2', { + ('pip', '8.0.2', { 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], }), ('nose', '1.3.7', { @@ -51,7 +51,7 @@ exts_list = [ ('blist', '1.3.6', { 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], }), - ('mpi4py', '1.3.1', { + ('mpi4py', '2.0.0', { 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], }), ('paycheck', '1.0.2', { @@ -60,7 +60,7 @@ exts_list = [ ('argparse', '1.4.0', { 'source_urls': ['https://pypi.python.org/packages/source/a/argparse/'], }), - ('pbr', '1.8.1', { + ('pbr', '0.11.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], }), ('lockfile', '0.12.2', { @@ -80,7 +80,7 @@ exts_list = [ 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], }), - ('decorator', '4.0.4', { + ('decorator', '4.0.9', { 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], }), ('arff', '2.1.0', { @@ -97,7 +97,7 @@ exts_list = [ ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], }), - ('pyparsing', '2.0.6', { + ('pyparsing', '2.1.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('netifaces', '0.10.4', { @@ -127,5 +127,80 @@ exts_list = [ 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], }), ] + # The following are optional packages that we may or may not see fit to + # include. + # + #('astroid', '1.4.4', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/a/astroid'], + #}), + #('Fiona', '1.6.3', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/F/Fiona'], + #}), + #('h5py', '2.5.0', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/h/h5py'], + #}), + #('Jinja2', '2.8', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2'], + #}), + #('line_profiler', '1.0', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/l/line_profiler'], + #}), + #('llvmlite', '0.8.0', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmlite'], + #}), + #('llvmmath', '0.1.1', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmmath'], + #}), + #('llvmpy', '0.12.7', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmpy'], + #}), + #('logilab-common', '1.1.0', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/l/logilab-common'], + #}), + #('MarkupSafe', '0.23', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/m/MarkupSafe'], + #}), + #('matplotlib', '1.5.1', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + #}), + #('memory_profiler', '0.41', { + # 'source_tmpl': '%(name)s-%(version)s.tar.gz', + # 'source_urls': ['https://pypi.python.org/packages/source/m/memory_profiler'], + #}), + #('numba', '0.23.1', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/n/numba'], + #}), + #('numexpr', '2.5', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/n/numexpr'], + #}), + #('patsy', '0.4.1', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/p/patsy'], + #}), + #('prettytable', '0.7.2', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/p/prettytable'], + #}), + #('psutil', '4.0.0', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/p/psutil'], + #}), + #('psycopg2', '2.6.1', { + # 'source_tmpl': '%(name)s-%(version)s.zip', + # 'source_urls': ['https://pypi.python.org/packages/source/p/psycopg2'], + #}), moduleclass = 'lang' -- GitLab From f90562e072b4a88ab13fea299e890c8040f91048 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 30 Mar 2016 17:11:05 +1300 Subject: [PATCH 0026/1311] New easyconfig for Python 3 for FOSS 2015a --- .../p/Python/Python-3.5.1-foss-2015a.eb | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb new file mode 100644 index 0000000000..9629fd32d4 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -0,0 +1,115 @@ +name = 'Python' +version = '3.5.1' + +homepage = 'http://python.org/' +description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +numpyversion = '1.10.2' +scipyversion = '0.16.1' + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '5.9'), + ('SQLite', '3.10.0'), + ('Tk', '8.6.4', '-no-X11'), + ('GMP', '6.1.0'), +# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's +# nice to have an up to date openssl for security reasons +] + +osdependencies = [('openssl-devel', 'libssl-dev')] + +# order is important! +# package versions updated Feb 25th 2016 +exts_list = [ + ('setuptools', '20.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + }), + ('pip', '8.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', numpyversion, { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy/'], + }), + ('scipy', scipyversion, { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy/'], + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + 'patches': [ + 'paycheck-1.0.2_setup-open-README-utf8.patch', + ], + }), + ('pbr', '1.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('lockfile', '0.12.2', { + 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], + }), + ('Cython', '0.23.4', { + 'source_urls': ['http://www.cython.org/release/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.4.2', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + 'patches': [ + 'deap-1.0.2_setup-open-README-utf8.patch', + ], + }), + ('decorator', '4.0.9', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('paramiko', '1.16.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.4', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.18', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('pandas', '0.17.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), +] + +moduleclass = 'lang' -- GitLab From fa58580a725e58f6aab7c741d9558cae9e6d2f3d Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 6 Apr 2016 11:36:23 +1200 Subject: [PATCH 0027/1311] Updates to package versions --- .../p/Python/Python-2.7.11-foss-2015a.eb | 103 +++--------------- .../p/Python/Python-3.5.1-foss-2015a.eb | 30 +++-- 2 files changed, 34 insertions(+), 99 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index 552cdc8882..a5514e370f 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -8,8 +8,8 @@ description = """Python is a programming language that lets you work more quickl toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.10.2' -scipyversion = '0.16.1' +numpyversion = '1.11.0' +scipyversion = '0.17.0' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] sources = [SOURCE_TGZ] @@ -23,19 +23,19 @@ dependencies = [ ('SQLite', '3.10.0'), ('Tk', '8.6.4', '-no-X11'), ('GMP', '6.1.0'), # required for pycrypto - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons +# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's +# nice to have an up to date openssl for security reasons ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! -# package versions updated May 28th 2015 +# package versions updated 1 April 2016 exts_list = [ - ('setuptools', '20.1.1', { + ('setuptools', '20.3.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], }), - ('pip', '8.0.2', { + ('pip', '8.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], }), ('nose', '1.3.7', { @@ -60,19 +60,19 @@ exts_list = [ ('argparse', '1.4.0', { 'source_urls': ['https://pypi.python.org/packages/source/a/argparse/'], }), - ('pbr', '0.11.1', { + ('pbr', '1.8.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], }), ('lockfile', '0.12.2', { 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], }), - ('Cython', '0.23.4', { + ('Cython', '0.24b0', { 'source_urls': ['http://www.cython.org/release/'], }), ('six', '1.10.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), - ('dateutil', '2.4.2', { + ('dateutil', '2.5.2', { 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], }), @@ -97,7 +97,7 @@ exts_list = [ ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], }), - ('pyparsing', '2.1.0', { + ('pyparsing', '2.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('netifaces', '0.10.4', { @@ -112,10 +112,10 @@ exts_list = [ ('mock', '1.3.0', { 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], }), - ('pytz', '2015.7', { + ('pytz', '2016.3', { 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], }), - ('pandas', '0.17.1', { + ('pandas', '0.18.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], }), ('enum34', '1.1.2', { @@ -126,84 +126,9 @@ exts_list = [ 'source_tmpl': '%(name)s-%(version)s.zip', 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], }), - ('virtualenv', '14.0.5', { + ('virtualenv', '15.0.1', { 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], }), ] - # The following are optional packages that we may or may not see fit to - # include. - # - #('astroid', '1.4.4', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/a/astroid'], - #}), - #('Fiona', '1.6.3', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/F/Fiona'], - #}), - #('h5py', '2.5.0', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/h/h5py'], - #}), - #('Jinja2', '2.8', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2'], - #}), - #('line_profiler', '1.0', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/l/line_profiler'], - #}), - #('llvmlite', '0.8.0', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmlite'], - #}), - #('llvmmath', '0.1.1', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmmath'], - #}), - #('llvmpy', '0.12.7', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/l/llvmpy'], - #}), - #('logilab-common', '1.1.0', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/l/logilab-common'], - #}), - #('MarkupSafe', '0.23', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/m/MarkupSafe'], - #}), - #('matplotlib', '1.5.1', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], - #}), - #('memory_profiler', '0.41', { - # 'source_tmpl': '%(name)s-%(version)s.tar.gz', - # 'source_urls': ['https://pypi.python.org/packages/source/m/memory_profiler'], - #}), - #('numba', '0.23.1', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/n/numba'], - #}), - #('numexpr', '2.5', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/n/numexpr'], - #}), - #('patsy', '0.4.1', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/p/patsy'], - #}), - #('prettytable', '0.7.2', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/p/prettytable'], - #}), - #('psutil', '4.0.0', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/p/psutil'], - #}), - #('psycopg2', '2.6.1', { - # 'source_tmpl': '%(name)s-%(version)s.zip', - # 'source_urls': ['https://pypi.python.org/packages/source/p/psycopg2'], - #}), moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index 9629fd32d4..020cd82ccf 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -7,8 +7,8 @@ description = "Python is a programming language that lets you work more quickly toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.10.2' -scipyversion = '0.16.1' +numpyversion = '1.11.0' +scipyversion = '0.17.0' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] sources = [SOURCE_TGZ] @@ -29,12 +29,12 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev')] # order is important! -# package versions updated Feb 25th 2016 +# package versions updated 1 April 2016 exts_list = [ - ('setuptools', '20.1.1', { + ('setuptools', '20.3.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], }), - ('pip', '8.0.2', { + ('pip', '8.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], }), ('nose', '1.3.7', { @@ -64,13 +64,13 @@ exts_list = [ ('lockfile', '0.12.2', { 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], }), - ('Cython', '0.23.4', { + ('Cython', '0.24b0', { 'source_urls': ['http://www.cython.org/release/'], }), ('six', '1.10.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), - ('dateutil', '2.4.2', { + ('dateutil', '2.5.2', { 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], }), @@ -97,8 +97,8 @@ exts_list = [ }), ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], - }), - ('pyparsing', '2.1.0', { + }), + ('pyparsing', '2.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('netifaces', '0.10.4', { @@ -107,9 +107,19 @@ exts_list = [ ('netaddr', '0.7.18', { 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], }), - ('pandas', '0.17.1', { + ('pytz', '2016.3', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('pandas', '0.18.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], }), + ('bitstring', '3.1.3', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), ] moduleclass = 'lang' -- GitLab From 2061c62eeefb657ee1277f35be7c104c4b454159 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 6 Apr 2016 14:36:27 +1200 Subject: [PATCH 0028/1311] Revert NumPy version --- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index a5514e370f..2a7f187bad 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -8,7 +8,7 @@ description = """Python is a programming language that lets you work more quickl toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.11.0' +numpyversion = '1.10.1' scipyversion = '0.17.0' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index 020cd82ccf..d5d4531b05 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -7,7 +7,7 @@ description = "Python is a programming language that lets you work more quickly toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.11.0' +numpyversion = '1.10.1' scipyversion = '0.17.0' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] -- GitLab From 803a9868379be9487627c86b9de5c058b1e85ec9 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 18 Apr 2016 14:22:01 +1200 Subject: [PATCH 0029/1311] New EasyConfig for PGI 16.1 with GCC 4.9.2 --- .../p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb new file mode 100644 index 0000000000..5972e15b28 --- /dev/null +++ b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb @@ -0,0 +1,25 @@ +name = 'PGI' +version = '16.1' + +homepage = 'http://www.pgroup.com/' +description = "C, C++ and Fortran compilers from The Portland Group - PGI" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['pgicdk-%(version_major)s%(version_minor)s.tar.gz'] +checksums = ['442c044b9690a84b6600cd6919480bcb'] + +gccver = '4.9.2' +binutilsver = '2.25' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), + ('numactl', '2.0.11', '', ('GCCcore', gccver)), +] + +# license file +license_file = HOME + '/licenses/pgi/license.dat' + +moduleclass = 'compiler' -- GitLab From 77829e78309a5abee41e99ae3738435badc19f77 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 19 Apr 2016 10:56:27 +1200 Subject: [PATCH 0030/1311] Look for the PGI licence file in the home directory of the installing user --- easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb index 5972e15b28..eedfe32fda 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb @@ -20,6 +20,7 @@ dependencies = [ ] # license file -license_file = HOME + '/licenses/pgi/license.dat' +import os +license_file = os.path.join(os.getenv('HOME'), "licenses", "pgi", "license.dat") moduleclass = 'compiler' -- GitLab From 564feda22e5efaa132254a5fd1f9fb1019970bd7 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 2 May 2016 16:56:03 +1200 Subject: [PATCH 0031/1311] Use HOME constant instead of env var --- easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb index eedfe32fda..7f076bfe4d 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb @@ -21,6 +21,6 @@ dependencies = [ # license file import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "pgi", "license.dat") +license_file = os.path.join(HOME, "licenses", "pgi", "license.dat") moduleclass = 'compiler' -- GitLab From 9aaf9d0a12434b5c4ded1efa5c2eaced92d26643 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 17 May 2016 11:37:05 +1200 Subject: [PATCH 0032/1311] Clarified some comments and took out a local patch --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 3 +-- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 1434110104..2a1ad2658f 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -9,11 +9,10 @@ modelling and comparison.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -# Can't download from the web site as the file is behind a rego wall. +# Can't download from the web site automatically as registration is required. # The URL is, nevertheless, included here for reference. #source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] sources = ['%(name)s%(version)s.tar.bz2'] -patches = ['%(name)s-%(version)s-local-mods.patch'] dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 228054aadf..02e174bf10 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -9,11 +9,10 @@ modelling and comparison.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -# Can't download from the web site as the file is behind a rego wall. +# Can't download from the web site automatically as registration is required. # The URL is, nevertheless, included here for reference. #source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] sources = ['%(name)s%(version)s.tar.bz2'] -patches = ['%(name)s-%(version)s-local-mods.patch'] dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] -- GitLab From 81decb13f423645cc345b6edcfae06d1de383dbc Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 17 May 2016 14:08:53 +1200 Subject: [PATCH 0033/1311] Put license_file path in canonical EB form --- easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb index 7f076bfe4d..5972e15b28 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb @@ -20,7 +20,6 @@ dependencies = [ ] # license file -import os -license_file = os.path.join(HOME, "licenses", "pgi", "license.dat") +license_file = HOME + '/licenses/pgi/license.dat' moduleclass = 'compiler' -- GitLab From 61846cb5bdb4342c99ca0d71e82a401e1c51b360 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Sun, 29 May 2016 23:55:42 +0200 Subject: [PATCH 0034/1311] added Beast easyconfig and create different folder for beast2 --- easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb | 31 +++++++++++++++++++ .../b/{Beast => Beast2}/Beast-2.1.3.eb | 0 .../Beast-2.4.0-foss-2016a.eb | 0 3 files changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb rename easybuild/easyconfigs/b/{Beast => Beast2}/Beast-2.1.3.eb (100%) rename easybuild/easyconfigs/b/{Beast => Beast2}/Beast-2.4.0-foss-2016a.eb (100%) diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb new file mode 100644 index 0000000000..8bf90aa02e --- /dev/null +++ b/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb @@ -0,0 +1,31 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "Tarball" + +name = 'Beast' +version = '1.8.3' + +homepage = 'http://beast.bio.ed.ac.uk/' +description = """BEAST is a cross-platform program for Bayesian analysis of molecular sequences using MCMC.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] +sources = ['BEASTv%(version)s.tgz'] + +dependencies = [ + # this is not mandatory but beagle-lib is recommended by developers + # beagle-lib will also load the required java8 dependency + # if you remove this you should add the java dependency + ('beagle-lib', '2.1.2', '-Java-1.8.0_92', ('goolf', '1.7.20')), +] + +sanity_check_paths = { + 'files': ["bin/beast"], + 'dirs': [] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Beast/Beast-2.1.3.eb b/easybuild/easyconfigs/b/Beast2/Beast-2.1.3.eb similarity index 100% rename from easybuild/easyconfigs/b/Beast/Beast-2.1.3.eb rename to easybuild/easyconfigs/b/Beast2/Beast-2.1.3.eb diff --git a/easybuild/easyconfigs/b/Beast/Beast-2.4.0-foss-2016a.eb b/easybuild/easyconfigs/b/Beast2/Beast-2.4.0-foss-2016a.eb similarity index 100% rename from easybuild/easyconfigs/b/Beast/Beast-2.4.0-foss-2016a.eb rename to easybuild/easyconfigs/b/Beast2/Beast-2.4.0-foss-2016a.eb -- GitLab From a8328c3b2e010c31888b1edcf6076d413a5cb3d4 Mon Sep 17 00:00:00 2001 From: jhein32 Date: Fri, 10 Jun 2016 15:21:38 +0200 Subject: [PATCH 0035/1311] Create NAMD-2.11-intel-2016a-mpi.eb --- .../n/NAMD/NAMD-2.11-intel-2016a-mpi.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb new file mode 100644 index 0000000000..bd27d52f00 --- /dev/null +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb @@ -0,0 +1,28 @@ +name = 'NAMD' +version = '2.11' +versionsuffix = '-mpi' + +homepage = 'http://www.ks.uiuc.edu/Research/namd/' +description = """NAMD is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.""" + +toolchain = {'name': 'intel', 'version': '2016a'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +runtest = False + +parallel = 12 + +sources = ['NAMD_%(version)s_Source.tar.gz'] + +dependencies = [ + ('Tcl', '8.6.4'), + ('FFTW', '3.3.4'), +] + +charm_arch = 'mpi-linux-x86_64' + +namd_cfg_opts = " --with-tcl --tcl-prefix $EBROOTTCL " + +prebuildopts = 'echo "TCLLIB=-L\$(TCLDIR)/lib -ltcl8.6 -ldl -lpthread" >> Make.config && ' + +moduleclass = 'chem' -- GitLab From 46c9e87b624824295e678071def0de1b2f262ee3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Jun 2016 18:53:26 +0200 Subject: [PATCH 0036/1311] style fixes for NAMD 2.11 easyconfig --- .../easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb index bd27d52f00..8e28254ee8 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.11-intel-2016a-mpi.eb @@ -3,14 +3,11 @@ version = '2.11' versionsuffix = '-mpi' homepage = 'http://www.ks.uiuc.edu/Research/namd/' -description = """NAMD is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.""" +description = """NAMD is a parallel molecular dynamics code designed for high-performance simulation of + large biomolecular systems.""" toolchain = {'name': 'intel', 'version': '2016a'} -toolchainopts = {'opt': True, 'pic': True, 'usempi': True} - -runtest = False - -parallel = 12 +toolchainopts = {'pic': True, 'usempi': True} sources = ['NAMD_%(version)s_Source.tar.gz'] @@ -19,6 +16,8 @@ dependencies = [ ('FFTW', '3.3.4'), ] +runtest = False + charm_arch = 'mpi-linux-x86_64' namd_cfg_opts = " --with-tcl --tcl-prefix $EBROOTTCL " -- GitLab From 542a11b6a741ec72a256e924441d259b0a273846 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 21 Jun 2016 14:03:12 +1200 Subject: [PATCH 0037/1311] Update homepage and description --- .../m/muParser/muParser-2.2.5-foss-2015a.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/m/muParser/muParser-2.2.5-foss-2015a.eb diff --git a/easybuild/easyconfigs/m/muParser/muParser-2.2.5-foss-2015a.eb b/easybuild/easyconfigs/m/muParser/muParser-2.2.5-foss-2015a.eb new file mode 100644 index 0000000000..2145d8a94c --- /dev/null +++ b/easybuild/easyconfigs/m/muParser/muParser-2.2.5-foss-2015a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'muParser' +version = '2.2.5' + +homepage = 'http://beltoforion.de/article.php?a=muparser' +description = """muParser is an extensible high performance math expression +parser library written in C++. It works by transforming a mathematical +expression into bytecode and precalculating constant parts of the expression.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = ['https://github.com/beltoforion/%(namelower)s/archive/'] +sources = ['v%(version)s.tar.gz'] + +configopts = "--disable-samples --enable-shared" + +sanity_check_paths = { + 'files': ['lib/libmuparser.%s' % SHLIB_EXT], + 'dirs': ['lib'] +} + +moduleclass = 'math' -- GitLab From 1a95b45eb1f3e6281a785be97fde788a786ba573 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 21 Jun 2016 15:43:11 +1200 Subject: [PATCH 0038/1311] New EasyConfig for Xerces-C++ 3.1.3 with the foss-2015a toolchain --- .../Xerces-C++/Xerces-C++-3.1.3-foss-2015a.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.3-foss-2015a.eb diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.3-foss-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.3-foss-2015a.eb new file mode 100644 index 0000000000..6b2b631d51 --- /dev/null +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.3-foss-2015a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'Xerces-C++' +version = '3.1.3' + +homepage = 'http://xerces.apache.org/xerces-c/' + +description = """Xerces-C++ is a validating XML parser written in a portable +subset of C++. Xerces-C++ makes it easy to give your application the ability to +read and write XML data. A shared library is provided for parsing, generating, +manipulating, and validating XML documents using the DOM, SAX, and SAX2 +APIs.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +sources = ['xerces-c-%(version)s.tar.gz'] +source_urls = [ + 'http://archive.apache.org/dist/xerces/c/%(version_major)s/sources/' +] + +dependencies = [ + ('cURL', '7.46.0'), +] + +moduleclass = 'lib' -- GitLab From 09c31673c23660033fdebecdcf71c35a30ca7401 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 22 Jun 2016 12:13:18 +1200 Subject: [PATCH 0039/1311] First attempt at a CGAL easyconfig --- .../CGAL-4.8.1-foss-2015a-Python-2.7.11.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb new file mode 100644 index 0000000000..3e83eb1dbe --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb @@ -0,0 +1,33 @@ +name = 'CGAL' +version = '4.8.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'strict': True} + +# note: source URL needs to be updated for a new version (checksums too)! +source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] +sources = [SOURCE_TAR_XZ] +checksums = ['1cbcb3f251822766ed3d744f923c782d'] + +dependencies = [ + ('Python', '2.7.11'), + ('Boost', '1.60.0', versionsuffix), + ('MPFR', '3.1.2'), + ('Qt5', '5.6.0'), + ('libGLU', '9.0.0', '-Mesa-11.2.1'), +] + +configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT + +builddependencies = [ + ('CMake', '3.4.1'), +] + +moduleclass = 'numlib' -- GitLab From 8d00bdc6a7d728de5ac289d8b948fcc25a846b69 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 22 Jun 2016 13:04:46 +1200 Subject: [PATCH 0040/1311] New EasyConfig for ne, the nice editor --- .../easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb new file mode 100644 index 0000000000..9074ad63bc --- /dev/null +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb @@ -0,0 +1,20 @@ +name = 'ne' +version = '3.0.1' + +homepage = 'http://ne.di.unimi.it/' +description = """ne is a free (GPL'd) text editor based on the POSIX standard +that runs (we hope) on almost any UN*X machine. ne is easy to use for the +beginner, but powerful and fully configurable for the wizard, and most sparing +in its resource usage.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = ['http://ne.di.unimi.it/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/ne'], + 'dirs': ['bin'], +} + +moduleclass = 'tools' -- GitLab From 0d54283d911a55ea99dd8e28ba9f0f105b63ab5b Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 29 Jun 2016 17:46:09 +1200 Subject: [PATCH 0041/1311] No dependency on Python; simplified CGAL without GUI for OSGEO stack --- .../CGAL-4.8.1-foss-2015a-Python-2.7.11.eb | 33 ---------------- .../c/CGAL/CGAL-4.8.1-foss-2015a.eb | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 33 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb deleted file mode 100644 index 3e83eb1dbe..0000000000 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-Python-2.7.11.eb +++ /dev/null @@ -1,33 +0,0 @@ -name = 'CGAL' -version = '4.8.1' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://www.cgal.org/' -description = """The goal of the CGAL Open Source Project is to provide easy access to efficient - and reliable geometric algorithms in the form of a C++ library.""" - -toolchain = {'name': 'foss', 'version': '2015a'} -toolchainopts = {'strict': True} - -# note: source URL needs to be updated for a new version (checksums too)! -source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] -sources = [SOURCE_TAR_XZ] -checksums = ['1cbcb3f251822766ed3d744f923c782d'] - -dependencies = [ - ('Python', '2.7.11'), - ('Boost', '1.60.0', versionsuffix), - ('MPFR', '3.1.2'), - ('Qt5', '5.6.0'), - ('libGLU', '9.0.0', '-Mesa-11.2.1'), -] - -configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " -configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT -configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT - -builddependencies = [ - ('CMake', '3.4.1'), -] - -moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb new file mode 100644 index 0000000000..f8ab683344 --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb @@ -0,0 +1,38 @@ +name = 'CGAL' +version = '4.8.1' +gmpver = '6.0.0a' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'strict': True} + +# note: source URL needs to be updated for a new version (checksums too)! +source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] +sources = [SOURCE_TAR_XZ] +checksums = ['1cbcb3f251822766ed3d744f923c782d'] + +dependencies = [ + ('Boost', '1.60.0'), + ('GMP', gmpver), + ('MPFR', '3.1.2', '-GMP-%s' % gmpver), +] + +configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " +configopts += "-DBoost_INCLUDE_DIR=$EBROOTBOOST/include " +configopts += "-DBoost_LIBRARY_DIRS=$EBROOTBOOST/lib " +configopts += "-DBoost_SYSTEM_LIBRARY=$EBROOTBOOST/libboost_system.%s " % SHLIB_EXT +configopts += "-DBoost_THREAD_LIBRARY=$EBROOTBOOST/libboost_thread.%s " % SHLIB_EXT +configopts += "-DMPFR_INCLUDE_DIR=$EBROOTMPFR/include " +configopts += "-DMPFR_LIBRARIES=$EBROOTMPFR/lib/libmpfr.%s " % SHLIB_EXT +configopts += "-DGMP_INCLUDE_DIR=$EBROOTGMP/include " +configopts += "-DGMP_LIBRARIES=$EBROOTGMP/lib/libgmp.%s " % SHLIB_EXT +configopts += "-DGMP_LIBRARIES_DIR=$EBROOTGMP/lib " + +builddependencies = [ + ('CMake', '3.4.1'), +] + +moduleclass = 'numlib' -- GitLab From 6f9fc944a4a120b8c2d276e6af92d97af3887d8a Mon Sep 17 00:00:00 2001 From: Ravi Tripathi Date: Wed, 10 Aug 2016 18:53:28 -0500 Subject: [PATCH 0042/1311] Adding an Easyconfig for Connectome Workbench --- .../ConnectomeWorkbench-1.2.2.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb new file mode 100644 index 0000000000..2be243b7e0 --- /dev/null +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -0,0 +1,33 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Ravi Tripathi +# Email: ravi89@uab.edu + +easyblock = "Tarball" + +name = 'ConnectomeWorkbench' +version = '1.2.2' + +homepage = 'http://www.humanconnectome.org/software/get-connectome-workbench.html' +description = """Connectome Workbench is an open-source +visualization and discovery tool used to explore data generated +by the Human Connectome Project. The distribution includes wb_view, +a GUI-based visualization platform, and wb_command, a command-line +program for performing a variety of algorithmic tasks using volume, +surface, and grayordinate data.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://ftp.humanconnectome.org/workbench/'] +sources = ['workbench-rh_linux64-v%(version)s.zip'] + +modextrapaths = {'PATH': 'bin_rh_linux64', 'LIBRARY_PATH': 'libs_rh_linux64', +'LD_LIBRARY_PATH': 'libs_rh_linux64'} + +sanity_check_paths = { + 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", + "bin_rh_linux64/wb_view",], + 'dirs': ["resources"] +} + +moduleclass = 'bio' + -- GitLab From a86ecb209ea50df4b51d48f7e3a20f8f0a97c7ce Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 24 Aug 2016 15:46:15 +0200 Subject: [PATCH 0043/1311] remove this fucking easyconfig --- easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb | 31 -------------------- 1 file changed, 31 deletions(-) delete mode 100644 easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb deleted file mode 100644 index 8bf90aa02e..0000000000 --- a/easybuild/easyconfigs/b/Beast/Beast-1.8.3.eb +++ /dev/null @@ -1,31 +0,0 @@ -# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild -# Author: Pablo Escobar Lopez -# sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics - -easyblock = "Tarball" - -name = 'Beast' -version = '1.8.3' - -homepage = 'http://beast.bio.ed.ac.uk/' -description = """BEAST is a cross-platform program for Bayesian analysis of molecular sequences using MCMC.""" - -toolchain = {'name': 'dummy', 'version': ''} - -source_urls = ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] -sources = ['BEASTv%(version)s.tgz'] - -dependencies = [ - # this is not mandatory but beagle-lib is recommended by developers - # beagle-lib will also load the required java8 dependency - # if you remove this you should add the java dependency - ('beagle-lib', '2.1.2', '-Java-1.8.0_92', ('goolf', '1.7.20')), -] - -sanity_check_paths = { - 'files': ["bin/beast"], - 'dirs': [] -} - -moduleclass = 'bio' -- GitLab From b5ea364f85f293337f3ffad1446543c3b9869863 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 9 Sep 2016 22:09:31 +1200 Subject: [PATCH 0044/1311] Minor changes per suggestions from K.H. --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 5 ++--- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 2a1ad2658f..4ab6203c78 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -10,13 +10,12 @@ modelling and comparison.""" toolchain = {'name': 'dummy', 'version': 'dummy'} # Can't download from the web site automatically as registration is required. -# The URL is, nevertheless, included here for reference. -#source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] +# The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] -postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] +postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] sanity_check_paths = { 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 02e174bf10..6ce5db2685 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -10,13 +10,12 @@ modelling and comparison.""" toolchain = {'name': 'dummy', 'version': 'dummy'} # Can't download from the web site automatically as registration is required. -# The URL is, nevertheless, included here for reference. -#source_urls = ['http://zhanglab.ccmb.med.umich.edu/cgi-bin/download_I-TASSER.cgi?ID=358515010=I-TASSER%(version)s.tar.bz2'] +# The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] -postinstallcmds = ['/bin/chmod +x %(installdir)s/submit%(name)s'] +postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] sanity_check_paths = { 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], -- GitLab From 6b65c160cd0255f2bd123e04c591470efe52aa83 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 9 Sep 2016 22:12:36 +1200 Subject: [PATCH 0045/1311] Update version of Java --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 4ab6203c78..c92177166e 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] -dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_80')] postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 6ce5db2685..93f184aa24 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] -dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_51')] +dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_80')] postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] -- GitLab From a5b2984c569ffdebc1a7d7cb886b439631334e46 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 13 Sep 2016 11:25:38 +0200 Subject: [PATCH 0046/1311] add easyconfig MultiQC-0.7-goolf-1.7.20.eb --- .../m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb new file mode 100644 index 0000000000..1d864fa9f0 --- /dev/null +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb @@ -0,0 +1,79 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Bundle' + +name = 'MultiQC' +version = '0.7' + +homepage = 'http://multiqc.info/' +description = """Aggregate results from bioinformatics analyses across many samples into a single report""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'optarch': False, 'pic': False} + +parallel = 1 + +dependencies = [ + ('Python', '2.7.11'), + ('matplotlib', '1.5.1', '-Python-%(pyver)s'), + ('numpy', '1.10.1', '-Python-%(pyver)s'), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') + +exts_list = [ + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('pyparsing', '2.1.9', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('pytz', '2016.6.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], + }), + ('cycler', '0.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], + }), + ('python-dateutil', '2.5.3', { + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + 'modulename': 'dateutil', + }), + ('MarkupSafe', '0.23', { + 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], + }), + ('click', '6.6', { + 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], + }), + ('PyYAML', '3.12', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], + 'modulename': 'yaml', + }), + ('simplejson', '3.8.2', { + 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], + }), + ('Jinja2', '2.8', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + }), + ('multiqc', version, { + #'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/m/multiqc/'], + }), +] + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + 'LD_LIBRARY_PATH': ['lib/python%(pyshortver)s/site-packages'] +} + +sanity_check_paths = { + 'files': [], + #'dirs': ['lib/python%s/site-packages/pysam-%s-py%s-linux-x86_64.egg' % (pyshortver, version, pyshortver)] + 'dirs': ['.'] +} + +moduleclass = 'bio' -- GitLab From 4d84d1c074fd1ce8e38af2ffb9df37698abb7bd2 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 13 Sep 2016 11:34:56 +0200 Subject: [PATCH 0047/1311] added missing deps --- ...lotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb | 45 +++++++++++++++++++ ...numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb | 23 ++++++++++ 2 files changed, 68 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb create mode 100644 easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb new file mode 100644 index 0000000000..506dad104c --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb @@ -0,0 +1,45 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '1.5.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.11'), + ('freetype', '2.5.5'), + ('libpng', '1.6.18'), +] + +exts_list = [ + ('Cycler', '0.9.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + 'patches': ['matplotlib-1.5.1_fix-Tcl-Tk-libdir.patch'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb new file mode 100644 index 0000000000..b4a5ec30e9 --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb @@ -0,0 +1,23 @@ +name = 'numpy' +version = '1.10.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.numpy.org' +description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: + a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran + code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, + NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be + defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCE_TAR_GZ] + +#patches = ['numpy-1.8.0-mkl.patch'] + +dependencies = [ + ('Python', '2.7.11'), +] + +moduleclass = 'math' -- GitLab From 1692d120c89603830a89dac9eb2348d6d1d0f2bf Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 13 Sep 2016 11:43:45 +0200 Subject: [PATCH 0048/1311] added sanity checking --- easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb index 1d864fa9f0..7c5179be13 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb @@ -71,9 +71,8 @@ modextrapaths = { } sanity_check_paths = { - 'files': [], - #'dirs': ['lib/python%s/site-packages/pysam-%s-py%s-linux-x86_64.egg' % (pyshortver, version, pyshortver)] - 'dirs': ['.'] + 'files': ['bin/multiqc'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/multiqc-%(version)s-py%(pyshortver)s.egg'] } moduleclass = 'bio' -- GitLab From ad9690f939d7cb1df29891addb2e6ab2bd943116 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 13 Sep 2016 11:57:10 +0200 Subject: [PATCH 0049/1311] added missing deps --- .../f/freetype/freetype-2.5.5-goolf-1.7.20.eb | 21 +++++++++++++++++++ .../l/libpng/libpng-1.6.18-goolf-1.7.20.eb | 19 +++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb new file mode 100644 index 0000000000..c3aab419f3 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb @@ -0,0 +1,21 @@ +name = 'freetype' +version = '2.5.5' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('libpng', '1.6.18')] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb new file mode 100644 index 0000000000..a083925f91 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.18' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.8')] + +configopts = "--with-pic" + +moduleclass = 'lib' -- GitLab From 8ade81939c72f037ae59f9f4e7f1f2d16d478740 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 14 Sep 2016 08:58:56 +0200 Subject: [PATCH 0050/1311] remove toolchainopts --- easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb index 7c5179be13..3c54d448e9 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb @@ -12,7 +12,6 @@ homepage = 'http://multiqc.info/' description = """Aggregate results from bioinformatics analyses across many samples into a single report""" toolchain = {'name': 'goolf', 'version': '1.7.20'} -toolchainopts = {'optarch': False, 'pic': False} parallel = 1 -- GitLab From 516ee8e6c960b2723c9dbb4d86465de772ce7c52 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 14 Sep 2016 09:00:14 +0200 Subject: [PATCH 0051/1311] remove numpy dep --- easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb index 3c54d448e9..f2c87048d9 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb @@ -18,7 +18,7 @@ parallel = 1 dependencies = [ ('Python', '2.7.11'), ('matplotlib', '1.5.1', '-Python-%(pyver)s'), - ('numpy', '1.10.1', '-Python-%(pyver)s'), + # numpy dependency provided by python module ] # this is a bundle of Python packages -- GitLab From 7680debb5c3e01b70ca6fe8e1fd8bfc2572248c8 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 14 Sep 2016 09:00:43 +0200 Subject: [PATCH 0052/1311] added version suffix --- easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb index f2c87048d9..14c2e7f378 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb @@ -7,6 +7,7 @@ easyblock = 'Bundle' name = 'MultiQC' version = '0.7' +versionsuffix = '-Python-%(pyver)s' homepage = 'http://multiqc.info/' description = """Aggregate results from bioinformatics analyses across many samples into a single report""" -- GitLab From 264450f3c354dc0d322b16b8e4eaa1348b3288ce Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 14 Sep 2016 09:23:45 +0200 Subject: [PATCH 0053/1311] file renamed to add suffix --- ...-goolf-1.7.20.eb => MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/m/MultiQC/{MultiQC-0.7-goolf-1.7.20.eb => MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb} (100%) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb similarity index 100% rename from easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20.eb rename to easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb -- GitLab From 7c1c632123eea66191c8bb8a4a75218f8621dadf Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 14 Sep 2016 15:24:30 +0200 Subject: [PATCH 0054/1311] updated dependencies --- .../f/freetype/freetype-2.6.2-goolf-1.7.20.eb | 21 +++++++++++++++++++ .../l/libpng/libpng-1.6.21-goolf-1.7.20.eb | 19 +++++++++++++++++ ...lotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb | 4 ++-- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb new file mode 100644 index 0000000000..76cd412cf3 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb @@ -0,0 +1,21 @@ +name = 'freetype' +version = '2.6.2' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('libpng', '1.6.21')] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb new file mode 100644 index 0000000000..cb4fbebab2 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.21' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.8')] + +configopts = "--with-pic" + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb index 506dad104c..697a58300b 100644 --- a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.1-goolf-1.7.20-Python-2.7.11.eb @@ -16,8 +16,8 @@ exts_defaultclass = 'PythonPackage' dependencies = [ ('Python', '2.7.11'), - ('freetype', '2.5.5'), - ('libpng', '1.6.18'), + ('freetype', '2.6.2'), + ('libpng', '1.6.21'), ] exts_list = [ -- GitLab From c9deaf559758da992ec9deb41ad0786a176644b7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 7 Oct 2016 16:11:19 +0200 Subject: [PATCH 0055/1311] add easyconfig Boost-1.62.0-intel-2016b-Python-2.7.12.eb --- .../Boost-1.62.0-intel-2016b-Python-2.7.12.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..8f21675328 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'Boost' +version = '1.62.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = """Boost provides free peer-reviewed portable C++ source libraries.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('Python', '2.7.12'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' -- GitLab From 19ece4eea21398f809056a138dbb6bc14abc5eca Mon Sep 17 00:00:00 2001 From: Fokke Dijkstra Date: Tue, 11 Oct 2016 15:07:45 +0200 Subject: [PATCH 0056/1311] Caffe rc3 built using the foss 2016a toolchain. --- ...6a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb new file mode 100644 index 0000000000..9a164bb75c --- /dev/null +++ b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb @@ -0,0 +1,58 @@ +easyblock = 'CMakeMake' + +name = 'Caffe' +version = 'rc3' + +cudaversion = '7.5.18' +versionsuffix = '-CUDA-%s-Python-%%(pyver)s' % cudaversion + +homepage = 'https://github.com/BVLC/caffe' +description = """ +Caffe is a deep learning framework made with expression, speed, +and modularity in mind. It is developed by the Berkeley Vision +and Learning Center (BVLC) and community contributors. +""" +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'optarch': False, 'pic': True} + +sources = ['%(version)s.tar.gz'] +source_urls = ['https://github.com/BVLC/caffe/archive/'] + +builddependencies = [ + ('CMake', '3.4.3'), +] + +protobuf_ver = '3.0.2' + +dependencies = [ + ('glog', '0.3.4'), + ('gflags', '2.1.2'), + ('OpenCV', '3.1.0'), + ('CUDA', cudaversion, '', True), + ('cuDNN', '4.0', '', True), + ('LMDB', '0.9.18'), + ('LevelDB', '1.18'), + ('snappy', '1.1.3'), + ('protobuf', protobuf_ver), + ('protobuf-python', protobuf_ver, '-Python-%(pyver)s'), + ('HDF5', '1.8.16', '-serial'), + ('Boost', '1.61.0', '-Python-%(pyver)s'), + ('Python', '2.7.11'), + ('scikit-image', '0.12.3', '-Python-%(pyver)s') +] + +configopts = '-DBLAS=open' + +modextrapaths = {'PYTHONPATH': ['python'] } + +sanity_check_paths = { + 'files': ['bin/caffe'] + + ['lib/%s' % x for x in ['libcaffe.so','libproto.a']] + + ['python/caffe/_caffe.so'] + + ['include/caffe/proto/caffe.pb.h'], + 'dirs': [], +} + +sanity_check_commands = [('python', "-c 'import caffe'")] + +moduleclass = 'devel' -- GitLab From 0ea09aa90e2af9b75352003f330c838a7a52c1fc Mon Sep 17 00:00:00 2001 From: Fokke Dijkstra Date: Tue, 11 Oct 2016 15:23:33 +0200 Subject: [PATCH 0057/1311] Fixed filename, which accidentally included foss-2016a twice. --- ...2016a.eb => Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/c/Caffe/{Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb => Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb} (100%) diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb similarity index 100% rename from easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11-foss-2016a.eb rename to easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb -- GitLab From c8cf9d73aadd67ad6b36819c52eeb45977dc2d7d Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Thu, 20 Oct 2016 12:44:22 +0200 Subject: [PATCH 0058/1311] HDF5 1.10.1-patch1 for foss-2016b --- .../h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb new file mode 100644 index 0000000000..019c7bfd91 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.10.0-patch1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' -- GitLab From 5623db5d525f0d8e062433598aa38cfa9c55b50d Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Wed, 2 Nov 2016 16:09:33 +0100 Subject: [PATCH 0059/1311] Add a new Allinea easyconfig for the latest 6.1.1 version. This also uses the new allinea easyblock to handle templates and system.config if requested. --- .../Allinea-6.1.1-Ubuntu-14.04-x86_64.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb new file mode 100644 index 0000000000..334e0f3893 --- /dev/null +++ b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb @@ -0,0 +1,26 @@ +name = 'Allinea' +version = '6.1.1' + +homepage = 'http://www.allinea.com' +description = """The Allinea environment is an essential toolkit for developers and computational scientists +looking to get results faster.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://content.allinea.com/downloads/'] +sources = ['%(namelower)s-forge-latest-Ubuntu-14.04-x86_64.tar'] + +# Example of templates usage +#templates = [ +# 'kebnekaise.qtf', +# 'kebnekaise-gpu.qtf', +#] + +# Example of sysconfig usage +#sysconfig = 'system.config.hpc2n' + +# license file +import os +license_file = os.path.join(os.getenv('HOME'), "licenses", "allinea", "license.lic") + +moduleclass = 'tools' -- GitLab From 15d394c14be18599f491510d34ffb865316eddb2 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Sun, 6 Nov 2016 12:03:45 +0100 Subject: [PATCH 0060/1311] HDF5 has a dependency on libxml2 --- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb index 84580d9ba8..c0d4209263 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb @@ -21,6 +21,7 @@ buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' dependencies = [ ('zlib', '1.2.8'), ('Szip', '2.1'), + ('libxml2', '2.9.4') ] moduleclass = 'data' -- GitLab From e3823e59665b2f2fa750e44b6164b58e67f72942 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Sun, 6 Nov 2016 13:29:13 +0100 Subject: [PATCH 0061/1311] version conflict --- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb index c0d4209263..7250d32fe5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb @@ -21,7 +21,7 @@ buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' dependencies = [ ('zlib', '1.2.8'), ('Szip', '2.1'), - ('libxml2', '2.9.4') + ('libxml2', '2.9.3') ] moduleclass = 'data' -- GitLab From 34fd91475b4938c2d586b0b52f5b059924dcec42 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 8 Nov 2016 12:09:22 +0100 Subject: [PATCH 0062/1311] {phys}[dummy] USPEX 9.4.4 (REVIEW) --- .../USPEX-9.4.4-intel-2016b-Python-2.7.12.eb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..e3739900df --- /dev/null +++ b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,50 @@ +easyblock = 'PackedBinary' + +name = 'USPEX' +version = '9.4.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://uspex-team.org/uspex/overview' +description = """USPEX (Universal Structure Predictor: Evolutionary Xtallography... + and in Russian "uspekh" means "success" - owing to the high success rate and many + useful results produced by this method) is a method developed by the Oganov + laboratory since 2004. The problem of crystal structure prediction is very old and + does, in fact, constitute the central problem of theoretical crystal chemistry. + +USPEX can also be used for finding low-energy metastable phases, as well as stable + structures of nanoparticles, surface reconstructions, molecular packings in organic + crystals, and for searching for materials with desired physical (mechanical, + electronic) properties. The USPEX code is based on an efficient evolutionary + algorithm developed by A.R. Oganov's group, but also has options for using + alternative methods (random sampling, metadynamics, corrected particle swarm + optimization algorithms). USPEX is interfaced with many ab initio codes, such as + VASP, SIESTA, GULP, Quantum Espresso, CP2K, CASTEP, LAMMPS, and so on. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(name)s-%(version)s.tar.gz'] +#You have to register before download +#source_urls = ['http://uspex-team.org/uspex/downloads'] + +dependencies = [ + ('Python', '2.7.12'), + ('Octave', '4.0.3'), +] + +postinstallcmds = [ + 'echo $EBROOTOCTAVE/bin/octave > %(installdir)s/CODEPATH', + 'chmod +x %(installdir)s/src/FunctionFolder/Tool/*', + 'rm %(installdir)s/INSTALL', + 'rm %(installdir)s/install.sh', + 'rm %(installdir)s/job', +] + +sanity_check_paths = { + 'files': ['USPEX'], + 'dirs': ['doc', 'examples', 'lib', 'src', 'tests'] +} + +modextravars = {'USPEXPATH': '%(installdir)s/src'} +#modextrapaths = {'PATH': ''} + +moduleclass = 'phys' -- GitLab From 3e52fe9b81e7626776436ac19923e55bb92b7a06 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Mon, 14 Nov 2016 10:38:30 +0100 Subject: [PATCH 0063/1311] versionsuffix removed for mentioned easyconfigs --- .../l/libdap/libdap-3.18.1-foss-2016a-Python-2.7.11.eb | 2 +- .../MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/l/libdap/libdap-3.18.1-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/l/libdap/libdap-3.18.1-foss-2016a-Python-2.7.11.eb index dc2d40a915..7498899794 100644 --- a/easybuild/easyconfigs/l/libdap/libdap-3.18.1-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/l/libdap/libdap-3.18.1-foss-2016a-Python-2.7.11.eb @@ -21,7 +21,7 @@ builddependencies = [ dependencies = [ ('cURL', '7.47.0'), - ('libxml2', '2.9.3', versionsuffix), + ('libxml2', '2.9.3'), ('LibUUID', '1.0.3'), ] diff --git a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb index 111f00bfda..de510f4adc 100644 --- a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb @@ -17,7 +17,7 @@ dependencies = [ ('Java', '1.7.0_79', '', True), ('Python', '2.7.11'), ('HDF5', '1.8.16'), - ('libxml2', '2.9.3', '-Python-%(pyver)s'), + ('libxml2', '2.9.3'), ('zlib', '1.2.8') ] -- GitLab From e3c946a324d60d3e0f738a738d44cd0e4c470fac Mon Sep 17 00:00:00 2001 From: RvDijk Date: Mon, 14 Nov 2016 10:58:16 +0100 Subject: [PATCH 0064/1311] without versionsuffix --- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb index 7250d32fe5..b1098f85e1 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb @@ -24,4 +24,4 @@ dependencies = [ ('libxml2', '2.9.3') ] -moduleclass = 'data' +moduleclass = 'data' \ No newline at end of file -- GitLab From 74fcf9a922a6f4470101ae70a2fdfeece4a3cf40 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Wed, 16 Nov 2016 12:16:48 +0100 Subject: [PATCH 0065/1311] version push for 2017 update 1 --- .../easyconfigs/v/VTune/VTune-2017_update1.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb diff --git a/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb b/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb new file mode 100644 index 0000000000..ce71abe458 --- /dev/null +++ b/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb @@ -0,0 +1,23 @@ +name = 'VTune' +version = '2017_update1' + +homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" + +checksums = ['c3524d972072780023c3839b1188baaa'] + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['vtune_amplifier_xe_%(version)s.tar.gz'] + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' + + + + + + + -- GitLab From 90f2128e2f159b44e8cbc0dc9173014304a3b9c0 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 16 Nov 2016 15:55:39 +0200 Subject: [PATCH 0066/1311] adding easyconfigs: CP2K-4.1-foss-2016b-psmp.eb --- .../b/byacc/byacc-20160606-foss-2016b.eb | 22 ++++++++ .../c/CP2K/CP2K-4.1-foss-2016b-psmp.eb | 54 +++++++++++++++++++ .../easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb | 19 +++++++ .../g/Guile/Guile-1.8.8-foss-2016b.eb | 32 +++++++++++ .../l/Libint/Libint-1.1.6-foss-2016b.eb | 27 ++++++++++ .../libmatheval-1.1.11-foss-2016b.eb | 33 ++++++++++++ .../libunistring-0.9.6-foss-2016b.eb | 24 +++++++++ .../l/libxc/libxc-2.2.3-foss-2016b.eb | 31 +++++++++++ .../l/libxsmm/libxsmm-1.4.4-foss-2016b.eb | 26 +++++++++ .../p/PLUMED/PLUMED-2.2.3-foss-2016b.eb | 42 +++++++++++++++ 10 files changed, 310 insertions(+) create mode 100644 easybuild/easyconfigs/b/byacc/byacc-20160606-foss-2016b.eb create mode 100644 easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb create mode 100644 easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libxsmm/libxsmm-1.4.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/b/byacc/byacc-20160606-foss-2016b.eb b/easybuild/easyconfigs/b/byacc/byacc-20160606-foss-2016b.eb new file mode 100644 index 0000000000..93c0899ae1 --- /dev/null +++ b/easybuild/easyconfigs/b/byacc/byacc-20160606-foss-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'byacc' +version = '20160606' + +homepage = 'http://invisible-island.net/byacc/byacc.html' +description = """Berkeley Yacc (byacc) is generally conceded to be the best yacc variant available. + In contrast to bison, it is written to avoid dependencies upon a particular compiler.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TGZ] +source_urls = ['ftp://invisible-island.net/byacc'] + +checksums = ['d527c811b360f04a8c5f5a0a90625966'] + +sanity_check_paths = { + 'files': ["bin/yacc"], + 'dirs': [] +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb new file mode 100644 index 0000000000..85ce41dbb8 --- /dev/null +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb @@ -0,0 +1,54 @@ +name = 'CP2K' +version = '4.1' +versionsuffix = '-psmp' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. """ + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'openmp': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [SOURCEFORGE_SOURCE] + +patches = [ +# 'CP2K-2.6.0-ifort-compiler-bug-fix.patch', + 'CP2K-2.4.0-fix_compile_date_lastsvn.patch', +] + +dependencies = [ + ('Libint', '1.1.6'), + ('libxc', '2.2.3'), + ('PLUMED', '2.2.3'), + ('libxsmm', '1.4.4'), +] + +builddependencies = [ + ('flex', '2.6.0'), + ('Bison', '3.0.4'), +] +# Don't run tests, they use mpirun +runtest = False + +# don't use parallel make, results in compilation failure +# because Fortran module files aren't created before they are needed +parallel = 1 + +type = 'psmp' + +# regression test reports failures +ignore_regtest_fails = True + +plumed = True + +postinstallcmds = [ "cp -a %(builddir)s/%(namelower)s-%(version)s/data %(installdir)s" ] + +modextravars = { + 'CP2K_DATA_DIR': '%(installdir)s/data', +} + + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb new file mode 100644 index 0000000000..74ae6cc390 --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = "2.1" + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions + and least-squares fitting.""" + +toolchain = {'version': '2016b', 'name': 'foss'} +toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2016b.eb b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2016b.eb new file mode 100644 index 0000000000..dce576ef30 --- /dev/null +++ b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Guile' +version = '1.8.8' + +homepage = 'http://www.gnu.org/software/guile' +description = """Guile is the GNU Ubiquitous Intelligent Language for Extensions, + the official extension language for the GNU operating system.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libtool', '2.4.6'), + ('GMP', '6.1.1'), + ('libunistring', '0.9.6'), + ('pkg-config', '0.29.1'), + ('libffi', '3.2.1'), + ('libreadline', '6.3'), +] + +configopts = " --enable-error-on-warning=no" + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["guile", 'guile-config', 'guile-snarf', 'guile-tools']] + + ["lib/libguile.a", "include/libguile.h"], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb new file mode 100644 index 0000000000..08a7cf496f --- /dev/null +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb @@ -0,0 +1,27 @@ +name = 'Libint' +version = '1.1.6' + +homepage = 'https://sourceforge.net/p/libint/' +description = """Libint library is used to evaluate the traditional (electron repulsion) and certain novel two-body + matrix elements (integrals) over Cartesian Gaussian functions used in modern atomic and molecular theory.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = ['release-%s.tar.gz' % '-'.join(version.split('.'))] +source_urls = ['https://github.com/evaleev/libint/archive/'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "aclocal -I lib/autoconf && libtoolize && autoconf && " + +configopts = "--enable-deriv --enable-r12" + +sanity_check_paths = { + 'files': ['include/lib%(x)s/lib%(x)s.h' % {'x': x} for x in ['deriv', 'int', 'r12']] + + ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + + ['lib/lib%s.%s' % (x,y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], + 'dirs': [], +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb new file mode 100644 index 0000000000..187e735268 --- /dev/null +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libmatheval' +version = '1.1.11' + +homepage = 'http://www.gnu.org/software/libmatheval/' +description = """GNU libmatheval is a library (callable from C and Fortran) to parse + and evaluate symbolic expressions input as text.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('flex', '2.6.0'), + ('Bison', '3.0.4'), + ('byacc', '20160606'), + ('Guile', '1.8.8'), +] + +configopts = '--with-pic ' + +# fix for guile-config being broken because shebang line contains full path to bin/guile +configopts += 'GUILE_CONFIG="$EBROOTGUILE/bin/guile -e main -s $EBROOTGUILE/bin/guile-config"' + +sanity_check_paths = { + 'files': ['lib/libmatheval.a', 'include/matheval.h'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2016b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2016b.eb new file mode 100644 index 0000000000..9d6b0fbbc4 --- /dev/null +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libunistring' +version = '0.9.6' + +homepage = 'http://www.gnu.org/software/libunistring/' +description = """This library provides functions for manipulating Unicode strings and for manipulating C strings + according to the Unicode standard.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = [GNU_SOURCE] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb new file mode 100644 index 0000000000..969028930d --- /dev/null +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'libxc' +version = '2.2.3' + +homepage = 'http://www.tddft.org/programs/octopus/wiki/index.php/Libxc' +description = """Libxc is a library of exchange-correlation functionals for density-functional theory. + The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] + +configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' + +# From the libxc mailing list +# To summarize: expect less tests to fail in libxc 2.0.2, but don't expect +# a fully working testsuite soon (unless someone wants to volunteer to do +# it, of course ) In the meantime, unless the majority of the tests +# fail, your build should be fine. +#runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'dirs': ['include'], +} + +parallel = 1 + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/l/libxsmm/libxsmm-1.4.4-foss-2016b.eb b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.4.4-foss-2016b.eb new file mode 100644 index 0000000000..f4d92dd6cb --- /dev/null +++ b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.4.4-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libxsmm' +version = '1.4.4' + +homepage = 'https://github.com/hfp/libxsmm' +description = """LIBXSMM is a library for small dense and small sparse matrix-matrix multiplications +targeting Intel Architecture (x86).""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['%(version)s.tar.gz'] +source_urls = ['https://github.com/hfp/libxsmm/archive/'] + +# install both static and dynamic version +installopts = ['PREFIX=%(installdir)s', 'PREFIX=%(installdir)s STATIC=0'] + +skipsteps = ['configure'] +maxparallel = 1 + +sanity_check_paths = { + 'files': ['bin/libxsmm_gemm_generator', 'include/libxsmm.h', 'lib/libxsmm.a', 'lib/libxsmm.%s' % SHLIB_EXT], + 'dirs': ['share'] +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.3-foss-2016b.eb new file mode 100644 index 0000000000..cefea54afb --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.2.3-foss-2016b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.2.3' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '2.1'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'env FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.%s' % SHLIB_EXT, 'lib/libplumed.%s' % SHLIB_EXT], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.%s' % SHLIB_EXT, + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From 91e61d60c84be6703a30a0a4031620b6bd3fa18b Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Fri, 18 Nov 2016 11:23:01 +0100 Subject: [PATCH 0067/1311] Removed white space as requested in VTune-2017_update1.eb and added checksum test to Advisor 2017_update1 --- easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb | 2 ++ easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb b/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb index 89c1628d39..22d5bebaad 100644 --- a/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb +++ b/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb @@ -12,6 +12,8 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['advisor_%(version)s.tar.gz'] +checksums = ['af87b381394be3100507827a3461b3bc'] + dontcreateinstalldir = 'True' # license file diff --git a/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb b/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb index ce71abe458..7c95b0c1d7 100644 --- a/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb +++ b/easybuild/easyconfigs/v/VTune/VTune-2017_update1.eb @@ -14,10 +14,3 @@ sources = ['vtune_amplifier_xe_%(version)s.tar.gz'] license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'tools' - - - - - - - -- GitLab From ee61d3e1899aece6886d6de4a4b7341592d659b9 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Sat, 19 Nov 2016 15:55:29 +0100 Subject: [PATCH 0068/1311] Revert "Merge pull request #3821 from boegel/20161117135756_new_pr_matplotlib152" This reverts commit bf17abe2dbb3131d4d3751c39b661af16cce0e3e, reversing changes made to fd6e630625d6af162734c27d886506ca3ad5b9ae. --- ...tplotlib-1.5.2-intel-2016b-Python-3.5.2.eb | 44 ------------------- 1 file changed, 44 deletions(-) delete mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb deleted file mode 100644 index 0391b993ae..0000000000 --- a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb +++ /dev/null @@ -1,44 +0,0 @@ -easyblock = 'Bundle' - -name = 'matplotlib' -version = '1.5.2' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://matplotlib.org' -description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of - hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python - and ipython shell, web application servers, and six graphical user interface toolkits.""" - -toolchain = {'name': 'intel', 'version': '2016b'} - -# this is a bundle of Python packages -exts_defaultclass = 'PythonPackage' - -dependencies = [ - ('Python', '3.5.2'), - ('freetype', '2.6.5'), - ('libpng', '1.6.24'), -] - -exts_list = [ - ('Cycler', '0.10.0', { - 'modulename': 'cycler', - 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], - 'source_tmpl': 'cycler-%(version)s.tar.gz', - }), - (name, version, { - 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], - }), -] - -# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module -full_sanity_check = True - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} - -moduleclass = 'vis' -- GitLab From 83fcd9cfd270c7844888b783d09d083d9b9a2bdc Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 23 Nov 2016 12:34:55 +0100 Subject: [PATCH 0069/1311] Revert "added Beast easyconfig and create different folder for beast2" This reverts commit 61846cb5bdb4342c99ca0d71e82a401e1c51b360. --- easybuild/easyconfigs/b/{Beast2 => Beast}/Beast-2.1.3.eb | 0 .../easyconfigs/b/{Beast2 => Beast}/Beast-2.4.0-foss-2016a.eb | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/b/{Beast2 => Beast}/Beast-2.1.3.eb (100%) rename easybuild/easyconfigs/b/{Beast2 => Beast}/Beast-2.4.0-foss-2016a.eb (100%) diff --git a/easybuild/easyconfigs/b/Beast2/Beast-2.1.3.eb b/easybuild/easyconfigs/b/Beast/Beast-2.1.3.eb similarity index 100% rename from easybuild/easyconfigs/b/Beast2/Beast-2.1.3.eb rename to easybuild/easyconfigs/b/Beast/Beast-2.1.3.eb diff --git a/easybuild/easyconfigs/b/Beast2/Beast-2.4.0-foss-2016a.eb b/easybuild/easyconfigs/b/Beast/Beast-2.4.0-foss-2016a.eb similarity index 100% rename from easybuild/easyconfigs/b/Beast2/Beast-2.4.0-foss-2016a.eb rename to easybuild/easyconfigs/b/Beast/Beast-2.4.0-foss-2016a.eb -- GitLab From 88a810f547063727a55182cde43cdc3212c89e08 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 23 Nov 2016 12:37:53 +0100 Subject: [PATCH 0070/1311] sync --- ...tplotlib-1.5.2-intel-2016b-Python-3.5.2.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..0391b993ae --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '1.5.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '3.5.2'), + ('freetype', '2.6.5'), + ('libpng', '1.6.24'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From ba90e7787e2689da8aceec35e6fe7f663fa82cb0 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 25 Nov 2016 13:45:18 +1300 Subject: [PATCH 0071/1311] Use the ConfigureMake Easyblock --- easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb index 9074ad63bc..2b479aa18e 100644 --- a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb @@ -1,3 +1,5 @@ +easyblock = 'ConfigureMake' + name = 'ne' version = '3.0.1' -- GitLab From f38b1265a3ce4b517020dabb4f90007de9d41f49 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 26 Nov 2016 15:01:36 +0100 Subject: [PATCH 0072/1311] fix build/install procedure in ne easyconfig --- easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb index 2b479aa18e..4898061930 100644 --- a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb @@ -14,9 +14,12 @@ toolchain = {'name': 'foss', 'version': '2015a'} source_urls = ['http://ne.di.unimi.it/'] sources = [SOURCELOWER_TAR_GZ] +skipsteps = ['configure'] +installopts = "PREFIX=%(installdir)s" + sanity_check_paths = { 'files': ['bin/ne'], - 'dirs': ['bin'], + 'dirs': ['share'], } moduleclass = 'tools' -- GitLab From d5d900f575dd82f4826eacd62a5d0fc2d174f254 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 29 Nov 2016 17:49:59 +0100 Subject: [PATCH 0073/1311] adding easyconfigs: QIIME-1.9.1.eb --- easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb | 29 ++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb diff --git a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb new file mode 100644 index 0000000000..d51a7c6584 --- /dev/null +++ b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb @@ -0,0 +1,29 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Conda' + +name = "QIIME" +version = "1.9.1" +variant = "Linux-x86_64" + +homepage = 'http://qiime.org/' +description = """QIIME is an open-source bioinformatics pipeline for performing microbiome analysis from raw DNA sequencing data.""" + +toolchain = {'name': 'dummy', 'version': ''} + +requirements = "python=2.7 %(namelower)s=%(version)s matplotlib=1.4.3 mock nose" +channels = ['bioconda'] + +builddependencies = [('Anaconda2', '4.0.0')] + +sanity_check_paths = { + 'files': ['bin/print_qiime_config.py'], + 'dirs': [] +} + +sanity_check_commands = ['print_qiime_config.py -t'] + +moduleclass = 'bio' -- GitLab From c4655859cb19dba9ac5fb3610e5bed4634cc3164 Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Wed, 30 Nov 2016 11:46:45 +0100 Subject: [PATCH 0074/1311] - Added Mono 4.6.2.7 with both dummy and intel-2016b toolchains - No longer using mono.py easyblock, only ConfigureMake instead --- .../m/Mono/Mono-4.6.2.7-intel-2016b.eb | 20 +++++++++++++++++++ easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb | 17 ++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb create mode 100644 easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb new file mode 100644 index 0000000000..045b7d03ec --- /dev/null +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'Mono' +version = '4.6.2.7' + +homepage = 'http://mono-framework.com' +description = """An open source, cross-platform, implementation of C# and the CLR that is + binary compatible with Microsoft.NET.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://download.mono-project.com/sources/mono/'] +sources = [SOURCELOWER_TAR_BZ2] + +builddependencies = [ + ('Bison', '3.0.4'), + ('gettext', '0.19.8'), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb new file mode 100644 index 0000000000..9518306110 --- /dev/null +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb @@ -0,0 +1,17 @@ +easyblock = 'ConfigureMake' + +name = 'Mono' +version = '4.6.2.7' + +homepage = 'http://mono-framework.com' +description = """An open source, cross-platform, implementation of C# and the CLR that is + binary compatible with Microsoft.NET.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://download.mono-project.com/sources/mono/'] +sources = [SOURCELOWER_TAR_BZ2] + +osdependencies = ['gettext'] + +moduleclass = 'lang' -- GitLab From cf3d6c6b499166f9ff041325032ed0fd74adb386 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 30 Nov 2016 13:49:16 +0100 Subject: [PATCH 0075/1311] {bio} [inte/2016b] BWA/0.7.15 --- .../b/BWA/BWA-0.7.15-intel-2016b.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2016b.eb b/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2016b.eb new file mode 100644 index 0000000000..62b042ace9 --- /dev/null +++ b/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2016b.eb @@ -0,0 +1,32 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA +# Authors:: George Tsouloupas , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# +# Version >= 0.7.15 +# Author: Adam Huffman +# The Francis Crick Institute +# +# Note that upstream development is mainly at: https://github.com/lh3/bwa +## + +name = 'BWA' +version = '0.7.15' + +homepage = 'http://bio-bwa.sourceforge.net/' +description = """Burrows-Wheeler Aligner (BWA) is an efficient program that aligns + relatively short nucleotide sequences against a long reference sequence such as the human genome.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = ['https://github.com/lh3/%(name)s/archive/'] +sources = ['v%(version)s.tar.gz'] + +moduleclass = 'bio' -- GitLab From 7e1ee444ddff62180666d46e0f4ab50c8a36bec4 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 30 Nov 2016 14:39:57 +0100 Subject: [PATCH 0076/1311] {geo} [intel/2016b] SimPEG/0.3.0 --- .../SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..4b2df190b5 --- /dev/null +++ b/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'SimPEG' +version = '0.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://simpeg.xyz' +description = """Simulation and Parameter Estimation in Geophysics: a python package for simulation and gradient +based parameter estimation in the context of geophysical applications.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/simpeg/simpeg/archive/'] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +options = {'modulename': 'SimPEG'} + +sanity_check_paths = { + 'files': ['bin/TreeUtils.pyx'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'geo' -- GitLab From 41825bb1b2167a97cd7b2779bef7656a5d0bb9e4 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 30 Nov 2016 16:42:34 +0100 Subject: [PATCH 0077/1311] Switch to Pypi and use latest release for SimPEG --- ...-2.7.12.eb => SimPEG-0.3.1-intel-2016b-Python-2.7.12.eb} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/s/SimPEG/{SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb => SimPEG-0.3.1-intel-2016b-Python-2.7.12.eb} (84%) diff --git a/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.1-intel-2016b-Python-2.7.12.eb similarity index 84% rename from easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb rename to easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.1-intel-2016b-Python-2.7.12.eb index 4b2df190b5..d9e07f44c5 100644 --- a/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/SimPEG/SimPEG-0.3.1-intel-2016b-Python-2.7.12.eb @@ -1,7 +1,7 @@ easyblock = 'PythonPackage' name = 'SimPEG' -version = '0.3.0' +version = '0.3.1' versionsuffix = '-Python-%(pyver)s' homepage = 'http://simpeg.xyz' @@ -10,8 +10,8 @@ based parameter estimation in the context of geophysical applications.""" toolchain = {'name': 'intel', 'version': '2016b'} -sources = ['v%(version)s.tar.gz'] -source_urls = ['https://github.com/simpeg/simpeg/archive/'] +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] dependencies = [ ('Python', '2.7.12'), -- GitLab From ead467d3d75749aa17e47ae1eac677f30e1643e6 Mon Sep 17 00:00:00 2001 From: edo Date: Wed, 30 Nov 2016 18:31:02 +0100 Subject: [PATCH 0078/1311] adding easyconfigs: HDF5-1.8.17-foss-2016a-serial.eb --- .../h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb new file mode 100644 index 0000000000..1cc3adf6f7 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.8.17' +versionsuffix = '-serial' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} + +source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['configure_libtool.patch'] + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' -- GitLab From 09d7772dec329f9f6668df2ea86038fa16ce1922 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 30 Nov 2016 19:16:05 +0100 Subject: [PATCH 0079/1311] trivial style fixes in xproto, Yade, Yambo, zlib easyconfigs --- .../easyconfigs/x/xproto/xproto-7.0.23-goolf-1.4.10.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.23-goolf-1.5.14.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.23-ictce-5.3.0.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.26-foss-2014b.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.26-intel-2014b.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.27-intel-2015a.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.28-foss-2016a.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.28-gimkl-2.11.5.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.28-intel-2015a.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.28-intel-2015b.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.28-intel-2016a.eb | 10 +++++----- .../easyconfigs/x/xproto/xproto-7.0.29-intel-2016a.eb | 10 +++++----- .../y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb | 2 +- .../y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb | 2 +- .../y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb | 2 +- .../y/Yambo/Yambo-3.4.2-intel-2016.02-GCC-4.9.eb | 2 +- ...o-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb | 2 +- .../easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.07.eb | 2 +- .../z/zlib/zlib-1.2.8-iomkl-2016.09-GCC-4.9.3-2.25.eb | 2 +- 20 files changed, 72 insertions(+), 72 deletions(-) diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.4.10.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.4.10.eb index 6eb06bc7d4..4bddac5b2c 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.4.10.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.5.14.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.5.14.eb index 5054d70df3..07bf42b5f5 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-goolf-1.5.14.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-ictce-5.3.0.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-ictce-5.3.0.eb index 7d12c7f86a..483afe06f3 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.23-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.23-ictce-5.3.0.eb @@ -14,11 +14,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.26-foss-2014b.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.26-foss-2014b.eb index 76cc9f4a7a..e908c62705 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.26-foss-2014b.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.26-foss-2014b.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.26-intel-2014b.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.26-intel-2014b.eb index 1caa382ace..2b1221a507 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.26-intel-2014b.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.26-intel-2014b.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb index 4d66b00ecb..648ba72bf8 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/x11/%s' % x for x in ['ap_keysym.h', 'hpkeysym.h', 'keysym.h', 'xalloca.h', 'xatom.h', + 'xf86keysym.h', 'xfuncs.h', 'xmd.h', 'xos.h', 'xpoll.h', 'xprotostr.h', + 'xw32defs.h', 'xwindows.h', 'deckeysym.h', 'keysymdef.h', 'sunkeysym.h', + 'xarch.h', 'xdefs.h', 'xfuncproto.h', 'x.h', 'xosdefs.h', 'xos_r.h', + 'xproto.h', 'xthreads.h', 'xwdfile.h', 'xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-intel-2015a.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-intel-2015a.eb index a0292fbf8e..361e38a932 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-intel-2015a.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-intel-2015a.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-foss-2016a.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-foss-2016a.eb index e9e0084ccc..7de0301493 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-foss-2016a.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-foss-2016a.eb @@ -14,11 +14,11 @@ source_urls = [XORG_PROTO_SOURCE] builddependencies = [('xorg-macros', '1.19.0')] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-gimkl-2.11.5.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-gimkl-2.11.5.eb index 8dab7213fb..4a16c78f1b 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-gimkl-2.11.5.eb @@ -12,11 +12,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015a.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015a.eb index 532a92d315..30b6582acd 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015a.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015a.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015b.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015b.eb index 6722798efb..1c8cddb38f 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015b.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2015b.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2016a.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2016a.eb index b8365910f6..f6d63bc3d9 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2016a.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.28-intel-2016a.eb @@ -14,11 +14,11 @@ source_urls = [XORG_PROTO_SOURCE] builddependencies = [('xorg-macros', '1.19.0')] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.29-intel-2016a.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.29-intel-2016a.eb index 0baf935eaf..3fb339cba1 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.29-intel-2016a.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.29-intel-2016a.eb @@ -14,11 +14,11 @@ source_urls = [XORG_PROTO_SOURCE] builddependencies = [('xorg-macros', '1.19.0')] sanity_check_paths = { - 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', - 'Xatom.h', 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', - 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', 'Xarch.h', - 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', 'Xproto.h', 'Xthreads.h', - 'XWDFile.h', 'Xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb index f94f281e77..a6e0dada54 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb @@ -53,7 +53,7 @@ modextrapaths = { sanity_check_paths = { 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, - 'lib64/yade-%%(version)s/libyade.%s' %SHLIB_EXT)], + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb index cecf209b8a..4d7005749a 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb @@ -53,7 +53,7 @@ modextrapaths = { sanity_check_paths = { 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, - 'lib64/yade-%%(version)s/libyade.%s' %SHLIB_EXT)], + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb index c741427654..1c86ea984c 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb @@ -55,7 +55,7 @@ modextrapaths = { sanity_check_paths = { 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, - 'lib64/yade-%%(version)s/libyade.%s' %SHLIB_EXT)], + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } diff --git a/easybuild/easyconfigs/y/Yambo/Yambo-3.4.2-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/y/Yambo/Yambo-3.4.2-intel-2016.02-GCC-4.9.eb index d3ce57aec0..81c4416706 100644 --- a/easybuild/easyconfigs/y/Yambo/Yambo-3.4.2-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/y/Yambo/Yambo-3.4.2-intel-2016.02-GCC-4.9.eb @@ -30,7 +30,7 @@ parallel = 1 files_to_copy = [(['bin/*'], 'bin')] sanity_check_paths = { - 'files': ['bin/'+prog for prog in ['a2y', 'iotk', 'iotk.x', 'p2y', 'yambo', + 'files': ['bin/' + prog for prog in ['a2y', 'iotk', 'iotk.x', 'p2y', 'yambo', 'yambo_kerr', 'yambo_ph', 'yambo_surf', 'ypp', 'ypp_ph', 'ypp_surf']], 'dirs': [] } diff --git a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb index 300ae8a70c..9e4faf5254 100644 --- a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb +++ b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb @@ -40,7 +40,7 @@ parallel = 1 files_to_copy = [(['bin/*'], 'bin')] sanity_check_paths = { - 'files': ['bin/'+prog for prog in ['a2y', 'p2y', 'yambo', 'ypp' ]], + 'files': ['bin/' + prog for prog in ['a2y', 'p2y', 'yambo', 'ypp']], 'dirs': [] } diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.07.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.07.eb index 5afd211f68..b192852da8 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.07.eb @@ -15,7 +15,7 @@ sources = [SOURCELOWER_TAR_GZ] source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] sanity_check_paths = { - 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' %SHLIB_EXT], + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], 'dirs': [], } diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.09-GCC-4.9.3-2.25.eb index 66cf47a99c..dacfba135a 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -15,7 +15,7 @@ sources = [SOURCELOWER_TAR_GZ] source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] sanity_check_paths = { - 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' %SHLIB_EXT], + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], 'dirs': [], } -- GitLab From bc61e23f06e6ad646306392c1930024c68a3a12f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 30 Nov 2016 19:27:42 +0100 Subject: [PATCH 0080/1311] trivial style fixes in xbitmaps, xcb-util-wm, xonsh easyconfigs --- .../easyconfigs/x/xbitmaps/xbitmaps-1.1.1-foss-2016a.eb | 2 +- .../x/xcb-util-wm/xcb-util-wm-0.4.1-foss-2016a.eb | 3 ++- .../xcb-util-wm-0.4.1-intel-2015b-Python-2.7.11.eb | 3 ++- .../x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b.eb | 3 ++- .../x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2016a.eb | 3 ++- easybuild/easyconfigs/x/xonsh/xonsh-0.3.2-intel-2016a.eb | 5 ----- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1-foss-2016a.eb b/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1-foss-2016a.eb index 0226de3fdc..16ab637e45 100644 --- a/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1-foss-2016a.eb @@ -16,4 +16,4 @@ sanity_check_paths = { 'dirs': [] } -moduleclass = 'devel' \ No newline at end of file +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-foss-2016a.eb b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-foss-2016a.eb index d439be9454..1c0793e3c1 100644 --- a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-foss-2016a.eb @@ -4,7 +4,8 @@ name = 'xcb-util-wm' version = '0.4.1' homepage = 'http://xcb.freedesktop.org/' -description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.""" +description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers + for EWMH and ICCCM.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b-Python-2.7.11.eb b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b-Python-2.7.11.eb index 3958944410..b4ccaeddaa 100644 --- a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b-Python-2.7.11.eb +++ b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b-Python-2.7.11.eb @@ -5,7 +5,8 @@ version = '0.4.1' versionsuffix = '-Python-2.7.11' homepage = 'http://xcb.freedesktop.org/' -description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.""" +description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers + for EWMH and ICCCM.""" toolchain = {'name': 'intel', 'version': '2015b'} diff --git a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b.eb b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b.eb index 147e33bc0c..a789c945cb 100644 --- a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b.eb +++ b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2015b.eb @@ -4,7 +4,8 @@ name = 'xcb-util-wm' version = '0.4.1' homepage = 'http://xcb.freedesktop.org/' -description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.""" +description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers + for EWMH and ICCCM.""" toolchain = {'name': 'intel', 'version': '2015b'} diff --git a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2016a.eb b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2016a.eb index 0874138120..c5509644a1 100644 --- a/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2016a.eb +++ b/easybuild/easyconfigs/x/xcb-util-wm/xcb-util-wm-0.4.1-intel-2016a.eb @@ -4,7 +4,8 @@ name = 'xcb-util-wm' version = '0.4.1' homepage = 'http://xcb.freedesktop.org/' -description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.""" +description = """The xcb-util-wm package contains libraries which provide client and window-manager helpers + for EWMH and ICCCM.""" toolchain = {'name': 'intel', 'version': '2016a'} diff --git a/easybuild/easyconfigs/x/xonsh/xonsh-0.3.2-intel-2016a.eb b/easybuild/easyconfigs/x/xonsh/xonsh-0.3.2-intel-2016a.eb index 2d1dd882b8..a881582db3 100644 --- a/easybuild/easyconfigs/x/xonsh/xonsh-0.3.2-intel-2016a.eb +++ b/easybuild/easyconfigs/x/xonsh/xonsh-0.3.2-intel-2016a.eb @@ -11,9 +11,6 @@ toolchain = {'name': 'intel', 'version': '2016a'} # this is a bundle of Python packages exts_defaultclass = 'PythonPackage' -# allow use of system Python -#allow_system_deps = [('Python', SYS_PYTHON_VERSION)] - dependencies = [('Python', '3.5.1')] exts_list = [ @@ -36,8 +33,6 @@ exts_list = [ }), ] -#pyver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) - modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module -- GitLab From 4cd56d8105c9d5dee8c411a0c41420161a85f1a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 30 Nov 2016 19:53:03 +0100 Subject: [PATCH 0081/1311] trivial style fixes in wxPython, XMLStarlet, XQilla, XZ, Xerces-C++, Xmipp, x265 easyconfigs --- .../w/wxPython/wxPython-3.0.2.0-foss-2016a-Python-2.7.11.eb | 2 +- .../w/wxPython/wxPython-3.0.2.0-intel-2016a-Python-2.7.11.eb | 2 +- .../w/wxPython/wxPython-3.0.2.0-intel-2016b-Python-2.7.12.eb | 2 +- .../easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-foss-2016a.eb | 2 +- .../easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-goolf-1.5.16.eb | 2 +- easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-foss-2015a.eb | 3 ++- easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-intel-2015a.eb | 3 ++- easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-foss-2015a.eb | 4 ++-- easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-goolf-1.7.20.eb | 4 ++-- easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-intel-2015a.eb | 4 ++-- easybuild/easyconfigs/x/XZ/XZ-5.0.5-GCC-4.8.2.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.0.5-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.0.5-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.0-GCC-4.9.2.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb | 2 +- .../easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb | 2 +- .../easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb | 2 +- easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb | 2 +- .../easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb | 4 +++- .../easyconfigs/x/Xmipp/Xmipp-3.1-foss-2015a-Python-2.7.9.eb | 3 ++- .../x/Xmipp/Xmipp-3.1-goolf-1.4.10-with-incl-deps.eb | 3 ++- .../easyconfigs/x/Xmipp/Xmipp-3.1-intel-2015a-Python-2.7.9.eb | 3 ++- easybuild/easyconfigs/x/x265/x265-1.9-goolf-1.7.20.eb | 4 ++-- 31 files changed, 42 insertions(+), 35 deletions(-) diff --git a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-foss-2016a-Python-2.7.11.eb index ddb87ab0aa..f64e8d14e9 100644 --- a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-foss-2016a-Python-2.7.11.eb @@ -1,6 +1,6 @@ name = 'wxPython' version = '3.0.2.0' -versionsuffix = "-Python-%(pyver)s" +versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.wxpython.org' description = """wxPython is a GUI toolkit for the Python programming language. diff --git a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016a-Python-2.7.11.eb index 803388b88a..dbd0b2a250 100644 --- a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016a-Python-2.7.11.eb @@ -1,6 +1,6 @@ name = 'wxPython' version = '3.0.2.0' -versionsuffix = "-Python-%(pyver)s" +versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.wxpython.org' description = """wxPython is a GUI toolkit for the Python programming language. diff --git a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016b-Python-2.7.12.eb index 73dad53861..181aa9aaf1 100644 --- a/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/w/wxPython/wxPython-3.0.2.0-intel-2016b-Python-2.7.12.eb @@ -1,6 +1,6 @@ name = 'wxPython' version = '3.0.2.0' -versionsuffix = "-Python-%(pyver)s" +versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.wxpython.org' description = """wxPython is a GUI toolkit for the Python programming language. diff --git a/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-foss-2016a.eb b/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-foss-2016a.eb index 2179e09197..afbf05b287 100644 --- a/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-foss-2016a.eb +++ b/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-foss-2016a.eb @@ -19,7 +19,7 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/xml', 'share/doc/xmlstarlet/html.css', 'share/doc/xmlstarlet/xmlstarlet-ug.html', - 'share/doc/xmlstarlet/xmlstarlet.txt', 'share/man/man1/xmlstarlet.1'], + 'share/doc/xmlstarlet/xmlstarlet.txt', 'share/man/man1/xmlstarlet.1'], 'dirs': ['bin', 'share/doc/xmlstarlet', 'share/man/man1'] } diff --git a/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-goolf-1.5.16.eb b/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-goolf-1.5.16.eb index 552256c88b..0fe5f964f0 100644 --- a/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/x/XMLStarlet/XMLStarlet-1.6.1-goolf-1.5.16.eb @@ -19,7 +19,7 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/xml', 'share/doc/xmlstarlet/html.css', 'share/doc/xmlstarlet/xmlstarlet-ug.html', - 'share/doc/xmlstarlet/xmlstarlet.txt', 'share/man/man1/xmlstarlet.1'], + 'share/doc/xmlstarlet/xmlstarlet.txt', 'share/man/man1/xmlstarlet.1'], 'dirs': ['bin', 'share/doc/xmlstarlet', 'share/man/man1'] } diff --git a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-foss-2015a.eb b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-foss-2015a.eb index aa79e51474..d587fbd42c 100644 --- a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-foss-2015a.eb +++ b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-foss-2015a.eb @@ -4,7 +4,8 @@ name = 'XQilla' version = '2.3.0' homepage = 'http://xqilla.sourceforge.net/HomePage' -description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, implemented on top of the Xerces-C∞ library.""" +description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, +implemented on top of the Xerces-C∞ library.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-intel-2015a.eb b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-intel-2015a.eb index b169cb5840..d8f0b44347 100644 --- a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-intel-2015a.eb +++ b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.0-intel-2015a.eb @@ -4,7 +4,8 @@ name = 'XQilla' version = '2.3.0' homepage = 'http://xqilla.sourceforge.net/HomePage' -description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, implemented on top of the Xerces-C∞ library.""" +description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, +implemented on top of the Xerces-C++ library.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-foss-2015a.eb b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-foss-2015a.eb index d7fbf95394..75b45c2966 100644 --- a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-foss-2015a.eb +++ b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-foss-2015a.eb @@ -5,8 +5,8 @@ version = '2.3.2' homepage = 'http://xqilla.sourceforge.net/HomePage' -description = """XQilla is an XQuery and XPath 2 library and command line -utility written in C++, implemented on top of the Xerces-C++ library.""" +description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, +implemented on top of the Xerces-C++ library.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-goolf-1.7.20.eb b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-goolf-1.7.20.eb index c6db3af286..4d53965883 100644 --- a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-goolf-1.7.20.eb @@ -5,8 +5,8 @@ version = '2.3.2' homepage = 'http://xqilla.sourceforge.net/HomePage' -description = """XQilla is an XQuery and XPath 2 library and command line -utility written in C++, implemented on top of the Xerces-C++ library.""" +description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, +implemented on top of the Xerces-C++ library.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} diff --git a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-intel-2015a.eb b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-intel-2015a.eb index 1fe033551c..df53082bdd 100644 --- a/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-intel-2015a.eb +++ b/easybuild/easyconfigs/x/XQilla/XQilla-2.3.2-intel-2015a.eb @@ -5,8 +5,8 @@ version = '2.3.2' homepage = 'http://xqilla.sourceforge.net/HomePage' -description = """XQilla is an XQuery and XPath 2 library and command line -utility written in C++, implemented on top of the Xerces-C++ library.""" +description = """XQilla is an XQuery and XPath 2 library and command line utility written in C++, +implemented on top of the Xerces-C++ library.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-GCC-4.8.2.eb b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-GCC-4.8.2.eb index 3d54b29efd..652e4ccaae 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-GCC-4.8.2.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-GCC-4.8.2.eb @@ -12,7 +12,7 @@ sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-goolf-1.4.10.eb b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-goolf-1.4.10.eb index e60568da6e..134222d629 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-goolf-1.4.10.eb @@ -12,7 +12,7 @@ sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-ictce-5.3.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-ictce-5.3.0.eb index 6f7148a406..da40fe12f8 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.0.5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.0.5-ictce-5.3.0.eb @@ -12,7 +12,7 @@ sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.0-GCC-4.9.2.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.0-GCC-4.9.2.eb index 99b4d29f28..544734e689 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.0-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.0-GCC-4.9.2.eb @@ -12,7 +12,7 @@ sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb index 9d2ac5e32d..96695c9d5c 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb index cafe4d07ac..f08ddf7da4 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb @@ -18,7 +18,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb index 0245b4d813..d4f3584da4 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb index 6d7bd28197..90393732b9 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb index b4a5a18d70..52273a7c6b 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb @@ -20,7 +20,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb index 9cb0eb5b87..8985ebbf18 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb index 8bddb8fe4a..aaea1f659f 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb index c463ba319e..1b63e65341 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb index 3e8e48f760..2cb7040caf 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb index b10cbfb5b1..9822949071 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb @@ -20,7 +20,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb index e582d9cc6b..bcd46743d2 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb index 7d1af0e121..95304a848d 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb @@ -17,7 +17,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb index 031a0f54b9..8cbfa7536f 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb @@ -4,7 +4,9 @@ name = 'Xerces-C++' version = '3.1.1' homepage = 'http://xerces.apache.org/xerces-c/' -description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.""" +description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it +easy to give your application the ability to read and write XML data. A shared library is provided for parsing, +generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-foss-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-foss-2015a-Python-2.7.9.eb index fc928c6c57..63e623f082 100644 --- a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-foss-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-foss-2015a-Python-2.7.9.eb @@ -2,7 +2,8 @@ name = 'Xmipp' version = '3.1' homepage = 'http://xmipp.cnb.csic.es/' -description = "Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron microscopy." +description = """Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron + microscopy.""" source_urls = ['http://xmipp.cnb.csic.es/Downloads/'] sources = ['Xmipp-%(version)s-src.tar.gz'] diff --git a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-goolf-1.4.10-with-incl-deps.eb b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-goolf-1.4.10-with-incl-deps.eb index ec08bd48fa..18d8b11833 100644 --- a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-goolf-1.4.10-with-incl-deps.eb +++ b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-goolf-1.4.10-with-incl-deps.eb @@ -3,7 +3,8 @@ version = '3.1' versionsuffix = '-with-incl-deps' homepage = 'http://xmipp.cnb.csic.es/' -description = "Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron microscopy." +description = """Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron + microscopy.""" source_urls = ['http://xmipp.cnb.csic.es/Downloads/'] sources = ['Xmipp-%(version)s-src.tar.gz'] diff --git a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-intel-2015a-Python-2.7.9.eb index 82d76eef0e..d6d8c64ef4 100644 --- a/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/x/Xmipp/Xmipp-3.1-intel-2015a-Python-2.7.9.eb @@ -2,7 +2,8 @@ name = 'Xmipp' version = '3.1' homepage = 'http://xmipp.cnb.csic.es/' -description = "Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron microscopy." +description = """Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron + microscopy.""" source_urls = ['http://xmipp.cnb.csic.es/Downloads/'] sources = ['Xmipp-%(version)s-src.tar.gz'] diff --git a/easybuild/easyconfigs/x/x265/x265-1.9-goolf-1.7.20.eb b/easybuild/easyconfigs/x/x265/x265-1.9-goolf-1.7.20.eb index f346f0f6b3..bf1fda81a1 100644 --- a/easybuild/easyconfigs/x/x265/x265-1.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/x/x265/x265-1.9-goolf-1.7.20.eb @@ -13,10 +13,10 @@ source_urls = ['http://ftp.videolan.org/pub/videolan/x265/'] sources = ['x265_%(version)s.tar.gz'] builddependencies = [ - ('CMake', '3.5.2') + ('CMake', '3.5.2') ] dependencies = [ - ('Yasm','1.3.0'), + ('Yasm', '1.3.0'), ] start_dir = 'source' -- GitLab From 036d914bf9df00f51b553db063d1dfae037a0b8b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 10:21:57 +0100 Subject: [PATCH 0082/1311] trivial style fixes in Xerces-C++, worker easyconfigs --- .../easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb | 8 ++++---- .../x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb | 8 +++++--- .../x/Xerces-C++/Xerces-C++-3.1.1-intel-2015a.eb | 6 +++++- .../x/Xerces-C++/Xerces-C++-3.1.2-foss-2015a.eb | 1 - .../x/Xerces-C++/Xerces-C++-3.1.2-goolf-1.7.20.eb | 1 - .../x/Xerces-C++/Xerces-C++-3.1.2-intel-2015a.eb | 1 - 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb b/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb index f9fffe7804..d27c569881 100644 --- a/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb +++ b/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb @@ -32,19 +32,19 @@ exts_list = [ ('Text::CSV', '1.33', { 'source_tmpl': 'Text-CSV-1.33.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA'], - }), + }), ('DBI', '1.636', { 'source_tmpl': 'DBI-1.636.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TI/TIMB'], - }), + }), ('DBD::SQLite', '1.50', { 'source_tmpl': 'DBD-SQLite-1.50.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI'], - }), + }), ('Date::Language', '2.30', { 'source_tmpl': 'TimeDate-2.30.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GB/GBARR'], - }), + }), ] modextrapaths = { diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb index 8cbfa7536f..5d61dee01a 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-foss-2015a.eb @@ -4,9 +4,11 @@ name = 'Xerces-C++' version = '3.1.1' homepage = 'http://xerces.apache.org/xerces-c/' -description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it -easy to give your application the ability to read and write XML data. A shared library is provided for parsing, -generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.""" +description = """Xerces-C++ is a validating XML parser written in a portable +subset of C++. Xerces-C++ makes it easy to give your application the ability to +read and write XML data. A shared library is provided for parsing, generating, +manipulating, and validating XML documents using the DOM, SAX, and SAX2 +APIs.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-intel-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-intel-2015a.eb index 2dd8450711..d8c4aa7381 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-intel-2015a.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.1-intel-2015a.eb @@ -4,7 +4,11 @@ name = 'Xerces-C++' version = '3.1.1' homepage = 'http://xerces.apache.org/xerces-c/' -description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.""" +description = """Xerces-C++ is a validating XML parser written in a portable +subset of C++. Xerces-C++ makes it easy to give your application the ability to +read and write XML data. A shared library is provided for parsing, generating, +manipulating, and validating XML documents using the DOM, SAX, and SAX2 +APIs.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-foss-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-foss-2015a.eb index b0abf7e5eb..878febbbdf 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-foss-2015a.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-foss-2015a.eb @@ -4,7 +4,6 @@ name = 'Xerces-C++' version = '3.1.2' homepage = 'http://xerces.apache.org/xerces-c/' - description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-goolf-1.7.20.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-goolf-1.7.20.eb index 64c371a561..54a281fc04 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-goolf-1.7.20.eb @@ -4,7 +4,6 @@ name = 'Xerces-C++' version = '3.1.2' homepage = 'http://xerces.apache.org/xerces-c/' - description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, diff --git a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-intel-2015a.eb b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-intel-2015a.eb index 1ddefd9f96..9f7deab432 100644 --- a/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-intel-2015a.eb +++ b/easybuild/easyconfigs/x/Xerces-C++/Xerces-C++-3.1.2-intel-2015a.eb @@ -4,7 +4,6 @@ name = 'Xerces-C++' version = '3.1.2' homepage = 'http://xerces.apache.org/xerces-c/' - description = """Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, -- GitLab From 685544b9ab6efe5e962d99ab657b7eb8358ad277 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 10:29:46 +0100 Subject: [PATCH 0083/1311] trivial style fixes in wkhtmltopdf, wget, Whoosh easyconfigs --- .../Whoosh/Whoosh-2.7.0-goolf-1.4.10-Python-2.7.3.eb | 6 +++--- .../easyconfigs/w/wget/wget-1.17.1-foss-2016a.eb | 12 +++++++----- .../w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb | 12 ++++++------ .../easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/easybuild/easyconfigs/w/Whoosh/Whoosh-2.7.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/w/Whoosh/Whoosh-2.7.0-goolf-1.4.10-Python-2.7.3.eb index db2dcb5741..428e7a9607 100644 --- a/easybuild/easyconfigs/w/Whoosh/Whoosh-2.7.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/w/Whoosh/Whoosh-2.7.0-goolf-1.4.10-Python-2.7.3.eb @@ -19,9 +19,9 @@ pyshortver = ".".join(pyver.split(".")[:-1]) versionsuffix = "-%s-%s" % (python, pyver) dependencies = [ - (python, pyver), - ('numpy','1.6.2', versionsuffix), - ('scipy', '0.11.0', versionsuffix), + (python, pyver), + ('numpy', '1.6.2', versionsuffix), + ('scipy', '0.11.0', versionsuffix), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016a.eb b/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016a.eb index 42a8b8772c..05a38bee32 100644 --- a/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016a.eb +++ b/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016a.eb @@ -14,13 +14,15 @@ source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_XZ] dependencies = [ - #('GnuTLS', '3.4.11'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date gnutls for security reasons ('PCRE', '8.38'), ('libidn', '1.32'), ('zlib', '1.2.8'), - #('OpenSSL', '1.0.1s'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1s'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date gnutls for security reasons + # ('GnuTLS', '3.4.11'), ] configopts = '--with-ssl=openssl ' @@ -28,7 +30,7 @@ configopts = '--with-ssl=openssl ' osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # Optionally, you can use gnutls (default) instead of OpenSSL. # Do not forget to comment out configopts in that case. -#osdependencies = [('gnutls-devel', 'gnutls-dev', 'libgnutls-devel')] +# osdependencies = [('gnutls-devel', 'gnutls-dev', 'libgnutls-devel')] sanity_check_paths = { 'files': ['bin/wget'], diff --git a/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb b/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb index ee433ddeae..daaefceb38 100644 --- a/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb +++ b/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb @@ -20,12 +20,12 @@ source_urls = ['http://download.gna.org/wkhtmltopdf/%(version_major_minor)s/%(ve sources = ['wkhtmltox-%(version)s_linux-generic-amd64.tar.xz'] osdependencies = [ - ('zlib', 'zlib1g'), - 'fontconfig', - ('freetype', 'libfreetype6'), - ('libX11', 'libx11-6'), - ('libXext', 'libxext6'), - ('libXrender', 'libxrender1') + ('zlib', 'zlib1g'), + 'fontconfig', + ('freetype', 'libfreetype6'), + ('libX11', 'libx11-6'), + ('libXext', 'libxext6'), + ('libXrender', 'libxrender1') ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb b/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb index d27c569881..3ba6c18a9a 100644 --- a/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb +++ b/easybuild/easyconfigs/w/worker/worker-1.6.7-intel-2016b.eb @@ -28,7 +28,7 @@ exts_list = [ ('IO::Stringy', '2.111', { 'source_tmpl': 'IO-stringy-2.111.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DS/DSKOLL'], - }), + }), ('Text::CSV', '1.33', { 'source_tmpl': 'Text-CSV-1.33.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA'], -- GitLab From 471e5a1676b4c4fe3c56a215cdb091fa0cb4c81c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 12:19:15 +0100 Subject: [PATCH 0084/1311] {chem}[intel/2016b] DL_POLY_Classic v1.9 w/ PLUMED 2.2.3 --- ...LY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb | 27 + .../DL_POLY_Classic-1.9-intel-2016b.eb | 16 + ...Y_Classic-1.9_fix-PLUMED-integration.patch | 1355 +++++++++++++++++ 3 files changed, 1398 insertions(+) create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb create mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9_fix-PLUMED-integration.patch diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb new file mode 100644 index 0000000000..9541b2f02f --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb @@ -0,0 +1,27 @@ +name = 'DL_POLY_Classic' +version = '1.9' + +homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' +description = """DL_POLY Classic is a freely available molecular dynamics program developed + from the DL_POLY_2 package. This version does not install the java gui.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +sources = [ + 'dl_class_%(version)s.tar.gz', + # download from https://groups.google.com/group/plumed-users/attach/85c9fdc16956d/dlpoly2.tar.gz?part=0.1&authuser=0 + # see https://groups.google.com/d/msg/plumed-users/cWaIDU5F6Bw/bZUW3J9cCAAJ + 'dlpoly2.tar.gz', +] +patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] + +plumedversion = '2.2.3' +versionsuffix = '-PLUMED-%s' % plumedversion + +dependencies = [('PLUMED', plumedversion)] + +# parallel build tends to break +parallel = 1 + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb new file mode 100644 index 0000000000..c4fcfd2f6b --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb @@ -0,0 +1,16 @@ +name = 'DL_POLY_Classic' +version = '1.9' + +homepage = 'http://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/' +description = """DL_POLY Classic is a freely available molecular dynamics program developed + from the DL_POLY_2 package. This version does not install the java gui.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['dl_class_%(version)s.tar.gz'] +source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] + +# parallel build tends to break +parallel = 1 + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9_fix-PLUMED-integration.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9_fix-PLUMED-integration.patch new file mode 100644 index 0000000000..550a4ce5fb --- /dev/null +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9_fix-PLUMED-integration.patch @@ -0,0 +1,1355 @@ +fix patch to make DL_Poly Classic 1.9 work with PLUMED +original patch is obtained as a tarball named dlpoly2.tar.gz from +https://groups.google.com/group/plumed-users/attach/85c9fdc16956d/dlpoly2.tar.gz?part=0.1&authuser=0 +see also https://groups.google.com/d/msg/plumed-users/cWaIDU5F6Bw/bZUW3J9cCAAJ + +author: Kenneth Hoste, Ward Poelmans (HPC-UGent) +--- dlpoly-2.20.diff/srcmod/dlpoly.f.preplumed.orig 2016-11-25 16:52:49.870981815 +0100 ++++ dlpoly-2.20.diff/srcmod/dlpoly.f.preplumed 2016-11-25 16:57:11.720654972 +0100 +@@ -1,21 +1,14 @@ +- program dlpoly ++ program dlpoly_classic + + c*********************************************************************** + c +-c dl_poly is an cclrc/ccp5 program package for the dynamical +-c simulation of molecular systems. ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. + c +-c dl_poly is the property of the cclrc daresbury laboratory, +-c daresbury, warrington wa4 4ad. no part of the package may +-c be redistributed to third parties without the consent of +-c daresbury laboratory. ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. + c +-c dl_poly is available free of charge to academic institutions +-c engaged in non-commercial research only. potential users not +-c in this category must consult the ccp5 program librarian at +-c daresbury to negotiate terms of use. +-c +-c neither the cclrc, daresbury laboratory, ccp5 nor the authors ++c neither the stfc, daresbury laboratory, ccp5 nor the authors + c of this package claim that it is free from errors and do not + c accept liability for any loss or damage that may arise from + c its use. it is the users responsibility to verify that the +@@ -23,19 +16,13 @@ + c it. + c + c users of this package are recommended to consult the dl_poly +-c user and reference manuals for the full terms and conditions +-c of its use. ++c user manual for the full description of its use and purpose. + c + c authors: w.smith and t.r.forester 1995 + c copyright daresbury laboratory 1995 + c +-c release 2.20 +-c +-c wl +-c 2009/01/15 11:55:48 +-c 1.20 +-c Exp +-c ++c DL_POLY CLASSIC VERSION 1.9 ++c + c*********************************************************************** + + c declare required modules +@@ -57,6 +44,7 @@ + use integrator_module + use inversion_module + use metal_module ++ use metafreeze_module + use nlist_builders_module + use pair_module + use pmf_module +@@ -76,11 +64,14 @@ + + implicit none + ++ character*1 hms,dec ++ character*8 seek ++ + logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle + logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb + logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd + logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch +- logical lghost,llswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect + + integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn + integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt +@@ -91,7 +82,7 @@ + integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k + integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit + integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode +- integer natms2,ntghost,nsolva,isolva ++ integer natms2,ntghost,nsolva,isolva,nofic + + real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup + real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd +@@ -100,53 +91,44 @@ + real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter + real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom + real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf +- real(8) consv,engke,engrot,sigma,virtot,engcfg ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim + real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen + real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol + real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit +- real(8) ebias,vmin,boost,heinc,tboost,hyp_units,estar +- ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord + real(8), allocatable :: tbuffer(:) + + data timelp/0.d0/,lminnow/.false./,ntrack/10/ +- data npage,lines/8,0/,recycle/.true./,boost/1.d0/ ++ data npage,lines/8,0/,recycle/.true./ + data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ + data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ + data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ +-CVAM +-CVAM include 'VT.inc' +-CVAM + + c set up the communications + + call initcomms() + call gsync() + +-c set up VAMPIR +- +-CVAM call VTSETUP() +-CVAM call VTTRACEON(ierr) +-CVAM call VTBEGIN(99, ierr) +- + c determine processor identities + + call machine(idnode,mxnode) +- +-c open main printing file +- +- if(idnode.eq.0)open(nrite,file='OUTPUT') +- if(idnode.eq.0) write (nrite, +- x "(/,20x,'DL_POLY Version 2.20', +- x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode +- ++ + c activate for limited-life executable + + CBOMB call bomb(idnode,2008,6,30) + + allocate (tbuffer(10),stat=memr) + +- call parset(idnode,mxnode,tbuffer) ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file + ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ + c allocate arrays for each function + + call alloc_ang_arrays(idnode) +@@ -184,24 +166,24 @@ + c input the control parameters defining the simulation + + call simdef +- x (lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal,lzeql, +- x lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall,lsolva, +- x lfree,lfrmas,lexcite,lswitch,lghost,idnode,minstp,intsta,istraj, +- x keybpd,keyens,keyfce,keyres,keyver,keytrj,kmax1,kmax2,kmax3, +- x multt,nstack,nstbgr,nsbzdn,nstbpo,nhko,nlatt,nstbts,nsteql, +- x nstraj,nstrun,nospl,keytol,numgau,khit,nhit,nblock,ntrack, +- x blkout,numneb,mode,nsolva,isolva,alpha,delr,epsq,fmax,press, +- x quattol,rcut,rprim,rvdw,taup,taut,temp,timcls,timjob,tolnce, +- x tstep,rlxtol,opttol,zlen,ehit,xhit,yhit,zhit,ebias,vmin,heinc, +- x catchrad,sprneb,deltad,tlow,hyp_units) ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) + + c input the system force field + + call sysdef + x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, + x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, +- x ntpter,nshels,keyshl,ntghost,dlrpot,engunit,rvdw,rcuttb,rctter, +- x rcutfb) ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) + + if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) + +@@ -237,11 +219,23 @@ + c read thermodynamic and structural data from restart file + + call sysinit +- x (lgofr,lzden,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, + x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, + x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, +- x rvdw,volm,virtot,vircom,tboost) ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) + ++c metadynamics by d. quigley ++ ++ if(lmetadyn) then ++ ++c make copy of excluded atom list for use by metadynamics ++ call exclude_copy_mtd(idnode) ++ ++c initialise metadynamics, read order parameter definitions etc. ++ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) ++ ++ end if ++ + c synchronise LRC, SIC and system charge terms for switching + + llswitch=.false. +@@ -283,6 +277,19 @@ + + sigma=temp*boltz*degfre*0.5d0 + ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ + c time check + + call timchk(1,tzero) +@@ -309,7 +316,7 @@ + x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, + x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, + x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, +- x virtot,sigma,tolnce,engunit) ++ x virtot,sigma,tolnce,engunit,engord,virord) + + c calculate initial conditions for velocity verlet + +@@ -340,12 +347,11 @@ + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, + x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, + x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, +- x virtbp,virter,virtet,volm,engmet,virtot) ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) + + c bias potential dynamics option - reset forces + +- if(lbpd)call bpd_forces +- x (natms,vmin,ebias,temp,engcfg,boost) ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) + + endif + +@@ -354,14 +360,14 @@ + c construct the first reference state + + call hyper_start +- x (lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, + x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, + x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, + x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, +- x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,alpha, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, + x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, + x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, +- x tboost,hyp_units) ++ x hyp_units) + + endif + +@@ -430,7 +436,7 @@ + vxo_fre(:)=vxx(:) + vyo_fre(:)=vyy(:) + vzo_fre(:)=vzz(:) +- ++ + endif + + endif +@@ -524,10 +530,11 @@ + if(llswitch)call copy_force(idnode,mxnode) + + call vv_integrate +- x (lcnb,lshmov,isw,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,vircon,vircom,virtot,temp,press,volm,sigma, +- x taut,taup,chit,chip,consv,conint,elrc,virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) + + if(lghost)call update_ghost(idnode,mxnode) + +@@ -560,10 +567,10 @@ + x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, + x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, + x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, +- x virtot,sigma,tolnce,engunit) ++ x virtot,sigma,tolnce,engunit,engord,virord) + + elseif(loptim.or.keyshl.ne.2)then +- ++ + call molecular_dynamics + x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, + x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, +@@ -577,7 +584,7 @@ + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, + x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, + x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, +- x virtbp,virter,virtet,volm,engmet,virtot) ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) + + else + +@@ -593,14 +600,13 @@ + x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, + x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, + x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, +- x pass1,pass2) ++ x pass1,pass2,engord,virord) + + endif + + c bias potential dynamics option - reset forces + +- if(lbpd)call bpd_forces +- x (natms,vmin,ebias,temp,engcfg,boost) ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) + + c switching option for excitation simulation + +@@ -613,11 +619,11 @@ + c integrate equations of motion by leapfrog verlet + + if(.not.(loptim.or.lminnow))call lf_integrate +- x (lcnb,lshmov,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,quattol,vircon,vircom,virtot,temp,press, +- x volm,sigma,taut,taup,chit,chip,consv,conint,elrc, +- x virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) + + else if(keyver.gt.0)then + +@@ -625,11 +631,11 @@ + + isw=2 + if(.not.loptim)call vv_integrate +- x (lcnb,lshmov,isw,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,vircon,vircom,virtot,temp,press, +- x volm,sigma,taut,taup,chit,chip,consv,conint,elrc, +- x virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) + + endif + +@@ -651,23 +657,36 @@ + + engtke=engke+engrot + call hyper_driver +- x (ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql,newlst, +- x prechk,tadall,nblock,ntrack,idnode,imcon,keyfce,keyfld, +- x keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp, +- x ntcons,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, +- x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, +- x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, + x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, + x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, +- x tolnce,tboost,hyp_units) ++ x tolnce,hyp_units,ebias,vmin) ++ ++ endif ++ ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 + + endif + ++ endif ++ + c calculate shell kinetic energy + + if(keyshl.eq.1)then +- ++ + call corshl(idnode,mxnode,ntshl,shlke) + + endif +@@ -686,6 +705,7 @@ + x mod(nstep-nsteql,nstbts).eq.0)then + + chit=0.d0 ++ chit_shl=0.d0 + chip=0.d0 + do i=1,9 + eta(i)=0.d0 +@@ -722,13 +742,13 @@ + + if(nstep.gt.0)call static + x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, +- x nstep,nsteql,ntpatm,numacc,mxnode,nblock,consv,degfre, +- x degrot,engang,engbnd,engcpe,engdih,enginv,engke,engrot, +- x engsrp,engunit,engcfg,stpeng,stpeth,stpprs,stptmp,stpvir, +- x stpvol,tstep,virbnd,engfbp,vircom,vircon,vircpe,virsrp, +- x engfld,virfld,engtbp,virtbp,virpmf,virshl,engshl,engtet, +- x virtet,degshl,shlke,virang,width,engmet,virmet,engter, +- x virter,boost,tboost,ebias,heinc) ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) + + c z density calculation + +@@ -746,41 +766,39 @@ + call revive + x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, + x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, +- x tboost) ++ x tboost,chit_shl) + call error(idnode,95) + + endif + + c line-printer output every nstbpo steps + +-CVAM +-CVAM call VTBEGIN(68, ierr) +-CVAM +- + if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then +- ++ + call timchk(0,timelp) + if(idnode.eq.0)then + ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) + if(mod(lines,npage).eq.0) + x write(nrite,"(1x,120('-'), + x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, + x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', + x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, +- x 'time(ps)',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', + x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', +- x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu (s)',6x, ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, + x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', + x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', + x 7x,'press',/,/, +- x 1x,120('-'))") +- write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f8.1,1p,9e12.4, +- x /,1x,0p,f8.1,1p,9e12.4)") ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") + x nstep,(stpval(i),i=1,9), +- x dble(nstep)*tstep,(stpval(i),i=10,18), +- x timelp,(stpval(i),i=19,27) ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) + write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', +- x 1p,9e12.4,/,9x,9e12.4)") (ravval(i),i=1,27) ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) + write(nrite,"(1x,120('-'))") + + endif +@@ -788,9 +806,7 @@ + lines=lines+1 + + endif +-CVAM +-CVAM call VTEND(68, ierr) +-CVAM ++ + c report end of equilibration period + + if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then +@@ -850,9 +866,10 @@ + call revive + x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, + x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, +- x tboost) ++ x tboost,chit_shl) + +- if(ltad.or.lbpd)call hyper_close(idnode,mxnode,natms,nsteql) ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) + + endif + +@@ -870,11 +887,11 @@ + c last time check + + call timchk(0,timelp) +- ++ call get_prntime(hms,timjob,prntim) + if(idnode.eq.0)write(nrite, +- x "(/,/,1x,'run terminating. elapsed cpu time = ',f13.3, +- x ', job time = ',f13.3,', close time = ',f13.3,/)") +- x timelp,timjob,timcls ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls + + c shell relaxation convergence statistics + +@@ -891,13 +908,15 @@ + levcfg=2 + if(loptim)levcfg=0 + if(.not.lneb)call result +- x (lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, +- x levcfg,nzden,nstep,ntpatm,numacc,numrdf,chip,chit,conint, +- x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost) ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) + + c write hyperdynamics restart file + +- if(ltad.or.lbpd)call hyper_close(idnode,mxnode,natms,nsteql) ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) + + c close output channels + +@@ -911,9 +930,7 @@ + endif + + c terminate job +-CVAM +-CVAM call VTEND(99, ierr) +-CVAM ++ + call exitcomms() + + end +--- dlpoly-2.20.diff/srcmod/dlpoly.f.orig 2015-09-15 11:23:19.383901148 +0200 ++++ dlpoly-2.20.diff/srcmod/dlpoly.f 2016-11-25 18:01:54.766283535 +0100 +@@ -1,21 +1,14 @@ +- program dlpoly ++ program dlpoly_classic + + c*********************************************************************** + c +-c dl_poly is an cclrc/ccp5 program package for the dynamical +-c simulation of molecular systems. ++c dl_poly classic is an stfc/ccp5 program package for the ++c dynamical simulation of molecular systems. + c +-c dl_poly is the property of the cclrc daresbury laboratory, +-c daresbury, warrington wa4 4ad. no part of the package may +-c be redistributed to third parties without the consent of +-c daresbury laboratory. ++c dl_poly is the copyright of the stfc daresbury laboratory, ++c daresbury, warrington wa4 4ad. + c +-c dl_poly is available free of charge to academic institutions +-c engaged in non-commercial research only. potential users not +-c in this category must consult the ccp5 program librarian at +-c daresbury to negotiate terms of use. +-c +-c neither the cclrc, daresbury laboratory, ccp5 nor the authors ++c neither the stfc, daresbury laboratory, ccp5 nor the authors + c of this package claim that it is free from errors and do not + c accept liability for any loss or damage that may arise from + c its use. it is the users responsibility to verify that the +@@ -23,19 +16,13 @@ + c it. + c + c users of this package are recommended to consult the dl_poly +-c user and reference manuals for the full terms and conditions +-c of its use. ++c user manual for the full description of its use and purpose. + c + c authors: w.smith and t.r.forester 1995 + c copyright daresbury laboratory 1995 + c +-c release 2.20 +-c +-c wl +-c 2009/01/15 11:55:48 +-c 1.20 +-c Exp +-c ++c DL_POLY CLASSIC VERSION 1.9 ++c + c*********************************************************************** + + c declare required modules +@@ -57,6 +44,7 @@ + use integrator_module + use inversion_module + use metal_module ++ use metafreeze_module + use nlist_builders_module + use pair_module + use pmf_module +@@ -76,11 +64,14 @@ + + implicit none + ++ character*1 hms,dec ++ character*8 seek ++ + logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle + logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb + logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd + logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch +- logical lghost,llswitch ++ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect + + integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn + integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt +@@ -91,7 +82,7 @@ + integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k + integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit + integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode +- integer natms2,ntghost,nsolva,isolva ++ integer natms2,ntghost,nsolva,isolva,nofic + + real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup + real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd +@@ -100,58 +91,50 @@ + real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter + real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom + real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf +- real(8) consv,engke,engrot,sigma,virtot,engcfg ++ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim + real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen + real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol + real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit +- real(8) ebias,vmin,boost,heinc,tboost,hyp_units,estar ++ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl ++ real(8) engord,virord + c PLUMED modifications + real(8) energyUnits,lengthUnits,timeUnits + integer(8) get_comms + c PLUMED modifications +- ++ + real(8), allocatable :: tbuffer(:) + integer :: plumedavaiable + + data timelp/0.d0/,lminnow/.false./,ntrack/10/ +- data npage,lines/8,0/,recycle/.true./,boost/1.d0/ ++ data npage,lines/8,0/,recycle/.true./ + data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ + data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ + data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ +-CVAM +-CVAM include 'VT.inc' +-CVAM + + c set up the communications + + call initcomms() + call gsync() + +-c set up VAMPIR +- +-CVAM call VTSETUP() +-CVAM call VTTRACEON(ierr) +-CVAM call VTBEGIN(99, ierr) +- + c determine processor identities + + call machine(idnode,mxnode) +- +-c open main printing file +- +- if(idnode.eq.0)open(nrite,file='OUTPUT') +- if(idnode.eq.0) write (nrite, +- x "(/,20x,'DL_POLY Version 2.20', +- x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode +- ++ + c activate for limited-life executable + + CBOMB call bomb(idnode,2008,6,30) + + allocate (tbuffer(10),stat=memr) + +- call parset(idnode,mxnode,tbuffer) ++ call parset(redirect,idnode,mxnode,tbuffer) ++ ++c open main printing file + ++ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') ++ if(idnode.eq.0) write (nrite, ++ x "(/,20x,'DL_POLY Classic 1.9', ++ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode ++ + c allocate arrays for each function + + call alloc_ang_arrays(idnode) +@@ -189,24 +172,24 @@ + c input the control parameters defining the simulation + + call simdef +- x (lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal,lzeql, +- x lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall,lsolva, +- x lfree,lfrmas,lexcite,lswitch,lghost,idnode,minstp,intsta,istraj, +- x keybpd,keyens,keyfce,keyres,keyver,keytrj,kmax1,kmax2,kmax3, +- x multt,nstack,nstbgr,nsbzdn,nstbpo,nhko,nlatt,nstbts,nsteql, +- x nstraj,nstrun,nospl,keytol,numgau,khit,nhit,nblock,ntrack, +- x blkout,numneb,mode,nsolva,isolva,alpha,delr,epsq,fmax,press, +- x quattol,rcut,rprim,rvdw,taup,taut,temp,timcls,timjob,tolnce, +- x tstep,rlxtol,opttol,zlen,ehit,xhit,yhit,zhit,ebias,vmin,heinc, +- x catchrad,sprneb,deltad,tlow,hyp_units) ++ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, ++ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, ++ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, ++ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, ++ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, ++ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, ++ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, ++ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, ++ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, ++ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) + + c input the system force field + + call sysdef + x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, + x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, +- x ntpter,nshels,keyshl,ntghost,dlrpot,engunit,rvdw,rcuttb,rctter, +- x rcutfb) ++ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, ++ x rctter,rcutfb) + + if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) + +@@ -242,11 +225,23 @@ + c read thermodynamic and structural data from restart file + + call sysinit +- x (lgofr,lzden,lsolva,lfree,lghost,idnode,imcon,keyfce, ++ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, + x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, + x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, +- x rvdw,volm,virtot,vircom,tboost) ++ x rvdw,volm,virtot,vircom,tboost,chit_shl) + ++c metadynamics by d. quigley ++ ++ if(lmetadyn) then ++ ++c make copy of excluded atom list for use by metadynamics ++ call exclude_copy_mtd(idnode) ++ ++c initialise metadynamics, read order parameter definitions etc. ++ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) ++ ++ end if ++ + c synchronise LRC, SIC and system charge terms for switching + + llswitch=.false. +@@ -317,6 +312,19 @@ + + sigma=temp*boltz*degfre*0.5d0 + ++c metadynamics by d. quigley ++ ++ sigma_shl=boltz*degshl*0.5d0 ++ ++c convert BPD parameters to internal units ++ ++ if(lbpd)then ++ ++ ebias=0.5d0*boltz*degfre*ebias ++ vmin=0.5d0*boltz*degfre*vmin ++ ++ endif ++ + c time check + + call timchk(1,tzero) +@@ -343,7 +351,7 @@ + x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, + x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, + x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, +- x virtot,sigma,tolnce,engunit) ++ x virtot,sigma,tolnce,engunit,engord,virord) + + c calculate initial conditions for velocity verlet + +@@ -374,12 +382,11 @@ + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, + x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, + x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, +- x virtbp,virter,virtet,volm,engmet,virtot) ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) + + c bias potential dynamics option - reset forces + +- if(lbpd)call bpd_forces +- x (natms,vmin,ebias,temp,engcfg,boost) ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) + + endif + +@@ -388,14 +395,14 @@ + c construct the first reference state + + call hyper_start +- x (lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, ++ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, + x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, + x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, + x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, +- x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,alpha, ++ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, + x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, + x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, +- x tboost,hyp_units) ++ x hyp_units) + + endif + +@@ -464,7 +471,7 @@ + vxo_fre(:)=vxx(:) + vyo_fre(:)=vyy(:) + vzo_fre(:)=vzz(:) +- ++ + endif + + endif +@@ -558,10 +565,11 @@ + if(llswitch)call copy_force(idnode,mxnode) + + call vv_integrate +- x (lcnb,lshmov,isw,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,vircon,vircom,virtot,temp,press,volm,sigma, +- x taut,taup,chit,chip,consv,conint,elrc,virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) + + if(lghost)call update_ghost(idnode,mxnode) + +@@ -594,10 +602,10 @@ + x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, + x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, + x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, +- x virtot,sigma,tolnce,engunit) ++ x virtot,sigma,tolnce,engunit,engord,virord) + + elseif(loptim.or.keyshl.ne.2)then +- ++ + call molecular_dynamics + x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, + x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, +@@ -611,7 +619,7 @@ + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, + x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, + x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, +- x virtbp,virter,virtet,volm,engmet,virtot) ++ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) + + else + +@@ -627,14 +635,13 @@ + x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, + x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, + x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, +- x pass1,pass2) ++ x pass1,pass2,engord,virord) + + endif + + c bias potential dynamics option - reset forces + +- if(lbpd)call bpd_forces +- x (natms,vmin,ebias,temp,engcfg,boost) ++ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) + + c switching option for excitation simulation + +@@ -647,11 +654,11 @@ + c integrate equations of motion by leapfrog verlet + + if(.not.(loptim.or.lminnow))call lf_integrate +- x (lcnb,lshmov,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,quattol,vircon,vircom,virtot,temp,press, +- x volm,sigma,taut,taup,chit,chip,consv,conint,elrc, +- x virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, ++ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, ++ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, ++ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, ++ x elrc,virlrc,virpmf) + + else if(keyver.gt.0)then + +@@ -659,11 +666,11 @@ + + isw=2 + if(.not.loptim)call vv_integrate +- x (lcnb,lshmov,isw,idnode,mxnode,imcon,natms2,ngrp,keyens, +- x nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,tstep,engke, +- x engrot,tolnce,vircon,vircom,virtot,temp,press, +- x volm,sigma,taut,taup,chit,chip,consv,conint,elrc, +- x virlrc,virpmf) ++ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, ++ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, ++ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, ++ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, ++ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) + + endif + +@@ -685,23 +692,36 @@ + + engtke=engke+engrot + call hyper_driver +- x (ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql,newlst, +- x prechk,tadall,nblock,ntrack,idnode,imcon,keyfce,keyfld, +- x keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp, +- x ntcons,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, +- x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, +- x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, ++ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, ++ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, ++ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, ++ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, ++ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, ++ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, + x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, + x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, + x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, +- x tolnce,tboost,hyp_units) ++ x tolnce,hyp_units,ebias,vmin) + + endif + ++c reset average boost factor in BPD during equilibration ++ ++ if(lbpd.and.keybpd.eq.1)then ++ ++ if(lzeql.and.nstep.le.nsteql)then ++ ++ numbpd=0 ++ tboost=0.d0 ++ ++ endif ++ ++ endif ++ + c calculate shell kinetic energy + + if(keyshl.eq.1)then +- ++ + call corshl(idnode,mxnode,ntshl,shlke) + + endif +@@ -720,6 +740,7 @@ + x mod(nstep-nsteql,nstbts).eq.0)then + + chit=0.d0 ++ chit_shl=0.d0 + chip=0.d0 + do i=1,9 + eta(i)=0.d0 +@@ -756,13 +777,13 @@ + + if(nstep.gt.0)call static + x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, +- x nstep,nsteql,ntpatm,numacc,mxnode,nblock,consv,degfre, +- x degrot,engang,engbnd,engcpe,engdih,enginv,engke,engrot, +- x engsrp,engunit,engcfg,stpeng,stpeth,stpprs,stptmp,stpvir, +- x stpvol,tstep,virbnd,engfbp,vircom,vircon,vircpe,virsrp, +- x engfld,virfld,engtbp,virtbp,virpmf,virshl,engshl,engtet, +- x virtet,degshl,shlke,virang,width,engmet,virmet,engter, +- x virter,boost,tboost,ebias,heinc) ++ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, ++ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, ++ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, ++ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, ++ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, ++ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, ++ x virmet,engter,virter,boost,tboost) + + c z density calculation + +@@ -780,41 +801,39 @@ + call revive + x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, + x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, +- x tboost) ++ x tboost,chit_shl) + call error(idnode,95) + + endif + + c line-printer output every nstbpo steps + +-CVAM +-CVAM call VTBEGIN(68, ierr) +-CVAM +- + if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then +- ++ + call timchk(0,timelp) + if(idnode.eq.0)then + ++ call get_prntime(hms,timelp,prntim) ++ call get_simtime(dec,nstep,tstep,simtim) + if(mod(lines,npage).eq.0) + x write(nrite,"(1x,120('-'), + x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, + x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', + x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, +- x 'time(ps)',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', ++ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', + x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', +- x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu (s)',6x, ++ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, + x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', + x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', + x 7x,'press',/,/, +- x 1x,120('-'))") +- write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f8.1,1p,9e12.4, +- x /,1x,0p,f8.1,1p,9e12.4)") ++ x 1x,120('-'))") ++ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, ++ x /,1x,0p,f7.3,a1,1p,9e12.4)") + x nstep,(stpval(i),i=1,9), +- x dble(nstep)*tstep,(stpval(i),i=10,18), +- x timelp,(stpval(i),i=19,27) ++ x simtim,dec,(stpval(i),i=10,18), ++ x prntim,hms,(stpval(i),i=19,27) + write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', +- x 1p,9e12.4,/,9x,9e12.4)") (ravval(i),i=1,27) ++ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) + write(nrite,"(1x,120('-'))") + + endif +@@ -822,9 +841,7 @@ + lines=lines+1 + + endif +-CVAM +-CVAM call VTEND(68, ierr) +-CVAM ++ + c report end of equilibration period + + if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then +@@ -884,9 +901,10 @@ + call revive + x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, + x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, +- x tboost) ++ x tboost,chit_shl) + +- if(ltad.or.lbpd)call hyper_close(idnode,mxnode,natms,nsteql) ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) + + endif + +@@ -904,11 +922,11 @@ + c last time check + + call timchk(0,timelp) +- ++ call get_prntime(hms,timjob,prntim) + if(idnode.eq.0)write(nrite, +- x "(/,/,1x,'run terminating. elapsed cpu time = ',f13.3, +- x ', job time = ',f13.3,', close time = ',f13.3,/)") +- x timelp,timjob,timcls ++ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, ++ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") ++ x timelp,prntim,hms,timcls + + c shell relaxation convergence statistics + +@@ -925,13 +943,15 @@ + levcfg=2 + if(loptim)levcfg=0 + if(.not.lneb)call result +- x (lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, +- x levcfg,nzden,nstep,ntpatm,numacc,numrdf,chip,chit,conint, +- x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost) ++ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, ++ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, ++ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, ++ x chit_shl) + + c write hyperdynamics restart file + +- if(ltad.or.lbpd)call hyper_close(idnode,mxnode,natms,nsteql) ++ if(ltad.or.lbpd) ++ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) + + c close output channels + +@@ -945,10 +965,7 @@ + endif + + c terminate job +-CVAM +-CVAM call VTEND(99, ierr) +-CVAM +- ++ + c PLUMED + if(lplumed) call plumed_f_gcmd() + c PLUMED +--- dlpoly-2.20.diff/srcmod/basic_comms.f.preplumed.orig 2016-12-01 11:17:21.148368366 +0100 ++++ dlpoly-2.20.diff/srcmod/basic_comms.f.preplumed 2016-12-01 11:17:28.908143066 +0100 +@@ -4,14 +4,10 @@ + c + c communication harness initialisation + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -27,6 +23,8 @@ + return + end + ++ subroutine machine(idnode,mxnode) ++ + c********************************************************************* + c + c dl_poly subroutine for obtaining charcteristics of +@@ -37,9 +35,6 @@ + c + c MPI version - t.forester may 1995 + c +-c wl +-c 1.4 +-c Exp + c********************************************************************* + + implicit none +@@ -58,13 +53,9 @@ + c + c routine to determine identity of processing node + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -86,13 +77,9 @@ + c + c calculate dimension of hypercube + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -122,13 +109,9 @@ + c + c calculate number of nodes + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -150,14 +133,10 @@ + c + c Intel-like csend (double precision) + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -183,14 +162,10 @@ + c + c Intel-like crecv (double precision) + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -223,11 +198,6 @@ + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c*********************************************************************** + + use setup_module +@@ -265,11 +235,6 @@ + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c*********************************************************************** + + implicit none +@@ -305,11 +270,6 @@ + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c*********************************************************************** + + use setup_module +@@ -344,9 +304,6 @@ + c author - w. smith march 1992 + c MPI version - t. forester may 1995 + c +-c wl +-c 1.4 +-c Exp + c*********************************************************************** + + +@@ -371,14 +328,10 @@ + c + c barrier / synchronization routine + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c CPP version - w.smith + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none +@@ -400,14 +353,10 @@ + c + c exitcomms: exit from communication harness + c ++c copyright - daresbury laboratory + c MPI version - t.forester may 1995 + c CPP version - w.smith may 1995 + c +-c wl +-c 2008/01/14 13:33:07 +-c 1.4 +-c Exp +-c + c********************************************************************* + + implicit none -- GitLab From d0164f6a03d416833fb819cca0c4cd901e077b87 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 12:42:25 +0100 Subject: [PATCH 0085/1311] clean up DL_POLY Classic easyconfigs with PLUMED to use enhanced easyblock in https://github.com/hpcugent/easybuild-easyblocks/pull/829 --- ...OLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb | 26 +- ...OLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb | 25 +- .../d/DL_POLY_Classic/PLUMED-2.1.4.patch | 95318 ---------------- .../d/DL_POLY_Classic/PLUMED-2.2.0.patch | 93945 --------------- 4 files changed, 14 insertions(+), 189300 deletions(-) delete mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch delete mode 100644 easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb index 4f3144bb99..957737f32e 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb @@ -1,5 +1,3 @@ -easyblock = 'MakeCp' - name = 'DL_POLY_Classic' version = '1.9' @@ -8,31 +6,21 @@ description = """DL_POLY Classic is a freely available molecular dynamics progra from the DL_POLY_2 package. This version does not install the java gui.""" toolchain = {'name': 'foss', 'version': '2015b'} -toolchainopts = {'usempi': True} -sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +sources = [ + 'dl_class_%(version)s.tar.gz', + # download from https://groups.google.com/group/plumed-users/attach/85c9fdc16956d/dlpoly2.tar.gz?part=0.1&authuser=0 + # see https://groups.google.com/d/msg/plumed-users/cWaIDU5F6Bw/bZUW3J9cCAAJ + 'dlpoly2.tar.gz', +] +patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] plumedversion = '2.1.4' versionsuffix = '-PLUMED-%s' % plumedversion dependencies = [('PLUMED', plumedversion)] -# this patch needs to be regenerated for another version of PLUMED -patches = [('PLUMED-%s.patch' % plumedversion, 1)] - -prebuildopts = 'cd srcmod && ' -buildopts = 'gfortran' - -files_to_copy = [(["execute/cleanup", "execute/copy", "execute/DLPOLY.X", - "execute/gopoly", "execute/gui", "execute/select", - "execute/store", "execute/supa"], 'bin')] - -sanity_check_paths = { - 'files': ['bin/DLPOLY.X'], - 'dirs': [] -} - # parallel build tends to break parallel = 1 diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb index e386c9a274..6ccf002e66 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb @@ -1,5 +1,3 @@ -easyblock = 'MakeCp' - name = 'DL_POLY_Classic' version = '1.9' @@ -9,29 +7,20 @@ description = """DL_POLY Classic is a freely available molecular dynamics progra toolchain = {'name': 'foss', 'version': '2015b'} -sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +sources = [ + 'dl_class_%(version)s.tar.gz', + # download from https://groups.google.com/group/plumed-users/attach/85c9fdc16956d/dlpoly2.tar.gz?part=0.1&authuser=0 + # see https://groups.google.com/d/msg/plumed-users/cWaIDU5F6Bw/bZUW3J9cCAAJ + 'dlpoly2.tar.gz', +] +patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] plumedversion = '2.2.0' versionsuffix = '-PLUMED-%s' % plumedversion dependencies = [('PLUMED', plumedversion)] -# this patch needs to be regenerated for another version of PLUMED -patches = [('PLUMED-%s.patch' % plumedversion, 1)] - -prebuildopts = 'cd srcmod && ' -buildopts = 'gfortran' - -files_to_copy = [(["execute/cleanup", "execute/copy", "execute/DLPOLY.X", - "execute/gopoly", "execute/gui", "execute/select", - "execute/store", "execute/supa"], 'bin')] - -sanity_check_paths = { - 'files': ['bin/DLPOLY.X'], - 'dirs': [] -} - # parallel build tends to break parallel = 1 diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch deleted file mode 100644 index 5f59693c28..0000000000 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.1.4.patch +++ /dev/null @@ -1,95318 +0,0 @@ -# This patch allows to use Plumed 2.1.4 with DL_POLY. It is autogenerated with the help -# of Plumed and https://groups.google.com/forum/#!topic/plumed-users/cWaIDU5F6Bw -# Follow the instructions on that forum and you can generate the patch below -# The makefile is also adjust to use the EB set values for building -# Ward Poelmans - -diff -urN dl_class_1.9.orig/build/MakePAR dl_class_1.9/build/MakePAR ---- dl_class_1.9.orig/build/MakePAR 2011-02-22 12:46:11.000000000 +0100 -+++ dl_class_1.9/build/MakePAR 2015-11-16 17:17:11.322040795 +0100 -@@ -6,10 +6,10 @@ - #======================================================================= - - BINROOT = ../execute --CC = gcc -+CC := $(MPICC) - EX = DLPOLY.X - EXE = $(BINROOT)/$(EX) --FC=undefined -+FC := $(MPIF90) - SHELL=/bin/sh - TYPE=par - -@@ -54,9 +54,9 @@ - - #================== GNU Fortran, MPI version ============================== - gfortran: -- $(MAKE) FC="mpif90" LD="mpif90 -o" \ -- LDFLAGS="-O2 -ffast-math" \ -- FFLAGS="-c -O2 -ffast-math" \ -+ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ -+ LDFLAGS="$(LDFLAGS)" \ -+ FFLAGS="-c $(FFLAGS)" \ - EX=$(EX) BINROOT=$(BINROOT) $(TYPE) - - #================= Woodcrest ========================================= -diff -urN dl_class_1.9.orig/Plumed.cmake dl_class_1.9/Plumed.cmake ---- dl_class_1.9.orig/Plumed.cmake 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.cmake 2015-11-16 17:23:39.940977000 +0100 -@@ -0,0 +1,3 @@ -+# PLUMED: runtime installation -+set(PLUMED_LOAD -L$ENV{EBROOTPLUMED}/lib -lplumed -ldl ) -+set(PLUMED_DEPENDENCIES) -diff -urN dl_class_1.9.orig/Plumed.h dl_class_1.9/Plumed.h ---- dl_class_1.9.orig/Plumed.h 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.h 2015-10-13 11:08:41.000000000 +0200 -@@ -0,0 +1,494 @@ -+/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -+ Copyright (c) 2011-2014 The plumed team -+ (see the PEOPLE file at the root of the distribution for a list of names) -+ -+ See http://www.plumed-code.org for more information. -+ -+ This file is part of plumed, version 2. -+ -+ plumed is free software: you can redistribute it and/or modify -+ it under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ plumed is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with plumed. If not, see . -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ -+#ifndef __PLUMED_wrapper_Plumed_h -+#define __PLUMED_wrapper_Plumed_h -+ -+/** -+\page ReferencePlumedH Reference for interfacing MD codes with PLUMED -+ -+ Plumed.h and Plumed.c contain the external plumed interface, which is used to -+ integrate it with MD engines. This interface is very general, and is expected -+ not to change across plumed versions. Plumed.c also implements a dummy version -+ of the interface, so as to allow a code to be fully linked even if the plumed -+ library is not available yet. These files could be directly included in the official -+ host MD distribution. In this manner, it will be sufficient to link the plumed -+ library at link time (on all systems) or directly at runtime (on system where -+ dynamic loading is enabled) to include plumed features. -+ -+ Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o -+ needs to be linked with the host MD code immediately (whereas the rest of plumed -+ could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we -+ link the Plumed.o file we would like not to need any C++ library linked. In this -+ manner, we do not need to know which C++ compiler will be used to compile plumed. -+ The C++ library is only linked to the "rest" of plumed, which actually use it. -+ Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ -+ (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, -+ which basically includes Plumed.c, is compiled with the C++ compiler). This will -+ allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into -+ Plumed.cpp), without the need of configuring a plain C compiler. -+ -+ Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed -+ is hidden inside a single object type, which is described in C by a structure -+ (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a -+ fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct -+ and class interfaces, but the first should be preferred. The reference interface -+ is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers -+ around it. -+ -+ In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. -+ In the C and FORTRAN interfaces, all the routines are named plumed_*, to -+ avoid potential name clashes. Notice that the entire plumed library -+ is implemented in C++, and it is hidden inside the PLMD namespace. -+ -+ Handlers to the plumed object can be converted among different representations, -+ to allow inter-operability among languages. In C, there are tools to convert -+ to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. -+ -+ These handlers only contain a pointer to the real structure, so that -+ when a plumed object is brought from one language to another, -+ it brings a reference to the same environment. -+ -+ Moreover, to simplify life in all cases where a single Plumed object is -+ required for the entire simulation (which covers most of the practical -+ applications with conventional MD codes) it is possible to take advantage -+ of a global interface, which is implicitly referring to a unique global instance. -+ The global object should still be initialized and finalized properly. -+ -+ The basic method to send a message to plumed is -+\verbatim -+ (C) plumed_cmd -+ (C++) PLMD::Plumed::cmd -+ (FORTRAN) PLUMED_F_CMD -+\endverbatim -+ -+ To initialize a plumed object, use: -+\verbatim -+ (C) plumed_create -+ (C++) (constructor of PLMD::Plumed) -+ (FORTRAN) PLUMED_F_CREATE -+\endverbatim -+ -+ To finalize it, use -+\verbatim -+ (C) plumed_finalize -+ (C++) (destructor of PLMD::Plumed) -+ (FORTRAN) PLUMED_F_FINALIZE -+\endverbatim -+ -+ To access to the global-object, use -+\verbatim -+ (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd -+ (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd -+ (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD -+\endverbatim -+ -+ To check if the global object has been initialized, use -+\verbatim -+ (C) plumed_ginitialized -+ (C++) PLMD::Plumed::ginitialized -+ (FORTRAN) PLUMED_F_GINITIALIZED -+\endverbatim -+ -+ To check if plumed library is available (this is useful for runtime linking), use -+\verbatim -+ (C) plumed_installed -+ (C++) PLMD::Plumed::installed -+ (FORTRAN) PLUMED_F_INSTALLED -+\endverbatim -+ -+ To convert handlers use -+\verbatim -+ (C) plumed_c2f (C to FORTRAN) -+ (C) plumed_f2c (FORTRAN to C) -+ (C++) Plumed(plumed) constructor (C to C++) -+ (C++) operator plumed() cast (C++ to C) -+ (C++) Plumed(char*) constructor (FORTRAN to C++) -+ (C++) toFortran(char*) (C++ to FORTRAN) -+\endverbatim -+ -+\verbatim -+ FORTRAN interface -+ SUBROUTINE PLUMED_F_INSTALLED(i) -+ INTEGER, INTENT(OUT) :: i -+ SUBROUTINE PLUMED_F_GINITIALIZED(i) -+ INTEGER, INTENT(OUT) :: i -+ SUBROUTINE PLUMED_F_GCREATE() -+ SUBROUTINE PLUMED_F_GCMD(key,val) -+ CHARACTER(LEN=*), INTENT(IN) :: key -+ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) -+ SUBROUTINE PLUMED_F_GFINALIZE() -+ SUBROUTINE PLUMED_F_GLOBAL(p) -+ CHARACTER(LEN=32), INTENT(OUT) :: p -+ SUBROUTINE PLUMED_F_CREATE(p) -+ CHARACTER(LEN=32), INTENT(OUT) :: p -+ SUBROUTINE PLUMED_F_CMD(p,key,val) -+ CHARACTER(LEN=32), INTENT(IN) :: p -+ CHARACTER(LEN=*), INTENT(IN) :: key -+ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) -+ SUBROUTINE PLUMED_F_FINALIZE(p) -+ CHARACTER(LEN=32), INTENT(IN) :: p -+\endverbatim -+ -+ The main routine is "cmd", which accepts two arguments: -+ key is a string containing the name of the command -+ val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed -+ is going to modify val in several cases (using a const_cast). -+ In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). -+ The set of possible keys is the real API of the plumed library, and will be expanded with time. -+ New commands will be added, but backward compatibility will be retained as long as possible. -+ -+ To pass plumed a callback function use the following syntax (not available in FORTRAN yet) -+\verbatim -+ plumed_function_holder ff; -+ ff.p=your_function; -+ plumed_cmd(plumed,"xxxx",&ff); -+\endverbatim -+ (this is passing the your_function() function to the "xxxx" command) -+*/ -+ -+#ifdef __cplusplus -+ extern "C" { -+#endif -+ -+/* Generic function pointer */ -+typedef void (*plumed_function_pointer)(void); -+ -+/** -+ \brief Holder for function pointer. -+ -+ To pass plumed a callback function use the following syntax: -+\verbatim -+ plumed_function_holder ff; -+ ff.p=your_function; -+ plumed_cmd(plumed,"xxxx",&ff); -+\endverbatim -+ (this is going to pass the your_function() function to the "xxxx" command) -+*/ -+ -+typedef struct { -+ plumed_function_pointer p; -+} plumed_function_holder; -+ -+/** -+ \brief Main plumed object -+ -+ This is an object containing a Plumed instance, which should be used in -+ the MD engine. It should first be initialized with plumed_create(), -+ then it communicates with the MD engine using plumed_cmd(). Finally, -+ before the termination, it should be deallocated with plumed_finalize(). -+ Its interface is very simple and general, and is expected -+ not to change across plumed versions. See \ref ReferencePlumedH. -+*/ -+typedef struct { -+/** -+ \private -+ \brief Void pointer holding the real PlumedMain structure -+*/ -+ void*p; -+} plumed; -+ -+/** \relates plumed -+ \brief Constructor -+ -+ \return The constructed plumed object -+*/ -+plumed plumed_create(void); -+ -+/** \relates plumed -+ \brief Tells p to execute a command -+ -+ \param p The plumed object on which command is acting -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), -+ but for some choice of key it can change the content -+*/ -+void plumed_cmd(plumed p,const char*key,const void*val); -+ -+/** \relates plumed -+ \brief Destructor -+ -+ \param p The plumed object to be deallocated -+*/ -+void plumed_finalize(plumed p); -+ -+/** \relates plumed -+ \brief Check if plumed is installed (for runtime binding) -+ -+ \return 1 if plumed is installed, to 0 otherwise -+*/ -+int plumed_installed(void); -+ -+/** \relates plumed -+ \brief Retrieves an handler to the global structure. -+*/ -+plumed plumed_global(void); -+ -+/** \relates plumed -+ \brief Check if the global interface has been initialized -+ -+ \return 1 if plumed has been initialized, 0 otherwise -+*/ -+int plumed_ginitialized(void); -+ -+/* global C interface, working on a global object */ -+ -+/** \relates plumed -+ \brief Constructor for the global interface. -+ -+ \note Equivalent to plumed_create(), but initialize a static global plumed object -+*/ -+void plumed_gcreate(void); -+ -+/** \relates plumed -+ \brief Tells to the global interface to execute a command. -+ -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), -+ but for some choice of key it can change the content -+ -+ \note Equivalent to plumed_cmd(), but skipping the plumed argument -+*/ -+void plumed_gcmd(const char* key,const void* val); -+ -+/** \relates plumed -+ \brief Destructor for the global interface. -+ -+ \note Equivalent to plumed_finalize(), but skipping the plumed argument -+*/ -+void plumed_gfinalize(void); -+ -+/* routines to convert char handler from/to plumed objects */ -+ -+/** \related plumed -+ \brief Converts a C handler to a FORTRAN handler -+ -+ \param p The C handler -+ \param c The FORTRAN handler (a char[32]) -+*/ -+void plumed_c2f(plumed p,char* c); -+ -+/** \related plumed -+ \brief Converts a FORTRAN handler to a C handler -+ \param c The FORTRAN handler (a char[32]) -+ \return The C handler -+*/ -+plumed plumed_f2c(const char* c); -+ -+#ifdef __cplusplus -+ } -+#endif -+ -+#ifdef __cplusplus -+ -+/* this is to include the NULL pointer */ -+#include -+ -+/* C++ interface is hidden in PLMD namespace (same as plumed library) */ -+namespace PLMD { -+ -+/** -+ C++ wrapper for \ref plumed. -+ -+ This class provides a C++ interface to PLUMED. -+*/ -+ -+class Plumed{ -+ plumed main; -+/** -+ keeps track if the object was created from scratch using -+ the defaults destructor (cloned=false) or if it was imported -+ from C or FORTRAN (cloned-true). In the latter case, the -+ plumed_finalize() method is not called when destructing the object, -+ since it is expected to be finalized in the C/FORTRAN code -+*/ -+ bool cloned; -+public: -+/** -+ Check if plumed is installed (for runtime binding) -+ \return true if plumed is installed, false otherwise -+*/ -+ static bool installed(); -+/** -+ Check if global-plumed has been initialized -+ \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been -+ called), false otherwise. -+*/ -+ static bool ginitialized(); -+/** -+ Initialize global-plumed -+*/ -+ static void gcreate(); -+/** -+ Send a command to global-plumed -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like gcmd("A","B"), -+ but for some choice of key it can change the content -+*/ -+ static void gcmd(const char* key,const void* val); -+/** -+ Finalize global-plumed -+*/ -+ static void gfinalize(); -+/** -+ Returns the Plumed global object -+ \return The Plumed global object -+*/ -+ static Plumed global(); -+/** -+ Constructor -+*/ -+ Plumed(); -+/** -+ Clone a Plumed object from a FORTRAN char* handler -+ \param c The FORTRAN handler (a char[32]). -+ -+ \attention The Plumed object created in this manner -+ will not finalize the corresponding plumed structure. -+ It is expected that the FORTRAN code calls plumed_c_finalize for it -+*/ -+ Plumed(const char*c); -+/** -+ Clone a Plumed object from a C plumed structure -+ \param p The C plumed structure. -+ -+ \attention The Plumed object created in this manner -+ will not finalize the corresponding plumed structure. -+ It is expected that the C code calls plumed_finalize for it -+*/ -+ Plumed(plumed p); -+private: -+/** Copy constructor is disabled (private and unimplemented) -+ The problem here is that after copying it will not be clear who is -+ going to finalize the corresponding plumed structure. -+*/ -+ Plumed(const Plumed&); -+/** Assignment operator is disabled (private and unimplemented) -+ The problem here is that after copying it will not be clear who is -+ going to finalize the corresponding plumed structure. -+*/ -+ Plumed&operator=(const Plumed&); -+public: -+/** -+ Retrieve the C plumed structure for this object -+*/ -+ operator plumed()const; -+/** -+ Retrieve a FORTRAN handler for this object -+ \param c The FORTRAN handler (a char[32]). -+*/ -+ void toFortran(char*c)const; -+/** -+ Send a command to this plumed object -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), -+ but for some choice of key it can change the content -+*/ -+ void cmd(const char*key,const void*val=NULL); -+/** -+ Destructor -+ -+ Destructor is virtual so as to allow correct inheritance from Plumed object. -+ To avoid linking problems with g++, I specify "inline" also here (in principle -+ it should be enough to specify it down in the definition of the function, but -+ for some reason that I do not understand g++ does not inline it properly in that -+ case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the -+ way it is done here seems to work properly). -+*/ -+ inline virtual ~Plumed(); -+}; -+ -+/* All methods are inlined so as to avoid the compilation of an extra c++ file */ -+ -+inline -+bool Plumed::installed(){ -+ return plumed_installed(); -+} -+ -+inline -+Plumed::Plumed(): -+ main(plumed_create()), -+ cloned(false) -+{} -+ -+inline -+Plumed::Plumed(const char*c): -+ main(plumed_f2c(c)), -+ cloned(true) -+{} -+ -+inline -+Plumed::Plumed(plumed p): -+ main(p), -+ cloned(true) -+{} -+ -+inline -+Plumed::operator plumed()const{ -+ return main; -+} -+ -+inline -+void Plumed::toFortran(char*c)const{ -+ plumed_c2f(main,c); -+} -+ -+inline -+void Plumed::cmd(const char*key,const void*val){ -+ plumed_cmd(main,key,val); -+} -+ -+inline -+Plumed::~Plumed(){ -+ if(!cloned)plumed_finalize(main); -+} -+ -+inline -+bool Plumed::ginitialized(){ -+ return plumed_ginitialized(); -+} -+ -+inline -+void Plumed::gcreate(){ -+ plumed_gcreate(); -+} -+ -+inline -+void Plumed::gcmd(const char* key,const void* val){ -+ plumed_gcmd(key,val); -+} -+ -+inline -+void Plumed::gfinalize(){ -+ plumed_gfinalize(); -+} -+ -+inline -+Plumed Plumed::global(){ -+ return plumed_global(); -+} -+ -+} -+ -+#endif -+ -+ -+#endif -diff -urN dl_class_1.9.orig/Plumed.inc dl_class_1.9/Plumed.inc ---- dl_class_1.9.orig/Plumed.inc 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.inc 2015-11-16 17:22:29.921325000 +0100 -@@ -0,0 +1,3 @@ -+# PLUMED: runtime installation -+PLUMED_LOAD= -L$(EBROOTPLUMED)/lib -lplumed -ldl -+PLUMED_DEPENDENCIES= -diff -urN dl_class_1.9.orig/srcmod/angles_module.f dl_class_1.9/srcmod/angles_module.f ---- dl_class_1.9.orig/srcmod/angles_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/angles_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,741 @@ -+ module angles_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining valence angle potentials -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c modified - p.-a.cazade oct 2007 : solvation etc. -+c modified - d. quigley 2010 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmang(:,:) -+ integer, allocatable :: listang(:,:) -+ integer, allocatable :: numang(:),keyang(:),lstang(:,:) -+ -+ save prmang,listang,numang,keyang,lstang -+ -+ contains -+ -+ subroutine alloc_ang_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining valence angle potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmang(mxtang,mxpang),stat=fail(1)) -+ allocate (numang(mxtmls),stat=fail(2)) -+ allocate (keyang(mxtang),stat=fail(3)) -+ allocate (lstang(mxtang,3),stat=fail(4)) -+ allocate (listang(mxangl,4),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1010) -+ enddo -+ -+ do i=1,mxtmls -+ numang(i)=0 -+ enddo -+ -+ end subroutine alloc_ang_arrays -+ -+ subroutine define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining bond angles -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,nangle,nsite,ntmp,i,iang,iang1 -+ integer idum,iatm1,iatm2,iatm3,isite1,isite2,isite3,ia,ja -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numang(itmols)=numang(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of bond angles', -+ x 10x,i10)")ntmp -+ write(nrite,"(/,/,1x,'bond angle details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'f-const',7x,'angle',/)") -+ endif -+ -+ iang1=numang(itmols) -+ do iang=1,iang1 -+ -+c read bond angle potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3).ne.0)then -+ -+ numang(itmols)=numang(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nangle=nangle+1 -+ -+ if(nangle.gt.mxtang)call error(idnode,50) -+ -+ if(keyword(1:4).eq.'harm')then -+ keyang(nangle)=1 -+ elseif(keyword(1:4).eq.'-hrm')then -+ keyang(nangle)=-1 -+ elseif(keyword(1:4).eq.'quar')then -+ keyang(nangle)=2 -+ elseif(keyword(1:4).eq.'-qur')then -+ keyang(nangle)=-2 -+ elseif(keyword(1:4).eq.'thrm')then -+ keyang(nangle)=3 -+ elseif(keyword(1:4).eq.'-thm')then -+ keyang(nangle)=-3 -+ elseif(keyword(1:4).eq.'shrm')then -+ keyang(nangle)=4 -+ elseif(keyword(1:4).eq.'-shm')then -+ keyang(nangle)=-4 -+ elseif(keyword(1:4).eq.'bvs1')then -+ keyang(nangle)=5 -+ elseif(keyword(1:4).eq.'-bv1')then -+ keyang(nangle)=-5 -+ elseif(keyword(1:4).eq.'bvs2')then -+ keyang(nangle)=6 -+ elseif(keyword(1:4).eq.'-bv2')then -+ keyang(nangle)=-6 -+ elseif(keyword(1:4).eq.'hcos')then -+ keyang(nangle)=7 -+ elseif(keyword(1:4).eq.'-hcs')then -+ keyang(nangle)=-7 -+ elseif(keyword(1:4).eq.'cos ')then -+ keyang(nangle)=8 -+ elseif(keyword(1:4).eq.'-cos')then -+ keyang(nangle)=-8 -+ elseif(keyword(1:4).eq.'mmsb')then -+ keyang(nangle)=9 -+ elseif(keyword(1:4).eq.'-msb')then -+ keyang(nangle)=-9 -+ elseif(keyword(1:4).eq.'stst') then -+ keyang(nangle)=10 -+ elseif(keyword(1:4).eq.'-sts') then -+ keyang(nangle)=-10 -+ elseif(keyword(1:4).eq.'stbe') then -+ keyang(nangle)=11 -+ elseif(keyword(1:4).eq.'-stb') then -+ keyang(nangle)=-11 -+ elseif(keyword(1:4).eq.'cmps') then -+ keyang(nangle)=12 -+ elseif(keyword(1:4).eq.'-cmp') then -+ keyang(nangle)=-12 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,440) -+ endif -+ -+ lstang(nangle,1)=iatm1 -+ lstang(nangle,2)=iatm2 -+ lstang(nangle,3)=iatm3 -+ prmang(nangle,1)=dblstr(record,lenrec,idum) -+ prmang(nangle,2)=dblstr(record,lenrec,idum) -+ prmang(nangle,3)=dblstr(record,lenrec,idum) -+ prmang(nangle,4)=dblstr(record,lenrec,idum) -+ prmang(nangle,5)=dblstr(record,lenrec,idum) -+ prmang(nangle,6)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,3i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstang(nangle,ia),ia=1,3), -+ x (prmang(nangle,ja),ja=1,mxpang) -+ -+c convert energies to internal units -+ -+ prmang(nangle,1)=prmang(nangle,1)*engunit -+ if(abs(keyang(nangle)).eq.2)then -+ prmang(nangle,3)=prmang(nangle,3)*engunit -+ prmang(nangle,4)=prmang(nangle,4)*engunit -+ elseif(abs(keyang(nangle)).eq.12)then -+ prmang(nangle,2)=prmang(nangle,2)*engunit -+ prmang(nangle,3)=prmang(nangle,3)*engunit -+ endif -+ -+c convert angles to radians -+ -+ if(abs(keyang(nangle)).eq.12)then -+ prmang(nangle,4)=prmang(nangle,4)*(pi/180.d0) -+ elseif(abs(keyang(nangle)).ne.10)then -+ prmang(nangle,2)=prmang(nangle,2)*(pi/180.d0) -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_angles -+ -+ subroutine angfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating bond angle energy and -+c force terms in molecular dynamics. -+c -+c replicated data - blocked version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992 -+c modified - t. forester feb 1993 -+c modified - t. forester nov 1994 : block data -+c modified - t. forester may 1995 : stress tensor -+c modified - p.-a.cazade oct 2007 : solvation etc. -+c modified - d. quigley nov 2010 : metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive,kdrive -+ integer idnode,mxnode,imcon,ntangl,fail1,fail2 -+ integer ii,iang1,iang2,i,ia,ib,ic,kk,keya -+ real(8) engang,virang,theta,fxc,fyc,fzc,rab,xab -+ real(8) yab,zab,rbc,xbc,ybc,zbc,sint,cost,pterm,vterm -+ real(8) gamma,gamsa,gamsc,rrbc,rrab,fxa,fya,fza -+ real(8) strs(6),strs_loc(6) -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) -+ if(fail1.ne.fail2)call error(idnode,1020) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntangl-mxnode+1)/mxnode.gt.msbad)call error(idnode,419) -+ -+c block indices -+ -+ iang1=(idnode*ntangl)/mxnode+1 -+ iang2=((idnode+1)*ntangl)/mxnode -+ -+c zero accumulators -+ -+ engang=0.d0 -+ virang=0.d0 -+ ang_fre=0.d0 -+ ang_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(2)=.true. -+ ang_sol(:)=0.d0 -+ if(lexcite)ang_exc(:)=0.d0 -+ -+ endif -+ -+c calculate atom separation vectors -+ -+ ii=0 -+ do i=iang1,iang2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listang(ii,2) -+ ib=listang(ii,3) -+ ic=listang(ii,4) -+ -+c components of first bond vector -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+c components of second bond vector -+ -+ xdbc(ii)=xxx(ic)-xxx(ib) -+ ydbc(ii)=yyy(ic)-yyy(ib) -+ zdbc(ii)=zzz(ic)-zzz(ib) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) -+ -+c loop over all specified angle potentials -+ -+ ii=0 -+ do i=iang1,iang2 -+ -+ ii=ii+1 -+ -+c define components of first bond vector -+ -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ rrab=1.d0/rab -+ -+ xab=xdab(ii)*rrab -+ yab=ydab(ii)*rrab -+ zab=zdab(ii)*rrab -+ -+c define components of second bond vector -+ -+ rbc=sqrt(xdbc(ii)**2+ydbc(ii)**2+zdbc(ii)**2) -+ rrbc=1.d0/rbc -+ -+ xbc=xdbc(ii)*rrbc -+ ybc=ydbc(ii)*rrbc -+ zbc=zdbc(ii)*rrbc -+ -+c index of potential function parameters -+ -+ kk=listang(ii,1) -+ -+c determine bond angle and calculate potential energy -+ -+ cost=(xab*xbc+yab*ybc+zab*zbc) -+ theta=acos(cost) -+ sint=max(1.d-8,sqrt(1.d0-cost**2)) -+ -+ keya=abs(keyang(kk)) -+ -+ if(keya.eq.1)then -+ -+c harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2 -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.2)then -+ -+c quartic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2+ -+ x 1.d0/3.d0*prmang(kk,3)*(theta-prmang(kk,2))**3+ -+ x 0.25d0*prmang(kk,4)*(theta-prmang(kk,2))**4 -+ gamma=(prmang(kk,1)*(theta-prmang(kk,2))+ -+ x prmang(kk,3)*(theta-prmang(kk,2))**2+ -+ x prmang(kk,4)*(theta-prmang(kk,2))**3)/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.3)then -+ -+c truncated harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* -+ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8) -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))* -+ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8)/sint -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,3)**8 -+ gamsa=(8.d0*pterm/prmang(kk,3)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmang(kk,3)**8)*rbc**7 -+ -+ elseif(keya.eq.4)then -+ -+c screened harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint -+ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) -+ gamsa=(pterm/prmang(kk,3)) -+ gamsc=(pterm/prmang(kk,4)) -+ -+ elseif(keya.eq.5)then -+ -+c screened vessal potential (type 1) -+ -+ pterm=(prmang(kk,1)/(8.d0*(prmang(kk,2)-pi)**2)* -+ x (((prmang(kk,2)-pi)**2-(theta-pi)**2)**2))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) -+ gamma=(prmang(kk,1)/(2.d0*(prmang(kk,2)-pi)**2)* -+ x ((prmang(kk,2)-pi)**2-(theta-pi)**2)*(theta-pi))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint -+ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) -+ gamsa=(pterm/prmang(kk,3)) -+ gamsc=(pterm/prmang(kk,4)) -+ -+ elseif(keya.eq.6)then -+ -+c truncated vessal potential (type 2) -+ -+ pterm=prmang(kk,1)*(theta**prmang(kk,3)*(theta-prmang(kk,2)) -+ x **2*(theta+prmang(kk,2)-2.d0*pi)**2-0.5d0*prmang(kk,3)*pi -+ x **(prmang(kk,3)-1.d0)*(theta-prmang(kk,2))**2*(pi-prmang(kk, -+ x 2))**3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8) -+ gamma=prmang(kk,1)*(theta**(prmang(kk,3)-1.d0)*(theta-prmang -+ x (kk,2))*(theta+prmang(kk,2)-2.d0*pi)*((prmang(kk,3)+4.d0)* -+ x theta**2-2.d0*pi*(prmang(kk,3)+2.d0)*theta+prmang(kk,3)* -+ x prmang(kk,2)*(2.d0*pi-prmang(kk,2)))-prmang(kk,3)*pi** -+ x (prmang(kk,3)-1.d0)*(theta-prmang(kk,2))*(pi-prmang(kk,2)) -+ x **3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8)/sint -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,4)**8 -+ gamsa=(8.d0*pterm/prmang(kk,4)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmang(kk,4)**8)*rbc**7 -+ -+ elseif(keya.eq.7)then -+ -+c harmonic cosine potential -+ -+ pterm=0.5d0*prmang(kk,1)*(cos(theta)-cos(prmang(kk,2)))**2 -+ gamma=-prmang(kk,1)*(cos(theta)-cos(prmang(kk,2))) -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.8)then -+ -+c ordinary cosine potential -+ -+ pterm=prmang(kk,1)*(1+cos(prmang(kk,3)*theta-prmang(kk,2))) -+ gamma=-prmang(kk,1)*prmang(kk,3)*sin(prmang(kk,3)*theta- -+ x prmang(kk,2))/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.9)then -+ -+c mm3 stretch-bend potential -+ -+ pterm=prmang(kk,1)*(theta-prmang(kk,2))* -+ x (rab-prmang(kk,3))*(rbc-prmang(kk,4)) -+ gamma=prmang(kk,1)*(rab-prmang(kk,3))*(rbc- -+ x prmang(kk,4))/sint -+ gamsa=-prmang(kk,1)*(theta-prmang(kk,2))*(rbc-prmang(kk,4)) -+ gamsc=-prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ elseif(keya.eq.10)then -+ -+c compass stretch-stretch potential -+ -+ pterm=prmang(kk,1)*(rab-prmang(kk,2))*(rbc-prmang(kk,3)) -+ gamma=0.d0 -+ gamsa=-prmang(kk,1)*(rbc-prmang(kk,3)) -+ gamsc=-prmang(kk,1)*(rab-prmang(kk,2)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ elseif(keya.eq.11)then -+ -+c compass stretch-bend potential -+ -+ pterm=prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) -+ gamma=prmang(kk,1)*(rab-prmang(kk,3))/sint -+ gamsa=-prmang(kk,1)*(theta-prmang(kk,2)) -+ gamsc=0.d0 -+ vterm=-gamsa*rab -+ -+ elseif(keya.eq.12)then -+ -+c combined compass angle potential with 3 coupling terms -+ -+ pterm=prmang(kk,1)*(rab-prmang(kk,5))*(rbc-prmang(kk,6))+ -+ x (theta-prmang(kk,4))*(prmang(kk,2)*(rab-prmang(kk,5))+ -+ x prmang(kk,3)*(rbc-prmang(kk,6))) -+ gamma=(prmang(kk,2)*(rab-prmang(kk,5))+ -+ x prmang(kk,3)*(rbc-prmang(kk,6)))/sint -+ gamsa=-prmang(kk,2)*(theta-prmang(kk,4))- -+ x prmang(kk,1)*(rbc-prmang(kk,6)) -+ gamsc=-prmang(kk,3)*(theta-prmang(kk,4))- -+ x prmang(kk,1)*(rab-prmang(kk,5)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ pterm=0.d0 -+ vterm=0.d0 -+ gamma=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listang(ii,2) -+ ib=listang(ii,3) -+ ic=listang(ii,4) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) -+ -+ if(lsolva)then -+ ang_exc(atmolt(ia))=ang_exc(atmolt(ia))+pterm -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ ang_fre=ang_fre-pterm -+ ang_vir=ang_vir-vterm -+ pterm=lambda1*pterm -+ vterm=lambda1*vterm -+ gamma=lambda1*gamma -+ gamsa=lambda1*gamsa -+ gamsc=lambda1*gamsc -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ ang_fre=ang_fre+pterm -+ ang_vir=ang_vir+vterm -+ pterm=lambda2*pterm -+ vterm=lambda2*vterm -+ gamma=lambda2*gamma -+ gamsa=lambda2*gamsa -+ gamsc=lambda2*gamsc -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c sum potential energy and virial -+ -+ engang=engang+pterm -+ virang=virang+vterm -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ ang_sol(atmolt(ia))=ang_sol(atmolt(ia))+pterm -+ endif -+ -+c calculate atomic forces -+ -+ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab -+ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab -+ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab -+ -+ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc -+ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc -+ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc -+ -+c sum atomic forces -+ -+ fxx(ia)=fxx(ia)+fxa -+ fyy(ia)=fyy(ia)+fya -+ fzz(ia)=fzz(ia)+fza -+ -+ fxx(ib)=fxx(ib)-fxa-fxc -+ fyy(ib)=fyy(ib)-fya-fyc -+ fzz(ib)=fzz(ib)-fza-fzc -+ -+ fxx(ic)=fxx(ic)+fxc -+ fyy(ic)=fyy(ic)+fyc -+ fzz(ic)=fzz(ic)+fzc -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc -+ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc -+ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc -+ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc -+ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+pterm -+ vir_loc=vir_loc+vterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fxa -+ fyy_loc(ia)=fyy_loc(ia)+fya -+ fzz_loc(ia)=fzz_loc(ia)+fza -+ -+ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc -+ fyy_loc(ib)=fyy_loc(ib)-fya-fyc -+ fzz_loc(ib)=fzz_loc(ib)-fza-fzc -+ -+ fxx_loc(ic)=fxx_loc(ic)+fxc -+ fyy_loc(ic)=fyy_loc(ic)+fyc -+ fzz_loc(ic)=fzz_loc(ic)+fzc -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc -+ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc -+ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc -+ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc -+ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,440) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c sum up contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engang -+ buffer(2)=virang -+ buffer(3)=ang_fre -+ buffer(4)=ang_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engang=buffer(1) -+ virang=buffer(2) -+ ang_fre=buffer(3) -+ ang_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(ang_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(ang_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdbc,ydbc,zdbc,stat=fail2) -+ -+ return -+ end subroutine angfrc -+ -+ end module angles_module -diff -urN dl_class_1.9.orig/srcmod/basic_comms.f dl_class_1.9/srcmod/basic_comms.f ---- dl_class_1.9.orig/srcmod/basic_comms.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/basic_comms.f 2015-11-16 17:21:51.184041995 +0100 -@@ -0,0 +1,389 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c communication harness initialisation -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_init MPI_init_ -+ -+ call MPI_init(ierr) -+ -+ return -+ end -+ -+c PLUMED -+ integer*8 function get_comms() -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining the communicator -+c this is used by plumed -+c -+c author - G. Tribello -+c -+c********************************************************************* -+ -+ get_comms=MPI_COMM_WORLD -+ end -+ -+ subroutine machine(idnode,mxnode) -+c PLUMED -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining charcteristics of -+c the computer on which the program is being run -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,mynode,numnodes -+ -+ idnode=mynode() -+ mxnode=numnodes() -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c routine to determine identity of processing node -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ -+ -+ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c calculate dimension of hypercube -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer i,n,ierr,mxnode -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) -+ n=1 -+ nodedim = -1 -+ do i=0,16 -+ -+ if(n.eq.mxnode)nodedim=i -+ n=2*n -+ -+ enddo -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c calculate number of nodes -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) -+ -+ return -+ end -+ -+ subroutine csend(tagmsg,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c Intel-like csend (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length,pe,idum -+ -+ integer ierr -+ real(8) buf(*) -+ -+CMPIU define MPI_send MPI_send_ -+ -+ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, -+ x MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine crecv(tagmsg,buf,length) -+ -+c********************************************************************* -+c -+c Intel-like crecv (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length -+ -+ integer ierr -+ integer status(MPI_STATUS_SIZE) -+ real(8) buf(*) -+ -+CMPIU define MPI_RECV MPI_RECV_ -+ -+ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, -+ x tagmsg,MPI_COMM_WORLD,status,ierr) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for MPI - hypercube assumed -+c double precision version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,ierror -+ real(8) aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global maximum subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_MAX,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dl_poly global status subroutine : gisum version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c MPI version - t. forester may 1995 -+c -+c*********************************************************************** -+ -+ -+ implicit none -+ -+ logical check -+ integer i,idum -+ -+ i = 0 -+ if(.not.check) i = 1 -+ -+ call gisum(i,1,idum) -+ -+ check = (i.eq.0) -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c barrier / synchronization routine -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ierr -+ -+ include "comms.inc" -+ -+CMPIU define MPI_BARRIER MPI_BARRIER_ -+ -+ call MPI_BARRIER(MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c exitcomms: exit from communication harness -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+CMPIU define MPI_FINALIZE MPI_FINALIZE_ -+ -+ call MPI_FINALIZE(ierr) -+ call exit(0) -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/basic_comms.f.preplumed dl_class_1.9/srcmod/basic_comms.f.preplumed ---- dl_class_1.9.orig/srcmod/basic_comms.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/basic_comms.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,373 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c communication harness initialisation -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_init MPI_init_ -+ -+ call MPI_init(ierr) -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining charcteristics of -+c the computer on which the program is being run -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,mynode,numnodes -+ -+ idnode=mynode() -+ mxnode=numnodes() -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c routine to determine identity of processing node -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ -+ -+ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c calculate dimension of hypercube -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer i,n,ierr,mxnode -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) -+ n=1 -+ nodedim = -1 -+ do i=0,16 -+ -+ if(n.eq.mxnode)nodedim=i -+ n=2*n -+ -+ enddo -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c calculate number of nodes -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) -+ -+ return -+ end -+ -+ subroutine csend(tagmsg,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c Intel-like csend (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length,pe,idum -+ -+ integer ierr -+ real(8) buf(*) -+ -+CMPIU define MPI_send MPI_send_ -+ -+ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, -+ x MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine crecv(tagmsg,buf,length) -+ -+c********************************************************************* -+c -+c Intel-like crecv (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length -+ -+ integer ierr -+ integer status(MPI_STATUS_SIZE) -+ real(8) buf(*) -+ -+CMPIU define MPI_RECV MPI_RECV_ -+ -+ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, -+ x tagmsg,MPI_COMM_WORLD,status,ierr) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for MPI - hypercube assumed -+c double precision version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,ierror -+ real(8) aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global maximum subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_MAX,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dl_poly global status subroutine : gisum version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c MPI version - t. forester may 1995 -+c -+c*********************************************************************** -+ -+ -+ implicit none -+ -+ logical check -+ integer i,idum -+ -+ i = 0 -+ if(.not.check) i = 1 -+ -+ call gisum(i,1,idum) -+ -+ check = (i.eq.0) -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c barrier / synchronization routine -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ierr -+ -+ include "comms.inc" -+ -+CMPIU define MPI_BARRIER MPI_BARRIER_ -+ -+ call MPI_BARRIER(MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c exitcomms: exit from communication harness -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+CMPIU define MPI_FINALIZE MPI_FINALIZE_ -+ -+ call MPI_FINALIZE(ierr) -+ call exit(0) -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/bonds_module.f dl_class_1.9/srcmod/bonds_module.f ---- dl_class_1.9.orig/srcmod/bonds_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/bonds_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,579 @@ -+ module bonds_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c adapted for metadynamics -+c - d. quigley 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmbnd(:,:) -+ integer, allocatable :: listbnd(:,:) -+ integer, allocatable :: numbonds(:),keybnd(:),lstbnd(:,:) -+ -+ save prmbnd,listbnd,numbonds,keybnd,lstbnd -+ -+ contains -+ -+ subroutine alloc_bnd_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmbnd(mxtbnd,mxpbnd),stat=fail(1)) -+ allocate (numbonds(mxtmls),stat=fail(2)) -+ allocate (keybnd(mxtbnd),stat=fail(3)) -+ allocate (lstbnd(mxtbnd,3),stat=fail(4)) -+ allocate (listbnd(mxbond,4),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+ do i=1,mxtmls -+ numbonds(i)=0 -+ enddo -+ -+ end subroutine alloc_bnd_arrays -+ -+ subroutine define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining bonds -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,nbonds,nsite,ntmp,ibond,ibond1 -+ integer iatm1,iatm2,isite1,isite2,idum,i,j -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numbonds(itmols)=numbonds(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of chemical bonds', -+ x 7x,i10)")ntmp -+ write(nrite,"(/,/,1x,'chemical bond details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',28x, -+ x 'parameters', /)") -+ endif -+ -+ ibond1=numbonds(itmols) -+ do ibond=1,ibond1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0)then -+ -+ numbonds(itmols)=numbonds(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(12x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nbonds=nbonds+1 -+ if(nbonds.gt.mxtbnd)call error(idnode,30) -+ -+ if(keyword(1:4).eq.'harm')then -+ keybnd(nbonds)=1 -+ elseif(keyword(1:4).eq.'-hrm')then -+ keybnd(nbonds)=-1 -+ elseif(keyword(1:4).eq.'mors')then -+ keybnd(nbonds)=2 -+ elseif(keyword(1:4).eq.'-mrs')then -+ keybnd(nbonds)=-2 -+ elseif(keyword(1:4).eq.'12-6')then -+ keybnd(nbonds)=3 -+ elseif(keyword(1:4).eq.'-126')then -+ keybnd(nbonds)=-3 -+ elseif(keyword(1:4).eq.'rhrm')then -+ keybnd(nbonds)=4 -+ elseif(keyword(1:4).eq.'-rhm')then -+ keybnd(nbonds)=-4 -+ elseif(keyword(1:4).eq.'quar')then -+ keybnd(nbonds)=5 -+ elseif(keyword(1:4).eq.'-qur')then -+ keybnd(nbonds)=-5 -+ elseif(keyword(1:4).eq.'buck')then -+ keybnd(nbonds)=6 -+ elseif(keyword(1:4).eq.'-bck')then -+ keybnd(nbonds)=-6 -+ elseif(keyword(1:4).eq.'fene')then -+ keybnd(nbonds)=7 -+ elseif(keyword(1:4).eq.'-fen')then -+ keybnd(nbonds)=-7 -+ elseif(keyword(1:4).eq.'coul')then -+ keybnd(nbonds)=8 -+ elseif(keyword(1:4).eq.'-cou')then -+ keybnd(nbonds)=-8 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,444) -+ endif -+ -+ lstbnd(nbonds,1)=iatm1 -+ lstbnd(nbonds,2)=iatm2 -+ prmbnd(nbonds,1)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,2)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,3)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,4)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,2i10,2x,1p,10e15.6)") -+ x keyword(1:4),lstbnd(nbonds,1), -+ x lstbnd(nbonds,2),(prmbnd(nbonds,j),j=1,mxpbnd) -+c -+c convert energy units to internal units -+ -+ if(abs(keybnd(nbonds)).eq.3)then -+ prmbnd(nbonds,2)=prmbnd(nbonds,2)*engunit -+ endif -+ if(abs(keybnd(nbonds)).eq.5)then -+ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit -+ prmbnd(nbonds,4)=prmbnd(nbonds,4)*engunit -+ endif -+ if(abs(keybnd(nbonds)).eq.6)then -+ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit -+ endif -+ -+ if(abs(keybnd(nbonds)).ne.8) -+ x prmbnd(nbonds,1)=prmbnd(nbonds,1)*engunit -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_bonds -+ -+ subroutine bndfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating chemical bond energy and -+c force terms in molecular dynamics. -+c -+c replicated data - blocked data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c modified - t. forester march 1993 -+c modified - t. forester march 1994 -+c modified - t. forester may 1994 -+c modified - t. forester nov 1994 -+c modified - w. smith nov 2006 -+c modified - p.-a. cazade oct 2007, solvation etc. -+c modified - d. quigley 2007, metdynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive -+ integer i,fail,ibnd1,ibnd2,idnode,mxnode,ii,ia,ib,imcon -+ integer keyb,kk,ntbond -+ real(8) strs(6),strs_loc(6) -+ real(8) rab,rrab,omega,gamma,fx,fy,fz,engbnd,virbnd,epsq -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) -+ if(fail.ne.0)call error(idnode,1040) -+ -+c flag for undefined potential -+ -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntbond-mxnode+1)/mxnode.gt.msbad)call error(idnode,418) -+ -+c block indices -+ -+ ibnd1=(idnode*ntbond)/mxnode+1 -+ ibnd2=((idnode+1)*ntbond)/mxnode -+ -+c initialise accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ bnd_fre=0.d0 -+ bnd_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(1)=.true. -+ bnd_sol(:)=0.d0 -+ if(lexcite)bnd_exc(:)=0.d0 -+ -+ endif -+ -+c calculate atom separation vectors -+ -+ ii=0 -+ do i=ibnd1,ibnd2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listbnd(ii,2) -+ ib=listbnd(ii,3) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ -+ endif -+ -+c components of bond vector -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ -+c loop over all specified chemical bond potentials -+ -+ ii=0 -+ do i=ibnd1,ibnd2 -+ -+ ii=ii+1 -+ -+c define components of bond vector -+ -+ rrab=0.d0 -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ if(rab.gt.1.d-6)rrab=1.d0/rab -+ -+c index of potential function parameters -+ -+ kk=listbnd(ii,1) -+ keyb=abs(keybnd(kk)) -+ -+c calculate scalar constant terms -+ -+ if(keyb.eq.0)then -+ -+c null interaction -+ -+ omega=0.d0 -+ gamma=0.d0 -+ -+ elseif(keyb.eq.1)then -+ -+c harmonic potential -+ -+ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2 -+ gamma=prmbnd(kk,1)*(rab-prmbnd(kk,2))*rrab -+ -+ else if(keyb.eq.2)then -+ -+c morse potential -+ -+ omega=prmbnd(kk,1)*((1.d0-exp(-prmbnd(kk,3)* -+ x (rab-prmbnd(kk,2))))**2-1.d0) -+ gamma=2.d0*prmbnd(kk,1)*prmbnd(kk,3)*(1.d0- -+ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2))))* -+ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2)))*rrab -+ -+ else if(keyb.eq.3)then -+ -+c 12-6 potential -+ -+ omega=(prmbnd(kk,1)*rrab**6-prmbnd(kk,2))*rrab**6 -+ gamma=(6.d0*prmbnd(kk,2)-12.d0*prmbnd(kk,1)*rrab**6)* -+ x rrab**8 -+ -+ elseif(keyb.eq.4)then -+ -+c restrained harmonic -+ -+ rab=rab-prmbnd(kk,2) -+ omega=0.5d0*prmbnd(kk,1)*(min(abs(rab),prmbnd(kk,3)))**2 -+ x +prmbnd(kk,1)*prmbnd(kk,3)*max(abs(rab)-prmbnd(kk,3),0.d0) -+ gamma=rrab*prmbnd(kk,1)*(sign(min(abs(rab),prmbnd(kk,3)),rab)) -+ -+ elseif(keyb.eq.5)then -+ -+c quartic potential -+ -+ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2+ -+ x 1.d0/3.d0*prmbnd(kk,3)*(rab-prmbnd(kk,2))**3+ -+ x 0.25d0*prmbnd(kk,4)*(rab-prmbnd(kk,2))**4 -+ gamma=rrab*(prmbnd(kk,1)*(rab-prmbnd(kk,2))+ -+ x prmbnd(kk,3)*(rab-prmbnd(kk,2))**2+ -+ x prmbnd(kk,4)*(rab-prmbnd(kk,2))**3) -+ -+ else if(keyb.eq.6)then -+ -+c buckingham exp-6 potential -+ -+ omega=prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))-prmbnd(kk,3)* -+ x rrab**6 -+ gamma=-rrab*prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))/prmbnd(kk,2)+ -+ x 6.d0*prmbnd(kk,3)*rrab**8 -+ -+ else if(keyb.eq.7)then -+ -+c FENE bond potential -+ -+ omega=-0.5d0*prmbnd(kk,1)*prmbnd(kk,2)**2*log(1.d0- -+ x ((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) -+ gamma=rrab*prmbnd(kk,1)*(rab-prmbnd(kk,3))/ -+ x (1.d0-((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) -+ -+ else if(keyb.eq.8)then -+ -+c coulomb bond potential -+ -+ omega=prmbnd(kk,1)*prmbnd(kk,2)*rrab*r4pie0/epsq -+ gamma=-omega*rrab*rrab -+ -+ else -+ -+c undefined potential -+ -+ omega=0.d0 -+ gamma=0.d0 -+ safe=.false. -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listbnd(ii,2) -+ ib=listbnd(ii,3) -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib).eq.0) -+ -+ if(lsolva)then -+ bnd_exc(atmolt(ia))=bnd_exc(atmolt(ia))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ bnd_fre=bnd_fre-omega -+ bnd_vir=bnd_vir-gamma*rab*rab -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ bnd_fre=bnd_fre+omega -+ bnd_vir=bnd_vir+gamma*rab*rab -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate bond energy and virial -+ -+ engbnd=engbnd+omega -+ virbnd=virbnd+gamma*rab*rab -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ bnd_sol(atmolt(ia))=bnd_sol(atmolt(ia))+omega -+ endif -+ -+c calculate forces -+ -+ fx=-gamma*xdab(ii) -+ fy=-gamma*ydab(ii) -+ fz=-gamma*zdab(ii) -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(ib)=fxx(ib)-fx -+ fyy(ib)=fyy(ib)-fy -+ fzz(ib)=fzz(ib)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdab(ii)*fx -+ strs(2)=strs(2)+xdab(ii)*fy -+ strs(3)=strs(3)+xdab(ii)*fz -+ strs(4)=strs(4)+ydab(ii)*fy -+ strs(5)=strs(5)+ydab(ii)*fz -+ strs(6)=strs(6)+zdab(ii)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc+gamma*rab*rab -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(ib)=fxx_loc(ib)-fx -+ fyy_loc(ib)=fyy_loc(ib)-fy -+ fzz_loc(ib)=fzz_loc(ib)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdab(ii)*fx -+ strs_loc(2)=strs_loc(2)+xdab(ii)*fy -+ strs_loc(3)=strs_loc(3)+xdab(ii)*fz -+ strs_loc(4)=strs_loc(4)+ydab(ii)*fy -+ strs_loc(5)=strs_loc(5)+ydab(ii)*fz -+ strs_loc(6)=strs_loc(6)+zdab(ii)*fz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,444) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engbnd -+ buffer(2)=virbnd -+ buffer(3)=bnd_fre -+ buffer(4)=bnd_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engbnd=buffer(1) -+ virbnd=buffer(2) -+ bnd_fre=buffer(3) -+ bnd_vir=buffer(4) -+ -+ if(lsolva)then -+ -+ call gdsum(bnd_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(bnd_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail) -+ -+ return -+ end subroutine bndfrc -+ -+ end module bonds_module -diff -urN dl_class_1.9.orig/srcmod/comms.inc dl_class_1.9/srcmod/comms.inc ---- dl_class_1.9.orig/srcmod/comms.inc 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/comms.inc 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,42 @@ -+c********************************************************************* -+c -+c dl_poly include file for MPI, PVM and SHMEM -+c copyright - daresbury laboratory -+c -+c********************************************************************* -+ -+CMPIU define mpipriv mpipriv_ -+ -+ include "mpif.h" -+ -+c parameters for message tags -+ -+ integer Xgcopy_tag, Merge1_tag -+ integer Dgsum_tag1, Dgsum_tag2 -+ integer Igmax_tag1, Igmax_tag2 -+ integer Igsum_tag1, Igsum_tag2 -+ integer Shmove_tag, Merge_tag -+ integer Merge4_tag, Shell_tag -+ integer Gstate_tag1, Gstate_tag2 -+ integer Passcon_tag, Msgtag -+ -+c MPI tagsizes -+ -+ parameter( -+ $ Xgcopy_tag = 105, -+ $ Dgsum_tag1 = 6001, -+ $ Dgsum_tag2 = 9001, -+ $ Igsum_tag1 = 12001, -+ $ Igsum_tag2 = 15001, -+ $ Shmove_tag = 18001, -+ $ Merge_tag = 6001, -+ $ Merge1_tag = 9001, -+ $ Merge4_tag = 12001, -+ $ Gstate_tag1 = 15001, -+ $ Gstate_tag2 = 18001, -+ $ Shell_tag = 21001, -+ $ Passcon_tag = 3001, -+ $ Igmax_tag1 = 24001, -+ $ Igmax_tag2 = 27001, -+ $ Msgtag = 30000) -+ -diff -urN dl_class_1.9.orig/srcmod/config_module.f dl_class_1.9/srcmod/config_module.f ---- dl_class_1.9.orig/srcmod/config_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/config_module.f 2015-11-16 17:18:13.402475437 +0100 -@@ -0,0 +1,103 @@ -+ module config_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation configuration data -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ character*1 cfgname(80) -+ character*1 sysname(80) -+ real(8) cell(9),rcell(9),celprp(10) -+ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) -+ -+ character*8, allocatable :: atmnam(:) -+ real(8), allocatable :: xxx(:),yyy(:),zzz(:) -+ real(8), allocatable :: vxx(:),vyy(:),vzz(:) -+ real(8), allocatable :: fxx(:),fyy(:),fzz(:) -+ real(8), allocatable :: flx(:),fly(:),flz(:) -+ real(8), allocatable :: chge(:),weight(:),rmass(:) -+ integer, allocatable :: ltype(:),lstfrz(:) -+ integer, allocatable :: neulst(:),lstneu(:) -+ integer, allocatable :: lentry(:),list(:,:) -+ integer, allocatable :: lstout(:),link(:) -+ integer, allocatable :: lct(:),lst(:) -+ -+ real(8), allocatable :: buffer(:) -+ -+c PLUMED variables -+ logical, save :: lplumed -+c PLUMED variables -+ -+ save atmnam,neulst,lstneu,cfgname,sysname -+ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz -+ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz -+ save lentry,list,lstout,link,lct,lst,celprp,rmass -+ save eta,stress,stresl,strcns,rcell -+ -+ contains -+ -+ subroutine alloc_config_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining simulation configuration arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ integer, parameter :: nnn=27 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xxx(mxatms),stat=fail(1)) -+ allocate (yyy(mxatms),stat=fail(2)) -+ allocate (zzz(mxatms),stat=fail(3)) -+ allocate (vxx(mxatms),stat=fail(4)) -+ allocate (vyy(mxatms),stat=fail(5)) -+ allocate (vzz(mxatms),stat=fail(6)) -+ allocate (fxx(mxatms),stat=fail(7)) -+ allocate (fyy(mxatms),stat=fail(8)) -+ allocate (fzz(mxatms),stat=fail(9)) -+ allocate (weight(mxatms),stat=fail(11)) -+ allocate (chge(mxatms),stat=fail(12)) -+ allocate (ltype(mxatms),stat=fail(13)) -+ allocate (lstfrz(mxatms),stat=fail(14)) -+ allocate (flx(mxatms),stat=fail(15)) -+ allocate (fly(mxatms),stat=fail(16)) -+ allocate (flz(mxatms),stat=fail(17)) -+ allocate (atmnam(mxatms),stat=fail(18)) -+ allocate (neulst(mxneut),stat=fail(19)) -+ allocate (lstneu(mxatms),stat=fail(20)) -+ allocate (lstout(mxatms),stat=fail(21)) -+ allocate (lentry(msatms),stat=fail(22)) -+ allocate (list(msatms,mxlist),stat=fail(23)) -+ allocate (link(mxatms),stat=fail(24)) -+ allocate (lct(mxcell),stat=fail(25)) -+ allocate (lst(mxcell),stat=fail(26)) -+ allocate (rmass(mxatms),stat=fail(27)) -+ allocate (buffer(mxbuff),stat=fail(10)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1000) -+ endif -+ enddo -+ -+ end subroutine alloc_config_arrays -+ -+ end module config_module -diff -urN dl_class_1.9.orig/srcmod/config_module.f.preplumed dl_class_1.9/srcmod/config_module.f.preplumed ---- dl_class_1.9.orig/srcmod/config_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/config_module.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,99 @@ -+ module config_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation configuration data -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ character*1 cfgname(80) -+ character*1 sysname(80) -+ real(8) cell(9),rcell(9),celprp(10) -+ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) -+ -+ character*8, allocatable :: atmnam(:) -+ real(8), allocatable :: xxx(:),yyy(:),zzz(:) -+ real(8), allocatable :: vxx(:),vyy(:),vzz(:) -+ real(8), allocatable :: fxx(:),fyy(:),fzz(:) -+ real(8), allocatable :: flx(:),fly(:),flz(:) -+ real(8), allocatable :: chge(:),weight(:),rmass(:) -+ integer, allocatable :: ltype(:),lstfrz(:) -+ integer, allocatable :: neulst(:),lstneu(:) -+ integer, allocatable :: lentry(:),list(:,:) -+ integer, allocatable :: lstout(:),link(:) -+ integer, allocatable :: lct(:),lst(:) -+ -+ real(8), allocatable :: buffer(:) -+ -+ save atmnam,neulst,lstneu,cfgname,sysname -+ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz -+ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz -+ save lentry,list,lstout,link,lct,lst,celprp,rmass -+ save eta,stress,stresl,strcns,rcell -+ -+ contains -+ -+ subroutine alloc_config_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining simulation configuration arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ integer, parameter :: nnn=27 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xxx(mxatms),stat=fail(1)) -+ allocate (yyy(mxatms),stat=fail(2)) -+ allocate (zzz(mxatms),stat=fail(3)) -+ allocate (vxx(mxatms),stat=fail(4)) -+ allocate (vyy(mxatms),stat=fail(5)) -+ allocate (vzz(mxatms),stat=fail(6)) -+ allocate (fxx(mxatms),stat=fail(7)) -+ allocate (fyy(mxatms),stat=fail(8)) -+ allocate (fzz(mxatms),stat=fail(9)) -+ allocate (weight(mxatms),stat=fail(11)) -+ allocate (chge(mxatms),stat=fail(12)) -+ allocate (ltype(mxatms),stat=fail(13)) -+ allocate (lstfrz(mxatms),stat=fail(14)) -+ allocate (flx(mxatms),stat=fail(15)) -+ allocate (fly(mxatms),stat=fail(16)) -+ allocate (flz(mxatms),stat=fail(17)) -+ allocate (atmnam(mxatms),stat=fail(18)) -+ allocate (neulst(mxneut),stat=fail(19)) -+ allocate (lstneu(mxatms),stat=fail(20)) -+ allocate (lstout(mxatms),stat=fail(21)) -+ allocate (lentry(msatms),stat=fail(22)) -+ allocate (list(msatms,mxlist),stat=fail(23)) -+ allocate (link(mxatms),stat=fail(24)) -+ allocate (lct(mxcell),stat=fail(25)) -+ allocate (lst(mxcell),stat=fail(26)) -+ allocate (rmass(mxatms),stat=fail(27)) -+ allocate (buffer(mxbuff),stat=fail(10)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1000) -+ endif -+ enddo -+ -+ end subroutine alloc_config_arrays -+ -+ end module config_module -diff -urN dl_class_1.9.orig/srcmod/core_shell_module.f dl_class_1.9/srcmod/core_shell_module.f ---- dl_class_1.9.orig/srcmod/core_shell_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/core_shell_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,826 @@ -+ module core_shell_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining core_shell arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use parse_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmshl(:,:) -+ integer, allocatable :: listshl(:,:) -+ integer, allocatable :: numshl(:),lstshl(:,:) -+ -+ save prmshl,listshl,numshl,lstshl -+ -+ contains -+ -+ subroutine alloc_csh_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining core_shell arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(4) -+ -+ do i=1,4 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmshl(mxtshl,2),stat=fail(1)) -+ allocate (numshl(mxtmls),stat=fail(2)) -+ allocate (lstshl(mxtshl,2),stat=fail(3)) -+ allocate (listshl(mxshl,3),stat=fail(4)) -+ -+ do i=1,4 -+ if(fail(i).gt.0)call error(idnode,1100) -+ enddo -+ -+ do i=1,mxtmls -+ numshl(i)=0 -+ enddo -+ -+ end subroutine alloc_csh_arrays -+ -+ subroutine define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining core-shell units -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ logical safe -+ integer idnode,itmols,nshels,nsite,ntmp,ishls -+ integer iatm1,iatm2,isite1,isite2,keyshl,kshl,idum -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numshl(itmols)=numshl(itmols)+ntmp -+ kshl=intstr(record,lenrec,idum) -+ if(keyshl.eq.0)then -+ keyshl=kshl -+ elseif(kshl.ne.keyshl)then -+ call error(idnode,1960) -+ endif -+ if(idnode.eq.0) then -+ -+ write(nrite, -+ x "(/,1x,'number of core-shell units',5x,i10)") -+ x ntmp -+ if(keyshl.eq.1)then -+ -+ write(nrite, -+ x "(/,/,1x,'core-shell details:',/,/,21x, -+ x 5x,'index',5x,'index',6x,'parameter')") -+ -+ else -+ -+ write(nrite, -+ x "(/,/,1x,'core-shell details:',/,/,21x, -+ x 6x,'core',5x,'shell',6x,'parameter')") -+ -+ endif -+ -+ endif -+ -+ do ishls=1,numshl(itmols) -+ -+ nshels=nshels+1 -+ if(nshels.gt.mxtshl) call error(idnode,57) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ lstshl(nshels,1)=iatm1 -+ lstshl(nshels,2)=iatm2 -+ prmshl(nshels,1)=dblstr(record,lenrec,idum) -+ prmshl(nshels,2)=dblstr(record,lenrec,idum) -+ if(idnode.eq.0) write(nrite, -+ x "(21x,2i10,2f15.4)") -+ x lstshl(nshels,1),lstshl(nshels,2), -+ x prmshl(nshels,1),prmshl(nshels,2) -+ -+c test for frozen cores or shells -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0) -+ x call error(idnode,49) -+ -+c convert energy units to internal units -+ -+ prmshl(nshels,1)=prmshl(nshels,1)*engunit -+ prmshl(nshels,2)=prmshl(nshels,2)*engunit -+ -+ enddo -+ -+ return -+ end subroutine define_core_shell -+ -+ subroutine corshl(idnode,mxnode,ntshl,shlke) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating the internal kinetic -+c energy of core-shell units in the shell polarisation model -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith july 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m -+ real(8) shlke,ppp,ccc,sss -+ -+ shlke=0.d0 -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c loop over all specified core-shell pairs -+ -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of atoms involved -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c calculate atom translational kinetic energy -+ -+ ppp=((weight(i)*vxx(i)+weight(j)*vxx(j))**2 -+ x +(weight(i)*vyy(i)+weight(j)*vyy(j))**2 -+ x +(weight(i)*vzz(i)+weight(j)*vzz(j))**2) -+ x /(weight(i)+weight(j)) -+ -+c calculate individual core and shell kinetic energies -+ -+ ccc=weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ sss=weight(j)*(vxx(j)**2+vyy(j)**2+vzz(j)**2) -+ -+c calculate core-shell internal kinetic energy -+ -+ shlke=shlke+0.5d0*(ccc+sss-ppp) -+ -+ enddo -+ -+c global average of core-shell internal kinetic energy -+ -+ if(mxnode.gt.1)then -+ buffer(1)=shlke -+ call gdsum(buffer(1),1,buffer(2)) -+ shlke=buffer(1) -+ endif -+ -+ return -+ end subroutine corshl -+ -+ subroutine put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for placing shells on top of cores in the -+c shell model at the start of a simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith feb 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, allocatable :: ltop(:) -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m,fail -+ -+c allocate ltop array -+ -+ allocate(ltop(ntshl),stat=fail) -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c zero ltop array -+ -+ do i=1,ntshl -+ ltop(i)=0 -+ enddo -+ -+c loop over all specified core-shell pairs -+ -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of atoms involved -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c set shell and core positions equal -+ -+ ltop(m)=j -+ xxx(j)=xxx(i) -+ yyy(j)=yyy(i) -+ zzz(j)=zzz(i) -+ -+ enddo -+ -+c merge data on different processors -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,ntshl,ltop,xxx,yyy,zzz,buffer) -+ -+c deallocate ltop array -+ -+ deallocate(ltop,stat=fail) -+ -+ return -+ end subroutine put_shells_on_cores -+ -+ subroutine shlfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating shell model spring energy and -+c force terms in molecular dynamics. -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith july 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect -+ integer idnode,imcon,mxnode,ntshl,ishl1,ishl2,i,j,k,m,kk -+ real(8) engshl,virshl,rij2,omega,gamma,ffx,ffy,ffz,strs -+ -+ dimension strs(6) -+ -+c check adequate workspace is available -+ -+ if(mxxdf.lt.mxshl)call error(idnode,423) -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c initialise accumulators -+ -+ engshl=0.d0 -+ virshl=0.d0 -+ shl_fre=0.d0 -+ shl_vir=0.d0 -+ -+ do i=1,6 -+ strs(i)=0.d0 -+ enddo -+ -+ if(lsolva)then -+ -+ lcomp(5)=.true. -+ shl_sol(:)=0.d0 -+ if(lexcite)shl_exc(:)=0.d0 -+ -+ endif -+ -+c calculate core-shell separation vectors -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c components of bond vector -+ -+ xdf(m)=xxx(i)-xxx(j) -+ ydf(m)=yyy(i)-yyy(j) -+ zdf(m)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,m,cell,xdf,ydf,zdf) -+ -+c loop over all specified core-shell units -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c index of potential parameters -+ -+ kk=listshl(m,1) -+ -+c core-shell separation -+ -+ rij2=xdf(m)**2+ydf(m)**2+zdf(m)**2 -+ -+c calculate scalar constant terms -+ -+ omega=(0.5d0*prmshl(kk,1)+0.25d0*prmshl(kk,2)*rij2)*rij2 -+ gamma=prmshl(kk,1)+prmshl(kk,2)*rij2 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(i)+atm_fre(i).eq.0) -+ -+ if(lsolva)then -+ shl_exc(atmolt(i))=shl_exc(atmolt(i))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ shl_fre=shl_fre-omega -+ shl_vir=shl_vir-gamma*rij2 -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ shl_fre=shl_fre+omega -+ shl_vir=shl_vir+gamma*rij2 -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate spring energy and virial -+ -+ engshl=engshl+omega -+ virshl=virshl+gamma*rij2 -+ -+ if(lsolva)then -+ shl_sol(atmolt(i))=shl_sol(atmolt(i))+omega -+ endif -+ -+c calculate spring forces -+ -+ ffx=-gamma*xdf(m) -+ ffy=-gamma*ydf(m) -+ ffz=-gamma*zdf(m) -+ -+ fxx(i)=fxx(i)+ffx -+ fyy(i)=fyy(i)+ffy -+ fzz(i)=fzz(i)+ffz -+ -+ fxx(j)=fxx(j)-ffx -+ fyy(j)=fyy(j)-ffy -+ fzz(j)=fzz(j)-ffz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*ffx -+ strs(2)=strs(2)+xdf(m)*ffy -+ strs(3)=strs(3)+xdf(m)*ffz -+ strs(4)=strs(4)+ydf(m)*ffy -+ strs(5)=strs(5)+ydf(m)*ffz -+ strs(6)=strs(6)+zdf(m)*ffz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1) then -+ -+ buffer(1)=engshl -+ buffer(2)=virshl -+ buffer(3)=shl_fre -+ buffer(4)=shl_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engshl=buffer(1) -+ virshl=buffer(2) -+ shl_fre=buffer(3) -+ shl_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(shl_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(shl_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine shlfrc -+ -+ subroutine check_shells(idnode,itmols,nshels,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to check no core-shell units are in -+c rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,itmols,nshels,ngrp,k1,ia,ib,kk -+ integer id,jj,ia1,jk,ib1 -+ -+ nshels=nshels-numshl(itmols) -+ do k1=1,numshl(itmols) -+ -+ nshels=nshels+1 -+ ia=lstshl(nshels,1) -+ ib=lstshl(nshels,2) -+ -+ ngrp=ngrp-numgrp(itmols) -+ -+ do kk=1,numgrp(itmols) -+ -+ ngrp=ngrp+1 -+ id=listyp(ngrp) -+ -+ do jj=1,numgsit(id)-1 -+ -+ ia1=lstgst(ngrp,jj) -+ if(ia1.eq.ia) then -+ -+ do jk=jj,numgsit(id) -+ -+ ib1=lstgst(ngrp,jk) -+ if(ib1.eq.ib) then -+ -+ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') -+ x 'error: sites ',ia,ib -+ call error(idnode,456) -+ -+ endif -+ -+ enddo -+ -+ elseif(ia1.eq.ib) then -+ -+ do jk=jj,numgsit(id) -+ -+ ib1=lstgst(ngrp,jk) -+ if(ib1.eq.ia) then -+ -+ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') -+ x 'error: sites ',ia,ib -+ call error(idnode,456) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ enddo -+ enddo -+ -+ return -+ end subroutine check_shells -+ -+ subroutine relax_shells -+ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep,rlxtol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for relaxing shells to zero force -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical relaxed,newjob -+ integer keyrlx,idnode,mxnode,natms,i,j,itmols,imols -+ integer iatm1,iatm2,fail,numopt,isite,ishls,jshls,lshls,ntpmls -+ integer nbuff -+ real(8) hnorm,grad0,grad1,grad2,stride,tstep,step -+ real(8) ggg,gam2,sgn,rlxtol -+ -+ dimension fail(4) -+ -+ integer, allocatable :: lstopt(:) -+ real(8), allocatable :: ggx(:),ggy(:),ggz(:) -+ real(8), allocatable :: hhx(:),hhy(:),hhz(:) -+ real(8), allocatable :: oxx(:),oyy(:),ozz(:) -+ -+ save hnorm,grad0,grad1,grad2,stride,lstopt -+ save ggx,ggy,ggz,hhx,hhy,hhz,oxx,oyy,ozz,numopt,nbuff,sgn -+ -+ data newjob/.true./,fail/0,0,0,0/ -+ -+c define initial data -+ -+ if(newjob)then -+ -+ newjob=.false. -+ allocate(lstopt(mxatms),stat=fail(1)) -+ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) -+ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(3)) -+ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1970) -+ enddo -+ -+c identify the shells -+ -+ isite=0 -+ ishls=0 -+ jshls=0 -+ do i=1,natms -+ -+ lstopt(i)=0 -+ -+ enddo -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do lshls=1,numshl(itmols) -+ -+ ishls=ishls+1 -+ lstopt(lstshl(lshls+jshls,2)+isite)=1 -+ -+ enddo -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ jshls=jshls+numshl(itmols) -+ -+ enddo -+ -+ numopt=ishls -+ -+ endif -+ -+c load coordinates of shells -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstopt(i).gt.0)then -+ -+ j=j+1 -+ oxx(j)=xxx(i) -+ oyy(j)=yyy(i) -+ ozz(j)=zzz(i) -+ ggx(j)=fxx(i) -+ ggy(j)=fyy(i) -+ ggz(j)=fzz(i) -+ -+ endif -+ -+ enddo -+ -+c step length for relaxation -+ -+ step=tstep**2 -+ -+c define atoms for this nodes -+ -+ iatm1=(idnode*numopt)/mxnode+1 -+ iatm2=((idnode+1)*numopt)/mxnode -+ -+ ggg=0.d0 -+ do i=iatm1,iatm2 -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ ggg=sqrt(ggg) -+ -+c check convergence -+ -+ if(abs(ggg)/dble(numopt).lt.rlxtol)then -+ -+ relaxed=.true. -+ return -+ -+ endif -+ -+ if(keyrlx.eq.0) then -+ -+c set original search direction -+ -+ hnorm=ggg -+ grad0=ggg -+ grad2=ggg -+ do i=iatm1,iatm2 -+ -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ keyrlx=1 -+ sgn=1.d0 -+ -+ elseif(keyrlx.eq.1)then -+ -+c line search along chosen direction -+ -+ grad1=grad2 -+ grad2=0.d0 -+ do i=iatm1,iatm2 -+ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=grad2 -+ call gdsum(buffer(1),1,buffer(2)) -+ grad2=buffer(1) -+ endif -+ grad2=sgn*grad2/hnorm -+ -+c linear extrapolation to minimum -+ -+ stride=sgn*step -+ if(grad2.lt.0.d0)then -+ -+ keyrlx=2 -+ stride=sgn*step*grad2/(grad1-grad2) -+ -+ endif -+ -+ do i=iatm1,iatm2 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ elseif(keyrlx.eq.2)then -+ -+c construct conjugate search vector -+ -+ gam2=(ggg/grad0)**2 -+ hnorm=0.d0 -+ grad0=ggg -+ grad2=0.d0 -+ do i=iatm1,iatm2 -+ -+ hhx(i)=ggx(i)+gam2*hhx(i) -+ hhy(i)=ggy(i)+gam2*hhy(i) -+ hhz(i)=ggz(i)+gam2*hhz(i) -+ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 -+ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ -+ enddo -+ if(mxnode.gt.1)then -+ -+ buffer(1)=hnorm -+ buffer(2)=grad2 -+ call gdsum(buffer(1),2,buffer(3)) -+ hnorm=buffer(1) -+ grad2=buffer(2) -+ -+ endif -+ hnorm=sqrt(hnorm) -+ grad2=grad2/hnorm -+ sgn=sign(1.d0,grad2) -+ grad2=sgn*grad2 -+ -+ do i=iatm1,iatm2 -+ -+ oxx(i)=oxx(i)+sgn*step*hhx(i) -+ oyy(i)=oyy(i)+sgn*step*hhy(i) -+ ozz(i)=ozz(i)+sgn*step*hhz(i) -+ -+ enddo -+ -+ keyrlx=1 -+ -+ endif -+ -+c merge coordinate arrays -+ -+ if(mxnode.gt.1)then -+ -+ nbuff=6*(numopt+mxnode-1)/mxnode -+ call merge(idnode,mxnode,numopt,nbuff,oxx,oyy,ozz,buffer) -+ -+ endif -+ -+c unload coordinates of shells -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstopt(i).gt.0)then -+ -+ j=j+1 -+ xxx(i)=oxx(j) -+ yyy(i)=oyy(j) -+ zzz(i)=ozz(j) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine relax_shells -+ -+ end module core_shell_module -diff -urN dl_class_1.9.orig/srcmod/coulomb_module.f dl_class_1.9/srcmod/coulomb_module.f ---- dl_class_1.9.orig/srcmod/coulomb_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/coulomb_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1542 @@ -+ module coulomb_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining coulomb terms -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ewald_module -+ use metafreeze_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ -+ implicit none -+ -+ contains -+ -+ subroutine coul0 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c 1/r potential, no truncation or damping -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester february 1993 -+c stress tensor - t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) rcsq,chgea,rsq,chgprd,rrr,coul,fcoul,fi,fx,fy,fz -+ real(8) engcpe,vircpe,rcut,epsq,strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ -+c coulomb potential and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul0 -+ -+ subroutine coul1 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a standard coulomb potential truncated at rcut -+c and shifted to zero at rcut. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith december 1992. -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c stress tensor t.forester may 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq,rcsq,chgea,rsq -+ real(8) fi,chgprd,omega,egamma,fx,fy,fz,rrr -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)*r4pie0/epsq -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+c start of primary loop for forces evaluation -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10) then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ -+c calculate potential energy and virial -+ -+ omega=chgprd*(rcut-rrr)/(rrr*rcut) -+ egamma=chgprd/(rrr*rsq) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-omega -+ cou_vir=cou_vir+egamma*rsq -+ omega=lambda1*omega -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+omega -+ cou_vir=cou_vir-egamma*rsq -+ omega=lambda2*omega -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+omega -+ vircpe=vircpe-egamma*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+omega -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-egamma*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul1 -+ -+ subroutine coul2 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a distance dependant dielectric `constant'. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester april 1993 -+c stress tensor added - t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq -+ real(8) fi,rcsq,chgea,chgprd,rsq,rrsq,coul,egamma,fx,fy,fz -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+c calculate potential energy and Virial -+ -+ rrsq=1.d0/rsq -+ coul=chgprd*rrsq -+ egamma=2.d0*coul*rrsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+2.d0*coul -+ coul=lambda1*coul -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-2.d0*coul -+ coul=lambda2*coul -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and Virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-2.d0*coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-2.d0*coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul2 -+ -+ subroutine coul3 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c reaction field potential -+c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) -+c adapted for fennell-gezelter coulombic model -+c by w.smith june 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester february 1995 -+c stress tensor - t.forester feb 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,l,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq -+ real(8) b0,rfld0,rfld1,rfld2,chgea,chgprd,rsq,coul,omega -+ real(8) fx,fy,fz,fcoul,rrr,vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 -+ real(8) strs(6),strs_loc(6) -+ dimension fi(3) -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c reaction field terms -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ -+c screened coulomb terms -+ -+ vcon=erc(mxegrd-4)+rfld2*rcut**2-rfld1 -+ fcon=rcut*fer(mxegrd-4)-rfld0*rcut -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ rdr=dble(mxegrd-4)/rcut -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+c calculate potential energy using 3-point interpolation -+ -+ vk0=erc(l) -+ vk1=erc(l+1) -+ vk2=erc(l+2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0-vcon+fcon*(rrr-rcut) -+ coul=chgprd*(omega+rfld2*rsq-rfld1) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=fer(l) -+ gk1=fer(l+1) -+ gk2=fer(l+2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr-rfld0) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic force -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul3 -+ -+ subroutine coul4 -+ X (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a force shifted coulomb potential. -+c adapted for fennell-gezelter coulombic model -+c by w.smith may 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester october 1995 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,l,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq,coul -+ real(8) strs9,chgea,chgprd,rsq,rrr,omega,fcoul,fx,fy,fz -+ real(8) vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c screened coulomb terms -+ -+ vcon=erc(mxegrd-4) -+ fcon=rcut*fer(mxegrd-4) -+ rdr=dble(mxegrd-4)/rcut -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)*r4pie0/epsq -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+c start of primary loop for forces evaluation -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+c calculate potential energy using 3-point interpolation -+ -+ vk0=erc(l) -+ vk1=erc(l+1) -+ vk2=erc(l+2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ coul=chgprd*(omega-vcon+fcon*(rrr-rcut)) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=fer(l) -+ gk1=fer(l+1) -+ gk2=fer(l+2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate the coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul4 -+ -+ subroutine coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcpe,vircpe) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic potential and forces -+c for the all-pairs algorithm beyond the range of the normal cutoff -+c i.e. the 'tertiary' forces. frozen atom option included -+c -+c to be used with multiple_nsq -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w.smith august 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip -+ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 -+ integer npm2,m,ii,j,idum,kkk -+ real(8) engcpe,epsq,rcut,vircpe,rsq,rrr,chgprd,fcoul,coul,rct2 -+ -+ lskip=(lfree.or.lghost) -+ -+c zero energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ flx(i)=0.d0 -+ fly(i)=0.d0 -+ flz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation accumulators -+ -+ if(lsolva)then -+ -+ cou_sol_lng(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc_lng(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c set control variables -+ -+ last=natms -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius -+ -+ rct2=rcut**2 -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ if(lskip)then -+ if(atm_fre(i)*atm_fre(j).eq.2)cycle -+ endif -+ -+c calculate interatomic displacements -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c calculate coulomb terms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ if(lskip)then -+ if(atm_fre(i)*atm_fre(j).eq.2)cycle -+ endif -+ -+ ii=ii+1 -+ if(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then -+ -+c reject frozen atoms and calculate interatomic distance -+ -+ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.ge.rct2)then -+ -+ chgprd=chge(i)*chge(j)*r4pie0/epsq -+ rrr=sqrt(rsq) -+ -+c calculate potential energy and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(i),atmolt(j)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(i)+atm_fre(j).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc_lng(kkk)=cou_exc_lng(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol_lng(kkk)=cou_sol_lng(kkk)+coul -+ -+c calculate forces -+ -+ flx(i)=flx(i)+fcoul*xdf(ii) -+ fly(i)=fly(i)+fcoul*ydf(ii) -+ flz(i)=flz(i)+fcoul*zdf(ii) -+ -+ flx(j)=flx(j)-fcoul*xdf(ii) -+ fly(j)=fly(j)-fcoul*ydf(ii) -+ flz(j)=flz(j)-fcoul*zdf(ii) -+ -+c stress tensor -+ -+ stresl(1)=stresl(1)+xdf(ii)*fcoul*xdf(ii) -+ stresl(2)=stresl(2)+xdf(ii)*fcoul*ydf(ii) -+ stresl(3)=stresl(3)+xdf(ii)*fcoul*zdf(ii) -+ stresl(5)=stresl(5)+ydf(ii)*fcoul*ydf(ii) -+ stresl(6)=stresl(6)+ydf(ii)*fcoul*zdf(ii) -+ stresl(9)=stresl(9)+zdf(ii)*fcoul*zdf(ii) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c complete stress tensor -+ -+ stresl(4)=stresl(2) -+ stresl(7)=stresl(3) -+ stresl(8)=stresl(6) -+ -+ return -+ end subroutine coul_nsq -+ -+ end module coulomb_module -diff -urN dl_class_1.9.orig/srcmod/define_system_module.f dl_class_1.9/srcmod/define_system_module.f ---- dl_class_1.9.orig/srcmod/define_system_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/define_system_module.f 2015-11-16 17:18:13.422475594 +0100 -@@ -0,0 +1,6004 @@ -+ module define_system_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007, solvation, free energy -+c and excitation -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use dihedral_module -+ use ensemble_tools_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use inversion_module -+ use metafreeze_module -+ use metal_module -+ use parse_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use vdw_module -+ -+ contains -+ -+ subroutine simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the simulation control -+c parameters -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992. -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c modified -+c author - t.forester may 1993 -+c amended - t.forester sept 1994 - dl_poly_1.1 -+c amended - t.forester nov 1994 - macro version -+c amended - w.smith dec 1994 - t3d adaptation -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 hms -+ character*1 directive(lenrec) -+ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc -+ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe -+ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill -+ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau -+ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo -+ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn -+ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit -+ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack -+ integer idum,imcon,keyver,keytol,nblock,blkout,numgau -+ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol -+ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units -+ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin -+ real(8) prntim -+ -+CSGIC real(8) dummy -+CCRAY real(8) dummy -+CFFTWc FFTW instruction codes -+CFFTW -+CFFTW integer FFTW_FORWARD,FFTW_BACKWARD -+CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) -+CFFTW -+CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL -+CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) -+CFFTW -+CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE -+CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) -+CFFTW -+CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM -+CFFTW parameter (FFTW_OUT_OF_PLACE=0) -+CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) -+CFFTW -+CFFTW integer FFTW_THREADSAFE -+CFFTW parameter (FFTW_THREADSAFE=128) -+CFFTW -+ -+c intitialize system variables: temperature,pressure,ensemble key -+c force key, cutoff, primary cutoff, verlet shell width, relative -+c dielectric constant,timestep,temperature scaling flag, -+c temp scaling interval -+ -+ mode=0 -+ nhko=0 -+ nlatt=0 -+ nsteql=0 -+ nstrun=0 -+ minstp=0 -+ keybpd=0 -+ keyres=0 -+ keyens=0 -+ keyver=0 -+ taut=0.d0 -+ nstbts=0 -+ nstbgr=0 -+ nsbzdn=0 -+ nstbpo=100 -+ nstack=mxstak -+ intsta=0 -+ nstraj=0 -+ istraj=1 -+ keytrj=0 -+ numgau=1 -+ alpha=0.d0 -+ kmax1=0 -+ kmax2=0 -+ kmax3=0 -+ nospl=min(8,mxspl) -+ isolva=1 -+ nsolva=0 -+ niswitch=0 -+ nswitch=0 -+ nofic=1000 -+ -+ fmax=1000.d0 -+ keyfce=0 -+ multt=1 -+ keytol=0 -+ tstep=0.d0 -+ temp=0.d0 -+ press=0.d0 -+ rcut=0.d0 -+ rprim=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ epsq=1.d0 -+ rlxtol=1.d0 -+ opttol=1.d0 -+ tolnce=1.d-8 -+ quattol=1.d-8 -+ timjob=0.d0 -+ timcls=0.d0 -+ delrdf=0.d0 -+ delzdn=0.d0 -+ zlen=0.d0 -+ ehit=0.d0 -+ xhit=0.d0 -+ yhit=0.d0 -+ zhit=0.d0 -+ vmin=0.d0 -+ ebias=0.d0 -+ catchrad=0.d0 -+ pfree=0.d0 -+ -+ lhit=.false. -+ lbpd=.false. -+ ltad=.false. -+ lneb=.false. -+ loop=.true. -+ lnfic=.false. -+ lpsoc=.false. -+ lzero=.false. -+ ltscal=.false. -+ lewald=.false. -+ lspme=.false. -+ lhke=.false. -+ lgofr=.false. -+ lpgr=.false. -+ lzeql=.true. -+ loptim=.false. -+ lminim=.false. -+ lminopt=.false. -+ ltraj=.false. -+ lfcap=.false. -+ ltemp=.false. -+ lstep=.false. -+ lcut=.false. -+ ldelr=.false. -+ lprim=.false. -+ lforc=.false. -+ lens=.false. -+ lvdw=.false. -+ lrvdw=.false. -+ lpres=.false. -+ kill=.false. -+ lnsq=.false. -+ lzden=.false. -+ nolink=.false. -+ newgau=.false. -+ prechk=.false. -+ tadall=.false. -+ lsolva=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lexcite=.false. -+ lswitch=.false. -+ lghost=.false. -+ nebgo=.true. -+ seek='all ' -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open(nread,file='CONTROL',status='old') -+ -+ -+c PlUMED defaults -+ lplumed=.false. -+c PLUMED defaults -+c read job title -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+ call copystring(record,sysname,80) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, -+ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") -+ x sysname -+ -+ endif -+ -+c read and process directives from CONTROL file -+ -+ do while(loop) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+c convert to lowercase and strip out leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('redirect',directive,idum))then -+ -+c ignore this option in this context -+ -+c PLUMED modifications -+ elseif(findstring('plumed',directive,idum))then -+ if(findstring('on',directive,idum)) lplumed=.true. -+ if(findstring('off',directive,idum)) lplumed=.false. -+c PLUMED modifications -+ cycle -+ -+ elseif(findstring('steps',directive,idum))then -+ -+c number of timesteps -+ -+ nstrun=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun -+ -+ elseif(findstring('integ',directive,idum))then -+ -+c choice of integration algorithm -+ -+ if(findstring('leapfrog',directive,idum))then -+ -+ keyver=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'leapfrog verlet integration selected')") -+ -+ elseif(findstring('velocity',directive,idum))then -+ -+ keyver=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'velocity verlet integration selected')") -+ -+ endif -+ -+ elseif(findstring('no fic',directive,idum))then -+ -+c cancel possible "flying ice cube" in Berendsen thermostats -+ -+ lnfic=.true. -+ nofic=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('shells',directive,idum).and. -+ x findstring('on',directive,idum).and. -+ x findstring('cores',directive,idum))then -+ -+c put shells on cores at start - shell model only (else null) -+ -+ lpsoc=.true. -+ -+ elseif(findstring('densvar',directive,idum))then -+ -+c specify allowed density variation -+ -+ densvar=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") -+ x densvar -+ -+ elseif(findstring('no link',directive,idum))then -+ -+c switch off link cell option -+ -+ nolink=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'link cells option deactivated')") -+ -+ elseif(findstring('equil',directive,idum))then -+ -+c number of equilibration timesteps -+ -+ nsteql=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration period ',3x,i10)")nsteql -+ -+ elseif(findstring('restart',directive,idum))then -+ -+c restart control -+ -+ if(findstring('noscale',directive,idum))then -+ -+ keyres=3 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'noscale restart requested')") -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ keyres=2 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'scaled restart requested')") -+ -+ else -+ -+ keyres=1 -+ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") -+ -+ endif -+ -+ elseif(findstring('ensemble',directive,idum))then -+ -+c ensemble selection -+ -+ call ensemble_selection(directive,lens,kill,idnode,keyens, -+ x mode,taut,taup) -+ -+ elseif(findstring('regauss',directive,idum))then -+ -+c re-initialise velocities option (regaussing) -+ -+ newgau=.true. -+ numgau=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'regaussing option activated', -+ x /,1x,'regaussing interval set to ',3x,i10)") -+ x numgau -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ nstbts=intstr(directive,lenrec,idum) -+ if(nstbts.gt.0)then -+ ltscal=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'temperature scaling on' -+ x /,1x,'temperature scaling interval',3x,i10)") -+ x nstbts -+ -+ endif -+ -+ elseif(findstring('rdf',directive,idum))then -+ -+ if(findstring('print',directive,idum))then -+ -+ lpgr=.true. -+ lpgr=(lgofr.and.lpgr) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'g(r) printing option on ')") -+ -+ else -+ -+ lgofr=.true. -+ nstbgr=intstr(directive,lenrec,idum) -+ delrdf=dblstr(directive,lenrec,idum) -+ if(nstbgr.eq.0)nstbgr=10 -+ if(delrdf.lt.1.d-8)delrdf=0.05d0 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'radial distribution functions on ', -+ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr -+ write(nrite, -+ x "(1x,'g(r) bin width ',3x,1p,e12.4)") -+ x delrdf -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('zden',directive,idum))then -+ -+ lzden=.true. -+ nsbzdn=intstr(directive,lenrec,idum) -+ delzdn=dblstr(directive,lenrec,idum) -+ zlen=dblstr(directive,lenrec,idum) -+ if(nsbzdn.eq.0)nsbzdn=10 -+ if(delzdn.lt.1.d-8)then -+ zlen=0.1d0*dble(mxzdn) -+ delzdn=0.1d0 -+ elseif(zlen.lt.1.d-8)then -+ zlen=delzdn*dble(mxzdn) -+ endif -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'Z density profile requested', -+ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn -+ write(nrite, -+ x "(1x,'zdensity bin width ',3x,1p,e12.4)") -+ x delzdn -+ write(nrite, -+ x "(1x,'zdensity range ',3x,1p,e12.4)") -+ x zlen -+ -+ endif -+ -+ elseif(findstring('collect',directive,idum))then -+ -+ lzeql=.false. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration included in overall averages')") -+ -+ elseif(findstring('neb',directive,idum))then -+ -+c activate nudged elastic band option -+ -+ call neb_option(directive,lneb,lminopt,idnode, -+ x numneb,keytol,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('impact',directive,idum))then -+ -+c activate the impact option -+ -+ if(lhit)call error(idnode,516) -+ lhit=.true. -+ khit=intstr(directive,lenrec,idum) -+ nhit=intstr(directive,lenrec,idum) -+ ehit=dblstr(directive,lenrec,idum) -+ xhit=dblstr(directive,lenrec,idum) -+ yhit=dblstr(directive,lenrec,idum) -+ zhit=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'impact option selected')") -+ write(nrite,"( -+ x /,1x,'identity of impact atom ',i10, -+ x /,1x,'time step of impact ',i10, -+ x /,1x,'impact recoil energy (keV) ',1p,e12.4, -+ x /,1x,'impact direction (x component) ',1p,e12.4, -+ x /,1x,'impact direction (y component) ',1p,e12.4, -+ x /,1x,'impact direction (z component) ',1p,e12.4)") -+ x khit,nhit,ehit,xhit,yhit,zhit -+ -+ endif -+ -+c convert impact energy from keV to internal units -+ -+ ehit=ehit*9648530.821d0 -+ -+ elseif(findstring('bpd',directive,idum))then -+ -+c activate the BPD option -+ -+ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, -+ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, -+ x catchrad,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('tad',directive,idum))then -+ -+c activate temperature accelerated dynamics option -+ -+ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, -+ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, -+ x deltad,opttol,hyp_units) -+ -+ elseif(findstring('minim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ minstp=intstr(directive,lenrec,idum) -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ lminim=.true. -+ loptim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'minimisation programme requested')") -+ write(nrite, -+ x "(1x,'structure minimisation interval ', -+ x 3x,i10)")minstp -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'structure minimisation tolerance', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('optim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ loptim=.true. -+ lminim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'structure optimisation requested')") -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'tolerance for structure optimisation ', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('zero',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ temp=1.d0 -+ lzero=.true. -+ loptim=.false. -+ lminim=.false. -+ ltemp=.true. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'zero K optimisation requested')") -+ write(nrite, -+ x "(' temperature reset to',1p,e12.4)")1.d0 -+ -+ endif -+ -+ else if(findstring('solva',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ else if(findstring('decomp',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ elseif(findstring('metafreeze',directive,idum).or. -+ x findstring('metadyn',directive,idum))then -+ -+c activate metadynamics option - d. quigley -+ -+ call metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+ else if(findstring('free',directive,idum))then -+ -+ call free_energy_option(directive,lfree,lfrmas,idnode) -+ -+ else if(findstring('excite',directive,idum))then -+ -+ call excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+ else if(findstring('switch',directive,idum))then -+ -+ call switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+ elseif(findstring('print',directive,idum))then -+ -+ nstbpo=intstr(directive,lenrec,idum) -+ nstbpo=max(nstbpo,1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data printing interval ',3x,i10)")nstbpo -+ -+ elseif(findstring('stack',directive,idum))then -+ -+ nstack=intstr(directive,lenrec,idum) -+ -+c reset stack limit if too large -+ -+ nstack=min(nstack,mxstak) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data stacking interval ',3x,i10)")nstack -+ -+ elseif(findstring('stats',directive,idum))then -+ -+ intsta=intstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'statistics file interval ',3x,i10)")intsta -+ -+ elseif(findstring('traj',directive,idum))then -+ -+ ltraj=.true. -+ nstraj=intstr(directive,lenrec,idum) -+ istraj=max(intstr(directive,lenrec,idum),1) -+ keytrj=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'trajectory file option on ', -+ x /,1x,'trajectory file start ',3x,i10, -+ x /,1x,'trajectory file interval ',3x,i10 -+ x /,1x,'trajectory file info key ',3x,i10)") -+ x nstraj,istraj,keytrj -+ -+ elseif(findstring('ewald',directive,idum).or. -+ x findstring('spme',directive,idum).or. -+ x findstring('hke',directive,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ call ewald_selection(directive,lhke,lspme,lewald,lcut, -+ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, -+ x kmax3,alpha,rcut) -+ -+ elseif(findstring('distan',directive,idum))then -+ -+ keyfce=4 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('coul',directive,idum))then -+ -+ keyfce=6 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Coulombic potential')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('shift',directive,idum))then -+ -+ keyfce=8 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('reaction',directive,idum))then -+ -+ keyfce=10 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : reaction field')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('cap',directive,idum))then -+ -+ lfcap=.true. -+ fm=dblstr(directive,lenrec,idum) -+ if(fm.gt.0.d0)fmax=fm -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax -+ -+ elseif(findstring('no vdw',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'short-range potential terms off')") -+ lvdw=.true. -+ -+ elseif(findstring('no elec',directive,idum))then -+ -+ keyfce=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'electrostatic potential terms off')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('mult',directive,idum))then -+ -+ multt=max(intstr(directive,lenrec,idum),1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'multiple timestep interval ',3x,i10)")multt -+ -+ elseif(findstring('timestep',directive,idum))then -+ -+ lstep=.true. -+ tstep=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep -+ -+ elseif(findstring('temp',directive,idum))then -+ -+ ltemp=.true. -+ temp=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp -+ -+ elseif(findstring('pres',directive,idum))then -+ -+ press=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press -+ -+c convert from katm to internal units of pressure -+ -+ press=press/prsunt -+ lpres=.true. -+ -+ elseif(findstring('prim',directive,idum))then -+ -+c primary cutoff -+ -+ lprim=.true. -+ rprim=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim -+ -+ elseif(findstring('rvdw',directive,idum))then -+ -+c cutoff for short range potentials -+ -+ rvdw=dblstr(directive,lenrec,idum) -+ lrvdw=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw -+ -+ elseif(findstring('delr',directive,idum))then -+ -+c Verlet shell width -+ -+ ldelr=.true. -+ delr=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr -+ -+ elseif(findstring('cut',directive,idum))then -+ -+c cutoff -+ -+ lcut=.true. -+ rcut=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut -+ -+ elseif(findstring('eps',directive,idum))then -+ -+c relative dielectric constant -+ -+ epsq=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq -+ -+ elseif(findstring('rlxtol',directive,idum))then -+ -+c force tolerance for shell relaxation -+ -+ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol -+ -+ elseif(findstring('shake',directive,idum))then -+ -+c tolerance for shake -+ -+ tolnce=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce -+ -+ elseif(findstring('quaternion',directive,idum))then -+ -+c tolerance for quaternion integration -+ -+ quattol=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol -+ -+ elseif(findstring('job time',directive,idum))then -+ -+c time for simulation (in seconds/minutes/hours/days or indefinite) -+ -+ if(findstring('indef',directive,idum))then -+ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 -+ else -+ timjob=dblstr(directive,lenrec,idum) -+ if(findstring('m',directive,idum))then -+ timjob=6.0d1*timjob -+ elseif(findstring('h',directive,idum))then -+ timjob=3.6d3*timjob -+ elseif(findstring('d',directive,idum))then -+ timjob=8.64d4*timjob -+ endif -+ endif -+ -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") -+ x hms,prntim -+ -+ elseif(findstring('close time',directive,idum))then -+ -+c time for winding up a job (in seconds) -+ -+ timcls=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls -+ -+ elseif(findstring('all pairs',directive,idum))then -+ -+c full minimum image - N^2 interactions each timestep -+ -+ lnsq=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'All-pairs requested for electrostatics')") -+ -+ elseif(findstring('nospl',directive,idum))then -+ -+c set ewald_spme interpolation order -+ -+ nospl=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('finish',directive,idum))then -+ -+c safe termination of reading CONTROL file -+ -+ loop=.false. -+ -+ else -+ -+c unrecognised directive in control file -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ enddo -+ -+c check on steps before temperature scaling -+ -+ if(nstbts.eq.0)nstbts=nstrun+1 -+ -+c conduct consistency checks on directives -+ -+ if(lminim)then -+ -+c ensure final configuration follows minimisation -+ -+ if(minstp.eq.0)minstp=nstrun -+ nstrun=minstp*(nstrun/minstp) -+ -+ endif -+ -+c check force activation options -+ -+ if(.not.lforc)then -+ -+c check if any forces are in operation -+ -+ if(.not.lvdw)then -+ -+ kill=.true. -+ call error(idnode,-383) -+ -+ endif -+ -+ else -+ -+c turn on short range forces -+ -+ if(lvdw)then -+ -+ if(keyfce.eq.0)then -+ -+ lcut=.true. -+ ldelr=.true. -+ -+ endif -+ -+ else -+ -+ keyfce=keyfce+1 -+ -+ endif -+ -+ endif -+ -+c if tad selected use only leap frog -+ -+ if(ltad.and.keyver.eq.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to leapfrog for TAD dynamics')") -+ keyver=0 -+ -+ endif -+ -+c error checking -+ -+ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then -+ -+ kill=.true. -+ call error(idnode,-2360) -+ -+ endif -+ -+ if(lsolva.or.lfree.or.lexcite.or.lswitch)then -+ -+ if(lspme)then -+ -+ kill=.true. -+ call error(idnode,-601) -+ -+ endif -+ -+ if(lhke)then -+ -+ kill=.true. -+ call error(idnode,-602) -+ -+ endif -+ -+ endif -+ -+ if(lghost.and.nstbgr.ne.isolva)then -+ -+ call warning(idnode,130,dble(isolva),0.d0,0.d0) -+ nstbgr=isolva -+ -+ endif -+ if(lfree.and.lgofr)then -+ -+ call warning(idnode,140,0.d0,0.d0,0.d0) -+ lgofr=.false. -+ lpgr=.false. -+ -+ endif -+ if(loptim)then -+ -+ temp=0.d0 -+ -+ elseif(.not.ltemp)then -+ -+ kill=.true. -+ call error(idnode,-380) -+ -+ endif -+ -+ if(.not.lstep)then -+ -+ kill=.true. -+ call error(idnode,-381) -+ -+ endif -+ -+ if(.not.lcut)then -+ -+ kill=.true. -+ call error(idnode,-382) -+ -+ endif -+ -+c check if van der Waals cutoff set -+ -+ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then -+ -+ if(rcut.gt.0.d0)then -+ -+ rvdw=rcut -+ -+ else -+ -+ kill=.true. -+ call error(idnode,-402) -+ -+ endif -+ -+ endif -+ -+ if(.not.ldelr)then -+ -+ kill=.true. -+ call error(idnode,-384) -+ -+ endif -+ -+ if(multt.gt.1)then -+ -+ if(.not.lprim)then -+ -+ kill=.true. -+ call error(idnode,-385) -+ -+ elseif(rprim.gt.rcut)then -+ -+ kill=.true. -+ call error(idnode,-386) -+ -+ endif -+ -+ endif -+ -+c check settings in nvt ensemble -+ -+ if(keyens.ge.2.and.keyens.le.3)then -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ -+ endif -+ -+c check settings in npt ensemble -+ -+ if(keyens.ge.4.and.keyens.le.7)then -+ -+ if(.not.lpres)then -+ -+ kill=.true. -+ call error(idnode,-387) -+ -+ endif -+ -+c check barostat and thermostat rates non zero -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ if(taup.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-466) -+ -+ endif -+ -+ endif -+ -+c check multiple timestep cutoffs are sensible -+ -+ if(multt.gt.1)then -+ if(rcut-rprim.lt.delr)then -+ -+ kill=.true. -+ call error(idnode,-398) -+ -+ endif -+ endif -+ -+c check rcut > rvdw (for verlet list constructor) -+ -+ if(rcut.lt.rvdw)then -+ -+ kill=.true. -+ call error(idnode,-400) -+ -+ endif -+ -+c check spme is not being used with incorrect pbc -+ -+ if(lspme)then -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ kill=.true. -+ call error(idnode,-513) -+ -+ endif -+ -+ endif -+ -+c check on all-pairs calculation request -+ -+ if(lnsq)then -+ -+ if(multt.eq.1)then -+ -+ kill=.true. -+ call error(idnode,-422) -+ -+ endif -+ -+ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then -+ -+ kill=.true. -+ call error(idnode,-424) -+ -+ endif -+ -+ endif -+ -+c cancel rdf option if no vdw or coulombic forces -+ -+ if(lgofr.and.keyfce.eq.0)then -+ -+ lgofr=.false. -+ call warning(idnode,120,0.d0,0.d0,0.d0) -+ -+ endif -+ -+ if(kill)call abort_control_read(2,idnode,nread) -+ -+c close CONTROL file -+ -+ if(idnode.eq.0)close(nread) -+ -+ return -+ end subroutine simdef -+ -+ subroutine sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the molecular specifications -+c of the system to be simulated -+c version for rigid unit data and neutral groups -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992. -+c amended - w.smith march 1994 -+c amended - t.forester april 1994 -+c amended - w.smith dec 1994 - getrec etc -+c amended - a.smondyrev may 2000 - keydih=5 for -+c ryckaert-bellemans potential in dihedrals -+c amended - a.smondyrev may 2000 - keydih=6 for -+c fluorinated ryckaert-bellemans potential in dihedrals -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf -+ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost -+ -+ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls -+ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite -+ integer nsite,nconst,nangle,ndihed,ninver,nbonds -+ integer nteth,nspmf,itmols,i,idum,keyver -+ integer ntpter,keyshl,iatm,natmsr,ntghost -+ -+ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb -+ real(8) sumchg -+ -+ data loop1/.true./,loop2/.true./ -+ -+c initialise system counters: atomic site index, number of -+c constraints, bond angles, dihedrals, inversions, chemical bonds, -+c unique atom types, total number of atoms, -+c total number of rigid groups, number of tethered atoms, -+c number of three body potentials -+ -+ nsite=0 -+ nconst=0 -+ nangle=0 -+ ndihed=0 -+ ninver=0 -+ nbonds=0 -+ ntpatm=0 -+ natms=0 -+ ngrp=0 -+ nteth=0 -+ ntptbp=0 -+ ntpter=0 -+ ntpmet=0 -+ ntpvdw=0 -+ ntpfbp=0 -+ nshels=0 -+ nspmf=0 -+ keyfld=0 -+ keyshl=0 -+ ntghost=0 -+ natmsr=0 -+ ntcons_ghost=0 -+ -+ lunits=.false. -+ lmols=.false. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ lshl=.false. -+ lpmf=.false. -+ engunit=1.d0 -+ -+ numbonds(:)=0 -+ numpmf(:)=0 -+ numcon(:)=0 -+ numdih(:)=0 -+ numinv(:)=0 -+ numgrp(:)=0 -+ numsit(:)=0 -+ numteth(:)=0 -+ numshl(:)=0 -+ npmf(:)=0 -+ indpmf(:)=0 -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD',status='old') -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c convert to lowercase and remove leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('units',record,idum))then -+ -+c identify energy unit for input/output -+ -+ lunits=.true. -+ call define_units(idnode,engunit) -+ -+c neutral group control option -+ -+ elseif(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ if(idnode.eq.0) -+ x write(nrite,"(/,' neutral group implementation in use')") -+ -+c can't have neutral groups with all-pairs -+ -+ if(lnsq)call error(idnode,426) -+ -+c specify molecular species -+ -+ elseif(findstring('molecu',record,idum))then -+ -+c number of molecular types -+ -+ if(lmols)call error(idnode,11) -+ lmols=.true. -+ ntpmls=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") -+ x ntpmls -+ -+ if(ntpmls.gt.mxtmls)call error(idnode,10) -+ -+c initialise total system charge -+ -+ sumchg=0.d0 -+ -+c read in molecular characteristics -+ -+ do itmols=1,ntpmls -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'molecular species type',9x,i10)") -+ x itmols -+ -+c name of molecular species -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call copystring(record,molnam(1,itmols),40) -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") -+ x (molnam(i,itmols),i=1,40) -+ -+c stop processing if energy unit has not been specified -+ -+ if(.not.lunits)call error(idnode,6) -+ -+c read molecular data -+ -+ loop2=.true. -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'number of molecules ', -+ x 10x,i10)")nummols(itmols) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+c read in atomic details -+ -+ call define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read core - shell spring parameters -+ -+ elseif(findstring('shell',record,idum))then -+ -+ lshl=.true. -+ call define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl, -+ x engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read chemical bond force constant and bondlength -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ call define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read bond atom indices and constraint bondlength -+ -+ elseif(findstring('constr',record,idum))then -+ -+ call define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read pmf bond atom indices, weights and constraint bondlength -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ if(lpmf)call error(idnode,484) -+ lpmf=.true. -+ call define_pmf(safe,idnode,itmols,nspmf) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular angular potential parameters -+ -+ elseif(findstring('angles',record,idum))then -+ -+ call define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular dihedral potential parameters -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ call define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular inversion potential parameters -+ -+ elseif(findstring('invers',record,idum))then -+ -+ call define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read rigid body data -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ call define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read tethered atom indices and tethering parameters -+ -+ elseif(findstring('teth',record,idum))then -+ -+ call define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c finish of data for one molecular type -+ -+ elseif(findstring('finish',record,idum))then -+ -+c running total of number of atoms in system -+ -+ natms=natms+nummols(itmols)*numsit(itmols) -+ if(natms.gt.mxatms)call error(idnode,75) -+ -+c check core-shell units are not both in same rigid body unit -+ -+ call check_shells(idnode,itmols,nshels,ngrp) -+ -+ loop2=.false. -+ -+ else -+ -+c error exit for unidentified directive in molecular data -+ -+ if(idnode.eq.0)write(nrite,'(12x,a)')record -+ call error(idnode,12) -+ -+ endif -+ -+ enddo -+ -+c construction of atmolt table for solvation calculation -+ -+ if(lsolva)then -+ -+ do iatm=natmsr+1,natms -+ atmolt(iatm)=itmols -+ enddo -+ natmsr=natms -+ -+ endif -+ -+ enddo -+ -+c construction of atm_fre table for free energy or excitation -+ -+ if(lfree.or.lexcite.or.lswitch)then -+ -+ atm_fre(:)=0 -+ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then -+ -+ do iatm=ind_fre(1),ind_fre(2) -+ atm_fre(iatm)=1 -+ enddo -+ -+ endif -+ -+ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then -+ -+ do iatm=ind_fre(3),ind_fre(4) -+ -+ atm_fre(iatm)=2 -+ if(lghost)ntghost=ntghost+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c calculate system charge -+ -+ call check_syschg(idnode,ntpmls,sumchg) -+ -+c read in the nonbonded potential energy parameters -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ call define_van_der_waals -+ x (safe,ltable,lunits,lmols,idnode,ntpvdw, -+ x ntpatm,keyfce,dlrpot,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the metal potential energy parameters -+ -+ elseif(findstring('met',record,idum))then -+ -+ call define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the three body potential energy parameters -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ call define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the tersoff potential energy parameters -+ -+ elseif(findstring('tersoff',record,idum))then -+ -+ call define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the four body potential energy parameters -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ call define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read external field data -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c normal end of FIELD file -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. -+ x mod(keyfce,2).eq.1)call error(idnode,145) -+ -+c error exit for unidentified directive -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(100a)')record -+ call abort_field_read(2,idnode,nfield) -+ -+ endif -+ -+ enddo -+ -+c close force field file -+ -+ if(idnode.eq.0)close (nfield) -+ -+ -+ if(lshl.and.idnode.eq.0)then -+ -+ if(keyshl.eq.1)write(nrite, -+ x "(/,/,'adiabatic shell model in operation')") -+ -+ if(keyshl.eq.2)write(nrite, -+ x "(/,/,'relaxed shell model in operation')") -+ -+ endif -+ -+ if(lshl.and.keyshl.eq.0)call error(idnode,1951) -+ -+c if metadynamics and shell selected use only velocity verlet -+ -+ if(lshl.and.lmetadyn.and.keyver.eq.0)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to velocity verlet for metadynamics')") -+ keyver=1 -+ -+ endif -+ -+ return -+ end subroutine sysdef -+ -+ subroutine sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the configuration data file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 atname(8) -+ -+ logical loglnk,safe,lneut,nolink,lfree,lfrmas -+ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt -+ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz -+ integer m,l,ncells,idum,mxnode -+ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc -+ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi -+ real(8) width,dum1,dum2,test,com(3) -+ -+c open the system input file -+ -+ if(idnode.eq.0)open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ call copystring(record,cfgname,80) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ levcfg=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'selected image convention',6x,i10)")imcon -+ -+c check config file contents for consistent data -+ -+ if((imcon.eq.0.or.imcon.eq.6).and. -+ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) -+ x call error(idnode,180) -+ -+ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) -+ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) -+ -+ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) -+ x call error(idnode,390) -+ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 -+ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.eq.0)then -+ -+c if no periodic boundaries - set zero values for cell -+c vectors and cell volume -+ -+ cell(:)=0.d0 -+ volm=0.d0 -+ -+ else -+ -+c read cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+ endif -+ -+c read the atomic coordinates -+ -+ indatm=0 -+ indnam=0 -+ indneu=0 -+ safe=.true. -+ -+ do k=1,ntpmls -+ -+ do l=1,nummols(k) -+ -+ do m=1,numsit(k) -+ -+ indatm=indatm+1 -+ -+ if(indatm.gt.mxatms)call error(idnode,45) -+ -+ xxx(indatm)=0.d0 -+ yyy(indatm)=0.d0 -+ zzz(indatm)=0.d0 -+ vxx(indatm)=0.d0 -+ vyy(indatm)=0.d0 -+ vzz(indatm)=0.d0 -+ fxx(indatm)=0.d0 -+ fyy(indatm)=0.d0 -+ fzz(indatm)=0.d0 -+ -+ if(idnode.eq.0)then -+ -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ -+ elseif(levcfg.eq.1)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ -+ else -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce -+ -+ endif -+ -+c strip blanks off atom name -+ -+ call strip(atname,8) -+ -+ if(sitnam(indnam+m).eq.mkwd8(atname))then -+ -+ xxx(indatm)=xcoord -+ yyy(indatm)=ycoord -+ zzz(indatm)=zcoord -+ -+ if(levcfg.gt.0)then -+ -+ vxx(indatm)=xveloc -+ vyy(indatm)=yveloc -+ vzz(indatm)=zveloc -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ fxx(indatm)=xforce -+ fyy(indatm)=yforce -+ fzz(indatm)=zforce -+ -+ endif -+ -+ else -+ -+ write(nrite,"(/,/,'unidentified atom label :',8a1, -+ x ': atom number ',i5)")atname,indatm -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ call gstate(safe) -+ if(.not.safe)call error(idnode,25) -+ -+ ltype(indatm)=ltpsit(indnam+m) -+ weight(indatm)=wgtsit(indnam+m) -+ chge(indatm)=chgsit(indnam+m) -+ atmnam(indatm)=sitnam(indnam+m) -+ lstfrz(indatm)=lfzsit(indnam+m) -+ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu -+ -+c reset atomic masses according to free energy definitions -+ -+ if(lfree)then -+ -+ weight_sav(indatm)=weight(indatm) -+ -+ if(lfrmas)then -+ -+ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then -+ weight(indatm)=lambda1*weight(indatm) -+ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) -+ x then -+ weight(indatm)=lambda2*weight(indatm) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ indneu=indneu+nugrp(indnam+numsit(k)) -+ -+ enddo -+ -+ indnam=indnam+numsit(k) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(xxx,indatm,buffer) -+ call gdsum(yyy,indatm,buffer) -+ call gdsum(zzz,indatm,buffer) -+ -+ if(levcfg.gt.0)then -+ -+ call gdsum(vxx,indatm,buffer) -+ call gdsum(vyy,indatm,buffer) -+ call gdsum(vzz,indatm,buffer) -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ call gdsum(fxx,indatm,buffer) -+ call gdsum(fyy,indatm,buffer) -+ call gdsum(fzz,indatm,buffer) -+ -+ endif -+ -+ endif -+ -+c check integrity of cell vectors : for cubic, TO and RD cases -+c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) -+ -+ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then -+ -+ axx=(abs(cell(1))+abs(cell(5)))/2.d0 -+ test=1.d-8*axx -+ if(abs(cell(1)-axx).gt.test)call error(idnode,410) -+ if(abs(cell(5)-axx).gt.test)call error(idnode,410) -+ if(imcon.eq.5)then -+ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) -+ x call error(idnode,410) -+ else -+ if(abs(cell(9)-axx).gt.test)call error(idnode,410) -+ endif -+ -+ endif -+ -+c check integrity of hexagonal prism cell vectors -+ -+ if(imcon.eq.7)then -+ -+ rt3=sqrt(3.d0) -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,410) -+ -+ endif -+ -+c check 2D PBC for imcon=6 -+ -+ if(imcon.eq.6)then -+ -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c check for diagonal cell matrix if appropriate -+ -+ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. -+ x (imcon.eq.5).or.(imcon.eq.7))then -+ -+ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c put centre of mass at centre of coordinates if imcon=0 -+ -+ if(imcon.eq.0)then -+ -+ totmas=getmass(indatm,idnode,mxnode) -+ call getcom(indatm,idnode,mxnode,totmas,com) -+ -+ do i=1,indatm -+ -+ xxx(i)=xxx(i)-com(1) -+ yyy(i)=yyy(i)-com(2) -+ zzz(i)=zzz(i)-com(3) -+ -+ enddo -+ -+ endif -+ -+c set widths if unset - needed for check on link cells below -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ xhi=abs(xxx(1)) -+ yhi=abs(yyy(1)) -+ zhi=abs(zzz(1)) -+ do i=2,indatm -+ -+ xhi=max(xhi,abs(xxx(i))) -+ yhi=max(yhi,abs(yyy(i))) -+ zhi=max(zhi,abs(zzz(i))) -+ -+ enddo -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ if(imcon.eq.6.and.cell(9).lt.1.d-6)then -+ -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ endif -+ -+c calculate dimensional properties of simulation cell -+ -+ call dcell(cell,celprp) -+ -+ if(imcon.eq.0)then -+ -+ volm=0.d0 -+ -+ elseif(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ else -+ -+ volm=celprp(10) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") -+ write(nrite,"(21x,3f12.6)")cell -+ -+ write(nrite, -+ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm -+ -+ endif -+ -+c check value of cutoff and reset if necessary -+ -+ if(imcon.gt.0)then -+ -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 -+ if(imcon.eq.5)width=cell(1)/2.d0 -+ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 -+ -+c halt program if potential cutoff exceeds cell width -+ -+ if(rcut.gt.width)call error(idnode,95) -+ -+ endif -+ -+c decide on whether to use link cells for verlet list constructor -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ -+ ilx=int(celprp(7)/(rcut+delr)) -+ ily=int(celprp(8)/(rcut+delr)) -+ ilz=int(celprp(9)/(rcut+delr)) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(lneut.and.ncells.le.36)loglnk=.false. -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(loglnk.and.ncells.gt.mxcell)then -+ -+ dum1=dble(ncells) -+ dum2=dble(mxcell) -+ call warning(idnode,90,dum1,dum2,dum2) -+ loglnk=.false. -+ -+ endif -+ -+ endif -+ -+ if(loglnk.and.idnode.eq.0) -+ x write(nrite,"(/,/,' link cell algorithm in use')") -+ -+ if(idnode.eq.0)close (nconf) -+ -+c ensure PBC compliance of starting structure -+ -+ if(keyres.eq.0.and.imcon.gt.0)then -+ -+ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ -+c error exit for config file read -+ -+ 100 call abort_config_read(2,idnode,nconf) -+ -+ end subroutine sysgen -+ -+ subroutine sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the REVIVE file data and -+c defining the initial thermodynamic and structural accumulators. -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc -+ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc -+ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw -+ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm -+ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost -+ real(8) chit_shl -+ -+c read or initialise accumulator arrays -+ -+ if(keyres.eq.1.and.idnode.eq.0)then -+ -+c read accumulator data from dump file -+ -+ open(nrest,file='REVOLD',form='unformatted') -+ -+ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, -+ x tboost,chit_shl -+ read(nrest) virtot,vircom,eta,strcns,strbod -+ read(nrest) stpval -+ read(nrest) sumval -+ read(nrest) ssqval -+ read(nrest) zumval -+ read(nrest) ravval -+ read(nrest) stkval -+ read(nrest) xx0,yy0,zz0 -+ read(nrest) xxs,yys,zzs -+ -+ if(lgofr) read(nrest)rdf -+ if(lzden) read(nrest)zdens -+ -+ nstep=nint(dnstep) -+ numacc=nint(dnumac) -+ numrdf=nint(dnumrd) -+ nzden=nint(dnzden) -+ close (nrest) -+ -+ else -+ -+c initialise step counters -+ -+ nstep=0 -+ numacc=0 -+ numrdf=0 -+ nzden=0 -+ -+c initialise temperature and pressure coupling parameters -+c and integral for conserved quantity -+ -+ chit=0.d0 -+ chip=0.d0 -+ conint=0.d0 -+ virtot=0.d0 -+ vircom=0.d0 -+ chit_shl=0.d0 -+ do i=1,9 -+ -+ eta(i)=0.d0 -+ strcns(i)=0.d0 -+ strbod(i)=0.d0 -+ -+ enddo -+ -+c initialise accumulator arrays -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ zumval(i)=0.d0 -+ ravval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ xxs(i)=0.d0 -+ yys(i)=0.d0 -+ zzs(i)=0.d0 -+ -+ enddo -+ -+ do j=1,mxnstk -+ -+ do i=1,mxstak -+ -+ stkval(i,j)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ zdens(j,i)=0.d0 -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c put shells on cores at start -+ -+ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) -+ x call put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c if restart then broadcast stored variables via a global sum -+ -+ if(keyres.eq.1.and.mxnode.gt.1)then -+ -+ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) -+ x call error(idnode,186) -+ -+ buffer(1)=chit -+ buffer(2)=chip -+ buffer(3)=conint -+ buffer(4)=dble(nstep) -+ buffer(5)=dble(numacc) -+ buffer(6)=dble(numrdf) -+ buffer(7)=dble(nzden) -+ buffer(8)=tboost -+ buffer(9)=virtot -+ buffer(10)=vircom -+ buffer(11)=chit_shl -+ call gdsum(buffer(1),11,buffer(12)) -+ chit=buffer(1) -+ chip=buffer(2) -+ conint=buffer(3) -+ nstep=nint(buffer(4)) -+ numacc=nint(buffer(5)) -+ numrdf=nint(buffer(6)) -+ nzden=nint(buffer(7)) -+ tboost=buffer(8) -+ virtot=buffer(9) -+ vircom=buffer(10) -+ chit_shl=buffer(11) -+ -+ call gdsum(eta,9,buffer) -+ call gdsum(strcns,9,buffer) -+ call gdsum(strbod,9,buffer) -+ call gdsum(stpval,mxnstk,buffer) -+ call gdsum(sumval,mxnstk,buffer) -+ call gdsum(ssqval,mxnstk,buffer) -+ call gdsum(zumval,mxnstk,buffer) -+ call gdsum(ravval,mxnstk,buffer) -+ call gdsum(stkval,mxnstk*mxstak,buffer) -+ call gdsum(xx0,natms,buffer) -+ call gdsum(yy0,natms,buffer) -+ call gdsum(zz0,natms,buffer) -+ call gdsum(xxs,natms,buffer) -+ call gdsum(yys,natms,buffer) -+ call gdsum(zzs,natms,buffer) -+ -+c for rdf table - broadcast and normalise -+ -+ if(lgofr)then -+ -+ do k=1,mxxtyp -+ -+ call gdsum(rdf(1,k),mxrdf,buffer) -+ -+ do j=1,mxrdf -+ rdf(j,k)=rdf(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do k=1,mxatyp -+ -+ call gdsum(zdens(1,k),mxzdn,buffer) -+ -+ do j=1,mxzdn -+ zdens(j,k)=zdens(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities and long-range corrections -+ -+ elrc=0.d0 -+ virlrc=0.d0 -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 -+ -+ call lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) -+ -+ if(lmetab.or.ntpmet.eq.0)then -+ -+ elrcm(0)=0.d0 -+ vlrcm(0)=0.d0 -+ -+ else -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 -+ -+ return -+ end subroutine sysinit -+ -+ subroutine systemp -+ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for setting the initial system temperature -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl -+ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq -+ -+c number of degrees of freedom -+c 3 for com translation -+c 3 for angular momentum about origin (non-periodic systems only) -+ -+ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre -+ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 -+ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) -+ degshl=dble(3*ntshl) -+ -+c lose one degree of freedom if temperature constrained -+c gaussian constraints -+ -+c if(keyens.eq.1)degfre=degfre-1.d0 -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, -+ x ' rotational degrees of freedom ',f20.0,/, -+ x ' shell pseudo degrees of freedom',f20.0)") -+ x degfre,degrot,degshl -+ if(degfre.lt.1.d0)call error(idnode,350) -+ -+c define reciprocal masses of atoms -+ -+ do i=1,natms -+ -+ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then -+ -+ rmass(i)=0.d0 -+ weight(i)=0.d0 -+ -+ else -+ -+ rmass(i)=1.d0/weight(i) -+ -+ endif -+ -+ enddo -+ -+c generate starting velocities -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+ if(keyres.eq.0)then -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ elseif(keyres.eq.1.or.keyres.eq.3)then -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ elseif(keyres.eq.2)then -+ -+ if(ngrp.gt.0)then -+ -+ call vscaleg -+ x (idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ elseif(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c print out sample of initial configuration -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'sample of starting configuration',/)") -+ -+ io=(natms+19)/20 -+ if((levcfg.le.1).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") -+ if((levcfg.eq.2).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', -+ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") -+ -+ do i=1,natms,io -+ -+ if(levcfg.le.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) -+ -+ elseif(levcfg.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i), -+ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine systemp -+ -+ subroutine sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine defining global bookkeeping -+c arrays -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost -+ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i -+ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl -+ integer ntghost,natms2 -+ real(8) degfre,degrot -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c neutral group bookkeeping -+ -+ call neutbook(lneut,idnode,natms,nneut) -+ -+c rigid body bookkeeping -+ -+ call quatbook -+ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, -+ x ntfree,degfre,degrot) -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost -+ -+ endif -+ -+c construct list of excluded pair interactions -+ -+ if(lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ call excludeneu(idnode,mxnode,nneut) -+ -+ elseif(.not.lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ -+ if(loglnk)then -+ -+ call exclude_link(idnode,mxnode,ntpmls) -+ -+ else -+ -+ call exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+ endif -+ -+ endif -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost -+ -+ endif -+ -+c construct interaction lists for bonded forces -+ -+ call intlist -+ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c adaptations for solvation and excitation simulations -+ -+ if(lsolva.or.lghost)then -+ -+ natmsf=0 -+ natmsl=0 -+ natm_sol(:)=0 -+ const_sol(:)=numcon(:)*nummols(:) -+ rigid_sol(:)=numgrp(:)*nummols(:) -+ -+ if(ngrp.eq.0)then -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ else -+ -+ ii=1 -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstgot_sol(ii).eq.isol)then -+ ii=ii+1 -+ else -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ -+ endif -+ -+ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost -+ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) -+ -+ endif -+ -+ return -+ end subroutine sysbook -+ -+ subroutine define_units(idnode,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting energy units -+c -+c copyright - daresbury laboratory -+c author - w. smith august 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,idum,i -+ real(8) engunit -+ logical blank -+ -+ blank=.true. -+ -+ do i=6,lenrec -+ if(record(i).ne.' ')blank=.false. -+ enddo -+ -+ if(blank)then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal ', -+ x 'units ')") -+ -+ elseif(findstring('ev',record,idum))then -+ -+ engunit=9648.530821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=electron volts ')") -+ -+ elseif(findstring('kev',record,idum))then -+ -+ engunit=9648530.821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kilo electron volts ')") -+ -+ elseif(findstring('kcal',record,idum))then -+ -+ engunit=418.4d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kcal/ mol ')") -+ -+ elseif(findstring('kj',record,idum))then -+ -+ engunit=1.d2 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kjoule/mol ')") -+ -+ elseif(findstring('k',record,idum))then -+ -+ engunit=boltz -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kelvin ')") -+ -+ elseif(findstring('internal',record,idum))then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal', -+ x ' units ')") -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(a)')record -+ call error(idnode,5) -+ -+ endif -+ -+ return -+ end subroutine define_units -+ -+ subroutine quatbook -+ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, -+ x degfre,degrot) -+ -+c************************************************************************** -+c -+c dl_poly subroutine for setting up bookkeeping for rigid bodies -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c************************************************************************* -+ -+ implicit none -+ -+ logical safe,pass1,pass2,linear,lsolva -+ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree -+ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id -+ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij -+ integer fngrp,lngrp -+ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 -+ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz -+ real(8) rotlim,rrr -+ -+ integer, allocatable :: ind(:,:),lstgot(:) -+ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) -+ -+ data fail/0,0,0,0,0/ -+ -+c allocate working arrays -+ -+ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) -+ allocate (accum(mxungp),stat=fail(5)) -+ do i=1,5 -+ if(fail(i).ne.0)call error(idnode,1790) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ igrp=0 -+ jgrp=0 -+ kgrp=0 -+ isite=0 -+ jr=0 -+ jt=0 -+ safe=.true. -+ degfre=0.d0 -+ degrot=0.d0 -+ -+c rigid body identifier -+ -+ do i=1,natms -+ lstbod(i)=0 -+ enddo -+ -+c number of rigid groups in system -+ -+ ngrp=0 -+ do itmols=1,ntpmls -+ ngrp=ngrp+nummols(itmols)*numgrp(itmols) -+ enddo -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if(igrp.le.mxgrp)then -+ -+ lstgtp(igrp)=listyp(lgrp+kgrp) -+ id=listyp(lgrp+kgrp) -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then -+ -+ jgrp=jgrp+1 -+ -+ do jj=1,numgsit(id) -+ -+ jr=jr+1 -+ jt=jt+1 -+ -+ if(jr.le.mxatms.and.jt.le.mxatms)then -+ -+ lstrgd(jr)=lstgst(id,jj)+isite -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do jj=1,numgsit(id) -+ -+ jt=jt+1 -+ if(jt.le.mxatms)then -+ -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,304) -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kgrp=kgrp+numgrp(itmols) -+ -+ enddo -+ -+ if(ngrp.eq.0)then -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0)then -+ -+ j=j+1 -+ lstfre(j)=i -+ -+ endif -+ -+ enddo -+ ntfree=j -+ -+ else -+ -+c centre of mass of groups -+c assumes group dimensions are smaller than half box width -+ -+ do i=1,natms -+ lstme(i)=0 -+ enddo -+ -+ do id=1,mxungp -+ gmass(id)=0.d0 -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ safe=.false. -+ if(abs(gmass(id)).lt.1.d-10)safe=.true. -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ xxt(jr)=xxx(i)-txx(ig) -+ yyt(jr)=yyy(i)-tyy(ig) -+ zzt(jr)=zzz(i)-tzz(ig) -+ if(safe)gmass(id)=gmass(id)+weight(i) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) -+ -+ enddo -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c global communications -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+c make sure all nodes have same copy of gmass -+ -+ if(mxnode.gt.1)then -+ -+ do id=1,mxungp -+ -+ accum(id)=0.d0 -+ if(gmass(id).gt.0.d0)accum(id)=1.d0 -+ -+ enddo -+ -+ call gdsum(gmass(1),mxungp,buffer(1)) -+ call gdsum(accum(1),mxungp,buffer(1)) -+ -+ do id=1,mxungp -+ -+ dnorm=max(1.d0,accum(id)) -+ gmass(id)=gmass(id)/dnorm -+ -+ enddo -+ -+ endif -+ -+c find a group of each type on this node to -+c find principal axis system of the group type -+ -+ do id=1,mxungp -+ -+ jr=0 -+ ij=0 -+ safe=.false. -+ -+ do while(.not.safe.and.ij.lt.ngrp) -+ -+ ij=ij+1 -+ jr=jr+numgsit(lstgtp(ij)) -+ if(lstgtp(ij).eq.id)safe=.true. -+ -+ enddo -+ -+ if(safe)then -+ -+c rotational inertia accumulator -+ -+ do k=1,3 -+ -+ do kk=1,3 -+ -+ rotinr(k,kk)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ij) -+ yyt(jr)=yyy(i)-gcmy(ij) -+ zzt(jr)=zzz(i)-gcmz(ij) -+ -+ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) -+ -+ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) -+ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) -+ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) -+ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) -+ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) -+ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) -+ -+ enddo -+ -+ rotinr(2,1)=rotinr(1,2) -+ rotinr(3,1)=rotinr(1,3) -+ rotinr(3,2)=rotinr(2,3) -+ -+ call jacobi(rotinr,rot1,3) -+ -+ rot(1)=rot1(1,1) -+ rot(4)=rot1(2,1) -+ rot(7)=rot1(3,1) -+ rot(2)=rot1(1,2) -+ rot(5)=rot1(2,2) -+ rot(8)=rot1(3,2) -+ rot(3)=rot1(1,3) -+ rot(6)=rot1(2,3) -+ rot(9)=rot1(3,3) -+ -+c rotational inertia accumulators -+ -+ rotinx(id,1)=0.d0 -+ rotiny(id,1)=0.d0 -+ rotinz(id,1)=0.d0 -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+c site positions in principal axis system -+ -+ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) -+ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) -+ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) -+ -+c impose rounding -+ -+ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 -+ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 -+ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 -+ -+c rotational inertia tensor of group type -+ -+ rotinx(id,1)=rotinx(id,1)+ -+ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) -+ rotiny(id,1)=rotiny(id,1)+ -+ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) -+ rotinz(id,1)=rotinz(id,1)+ -+ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) -+ -+ enddo -+ -+c set axis system such that: Ixx >=Iyy >=Izz -+ -+ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) -+ -+ if(rotxyz.ge.rotinx(id,1))then -+ -+ if(rotiny(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gyy(id,j) -+ gyy(id,j)=-a1 -+ -+ enddo -+ -+ rotiny(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ elseif(rotinz(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ rotinz(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ endif -+ -+ endif -+ -+ if(rotinz(id,1).gt.rotiny(id,1))then -+ -+ do j=1,numgsit(id) -+ -+ a1=gyy(id,j) -+ gyy(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ a1=rotinz(id,1) -+ rotinz(id,1)=rotiny(id,1) -+ rotiny(id,1)=a1 -+ -+ endif -+ -+c set up principal axis system in terms of site positions -+ -+c test for (near) linear unit -+ -+ ill=0 -+ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) -+ -+ if(rtall.gt.1.d-5)then -+ rotall=rtall -+ else -+ rotall=1.d0 -+ endif -+ -+ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) -+ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall -+ -+ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ -+ if(ill.ge.2)then -+ -+c point particle only -+ -+ ind(id,1)=1 -+ ind(id,2)=1 -+ ind(id,3)=1 -+ -+ do jj=1,9 -+ gaxs(id,jj)=0.d0 -+ enddo -+ -+ elseif(ill.eq.1)then -+ -+c linear molecule -+ -+ ind(id,1)=1 -+ ind(id,2)=2 -+ ind(id,3)=1 -+ -+ aa(1)=gxx(id,1)-gxx(id,2) -+ aa(4)=gyy(id,1)-gyy(id,2) -+ aa(7)=gzz(id,1)-gzz(id,2) -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+ call invert(aa,bb,det) -+ -+ if(abs(det).lt.1.d-5)call error(idnode,306) -+ -+ do j=1,9 -+ gaxs(id,j)=bb(j) -+ enddo -+ -+ elseif(ill.eq.0)then -+ -+c non-linear molecule -+ -+ i1=1 -+ i2=1 -+ i3=1 -+ pass1=.true. -+ dettest=1.d-1 -+ -+ do while(pass1.and.i2.lt.numgsit(id)-1) -+ -+ i2=i2+1 -+ i3=i2 -+ pass2=.true. -+ -+ do while(pass2.and.i3.lt.numgsit(id)) -+ -+ i3=i3+1 -+ -+ aa(1)=gxx(id,i1)-gxx(id,i2) -+ aa(4)=gyy(id,i1)-gyy(id,i2) -+ aa(7)=gzz(id,i1)-gzz(id,i2) -+ aa(2)=gxx(id,i1)-gxx(id,i3) -+ aa(5)=gyy(id,i1)-gyy(id,i3) -+ aa(8)=gzz(id,i1)-gzz(id,i3) -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c invert matrix -+ -+ call invert(aa,bb,det) -+ -+c check on size of determinant - to see if the 3 sites are -+c too close to being linear for safety. -+ -+ pass2=abs(det).lt.dettest -+ -+ enddo -+ -+ pass1=abs(det).lt.dettest -+ -+ enddo -+ -+ if(abs(det).lt.dettest)call error(idnode,306) -+ -+c store indices used -+ -+ ind(id,1)=i1 -+ ind(id,2)=i2 -+ ind(id,3)=i3 -+ -+c store coefficients -+ -+ do j=1,9 -+ -+ gaxs(id,j)=bb(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check that rigid unit does not contain frozen atoms -+ -+ safe=.true. -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ if(lstfrz(i).ne.0)safe=.false. -+ -+ enddo -+ -+ enddo -+ -+c global check on error condition -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,360) -+ -+c quaternions for all rigid groups in system -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ i1=lstrgd(jr+ind(id,1)) -+ i2=lstrgd(jr+ind(id,2)) -+ i3=lstrgd(jr+ind(id,3)) -+ -+ jr=jr+numgsit(id) -+ -+c group basis vectors -+ -+ aa(1)=xxx(i1)-xxx(i2) -+ aa(4)=yyy(i1)-yyy(i2) -+ aa(7)=zzz(i1)-zzz(i2) -+ -+ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) -+ -+ if(rotmin(id).gt.1.d-5)then -+ -+ aa(2)=xxx(i1)-xxx(i3) -+ aa(5)=yyy(i1)-yyy(i3) -+ aa(8)=zzz(i1)-zzz(i3) -+ -+ else -+ -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ endif -+ -+ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c group rotational matrix -+ -+ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) -+ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) -+ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) -+ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) -+ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) -+ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) -+ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) -+ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) -+ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) -+ -+c determine quaternions from rotational matrix -+ -+ aq=rot(1)+rot(5) -+ bq=rot(2)-rot(4) -+ cq=rot(6)-rot(8) -+ dq=rot(2)+rot(4) -+ eq=rot(3)+rot(7) -+ fq=rot(6)+rot(8) -+ gq=rot(3)-rot(7) -+ hq=rot(1)-rot(5) -+ -+ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) -+ -+ if(q0(ig).gt.1.d-4)then -+ -+ q1(ig)=-0.25d0*cq/q0(ig) -+ q2(ig)=0.25d0*gq/q0(ig) -+ q3(ig)=-0.25d0*bq/q0(ig) -+ -+ else -+ -+ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q1(ig).gt.1.d-4)then -+ -+ q2(ig)=0.25d0*dq/q1(ig) -+ q3(ig)=0.25d0*eq/q1(ig) -+ -+ else -+ -+ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q2(ig).gt.1.d-4)then -+ -+ q3(ig)=0.25d0*fq/q2(ig) -+ -+ else -+ -+ q3(ig)=1.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c normalise quaternions -+ -+ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) -+ q0(ig)=rnorm*q0(ig) -+ q1(ig)=rnorm*q1(ig) -+ q2(ig)=rnorm*q2(ig) -+ q3(ig)=rnorm*q3(ig) -+ -+ enddo -+ -+c test for redundant degrees of freedom -+c and ensure rotational inertias are non-zero -+ -+ degrot=0.d0 -+ -+ if(lsolva)then -+ degrot_sol(:)=0.d0 -+ endif -+ -+ do ig=1,ngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ enddo -+ -+c rotational degrees of freedom and rigid body contribution -+c to total degrees of freedom -+ -+ degrot=degrot+dble(ngrp)*3.d0 -+ degfre=degrot+dble(ngrp)*3.d0 -+ -+ if(lsolva)then -+ -+ fngrp=1 -+ lngrp=0 -+ -+ do itmols=1,mxtmls -+ -+ lngrp=lngrp+nummols(itmols)*numgrp(itmols) -+ -+ do ig=fngrp,lngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ enddo -+ -+ fngrp=lngrp+1 -+ -+ enddo -+ -+ endif -+ -+c summarise results -+ -+ if(idnode.eq.0)then -+ -+ if(gmass(1).gt.0.d0)then -+ -+ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' -+ -+ do id=1,mxungp -+ -+ if(gmass(id).gt.0.d0)then -+ -+ write(nrite,'(/,a,i10)')' group of type ',id -+ write(nrite,'(12x,a,f20.10)')' total mass ', -+ x gmass(id) -+ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', -+ x rotinx(id,1),rotiny(id,1),rotinz(id,1) -+ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', -+ x 'b coord','c coord' -+ do j=1,numgsit(id) -+ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), -+ x gyy(id,j),gzz(id,j) -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c find number of unique groups -+ -+ ngp=0 -+ do ig=1,ngrp -+ ngp=max(ngp,lstgtp(ig)) -+ enddo -+ -+c calculate reciprocal of rotational inertias -+ -+ do id=1,ngp -+ -+ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1))*1.d-5 -+ -+ if(rotinx(id,1).lt.rotlim)then -+ rotinx(id,2)=0.d0 -+ else -+ rotinx(id,2)=1.d0/rotinx(id,1) -+ endif -+ -+ if(rotiny(id,1).lt.rotlim)then -+ rotiny(id,2)=0.d0 -+ else -+ rotiny(id,2)=1.d0/rotiny(id,1) -+ endif -+ -+ if(rotinz(id,1).lt.rotlim)then -+ rotinz(id,2)=0.d0 -+ else -+ rotinz(id,2)=1.d0/rotinz(id,1) -+ endif -+ -+ enddo -+ -+c Check of quaternion set up with atomic positions -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c group type -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ -+ txx(jr)=xxx(i)-xxt(i) -+ tyy(jr)=yyy(i)-yyt(i) -+ tzz(jr)=zzz(i)-zzt(i) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,txx,tyy,tzz) -+ -+c set tolerance for testing quaternion setup. -+ -+ rsq=0.d0 -+ tol=1.d-2 -+ -+ do i=1,jr -+ -+ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ if(rrr.gt.tol)then -+ -+ rsq=rrr -+ -+ endif -+ -+ enddo -+ -+c exit if error in set up -+ -+ safe=.true. -+ if(rsq.gt.tol)safe=.false. -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)call error(idnode,310) -+ -+c sort lstgot into ascending order -+ -+ call shellsort(jt,lstgot) -+ -+c check that no site is in more than 1 rigid group -+ -+ i=1 -+ safe=.true. -+ do while(i.lt.jt) -+ -+ i=i+1 -+ linear=.true. -+ do while(linear) -+ -+ linear=.false. -+ -+ if(lstgot(i).eq.lstgot(i-1))then -+ -+ linear=.true. -+ safe=.false. -+ jt=jt-1 -+ -+ do j=i,jt -+ lstgot(j)=lstgot(j+1) -+ enddo -+ -+ endif -+ -+ if(i.ge.jt)linear=.false. -+ -+ enddo -+ -+ enddo -+ -+ if(.not.safe)call error(idnode,320) -+ -+c list of 'free' sites -+ -+ ii=1 -+ jj=0 -+ do i=1,natms -+ -+ if(lstgot(ii).eq.i)then -+ -+ ii=ii+1 -+ -+ else -+ -+ if(lstfrz(i).eq.0)then -+ jj=jj+1 -+ lstfre(jj)=i -+ endif -+ -+ endif -+ -+ enddo -+ -+c number of free sites -+ -+ ntfree=jj -+ -+c list of atoms integrated on this node -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ jr=jr+numgsit(id) -+ -+ enddo -+ -+ do i=1,jr -+ lstme(i)=lstrgd(i) -+ enddo -+ -+c block parameters for free atoms -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do i=ifre1,ifre2 -+ -+ jr=jr+1 -+ lstme(jr)=lstfre(i) -+ -+ enddo -+ -+c exchange quaternion data with other nodes -+ -+ if(mxnode.gt.1)call merge4 -+ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+ if(lsolva)lstgot_sol(:)=lstgot(:) -+ -+c deallocate work arrays -+ -+ deallocate (ind,lstgot,stat=fail(1)) -+ deallocate (txx,tyy,tzz,stat=fail(2)) -+ deallocate (xxt,yyt,zzt,stat=fail(3)) -+ deallocate (gaxs,rotmin,stat=fail(4)) -+ deallocate (accum,stat=fail(5)) -+ -+ return -+ end subroutine quatbook -+ -+ subroutine abort_field_read(kode,idnode,nfield) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting FIELD file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nfield -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(kode.eq.1)then -+ -+c end of field file error exit -+ -+ call error(idnode,52) -+ -+ elseif(kode.eq.2)then -+ -+c unrecognised directive in field file -+ -+ call error(idnode,4) -+ -+ endif -+ -+ return -+ end subroutine abort_field_read -+ -+ subroutine abort_control_read(kode,idnode,nread) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nread -+ -+ if(idnode.eq.0)close (nread) -+ -+ if(kode.eq.1)then -+ -+c end of control file error exit -+ -+ call error(idnode,53) -+ -+ elseif(kode.eq.2)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,0) -+ -+ endif -+ -+ return -+ end subroutine abort_control_read -+ -+ subroutine abort_config_read(kode,idnode,nconf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nconf -+ -+ if(idnode.eq.0)close (nconf) -+ -+ if(kode.eq.1)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,54) -+ -+ elseif(kode.eq.2)then -+ -+c end of config file error exit -+ -+ call error(idnode,55) -+ -+ endif -+ -+ return -+ end subroutine abort_config_read -+ -+ subroutine neutbook(lneut,idnode,natms,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for neutral group bookkeeping -+c -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lneut,safe -+ integer idnode,natms,nneut,i -+ -+ safe=.true. -+ -+c neutral group bookkeeping: sites must be listed consecutively -+ -+ if(lneut)then -+ -+ if(lstneu(1).ne.1)call error(idnode,230) -+ -+ neulst(1)=1 -+ nneut=1 -+ -+ do i=2,natms -+ -+ safe=.false. -+ if(lstneu(i).eq.lstneu(i-1))safe=.true. -+ if(lstneu(i).eq.lstneu(i-1)+1)then -+ -+ safe=.true. -+ nneut=nneut+1 -+ if(nneut.gt.mxneut)call error(idnode,220) -+ neulst(nneut)=i -+ -+ endif -+ -+ if(.not.safe)call error(idnode,230) -+ -+ enddo -+ -+ neulst(nneut+1)=natms+1 -+ -+ endif -+ -+ return -+ -+ end subroutine neutbook -+ -+ subroutine intlist -+ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the interaction lists -+c for the entire simulated system -+c -+c parallel replicated dat version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,safe1,lcnb,lchk,lfail -+ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons -+ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf -+ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle -+ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths -+ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 -+ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum -+ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 -+ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 -+ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle -+ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp -+ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail -+ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail -+ real(8) tol -+ -+ integer, allocatable :: itest(:),index(:),kscons(:) -+ integer, allocatable :: msite(:),mconst(:),listin(:) -+ -+ dimension fail(4) -+ -+ data fail/0,0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) -+ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) -+ allocate (listin(mxatms),stat=fail(3)) -+ allocate (kscons(0:mxproc-1),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1800) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ ibonds=0 -+ jbonds=0 -+ kbonds=0 -+ ipmf=0 -+ jpmf=0 -+ iangle=0 -+ jangle=0 -+ kangle=0 -+ idihed=0 -+ jdihed=0 -+ kdihed=0 -+ iinver=0 -+ jinver=0 -+ kinver=0 -+ iteths=0 -+ jteths=0 -+ kteths=0 -+ ishels=0 -+ jshels=0 -+ kshels=0 -+ safe=.true. -+ safe1=.true. -+ -+c find total number of bonds,pmf constraints,bond constraints, -+c angles,dihedrals,inversions, tethers,core-shells, in system -+c - ignoring frozen atoms -+ -+ ntbon0=0 -+ ntpmf0=0 -+ ntcon0=0 -+ ntang0=0 -+ ntdih0=0 -+ ntinv0=0 -+ nttet0=0 -+ ntshl0=0 -+ nscons=0 -+ ntcons=0 -+ -+ do itmols=1,ntpmls -+ -+ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) -+ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) -+ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) -+ ntang0=ntang0+nummols(itmols)*numang(itmols) -+ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) -+ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) -+ nttet0=nttet0+nummols(itmols)*numteth(itmols) -+ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) -+ -+ enddo -+ -+ isite=0 -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ -+c first and last index of bonds, angles etc for this node -+ -+ ibnd1=(idnode*ntbon0)/mxnode+1 -+ ibnd2=((idnode+1)*ntbon0)/mxnode -+ -+ ipmf1=(idnode*ntpmf0)/mxnode+1 -+ ipmf2=((idnode+1)*ntpmf0)/mxnode -+ ntpmf=ntpmf0 -+ nspmf=ipmf2+1-ipmf1 -+ -+ iang1=(idnode*ntang0)/mxnode+1 -+ iang2=((idnode+1)*ntang0)/mxnode -+ -+ idih1=(idnode*ntdih0)/mxnode+1 -+ idih2=((idnode+1)*ntdih0)/mxnode -+ -+ iinv1=(idnode*ntinv0)/mxnode+1 -+ iinv2=((idnode+1)*ntinv0)/mxnode -+ -+ itet1=(idnode*nttet0)/mxnode+1 -+ itet2=((idnode+1)*nttet0)/mxnode -+ -+ ishl1=(idnode*ntshl0)/mxnode+1 -+ ishl2=((idnode+1)*ntshl0)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct bond constraint list later -+c construct chemical bond interaction list -+ -+ do lbonds=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then -+ -+ jbonds=jbonds+1 -+ if(jbonds.le.mxbond)then -+ -+ listbnd(jbonds,1)=lbonds+kbonds -+ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) -+ x +isite -+ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,31) -+ -+c construct pmf site lists - no exclusions -+ -+ do lpmf=1,numpmf(itmols) -+ -+ ipmf=ipmf+1 -+ -+ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then -+ -+ jpmf=jpmf+1 -+ if(jpmf.le.mspmf)then -+ -+ nnn=npmf(1)+npmf(2) -+ if(nnn.le.mxspmf)then -+ -+ do jj=1,npmf(1)+npmf(2) -+ lstpmf(jj,jpmf)=indpmf(jj)+isite -+ enddo -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ else -+ -+ safe1=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe1) -+ if(.not.safe1)call error(idnode,458) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,460) -+ -+c construct valence angle interaction list -+ -+ do langle=1,numang(itmols) -+ -+ iangle=iangle+1 -+ -+ if(iangle.ge.iang1.and.iangle.le.iang2)then -+ -+ jangle=jangle+1 -+ if(jangle.le.mxangl)then -+ -+ listang(jangle,1)=langle+kangle -+ listang(jangle,2)=lstang(langle+kangle,1) -+ x +isite -+ listang(jangle,3)=lstang(langle+kangle,2) -+ x +isite -+ listang(jangle,4)=lstang(langle+kangle,3) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,51) -+ -+c construct dihedral angle interaction list -+ -+ do ldihed=1,numdih(itmols) -+ -+ idihed=idihed+1 -+ -+ if(idihed.ge.idih1.and.idihed.le.idih2)then -+ -+ jdihed=jdihed+1 -+ if(jdihed.le.mxdihd)then -+ -+ listdih(jdihed,1)=ldihed+kdihed -+ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) -+ x +isite -+ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) -+ x +isite -+ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) -+ x +isite -+ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,61) -+ -+c construct inversion potential list -+ -+ do linver=1,numinv(itmols) -+ -+ iinver=iinver+1 -+ -+ if(iinver.ge.iinv1.and.iinver.le.iinv2)then -+ -+ jinver=jinver+1 -+ if(jinver.le.mxinv)then -+ -+ listinv(jinver,1)=linver+kinver -+ listinv(jinver,2)=lstinv(linver+kinver,1) -+ x +isite -+ listinv(jinver,3)=lstinv(linver+kinver,2) -+ x +isite -+ listinv(jinver,4)=lstinv(linver+kinver,3) -+ x +isite -+ listinv(jinver,5)=lstinv(linver+kinver,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,77) -+ -+c construct tethered atoms interaction list -+ -+ do lteths=1,numteth(itmols) -+ -+ iteths=iteths+1 -+ -+ if(iteths.ge.itet1.and.iteths.le.itet2)then -+ -+ jteths=jteths+1 -+ if(jteths.le.msteth)then -+ -+ listtet(jteths,1)=lteths+kteths -+ listtet(jteths,2)=lsttet(lteths+kteths)+isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,63) -+ -+c construct core-shell list -+ -+ do lshels=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ if(ishels.ge.ishl1.and.ishels.le.ishl2)then -+ -+ jshels=jshels+1 -+ if(jshels.le.mxshl)then -+ -+ listshl(jshels,1)=lshels+kshels -+ listshl(jshels,2)=lstshl(lshels+kshels,1) -+ x +isite -+ listshl(jshels,3)=lstshl(lshels+kshels,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,59) -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kbonds=kbonds+numbonds(itmols) -+ kangle=kangle+numang(itmols) -+ kdihed=kdihed+numdih(itmols) -+ kinver=kinver+numinv(itmols) -+ kteths=kteths+numteth(itmols) -+ kshels=kshels+numshl(itmols) -+ -+ enddo -+ -+c store array counters for bookkeeping -+ -+ ntbond=ibonds -+ ntangl=iangle -+ ntdihd=idihed -+ ntinv=iinver -+ ntteth=iteths -+ ntshl=ishels -+ -+c pass bond constraint information to other nodes -+ -+ if(ntcon0.gt.0)then -+ -+ ntcons=ntcon0 -+ -+c find starting site no. and constraint no. for each molec. type -+ -+ msite(1)=0 -+ mconst(1)=0 -+ -+ do itmols=2,ntpmls -+ -+ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* -+ x nummols(itmols-1) -+ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) -+ -+ enddo -+ -+c sort molecules into ascending order of number of constraints -+ -+ do i=1,ntpmls -+ -+ itest(i)=numcon(i) -+ index(i)=0 -+ -+ enddo -+ -+ call shellsort(ntpmls,itest) -+ -+ do i=1,ntpmls -+ -+ lchk=.true. -+ do j=1,ntpmls -+ -+ if(itest(i).eq.numcon(j))then -+ -+ if(lchk)then -+ index(i)=j -+ lchk=.false. -+ -+ endif -+ -+ do ii=1,i-1 -+ if(index(ii).eq.j)lchk=.true. -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c load balance to within 10% -+ -+ tol=1.0d0+(0.10d0)/2.d0 -+ kcons=(ntcons)/mxnode -+ ntmp=0 -+ -+c find smallest constrained molecule to allocate to a node -+ -+ do i=1,ntpmls -+ -+ if(ntmp.le.mxnode)then -+ -+ if(numcon(index(i)).gt.0)then -+ ntmp=ntmp+nummols(index(i)) -+ klo=max(0,kcons-numcon(index(i))/2) -+ khi=klo+numcon(index(i))+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+c reset hi/lo limits if molecules contain too many constraints -+ -+ if(dble(khi)/dble(max(1,klo)).gt.tol)then -+ klo=nint(dble(kcons)/tol) -+ khi=nint(dble(kcons)*tol)+1 -+ endif -+ -+c store lo value for later -+ -+ klo0=klo -+ -+c begin assignment of constraints ---------------------------------- -+ -+ ifail=-1 -+ lfail=.true. -+ do while(lfail) -+ -+ ifail=ifail+1 -+ -+ if(ifail.gt.ntpmls)then -+ call error(idnode,432) -+ endif -+ -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ lconst=0 -+ -+c zero running totals of constraints on each processor -+ -+ do id=0,mxnode-1 -+ kscons(id)=0 -+ enddo -+ -+ iloop=0 -+ lfail=.false. -+ iconst=0 -+ jconst=0 -+ nnode=0 -+ -+c assign difficult molecules in blocks -+ -+ if(ifail.gt.0)then -+ -+ nfail=0 -+ do i=1,ifail -+ -+ ii=ntpmls+1-i -+ nfail=nfail+nummols(index(ii))*numcon(index(ii)) -+ -+ enddo -+ -+c decide on number of processors to split over -+ -+ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) -+ nnode=max(2,nnode) -+ nnode=min(nnode,mxnode) -+ -+c assign to processors 0..nnode-1 -+ -+ do id=0,nnode-1 -+ -+ nscons0=(id*nfail)/nnode+1 -+ nscons1=((id+1)*nfail)/nnode -+ -+ kscons(id)=nscons1+1-nscons0 -+ -+ enddo -+ -+c this processors block -+ -+ nscons0=(idnode*nfail)/nnode+1 -+ nscons1=((idnode+1)*nfail)/nnode -+ -+c assign in blocks -+ -+ do itmols=ntpmls,ntpmls-ifail+1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ -+c construct bond constraint list -+ -+ do lconst=1,numcon(ii) -+ -+ iconst=iconst+1 -+ -+ if(iconst.ge.nscons0.and.iconst.le.nscons1)then -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c assign non-problematic molecules -+ -+ jdnode=mod(nnode+1,mxnode) -+ -+ do itmols=ntpmls-ifail,1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ itry=0 -+ lchk=.true. -+ do while(lchk) -+ -+ if(kscons(jdnode)+icon.le.klo)then -+ -+ if(jdnode.ne.idnode)then -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ else -+ -+c construct bond constraint list -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ do lconst=1,numcon(ii) -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ -+ endif -+ -+ else -+ -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.true. -+ itry=itry+1 -+ -+ endif -+ -+ if(lchk.and.itry.gt.mxnode)then -+ -+ klo=kcons -+ kcons=khi -+ itry=0 -+ iloop=iloop+1 -+ -+ endif -+ -+c split molecule across nodes if have to -+ -+ if(iloop.gt.3)then -+ lfail=.true. -+ kcons=ntcons/mxnode -+ klo=klo0 -+ lchk=.false. -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c check no node has less than minimum number -+ -+ do id=0,mxnode-1 -+ if(kscons(id).lt.klo0)then -+ lfail=.true. -+ endif -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(mxnode.gt.1)call gimax(jconst,1,idum) -+ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') -+ x 'Number of constraints found ',jconst,'Max allowed ',mxcons -+ -+ call error(idnode,41) -+ -+ endif -+ -+ nscons=kscons(idnode) -+ -+ call passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+ endif -+ -+ if(npmf(1).gt.0)then -+ -+ call passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+ endif -+ -+c pass rigid body data -+ -+ lcnb=.false. -+ if(ntcons.gt.0.and.ngrp.gt.0)then -+ -+ call passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, -+ x numgsit) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(itest,index,msite,stat=fail(1)) -+ deallocate(mconst,kscons,listin,stat=fail(2)) -+ -+ return -+ end subroutine intlist -+ -+ subroutine ensemble_selection -+ x (directive,lens,kill,idnode,keyens,mode,taut,taup) -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ensemble and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical kill,lens -+ integer keyens,idnode,idum,mode -+ real(8) taut,taup -+ -+ if(findstring('nve',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'microcanonical ensemble')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('nvt',directive,idum))then -+ -+ if(findstring('evans',directive,idum))then -+ -+ keyens=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Evans Gaussian temperature constraints', -+ x ' in use')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('ber',directive,idum))then -+ -+ keyens=2 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen thermostat', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=3 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('npt',directive,idum))then -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=4 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen isotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=5 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('nst',directive,idum))then -+ -+ mode=0 -+ if(findstring('block',directive,idum))mode=1 -+ if(findstring('surf',directive,idum))mode=2 -+ if(findstring('slab',directive,idum))mode=3 -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=6 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen anisotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=7 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ if(mode.eq.0)then -+ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") -+ elseif(mode.eq.1)then -+ write(nrite, -+ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") -+ elseif(mode.eq.2)then -+ write(nrite, -+ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") -+ elseif(mode.eq.3)then -+ write(nrite, -+ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") -+ endif -+ -+ endif -+ -+ elseif(findstring('pmf',directive,idum))then -+ -+ keyens=8 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'potential of mean force calculation (NVE)')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ call error(idnode,-436) -+ kill=.true. -+ -+ endif -+ -+ return -+ end subroutine ensemble_selection -+ -+ subroutine neb_option -+ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, -+ x opttol,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for NEB option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical lneb,lminopt,endneb,safe -+ integer numneb,idnode,keytol,i,idum -+ real(8) sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ lminopt=.true. -+ lneb=.true. -+ endneb=.false. -+ numneb=intstr(directive,lenrec,idum) -+ if(numneb.eq.0)numneb=1 -+ numneb=min(maxneb,numneb) -+ -+ hyp_units=1.d0 -+ do while(.not.endneb) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endneb',directive,idum))then -+ endneb=.true. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('basin_1',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_1(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('basin_2',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_2(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'NEB calculation controls')") -+ write(nrite,"(/,1x,'identity of basin 1 ', -+ x 10i10)")(bsn_1(i),i=1,numneb) -+ write(nrite,"(1x,'identity of basin 2 ', -+ x 10i10)")(bsn_2(i),i=1,numneb) -+ write(nrite, -+ x "(1x,'NEB spring constant ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x sprneb,opttol,cunit -+ -+ call print_optim(keytol) -+ -+ endif -+ -+c units conversion -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine neb_option -+ -+ subroutine bpd_option -+ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, -+ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for bias potential -+c dynamics option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 directive(lenrec) -+ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo -+ integer keybpd,idnode,nblock,ntrack,keytol,idum -+ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(ltad)call error(idnode,2355) -+ lminopt=.true. -+ lbpd=.true. -+ endbpd=.false. -+ cunit=" dl_poly" -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'bias potential dynamics controls')") -+ -+ if(findstring('dyn',directive,idum))then -+ -+ keybpd=1 -+ hyp_units=energy_unit() -+ ebias=dblstr(directive,lenrec,idum) -+ vmin=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ if(idnode.eq.0)write(nrite,"( -+ x 1x,'dynamics option selected ', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4 -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,cunit -+ -+ elseif(findstring('path',directive,idum))then -+ -+ keybpd=2 -+ nebgo=.true. -+ hyp_units=1.d0 -+ do while(.not.endbpd) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endbpd',directive,idum))then -+ endbpd=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('noneb',directive,idum))then -+ nebgo=.false. -+ elseif(findstring('target',directive,idum))then -+ call getword(seek,directive,8,lenrec) -+ call getword(seek,directive,8,lenrec) -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('ebias',directive,idum))then -+ ebias=dblstr(directive,lenrec,idum) -+ elseif(findstring('vmin',directive,idum))then -+ vmin=dblstr(directive,lenrec,idum) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"( -+ x 1x,'dynamics with path analysis selected', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4, -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'configuration catch radius (A)',f10.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'atom type to be tracked ',2x,a8, -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit -+ if(nebgo)write(nrite, -+ x "(1x,'NEB spring constant ',e12.4)")sprneb -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ endif -+ -+ return -+ end subroutine bpd_option -+ -+ subroutine tad_option -+ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, -+ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for TAD option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe -+ integer idnode,nblock,ntrack,blkout,keytol,idum -+ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(lbpd)call error(idnode,2355) -+ lminopt=.true. -+ ltad=.true. -+ endtad=.false. -+ hyp_units=1.d0 -+ -+ do while(.not.endtad) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endtad',directive,idum))then -+ endtad=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('all',directive,idum))then -+ tadall=.true. -+ if(findstring('false',directive,idum))tadall=.false. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('blackout',directive,idum))then -+ blkout=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('deltad',directive,idum))then -+ deltad=dblstr(directive,lenrec,idum) -+ elseif(findstring('low_temp',directive,idum))then -+ tlow=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'TAD dynamics controls' -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'steps in blackout periods ',i10, -+ x /,1x,'configuration catch radius ',1p,e12.4, -+ x /,1x,'NEB spring constant ',e12.4, -+ x /,1x,'stopping parameter ',e12.4, -+ x /,1x,'target low temperature ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x nblock,ntrack,blkout,catchrad,sprneb,deltad, -+ x tlow,opttol,cunit -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ if(tadall)write(nrite, -+ x "(1x,'option for all basins analysis selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine tad_option -+ -+ subroutine metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for metadynamics option -+c copyright - daresbury laboratory -+c author - w. smith jan 2011 -+c -+c note: default values are set in metafreeze_module -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe -+ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int -+ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt -+ -+ lmetadyn=.true. -+ endmet=.false. -+ -+ do while(.not.endmet) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endmet',directive,idum))then -+ endmet=.true. -+ elseif(findstring('ncolvar',directive,idum))then -+ ncolvar=intstr(directive,lenrec,idum) -+ elseif(findstring('lstein',directive,idum))then -+ lstein=.true. -+ if(findstring('false',directive,idum))lstein=.false. -+ elseif(findstring('ltet',directive,idum))then -+ ltet=.true. -+ if(findstring('false',directive,idum))ltet=.false. -+ elseif(findstring('lglobpe',directive,idum))then -+ lglobpe=.true. -+ if(findstring('false',directive,idum))lglobpe=.false. -+ elseif(findstring('llocpe',directive,idum))then -+ llocpe=.true. -+ if(findstring('false',directive,idum))llocpe=.false. -+ elseif(findstring('globpe_scale',directive,idum))then -+ globpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('locpe_scale',directive,idum))then -+ locpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('nq4',directive,idum))then -+ nq4=intstr(directive,lenrec,idum) -+ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('nq6',directive,idum))then -+ nq6=intstr(directive,lenrec,idum) -+ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('ntet',directive,idum))then -+ ntet=intstr(directive,lenrec,idum) -+ elseif(findstring('meta_step_int',directive,idum))then -+ meta_step_int=intstr(directive,lenrec,idum) -+ elseif(findstring('ref_w_aug',directive,idum))then -+ ref_W_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('h_aug',directive,idum))then -+ h_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('hkey',directive,idum))then -+ hkey=intstr(directive,lenrec,idum) -+ elseif(findstring('wt_dt',directive,idum))then -+ wt_dt=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'metadynamics controls' -+ x /,1x,'total number of collective variables',i10, -+ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, -+ x /,1x,'tetrahedral parameters option (zeta)',l10, -+ x /,1x,'global potential parameter option ',l10, -+ x /,1x,'local potential parameter option ',l10, -+ x /,1x,'global potential param. scale factor',e12.4, -+ x /,1x,'local potential param. scale factor ',e12.4)") -+ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale -+ -+ write(nrite, -+ x "( 1x,'number of Q4 atom pair types ',i10, -+ x /,1x,'number of Q6 atom pair types ',i10, -+ x /,1x,'number of zeta atom triplet types ',i10)") -+ x nq4,nq6,ntet -+ -+ write(nrite, -+ x "( 1x,'gaussian deposition interval ',i10, -+ x /,1x,'reference gaussian height ',e12.4, -+ x /,1x,'gaussian width parameter ',e12.4, -+ x /,1x,'height control key ',i10, -+ x /,1x,'well-tempered control parameter ',e12.4)") -+ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt -+ -+ endif -+ -+ return -+ end subroutine metadyn_option -+ -+ subroutine ewald_selection -+ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, -+ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ewald method and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lhke,lspme,lewald,lcut,lforc,kill,safe -+ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum -+ integer kmaxpow2 -+ real(8) alpha,rcut,eps,tol,fac,tol1 -+ -+ lhke=findstring('hke',directive,idum) -+ lspme=findstring('spme',directive,idum) -+ lewald=findstring('ewald',directive,idum) -+ if(lewald)keyfce=2 -+ if(lspme)keyfce=12 -+ if(lhke)keyfce=14 -+ if(idnode.eq.0)open(nconf,file='CONFIG') -+ call getrec(safe,idnode,nconf) -+ call getrec(safe,idnode,nconf) -+ imcon=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then -+ -+ call error(idnode,-180) -+ kill=.true. -+ -+ endif -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps -+ -+ if(lhke)then -+ -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ if(nlatt.eq.0)nlatt=1 -+ if(nhko.eq.0)nhko=1 -+ -+ endif -+ -+ if(.not.lcut)then -+ call error(idnode,-433) -+ kill=.true. -+ else -+ -+c retreive cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(directive,lenrec,idum) -+ kmax1=intstr(directive,lenrec,idum) -+ kmax2=intstr(directive,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ -+ else -+ -+ kmax3=intstr(directive,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c if spme double kmax and set to next power of 2, with current upper -+c limit of 512. -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax1=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax2=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax3=2 * kmaxpow2 -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ close(nconf) -+ -+ if(lspme)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : SPME ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1/2,kmax2/2,kmax3/2 -+ -+ elseif(lhke)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 ',2i5)") -+ x alpha,kmax1,kmax2 -+ -+ write(nrite, -+ x "(1x,'HKE expansion order ',7x,i10, -+ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt -+ -+ else -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1,kmax2,kmax3 -+ -+ endif -+ -+ endif -+ -+ if(lspme)then -+ -+c Initialize fft tables -+ -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (fplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+CFFTW -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (bplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+ -+CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CSGIC x dummy,1,1,ffttable,dummy,dummy ) -+ -+CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CCRAY x dummy,1,1,ffttable,dummy,dummy ) -+ -+ endif -+ -+ if(lspme)then -+ -+ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ elseif(lhke)then -+ -+ if(kmax2.gt.kmaxb)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ else -+ -+ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ lforc=.true. -+ -+ return -+ end subroutine ewald_selection -+ -+ subroutine print_optim(keytol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing the optimisation option -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer keytol -+ -+ if(keytol.eq.0)then -+ write(nrite, -+ x "(1x,'convergence to minimum force selected')") -+ elseif(keytol.eq.1)then -+ write(nrite, -+ x "(1x,'convergence to minimum energy selected')") -+ else -+ write(nrite, -+ x "(1x,'convergence to minimum position selected')") -+ endif -+ -+ return -+ end subroutine print_optim -+ -+ function energy_unit() -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for assigning energy conversion factors -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idum -+ real(8) energy_unit -+ -+ energy_unit=1.d0 -+ if(findstring('ev',record,idum))then -+ energy_unit=9648.530821d0 -+ elseif(findstring('kev',record,idum))then -+ energy_unit=9648530.821d0 -+ elseif(findstring('kcal',record,idum))then -+ energy_unit=418.4d0 -+ elseif(findstring('kj',record,idum))then -+ energy_unit=1.d2 -+ elseif(findstring('k',record,idum))then -+ energy_unit=boltz -+ endif -+ -+ return -+ end function energy_unit -+ -+ subroutine solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for solvation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,endsol,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ endsol=.false. -+ -+ nsolva=intstr(directive,lenrec,idum) -+ isolva=intstr(directive,lenrec,idum) -+ -+ if(nsolva.eq.0.and.isolva.eq.0)then -+ -+ do while(.not.endsol) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endsol',directive,idum))then -+ endsol=.true. -+ elseif(findstring('enddec',directive,idum))then -+ endsol=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=max(intstr(directive,lenrec,idum),1) -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'solvation calculation selected', -+ x /,1x,'start of solvation calculation ',i10, -+ x /,1x,'solvation calculation interval ',i10)") -+ x nsolva,isolva -+ -+ endif -+ -+ return -+ end subroutine solvation_option -+ -+ subroutine free_energy_option(directive,lfree,lfrmas,idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for free energy option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lfree,lfrmas,endfre,safe -+ integer idnode,idum -+ -+ mfree=1 -+ kfree=1 -+ lfree=.true. -+ lfrmas=.false. -+ endfre=.false. -+ -+ do while(.not.endfre) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endfre',directive,idum))then -+ endfre=.true. -+ elseif(findstring('start',directive,idum))then -+ nfrn=intstr(directive,lenrec,idum) -+ elseif(findstring('interval',directive,idum))then -+ ifrn=intstr(directive,lenrec,idum) -+ elseif(findstring('lambda',directive,idum))then -+ pfree=dblstr(directive,lenrec,idum) -+ elseif(findstring('mix',directive,idum))then -+ mfree=intstr(directive,lenrec,idum) -+ elseif(findstring('expo',directive,idum))then -+ kfree=intstr(directive,lenrec,idum) -+ elseif(findstring('reset_mass',directive,idum))then -+ lfrmas=.true. -+ if(findstring('false',directive,idum))lfrmas=.false. -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(mfree.eq.1)kfree=1 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'free energy option selected', -+ x /,1x,'start of free energy calculation ',i10, -+ x /,1x,'sampling interval ',i10, -+ x /,1x,'free energy parameter (lambda) ',f10.3, -+ x /,1x,'mixing rule selected ',i10, -+ x /,1x,'mixing rule exponent ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10, -+ x /,1x,'mass scaling option ',l10)") -+ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas -+ -+ endif -+ -+c define free energy scaling parameters -+ -+ call freegen() -+ -+ return -+ end subroutine free_energy_option -+ -+ subroutine excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for excitation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lexcite,lghost,endexc,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lexcite=.true. -+ endexc=.false. -+ -+ do while(.not.endexc) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endexc',directive,idum))then -+ endexc=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'excitation option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,ind_fre -+ -+ endif -+ -+ return -+ end subroutine excitation_option -+ -+ subroutine switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for switching option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lswitch,lghost,endswi,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lswitch=.true. -+ endswi=.false. -+ niswitch=0 -+ -+ do while(.not.endswi) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endswi',directive,idum))then -+ endswi=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('period',directive,idum))then -+ niswitch=max(intstr(directive,lenrec,idum),2) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(niswitch.eq.0)niswitch=nsolva -+ nswitch=nsolva -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'switching option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'switching period ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,niswitch,ind_fre -+ -+ endif -+ -+ return -+ end subroutine switching_option -+ -+ end module define_system_module -+ -diff -urN dl_class_1.9.orig/srcmod/define_system_module.f.preplumed dl_class_1.9/srcmod/define_system_module.f.preplumed ---- dl_class_1.9.orig/srcmod/define_system_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/define_system_module.f.preplumed 2011-10-17 17:32:15.000000000 +0200 -@@ -0,0 +1,5994 @@ -+ module define_system_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007, solvation, free energy -+c and excitation -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use dihedral_module -+ use ensemble_tools_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use inversion_module -+ use metafreeze_module -+ use metal_module -+ use parse_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use vdw_module -+ -+ contains -+ -+ subroutine simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the simulation control -+c parameters -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992. -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c modified -+c author - t.forester may 1993 -+c amended - t.forester sept 1994 - dl_poly_1.1 -+c amended - t.forester nov 1994 - macro version -+c amended - w.smith dec 1994 - t3d adaptation -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 hms -+ character*1 directive(lenrec) -+ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc -+ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe -+ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill -+ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau -+ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo -+ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn -+ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit -+ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack -+ integer idum,imcon,keyver,keytol,nblock,blkout,numgau -+ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol -+ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units -+ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin -+ real(8) prntim -+ -+CSGIC real(8) dummy -+CCRAY real(8) dummy -+CFFTWc FFTW instruction codes -+CFFTW -+CFFTW integer FFTW_FORWARD,FFTW_BACKWARD -+CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) -+CFFTW -+CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL -+CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) -+CFFTW -+CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE -+CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) -+CFFTW -+CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM -+CFFTW parameter (FFTW_OUT_OF_PLACE=0) -+CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) -+CFFTW -+CFFTW integer FFTW_THREADSAFE -+CFFTW parameter (FFTW_THREADSAFE=128) -+CFFTW -+ -+c intitialize system variables: temperature,pressure,ensemble key -+c force key, cutoff, primary cutoff, verlet shell width, relative -+c dielectric constant,timestep,temperature scaling flag, -+c temp scaling interval -+ -+ mode=0 -+ nhko=0 -+ nlatt=0 -+ nsteql=0 -+ nstrun=0 -+ minstp=0 -+ keybpd=0 -+ keyres=0 -+ keyens=0 -+ keyver=0 -+ taut=0.d0 -+ nstbts=0 -+ nstbgr=0 -+ nsbzdn=0 -+ nstbpo=100 -+ nstack=mxstak -+ intsta=0 -+ nstraj=0 -+ istraj=1 -+ keytrj=0 -+ numgau=1 -+ alpha=0.d0 -+ kmax1=0 -+ kmax2=0 -+ kmax3=0 -+ nospl=min(8,mxspl) -+ isolva=1 -+ nsolva=0 -+ niswitch=0 -+ nswitch=0 -+ nofic=1000 -+ -+ fmax=1000.d0 -+ keyfce=0 -+ multt=1 -+ keytol=0 -+ tstep=0.d0 -+ temp=0.d0 -+ press=0.d0 -+ rcut=0.d0 -+ rprim=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ epsq=1.d0 -+ rlxtol=1.d0 -+ opttol=1.d0 -+ tolnce=1.d-8 -+ quattol=1.d-8 -+ timjob=0.d0 -+ timcls=0.d0 -+ delrdf=0.d0 -+ delzdn=0.d0 -+ zlen=0.d0 -+ ehit=0.d0 -+ xhit=0.d0 -+ yhit=0.d0 -+ zhit=0.d0 -+ vmin=0.d0 -+ ebias=0.d0 -+ catchrad=0.d0 -+ pfree=0.d0 -+ -+ lhit=.false. -+ lbpd=.false. -+ ltad=.false. -+ lneb=.false. -+ loop=.true. -+ lnfic=.false. -+ lpsoc=.false. -+ lzero=.false. -+ ltscal=.false. -+ lewald=.false. -+ lspme=.false. -+ lhke=.false. -+ lgofr=.false. -+ lpgr=.false. -+ lzeql=.true. -+ loptim=.false. -+ lminim=.false. -+ lminopt=.false. -+ ltraj=.false. -+ lfcap=.false. -+ ltemp=.false. -+ lstep=.false. -+ lcut=.false. -+ ldelr=.false. -+ lprim=.false. -+ lforc=.false. -+ lens=.false. -+ lvdw=.false. -+ lrvdw=.false. -+ lpres=.false. -+ kill=.false. -+ lnsq=.false. -+ lzden=.false. -+ nolink=.false. -+ newgau=.false. -+ prechk=.false. -+ tadall=.false. -+ lsolva=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lexcite=.false. -+ lswitch=.false. -+ lghost=.false. -+ nebgo=.true. -+ seek='all ' -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open(nread,file='CONTROL',status='old') -+ -+c read job title -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+ call copystring(record,sysname,80) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, -+ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") -+ x sysname -+ -+ endif -+ -+c read and process directives from CONTROL file -+ -+ do while(loop) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+c convert to lowercase and strip out leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('redirect',directive,idum))then -+ -+c ignore this option in this context -+ cycle -+ -+ elseif(findstring('steps',directive,idum))then -+ -+c number of timesteps -+ -+ nstrun=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun -+ -+ elseif(findstring('integ',directive,idum))then -+ -+c choice of integration algorithm -+ -+ if(findstring('leapfrog',directive,idum))then -+ -+ keyver=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'leapfrog verlet integration selected')") -+ -+ elseif(findstring('velocity',directive,idum))then -+ -+ keyver=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'velocity verlet integration selected')") -+ -+ endif -+ -+ elseif(findstring('no fic',directive,idum))then -+ -+c cancel possible "flying ice cube" in Berendsen thermostats -+ -+ lnfic=.true. -+ nofic=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('shells',directive,idum).and. -+ x findstring('on',directive,idum).and. -+ x findstring('cores',directive,idum))then -+ -+c put shells on cores at start - shell model only (else null) -+ -+ lpsoc=.true. -+ -+ elseif(findstring('densvar',directive,idum))then -+ -+c specify allowed density variation -+ -+ densvar=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") -+ x densvar -+ -+ elseif(findstring('no link',directive,idum))then -+ -+c switch off link cell option -+ -+ nolink=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'link cells option deactivated')") -+ -+ elseif(findstring('equil',directive,idum))then -+ -+c number of equilibration timesteps -+ -+ nsteql=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration period ',3x,i10)")nsteql -+ -+ elseif(findstring('restart',directive,idum))then -+ -+c restart control -+ -+ if(findstring('noscale',directive,idum))then -+ -+ keyres=3 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'noscale restart requested')") -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ keyres=2 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'scaled restart requested')") -+ -+ else -+ -+ keyres=1 -+ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") -+ -+ endif -+ -+ elseif(findstring('ensemble',directive,idum))then -+ -+c ensemble selection -+ -+ call ensemble_selection(directive,lens,kill,idnode,keyens, -+ x mode,taut,taup) -+ -+ elseif(findstring('regauss',directive,idum))then -+ -+c re-initialise velocities option (regaussing) -+ -+ newgau=.true. -+ numgau=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'regaussing option activated', -+ x /,1x,'regaussing interval set to ',3x,i10)") -+ x numgau -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ nstbts=intstr(directive,lenrec,idum) -+ if(nstbts.gt.0)then -+ ltscal=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'temperature scaling on' -+ x /,1x,'temperature scaling interval',3x,i10)") -+ x nstbts -+ -+ endif -+ -+ elseif(findstring('rdf',directive,idum))then -+ -+ if(findstring('print',directive,idum))then -+ -+ lpgr=.true. -+ lpgr=(lgofr.and.lpgr) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'g(r) printing option on ')") -+ -+ else -+ -+ lgofr=.true. -+ nstbgr=intstr(directive,lenrec,idum) -+ delrdf=dblstr(directive,lenrec,idum) -+ if(nstbgr.eq.0)nstbgr=10 -+ if(delrdf.lt.1.d-8)delrdf=0.05d0 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'radial distribution functions on ', -+ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr -+ write(nrite, -+ x "(1x,'g(r) bin width ',3x,1p,e12.4)") -+ x delrdf -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('zden',directive,idum))then -+ -+ lzden=.true. -+ nsbzdn=intstr(directive,lenrec,idum) -+ delzdn=dblstr(directive,lenrec,idum) -+ zlen=dblstr(directive,lenrec,idum) -+ if(nsbzdn.eq.0)nsbzdn=10 -+ if(delzdn.lt.1.d-8)then -+ zlen=0.1d0*dble(mxzdn) -+ delzdn=0.1d0 -+ elseif(zlen.lt.1.d-8)then -+ zlen=delzdn*dble(mxzdn) -+ endif -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'Z density profile requested', -+ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn -+ write(nrite, -+ x "(1x,'zdensity bin width ',3x,1p,e12.4)") -+ x delzdn -+ write(nrite, -+ x "(1x,'zdensity range ',3x,1p,e12.4)") -+ x zlen -+ -+ endif -+ -+ elseif(findstring('collect',directive,idum))then -+ -+ lzeql=.false. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration included in overall averages')") -+ -+ elseif(findstring('neb',directive,idum))then -+ -+c activate nudged elastic band option -+ -+ call neb_option(directive,lneb,lminopt,idnode, -+ x numneb,keytol,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('impact',directive,idum))then -+ -+c activate the impact option -+ -+ if(lhit)call error(idnode,516) -+ lhit=.true. -+ khit=intstr(directive,lenrec,idum) -+ nhit=intstr(directive,lenrec,idum) -+ ehit=dblstr(directive,lenrec,idum) -+ xhit=dblstr(directive,lenrec,idum) -+ yhit=dblstr(directive,lenrec,idum) -+ zhit=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'impact option selected')") -+ write(nrite,"( -+ x /,1x,'identity of impact atom ',i10, -+ x /,1x,'time step of impact ',i10, -+ x /,1x,'impact recoil energy (keV) ',1p,e12.4, -+ x /,1x,'impact direction (x component) ',1p,e12.4, -+ x /,1x,'impact direction (y component) ',1p,e12.4, -+ x /,1x,'impact direction (z component) ',1p,e12.4)") -+ x khit,nhit,ehit,xhit,yhit,zhit -+ -+ endif -+ -+c convert impact energy from keV to internal units -+ -+ ehit=ehit*9648530.821d0 -+ -+ elseif(findstring('bpd',directive,idum))then -+ -+c activate the BPD option -+ -+ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, -+ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, -+ x catchrad,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('tad',directive,idum))then -+ -+c activate temperature accelerated dynamics option -+ -+ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, -+ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, -+ x deltad,opttol,hyp_units) -+ -+ elseif(findstring('minim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ minstp=intstr(directive,lenrec,idum) -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ lminim=.true. -+ loptim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'minimisation programme requested')") -+ write(nrite, -+ x "(1x,'structure minimisation interval ', -+ x 3x,i10)")minstp -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'structure minimisation tolerance', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('optim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ loptim=.true. -+ lminim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'structure optimisation requested')") -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'tolerance for structure optimisation ', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('zero',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ temp=1.d0 -+ lzero=.true. -+ loptim=.false. -+ lminim=.false. -+ ltemp=.true. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'zero K optimisation requested')") -+ write(nrite, -+ x "(' temperature reset to',1p,e12.4)")1.d0 -+ -+ endif -+ -+ else if(findstring('solva',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ else if(findstring('decomp',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ elseif(findstring('metafreeze',directive,idum).or. -+ x findstring('metadyn',directive,idum))then -+ -+c activate metadynamics option - d. quigley -+ -+ call metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+ else if(findstring('free',directive,idum))then -+ -+ call free_energy_option(directive,lfree,lfrmas,idnode) -+ -+ else if(findstring('excite',directive,idum))then -+ -+ call excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+ else if(findstring('switch',directive,idum))then -+ -+ call switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+ elseif(findstring('print',directive,idum))then -+ -+ nstbpo=intstr(directive,lenrec,idum) -+ nstbpo=max(nstbpo,1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data printing interval ',3x,i10)")nstbpo -+ -+ elseif(findstring('stack',directive,idum))then -+ -+ nstack=intstr(directive,lenrec,idum) -+ -+c reset stack limit if too large -+ -+ nstack=min(nstack,mxstak) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data stacking interval ',3x,i10)")nstack -+ -+ elseif(findstring('stats',directive,idum))then -+ -+ intsta=intstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'statistics file interval ',3x,i10)")intsta -+ -+ elseif(findstring('traj',directive,idum))then -+ -+ ltraj=.true. -+ nstraj=intstr(directive,lenrec,idum) -+ istraj=max(intstr(directive,lenrec,idum),1) -+ keytrj=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'trajectory file option on ', -+ x /,1x,'trajectory file start ',3x,i10, -+ x /,1x,'trajectory file interval ',3x,i10 -+ x /,1x,'trajectory file info key ',3x,i10)") -+ x nstraj,istraj,keytrj -+ -+ elseif(findstring('ewald',directive,idum).or. -+ x findstring('spme',directive,idum).or. -+ x findstring('hke',directive,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ call ewald_selection(directive,lhke,lspme,lewald,lcut, -+ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, -+ x kmax3,alpha,rcut) -+ -+ elseif(findstring('distan',directive,idum))then -+ -+ keyfce=4 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('coul',directive,idum))then -+ -+ keyfce=6 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Coulombic potential')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('shift',directive,idum))then -+ -+ keyfce=8 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('reaction',directive,idum))then -+ -+ keyfce=10 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : reaction field')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('cap',directive,idum))then -+ -+ lfcap=.true. -+ fm=dblstr(directive,lenrec,idum) -+ if(fm.gt.0.d0)fmax=fm -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax -+ -+ elseif(findstring('no vdw',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'short-range potential terms off')") -+ lvdw=.true. -+ -+ elseif(findstring('no elec',directive,idum))then -+ -+ keyfce=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'electrostatic potential terms off')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('mult',directive,idum))then -+ -+ multt=max(intstr(directive,lenrec,idum),1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'multiple timestep interval ',3x,i10)")multt -+ -+ elseif(findstring('timestep',directive,idum))then -+ -+ lstep=.true. -+ tstep=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep -+ -+ elseif(findstring('temp',directive,idum))then -+ -+ ltemp=.true. -+ temp=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp -+ -+ elseif(findstring('pres',directive,idum))then -+ -+ press=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press -+ -+c convert from katm to internal units of pressure -+ -+ press=press/prsunt -+ lpres=.true. -+ -+ elseif(findstring('prim',directive,idum))then -+ -+c primary cutoff -+ -+ lprim=.true. -+ rprim=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim -+ -+ elseif(findstring('rvdw',directive,idum))then -+ -+c cutoff for short range potentials -+ -+ rvdw=dblstr(directive,lenrec,idum) -+ lrvdw=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw -+ -+ elseif(findstring('delr',directive,idum))then -+ -+c Verlet shell width -+ -+ ldelr=.true. -+ delr=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr -+ -+ elseif(findstring('cut',directive,idum))then -+ -+c cutoff -+ -+ lcut=.true. -+ rcut=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut -+ -+ elseif(findstring('eps',directive,idum))then -+ -+c relative dielectric constant -+ -+ epsq=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq -+ -+ elseif(findstring('rlxtol',directive,idum))then -+ -+c force tolerance for shell relaxation -+ -+ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol -+ -+ elseif(findstring('shake',directive,idum))then -+ -+c tolerance for shake -+ -+ tolnce=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce -+ -+ elseif(findstring('quaternion',directive,idum))then -+ -+c tolerance for quaternion integration -+ -+ quattol=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol -+ -+ elseif(findstring('job time',directive,idum))then -+ -+c time for simulation (in seconds/minutes/hours/days or indefinite) -+ -+ if(findstring('indef',directive,idum))then -+ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 -+ else -+ timjob=dblstr(directive,lenrec,idum) -+ if(findstring('m',directive,idum))then -+ timjob=6.0d1*timjob -+ elseif(findstring('h',directive,idum))then -+ timjob=3.6d3*timjob -+ elseif(findstring('d',directive,idum))then -+ timjob=8.64d4*timjob -+ endif -+ endif -+ -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") -+ x hms,prntim -+ -+ elseif(findstring('close time',directive,idum))then -+ -+c time for winding up a job (in seconds) -+ -+ timcls=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls -+ -+ elseif(findstring('all pairs',directive,idum))then -+ -+c full minimum image - N^2 interactions each timestep -+ -+ lnsq=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'All-pairs requested for electrostatics')") -+ -+ elseif(findstring('nospl',directive,idum))then -+ -+c set ewald_spme interpolation order -+ -+ nospl=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('finish',directive,idum))then -+ -+c safe termination of reading CONTROL file -+ -+ loop=.false. -+ -+ else -+ -+c unrecognised directive in control file -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ enddo -+ -+c check on steps before temperature scaling -+ -+ if(nstbts.eq.0)nstbts=nstrun+1 -+ -+c conduct consistency checks on directives -+ -+ if(lminim)then -+ -+c ensure final configuration follows minimisation -+ -+ if(minstp.eq.0)minstp=nstrun -+ nstrun=minstp*(nstrun/minstp) -+ -+ endif -+ -+c check force activation options -+ -+ if(.not.lforc)then -+ -+c check if any forces are in operation -+ -+ if(.not.lvdw)then -+ -+ kill=.true. -+ call error(idnode,-383) -+ -+ endif -+ -+ else -+ -+c turn on short range forces -+ -+ if(lvdw)then -+ -+ if(keyfce.eq.0)then -+ -+ lcut=.true. -+ ldelr=.true. -+ -+ endif -+ -+ else -+ -+ keyfce=keyfce+1 -+ -+ endif -+ -+ endif -+ -+c if tad selected use only leap frog -+ -+ if(ltad.and.keyver.eq.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to leapfrog for TAD dynamics')") -+ keyver=0 -+ -+ endif -+ -+c error checking -+ -+ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then -+ -+ kill=.true. -+ call error(idnode,-2360) -+ -+ endif -+ -+ if(lsolva.or.lfree.or.lexcite.or.lswitch)then -+ -+ if(lspme)then -+ -+ kill=.true. -+ call error(idnode,-601) -+ -+ endif -+ -+ if(lhke)then -+ -+ kill=.true. -+ call error(idnode,-602) -+ -+ endif -+ -+ endif -+ -+ if(lghost.and.nstbgr.ne.isolva)then -+ -+ call warning(idnode,130,dble(isolva),0.d0,0.d0) -+ nstbgr=isolva -+ -+ endif -+ if(lfree.and.lgofr)then -+ -+ call warning(idnode,140,0.d0,0.d0,0.d0) -+ lgofr=.false. -+ lpgr=.false. -+ -+ endif -+ if(loptim)then -+ -+ temp=0.d0 -+ -+ elseif(.not.ltemp)then -+ -+ kill=.true. -+ call error(idnode,-380) -+ -+ endif -+ -+ if(.not.lstep)then -+ -+ kill=.true. -+ call error(idnode,-381) -+ -+ endif -+ -+ if(.not.lcut)then -+ -+ kill=.true. -+ call error(idnode,-382) -+ -+ endif -+ -+c check if van der Waals cutoff set -+ -+ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then -+ -+ if(rcut.gt.0.d0)then -+ -+ rvdw=rcut -+ -+ else -+ -+ kill=.true. -+ call error(idnode,-402) -+ -+ endif -+ -+ endif -+ -+ if(.not.ldelr)then -+ -+ kill=.true. -+ call error(idnode,-384) -+ -+ endif -+ -+ if(multt.gt.1)then -+ -+ if(.not.lprim)then -+ -+ kill=.true. -+ call error(idnode,-385) -+ -+ elseif(rprim.gt.rcut)then -+ -+ kill=.true. -+ call error(idnode,-386) -+ -+ endif -+ -+ endif -+ -+c check settings in nvt ensemble -+ -+ if(keyens.ge.2.and.keyens.le.3)then -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ -+ endif -+ -+c check settings in npt ensemble -+ -+ if(keyens.ge.4.and.keyens.le.7)then -+ -+ if(.not.lpres)then -+ -+ kill=.true. -+ call error(idnode,-387) -+ -+ endif -+ -+c check barostat and thermostat rates non zero -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ if(taup.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-466) -+ -+ endif -+ -+ endif -+ -+c check multiple timestep cutoffs are sensible -+ -+ if(multt.gt.1)then -+ if(rcut-rprim.lt.delr)then -+ -+ kill=.true. -+ call error(idnode,-398) -+ -+ endif -+ endif -+ -+c check rcut > rvdw (for verlet list constructor) -+ -+ if(rcut.lt.rvdw)then -+ -+ kill=.true. -+ call error(idnode,-400) -+ -+ endif -+ -+c check spme is not being used with incorrect pbc -+ -+ if(lspme)then -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ kill=.true. -+ call error(idnode,-513) -+ -+ endif -+ -+ endif -+ -+c check on all-pairs calculation request -+ -+ if(lnsq)then -+ -+ if(multt.eq.1)then -+ -+ kill=.true. -+ call error(idnode,-422) -+ -+ endif -+ -+ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then -+ -+ kill=.true. -+ call error(idnode,-424) -+ -+ endif -+ -+ endif -+ -+c cancel rdf option if no vdw or coulombic forces -+ -+ if(lgofr.and.keyfce.eq.0)then -+ -+ lgofr=.false. -+ call warning(idnode,120,0.d0,0.d0,0.d0) -+ -+ endif -+ -+ if(kill)call abort_control_read(2,idnode,nread) -+ -+c close CONTROL file -+ -+ if(idnode.eq.0)close(nread) -+ -+ return -+ end subroutine simdef -+ -+ subroutine sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the molecular specifications -+c of the system to be simulated -+c version for rigid unit data and neutral groups -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992. -+c amended - w.smith march 1994 -+c amended - t.forester april 1994 -+c amended - w.smith dec 1994 - getrec etc -+c amended - a.smondyrev may 2000 - keydih=5 for -+c ryckaert-bellemans potential in dihedrals -+c amended - a.smondyrev may 2000 - keydih=6 for -+c fluorinated ryckaert-bellemans potential in dihedrals -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf -+ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost -+ -+ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls -+ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite -+ integer nsite,nconst,nangle,ndihed,ninver,nbonds -+ integer nteth,nspmf,itmols,i,idum,keyver -+ integer ntpter,keyshl,iatm,natmsr,ntghost -+ -+ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb -+ real(8) sumchg -+ -+ data loop1/.true./,loop2/.true./ -+ -+c initialise system counters: atomic site index, number of -+c constraints, bond angles, dihedrals, inversions, chemical bonds, -+c unique atom types, total number of atoms, -+c total number of rigid groups, number of tethered atoms, -+c number of three body potentials -+ -+ nsite=0 -+ nconst=0 -+ nangle=0 -+ ndihed=0 -+ ninver=0 -+ nbonds=0 -+ ntpatm=0 -+ natms=0 -+ ngrp=0 -+ nteth=0 -+ ntptbp=0 -+ ntpter=0 -+ ntpmet=0 -+ ntpvdw=0 -+ ntpfbp=0 -+ nshels=0 -+ nspmf=0 -+ keyfld=0 -+ keyshl=0 -+ ntghost=0 -+ natmsr=0 -+ ntcons_ghost=0 -+ -+ lunits=.false. -+ lmols=.false. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ lshl=.false. -+ lpmf=.false. -+ engunit=1.d0 -+ -+ numbonds(:)=0 -+ numpmf(:)=0 -+ numcon(:)=0 -+ numdih(:)=0 -+ numinv(:)=0 -+ numgrp(:)=0 -+ numsit(:)=0 -+ numteth(:)=0 -+ numshl(:)=0 -+ npmf(:)=0 -+ indpmf(:)=0 -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD',status='old') -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c convert to lowercase and remove leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('units',record,idum))then -+ -+c identify energy unit for input/output -+ -+ lunits=.true. -+ call define_units(idnode,engunit) -+ -+c neutral group control option -+ -+ elseif(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ if(idnode.eq.0) -+ x write(nrite,"(/,' neutral group implementation in use')") -+ -+c can't have neutral groups with all-pairs -+ -+ if(lnsq)call error(idnode,426) -+ -+c specify molecular species -+ -+ elseif(findstring('molecu',record,idum))then -+ -+c number of molecular types -+ -+ if(lmols)call error(idnode,11) -+ lmols=.true. -+ ntpmls=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") -+ x ntpmls -+ -+ if(ntpmls.gt.mxtmls)call error(idnode,10) -+ -+c initialise total system charge -+ -+ sumchg=0.d0 -+ -+c read in molecular characteristics -+ -+ do itmols=1,ntpmls -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'molecular species type',9x,i10)") -+ x itmols -+ -+c name of molecular species -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call copystring(record,molnam(1,itmols),40) -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") -+ x (molnam(i,itmols),i=1,40) -+ -+c stop processing if energy unit has not been specified -+ -+ if(.not.lunits)call error(idnode,6) -+ -+c read molecular data -+ -+ loop2=.true. -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'number of molecules ', -+ x 10x,i10)")nummols(itmols) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+c read in atomic details -+ -+ call define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read core - shell spring parameters -+ -+ elseif(findstring('shell',record,idum))then -+ -+ lshl=.true. -+ call define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl, -+ x engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read chemical bond force constant and bondlength -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ call define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read bond atom indices and constraint bondlength -+ -+ elseif(findstring('constr',record,idum))then -+ -+ call define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read pmf bond atom indices, weights and constraint bondlength -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ if(lpmf)call error(idnode,484) -+ lpmf=.true. -+ call define_pmf(safe,idnode,itmols,nspmf) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular angular potential parameters -+ -+ elseif(findstring('angles',record,idum))then -+ -+ call define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular dihedral potential parameters -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ call define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular inversion potential parameters -+ -+ elseif(findstring('invers',record,idum))then -+ -+ call define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read rigid body data -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ call define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read tethered atom indices and tethering parameters -+ -+ elseif(findstring('teth',record,idum))then -+ -+ call define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c finish of data for one molecular type -+ -+ elseif(findstring('finish',record,idum))then -+ -+c running total of number of atoms in system -+ -+ natms=natms+nummols(itmols)*numsit(itmols) -+ if(natms.gt.mxatms)call error(idnode,75) -+ -+c check core-shell units are not both in same rigid body unit -+ -+ call check_shells(idnode,itmols,nshels,ngrp) -+ -+ loop2=.false. -+ -+ else -+ -+c error exit for unidentified directive in molecular data -+ -+ if(idnode.eq.0)write(nrite,'(12x,a)')record -+ call error(idnode,12) -+ -+ endif -+ -+ enddo -+ -+c construction of atmolt table for solvation calculation -+ -+ if(lsolva)then -+ -+ do iatm=natmsr+1,natms -+ atmolt(iatm)=itmols -+ enddo -+ natmsr=natms -+ -+ endif -+ -+ enddo -+ -+c construction of atm_fre table for free energy or excitation -+ -+ if(lfree.or.lexcite.or.lswitch)then -+ -+ atm_fre(:)=0 -+ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then -+ -+ do iatm=ind_fre(1),ind_fre(2) -+ atm_fre(iatm)=1 -+ enddo -+ -+ endif -+ -+ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then -+ -+ do iatm=ind_fre(3),ind_fre(4) -+ -+ atm_fre(iatm)=2 -+ if(lghost)ntghost=ntghost+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c calculate system charge -+ -+ call check_syschg(idnode,ntpmls,sumchg) -+ -+c read in the nonbonded potential energy parameters -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ call define_van_der_waals -+ x (safe,ltable,lunits,lmols,idnode,ntpvdw, -+ x ntpatm,keyfce,dlrpot,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the metal potential energy parameters -+ -+ elseif(findstring('met',record,idum))then -+ -+ call define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the three body potential energy parameters -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ call define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the tersoff potential energy parameters -+ -+ elseif(findstring('tersoff',record,idum))then -+ -+ call define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the four body potential energy parameters -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ call define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read external field data -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c normal end of FIELD file -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. -+ x mod(keyfce,2).eq.1)call error(idnode,145) -+ -+c error exit for unidentified directive -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(100a)')record -+ call abort_field_read(2,idnode,nfield) -+ -+ endif -+ -+ enddo -+ -+c close force field file -+ -+ if(idnode.eq.0)close (nfield) -+ -+ -+ if(lshl.and.idnode.eq.0)then -+ -+ if(keyshl.eq.1)write(nrite, -+ x "(/,/,'adiabatic shell model in operation')") -+ -+ if(keyshl.eq.2)write(nrite, -+ x "(/,/,'relaxed shell model in operation')") -+ -+ endif -+ -+ if(lshl.and.keyshl.eq.0)call error(idnode,1951) -+ -+c if metadynamics and shell selected use only velocity verlet -+ -+ if(lshl.and.lmetadyn.and.keyver.eq.0)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to velocity verlet for metadynamics')") -+ keyver=1 -+ -+ endif -+ -+ return -+ end subroutine sysdef -+ -+ subroutine sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the configuration data file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 atname(8) -+ -+ logical loglnk,safe,lneut,nolink,lfree,lfrmas -+ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt -+ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz -+ integer m,l,ncells,idum,mxnode -+ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc -+ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi -+ real(8) width,dum1,dum2,test,com(3) -+ -+c open the system input file -+ -+ if(idnode.eq.0)open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ call copystring(record,cfgname,80) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ levcfg=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'selected image convention',6x,i10)")imcon -+ -+c check config file contents for consistent data -+ -+ if((imcon.eq.0.or.imcon.eq.6).and. -+ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) -+ x call error(idnode,180) -+ -+ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) -+ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) -+ -+ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) -+ x call error(idnode,390) -+ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 -+ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.eq.0)then -+ -+c if no periodic boundaries - set zero values for cell -+c vectors and cell volume -+ -+ cell(:)=0.d0 -+ volm=0.d0 -+ -+ else -+ -+c read cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+ endif -+ -+c read the atomic coordinates -+ -+ indatm=0 -+ indnam=0 -+ indneu=0 -+ safe=.true. -+ -+ do k=1,ntpmls -+ -+ do l=1,nummols(k) -+ -+ do m=1,numsit(k) -+ -+ indatm=indatm+1 -+ -+ if(indatm.gt.mxatms)call error(idnode,45) -+ -+ xxx(indatm)=0.d0 -+ yyy(indatm)=0.d0 -+ zzz(indatm)=0.d0 -+ vxx(indatm)=0.d0 -+ vyy(indatm)=0.d0 -+ vzz(indatm)=0.d0 -+ fxx(indatm)=0.d0 -+ fyy(indatm)=0.d0 -+ fzz(indatm)=0.d0 -+ -+ if(idnode.eq.0)then -+ -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ -+ elseif(levcfg.eq.1)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ -+ else -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce -+ -+ endif -+ -+c strip blanks off atom name -+ -+ call strip(atname,8) -+ -+ if(sitnam(indnam+m).eq.mkwd8(atname))then -+ -+ xxx(indatm)=xcoord -+ yyy(indatm)=ycoord -+ zzz(indatm)=zcoord -+ -+ if(levcfg.gt.0)then -+ -+ vxx(indatm)=xveloc -+ vyy(indatm)=yveloc -+ vzz(indatm)=zveloc -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ fxx(indatm)=xforce -+ fyy(indatm)=yforce -+ fzz(indatm)=zforce -+ -+ endif -+ -+ else -+ -+ write(nrite,"(/,/,'unidentified atom label :',8a1, -+ x ': atom number ',i5)")atname,indatm -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ call gstate(safe) -+ if(.not.safe)call error(idnode,25) -+ -+ ltype(indatm)=ltpsit(indnam+m) -+ weight(indatm)=wgtsit(indnam+m) -+ chge(indatm)=chgsit(indnam+m) -+ atmnam(indatm)=sitnam(indnam+m) -+ lstfrz(indatm)=lfzsit(indnam+m) -+ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu -+ -+c reset atomic masses according to free energy definitions -+ -+ if(lfree)then -+ -+ weight_sav(indatm)=weight(indatm) -+ -+ if(lfrmas)then -+ -+ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then -+ weight(indatm)=lambda1*weight(indatm) -+ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) -+ x then -+ weight(indatm)=lambda2*weight(indatm) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ indneu=indneu+nugrp(indnam+numsit(k)) -+ -+ enddo -+ -+ indnam=indnam+numsit(k) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(xxx,indatm,buffer) -+ call gdsum(yyy,indatm,buffer) -+ call gdsum(zzz,indatm,buffer) -+ -+ if(levcfg.gt.0)then -+ -+ call gdsum(vxx,indatm,buffer) -+ call gdsum(vyy,indatm,buffer) -+ call gdsum(vzz,indatm,buffer) -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ call gdsum(fxx,indatm,buffer) -+ call gdsum(fyy,indatm,buffer) -+ call gdsum(fzz,indatm,buffer) -+ -+ endif -+ -+ endif -+ -+c check integrity of cell vectors : for cubic, TO and RD cases -+c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) -+ -+ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then -+ -+ axx=(abs(cell(1))+abs(cell(5)))/2.d0 -+ test=1.d-8*axx -+ if(abs(cell(1)-axx).gt.test)call error(idnode,410) -+ if(abs(cell(5)-axx).gt.test)call error(idnode,410) -+ if(imcon.eq.5)then -+ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) -+ x call error(idnode,410) -+ else -+ if(abs(cell(9)-axx).gt.test)call error(idnode,410) -+ endif -+ -+ endif -+ -+c check integrity of hexagonal prism cell vectors -+ -+ if(imcon.eq.7)then -+ -+ rt3=sqrt(3.d0) -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,410) -+ -+ endif -+ -+c check 2D PBC for imcon=6 -+ -+ if(imcon.eq.6)then -+ -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c check for diagonal cell matrix if appropriate -+ -+ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. -+ x (imcon.eq.5).or.(imcon.eq.7))then -+ -+ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c put centre of mass at centre of coordinates if imcon=0 -+ -+ if(imcon.eq.0)then -+ -+ totmas=getmass(indatm,idnode,mxnode) -+ call getcom(indatm,idnode,mxnode,totmas,com) -+ -+ do i=1,indatm -+ -+ xxx(i)=xxx(i)-com(1) -+ yyy(i)=yyy(i)-com(2) -+ zzz(i)=zzz(i)-com(3) -+ -+ enddo -+ -+ endif -+ -+c set widths if unset - needed for check on link cells below -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ xhi=abs(xxx(1)) -+ yhi=abs(yyy(1)) -+ zhi=abs(zzz(1)) -+ do i=2,indatm -+ -+ xhi=max(xhi,abs(xxx(i))) -+ yhi=max(yhi,abs(yyy(i))) -+ zhi=max(zhi,abs(zzz(i))) -+ -+ enddo -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ if(imcon.eq.6.and.cell(9).lt.1.d-6)then -+ -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ endif -+ -+c calculate dimensional properties of simulation cell -+ -+ call dcell(cell,celprp) -+ -+ if(imcon.eq.0)then -+ -+ volm=0.d0 -+ -+ elseif(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ else -+ -+ volm=celprp(10) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") -+ write(nrite,"(21x,3f12.6)")cell -+ -+ write(nrite, -+ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm -+ -+ endif -+ -+c check value of cutoff and reset if necessary -+ -+ if(imcon.gt.0)then -+ -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 -+ if(imcon.eq.5)width=cell(1)/2.d0 -+ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 -+ -+c halt program if potential cutoff exceeds cell width -+ -+ if(rcut.gt.width)call error(idnode,95) -+ -+ endif -+ -+c decide on whether to use link cells for verlet list constructor -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ -+ ilx=int(celprp(7)/(rcut+delr)) -+ ily=int(celprp(8)/(rcut+delr)) -+ ilz=int(celprp(9)/(rcut+delr)) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(lneut.and.ncells.le.36)loglnk=.false. -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(loglnk.and.ncells.gt.mxcell)then -+ -+ dum1=dble(ncells) -+ dum2=dble(mxcell) -+ call warning(idnode,90,dum1,dum2,dum2) -+ loglnk=.false. -+ -+ endif -+ -+ endif -+ -+ if(loglnk.and.idnode.eq.0) -+ x write(nrite,"(/,/,' link cell algorithm in use')") -+ -+ if(idnode.eq.0)close (nconf) -+ -+c ensure PBC compliance of starting structure -+ -+ if(keyres.eq.0.and.imcon.gt.0)then -+ -+ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ -+c error exit for config file read -+ -+ 100 call abort_config_read(2,idnode,nconf) -+ -+ end subroutine sysgen -+ -+ subroutine sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the REVIVE file data and -+c defining the initial thermodynamic and structural accumulators. -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc -+ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc -+ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw -+ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm -+ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost -+ real(8) chit_shl -+ -+c read or initialise accumulator arrays -+ -+ if(keyres.eq.1.and.idnode.eq.0)then -+ -+c read accumulator data from dump file -+ -+ open(nrest,file='REVOLD',form='unformatted') -+ -+ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, -+ x tboost,chit_shl -+ read(nrest) virtot,vircom,eta,strcns,strbod -+ read(nrest) stpval -+ read(nrest) sumval -+ read(nrest) ssqval -+ read(nrest) zumval -+ read(nrest) ravval -+ read(nrest) stkval -+ read(nrest) xx0,yy0,zz0 -+ read(nrest) xxs,yys,zzs -+ -+ if(lgofr) read(nrest)rdf -+ if(lzden) read(nrest)zdens -+ -+ nstep=nint(dnstep) -+ numacc=nint(dnumac) -+ numrdf=nint(dnumrd) -+ nzden=nint(dnzden) -+ close (nrest) -+ -+ else -+ -+c initialise step counters -+ -+ nstep=0 -+ numacc=0 -+ numrdf=0 -+ nzden=0 -+ -+c initialise temperature and pressure coupling parameters -+c and integral for conserved quantity -+ -+ chit=0.d0 -+ chip=0.d0 -+ conint=0.d0 -+ virtot=0.d0 -+ vircom=0.d0 -+ chit_shl=0.d0 -+ do i=1,9 -+ -+ eta(i)=0.d0 -+ strcns(i)=0.d0 -+ strbod(i)=0.d0 -+ -+ enddo -+ -+c initialise accumulator arrays -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ zumval(i)=0.d0 -+ ravval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ xxs(i)=0.d0 -+ yys(i)=0.d0 -+ zzs(i)=0.d0 -+ -+ enddo -+ -+ do j=1,mxnstk -+ -+ do i=1,mxstak -+ -+ stkval(i,j)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ zdens(j,i)=0.d0 -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c put shells on cores at start -+ -+ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) -+ x call put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c if restart then broadcast stored variables via a global sum -+ -+ if(keyres.eq.1.and.mxnode.gt.1)then -+ -+ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) -+ x call error(idnode,186) -+ -+ buffer(1)=chit -+ buffer(2)=chip -+ buffer(3)=conint -+ buffer(4)=dble(nstep) -+ buffer(5)=dble(numacc) -+ buffer(6)=dble(numrdf) -+ buffer(7)=dble(nzden) -+ buffer(8)=tboost -+ buffer(9)=virtot -+ buffer(10)=vircom -+ buffer(11)=chit_shl -+ call gdsum(buffer(1),11,buffer(12)) -+ chit=buffer(1) -+ chip=buffer(2) -+ conint=buffer(3) -+ nstep=nint(buffer(4)) -+ numacc=nint(buffer(5)) -+ numrdf=nint(buffer(6)) -+ nzden=nint(buffer(7)) -+ tboost=buffer(8) -+ virtot=buffer(9) -+ vircom=buffer(10) -+ chit_shl=buffer(11) -+ -+ call gdsum(eta,9,buffer) -+ call gdsum(strcns,9,buffer) -+ call gdsum(strbod,9,buffer) -+ call gdsum(stpval,mxnstk,buffer) -+ call gdsum(sumval,mxnstk,buffer) -+ call gdsum(ssqval,mxnstk,buffer) -+ call gdsum(zumval,mxnstk,buffer) -+ call gdsum(ravval,mxnstk,buffer) -+ call gdsum(stkval,mxnstk*mxstak,buffer) -+ call gdsum(xx0,natms,buffer) -+ call gdsum(yy0,natms,buffer) -+ call gdsum(zz0,natms,buffer) -+ call gdsum(xxs,natms,buffer) -+ call gdsum(yys,natms,buffer) -+ call gdsum(zzs,natms,buffer) -+ -+c for rdf table - broadcast and normalise -+ -+ if(lgofr)then -+ -+ do k=1,mxxtyp -+ -+ call gdsum(rdf(1,k),mxrdf,buffer) -+ -+ do j=1,mxrdf -+ rdf(j,k)=rdf(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do k=1,mxatyp -+ -+ call gdsum(zdens(1,k),mxzdn,buffer) -+ -+ do j=1,mxzdn -+ zdens(j,k)=zdens(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities and long-range corrections -+ -+ elrc=0.d0 -+ virlrc=0.d0 -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 -+ -+ call lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) -+ -+ if(lmetab.or.ntpmet.eq.0)then -+ -+ elrcm(0)=0.d0 -+ vlrcm(0)=0.d0 -+ -+ else -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 -+ -+ return -+ end subroutine sysinit -+ -+ subroutine systemp -+ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for setting the initial system temperature -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl -+ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq -+ -+c number of degrees of freedom -+c 3 for com translation -+c 3 for angular momentum about origin (non-periodic systems only) -+ -+ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre -+ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 -+ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) -+ degshl=dble(3*ntshl) -+ -+c lose one degree of freedom if temperature constrained -+c gaussian constraints -+ -+c if(keyens.eq.1)degfre=degfre-1.d0 -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, -+ x ' rotational degrees of freedom ',f20.0,/, -+ x ' shell pseudo degrees of freedom',f20.0)") -+ x degfre,degrot,degshl -+ if(degfre.lt.1.d0)call error(idnode,350) -+ -+c define reciprocal masses of atoms -+ -+ do i=1,natms -+ -+ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then -+ -+ rmass(i)=0.d0 -+ weight(i)=0.d0 -+ -+ else -+ -+ rmass(i)=1.d0/weight(i) -+ -+ endif -+ -+ enddo -+ -+c generate starting velocities -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+ if(keyres.eq.0)then -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ elseif(keyres.eq.1.or.keyres.eq.3)then -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ elseif(keyres.eq.2)then -+ -+ if(ngrp.gt.0)then -+ -+ call vscaleg -+ x (idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ elseif(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c print out sample of initial configuration -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'sample of starting configuration',/)") -+ -+ io=(natms+19)/20 -+ if((levcfg.le.1).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") -+ if((levcfg.eq.2).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', -+ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") -+ -+ do i=1,natms,io -+ -+ if(levcfg.le.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) -+ -+ elseif(levcfg.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i), -+ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine systemp -+ -+ subroutine sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine defining global bookkeeping -+c arrays -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost -+ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i -+ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl -+ integer ntghost,natms2 -+ real(8) degfre,degrot -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c neutral group bookkeeping -+ -+ call neutbook(lneut,idnode,natms,nneut) -+ -+c rigid body bookkeeping -+ -+ call quatbook -+ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, -+ x ntfree,degfre,degrot) -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost -+ -+ endif -+ -+c construct list of excluded pair interactions -+ -+ if(lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ call excludeneu(idnode,mxnode,nneut) -+ -+ elseif(.not.lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ -+ if(loglnk)then -+ -+ call exclude_link(idnode,mxnode,ntpmls) -+ -+ else -+ -+ call exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+ endif -+ -+ endif -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost -+ -+ endif -+ -+c construct interaction lists for bonded forces -+ -+ call intlist -+ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c adaptations for solvation and excitation simulations -+ -+ if(lsolva.or.lghost)then -+ -+ natmsf=0 -+ natmsl=0 -+ natm_sol(:)=0 -+ const_sol(:)=numcon(:)*nummols(:) -+ rigid_sol(:)=numgrp(:)*nummols(:) -+ -+ if(ngrp.eq.0)then -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ else -+ -+ ii=1 -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstgot_sol(ii).eq.isol)then -+ ii=ii+1 -+ else -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ -+ endif -+ -+ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost -+ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) -+ -+ endif -+ -+ return -+ end subroutine sysbook -+ -+ subroutine define_units(idnode,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting energy units -+c -+c copyright - daresbury laboratory -+c author - w. smith august 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,idum,i -+ real(8) engunit -+ logical blank -+ -+ blank=.true. -+ -+ do i=6,lenrec -+ if(record(i).ne.' ')blank=.false. -+ enddo -+ -+ if(blank)then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal ', -+ x 'units ')") -+ -+ elseif(findstring('ev',record,idum))then -+ -+ engunit=9648.530821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=electron volts ')") -+ -+ elseif(findstring('kev',record,idum))then -+ -+ engunit=9648530.821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kilo electron volts ')") -+ -+ elseif(findstring('kcal',record,idum))then -+ -+ engunit=418.4d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kcal/ mol ')") -+ -+ elseif(findstring('kj',record,idum))then -+ -+ engunit=1.d2 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kjoule/mol ')") -+ -+ elseif(findstring('k',record,idum))then -+ -+ engunit=boltz -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kelvin ')") -+ -+ elseif(findstring('internal',record,idum))then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal', -+ x ' units ')") -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(a)')record -+ call error(idnode,5) -+ -+ endif -+ -+ return -+ end subroutine define_units -+ -+ subroutine quatbook -+ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, -+ x degfre,degrot) -+ -+c************************************************************************** -+c -+c dl_poly subroutine for setting up bookkeeping for rigid bodies -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c************************************************************************* -+ -+ implicit none -+ -+ logical safe,pass1,pass2,linear,lsolva -+ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree -+ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id -+ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij -+ integer fngrp,lngrp -+ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 -+ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz -+ real(8) rotlim,rrr -+ -+ integer, allocatable :: ind(:,:),lstgot(:) -+ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) -+ -+ data fail/0,0,0,0,0/ -+ -+c allocate working arrays -+ -+ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) -+ allocate (accum(mxungp),stat=fail(5)) -+ do i=1,5 -+ if(fail(i).ne.0)call error(idnode,1790) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ igrp=0 -+ jgrp=0 -+ kgrp=0 -+ isite=0 -+ jr=0 -+ jt=0 -+ safe=.true. -+ degfre=0.d0 -+ degrot=0.d0 -+ -+c rigid body identifier -+ -+ do i=1,natms -+ lstbod(i)=0 -+ enddo -+ -+c number of rigid groups in system -+ -+ ngrp=0 -+ do itmols=1,ntpmls -+ ngrp=ngrp+nummols(itmols)*numgrp(itmols) -+ enddo -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if(igrp.le.mxgrp)then -+ -+ lstgtp(igrp)=listyp(lgrp+kgrp) -+ id=listyp(lgrp+kgrp) -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then -+ -+ jgrp=jgrp+1 -+ -+ do jj=1,numgsit(id) -+ -+ jr=jr+1 -+ jt=jt+1 -+ -+ if(jr.le.mxatms.and.jt.le.mxatms)then -+ -+ lstrgd(jr)=lstgst(id,jj)+isite -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do jj=1,numgsit(id) -+ -+ jt=jt+1 -+ if(jt.le.mxatms)then -+ -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,304) -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kgrp=kgrp+numgrp(itmols) -+ -+ enddo -+ -+ if(ngrp.eq.0)then -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0)then -+ -+ j=j+1 -+ lstfre(j)=i -+ -+ endif -+ -+ enddo -+ ntfree=j -+ -+ else -+ -+c centre of mass of groups -+c assumes group dimensions are smaller than half box width -+ -+ do i=1,natms -+ lstme(i)=0 -+ enddo -+ -+ do id=1,mxungp -+ gmass(id)=0.d0 -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ safe=.false. -+ if(abs(gmass(id)).lt.1.d-10)safe=.true. -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ xxt(jr)=xxx(i)-txx(ig) -+ yyt(jr)=yyy(i)-tyy(ig) -+ zzt(jr)=zzz(i)-tzz(ig) -+ if(safe)gmass(id)=gmass(id)+weight(i) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) -+ -+ enddo -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c global communications -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+c make sure all nodes have same copy of gmass -+ -+ if(mxnode.gt.1)then -+ -+ do id=1,mxungp -+ -+ accum(id)=0.d0 -+ if(gmass(id).gt.0.d0)accum(id)=1.d0 -+ -+ enddo -+ -+ call gdsum(gmass(1),mxungp,buffer(1)) -+ call gdsum(accum(1),mxungp,buffer(1)) -+ -+ do id=1,mxungp -+ -+ dnorm=max(1.d0,accum(id)) -+ gmass(id)=gmass(id)/dnorm -+ -+ enddo -+ -+ endif -+ -+c find a group of each type on this node to -+c find principal axis system of the group type -+ -+ do id=1,mxungp -+ -+ jr=0 -+ ij=0 -+ safe=.false. -+ -+ do while(.not.safe.and.ij.lt.ngrp) -+ -+ ij=ij+1 -+ jr=jr+numgsit(lstgtp(ij)) -+ if(lstgtp(ij).eq.id)safe=.true. -+ -+ enddo -+ -+ if(safe)then -+ -+c rotational inertia accumulator -+ -+ do k=1,3 -+ -+ do kk=1,3 -+ -+ rotinr(k,kk)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ij) -+ yyt(jr)=yyy(i)-gcmy(ij) -+ zzt(jr)=zzz(i)-gcmz(ij) -+ -+ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) -+ -+ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) -+ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) -+ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) -+ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) -+ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) -+ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) -+ -+ enddo -+ -+ rotinr(2,1)=rotinr(1,2) -+ rotinr(3,1)=rotinr(1,3) -+ rotinr(3,2)=rotinr(2,3) -+ -+ call jacobi(rotinr,rot1,3) -+ -+ rot(1)=rot1(1,1) -+ rot(4)=rot1(2,1) -+ rot(7)=rot1(3,1) -+ rot(2)=rot1(1,2) -+ rot(5)=rot1(2,2) -+ rot(8)=rot1(3,2) -+ rot(3)=rot1(1,3) -+ rot(6)=rot1(2,3) -+ rot(9)=rot1(3,3) -+ -+c rotational inertia accumulators -+ -+ rotinx(id,1)=0.d0 -+ rotiny(id,1)=0.d0 -+ rotinz(id,1)=0.d0 -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+c site positions in principal axis system -+ -+ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) -+ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) -+ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) -+ -+c impose rounding -+ -+ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 -+ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 -+ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 -+ -+c rotational inertia tensor of group type -+ -+ rotinx(id,1)=rotinx(id,1)+ -+ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) -+ rotiny(id,1)=rotiny(id,1)+ -+ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) -+ rotinz(id,1)=rotinz(id,1)+ -+ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) -+ -+ enddo -+ -+c set axis system such that: Ixx >=Iyy >=Izz -+ -+ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) -+ -+ if(rotxyz.ge.rotinx(id,1))then -+ -+ if(rotiny(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gyy(id,j) -+ gyy(id,j)=-a1 -+ -+ enddo -+ -+ rotiny(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ elseif(rotinz(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ rotinz(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ endif -+ -+ endif -+ -+ if(rotinz(id,1).gt.rotiny(id,1))then -+ -+ do j=1,numgsit(id) -+ -+ a1=gyy(id,j) -+ gyy(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ a1=rotinz(id,1) -+ rotinz(id,1)=rotiny(id,1) -+ rotiny(id,1)=a1 -+ -+ endif -+ -+c set up principal axis system in terms of site positions -+ -+c test for (near) linear unit -+ -+ ill=0 -+ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) -+ -+ if(rtall.gt.1.d-5)then -+ rotall=rtall -+ else -+ rotall=1.d0 -+ endif -+ -+ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) -+ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall -+ -+ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ -+ if(ill.ge.2)then -+ -+c point particle only -+ -+ ind(id,1)=1 -+ ind(id,2)=1 -+ ind(id,3)=1 -+ -+ do jj=1,9 -+ gaxs(id,jj)=0.d0 -+ enddo -+ -+ elseif(ill.eq.1)then -+ -+c linear molecule -+ -+ ind(id,1)=1 -+ ind(id,2)=2 -+ ind(id,3)=1 -+ -+ aa(1)=gxx(id,1)-gxx(id,2) -+ aa(4)=gyy(id,1)-gyy(id,2) -+ aa(7)=gzz(id,1)-gzz(id,2) -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+ call invert(aa,bb,det) -+ -+ if(abs(det).lt.1.d-5)call error(idnode,306) -+ -+ do j=1,9 -+ gaxs(id,j)=bb(j) -+ enddo -+ -+ elseif(ill.eq.0)then -+ -+c non-linear molecule -+ -+ i1=1 -+ i2=1 -+ i3=1 -+ pass1=.true. -+ dettest=1.d-1 -+ -+ do while(pass1.and.i2.lt.numgsit(id)-1) -+ -+ i2=i2+1 -+ i3=i2 -+ pass2=.true. -+ -+ do while(pass2.and.i3.lt.numgsit(id)) -+ -+ i3=i3+1 -+ -+ aa(1)=gxx(id,i1)-gxx(id,i2) -+ aa(4)=gyy(id,i1)-gyy(id,i2) -+ aa(7)=gzz(id,i1)-gzz(id,i2) -+ aa(2)=gxx(id,i1)-gxx(id,i3) -+ aa(5)=gyy(id,i1)-gyy(id,i3) -+ aa(8)=gzz(id,i1)-gzz(id,i3) -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c invert matrix -+ -+ call invert(aa,bb,det) -+ -+c check on size of determinant - to see if the 3 sites are -+c too close to being linear for safety. -+ -+ pass2=abs(det).lt.dettest -+ -+ enddo -+ -+ pass1=abs(det).lt.dettest -+ -+ enddo -+ -+ if(abs(det).lt.dettest)call error(idnode,306) -+ -+c store indices used -+ -+ ind(id,1)=i1 -+ ind(id,2)=i2 -+ ind(id,3)=i3 -+ -+c store coefficients -+ -+ do j=1,9 -+ -+ gaxs(id,j)=bb(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check that rigid unit does not contain frozen atoms -+ -+ safe=.true. -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ if(lstfrz(i).ne.0)safe=.false. -+ -+ enddo -+ -+ enddo -+ -+c global check on error condition -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,360) -+ -+c quaternions for all rigid groups in system -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ i1=lstrgd(jr+ind(id,1)) -+ i2=lstrgd(jr+ind(id,2)) -+ i3=lstrgd(jr+ind(id,3)) -+ -+ jr=jr+numgsit(id) -+ -+c group basis vectors -+ -+ aa(1)=xxx(i1)-xxx(i2) -+ aa(4)=yyy(i1)-yyy(i2) -+ aa(7)=zzz(i1)-zzz(i2) -+ -+ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) -+ -+ if(rotmin(id).gt.1.d-5)then -+ -+ aa(2)=xxx(i1)-xxx(i3) -+ aa(5)=yyy(i1)-yyy(i3) -+ aa(8)=zzz(i1)-zzz(i3) -+ -+ else -+ -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ endif -+ -+ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c group rotational matrix -+ -+ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) -+ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) -+ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) -+ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) -+ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) -+ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) -+ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) -+ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) -+ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) -+ -+c determine quaternions from rotational matrix -+ -+ aq=rot(1)+rot(5) -+ bq=rot(2)-rot(4) -+ cq=rot(6)-rot(8) -+ dq=rot(2)+rot(4) -+ eq=rot(3)+rot(7) -+ fq=rot(6)+rot(8) -+ gq=rot(3)-rot(7) -+ hq=rot(1)-rot(5) -+ -+ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) -+ -+ if(q0(ig).gt.1.d-4)then -+ -+ q1(ig)=-0.25d0*cq/q0(ig) -+ q2(ig)=0.25d0*gq/q0(ig) -+ q3(ig)=-0.25d0*bq/q0(ig) -+ -+ else -+ -+ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q1(ig).gt.1.d-4)then -+ -+ q2(ig)=0.25d0*dq/q1(ig) -+ q3(ig)=0.25d0*eq/q1(ig) -+ -+ else -+ -+ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q2(ig).gt.1.d-4)then -+ -+ q3(ig)=0.25d0*fq/q2(ig) -+ -+ else -+ -+ q3(ig)=1.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c normalise quaternions -+ -+ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) -+ q0(ig)=rnorm*q0(ig) -+ q1(ig)=rnorm*q1(ig) -+ q2(ig)=rnorm*q2(ig) -+ q3(ig)=rnorm*q3(ig) -+ -+ enddo -+ -+c test for redundant degrees of freedom -+c and ensure rotational inertias are non-zero -+ -+ degrot=0.d0 -+ -+ if(lsolva)then -+ degrot_sol(:)=0.d0 -+ endif -+ -+ do ig=1,ngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ enddo -+ -+c rotational degrees of freedom and rigid body contribution -+c to total degrees of freedom -+ -+ degrot=degrot+dble(ngrp)*3.d0 -+ degfre=degrot+dble(ngrp)*3.d0 -+ -+ if(lsolva)then -+ -+ fngrp=1 -+ lngrp=0 -+ -+ do itmols=1,mxtmls -+ -+ lngrp=lngrp+nummols(itmols)*numgrp(itmols) -+ -+ do ig=fngrp,lngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ enddo -+ -+ fngrp=lngrp+1 -+ -+ enddo -+ -+ endif -+ -+c summarise results -+ -+ if(idnode.eq.0)then -+ -+ if(gmass(1).gt.0.d0)then -+ -+ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' -+ -+ do id=1,mxungp -+ -+ if(gmass(id).gt.0.d0)then -+ -+ write(nrite,'(/,a,i10)')' group of type ',id -+ write(nrite,'(12x,a,f20.10)')' total mass ', -+ x gmass(id) -+ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', -+ x rotinx(id,1),rotiny(id,1),rotinz(id,1) -+ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', -+ x 'b coord','c coord' -+ do j=1,numgsit(id) -+ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), -+ x gyy(id,j),gzz(id,j) -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c find number of unique groups -+ -+ ngp=0 -+ do ig=1,ngrp -+ ngp=max(ngp,lstgtp(ig)) -+ enddo -+ -+c calculate reciprocal of rotational inertias -+ -+ do id=1,ngp -+ -+ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1))*1.d-5 -+ -+ if(rotinx(id,1).lt.rotlim)then -+ rotinx(id,2)=0.d0 -+ else -+ rotinx(id,2)=1.d0/rotinx(id,1) -+ endif -+ -+ if(rotiny(id,1).lt.rotlim)then -+ rotiny(id,2)=0.d0 -+ else -+ rotiny(id,2)=1.d0/rotiny(id,1) -+ endif -+ -+ if(rotinz(id,1).lt.rotlim)then -+ rotinz(id,2)=0.d0 -+ else -+ rotinz(id,2)=1.d0/rotinz(id,1) -+ endif -+ -+ enddo -+ -+c Check of quaternion set up with atomic positions -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c group type -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ -+ txx(jr)=xxx(i)-xxt(i) -+ tyy(jr)=yyy(i)-yyt(i) -+ tzz(jr)=zzz(i)-zzt(i) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,txx,tyy,tzz) -+ -+c set tolerance for testing quaternion setup. -+ -+ rsq=0.d0 -+ tol=1.d-2 -+ -+ do i=1,jr -+ -+ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ if(rrr.gt.tol)then -+ -+ rsq=rrr -+ -+ endif -+ -+ enddo -+ -+c exit if error in set up -+ -+ safe=.true. -+ if(rsq.gt.tol)safe=.false. -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)call error(idnode,310) -+ -+c sort lstgot into ascending order -+ -+ call shellsort(jt,lstgot) -+ -+c check that no site is in more than 1 rigid group -+ -+ i=1 -+ safe=.true. -+ do while(i.lt.jt) -+ -+ i=i+1 -+ linear=.true. -+ do while(linear) -+ -+ linear=.false. -+ -+ if(lstgot(i).eq.lstgot(i-1))then -+ -+ linear=.true. -+ safe=.false. -+ jt=jt-1 -+ -+ do j=i,jt -+ lstgot(j)=lstgot(j+1) -+ enddo -+ -+ endif -+ -+ if(i.ge.jt)linear=.false. -+ -+ enddo -+ -+ enddo -+ -+ if(.not.safe)call error(idnode,320) -+ -+c list of 'free' sites -+ -+ ii=1 -+ jj=0 -+ do i=1,natms -+ -+ if(lstgot(ii).eq.i)then -+ -+ ii=ii+1 -+ -+ else -+ -+ if(lstfrz(i).eq.0)then -+ jj=jj+1 -+ lstfre(jj)=i -+ endif -+ -+ endif -+ -+ enddo -+ -+c number of free sites -+ -+ ntfree=jj -+ -+c list of atoms integrated on this node -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ jr=jr+numgsit(id) -+ -+ enddo -+ -+ do i=1,jr -+ lstme(i)=lstrgd(i) -+ enddo -+ -+c block parameters for free atoms -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do i=ifre1,ifre2 -+ -+ jr=jr+1 -+ lstme(jr)=lstfre(i) -+ -+ enddo -+ -+c exchange quaternion data with other nodes -+ -+ if(mxnode.gt.1)call merge4 -+ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+ if(lsolva)lstgot_sol(:)=lstgot(:) -+ -+c deallocate work arrays -+ -+ deallocate (ind,lstgot,stat=fail(1)) -+ deallocate (txx,tyy,tzz,stat=fail(2)) -+ deallocate (xxt,yyt,zzt,stat=fail(3)) -+ deallocate (gaxs,rotmin,stat=fail(4)) -+ deallocate (accum,stat=fail(5)) -+ -+ return -+ end subroutine quatbook -+ -+ subroutine abort_field_read(kode,idnode,nfield) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting FIELD file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nfield -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(kode.eq.1)then -+ -+c end of field file error exit -+ -+ call error(idnode,52) -+ -+ elseif(kode.eq.2)then -+ -+c unrecognised directive in field file -+ -+ call error(idnode,4) -+ -+ endif -+ -+ return -+ end subroutine abort_field_read -+ -+ subroutine abort_control_read(kode,idnode,nread) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nread -+ -+ if(idnode.eq.0)close (nread) -+ -+ if(kode.eq.1)then -+ -+c end of control file error exit -+ -+ call error(idnode,53) -+ -+ elseif(kode.eq.2)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,0) -+ -+ endif -+ -+ return -+ end subroutine abort_control_read -+ -+ subroutine abort_config_read(kode,idnode,nconf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nconf -+ -+ if(idnode.eq.0)close (nconf) -+ -+ if(kode.eq.1)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,54) -+ -+ elseif(kode.eq.2)then -+ -+c end of config file error exit -+ -+ call error(idnode,55) -+ -+ endif -+ -+ return -+ end subroutine abort_config_read -+ -+ subroutine neutbook(lneut,idnode,natms,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for neutral group bookkeeping -+c -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lneut,safe -+ integer idnode,natms,nneut,i -+ -+ safe=.true. -+ -+c neutral group bookkeeping: sites must be listed consecutively -+ -+ if(lneut)then -+ -+ if(lstneu(1).ne.1)call error(idnode,230) -+ -+ neulst(1)=1 -+ nneut=1 -+ -+ do i=2,natms -+ -+ safe=.false. -+ if(lstneu(i).eq.lstneu(i-1))safe=.true. -+ if(lstneu(i).eq.lstneu(i-1)+1)then -+ -+ safe=.true. -+ nneut=nneut+1 -+ if(nneut.gt.mxneut)call error(idnode,220) -+ neulst(nneut)=i -+ -+ endif -+ -+ if(.not.safe)call error(idnode,230) -+ -+ enddo -+ -+ neulst(nneut+1)=natms+1 -+ -+ endif -+ -+ return -+ -+ end subroutine neutbook -+ -+ subroutine intlist -+ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the interaction lists -+c for the entire simulated system -+c -+c parallel replicated dat version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,safe1,lcnb,lchk,lfail -+ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons -+ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf -+ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle -+ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths -+ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 -+ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum -+ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 -+ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 -+ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle -+ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp -+ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail -+ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail -+ real(8) tol -+ -+ integer, allocatable :: itest(:),index(:),kscons(:) -+ integer, allocatable :: msite(:),mconst(:),listin(:) -+ -+ dimension fail(4) -+ -+ data fail/0,0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) -+ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) -+ allocate (listin(mxatms),stat=fail(3)) -+ allocate (kscons(0:mxproc-1),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1800) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ ibonds=0 -+ jbonds=0 -+ kbonds=0 -+ ipmf=0 -+ jpmf=0 -+ iangle=0 -+ jangle=0 -+ kangle=0 -+ idihed=0 -+ jdihed=0 -+ kdihed=0 -+ iinver=0 -+ jinver=0 -+ kinver=0 -+ iteths=0 -+ jteths=0 -+ kteths=0 -+ ishels=0 -+ jshels=0 -+ kshels=0 -+ safe=.true. -+ safe1=.true. -+ -+c find total number of bonds,pmf constraints,bond constraints, -+c angles,dihedrals,inversions, tethers,core-shells, in system -+c - ignoring frozen atoms -+ -+ ntbon0=0 -+ ntpmf0=0 -+ ntcon0=0 -+ ntang0=0 -+ ntdih0=0 -+ ntinv0=0 -+ nttet0=0 -+ ntshl0=0 -+ nscons=0 -+ ntcons=0 -+ -+ do itmols=1,ntpmls -+ -+ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) -+ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) -+ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) -+ ntang0=ntang0+nummols(itmols)*numang(itmols) -+ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) -+ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) -+ nttet0=nttet0+nummols(itmols)*numteth(itmols) -+ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) -+ -+ enddo -+ -+ isite=0 -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ -+c first and last index of bonds, angles etc for this node -+ -+ ibnd1=(idnode*ntbon0)/mxnode+1 -+ ibnd2=((idnode+1)*ntbon0)/mxnode -+ -+ ipmf1=(idnode*ntpmf0)/mxnode+1 -+ ipmf2=((idnode+1)*ntpmf0)/mxnode -+ ntpmf=ntpmf0 -+ nspmf=ipmf2+1-ipmf1 -+ -+ iang1=(idnode*ntang0)/mxnode+1 -+ iang2=((idnode+1)*ntang0)/mxnode -+ -+ idih1=(idnode*ntdih0)/mxnode+1 -+ idih2=((idnode+1)*ntdih0)/mxnode -+ -+ iinv1=(idnode*ntinv0)/mxnode+1 -+ iinv2=((idnode+1)*ntinv0)/mxnode -+ -+ itet1=(idnode*nttet0)/mxnode+1 -+ itet2=((idnode+1)*nttet0)/mxnode -+ -+ ishl1=(idnode*ntshl0)/mxnode+1 -+ ishl2=((idnode+1)*ntshl0)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct bond constraint list later -+c construct chemical bond interaction list -+ -+ do lbonds=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then -+ -+ jbonds=jbonds+1 -+ if(jbonds.le.mxbond)then -+ -+ listbnd(jbonds,1)=lbonds+kbonds -+ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) -+ x +isite -+ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,31) -+ -+c construct pmf site lists - no exclusions -+ -+ do lpmf=1,numpmf(itmols) -+ -+ ipmf=ipmf+1 -+ -+ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then -+ -+ jpmf=jpmf+1 -+ if(jpmf.le.mspmf)then -+ -+ nnn=npmf(1)+npmf(2) -+ if(nnn.le.mxspmf)then -+ -+ do jj=1,npmf(1)+npmf(2) -+ lstpmf(jj,jpmf)=indpmf(jj)+isite -+ enddo -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ else -+ -+ safe1=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe1) -+ if(.not.safe1)call error(idnode,458) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,460) -+ -+c construct valence angle interaction list -+ -+ do langle=1,numang(itmols) -+ -+ iangle=iangle+1 -+ -+ if(iangle.ge.iang1.and.iangle.le.iang2)then -+ -+ jangle=jangle+1 -+ if(jangle.le.mxangl)then -+ -+ listang(jangle,1)=langle+kangle -+ listang(jangle,2)=lstang(langle+kangle,1) -+ x +isite -+ listang(jangle,3)=lstang(langle+kangle,2) -+ x +isite -+ listang(jangle,4)=lstang(langle+kangle,3) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,51) -+ -+c construct dihedral angle interaction list -+ -+ do ldihed=1,numdih(itmols) -+ -+ idihed=idihed+1 -+ -+ if(idihed.ge.idih1.and.idihed.le.idih2)then -+ -+ jdihed=jdihed+1 -+ if(jdihed.le.mxdihd)then -+ -+ listdih(jdihed,1)=ldihed+kdihed -+ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) -+ x +isite -+ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) -+ x +isite -+ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) -+ x +isite -+ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,61) -+ -+c construct inversion potential list -+ -+ do linver=1,numinv(itmols) -+ -+ iinver=iinver+1 -+ -+ if(iinver.ge.iinv1.and.iinver.le.iinv2)then -+ -+ jinver=jinver+1 -+ if(jinver.le.mxinv)then -+ -+ listinv(jinver,1)=linver+kinver -+ listinv(jinver,2)=lstinv(linver+kinver,1) -+ x +isite -+ listinv(jinver,3)=lstinv(linver+kinver,2) -+ x +isite -+ listinv(jinver,4)=lstinv(linver+kinver,3) -+ x +isite -+ listinv(jinver,5)=lstinv(linver+kinver,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,77) -+ -+c construct tethered atoms interaction list -+ -+ do lteths=1,numteth(itmols) -+ -+ iteths=iteths+1 -+ -+ if(iteths.ge.itet1.and.iteths.le.itet2)then -+ -+ jteths=jteths+1 -+ if(jteths.le.msteth)then -+ -+ listtet(jteths,1)=lteths+kteths -+ listtet(jteths,2)=lsttet(lteths+kteths)+isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,63) -+ -+c construct core-shell list -+ -+ do lshels=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ if(ishels.ge.ishl1.and.ishels.le.ishl2)then -+ -+ jshels=jshels+1 -+ if(jshels.le.mxshl)then -+ -+ listshl(jshels,1)=lshels+kshels -+ listshl(jshels,2)=lstshl(lshels+kshels,1) -+ x +isite -+ listshl(jshels,3)=lstshl(lshels+kshels,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,59) -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kbonds=kbonds+numbonds(itmols) -+ kangle=kangle+numang(itmols) -+ kdihed=kdihed+numdih(itmols) -+ kinver=kinver+numinv(itmols) -+ kteths=kteths+numteth(itmols) -+ kshels=kshels+numshl(itmols) -+ -+ enddo -+ -+c store array counters for bookkeeping -+ -+ ntbond=ibonds -+ ntangl=iangle -+ ntdihd=idihed -+ ntinv=iinver -+ ntteth=iteths -+ ntshl=ishels -+ -+c pass bond constraint information to other nodes -+ -+ if(ntcon0.gt.0)then -+ -+ ntcons=ntcon0 -+ -+c find starting site no. and constraint no. for each molec. type -+ -+ msite(1)=0 -+ mconst(1)=0 -+ -+ do itmols=2,ntpmls -+ -+ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* -+ x nummols(itmols-1) -+ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) -+ -+ enddo -+ -+c sort molecules into ascending order of number of constraints -+ -+ do i=1,ntpmls -+ -+ itest(i)=numcon(i) -+ index(i)=0 -+ -+ enddo -+ -+ call shellsort(ntpmls,itest) -+ -+ do i=1,ntpmls -+ -+ lchk=.true. -+ do j=1,ntpmls -+ -+ if(itest(i).eq.numcon(j))then -+ -+ if(lchk)then -+ index(i)=j -+ lchk=.false. -+ -+ endif -+ -+ do ii=1,i-1 -+ if(index(ii).eq.j)lchk=.true. -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c load balance to within 10% -+ -+ tol=1.0d0+(0.10d0)/2.d0 -+ kcons=(ntcons)/mxnode -+ ntmp=0 -+ -+c find smallest constrained molecule to allocate to a node -+ -+ do i=1,ntpmls -+ -+ if(ntmp.le.mxnode)then -+ -+ if(numcon(index(i)).gt.0)then -+ ntmp=ntmp+nummols(index(i)) -+ klo=max(0,kcons-numcon(index(i))/2) -+ khi=klo+numcon(index(i))+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+c reset hi/lo limits if molecules contain too many constraints -+ -+ if(dble(khi)/dble(max(1,klo)).gt.tol)then -+ klo=nint(dble(kcons)/tol) -+ khi=nint(dble(kcons)*tol)+1 -+ endif -+ -+c store lo value for later -+ -+ klo0=klo -+ -+c begin assignment of constraints ---------------------------------- -+ -+ ifail=-1 -+ lfail=.true. -+ do while(lfail) -+ -+ ifail=ifail+1 -+ -+ if(ifail.gt.ntpmls)then -+ call error(idnode,432) -+ endif -+ -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ lconst=0 -+ -+c zero running totals of constraints on each processor -+ -+ do id=0,mxnode-1 -+ kscons(id)=0 -+ enddo -+ -+ iloop=0 -+ lfail=.false. -+ iconst=0 -+ jconst=0 -+ nnode=0 -+ -+c assign difficult molecules in blocks -+ -+ if(ifail.gt.0)then -+ -+ nfail=0 -+ do i=1,ifail -+ -+ ii=ntpmls+1-i -+ nfail=nfail+nummols(index(ii))*numcon(index(ii)) -+ -+ enddo -+ -+c decide on number of processors to split over -+ -+ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) -+ nnode=max(2,nnode) -+ nnode=min(nnode,mxnode) -+ -+c assign to processors 0..nnode-1 -+ -+ do id=0,nnode-1 -+ -+ nscons0=(id*nfail)/nnode+1 -+ nscons1=((id+1)*nfail)/nnode -+ -+ kscons(id)=nscons1+1-nscons0 -+ -+ enddo -+ -+c this processors block -+ -+ nscons0=(idnode*nfail)/nnode+1 -+ nscons1=((idnode+1)*nfail)/nnode -+ -+c assign in blocks -+ -+ do itmols=ntpmls,ntpmls-ifail+1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ -+c construct bond constraint list -+ -+ do lconst=1,numcon(ii) -+ -+ iconst=iconst+1 -+ -+ if(iconst.ge.nscons0.and.iconst.le.nscons1)then -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c assign non-problematic molecules -+ -+ jdnode=mod(nnode+1,mxnode) -+ -+ do itmols=ntpmls-ifail,1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ itry=0 -+ lchk=.true. -+ do while(lchk) -+ -+ if(kscons(jdnode)+icon.le.klo)then -+ -+ if(jdnode.ne.idnode)then -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ else -+ -+c construct bond constraint list -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ do lconst=1,numcon(ii) -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ -+ endif -+ -+ else -+ -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.true. -+ itry=itry+1 -+ -+ endif -+ -+ if(lchk.and.itry.gt.mxnode)then -+ -+ klo=kcons -+ kcons=khi -+ itry=0 -+ iloop=iloop+1 -+ -+ endif -+ -+c split molecule across nodes if have to -+ -+ if(iloop.gt.3)then -+ lfail=.true. -+ kcons=ntcons/mxnode -+ klo=klo0 -+ lchk=.false. -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c check no node has less than minimum number -+ -+ do id=0,mxnode-1 -+ if(kscons(id).lt.klo0)then -+ lfail=.true. -+ endif -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(mxnode.gt.1)call gimax(jconst,1,idum) -+ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') -+ x 'Number of constraints found ',jconst,'Max allowed ',mxcons -+ -+ call error(idnode,41) -+ -+ endif -+ -+ nscons=kscons(idnode) -+ -+ call passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+ endif -+ -+ if(npmf(1).gt.0)then -+ -+ call passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+ endif -+ -+c pass rigid body data -+ -+ lcnb=.false. -+ if(ntcons.gt.0.and.ngrp.gt.0)then -+ -+ call passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, -+ x numgsit) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(itest,index,msite,stat=fail(1)) -+ deallocate(mconst,kscons,listin,stat=fail(2)) -+ -+ return -+ end subroutine intlist -+ -+ subroutine ensemble_selection -+ x (directive,lens,kill,idnode,keyens,mode,taut,taup) -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ensemble and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical kill,lens -+ integer keyens,idnode,idum,mode -+ real(8) taut,taup -+ -+ if(findstring('nve',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'microcanonical ensemble')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('nvt',directive,idum))then -+ -+ if(findstring('evans',directive,idum))then -+ -+ keyens=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Evans Gaussian temperature constraints', -+ x ' in use')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('ber',directive,idum))then -+ -+ keyens=2 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen thermostat', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=3 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('npt',directive,idum))then -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=4 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen isotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=5 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('nst',directive,idum))then -+ -+ mode=0 -+ if(findstring('block',directive,idum))mode=1 -+ if(findstring('surf',directive,idum))mode=2 -+ if(findstring('slab',directive,idum))mode=3 -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=6 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen anisotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=7 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ if(mode.eq.0)then -+ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") -+ elseif(mode.eq.1)then -+ write(nrite, -+ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") -+ elseif(mode.eq.2)then -+ write(nrite, -+ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") -+ elseif(mode.eq.3)then -+ write(nrite, -+ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") -+ endif -+ -+ endif -+ -+ elseif(findstring('pmf',directive,idum))then -+ -+ keyens=8 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'potential of mean force calculation (NVE)')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ call error(idnode,-436) -+ kill=.true. -+ -+ endif -+ -+ return -+ end subroutine ensemble_selection -+ -+ subroutine neb_option -+ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, -+ x opttol,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for NEB option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical lneb,lminopt,endneb,safe -+ integer numneb,idnode,keytol,i,idum -+ real(8) sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ lminopt=.true. -+ lneb=.true. -+ endneb=.false. -+ numneb=intstr(directive,lenrec,idum) -+ if(numneb.eq.0)numneb=1 -+ numneb=min(maxneb,numneb) -+ -+ hyp_units=1.d0 -+ do while(.not.endneb) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endneb',directive,idum))then -+ endneb=.true. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('basin_1',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_1(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('basin_2',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_2(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'NEB calculation controls')") -+ write(nrite,"(/,1x,'identity of basin 1 ', -+ x 10i10)")(bsn_1(i),i=1,numneb) -+ write(nrite,"(1x,'identity of basin 2 ', -+ x 10i10)")(bsn_2(i),i=1,numneb) -+ write(nrite, -+ x "(1x,'NEB spring constant ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x sprneb,opttol,cunit -+ -+ call print_optim(keytol) -+ -+ endif -+ -+c units conversion -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine neb_option -+ -+ subroutine bpd_option -+ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, -+ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for bias potential -+c dynamics option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 directive(lenrec) -+ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo -+ integer keybpd,idnode,nblock,ntrack,keytol,idum -+ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(ltad)call error(idnode,2355) -+ lminopt=.true. -+ lbpd=.true. -+ endbpd=.false. -+ cunit=" dl_poly" -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'bias potential dynamics controls')") -+ -+ if(findstring('dyn',directive,idum))then -+ -+ keybpd=1 -+ hyp_units=energy_unit() -+ ebias=dblstr(directive,lenrec,idum) -+ vmin=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ if(idnode.eq.0)write(nrite,"( -+ x 1x,'dynamics option selected ', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4 -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,cunit -+ -+ elseif(findstring('path',directive,idum))then -+ -+ keybpd=2 -+ nebgo=.true. -+ hyp_units=1.d0 -+ do while(.not.endbpd) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endbpd',directive,idum))then -+ endbpd=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('noneb',directive,idum))then -+ nebgo=.false. -+ elseif(findstring('target',directive,idum))then -+ call getword(seek,directive,8,lenrec) -+ call getword(seek,directive,8,lenrec) -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('ebias',directive,idum))then -+ ebias=dblstr(directive,lenrec,idum) -+ elseif(findstring('vmin',directive,idum))then -+ vmin=dblstr(directive,lenrec,idum) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"( -+ x 1x,'dynamics with path analysis selected', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4, -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'configuration catch radius (A)',f10.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'atom type to be tracked ',2x,a8, -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit -+ if(nebgo)write(nrite, -+ x "(1x,'NEB spring constant ',e12.4)")sprneb -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ endif -+ -+ return -+ end subroutine bpd_option -+ -+ subroutine tad_option -+ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, -+ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for TAD option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe -+ integer idnode,nblock,ntrack,blkout,keytol,idum -+ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(lbpd)call error(idnode,2355) -+ lminopt=.true. -+ ltad=.true. -+ endtad=.false. -+ hyp_units=1.d0 -+ -+ do while(.not.endtad) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endtad',directive,idum))then -+ endtad=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('all',directive,idum))then -+ tadall=.true. -+ if(findstring('false',directive,idum))tadall=.false. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('blackout',directive,idum))then -+ blkout=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('deltad',directive,idum))then -+ deltad=dblstr(directive,lenrec,idum) -+ elseif(findstring('low_temp',directive,idum))then -+ tlow=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'TAD dynamics controls' -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'steps in blackout periods ',i10, -+ x /,1x,'configuration catch radius ',1p,e12.4, -+ x /,1x,'NEB spring constant ',e12.4, -+ x /,1x,'stopping parameter ',e12.4, -+ x /,1x,'target low temperature ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x nblock,ntrack,blkout,catchrad,sprneb,deltad, -+ x tlow,opttol,cunit -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ if(tadall)write(nrite, -+ x "(1x,'option for all basins analysis selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine tad_option -+ -+ subroutine metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for metadynamics option -+c copyright - daresbury laboratory -+c author - w. smith jan 2011 -+c -+c note: default values are set in metafreeze_module -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe -+ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int -+ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt -+ -+ lmetadyn=.true. -+ endmet=.false. -+ -+ do while(.not.endmet) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endmet',directive,idum))then -+ endmet=.true. -+ elseif(findstring('ncolvar',directive,idum))then -+ ncolvar=intstr(directive,lenrec,idum) -+ elseif(findstring('lstein',directive,idum))then -+ lstein=.true. -+ if(findstring('false',directive,idum))lstein=.false. -+ elseif(findstring('ltet',directive,idum))then -+ ltet=.true. -+ if(findstring('false',directive,idum))ltet=.false. -+ elseif(findstring('lglobpe',directive,idum))then -+ lglobpe=.true. -+ if(findstring('false',directive,idum))lglobpe=.false. -+ elseif(findstring('llocpe',directive,idum))then -+ llocpe=.true. -+ if(findstring('false',directive,idum))llocpe=.false. -+ elseif(findstring('globpe_scale',directive,idum))then -+ globpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('locpe_scale',directive,idum))then -+ locpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('nq4',directive,idum))then -+ nq4=intstr(directive,lenrec,idum) -+ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('nq6',directive,idum))then -+ nq6=intstr(directive,lenrec,idum) -+ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('ntet',directive,idum))then -+ ntet=intstr(directive,lenrec,idum) -+ elseif(findstring('meta_step_int',directive,idum))then -+ meta_step_int=intstr(directive,lenrec,idum) -+ elseif(findstring('ref_w_aug',directive,idum))then -+ ref_W_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('h_aug',directive,idum))then -+ h_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('hkey',directive,idum))then -+ hkey=intstr(directive,lenrec,idum) -+ elseif(findstring('wt_dt',directive,idum))then -+ wt_dt=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'metadynamics controls' -+ x /,1x,'total number of collective variables',i10, -+ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, -+ x /,1x,'tetrahedral parameters option (zeta)',l10, -+ x /,1x,'global potential parameter option ',l10, -+ x /,1x,'local potential parameter option ',l10, -+ x /,1x,'global potential param. scale factor',e12.4, -+ x /,1x,'local potential param. scale factor ',e12.4)") -+ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale -+ -+ write(nrite, -+ x "( 1x,'number of Q4 atom pair types ',i10, -+ x /,1x,'number of Q6 atom pair types ',i10, -+ x /,1x,'number of zeta atom triplet types ',i10)") -+ x nq4,nq6,ntet -+ -+ write(nrite, -+ x "( 1x,'gaussian deposition interval ',i10, -+ x /,1x,'reference gaussian height ',e12.4, -+ x /,1x,'gaussian width parameter ',e12.4, -+ x /,1x,'height control key ',i10, -+ x /,1x,'well-tempered control parameter ',e12.4)") -+ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt -+ -+ endif -+ -+ return -+ end subroutine metadyn_option -+ -+ subroutine ewald_selection -+ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, -+ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ewald method and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lhke,lspme,lewald,lcut,lforc,kill,safe -+ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum -+ integer kmaxpow2 -+ real(8) alpha,rcut,eps,tol,fac,tol1 -+ -+ lhke=findstring('hke',directive,idum) -+ lspme=findstring('spme',directive,idum) -+ lewald=findstring('ewald',directive,idum) -+ if(lewald)keyfce=2 -+ if(lspme)keyfce=12 -+ if(lhke)keyfce=14 -+ if(idnode.eq.0)open(nconf,file='CONFIG') -+ call getrec(safe,idnode,nconf) -+ call getrec(safe,idnode,nconf) -+ imcon=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then -+ -+ call error(idnode,-180) -+ kill=.true. -+ -+ endif -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps -+ -+ if(lhke)then -+ -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ if(nlatt.eq.0)nlatt=1 -+ if(nhko.eq.0)nhko=1 -+ -+ endif -+ -+ if(.not.lcut)then -+ call error(idnode,-433) -+ kill=.true. -+ else -+ -+c retreive cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(directive,lenrec,idum) -+ kmax1=intstr(directive,lenrec,idum) -+ kmax2=intstr(directive,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ -+ else -+ -+ kmax3=intstr(directive,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c if spme double kmax and set to next power of 2, with current upper -+c limit of 512. -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax1=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax2=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax3=2 * kmaxpow2 -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ close(nconf) -+ -+ if(lspme)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : SPME ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1/2,kmax2/2,kmax3/2 -+ -+ elseif(lhke)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 ',2i5)") -+ x alpha,kmax1,kmax2 -+ -+ write(nrite, -+ x "(1x,'HKE expansion order ',7x,i10, -+ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt -+ -+ else -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1,kmax2,kmax3 -+ -+ endif -+ -+ endif -+ -+ if(lspme)then -+ -+c Initialize fft tables -+ -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (fplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+CFFTW -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (bplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+ -+CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CSGIC x dummy,1,1,ffttable,dummy,dummy ) -+ -+CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CCRAY x dummy,1,1,ffttable,dummy,dummy ) -+ -+ endif -+ -+ if(lspme)then -+ -+ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ elseif(lhke)then -+ -+ if(kmax2.gt.kmaxb)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ else -+ -+ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ lforc=.true. -+ -+ return -+ end subroutine ewald_selection -+ -+ subroutine print_optim(keytol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing the optimisation option -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer keytol -+ -+ if(keytol.eq.0)then -+ write(nrite, -+ x "(1x,'convergence to minimum force selected')") -+ elseif(keytol.eq.1)then -+ write(nrite, -+ x "(1x,'convergence to minimum energy selected')") -+ else -+ write(nrite, -+ x "(1x,'convergence to minimum position selected')") -+ endif -+ -+ return -+ end subroutine print_optim -+ -+ function energy_unit() -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for assigning energy conversion factors -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idum -+ real(8) energy_unit -+ -+ energy_unit=1.d0 -+ if(findstring('ev',record,idum))then -+ energy_unit=9648.530821d0 -+ elseif(findstring('kev',record,idum))then -+ energy_unit=9648530.821d0 -+ elseif(findstring('kcal',record,idum))then -+ energy_unit=418.4d0 -+ elseif(findstring('kj',record,idum))then -+ energy_unit=1.d2 -+ elseif(findstring('k',record,idum))then -+ energy_unit=boltz -+ endif -+ -+ return -+ end function energy_unit -+ -+ subroutine solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for solvation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,endsol,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ endsol=.false. -+ -+ nsolva=intstr(directive,lenrec,idum) -+ isolva=intstr(directive,lenrec,idum) -+ -+ if(nsolva.eq.0.and.isolva.eq.0)then -+ -+ do while(.not.endsol) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endsol',directive,idum))then -+ endsol=.true. -+ elseif(findstring('enddec',directive,idum))then -+ endsol=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=max(intstr(directive,lenrec,idum),1) -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'solvation calculation selected', -+ x /,1x,'start of solvation calculation ',i10, -+ x /,1x,'solvation calculation interval ',i10)") -+ x nsolva,isolva -+ -+ endif -+ -+ return -+ end subroutine solvation_option -+ -+ subroutine free_energy_option(directive,lfree,lfrmas,idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for free energy option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lfree,lfrmas,endfre,safe -+ integer idnode,idum -+ -+ mfree=1 -+ kfree=1 -+ lfree=.true. -+ lfrmas=.false. -+ endfre=.false. -+ -+ do while(.not.endfre) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endfre',directive,idum))then -+ endfre=.true. -+ elseif(findstring('start',directive,idum))then -+ nfrn=intstr(directive,lenrec,idum) -+ elseif(findstring('interval',directive,idum))then -+ ifrn=intstr(directive,lenrec,idum) -+ elseif(findstring('lambda',directive,idum))then -+ pfree=dblstr(directive,lenrec,idum) -+ elseif(findstring('mix',directive,idum))then -+ mfree=intstr(directive,lenrec,idum) -+ elseif(findstring('expo',directive,idum))then -+ kfree=intstr(directive,lenrec,idum) -+ elseif(findstring('reset_mass',directive,idum))then -+ lfrmas=.true. -+ if(findstring('false',directive,idum))lfrmas=.false. -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(mfree.eq.1)kfree=1 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'free energy option selected', -+ x /,1x,'start of free energy calculation ',i10, -+ x /,1x,'sampling interval ',i10, -+ x /,1x,'free energy parameter (lambda) ',f10.3, -+ x /,1x,'mixing rule selected ',i10, -+ x /,1x,'mixing rule exponent ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10, -+ x /,1x,'mass scaling option ',l10)") -+ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas -+ -+ endif -+ -+c define free energy scaling parameters -+ -+ call freegen() -+ -+ return -+ end subroutine free_energy_option -+ -+ subroutine excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for excitation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lexcite,lghost,endexc,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lexcite=.true. -+ endexc=.false. -+ -+ do while(.not.endexc) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endexc',directive,idum))then -+ endexc=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'excitation option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,ind_fre -+ -+ endif -+ -+ return -+ end subroutine excitation_option -+ -+ subroutine switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for switching option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lswitch,lghost,endswi,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lswitch=.true. -+ endswi=.false. -+ niswitch=0 -+ -+ do while(.not.endswi) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endswi',directive,idum))then -+ endswi=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('period',directive,idum))then -+ niswitch=max(intstr(directive,lenrec,idum),2) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(niswitch.eq.0)niswitch=nsolva -+ nswitch=nsolva -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'switching option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'switching period ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,niswitch,ind_fre -+ -+ endif -+ -+ return -+ end subroutine switching_option -+ -+ end module define_system_module -+ -diff -urN dl_class_1.9.orig/srcmod/dihedral_module.f dl_class_1.9/srcmod/dihedral_module.f ---- dl_class_1.9.orig/srcmod/dihedral_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dihedral_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1121 @@ -+ module dihedral_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining dihedral potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted - p.-a. cazade oct 2007 : solvation, free energy, etc. -+c adapted - w.smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmdih(:,:) -+ integer, allocatable :: listdih(:,:) -+ integer, allocatable :: numdih(:),keydih(:),lstdih(:,:) -+ -+ save prmdih,listdih,numdih,keydih,lstdih -+ -+ contains -+ -+ subroutine alloc_dih_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmdih(mxtdih,mxpdih),stat=fail(1)) -+ allocate (numdih(mxtmls),stat=fail(2)) -+ allocate (keydih(mxtdih),stat=fail(3)) -+ allocate (lstdih(mxtdih,4),stat=fail(4)) -+ allocate (listdih(mxdihd,5),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1011) -+ enddo -+ -+ do i=1,mxtmls -+ numdih(i)=0 -+ enddo -+ -+ end subroutine alloc_dih_arrays -+ -+ subroutine define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining dihedral angles -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,ndihed,nsite,ntmp,idih,idih1,i -+ integer iatm1,iatm2,iatm3,iatm4,idum,isite1,isite2,isite3 -+ integer isite4,ia,ja -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numdih(itmols)=numdih(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of dihedral angles', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,/,1x,'dihedral angle details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'index',5x,'f-const',7x,'angle', -+ x 8x,'trig',4x,'1-4 elec',5x,'1-4 vdw',/)") -+ endif -+ -+ idih1=numdih(itmols) -+ do idih=1,idih1 -+ -+c read dihedral bond angle potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ iatm4=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ isite4=nsite-numsit(itmols)+iatm4 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3)*lfzsit(isite4).ne.0)then -+ -+ numdih(itmols)=numdih(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ ndihed=ndihed+1 -+ -+ if(ndihed.gt.mxtdih)call error(idnode,60) -+ -+ if(keyword(1:4).eq.'cos ')then -+ keydih(ndihed)=1 -+ elseif(keyword(1:4).eq.'harm')then -+ keydih(ndihed)=2 -+ elseif(keyword(1:4).eq.'hcos')then -+ keydih(ndihed)=3 -+ elseif(keyword(1:4).eq.'cos3')then -+ keydih(ndihed)=4 -+ elseif(keyword(1:4).eq.'ryck')then -+ keydih(ndihed)=5 -+ elseif(keyword(1:4).eq.'rbf')then -+ keydih(ndihed)=6 -+ elseif(keyword(1:4).eq.'opls')then -+ keydih(ndihed)=7 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,448) -+ endif -+ -+ lstdih(ndihed,1)=iatm1 -+ lstdih(ndihed,2)=iatm2 -+ lstdih(ndihed,3)=iatm3 -+ lstdih(ndihed,4)=iatm4 -+ prmdih(ndihed,1)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,2)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,3)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,4)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,5)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstdih(ndihed,ia),ia=1,4), -+ x (prmdih(ndihed,ja),ja=1,mxpdih) -+ -+c convert energies to internal units and angles to radians -+ -+ prmdih(ndihed,1)=prmdih(ndihed,1)*engunit -+ -+ if(keydih(ndihed).eq.4)then -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit -+ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit -+ -+ elseif(keydih(ndihed).eq.7)then -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit -+ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit -+ prmdih(ndihed,4)=prmdih(ndihed,4)*engunit -+ prmdih(ndihed,5)=prmdih(ndihed,5)*(pi/180.d0) -+ -+ else -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*(pi/180.d0) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_dihedrals -+ -+ subroutine dihfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntdihd,keyfce, -+ x dlrpot,epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe, -+ x virdih,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating dihedral energy and force -+c terms in molecular dynamics. -+c -+c version 3: scale factors for reduces electrostatic and vdw -+c 1-4 interactions. -+c -+c NOTE: assumes 1-4 interactions are in the exclude list -+c -+c block as opposed to stride version -+c -+c copyright - daresbury laboratory -+c author - w. smith mar 1992 -+c modified - t. forester dec 1993 -+c modified - t. forester jun 1995 - stress tensor added -+c modified - a. smondyrev may 2000 - ryckaert-bellemans potentials -+c modified - p.-a. cazade oct 2007 - solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive,kdrive,ldrive -+ integer i,k,ii,kk,ntdihd,idnode,mxnode,idih1,idih2,ia,ib -+ integer ic,id,imcon,ka,kb,l,keyfce,fail1,fail2,fail3,kkk -+ real(8) phi,twopi,rtwopi,dterm,srpot -+ real(8) engdih,virdih,engc14,engs14,virs14,rrbc,xab,yab,erc,fer -+ real(8) zab,xbc,ybc,zbc,xcd,ycd,zcd,pbx,pby,pbz,pb2,rpb1,rpb2 -+ real(8) pcx,pcy,pcz,pc2,rpc1,rpc2,pbpc,cosp,sinp,rsinp,exp1 -+ real(8) gamma,fax,fay,faz,fcx,fcy,fcz,fb1x,fb1y,fb1z,fd1x,fd1y -+ real(8) fd1z,scale,xad,yad,zad,rad,chgprd,coul,fcoul,fx,fy,fz -+ real(8) ppp,dlrpot,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,epsq,engcpe -+ real(8) vircpe,rcut,rvdw,engsrp,virsrp,xac,yac,zac,vcon,fcon -+ real(8) virc14,b0,rfld0,rfld1,rfld2,alpha,a1,a2,a3,a4,a5,pp,tt -+ real(8) cou14_vir,vdw14_vir,strs(6),strs_loc(6) -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) -+ real(8), allocatable :: xdcd(:),ydcd(:),zdcd(:) -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ data fail1,fail2,fail3/0,0,0/ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) -+ allocate (xdcd(msbad),ydcd(msbad),zdcd(msbad),stat=fail3) -+ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) -+ x call error(idnode,1060) -+ -+ twopi=2.d0*pi -+ rtwopi=1.d0/twopi -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntdihd-mxnode+1)/mxnode.gt.msbad) call error(idnode,421) -+ -+c block indices -+ -+ idih1=(idnode*ntdihd)/mxnode+1 -+ idih2=((idnode+1)*ntdihd)/mxnode -+ -+c initialise accumulators -+ -+ engdih=0.d0 -+ virdih=0.d0 -+ dih_fre=0.d0 -+ dih_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(3)=.true. -+ dih_sol(:)=0.d0 -+ if(lexcite)dih_exc(:)=0.d0 -+ -+ endif -+ -+ if(keyfce/2.eq.4)then -+ -+c constant terms for shifted coulombic potential -+ -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut -+ -+ elseif(keyfce/2.eq.5)then -+ -+c constant terms for reaction field potential -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut-rfld0*rcut -+ vcon=vcon+rfld2*rcut**2-rfld1 -+ -+ endif -+ -+c calculate bond vectors -+ -+ ii=0 -+ do i=idih1,idih2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listdih(ii,2) -+ ib=listdih(ii,3) -+ ic=listdih(ii,4) -+ id=listdih(ii,5) -+ -+c define components of bond vectors -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+ xdbc(ii)=xxx(ib)-xxx(ic) -+ ydbc(ii)=yyy(ib)-yyy(ic) -+ zdbc(ii)=zzz(ib)-zzz(ic) -+ -+ xdcd(ii)=xxx(ic)-xxx(id) -+ ydcd(ii)=yyy(ic)-yyy(id) -+ zdcd(ii)=zzz(ic)-zzz(id) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) -+ call images(imcon,0,1,ii,cell,xdcd,ydcd,zdcd) -+ -+c zero dihedral energy accumulator -+ -+ engdih=0.d0 -+ virdih=0.d0 -+ -+c zero scaled 1-4 electrostatic and short range potential accumulators -+ -+ engc14=0.d0 -+ virc14=0.d0 -+ engs14=0.d0 -+ virs14=0.d0 -+ vdw14_vir=0.d0 -+ cou14_vir=0.d0 -+ -+c loop over all specified dihedrals -+ -+ ii=0 -+ do i=idih1,idih2 -+ -+c define components of bond vectors -+ -+ ii=ii+1 -+ -+ xab=xdab(ii) -+ yab=ydab(ii) -+ zab=zdab(ii) -+ -+ xbc=xdbc(ii) -+ ybc=ydbc(ii) -+ zbc=zdbc(ii) -+ rrbc=1.d0/sqrt(xbc*xbc+ybc*ybc+zbc*zbc) -+ -+ xcd=xdcd(ii) -+ ycd=ydcd(ii) -+ zcd=zdcd(ii) -+ -+ xac=xab+xbc -+ yac=yab+ybc -+ zac=zab+zbc -+ -+c construct first dihedral vector -+ -+ pbx=yab*zbc-zab*ybc -+ pby=zab*xbc-xab*zbc -+ pbz=xab*ybc-yab*xbc -+ pb2=pbx*pbx+pby*pby+pbz*pbz -+ rpb1=1.d0/sqrt(pb2) -+ rpb2=rpb1*rpb1 -+ -+c construct second dihedral vector -+ -+ pcx=ybc*zcd-zbc*ycd -+ pcy=zbc*xcd-xbc*zcd -+ pcz=xbc*ycd-ybc*xcd -+ pc2=pcx*pcx+pcy*pcy+pcz*pcz -+ rpc1=1.d0/sqrt(pc2) -+ rpc2=rpc1*rpc1 -+ -+c determine dihedral angle -+ -+ pbpc=pbx*pcx+pby*pcy+pbz*pcz -+ cosp=pbpc*rpb1*rpc1 -+ sinp=(xbc*(pcy*pbz-pcz*pby)+ybc*(pbx*pcz-pbz*pcx)+ -+ x zbc*(pcx*pby-pcy*pbx))*(rpb1*rpc1*rrbc) -+ -+ phi=atan2(sinp,cosp) -+ -+c avoid singularity in sinp -+ -+ sinp=sign(max(1.d-8,abs(sinp)),sinp) -+ rsinp=1.d0/sinp -+ -+c selection of potential energy function type -+ -+ kk=listdih(ii,1) -+ -+c calculate potential energy and scalar force term -+ -+ if(keydih(kk).eq.1)then -+ -+c key=1 for torsion dihedral potential -+ -+ dterm=prmdih(kk,1)*(1.d0+cos(prmdih(kk,3)*phi- -+ x prmdih(kk,2))) -+ gamma=-rpb1*rpc1*rsinp*prmdih(kk,1)*prmdih(kk,3)* -+ x sin(prmdih(kk,3)*phi-prmdih(kk,2)) -+ -+ else if(keydih(kk).eq.2)then -+ -+c key=2 for harmonic improper dihedral -+ -+ phi=phi-prmdih(kk,2) -+ phi=phi-nint(phi*rtwopi)*twopi -+ dterm=0.5d0*prmdih(kk,1)*(phi*phi) -+ gamma=rpb1*rpc1*rsinp*prmdih(kk,1)*phi -+ -+ else if(keydih(kk).eq.3)then -+ -+c key=3 for harmonic cosine dihedral -+ -+ dterm=0.5d0*prmdih(kk,1)*(cos(phi)- -+ x cos(prmdih(kk,2)))**2 -+ gamma=-rpb1*rpc1*prmdih(kk,1)*(cos(phi)-cos(prmdih(kk,2))) -+ -+ else if(keydih(kk).eq.4)then -+ -+c key=4 for 3-term cosine dihedral -+ -+ dterm=0.5d0*(prmdih(kk,1)*(1.d0+cos(phi))+ -+ x prmdih(kk,2)*(1.d0-cos(2.d0*phi))+prmdih(kk,3)* -+ x (1.d0+cos(3.d0*phi))) -+ gamma=-rpb1*rpc1*rsinp*0.5d0*(prmdih(kk,1)*sin(phi)- -+ x 2.d0*prmdih(kk,2)*sin(2.d0*phi)+3.d0*prmdih(kk,3)* -+ x sin(3.d0*phi)) -+ -+ else if(keydih(kk).eq.5)then -+ -+c key=5 for ryckaert-bellemans potential -+c chem.phys.lett., vol.30, p.123, 1975. -+c ATTENTION !!! Modified to have trans configuration -+c correspond to phi=180 rather than -+c phi=0 as in original form. -+ -+ dterm=prmdih(kk,1)*(1.116d0-1.462d0*cos(phi)- -+ x 1.578d0*(cos(phi))**2+0.368d0*(cos(phi))**3+ -+ x 3.156d0*(cos(phi))**4+3.788d0*(cos(phi))**5) -+ gamma=prmdih(kk,1)*(1.462d0+3.156d0*cos(phi)- -+ x 1.104d0*(cos(phi))**2-12.624d0*(cos(phi))**3- -+ x 18.94d0*(cos(phi))**4)*rpb1*rpc1 -+ -+ else if(keydih(kk).eq.6)then -+ -+c key=6 for fluorinated ryckaert-bellemans potential -+c Rice at al., JCP 104, 2101, (1996). -+ -+ dterm=prmdih(kk,1)*(3.55d0-2.78d0*cos(phi)- -+ x 3.56d0*(cos(phi))**2-1.64d0*(cos(phi))**3+ -+ x 7.13d0*(cos(phi))**4+12.84d0*(cos(phi))**5+ -+ x 9.67d0*exp(-56.d0*(phi-pi)**2)) -+ gamma=(prmdih(kk,1)*(2.78d0+7.12d0*cos(phi)+ -+ x 4.92d0*(cos(phi))**2-28.52d0*(cos(phi))**3- -+ x 64.2d0*(cos(phi))**4)-1083.04d0*(phi-pi)* -+ x exp(-56.0*(phi-pi)**2))*rpb1*rpc1 -+ -+ else if(keydih(kk).eq.7)then -+ -+c key=7 for opls cosine dihedral -+ -+ phi=phi-prmdih(kk,5) -+ dterm=prmdih(kk,1)+0.5d0*(prmdih(kk,2)* -+ x (1.d0+cos(phi))+prmdih(kk,3)*(1.d0-cos(2.d0*phi))+ -+ x prmdih(kk,4)*(1.d0+cos(3.d0*phi))) -+ gamma=-0.5d0*(prmdih(kk,2)*sin(phi)-2.d0*prmdih(kk,3)* -+ x sin(2.d0*phi)+3.d0*prmdih(kk,4)*sin(3.d0*phi))*rpb1* -+ x rpc1*rsinp -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ dterm=0.d0 -+ gamma=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listdih(ii,2) -+ ib=listdih(ii,3) -+ ic=listdih(ii,4) -+ id=listdih(ii,5) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ ldrive=driven(ltype(id)) -+ -+ endif -+ -+c set selection control for angle potential -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)then -+ dih_exc(atmolt(ia))=dih_exc(atmolt(ia))+dterm -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ dih_fre=dih_fre-dterm -+ dterm=lambda1*dterm -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ dih_fre=dih_fre+dterm -+ dterm=lambda2*dterm -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy -+ -+ engdih=engdih+dterm -+ -+c calculate solvation energy for dihedral term -+ -+ if(lsolva)then -+ dih_sol(atmolt(ia))=dih_sol(atmolt(ia))+dterm -+ endif -+ -+c calculate atomic forces for dihedral term -+ -+ fax=gamma*((-pcy*zbc+pcz*ybc)-pbpc*rpb2*(-pby*zbc+pbz*ybc)) -+ fay=gamma*(( pcx*zbc-pcz*xbc)-pbpc*rpb2*( pbx*zbc-pbz*xbc)) -+ faz=gamma*((-pcx*ybc+pcy*xbc)-pbpc*rpb2*(-pbx*ybc+pby*xbc)) -+ -+ fcx=gamma*((-pcy*zab+pcz*yab)-pbpc*rpb2*(-pby*zab+pbz*yab)) -+ fcy=gamma*(( pcx*zab-pcz*xab)-pbpc*rpb2*( pbx*zab-pbz*xab)) -+ fcz=gamma*((-pcx*yab+pcy*xab)-pbpc*rpb2*(-pbx*yab+pby*xab)) -+ -+ fb1x=gamma*((-pby*zcd+pbz*ycd)-pbpc*rpc2*(-pcy*zcd+pcz*ycd)) -+ fb1y=gamma*(( pbx*zcd-pbz*xcd)-pbpc*rpc2*( pcx*zcd-pcz*xcd)) -+ fb1z=gamma*((-pbx*ycd+pby*xcd)-pbpc*rpc2*(-pcx*ycd+pcy*xcd)) -+ -+ fd1x=gamma*((-pby*zbc+pbz*ybc)-pbpc*rpc2*(-pcy*zbc+pcz*ybc)) -+ fd1y=gamma*(( pbx*zbc-pbz*xbc)-pbpc*rpc2*( pcx*zbc-pcz*xbc)) -+ fd1z=gamma*((-pbx*ybc+pby*xbc)-pbpc*rpc2*(-pcx*ybc+pcy*xbc)) -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)-fax-fcx+fb1x -+ fyy(ib)=fyy(ib)-fay-fcy+fb1y -+ fzz(ib)=fzz(ib)-faz-fcz+fb1z -+ -+ fxx(ic)=fxx(ic)+fcx-fb1x-fd1x -+ fyy(ic)=fyy(ic)+fcy-fb1y-fd1y -+ fzz(ic)=fzz(ic)+fcz-fb1z-fd1z -+ -+ fxx(id)=fxx(id)+fd1x -+ fyy(id)=fyy(id)+fd1y -+ fzz(id)=fzz(id)+fd1z -+ -+c stress tensor for dihedral term -+ -+ strs(1)=strs(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x -+ strs(2)=strs(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x -+ strs(3)=strs(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x -+ strs(4)=strs(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y -+ strs(5)=strs(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z -+ strs(6)=strs(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy (no virial) -+ -+ eng_loc=eng_loc+dterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)-fax-fcx+fb1x -+ fyy_loc(ib)=fyy_loc(ib)-fay-fcy+fb1y -+ fzz_loc(ib)=fzz_loc(ib)-faz-fcz+fb1z -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx-fb1x-fd1x -+ fyy_loc(ic)=fyy_loc(ic)+fcy-fb1y-fd1y -+ fzz_loc(ic)=fzz_loc(ic)+fcz-fb1z-fd1z -+ -+ fxx_loc(id)=fxx_loc(id)+fd1x -+ fyy_loc(id)=fyy_loc(id)+fd1y -+ fzz_loc(id)=fzz_loc(id)+fd1z -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x -+ strs_loc(2)=strs_loc(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x -+ strs_loc(3)=strs_loc(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x -+ strs_loc(4)=strs_loc(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y -+ strs_loc(5)=strs_loc(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z -+ strs_loc(6)=strs_loc(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z -+ -+ endif -+ -+c calculate 1-4 dihedral interactions (coulombic and short ranged) -+c assumes 1-4 interactions are in the exclude list -+ -+ kk=listdih(ii,1) -+ -+c bypass OPLS 1-4 terms (not present) -+ -+ if(keydih(kk).ne.7)then -+ -+c 1-4 electrostatics : adjust by weighting factor -+ -+ scale=prmdih(kk,4) -+ -+ xad=xac+xcd -+ yad=yac+ycd -+ zad=zac+zcd -+ -+ rad=sqrt(xad**2+yad**2+zad**2) -+ -+c scaled charge product*dielectric -+ -+ chgprd=scale*chge(ia)*chge(id)*r4pie0 -+ coul=0.d0 -+ fcoul=0.d0 -+ -+c truncation of potential for all schemes except ewald sum -+ -+ if(abs(chgprd).gt.1.d-10.and.keyfce.gt.0)then -+ -+c electrostatics by ewald sum -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6.or.keyfce/2.eq.7)then -+ -+ coul=chgprd/(epsq*rad) -+ fcoul=coul/(rad**2) -+ -+c distance dependent dielectric -+ -+ elseif(rcut.gt.rad)then -+ -+ if(keyfce/2.eq.2)then -+ -+ coul=chgprd/(epsq*rad**2) -+ fcoul=2.0d0*coul/(rad**2) -+ -+c unmodified coulombic -+ -+ else if(keyfce/2.eq.3)then -+ -+ coul=chgprd/(epsq*rad) -+ fcoul=coul/(rad**2) -+ -+c truncated and shifted coulombic -+ -+ else if(keyfce/2.eq.4)then -+ -+ tt=1.d0/(1.d0+pp*alpha*rad) -+ exp1=exp(-(alpha*rad)**2) -+ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad -+ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 -+ -+c calculate potential energy and forces -+ -+ coul=chgprd*(erc-vcon+fcon*(rad-rcut))/epsq -+ fcoul=chgprd*(fer-fcon/rad)/epsq -+ -+c reaction field -+ -+ else if(keyfce/2.eq.5)then -+ -+ tt=1.d0/(1.d0+pp*alpha*rad) -+ exp1=exp(-(alpha*rad)**2) -+ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad -+ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 -+ coul=chgprd*(erc-vcon+fcon*(rad-rcut)+ -+ x rfld2*rad*rad-rfld1) -+ fcoul=chgprd*(fer-fcon/rad-rfld0) -+ -+ elseif(keyfce/2.eq.0)then -+ -+ coul=0.d0 -+ fcoul=0.d0 -+ -+ else -+ -+ call error(idnode,446) -+ -+ endif -+ -+ endif -+ -+c set selection control for coulombic 1-4 terms -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then -+ -+c set selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(id).eq.0) -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou14_vir=cou14_vir+fcoul*rad**2 -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou14_vir=cou14_vir-fcoul*rad**2 -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c electrostatic energy and virial for 1-4 term -+ -+ engc14=engc14+coul -+ virc14=virc14-fcoul*rad**2 -+ -+c solvation energy for coulombic 1-4 term -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c coulombic force for 1-4 term -+ -+ fx=fcoul*xad -+ fy=fcoul*yad -+ fz=fcoul*zad -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(id)=fxx(id)-fx -+ fyy(id)=fyy(id)-fy -+ fzz(id)=fzz(id)-fz -+ -+c stress tensor for coulombic 1-4 term -+ -+ strs(1)=strs(1)+xad*fx -+ strs(2)=strs(2)+xad*fy -+ strs(3)=strs(3)+xad*fz -+ strs(4)=strs(4)+yad*fy -+ strs(5)=strs(5)+yad*fz -+ strs(6)=strs(6)+zad*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rad**2 -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(id)=fxx_loc(id)-fx -+ fyy_loc(id)=fyy_loc(id)-fy -+ fzz_loc(id)=fzz_loc(id)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xad*fx -+ strs_loc(2)=strs_loc(2)+xad*fy -+ strs_loc(3)=strs_loc(3)+xad*fz -+ strs_loc(4)=strs_loc(4)+yad*fy -+ strs_loc(5)=strs_loc(5)+yad*fz -+ strs_loc(6)=strs_loc(6)+zad*fz -+ -+ endif -+ -+ endif -+ -+c 1-4 short ranged : adjust by weighting factor -+ -+ scale=prmdih(kk,5) -+ gamma=0.d0 -+ -+ if(mod(keyfce,2).eq.1)then -+ -+c atomic and potential function indices -+ -+ ka=max(ltype(ia),ltype(id)) -+ kb=min(ltype(ia),ltype(id)) -+ k=lstvdw((ka*(ka-1))/2+kb) -+ -+ if(abs(scale*vvv(1,k)).gt.1.d-10)then -+ -+c apply truncation of potential -+ -+ if(rvdw.gt.rad)then -+ -+c determine interpolation panel for force arrays -+ -+ l=int(rad/dlrpot) -+ ppp=rad/dlrpot-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ -+ srpot=scale*(t1+(t2-t1)*ppp*0.5d0) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ -+ gamma=scale*(t1+(t2-t1)*ppp*0.5d0)/(rad**2) -+ -+c set selection control for short ranged 1-4 terms -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then -+ -+c set selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(id).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+srpot -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre-srpot -+ vdw14_vir=vdw14_vir+gamma*rad**2 -+ srpot=lambda1*srpot -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre+srpot -+ vdw14_vir=vdw14_vir-gamma*rad**2 -+ srpot=lambda2*srpot -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c short ranged energy and virial for 1-4 term -+ -+ engs14=engs14+srpot -+ virs14=virs14-gamma*rad**2 -+ -+c solvation energy for short ranged 1-4 term -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+srpot -+ -+c short ranged forces for 1-4 term -+ -+ fx=gamma*xad -+ fy=gamma*yad -+ fz=gamma*zad -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(id)=fxx(id)-fx -+ fyy(id)=fyy(id)-fy -+ fzz(id)=fzz(id)-fz -+ -+c stress tensor for short ranged 1-4 term -+ -+ strs(1)=strs(1)+xad*fx -+ strs(2)=strs(2)+xad*fy -+ strs(3)=strs(3)+xad*fz -+ strs(4)=strs(4)+yad*fy -+ strs(5)=strs(5)+yad*fz -+ strs(6)=strs(6)+zad*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+srpot -+ vir_loc=vir_loc-gamma*rad**2 -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(id)=fxx_loc(id)-fx -+ fyy_loc(id)=fyy_loc(id)-fy -+ fzz_loc(id)=fzz_loc(id)-fz -+ -+c stress tensor for short ranged 1-4 term -+ -+ strs_loc(1)=strs_loc(1)+xad*fx -+ strs_loc(2)=strs_loc(2)+xad*fy -+ strs_loc(3)=strs_loc(3)+xad*fz -+ strs_loc(4)=strs_loc(4)+yad*fy -+ strs_loc(5)=strs_loc(5)+yad*fz -+ strs_loc(6)=strs_loc(6)+zad*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c sum contributions to potentials -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engdih -+ buffer(2)=engc14 -+ buffer(3)=virc14 -+ buffer(4)=engs14 -+ buffer(5)=virs14 -+ buffer(6)=dih_fre -+ buffer(7)=dih_vir -+ buffer(8)=vdw14_vir -+ buffer(9)=cou14_vir -+ call gdsum(buffer(1),9,buffer(10)) -+ engdih=buffer(1) -+ engc14=buffer(2) -+ virc14=buffer(3) -+ engs14=buffer(4) -+ virs14=buffer(5) -+ dih_fre=buffer(6) -+ dih_vir=buffer(7) -+ vdw14_vir=buffer(8) -+ cou14_vir=buffer(9) -+ -+ if(lsolva)then -+ -+ call gdsum(dih_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(dih_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ engcpe=engcpe+engc14 -+ vircpe=vircpe+virc14 -+ engsrp=engsrp+engs14 -+ virsrp=virsrp+virs14 -+ vdw_vir=vdw_vir+vdw14_vir -+ cou_vir=cou_vir+cou14_vir -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,448) -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdbc,ydbc,zdbc,stat=fail2) -+ deallocate (xdcd,ydcd,zdcd,stat=fail3) -+ -+ return -+ end subroutine dihfrc -+ -+ end module dihedral_module -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f dl_class_1.9/srcmod/dlpoly.f ---- dl_class_1.9.orig/srcmod/dlpoly.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f 2015-11-16 17:39:33.860700901 +0100 -@@ -0,0 +1,969 @@ -+ program dlpoly_classic -+ -+c*********************************************************************** -+c -+c dl_poly classic is an stfc/ccp5 program package for the -+c dynamical simulation of molecular systems. -+c -+c dl_poly is the copyright of the stfc daresbury laboratory, -+c daresbury, warrington wa4 4ad. -+c -+c neither the stfc, daresbury laboratory, ccp5 nor the authors -+c of this package claim that it is free from errors and do not -+c accept liability for any loss or damage that may arise from -+c its use. it is the users responsibility to verify that the -+c package dl_poly is fit for the purpose the user intends for -+c it. -+c -+c users of this package are recommended to consult the dl_poly -+c user manual for the full description of its use and purpose. -+c -+c authors: w.smith and t.r.forester 1995 -+c copyright daresbury laboratory 1995 -+c -+c DL_POLY CLASSIC VERSION 1.9 -+c -+c*********************************************************************** -+ -+c declare required modules -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use define_system_module -+ use dihedral_module -+ use driver_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use forces_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use integrator_module -+ use inversion_module -+ use metal_module -+ use metafreeze_module -+ use nlist_builders_module -+ use pair_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ character*1 hms,dec -+ character*8 seek -+ -+ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle -+ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb -+ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd -+ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch -+ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect -+ -+ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn -+ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt -+ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj -+ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw -+ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp -+ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k -+ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit -+ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode -+ integer natms2,ntghost,nsolva,isolva,nofic -+ -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd -+ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint -+ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter -+ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom -+ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf -+ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl -+ real(8) engord,virord -+ -+c PLUMED modifications -+ real(8) energyUnits,lengthUnits,timeUnits -+ integer(8) get_comms -+c PLUMED modifications -+ -+ real(8), allocatable :: tbuffer(:) -+ integer :: plumedavaiable -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -+ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ -+ -+c set up the communications -+ -+ call initcomms() -+ call gsync() -+ -+c determine processor identities -+ -+ call machine(idnode,mxnode) -+ -+c activate for limited-life executable -+ -+CBOMB call bomb(idnode,2008,6,30) -+ -+ allocate (tbuffer(10),stat=memr) -+ -+ call parset(redirect,idnode,mxnode,tbuffer) -+ -+c open main printing file -+ -+ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') -+ if(idnode.eq.0) write (nrite, -+ x "(/,20x,'DL_POLY Classic 1.9', -+ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode -+ -+c allocate arrays for each function -+ -+ call alloc_ang_arrays(idnode) -+ call alloc_bnd_arrays(idnode) -+ call alloc_config_arrays(idnode) -+ call alloc_csh_arrays(idnode) -+ call alloc_dih_arrays(idnode) -+ call alloc_ewald_arrays(idnode) -+ call alloc_exc_arrays(idnode) -+ call alloc_exi_arrays(idnode) -+ call alloc_fbp_arrays(idnode) -+ call alloc_fld_arrays(idnode) -+ call alloc_free_arrays(idnode) -+ call alloc_hke_arrays(idnode) -+ call alloc_hyper_arrays(idnode) -+ call alloc_inv_arrays(idnode) -+ call alloc_met_arrays(idnode) -+ call alloc_pair_arrays(idnode) -+ call alloc_pmf_arrays(idnode) -+ call alloc_prp_arrays(idnode) -+ call alloc_rgbdy_arrays(idnode) -+ call alloc_shake_arrays(idnode) -+ call alloc_site_arrays(idnode) -+ call alloc_sol_arrays(idnode) -+ call alloc_spme_arrays(idnode) -+ call alloc_tbp_arrays(idnode) -+ call alloc_ter_arrays(idnode) -+ call alloc_tet_arrays(idnode) -+ call alloc_vdw_arrays(idnode) -+ -+c start clock -+ -+ call timchk(0,tzero) -+ -+c input the control parameters defining the simulation -+ -+ call simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c input the system force field -+ -+ call sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) -+ -+c construct initial configuration of system -+ -+ call sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c construct initial bookkeeping arrays -+ -+ call sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c reset atom numbers for excitation simulation -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c set initial system temperature -+ -+ call systemp -+ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c read thermodynamic and structural data from restart file -+ -+ call sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c metadynamics by d. quigley -+ -+ if(lmetadyn) -+ x call define_metadynamics(idnode,mxnode,natms,temp) -+ -+c synchronise LRC, SIC and system charge terms for switching -+ -+ llswitch=.false. -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod((nstep-nswitch)/niswitch,2).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.true. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c PLUMED modifications -+ if(lplumed)then -+ -+ call plumed_f_installed(plumedavaiable) -+ -+ if (plumedavaiable<=0) then -+ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" -+ stop -+ else -+ call plumed_f_gcreate() -+ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) -+ call plumed_f_gcmd("setRealPrecision"//char(0),8) -+ energyUnits=0.01 -+ lengthUnits=0.1 -+ timeUnits=1 -+ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) -+ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) -+ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) -+ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) -+ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) -+ call plumed_f_gcmd("setNatoms"//char(0),natms) -+ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) -+ call plumed_f_gcmd("setTimestep"//char(0),tstep) -+ call plumed_f_gcmd("init"//char(0),0) -+ end if -+ endif -+ -+c PLUMED modifications -+ -+c zero long range component of stress -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero contraint terms -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ if(lminim.or.loptim.or.ntcons.eq.0)then -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c define target kinetic energy -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+c metadynamics by d. quigley -+ -+ sigma_shl=boltz*degshl*0.5d0 -+ -+c convert BPD parameters to internal units -+ -+ if(lbpd)then -+ -+ ebias=0.5d0*boltz*degfre*ebias -+ vmin=0.5d0*boltz*degfre*vmin -+ -+ endif -+ -+c time check -+ -+ call timchk(1,tzero) -+ -+c control variable for structure optimizer -+ -+ keystr=0 -+ stropt=.false. -+ -+ if(lminim)then -+ -+c first step of minimisation programme -+ -+ if(idnode.eq.0)write(nrite,"(1x,120('-'))") -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c calculate initial conditions for velocity verlet -+ -+ elseif(keyver.eq.1.and.nstep.eq.0)then -+ -+c kinetic stress tensor at start -+ -+ call dcell(cell,celprp) -+ width=min(celprp(7),celprp(8),celprp(9)) -+ call kinstress(natms,idnode,mxnode,stress) -+ engke=0.5d0*(stress(1)+stress(5)+stress(9)) -+ do i=1,9 -+ stress(i)=stress(i)/dble(mxnode) -+ enddo -+ -+c calculate initial forces -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+ endif -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+c construct the first reference state -+ -+ call hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+ endif -+ -+c perform selected NEB calculation -+ -+ if(lneb)then -+ -+ do i=1,numneb -+ -+ call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), -+ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+ call scan_profile(nturn,estar) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(1x,120('-'))") -+ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') -+ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ enddo -+ -+c bypass the MD cycle for this option -+ -+ recycle=.false. -+ -+ endif -+ -+c*********************************************************************** -+c start of molecular dynamics calculations -+c*********************************************************************** -+ -+ do while(recycle) -+ -+c increase step counter -+ -+ nstep=nstep+1 -+ recycle=(nstep.lt.nstrun) -+ -+c store velocities for free energy or solvation simulation -+ -+ if(keyver.eq.0)then -+ -+ if(lsolva)then -+ -+ vxo_sol(:)=vxx(:) -+ vyo_sol(:)=vyy(:) -+ vzo_sol(:)=vzz(:) -+ -+ elseif(lfree)then -+ -+ vxo_fre(:)=vxx(:) -+ vyo_fre(:)=vyy(:) -+ vzo_fre(:)=vzz(:) -+ -+ endif -+ -+ endif -+ -+c molecular switching option for excitation -+ -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod(nstep-nswitch,niswitch).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.not.llswitch -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c switch on the minimiser -+ -+ if(lminim)then -+ -+ lminnow=(mod(nstep,minstp).eq.0) -+ -+ endif -+ -+c conserved quantity (other than K + U) -+ -+ consv=0.d0 -+ -+c energy accumulators -+ -+ if(.not.lminnow)then -+ -+ engke=0.d0 -+ engrot=0.d0 -+ -+ endif -+ -+c calculate volume of simulation cell -+ -+ if(imcon.ne.0.and.imcon.ne.6)then -+ -+ call dcell(cell,celprp) -+ volm=celprp(10) -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ else -+ -+ volm=0.d0 -+ -+ endif -+ -+c reset sutton chen long range corrections (constant pressure only) -+ -+ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+c activate the impact option at designated time step -+ -+ if(lhit.and.nstep.eq.nhit)call impact -+ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c integrate equations of motion stage 1 of velocity verlet -+ -+ if(keyver.gt.0)then -+ -+ isw=1 -+ if(.not.loptim)then -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+ call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+ endif -+ -+ if(lminnow)then -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+ elseif(loptim.or.keyshl.ne.2)then -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+ else -+ -+ call shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+ endif -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c switching option for excitation simulation -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+c integrate equations of motion -+ -+ if(keyver.eq.0)then -+ -+c integrate equations of motion by leapfrog verlet -+ -+ if(.not.(loptim.or.lminnow))call lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+ else if(keyver.gt.0)then -+ -+c integrate equations of motion by velocity verlet (stage 2) -+ -+ isw=2 -+ if(.not.loptim)call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ endif -+ -+c update the atomic positions for the ghost molecule -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+c long range correction adjustment for free energy and solvation -+ -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+c application of transition analysis procedures -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+ engtke=engke+engrot -+ call hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+ endif -+ -+c reset average boost factor in BPD during equilibration -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate shell kinetic energy -+ -+ if(keyshl.eq.1)then -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+c apply temperature scaling -+ -+ if((ltscal.and.nstep.le.nsteql).and. -+ x mod(nstep-nsteql,nstbts).eq.0)then -+ -+ chit=0.d0 -+ chit_shl=0.d0 -+ chip=0.d0 -+ do i=1,9 -+ eta(i)=0.d0 -+ enddo -+ -+ if(keyshl.eq.1) then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c reset atom velocities at intervals if required -+ -+ if(newgau)then -+ -+ if(mod(nstep,numgau).eq.0)call regauss -+ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+ endif -+ -+c calculate physical quantities -+ -+ if(nstep.gt.0)call static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c z density calculation -+ -+ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then -+ -+ call zden0(idnode,natms,mxnode,nzden,zlen) -+ -+ endif -+ -+c terminate program if boundary conditions violated -+ -+ if(imcon.gt.0.and.rcut.gt.width)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ call error(idnode,95) -+ -+ endif -+ -+c line-printer output every nstbpo steps -+ -+ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then -+ -+ call timchk(0,timelp) -+ if(idnode.eq.0)then -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ if(mod(lines,npage).eq.0) -+ x write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, -+ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', -+ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, -+ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', -+ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', -+ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, -+ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', -+ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)") -+ x nstep,(stpval(i),i=1,9), -+ x simtim,dec,(stpval(i),i=10,18), -+ x prntim,hms,(stpval(i),i=19,27) -+ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', -+ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ lines=lines+1 -+ -+ endif -+ -+c report end of equilibration period -+ -+ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then -+ -+ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) -+ x write(nrite,"(/,/,1x,'switching off temperature ', -+ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep -+ ltscal=.false. -+ -+ endif -+ -+c write trajectory data -+ -+ if(ltraj.and.nstep.ge.nstraj) then -+ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then -+ -+ call traject -+ x (ltraj,idnode,imcon,istraj,keytrj,natms, -+ x nstraj,nstep,tstep) -+ -+ endif -+ -+ endif -+ -+c write solvation energy file -+ -+ if(lsolva.and.nstep.ge.nsolva)then -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ call solva_temp(idnode,mxnode,natms2,keyver) -+ call solvation_write(lexcite,lswitch,idnode,natms, -+ x nstep,nsolva,isolva,tstep,engunit,elrc) -+ -+ endif -+ -+ endif -+ -+c write free energy file -+ -+ if(lfree.and.nstep.ge.nfrn)then -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ call free_kinetic(lfrmas,idnode,mxnode,keyver) -+ call free_energy_write(idnode,nstep,engunit) -+ -+ endif -+ -+ endif -+ -+c save restart data in event of system crash -+ -+ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+ endif -+ -+c cycle time check -+ -+ call timchk(0,timelp) -+ recycle=(recycle.and.timjob-timelp.gt.timcls) -+ -+ enddo -+ -+c*********************************************************************** -+c end of molecular dynamics calculations -+c*********************************************************************** -+ -+c last time check -+ -+ call timchk(0,timelp) -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, -+ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") -+ x timelp,prntim,hms,timcls -+ -+c shell relaxation convergence statistics -+ -+ if(.not.loptim.and.keyshl.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'shell relaxation statistics : average cycles = ', -+ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 -+ -+ endif -+ -+c produce summary of simulation -+ -+c PLUMED -+ if(lplumed) call plumed_f_gcmd() -+c PLUMED -+ -+ levcfg=2 -+ if(loptim)levcfg=0 -+ if(.not.lneb)call result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, -+ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, -+ x chit_shl) -+ -+c write hyperdynamics restart file -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c close output channels -+ -+ if(idnode.eq.0) then -+ -+ close (nrite) -+ close (nstats) -+ close (nhist) -+ close (nevnt) -+ -+ endif -+ -+c terminate job -+ -+ call exitcomms() -+ -+ end -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f~ dl_class_1.9/srcmod/dlpoly.f~ ---- dl_class_1.9.orig/srcmod/dlpoly.f~ 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f~ 2015-11-16 17:31:56.327749683 +0100 -@@ -0,0 +1,969 @@ -+ program dlpoly_classic -+ -+c*********************************************************************** -+c -+c dl_poly classic is an stfc/ccp5 program package for the -+c dynamical simulation of molecular systems. -+c -+c dl_poly is the copyright of the stfc daresbury laboratory, -+c daresbury, warrington wa4 4ad. -+c -+c neither the stfc, daresbury laboratory, ccp5 nor the authors -+c of this package claim that it is free from errors and do not -+c accept liability for any loss or damage that may arise from -+c its use. it is the users responsibility to verify that the -+c package dl_poly is fit for the purpose the user intends for -+c it. -+c -+c users of this package are recommended to consult the dl_poly -+c user manual for the full description of its use and purpose. -+c -+c authors: w.smith and t.r.forester 1995 -+c copyright daresbury laboratory 1995 -+c -+c DL_POLY CLASSIC VERSION 1.9 -+c -+c*********************************************************************** -+ -+c declare required modules -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use define_system_module -+ use dihedral_module -+ use driver_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use forces_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use integrator_module -+ use inversion_module -+ use metal_module -+ use metafreeze_module -+ use nlist_builders_module -+ use pair_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ character*1 hms,dec -+ character*8 seek -+ -+ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle -+ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb -+ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd -+ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch -+ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect -+ -+ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn -+ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt -+ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj -+ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw -+ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp -+ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k -+ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit -+ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode -+ integer natms2,ntghost,nsolva,isolva,nofic -+ -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd -+ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint -+ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter -+ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom -+ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf -+ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl -+ real(8) engord,virord -+ -+c PLUMED modifications -+ real(8) energyUnits,lengthUnits,timeUnits -+ integer(8) get_comms -+c PLUMED modifications -+ -+ real(8), allocatable :: tbuffer(:) -+ integer :: plumedavaiable -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -+ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ -+ -+c set up the communications -+ -+ call initcomms() -+ call gsync() -+ -+c determine processor identities -+ -+ call machine(idnode,mxnode) -+ -+c activate for limited-life executable -+ -+CBOMB call bomb(idnode,2008,6,30) -+ -+ allocate (tbuffer(10),stat=memr) -+ -+ call parset(redirect,idnode,mxnode,tbuffer) -+ -+c open main printing file -+ -+ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') -+ if(idnode.eq.0) write (nrite, -+ x "(/,20x,'DL_POLY Classic 1.9', -+ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode -+ -+c allocate arrays for each function -+ -+ call alloc_ang_arrays(idnode) -+ call alloc_bnd_arrays(idnode) -+ call alloc_config_arrays(idnode) -+ call alloc_csh_arrays(idnode) -+ call alloc_dih_arrays(idnode) -+ call alloc_ewald_arrays(idnode) -+ call alloc_exc_arrays(idnode) -+ call alloc_exi_arrays(idnode) -+ call alloc_fbp_arrays(idnode) -+ call alloc_fld_arrays(idnode) -+ call alloc_free_arrays(idnode) -+ call alloc_hke_arrays(idnode) -+ call alloc_hyper_arrays(idnode) -+ call alloc_inv_arrays(idnode) -+ call alloc_met_arrays(idnode) -+ call alloc_pair_arrays(idnode) -+ call alloc_pmf_arrays(idnode) -+ call alloc_prp_arrays(idnode) -+ call alloc_rgbdy_arrays(idnode) -+ call alloc_shake_arrays(idnode) -+ call alloc_site_arrays(idnode) -+ call alloc_sol_arrays(idnode) -+ call alloc_spme_arrays(idnode) -+ call alloc_tbp_arrays(idnode) -+ call alloc_ter_arrays(idnode) -+ call alloc_tet_arrays(idnode) -+ call alloc_vdw_arrays(idnode) -+ -+c start clock -+ -+ call timchk(0,tzero) -+ -+c input the control parameters defining the simulation -+ -+ call simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c input the system force field -+ -+ call sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) -+ -+c construct initial configuration of system -+ -+ call sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c construct initial bookkeeping arrays -+ -+ call sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c reset atom numbers for excitation simulation -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c set initial system temperature -+ -+ call systemp -+ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c read thermodynamic and structural data from restart file -+ -+ call sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c metadynamics by d. quigley -+ -+ if(lmetadyn) -+ x call define_metadynamics(idnode,mxnode,natms,temp) -+ -+c synchronise LRC, SIC and system charge terms for switching -+ -+ llswitch=.false. -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod((nstep-nswitch)/niswitch,2).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.true. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c PLUMED modifications -+ if(lplumed)then -+ -+ call plumed_f_installed(plumedavaiable) -+ -+ if (plumedavaiable<=0) then -+ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" -+ stop -+ else -+ call plumed_f_gcreate() -+ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) -+ call plumed_f_gcmd("setRealPrecision"//char(0),8) -+ energyUnits=0.01 -+ lengthUnits=0.1 -+ timeUnits=1 -+ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) -+ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) -+ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) -+ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) -+ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) -+ call plumed_f_gcmd("setNatoms"//char(0),natms) -+ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) -+ call plumed_f_gcmd("setTimestep"//char(0),tstep) -+ call plumed_f_gcmd("init"//char(0),0) -+ end if -+ endif -+ -+c PLUMED modifications -+ -+c zero long range component of stress -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero contraint terms -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ if(lminim.or.loptim.or.ntcons.eq.0)then -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c define target kinetic energy -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+c metadynamics by d. quigley -+ -+ sigma_shl=boltz*degshl*0.5d0 -+ -+c convert BPD parameters to internal units -+ -+ if(lbpd)then -+ -+ ebias=0.5d0*boltz*degfre*ebias -+ vmin=0.5d0*boltz*degfre*vmin -+ -+ endif -+ -+c time check -+ -+ call timchk(1,tzero) -+ -+c control variable for structure optimizer -+ -+ keystr=0 -+ stropt=.false. -+ -+ if(lminim)then -+ -+c first step of minimisation programme -+ -+ if(idnode.eq.0)write(nrite,"(1x,120('-'))") -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c calculate initial conditions for velocity verlet -+ -+ elseif(keyver.eq.1.and.nstep.eq.0)then -+ -+c kinetic stress tensor at start -+ -+ call dcell(cell,celprp) -+ width=min(celprp(7),celprp(8),celprp(9)) -+ call kinstress(natms,idnode,mxnode,stress) -+ engke=0.5d0*(stress(1)+stress(5)+stress(9)) -+ do i=1,9 -+ stress(i)=stress(i)/dble(mxnode) -+ enddo -+ -+c calculate initial forces -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+ endif -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+c construct the first reference state -+ -+ call hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+ endif -+ -+c perform selected NEB calculation -+ -+ if(lneb)then -+ -+ do i=1,numneb -+ -+ call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), -+ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+ call scan_profile(nturn,estar) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(1x,120('-'))") -+ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') -+ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ enddo -+ -+c bypass the MD cycle for this option -+ -+ recycle=.false. -+ -+ endif -+ -+c*********************************************************************** -+c start of molecular dynamics calculations -+c*********************************************************************** -+ -+ do while(recycle) -+ -+c increase step counter -+ -+ nstep=nstep+1 -+ recycle=(nstep.lt.nstrun) -+ -+c store velocities for free energy or solvation simulation -+ -+ if(keyver.eq.0)then -+ -+ if(lsolva)then -+ -+ vxo_sol(:)=vxx(:) -+ vyo_sol(:)=vyy(:) -+ vzo_sol(:)=vzz(:) -+ -+ elseif(lfree)then -+ -+ vxo_fre(:)=vxx(:) -+ vyo_fre(:)=vyy(:) -+ vzo_fre(:)=vzz(:) -+ -+ endif -+ -+ endif -+ -+c molecular switching option for excitation -+ -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod(nstep-nswitch,niswitch).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.not.llswitch -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c switch on the minimiser -+ -+ if(lminim)then -+ -+ lminnow=(mod(nstep,minstp).eq.0) -+ -+ endif -+ -+c conserved quantity (other than K + U) -+ -+ consv=0.d0 -+ -+c energy accumulators -+ -+ if(.not.lminnow)then -+ -+ engke=0.d0 -+ engrot=0.d0 -+ -+ endif -+ -+c calculate volume of simulation cell -+ -+ if(imcon.ne.0.and.imcon.ne.6)then -+ -+ call dcell(cell,celprp) -+ volm=celprp(10) -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ else -+ -+ volm=0.d0 -+ -+ endif -+ -+c reset sutton chen long range corrections (constant pressure only) -+ -+ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+c activate the impact option at designated time step -+ -+ if(lhit.and.nstep.eq.nhit)call impact -+ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c integrate equations of motion stage 1 of velocity verlet -+ -+ if(keyver.gt.0)then -+ -+ isw=1 -+ if(.not.loptim)then -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+ call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+ endif -+ -+ if(lminnow)then -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+ elseif(loptim.or.keyshl.ne.2)then -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+ else -+ -+ call shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+ endif -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c switching option for excitation simulation -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+c integrate equations of motion -+ -+ if(keyver.eq.0)then -+ -+c integrate equations of motion by leapfrog verlet -+ -+ if(.not.(loptim.or.lminnow))call lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+ else if(keyver.gt.0)then -+ -+c integrate equations of motion by velocity verlet (stage 2) -+ -+ isw=2 -+ if(.not.loptim)call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ endif -+ -+c update the atomic positions for the ghost molecule -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+c long range correction adjustment for free energy and solvation -+ -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+c application of transition analysis procedures -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+ engtke=engke+engrot -+ call hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+ endif -+ -+c reset average boost factor in BPD during equilibration -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate shell kinetic energy -+ -+ if(keyshl.eq.1)then -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+c apply temperature scaling -+ -+ if((ltscal.and.nstep.le.nsteql).and. -+ x mod(nstep-nsteql,nstbts).eq.0)then -+ -+ chit=0.d0 -+ chit_shl=0.d0 -+ chip=0.d0 -+ do i=1,9 -+ eta(i)=0.d0 -+ enddo -+ -+ if(keyshl.eq.1) then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c reset atom velocities at intervals if required -+ -+ if(newgau)then -+ -+ if(mod(nstep,numgau).eq.0)call regauss -+ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+ endif -+ -+c calculate physical quantities -+ -+ if(nstep.gt.0)call static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c z density calculation -+ -+ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then -+ -+ call zden0(idnode,natms,mxnode,nzden,zlen) -+ -+ endif -+ -+c terminate program if boundary conditions violated -+ -+ if(imcon.gt.0.and.rcut.gt.width)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ call error(idnode,95) -+ -+ endif -+ -+c line-printer output every nstbpo steps -+ -+ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then -+ -+ call timchk(0,timelp) -+ if(idnode.eq.0)then -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ if(mod(lines,npage).eq.0) -+ x write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, -+ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', -+ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, -+ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', -+ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', -+ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, -+ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', -+ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)") -+ x nstep,(stpval(i),i=1,9), -+ x simtim,dec,(stpval(i),i=10,18), -+ x prntim,hms,(stpval(i),i=19,27) -+ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', -+ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ lines=lines+1 -+ -+ endif -+ -+c report end of equilibration period -+ -+ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then -+ -+ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) -+ x write(nrite,"(/,/,1x,'switching off temperature ', -+ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep -+ ltscal=.false. -+ -+ endif -+ -+c write trajectory data -+ -+ if(ltraj.and.nstep.ge.nstraj) then -+ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then -+ -+ call traject -+ x (ltraj,idnode,imcon,istraj,keytrj,natms, -+ x nstraj,nstep,tstep) -+ -+ endif -+ -+ endif -+ -+c write solvation energy file -+ -+ if(lsolva.and.nstep.ge.nsolva)then -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ call solva_temp(idnode,mxnode,natms2,keyver) -+ call solvation_write(lexcite,lswitch,idnode,natms, -+ x nstep,nsolva,isolva,tstep,engunit,elrc) -+ -+ endif -+ -+ endif -+ -+c write free energy file -+ -+ if(lfree.and.nstep.ge.nfrn)then -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ call free_kinetic(lfrmas,idnode,mxnode,keyver) -+ call free_energy_write(idnode,nstep,engunit) -+ -+ endif -+ -+ endif -+ -+c save restart data in event of system crash -+ -+ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+ endif -+ -+c cycle time check -+ -+ call timchk(0,timelp) -+ recycle=(recycle.and.timjob-timelp.gt.timcls) -+ -+ enddo -+ -+c*********************************************************************** -+c end of molecular dynamics calculations -+c*********************************************************************** -+ -+c last time check -+ -+ call timchk(0,timelp) -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, -+ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") -+ x timelp,prntim,hms,timcls -+ -+c shell relaxation convergence statistics -+ -+ if(.not.loptim.and.keyshl.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'shell relaxation statistics : average cycles = ', -+ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 -+ -+ endif -+ -+c produce summary of simulation -+ -+ levcfg=2 -+ if(loptim)levcfg=0 -+ if(.not.lneb)call result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, -+ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, -+ x chit_shl) -+ -+c PLUMED -+ if(lplumed) call plumed_f_gcmd() -+c PLUMED -+ -+c write hyperdynamics restart file -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c close output channels -+ -+ if(idnode.eq.0) then -+ -+ close (nrite) -+ close (nstats) -+ close (nhist) -+ close (nevnt) -+ -+ endif -+ -+c terminate job -+ -+ call exitcomms() -+ -+ end -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.preplumed dl_class_1.9/srcmod/dlpoly.f.preplumed ---- dl_class_1.9.orig/srcmod/dlpoly.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f.preplumed 2012-04-10 16:32:54.000000000 +0200 -@@ -0,0 +1,929 @@ -+ program dlpoly_classic -+ -+c*********************************************************************** -+c -+c dl_poly classic is an stfc/ccp5 program package for the -+c dynamical simulation of molecular systems. -+c -+c dl_poly is the copyright of the stfc daresbury laboratory, -+c daresbury, warrington wa4 4ad. -+c -+c neither the stfc, daresbury laboratory, ccp5 nor the authors -+c of this package claim that it is free from errors and do not -+c accept liability for any loss or damage that may arise from -+c its use. it is the users responsibility to verify that the -+c package dl_poly is fit for the purpose the user intends for -+c it. -+c -+c users of this package are recommended to consult the dl_poly -+c user manual for the full description of its use and purpose. -+c -+c authors: w.smith and t.r.forester 1995 -+c copyright daresbury laboratory 1995 -+c -+c DL_POLY CLASSIC VERSION 1.9 -+c -+c*********************************************************************** -+ -+c declare required modules -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use define_system_module -+ use dihedral_module -+ use driver_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use forces_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use integrator_module -+ use inversion_module -+ use metal_module -+ use metafreeze_module -+ use nlist_builders_module -+ use pair_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ character*1 hms,dec -+ character*8 seek -+ -+ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle -+ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb -+ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd -+ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch -+ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect -+ -+ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn -+ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt -+ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj -+ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw -+ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp -+ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k -+ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit -+ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode -+ integer natms2,ntghost,nsolva,isolva,nofic -+ -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd -+ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint -+ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter -+ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom -+ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf -+ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl -+ real(8) engord,virord -+ real(8), allocatable :: tbuffer(:) -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -+ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ -+ -+c set up the communications -+ -+ call initcomms() -+ call gsync() -+ -+c determine processor identities -+ -+ call machine(idnode,mxnode) -+ -+c activate for limited-life executable -+ -+CBOMB call bomb(idnode,2008,6,30) -+ -+ allocate (tbuffer(10),stat=memr) -+ -+ call parset(redirect,idnode,mxnode,tbuffer) -+ -+c open main printing file -+ -+ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') -+ if(idnode.eq.0) write (nrite, -+ x "(/,20x,'DL_POLY Classic 1.9', -+ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode -+ -+c allocate arrays for each function -+ -+ call alloc_ang_arrays(idnode) -+ call alloc_bnd_arrays(idnode) -+ call alloc_config_arrays(idnode) -+ call alloc_csh_arrays(idnode) -+ call alloc_dih_arrays(idnode) -+ call alloc_ewald_arrays(idnode) -+ call alloc_exc_arrays(idnode) -+ call alloc_exi_arrays(idnode) -+ call alloc_fbp_arrays(idnode) -+ call alloc_fld_arrays(idnode) -+ call alloc_free_arrays(idnode) -+ call alloc_hke_arrays(idnode) -+ call alloc_hyper_arrays(idnode) -+ call alloc_inv_arrays(idnode) -+ call alloc_met_arrays(idnode) -+ call alloc_pair_arrays(idnode) -+ call alloc_pmf_arrays(idnode) -+ call alloc_prp_arrays(idnode) -+ call alloc_rgbdy_arrays(idnode) -+ call alloc_shake_arrays(idnode) -+ call alloc_site_arrays(idnode) -+ call alloc_sol_arrays(idnode) -+ call alloc_spme_arrays(idnode) -+ call alloc_tbp_arrays(idnode) -+ call alloc_ter_arrays(idnode) -+ call alloc_tet_arrays(idnode) -+ call alloc_vdw_arrays(idnode) -+ -+c start clock -+ -+ call timchk(0,tzero) -+ -+c input the control parameters defining the simulation -+ -+ call simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c input the system force field -+ -+ call sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) -+ -+c construct initial configuration of system -+ -+ call sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c construct initial bookkeeping arrays -+ -+ call sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c reset atom numbers for excitation simulation -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c set initial system temperature -+ -+ call systemp -+ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c read thermodynamic and structural data from restart file -+ -+ call sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c metadynamics by d. quigley -+ -+ if(lmetadyn) -+ x call define_metadynamics(idnode,mxnode,natms,temp) -+ -+c synchronise LRC, SIC and system charge terms for switching -+ -+ llswitch=.false. -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod((nstep-nswitch)/niswitch,2).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.true. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c zero long range component of stress -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero contraint terms -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ if(lminim.or.loptim.or.ntcons.eq.0)then -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c define target kinetic energy -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+c metadynamics by d. quigley -+ -+ sigma_shl=boltz*degshl*0.5d0 -+ -+c convert BPD parameters to internal units -+ -+ if(lbpd)then -+ -+ ebias=0.5d0*boltz*degfre*ebias -+ vmin=0.5d0*boltz*degfre*vmin -+ -+ endif -+ -+c time check -+ -+ call timchk(1,tzero) -+ -+c control variable for structure optimizer -+ -+ keystr=0 -+ stropt=.false. -+ -+ if(lminim)then -+ -+c first step of minimisation programme -+ -+ if(idnode.eq.0)write(nrite,"(1x,120('-'))") -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c calculate initial conditions for velocity verlet -+ -+ elseif(keyver.eq.1.and.nstep.eq.0)then -+ -+c kinetic stress tensor at start -+ -+ call dcell(cell,celprp) -+ width=min(celprp(7),celprp(8),celprp(9)) -+ call kinstress(natms,idnode,mxnode,stress) -+ engke=0.5d0*(stress(1)+stress(5)+stress(9)) -+ do i=1,9 -+ stress(i)=stress(i)/dble(mxnode) -+ enddo -+ -+c calculate initial forces -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+ endif -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+c construct the first reference state -+ -+ call hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+ endif -+ -+c perform selected NEB calculation -+ -+ if(lneb)then -+ -+ do i=1,numneb -+ -+ call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), -+ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+ call scan_profile(nturn,estar) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(1x,120('-'))") -+ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') -+ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ enddo -+ -+c bypass the MD cycle for this option -+ -+ recycle=.false. -+ -+ endif -+ -+c*********************************************************************** -+c start of molecular dynamics calculations -+c*********************************************************************** -+ -+ do while(recycle) -+ -+c increase step counter -+ -+ nstep=nstep+1 -+ recycle=(nstep.lt.nstrun) -+ -+c store velocities for free energy or solvation simulation -+ -+ if(keyver.eq.0)then -+ -+ if(lsolva)then -+ -+ vxo_sol(:)=vxx(:) -+ vyo_sol(:)=vyy(:) -+ vzo_sol(:)=vzz(:) -+ -+ elseif(lfree)then -+ -+ vxo_fre(:)=vxx(:) -+ vyo_fre(:)=vyy(:) -+ vzo_fre(:)=vzz(:) -+ -+ endif -+ -+ endif -+ -+c molecular switching option for excitation -+ -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod(nstep-nswitch,niswitch).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.not.llswitch -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c switch on the minimiser -+ -+ if(lminim)then -+ -+ lminnow=(mod(nstep,minstp).eq.0) -+ -+ endif -+ -+c conserved quantity (other than K + U) -+ -+ consv=0.d0 -+ -+c energy accumulators -+ -+ if(.not.lminnow)then -+ -+ engke=0.d0 -+ engrot=0.d0 -+ -+ endif -+ -+c calculate volume of simulation cell -+ -+ if(imcon.ne.0.and.imcon.ne.6)then -+ -+ call dcell(cell,celprp) -+ volm=celprp(10) -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ else -+ -+ volm=0.d0 -+ -+ endif -+ -+c reset sutton chen long range corrections (constant pressure only) -+ -+ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+c activate the impact option at designated time step -+ -+ if(lhit.and.nstep.eq.nhit)call impact -+ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c integrate equations of motion stage 1 of velocity verlet -+ -+ if(keyver.gt.0)then -+ -+ isw=1 -+ if(.not.loptim)then -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+ call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+ endif -+ -+ if(lminnow)then -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+ elseif(loptim.or.keyshl.ne.2)then -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+ else -+ -+ call shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+ endif -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c switching option for excitation simulation -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+c integrate equations of motion -+ -+ if(keyver.eq.0)then -+ -+c integrate equations of motion by leapfrog verlet -+ -+ if(.not.(loptim.or.lminnow))call lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+ else if(keyver.gt.0)then -+ -+c integrate equations of motion by velocity verlet (stage 2) -+ -+ isw=2 -+ if(.not.loptim)call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ endif -+ -+c update the atomic positions for the ghost molecule -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+c long range correction adjustment for free energy and solvation -+ -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+c application of transition analysis procedures -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+ engtke=engke+engrot -+ call hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+ endif -+ -+c reset average boost factor in BPD during equilibration -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate shell kinetic energy -+ -+ if(keyshl.eq.1)then -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+c apply temperature scaling -+ -+ if((ltscal.and.nstep.le.nsteql).and. -+ x mod(nstep-nsteql,nstbts).eq.0)then -+ -+ chit=0.d0 -+ chit_shl=0.d0 -+ chip=0.d0 -+ do i=1,9 -+ eta(i)=0.d0 -+ enddo -+ -+ if(keyshl.eq.1) then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c reset atom velocities at intervals if required -+ -+ if(newgau)then -+ -+ if(mod(nstep,numgau).eq.0)call regauss -+ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+ endif -+ -+c calculate physical quantities -+ -+ if(nstep.gt.0)call static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c z density calculation -+ -+ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then -+ -+ call zden0(idnode,natms,mxnode,nzden,zlen) -+ -+ endif -+ -+c terminate program if boundary conditions violated -+ -+ if(imcon.gt.0.and.rcut.gt.width)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ call error(idnode,95) -+ -+ endif -+ -+c line-printer output every nstbpo steps -+ -+ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then -+ -+ call timchk(0,timelp) -+ if(idnode.eq.0)then -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ if(mod(lines,npage).eq.0) -+ x write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, -+ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', -+ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, -+ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', -+ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', -+ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, -+ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', -+ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)") -+ x nstep,(stpval(i),i=1,9), -+ x simtim,dec,(stpval(i),i=10,18), -+ x prntim,hms,(stpval(i),i=19,27) -+ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', -+ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ lines=lines+1 -+ -+ endif -+ -+c report end of equilibration period -+ -+ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then -+ -+ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) -+ x write(nrite,"(/,/,1x,'switching off temperature ', -+ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep -+ ltscal=.false. -+ -+ endif -+ -+c write trajectory data -+ -+ if(ltraj.and.nstep.ge.nstraj) then -+ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then -+ -+ call traject -+ x (ltraj,idnode,imcon,istraj,keytrj,natms, -+ x nstraj,nstep,tstep) -+ -+ endif -+ -+ endif -+ -+c write solvation energy file -+ -+ if(lsolva.and.nstep.ge.nsolva)then -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ call solva_temp(idnode,mxnode,natms2,keyver) -+ call solvation_write(lexcite,lswitch,idnode,natms, -+ x nstep,nsolva,isolva,tstep,engunit,elrc) -+ -+ endif -+ -+ endif -+ -+c write free energy file -+ -+ if(lfree.and.nstep.ge.nfrn)then -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ call free_kinetic(lfrmas,idnode,mxnode,keyver) -+ call free_energy_write(idnode,nstep,engunit) -+ -+ endif -+ -+ endif -+ -+c save restart data in event of system crash -+ -+ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+ endif -+ -+c cycle time check -+ -+ call timchk(0,timelp) -+ recycle=(recycle.and.timjob-timelp.gt.timcls) -+ -+ enddo -+ -+c*********************************************************************** -+c end of molecular dynamics calculations -+c*********************************************************************** -+ -+c last time check -+ -+ call timchk(0,timelp) -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, -+ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") -+ x timelp,prntim,hms,timcls -+ -+c shell relaxation convergence statistics -+ -+ if(.not.loptim.and.keyshl.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'shell relaxation statistics : average cycles = ', -+ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 -+ -+ endif -+ -+c produce summary of simulation -+ -+ levcfg=2 -+ if(loptim)levcfg=0 -+ if(.not.lneb)call result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, -+ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, -+ x chit_shl) -+ -+c write hyperdynamics restart file -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c close output channels -+ -+ if(idnode.eq.0) then -+ -+ close (nrite) -+ close (nstats) -+ close (nhist) -+ close (nevnt) -+ -+ endif -+ -+c terminate job -+ -+ call exitcomms() -+ -+ end -diff -urN dl_class_1.9.orig/srcmod/driver_module.f dl_class_1.9/srcmod/driver_module.f ---- dl_class_1.9.orig/srcmod/driver_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/driver_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,498 @@ -+ module driver_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation driver routines -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use forces_module -+ use nlist_builders_module -+ use optimiser_module -+ use temp_scalers_module -+ -+ implicit none -+ -+ integer, parameter :: mxpass=250 -+ -+ contains -+ -+ subroutine molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero,newlst, -+ x stropt,cycle,ltad,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,keyfld,keyshl,keystr,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, -+ x ntpter,ntpvdw,ntshl,ntteth,ntcons,numrdf,nsolva,isolva, -+ x alpha,delr,dlrpot,drewd,elrc,engang,engbnd,engcpe,engdih, -+ x engfbp,engfld,enginv,engshl,engsrp,engtbp,engter,engtet, -+ x epsq,fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih,virfbp,virfld, -+ x virinv,virlrc,virmet,virshl,virsrp,virtbp,virter,virtet,volm, -+ x engmet,virtot,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a standard -+c molecular dynamics simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero -+ logical newlst,stropt,cycle,ltad,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons -+ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,nsolva -+ integer isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,virtot -+ real(8) engord,virord -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c structure optimisation -+ -+ if(loptim.or.lzero)then -+ -+ call optimisation_selector -+ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, -+ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) -+ -+ if(stropt.and.idnode.eq.0) -+ x write(nrite,"(/,/,1x,'structure optimisation converged ', -+ x 'at step ',i6,/,/,/,1x,120('-'))") nstep -+ -+ cycle=(cycle.and.(.not.stropt)) -+ -+ endif -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+ return -+ end subroutine molecular_dynamics -+ -+ subroutine shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a -+c relaxed shell molecular dynamics simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical,save :: lfirst = .true. -+ logical lfcap,lgofr,lneut,lnsq,loglnk,lzeql,ltad -+ logical newlst,relaxed,shgofr,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms -+ integer nhko,nlatt,nneut,nospl,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf -+ integer keyrlx,ntpmls,pass,nsolva,isolva,ia,ib,ishl -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,virtot,rlxtol -+ real(8) pass0,pass1,pass2,engord,virord -+ -+ real(8),allocatable,dimension(:),save :: xdcs,ydcs,zdcs -+ -+ pass=0 -+ keyrlx=0 -+ shgofr=lgofr -+ relaxed=.false. -+ -+ if(lfirst)then -+ -+ allocate(xdcs(1:ntshl)) -+ allocate(ydcs(1:ntshl)) -+ allocate(zdcs(1:ntshl)) -+ lfirst = .false. -+ -+ else -+ -+ do ishl=1,ntshl -+ -+ ia=listshl(ishl,2) -+ ib=listshl(ishl,3) -+ xxx(ib)=xxx(ia)+xdcs(ishl) -+ yyy(ib)=yyy(ia)+ydcs(ishl) -+ zzz(ib)=zzz(ia)+zdcs(ishl) -+ -+ enddo -+ -+ endif -+ -+ do while(.not.relaxed.and.pass.le.mxpass) -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+c relaxed shell option -+ -+ call relax_shells -+ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep, -+ x rlxtol) -+ -+ if(relaxed)then -+ -+ pass1=pass0*pass1 -+ pass0=pass0+1.d0 -+ pass1=pass1/pass0+pass/pass0 -+ pass2=max(dble(pass),pass2) -+c$$$ write(104,'("Relaxed shells before step: ",I5)')pass+1 -+ -+ endif -+ -+ pass=pass+1 -+ if(pass.gt.mxpass)call error(idnode,1950) -+ shgofr=.false. -+ -+c end of shell relaxation -+ -+ enddo -+ -+c store vector connecting the cores to the shells -+ -+ do ishl=1,ntshl -+ -+ ia=listshl(ishl,2) -+ ib=listshl(ishl,3) -+ xdcs(ishl)=xxx(ib)-xxx(ia) -+ ydcs(ishl)=yyy(ib)-yyy(ia) -+ zdcs(ishl)=zzz(ib)-zzz(ia) -+ -+ enddo -+ -+ call images(imcon,0,1,ntshl,cell,xdcs,ydcs,zdcs) -+ -+ return -+ end subroutine shell_relaxation -+ -+ subroutine minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a -+c minimisation simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2007 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,stropt,shgofr -+ logical conopt,newjob,ltad,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keystr,pass,i -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,keytol -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,ntcons -+ integer fail,nsolva,isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter,sigma -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp,tolnce -+ real(8) virtbp,virter,virtet,volm,engmet,virtot,engcon -+ real(8) cfgmin,engunit,hnorm,grad0,grad1,ff1,sgn -+ real(8) engord,virord -+ -+ real(8), allocatable :: sxx(:),syy(:),szz(:) -+ -+ save cfgmin,newjob -+ -+ data newjob/.true./ -+ -+ pass=0 -+ keystr=0 -+ shgofr=.false. -+ stropt=.false. -+ -+c dummy variables -+ -+ ltad=.false. -+ lsolva=.false. -+ lfree=.false. -+ lghost=.false. -+ nsolva=0 -+ isolva=1 -+ -+c$$$c diagnostic printing (not usually active) -+c$$$ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ write(nrite,"(1x,120('-'), -+c$$$ x /,/,1x,' pass',5x,'eng_cfg',5x,'eng_vdw',5x,'eng_cou', -+c$$$ x 5x,'eng_bnd',5x,'eng_ang',5x,'eng_dih',5x,'eng_tet', -+c$$$ x 5x,'eng_met',/,1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+ do while(.not.stropt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+c conjugate gradient structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+c$$$c diagnostic printing (not usually active) -+c$$$ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ write(nrite,"(1x,i8,1p,8e12.4)") -+c$$$ x pass,engcfg/engunit,engsrp/engunit,engcpe/engunit, -+c$$$ x engbnd/engunit,engang/engunit,engdih/engunit,engtet/ -+c$$$ x engunit,engmet/engunit -+c$$$ write(nrite,"(1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+c end of structure minimisation -+ -+ enddo -+ -+c ensure constraints are satisfied -+ -+ if(stropt.and.ntcons.gt.0)then -+ -+ allocate(sxx(mxatms),syy(mxatms),szz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,9999) -+ -+c store current forces -+ -+ do i=1,natms -+ -+ sxx(i)=fxx(i) -+ syy(i)=fyy(i) -+ szz(i)=fzz(i) -+ -+ enddo -+ -+ keystr=0 -+ conopt=.false. -+ -+ do while(.not.conopt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ engcon=0.d0 -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c conjugate gradient structure optimisation of constraint bonds -+ -+ call strucopt -+ x (conopt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcon,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ enddo -+ -+c restore current forces -+ -+ do i=1,natms -+ -+ fxx(i)=sxx(i) -+ fyy(i)=syy(i) -+ fzz(i)=szz(i) -+ -+ enddo -+ -+ deallocate(sxx,syy,szz,stat=fail) -+ -+ endif -+ -+c write data summary -+ -+ if(idnode.eq.0)then -+ -+ if(stropt)then -+ -+ write(nrite,'(1x,"minimisation converged after ",i6," cycles" -+ x ," energy minimum: ",1pe12.4)')pass,engcfg/engunit -+ -+ else -+ -+ write(nrite,'(1x,"minimisation NOT converged after ",i6, -+ x " cycles")')pass -+ -+ endif -+ -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c reset velocities after structure optimisation -+ -+ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+c write out minimised structure if lowest obtained so far -+ -+ if(newjob.or.cfgmin.gt.engcfg)then -+ -+ if(idnode.eq.0)call config_write('CFGMIN',0,imcon,natms,engcfg) -+ cfgmin=engcfg -+ newjob=.false. -+ -+ endif -+ -+ return -+ end subroutine minimiser -+ -+ end module driver_module -diff -urN dl_class_1.9.orig/srcmod/ensemble_tools_module.f dl_class_1.9/srcmod/ensemble_tools_module.f ---- dl_class_1.9.orig/srcmod/ensemble_tools_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/ensemble_tools_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1934 @@ -+ module ensemble_tools_module -+ -+c*********************************************************************** -+c -+c dl_poly module defining tools for ensemble simulations -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use core_shell_module -+ use property_module -+ use rigid_body_module -+ use utility_module -+ -+ contains -+ -+ function getmass(natms,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate total system mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) getmass -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ getmass=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ getmass=getmass+weight(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=getmass -+ call gdsum(buffer(1),1,buffer(2)) -+ getmass=buffer(1) -+ -+ endif -+ -+ return -+ end function getmass -+ -+ subroutine getcom(natms,idnode,mxnode,totmas,com) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system centre of mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) totmas -+ -+ real(8) com(3) -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ com(1)=0.d0 -+ com(2)=0.d0 -+ com(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ com(1)=com(1)+weight(i)*xxx(i) -+ com(2)=com(2)+weight(i)*yyy(i) -+ com(3)=com(3)+weight(i)*zzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) call gdsum(com,3,buffer) -+ -+ com(1)=com(1)/totmas -+ com(2)=com(2)/totmas -+ com(3)=com(3)/totmas -+ -+ return -+ end subroutine getcom -+ -+ subroutine getvom(natms,idnode,mxnode,totmas,vom) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system centre of mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) totmas -+ -+ real(8) vom(3) -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ vom(1)=0.d0 -+ vom(2)=0.d0 -+ vom(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ vom(1)=vom(1)+weight(i)*vxx(i) -+ vom(2)=vom(2)+weight(i)*vyy(i) -+ vom(3)=vom(3)+weight(i)*vzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) call gdsum(vom,3,buffer) -+ -+ vom(1)=vom(1)/totmas -+ vom(2)=vom(2)/totmas -+ vom(3)=vom(3)/totmas -+ -+ return -+ end subroutine getvom -+ -+ subroutine nvtscale -+ x (idnode,mxnode,natms,engke,sigma,tstep,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,sigma,tstep,qmass,chit,conint,scale,taut -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*qmass/taut**2 -+ -+c update chit to full step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+ return -+ end subroutine nvtscale -+ -+ subroutine nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,tstep,pmass,qmass,taut, -+ x chip,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith july 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,temp,sigma,tstep,pmass,qmass,chip,chit,conint,scale -+ real(8) taut -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) -+ -+c update chit to full step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+ return -+ end subroutine nptscale_t -+ -+ subroutine nptscale_p -+ x (idnode,mxnode,natms,engke,tstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT barostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,tstep,pmass,chip,press,vircon,virtot -+ real(8) volm,scale,chit -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c propagate chip to 1/2 step -+ -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+c barostat the velocities -+ -+ scale=exp(-tstep*chip) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update volume parameter to full step -+ -+ volm=volm*exp(3.d0*tstep*chip) -+ -+c update chip to full step -+ -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+ return -+ end subroutine nptscale_p -+ -+ subroutine nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x tstep,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*qmass/taut**2 -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+ return -+ end subroutine nvtqscl -+ -+ subroutine nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp,sigma, -+ x tstep,pmass,qmass,taut,chip,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip,pmass,temp -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 tstep -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full tstep -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) -+ -+c update chit to full tstep -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+ return -+ end subroutine nptqscl_t -+ -+ subroutine nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,tstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,i,ngrp,ntfree,igrp1,igrp2,ifre1,ifre2 -+ integer j,ig -+ real(8) engke,tstep,pmass,chip,press,vircon,virtot -+ real(8) vircom,volm,scale,engtrn,engfke,chit -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate chip to 1/2 tstep -+ -+ engke=engfke+engtrn -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+c barostat the free atom velocities -+ -+ scale=exp(-tstep*chip) -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ -+c update volume parameter to full tstep -+ -+ volm=volm*exp(3.d0*tstep*chip) -+ -+c update chip to full tstep -+ -+ engke=engfke+engtrn -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+ return -+ end subroutine nptqscl_p -+ -+ subroutine nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,tstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NST thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith july 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 -+ real(8) engke,temp,sigma,tstep,pmass,qmass,chip2,chit,conint,scale -+ real(8) taut,fac(0:3) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+ return -+ end subroutine nstscale_t -+ -+ subroutine nstscale_p -+ x (idnode,mxnode,natms,mode,tstep,pmass,chit,press,volm) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c barostat the velocities -+ -+ do i=iatm0,iatm1 -+ -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c update volume to full time step -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c calculate kinetic energy and contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstscale_p -+ -+ subroutine nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,tstep,pmass,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig,mode -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip2,pmass,temp,fac(0:3) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+ return -+ end subroutine nstqscl_t -+ -+ subroutine nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),strgrp(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c subtract kinetic contribution from stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c barostat the free atom velocities -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c new system volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c add new kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqscl_p -+ -+ subroutine nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,tstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig,mode -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip2,pmass,temp,fac(0:3) -+ real(8) strkin(9),strgrp(9) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c remove old kinetic term from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c scale kinetic energy tensors -+ -+ do i=1,9 -+ -+ strkin(i)=strkin(i)*scale**2 -+ strgrp(i)=strgrp(i)*scale**2 -+ -+ enddo -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c add new kinetic terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ return -+ end subroutine nstqscl_t2 -+ -+ subroutine nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, -+ x strkin,strgrp) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),strgrp(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c subtract kinetic contribution from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c barostat the free atom velocities -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c new system volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c add new kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqscl_p2 -+ -+ subroutine cell_update(tstep,cell,eta) -+ -+c*********************************************************************** -+c -+c dlpoly utility to update the cell vectors in the hoover -+c nst algorithms (velocity verlet version) -+c -+c copyright daresbury laboratory -+c author w.smith july 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i -+ real(8) tstep,cell(9),eta(9),ctmp(9),uni(9) -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ do i=1,9 -+ ctmp(i)=uni(i)+tstep*eta(i) -+ enddo -+ -+ call mat_mul(ctmp,cell,cell) -+ -+ return -+ end subroutine cell_update -+ -+ subroutine cell_propagate(tstep,cell,eta) -+ -+c*********************************************************************** -+c -+c dlpoly utility to update the cell vectors in the hoover -+c nst algorithms (leapfrog version) -+c -+c copyright daresbury laboratory -+c author w.smith july 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i -+ real(8) tstep -+ real(8) cell(9),eta(9),aaa(9),bbb(9),uni(9) -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ do i=1,9 -+ aaa(i)=tstep*eta(i) -+ enddo -+ -+ call mat_mul(aaa,aaa,bbb) -+ -+ do i=1,9 -+ bbb(i)=uni(i)+aaa(i)+0.5d0*bbb(i) -+ enddo -+ -+ call mat_mul(bbb,cell,cell) -+ -+ return -+ end subroutine cell_propagate -+ -+ subroutine nstqmtk_p -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, -+ x engfke,engtrn,engrot,temp,sigma) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c of martyna tobias and klein to atomic, group and quaternion -+c system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit,temp,sigma,degfre -+ real(8) engtke,engfke,engtrn,engrot,trace -+ real(8) strkin(9),strgrp(9),uni(9),ctmp(9) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ degfre=2.d0*sigma/(temp*boltz) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c propagate barostat momentum to 1/2 step -+ -+ call invert(cell,ctmp,volm) -+ volm=abs(volm) -+ engtke=2.d0*(engfke+engtrn+engrot)/degfre -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ -+ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c barostat the free atom velocities -+ -+ trace=(eta(1)+eta(5)+eta(9))/degfre -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) -+ -+ enddo -+ -+c update volume to full time step -+ -+ volm=volm*exp(tstep*(eta(1)+eta(5)+eta(9))) -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate new kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=2.d0*(engfke+engtrn+engrot)/degfre -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ -+ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqmtk_p -+ -+ subroutine kinstr(idnode,mxnode,natms,tstep) -+ -+c*********************************************************************** -+c -+c dlpoly routine to calculate the kinetic energy contribution to -+c the stress tensor -+c -+c assumes velocities are half-timestep behind forces -+c -+c replicated data version / block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester may 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm1,iatm2 -+ real(8) tstep,vxt,vyt,vzt -+ -+c block indices -+ -+ iatm1 = (idnode*natms)/mxnode + 1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ do i = iatm1,iatm2 -+ -+ if(rmass(i).gt.0.d0) then -+ -+ vxt = vxx(i)+fxx(i)*rmass(i)*tstep*0.5d0 -+ vyt = vyy(i)+fyy(i)*rmass(i)*tstep*0.5d0 -+ vzt = vzz(i)+fzz(i)*rmass(i)*tstep*0.5d0 -+ -+ stress(1)=stress(1)-weight(i)*vxt*vxt -+ stress(2)=stress(2)-weight(i)*vxt*vyt -+ stress(3)=stress(3)-weight(i)*vxt*vzt -+ stress(4)=stress(4)-weight(i)*vyt*vxt -+ stress(5)=stress(5)-weight(i)*vyt*vyt -+ stress(6)=stress(6)-weight(i)*vyt*vzt -+ stress(7)=stress(7)-weight(i)*vzt*vxt -+ stress(8)=stress(8)-weight(i)*vzt*vyt -+ stress(9)=stress(9)-weight(i)*vzt*vzt -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine kinstr -+ -+ function getkin(natms,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) getkin,engke -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ engke=0.d0 -+ -+ do i=iatm0,iatm1 -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkin=0.5d0*engke -+ -+ return -+ end function getkin -+ -+ function getkinf(ntfree,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic energy of atoms not in -+c rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ntfree,idnode,mxnode,i,j,ifre0,ifre1 -+ real(8) getkinf,engke -+ -+ ifre0=(idnode*ntfree)/mxnode+1 -+ ifre1=((idnode+1)*ntfree)/mxnode -+ -+ engke=0.d0 -+ -+ do j=ifre0,ifre1 -+ -+ i=lstfre(j) -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkinf=0.5d0*engke -+ -+ return -+ end function getkinf -+ -+ subroutine getking(ngrp,idnode,mxnode,engtrn,engrot) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engtrn,engrot -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engtrn=0.d0 -+ engrot=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c group kinetic energy -+ -+ engtrn=engtrn+ -+ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) -+ -+c rotational kinetic energy -+ -+ engrot=engrot+(rotinx(id,1)*omx(ig)**2 -+ x +rotiny(id,1)*omy(ig)**2 -+ x +rotinz(id,1)*omz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+ buffer(5)=engtrn -+ buffer(6)=engrot -+ call gdsum(buffer(5),2,buffer(1)) -+ engtrn=buffer(5) -+ engrot=buffer(6) -+ -+ endif -+ -+ engtrn=0.5d0*engtrn -+ engrot=0.5d0*engrot -+ -+ return -+ end subroutine getking -+ -+ function getkint(ngrp,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate translational kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engtrn,getkint -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engtrn=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c group kinetic energy -+ -+ engtrn=engtrn+ -+ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engtrn -+ call gdsum(buffer(1),1,buffer(2)) -+ engtrn=buffer(1) -+ -+ endif -+ -+ getkint=0.5d0*engtrn -+ -+ return -+ end function getkint -+ -+ function getkinr(ngrp,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate rotational kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engrot,getkinr -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engrot=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c rotational kinetic energy -+ -+ engrot=engrot+(rotinx(id,1)*omx(ig)**2 -+ x +rotiny(id,1)*omy(ig)**2 -+ x +rotinz(id,1)*omz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engrot -+ call gdsum(buffer(1),1,buffer(2)) -+ engrot=buffer(1) -+ -+ endif -+ -+ getkinr=0.5d0*engrot -+ -+ return -+ end function getkinr -+ -+ subroutine kinstress(natms,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author - w.smith november 2002 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,iatm0,iatm1,i -+ real(8) stresh(9) -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do i=iatm0,iatm1 -+ -+ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) -+ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) -+ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) -+ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) -+ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) -+ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstress -+ -+ subroutine kinstressg(ngrp,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c -+c********************************************************************* -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) stresh(9) -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ stresh(1)=stresh(1)+gmass(id)*gvxx(ig)*gvxx(ig) -+ stresh(2)=stresh(2)+gmass(id)*gvxx(ig)*gvyy(ig) -+ stresh(3)=stresh(3)+gmass(id)*gvxx(ig)*gvzz(ig) -+ stresh(5)=stresh(5)+gmass(id)*gvyy(ig)*gvyy(ig) -+ stresh(6)=stresh(6)+gmass(id)*gvyy(ig)*gvzz(ig) -+ stresh(9)=stresh(9)+gmass(id)*gvzz(ig)*gvzz(ig) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstressg -+ -+ subroutine getkins(natms,idnode,mxnode,getkin) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005: f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,iatm0,iatm1,i -+ real(8) getkin,engke -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ engke=0.d0 -+ -+ do i=iatm0,iatm1 -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkin=0.5d0*engke -+ -+ return -+ end subroutine getkins -+ -+ subroutine kinstressf(ntfree,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor for unconstrained atoms -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c amended - w.smith january 2005: f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ntfree,idnode,mxnode,i,ifre1,ifre2,ifre -+ real(8) stresh(9) -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) -+ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) -+ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) -+ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) -+ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) -+ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstressf -+ -+ subroutine nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,tstep,qmass_shl, -+ x taut,chit_shl,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c thermostats the core-shell relative motion -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c adapted - d. quigley 2006 : core-shell motion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,i,ishl1,ishl2,j,k,m -+ real(8) shlke,sigma_shl,tstep,qmass_shl,chit_shl,conint -+ real(8) dvx,dvy,dvz,tmx,tmy,tmz,rmu,scale,taut -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c calculate kinetic energy -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+c update chit to 1/2 step -+ -+ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit_shl) -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) -+ -+ if(rmu.gt.0.d0)then -+ -+ dvx=vxx(j)-vxx(i) -+ dvy=vyy(j)-vyy(i) -+ dvz=vzz(j)-vzz(i) -+ -+ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) -+ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) -+ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) -+ -+ vxx(i)=tmx/(weight(i)+weight(j))-scale*rmu*dvx/weight(i) -+ vxx(j)=tmx/(weight(i)+weight(j))+scale*rmu*dvx/weight(j) -+ vyy(i)=tmy/(weight(i)+weight(j))-scale*rmu*dvy/weight(i) -+ vyy(j)=tmy/(weight(i)+weight(j))+scale*rmu*dvy/weight(j) -+ vzz(i)=tmz/(weight(i)+weight(j))-scale*rmu*dvz/weight(i) -+ vzz(j)=tmz/(weight(i)+weight(j))+scale*rmu*dvz/weight(j) -+ -+ endif -+ -+ enddo -+ -+ shlke=shlke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit_shl*qmass_shl/taut**2 -+ -+c update chit to full step -+ -+ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl -+ -+ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) -+ -+ return -+ end subroutine nvtscale_shl -+ -+ end module ensemble_tools_module -+ -diff -urN dl_class_1.9.orig/srcmod/error_module.f dl_class_1.9/srcmod/error_module.f ---- dl_class_1.9.orig/srcmod/error_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/error_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1513 @@ -+ module error_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond potentials -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ contains -+ -+ subroutine error(idnode,iode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing error messages and bringing -+c about a controlled termination of the program -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c warning - this routine terminates the job. user must ensure -+c that all nodes are informed of error condition before this -+c subroutine is called. e.g. using subroutine gstate(). -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ logical kill -+ integer idnode,iode,kode -+ -+ kill=(iode.ge.0) -+ kode = abs(iode) -+ -+ if(idnode.eq.0)then -+ -+ if(kill)then -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY terminated due to error ', kode -+ -+ else -+ -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY will terminate due to error ', kode -+ -+ endif -+ -+ if(kode.lt.50)then -+ -+ if(kode.eq. 0)then -+ -+c dummy entry -+ -+ elseif(kode.eq. 3)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown directive found in CONTROL file' -+ elseif(kode.eq. 4)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown directive found in FIELD file' -+ elseif(kode.eq. 5)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown energy unit requested' -+ elseif(kode.eq. 6)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - energy unit not specified' -+ elseif(kode.eq. 7)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - energy unit respecified' -+ elseif(kode.eq. 8)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - time step not specified' -+ elseif(kode.eq.10)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many molecule types specified' -+ elseif(kode.eq.11)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate molecule directive in FIELD file' -+ elseif(kode.eq.12)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown molecule directive in FIELD file' -+ elseif(kode.eq.13)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - molecular species not yet specified' -+ elseif(kode.eq.14)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many unique atom types specified' -+ elseif(kode.eq.15)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate pair potential specified' -+ elseif(kode.eq.16)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from FIELD file processing' -+ elseif(kode.eq.17)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from CONTROL file processing' -+ elseif(kode.eq.18)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate 3-body potential specified' -+ elseif(kode.eq.19)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate 4-body potential specified' -+ elseif(kode.eq.20)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many molecule sites specified' -+ elseif(kode.eq.21)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate tersoff potential specified' -+ elseif(kode.eq.22)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unsuitable radial increment in TABLE file' -+ elseif(kode.eq.23)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incompatible FIELD and TABLE file potentials' -+ elseif(kode.eq.24)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABLE file' -+ elseif(kode.eq.25)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - wrong atom type found in CONFIG file' -+ elseif(kode.eq.26)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cutoff smaller than EAM potential range' -+ elseif(kode.eq.27)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incompatible FIELD and TABEAM file potentials' -+ elseif(kode.eq.28)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in mettab' -+ elseif(kode.eq.29)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABEAM file' -+ elseif(kode.eq.30)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many chemical bonds specified' -+ elseif(kode.eq.31)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many chemical bonds in system' -+ elseif(kode.eq.32)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - integer array memory allocation failure' -+ elseif(kode.eq.33)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - real array memory allocation failure' -+ elseif(kode.eq.34)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - character array memory allocation failure' -+ elseif(kode.eq.35)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - logical array memory allocation failure' -+ elseif(kode.eq.36)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - failed fmet array allocation in mettab' -+ elseif(kode.eq.40)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond constraints specified' -+ elseif(kode.eq.41)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond constraints in system' -+ elseif(kode.eq.42)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in merge1' -+ elseif(kode.eq.45)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many atoms in CONFIG file' -+ elseif(kode.eq.46)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - ewlbuf array too small in ewald1' -+ elseif(kode.eq.47)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in merge' -+ elseif(kode.eq.48)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in fortab' -+ elseif(kode.eq.49)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - frozen core-shell unit specified' -+ endif -+ -+ elseif(kode.lt.100)then -+ -+ if(kode.eq.50)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond angles specified' -+ elseif(kode.eq.51)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond angles in system' -+ elseif(kode.eq.52)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of FIELD file encountered' -+ elseif(kode.eq.53)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of CONTROL file encountered' -+ elseif(kode.eq.54)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - problem reading CONFIG file' -+ elseif(kode.eq.55)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of CONFIG file encountered' -+ elseif(kode.eq.57)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many core-shell units specified' -+ elseif(kode.eq.59)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many core-shell units in system' -+ elseif(kode.eq.60)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many dihedral angles specified' -+ elseif(kode.eq.61)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many dihedral angles in system' -+ elseif(kode.eq.62)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tethered atoms specified' -+ elseif(kode.eq.63)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tethered atoms in system' -+ elseif(kode.eq.65)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many excluded pairs specified' -+ elseif(kode.eq.66)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition for HK ewald' -+ elseif(kode.eq.67)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in thbfrc' -+ elseif(kode.eq.69)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells required in thbfrc' -+ elseif(kode.eq.70)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - constraint bond quench failure' -+ elseif(kode.eq.71)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many metal potentials specified' -+ elseif(kode.eq.72)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - different metal potential types specified' -+ elseif(kode.eq.73)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many inversion potentials specified' -+ elseif(kode.eq.75)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many atoms in specified system' -+ elseif(kode.eq.77)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many inversion potentials in system' -+ elseif(kode.eq.79)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in fbpfrc' -+ elseif(kode.eq.80)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many pair potentials specified' -+ elseif(kode.eq.81)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in pair potential list' -+ elseif(kode.eq.82)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated pair potential index too large' -+ elseif(kode.eq.83)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many three body potentials specified' -+ elseif(kode.eq.84)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in 3-body potential list' -+ elseif(kode.eq.85)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - required velocities not in CONFIG file' -+ elseif(kode.eq.86)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated 3-body potential index too large' -+ elseif(kode.eq.87)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells required in fbpfrc' -+ elseif(kode.eq.88)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tersoff potentials specified' -+ elseif(kode.eq.89)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many four body potentials specified' -+ elseif(kode.eq.90)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - system total electric charge nonzero' -+ elseif(kode.eq.91)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in 4-body potential list' -+ elseif(kode.eq.92)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in tersoff potential list' -+ elseif(kode.eq.93)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with rigid molecules' -+ elseif(kode.eq.95)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - potential cutoff exceeds half-cell width' -+ elseif(kode.eq.97)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with neutral groups' -+ elseif(kode.eq.99)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with constraints' -+ endif -+ -+ elseif(kode.lt.150)then -+ -+ if(kode.eq.100)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - forces working arrays too small' -+ elseif(kode.eq.101)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated 4-body potential index too large' -+ elseif(kode.eq.102)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxproc exceeded in shake arrays' -+ elseif(kode.eq.103)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxlshp exceeded in shake arrays' -+ elseif(kode.eq.105)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - shake algorithm failed to converge' -+ elseif(kode.eq.106)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlink ' -+ x //'subroutine' -+ elseif(kode.eq.107)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlinkneu ' -+ x //'subroutine' -+ elseif(kode.eq.108)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parneulst ' -+ x //'subroutine' -+ elseif(kode.eq.109)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlst_nsq ' -+ x //'subroutine' -+ elseif(kode.eq.110)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlst ' -+ x //'subroutine' -+ elseif(kode.eq.112)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - vertest array too small' -+ elseif(kode.eq.120)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - invalid determinant in matrix inversion' -+ elseif(kode.eq.130)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect octahedral boundary condition' -+ elseif(kode.eq.135)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect hexagonal prism boundary condition' -+ elseif(kode.eq.140)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect dodecahedral boundary condition' -+ elseif(kode.eq.141)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate metal potential specified' -+ elseif(kode.eq.142)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - interpolation outside range of metal '// -+ x 'potential attempted' -+ elseif(kode.eq.145)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - no van der waals potentials defined' -+ endif -+ -+ elseif(kode.lt.200)then -+ -+ if(kode.eq.150)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown van der waals potential selected' -+ elseif(kode.eq.151)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown metal potential selected' -+ elseif(kode.eq.153)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - metals not permitted with multiple timestep' -+ elseif(kode.eq.160)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unaccounted for atoms in exclude list ' -+ elseif(kode.eq.170)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many variables for statistic array ' -+ elseif(kode.eq.180)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - Ewald sum requested in non-periodic system' -+ elseif(kode.eq.185)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many reciprocal space vectors' -+ elseif(kode.eq.186)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer array too small in sysgen' -+ elseif(kode.eq.190)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - buffer array too small in splice' -+ endif -+ -+ elseif(kode.lt.250)then -+ -+ if(kode.eq.200)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - rdf buffer array too small in revive' -+ elseif(kode.eq.220)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many neutral groups in system' -+ elseif(kode.eq.225)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - multiple selection of optimisation options' -+ elseif(kode.eq.230)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neutral groups improperly arranged' -+ endif -+ -+ elseif(kode.lt.300)then -+ -+ if(kode.eq.250)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - Ewald sum requested with neutral groups' -+ elseif(kode.eq.260)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxexcl exceeded in excludeneu routine' -+ endif -+ -+ elseif(kode.lt.350)then -+ -+ if(kode.eq.300)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in parlink' -+ elseif(kode.eq.301)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid body types ' -+ elseif(kode.eq.302)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many sites in rigid body ' -+ elseif(kode.eq.303)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid bodies specified' -+ elseif(kode.eq.304)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid body sites in system ' -+ elseif(kode.eq.305)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - box size too small for link cells' -+ elseif(kode.eq.306)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - failed to find principal axis system' -+ elseif(kode.eq.310)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - quaternion setup failed ' -+ elseif(kode.eq.320)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - site in multiple rigid bodies' -+ elseif(kode.eq.321)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - quaternion integrator failed' -+ elseif(kode.eq.330)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxewld parameter incorrect' -+ elseif(kode.eq.331)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxhke parameter incorrect' -+ elseif(kode.eq.332)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxhko parameter too small' -+ elseif(kode.eq.340)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - invalid integration option requested' -+ endif -+ -+ elseif(kode.lt.400)then -+ -+ if(kode.eq.350)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too few degrees of freedom' -+ elseif(kode.eq.360)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - frozen atom found in rigid body' -+ elseif(kode.eq.380)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation temperature not specified' -+ elseif(kode.eq.381)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation timestep not specified' -+ elseif(kode.eq.382)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation cutoff not specified' -+ elseif(kode.eq.383)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation forces option not specified' -+ elseif(kode.eq.384)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - verlet strip width not specified' -+ elseif(kode.eq.385)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - primary cutoff not specified' -+ elseif(kode.eq.386)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - primary cutoff larger than rcut' -+ elseif(kode.eq.387)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - system pressure not specified' -+ elseif(kode.eq.388)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - npt incompatible with multiple timestep' -+ elseif(kode.eq.389)then -+ write(nrite,'(/,/,1x,a)') -+ x 'number of pimd beads not specified in field file' -+ elseif(kode.eq.390)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - npt ensemble requested in non-periodic system' -+ elseif(kode.eq.391)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect number of pimd beads in config file' -+ elseif(kode.eq.392)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells requested' -+ elseif(kode.eq.394)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - minimum image arrays exceeded' -+ elseif(kode.eq.396)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - interpolation array exceeded' -+ elseif(kode.eq.398)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cutoff too small for rprim and delr' -+ endif -+ -+ elseif(kode.lt.450)then -+ -+ if(kode.eq.400)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - rvdw greater than cutoff' -+ elseif(kode.eq.402)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - van der waals cutoff unset' -+ elseif(kode.eq.410)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cell not consistent with image convention' -+ elseif(kode.eq.412)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxxdf parameter too small for shake routine' -+ elseif(kode.eq.414)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - conflicting ensemble options in CONTROL file' -+ elseif(kode.eq.416)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - conflicting force options in CONTROL file' -+ elseif(kode.eq.418)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in bndfrc' -+ elseif(kode.eq.419)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in angfrc' -+ elseif(kode.eq.420)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in tethfrc' -+ elseif(kode.eq.421)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in dihfrc' -+ elseif(kode.eq.422)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - all-pairs must use multiple timestep' -+ elseif(kode.eq.423)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in shlfrc' -+ elseif(kode.eq.424)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - electrostatics incorrect for all-pairs' -+ elseif(kode.eq.425)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer array too small in shlmerge' -+ elseif(kode.eq.426)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neutral groups not permitted with all-pairs' -+ elseif(kode.eq.427)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in invfrc' -+ elseif(kode.eq.430)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - integration routine not available' -+ elseif(kode.eq.432)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - intlist failed to assign constraints ' -+ elseif(kode.eq.433)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - specify rcut before the Ewald sum precision' -+ elseif(kode.eq.434)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - illegal entry into STRESS related routine' -+ elseif(kode.eq.435)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - specify rcut before the coulomb precision' -+ elseif(kode.eq.436)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unrecognised ensemble ' -+ elseif(kode.eq.438)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - PMF constraints failed to converge' -+ elseif(kode.eq.440)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined angular potential' -+ elseif(kode.eq.442)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined three body potential' -+ elseif(kode.eq.443)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined four body potential' -+ elseif(kode.eq.444)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined bond potential' -+ elseif(kode.eq.445)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined many body potential' -+ elseif(kode.eq.446)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined electrostatic key in dihfrc' -+ elseif(kode.eq.447)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - 1-4 separation exceeds cutoff range' -+ elseif(kode.eq.448)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined dihedral potential' -+ elseif(kode.eq.449)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined inversion potential' -+ endif -+ -+ elseif(kode.lt.500)then -+ -+ if(kode.eq.450)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined tethering potential' -+ elseif(kode.eq.451)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - three body potential cutoff undefined' -+ elseif(kode.eq.452)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined pair potential' -+ elseif(kode.eq.453)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - four body potential cutoff undefined' -+ elseif(kode.eq.454)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined external field' -+ elseif(kode.eq.456)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - core and shell in same rigid unit' -+ elseif(kode.eq.458)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many PMF constraints - param. mspmf too ' -+ x //'small' -+ elseif(kode.eq.460)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many PMF sites - parameter mxspmf too small' -+ elseif(kode.eq.461)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined metal potential' -+ elseif(kode.eq.462)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - PMF UNIT record expected' -+ elseif(kode.eq.463)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in metal potential list' -+ elseif(kode.eq.464)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - thermostat time constant must be > 0.d0' -+ elseif(kode.eq.465)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated pair potential index too large' -+ elseif(kode.eq.466)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - barostat time constant must be > 0.d0' -+ elseif(kode.eq.468)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - r0 too large for snm potential with current ' -+ x //'cutoff' -+ elseif(kode.eq.470)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - n= ',nsatms -+ call error(idnode,100) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c variables for array bound checking -+ -+ ibig=0 -+ safe=.true. -+ -+c initialise excluded atom arrays -+ -+ do i=1,mxsite -+ -+ nexsit(i)=0 -+ -+ enddo -+ -+ do i=1,msatms -+ -+ nexatm(i)=0 -+ -+ enddo -+ -+ do j=1,mxexcl -+ -+ do i=1,mxsite -+ -+ lexsit(i,j)=0 -+ -+ enddo -+ -+ do i=1,msatms -+ -+ lexatm(i,j)=0 -+ -+ enddo -+ -+ enddo -+ -+ -+c loop over molecules in system -+ -+ ibonds=0 -+ iangle=0 -+ iconst=0 -+ idihdr=0 -+ invers=0 -+ igrp =0 -+ isite =0 -+ ishels=0 -+ -+ do itmols=1,ntpmls -+ -+c exclude sites on basis of chemical bonds -+ -+ do i=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(keybnd(ibonds).gt.0)then -+ -+ ia=lstbnd(ibonds,1)+isite -+ ib=lstbnd(ibonds,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of bond constraints -+ -+ do i=1,numcon(itmols) -+ -+ iconst=iconst+1 -+ ia=lstcon(iconst,1)+isite -+ ib=lstcon(iconst,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ enddo -+ -+c exclude sites on basis of bond angles -+ -+ do i=1,numang(itmols) -+ -+ iangle=iangle+1 -+ if(keyang(iangle).gt.0)then -+ ia=lstang(iangle,1)+isite -+ ib=lstang(iangle,2)+isite -+ ic=lstang(iangle,3)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude on basis of rigid groups -+ -+ do i=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ id=listyp(igrp) -+ -+ do jj=1,numgsit(id)-1 -+ -+ ia=lstgst(igrp,jj)+isite -+ -+ do jk=jj+1,numgsit(id) -+ -+ ib=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c exclude sites on basis of 1-4 dihedral angles -+ -+ do i=1,numdih(itmols) -+ -+ idihdr=idihdr+1 -+ ia=lstdih(idihdr,1)+isite -+ ib=lstdih(idihdr,2)+isite -+ ic=lstdih(idihdr,3)+isite -+ id=lstdih(idihdr,4)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+c id - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ib-isite -+ lexsit(ib,nexsit(ib))=id-isite -+ endif -+ endif -+ -+c id - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ic-isite -+ lexsit(ic,nexsit(ic))=id-isite -+ endif -+ endif -+ -+c ia - id interaction: may need to reset vdw and elec scale factors -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.id-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(id)=nexsit(id)+1 -+ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(id)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=id-isite -+ lexsit(id,nexsit(id))=ia-isite -+ endif -+ -+ elseif(keydih(idihdr).ne.7)then -+ -+c if already excluded reset 1..4 vdw and coulombic scale factors -+ -+ check=((abs(prmdih(idihdr,4)).gt.1.d-10).or. -+ x (abs(prmdih(idihdr,5)).gt.1.d-10)) -+ -+ if(check)then -+ -+ a1=dble(itmols) -+ a2=dble(ia) -+ a3=dble(id) -+ call warning(idnode,20,a1,a2,a3) -+ -+ prmdih(idihdr,4)=0.d0 -+ prmdih(idihdr,5)=0.d0 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of inversion potentials -+ -+ do i=1,numinv(itmols) -+ -+ invers=invers+1 -+ ia=lstinv(invers,1)+isite -+ ib=lstinv(invers,2)+isite -+ ic=lstinv(invers,3)+isite -+ id=lstinv(invers,4)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+c id - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ib-isite -+ lexsit(ib,nexsit(ib))=id-isite -+ endif -+ endif -+ -+c id - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ic-isite -+ lexsit(ic,nexsit(ic))=id-isite -+ endif -+ endif -+ -+c ia - id interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.id-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(id)=nexsit(id)+1 -+ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(id)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=id-isite -+ lexsit(id,nexsit(id))=ia-isite -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of core-shell units -+ -+ do i=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ ia=lstshl(ishels,1)+isite -+ ib=lstshl(ishels,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c exclude sites on basis of bonds to core-shell units -+ -+ ibonds=ibonds-numbonds(itmols) -+ do kk=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(keybnd(ibonds).gt.0)then -+ -+ ia1=lstbnd(ibonds,1)+isite -+ ib1=lstbnd(ibonds,2)+isite -+ -+ if(ia.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ia.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia1),mxexcl) -+ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia1)=nexsit(ia1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia1,nexsit(ia1))=ib-isite -+ lexsit(ib,nexsit(ib))=ia1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ib.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ endif -+ -+ endif -+ if(ib.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ia1)=nexsit(ia1)+1 -+ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ia1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ia1-isite -+ lexsit(ia1,nexsit(ia1))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of constraint bonds to core-shell units -+ -+ iconst=iconst-numcon(itmols) -+ do kk=1,numcon(itmols) -+ -+ iconst=iconst+1 -+ -+ ia1=lstcon(iconst,1)+isite -+ ib1=lstcon(iconst,2)+isite -+ -+ if(ia.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ia.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia1),mxexcl) -+ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia1)=nexsit(ia1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia1,nexsit(ia1))=ib-isite -+ lexsit(ib,nexsit(ib))=ia1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ib.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ endif -+ -+ endif -+ if(ib.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ia1)=nexsit(ia1)+1 -+ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ia1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ia1-isite -+ lexsit(ia1,nexsit(ia1))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of rigid units involving core or shell -+ -+ igrp=igrp-numgrp(itmols) -+ do kk=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ id=listyp(igrp) -+ -+ do jj=1,numgsit(id) -+ -+ ia1=lstgst(igrp,jj)+isite -+ if(ia1.eq.ia)then -+ -+ do jk=1,numgsit(id) -+ -+ if(jk.ne.jj)then -+ ib1=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(ia1.eq.ib)then -+ -+ do jk=1,numgsit(id) -+ -+ if(jk.ne.jj)then -+ ib1=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ ntpsit=isite -+ -+c check for exceeded array bounds -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ if(mxnode.gt.1)call gimax(ibig,1,jj) -+ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl -+ call error(idnode,65) -+ endif -+ -+c remove redundant entries from exclusion list -+c (there shouldn't be any!) -+ -+ do i=1,ntpsit -+ -+ nlast=nexsit(i) -+ do j=1,nexsit(i)-1 -+ -+ if(j.lt.nlast)then -+ -+ kk=j -+ do k=j+1,nexsit(i) -+ -+ if(lexsit(i,j).eq.lexsit(i,k))then -+ -+ nlast=nlast-1 -+ lexsit(i,k)=0 -+ -+ else if(lexsit(i,k).gt.0)then -+ -+ kk=kk+1 -+ lexsav=lexsit(i,k) -+ lexsit(i,k)=0 -+ lexsit(i,kk)=lexsav -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ nexsit(i)=nlast -+ -+ enddo -+ -+ return -+ end subroutine exclude -+ -+ subroutine excludeneu(idnode,mxnode,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c part 2 - neutral group implementation -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk -+ integer idnode,mxnode,nneut,ibig,iatom,jatom,last,mpm2 -+ integer npm2,m,ii,im,itmols,inoff,isoff,isit,iolsit,jm,jtmols -+ integer jnoff,jsoff,jsit,jolsit,jn1,jno1,jsite,jsite0,in1,ino1 -+ integer jj0,isite,ij,idum,it -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ ibig=0 -+ iatom=0 -+ jatom=0 -+ -+c generate all atomic pairs and check for exclusions -+c with Brode Ahlrichs ordering of groups -+ -+ last=nneut -+ lchk=.true. -+ mpm2=nneut/2+1 -+ npm2=(nneut-1)/2+1 -+ -+c outer loop over groups -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2-1 -+ -+c inner loop over groups - include intragroup interactions -+ -+ ii=0 -+ -+ do im=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ -+c first site in neutral group -+ -+ itmols=1 -+ inoff=0 -+ isoff=0 -+ isit=numsit(itmols)*nummols(itmols) -+ iolsit=numsit(itmols) -+ -+c calculate j group indices -+ -+ jm=im+m-1 -+ if(jm.gt.nneut)jm=jm-nneut -+ -+c inner loop over neutral groups -+ -+ jtmols=1 -+ jnoff=0 -+ jsoff=0 -+ jsit=numsit(jtmols)*nummols(jtmols) -+ jolsit=numsit(jtmols) -+ -+c test first sites in neutral group -+ -+ jatom=neulst(jm) -+ -+c establish pointer to sets -+ -+ do while(jatom.gt.jsit) -+ -+ jtmols=jtmols+1 -+ jnoff=jsit -+ jsoff=jsoff+jolsit -+ jsit=jsit+nummols(jtmols)*numsit(jtmols) -+ jolsit=numsit(jtmols) -+ -+ enddo -+ -+ jn1=jatom-jnoff -+ jno1=(jn1/jolsit)*jolsit -+ jsite=jn1-jno1 -+ if(jsite.eq.0)then -+ jsite=jolsit -+ jno1=jno1-jolsit -+ endif -+ jsite=jsite+jsoff -+ jsite0=jsite-1 -+ -+ do iatom=neulst(im),neulst(im+1)-1 -+ -+c establish pointer to sets -+ -+ do while(iatom.gt.isit) -+ -+ itmols=itmols+1 -+ inoff=isit -+ isoff=isoff+iolsit -+ isit=isit+nummols(itmols)*numsit(itmols) -+ iolsit=numsit(itmols) -+ -+ enddo -+ -+ in1=iatom-inoff -+ ino1=(in1/iolsit)*iolsit -+ isite=in1-ino1 -+ if(isite.eq.0)then -+ isite=iolsit -+ ino1=ino1-iolsit -+ endif -+ isite=isite+isoff -+ -+c test im and jm are neutral groups on same molecule -+ -+ if((jnoff.eq.inoff).and.(ino1.eq.jno1))then -+ if(abs(im-jm).lt.iolsit)then -+ -+ jj0=neulst(jm) -+ jsite=jsite0 -+ -+c special case for im=jm (ie. same group) -+ -+ if(im.eq.jm)then -+ -+ jj0=iatom+1 -+ jsite=isite -+ -+ endif -+ -+c test for excluded interaction -+ -+ do jatom=jj0,neulst(jm+1)-1 -+ -+ jsite=jsite+1 -+ -+ do ij=1,nexsit(isite) -+ -+ if(lexsit(isite,ij).eq.jsite-jsoff)then -+ -+ it=nexatm(ii) -+ -+ if(it+2.gt.mxexcl)then -+ -+ ibig=max(it+2,ibig) -+ nexatm(ii)=it+2 -+ lchk=.false. -+ -+ else -+ -+ lexatm(ii,it+1)=iatom -+ lexatm(ii,it+2)=jatom -+ nexatm(ii)=nexatm(ii)+2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c global check -+ -+ call gstate(lchk) -+ if(.not.lchk)then -+ -+ if(mxnode.gt.1)call gimax(ibig,1,idum) -+ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl -+ call error(idnode,260) -+ -+ endif -+ -+ return -+ end subroutine excludeneu -+ -+ subroutine exclude_link(idnode,mxnode,ntpmls) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c -+c part 2 - link cell implementation -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith june 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntpmls,iatom,jatom,lsite,ksite -+ integer itmols,imols,isite,kk,newatm,k -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ iatom=0 -+ jatom=0 -+ lsite=0 -+ ksite=0 -+ -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do isite=1,numsit(itmols) -+ -+ iatom=iatom+1 -+ -+ if(mod(iatom-1,mxnode).eq.idnode)then -+ -+ kk=0 -+ jatom=jatom+1 -+ -+ do k=1,nexsit(ksite+isite) -+ -+ newatm=lexsit(ksite+isite,k)+lsite -+ -+ kk=kk+1 -+ lexatm(jatom,kk)=newatm -+ -+ enddo -+ -+ nexatm(jatom)=kk -+ -+ endif -+ -+ enddo -+ -+ lsite=lsite+numsit(itmols) -+ -+ enddo -+ -+ ksite=ksite+numsit(itmols) -+ -+ enddo -+ -+ return -+ end subroutine exclude_link -+ -+ subroutine exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c part 2 -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith june 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,ntpmls,iatom,jatom,lsite -+ integer ksite,itmols,isite,imols,k,kk,newatm,j,latom,i,ii -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ iatom=0 -+ jatom=0 -+ lsite=0 -+ ksite=0 -+ -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do isite=1,numsit(itmols) -+ -+ iatom=iatom+1 -+ -+ if(mod(iatom-1,mxnode).eq.idnode)then -+ -+ kk=0 -+ jatom=jatom+1 -+ -+ do k=1,nexsit(ksite+isite) -+ -+ newatm=lexsit(ksite+isite,k)+lsite -+ -+c keep only brode-ahlrichs combinations of indices -+ -+ if(((newatm.gt.iatom).and. -+ x (newatm-iatom.le.natms/2)).or. -+ x ((newatm.lt.iatom).and. -+ x (newatm+natms-iatom.le.(natms-1)/2)))then -+ -+ kk=kk+1 -+ lexatm(jatom,kk)=newatm -+ -+ if(kk.gt.1)then -+ -+c sort the excluded atom list in ascending indices -+ -+ do j=kk,2,-1 -+ -+ if(lexatm(jatom,j).lt.lexatm(jatom,j-1)) -+ x then -+ latom=lexatm(jatom,j) -+ lexatm(jatom,j)=lexatm(jatom,j-1) -+ lexatm(jatom,j-1)=latom -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ nexatm(jatom)=kk -+ -+ endif -+ -+ enddo -+ -+ lsite=lsite+numsit(itmols) -+ -+ enddo -+ -+ ksite=ksite+numsit(itmols) -+ -+ enddo -+ -+c final sort into brode-ahlrichs ordering -+ -+ ii=0 -+ do i=1+idnode,natms,mxnode -+ -+ ii=ii+1 -+ do j=1,nexatm(ii) -+ -+ if(lexatm(ii,1).lt.i)then -+ -+ latom=lexatm(ii,1) -+ -+ do k=1,nexatm(ii)-1 -+ -+ lexatm(ii,k)=lexatm(ii,k+1) -+ -+ enddo -+ -+ lexatm(ii,nexatm(ii))=latom -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine exclude_atom -+ -+ end module exclude_module -+ -diff -urN dl_class_1.9.orig/srcmod/external_field_module.f dl_class_1.9/srcmod/external_field_module.f ---- dl_class_1.9.orig/srcmod/external_field_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/external_field_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,347 @@ -+ module external_field_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining external field potential arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmfld(:) -+ -+ save prmfld -+ -+ contains -+ -+ subroutine alloc_fld_arrays(idnode) -+ -+ implicit none -+ -+ integer fail,idnode -+ -+ data fail/0/ -+ -+ allocate (prmfld(mxfld),stat=fail) -+ if(fail.ne.0)call error(idnode,1200) -+ -+ end subroutine alloc_fld_arrays -+ -+ subroutine define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to define external fields -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c amended - p.-l. chau jun 2009 z-restraint option -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,keyfld,nfld,i,k,idum -+ real(8) engunit -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call strip(record,lenrec) -+ call lowcase(record,lenrec) -+ call copystring(record,message,80) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'elec') then -+ keyfld=1 -+ elseif(keyword(1:4).eq.'oshr') then -+ keyfld=2 -+ elseif(keyword(1:4).eq.'shrx') then -+ keyfld=3 -+ elseif(keyword(1:4).eq.'grav') then -+ keyfld=4 -+ elseif(keyword(1:4).eq.'magn') then -+ keyfld=5 -+ elseif(keyword(1:4).eq.'sphr') then -+ keyfld=6 -+ elseif(keyword(1:4).eq.'zbnd') then -+ keyfld=7 -+ elseif(keyword(1:4).eq.'zres') then -+ keyfld=9 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,454) -+ endif -+ -+ do i=1,mxfld -+ prmfld(i)=0.d0 -+ enddo -+ -+ nfld=intstr(record,lenrec,idum) -+ if(nfld.eq.0)nfld=5 -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ do k=1,nfld -+ -+ prmfld(k)=dblstr(record,lenrec,idum) -+ if(idum.gt.lenrec.and.k.lt.nfld)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'external field key ',13x,a4, -+ x /,/,30x,'external field parameters')") keyword(1:4) -+ write(nrite,"(2(/,1x,1p,5e15.5))") prmfld -+ -+ endif -+ -+c convert to internal units -+ -+ if(keyfld.eq.1.or.keyfld.eq.4.or.keyfld.eq.5) then -+ -+ if(.not.lunits)call error(idnode,6) -+ -+ do i=1,3 -+ prmfld(i)=prmfld(i)*engunit -+ enddo -+ -+ elseif(keyfld.eq.2.or.keyfld.eq.6.or.keyfld.eq.7) then -+ -+ prmfld(1)=prmfld(1)*engunit -+ -+ elseif(keyfld.eq.9) then -+ -+ prmfld(3)=prmfld(3)*engunit -+ -+ endif -+ -+ return -+ end subroutine define_external_field -+ -+ subroutine extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c*********************************************************************** -+c -+c dl_poly routine for application of an external field -+c -+c replicated data version / block data -+c -+c copyright daresbury laboratory 1993 -+c author - t.forester october 1993 -+c amended - t.forester dec 1994 -+c amended - p.-l. chau jun 2009 z-restraint option -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyfld,mxnode,natms,iatm1,iatm2,i,j -+ integer istart,ifinish,numresat -+ real(8) engfld,virfld,rz,rrr,gamma,zdif,totwgt -+ real(8) com(3) -+ -+c energy and virial accumulators -+ -+ engfld=0.d0 -+ virfld=0.d0 -+ -+c block indices -+ -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ if(keyfld.eq.1) then -+ -+c electric field: prmfld(1-3) are field components -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+chge(i)*prmfld(1) -+ fyy(i)=fyy(i)+chge(i)*prmfld(2) -+ fzz(i)=fzz(i)+chge(i)*prmfld(3) -+ -+ enddo -+ -+ elseif(keyfld.eq.2) then -+ -+c oscillating shear: orthorhombic box: Fx=a*cos(b.2.pi.z/L) -+ -+ rz=2.d0*pi/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+prmfld(1)*cos(prmfld(2)*zzz(i)*rz) -+ -+ enddo -+ -+ elseif(keyfld.eq.3.and.imcon.eq.6) then -+ -+c continuous shear of walls : 2D periodic box (imcon=6) -+c shear rate=prmfld(1) angstrom per ps for atoms at -+c abs(z) > prmfld(2) -+ -+ do i=iatm1,iatm2 -+ -+ if(abs(zzz(i)).gt.prmfld(2)) then -+ -+ vxx(i)=0.5d0*sign(prmfld(1),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.4) then -+ -+c gravitational field: field components given by prmfld(1-3) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+prmfld(1)*weight(i) -+ fyy(i)=fyy(i)+prmfld(2)*weight(i) -+ fzz(i)=fzz(i)+prmfld(3)*weight(i) -+ -+ enddo -+ -+ elseif(keyfld.eq.5) then -+ -+c magnetic field: field components given by prmfld(1-3) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+(vyy(i)*prmfld(3)-vzz(i)*prmfld(2)) -+ x *chge(i) -+ fyy(i)=fyy(i)+(vzz(i)*prmfld(1)-vxx(i)*prmfld(3)) -+ x *chge(i) -+ fzz(i)=fzz(i)+(vxx(i)*prmfld(2)-vyy(i)*prmfld(1)) -+ x *chge(i) -+ -+ enddo -+ -+ elseif(keyfld.eq.6) then -+ -+c containing sphere : r^(-n) potential -+ -+ do i=iatm1,iatm2 -+ -+ rrr=sqrt(xxx(i)**2+yyy(i)**2+zzz(i)**2) -+ if(rrr.gt.prmfld(4)) then -+ rrr=prmfld(2)-rrr -+ if(rrr.lt.0.d0) rrr=0.1d0 -+ -+ gamma =prmfld(1)*rrr**(-prmfld(3)) -+ engfld=engfld+gamma -+ -+ gamma=-prmfld(3)*gamma/((prmfld(2)-rrr)*rrr) -+ -+ fxx(i)=fxx(i)+gamma*xxx(i) -+ fyy(i)=fyy(i)+gamma*yyy(i) -+ fzz(i)=fzz(i)+gamma*zzz(i) -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.7) then -+ -+c repulsive wall (harmonic) starting at z0 -+ -+ do i=iatm1,iatm2 -+ -+ if(prmfld(3)*zzz(i).gt.prmfld(3)*prmfld(2)) then -+ -+ zdif=zzz(i)-prmfld(2) -+ gamma=-prmfld(1)*zdif -+ -+ fzz(i)=fzz(i)+gamma -+ engfld=engfld-gamma*zdif/2. -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.9) then -+ -+c keyfld=9. restrain molecule z-position -+c prmfld(1) is number of first atom of restrained molecule -+c prmfld(2) is number of last atom of restrained molecule -+c prmfld(3) is the restraining constant -+c prmfld(4) is z-min -+c prmfld(5) is z-max -+ -+ istart=nint(prmfld(1)) -+ ifinish=nint(prmfld(2)) -+ numresat=ifinish-istart+1 -+ -+c calculate the centre of mass of the molecule -+ -+ call getcom_mol(istart,ifinish,imcon,idnode,mxnode,totwgt,com) -+ -+c apply restraint force according to location -+ -+ if(com(3).lt.prmfld(4))then -+ -+c if centre of mass is below z-min, activate restraining force -+ -+ do i=istart,ifinish -+ -+ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* -+ x (com(3)-prmfld(4)) -+ -+ enddo -+ -+ elseif(com(3).gt.prmfld(5))then -+ -+c if centre of mass if above z-max, activate restraining force -+ -+ do i=istart,ifinish -+ -+ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* -+ x (com(3)-prmfld(5)) -+ -+ enddo -+ -+ endif -+ -+ else -+ -+c unidentified field potential error exit -+ -+ call error(idnode,454) -+ -+ endif -+ -+c global sum of external field potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engfld -+ buffer(2)=virfld -+ call gdsum(buffer(1),2,buffer(3)) -+ engfld=buffer(1) -+ virfld=buffer(2) -+ -+ endif -+ -+ return -+ end subroutine extnfld -+ -+ end module external_field_module -diff -urN dl_class_1.9.orig/srcmod/forces_module.f dl_class_1.9/srcmod/forces_module.f ---- dl_class_1.9.orig/srcmod/forces_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/forces_module.f 2015-11-16 17:18:13.442475750 +0100 -@@ -0,0 +1,2970 @@ -+ module forces_module -+ -+c*********************************************************************** -+c -+c dl_poly module for calculation of atomic forces -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d. quigley : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use coulomb_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use metafreeze_module -+ use metal_module -+ use neu_coul_module -+ use nlist_builders_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ use spme_module -+ use tersoff_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ contains -+ -+ subroutine force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to manage the calculation of the atomic forces -+c from all force field terms. -+c -+c copyright - daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva -+ logical lfree,lghost,llsolva -+ -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet -+ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva -+ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld -+ -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih -+ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld -+ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord -+ -+ llsolva=.false. -+ -+c initialize energy and virial accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ engang=0.d0 -+ virang=0.d0 -+ engdih=0.d0 -+ virdih=0.d0 -+ enginv=0.d0 -+ virinv=0.d0 -+ engtbp=0.d0 -+ virtbp=0.d0 -+ engter=0.d0 -+ virter=0.d0 -+ engfbp=0.d0 -+ virfbp=0.d0 -+ engsrp=0.d0 -+ virsrp=0.d0 -+ engcpe=0.d0 -+ vircpe=0.d0 -+ engfld=0.d0 -+ virfld=0.d0 -+ engshl=0.d0 -+ virshl=0.d0 -+ shlke =0.d0 -+ engtet=0.d0 -+ virtet=0.d0 -+ engmet=0.d0 -+ virmet=0.d0 -+ virord=0.0d0 -+ engord=0.0d0 -+ -+ if(lmetadyn)then -+ -+ eng_loc=0.0d0 -+ vir_loc=0.0d0 -+ fxx_loc(:)=0.0d0 -+ fyy_loc(:)=0.0d0 -+ fzz_loc(:)=0.0d0 -+ stress_loc(:)=0.0d0 -+ -+ endif -+ -+c initialise free energy accumulators -+ -+ if(lfree)then -+ -+ ang_fre=0.d0 -+ bnd_fre=0.d0 -+ dih_fre=0.d0 -+ inv_fre=0.d0 -+ tbp_fre=0.d0 -+ fbp_fre=0.d0 -+ cou_fre=0.d0 -+ vdw_fre=0.d0 -+ shl_fre=0.d0 -+ ang_vir=0.d0 -+ bnd_vir=0.d0 -+ dih_vir=0.d0 -+ inv_vir=0.d0 -+ tbp_vir=0.d0 -+ fbp_vir=0.d0 -+ cou_vir=0.d0 -+ vdw_vir=0.d0 -+ shl_vir=0.d0 -+ eng_cfg_fre=0.d0 -+ vir_cfg_fre=0.d0 -+ -+ endif -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ if(keyfce/2.gt.0)lcomp(6)=.true. -+ if(mod(keyfce,2).eq.1)lcomp(7)=.true. -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ llsolva=.true. -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c initialise the force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ if(nstep.gt.0)then -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ endif -+ -+ if(keyfce.gt.0)then -+ -+c calculate pair forces, including coulombic forces -+ -+ if(lnsq)then -+ -+c multiple timestep - all-pairs -+ -+ call multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+ elseif(.not.lneut)then -+ -+c single timestep -+ -+ if(multt.eq.1)then -+ -+ call forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, -+ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, -+ x vircpe,virsrp,volm,engmet,virmet) -+ -+ else -+ -+ call multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+ -+ endif -+ -+ elseif(lneut)then -+ -+c neutral groups -+ -+ if(multt.eq.1)then -+ -+ call forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+ else -+ -+ call multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add in long range corrections to energy and pressure -+ -+ engsrp=engsrp+elrc -+ virsrp=virsrp+virlrc -+ engmet=engmet+elrcm(0) -+ virmet=virmet+vlrcm(0) -+ if(lfree)then -+ vdw_fre=vdw_fre+elrc_fre -+ vdw_vir=vdw_vir+vlrc_fre -+ endif -+ -+c calculate three body forces -+ -+ if(ntptbp.gt.0)call thbfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c calculate four body forces -+ -+ if(ntpfbp.gt.0)call fbpfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c calculate tersoff potential forces -+ -+ if(ntpter.gt.0)call tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c calculate bond forces -+ -+ if(ntbond.gt.0)call bndfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c calculate valence angle forces -+ -+ if(ntangl.gt.0)call angfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c calculate dihedral forces -+ -+ if(ntdihd.gt.0)call dihfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, -+ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) -+ -+c calculate inversion forces -+ -+ if(ntinv.gt.0)call invfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c calculate tethered atom forces -+ -+ if(ntteth.gt.0)call tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c calculate shell model forces -+ -+ if(keyshl.gt.0)call shlfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c external field -+ -+ if(keyfld.gt.0)call extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c metadynamics option : use potential energy as order parameter -+ -+ if(lmetadyn)then -+ -+ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ -+ x engtbp+engfbp+engshl+enginv+engter+engmet -+ -+ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet -+ -+ call metafreeze_driver -+ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) -+ -+ endif -+ -+c global summation of force arrays (basic replicated data strategy) -+ -+ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) -+ -+c global sum of stress arrays -+ -+ if(mxnode.gt.1)call gdsum(stress,9,buffer) -+ -+c add long range correction to diagonal terms of stress tensor -+ -+ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 -+ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 -+ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 -+ -+c cap forces in equilibration mode -+ -+ if(nstep.le.nsteql.and.lfcap) -+ x call fcap(lfcap,natms,fmax,temp) -+ -+c total configuration energy -+ -+ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ -+ x engfbp+engshl+enginv+engter+engmet -+ -+c PLUMED modifications -+ if(lplumed)then -+ call plumed_f_gcmd("setStep"//char(0),nstep) -+ call plumed_f_gcmd("setMasses"//char(0),weight) -+ call plumed_f_gcmd("setCharges"//char(0),chge) -+ call plumed_f_gcmd("setPositionsX"//char(0),xxx) -+ call plumed_f_gcmd("setPositionsY"//char(0),yyy) -+ call plumed_f_gcmd("setPositionsZ"//char(0),zzz) -+ call plumed_f_gcmd("setBox"//char(0),cell) -+ call plumed_f_gcmd("setEnergy"//char(0),engcfg) -+ call plumed_f_gcmd("setForcesX"//char(0),fxx) -+ call plumed_f_gcmd("setForcesY"//char(0),fyy) -+ call plumed_f_gcmd("setForcesZ"//char(0),fzz) -+ call plumed_f_gcmd("setVirial"//char(0),stress) -+ call plumed_f_gcmd("calc"//char(0) ) -+ endif -+c PLUMED modifications -+ -+c total derivative of the configurational free energy -+ -+ if(lfree)then -+ -+ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ -+ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) -+ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ -+ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) -+ -+ endif -+ -+c sum solvation and excitation energies for pair forces -+ -+ if(mxnode.gt.1)then -+ -+ if(llsolva)then -+ -+ call gdsum(vdw_sol,mxtmls_sol2,buffer) -+ call gdsum(cou_sol,mxtmls_sol2,buffer) -+ -+ if(lghost)then -+ -+ call gdsum(vdw_exc,mxtmls_exc2,buffer) -+ call gdsum(cou_exc,mxtmls_exc2,buffer) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add long range corrections to solvation terms -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) -+ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) -+ -+ endif -+ -+ return -+ end subroutine force_manager -+ -+ subroutine forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, -+ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, -+ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, -+ x virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c amended - t. forester sept 1994 -+c amended - w. smith june 1995 for metal potentials -+c -+c key: -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe -+ logical lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt -+ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf -+ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii -+ -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps -+ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lhke)then -+ -+ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+ else if(lewald.or.lspme.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c initialise force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c calculate local density in metals -+ -+ if(ntpmet.gt.0)then -+ -+ call metdens -+ x (idnode,imcon,mxnode,natms,engmet,virmet) -+ -+ stress(1)=stress(1)-virmet/3.d0 -+ stress(5)=stress(5)-virmet/3.d0 -+ stress(9)=stress(9)-virmet/3.d0 -+ -+ endif -+ -+c fourier contribution to coulombic forces in Ewald sum -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c hautman-klein-ewald method -+ -+ if(lhke)then -+ -+c fourier terms of hk-ewald -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engacc,viracc,alpha,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, -+ x drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c smoothed particle mesh ewald -+ -+ if(lspme)then -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c calculate metal forces and potential -+ -+ if(ntpmet.gt.0)then -+ -+ call metfrc(safe,i,lentry(ii),engacc,viracc) -+ -+ engmet=engmet+engacc -+ virmet=virmet+viracc -+ -+ endif -+ -+c calculate short range force and potential terms -+ -+ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, -+ x rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, -+ x viracc,drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0(i,lentry(ii),rcut) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check metal interpolation is safe -+ -+ if(ntpmet.gt.0)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ endif -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ eps=epsq -+ if(loglnk)eps=eps*2.0d0 -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ enddo -+ -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ numrdf=numrdf+1 -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=engmet -+ buffer(6)=virmet -+ buffer(7)=vdw_fre -+ buffer(8)=cou_fre -+ buffer(9)=vdw_vir -+ buffer(10)=cou_vir -+ call gdsum(buffer(1),10,buffer(11)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ engmet=buffer(5) -+ virmet=buffer(6) -+ vdw_fre=buffer(7) -+ cou_fre=buffer(8) -+ vdw_vir=buffer(9) -+ cou_vir=buffer(10) -+ -+ endif -+ -+ return -+ end subroutine forces -+ -+ subroutine forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c modified - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j -+ integer ibig,ia,ineu,isn,ik,nsolva,isolva -+ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe -+ real(8) virsrp,engacc,viracc,anorm,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension fail(2) -+ -+ data fail/0,0/ -+ -+c allocate working arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ do i=1,2 -+ if(fail(i).ne.0)call error(idnode,1820) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c initialise force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c initialise energy and virial accumulators -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c outer loop over neutral groups -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ newlst=.true. -+ -+ isn=1 -+ call neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0neu(ik,rcut) -+ -+ endif -+ -+ enddo -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,478) -+ endif -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c counter for rdf statistics outside loop structure -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ -+ return -+ end subroutine forces_neu -+ -+ subroutine multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+c*************************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c reciprocal space calculated on long time steps. -+c -+c copyright daresbury laboratory -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3,4 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ -+ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme -+ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt -+ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail -+ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 -+ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 -+ real(8) vircp1,engacl,engac2,virsr1 -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ if(newlst)nstep0=nstep -+ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) -+ -+c allocate working arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1840) -+ enddo -+ -+ endif -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lspme.or.lewald.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c zero force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS****************** -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ llsolva=lsolva -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate fourier contribution to secondary coulombic forces -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+c hautman-klein-ewald method -+ -+ elseif(lhke)then -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engac1,viracc,alpha,epsq) -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, -+ x virac2,drewd,rcut,epsq) -+ -+ engac1=engac1+engac2 -+ viracc=viracc+virac2 -+ -+ elseif(lspme)then -+ -+c smoothed particle mesh ewald -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ endif -+ -+ engcpl=engcpl+engac1 -+ vircpl=vircpl+viracc -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+c note: if using link cells - have double counted excluded -+c interactions use temporary adjustment to relative dielectric -+c constant -+ -+ eps=epsq -+ if(loglnk)eps=epsq*2.0d0 -+ -+c calculate self interaction corrections for fourier contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ enddo -+ -+ endif -+ -+c calculate pair contributions to secondary neighbour forces -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c calculate pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(newplst.or. -+ x (mod(nstep-nstep0,multt).le.1))then -+ -+ if(lhke)then -+ -+ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) -+ -+ else -+ -+ call ewald4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, -+ x drewd,rcut,epsq) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ engcpl=engcpl+engacl -+ vircpl=vircpl+viracl -+ -+ else -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i)+stresl(i)*ann -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ return -+ end subroutine multiple -+ -+ subroutine multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c multiple timestep option -+c -+c parallel replicated data version -+c -+c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory april 1994 -+c author - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c = 10,11 ----- reaction field : coul3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j -+ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe -+ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp -+ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension fail(nnn),stresp(9) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ if(newjob)then -+ -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) -+ -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) -+ endif -+ -+ endif -+ newjob=.false. -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1850) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c error if ewald sum requested -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c create list of primary and secondary neighbours -+ -+ if(newlst)nstep0=nstep -+ newplst=(mod(nstep-nstep0,multt).eq.0) -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+ endif -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress arrays -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c outer loop over neutral groups -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=-1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then -+ -+ call srfrceneu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ else -+ -+ call error(idnode,250) -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,479) -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresl(i)*ann+stresp(i) -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) -+ -+ return -+ end subroutine multiple_neu -+ -+ subroutine multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c to be used with all-pairs option -+c -+c flx,fly,flz : forces from electrostatics from r > rcut -+c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory 1993 -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c Ewald sum --- not used -+c = 4,5 ------ Distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c truncated and shifted coulombic -- not used -+c reaction field - not used -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr -+ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva -+ integer isolva,i,j -+ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut -+ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 -+ real(8) engsr2,virsr2,stresp,engacc,viracc -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data numlsts/-1/ -+ data newjob/.true./ -+ -+c allocate work arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1860) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+ if(lnsq)then -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) -+ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) -+ -+c set extended cutoff for electrostatics - secondary shell -+ -+ rcut1=rcut+delr -+ -+ if(newlst)nstep0=nstep -+ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) -+ -+c ********************PROCESS TERTIARY NEIGHBOURS********************* -+ -+ if(newplst)then -+ -+ call coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcp3,vircp3) -+ -+ endif -+ -+c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ if(newplst)then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcp2=0.d0 -+ vircp2=0.d0 -+ engsr2=0.d0 -+ virsr2=0.d0 -+ -+c zero secondary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ ii=0 -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic vectors -+ -+ ik=0 -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition only for interactions > rprim -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c short range forces for secondary shell -+ -+ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsr2=engsr2+engacc -+ virsr2=virsr2+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+c truncated shifted coulombic potential -+ -+ call error(idnode,424) -+ -+ endif -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ fpx(i)=fxx(i) -+ fpy(i)=fyy(i) -+ fpz(i)=fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stress(i) -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol(:) -+ cou_sol_put(:)=cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc(:) -+ cou_exc_put(:)=cou_exc(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero primary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate primary pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,424) -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary and tertiary neighbour contributions to -+c force, energy etc -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)+fpx(i)+flx(i) -+ fyy(i)=fyy(i)+fpy(i)+fly(i) -+ fzz(i)=fzz(i)+fpz(i)+flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i) -+ enddo -+ -+ engsrp=engsrp+engsr2 -+ virsrp=virsrp+virsr2 -+ -+ engcpe=engcpe+engcp2+engcp3 -+ vircpe=vircpe+vircp2+vircp3 -+ -+c calculate solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) -+ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) -+ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine multiple_nsq -+ -+ subroutine neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to create pair lists for neutral group -+c implementations. -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c -+c isn = -1 => secondary neighbours -+c isn = 1 => primary neighbours - must contain excld interactions -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,lexc -+ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 -+ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 -+ real(8) txx,tyy,tzz,uxx,uyy,uzz -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1830) -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c set cutoff radius -+ -+ ll=0 -+ -+c number of excludes found -+ -+ if(isn.lt.0)then -+ keyexc=nexatm(ia)+2 -+ else -+ keyexc=1 -+ endif -+ -+c do centre - centre distances -+ -+ lenia=lentry(ia) -+ -+ do j=1,lenia -+ -+ jneu=abs(list(ia,j)) -+ xxt(j)=uxx(ineu)-uxx(jneu) -+ yyt(j)=uyy(ineu)-uyy(jneu) -+ zzt(j)=uzz(ineu)-uzz(jneu) -+ -+ enddo -+ -+ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) -+ -+c working intragroup vectors of central group -+c - for periodic boundaries -+ -+ in0=neulst(ineu) -+ in1=neulst(ineu+1)-1 -+ -+c loop over neutral groups sites of a -+ -+ -+c loop over groups in list -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj)*isn -+ -+ if(jneu.gt.0)then -+ -+ do i=in0,in1 -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+ if(ineu.eq.jneu)jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+c reject atoms in excluded pair list -+ -+ lexc=.false. -+ -+ if(keyexc.lt.nexatm(ia))then -+ -+ if(lexatm(ia,keyexc).eq.i)then -+ if(lexatm(ia,keyexc+1).eq.j)then -+ lexc=.true. -+ keyexc=keyexc+2 -+ endif -+ endif -+ -+ endif -+ -+c reject frozen atom pairs -+ -+ if(lstfrz(i).ne.0)then -+ if(lstfrz(j).ne.0)lexc=.true. -+ endif -+ -+ if(.not.lexc)then -+ -+ ll=ll+1 -+ if(ll.le.mxxdf)then -+ -+ xdf(ll)=txx(i)+xxt(jj)-txx(j) -+ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) -+ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) -+ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 -+ ilist(ll)=i -+ jlist(ll)=j -+ -+ else -+ -+ lchk=.false. -+ ibig=max(ibig,ll) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine neutlst -+ -+ end module forces_module -+ -diff -urN dl_class_1.9.orig/srcmod/forces_module.f.preplumed dl_class_1.9/srcmod/forces_module.f.preplumed ---- dl_class_1.9.orig/srcmod/forces_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/forces_module.f.preplumed 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,2952 @@ -+ module forces_module -+ -+c*********************************************************************** -+c -+c dl_poly module for calculation of atomic forces -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d. quigley : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use coulomb_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use metafreeze_module -+ use metal_module -+ use neu_coul_module -+ use nlist_builders_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ use spme_module -+ use tersoff_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ contains -+ -+ subroutine force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to manage the calculation of the atomic forces -+c from all force field terms. -+c -+c copyright - daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva -+ logical lfree,lghost,llsolva -+ -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet -+ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva -+ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld -+ -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih -+ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld -+ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord -+ -+ llsolva=.false. -+ -+c initialize energy and virial accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ engang=0.d0 -+ virang=0.d0 -+ engdih=0.d0 -+ virdih=0.d0 -+ enginv=0.d0 -+ virinv=0.d0 -+ engtbp=0.d0 -+ virtbp=0.d0 -+ engter=0.d0 -+ virter=0.d0 -+ engfbp=0.d0 -+ virfbp=0.d0 -+ engsrp=0.d0 -+ virsrp=0.d0 -+ engcpe=0.d0 -+ vircpe=0.d0 -+ engfld=0.d0 -+ virfld=0.d0 -+ engshl=0.d0 -+ virshl=0.d0 -+ shlke =0.d0 -+ engtet=0.d0 -+ virtet=0.d0 -+ engmet=0.d0 -+ virmet=0.d0 -+ virord=0.0d0 -+ engord=0.0d0 -+ -+ if(lmetadyn)then -+ -+ eng_loc=0.0d0 -+ vir_loc=0.0d0 -+ fxx_loc(:)=0.0d0 -+ fyy_loc(:)=0.0d0 -+ fzz_loc(:)=0.0d0 -+ stress_loc(:)=0.0d0 -+ -+ endif -+ -+c initialise free energy accumulators -+ -+ if(lfree)then -+ -+ ang_fre=0.d0 -+ bnd_fre=0.d0 -+ dih_fre=0.d0 -+ inv_fre=0.d0 -+ tbp_fre=0.d0 -+ fbp_fre=0.d0 -+ cou_fre=0.d0 -+ vdw_fre=0.d0 -+ shl_fre=0.d0 -+ ang_vir=0.d0 -+ bnd_vir=0.d0 -+ dih_vir=0.d0 -+ inv_vir=0.d0 -+ tbp_vir=0.d0 -+ fbp_vir=0.d0 -+ cou_vir=0.d0 -+ vdw_vir=0.d0 -+ shl_vir=0.d0 -+ eng_cfg_fre=0.d0 -+ vir_cfg_fre=0.d0 -+ -+ endif -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ if(keyfce/2.gt.0)lcomp(6)=.true. -+ if(mod(keyfce,2).eq.1)lcomp(7)=.true. -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ llsolva=.true. -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c initialise the force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ if(nstep.gt.0)then -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ endif -+ -+ if(keyfce.gt.0)then -+ -+c calculate pair forces, including coulombic forces -+ -+ if(lnsq)then -+ -+c multiple timestep - all-pairs -+ -+ call multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+ elseif(.not.lneut)then -+ -+c single timestep -+ -+ if(multt.eq.1)then -+ -+ call forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, -+ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, -+ x vircpe,virsrp,volm,engmet,virmet) -+ -+ else -+ -+ call multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+ -+ endif -+ -+ elseif(lneut)then -+ -+c neutral groups -+ -+ if(multt.eq.1)then -+ -+ call forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+ else -+ -+ call multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add in long range corrections to energy and pressure -+ -+ engsrp=engsrp+elrc -+ virsrp=virsrp+virlrc -+ engmet=engmet+elrcm(0) -+ virmet=virmet+vlrcm(0) -+ if(lfree)then -+ vdw_fre=vdw_fre+elrc_fre -+ vdw_vir=vdw_vir+vlrc_fre -+ endif -+ -+c calculate three body forces -+ -+ if(ntptbp.gt.0)call thbfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c calculate four body forces -+ -+ if(ntpfbp.gt.0)call fbpfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c calculate tersoff potential forces -+ -+ if(ntpter.gt.0)call tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c calculate bond forces -+ -+ if(ntbond.gt.0)call bndfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c calculate valence angle forces -+ -+ if(ntangl.gt.0)call angfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c calculate dihedral forces -+ -+ if(ntdihd.gt.0)call dihfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, -+ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) -+ -+c calculate inversion forces -+ -+ if(ntinv.gt.0)call invfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c calculate tethered atom forces -+ -+ if(ntteth.gt.0)call tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c calculate shell model forces -+ -+ if(keyshl.gt.0)call shlfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c external field -+ -+ if(keyfld.gt.0)call extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c metadynamics option : use potential energy as order parameter -+ -+ if(lmetadyn)then -+ -+ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ -+ x engtbp+engfbp+engshl+enginv+engter+engmet -+ -+ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet -+ -+ call metafreeze_driver -+ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) -+ -+ endif -+ -+c global summation of force arrays (basic replicated data strategy) -+ -+ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) -+ -+c global sum of stress arrays -+ -+ if(mxnode.gt.1)call gdsum(stress,9,buffer) -+ -+c add long range correction to diagonal terms of stress tensor -+ -+ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 -+ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 -+ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 -+ -+c cap forces in equilibration mode -+ -+ if(nstep.le.nsteql.and.lfcap) -+ x call fcap(lfcap,natms,fmax,temp) -+ -+c total configuration energy -+ -+ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ -+ x engfbp+engshl+enginv+engter+engmet -+ -+c total derivative of the configurational free energy -+ -+ if(lfree)then -+ -+ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ -+ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) -+ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ -+ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) -+ -+ endif -+ -+c sum solvation and excitation energies for pair forces -+ -+ if(mxnode.gt.1)then -+ -+ if(llsolva)then -+ -+ call gdsum(vdw_sol,mxtmls_sol2,buffer) -+ call gdsum(cou_sol,mxtmls_sol2,buffer) -+ -+ if(lghost)then -+ -+ call gdsum(vdw_exc,mxtmls_exc2,buffer) -+ call gdsum(cou_exc,mxtmls_exc2,buffer) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add long range corrections to solvation terms -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) -+ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) -+ -+ endif -+ -+ return -+ end subroutine force_manager -+ -+ subroutine forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, -+ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, -+ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, -+ x virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c amended - t. forester sept 1994 -+c amended - w. smith june 1995 for metal potentials -+c -+c key: -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe -+ logical lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt -+ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf -+ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii -+ -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps -+ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lhke)then -+ -+ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+ else if(lewald.or.lspme.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c initialise force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c calculate local density in metals -+ -+ if(ntpmet.gt.0)then -+ -+ call metdens -+ x (idnode,imcon,mxnode,natms,engmet,virmet) -+ -+ stress(1)=stress(1)-virmet/3.d0 -+ stress(5)=stress(5)-virmet/3.d0 -+ stress(9)=stress(9)-virmet/3.d0 -+ -+ endif -+ -+c fourier contribution to coulombic forces in Ewald sum -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c hautman-klein-ewald method -+ -+ if(lhke)then -+ -+c fourier terms of hk-ewald -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engacc,viracc,alpha,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, -+ x drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c smoothed particle mesh ewald -+ -+ if(lspme)then -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c calculate metal forces and potential -+ -+ if(ntpmet.gt.0)then -+ -+ call metfrc(safe,i,lentry(ii),engacc,viracc) -+ -+ engmet=engmet+engacc -+ virmet=virmet+viracc -+ -+ endif -+ -+c calculate short range force and potential terms -+ -+ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, -+ x rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, -+ x viracc,drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0(i,lentry(ii),rcut) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check metal interpolation is safe -+ -+ if(ntpmet.gt.0)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ endif -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ eps=epsq -+ if(loglnk)eps=eps*2.0d0 -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ enddo -+ -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ numrdf=numrdf+1 -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=engmet -+ buffer(6)=virmet -+ buffer(7)=vdw_fre -+ buffer(8)=cou_fre -+ buffer(9)=vdw_vir -+ buffer(10)=cou_vir -+ call gdsum(buffer(1),10,buffer(11)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ engmet=buffer(5) -+ virmet=buffer(6) -+ vdw_fre=buffer(7) -+ cou_fre=buffer(8) -+ vdw_vir=buffer(9) -+ cou_vir=buffer(10) -+ -+ endif -+ -+ return -+ end subroutine forces -+ -+ subroutine forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c modified - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j -+ integer ibig,ia,ineu,isn,ik,nsolva,isolva -+ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe -+ real(8) virsrp,engacc,viracc,anorm,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension fail(2) -+ -+ data fail/0,0/ -+ -+c allocate working arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ do i=1,2 -+ if(fail(i).ne.0)call error(idnode,1820) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c initialise force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c initialise energy and virial accumulators -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c outer loop over neutral groups -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ newlst=.true. -+ -+ isn=1 -+ call neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0neu(ik,rcut) -+ -+ endif -+ -+ enddo -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,478) -+ endif -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c counter for rdf statistics outside loop structure -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ -+ return -+ end subroutine forces_neu -+ -+ subroutine multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+c*************************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c reciprocal space calculated on long time steps. -+c -+c copyright daresbury laboratory -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3,4 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ -+ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme -+ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt -+ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail -+ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 -+ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 -+ real(8) vircp1,engacl,engac2,virsr1 -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ if(newlst)nstep0=nstep -+ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) -+ -+c allocate working arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1840) -+ enddo -+ -+ endif -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lspme.or.lewald.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c zero force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS****************** -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ llsolva=lsolva -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate fourier contribution to secondary coulombic forces -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+c hautman-klein-ewald method -+ -+ elseif(lhke)then -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engac1,viracc,alpha,epsq) -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, -+ x virac2,drewd,rcut,epsq) -+ -+ engac1=engac1+engac2 -+ viracc=viracc+virac2 -+ -+ elseif(lspme)then -+ -+c smoothed particle mesh ewald -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ endif -+ -+ engcpl=engcpl+engac1 -+ vircpl=vircpl+viracc -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+c note: if using link cells - have double counted excluded -+c interactions use temporary adjustment to relative dielectric -+c constant -+ -+ eps=epsq -+ if(loglnk)eps=epsq*2.0d0 -+ -+c calculate self interaction corrections for fourier contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ enddo -+ -+ endif -+ -+c calculate pair contributions to secondary neighbour forces -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c calculate pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(newplst.or. -+ x (mod(nstep-nstep0,multt).le.1))then -+ -+ if(lhke)then -+ -+ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) -+ -+ else -+ -+ call ewald4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, -+ x drewd,rcut,epsq) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ engcpl=engcpl+engacl -+ vircpl=vircpl+viracl -+ -+ else -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i)+stresl(i)*ann -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ return -+ end subroutine multiple -+ -+ subroutine multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c multiple timestep option -+c -+c parallel replicated data version -+c -+c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory april 1994 -+c author - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c = 10,11 ----- reaction field : coul3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j -+ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe -+ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp -+ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension fail(nnn),stresp(9) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ if(newjob)then -+ -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) -+ -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) -+ endif -+ -+ endif -+ newjob=.false. -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1850) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c error if ewald sum requested -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c create list of primary and secondary neighbours -+ -+ if(newlst)nstep0=nstep -+ newplst=(mod(nstep-nstep0,multt).eq.0) -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+ endif -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress arrays -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c outer loop over neutral groups -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=-1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then -+ -+ call srfrceneu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ else -+ -+ call error(idnode,250) -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,479) -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresl(i)*ann+stresp(i) -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) -+ -+ return -+ end subroutine multiple_neu -+ -+ subroutine multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c to be used with all-pairs option -+c -+c flx,fly,flz : forces from electrostatics from r > rcut -+c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory 1993 -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c Ewald sum --- not used -+c = 4,5 ------ Distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c truncated and shifted coulombic -- not used -+c reaction field - not used -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr -+ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva -+ integer isolva,i,j -+ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut -+ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 -+ real(8) engsr2,virsr2,stresp,engacc,viracc -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data numlsts/-1/ -+ data newjob/.true./ -+ -+c allocate work arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1860) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+ if(lnsq)then -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) -+ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) -+ -+c set extended cutoff for electrostatics - secondary shell -+ -+ rcut1=rcut+delr -+ -+ if(newlst)nstep0=nstep -+ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) -+ -+c ********************PROCESS TERTIARY NEIGHBOURS********************* -+ -+ if(newplst)then -+ -+ call coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcp3,vircp3) -+ -+ endif -+ -+c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ if(newplst)then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcp2=0.d0 -+ vircp2=0.d0 -+ engsr2=0.d0 -+ virsr2=0.d0 -+ -+c zero secondary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ ii=0 -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic vectors -+ -+ ik=0 -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition only for interactions > rprim -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c short range forces for secondary shell -+ -+ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsr2=engsr2+engacc -+ virsr2=virsr2+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+c truncated shifted coulombic potential -+ -+ call error(idnode,424) -+ -+ endif -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ fpx(i)=fxx(i) -+ fpy(i)=fyy(i) -+ fpz(i)=fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stress(i) -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol(:) -+ cou_sol_put(:)=cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc(:) -+ cou_exc_put(:)=cou_exc(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero primary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate primary pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,424) -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary and tertiary neighbour contributions to -+c force, energy etc -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)+fpx(i)+flx(i) -+ fyy(i)=fyy(i)+fpy(i)+fly(i) -+ fzz(i)=fzz(i)+fpz(i)+flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i) -+ enddo -+ -+ engsrp=engsrp+engsr2 -+ virsrp=virsrp+virsr2 -+ -+ engcpe=engcpe+engcp2+engcp3 -+ vircpe=vircpe+vircp2+vircp3 -+ -+c calculate solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) -+ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) -+ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine multiple_nsq -+ -+ subroutine neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to create pair lists for neutral group -+c implementations. -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c -+c isn = -1 => secondary neighbours -+c isn = 1 => primary neighbours - must contain excld interactions -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,lexc -+ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 -+ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 -+ real(8) txx,tyy,tzz,uxx,uyy,uzz -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1830) -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c set cutoff radius -+ -+ ll=0 -+ -+c number of excludes found -+ -+ if(isn.lt.0)then -+ keyexc=nexatm(ia)+2 -+ else -+ keyexc=1 -+ endif -+ -+c do centre - centre distances -+ -+ lenia=lentry(ia) -+ -+ do j=1,lenia -+ -+ jneu=abs(list(ia,j)) -+ xxt(j)=uxx(ineu)-uxx(jneu) -+ yyt(j)=uyy(ineu)-uyy(jneu) -+ zzt(j)=uzz(ineu)-uzz(jneu) -+ -+ enddo -+ -+ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) -+ -+c working intragroup vectors of central group -+c - for periodic boundaries -+ -+ in0=neulst(ineu) -+ in1=neulst(ineu+1)-1 -+ -+c loop over neutral groups sites of a -+ -+ -+c loop over groups in list -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj)*isn -+ -+ if(jneu.gt.0)then -+ -+ do i=in0,in1 -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+ if(ineu.eq.jneu)jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+c reject atoms in excluded pair list -+ -+ lexc=.false. -+ -+ if(keyexc.lt.nexatm(ia))then -+ -+ if(lexatm(ia,keyexc).eq.i)then -+ if(lexatm(ia,keyexc+1).eq.j)then -+ lexc=.true. -+ keyexc=keyexc+2 -+ endif -+ endif -+ -+ endif -+ -+c reject frozen atom pairs -+ -+ if(lstfrz(i).ne.0)then -+ if(lstfrz(j).ne.0)lexc=.true. -+ endif -+ -+ if(.not.lexc)then -+ -+ ll=ll+1 -+ if(ll.le.mxxdf)then -+ -+ xdf(ll)=txx(i)+xxt(jj)-txx(j) -+ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) -+ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) -+ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 -+ ilist(ll)=i -+ jlist(ll)=j -+ -+ else -+ -+ lchk=.false. -+ ibig=max(ibig,ll) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine neutlst -+ -+ end module forces_module -+ -diff -urN dl_class_1.9.orig/srcmod/four_body_module.f dl_class_1.9/srcmod/four_body_module.f ---- dl_class_1.9.orig/srcmod/four_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/four_body_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,979 @@ -+ module four_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining four-body potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - w. smith aug 2008 : solvation, free energy, excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ real(8), allocatable :: prmfbp(:,:),rcut4b(:) -+ integer, allocatable :: lstfbp(:),ltpfbp(:),latfbp(:) -+ -+ save prmfbp,rcut4b,lstfbp,ltpfbp,latfbp,filter -+ -+ contains -+ -+ subroutine alloc_fbp_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(6) -+ -+ do i=1,6 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmfbp(mxfbp,mxpfbp),stat=fail(1)) -+ allocate (rcut4b(mxfbp),stat=fail(2)) -+ allocate (lstfbp(mxfbp),stat=fail(3)) -+ allocate (ltpfbp(mxfbp),stat=fail(4)) -+ allocate (latfbp(mxatms),stat=fail(5)) -+ allocate (filter(mxsite),stat=fail(6)) -+ -+ do i=1,6 -+ if(fail(i).gt.0)call error(idnode,1140) -+ enddo -+ -+ end subroutine alloc_fbp_arrays -+ -+ subroutine define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining four body potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1,atom2,atom3 -+ character*1 message(80) -+ integer idnode,ntpfbp,ntpatm,ifbp,itpfbp,keypot,katm0 -+ integer i,katm1,katm2,katm3,jtpatm,ka1,ka2,ka3,keyfbp,kfbp -+ integer j,fail,idum -+ real(8) rcutfb,engunit -+ real(8), allocatable :: parpot(:) -+ -+ data fail/0/ -+ -+ allocate (parpot(mxpfbp),stat=fail) -+ if(fail.ne.0)call error(idnode,1150) -+ -+ ntpfbp=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified four ', -+ x 'body potentials',i10)") ntpfbp -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', -+ x 'atom 4 ',3x,' key',30x,'parameters'/,/)") -+ -+ endif -+ if(ntpfbp.gt.mxfbp) call error(idnode,89) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ do ifbp=1,mxfbp -+ lstfbp(ifbp)=0 -+ enddo -+ -+ do ifbp=1,mxfbp,mx3fbp -+ lstfbp(ifbp)=-1 -+ enddo -+ -+ rcutfb=0.d0 -+ -+ do itpfbp=1,ntpfbp -+ -+ do i=1,mxpfbp -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+c Note the order!! atom0 is the central atom -+ -+ call copystring(record,message,80) -+ call getword(atom0,record,8,lenrec) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call getword(atom3,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'harm') then -+ keypot=1 -+ elseif(keyword(1:4).eq.'hcos') then -+ keypot=2 -+ elseif(keyword(1:4).eq.'plan') then -+ keypot=3 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,443) -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,4a8,4x,a4,1x,1p,9e13.5)") -+ x atom0,atom1,atom2,atom3,keyword(1:4),(parpot(j),j=1,mxpfbp) -+ -+ katm0=0 -+ katm1=0 -+ katm2=0 -+ katm3=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ if(atom3.eq.unqatm(jtpatm))katm3=jtpatm -+ -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0.or. -+ x katm3.eq.0) call error(idnode,91) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ filter(katm2)=.true. -+ filter(katm3)=.true. -+ -+ ka1=max(katm1,katm2,katm3) -+ ka3=min(katm1,katm2,katm3) -+ ka2=katm1+katm2+katm3-ka1-ka3 -+ keyfbp=ka3+(ka2*(ka2-1))/2+(ka1*(ka1**2-1))/6+ -+ x (katm0-1)*mx3fbp -+ -+ if(keyfbp.gt.mxfbp) call error(idnode,101) -+ -+c convert parameters to internal units -+ -+ parpot(1)=parpot(1)*engunit -+ parpot(2)=parpot(2)*(pi/180.d0) -+ -+ if(keypot.eq.2)then -+ -+ parpot(2)=cos(parpot(2)) -+ -+ endif -+ -+ if(lstfbp(keyfbp).gt.0) call error(idnode,19) -+ lstfbp(keyfbp)=itpfbp -+ ltpfbp(itpfbp)=keypot -+ kfbp=mx3fbp*((keyfbp-1)/mx3fbp)+1 -+ if(lstfbp(kfbp).lt.0)lstfbp(kfbp)=0 -+ -+c calculate max four body cutoff -+ -+ rcutfb=max(rcutfb,parpot(3)) -+ rcut4b(itpfbp)=parpot(3) -+ -+c store four body potential parameters -+ -+ do i=1,mxpfbp -+ prmfbp(itpfbp,i)=parpot(i) -+ enddo -+ -+ enddo -+ -+ if(rcutfb.lt.1.d-6)call error(idnode,453) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_four_body -+ -+ subroutine fbpfrc -+ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating four body inversion forces -+c arising from the inversion angle between three atoms around a -+c nominated central atom -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped cell geometry -+c -+c copyright - daresbury laboratory 1996 -+c author - w.smith july 1996 -+c adapted - w.smith aug 2008 solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lskip -+ logical idrive,jdrive,kdrive,ldrive -+ integer idnode,mxnode,natms,imcon,nix,niy,niz -+ integer i,j,k,nbx,nby,nbz,ncells,ix,iy,iz,icell,jx,jy -+ integer jz,jj,kk,ia,ib,ifbp,jfbp,kfbp,jklbd,kkfbp,ktyp,ii -+ integer ic,ll,id,lfbp,l,limit,jcell,kkk -+ real(8) rcutfb,engfbp,virfbp,vbn,vcn,pterm,xm,ym,zm -+ real(8) strs,cprp,det,xdc,ydc,zdc,sxx,syy,szz,sxab,strs_loc -+ real(8) syab,szab,xab,yab,zab,rab2,sxac,syac,szac,xac,yac -+ real(8) zac,rac2,sxad,syad,szad,xad,yad,zad,rad2,rrab,rrac -+ real(8) rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx,vby,vbz -+ real(8) rvb,wwb,ucx,ucy,ucz,ucn,ruc,vcx,vcy,vcz,rvc,wwc -+ real(8) udx,udy,udz,udn,rud,vdx,vdy,vdz,vdn,rvd,wwd,cosb -+ real(8) cosc,cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd -+ real(8) rucd,rucb,rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc -+ real(8) fax,fay,faz,fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz -+ dimension cprp(10),strs(6),nix(27),niy(27),niz(27),strs_loc(6) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+ lskip=(lfree.or.lexcite) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ engfbp=0.d0 -+ virfbp=0.d0 -+ fbp_fre=0.d0 -+ fbp_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(9)=.true. -+ en4_sol(:)=0.d0 -+ if(lexcite)en4_exc(:)=0.d0 -+ -+ endif -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ do i=1,natms -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ enddo -+ -+ cell(1)=2.d0*xm+rcutfb -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rcutfb -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rcutfb -+ -+ endif -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,79) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rcutfb+1.d-6)) -+ nby=int(cprp(8)/(rcutfb+1.d-6)) -+ nbz=int(cprp(9)/(rcutfb+1.d-6)) -+ ncells=nbx*nby*nbz -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) write(nrite,'(a,i6)') -+ x 'number of required link cells in routine fbpfrc is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in routine fbpfrc is ',mxcell -+ call error(idnode,87) -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of inversion -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ latfbp(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ ia=latfbp(ii) -+ if(lmetadyn)idrive=driven(ltype(ia)) -+ ifbp=mx3fbp*(ltype(ia)-1) -+ if(mod(ia,mxnode).eq.idnode.and.lstfbp(ifbp+1).ge.0)then -+ -+ do jj=1,limit-2 -+ -+ ib=latfbp(jj) -+ if(lmetadyn)jdrive=driven(ltype(ib)) -+ -+ do kk=jj+1,limit-1 -+ -+ ic=latfbp(kk) -+ if(lmetadyn)kdrive=driven(ltype(ic)) -+ -+ do ll=kk+1,limit -+ -+ id=latfbp(ll) -+ if(lmetadyn)ldrive=driven(ltype(id)) -+ -+ if(lskip)then -+ -+ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. -+ x atm_fre(ic).eq.1.or.atm_fre(id).eq.1).and. -+ x (atm_fre(ia).eq.2.or.atm_fre(ib).eq.2.or. -+ x atm_fre(ic).eq.2.or.atm_fre(id).eq.2))cycle -+ -+ endif -+ -+ jfbp=max(ltype(ib),ltype(ic),ltype(id)) -+ lfbp=min(ltype(ib),ltype(ic),ltype(id)) -+ kfbp=ltype(ib)+ltype(ic)+ltype(id)-jfbp-lfbp -+ jklbd=ifbp+lfbp+(kfbp*(kfbp-1))/2+(jfbp*(jfbp**2-1))/6 -+ kkfbp=lstfbp(jklbd) -+ if(kkfbp.gt.0)then -+ -+ sxab=xxx(ib)-xxx(ia) -+ sxab=sxab-nint(sxab) -+ syab=yyy(ib)-yyy(ia) -+ syab=syab-nint(syab) -+ szab=zzz(ib)-zzz(ia) -+ szab=szab-nint(szab) -+ -+ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab -+ if(abs(xab).lt.rcutfb)then -+ -+ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab -+ if(abs(yab).lt.rcutfb)then -+ -+ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab -+ if(abs(zab).lt.rcutfb)then -+ -+ rab2=xab*xab+yab*yab+zab*zab -+ -+ sxac=xxx(ic)-xxx(ia) -+ sxac=sxac-nint(sxac) -+ syac=yyy(ic)-yyy(ia) -+ syac=syac-nint(syac) -+ szac=zzz(ic)-zzz(ia) -+ szac=szac-nint(szac) -+ -+ xac=cell(1)*sxac+cell(4)*syac+cell(7)*szac -+ if(abs(xac).lt.rcutfb)then -+ -+ yac=cell(2)*sxac+cell(5)*syac+cell(8)*szac -+ if(abs(yac).lt.rcutfb)then -+ -+ zac=cell(3)*sxac+cell(6)*syac+cell(9)*szac -+ if(abs(zac).lt.rcutfb)then -+ -+ rac2=xac*xac+yac*yac+zac*zac -+ -+ sxad=xxx(id)-xxx(ia) -+ sxad=sxad-nint(sxad) -+ syad=yyy(id)-yyy(ia) -+ syad=syad-nint(syad) -+ szad=zzz(id)-zzz(ia) -+ szad=szad-nint(szad) -+ -+ xad=cell(1)*sxad+cell(4)*syad+cell(7)*szad -+ if(abs(xad).lt.rcutfb)then -+ -+ yad=cell(2)*sxad+cell(5)*syad+cell(8)*szad -+ if(abs(yad).lt.rcutfb)then -+ -+ zad=cell(3)*sxad+cell(6)*syad+cell(9)*szad -+ if(abs(zad).lt.rcutfb)then -+ -+ rad2=xad*xad+yad*yad+zad*zad -+ -+ if(rcut4b(kkfbp)**2.ge.max(rab2,rac2,rad2))then -+ -+ rrab=1.d0/sqrt(rab2) -+ rrac=1.d0/sqrt(rac2) -+ rrad=1.d0/sqrt(rad2) -+ -+ rbc=xab*xac+yab*yac+zab*zac -+ rcd=xac*xad+yac*yad+zac*zad -+ rdb=xad*xab+yad*yab+zad*zab -+ -+c calculate bond-angle-plane vectors -+ -+ ubx=xac*rrac+xad*rrad -+ uby=yac*rrac+yad*rrad -+ ubz=zac*rrac+zad*rrad -+ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) -+ ubx=ubn*ubx -+ uby=ubn*uby -+ ubz=ubn*ubz -+ rub=xab*ubx+yab*uby+zab*ubz -+ -+ vbx=xac*rrac-xad*rrad -+ vby=yac*rrac-yad*rrad -+ vbz=zac*rrac-zad*rrad -+ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) -+ vbx=vbn*vbx -+ vby=vbn*vby -+ vbz=vbn*vbz -+ rvb=xab*vbx+yab*vby+zab*vbz -+ wwb=sqrt(rub**2+rvb**2) -+ -+ ucx=xad*rrad+xab*rrab -+ ucy=yad*rrad+yab*rrab -+ ucz=zad*rrad+zab*rrab -+ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) -+ ucx=ucn*ucx -+ ucy=ucn*ucy -+ ucz=ucn*ucz -+ ruc=xac*ucx+yac*ucy+zac*ucz -+ -+ vcx=xad*rrad-xab*rrab -+ vcy=yad*rrad-yab*rrab -+ vcz=zad*rrad-zab*rrab -+ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) -+ vcx=vcn*vcx -+ vcy=vcn*vcy -+ vcz=vcn*vcz -+ rvc=xac*vcx+yac*vcy+zac*vcz -+ wwc=sqrt(ruc**2+rvc**2) -+ -+ udx=xab*rrab+xac*rrac -+ udy=yab*rrab+yac*rrac -+ udz=zab*rrab+zac*rrac -+ udn=1.d0/sqrt(udx**2+udy**2+udz**2) -+ udx=udn*udx -+ udy=udn*udy -+ udz=udn*udz -+ rud=xad*udx+yad*udy+zad*udz -+ -+ vdx=xab*rrab-xac*rrac -+ vdy=yab*rrab-yac*rrac -+ vdz=zab*rrab-zac*rrac -+ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) -+ vdx=vdn*vdx -+ vdy=vdn*vdy -+ vdz=vdn*vdz -+ rvd=xad*vdx+yad*vdy+zad*vdz -+ wwd=sqrt(rud**2+rvd**2) -+ -+c calculate inversion angle cosines -+ -+ cosb=wwb*rrab -+ cosc=wwc*rrac -+ cosd=wwd*rrad -+ if(abs(cosb).gt.1.d0)cosb=sign(1.d0,cosb) -+ if(abs(cosc).gt.1.d0)cosc=sign(1.d0,cosc) -+ if(abs(cosd).gt.1.d0)cosd=sign(1.d0,cosd) -+ -+c select potential energy function type -+ -+ ktyp=ltpfbp(kkfbp) -+ -+c calculate potential energy and scalar force term -+ -+ if(ktyp.eq.1)then -+ -+c key=1 for harmonic potential -+ -+ thb=acos(cosb) -+ thc=acos(cosc) -+ thd=acos(cosd) -+ -+ pterm=0.5d0*prmfbp(kkfbp,1)* -+ x ((thb-prmfbp(kkfbp,2))**2+ -+ x (thc-prmfbp(kkfbp,2))**2+ -+ x (thd-prmfbp(kkfbp,2))**2)/3.d0 -+ -+ gamb=0.d0 -+ if(abs(thb).gt.1.d-12)gamb=prmfbp(kkfbp,1)* -+ x (thb-prmfbp(kkfbp,2))/(3.d0*sin(thb)) -+ gamc=0.d0 -+ if(abs(thc).gt.1.d-12)gamc=prmfbp(kkfbp,1)* -+ x (thc-prmfbp(kkfbp,2))/(3.d0*sin(thc)) -+ gamd=0.d0 -+ if(abs(thd).gt.1.d-12)gamd=prmfbp(kkfbp,1)* -+ x (thd-prmfbp(kkfbp,2))/(3.d0*sin(thd)) -+ -+ else if(ktyp.eq.2)then -+ -+c key=2 for harmonic cosine inversion potential -+ -+ pterm=0.5d0*prmfbp(kkfbp,1)* -+ x ((cosb-prmfbp(kkfbp,2))**2+ -+ x (cosc-prmfbp(kkfbp,2))**2+ -+ x (cosd-prmfbp(kkfbp,2))**2)/3.d0 -+ -+ gamb=-prmfbp(kkfbp,1)*(cosb-prmfbp(kkfbp,2))/3.d0 -+ gamc=-prmfbp(kkfbp,1)*(cosc-prmfbp(kkfbp,2))/3.d0 -+ gamd=-prmfbp(kkfbp,1)*(cosd-prmfbp(kkfbp,2))/3.d0 -+ -+ else if(ktyp.eq.3)then -+ -+c key=3 for planar inversion potentials -+ -+ pterm=prmfbp(kkfbp,1)* -+ x (3.d0-cosb-cosc-cosd)/3.d0 -+ -+ gamb=-prmfbp(kkfbp,1)/3.d0 -+ gamc=-prmfbp(kkfbp,1)/3.d0 -+ gamd=-prmfbp(kkfbp,1)/3.d0 -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ pterm=0.d0 -+ gamb=0.d0 -+ gamc=0.d0 -+ gamd=0.d0 -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set quadruple index -+ -+ if(lsolva) -+ x kkk=loc4(atmolt(ia),atmolt(ib),atmolt(ic),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)en4_exc(kkk)=en4_exc(kkk)+pterm -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ fbp_fre=fbp_fre-pterm -+ pterm=lambda1*pterm -+ gamb=lambda1*gamb -+ gamc=lambda1*gamc -+ gamd=lambda1*gamd -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ fbp_fre=fbp_fre+pterm -+ pterm=lambda2*pterm -+ gamb=lambda2*gamb -+ gamc=lambda2*gamc -+ gamd=lambda2*gamd -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential -+ -+ engfbp=engfbp+pterm -+ -+ if(lsolva)en4_sol(kkk)=en4_sol(kkk)+pterm -+ -+c calculate bond and u,v scalar products -+ -+ rubc=xab*ucx+yab*ucy+zab*ucz -+ rubd=xab*udx+yab*udy+zab*udz -+ rucd=xac*udx+yac*udy+zac*udz -+ rucb=xac*ubx+yac*uby+zac*ubz -+ rudb=xad*ubx+yad*uby+zad*ubz -+ rudc=xad*ucx+yad*ucy+zad*ucz -+ -+ rvbc=xab*vcx+yab*vcy+zab*vcz -+ rvbd=xab*vdx+yab*vdy+zab*vdz -+ rvcd=xac*vdx+yac*vdy+zac*vdz -+ rvcb=xac*vbx+yac*vby+zac*vbz -+ rvdb=xad*vbx+yad*vby+zad*vbz -+ rvdc=xad*vcx+yad*vcy+zad*vcz -+ -+c calculate atomic forces -+ -+ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) -+ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) -+ x - rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) -+ x + rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) -+ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) -+ x - rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) -+ x + rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) -+ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) -+ x - rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) -+ x + rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) -+ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) -+ x - rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) -+ x + rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) -+ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) -+ x - rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) -+ x + rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) -+ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) -+ x - rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) -+ x + rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) -+ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) -+ x - rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) -+ x + rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) -+ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) -+ x - rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) -+ x + rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) -+ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) -+ x - rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) -+ x + rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fax=-(fbx+fcx+fdx) -+ fay=-(fby+fcy+fdy) -+ faz=-(fbz+fcz+fdz) -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)+fbx -+ fyy(ib)=fyy(ib)+fby -+ fzz(ib)=fzz(ib)+fbz -+ -+ fxx(ic)=fxx(ic)+fcx -+ fyy(ic)=fyy(ic)+fcy -+ fzz(ic)=fzz(ic)+fcz -+ -+ fxx(id)=fxx(id)+fdx -+ fyy(id)=fyy(id)+fdy -+ fzz(id)=fzz(id)+fdz -+ -+c stress tensor calculation for inversion terms -+ -+ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx -+ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx -+ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx -+ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy -+ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz -+ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy (no virial) -+ -+ eng_loc=eng_loc+pterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)+fbx -+ fyy_loc(ib)=fyy_loc(ib)+fby -+ fzz_loc(ib)=fzz_loc(ib)+fbz -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx -+ fyy_loc(ic)=fyy_loc(ic)+fcy -+ fzz_loc(ic)=fzz_loc(ic)+fcz -+ -+ fxx_loc(id)=fxx_loc(id)+fdx -+ fyy_loc(id)=fyy_loc(id)+fdy -+ fzz_loc(id)=fzz_loc(id)+fdz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx -+ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx -+ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx -+ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy -+ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz -+ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ -+ enddo -+ enddo -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,443) -+ -+c global sum of four body potential and virial -+ -+ buffer(1)=engfbp -+ buffer(2)=virfbp -+ buffer(3)=fbp_fre -+ buffer(4)=fbp_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engfbp=buffer(1) -+ virfbp=buffer(2) -+ fbp_fre=buffer(3) -+ fbp_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(en4_sol,mxtmls_sol4,buffer(1)) -+ if(lexcite)call gdsum(en4_exc,mxtmls_exc4,buffer(1)) -+ -+ endif -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine fbpfrc -+ -+ end module four_body_module -diff -urN dl_class_1.9.orig/srcmod/hkewald_module.f dl_class_1.9/srcmod/hkewald_module.f ---- dl_class_1.9.orig/srcmod/hkewald_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/hkewald_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1292 @@ -+ module hkewald_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining hautman-klein ewald sum arrays -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use exclude_module -+ use error_module -+ use pair_module -+ use property_module -+ use setup_module -+ -+ implicit none -+ -+ real(8), allocatable :: ahk(:),crn(:,:) -+ real(8), allocatable :: elc(:,:),els(:,:) -+ real(8), allocatable :: emc(:,:),ems(:,:) -+ real(8), allocatable :: zzn(:),zzd(:) -+ real(8), allocatable :: hon(:,:),znp(:,:) -+ real(8), allocatable :: dhn(:,:),zgs(:) -+ real(8), allocatable :: fon(:,:),zgc(:) -+ real(8), allocatable :: ckc(:),cks(:) -+ real(8), allocatable :: pp(:),sss(:) -+ -+ save ahk,crn,elc,els,emc,ems,zzn,zzd,hon,znp,dhn,zgs -+ save fon,zgc,ckc,cks,pp,sss -+ -+ contains -+ -+ subroutine alloc_hke_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=9 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (ahk(0:mxhko),crn(0:mxhko,0:mxhko),stat=fail(1)) -+ allocate (elc(mxewld,0:1),els(mxewld,0:1),stat=fail(2)) -+ allocate (emc(mxewld,0:kmaxb),ems(mxewld,0:kmaxb),stat=fail(3)) -+ allocate (zzn(mxxdf),zzd(mxxdf),stat=fail(4)) -+ allocate (hon(mxgrid,0:mxhko),znp(mxhke,0:2*mxhko),stat=fail(5)) -+ allocate (dhn(mxgrid,0:mxhko),zgs(0:2*mxhko),stat=fail(6)) -+ allocate (fon(mxegrd,0:7),zgc(0:2*mxhko),stat=fail(7)) -+ allocate (ckc(mxewld),cks(mxewld),stat=fail(8)) -+ allocate (pp(2*mxhko),sss(mxxdf),stat=fail(9)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1730) -+ enddo -+ -+ end subroutine alloc_hke_arrays -+ -+ subroutine hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating convergence function -+c arrays for hautman klein ewald method (up to order 3 only) -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith february 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,idnode,nhko,nlatt,k -+ real(8) alpha,drewd,rcut,ecut,den,fac,ss1,aaa,ss2 -+ -+ if(nhko.gt.mxhko)call error(idnode,332) -+ -+c define effective cutoff -+ -+ ecut=rcut*dble(2*nlatt+1) -+ -+c define grid resolution for potential arrays -+ -+ drewd=ecut/dble(mxegrd-4) -+ -+c calculate HKE coefficients -+ -+ ahk(0)=1.d0 -+ -+ do i=1,nhko -+ -+ ahk(i)=-0.25d0*ahk(i-1)*dble(2*i*(2*i-1))/dble(i*i) -+ -+ enddo -+ -+c generate convergence function arrays -+ -+ do i=1,mxegrd -+ -+ hon(i,0)=0.d0 -+ hon(i,1)=dble(i-1)*drewd -+ hon(i,2)=(2.d0*alpha/sqrpi)*exp(-(alpha*hon(i,1))**2) -+ -+ enddo -+ -+c generate error function and derivatives by recursion -+ -+ do k=100,1,-1 -+ -+ den=1.d0/dble(2*k-1) -+ fac=(2.d0*alpha**2)**(k-1) -+ -+ do i=1,mxegrd -+ -+ hon(i,0)=den*(hon(i,0)*hon(i,1)**2+fac*hon(i,2)) -+ -+ enddo -+ -+ if(k.le.2*nhko+2)then -+ -+ do i=1,mxegrd -+ -+ fon(i,k-1)=hon(i,0) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c zeroth order function -+c note: hon(1,0)=2.d0*alpha/sqrpi -+ -+ do i=1,mxegrd -+ -+ hon(i,0)= fon(i,0) -+ dhn(i,0)=-fon(i,1) -+ -+ enddo -+ -+ if(nhko.eq.0)then -+ -+ ss1=dble(mxegrd-1)*drewd -+ aaa=abs(1.d0-hon(mxegrd,nhko)*ss1) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c first order function -+c note: hon(1,1)=8.d0*alpha**3/(3.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,1)=-(2.d0*fon(i,1)-fon(i,2)*ss2) -+ dhn(i,1)= (4.d0*fon(i,2)-fon(i,3)*ss2) -+ -+ enddo -+ -+ if(nhko.eq.1)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c second order function -+c note: hon(1,2)=64.d0*alpha**5/(45.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,2)=(8.d0*fon(i,2)+ss2*(-8.d0*fon(i,3)+ss2*fon(i,4)))/9.d0 -+ dhn(i,2)=(-24.d0*fon(i,3)+ss2*(12.d0*fon(i,4)-ss2*fon(i,5))) -+ x /9.d0 -+ -+ enddo -+ -+ if(nhko.eq.2)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c third order function (enough for anyone!) -+c note: hon(1,3)=768.d0*alpha**7/(14175.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,3)=-(48.d0*fon(i,3)+ss2*(-72.d0*fon(i,4)+ss2*( -+ x 18.d0*fon(i,5)-ss2*fon(i,6))))/225.d0 -+ dhn(i,3)= (192.d0*fon(i,4)+ss2*(-144.d0*fon(i,5)+ss2*( -+ x 24.d0*fon(i,6)-ss2*fon(i,7))))/225.d0 -+ -+ enddo -+ -+ if(nhko.eq.3)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+ return -+ end subroutine hkgen -+ -+ subroutine hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engcpe,vircpe,alpha,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using Hautman Klein Ewald method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith february 2000 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c note - in loop over all k vectors k=2pi(ll/cl,mm/cl) -+c the values of ll and mm are selected so that the symmetry of -+c reciprocal lattice is taken into account i.e. the following -+c rules apply. -+c -+c ll ranges over the values 0 to kmax1 only. -+c -+c mm ranges over 1 to kmax2 when ll=0 and over -+c -kmax2 to kmax2 otherwise. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,mxnode,natms,imcon,nhko,kmax1,kmax2,i -+ integer iatm0,iatm1,j,k,limit,mmin,l,ll,m,mm,n -+ real(8) engcpe,vircpe,alpha,epsq,twopi,ralph,area,rarea -+ real(8) det,rcpcut,rcpct2,aaa,engsic,pm1,pm2,term,ssx,ssy -+ real(8) tmp,rkx1,rky1,rkx2,rky2,rksq,rkk,fac,eterm,fng,fn0,gaus -+ real(8) bkk,force0,forcez,pterm,scale,cprop,omg,cs -+c$$$ real(8) erfc -+ -+ dimension cprop(10),omg(9) -+ -+ save newjob,engsic -+ -+ data newjob/.true./ -+ -+c initialise coulombic potential energy -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ if(alpha.lt.1.d-8)return -+ -+c set working parameters -+ -+ twopi=2.d0*pi -+ ralph=0.5d0/alpha -+ call dcell(cell,cprop) -+ area=cprop(1)*cprop(2)*sqrt(1.d0-cprop(4)**2) -+ rarea=pi/area -+ -+c set up atoms numbers for nodes -+ -+ iatm0 = (idnode*natms)/mxnode + 1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+c initalize stress tensor working arrays -+ -+ do i = 1,9 -+ -+ omg(i) = 0.d0 -+ -+ enddo -+ -+c construct reciprocal lattice vectors and set k vector range -+ -+ call invert(cell,rcell,det) -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ call dcell(rcell,cprop) -+ rcpcut=min(dble(kmax1)*cprop(7),dble(kmax2)*cprop(8))* -+ x 1.05d0*twopi -+ rcpct2=rcpcut**2 -+ -+c compute quantities for first entry -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+c pbc check and array bound checks -+ -+ if(imcon.ne.6)call error(idnode,66) -+ if(mxhke.ne.msatms) call error(idnode,331) -+ if(mxewld.ne.msatms) call error(idnode,330) -+ -+c check hk screening function at cutoff -+ -+ aaa=cerfr(ralph,rcpcut) -+c$$$ aaa=erfc(ralph*rcpcut)/rcpcut -+ -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,105,aaa,0.d0,0.d0) -+c call error(idnode,487) -+ -+ endif -+ -+c calculate self interaction correction -+ -+ engsic=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ engsic=engsic+chge(i)**2 -+ -+ enddo -+ -+ engsic=-r4pie0*alpha*engsic/(sqrpi*epsq) -+ -+c binomial coefficients -+ -+ k=0 -+ crn(0,0)=0.5d0 -+ do i=1,2*nhko -+ -+ pp(i)=1.d0 -+ pm1=pp(1) -+ -+ do j=2,i -+ -+ pm2=pp(j) -+ pp(j)=pm2+pm1 -+ pm1=pm2 -+ -+ enddo -+ -+ if(mod(i,2).eq.0)then -+ -+ k=k+1 -+ do j=0,k -+ -+ term=pp(j+1)*(-1.d0)**j -+ crn(j,k)=term -+ crn(k,j)=term -+ -+ enddo -+ -+ crn(k,k)=0.5d0*crn(k,k) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c calculate and store powers of z_i -+ -+ i=0 -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ znp(i,0)=1.d0 -+ znp(i,1)=zzz(j) -+ -+ enddo -+ -+ limit=i -+ -+ do k=2,2*nhko -+ -+ do i=1,limit -+ -+ znp(i,k)=znp(i,k-1)*znp(i,1) -+ -+ enddo -+ -+ enddo -+ -+c calculate and store exponential factors -+ -+ i=0 -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ elc(i,0)=1.d0 -+ emc(i,0)=1.d0 -+ els(i,0)=0.d0 -+ ems(i,0)=0.d0 -+ ssx=rcell(1)*xxx(j)+rcell(4)*yyy(j) -+ ssy=rcell(2)*xxx(j)+rcell(5)*yyy(j) -+ elc(i,1)=cos(twopi*ssx) -+ emc(i,1)=cos(twopi*ssy) -+ els(i,1)=sin(twopi*ssx) -+ ems(i,1)=sin(twopi*ssy) -+ -+ enddo -+ -+ do l=2,kmax2 -+ -+ do i=1,limit -+ -+ emc(i,l)=emc(i,l-1)*emc(i,1)-ems(i,l-1)*ems(i,1) -+ ems(i,l)=ems(i,l-1)*emc(i,1)+emc(i,l-1)*ems(i,1) -+ -+ enddo -+ -+ enddo -+ -+c start of main loop over k vectors -+ -+ mmin=1 -+ -+ do ll=0,kmax1 -+ -+ l=ll -+ tmp = twopi*dble(ll) -+ rkx1=tmp*rcell(1) -+ rky1=tmp*rcell(4) -+ -+c put cos(i,L) terms into cos(i,0) array -+ -+ if(l.eq.1) then -+ -+ do i=1,limit -+ -+ elc(i,0)=elc(i,1) -+ els(i,0)=els(i,1) -+ -+ enddo -+ -+ elseif(l.gt.1) then -+ -+ do i=1,limit -+ -+ cs=elc(i,0) -+ elc(i,0)=cs*elc(i,1)-els(i,0)*els(i,1) -+ els(i,0)=els(i,0)*elc(i,1)+cs*els(i,1) -+ -+ enddo -+ -+ endif -+ -+ do mm=mmin,kmax2 -+ -+ m=iabs(mm) -+ tmp = twopi*dble(mm) -+ rkx2=rkx1+tmp*rcell(2) -+ rky2=rky1+tmp*rcell(5) -+ -+c test on magnitude of k vector -+ -+ rksq=rkx2*rkx2+rky2*rky2 -+ -+ if(rksq.le.rcpct2)then -+ -+c calculate exp(ikr) terms and product with charges -+ -+ i=0 -+ -+ if(mm.ge.0)then -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)-els(i,0)*ems(i,m)) -+ cks(i)=chge(j)*(els(i,0)*emc(i,m)+ems(i,m)*elc(i,0)) -+ -+ enddo -+ -+ else -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ -+ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)+els(i,0)*ems(i,m)) -+ cks(i)=chge(j)*(els(i,0)*emc(i,m)-ems(i,m)*elc(i,0)) -+ -+ enddo -+ -+ endif -+ -+c calculate sum of products of powers of z_i and q_i exp(ik.s_i) -+ -+ do k=0,2*nhko -+ -+ zgc(k)=0.d0 -+ zgs(k)=0.d0 -+ -+ do i=1,limit -+ -+ zgc(k)=zgc(k)+ckc(i)*znp(i,k) -+ zgs(k)=zgs(k)+cks(i)*znp(i,k) -+ -+ enddo -+ -+ enddo -+ -+c perform global summation of zgc and zgs arrays -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(zgc(0),2*nhko+1,buffer) -+ call gdsum(zgs(0),2*nhko+1,buffer) -+ -+ endif -+ -+c calculate 0th order screening function -+ -+ rkk=sqrt(rksq) -+ fn0=cerfr(ralph,rkk) -+c$$$ fn0=erfc(ralph*rkk)/rkk -+ gaus=exp(-(ralph*rkk)**2)/(alpha*sqrpi) -+ -+c sum terms for orders of the screening function -+ -+ fac=1.d0 -+ -+ do k=0,nhko -+ -+c sum over z_i binomial contributions -+ -+ eterm=0.d0 -+ fng=fac*fn0 -+ do m=0,k -+ -+ n=2*k-m -+ -+c sum energy terms -+ -+ eterm=eterm+crn(m,k)*(zgc(m)*zgc(n)+zgs(m)*zgs(n)) -+ -+c calculate force contribution to each site -+ -+ i=0 -+ bkk=-fng*crn(m,k) -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ force0=bkk*(znp(i,n)*(zgs(m)*ckc(i)-zgc(m)*cks(i))+ -+ x znp(i,m)*(zgs(n)*ckc(i)-zgc(n)*cks(i))) -+ fxx(j)=fxx(j)+rkx2*force0 -+ fyy(j)=fyy(j)+rky2*force0 -+ -+ omg(3)=omg(3)+rkx2*force0*zzz(j) -+ omg(6)=omg(6)+rky2*force0*zzz(j) -+ -+ if(k.gt.0)then -+ -+ if(m.eq.0)then -+ -+ forcez=bkk*dble(n)*znp(i,n-1)*(zgc(m)*ckc(i)+ -+ x zgs(m)*cks(i)) -+ -+ else -+ -+ forcez=bkk*(dble(m)*znp(i,m-1)*(zgc(n)*ckc(i)+ -+ x zgs(n)*cks(i))+dble(n)*znp(i,n-1)*(zgc(m)* -+ x ckc(i)+zgs(m)*cks(i))) -+ -+ endif -+ -+ omg(9)=omg(9)+forcez*zzz(j) -+ fzz(j)=fzz(j)+forcez -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c accumulate potential energy and stress tensor -+ -+ engcpe=engcpe+fng*eterm -+ pterm=(dble(2*k-1)*fng-fac*gaus)/rksq -+ omg(1)=omg(1)+eterm*(fng+pterm*rkx2*rkx2) -+ omg(5)=omg(5)+eterm*(fng+pterm*rky2*rky2) -+ omg(2)=omg(2)+eterm*pterm*rky2*rkx2 -+ fac=fac*rksq/(dble(2*(k+1))*dble(2*k+1)) -+ -+c end of loop over orders of screening function -+ -+ enddo -+ -+c end of if-block for rksq < rcpct2 -+ -+ endif -+ -+c end of inner loop over reciprocal lattice vectors -+ -+ enddo -+ -+ mmin=-kmax2 -+ -+c end of outer loop over reciprocal lattice vectors -+ -+ enddo -+ -+ engcpe=engcpe/dble(mxnode) -+ do i = 1,9 -+ -+ omg(i) = omg(i)/dble(mxnode) -+ -+ enddo -+ -+c add self interaction correction to potential -+ -+ scale=4.d0*rarea*r4pie0/epsq -+ engcpe=scale*engcpe+engsic -+ -+c virial term -+ -+ vircpe=vircpe-scale*(omg(1)+omg(5)+omg(9)) -+ -+c calculate final forces -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=scale*fxx(i) -+ fyy(i)=scale*fyy(i) -+ fzz(i)=scale*fzz(i) -+ -+ enddo -+ -+c calculate stress tensor (symmetrical) -+ -+ stress(1) = stress(1)+scale*omg(1) -+ stress(2) = stress(2)+scale*omg(2) -+ stress(3) = stress(3)+scale*omg(3) -+ stress(4) = stress(4)+scale*omg(2) -+ stress(5) = stress(5)+scale*omg(5) -+ stress(6) = stress(6)+scale*omg(6) -+ stress(7) = stress(7)+scale*omg(3) -+ stress(8) = stress(8)+scale*omg(6) -+ stress(9) = stress(9)+scale*omg(9) -+ -+ return -+ end subroutine hkewald1 -+ -+ subroutine hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engcpe, -+ x vircpe,drewd,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating real-space contributions to -+c the hautman-klein-ewald electrostatic method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith may 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,nhko,nlatt,imcon,natms,nix,niy -+ integer nboxes,i,j,k,n,m,ma,mpm2,npm2,ii,l0,l1,l2,last -+ real(8) engcpe,vircpe,drewd,rcut,epsq -+ real(8) step,rcsq,rdrewd,strs1,strs2,strs3 -+ real(8) strs5,strs6,strs9,dcx,dcy,udx,udy,fac,chgea,chgprd -+ real(8) ddx,ddy,ssx,ssy,ssq,coul,fcoul,rrr,ppp,vk0,vk1,vk2 -+ real(8) eterm,t1,t2,egamma,fx,fy,fz,det -+ -+ dimension nix(25),niy(25) -+ -+ data nix/ 0, 1, 1, 0,-1,-1,-1, 0, 1, 2, 2, -+ x 2, 1, 0,-1,-2,-2,-2,-2,-2,-1, 0, 1, 2, 2/ -+ data niy/ 0, 0, 1, 1, 1, 0,-1,-1,-1, 0, 1, -+ x 2, 2, 2, 2, 2, 1, 0,-1,-2,-2,-2,-2,-2,-1/ -+ -+CDIR$ CACHE_ALIGN fi -+ -+c check boundary condition -+ -+ if(imcon.ne.6)call error(idnode,66) -+ -+c number of neighbouring real space cells -+ -+ if(nlatt.gt.2)call error(idnode,488) -+ step=dble(2*nlatt+1) -+ nboxes=(2*nlatt+1)**2 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c set cutoff condition for pair forces -+ -+ rcsq=(step*rcut)**2 -+ -+c reciprocal of interpolation interval -+ -+ rdrewd = 1.d0/drewd -+ -+c reciprocal cell -+ -+ call invert(cell,rcell,det) -+ do i=1,9 -+ -+ rcell(i)=rcell(i)/step -+ -+ enddo -+ -+c initialise stress tensor accumulators -+ strs3 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs5 = 0.d0 -+ -+c loop over image cells, starting with central cell -+ -+ ma=1 -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+ do k=1,nboxes -+ -+ last=natms -+ dcx=dble(nix(k)) -+ dcy=dble(niy(k)) -+ udx=cell(1)*dcx+cell(4)*dcy -+ udy=cell(2)*dcx+cell(5)*dcy -+ -+c outer loop over atoms -+ -+ do m=ma,mpm2 -+ -+ fac=r4pie0/epsq -+ if(m.eq.0)fac=fac*0.5d0 -+ if(m.gt.npm2)last=mpm2 -+ -+c set initial array values -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ chgea=fac*chge(i) -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ chgprd=chgea*chge(j) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+ zzn(ii)=1.d0 -+ zzd(ii)=0.d0 -+ -+c calculate interatomic separation -+ -+ ddx=xxx(i)-xxx(j)+udx -+ ddy=yyy(i)-yyy(j)+udy -+ ssx=rcell(1)*ddx+rcell(4)*ddy -+ ssy=rcell(2)*ddx+rcell(5)*ddy -+ ssx=ssx-nint(ssx) -+ ssy=ssy-nint(ssy) -+ xdf(ii)=step*(ssx*cell(1)+ssy*cell(4)) -+ ydf(ii)=step*(ssx*cell(2)+ssy*cell(5)) -+ zdf(ii)=zzz(i)-zzz(j) -+ rsqdf(ii)=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c loop over HK orders -+ -+ do n=0,nhko -+ -+c inner loop over atoms -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ chgea = fac*chge(i) -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ chgprd=chgea*chge(j) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c apply truncation of potential -+ -+ ssq=rsqdf(ii)-zdf(ii)*zdf(ii) -+ -+ if(rcsq.gt.ssq)then -+ -+c calculate potential energy and virial -+ -+ coul=0.d0 -+ fcoul=0.d0 -+ rrr = sqrt(rsqdf(ii)) -+ sss(ii)=sqrt(ssq) -+ -+ if(n.eq.0)then -+ -+ coul = chgprd/rrr -+ fcoul = coul/rsqdf(ii) -+ -+ endif -+ -+c interpolation parameters -+ -+ l0=int(sss(ii)*rdrewd) -+ ppp=sss(ii)*rdrewd-dble(l0) -+ l0=l0+1 -+ l1=l0+1 -+ l2=l0+2 -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0 = hon(l0,n) -+ vk1 = hon(l1,n) -+ vk2 = hon(l2,n) -+ t1 = vk0 + (vk1 - vk0)*ppp -+ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) -+ -+ eterm=(t1+(t2-t1)*ppp*0.5d0)*ahk(n)*chgprd -+ engcpe=engcpe+coul-eterm*zzn(ii) -+ -+c calculate forces using 3pt interpolation -+ -+ vk0 = dhn(l0,n) -+ vk1 = dhn(l1,n) -+ vk2 = dhn(l2,n) -+ -+ t1 = vk0 + (vk1 - vk0)*ppp -+ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) -+ -+c calculate in-plane forces -+ -+ egamma=fcoul+ -+ x (t1+(t2-t1)*ppp*0.5d0)*chgprd*zzn(ii)*ahk(n) -+ fx=egamma*xdf(ii) -+ fy=egamma*ydf(ii) -+ -+c calculate perpendicular forces -+ -+ fz=fcoul*zdf(ii)+2.d0*dble(n)*eterm*zzd(ii) -+ -+c add to force accumulators -+ -+ fxx(i)=fxx(i)+fx -+ fyy(i)=fyy(i)+fy -+ fzz(i)=fzz(i)+fz -+ -+ fxx(j)=fxx(j)-fx -+ fyy(j)=fyy(j)-fy -+ fzz(j)=fzz(j)-fz -+ -+c reset zzn array for next order of convergence function -+ -+ zzd(ii)=zzn(ii)*zdf(ii) -+ zzn(ii)=zzd(ii)*zdf(ii) -+ -+c calculate stress tensor -+ -+ strs1 = strs1 + xdf(ii)*fx -+ strs2 = strs2 + xdf(ii)*fy -+ strs3 = strs3 + xdf(ii)*fz -+ strs5 = strs5 + ydf(ii)*fy -+ strs6 = strs6 + ydf(ii)*fz -+ strs9 = strs9 + zdf(ii)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ ma=0 -+ -+ enddo -+ -+c calculate virial -+ -+ vircpe=vircpe-(strs1+strs5+strs9) -+ -+c complete stress tensor -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ return -+ end subroutine hkewald2 -+ -+ subroutine hkewald3(iatm,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating exclusion corrections to -+c the hautman-klein-ewald electrostatic method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith may 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm -+ real(8) engcpe,vircpe,epsq,fx,fy,fz,strs1,strs2,strs3 -+ real(8) strs5,strs6,strs9,chgea,chgprd,rrr,rsq,coul,fcoul -+ -+CDIR$ CACHE_ALIGN fi -+ -+c initialise stress tensor accumulators -+ -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs3 = 0.d0 -+ strs5 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ do m=1,nexatm(ik) -+ -+c atomic index and charge product -+ -+ jatm=lexatm(ik,m) -+ chgprd=chgea*chge(jatm) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=xdf(m)**2+ydf(m)**2+zdf(m)**2 -+ rrr = sqrt(rsq) -+ -+c calculate potential energy and virial -+ -+ coul = chgprd/rrr -+ engcpe = engcpe - coul -+ -+c calculate forces -+ -+ fcoul = coul/rsq -+ fx = fcoul*xdf(m) -+ fy = fcoul*ydf(m) -+ fz = fcoul*zdf(m) -+ -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ -+c calculate stress tensor -+ -+ strs1 = strs1 - xdf(m)*fx -+ strs2 = strs2 - xdf(m)*fy -+ strs3 = strs3 - xdf(m)*fz -+ strs5 = strs5 - ydf(m)*fy -+ strs6 = strs6 - ydf(m)*fz -+ strs9 = strs9 - zdf(m)*fz -+ -+ endif -+ -+ enddo -+ -+c virial -+ -+ vircpe=vircpe-engcpe -+ -+c complete stress tensor -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ endif -+ -+ return -+ end subroutine hkewald3 -+ -+ subroutine hkewald4(iatm,ik,engcpe,vircpe,engcpl,vircpl,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using the hautman-klein-ewald method -+c -+c modified to allow direct calculation of primary (short-range) -+c interactions for multiple-time step corrections -+ -+c primary neighbours are taken out of the Ewald sum -+c electrostatics are evaluated directly instead -+c -+c parallel replicated data version - real space terms -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith july 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm -+ real(8) engcpe,vircpe,engcpl,vircpl,rcut,epsq -+ real(8) fi,fli,rcsq,strs1,strs2,strs3,strs5,strs6 -+ real(8) strs9,strl1,strl2,strl3,strl5,strl6,strl9,chgea,chgprd -+ real(8) rsq,rrr,coul,egamma,fx,fy,fz -+ -+ dimension fi(3),fli(3) -+ -+CDIR$ CACHE_ALIGN fi -+CDIR$ CACHE_ALIGN fli -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ -+c initialise stress tensor accumulators -+ -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs3 = 0.d0 -+ strs5 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ strl1 = 0.d0 -+ strl2 = 0.d0 -+ strl3 = 0.d0 -+ strl5 = 0.d0 -+ strl6 = 0.d0 -+ strl9 = 0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ if(abs(chgea).gt.1.d-10)then -+ -+c temporary arrays for cache aligning -+ -+ fi(1) = fxx(iatm) -+ fi(2) = fyy(iatm) -+ fi(3) = fzz(iatm) -+ -+ fli(1) = flx(iatm) -+ fli(2) = fly(iatm) -+ fli(3) = flz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ chgprd=chgea*chge(jatm) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+c coulombic energy -+ -+ rrr = sqrt(rsq) -+ coul = chgprd/rrr -+ -+c sum contributions to the totals -+ -+ engcpe = engcpe + coul -+ engcpl = engcpl - coul -+ vircpe = vircpe - coul -+ vircpl = vircpl + coul -+ -+c calculate coulombic forces -+ -+ egamma = coul/rsq -+ -+ fx = egamma*xdf(m) -+ fy = egamma*ydf(m) -+ fz = egamma*zdf(m) -+ -+c add in contributions to instantaneous force -+ -+ fi(1) = fi(1) + fx -+ fi(2) = fi(2) + fy -+ fi(3) = fi(3) + fz -+ -+ fxx(jatm) = fxx(jatm) - fx -+ fyy(jatm) = fyy(jatm) - fy -+ fzz(jatm) = fzz(jatm) - fz -+ -+c add in contributions to the long-range force -+ -+ fli(1) = fli(1) - fx -+ fli(2) = fli(2) - fy -+ fli(3) = fli(3) - fz -+ -+ flx(jatm) = flx(jatm) + fx -+ fly(jatm) = fly(jatm) + fy -+ flz(jatm) = flz(jatm) + fz -+ -+c calculate long and short range stress tensors -+ -+ strs1 = strs1 + xdf(m)*fx -+ strl1 = strl1 - xdf(m)*fx -+ strs2 = strs2 + xdf(m)*fy -+ strl2 = strl2 - xdf(m)*fy -+ strs3 = strs3 + xdf(m)*fz -+ strl3 = strl3 - xdf(m)*fz -+ strs5 = strs5 + ydf(m)*fy -+ strl5 = strl5 - ydf(m)*fy -+ strs6 = strs6 + ydf(m)*fz -+ strl6 = strl6 - ydf(m)*fz -+ strs9 = strs9 + zdf(m)*fz -+ strl9 = strl9 - zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c copy back temporaries -+ -+ fxx(iatm) = fi(1) -+ fyy(iatm) = fi(2) -+ fzz(iatm) = fi(3) -+ -+ flx(iatm) = fli(1) -+ fly(iatm) = fli(2) -+ flz(iatm) = fli(3) -+ -+c complete stress tensor -+ -+ stresl(1) = stresl(1) + strl1 -+ stresl(2) = stresl(2) + strl2 -+ stresl(3) = stresl(3) + strl3 -+ stresl(4) = stresl(4) + strl2 -+ stresl(5) = stresl(5) + strl5 -+ stresl(6) = stresl(6) + strl6 -+ stresl(7) = stresl(7) + strl3 -+ stresl(8) = stresl(8) + strl6 -+ stresl(9) = stresl(9) + strl9 -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ endif -+ -+ return -+ end subroutine hkewald4 -+ -+ function cerfr(alpha,rrr) -+ -+c*********************************************************************** -+c -+c dl_poly function for generating complementary error function -+c divided by r -+c -+c copyright - daresbury laboratory 2001 -+c author - w. smith february 2001 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer k -+ real(8) cerfr,sqrpi,h0,h1,alpha,rrr,rr2,fac -+ -+ sqrpi=1.7724538509055159d0 -+ -+c starting values -+ -+ h0=0.d0 -+ h1=(2.d0*alpha/sqrpi)*exp(-(alpha*rrr)**2) -+ -+c generate function by recursion -+ -+ rr2=rrr*rrr -+ do k=100,1,-1 -+ -+ fac=(2.d0*alpha**2)**(k-1) -+ h0=(h0*rr2+fac*h1)/dble(2*k-1) -+ -+ enddo -+ -+ cerfr=1.d0/rrr-h0 -+ -+ return -+ end function cerfr -+ -+ end module hkewald_module -+ -diff -urN dl_class_1.9.orig/srcmod/hyper_dynamics_module.f dl_class_1.9/srcmod/hyper_dynamics_module.f ---- dl_class_1.9.orig/srcmod/hyper_dynamics_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/hyper_dynamics_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,2821 @@ -+ module hyper_dynamics_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining hyperdynamics routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use forces_module -+ use nlist_builders_module -+ use optimiser_module -+ use property_module -+ use setup_module -+ use shake_module -+ use temp_scalers_module -+ use vv_motion_module -+ -+ implicit none -+ -+ integer, parameter :: mxtrn=10 -+ integer, parameter :: mxbsn=1000 -+ integer, parameter :: mxneb=8 -+ integer, parameter :: mxdiffs=300 -+ integer, parameter :: hyper_tag=35000 -+ -+ integer numbsn,numpro,numtrk,ndiff,maxtrk,numdark,home_bsn,numbpd -+ integer nbsa(mxbsn),nbsb(mxbsn),ktrn(mxtrn) -+ real(8) xtrn(mxtrn),ytrn(mxtrn) -+ real(8) tstop,tkeres,timhyp,timres,tboost,boost,vbase -+ -+ integer, allocatable :: idabsn(:),keymin(:) -+ real(8), allocatable :: xbas(:),ybas(:),zbas(:) -+ real(8), allocatable :: xchk(:),ychk(:),zchk(:) -+ real(8), allocatable :: xres(:),yres(:),zres(:) -+ real(8), allocatable :: vxrs(:),vyrs(:),vzrs(:) -+ real(8), allocatable :: fxrs(:),fyrs(:),fzrs(:) -+ real(8), allocatable :: xhyp(:),yhyp(:),zhyp(:) -+ real(8), allocatable :: vxhp(:),vyhp(:),vzhp(:) -+ real(8), allocatable :: fxhp(:),fyhp(:),fzhp(:) -+ real(8), allocatable :: xdiffs(:),ydiffs(:),zdiffs(:) -+ real(8), allocatable :: celneb(:,:),path(:),optk(:,:) -+ real(8), allocatable :: xneb(:),yneb(:),zneb(:),engneb(:) -+ real(8), allocatable :: fxneb(:),fyneb(:),fzneb(:) -+ real(8), allocatable :: hxneb(:),hyneb(:),hzneb(:) -+ real(8), allocatable :: taux(:),tauy(:),tauz(:) -+ real(8), allocatable :: track(:) -+ -+ integer bsn_1(maxneb),bsn_2(maxneb) -+ real(8) strhyp(9),strres(9),engbsn(2) -+ real(8) celbas(9),celhyp(9),celchk(9),celres(9) -+ -+ save numbsn,numtrk,numpro,ndiff,numdark,timres -+ save xbas,ybas,zbas,xchk,ychk,zchk,timhyp,vbase -+ save xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs -+ save xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp -+ save celbas,celhyp,celres,celchk,strhyp,strres -+ save idabsn,nbsa,nbsb,xdiffs,ydiffs,zdiffs,tkeres -+ save xneb,yneb,zneb,engneb,taux,tauy,tauz,keymin -+ save fxneb,fyneb,fzneb,hxneb,hyneb,hzneb,path -+ save optk,tstop,tboost,boost,numbpd -+ -+ contains -+ -+ subroutine alloc_hyper_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining hyperdynamics arrays and -+c initialising control variables -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ -+ integer i,fail,idnode,nebmax -+ dimension fail(nnn) -+ -+ nebmax=msatms*(mxneb+1) -+ -+c initialise control variables -+ -+ numbpd=0 -+ numtrk=0 -+ numbsn=0 -+ numpro=0 -+ ndiff=0 -+ numdark=0 -+ home_bsn=0 -+ tkeres=0.d0 -+ tstop=1.d30 -+ timhyp=0.d0 -+ timres=0.d0 -+ boost=1.d0 -+ tboost=0.d0 -+ vbase=-huge(1.d0) -+ do i=1,maxneb -+ bsn_1(i)=0 -+ bsn_2(i)=0 -+ enddo -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xbas(msatms),ybas(msatms),zbas(msatms),stat=fail(1)) -+ allocate (xchk(msatms),ychk(msatms),zchk(msatms),stat=fail(2)) -+ allocate (xres(msatms),yres(msatms),zres(msatms),stat=fail(3)) -+ allocate (vxrs(msatms),vyrs(msatms),vzrs(msatms),stat=fail(4)) -+ allocate (fxrs(msatms),fyrs(msatms),fzrs(msatms),stat=fail(5)) -+ allocate (xhyp(msatms),yhyp(msatms),zhyp(msatms),stat=fail(6)) -+ allocate (vxhp(msatms),vyhp(msatms),vzhp(msatms),stat=fail(7)) -+ allocate (fxhp(msatms),fyhp(msatms),fzhp(msatms),stat=fail(8)) -+ allocate (xdiffs(mxdiffs),ydiffs(mxdiffs),zdiffs(mxdiffs), -+ x stat=fail(9)) -+ allocate (idabsn(mxdiffs),keymin(0:mxneb),stat=fail(10)) -+ allocate (xneb(nebmax),yneb(nebmax),zneb(nebmax),stat=fail(11)) -+ allocate (fxneb(nebmax),fyneb(nebmax),fzneb(nebmax),stat=fail(12)) -+ allocate (taux(msatms),tauy(msatms),tauz(msatms),stat=fail(13)) -+ allocate (engneb(0:mxneb),celneb(9,0:mxneb),path(0:mxneb), -+ x stat=fail(14)) -+ allocate (hxneb(nebmax),hyneb(nebmax),hzneb(nebmax),stat=fail(15)) -+ allocate (optk(5,0:mxneb),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1115) -+ endif -+ enddo -+ -+ end subroutine alloc_hyper_arrays -+ -+ subroutine hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for starting a hyperdynamics simulation -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,savflg -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,i,j -+ integer ntpvdw,ntshl,ntteth,numblock,iatm0,iatm1,ntcons -+ integer ktol,pass,fail,ntrack -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,engcfg -+ real(8) virlrc,cvgerr,dum,otol,cgerr,sigma,hyp_units -+ -+c allocate track array for BPD -+ -+ if(lbpd)then -+ allocate (track(0:nblock/ntrack),stat=fail) -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c current block number -+ -+ numblock=nstep/nblock -+ -+c open hyperdynamics journal file -+ -+ if(idnode.eq.0) -+ x open(nevnt,file="EVENTS",form='formatted',position='append') -+ -+c set up hyperdynamics for simulation start -+ -+ if(nstep.eq.0)then -+ -+c initialise bias potential boost factor -+ -+ numbpd=0 -+ boost=1.d0 -+ tboost=0.d0 -+ -+c set basin difference markers -+ -+ do i=1,mxbsn -+ -+ nbsa(i)=0 -+ nbsb(i)=0 -+ -+ enddo -+ -+c store the starting configuration -+ -+ savflg=.true. -+ tkeres=sigma -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+c minimise starting structure -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) -+ -+c define zero energy for BPD dynamics mode -+ -+ vbase=engcfg -+ -+c write events entry for minimisation -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x engcfg/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x engcfg/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c save minimised starting structure as basin file -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,engcfg) -+ -+c save details of starting home basin -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c restore the starting configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+ else -+ -+c restore previous data from hyperdynamics backup file -+ -+ call hyper_open(ltad,idnode,mxnode,natms,nsteql) -+ -+c reset home basin for hyperdynamics (home basin is 0 for TAD) -+ -+ if(lbpd)home_bsn=numbsn-1 -+ -+c store the current configuration -+ -+ savflg=.true. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c read minimised starting structure from home basin file -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,home_bsn,natms,imcon,idnode,engcfg) -+ -+c save details of current home basin -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c restore the current configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+ endif -+ -+ return -+ end subroutine hyper_start -+ -+ subroutine hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for implementing a hyperdynamics simulation -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical lbpd,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb -+ logical lrefmin,same,savflg,recycle,scan,prechk,tadall,nebgo -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntrack -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw -+ integer ntshl,ntteth,blkout,numblock,bsn1,bsn2,itrack -+ integer nturn,ntcons,mdiff,newbsn,iatm0,iatm1,pass,i,j,itrk -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,catchrad -+ real(8) cvgerr,estar,engcfg,cfgtmp,engcpe,engsrp,catch -+ real(8) vircpe,engmet,virmet,virlrc,engtbp,virtbp,dum -+ real(8) engfbp,virfbp,engter,virter,engbnd,virbnd,engang -+ real(8) virang,engdih,virdih,enginv,virinv,engtet,virtet -+ real(8) engshl,shlke,virshl,engfld,virfld,virsrp,sprneb -+ real(8) deltad,deltal,tlow,timhop,timlow,engtke,tolnce,hyp_units -+ real(8) ebias,vmin -+ -+ data bsn1,bsn2/0,0/ -+ -+c control variables -+ -+ lneb=.false. -+ numblock=nstep/nblock -+ maxtrk=nblock/ntrack -+ if(numdark.eq.0)numdark=nsteql -+ lrefmin=(mod(nstep,nblock).eq.0) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c BPD/TAD simulation time -+ -+ timhyp=timhyp+tstep -+ -+c track the tboost value -+ -+ if(mod(nstep,ntrack).eq.0)track(mod(numtrk,maxtrk))=tboost -+ -+c provisional check for transition - compare current config with -+c the reference state (not in dark period) -+ -+ same=.true. -+ scan=.false. -+ if(prechk.and.(mod(nstep,ntrack).eq.0).and. -+ x (lbpd.or.(ltad.and.(nstep.gt.numdark))))then -+ -+ catch=0.65d0*catchrad -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catch) -+ -+ if(.not.same.and.idnode.eq.0)then -+ -+ write(nevnt,'("PRE",i10)')nstep -+ write(nrite,'(1x,"PRE",i10)')nstep -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+ if(.not.same.or.lrefmin)then -+ -+c store the current configuration -+ -+ savflg=.true. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c minimise current structure -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c confirm any transition -+ -+ if(ltad)scan=.true. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c transition detected - proceed with transition analysis -+ -+ if(.not.same)then -+ -+c store new basin energy -+ -+ engbsn(2)=cfgtmp -+ -+c save new minimised state (bias potential dynamics only) -+ -+ if(lbpd)then -+ -+ do i=1,9 -+ celres(i)=cell(i) -+ enddo -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xres(j)=xxx(i) -+ yres(j)=yyy(i) -+ zres(j)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+c record transition (for TAD only if outside blackout period) -+ -+ if(lbpd.or.nstep.gt.numdark)then -+ -+c check if transition results in unique new basin (TAD only) -+ -+ if(ltad)call check_basins(newbsn,mdiff,mxnode) -+ -+c analysis of new basin -+ -+ if(lbpd.or.tadall.or.newbsn.eq.numbsn)then -+ -+c set difference counters and pointers (TAD only) -+ -+ if(ltad)then -+ -+ if(numbsn.gt.mxbsn)call error(idnode,2330) -+ -+ ndiff=mdiff -+ -+ if(numbsn.gt.1)then -+ nbsa(numbsn)=nbsb(numbsn-1)+1 -+ else -+ nbsa(numbsn)=1 -+ endif -+ -+ nbsb(numbsn)=mdiff -+ -+ endif -+ -+c save the basin file and store basin energy -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode, -+ x cfgtmp) -+ -+c determine minimum (reaction) path and activation energy -+ -+ if(nebgo)call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, -+ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,cfgtmp,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+c analyse the transition - determine e-star and destination state -+ -+ if(nebgo)call transition_properties -+ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,nturn,numbsn,alpha,delr,dlrpot, -+ x drewd,elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr,estar, -+ x catchrad,hyp_units) -+ -+c estimate time of transition from past trajectory -+ -+ call transition_time -+ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl, -+ x ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, -+ x ntpter,ntrack,ntpvdw,ntshl,ntteth,ntcons,itrk, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) -+ -+c update TAD control variables -+ -+ if(ltad)then -+ -+c update blackout period -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ -+c calculate stopping time -+ -+ timlow=timhop*exp(-(estar/temp-estar/tlow)/boltz) -+ tstop=min(tstop,deltad*(timlow/deltad)**(tlow/temp)) -+ -+c write transition data for TAD only -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRA",i10,3i6,1p,4e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timlow,tstop -+ write(nevnt,'("BLK",2i10)')nstep,numdark -+ write(nrite,'(1x,"TRA",i10,3i6,1p,4e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timlow,tstop -+ write(nrite,'(1x,"BLK",2i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ elseif(nebgo.and.idnode.eq.0)then -+ -+c write transition data for bias potential dynamics with NEB -+ -+ write(nevnt,'("TRA",i10,3i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,'(1x,"TRA",i10,3i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,"(1x,120('-'))") -+ -+ numbpd=0 -+ tboost=0.0 -+ -+ elseif(idnode.eq.0)then -+ -+c write transition data for bias potential dynamics without NEB -+ -+ write(nevnt,'("TRA",i10,2i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,ebias/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,'(1x,"TRA",i10,2i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,ebias/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,"(1x,120('-'))") -+ -+ numbpd=0 -+ tboost=0.0 -+ -+ endif -+ -+ else -+ -+c update blackout period when transition not unique (TAD only) -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRR",i10,3i6)')nstep,home_bsn,newbsn -+ write(nevnt,'("BLK",2i10)')nstep,numdark -+ write(nrite,'(1x,"TRR",i10,3i6)')nstep,home_bsn,newbsn -+ write(nrite,'(1x,"BLK",2i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+c actions when new basin has been visited before (TAD only) -+ -+ elseif(ltad)then -+ -+c ignore dark transition and extend blackout period (TAD only) -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRI",i10)')nstep -+ write(nrite,'(1x,"TRI",i10)')nstep -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ if(nstep.le.nsteql)then -+ -+ nsteql=nsteql+blkout -+ numdark=nsteql+blkout -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("EQL",2i10)')nstep,nsteql -+ write(nrite,'(1x,"EQL",2i10)')nstep,nsteql -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ else -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("BLK",3i10)')nstep,numdark -+ write(nrite,'(1x,"BLK",3i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ if(ltad)then -+ -+c return to the block starting state after transition (TAD only) -+ -+ timhyp=timres -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+c scramble the velocities (and conserve system energy) -+ -+ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,tkeres,temp,tolnce) -+ -+ elseif(lbpd)then -+ -+c reset reference state to new basin (bias potential dynamics only) -+ -+ home_bsn=home_bsn+1 -+ engbsn(1)=engbsn(2) -+ -+ do i=1,9 -+ celbas(i)=celres(i) -+ enddo -+ -+ call invert(celbas,rcell,dum) -+ -+ do i=1,iatm1-iatm0+1 -+ -+ xbas(i)=rcell(1)*xres(i)+rcell(4)*yres(i)+rcell(7)*zres(i) -+ ybas(i)=rcell(2)*xres(i)+rcell(5)*yres(i)+rcell(8)*zres(i) -+ zbas(i)=rcell(3)*xres(i)+rcell(6)*yres(i)+rcell(9)*zres(i) -+ -+ enddo -+ -+c restore current hyperdynamics configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c reset boost factor -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+c no transition detected so restore current trajectory -+ -+ else -+ -+c restore the current configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c save the block configuration as reset state (TAD only) -+ -+ if(ltad.and.lrefmin)then -+ -+ savflg=.true. -+ tkeres=engtke -+ timres=timhyp -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c close down if TAD stopping time reached -+ -+ if(ltad.and.tstop.lt.timhyp)recycle=.false. -+ -+c write a tracking file -+ -+ if(mod(nstep,ntrack).eq.0)then -+ -+ itrack=mod(numtrk,maxtrk) -+ call write_reference_config -+ x ('CFGTRK','TRACKS',ntrk,itrack,natms,imcon,idnode,engcfg) -+ -+ numtrk=numtrk+1 -+ -+ endif -+ -+ return -+ end subroutine hyper_driver -+ -+ subroutine define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls for a -+c structural minimisation to define a minimum state for -+c hyperdynamics simulations -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,nogofr,lneut,lnsq,loglnk,stropt,lzeql -+ logical newlst,ltad,lsolva,lfree,lexcite -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf -+ integer nblock,pass,mxpass,mstep,ntcons,nsolva,isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,cfgold,cvgerr -+ real(8) hnorm,grad0,grad1,ff1,sgn,engord,virord -+ -+ data mxpass/1000/ -+ -+c control variables -+ -+ pass=0 -+ keystr=0 -+ numrdf=0 -+ ltad=.true. -+ engcfg=1.d30 -+ stropt=.false. -+ nogofr=.false. -+ -+c dummy variables -+ -+ lsolva=.false. -+ lfree=.false. -+ lexcite=.false. -+ nsolva=0 -+ isolva=1 -+ engord=0.d0 -+ virord=0.d0 -+ -+c relax the current structure -+ -+ do while(.not.stropt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ cfgold=engcfg -+ mstep=nstep+pass -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ cvgerr=abs(engcfg-cfgold) -+ -+ enddo -+ -+ return -+ end subroutine define_minimum_state -+ -+ subroutine write_reference_config -+ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) -+ -+c*********************************************************************** -+c -+c dlpoly utility to write a minimum structure file in CONFIG -+c format -+c -+c copyright daresbury laboratory -+c author w.smith june 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*6 fnam -+ character*4 tail -+ character*6 direct -+ integer nfil,nnn,i,natms,imcon,idnode,levcfg -+ real(8) engcfg -+ -+ levcfg=0 -+ -+c node zero handles i/o -+ -+ if(idnode.eq.0)then -+ -+c write configuration data to new configuration file -+ -+ write(tail,'(i4.4)')nnn -+ open(nfil,file=direct//'/'//fnam//tail,form='formatted') -+ -+ write(nfil,'(a10)')fnam//tail -+ write(nfil,'(3i10,g20.12)') levcfg,imcon,natms,engcfg -+ -+ if(imcon.gt.0) write(nfil,'(3f20.12)') cell -+ -+ do i=1,natms -+ -+ write(nfil,'(a8,i10)') atmnam(i),i -+ write(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ -+ enddo -+ -+ close (nfil) -+ -+ endif -+ -+ nnn=nnn+1 -+ -+ return -+ end subroutine write_reference_config -+ -+ subroutine read_reference_config -+ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) -+ -+c*********************************************************************** -+c -+c dlpoly utility to read a reference structure file in CONFIG -+c format -+c -+c copyright daresbury laboratory -+c author w.smith february 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*6 fnam -+ character*4 tail -+ character*6 direct -+ integer nfil,nnn,i,natms,imcon,idnode,levcfg -+ real(8) engcfg -+ -+c node zero handles i/o -+ -+ if(idnode.eq.0)then -+ -+c read configuration data from configuration file on proc 0 -+ -+ write(tail,'(i4.4)')nnn -+ open(nfil,file=direct//'/'//fnam//tail,form='formatted') -+ -+ read(nfil,*) -+ read(nfil,'(3i10,g20.12)')levcfg,imcon,natms,engcfg -+ buffer(1)=dble(levcfg) -+ buffer(2)=dble(imcon) -+ buffer(3)=dble(natms) -+ buffer(4)=engcfg -+ if(imcon.gt.0) read(nfil,'(3f20.12)') cell -+ do i=1,9 -+ buffer(i+4)=cell(i) -+ enddo -+ call gdsum(buffer(1),13,buffer(14)) -+ -+ do i=1,natms -+ -+ read(nfil,'(a8)') atmnam(i) -+ read(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ -+ enddo -+ -+ close (nfil) -+ -+ else -+ -+c gather data from configuration file on procs > 0 -+ -+ do i=1,13 -+ buffer(i)=0.d0 -+ enddo -+ call gdsum(buffer(1),13,buffer(14)) -+ -+ levcfg=nint(buffer(1)) -+ imcon=nint(buffer(2)) -+ natms=nint(buffer(3)) -+ engcfg=buffer(4) -+ do i=1,9 -+ cell(i)=buffer(i+4) -+ enddo -+ do i=1,natms -+ xxx(i)=0.d0 -+ yyy(i)=0.d0 -+ zzz(i)=0.d0 -+ enddo -+ -+ endif -+ -+c global gather of atomic coordinates -+ -+ call gdsum(xxx,natms,buffer) -+ call gdsum(yyy,natms,buffer) -+ call gdsum(zzz,natms,buffer) -+ -+ return -+ end subroutine read_reference_config -+ -+ subroutine store_config(lsave,idnode,mxnode,natms,strold,celold, -+ x xold,yold,zold,vxold,vyold,vzold,fxold,fyold,fzold) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for storing the current -+c configuration -+c -+c copyright daresbury laboratory -+c author w.smith sep 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical lsave -+ integer idnode,mxnode,natms,iatm0,iatm1,i,j -+ -+ real(8) strold(9),celold(9) -+ real(8) xold(msatms),yold(msatms),zold(msatms) -+ real(8) vxold(msatms),vyold(msatms),vzold(msatms) -+ real(8) fxold(msatms),fyold(msatms),fzold(msatms) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if(lsave)then -+ -+c save cell and stress tensors -+ -+ do i=1,9 -+ -+ celold(i)=cell(i) -+ strold(i)=stress(i) -+ -+ enddo -+ -+c save configuration -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ vxold(j)=vxx(i) -+ vyold(j)=vyy(i) -+ vzold(j)=vzz(i) -+ fxold(j)=fxx(i) -+ fyold(j)=fyy(i) -+ fzold(j)=fzz(i) -+ -+ enddo -+ -+ else -+ -+c restore cell and stress tensors -+ -+ do i=1,9 -+ -+ cell(i)=celold(i) -+ stress(i)=strold(i) -+ -+ enddo -+ -+c restore configuration -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxx(i)=xold(j) -+ yyy(i)=yold(j) -+ zzz(i)=zold(j) -+ vxx(i)=vxold(j) -+ vyy(i)=vyold(j) -+ vzz(i)=vzold(j) -+ fxx(i)=fxold(j) -+ fyy(i)=fyold(j) -+ fzz(i)=fzold(j) -+ -+ enddo -+ -+c replication of full configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine store_config -+ -+ subroutine check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for checking when a transition -+c has occured in a configuration -+c -+c copyright daresbury laboratory -+c author w.smith sep 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical same,safe,scan,all -+ integer idnode,mxnode,natms,imcon,nblock,mdiff -+ integer iatm0,iatm1,i,j -+ real(8) catchrad,catch2,rr2,dum,sxx,syy,szz,txx,tyy,tzz,pp2 -+ -+ all=(seek.eq.'all ') -+ -+c flag for comparing structures -+ -+ same=.true. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise search parameters -+ -+ catch2=catchrad**2 -+ -+c construct coordinate check arrays -+ -+ do i=1,9 -+ celchk(i)=cell(i) -+ enddo -+ -+c store structure in reduced coordinates (target atoms only) -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ if(all.or.atmnam(i).eq.seek)then -+ -+ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ endif -+ -+ enddo -+ -+c compare current structure with reference basin -+ -+ j=0 -+ pp2=0.d0 -+ safe=.true. -+ mdiff=ndiff -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ if(all.or.atmnam(i).eq.seek)then -+ -+c calculate separations in reduced units -+ -+ sxx=xchk(j)-xbas(j) -+ syy=ychk(j)-ybas(j) -+ szz=zchk(j)-zbas(j) -+ -+c calculate minimum image separations -+ -+ sxx=sxx-nint(sxx) -+ syy=syy-nint(syy) -+ szz=szz-nint(szz) -+ -+c set trial structure at minimum displacements from reference -+ -+ xchk(j)=xbas(j)+sxx -+ ychk(j)=ybas(j)+syy -+ zchk(j)=zbas(j)+szz -+ -+c calculate atomic separations in real coordinates -+ -+ txx=(celchk(1)*xchk(j)+celchk(4)*ychk(j)+celchk(7)*zchk(j)) -+ x -(celbas(1)*xbas(j)+celbas(4)*ybas(j)+celbas(7)*zbas(j)) -+ tyy=(celchk(2)*xchk(j)+celchk(5)*ychk(j)+celchk(8)*zchk(j)) -+ x -(celbas(2)*xbas(j)+celbas(5)*ybas(j)+celbas(8)*zbas(j)) -+ tzz=(celchk(3)*xchk(j)+celchk(6)*ychk(j)+celchk(9)*zchk(j)) -+ x -(celbas(3)*xbas(j)+celbas(6)*ybas(j)+celbas(9)*zbas(j)) -+ -+c calculate total structural difference -+ -+ rr2=txx**2+tyy**2+tzz**2 -+ pp2=max(pp2,rr2) -+ -+c identify and store the displaced atoms -+ -+ if(scan.and.rr2.ge.catch2)then -+ -+ mdiff=mdiff+1 -+ -+ if(mdiff.le.mxdiffs)then -+ -+ idabsn(mdiff)=i -+ xdiffs(mdiff)=txx -+ ydiffs(mdiff)=tyy -+ zdiffs(mdiff)=tzz -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c global check on diffs arrays -+ -+ if(scan)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'number of current diffs',i10)")mdiff -+ call error(idnode,2340) -+ -+ endif -+ -+ endif -+ -+c global transition check -+ -+ same=(pp2.lt.catch2) -+ if(mxnode.gt.1)call gstate(same) -+ -+ return -+ end subroutine check_for_transition -+ -+ subroutine check_basins(newbsn,mdiff,mxnode) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for checking that a new basin is not -+c one already known -+c -+c copyright daresbury laboratory -+c author w.smith jan 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical same -+ integer newbsn,ia,ib,ic,id,ibsn,i,j,k,mxnode,mdiff -+ -+ ibsn=1 -+ newbsn=0 -+ ib=mdiff -+ ia=ndiff+1 -+ same=.false. -+ do while(.not.same.and.ibsn.lt.numbsn) -+ -+ ic=nbsa(ibsn) -+ id=nbsb(ibsn) -+ -+ if(ib-ia.eq.id-ic)then -+ -+ same=.true. -+ -+ do k=0,ib-ia -+ -+ i=ia+k -+ j=ic+k -+ -+ if(.not.((idabsn(i).eq.idabsn(j)).and. -+ x (abs(xdiffs(i)-xdiffs(j)).lt.0.1d0).and. -+ x (abs(ydiffs(i)-ydiffs(j)).lt.0.1d0).and. -+ x (abs(zdiffs(i)-zdiffs(j)).lt.0.1d0)))same=.false. -+ -+ enddo -+ -+ endif -+ -+c check if same on all processors -+ -+ if(mxnode.gt.1)call gstate(same) -+ if(same)newbsn=ibsn -+ -+ ibsn=ibsn+1 -+ -+ enddo -+ -+c if not same - must be new basin! -+ -+ if(.not.same)newbsn=numbsn -+ -+ return -+ end subroutine check_basins -+ -+ subroutine neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, -+ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling a nudged elastic band -+c calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lneb,newlst,lneut,lnsq,stropt -+ logical lzeql,loglnk,lfcap -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,mstep -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw -+ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl -+ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nscons -+ integer ngrp,keytol,ntfree,iatm0,iatm1,iatm2,ntcons -+ integer i,j,k,n,pass,mxpass,nkinks,bsn1,bsn2,itrk -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl -+ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep -+ real(8) sprneb,opttol,hyp_units,fac,xxn,yyn,zzn,tol,cvg,dum -+ -+ data mxpass/100/ -+ -+c control variables -+ -+ stropt=.false. -+ do n=0,mxneb -+ -+ keymin(n)=0 -+ do i=1,5 -+ optk(i,n)=0.d0 -+ enddo -+ -+ enddo -+ if(lneb)numpro=-(100*bsn1+bsn2) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c read in the required start and end point configurations -+ -+ if(lneb)then -+ -+c read data for first reference structure -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,bsn1,natms,imcon,idnode,engcfg) -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c read data for second reference structure -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,bsn2,natms,imcon,idnode,engcfg) -+ -+ engbsn(2)=engcfg -+ -+ do i=1,9 -+ celchk(i)=cell(i) -+ enddo -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+ endif -+ -+c construct initial `bead' configurations in chain -+ -+ k=0 -+ do n=0,mxneb -+ -+ j=0 -+ fac=dble(n)/dble(mxneb) -+ -+c construct linear mix of cell vectors -+ -+ do i=1,9 -+ celneb(i,n)=(1.d0-fac)*celbas(i)+fac*celchk(i) -+ enddo -+ -+c construct beads by linear interpolation -+ -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ -+ xxn=xbas(j)+fac*((xchk(j)-xbas(j))-nint(xchk(j)-xbas(j))) -+ yyn=ybas(j)+fac*((ychk(j)-ybas(j))-nint(ychk(j)-ybas(j))) -+ zzn=zbas(j)+fac*((zchk(j)-zbas(j))-nint(zchk(j)-zbas(j))) -+ xneb(k)=celneb(1,n)*xxn+celneb(4,n)*yyn+celneb(7,n)*zzn -+ yneb(k)=celneb(2,n)*xxn+celneb(5,n)*yyn+celneb(8,n)*zzn -+ zneb(k)=celneb(3,n)*xxn+celneb(6,n)*yyn+celneb(9,n)*zzn -+ -+ enddo -+ -+ enddo -+ -+c start of NEB optimisation -+ -+ pass=0 -+ safe=.false. -+ do while(.not.safe.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ safe=.true. -+ mstep=nstep+pass -+ -+c calculate system forces on all beads -+ -+ call neb_system_forces -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, -+ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, -+ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, -+ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, -+ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep) -+ -+c calculate spring forces on all beads -+ -+ call neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) -+ -+c energy minimisation of each bead -+ -+ do n=0,mxneb -+ -+c construct cell vectors for nth bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate and force arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ fxx(i)=fxneb(k) -+ fyy(i)=fyneb(k) -+ fzz(i)=fzneb(k) -+ -+ enddo -+ -+c restore search direction vector if keymin > 0 -+ -+ if(keymin(n).gt.0)then -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ hhx(i)=hxneb(k) -+ hhy(i)=hyneb(k) -+ hhz(i)=hzneb(k) -+ -+ enddo -+ -+ endif -+ -+c form complete global arrays -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ if(keymin(n).gt.0) -+ x call merge(idnode,mxnode,natms,mxbuff,hhx,hhy,hhz,buffer) -+ -+ endif -+ -+c structure optimisation -+ -+ call strucopt -+ x (stropt,keymin(n),keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,10.d0*opttol,engneb(n),optk(1,n), -+ x optk(2,n),optk(3,n),optk(4,n),optk(5,n)) -+ safe=safe.and.stropt -+ stropt=.false. -+ -+c update coordinate arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xneb(k)=xxx(i) -+ yneb(k)=yyy(i) -+ zneb(k)=zzz(i) -+ hxneb(k)=hhx(i) -+ hyneb(k)=hhy(i) -+ hzneb(k)=hhz(i) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c convergence check -+ -+c$$$ if(.not.safe)then -+c$$$ -+c$$$ call error(idnode,2320) -+c$$$ -+c$$$ else -+ -+c save neb profile -+ -+ call write_profile(idnode,mxnode,natms,hyp_units) -+ -+c write neb summary -+ -+ if(idnode.eq.0)then -+ -+ if(lneb)then -+ -+ write(nrite,'(/,1x,"summary of NEB calculation",/)') -+ write(nrite,'(1x,"path and energy for state",i4, -+ x " ---> state",i4," transition")')bsn1,bsn2 -+ write(nrite,'(1x,"convergence status :",l4)')safe -+ write(nrite,'(1x,"obtained after ",i4," iterations",/)')pass -+ -+ do n=0,mxneb -+ write(nrite,'(6x,1p,2e14.6)')path(n),engneb(n)/hyp_units -+ enddo -+ -+ else -+ -+ write(nevnt,'("NEB",i10,3i6,1p,2e14.5)') -+ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, -+ x engbsn(2)/hyp_units -+ write(nrite,'(1x,"NEB",i10,3i6,1p,2e14.5)') -+ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, -+ x engbsn(2)/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+c$$$ endif -+ -+c end of NEB optimisation -+ -+ return -+ end subroutine neb_driver -+ -+ subroutine neb_system_forces -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, -+ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, -+ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, -+ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, -+ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating system forces in a nudged -+c elastic band calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,ltad -+ logical lsolva,lfree,lexcite -+ integer idnode,mxnode,natms,imcon,nstbgr,nsteql,mstep -+ integer numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw -+ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl -+ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl -+ integer iatm0,iatm1,iatm2,i,k,n,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl -+ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep -+ real(8) engord,virord -+ -+ numrdf=0 -+ ltad=.true. -+ nogofr=.false. -+ -+c dummy variables -+ -+ lsolva=.false. -+ lfree=.false. -+ lexcite=.false. -+ nsolva=0 -+ isolva=1 -+ engord=0.d0 -+ virord=0.d0 -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c calculate system forces for all beads -+ -+ do n=0,mxneb -+ -+c construct cell vectors for one bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate array for one bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ -+ enddo -+ -+c form complete global arrays -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces for one bead -+ -+ call force_manager -+ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c store configuration energy of bead -+ -+ engneb(n)=engcfg -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c allocate forces to bead atoms -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ fxneb(k)=fxx(i) -+ fyneb(k)=fyy(i) -+ fzneb(k)=fzz(i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine neb_system_forces -+ -+ subroutine neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating spring forces in a nudged -+c elastic band calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,k,n,kp,km,idnode,mxnode,natms,iatm0,iatm1,iatm2 -+ integer nkinks -+ real(8) rp2,rm2,tau2,fpar,vv0,vp1,vm1,aaa,bbb,txx,tyy,tzz -+ real(8) uxx,uyy,uzz,wxx,wyy,wzz,sxx,syy,szz,rxx,ryy,rzz -+ real(8) sprneb,fac,kink,det -+ real(8) rcella(9),rcellb(9),rcellc(9),cella(9),cellb(9),cellc(9) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c energies of first and last basins -+ -+ engneb(0)=engbsn(1) -+ engneb(mxneb)=engbsn(2) -+ -+c calculate spring tangents for all beads -+ -+ nkinks=0 -+ do n=1,mxneb-1 -+ -+ rp2=0.d0 -+ rm2=0.d0 -+ tau2=0.d0 -+ fpar=0.d0 -+ kink=0.d0 -+ vv0=engneb(n) -+ vp1=engneb(n+1) -+ vm1=engneb(n-1) -+ -+c calculate tangent vector and scalar product with system force -+ -+ if(vp1.gt.vv0.and.vv0.gt.vm1)then -+ -+ aaa=1.d0 -+ bbb=0.d0 -+ -+ else if(vp1.lt.vv0.and.vv0.lt.vm1)then -+ -+ aaa=0.d0 -+ bbb=1.d0 -+ -+ else if(vp1.gt.vm1)then -+ -+ aaa=max(abs(vp1-vv0),abs(vv0-vm1)) -+ bbb=min(abs(vp1-vv0),abs(vv0-vm1)) -+ -+ else -+ -+ aaa=min(abs(vp1-vv0),abs(vv0-vm1)) -+ bbb=max(abs(vp1-vv0),abs(vv0-vm1)) -+ -+ endif -+ -+c invert cell matrices -+ -+ do i=1,9 -+ cella(i)=celneb(i,n-1) -+ cellb(i)=celneb(i,n) -+ cellc(i)=celneb(i,n+1) -+ enddo -+ call invert(cella,rcella,det) -+ call invert(cellb,rcellb,det) -+ call invert(cellc,rcellc,det) -+ -+ j=0 -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ km=k-iatm2 -+ -+c calculate first spring vector (pbc corrected) -+ -+ sxx=rcellb(1)*xneb(k)+rcellb(4)*yneb(k)+rcellb(7)*zneb(k) -+ syy=rcellb(2)*xneb(k)+rcellb(5)*yneb(k)+rcellb(8)*zneb(k) -+ szz=rcellb(3)*xneb(k)+rcellb(6)*yneb(k)+rcellb(9)*zneb(k) -+ rxx=rcella(1)*xneb(km)+rcella(4)*yneb(km)+rcella(7)*zneb(km) -+ ryy=rcella(2)*xneb(km)+rcella(5)*yneb(km)+rcella(8)*zneb(km) -+ rzz=rcella(3)*xneb(km)+rcella(6)*yneb(km)+rcella(9)*zneb(km) -+ rxx=rxx-nint(rxx-sxx) -+ ryy=ryy-nint(ryy-syy) -+ rzz=rzz-nint(rzz-szz) -+ txx=xneb(k)- -+ x (rxx*celneb(1,n-1)+ryy*celneb(4,n-1)+rzz*celneb(7,n-1)) -+ tyy=yneb(k)- -+ x (rxx*celneb(2,n-1)+ryy*celneb(5,n-1)+rzz*celneb(8,n-1)) -+ tzz=zneb(k)- -+ x (rxx*celneb(3,n-1)+ryy*celneb(6,n-1)+rzz*celneb(9,n-1)) -+ -+c calculate second spring vector (pbc corrected) -+ -+ kp=k+iatm2 -+ rxx=rcellc(1)*xneb(kp)+rcellc(4)*yneb(kp)+rcellc(7)*zneb(kp) -+ ryy=rcellc(2)*xneb(kp)+rcellc(5)*yneb(kp)+rcellc(8)*zneb(kp) -+ rzz=rcellc(3)*xneb(kp)+rcellc(6)*yneb(kp)+rcellc(9)*zneb(kp) -+ rxx=rxx-nint(rxx-sxx) -+ ryy=ryy-nint(ryy-syy) -+ rzz=rzz-nint(rzz-szz) -+ uxx=-xneb(k)+ -+ x rxx*celneb(1,n+1)+ryy*celneb(4,n+1)+rzz*celneb(7,n+1) -+ uyy=-yneb(k)+ -+ x rxx*celneb(2,n+1)+ryy*celneb(5,n+1)+rzz*celneb(8,n+1) -+ uzz=-zneb(k)+ -+ x rxx*celneb(3,n+1)+ryy*celneb(6,n+1)+rzz*celneb(9,n+1) -+ -+ rp2=rp2+uxx*uxx+uyy*uyy+uzz*uzz -+ rm2=rm2+txx*txx+tyy*tyy+tzz*tzz -+ wxx=aaa*uxx+bbb*txx -+ wyy=aaa*uyy+bbb*tyy -+ wzz=aaa*uzz+bbb*tzz -+ taux(j)=wxx -+ tauy(j)=wyy -+ tauz(j)=wzz -+ tau2=tau2+wxx*wxx+wyy*wyy+wzz*wzz -+ fpar=fpar+wxx*fxneb(k)+wyy*fyneb(k)+wzz*fzneb(k) -+ kink=kink+txx*uxx+tyy*uyy+tzz*uzz -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=rp2 -+ buffer(2)=rm2 -+ buffer(3)=tau2 -+ buffer(4)=fpar -+ buffer(5)=kink -+ call gdsum(buffer(1),5,buffer(6)) -+ rp2=buffer(1) -+ rm2=buffer(2) -+ tau2=buffer(3) -+ fpar=buffer(4) -+ kink=buffer(5) -+ -+ endif -+ -+c check for kinking of NEB -+ -+ kink=cos(kink/sqrt(rp2*rm2)) -+ if(kink.lt.0.5d0)nkinks=nkinks+1 -+ -+c calculate final forces -+ -+ j=0 -+ k=n*iatm2 -+ tau2=sqrt(tau2) -+ fac=(sprneb*(sqrt(rp2)-sqrt(rm2))-fpar/tau2)/tau2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ fxneb(k)=fxneb(k)+fac*taux(j) -+ fyneb(k)=fyneb(k)+fac*tauy(j) -+ fzneb(k)=fzneb(k)+fac*tauz(j) -+ -+ enddo -+ -+ enddo -+ -+c abort if kinks detected -+ -+ if(nkinks.gt.0)then -+ -+ if(idnode.eq.0) -+ x write(nrite,'(1x,"number of kinks detected ",i6)')nkinks -+ call error(idnode,2350) -+ -+ endif -+ -+ return -+ end subroutine neb_spring_forces -+ -+ subroutine transition_properties -+ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl, -+ x nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree, -+ x ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth, -+ x nturn,numbsn,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, -+ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,estar,catchrad,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for analysing the NEB path and determining -+c the destination state (if not end of chain). -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,ltad,scan,same -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,pass -+ integer ntpvdw,ntshl,ntteth,nturn,i,k,n,iatm0,iatm1,iatm2 -+ integer numblock,numbsn,mdiff -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp -+ real(8) virlrc,cvgerr,estar,catchrad,hyp_units -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c analyse neb profile -+ -+ call scan_profile(nturn,estar) -+ -+c determine true new state from first maximum -+ -+ if(nturn.gt.1)then -+ -+ i=1 -+ do while(ktrn(i).ge.0) -+ i=i+1 -+ enddo -+ n=-ktrn(i) -+ -+c construct cell vectors for nth bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate force arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ -+ enddo -+ -+c now minimise structure - this is correct new state -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation -+ -+ numblock=nstep/nblock -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ if(ltad)then -+ -+c determine differences for new state (TAD only) -+ -+ scan=.true. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c set difference counters and pointers -+ -+ if(numbsn.gt.mxbsn)call error(idnode,2330) -+ -+ ndiff=mdiff -+ -+ if(numbsn.gt.1)then -+ nbsa(numbsn)=nbsb(numbsn-1)+1 -+ else -+ nbsa(numbsn)=1 -+ endif -+ -+ nbsb(numbsn)=mdiff -+ -+c save minimised starting structure as basin file -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,cfgtmp) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine transition_properties -+ -+ subroutine write_profile(idnode,mxnode,natms,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing profile file for NEB path -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ character*4 tail -+ integer idnode,mxnode,natms,i,j,k,n,iatm0,iatm1,iatm2 -+ real(8) hyp_units -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+ if(idnode.eq.0)then -+ -+c open profile data file -+ -+ if(numpro.lt.0)then -+ -+ write(tail,'(i4.4)')iabs(numpro) -+ open(npro,file='PROFILES'//'/'//'PRX'//tail//'.XY', -+ x form='formatted') -+ -+ else -+ -+ write(tail,'(i4.4)')numpro -+ open(npro,file='PROFILES'//'/'//'PRO'//tail//'.XY', -+ x form='formatted') -+ -+ endif -+ -+ endif -+ -+c calculate path -+ -+ path(0)=0.d0 -+ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(0), -+ x engneb(0)/hyp_units -+ -+ do n=1,mxneb -+ -+ path(n)=0.d0 -+ k=n*iatm2 -+ j=(n-1)*iatm2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ path(n)=(xneb(k)-xneb(j))**2+(yneb(k)-yneb(j))**2+ -+ x (zneb(k)-zneb(j))**2+path(n) -+ -+ enddo -+ -+ if(mxnode.gt.1)call gdsum(path(n),1,buffer(1)) -+ -+ path(n)=sqrt(path(n))+path(n-1) -+ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(n), -+ x engneb(n)/hyp_units -+ -+ enddo -+ -+ numpro=numpro+1 -+ -+ if(idnode.eq.0)close(npro) -+ -+ return -+ end subroutine write_profile -+ -+ subroutine scan_profile(nturn,estar) -+ -+c********************************************************************* -+c -+c dl_poly routine for analysing neb energy profile -+c -+c copyright - daresbury laboratory -+c author - w.smith january 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer, parameter :: nscan=100 -+ -+ integer i,np,n1,n2,npnts,fail,nturn -+ real(8) di,dj,rpd,uu,vv,v0,ss,estar -+ real(8), allocatable :: aa(:),dd(:),gg(:),zz(:) -+ -+c allocate working arrays -+ -+ allocate (aa(0:mxneb),dd(0:mxneb),gg(0:mxneb),zz(0:mxneb), -+ x stat=fail) -+ -+ npnts=mxneb+1 -+ n1=npnts-1 -+ n2=npnts-2 -+ -+c calculate spline coefficients -+ -+ gg(0)=0.d0 -+ dd(0)=path(1)-path(0) -+ -+ do i=1,n1-1 -+ -+ dd(i)=path(i+1)-path(i) -+ gg(i)=2.d0*(path(i+1)-path(i-1)) -+ zz(i)=6.d0*((engneb(i+1)-engneb(i))/dd(i)- -+ x (engneb(i)-engneb(i-1))/dd(i-1)) -+ -+ enddo -+ -+ gg(n1)=0.d0 -+ dd(n1)=0.d0 -+ aa(0)=0.d0 -+ aa(1)=dd(1)/gg(1) -+ -+ do i=2,n2-1 -+ -+ gg(i)=gg(i)-dd(i-1)*aa(i-1) -+ aa(i)=dd(i)/gg(i) -+ -+ enddo -+ -+ gg(n1-1)=gg(n1-1)-dd(n2-1)*aa(n2-1) -+ gg(1)=zz(1)/gg(1) -+ -+ do i=2,n1-1 -+ gg(i)=(zz(i)-dd(i-1)*gg(i-1))/gg(i) -+ enddo -+ -+ do i=1,n2-1 -+ gg(n1-i)=gg(n1-i)-aa(n1-i)*gg(npnts-i) -+ enddo -+ -+c now scan across the profile locating maxima and minima -+ -+ np=1 -+ nturn=0 -+ ss=1.d0 -+ v0=engneb(0) -+ rpd=(path(npnts-1)-path(0))/dble(nscan) -+ -+ do i=2,nscan-1 -+ -+ uu=rpd*dble(i)+path(0) -+ -+ do while(np.lt.npnts.and.uu.gt.path(np)) -+ np=np+1 -+ enddo -+ -+ di=uu-path(np-1) -+ dj=path(np)-uu -+ vv=(di*engneb(np)+dj*engneb(np-1)-di*dj* -+ x ((dd(np-1)+dj)*gg(np-1)+(dd(np-1)+di)*gg(np))/6.d0)/dd(np-1) -+ -+ if(ss.gt.0.d0.and.vv.le.v0)then -+ -+ nturn=nturn+1 -+ xtrn(nturn)=uu -+ ytrn(nturn)=vv -+ ktrn(nturn)=np -+ -+ else if(ss.lt.0.d0.and.vv.gt.v0)then -+ -+ nturn=nturn+1 -+ xtrn(nturn)=uu -+ ytrn(nturn)=vv -+ ktrn(nturn)=-np -+ -+ endif -+ -+ ss=sign(1.d0,vv-v0) -+ v0=vv -+ -+ enddo -+ -+c estimated activation energy -+ -+ i=1 -+ do while(ktrn(i).lt.0) -+ i=i+1 -+ enddo -+ estar=ytrn(i)-engbsn(1) -+ -+c deallocate working arrays -+ -+ deallocate (aa,dd,gg,zz,stat=fail) -+ -+ return -+ end subroutine scan_profile -+ -+ subroutine transition_time -+ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3, -+ x multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntrack,ntpvdw,ntshl,ntteth, -+ x ntcons,itrk,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, -+ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) -+ -+c********************************************************************* -+c -+c dl_poly routine for estimating the time of a transition -+c from a backlog of previous configurations -+c -+c copyright - daresbury laboratory -+c author - w.smith february 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ character*8 seek -+ logical same,minflg,lfcap,lneut,lnsq,loglnk,scan -+ logical lzeql,newlst -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter -+ integer ntpvdw,ntshl,ntteth,ntcons,ntrack,itrk,mdiff,pass -+ integer nback,ntry,numblock -+ real(8) alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol -+ real(8) rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep -+ real(8) volm,cfgtmp,cvgerr,eng,tol,catchrad,timhop,hyp_units -+ -+c determine starting tracking file -+ -+ nback=min(numtrk,maxtrk) -+ -+c search track files for transition -+ -+ itrk=0 -+ same=.false. -+ -+ do while(.not.same.and.itrk.le.nback) -+ -+ itrk=itrk+1 -+ ntry=mod(numtrk-itrk,maxtrk) -+ -+ call read_reference_config -+ x ('CFGTRK','TRACKS',ntrk,ntry,natms,imcon,idnode,eng) -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation (normally deactivated) -+ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ numblock=nstep/nblock -+c$$$ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, -+c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units -+c$$$ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, -+c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units -+c$$$ write(nrite,"(1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+c check if still in base state -+ -+ scan=.false. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+ enddo -+ -+ timhop=timhyp-tstep*dble(ntrack)*(dble(itrk)-0.5d0) -+ tboost=track(ntry) -+ -+ return -+ end subroutine transition_time -+ -+ subroutine scramble_velocities(idnode,natms) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for randomising velocities after a -+c transition has occured (use with identical species only) -+c -+c copyright daresbury laboratory -+c author w.smith jan 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer idnode,natms,i,j,k,m,n -+ real(8) vvv -+ -+ do j=1,10 -+ -+ do i=1,natms -+ -+ k=int(natms*duni())+1 -+ vvv=vxx(i) -+ vxx(i)=vxx(k) -+ vxx(k)=vvv -+ m=int(natms*duni())+1 -+ vvv=vyy(i) -+ vyy(i)=vyy(m) -+ vyy(m)=vvv -+ n=int(natms*duni())+1 -+ vvv=vzz(i) -+ vzz(i)=vzz(n) -+ vzz(n)=vvv -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine scramble_velocities -+ -+ subroutine hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c*********************************************************************** -+c -+c dlpoly routine for saving hyperdynamics restart data -+c -+c copyright daresbury laboratory -+c author w.smith dec 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical ltad -+ integer idnode,mxnode,natms,nsteql -+ integer iatm0,iatm1,i,j,k,n,last,ierr,netdif -+ real(8) buff(2) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c total number of atomic differences -+ -+ buff(1)=dble(ndiff) -+ call gdsum(buff(1),1,buff(2)) -+ netdif=nint(buff(1)) -+ -+ if(idnode.eq.0)then -+ -+c open hyperdynamics restart file -+ -+ open(nhrs,file="HYPREV",form="unformatted") -+ -+c write control variables -+ -+ write(nhrs)ltad,dble(numbsn),dble(numtrk),dble(numpro), -+ x dble(netdif),dble(numdark),dble(nsteql),dble(numbpd), -+ x timhyp,timres,tstop,tkeres,tboost,vbase,strres,celres -+ write(nhrs)track -+ endif -+ -+ if(ltad.and.numbsn.gt.1)then -+ -+c load basin difference data -+ -+ n=0 -+ do i=1,numbsn-1 -+ -+ do j=nbsa(i),nbsb(i) -+ -+ buffer(n+1)=dble(idabsn(j)) -+ buffer(n+2)=dble(i) -+ buffer(n+3)=xdiffs(j) -+ buffer(n+4)=ydiffs(j) -+ buffer(n+5)=zdiffs(j) -+ n=n+5 -+ -+ enddo -+ -+ enddo -+ last=n -+ -+c write basin difference data -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ -+ call csend(hyper_tag+k,buff,1,k,ierr) -+ call crecv(2*hyper_tag+k,buff,1) -+ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) -+ last=nint(buff(1))+last -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buff,1) -+ buff(1)=dble(last) -+ call csend(2*hyper_tag+k,buff,1,0,ierr) -+ call csend(3*hyper_tag+k,buffer,last,0,ierr) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)write(nhrs)(buffer(i),i=1,last) -+ call gsync() -+ -+ endif -+ -+c load reference block configuration data -+ -+ j=0 -+ k=1 -+ do i=iatm0,iatm1 -+ -+ buffer(j+1)=xres(k) -+ buffer(j+2)=yres(k) -+ buffer(j+3)=zres(k) -+ j=j+3 -+ k=k+1 -+ -+ enddo -+ last=j -+ -+c write reference block configuration data -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buff,1,k,ierr) -+ call crecv(2*hyper_tag+k,buff,1) -+ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) -+ last=nint(buff(1))+last -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buff,1) -+ buff(1)=dble(last) -+ call csend(2*hyper_tag+k,buff,1,0,ierr) -+ call csend(3*hyper_tag+k,buffer,last,0,ierr) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nhrs)(buffer(i),i=1,last) -+ close(nhrs) -+ -+ endif -+ call gsync() -+ -+ return -+ end subroutine hyper_close -+ -+ subroutine hyper_open(ltad,idnode,mxnode,natms,nsteql) -+ -+c*********************************************************************** -+c -+c dlpoly routine for reading hyperdynamics restart data -+c -+c copyright daresbury laboratory -+c author w.smith dec 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical ltad,mtad -+ integer idnode,mxnode,natms,nsteql -+ integer iatm0,iatm1,i,j,k,n,last,netdif,ierr -+ real(8) buff(1) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c restore control variables -+ -+ mtad=.true. -+ if(idnode.eq.0)then -+ -+c open hyperdynamics restart file -+ -+ open(nhrs,file="HYPOLD",form="unformatted") -+ -+ read(nhrs)mtad,(buffer(i),i=1,30) -+ read(nhrs)track -+ -+ else -+ -+ do i=1,30 -+ buffer(i)=0.d0 -+ enddo -+ track(:)=0.d0 -+ -+ endif -+ -+c check restart file is tad compatible -+ -+ call gstate(mtad) -+ if(ltad.and.(.not.mtad))call error(idnode,2341) -+ -+ call gdsum(buffer(1),31,buffer(32)) -+ -+ numbsn=nint(buffer(1)) -+ numtrk=nint(buffer(2)) -+ numpro=nint(buffer(3)) -+ netdif=nint(buffer(4)) -+ numdark=nint(buffer(5)) -+ nsteql=nint(buffer(6)) -+ numbpd=nint(buffer(7)) -+ timhyp=buffer(8) -+ timres=buffer(9) -+ tstop=buffer(10) -+ tkeres=buffer(11) -+ tboost=buffer(12) -+ vbase=buffer(13) -+ do i=1,9 -+ -+ strres(i)=buffer(i+13) -+ celres(i)=buffer(i+22) -+ -+ enddo -+ last=size(track) -+ call gdsum(track,last,buffer) -+ -+ if(ltad.and.numbsn.gt.1)then -+ -+c restore basin difference data -+ -+ last=5*netdif -+ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buffer,last,k,ierr) -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buffer,last) -+ -+ endif -+ -+ enddo -+ -+c reject nonlocal basin difference data -+ -+ j=0 -+ do i=1,last,5 -+ -+ n=nint(buffer(i)) -+ if(n.ge.iatm0.and.n.le.iatm1)then -+ -+ buffer(j+1)=buffer(i) -+ buffer(j+2)=buffer(i+1) -+ buffer(j+3)=buffer(i+2) -+ buffer(j+4)=buffer(i+3) -+ buffer(j+5)=buffer(i+4) -+ j=j+5 -+ -+ endif -+ -+ enddo -+ last=j -+ -+c unload basin difference data -+ -+ n=0 -+ nbsa(1)=1 -+ do i=1,numbsn-1 -+ -+ if(i.gt.1)nbsa(i)=n+1 -+ -+ do j=1,last,5 -+ -+ if(nint(buffer(j+1)).eq.i)then -+ -+ n=n+1 -+ idabsn(n)=nint(buffer(j)) -+ xdiffs(n)=buffer(j+2) -+ ydiffs(n)=buffer(j+3) -+ zdiffs(n)=buffer(j+4) -+ -+ endif -+ -+ enddo -+ -+ nbsb(i)=n -+ -+ enddo -+ ndiff=n -+ call gsync() -+ -+ endif -+ -+c retrieve reference block configuration data -+ -+ last=3*natms -+ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) -+ -+ do k=1,mxnode-1 -+ -+c read reference block configuration data -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buffer,last,k,ierr) -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buffer,last) -+ -+ endif -+ -+ enddo -+ -+c unload reference block configuration data -+ -+ n=1 -+ j=3*(iatm0-1) -+ do i=iatm0,iatm1 -+ -+ xres(n)=buffer(j+1) -+ yres(n)=buffer(j+2) -+ zres(n)=buffer(j+3) -+ j=j+3 -+ n=n+1 -+ -+ enddo -+ -+ if(idnode.eq.0)close(nhrs) -+ call gsync() -+ -+ return -+ end subroutine hyper_open -+ -+ subroutine bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scaling forces in a bias potential dynamics -+c simulation using hamelberg, mongan and mccammon factor -+c J. Chem. Phys. 120 (2004) 11919 -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2008 -+c -+c*********************************************************************** -+ -+ integer i,natms,mynode,keybpd -+ real(8) alpha,vmin,ebias,beta,temp,engcfg,eboost,hscale -+ real(8) engtmp -+ -+ boost=1.d0 -+ numbpd=numbpd+1 -+ -+c reset potential energy wrt base level -+ -+ if(keybpd.eq.1)then -+ engtmp=engcfg-vbase -+ else -+ engtmp=engcfg-engbsn(1) -+ endif -+ -+ if(ebias.gt.engtmp)then -+ -+c bias potental boost -+ -+ alpha=ebias*(ebias-vmin)/vmin -+ beta=1.d0/(boltz*temp*dble(natms)) -+ eboost=(ebias-engtmp)**2/(alpha+ebias-engtmp) -+ boost=exp(beta*eboost) -+ -+c bias potential forces scaling factor -+ -+ hscale=(alpha/(alpha+ebias-engtmp))**2 -+ -+c scale forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)*hscale -+ fyy(i)=fyy(i)*hscale -+ fzz(i)=fzz(i)*hscale -+ -+ enddo -+ -+ endif -+ -+c accumulative average of boost factor -+ -+ tboost=boost/dble(numbpd)+dble(numbpd-1)*tboost/dble(numbpd) -+ -+ return -+ end subroutine bpd_forces -+ -+ end module hyper_dynamics_module -diff -urN dl_class_1.9.orig/srcmod/integrator_module.f dl_class_1.9/srcmod/integrator_module.f ---- dl_class_1.9.orig/srcmod/integrator_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/integrator_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,624 @@ -+ module integrator_module -+ -+c*********************************************************************** -+c -+c dl_poly module for selecting verlet integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use error_module -+ use lf_motion_module -+ use lf_rotation1_module -+ use lf_rotation2_module -+ use pmf_module -+ use temp_scalers_module -+ use vv_motion_module -+ use vv_rotation1_module -+ use vv_rotation2_module -+ -+ contains -+ -+ subroutine lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the integration algorithm -+c to solve the the equations of motion. based on the leapfrog -+c verlet algorithm -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,safep,safeq,lcnb,lshmov,lnfic -+ integer idnode,mxnode,imcon,natms,ngrp,keyens,nscons,nofic -+ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep -+ real(8) tstep,engke,engrot,tolnce,quattol,vircon,vircom -+ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip -+ real(8) consv,conint,elrc,virlrc,virpmf -+ -+ safe=.true. -+ safeq=.true. -+ safep=.true. -+ -+ if(ngrp.eq.0) then -+ -+ if(keyens.eq.0) then -+ -+c verlet leapfrog -+ -+ call nve_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.1) then -+ -+c Evans Gaussian Temperature constraints -+ -+ call nvt_e1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.2) then -+ -+c Berendsen thermostat -+ -+ call nvt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,taut,sigma,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.3) then -+ -+c Nose-Hoover thermostat -+ -+ call nvt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) -+ -+ elseif(keyens.eq.4) then -+ -+c Berendsen thermostat and isotropic barostat -+ -+ call npt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,virtot,vircon,volm) -+ -+ else if(keyens.eq.5) then -+ -+c Nose-Hoover thermostat and isotropic barostat -+ -+ call npt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) -+ -+ else if(keyens.eq.6) then -+ -+c Berendsen thermostat and barostat (cell shape varying) -+ -+ call nst_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma, -+ x tolnce,tstep,vircon,volm) -+ -+ else if(keyens.eq.7) then -+ -+c Nose-Hoover thermostat and barostat (cell shape varying) -+ -+ call nst_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) -+ -+ elseif(keyens.eq.8) then -+ -+c Potential of mean force in NVE -+ -+ call pmflf -+ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+ endif -+ -+ elseif(ngrp.gt.0) then -+ -+c apply rigid body equations of motion -+ -+ if(keyens.eq.0) then -+ -+ if(.not.lcnb) then -+ -+ call nveq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+ else -+ -+ call nveq_2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+ endif -+ -+ elseif(keyens.eq.1) then -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ elseif(keyens.eq.2) then -+ -+ if(.not.lcnb) then -+ -+ call nvtq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+ else -+ -+ call nvtq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.3) then -+ -+ if(.not.lcnb) then -+ -+ call nvtq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+ else -+ -+ call nvtq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.4) then -+ -+ if(.not.lcnb) then -+ -+ call nptq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, -+ x vircon,volm) -+ -+ else -+ -+ call nptq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, -+ x virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.5) then -+ -+ if(.not.lcnb) then -+ -+ call nptq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,virtot,vircom,vircon,volm) -+ -+ else -+ -+ call nptq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.6) then -+ -+ if(.not.lcnb) then -+ -+ call nstq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+ else -+ -+ call nstq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+ endif -+ -+ elseif(keyens.eq.7) then -+ -+ if(.not.lcnb) then -+ -+ call nstq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,volm) -+ -+ else -+ -+ call nstq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,volm) -+ -+ endif -+ -+ else -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ endif -+ -+ endif -+ -+c check on convergence of pmf-shake -+ -+ if(ntpmf.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safep) -+ if(.not.safep) call error(idnode,438) -+ -+ endif -+ -+c check on convergence of shake -+ -+ if(ntcons.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,105) -+ -+ endif -+ -+c check on convergence of quaternion algorithm -+ -+ if(ngrp.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safeq) -+ if(.not.safeq) call error(idnode,321) -+ -+ endif -+ -+c eliminate "flying ice cube" in long simulations (Berendsen) -+ -+ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then -+ -+ if(mod(nstep,nofic).eq.0)then -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lf_integrate -+ -+ subroutine vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint,elrc, -+ x virlrc,virpmf,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the integration algorithm -+c to solve the the equations of motion. based on the velocity -+c verlet algorithm -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,safep,lcnb,lshmov,lnfic -+ integer isw,idnode,mxnode,imcon,natms,ngrp,keyens,nscons -+ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep,nofic -+ integer ntshl,keyshl -+ real(8) tstep,engke,engrot,tolnce,vircon,vircom -+ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip -+ real(8) consv,conint,elrc,virlrc,virpmf,chit_shl,sigma_shl -+ -+ if(ngrp.eq.0) then -+ -+ if(keyens.eq.0) then -+ -+c verlet leapfrog -+ -+ call nvevv_1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,engke,tolnce,vircon) -+ -+ else if(keyens.eq.1) then -+ -+c Evans Gaussian Temperature constraints -+ -+ call nvtvv_e1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,engke,tolnce,vircon) -+ -+ else if(keyens.eq.2) then -+ -+c Berendsen thermostat -+ -+ call nvtvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,taut,sigma,engke,tolnce,vircon) -+ -+ else if(keyens.eq.3) then -+ -+c Nose-Hoover thermostat -+ -+ call nvtvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntshl,keyshl,tstep,taut,sigma,chit,consv, -+ x conint,engke,tolnce,vircon,chit_shl,sigma_shl) -+ -+ elseif(keyens.eq.4) then -+ -+c Berendsen thermostat and isotropic barostat -+ -+ call nptvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,virtot,vircon,volm) -+ -+ else if(keyens.eq.5) then -+ -+c Nose-Hoover thermostat and isotropic barostat -+ -+ call nptvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp, -+ x chip,chit,consv,conint,engke,elrc,tolnce,vircon, -+ x virtot,virlrc,volm,press,chit_shl,sigma_shl) -+ -+ else if(keyens.eq.6) then -+ -+c Berendsen thermostat and barostat (cell shape varying) -+ -+ call nstvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press, -+ x elrc,virlrc,tolnce,vircon,volm) -+ -+ else if(keyens.eq.7) then -+ -+c Nose-Hoover thermostat and barostat (cell shape varying) -+ -+ call nstvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chit,consv,conint,engke,elrc,tolnce,vircon, -+ x virlrc,volm,press,chit_shl,sigma_shl) -+ -+ elseif(keyens.eq.8) then -+ -+c Potential of mean force in NVE -+ -+ call pmfvv -+ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+ endif -+ -+ elseif(ngrp.gt.0) then -+ -+c apply rigid body equations of motion -+ -+ if(keyens.eq.0) then -+ -+ if(.not.lcnb) then -+ -+ call nveqvv_1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+ else -+ -+ call nveqvv_2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.1) then -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ elseif(keyens.eq.2) then -+ -+ if(.not.lcnb) then -+ -+ call nvtqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+ else -+ -+ call nvtqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.3) then -+ -+ if(.not.lcnb) then -+ -+ call nvtqvv_h1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, -+ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, -+ x sigma_shl) -+ -+ else -+ -+ call nvtqvv_h2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, -+ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, -+ x sigma_shl) -+ -+ endif -+ -+ elseif(keyens.eq.4) then -+ -+ if(.not.lcnb) then -+ -+ call nptqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+ else -+ -+ call nptqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.5) then -+ -+ if(.not.lcnb) then -+ -+ call nptqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virtot,virlrc,vircom,volm,press,chit_shl, -+ x sigma_shl) -+ -+ else -+ -+ call nptqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virtot,virlrc,volm,press,chit_shl, -+ x sigma_shl) -+ -+ endif -+ -+ elseif(keyens.eq.6) then -+ -+ if(.not.lcnb) then -+ -+ call nstqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, -+ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+ else -+ -+ call nstqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, -+ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+ endif -+ -+ elseif(keyens.eq.7) then -+ -+ if(.not.lcnb) then -+ -+ call nstqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+ else -+ -+ call nstqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) -+ -+ endif -+ -+ else -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ endif -+ -+ endif -+ -+c check on convergence of pmf-shake -+ -+ if(ntpmf.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safep) -+ if(.not.safep) call error(idnode,438) -+ -+ endif -+ -+c check on convergence of shake -+ -+ if(ntcons.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,105) -+ -+ endif -+ -+c eliminate "flying ice cube" in long simulations (Berendsen) -+ -+ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then -+ -+ if(mod(nstep,nofic).eq.0)then -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine vv_integrate -+ -+ end module integrator_module -diff -urN dl_class_1.9.orig/srcmod/inversion_module.f dl_class_1.9/srcmod/inversion_module.f ---- dl_class_1.9.orig/srcmod/inversion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/inversion_module.f 2011-08-16 14:42:52.000000000 +0200 -@@ -0,0 +1,828 @@ -+ module inversion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining inversion potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted - w. smith jun 2008 : solvation, free energy, excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prminv(:,:) -+ integer, allocatable :: listinv(:,:) -+ integer, allocatable :: numinv(:),keyinv(:),lstinv(:,:) -+ -+ save prminv,listinv,numinv,keyinv,lstinv -+ -+ contains -+ -+ subroutine alloc_inv_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prminv(mxtinv,mxpinv),stat=fail(1)) -+ allocate (numinv(mxtmls),stat=fail(2)) -+ allocate (keyinv(mxtinv),stat=fail(3)) -+ allocate (lstinv(mxtinv,4),stat=fail(4)) -+ allocate (listinv(mxinv,5),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1120) -+ enddo -+ -+ do i=1,mxtmls -+ numinv(i)=0 -+ enddo -+ -+ end subroutine alloc_inv_arrays -+ -+ subroutine define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining inversion angle potentials -+c note: includes calcite planar potential which is not strictly -+c an inversion potential and is different in implementation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,ninver,nsite,ntmp,inv,inv1,i -+ integer iatm1,iatm2,iatm3,iatm4,isite1,isite2,isite3,isite4 -+ integer ia,ja,idum -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numinv(itmols)=numinv(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of inversion terms', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,/,1x,'inversion potential details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'index',5x,'f-const',7x,'angle',/)") -+ endif -+ -+ inv1=numinv(itmols) -+ do inv=1,inv1 -+ -+c read inversion potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ iatm4=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ isite4=nsite-numsit(itmols)+iatm4 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3)*lfzsit(isite4).ne.0)then -+ -+ numinv(itmols)=numinv(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ ninver=ninver+1 -+ -+ if(ninver.gt.mxtinv)call error(idnode,73) -+ -+ if(keyword(1:4).eq.'harm')then -+ keyinv(ninver)=1 -+ elseif(keyword(1:4).eq.'hcos')then -+ keyinv(ninver)=2 -+ elseif(keyword(1:4).eq.'plan')then -+ keyinv(ninver)=3 -+ elseif(keyword(1:4).eq.'calc')then -+ keyinv(ninver)=4 -+ else -+ if(idnode.eq.0)write(nrite,*)record -+ call error(idnode,449) -+ endif -+ -+ lstinv(ninver,1)=iatm1 -+ lstinv(ninver,2)=iatm2 -+ lstinv(ninver,3)=iatm3 -+ lstinv(ninver,4)=iatm4 -+ prminv(ninver,1)=dblstr(record,lenrec,idum) -+ prminv(ninver,2)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstinv(ninver,ia),ia=1,4), -+ x (prminv(ninver,ja),ja=1,mxpinv) -+ -+c convert energies to internal units and angles to radians -+ -+ prminv(ninver,1)=prminv(ninver,1)*engunit -+ -+ if(keyinv(ninver).eq.2)then -+ -+ prminv(ninver,2)=cos(prminv(ninver,2)*(pi/180.d0)) -+ -+ elseif(keyinv(ninver).eq.4)then -+ -+ prminv(ninver,2)=prminv(ninver,2)*engunit -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_inversions -+ -+ subroutine invfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating inversion energy and force -+c terms in molecular dynamics. -+c -+c copyright - daresbury laboratory 1996 -+c author - w. smith may 1996 -+c modified - w.smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lcalcite -+ logical idrive,jdrive,kdrive,ldrive -+ integer idnode,imcon,mxnode,ntinv,fail1,fail2 -+ integer fail3,inv1,inv2,i,ii,ia,id,kk,ib,ic -+ real(8) strs(6),strs_loc(6) -+ real(8) xab,yab,zab,rab2,rrab,xac,yac,zac,rac2,rrac,xad,yad -+ real(8) zad,rad2,rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx -+ real(8) vby,vbz,rvb,wwb,ucx,ucy,ucz,ucn,vcx,vcy,vcz,rvc,wwc -+ real(8) udx,udy,udz,udn,vdx,vdy,vdz,vdn,rvd,wwd,cosb,cosc -+ real(8) cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd,rucd,rucb -+ real(8) rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc,fax,fay,faz -+ real(8) fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz,vbn,vcn,ruc,rud -+ real(8) uuu,uu2,uun,uux,uuy,uuz,enginv,virinv,omega,gamma -+ real(8) gamvir -+ -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdac(:),ydac(:),zdac(:) -+ real(8), allocatable :: xdad(:),ydad(:),zdad(:) -+ -+ data fail1,fail2,fail3/0,0,0/ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdac(msbad),ydac(msbad),zdac(msbad),stat=fail2) -+ allocate (xdad(msbad),ydad(msbad),zdad(msbad),stat=fail3) -+ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) -+ x call error(idnode,1130) -+ -+c check size of work arrays -+ -+ if((ntinv-mxnode+1)/mxnode.gt.msbad)call error(idnode,427) -+ -+c block indices -+ -+ inv1=(idnode*ntinv)/mxnode+1 -+ inv2=((idnode+1)*ntinv)/mxnode -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ enginv=0.d0 -+ virinv=0.d0 -+ inv_fre=0.d0 -+ inv_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(4)=.true. -+ inv_sol(:)=0.d0 -+ if(lexcite)inv_exc(:)=0.d0 -+ -+ endif -+ -+c calculate bond vectors -+ -+ ii=0 -+ do i=inv1,inv2 -+ -+ ii=ii+1 -+ -+c potential energy function type -+ -+ kk=listinv(ii,1) -+ -+c indices of bonded atoms -+ -+ ia=listinv(ii,2) -+ ib=listinv(ii,3) -+ ic=listinv(ii,4) -+ id=listinv(ii,5) -+ -+c define components of bond vectors -+ -+ xdab(ii)=xxx(ib)-xxx(ia) -+ ydab(ii)=yyy(ib)-yyy(ia) -+ zdab(ii)=zzz(ib)-zzz(ia) -+ -+ if(keyinv(kk).eq.4)then -+ -+ xdac(ii)=xxx(ic)-xxx(ib) -+ ydac(ii)=yyy(ic)-yyy(ib) -+ zdac(ii)=zzz(ic)-zzz(ib) -+ -+ xdad(ii)=xxx(id)-xxx(ib) -+ ydad(ii)=yyy(id)-yyy(ib) -+ zdad(ii)=zzz(id)-zzz(ib) -+ -+ else -+ -+ xdac(ii)=xxx(ic)-xxx(ia) -+ ydac(ii)=yyy(ic)-yyy(ia) -+ zdac(ii)=zzz(ic)-zzz(ia) -+ -+ xdad(ii)=xxx(id)-xxx(ia) -+ ydad(ii)=yyy(id)-yyy(ia) -+ zdad(ii)=zzz(id)-zzz(ia) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdac,ydac,zdac) -+ call images(imcon,0,1,ii,cell,xdad,ydad,zdad) -+ -+c loop over all specified inversions -+ -+ ii=0 -+ do i=inv1,inv2 -+ -+ ii=ii+1 -+ -+c select potential energy function type -+ -+ kk=listinv(ii,1) -+ lcalcite=(keyinv(kk).eq.4) -+ -+c define components of bond vectors -+ -+ xab=xdab(ii) -+ yab=ydab(ii) -+ zab=zdab(ii) -+ rab2=xab*xab+yab*yab+zab*zab -+ rrab=1.d0/sqrt(rab2) -+ -+ xac=xdac(ii) -+ yac=ydac(ii) -+ zac=zdac(ii) -+ rac2=xac*xac+yac*yac+zac*zac -+ rrac=1.d0/sqrt(rac2) -+ -+ xad=xdad(ii) -+ yad=ydad(ii) -+ zad=zdad(ii) -+ rad2=xad*xad+yad*yad+zad*zad -+ rrad=1.d0/sqrt(rad2) -+ -+ if(lcalcite)then -+ -+c calculate vector normal to plane -+ -+ uux=yac*zad-zac*yad -+ uuy=zac*xad-xac*zad -+ uuz=xac*yad-yac*xad -+ uun=1.d0/sqrt(uux**2+uuy**2+uuz**2) -+ uux=uun*uux -+ uuy=uun*uuy -+ uuz=uun*uuz -+ uuu=xab*uux+yab*uuy+zab*uuz -+ -+ else -+ -+c scalar products of bond vectors -+ -+ rbc=xab*xac+yab*yac+zab*zac -+ rcd=xac*xad+yac*yad+zac*zad -+ rdb=xad*xab+yad*yab+zad*zab -+ -+c calculate bond-angle-plane vectors -+ -+ ubx=xac*rrac+xad*rrad -+ uby=yac*rrac+yad*rrad -+ ubz=zac*rrac+zad*rrad -+ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) -+ ubx=ubn*ubx -+ uby=ubn*uby -+ ubz=ubn*ubz -+ rub=xab*ubx+yab*uby+zab*ubz -+ -+ vbx=xac*rrac-xad*rrad -+ vby=yac*rrac-yad*rrad -+ vbz=zac*rrac-zad*rrad -+ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) -+ vbx=vbn*vbx -+ vby=vbn*vby -+ vbz=vbn*vbz -+ rvb=xab*vbx+yab*vby+zab*vbz -+ wwb=sqrt(rub**2+rvb**2) -+ -+ ucx=xad*rrad+xab*rrab -+ ucy=yad*rrad+yab*rrab -+ ucz=zad*rrad+zab*rrab -+ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) -+ ucx=ucn*ucx -+ ucy=ucn*ucy -+ ucz=ucn*ucz -+ ruc=xac*ucx+yac*ucy+zac*ucz -+ -+ vcx=xad*rrad-xab*rrab -+ vcy=yad*rrad-yab*rrab -+ vcz=zad*rrad-zab*rrab -+ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) -+ vcx=vcn*vcx -+ vcy=vcn*vcy -+ vcz=vcn*vcz -+ rvc=xac*vcx+yac*vcy+zac*vcz -+ wwc=sqrt(ruc**2+rvc**2) -+ -+ udx=xab*rrab+xac*rrac -+ udy=yab*rrab+yac*rrac -+ udz=zab*rrab+zac*rrac -+ udn=1.d0/sqrt(udx**2+udy**2+udz**2) -+ udx=udn*udx -+ udy=udn*udy -+ udz=udn*udz -+ rud=xad*udx+yad*udy+zad*udz -+ -+ vdx=xab*rrab-xac*rrac -+ vdy=yab*rrab-yac*rrac -+ vdz=zab*rrab-zac*rrac -+ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) -+ vdx=vdn*vdx -+ vdy=vdn*vdy -+ vdz=vdn*vdz -+ rvd=xad*vdx+yad*vdy+zad*vdz -+ wwd=sqrt(rud**2+rvd**2) -+ -+c calculate inversion angle cosines -+ -+ cosb=wwb*rrab -+ cosc=wwc*rrac -+ cosd=wwd*rrad -+ -+ endif -+ -+c calculate potential energy and scalar force term -+ -+ if(keyinv(kk).eq.1)then -+ -+c key=1 for harmonic inversion potential -+ -+ thb=acos(cosb) -+ thc=acos(cosc) -+ thd=acos(cosd) -+ omega=0.5d0*prminv(kk,1)*((thb-prminv(kk,2))**2+ -+ x (thc-prminv(kk,2))**2+(thd-prminv(kk,2))**2)/3.d0 -+ gamvir=0.d0 -+ -+ gamb=0.d0 -+ if(abs(thb).gt.1.d-12) -+ x gamb=prminv(kk,1)*(thb-prminv(kk,2))/(3.d0*sin(thb)) -+ gamc=0.d0 -+ if(abs(thc).gt.1.d-12) -+ x gamc=prminv(kk,1)*(thc-prminv(kk,2))/(3.d0*sin(thc)) -+ gamd=0.d0 -+ if(abs(thd).gt.1.d-12) -+ x gamd=prminv(kk,1)*(thd-prminv(kk,2))/(3.d0*sin(thd)) -+ -+ else if(keyinv(kk).eq.2)then -+ -+c key=2 for harmonic cosine inversion potential -+ -+ omega=0.5d0*prminv(kk,1)*((cosb-prminv(kk,2))**2+ -+ x (cosc-prminv(kk,2))**2+(cosb-prminv(kk,2))**2)/3.d0 -+ gamvir=0.d0 -+ -+ gamb=-prminv(kk,1)*(cosb-prminv(kk,2))/3.d0 -+ gamc=-prminv(kk,1)*(cosc-prminv(kk,2))/3.d0 -+ gamd=-prminv(kk,1)*(cosd-prminv(kk,2))/3.d0 -+ -+ else if(keyinv(kk).eq.3)then -+ -+c key=3 for planar inversion potentials -+ -+ omega=prminv(kk,1)*((1.d0-cosb)+(1.d0-cosc)+(1.d0-cosd))/3.d0 -+ gamvir=0.d0 -+ -+ gamb=prminv(kk,1)/3.d0 -+ gamc=prminv(kk,1)/3.d0 -+ gamd=prminv(kk,1)/3.d0 -+ -+ else if(keyinv(kk).eq.4)then -+ -+c key=4 for planar calcite potential -+ -+ uu2=uuu*uuu -+ omega=uu2*(prminv(kk,1)+prminv(kk,2)*uu2) -+ gamvir=uu2*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) -+ gamma=-uuu*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ gamvir=0.d0 -+ gamb=0.d0 -+ gamc=0.d0 -+ gamd=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listinv(ii,2) -+ ib=listinv(ii,3) -+ ic=listinv(ii,4) -+ id=listinv(ii,5) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ ldrive=driven(ltype(id)) -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)then -+ inv_exc(atmolt(ia))=inv_exc(atmolt(ia))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ inv_fre=inv_fre-omega -+ omega=lambda1*omega -+ gamb=lambda1*gamb -+ gamc=lambda1*gamc -+ gamd=lambda1*gamd -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ inv_fre=inv_fre+omega -+ omega=lambda2*omega -+ gamb=lambda2*gamb -+ gamc=lambda2*gamc -+ gamd=lambda2*gamd -+ -+ endif -+ -+ endif -+ -+c calculate bond and u,v scalar products -+ -+ if(.not.lcalcite)then -+ -+ rubc=xab*ucx+yab*ucy+zab*ucz -+ rubd=xab*udx+yab*udy+zab*udz -+ rucd=xac*udx+yac*udy+zac*udz -+ rucb=xac*ubx+yac*uby+zac*ubz -+ rudb=xad*ubx+yad*uby+zad*ubz -+ rudc=xad*ucx+yad*ucy+zad*ucz -+ -+ rvbc=xab*vcx+yab*vcy+zab*vcz -+ rvbd=xab*vdx+yab*vdy+zab*vdz -+ rvcd=xac*vdx+yac*vdy+zac*vdz -+ rvcb=xac*vbx+yac*vby+zac*vbz -+ rvdb=xad*vbx+yad*vby+zad*vbz -+ rvdc=xad*vcx+yad*vcy+zad*vcz -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ enginv=enginv+omega -+ virinv=virinv+gamvir -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ inv_sol(atmolt(ia))=inv_sol(atmolt(ia))+omega -+ endif -+ -+c calculate atomic forces -+ -+ if(lcalcite)then -+ -+ fax=-gamma*uux -+ fay=-gamma*uuy -+ faz=-gamma*uuz -+ -+ fcx=gamma*uun*((yad*zab-zad*yab)-uuu*(yad*uuz-zad*uuy)) -+ fcy=gamma*uun*((zad*xab-xad*zab)-uuu*(zad*uux-xad*uuz)) -+ fcz=gamma*uun*((xad*yab-yad*xab)-uuu*(xad*uuy-yad*uux)) -+ -+ fdx=gamma*uun*((yab*zac-zab*yac)-uuu*(zac*uuy-yac*uuz)) -+ fdy=gamma*uun*((zab*xac-xab*zac)-uuu*(xac*uuz-zac*uux)) -+ fdz=gamma*uun*((xab*yac-yab*xac)-uuu*(yac*uux-xac*uuy)) -+ -+ fbx=-(fax+fcx+fdx) -+ fby=-(fay+fcy+fdy) -+ fbz=-(faz+fcz+fdz) -+ -+c stress tensor calculation for calcite terms -+ -+ strs(1)=strs(1)+uuu*gamma*uux*uux -+ strs(2)=strs(2)+uuu*gamma*uux*uuy -+ strs(3)=strs(3)+uuu*gamma*uux*uuz -+ strs(4)=strs(4)+uuu*gamma*uuy*uuy -+ strs(5)=strs(5)+uuu*gamma*uuy*uuz -+ strs(6)=strs(6)+uuu*gamma*uuz*uuz -+ -+ else -+ -+ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) -+ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) -+ x -rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) -+ x +rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) -+ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) -+ x -rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) -+ x +rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) -+ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) -+ x -rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) -+ x +rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) -+ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) -+ x -rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) -+ x +rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) -+ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) -+ x -rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) -+ x +rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) -+ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) -+ x -rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) -+ x +rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) -+ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) -+ x -rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) -+ x +rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) -+ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) -+ x -rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) -+ x +rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) -+ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) -+ x -rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) -+ x +rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fax=-(fbx+fcx+fdx) -+ fay=-(fby+fcy+fdy) -+ faz=-(fbz+fcz+fdz) -+ -+c stress tensor calculation for inversion terms -+ -+ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx -+ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx -+ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx -+ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy -+ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz -+ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)+fbx -+ fyy(ib)=fyy(ib)+fby -+ fzz(ib)=fzz(ib)+fbz -+ -+ fxx(ic)=fxx(ic)+fcx -+ fyy(ic)=fyy(ic)+fcy -+ fzz(ic)=fzz(ic)+fcz -+ -+ fxx(id)=fxx(id)+fdx -+ fyy(id)=fyy(id)+fdy -+ fzz(id)=fzz(id)+fdz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc+gamvir -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)+fbx -+ fyy_loc(ib)=fyy_loc(ib)+fby -+ fzz_loc(ib)=fzz_loc(ib)+fbz -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx -+ fyy_loc(ic)=fyy_loc(ic)+fcy -+ fzz_loc(ic)=fzz_loc(ic)+fcz -+ -+ fxx_loc(id)=fxx_loc(id)+fdx -+ fyy_loc(id)=fyy_loc(id)+fdy -+ fzz_loc(id)=fzz_loc(id)+fdz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx -+ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx -+ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx -+ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy -+ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz -+ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,449) -+ -+c sum contributions over all nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=enginv -+ buffer(2)=virinv -+ buffer(3)=inv_fre -+ buffer(4)=inv_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ enginv=buffer(1) -+ virinv=buffer(2) -+ inv_fre=buffer(3) -+ inv_vir=buffer(4) -+ -+ if(lsolva)then -+ -+ call gdsum(inv_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(inv_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdac,ydac,zdac,stat=fail2) -+ deallocate (xdad,ydad,zdad,stat=fail3) -+ -+ return -+ end subroutine invfrc -+ -+ end module inversion_module -diff -urN dl_class_1.9.orig/srcmod/lf_motion_module.f dl_class_1.9/srcmod/lf_motion_module.f ---- dl_class_1.9.orig/srcmod/lf_motion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_motion_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,2994 @@ -+ module lf_motion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for verlet leap frog integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use property_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration. -+c Must be used in conjunction with integration algorithms -+c -+c assume bond vectors dxx,dyy,dzz are input -+c dxx =xxx(i) - xxx(j) etc -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith august 1992. -+c amended - t. forester march 1994. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k -+ real(8) tolnce,tstep,vircon,stresh,dxx,dyy,dzz,strs1,strs2 -+ real(8) strs3,strs5,strs6,strs9,tstep2,esig,esig1 -+ real(8) dis,amti,amtj,omega2,gamma,gammi,gammj,dli,dlj -+ real(8) dxt,dyt,dzt,txx,tyy,tzz,xxt,yyt,zzt -+ -+ dimension stresh(9) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ -+c test size of work arrays -+ -+ safe=.true. -+ if(mxxdf.lt.nscons)safe=.false. -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,412) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c accumulators for stress tensor -+ -+ vircon=0.d0 -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dis=prmcon(listcon(k,1)) -+ esig1=abs(dxt(k)**2+dyt(k)**2+dzt(k)**2-dis**2)/dis -+ esig=max(esig,esig1) -+ -+ enddo -+ -+ esig=esig*0.5d0 -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c bypass calculations if all tolerances satisfied -+ -+ if(.not.safe)then -+ -+c initialise increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c set constraint parameters -+ -+ dis=prmcon(listcon(k,1)) -+ omega2=dis*dis -+ amti= tstep2/weight(i) -+ amtj=-tstep2/weight(j) -+ -+ if(lstfrz(i).ne.0) amti=0.d0 -+ if(lstfrz(j).ne.0) amtj=0.d0 -+ -+c constraint force parameter -+ -+ gamma=(omega2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/ -+ x (-2.d0*(amti-amtj)* -+ x (dxx(k)*dxt(k)+dyy(k)*dyt(k)+dzz(k)*dzt(k))) -+ -+c accumulate bond virial -+ -+ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1-gamma*dxx(k)*dxx(k) -+ strs2=strs2-gamma*dxx(k)*dyy(k) -+ strs3=strs3-gamma*dxx(k)*dzz(k) -+ strs5=strs5-gamma*dyy(k)*dyy(k) -+ strs6=strs6-gamma*dyy(k)*dzz(k) -+ strs9=strs9-gamma*dzz(k)*dzz(k) -+ -+c improve approximate atomic positions -+ -+ gammi=-gamma*amti -+ xxt(i)=xxt(i)+dxx(k)*gammi -+ yyt(i)=yyt(i)+dyy(k)*gammi -+ zzt(i)=zzt(i)+dzz(k)*gammi -+ -+ gammj=-gamma*amtj -+ xxt(j)=xxt(j)+dxx(k)*gammj -+ yyt(j)=yyt(j)+dyy(k)*gammj -+ zzt(j)=zzt(j)+dzz(k)*gammj -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ xxx(i)=xxx(i)+xxt(i)*dli -+ yyy(i)=yyy(i)+yyt(i)*dli -+ zzz(i)=zzz(i)+zzt(i)*dli -+ xxx(j)=xxx(j)+xxt(j)*dlj -+ yyy(j)=yyy(j)+yyt(j)*dlj -+ zzz(j)=zzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit for non-convergence -+ -+ if(.not.safe)return -+ -+c complete stress tensor -+ -+ stresh(1)=strs1 -+ stresh(2)=strs2 -+ stresh(3)=strs3 -+ stresh(4)=strs2 -+ stresh(5)=strs5 -+ stresh(6)=strs6 -+ stresh(7)=strs3 -+ stresh(8)=strs6 -+ stresh(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdshake_1 -+ -+ subroutine nve_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE -+c -+c parallel replicated data version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c amended - t.forester sept 1994 -+c amended - t.forester dec 1994 : block data -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 -+ integer iatm1,i,j,k -+ real(8) engke,tolnce,tstep,vircon,strkin,rstep -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(7) -+ -+c allocate working arrays -+ -+ do i=1,7 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) -+ do i=1,7 -+ if(fail(i).ne.0)call error(idnode,1380) -+ enddo -+ -+ safe=.false. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c move atoms by leapfrog algorithm -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+c calculate velocity correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep -+ -+ enddo -+ -+ endif -+ -+c calculate full timestep velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=0.5d0*(vxx(i)+uxx(i)) -+ vyy(i)=0.5d0*(vyy(i)+uyy(i)) -+ vzz(i)=0.5d0*(vzz(i)+uzz(i)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nve_1 -+ -+ subroutine nvt_e1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Evans -+c thermostat. -+c Comp. Phys. reports 1, 299, (1984) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond CONSTRAINTS. -+c -+c copyright - daresbury laboratory -+c author - t forester july 1993 -+c amended - w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 -+ integer iatm1,i,j,k,iter,mxiter -+ real(8) engke,tolnce,tstep,vircon,strkin -+ real(8) rstep,chit,viracc,strcon,vdotf -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),fail(7) -+ -+c allocate working arrays -+ -+ do i=1,7 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) -+ do i=1,7 -+ if(fail(i).ne.0)call error(idnode,1390) -+ enddo -+ -+ safe=.false. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial positions and velocities -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c begin temperature control iteration -+ -+ mxiter=3 -+ if(ntcons.eq.0)mxiter=2 -+ chit=0.d0 -+ -+ do iter=1,mxiter -+ -+c move atoms by leapfrog algorithm -+ -+ j=0 -+ -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxo(j)+tstep*(rmass(i)*fxx(i)-chit*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(rmass(i)*fyy(i)-chit*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(rmass(i)*fzz(i)-chit*vzz(i)) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c merge configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ chit=vdotf/engke -+ engke=0.5d0*engke -+ -+c end of thermal constraint iteration -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_e1 -+ -+ subroutine nvt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,taut,sigma,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester may 1993 -+c amended : t.forester sept 1994 -+c amended : t.forester dec 1994 : block data -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail -+ integer iatm0,iatm1,i,j,k,maxit,iter -+ real(8) engke,taut,sigma,tolnce,tstep,vircon,strkin,viracc -+ real(8) rstep,rtsq,chit0,strcon -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(8),strcon(9) -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1400) -+ enddo -+ -+ safe=.false. -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate kinetic energy at full timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=3 -+ if(ntcons.eq.0) maxit=maxit-1 -+ do iter=1,maxit -+ -+c temperature scaling coefficient - taut is the decay constant -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c unconstrained new positions with thermostat -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+c store uncorrected positions -+ -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c calculate kinetic energy -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate velocity at the full step -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_b1 -+ -+ subroutine nvt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c copyright - daresbury laboratory -+c author - t. forester may 1993 -+c amended - w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,i,j,k -+ integer iatm0,iatm1,maxit,iter -+ real(8) chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon -+ real(8) strkin,rstep,rtsq,qmass,chitp,chit0,viracc -+ real(8) chitnew,strcon -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(8),strcon(9) -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1410) -+ enddo -+ -+ safe=.false. -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate velocities at full time step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy at full time step -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c propagate chit -+ -+ chitp=2.d0*(engke-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=4 -+ if(ntcons.eq.0) maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+c store uncorrected positions -+ -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chit -+ -+ chitp=2.d0*(engke-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update thermostat -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ consv=conint+0.5d0*qmass*chit0**2 -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_h1 -+ -+ subroutine npt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and isotropic pressure control -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester dec 1993 -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter -+ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep -+ real(8) virtot,vircon,volm,strkin,beta,volm0,cell0 -+ real(8) elrc0,virlrc0,rstep,rtsq,psyst,chip0,scale -+ real(8) chit0,viracc,strcon -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),cell0(9),fail(8),strcon(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1420) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume and long range corrections -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1430) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial cell vectors -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate velocity at full timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy at current timestep -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c pressure control variable - taup is pressure relaxation time -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c temperature scaling coefficient - taut is temperature relaxation time -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0)maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+scale*xxo(j) -+ yyy(i)=tstep*uyy(i)+scale*yyo(j) -+ zzz(i)=tstep*uzz(i)+scale*zzo(j) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell tensor -+ -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chip and chit -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update volume -+ -+ volm=volm*chip0 -+ -+c scale cell vectors - isotropic -+ -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for use with tethers) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=scale -+ eta(5)=scale -+ eta(9)=scale -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine npt_b1 -+ -+ subroutine npt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat+piston. -+c -+c reference: Melchionna, Ciccotti and Holian, -+c Mol Phys 1993, 78, p533 -+c -+c parallel replicated data version -+c -+c for systems using bond constraints (using atomic pressure) -+c -+c copyright daresbury laboratory 1995 -+c author - s. melchionna april 1995 -+c and - t. forester april 1995 -+c amended - w. smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer i,j,k,iatm0,iatm1,fail,maxit,iter -+ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press -+ real(8) taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm -+ real(8) strcon,volm0,elrc0,virlrc0,rstep,rtsq,qmass -+ real(8) chipnew,chitp,chitnew,chit0,volnew,scale,viracc,vold -+ real(8) cons1,cons2,cons3,strkin,cell0 -+ real(8) pmass,totmas,chipp,chip0,com,vom -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strcon(9),fail(8),strkin(9),com(3),vom(3),cell0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1440) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1450) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate velocity at the full step -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c propagate chip -+ -+ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- -+ x chit*chip -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c propagate chit -+ -+ chitp=(2.d0*(engke-sigma)+pmass*chip**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0) maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell tensor -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chip and chit -+ -+ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+ chitp=(2.d0*(engke-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=chipnew -+ eta(5)=chipnew -+ eta(9)=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ cons3=0.5d0*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine npt_h1 -+ -+ subroutine nst_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and anisotropic pressure control -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester december 1993 -+c amended - w. smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons,mode -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter -+ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep -+ real(8) vircon,volm,beta,volm0,elrc0,virlrc0,rstep,rtsq,chit0 -+ real(8) viracc,strkin,strcon,cell0,stres0,uni -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),cell0(9),fail(8),stres0(9),uni(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data beta/7.3728d-3/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1460) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1470) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store original cell vectors and stress tensor -+ -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c current estimate of stres tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i) -+ enddo -+ -+c initial estimate of eta matrix and chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0)maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+ -+ x eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) -+ yyy(i)=tstep*uyy(i)+ -+ x eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) -+ zzz(i)=tstep*uzz(i)+ -+ x eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell parameters -+ -+ call mat_mul(eta,cell0,cell) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i) -+ enddo -+ -+c improved calculation of eta matrix and chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c end of thermostat and barostat iterations -+ -+ enddo -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust cell vectors - anisotropic -+ -+ call mat_mul(eta,cell0,cell) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nst_b1 -+ -+ subroutine nst_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat+piston. -+c -+c Parrinello - Rahman type : changing cell shape. -+c -+c reference: Melchionna, Ciccotti and Holian, -+c Mol Phys 1993, 78, p533 -+c -+c parallel replicated data version -+c -+c for systems using bond constraints (using atomic pressure) -+c -+c copyright daresbury laboratory 1995 -+c author - t. forester june 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter,mode -+ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press -+ real(8) taup,taut,sigma,temp,tolnce,tstep,vircon,volm -+ real(8) strcon,strkin,etanew,eta0,cell0,volm0,elrc0,virlrc0 -+ real(8) rstep,rtsq,pmass,qmass,totmas,com,vom,uni,fac -+ real(8) chitp,chitnew,chit0,xxa,yya,zza,etadot -+ real(8) viracc,cons1,cons2,cons3,vold,stres0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),fail(8),com(3),vom(3) -+ dimension etanew(9),eta0(9),cell0(9),stres0(9),uni(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data newjob/.true./,uni/1.d0,3*0.d0,1.d0,3*0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1480) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1490) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store original cell vectors and stress tensor -+ -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate position at current time step -+ -+ xxx(i)=xxo(j)+tstep*(vxo(j)+tstep*rmass(i)*fxx(i)) -+ yyy(i)=yyo(j)+tstep*(vyo(j)+tstep*rmass(i)*fyy(i)) -+ zzz(i)=zzo(j)+tstep*(vzo(j)+tstep*rmass(i)*fzz(i)) -+ -+c estimate velocity at the full step -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c initial estimate of stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i) -+ enddo -+ -+c propagation of eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0) maxit=maxit-1 -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(eta0(1)+chit0)*vxx(i)- -+ x eta0(4)*vyy(i)-eta0(7)*vzz(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(eta0(5)+chit0)*vyy(i)- -+ x eta0(2)*vxx(i)-eta0(8)*vzz(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(eta0(9)+chit0)*vzz(i)- -+ x eta0(3)*vxx(i)-eta0(6)*vyy(i)) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) -+ yya=(yyy(i)+yyo(j))*0.5d0-com(2) -+ zza=(zzz(i)+zzo(j))*0.5d0-com(3) -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x etanew(1)*xxa+etanew(4)*yya+etanew(7)*zza) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x etanew(2)*xxa+etanew(5)*yya+etanew(8)*zza) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x etanew(3)*xxa+etanew(6)*yya+etanew(9)*zza) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell parameters -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,etanew) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i) -+ enddo -+ -+c improved prediction of eta -+ -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c improved prediction of chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust cell vectors - anisotropic -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,eta) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=0.5d0*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nst_h1 -+ -+ end module lf_motion_module -diff -urN dl_class_1.9.orig/srcmod/lf_rotation1_module.f dl_class_1.9/srcmod/lf_rotation1_module.f ---- dl_class_1.9.orig/srcmod/lf_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_rotation1_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,5315 @@ -+ module lf_rotation1_module -+ -+c*********************************************************************** -+c -+c dl_poly module 1 for verlet leap frog rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use lf_motion_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to update the quaternion arrays as part of -+c the leapfrog algorithm -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c based on - t.forester oct. 1993 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safeq -+ integer igrp1,igrp2,jg,itq,ig -+ real(8) qn0,qn1,qn2,qn3,qn0a,qn1a,qn2a,qn3a,qn0b,qn1b,qn2b,qn3b -+ real(8) rnorm,tstep,quattol,eps -+ real(8) opx(msgrp),opy(msgrp),opz(msgrp) -+ real(8) oqx(msgrp),oqy(msgrp),oqz(msgrp) -+ -+ jg=0 -+ safeq=.true. -+ -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c first iteration of new quaternions (lab fixed) -+ -+ qn0=q0(ig)+(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn1=q1(ig)+( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn2=q2(ig)+( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn3=q3(ig)+(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) -+ x *tstep*pt5 -+ -+ qn0b=0.d0 -+ qn1b=0.d0 -+ qn2b=0.d0 -+ qn3b=0.d0 -+ -+ itq=0 -+ eps=1.0d9 -+ do while((itq.lt.mxquat).and.(eps.gt.quattol)) -+ -+ itq=itq+1 -+ -+ qn0a=pt5*(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) -+ x +pt5*(-qn1*oqx(jg)-qn2*oqy(jg)-qn3*oqz(jg)) -+ qn1a=pt5*( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) -+ x + pt5*( qn0*oqx(jg)-qn3*oqy(jg)+qn2*oqz(jg)) -+ qn2a=pt5*( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) -+ x + pt5*( qn3*oqx(jg)+qn0*oqy(jg)-qn1*oqz(jg)) -+ qn3a=pt5*(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) -+ x + pt5*(-qn2*oqx(jg)+qn1*oqy(jg)+qn0*oqz(jg)) -+ -+ qn0=q0(ig)+pt5*qn0a*tstep -+ qn1=q1(ig)+pt5*qn1a*tstep -+ qn2=q2(ig)+pt5*qn2a*tstep -+ qn3=q3(ig)+pt5*qn3a*tstep -+ -+ rnorm=1.d0/sqrt(qn0**2+qn1**2+qn2**2+qn3**2) -+ qn0=qn0*rnorm -+ qn1=qn1*rnorm -+ qn2=qn2*rnorm -+ qn3=qn3*rnorm -+ -+c convergence test -+ -+ eps=sqrt(((qn0a-qn0b)**2+(qn1a-qn1b)**2+(qn2a-qn2b)**2 -+ x +(qn3a-qn3b)**2)*tstep**2) -+ -+ qn0b=qn0a -+ qn1b=qn1a -+ qn2b=qn2a -+ qn3b=qn3a -+ -+ enddo -+ -+ if(itq.ge.mxquat) safeq=.false. -+ -+c store new quaternions -+ -+ q0(ig)=qn0 -+ q1(ig)=qn1 -+ q2(ig)=qn2 -+ q3(ig)=qn3 -+ -+ enddo -+ -+ return -+ end subroutine update_quaternions -+ -+ subroutine nveq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre -+ integer jg,ig,k,id,jr -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc -+ real(8) trx,try,trz,delx,dely,delz,engfke -+ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strgrp(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1500) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational rigid body motion -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) -+ -+c estimate velocity at full time step -+ -+ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c calculate rigid body kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore rigid body half timestep velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c store current angular velocity -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+delx*pt5 -+ opy(jg)=omy(ig)+dely*pt5 -+ opz(jg)=omz(ig)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omx(ig)+delx -+ uyy(ig)=omy(ig)+dely -+ uzz(ig)=omz(ig)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omx(ig)+delx*1.5d0 -+ oqy(jg)=omy(ig)+dely*1.5d0 -+ oqz(jg)=omz(ig)+delz*1.5d0 -+ -+c angular velocity at timestep n -+ -+ omx(ig)=omx(ig)+pt5*delx -+ omy(ig)=omy(ig)+pt5*dely -+ omz(ig)=omz(ig)+pt5*delz -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies - relative to c.o.m -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) -+ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) -+ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) -+ -+ return -+ end subroutine nveq_1 -+ -+ subroutine nvtq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,safeq,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer i,fail,igrp,igrp1,igrp2,ifre,ifre1,ifre2,jg,ig -+ integer j,k,jr,id,mxiter,iter,idum -+ real(8) engke,engrot,quattol,sigma,taut,tolnce,tstep,vircom -+ real(8) vircon,strkin,strgrp,rot,rstep,rtsq -+ real(8) engtrn,trx,try,trz,chit0,rgmas,engfke -+ real(8) vaa,vbb,vcc,engtot,viracc,strcon -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2,newjob -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1510) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engtot=engfke+engrot+engtrn -+ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=2 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+xxo(j) -+ yyy(i)=tstep*vyy(i)+yyo(j) -+ zzz(i)=tstep*uzz(i)+zzo(j) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c total kinetic energy -+ -+ engtot=engke+engrot -+ -+c improved prediction of chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_b1 -+ -+ subroutine nvtq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat. -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,safeq,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter -+ real(8) chit,consv,conint,engke,engrot,quattol,sigma,taut -+ real(8) tolnce,tstep,vircom,vircon,strkin,strgrp,strcon,rot -+ real(8) rstep,rtsq,qmass,engtrn,cons1,engtot,vaa,vbb,vcc -+ real(8) chit0,chitnew,chitp,viracc,rgmas,trx,try,trz,delx -+ real(8) dely,delz,engfke -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2,qmass,newjob -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1520) -+ enddo -+ -+ if(newjob)then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c propagate chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=4 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+ if(iter.eq.mxiter)then -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-chit0*gvxx(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-chit0*gvyy(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-chit0*gvzz(ig)) -+ -+c update positions -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)then -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+ endif -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ safeq=.true. -+ engrot=0.d0 -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c improved prediction of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update thermostat variable -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ cons1=0.5d0*qmass*chit0**2 -+ consv=conint+cons1 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_h1 -+ -+ subroutine nptq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, -+ x vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and barostat. -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,i,fail,igrp,igrp1,igrp2,idum,ifre,ifre1 -+ integer ifre2,j,jg,ig,jr,k,id,iter,mxiter -+ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut -+ real(8) tolnce,tstep,virtot,vircom,vircon,volm,rot,engfke,uni -+ real(8) cell0,beta,volm0,elrc0,virlrc0,rstep,rtsq -+ real(8) engtrn,trx,try,trz,chip0,scale,engtot,chit0,viracc,czero -+ real(8) rgmas,vaa,vbb,vcc,strkin,strcon,strgrp,psyst -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension fail(nnn),rot(9),cell0(9),czero(9),uni(9) -+ dimension strcon(9),strgrp(9),strkin(9) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0,igrp1,igrp2 -+ save ifre1,ifre2 -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1530) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1540) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c constraint stress tensor accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c current cell vectors -+ -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c pressure control variable - taup is the relaxation time -+ -+ engke=engfke+engtrn -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engtot=engke+engrot -+ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+scale*xxo(j) -+ yyy(i)=tstep*uyy(i)+scale*yyo(j) -+ zzz(i)=tstep*uzz(i)+scale*zzo(j) -+ -+ enddo -+ -+c estimate new cell tensor -+ -+ do i=1,9 -+ cell(i)=scale*czero(i) -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions : -+ -+ gcmx(ig)=scale*gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=scale*gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=scale*gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c total kinetic energy -+ -+ engtot=engke+engrot -+ -+c improved pressure control variable -+ -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c improved temperature scaling coefficient -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c scale cell vectors -+ -+ scale=((chip0*volm)/volm0)**(1.d0/3.d0) -+ -+ do i=1,9 -+ cell(i)=scale*cell0(i) -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nptq_b1 -+ -+ subroutine nptq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,virtot,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat and barostat (Melchionna et al variant) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter,idum -+ real(8) chip,chit,consv,conint,elrc,engke,engrot,virlrc,press -+ real(8) quattol,sigma,taup,taut,temp,tolnce,tstep,virtot,vircom -+ real(8) vircon,volm,cell0,rot,volm0,elrc0,rtsq,uni -+ real(8) virlrc0,strkin,rstep,qmass,pmass,strgrp,strcon -+ real(8) trx,try,trz,chipp,chipnew,chip0,engtot,chitp -+ real(8) chitnew,chit0,volnew,scale,viracc,rgmas -+ real(8) vaa,vbb,vcc,vold,cons1,cons2,cons3,delx,dely,delz -+ real(8) engtrn,totmas,com,vom,engfke -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension fail(nnn),rot(9),cell0(9),uni(9) -+ dimension strkin(9),strcon(9),strgrp(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1550) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1560) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c temporary stress tensor accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate velocity at full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c propagate chip -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircon-vircom-3.d0*press*volm)/pmass- -+ x chit*chip -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c propagate chit -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) -+ -+ enddo -+ -+c estimate new cell parameters -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)then -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-(chit0+chip0)* -+ x gvxx(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-(chit0+chip0)* -+ x gvyy(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-(chit0+chip0)* -+ x gvzz(ig)) -+ -+c advance positions using leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ -+ x chipnew*((gcmx(ig)+gcxo(jg))*0.5d0-com(1))) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ -+ x chipnew*((gcmy(ig)+gcyo(jg))*0.5d0-com(2))) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ -+ x chipnew*((gcmz(ig)+gczo(jg))*0.5d0-com(3))) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c improved prediction of chip -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c improved prediction of chit -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=1,9 -+ eta(i)=chipnew*uni(i) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ cons3=0.5d0*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nptq_h1 -+ -+ subroutine nstq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and barostat. (cell may change shape). -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,mode -+ integer ifre2,j,k,ig,jg,jr,id,iter,mxiter -+ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut -+ real(8) tolnce,tstep,vircom,vircon,volm,beta,uni,cell0 -+ real(8) volm0,elrc0,virlrc0,rot,rstep,rtsq,engfke -+ real(8) engtrn,trx,try,trz,engtot,chit0,rgmas -+ real(8) vaa,vbb,vcc,viracc,strkin,strcon,strgrp,stres0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strcon(9),strgrp(9),stres0(9),rot(9) -+ dimension fail(nnn),uni(9),cell0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./, beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxxdf),yyo(mxxdf),zzo(mxxdf),stat=fail(9)) -+ allocate (xx1(mxxdf),yy1(mxxdf),zz1(mxxdf),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1570) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1580) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe= (igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c temporary stress tensor accumulators and new cell -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+c construct current bond vectors - required by shake -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from coms -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c estimate kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c stress tensor of free atoms -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c estimate translational kinetic energy of rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c forces on centre of mass -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translational kinetic energy of rigid body -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c stress tensor of rigid body -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c calculate rotational kinetic energy of rigid bodies -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c find eta - taup is the relaxation time -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) -+ yyy(i)=tstep*uyy(i)+eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) -+ zzz(i)=tstep*uzz(i)+eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) -+ -+ enddo -+ -+c estimate new cell tensor -+ -+ call mat_mul(eta,cell0,cell) -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate current stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions : -+ -+ gcmx(ig)=tstep*uxx(ig)+eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+ -+ x eta(7)*gczo(jg) -+ gcmy(ig)=tstep*uyy(ig)+eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+ -+ x eta(8)*gczo(jg) -+ gcmz(ig)=tstep*uzz(ig)+eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+ -+ x eta(9)*gczo(jg) -+ -+c full step com velocity -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c complete stress tensor - add all contributions -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+c improved prediction of eta and chit -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c update cell vectors -+ -+ call mat_mul(eta,cell0,cell) -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nstq_b1 -+ -+ subroutine nstq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, -+ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, -+ x vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover like -+c thermostat and barostat. (cell may change shape). -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter,idum,mode -+ real(8) chit,conint,consv,elrc,engke,engrot,virlrc,press,quattol -+ real(8) sigma,taup,taut,temp,tolnce,tstep,vircom,vircon,volm -+ real(8) strkin,strcon,strgrp,eta0,etanew,rot,cell0,volm0,stres0 -+ real(8) elrc0,virlrc0,rstep,rtsq,qmass,pmass,totmas -+ real(8) engtrn,trx,try,trz,engtot,engfke,fac,etadot -+ real(8) chitp,chitnew,chit0,xxa,yya,zza,viracc,rgmas,uni -+ real(8) delx,dely,delz,vold,cons1,cons2,cons3 -+ real(8) vaa,vbb,vcc,chip,com,vom -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension eta0(9),etanew(9),rot(9),cell0(9),fail(nnn),uni(9) -+ dimension strkin(9),strcon(9),strgrp(9),stres0(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass,totmas -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1590) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1600) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c calculate total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise stress tensor accumulators -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate velocity at full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c estimate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c estimate rigid body translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep/gmass(id)*fmx(jg) -+ gvyy(ig)=gvyo(jg)+pt5*tstep/gmass(id)*fmy(jg) -+ gvzz(ig)=gvzo(jg)+pt5*tstep/gmass(id)*fmz(jg) -+ -+ enddo -+ -+c rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c rigid body stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rgid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velcoity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c calculate rotational kinetic energy of rigid bodies -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c propagate eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)- -+ x (chit0+eta0(1))*vxx(i)-eta0(4)*vyy(i)-eta0(7)*vzz(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)- -+ x eta0(2)*vxx(i)-(eta0(5)+chit0)*vyy(i)-eta0(8)*vzz(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)- -+ x eta0(3)*vxx(i)-eta0(6)*vyy(i)-(eta0(9)+chit0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) -+ yya=(yyy(i)+yyo(j))*0.5d0-com(2) -+ zza=(zzz(i)+zzo(j))*0.5d0-com(3) -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+ enddo -+ -+c estimate new cell parameters -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,etanew) -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas- -+ x (chit0+eta0(1))*gvxx(ig)-eta0(4)*gvyy(ig)-eta0(7)*gvzz(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas- -+ x eta0(2)*gvxx(ig)-(eta0(5)+chit0)*gvyy(ig)-eta0(8)*gvzz(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas- -+ x eta0(3)*gvxx(ig)-eta0(6)*gvyy(ig)-(eta0(9)+chit0)*gvzz(ig)) -+ -+c advance positions using leapfrog -+ -+ xxa=(gcmx(ig)+gcxo(jg))*0.5d0-com(1) -+ yya=(gcmy(ig)+gcyo(jg))*0.5d0-com(2) -+ zza=(gcmz(ig)+gczo(jg))*0.5d0-com(3) -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c full step com velocity -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+ endif -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c complete stress tensor - add all contributions -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+c improved prediction of eta and chit -+ -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=0.5d0*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nstq_h1 -+ -+ end module lf_rotation1_module -diff -urN dl_class_1.9.orig/srcmod/lf_rotation2_module.f dl_class_1.9/srcmod/lf_rotation2_module.f ---- dl_class_1.9.orig/srcmod/lf_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_rotation2_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,5007 @@ -+ module lf_rotation2_module -+ -+c*********************************************************************** -+c -+c dl_poly module 2 for verlet leap frog rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use lf_rotation1_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine nveq_2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engfke,engtrn -+ real(8) delx,dely,delz,trx,try,trz,vaa,vbb,vcc,viracc -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save newjob,igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1620) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c accumulators for constraint and virial stress tensor -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c start of shake cycle -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=1 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(j)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(j)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep/gmass(id)*fmx(jg) -+ uyy(jg)=gvyo(jg)+tstep/gmass(id)*fmy(jg) -+ uzz(jg)=gvzo(jg)+tstep/gmass(id)*fmz(jg) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)+tstep*uzz(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(uxx(jg)+gvxo(jg)) -+ gvyy(ig)=pt5*(uyy(jg)+gvyo(jg)) -+ gvzz(ig)=pt5*(uzz(jg)+gvzo(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+ opx(jg)=omxo(jg)+delx*pt5 -+ opy(jg)=omyo(jg)+dely*pt5 -+ opz(jg)=omzo(jg)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+c angular velocity at time step n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c total kinetic energy -+ -+ engke=engfke+engtrn -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,fmx,fmy,fmz,stat=fail(5)) -+ deallocate (tqx,tqy,tqz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nveq_2 -+ -+ subroutine nvtq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Berendsen thermostat. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engfke -+ real(8) rot,strkin,strgrp,strcon,engtrn,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,engtot,chit0 -+ real(8) sigma,taut -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save chit0,igrp1,igrp2,ifre1,ifre2,newjob -+ -+ data chit0/1.d0/,newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1630) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c accumulators for constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c shake and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=2 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c calculate full time velocity -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c update centre of mass velocities -+ -+ gvxx(ig)=gvxo(jg)+tstep/gmass(id)*fmx(jg) -+ gvyy(ig)=gvyo(jg)+tstep/gmass(id)*fmy(jg) -+ gvzz(ig)=gvzo(jg)+tstep/gmass(id)*fmz(jg) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c advance velocity by leapfrog -+ -+ gvxx(ig)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ gvyy(ig)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ gvzz(ig)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*gvzz(ig) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+ opx(jg)=(omxo(jg)+delx*pt5) -+ opy(jg)=(omyo(jg)+dely*pt5) -+ opz(jg)=(omzo(jg)+delz*pt5) -+ -+ enddo -+ -+c scaled angular velocity at timestep n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at full time step -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_b2 -+ -+ subroutine nvtq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover thermostat. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engtot -+ real(8) rot,strkin,strcon,strgrp,engtrn,engfke,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,sigma,taut,chit0 -+ real(8) chitnew,chitp,conint,consv,chit,qmass -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save newjob,igrp1,igrp2,ifre1,ifre2,qmass -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1640) -+ enddo -+ -+ if(newjob)then -+ -+c mass parameters for thermostat -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atoms displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat variable -+ -+ chit0=chit -+ -+c accumulators for constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=3 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0)* -+ x pt5*(vxx(i)+vxo(j))) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0)* -+ x pt5*(vyy(i)+vyo(j))) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0)* -+ x pt5*(vzz(i)+vzo(j))) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(vxo(j)+uxx(j)) -+ vyy(i)=pt5*(vyo(j)+uyy(j)) -+ vzz(i)=pt5*(vzo(j)+uzz(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-chit0* -+ x pt5*(gvxx(ig)+gvxo(jg))) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-chit0* -+ x pt5*(gvyy(ig)+gvyo(jg))) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-chit0* -+ x pt5*(gvzz(ig)+gvzo(jg))) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)+tstep*uzz(jg) -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10.and.icyc.gt.3)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c update thermostat variable -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ consv=conint+pt5*qmass*chit0**2 -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_h2 -+ -+ subroutine nptq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, -+ x virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Berendsen thermostat and barostat. -+c (cell may change volume) -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strgrp,strcon,engtrn,engfke,trx,try,trz -+ real(8) delx,dely,delz,czero -+ real(8) vaa,vbb,vcc,viracc,beta,elrc,virlrc,press,engtot -+ real(8) sigma,taup,taut,virtot,volm,cell0,elrc0,virlrc0 -+ real(8) chit0,volm0,chip0,psyst,scale -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension cell0(9),czero(9) -+ -+ save newjob,volm0,elrc0,virlrc0,czero,chit0,chip0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1670) -+ enddo -+ -+c store initial values of volume and long range corrections -+ -+ if(newjob) then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1660) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ newjob=.false. -+ -+ chit0=1.d0 -+ chip0=1.d0 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c set constraint stress and virial and inital cell vectors -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c length scaling parameter -+ -+ scale=chip0**(1.d0/3.d0) -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=3 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)*scale+tstep*uxx(j) -+ yyy(i)=yyo(i)*scale+tstep*uyy(j) -+ zzz(i)=zzo(i)*scale+tstep*uzz(j) -+ -+c estimate full step velocity -+ -+ vxx(i)=pt5*(vxo(j)+uxx(j)) -+ vyy(i)=pt5*(vyo(j)+uyy(j)) -+ vzz(i)=pt5*(vzo(j)+uzz(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)*scale+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)*scale+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)*scale+tstep*uzz(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=(omxo(jg)+pt5*delx) -+ opy(jg)=(omyo(jg)+pt5*dely) -+ opz(jg)=(omzo(jg)+pt5*delz) -+ -+ enddo -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c pressure control variable -+ -+ engke=engfke+engtrn -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c new estimate of chit -+ -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+c new cell parameters -+ -+ do i=1,9 -+ cell(i)=scale*cell0(i) -+ enddo -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c scale cell vectors -+ -+ scale=((chip0*volm)/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=scale*czero(i) -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=scale -+ eta(5)=scale -+ eta(9)=scale -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nptq_b2 -+ -+ subroutine nptq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover thermostat and barostat. -+c (cell may change volume) -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,com -+ real(8) rot,strkin,strcon,strgrp,vom,engtrn,trx,try,trz -+ real(8) delx,dely,delz,engfke -+ real(8) vaa,vbb,vcc,viracc,pmass,qmass,totmas,czero -+ real(8) chip,chit,consv,conint,elrc,virlrc,press,sigma,taup,taut -+ real(8) temp,virtot,cell0,volm0,elrc0,virlrc0 -+ real(8) chit0,chip0,chipnew,chipp,engtot,chitnew,chitp,volnew -+ real(8) scale,volm,vold,cons1,cons2,cons3 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension czero(9),cell0(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,czero,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1670) -+ enddo -+ -+ if(newjob) then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1680) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+c calculate system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat and barostat variables -+ -+ chit0=chit -+ chip0=chip -+ chipnew=chip -+ -+c initialise constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vxx(i)+vxo(j))) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vyy(i)+vyo(j))) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vzz(i)+vzo(j))) -+ -+c advance position using leapfrog -+ -+ xxx(i)=xxo(i)+tstep*(uxx(j)+ -+ x chipnew*((xxx(i)+xxo(i))*pt5-com(1))) -+ yyy(i)=yyo(i)+tstep*(uyy(j)+ -+ x chipnew*((yyy(i)+yyo(i))*pt5-com(2))) -+ zzz(i)=zzo(i)+tstep*(uzz(j)+ -+ x chipnew*((zzz(i)+zzo(i))*pt5-com(3))) -+ -+c estimate full step velocity -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvxx(ig)+gvxo(jg))) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvyy(ig)+gvyo(jg))) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvzz(ig)+gvzo(jg))) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ -+ x chipnew*((gcxo(jg)+gcmx(ig))*pt5-com(1))) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ -+ x chipnew*((gcyo(jg)+gcmy(ig))*pt5-com(2))) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ -+ x chipnew*((gczo(jg)+gcmz(ig))*pt5-com(3))) -+ -+c estimate full step velocities -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chip and chit -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=pt5*(chip+chipnew) -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+c estimate new cell tensor -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=czero(i)*scale -+ enddo -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors-isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=czero(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=chipnew -+ eta(5)=chipnew -+ eta(9)=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=pt5*qmass*chit0**2 -+ cons2=press*vold -+ cons3=pt5*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nptq_h2 -+ -+ subroutine nstq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints. Rigid body sites and constraint sites may -+c coincide. -+c -+c verlet leapfrog with Berendsen thermostat and barostat. -+c (cell may change shape) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq,newstep,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons,mode -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engtrn,trx,try,trz -+ real(8) delx,dely,delz,engfke -+ real(8) vaa,vbb,vcc,viracc,elrc,virlrc,press,sigma -+ real(8) taup,taut,volm,cell0,volm0,elrc0,chit0,uni -+ real(8) beta,stres0,engtot,virlrc0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension cell0(9),uni(9),stres0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,chit0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1690) -+ enddo -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob) then -+ -+ chit0=1.d0 -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1700) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c set virial, strain and stress tensors -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ eta(i)=uni(i) -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(j)+eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) -+ yyy(i)=tstep*uyy(j)+eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) -+ zzz(i)=tstep*uzz(j)+eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) -+ -+c calculate velocity at full time step -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c calculate thermostated velocities -+ -+ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c update positions -+ -+ gcmx(ig)=tstep*uxx(jg)+ -+ x eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+eta(7)*gczo(jg) -+ gcmy(ig)=tstep*uyy(jg)+ -+ x eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+eta(8)*gczo(jg) -+ gcmz(ig)=tstep*uzz(jg)+ -+ x eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+eta(9)*gczo(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=(omxo(jg)+pt5*delx) -+ opy(jg)=(omyo(jg)+pt5*dely) -+ opz(jg)=(omzo(jg)+pt5*delz) -+ -+ enddo -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c calculate total stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c calculate new cell tensor -+ -+ call mat_mul(eta,cell0,cell) -+ -+c calculate eta tensor -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nstq_b2 -+ -+ subroutine nstq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, -+ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, -+ x vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints- rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover like thermostat and barostat. -+c (cell may change shape) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm,mode -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engtrn,vxt,vyt,vzt,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,com,fac,etadot -+ real(8) chit,conint,consv,virlrc,elrc,press,sigma,taut,taup -+ real(8) volm,eta0,etanew,cell0,volm0,elrc0,virlrc0,pmass,qmass -+ real(8) totmas,chit0,xxa,yya,zza,chip,chitp,vom,engfke -+ real(8) chitnew,vold,cons1,cons2,cons3,temp,uni -+ real(8) stres0,engtot -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn),vom(3) -+ dimension cell0(9),eta0(9),etanew(9),stres0(9),uni(9),com(3) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1710) -+ enddo -+ -+ if(newjob) then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1720) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+c system total mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat and barostat variables and new cell -+ -+ chit0=chit -+ do i=1,9 -+ -+ eta0(i)=eta(i) -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c initialise constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c shake and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ vxt=pt5*(vxx(i)+vxo(j)) -+ vyt=pt5*(vyy(i)+vyo(j)) -+ vzt=pt5*(vzz(i)+vzo(j)) -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)- -+ x (eta0(1)+chit0)*vxt-eta0(4)*vyt-eta0(7)*vzt) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)- -+ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)- -+ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(i))*pt5-com(1) -+ yya=(yyy(i)+yyo(i))*pt5-com(2) -+ zza=(zzz(i)+zzo(i))*pt5-com(3) -+ -+ xxx(i)=xxo(i)+tstep*(uxx(j)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ yyy(i)=yyo(i)+tstep*(uyy(j)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ zzz(i)=zzo(i)+tstep*(uzz(j)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c calculate thermostated velocities -+ -+ vxt=pt5*(gvxx(ig)+gvxo(jg)) -+ vyt=pt5*(gvyy(ig)+gvyo(jg)) -+ vzt=pt5*(gvzz(ig)+gvzo(jg)) -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)- -+ x (chit0+eta0(1))*vxt-eta0(4)*vyt-eta0(7)*vzt) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)- -+ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)- -+ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) -+ -+c advance positions using leapfrog -+ -+ xxa=(gcmx(ig)+gcxo(jg))*pt5-com(1) -+ yya=(gcmy(ig)+gcyo(jg))*pt5-com(2) -+ zza=(gcmz(ig)+gczo(jg))*pt5-com(3) -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c estimate full step velocities -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c calculate total stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c propagate eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=pt5*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+c estimate new cell parameters -+ -+ call cell_propagate(tstep,cell,etanew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=pt5*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=pt5*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nstq_h2 -+ -+ subroutine qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for appling bond constraint corrections after -+c atomic integration. Assumes rigid bodies connected by constraints -+c If this is not so use rdshake_1 instead -+c Must be used in conjunction with leapfrog integration algorithms -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester june 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k -+ integer ik,ig,id,jj -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy -+ real(8) tzz,xxt,yyt,zzt,stresh,tstep2,esig,dis,dis2 -+ real(8) xxa,yya,zza,tax,tay,taz,doti,amti,amtj -+ real(8) trx,try,trz,vix,viy,viz,vxi,vyi,vzi -+ real(8) vjx,vjy,vjz,vxj,vyj,vzj,gamma,dli,dlj,rot -+ -+ real(8), allocatable :: redmass(:),esig1(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension stresh(9),rot(9) -+ -+ save newjob,esig1,redmass -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (redmass(mxcons),esig1(mxcons),stat=fail) -+ if(fail.ne.0)call error(idnode,1610) -+ newjob=.false. -+ -+ endif -+ -+c constraint virial -+ -+ vircon=0.d0 -+ -+c accumulators for stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c one iteration of constraint (shake) algorithm -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dis=prmcon(listcon(k,1)) -+ dis2=dis*dis -+ esig1(k)=0.5d0*(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 -+ esig=max(esig,abs(esig1(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c terminate iteration if all tolerances satisfied -+ -+ if (.not.safe) then -+ -+c initialise force increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c assign effective reduced mass -+ -+ if(newstep) then -+ -+ ig=lstbod(i) -+ -+ if(ig.eq.0) then -+ -+ amti=rmass(i) -+ -+ else -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c site to com in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ -+ x gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ -+ x gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ -+ x gzz(id,jj)*rot(9)) -+ -+c find cross product between interatomic vector and vector to com -+ -+ tax=yya*dzz(k)-zza*dyy(k) -+ tay=zza*dxx(k)-xxa*dzz(k) -+ taz=xxa*dyy(k)-yya*dxx(k) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+c direction of induced velocites in body frame -+ -+ vix=try*gzz(id,jj)-trz*gyy(id,jj) -+ viy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ viz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ vxi=vix*rot(1)+viy*rot(2)+viz*rot(3) -+ vyi=vix*rot(4)+viy*rot(5)+viz*rot(6) -+ vzi=vix*rot(7)+viy*rot(8)+viz*rot(9) -+ -+c find dot product between induced translational and rotational velocities -+ -+ doti=abs(vxi*dxx(k)+vyi*dyy(k)+vzi*dzz(k)) -+ doti=doti/dis2 -+ -+ amti=(1.d0/gmass(id)+doti) -+ -+ endif -+ -+ ig=lstbod(j) -+ if(ig.eq.0) then -+ -+ amtj=rmass(j) -+ -+ else -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c site to com in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ -+ x gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ -+ x gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ -+ x gzz(id,jj)*rot(9)) -+ -+c find cross product between interatomic vector and vector to com -+ -+ tax =yya*dzz(k)-zza*dyy(k) -+ tay =zza*dxx(k)-xxa*dzz(k) -+ taz =xxa*dyy(k)-yya*dxx(k) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+c direction of induced velocites in body frame -+ -+ vjx=try*gzz(id,jj)-trz*gyy(id,jj) -+ vjy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ vjz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ vxj=vjx*rot(1)+vjy*rot(2)+vjz*rot(3) -+ vyj=vjx*rot(4)+vjy*rot(5)+vjz*rot(6) -+ vzj=vjx*rot(7)+vjy*rot(8)+vjz*rot(9) -+ -+c find dot product between induced translational and rotational velocities -+ -+ doti=abs(vxj*dxx(k)+vyj*dyy(k)+vzj*dzz(k)) -+ doti=doti/dis2 -+ -+ amtj=(1.d0/gmass(id)+doti) -+ -+ endif -+ -+ redmass(k)=1.d0/(amti+amtj)/tstep2 -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig1(k)*redmass(k) -+ -+c accumulate bond virial -+ -+ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ stresh(1)=stresh(1)+gamma*dxx(k)*dxx(k) -+ stresh(2)=stresh(2)+gamma*dxx(k)*dyy(k) -+ stresh(3)=stresh(3)+gamma*dxx(k)*dzz(k) -+ stresh(5)=stresh(5)+gamma*dyy(k)*dyy(k) -+ stresh(6)=stresh(6)+gamma*dyy(k)*dzz(k) -+ stresh(9)=stresh(9)+gamma*dzz(k)*dzz(k) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)+dxx(k)*gamma -+ yyt(i)=yyt(i)+dyy(k)*gamma -+ zzt(i)=zzt(i)+dzz(k)*gamma -+ -+ xxt(j)=xxt(j)-dxx(k)*gamma -+ yyt(j)=yyt(j)-dyy(k)*gamma -+ zzt(j)=zzt(j)-dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+xxt(i)*dli -+ fyy(i)=fyy(i)+yyt(i)*dli -+ fzz(i)=fzz(i)+zzt(i)*dli -+ fxx(j)=fxx(j)+xxt(j)*dlj -+ fyy(j)=fyy(j)+yyt(j)*dlj -+ fzz(j)=fzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+c complete (symmetrical) stress tensor -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine qshake -+ -+ end module lf_rotation2_module -diff -urN dl_class_1.9.orig/srcmod/Makefile dl_class_1.9/srcmod/Makefile ---- dl_class_1.9.orig/srcmod/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/Makefile 2015-11-16 17:18:13.342474971 +0100 -@@ -0,0 +1,101 @@ -+# Master makefile for DL_POLY Classic -+# Author: W. Smith January Dec 2010 -+# -+#======================================================================= -+# Define default settings -+#======================================================================= -+ -+include ../Plumed.inc -+ -+ -+BINROOT = ../execute -+CC := $(MPICC) -+EX = DLPOLY.X -+EXE = $(BINROOT)/$(EX) -+FC := $(MPIF90) -+SHELL=/bin/sh -+TYPE=par -+ -+#===================================================================== -+# Define object files -+ -+OBJ_MOD = parse_module.o setup_module.o error_module.o \ -+ site_module.o config_module.o pair_module.o utility_module.o \ -+ metafreeze_module.o solvation_module.o tether_module.o \ -+ vdw_module.o property_module.o rigid_body_module.o \ -+ angles_module.o bonds_module.o shake_module.o \ -+ inversion_module.o dihedral_module.o core_shell_module.o \ -+ exclude_module.o ewald_module.o coulomb_module.o\ -+ external_field_module.o four_body_module.o \ -+ hkewald_module.o metal_module.o ensemble_tools_module.o \ -+ temp_scalers_module.o three_body_module.o spme_module.o \ -+ tersoff_module.o neu_coul_module.o \ -+ nlist_builders_module.o forces_module.o \ -+ lf_motion_module.o lf_rotation1_module.o \ -+ lf_rotation2_module.o vv_motion_module.o \ -+ vv_rotation1_module.o vv_rotation2_module.o \ -+ pmf_module.o integrator_module.o optimiser_module.o \ -+ hyper_dynamics_module.o driver_module.o \ -+ define_system_module.o -+ -+OBJ_SRC = dlpoly.o -+ -+OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o -+ -+#===================================================================== -+# Define targets -+all: -+ @echo "Error - please specify a target machine!" -+ @echo "Permissible targets for this Makefile are:" -+ @echo " " -+ @echo "gfortran (parallel)" -+ @echo "woodcrest (parallel)" -+ @echo " " -+ @echo "Please examine Makefile for details" -+ -+# system specific targets follow : -+ -+#================== GNU Fortran, MPI version ============================== -+gfortran: -+ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ -+ LDFLAGS="$(LDFLAGS)" \ -+ FFLAGS="-c $(FFLAGS)" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#================= Woodcrest ========================================= -+woodcrest: -+ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ -+ FC=mpif90 FFLAGS="-c -O3" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#===================================================================== -+# Default code for parallel (MPI) execution -+ -+par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_DEPENDENCIES) -+ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_LOAD) -+ mv $(EX) $(EXE) -+ -+#===================================================================== -+# Check that a machine has been specified -+check: -+ @if test $(FC) = "undefined";\ -+ then echo "You must specify a target machine!"; \ -+ exit 99;\ -+ fi -+ -+#===================================================================== -+# Clean up the source directory -+clean: -+ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod -+ -+#===================================================================== -+# Declare dependencies -+.f.o: -+ $(FC) $(FFLAGS) $*.f -+.c.o: -+ $(CC) -c $*.c -+ -+#===================================================================== -+# Declare dependency on module files -+ -+$(OBJ_SRC): $(OBJ_MOD) -diff -urN dl_class_1.9.orig/srcmod/Makefile.plumedbck dl_class_1.9/srcmod/Makefile.plumedbck ---- dl_class_1.9.orig/srcmod/Makefile.plumedbck 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/Makefile.plumedbck 2015-11-16 17:17:11.322040795 +0100 -@@ -0,0 +1,98 @@ -+# Master makefile for DL_POLY Classic -+# Author: W. Smith January Dec 2010 -+# -+#======================================================================= -+# Define default settings -+#======================================================================= -+ -+BINROOT = ../execute -+CC := $(MPICC) -+EX = DLPOLY.X -+EXE = $(BINROOT)/$(EX) -+FC := $(MPIF90) -+SHELL=/bin/sh -+TYPE=par -+ -+#===================================================================== -+# Define object files -+ -+OBJ_MOD = parse_module.o setup_module.o error_module.o \ -+ site_module.o config_module.o pair_module.o utility_module.o \ -+ metafreeze_module.o solvation_module.o tether_module.o \ -+ vdw_module.o property_module.o rigid_body_module.o \ -+ angles_module.o bonds_module.o shake_module.o \ -+ inversion_module.o dihedral_module.o core_shell_module.o \ -+ exclude_module.o ewald_module.o coulomb_module.o\ -+ external_field_module.o four_body_module.o \ -+ hkewald_module.o metal_module.o ensemble_tools_module.o \ -+ temp_scalers_module.o three_body_module.o spme_module.o \ -+ tersoff_module.o neu_coul_module.o \ -+ nlist_builders_module.o forces_module.o \ -+ lf_motion_module.o lf_rotation1_module.o \ -+ lf_rotation2_module.o vv_motion_module.o \ -+ vv_rotation1_module.o vv_rotation2_module.o \ -+ pmf_module.o integrator_module.o optimiser_module.o \ -+ hyper_dynamics_module.o driver_module.o \ -+ define_system_module.o -+ -+OBJ_SRC = dlpoly.o -+ -+OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o -+ -+#===================================================================== -+# Define targets -+all: -+ @echo "Error - please specify a target machine!" -+ @echo "Permissible targets for this Makefile are:" -+ @echo " " -+ @echo "gfortran (parallel)" -+ @echo "woodcrest (parallel)" -+ @echo " " -+ @echo "Please examine Makefile for details" -+ -+# system specific targets follow : -+ -+#================== GNU Fortran, MPI version ============================== -+gfortran: -+ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ -+ LDFLAGS="$(LDFLAGS)" \ -+ FFLAGS="-c $(FFLAGS)" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#================= Woodcrest ========================================= -+woodcrest: -+ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ -+ FC=mpif90 FFLAGS="-c -O3" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#===================================================================== -+# Default code for parallel (MPI) execution -+ -+par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) -+ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) -+ mv $(EX) $(EXE) -+ -+#===================================================================== -+# Check that a machine has been specified -+check: -+ @if test $(FC) = "undefined";\ -+ then echo "You must specify a target machine!"; \ -+ exit 99;\ -+ fi -+ -+#===================================================================== -+# Clean up the source directory -+clean: -+ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod -+ -+#===================================================================== -+# Declare dependencies -+.f.o: -+ $(FC) $(FFLAGS) $*.f -+.c.o: -+ $(CC) -c $*.c -+ -+#===================================================================== -+# Declare dependency on module files -+ -+$(OBJ_SRC): $(OBJ_MOD) -diff -urN dl_class_1.9.orig/srcmod/merge_tools.f dl_class_1.9/srcmod/merge_tools.f ---- dl_class_1.9.orig/srcmod/merge_tools.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/merge_tools.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,670 @@ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging coordinate arrays across -+c a number of processors -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith november 1992. -+c MPI version - t. forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff,nsize,ierr,iatm1,iatm2 -+ integer j,i,k,jdnode,kdnode,katm1,katm2,iatm,katm -+ real*8 xxx(natms),yyy(natms),zzz(natms),buffer(nbuff) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+c check that buffer is large enough -+ -+ nsize=(natms+mxnode-1)/mxnode -+ if(nbuff.lt.6*nsize)call error(idnode,47) -+ -+c load initial transfer buffer -+ -+ j=0 -+ -+c set up this nodes atoms -+ -+ iatm1 = (idnode*natms)/mxnode + 1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ iatm = iatm2-iatm1+1 -+ -+ do i=iatm1,iatm2 -+ -+ buffer(j+1)=xxx(i) -+ buffer(j+2)=yyy(i) -+ buffer(j+3)=zzz(i) -+ j=j+3 -+ -+ enddo -+ -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c identity of incoming atoms -+ -+ katm1 = (kdnode*natms)/mxnode + 1 -+ katm2 = ((kdnode+1)*natms)/mxnode -+ katm = katm2-katm1 + 1 -+ -+c systolic data pulse to transfer data -+ -+ call MPI_IRECV(buffer(3*nsize+1),3*nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),3*nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ j=3*nsize -+ -+ do i=katm1,katm2 -+ -+ xxx(i)=buffer(j+1) -+ yyy(i)=buffer(j+2) -+ zzz(i)=buffer(j+3) -+ j=j+3 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,3*nsize -+ -+ buffer(i)=buffer(3*nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging together coordinate arrays -+c across a number of processors during rigid body algorithm -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t.forester november 1993 -+c systolic pulse version. T3D t.forester sept 1994 -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical safe -+ integer idnode,mxnode,natms,ierr,i,j,k,l,mxb,nout,nin -+ integer nin1,jdnode,j1,kdnode -+ integer lstme(natms) -+ real*8 xxx(mxatms),yyy(mxatms),zzz(mxatms),buffer(mxbuff) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ -+ safe =.true. -+ -+c load up buffers -+ -+ j=1 -+ l=1 -+ do while(lstme(l).gt.0.and.l.le.natms) -+ -+ i=lstme(l) -+ buffer(j+1)=dble(i) -+ buffer(j+2)=xxx(i) -+ buffer(j+3)=yyy(i) -+ buffer(j+4)=zzz(i) -+ j=j+4 -+ l=l+1 -+ -+ enddo -+ -+c length of message -+ -+ buffer(1) = dble(j) -+ -+c array position for incoming messages -+ -+ mxb = mxbuff/2 -+ -+c load initial transfer buffer -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c out going message size -+ -+ nout = nint(buffer(1)) -+ -+ call MPI_IRECV(nin,1,MPI_INTEGER, -+ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(nout,1,MPI_INTEGER,jdnode, -+ x Merge1_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+ call MPI_IRECV(buffer(mxb),nin,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),nout,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge1_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c check buffer array not exceeded -+ -+ if(nin.gt.mxbuff-mxb) safe =.false. -+ -+c position of first data element in incoming array -+ -+ nin1 = (nin-1)/4 -+ j = mxb+1 -+ -+ do j1=1,nin1 -+ -+ i = nint(buffer(j)) -+ xxx(i)=buffer(j+1) -+ yyy(i)=buffer(j+2) -+ zzz(i)=buffer(j+3) -+ j=j+4 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,nin -+ -+ buffer(i)=buffer(mxb-1+i) -+ -+ enddo -+ -+ enddo -+ -+c global check -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,47) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging coordinate arrays across -+c a number of processors -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t.forester february 1994 -+c T3D version - sept 1994 t.forester -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff,ierr,nsize,i,j,igrp1,igrp2 -+ integer k,jdnode,kdnode,kgrp1,kgrp2 -+ real*8 q0(ngrp),q1(ngrp),q2(ngrp),q3(ngrp),buffer(nbuff) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ -+c check that buffer is large enough -+ -+ nsize=(ngrp+mxnode-1)/mxnode -+ if(nbuff.lt.8*nsize)call error(idnode,47) -+ -+c load initial transfer buffer -+ -+ j=0 -+ -+ igrp1 = (idnode*ngrp)/mxnode+1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+ do i=igrp1,igrp2 -+ -+ buffer(j+1)=q0(i) -+ buffer(j+2)=q1(i) -+ buffer(j+3)=q2(i) -+ buffer(j+4)=q3(i) -+ j=j+4 -+ -+ enddo -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c identity of incoming groups -+ -+ kgrp1 = (kdnode*ngrp)/mxnode+1 -+ kgrp2 = ((kdnode+1)*ngrp)/mxnode -+ -+ call MPI_IRECV(buffer(4*nsize+1),4*nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge4_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),4*nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge4_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ j=4*nsize -+ -+ do i=kgrp1,kgrp2 -+ -+ q0(i)=buffer(j+1) -+ q1(i)=buffer(j+2) -+ q2(i)=buffer(j+3) -+ q3(i)=buffer(j+4) -+ j=j+4 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,4*nsize -+ -+ buffer(i)=buffer(4*nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for merging core-shell velocity data -+c to restore data replication on all nodes -+c -+c copyright - daresbury laboratory 1993 -+c author - w. smith february 1993 -+c MPI version - w. smith june 1995 -+c CPP version - w. smith june 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use config_module -+ use core_shell_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer idnode,mxnode,ntshl,ierr,i,j,k,n,m,ishl1,ishl2,nsize -+ integer jdnode,kshl1,kshl2,kdnode -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+c check that buffer is large enough -+ -+ nsize=8*((ntshl+mxnode-1)/mxnode) -+ -+ if(mxbuff.lt.2*nsize)call error(idnode,425) -+ -+c block indices -+ -+ ishl1 = (idnode*ntshl)/mxnode+1 -+ ishl2 = ((idnode+1)*ntshl)/mxnode -+ -+c load initial transfer buffer -+ -+ n=0 -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ buffer(n+1)=dble(i) -+ buffer(n+2)=dble(j) -+ buffer(n+3)=vxx(i) -+ buffer(n+4)=vyy(i) -+ buffer(n+5)=vzz(i) -+ buffer(n+6)=vxx(j) -+ buffer(n+7)=vyy(j) -+ buffer(n+8)=vzz(j) -+ n=n+8 -+ -+ enddo -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c systolic data pulse to transfer data -+ -+ call MPI_IRECV(buffer(nsize+1),nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Shell_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Shell_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ n=nsize -+ -+c block indices -+ -+ kshl1 = (kdnode*ntshl)/mxnode+1 -+ kshl2 = ((kdnode+1)*ntshl)/mxnode -+ -+ do m=kshl1,kshl2 -+ -+ i=nint(buffer(n+1)) -+ j=nint(buffer(n+2)) -+ -+ vxx(i)=buffer(n+3) -+ vyy(i)=buffer(n+4) -+ vzz(i)=buffer(n+5) -+ vxx(j)=buffer(n+6) -+ vyy(j)=buffer(n+7) -+ vzz(j)=buffer(n+8) -+ -+ n=n+8 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,nsize -+ -+ buffer(i)=buffer(nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for passing coordinate updates between -+c nodes during the shake iteration cycle -+c -+c parallel replicated data algorithm -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer idnode, mxnode, natms,ierr,i,k,j0,k0,n,jdnode,j -+ integer lishap(mxlshp),lashap(mxproc) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ real*8 xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ real*8 txx(mxatms),tyy(mxatms),tzz(mxatms) -+ real*8 buffer(mxbuff) -+ -+c store increments to be transferred -+ -+ do i=1,natms -+ -+ txx(i)=xxt(i) -+ tyy(i)=yyt(i) -+ tzz(i)=zzt(i) -+ -+ enddo -+ -+c transfer coordinate data to all nodes -+ -+ call gsync() -+ -+ do k=1,mxnode-1 -+ -+ i=0 -+ j0=0 -+ if(k.gt.1)j0=lashap(k-1) -+ -+ do j=j0+1,lashap(k) -+ -+ buffer(i+1)=txx(lishap(j)) -+ buffer(i+2)=tyy(lishap(j)) -+ buffer(i+3)=tzz(lishap(j)) -+ i=i+3 -+ -+ enddo -+ -+c inter node communication -+ -+ k0=0 -+ -+ if(k+1.lt.mxnode)k0=lashap(mxnode-k-1) -+ n=3*(lashap(mxnode-k)-k0) -+ jdnode=mod(idnode+k,mxnode) -+ -+c check for zero length messages -+ -+ if(n.gt.0) call MPI_IRECV(buffer(i+1),n,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Shmove_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ if(i.gt.0) call MPI_SEND(buffer(1),i,MPI_DOUBLE_PRECISION, -+ x jdnode,Shmove_tag+k,MPI_COMM_WORLD,ierr) -+ -+ if(n.gt.0) call MPI_WAIT(request,status,ierr) -+ -+c consolidate transferred data -+ -+ do j=k0+1,lashap(mxnode-k) -+ -+ xxt(lishap(j))=xxt(lishap(j))+buffer(i+1) -+ yyt(lishap(j))=yyt(lishap(j))+buffer(i+2) -+ zzt(lishap(j))=zzt(lishap(j))+buffer(i+3) -+ i=i+3 -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for splicing together coordinate arrays -+c across a number of processors during shake algorithm -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - w. smith march 1993 -+c -+c second version of splice -+c -+c********************************************************************* -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer idnode,natms,listme,listot,j,n3,i,lastot -+ real*8 xxx,yyy,zzz,buffer -+ -+ dimension listme(mxatms),listot(mxatms) -+ dimension xxx(natms),yyy(natms),zzz(natms) -+ dimension buffer(mxbuff) -+ -+c check buffer size -+ -+ if(mxbuff.lt.6*natms) call error(idnode,190) -+ -+c load initial transfer buffers -+ -+ j=3*natms -+ n3=3*natms -+ -+ do i=1,natms -+ -+ if(listot(i).gt.0)then -+ -+ if(listme(i).gt.0)then -+ -+ buffer(j+1)=xxx(i) -+ buffer(j+2)=yyy(i) -+ buffer(j+3)=zzz(i) -+ -+ else -+ -+ buffer(j+1)=0.d0 -+ buffer(j+2)=0.d0 -+ buffer(j+3)=0.d0 -+ -+ endif -+ -+ j=j+3 -+ -+ endif -+ -+ enddo -+ -+ lastot=j-n3 -+ -+c splice constraint coordinates -+ -+ if(lastot.gt.0) call gdsum(buffer(n3+1),lastot,buffer(1)) -+ -+c reconstitute coordinate arrays -+ -+ j=n3 -+ -+ do i=1,natms -+ -+ if(listot(i).gt.0)then -+ -+ xxx(i)=buffer(j+1)/dble(listot(i)) -+ yyy(i)=buffer(j+2)/dble(listot(i)) -+ zzz(i)=buffer(j+3)/dble(listot(i)) -+ -+ j=j+3 -+ -+ endif -+ -+ enddo -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/metafreeze_module.f dl_class_1.9/srcmod/metafreeze_module.f ---- dl_class_1.9.orig/srcmod/metafreeze_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/metafreeze_module.f 2011-07-26 18:53:41.000000000 +0200 -@@ -0,0 +1,3990 @@ -+ module metafreeze_module -+ -+c--------------------------------------------------------------------- -+c -+c Metafreeze module for metadynamics -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c Adapted for dl_poly classic w. smith dec 2010 -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+c Minimise usage by making everything private -+ -+ private -+ -+c--------------------------------------------------------------------- -+c P u b l i c R o u t i n e s -+c ... unless exposed here. -+c--------------------------------------------------------------------- -+ -+ public :: define_metadynamics ! Called to intitialise this module -+ public :: metafreeze_driver ! Called at every MD time-step -+ -+c--------------------------------------------------------------------- -+c P u b l i c V a r i a b l e s -+c--------------------------------------------------------------------- -+ -+ public :: lmetadyn ! Is this a metadynamics calculation? -+ public :: driven ! Is this atom site involved in metadynamics -+ public :: lstein,ltet,lglobpe,llocpe,ncolvar,nq4,nq6,ntet,hkey -+ public :: meta_step_int,globpe_scale,locpe_scale,ref_W_aug -+ public :: h_aug,wt_Dt -+ -+c------------------------------------ -+c Populated from CONTROL file -+c------------------------------------ -+ -+ logical,save :: lmetadyn =.false. ! Master metadynamics flag -+ -+c------------------------------------------------------- -+c Energy, virial, stress and forces from 'local' pe -+c Populated by dlpoly energy routines -+c------------------------------------------------------- -+ -+ -+ public :: eng_loc,vir_loc,stress_loc -+ public :: fxx_loc,fyy_loc,fzz_loc -+ -+c---------------------------------------------------------------------- -+c Data accumulated for local potential energy (computed elsewhere) -+c---------------------------------------------------------------------- -+ -+ real(8),save :: eng_loc,vir_loc -+ real(8),dimension(9),save :: stress_loc -+ real(8),allocatable,dimension(:),save :: fxx_loc,fyy_loc,fzz_loc -+ -+c--------------------------------------------------------------------- -+c P r i v a t e V a r i a b l e s -+c--------------------------------------------------------------------- -+ -+c---------------------------------------------------------------- -+c Collective variables and derivatives of v_aug w.r.t colvars -+c---------------------------------------------------------------- -+ -+ integer,parameter :: maxhis = 150000 ! Size of history arrays -+ real(8),allocatable,dimension(:),save :: colvar,dcolvar -+ real(8),allocatable,dimension(:),save :: colvar_scale -+ -+c---------------------------------------------------------------- -+c Positions and heights of previous Gaussians in colvar space -+c---------------------------------------------------------------- -+ -+ real(8),allocatable,dimension(:,:),save :: colvar_his -+ real(8),allocatable,dimension(:),save :: w_aug -+ -+c------------------------------ -+c Read from CONTROL file -+c------------------------------ -+ -+ integer,save :: ncolvar = 0 ! Total number of collvars -+ logical,save :: lstein =.false. ! Q4/Q6 collective variables -+ logical,save :: ltet =.false. ! Tetrahedral order parameter -+ logical,save :: lglobpe =.false. ! Global potential energy -+ logical,save :: llocpe =.false. ! Local potential energy -+ -+ integer,save :: nq4 = 0 ! Number of Q4 pair types -+ integer,save :: nq6 = 0 ! Number of Q6 pair types -+ integer,save :: ntet = 0 ! Number of zeta triplets -+ -+ real(8),save :: globpe_scale = 1.0d0 ! Scaling factors for local -+ real(8),save :: locpe_scale = 1.0d0 ! and global pe colvars -+ -+ real(8),save :: ref_W_aug=1.0d0 ! Reference Gaussian height -+ real(8),save :: h_aug=1.0d0 ! Gaussian width -+ integer,save :: hkey=0 ! Height control scheme -+ real(8),save :: wt_Dt=100.0d0 ! "Well-tempered" parameter -+ integer,save :: meta_step_int=5 ! interval between depositions -+ -+c---------------------------------------- -+c Read from STEINHARDT or TETRAHEDRAL -+c---------------------------------------- -+ -+c Global Steinhardt order parameters -+ -+ real(8),allocatable,dimension(:),save :: q4_global -+ real(8),allocatable,dimension(:),save :: q6_global -+ -+c Global Tetrahedral order parameters -+ -+ real(8),allocatable,dimension(:),save :: zeta_global -+ -+c Bookkeeping arrays for order parameter computation -+ -+ character(8),allocatable,dimension(:,:),save :: q4label -+ character(8),allocatable,dimension(:,:),save :: q6label -+ character(8),allocatable,dimension(:),save :: zetalabel -+ -+c Inner and outer cutoffs -+ -+ real(8),allocatable,dimension(:,:),save :: q4cutoff -+ real(8),allocatable,dimension(:,:),save :: q6cutoff -+ real(8),allocatable,dimension(:,:),save :: zetacutoff -+ -+c Scaling factors for q4 and q6 -+ -+ real(8),allocatable,dimension(:),save :: q4scale -+ real(8),allocatable,dimension(:),save :: q6scale -+ real(8),allocatable,dimension(:),save :: zetascale -+ -+c Number of nearest neighbours for q4, q6 and zeta -+ -+ integer,allocatable,dimension(:),save :: q4nn,q6nn -+ integer,allocatable,dimension(:),save :: zetann -+ -+c------------------------------------------------------------ -+c Arrays holding data for computation of order parameters -+c------------------------------------------------------------ -+ -+c Steinhardt site-site interaction arrays -+ -+ integer,allocatable,dimension(:,:),save :: q4site -+ integer,allocatable,dimension(:,:),save :: q6site -+ integer,allocatable,dimension(:) ,save :: zetasite -+ -+c Number of included sites -+ -+ integer,allocatable,dimension(:),save :: q4ninc -+ integer,allocatable,dimension(:),save :: q6ninc -+ integer,allocatable,dimension(:),save :: zetaninc -+ -+c Real and imaginary parts of q4bar and q6bar -+ -+ real(8),allocatable,dimension(:,:),save :: ReQ6bar,ImQ6bar -+ real(8),allocatable,dimension(:,:),save :: ReQ4bar,ImQ4bar -+ -+c Max number of entries in co-ordination shell -+ -+ integer,parameter :: mxflist = 50 -+ integer :: mxninc -+ -+c Full neighbour list for Tetrahedral order parameter -+ -+ integer,allocatable,dimension(:) ,save :: nflist -+ integer,allocatable,dimension(:,:),save :: flist -+ -+c------------------------------------- -+c Internal bookkeeping -+c------------------------------------- -+ -+ logical,allocatable,dimension(:),save :: driven ! Metadynamics option -+ integer,save :: meta_step=1 ! Current metadynamics step number -+ real(8),save :: meta_energy ! Value of metadynamics bias potential -+ -+ integer,save :: wl_nbins=30 ! Number of bins for WL recursion -+ integer,save :: wl_cycle=0 ! Current WL cycle -+ real(8),save :: wl_range=0.175 ! range of WL -+ real(8),allocatable,dimension(:),save :: wl_bin ! WL bins -+ -+c-------------------------------------- -+c Miscellaneous internal variables -+c-------------------------------------- -+ -+ integer,allocatable,dimension(:) :: buff ! Comms buffer -+ -+c File units -+ -+ integer,save :: stn = 91 ! STEINHARDT -+ integer,save :: mtd = 92 ! METADYNAMICS -+ integer,save :: zta = 93 ! ZETA -+ integer,save :: wlb = 94 ! WL_BINS.DAT -+ -+c Error flag -+ -+ integer,dimension(100) :: ierr = 0 -+ -+c Local store of comms variables -+c Assuming no task farming, comms will require changing if farmed -+ -+ integer, save :: myrank,commsize -+ logical, save :: onroot -+ real(8),save :: kt -+ -+ contains -+ -+ Subroutine Metafreeze_Driver -+ x (imcon,natms,temp,nstep,engcfg,virtot,engord,virord) -+ -+c--------------------------------------------------------------------- -+c Top level metadynamics routine called after evaluation of all -+c other energetic and force terms within the main molecular -+c dynamics loop. -+c -+c 1. Computes the ncolvar order parameters -+c 2. Deposits a new Gaussian at the current collective variables -+c as the current number of steps reaches meta_step_int -+c 3. Computed the bias potential and its derivative w.r.t. the -+c ncolvar collective variables. -+c 4. Computes the forces stresses and virial resulting from the -+c bias -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : boltz -+ use config_module, only : fxx,fyy,fzz,stress -+ -+ implicit none -+ -+ integer,intent(in) :: nstep,imcon,natms -+ real(8),intent(in) :: engcfg,virtot,temp -+ real(8),intent(out) :: engord,virord -+ -+c Local variables -+ -+ integer :: k,iq,itet,ibin,nfail,my_meta_step -+ integer,save :: nlastg = 0 -+ real(8) :: height,buff1,wl_mean -+ logical :: flat,safe -+ -+c------------------------------------------------------ -+c Compute order parameters / collective variables -+c------------------------------------------------------ -+ -+c Steinhardt order parameters -+ -+ if ( nq4>0.or.nq6>0 ) call compute_steinhardt(imcon,natms) -+ -+ k = 1 -+ do iq = 1,nq4 -+ colvar(k) = q4_global(iq) -+ k = k + 1 -+ end do -+ do iq = 1,nq6 -+ colvar(k) = q6_global(iq) -+ k = k + 1 -+ end do -+ -+c Tetrahedral order parameters -+ -+ if ( ntet > 0 ) then -+ call compute_tet_nlist(imcon,natms) -+ call compute_tetrahedral(imcon,natms) -+ end if -+ -+ do itet = 1,ntet -+ colvar(k) = zeta_global(itet) -+ k = k + 1 -+ end do -+ -+c Energy order parameters -+ -+ if (lglobpe) then -+ colvar(k) = engcfg -+ k = k + 1 -+ end if -+ if (llocpe) then -+ -+c Global reduction of local virial and energy -+ -+ if ( commsize > 1 ) call gdsum(eng_loc,1,buff1) -+ if ( commsize > 1 ) call gdsum(vir_loc,1,buff1) -+ colvar(k) = eng_loc -+ k = k + 1 -+ end if -+ -+ if ( k-1/=ncolvar ) call Mfrz_Error(2500,0.d0) -+ -+ if ( hkey==1 ) then -+ k = int(dble(wl_nbins)*colvar(1)/wl_range) + 1 -+ if ( k < wl_nbins) wl_bin(k) = wl_bin(k) + 1.0d0 -+ end if -+ -+c-------------------------------------------------------- -+c Deposit a new Gaussian if now is the correct time -+c-------------------------------------------------------- -+ -+ if ( (mod(nstep,meta_step_int)==0).and.(nstep>nlastg) ) then -+ nlastg = nstep ! Avoid multiple depositions at the -+ ! same timestep (relaxed shell model) -+ -+ select case (hkey) -+ -+ case(0) -+ -+c Always deposit Gaussians of the same height -+ -+ height = ref_W_aug -+ -+ case(1) -+ -+c Wang-Landau style recursion -+ -+ open(unit=wlb,file='WL_BINS.DAT',status='replace') -+ -+ do ibin = 1,wl_nbins -+ write(wlb,*)ibin,wl_bin(ibin) -+ end do -+ -+ close(wlb) -+ -+ if ( ncolvar/=1 ) then -+ call Mfrz_Error(2501,0.d0) -+ else -+ -+ height = ref_W_aug*(0.5d0**dble(wl_cycle)) -+ -+ nfail = 0 -+ wl_mean = 0.d0 -+ do ibin = 6,wl_nbins-5 -+ wl_mean = wl_mean + wl_bin(ibin) -+ nfail = nfail + 1 -+ end do -+ wl_mean = wl_mean/dble(nfail) -+ -+ nfail = 0 -+ flat = .true. -+ do ibin = 6,wl_nbins-5 -+ if ( wl_bin(ibin) < 0.8d0*wl_mean ) then -+ if ( nfail > 2 ) flat = .false. -+ nfail = nfail + 1 -+ end if -+ end do -+ -+ if ( flat.and.(sum(wl_bin)>50.0d0) ) then -+ wl_cycle = wl_cycle + 1 -+ wl_bin = 0.0d0 -+ end if -+ -+ height = ref_W_aug*(0.5d0**dble(wl_cycle)) -+ -+ end if -+ -+ case(2) -+ -+c Well-tempered metadynamics -+ -+ meta_energy = 0.0d0 -+ call compute_bias_potential() -+ -+ height = ref_W_aug*exp(-meta_energy/wt_Dt) -+ -+ case default -+ -+ call Mfrz_Error(2502,0.d0) -+ -+ end select -+ -+ call deposit_gaussian(height,temp) -+ my_meta_step = (meta_step-1)/commsize + 1 -+ safe = ( maxhis >= my_meta_step ) -+ call gstate(safe) -+ if ( .not.safe ) call Mfrz_Error(2503,0.d0) -+ -+ end if -+ -+c----------------------------------------------------------- -+c Compute the bias potential and its derivatives w.r.t. -+c to the ncolvar collective variables. -+c----------------------------------------------------------- -+ -+ call compute_bias_potential() -+ -+c----------------------------------------------------------- -+c Add in the forces, stresses and virial contributions -+c from this derivative. -+c----------------------------------------------------------- -+ -+ virord = 0.0d0 ! Zero the virial -+ -+c Must compute contributions from pe order parameters -+c first before we change any forces. -+ -+ k = nq4+nq6+ntet+1 -+ -+c Energy order parameters -+ -+ if (lglobpe) then -+ -+ fxx(:) = fxx(:)*(1.0d0+dcolvar(k)) -+ fyy(:) = fyy(:)*(1.0d0+dcolvar(k)) -+ fzz(:) = fzz(:)*(1.0d0+dcolvar(k)) -+ -+c correct for later summation: -+ -+ virord = virord+dcolvar(k)*virtot/dble(commsize) -+ stress = stress*(1.0d0+dcolvar(k)) -+ -+ end if -+ if (llocpe) then -+ -+ fxx(:) = fxx(:) + fxx_loc(:)*dcolvar(k) -+ fyy(:) = fyy(:) + fyy_loc(:)*dcolvar(k) -+ fzz(:) = fzz(:) + fzz_loc(:)*dcolvar(k) -+ -+c correct for later summation: -+ -+ virord = virord + dcolvar(k)*vir_loc/dble(commsize) -+ stress = stress + stress_loc*dcolvar(k) -+ -+ end if -+ -+c Steinhardt order parameters -+ -+ if ( nq4>0.or.nq6>0 ) call -+ x compute_steinhardt_forces(imcon,natms,engord,virord) -+ -+c Tetrahedral order parameters -+ -+ if ( ntet > 0 ) call -+ x compute_tetrahedral_forces(imcon,natms,engord,virord) -+ -+c global reduction of virord -+ -+ if ( commsize > 1 ) call gdsum(virord,1,buff1) -+ -+ engord = meta_energy -+ -+ return -+ -+ end Subroutine Metafreeze_Driver -+ -+ Subroutine Deposit_Gaussian(height,temp) -+ -+c--------------------------------------------------------------------- -+c -+c Deposits a new Gaussian at the current collective variables and -+c appends to the METADYNAMICs file. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : boltz -+ -+ implicit none -+ -+ real(8),intent(in) :: height,temp -+ integer :: my_meta_step -+ character(11) :: fmtstring -+ -+c store current order parameters and Gaussian height -+ -+ if ( mod(meta_step-1,commsize) == myrank ) then -+ -+ my_meta_step = (meta_step-1)/commsize + 1 -+ w_aug(my_meta_step) = height -+ colvar_his(:,my_meta_step) = colvar(:) -+ -+ end if -+ -+ if (onroot) then -+ -+c Create format string -+ -+ write(fmtstring,'("(I8,",I1,"E15.6)")')ncolvar+1 -+ -+c write METADYNAMICS file -+ -+ open(unit=mtd,file='METADYNAMICS',status='old',position= -+ x 'append',iostat=ierr(1)) -+ write(unit=mtd,fmt=fmtstring)meta_step,colvar(:), -+ x height/(temp*boltz) -+ close(unit=mtd) -+ -+ end if -+ -+ meta_step = meta_step+1 -+ -+ return -+ -+ end Subroutine Deposit_Gaussian -+ -+ Subroutine Compute_Bias_Potential() -+ -+c--------------------------------------------------------------------- -+c -+c Computes the augmenting bias potential as a function of the -+c collective variables. Also computes the derivative of the bias -+c potential w.r.t. the collective variables required to compute -+c the metadynamics forces. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ integer :: istep,ic,k,my_meta_step -+ real(8) :: vsq,exp1,dWpsq -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+ allocate(buff1(1:2*(ncolvar+1)),stat=ierr(1)) -+ allocate(buff2(1:2*(ncolvar+1)),stat=ierr(2)) -+ -+ if (any(ierr/=0)) call Mfrz_Error(2504,0.d0) -+ -+c Set squared-width of gaussians -+ -+ dWpsq = 1.0d0/h_aug**2 -+ meta_energy = 0.0d0 -+ -+c Zero accumulators of derivative w.r.t. each order parameter -+ -+ dcolvar(:) = 0.0d0 -+ my_meta_step = (meta_step-1)/commsize + 1 -+ do istep=1,my_meta_step -+ -+ vsq = 0.0d0 -+ do ic = 1,ncolvar -+ vsq = vsq + ( colvar_scale(ic)*(colvar(ic) - -+ x colvar_his(ic,istep)) )**2 -+ end do -+ exp1 = w_aug(istep)*exp(-0.5d0*vsq*dWpsq) -+ do ic = 1,ncolvar -+ dcolvar(ic) = dcolvar(ic) - (colvar_scale(ic)**2)*exp1* -+ x (colvar(ic) - colvar_his(ic,istep))*dWpsq -+ end do -+ -+ meta_energy = meta_energy + exp1 -+ -+ end do -+ -+ buff1(1) = meta_energy -+ k = 2 -+ do ic = 1,ncolvar -+ buff1(k) = dcolvar(ic) -+ k = k + 1 -+ end do -+ -+ if ( commsize > 1 ) then -+ call gdsum(buff1,ncolvar+1,buff2) -+ end if -+ -+ meta_energy = buff1(1) -+ -+ k = 2 -+ do ic=1,ncolvar -+ dcolvar(ic) = buff1(k) -+ k = k + 1 -+ end do -+ -+ deallocate(buff1,buff2,stat=ierr(1)) -+ -+ return -+ -+ end Subroutine Compute_Bias_Potential -+ -+ Subroutine Define_Metadynamics(tm,ts,natms,temp) -+ -+c--------------------------------------------------------------------- -+c Processes the metadynamics input file. This is done in several -+c stages. -+c 1. Process the metadynamics control data read from the CONTROL -+c file, which defines the number of collective variables and -+c indicates if we need to read from auxilliary input files -+c (e.g. STEINHARDT or ZETA) which define order parameters. -+c 2. Read and process these auxilliary files. -+c 3. Process the information obtained from the CONTROL file which -+c controls the properties of the Gaussians used to build the -+c bias potential. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c Adapted w. smith - jan 2011 -+c -+c--------------------------------------------------------------------- -+ -+ use site_module -+ use config_module, only : ltype -+ use parse_module -+ -+ implicit none -+ -+ integer,intent(in) :: tm,ts,natms -+ real(8),intent(in) :: temp -+ -+c Local variables -+ -+ integer :: isite,jsite,ilin,i,iq,iatm0,iatm1,istrd,iatm,k,n,idum -+ logical :: lexist,go,safe -+ real(8) :: waug,dummy(1) -+ -+c Allocate the driven list. Modifications elsewhere in DLPOLY always -+c check if sites are driven (for accumulation of local PE) and hence -+c this should be allocated if this is a metadynamics run or not. -+ -+ allocate(driven(1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2505,0.d0) -+ driven = .false. -+ -+c Do nothing else if the metafreeze flag has not been set in CONTROL -+ -+ if (.not.lmetadyn) then -+ return -+ end if -+ -+c Make local copy of rank and communicator size and set onroot flag -+ -+ myrank=tm -+ commsize = ts -+ onroot = (myrank==0) -+ -+c$$$ DEBUG -+cc$$$ if (onroot) write(0,'("================================")') -+cc$$$ if (onroot) write(0,'("Available sites from site module")') -+cc$$$ if (onroot) write(0,'("================================")') -+cc$$$ if (onroot) then -+cc$$$ do isite = 1,size(unqatm) -+cc$$$ write(0,'("Site index ",i4,": ",a8)')isite,unqatm(isite) -+cc$$$ end do -+cc$$$ end if -+ -+c Cannot bias the global and local PE in the same run. -+ -+ if ( lglobpe.and.llocpe ) call Mfrz_Error(2509,0.d0) -+ -+c Allocate local force arrays if anything is driven. -+ -+ allocate(fxx_loc(1:mxatms),stat=ierr(1)) -+ allocate(fyy_loc(1:mxatms),stat=ierr(2)) -+ allocate(fzz_loc(1:mxatms),stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2510,0.d0) -+ -+c Allocate arrays to hold collective variables -+ -+ allocate( colvar(1:ncolvar),stat=ierr(1)) -+ allocate(dcolvar(1:ncolvar),stat=ierr(2)) -+ allocate(colvar_his(1:ncolvar,1:maxhis),stat=ierr(3)) -+ allocate(colvar_scale(1:ncolvar),stat=ierr(4)) -+ allocate(w_aug(1:maxhis),stat=ierr(5)) -+ if (any(ierr/=0)) call Mfrz_Error(2511,0.d0) -+ -+c Allocate Wang-Landau bin array -+ -+ allocate(wl_bin(1:wl_nbins),stat=ierr(1)) -+ if (any(ierr/=0)) call Mfrz_Error(2512,0.d0) -+ wl_bin = 0.0d0 -+ -+c------------------------------------------------------------- -+c Process Steinhardt order parameter settings if present -+c------------------------------------------------------------- -+ -+ if ( lstein ) then -+ -+ allocate(q4label(1:2,1:nq4),stat=ierr(1)) -+ allocate(q6label(1:2,1:nq6),stat=ierr(2)) -+ allocate(q4cutoff(1:2,1:nq4),stat=ierr(3)) -+ allocate(q6cutoff(1:2,1:nq6),stat=ierr(4)) -+ allocate(q4scale(1:nq4),stat=ierr(5)) -+ allocate(q6scale(1:nq6),stat=ierr(6)) -+ allocate(q4nn(1:nq4),stat=ierr(7)) -+ allocate(q6nn(1:nq6),stat=ierr(8)) -+ allocate(q4ninc(1:nq4),stat=ierr(9)) -+ allocate(q6ninc(1:nq6),stat=ierr(10)) -+ allocate(buff(1:max(nq4,nq6)),stat=ierr(11)) -+ allocate(q4_global(1:nq4),stat=ierr(12)) -+ allocate(q6_global(1:nq6),stat=ierr(13)) -+ allocate(ReQ4Bar(-4:+4,1:nq4),stat=ierr(14)) -+ allocate(ImQ4Bar(-4:+4,1:nq4),stat=ierr(15)) -+ allocate(ReQ6Bar(-6:+6,1:nq6),stat=ierr(16)) -+ allocate(ImQ6Bar(-6:+6,1:nq6),stat=ierr(17)) -+ if (any(ierr/=0)) call Mfrz_Error(2515,0.d0) -+ -+c Open STEINHARDT file and process -+ -+ if (onroot) then -+ open(unit=stn,file='STEINHARDT',status='old',iostat=ierr(1)) -+ else -+ ierr(1)=0 -+ endif -+ call gisum(ierr(1),1,ierr(2)) -+ if ( ierr(1)/=0 ) call Mfrz_Error(2516,0.d0) -+ -+ ilin = 1 -+ safe=.true. -+ if (nq4>0) then -+ call getrec(safe,myrank,stn) ! Ignore q4 comment line -+ ilin = ilin + 1 -+ do i = 1,nq4 -+ call getrec(safe,myrank,stn) -+ if (safe) then -+ call getword(q4label(1,i),record,8,lenrec) -+ call getword(q4label(2,i),record,8,lenrec) -+ q4cutoff(1,i)=dblstr(record,lenrec,idum) -+ q4cutoff(2,i)=dblstr(record,lenrec,idum) -+ q4scale(i)=dblstr(record,lenrec,idum) -+ q4nn(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (nq6>0) then -+ call getrec(safe,myrank,stn) ! Ignore q6 comment line -+ ilin = ilin + 1 -+ do i = 1,nq6 -+ call getrec(safe,myrank,stn) -+ if (safe) then -+ call getword(q6label(1,i),record,8,lenrec) -+ call getword(q6label(2,i),record,8,lenrec) -+ q6cutoff(1,i)=dblstr(record,lenrec,idum) -+ q6cutoff(2,i)=dblstr(record,lenrec,idum) -+ q6scale(i)=dblstr(record,lenrec,idum) -+ q6nn(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (onroot) close(unit=stn) -+ -+ call gisum(ierr(1),ilin-1,ierr(ilin)) -+ do i = 1,ilin-1 -+ if (ierr(i)/=0) then -+ call Mfrz_Error(2521,dble(i)) -+ end if -+ end do -+ -+c Create array indicating which site-site connections use -+c which set of q4 cut-offs, scaling factors and num neighbours. -+ -+ allocate(q4site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2517,0.d0) -+ q4site(:,:) = 0 -+ -+ do isite = 1,size(unqatm) -+ do jsite = isite,size(unqatm) -+ do iq = 1,nq4 -+ if ((q4label(1,iq)==unqatm(isite)).and. -+ x q4label(2,iq)==unqatm(jsite)) then -+ q4site(jsite,isite) = iq -+ q4site(isite,jsite) = iq -+ driven(jsite) = .true. -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ end do -+ -+ allocate(q6site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2518,0.d0) -+ q6site(:,:) = 0 -+ do isite = 1,size(unqatm) -+ do jsite = isite,size(unqatm) -+ do iq = 1,nq6 -+ if ((q6label(1,iq)==unqatm(isite)).and. -+ x q6label(2,iq)==unqatm(jsite)) then -+ q6site(jsite,isite) = iq -+ q6site(isite,jsite) = iq -+ driven(jsite) = .true. -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ end do -+ -+c Count number of included sites -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ q4ninc = 0 -+ q6ninc = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ isite = ltype(iatm) -+ -+ do iq = 1,nq4 -+ if (unqatm(isite)==q4label(1,iq)) q4ninc(iq) = q4ninc(iq) + 1 -+ end do -+ do iq = 1,nq6 -+ if (unqatm(isite)==q6label(1,iq)) q6ninc(iq) = q6ninc(iq) + 1 -+ end do -+ -+ end do -+ -+ if ( commsize > 0 ) then -+ if (nq4>0) call gisum(q4ninc,nq4,buff(1:nq4)) -+ if (nq6>0) call gisum(q6ninc,nq6,buff(1:nq6)) -+ end if -+ -+ deallocate(buff,stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) -+ -+ end if ! end if steinhardt order parameters -+ -+ if ( ltet ) then -+ -+ allocate(zetacutoff(1:2,1:ntet),stat=ierr(1)) -+ allocate(zeta_global(1:ntet),stat=ierr(2)) -+ allocate(zetascale(1:ntet),stat=ierr(3)) -+ allocate(zetalabel(1:ntet),stat=ierr(4)) -+ allocate(zetann(1:ntet),stat=ierr(5)) -+ allocate(zetaninc(1:ntet),stat=ierr(6)) -+ allocate(buff(1:ntet),stat=ierr(7)) -+ if (any(ierr/=0)) call Mfrz_Error(2522,0.d0) -+ -+c Open ZETA file and process -+ -+ if (onroot) then -+ open(unit=zta,file='ZETA',status='old',iostat=ierr(1)) -+ else -+ ierr(1)=0 -+ endif -+ call gisum(ierr(1),1,ierr(2)) -+ if ( ierr(1)/=0 ) call Mfrz_Error(2523,0.d0) -+ -+ ilin = 1 -+ safe=.true. -+ if (ntet>0) then -+ call getrec(safe,myrank,zta) ! Ignore comment line -+ ilin = ilin + 1 -+ do i = 1,ntet -+ read(unit=zta,fmt=*,iostat=ierr(ilin)) -+ x zetalabel(i),zetacutoff(:,i),zetascale(i),zetann(i) -+ call getrec(safe,myrank,zta) -+ if (safe) then -+ call getword(zetalabel(i),record,8,lenrec) -+ zetacutoff(1,i)=dblstr(record,lenrec,idum) -+ zetacutoff(2,i)=dblstr(record,lenrec,idum) -+ zetascale(i)=dblstr(record,lenrec,idum) -+ zetann(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (onroot) close(unit=zta) -+ -+ call gisum(ierr(1),ilin-1,ierr(ilin)) -+ do i = 1,ilin-1 -+ if (ierr(i)/=0) then -+ call Mfrz_Error(2529,dble(i)) -+ end if -+ end do -+ -+c Create array indicating which site-site connections use -+c which set of q4 cut-offs, scaling factors and num neighbours. -+ -+ allocate(zetasite(1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2524,0.d0) -+ zetasite(:) = 0 -+ -+ do isite = 1,size(unqatm) -+ do iq = 1,ntet -+ if (zetalabel(iq)==unqatm(isite)) then -+ zetasite(isite) = iq -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ -+c Count number of included sites -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ zetaninc(:) = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ isite = ltype(iatm) -+ -+ do iq = 1,ntet -+ if (unqatm(isite)==zetalabel(iq)) -+ x zetaninc(iq) = zetaninc(iq) + 1 -+ end do -+ end do -+ -+ if (commsize>1) then -+ if (ntet>0) call gisum(zetaninc,ntet,buff) -+ end if -+ -+c$$$ do iq = 1,ntet -+c$$$ write(0,'("Number of sites for zeta type ",I5," : ",I5)') -+c$$$ x iq,zetaninc(iq) -+c$$$ end do -+ -+ mxninc = max(100,2*maxval(zetaninc)/commsize) -+ allocate(nflist(1:mxninc),stat=ierr(1)) -+ allocate(flist(1:mxflist,1:mxninc),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2525,0.d0) -+ -+ deallocate(buff,stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) -+ -+ end if ! end if tetrahedral order parameters -+ -+c Check total number of collective variables (ncolvar) matches total -+c number specified by nq4, nq6, ntet and potential energy flags. -+ -+ k = 0 -+ if (llocpe ) k = k + 1 -+ if (lglobpe ) k = k + 1 -+ k = k + ntet + nq4 + nq6 -+ if ( k /= ncolvar ) call Mfrz_Error(2527,0.d0) -+ -+c populate colvar_scale -+ -+ k = 1 -+ do iq = 1,nq4 -+ colvar_scale(k) = q4scale(iq) -+ k = k + 1 -+ end do -+ do iq = 1,nq6 -+ colvar_scale(k) = q6scale(iq) -+ k = k + 1 -+ end do -+ do iq = 1,ntet -+ colvar_scale(k) = zetascale(iq) -+ k = k + 1 -+ end do -+ if (lglobpe) then -+ colvar_scale(k) = globpe_scale -+ k = k + 1 -+ end if -+ if (llocpe) then -+ colvar_scale(k) = locpe_scale -+ k = k + 1 -+ end if -+ -+ -+c Convert into internal units -+ -+ wt_Dt = wt_Dt*temp*boltz -+ ref_W_aug = ref_W_aug*temp*boltz -+ kt = temp*boltz -+ -+c--------------------------------------------------------------------- -+c Purge the METADYNAMICS file or re-open and read if this is a -+c restart. N.B. we assume a restart if REVOLD if present and -+c ignore keyres. -+c--------------------------------------------------------------------- -+ -+ if (onroot) then -+ inquire(file='REVOLD',exist=lexist) -+ else -+ lexist=.true. -+ endif -+ call gstate(lexist) -+ -+ if (lexist) then -+ -+c read contents of METADYNAMICS file -+ -+ if (onroot) then -+ -+ open(unit=mtd,file='METADYNAMICS',status='old',iostat=ierr(1)) -+ -+ k = 0 -+ do -+ read(unit=mtd,fmt=*,end=10)meta_step,colvar(:),waug -+ waug = waug*temp*boltz -+ if (k == 0) then -+ n = (meta_step-1)/commsize + 1 -+ colvar_his(:,n)=colvar(:) -+ w_aug(n)=waug -+ else -+ dummy(1)=dble(meta_step) -+ call csend(17947,dummy,1,k,idum) -+ call csend(17948,colvar,ncolvar,k,ierr(3)) -+ dummy(1)=waug -+ call csend(17949,dummy,1,k,ierr(4)) -+ end if -+ -+ k = k + 1 -+ if (k == commsize) k = 0 -+ end do -+ -+ 10 close(unit=mtd) -+ -+ do k=1,commsize-1 -+ dummy(1)=-dble(meta_step) -+ call csend(17947,dummy,1,k,ierr(2)) -+ end do -+ -+ else -+ -+ go = .true. -+ do while(go) -+ -+ call crecv(17947,dummy,1) -+ meta_step=nint(dummy(1)) -+ ierr(2)=0 -+ -+ if ( meta_step < 0 ) then -+ meta_step = -meta_step -+ go = .false. -+ else -+ call crecv(17948,colvar,ncolvar) -+ ierr(3)=0 -+ call crecv(17949,dummy,1) -+ waug=dummy(1) -+ ierr(4)=0 -+ n = (meta_step-1)/commsize + 1 -+ colvar_his(:,n)=colvar(:) -+ w_aug(n)=waug -+ end if -+ -+ enddo -+ -+ end if -+ call gisum(ierr(1),4,ierr(5)) -+ do i=1,4 -+ if (ierr(i)/=0) call Mfrz_Error(2531,0.d0) -+ enddo -+ meta_step = meta_step + 1 -+ -+ else -+ -+c purge any existing METADYNAMICS file -+ -+ if (onroot) then -+ -+ open(unit=mtd,file='METADYNAMICS',status='replace', -+ x iostat=ierr(1)) -+ close(unit=mtd) -+ -+ end if -+ -+ end if -+ -+ return -+ -+ end Subroutine Define_Metadynamics -+ -+ Function Fc(r,inner_cut,outer_cut) -+ -+c--------------------------------------------------------------------- -+c -+c Computes the smooth cut-off function used when computing an order -+c parameter as a function of pair separation. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 -+ real(8),intent(in) :: r,inner_cut,outer_cut -+ real(8) :: fc -+ -+ if ( r > outer_cut ) then -+ fc = 0.0d0 -+ elseif ( r > inner_cut ) then -+ fc = 0.5d0*cos((r-inner_cut)*Pi/(outer_cut-inner_cut))+0.5d0 -+ elseif ( r <= inner_cut ) then -+ fc = 1.0d0 -+ else -+ call Mfrz_Error(2532,r) -+ end if -+ -+ return -+ -+ end Function Fc -+ -+ Function Dfc(r,inner_cut,outer_cut) -+ -+c--------------------------------------------------------------------- -+c Computes the derivative of the smooth cut-off function used when -+c computing an order parameter as a function of pair separation. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 -+ real(8),intent(in) :: r,inner_cut,outer_cut -+ real(8) :: dfc -+ -+ if ( r > outer_cut ) then -+ dfc = 0.0d0 -+ elseif ( r > inner_cut ) then -+ dfc = -0.5d0*sin((r-inner_cut)*Pi/(outer_cut-inner_cut)) -+ x *Pi/(outer_cut-inner_cut) -+ else -+ dfc = 0.0d0 -+ end if -+ -+ return -+ -+ end Function Dfc -+ -+ subroutine compute_steinhardt(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c Computes nq4 Q4 and nq6 Q6 global order parameters. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use setup_module, only : mxlist -+ use utility_module, only : images -+ -+ implicit none -+ -+c Arguments -+ -+ integer,intent(in) :: imcon,natms -+ -+c sqrt(pi/13) , sqrt(pi/9) , 1/3 -+ -+ real(8),parameter :: rpibtt = 0.491590249d0 -+ real(8),parameter :: rpibn = 0.590817950d0 -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ -+c Prefactors for spherical harmonics with l = 6 -+ -+ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 -+ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 -+ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 -+ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 -+ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 -+ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 -+ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 -+ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 -+ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 -+ -+c Prefactors for spherical harmonics with l = 4 -+ -+ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 -+ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 -+ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 -+ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 -+ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 -+ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 -+ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 -+ -+c Maximum no. of entries in solvation list -+ -+ integer :: maxneigh -+ -+c Solvation shell information - Q4 -+ -+ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 -+ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 -+ integer,allocatable,dimension(:) :: solvlist4,solvtype4 -+ integer :: isolvmax4 -+ -+c Solvation shell information - Q6 -+ -+ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 -+ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 -+ integer,allocatable,dimension(:) :: solvlist6,solvtype6 -+ integer :: isolvmax6 -+ -+c separation vectors and powers thereof -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8) :: x,y,z -+ real(8) :: x2,y2,z2,x3,y3,z3 -+ real(8) :: x4,y4,z4,x5,y5,z5 -+ real(8) :: x6,y6,z6 -+ real(8) :: invrc,invrs -+ -+c Comms buffers -+ -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+c Temporaries -+ -+ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar -+ -+c Loop counters -+ -+ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv -+ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type -+ integer :: itype,jtype,l,m,iq -+ -+ maxneigh = 100 ! Max number of atoms in coordination shell -+ -+ ierr = 0 ! Error flags -+ -+ allocate(xdf(1:mxlist),stat=ierr(1)) -+ allocate(ydf(1:mxlist),stat=ierr(2)) -+ allocate(zdf(1:mxlist),stat=ierr(3)) -+ -+ allocate(solvx4(1:maxneigh),stat=ierr(4)) -+ allocate(solvy4(1:maxneigh),stat=ierr(5)) -+ allocate(solvz4(1:maxneigh),stat=ierr(6)) -+ allocate(solvrmag4(1:maxneigh),stat=ierr(7)) -+ allocate(solvimag4(1:maxneigh),stat=ierr(8)) -+ allocate(solvrsq4 (1:maxneigh),stat=ierr(9)) -+ allocate(solvlist4(1:maxneigh),stat=ierr(10)) -+ allocate(solvtype4(1:maxneigh),stat=ierr(11)) -+ -+ allocate(solvx6(1:maxneigh),stat=ierr(12)) -+ allocate(solvy6(1:maxneigh),stat=ierr(13)) -+ allocate(solvz6(1:maxneigh),stat=ierr(14)) -+ allocate(solvrmag6(1:maxneigh),stat=ierr(15)) -+ allocate(solvimag6(1:maxneigh),stat=ierr(16)) -+ allocate(solvrsq6 (1:maxneigh),stat=ierr(17)) -+ allocate(solvlist6(1:maxneigh),stat=ierr(18)) -+ allocate(solvtype6(1:maxneigh),stat=ierr(19)) -+ if (any(ierr/=0)) call Mfrz_Error(2533,0.d0) -+ -+ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) -+ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) -+ -+c Zero accumulators used in Steinhardt order parameters -+ -+ ReQ6bar = 0.0d0 -+ ImQ6bar = 0.0d0 -+ ReQ4bar = 0.0d0 -+ ImQ4bar = 0.0d0 -+ -+c Set atoms looped over by current rank -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+c -------------------------------------------------------------- -+c Build a list of the required connections to iatm. This -+c differs depending on the version of DLPOLY we are using. -+c Note that excluded pairs will NOT have connections -+c computed and are therefore not included in computation -+c of these order parameters. -+c--------------------------------------------------------------- -+ -+ ii = ii + 1 -+ isite=ltype(iatm) -+ limit=lentry(ii) -+ nn = 0 -+ do k = 1,limit -+ -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ nn = 0 -+ isolvmax4 = 0 -+ isolvmax6 = 0 -+ isolv4 = 0 -+ isolv6 = 0 -+ do k = 1,limit -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ q4type = q4site(jsite,isite) -+ q6type = q6site(jsite,isite) -+ -+ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) -+ -+ if (nq4>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q4cutoff(2,q4type)**2 ) then -+ isolv4 = isolv4 + 1 -+ solvlist4(isolv4) = jatm -+ solvrsq4(isolv4) = tmpsq -+ solvrmag4(isolv4) = sqrt(tmpsq) -+ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) -+ solvx4(isolv4) = xdf(nn) -+ solvy4(isolv4) = ydf(nn) -+ solvz4(isolv4) = zdf(nn) -+ solvtype4(isolv4) = q4type -+ end if -+ end if -+ -+ if (nq6>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q6cutoff(2,q6type)**2 ) then -+ isolv6 = isolv6 + 1 -+ solvlist6(isolv6) = jatm -+ solvrsq6(isolv6) = tmpsq -+ solvrmag6(isolv6) = sqrt(tmpsq) -+ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) -+ solvx6(isolv6) = xdf(nn) -+ solvy6(isolv6) = ydf(nn) -+ solvz6(isolv6) = zdf(nn) -+ solvtype6(isolv6) = q6type -+ end if -+ end if -+ isolvmax4 = isolv4 -+ isolvmax6 = isolv6 -+ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) -+ x call Mfrz_Error(2535,0.d0) -+ -+ end do ! end loop over k -+ -+c--------------------------------------------------------- -+c Compute Q4 Steinhardt order parameters -+c--------------------------------------------------------- -+ -+ if ( (nq4>0).and.isolvmax4>0 ) then -+ -+ do isolv4 = 1,isolvmax4 -+ -+ jatm = solvlist4(isolv4) -+ itype = solvtype4(isolv4) -+ -+ invrc = solvimag4(isolv4)**6 -+ invrs = solvimag4(isolv4)**4 -+ -+ x = solvx4(isolv4) -+ y = solvy4(isolv4) -+ z = solvz4(isolv4) -+ -+ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) -+ -+ ReQ4bar(-4,itype) = ReQ4bar(-4,itype) + f_ij*ReYlm -+ ImQ4bar(-4,itype) = ImQ4bar(-4,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-3) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) -+ -+ ReQ4bar(-3,itype) = ReQ4bar(-3,itype) + f_ij*ReYlm -+ ImQ4bar(-3,itype) = ImQ4bar(-3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-2) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+ ReQ4bar(-2,itype) = ReQ4bar(-2,itype) + f_ij*ReYlm -+ ImQ4bar(-2,itype) = ImQ4bar(-2,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-1) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ -+ ReQ4bar(-1,itype) = ReQ4bar(-1,itype) + f_ij*ReYlm -+ ImQ4bar(-1,itype) = ImQ4bar(-1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(0) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ ReQ4bar(0,itype) = ReQ4bar(0,itype) + f_ij*ReYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(1) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4p1*invrs*z*(-4.d0*z2+3.d0*x2+3.0d0*y2)*x -+ ImYlm = -ypre4p1*invrs*z*(-4.d0*z2+3.d0*x2+3.0d0*y2)*y -+ -+ ReQ4bar(+1,itype) = ReQ4bar(+1,itype) + f_ij*ReYlm -+ ImQ4bar(+1,itype) = ImQ4bar(+1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(2) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4p2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = -ypre4p2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+ ReQ4bar(+2,itype) = ReQ4bar(+2,itype) + f_ij*ReYlm -+ ImQ4bar(+2,itype) = ImQ4bar(+2,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(3) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4p3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = ypre4p3*invrs*z*(3.d0*x2*y-y3) -+ -+ ReQ4bar(+3,itype) = ReQ4bar(+3,itype) + f_ij*ReYlm -+ ImQ4bar(+3,itype) = ImQ4bar(+3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4p4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre4p4*invrs*(4.d0*x3*y-4.d0*x*y3) -+ -+ ReQ4bar(+4,itype) = ReQ4bar(+4,itype) + f_ij*ReYlm -+ ImQ4bar(+4,itype) = ImQ4bar(+4,itype) + f_ij*ImYlm -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end if computing Q4 -+ -+c------------------------------------------------ -+c Compute Q6 Steinhardt order parameters -+c------------------------------------------------ -+ -+ if ( (nq6>0).and.isolvmax6>0 ) then -+ -+ do isolv6 = 1,isolvmax6 -+ -+ jatm = solvlist6(isolv6) -+ itype = solvtype6(isolv6) -+ -+ invrc = solvimag6(isolv6)**6 -+ invrs = solvimag6(isolv6)**4 -+ -+ x = solvx6(isolv6) -+ y = solvy6(isolv6) -+ z = solvz6(isolv6) -+ -+ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-6) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) -+ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0*x*y5) -+ -+ ReQ6bar(-6,itype) = ReQ6bar(-6,itype) + f_ij*ReYlm -+ ImQ6bar(-6,itype) = ImQ6bar(-6,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-5) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) -+ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) -+ -+ ReQ6bar(-5,itype) = ReQ6bar(-5,itype) + f_ij*ReYlm -+ ImQ6bar(-5,itype) = ImQ6bar(-5,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) -+ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y- -+ x 4.0d0*x*y3) -+ -+ ReQ6bar(-4,itype) = ReQ6bar(-4,itype) + f_ij*ReYlm -+ ImQ6bar(-4,itype) = ImQ6bar(-4,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-3) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (-x3+3.0d0*x*y2) -+ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (3.0d0*x2*y-y3) -+ -+ ReQ6bar(-3,itype) = ReQ6bar(-3,itype) + f_ij*ReYlm -+ ImQ6bar(-3,itype) = ImQ6bar(-3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-2) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2*y2+ -+ x x4+2.0d0*x2*y2+y4)*(x2-y2) -+ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2-16.0d0* -+ x z2*y2+x4+2.0d0*x2*y2+y4)*x*y -+ -+ ReQ6bar(-2,itype) = ReQ6bar(-2,itype) + f_ij*ReYlm -+ ImQ6bar(-2,itype) = ImQ6bar(-2,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-1) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+ ReQ6bar(-1,itype) = ReQ6bar(-1,itype) + f_ij*ReYlm -+ ImQ6bar(-1,itype) = ImQ6bar(-1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(0) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0*z4* -+ x y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4-5.0d0 -+ x *x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) -+ -+ ReQ6bar(0,itype) = ReQ6bar(0,itype) + f_ij*ReYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(1) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+ ReQ6bar(1,itype) = ReQ6bar(1,itype) + f_ij*ReYlm -+ ImQ6bar(1,itype) = ImQ6bar(1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(2) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0*z2*y2+ -+ x x4+2.d0*x2*y2+y4)*(x2-y2) -+ ImYlm = 2.d0*ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0*z2*y2+ -+ x x4+2.d0*x2*y2+y4)*x*y -+ -+ ReQ6bar(2,itype) = ReQ6bar(2,itype) + f_ij*ReYlm -+ ImQ6bar(2,itype) = ImQ6bar(2,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(3) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* -+ x (x3-3.d0*x*y2) -+ ImYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* -+ x (3.d0*x2*y-y3) -+ -+ ReQ6bar(3,itype) = ReQ6bar(3,itype) + f_ij*ReYlm -+ ImQ6bar(3,itype) = ImQ6bar(3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(4.d0*x3*y-4.d0*x*y3) -+ -+ ReQ6bar(4,itype) = ReQ6bar(4,itype) + f_ij*ReYlm -+ ImQ6bar(4,itype) = ImQ6bar(4,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(5) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p5*invrc*z*(x5-10.d0*x3*y2+5.d0*x*y4) -+ ImYlm = ypre6p5*invrc*z*(5.d0*x4*y-10.d0*x2*y3+y5) -+ -+ ReQ6bar(5,itype) = ReQ6bar(5,itype) + f_ij*ReYlm -+ ImQ6bar(5,itype) = ImQ6bar(5,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(6) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6p6*invrc*(x6-15.d0*x4*y2+15.d0*x2*y4-y6) -+ ImYlm = ypre6p6*invrc*(6.d0*x5*y-20.d0*x3*y3+6.d0*x*y5) -+ -+ ReQ6bar(6,itype) = ReQ6bar(6,itype) + f_ij*ReYlm -+ ImQ6bar(6,itype) = ImQ6bar(6,itype) + f_ij*ImYlm -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end if computing Q6 -+ -+ end do ! end loop over iatm -+ -+c----------------------------------------------- -+c Global summation of order parameters -+c----------------------------------------------- -+ -+ l = 1 -+ do itype = 1,nq4 -+ do m = -4,4 -+ buff1(l) = ReQ4bar(m,itype) -+ l = l + 1 -+ end do -+ do m = -4,4 -+ buff1(l) = ImQ4bar(m,itype) -+ l = l + 1 -+ end do -+ end do -+ do itype = 1,nq6 -+ do m = -6,6 -+ buff1(l) = ReQ6bar(m,itype) -+ l = l + 1 -+ end do -+ do m = -6,6 -+ buff1(l) = ImQ6bar(m,itype) -+ l = l + 1 -+ end do -+ end do -+ -+ if (commsize>1) call gdsum(buff1,18*nq4+26*nq6,buff2) -+ -+ l = 1 -+ do itype = 1,nq4 -+ do m = -4,4 -+ ReQ4bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ do m = -4,4 -+ ImQ4bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ end do -+ do itype = 1,nq6 -+ do m = -6,6 -+ ReQ6bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ do m = -6,6 -+ ImQ6bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ end do -+ -+c--------------------------------------------------- -+c Final computation of global order parameters -+c--------------------------------------------------- -+ -+ l = 1 -+ do iq = 1,nq4 -+ tmpvar = 0.0d0 -+ do m = 1,18 -+ tmpvar = tmpvar + buff1(l)**2 -+ l = l + 1 -+ end do -+ q4_global(iq) = 4.0d0*rpibn*sqrt(tmpvar)/ -+ x dble(q4ninc(iq)*q4nn(iq)) -+ end do -+ -+ do iq = 1,nq6 -+ tmpvar = 0.0d0 -+ do m = 1,26 -+ tmpvar = tmpvar + buff1(l)**2 -+ l = l + 1 -+ end do -+ q6_global(iq) = 4.0d0*rpibtt*sqrt(tmpvar)/ -+ x dble(q6ninc(iq)*q6nn(iq)) -+ end do -+ -+c Tidy up -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ -+ deallocate(solvx4,stat=ierr(4)) -+ deallocate(solvy4,stat=ierr(5)) -+ deallocate(solvz4,stat=ierr(6)) -+ deallocate(solvrmag4,stat=ierr(7)) -+ deallocate(solvimag4,stat=ierr(8)) -+ deallocate(solvrsq4 ,stat=ierr(9)) -+ deallocate(solvlist4,stat=ierr(10)) -+ deallocate(solvtype4,stat=ierr(11)) -+ -+ deallocate(solvx6,stat=ierr(12)) -+ deallocate(solvy6,stat=ierr(13)) -+ deallocate(solvz6,stat=ierr(14)) -+ deallocate(solvrmag6,stat=ierr(15)) -+ deallocate(solvimag6,stat=ierr(16)) -+ deallocate(solvrsq6 ,stat=ierr(17)) -+ deallocate(solvlist6,stat=ierr(18)) -+ deallocate(solvtype6,stat=ierr(19)) -+ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) -+ -+ deallocate(buff1,stat=ierr(1)) -+ deallocate(buff2,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Steinhardt -+ -+ Subroutine Compute_Steinhardt_Forces(imcon,natms,engord,virord) -+ -+c--------------------------------------------------------------------- -+c -+c Computes forces from nq4 Q4 and nq6 Q6 global order parameters. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use setup_module, only : mxlist -+ use utility_module, only : images -+ implicit none -+ -+c Arguments -+ -+ integer,intent(in) :: imcon,natms -+ -+ real(8),intent(inout) :: engord,virord -+ -+c sqrt(pi/13) , sqrt(pi/9) , 1/3 -+ -+ real(8),parameter :: rpibtt = 0.491590249d0 -+ real(8),parameter :: rpibn = 0.590817950d0 -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ -+c Prefactors for spherical harmonics with l = 6 -+ -+ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 -+ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 -+ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 -+ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 -+ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 -+ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 -+ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 -+ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 -+ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 -+ -+c Prefactors for speherical harmonics with l = 4 -+ -+ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 -+ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 -+ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 -+ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 -+ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 -+ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 -+ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 -+ -+c Maximum no. of entries in solvation list -+ -+ integer :: maxneigh -+ -+c Solvation shell information - Q4 -+ -+ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 -+ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 -+ integer,allocatable,dimension(:) :: solvlist4,solvtype4 -+ integer :: isolvmax4 -+ -+c Solvation shell information - Q6 -+ -+ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 -+ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 -+ integer,allocatable,dimension(:) :: solvlist6,solvtype6 -+ integer :: isolvmax6 -+ -+c Prefactors arising from derivative of bias potential -+ -+ real(8),allocatable,dimension(:) :: q4prefactor,q6prefactor -+ -+c Separation vectors and powers thereof -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8) :: x,y,z -+ real(8) :: x2,y2,z2,x3,y3,z3 -+ real(8) :: x4,y4,z4,x5,y5,z5 -+ real(8) :: x6,y6,z6 -+ real(8) :: invrc,invrs,invrq -+ -+c Comms buffers -+ -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+c Temporaries -+ -+ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar,invrN -+ real(8) :: fx,fy,fz,fx2,fy2,fz2,prefactor2,fx1,fy1,fz1 -+ real(8) :: strs1,strs2,strs3,strs4,strs5,strs6,strs7,strs8,strs9 -+ -+ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv -+ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type -+ integer :: itype,jtype,l,m,iq -+ -+ maxneigh = 500 ! Max number of atoms in coordination shell -+ -+ ierr = 0 ! Error flags -+ -+ allocate(xdf(1:mxlist),stat=ierr(1)) -+ allocate(ydf(1:mxlist),stat=ierr(2)) -+ allocate(zdf(1:mxlist),stat=ierr(3)) -+ -+ allocate(solvx4(1:maxneigh),stat=ierr(4)) -+ allocate(solvy4(1:maxneigh),stat=ierr(5)) -+ allocate(solvz4(1:maxneigh),stat=ierr(6)) -+ allocate(solvrmag4(1:maxneigh),stat=ierr(7)) -+ allocate(solvimag4(1:maxneigh),stat=ierr(8)) -+ allocate(solvrsq4 (1:maxneigh),stat=ierr(9)) -+ allocate(solvlist4(1:maxneigh),stat=ierr(10)) -+ allocate(solvtype4(1:maxneigh),stat=ierr(11)) -+ -+ allocate(solvx6(1:maxneigh),stat=ierr(12)) -+ allocate(solvy6(1:maxneigh),stat=ierr(13)) -+ allocate(solvz6(1:maxneigh),stat=ierr(14)) -+ allocate(solvrmag6(1:maxneigh),stat=ierr(15)) -+ allocate(solvimag6(1:maxneigh),stat=ierr(16)) -+ allocate(solvrsq6 (1:maxneigh),stat=ierr(17)) -+ allocate(solvlist6(1:maxneigh),stat=ierr(18)) -+ allocate(solvtype6(1:maxneigh),stat=ierr(19)) -+ if (any(ierr/=0)) call Mfrz_Error(2538,0.d0) -+ -+ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) -+ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) -+ -+ allocate(q4prefactor(1:nq4),stat=ierr(1)) -+ allocate(q6prefactor(1:nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) -+ -+c Compute the prefactors associated from dV_aug/d_q4 -+ -+ k = 1 -+ do iq = 1,nq4 -+ invrN = 1.0d0/dble(q4ninc(iq)*q4nn(iq)) -+ q4prefactor(iq) = -16.0d0*(rpibn**2)*(invrN**2)*dcolvar(k)/ -+ x Q4_global(iq) -+ k = k + 1 -+ end do -+ -+c Compute the prefactors associated from dV_aug/d_q6 -+ -+ do iq = 1,nq6 -+ invrN = 1.0d0/dble(q6ninc(iq)*q6nn(iq)) -+ q6prefactor(iq) = -16.0d0*(rpibtt**2)*(invrN**2)*dcolvar(k)/ -+ x Q6_global(iq) -+ k = k + 1 -+ end do -+ -+c Set atoms looper over by current rank -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ strs1 = 0.0d0 -+ strs2 = 0.0d0 -+ strs3 = 0.0d0 -+ strs4 = 0.0d0 -+ strs5 = 0.0d0 -+ strs6 = 0.0d0 -+ strs7 = 0.0d0 -+ strs8 = 0.0d0 -+ strs9 = 0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+c--------------------------------------------------------------- -+c Build a list of the required connections to iatm. This -+c differs depending on the version of DLPOLY we are using. -+c Note that excluded pairs will NOT have connections -+c computed. -+c--------------------------------------------------------------- -+ -+ ii = ii + 1 -+ isite=ltype(iatm) -+ limit=lentry(ii) -+ -+ nn = 0 -+ do k = 1,limit -+ -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ nn = 0 -+ isolvmax4 = 0 -+ isolvmax6 = 0 -+ isolv4 = 0 -+ isolv6 = 0 -+ do k = 1,limit -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ q4type = q4site(jsite,isite) -+ q6type = q6site(jsite,isite) -+ -+ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) -+ if (nq4>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q4cutoff(2,q4type)**2 ) then -+ isolv4 = isolv4 + 1 -+ solvlist4(isolv4) = jatm -+ solvrsq4(isolv4) = tmpsq -+ solvrmag4(isolv4) = sqrt(tmpsq) -+ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) -+ solvx4(isolv4) = xdf(nn) -+ solvy4(isolv4) = ydf(nn) -+ solvz4(isolv4) = zdf(nn) -+ solvtype4(isolv4) = q4type -+ end if -+ end if -+ -+ if (nq6>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q6cutoff(2,q6type)**2 ) then -+ isolv6 = isolv6 + 1 -+ solvlist6(isolv6) = jatm -+ solvrsq6(isolv6) = tmpsq -+ solvrmag6(isolv6) = sqrt(tmpsq) -+ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) -+ solvx6(isolv6) = xdf(nn) -+ solvy6(isolv6) = ydf(nn) -+ solvz6(isolv6) = zdf(nn) -+ solvtype6(isolv6) = q6type -+ end if -+ end if -+ isolvmax4 = isolv4 -+ isolvmax6 = isolv6 -+ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) -+ x call Mfrz_Error(2535,0.d0) -+ -+ end do ! end loop over k -+ -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+c Compute forces arising from Q4 order parameters -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+ -+ if ( (nq4>0).and.isolvmax4>0 ) then -+ -+ do isolv4 = 1,isolvmax4 -+ -+ jatm = solvlist4(isolv4) -+ itype = solvtype4(isolv4) -+ -+ invrc = solvimag4(isolv4)**6 -+ invrq = solvimag4(isolv4)**8 -+ invrs = solvimag4(isolv4)**4 -+ -+ x = solvx4(isolv4) -+ y = solvy4(isolv4) -+ z = solvz4(isolv4) -+ -+ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ df_ij = dfc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+ fx = 0.0d0 -+ fy = 0.0d0 -+ fz = 0.0d0 -+ -+c------------------------------------- -+c Gradient of f_ij w.r.t. r_{j} -+c------------------------------------- -+ -+ fx2 = df_ij*x*solvimag4(isolv4) -+ fy2 = df_ij*y*solvimag4(isolv4) -+ fz2 = df_ij*z*solvimag4(isolv4) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -4 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -4 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{4,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrc*ypre4m4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- -+ x 3.d0*z2*y2) -+ fy1 = -invrc*ypre4m4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* -+ x z2*x2-z2*y2) -+ fz1 = -invrc*ypre4m4*4.d0*z*(x4-6.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -4 (imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(-4,itype) -+ -+c---------------------------------------------- -+c Gradient of Im(Y_{4,-4}) w.r.t r_{j} -+c---------------------------------------------- -+ -+ fx1 = invrc*ypre4m4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ -+ x y4+z2*y2) -+ fy1 = -invrc*ypre4m4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- -+ x 3.d0*z2*y2) -+ fz1 = invrc*ypre4m4*16.d0*x*y*z*(x2-y2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -3 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(-3,itype) -+ -+c--------------------------------------------- -+c Gradient of Re(Y_{4,-3}) w.r.t r_{j} -+c--------------------------------------------- -+ -+ fx1 = -invrc*ypre4m3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+ -+ x 3.d0*y4+3.d0*z2*y2) -+ fy1 = -invrc*ypre4m3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+ -+ x 3.d0*z2) -+ fz1 = invrc*ypre4m3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -3 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(-3,itype) -+ -+c-------------------------------------------------- -+c Gradient of Im(Y_{4,-3}) w.r.t r_{j} -+c-------------------------------------------------- -+ -+ fx1 = invrc*ypre4m3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) -+ fy1 = -invrc*ypre4m3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 -+ x -3.d0*z2*y2) -+ fz1 = -invrc*ypre4m3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -2 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(-2,itype) -+ -+c--------------------------------------------- -+c Gradient of Re(Y_{4,-2}) w.r.t r_{j} -+c--------------------------------------------- -+ -+ fx1 = -invrc*ypre4m2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fy1 = invrc*ypre4m2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fz1 = invrc*ypre4m2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- -+ x 3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -2 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(-2,itype) -+ -+c----------------------------------------- -+c Gradient of Im(Y_{4,-2}) w.r.t r_{j} -+c----------------------------------------- -+ -+ fx1 = -invrc*ypre4m2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ -+ x 6.d0*z4-y4) -+ fy1 = invrc*ypre4m2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 -+ x -6.d0*z4+x4) -+ fz1 = -invrc*ypre4m2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -1 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(-1,itype) -+ -+c---------------------------------------- -+c Gradient of Re(Y_{4,-1}) w.r.t r_{j} -+c---------------------------------------- -+ -+ fx1 = invrc*ypre4m1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- -+ x 3.d0*y4) -+ fy1 = invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fz1 = -invrc*ypre4m1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -1 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fy1 = invrc*ypre4m1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4+ -+ x 3.d0*x4) -+ fz1 = invrc*ypre4m1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real spherical harmonics for m = 0 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+c-------------------------------------------------- -+c Force contributions from m = 0 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(0,itype) -+ -+c------------------------------------------- -+c Gradient of Re(Y_{4,0}) w.r.t r_{j} -+c------------------------------------------- -+ -+ fx1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ fy1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ fz1 = -20.d0*ypre4m0*invrc*z*(-4.d0*z2*x2-4.d0*z2*y2+3.d0* -+ x x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +1 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ ImYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = +1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(+1,itype) -+ -+c------------------------------------------- -+c Gradient of Re(Y_{4,+1}) w.r.t r_{j} -+c------------------------------------------- -+ -+ fx1 = invrc*ypre4p1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- -+ x 3.d0*y4) -+ fy1 = invrc*ypre4p1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fz1 = -invrc*ypre4p1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------ -+c Force contributions from m = +1 (imaginary part) -+c------------------------------------------------------ -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(+1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,+1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrc*ypre4p1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fy1 = -invrc*ypre4p1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4 -+ x +3.d0*x4) -+ fz1 = -invrc*ypre4p1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = 2 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre4p2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = -ypre4p2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = 2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(+2,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{4,+2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4p2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fy1 = invrc*ypre4p2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fz1 = invrc*ypre4p2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- -+ x 3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = 2 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(+2,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,+2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrc*ypre4p2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ -+ x 6.d0*z4-y4) -+ fy1 = -invrc*ypre4p2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 -+ x -6.d0*z4+x4) -+ fz1 = invrc*ypre4p2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = 3 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4p3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = -ypre4p3*invrs*z*(-3.d0*x2*y+y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = +3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(+3,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{4,+3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4p3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+3.d0*y4 -+ x +3.d0*z2*y2) -+ fy1 = -invrc*ypre4p3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+3.d0*z2) -+ fz1 = invrc*ypre4p3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = +3 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(+3,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,+3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4p3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) -+ fy1 = invrc*ypre4p3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 -+ x -3.d0*z2*y2) -+ fz1 = invrc*ypre4p3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +4 -+c------------------------------------------------------------- -+ -+ ReYlm = ypre4p4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = -ypre4p4*invrs*(-4.d0*x3*y+4.d0*x*y3) -+ -+c------------------------------------------------------- -+c Force contributions from m = +4 (real part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(+4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{4,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrc*ypre4p4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- -+ x 3.d0*z2*y2) -+ fy1 = -invrc*ypre4p4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* -+ x z2*x2-z2*y2) -+ fz1 = -invrc*ypre4p4*4.d0*z*(x4-6.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -4 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ImQ4bar(+4,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4p4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ -+ x y4+z2*y2) -+ fy1 = invrc*ypre4p4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- -+ x 3.d0*z2*y2) -+ fz1 = -invrc*ypre4p4*16.d0*x*y*z*(x2-y2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c Add into global force and stress arrays -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+c Virial -+ -+ virord = virord - (fx*x + fy*y + fz*z) -+ -+c Stress -+ -+ strs1=strs1+x*fx -+ strs2=strs2+x*fy -+ strs3=strs3+x*fz -+ strs5=strs5+y*fy -+ strs6=strs6+y*fz -+ strs9=strs9+z*fz -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end of computing Q4 -+ -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+c Compute forces arising from Q6 order parameters -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+ -+ if ( (nq6>0).and.isolvmax6>0 ) then -+ -+ do isolv6 = 1,isolvmax6 -+ -+ jatm = solvlist6(isolv6) -+ itype = solvtype6(isolv6) -+ -+ invrc = solvimag6(isolv6)**6 -+ invrq = solvimag6(isolv6)**8 -+ invrs = solvimag6(isolv6)**4 -+ -+ x = solvx6(isolv6) -+ y = solvy6(isolv6) -+ z = solvz6(isolv6) -+ -+ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ df_ij = dfc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+ fx = 0.0d0 -+ fy = 0.0d0 -+ fz = 0.0d0 -+ -+c---------------------------------------- -+c Gradient of f_ij w.r.t. r_{j} -+c---------------------------------------- -+ -+ fx2 = df_ij*x*solvimag6(isolv6) -+ fy2 = df_ij*y*solvimag6(isolv6) -+ fz2 = df_ij*z*solvimag6(isolv6) -+ -+c----------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -6 -+c----------------------------------------------------------- -+ -+ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) -+ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0* -+ x x*y5) -+ -+c----------------------------------------------------- -+c Force contributions from m = -6 (real part) -+c----------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-6,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrq*ypre6m6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ -+ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fy1 = -invrq*ypre6m6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+6.0d0 -+ x *x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2-z2*y4) -+ fz1 = -invrq*ypre6m6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2* -+ x y4-y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c---------------------------------------------------------- -+c Force contributions from m = -6 (Imaginary part) -+c---------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-6,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrq*ypre6m6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0*x2* -+ x y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) -+ fy1 = -invrq*ypre6m6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2*y4- -+ x y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = invrq*ypre6m6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2*y2+ -+ x 3.0d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c--------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -5 -+c--------------------------------------------------------- -+ -+ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) -+ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) -+ -+c-------------------------------------------------- -+c Force contributions from m = -5 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-5,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6m5*invrq*z*(-x6+35.0d0*x4*y2-55.d0*x2*y4+ -+ x 5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) -+ fy1 = -2.0d0*ypre6m5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2 -+ x *y2+5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fz1 = -ypre6m5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -5 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-5,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.0d0*ypre6m5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2 -+ x -13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fy1 = -ypre6m5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4-y6+ -+ x 5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = ypre6m5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -4 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) -+ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y-4.0d0* -+ x x*y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -4 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.0d0*ypre6m4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ -+ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4* -+ x x2-60.0d0*z4*y2) -+ fy1 =-2.0d0*ypre6m4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 -+ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- -+ x 20.0d0*z4*y2) -+ fz1 =-2.0d0*ypre6m4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0 -+ x *x2-13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -4 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.0d0*ypre6m4*invrq*y*(x4-6.0d0*x2*y2+y4)*(-13.0d0 -+ x *x2-13.0d0*y2+20.0d0*z2) -+ fy1 = -4.0d0*ypre6m4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 -+ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 -+ x *y2-x6+5.0d0*x2*y4) -+ fz1 = 8.0d0*ypre6m4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- -+ x 13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -3 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (-x3+3.0d0*x*y2) -+ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (3.0d0*x2*y-y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-3,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 3.d0*ypre6m3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- -+ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- -+ x 8.d0*z4*y2+3.d0*y6) -+ fy1 = -6.d0*ypre6m3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+14.d0 -+ x *z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) -+ fz1 = -3.d0*ypre6m3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -3 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-3,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -6.d0*ypre6m3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 -+ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) -+ fy1 = -3.d0*ypre6m3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 -+ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 -+ x *z4*y2-3.d0*x6) -+ fz1 = 3.d0*ypre6m3*invrq*z*(3.d0*x2-y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -2 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2 -+ x *y2+x4+2.0d0*x2*y2+y4)*(x2-y2) -+ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2- -+ x 16.0d0*z2*y2+x4+2.0d0*x2*y2+y4)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-2,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6m2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- -+ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ -+ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) -+ fy1 = -2.d0*ypre6m2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ -+ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0* -+ x x2*y4+16.d0*z6-30.d0*z2*x2*y2) -+ fz1 = -2.d0*ypre6m2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 -+ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -2 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-2,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.d0*ypre6m2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2* -+ x y2-128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0* -+ x z2*y4+y6) -+ fy1 = -2.d0*ypre6m2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2* -+ x y4-128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0* -+ x z2*x4+x6) -+ fz1 = 4.d0*ypre6m2*invrq*z*x*y*(-64.d0*z2*x2-64.d0* -+ x z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -1 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 -+ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 -+ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6m1*invrq*z*(85.d0*x2*x4+70.d0*z2*x2*y2 -+ x -100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0 -+ x *z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) -+ fy1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2* -+ x y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fz1 = -ypre6m1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ -+ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- -+ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -1 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0* -+ x z2*y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fy1 = -ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2 -+ x *y4-100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6 -+ x -12.d0*z4*x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) -+ fz1 = ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4 -+ x *y2+8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0* -+ x z2*y4-5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real spherical harmonics for m = 0 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0 -+ x *z4*y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4 -+ x -5.0d0*x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) -+ -+c-------------------------------------------------- -+c Force contributions from m = 0 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(0,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,0}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 -+ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*x -+ fy1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 -+ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y2)*y -+ fz1 = 42.d0*ypre6m0*invrq*z*(8.d0*z4*x2+8.d0*z4*y2-20.d0 -+ x *z2*x4-40.d0*z2*x2*y2-20.d0*z2*y4+5.d0*x6+15.d0*x4* -+ x y2+15.d0*x2*y4+5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +1 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0 -+ x *z2*y2+5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = ypre6p1*invrc*z*(8.0d0*z4-20.0d0*z2*x2-20.0d0 -+ x *z2*y2+5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = +1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(1,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6p1*invrq*z*(85.d0*x2*x4+70.d0*z2*x2*y2- -+ x 100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0* -+ x z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) -+ fy1 = -2.d0*ypre6p1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2*y2 -+ x +44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fz1 = -ypre6p1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ -+ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- -+ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 1 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2*y2+ -+ x 44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fy1 = ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2*y4- -+ x 100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6-12.d0*z4 -+ x *x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) -+ fz1 = -ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4*y2+ -+ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- -+ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +2 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0* -+ x z2*y2+x4+2.d0*x2*y2+y4)*(x2-y2) -+ ImYlm = 2.d0*ypre6p2*invrc*(16.d0*z4-16.d0*z2*x2-16.d0* -+ x z2*y2+x4+2.d0*x2*y2+y4)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = +2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(2,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6p2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- -+ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ -+ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) -+ fy1 = -2.d0*ypre6p2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ -+ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0 -+ x *x2*y4+16.d0*z6-30.d0*z2*x2*y2) -+ fz1 = -2.d0*ypre6p2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 -+ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 2 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(2,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6p2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2*y2- -+ x 128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0*z2*y4+y6) -+ fy1 = 2.d0*ypre6p2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2*y4- -+ x 128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0*z2*x4+x6) -+ fz1 = -4.d0*ypre6p2*invrq*z*x*y*(-64.d0*z2*x2-64.d0*z2*y2+ -+ x 16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +3 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* -+ x (x3-3.d0*x*y2) -+ ImYlm = ypre6p3*invrc*z*(8.d0*z2-3.d0*x2-3.d0*y2)* -+ x (3.d0*x2*y-y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = +3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(3,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 3.d0*ypre6p3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- -+ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- -+ x 8.d0*z4*y2+3.d0*y6) -+ fy1 = -6.d0*ypre6p3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+ -+ x 14.d0*z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) -+ fz1 = -3.d0*ypre6p3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 3 (Imaginary part ) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(3,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 6.d0*ypre6p3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 -+ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) -+ fy1 = 3.d0*ypre6p3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 -+ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 -+ x *z4*y2-3.d0*x6) -+ fz1 = -3.d0*ypre6p3*invrq*z*(3.d0*x2-y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +4 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre6p4*invrc*(10.d0*z2-x2-y2)*(4.d0*x3*y-4.d0* -+ x x*y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = +4 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.0d0*ypre6p4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ -+ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4*x2 -+ x -60.0d0*z4*y2) -+ fy1 =-2.0d0*ypre6p4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 -+ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- -+ x 20.0d0*z4*y2) -+ fz1 =-2.0d0*ypre6p4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0* -+ x x2-13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 4 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(4,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.0d0*ypre6p4*invrq*y*(x4-6.0d0*x2*y2+y4)*(-13.0d0 -+ x *x2-13.0d0*y2+20.0d0*z2) -+ fy1 = 4.0d0*ypre6p4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 -+ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 -+ x *y2-x6+5.0d0*x2*y4) -+ fz1 = -8.0d0*ypre6p4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- -+ x 13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +5 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p5*invrc*z*(x5-10.d0*x3*y2+5.d0*x*y4) -+ ImYlm = ypre6p5*invrc*z*(5.d0*x4*y-10.d0*x2*y3+y5) -+ -+c-------------------------------------------------- -+c Force contributions from m = +5 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(5,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6p5*invrq*z*(-x6+35.0d0*x4*y2-55*x2*y4 -+ x +5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) -+ fy1 = -2.0d0*ypre6p5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2*y2 -+ x +5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fz1 = -ypre6p5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 5 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(5,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.0d0*ypre6p5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2- -+ x 13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fy1 = +ypre6p5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4- -+ x y6+5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = -ypre6p5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = +6 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6p6*invrc*(x6-15.d0*x4*y2+15.d0*x2*y4-y6) -+ ImYlm = ypre6p6*invrc*(6.d0*x5*y-20.d0*x3*y3+6.d0*x*y5) -+ -+c-------------------------------------------------- -+c Force contributions from m = +6 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(6,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrq*ypre6p6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ -+ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fy1 = -invrq*ypre6p6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+ -+ x 6.0d0*x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2-z2*y4) -+ fz1 = -invrq*ypre6p6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2 -+ x *y4-y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = 6 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ImQ6bar(6,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrq*ypre6p6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0* -+ x x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) -+ fy1 = invrq*ypre6p6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2* -+ x y4-y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = -invrq*ypre6p6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2* -+ x y2+3.0d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c Add into global force and stress arrays -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+c Virial -+ -+ virord = virord - (fx*x + fy*y + fz*z) -+ -+c Stress -+ -+ strs1=strs1+x*fx -+ strs2=strs2+x*fy -+ strs3=strs3+x*fz -+ strs5=strs5+y*fy -+ strs6=strs6+y*fz -+ strs9=strs9+z*fz -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end of computing Q6 -+ -+ -+ end do ! end loop over iatm -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs1 -+ stress(2)=stress(2)+strs2 -+ stress(3)=stress(3)+strs3 -+ stress(4)=stress(4)+strs2 -+ stress(5)=stress(5)+strs5 -+ stress(6)=stress(6)+strs6 -+ stress(7)=stress(7)+strs3 -+ stress(8)=stress(8)+strs6 -+ stress(9)=stress(9)+strs9 -+ -+c tidy up -+ -+ ierr = 0 -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ -+ deallocate(solvx4,stat=ierr(4)) -+ deallocate(solvy4,stat=ierr(5)) -+ deallocate(solvz4,stat=ierr(6)) -+ deallocate(solvrmag4,stat=ierr(7)) -+ deallocate(solvimag4,stat=ierr(8)) -+ deallocate(solvrsq4 ,stat=ierr(9)) -+ deallocate(solvlist4,stat=ierr(10)) -+ deallocate(solvtype4,stat=ierr(11)) -+ -+ deallocate(solvx6,stat=ierr(12)) -+ deallocate(solvy6,stat=ierr(13)) -+ deallocate(solvz6,stat=ierr(14)) -+ deallocate(solvrmag6,stat=ierr(15)) -+ deallocate(solvimag6,stat=ierr(16)) -+ deallocate(solvrsq6 ,stat=ierr(17)) -+ deallocate(solvlist6,stat=ierr(18)) -+ deallocate(solvtype6,stat=ierr(19)) -+ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) -+ -+ deallocate(buff1,stat=ierr(1)) -+ deallocate(buff2,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) -+ -+ deallocate(q4prefactor,stat=ierr(1)) -+ deallocate(q6prefactor,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Steinhardt_Forces -+ -+ Subroutine Compute_Tet_Nlist(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c The existing neighbour list is not known by all nodes and -+c therefore we compute a new one from scratch rather than trying -+c to merge a full neighbour list across all MPI tasks or restore -+c symmetry. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ integer :: nlast,megatm -+ -+ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype -+ integer :: ninclude,ifi,ii,ztype,nnn,k -+ real(8) :: rsq,rangesq -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ ninclude = maxval(zetaninc) -+ -+ nlast = natms -+ megatm = natms -+ -+ nnn = int(dble(ninclude*nlast*1.2)/dble(megatm)) -+ -+ allocate(xdf(1:nnn),stat=ierr(1)) -+ allocate(ydf(1:nnn),stat=ierr(2)) -+ allocate(zdf(1:nnn),stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2541,0.d0) -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+ ztype = zetasite(itype) -+ if ( ztype==0 ) cycle -+ -+ nn = 0 ! Number of images to compute -+ ii = ii + 1 ! index for this list -+ ifi = 0 ! index for entries in this list -+ -+ if (ii>mxninc) call Mfrz_Error(2542,0.d0) -+ -+ do jatm = 1,nlast -+ -+ jtype = ltype(jatm) -+ -+ if ( itype/=jtype ) cycle -+ if ( iatm == jatm ) cycle -+ -+ nn = nn + 1 -+ xdf(nn) = xxx(iatm) - xxx(jatm) ! separation vector -+ ydf(nn) = yyy(iatm) - yyy(jatm) -+ zdf(nn) = zzz(iatm) - zzz(jatm) -+ -+ end do -+ -+ if ( nn > nnn ) call Mfrz_Error(2543,0.d0) -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ nn = 0 -+ do jatm = 1,nlast -+ -+ jtype = ltype(jatm) -+ -+ if ( itype/=jtype ) cycle -+ if ( iatm == jatm ) cycle -+ -+ nn = nn + 1 -+ rsq = xdf(nn)*xdf(nn) + ydf(nn)*ydf(nn) + zdf(nn)*zdf(nn) -+ -+ rangesq = zetacutoff(2,ztype)**2 -+ -+ if ( rsq < rangesq ) then -+ -+ ifi = ifi + 1 -+ flist(ifi,ii) = jatm -+ -+ end if -+ -+ end do -+ if ( ifi > mxflist ) call Mfrz_Error(2544,0.d0) -+ nflist(ii) = ifi -+ -+ end do ! end loop over iatm -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ if (any(ierr/=0))call Mfrz_Error(2545,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tet_Nlist -+ -+ Subroutine Compute_Tetrahedral(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ -+ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype -+ integer :: ninclude,ifi,ii,k,ztype,mm,katm,ktype,it -+ real(8) :: f_ij,f_ik,r_ij,r_ik,x,y,z,dot -+ real(8),parameter :: third=1.0d0/3.0d0 -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8),allocatable,dimension(:) :: buff1 -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ allocate(xdf(1:mxflist),stat=ierr(1)) -+ allocate(ydf(1:mxflist),stat=ierr(2)) -+ allocate(zdf(1:mxflist),stat=ierr(3)) -+ allocate(buff1(1:ntet),stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2546,0.d0) -+ -+ zeta_global(:) = 0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+c no tetrahedral contributions from this atom type? -+ -+ ztype = zetasite(itype) -+ if ( ztype == 0 ) cycle -+ -+ ii = ii + 1 ! index for this list -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector -+ ydf(k) = yyy(jatm) - yyy(iatm) -+ zdf(k) = zzz(jatm) - zzz(iatm) -+ -+ end do -+ -+ nn = nflist(ii) -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) -+ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ x = xdf(k) ; y = ydf(k) ; z = zdf(k) -+ -+c loop over all other entries katm -+ -+ do mm = k+1,nflist(ii) -+ -+c katm also in solvation shell of iatm -+ -+ katm = flist(mm,ii) -+ -+ r_ik = sqrt(xdf(mm)*xdf(mm) + ydf(mm)*ydf(mm) + -+ x zdf(mm)*zdf(mm)) -+ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+c The node holding the central atom keeps the contrib -+ -+ dot = (x*xdf(mm) + y*ydf(mm) + z*zdf(mm)) / (r_ij*r_ik) + -+ x third -+ zeta_global(ztype) = zeta_global(ztype) + f_ij*f_ik*dot*dot -+ end do -+ end do -+ -+ end do -+ -+ call gdsum(zeta_global(1),ntet,buff1(1:ntet)) -+ -+ do it = 1,ntet -+ zeta_global(it) = 1.0d0 - zeta_global(it)/dble(zetaninc(it)* -+ x zetann(it)) -+ end do -+ -+ deallocate(xdf ,stat=ierr(1)) -+ deallocate(ydf ,stat=ierr(2)) -+ deallocate(zdf ,stat=ierr(3)) -+ deallocate(buff1,stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tetrahedral -+ -+ Subroutine Compute_Tetrahedral_Forces(imcon,natms,engord,virord) -+ -+c--------------------------------------------------------------------- -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ real(8),intent(inout) :: engord,virord -+ -+ integer :: iatm,jatm,katm,iatm0,iatm1,istrd,nn -+ integer :: ii,k,m,itet,itype,jtype,ztype,it -+ -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ real(8) :: strs1,strs2,strs3,strs5,strs6,strs9 -+ real(8) :: xj,yj,zj,xk,yk,zk,tmpvar,tmpvar2,dot -+ real(8) :: r_ij,r_ik,f_ij,f_ik,df_ij,df_ik -+ real(8) :: invrij,invrik,ctheta -+ real(8) :: fxj,fyj,fzj,fxk,fyk,fzk -+ -+ real(8),dimension(3) :: rij_hat,rik_hat -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8),allocatable,dimension(:) :: tetprefactor -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ allocate(xdf(1:mxflist),stat=ierr(1)) -+ allocate(ydf(1:mxflist),stat=ierr(2)) -+ allocate(zdf(1:mxflist),stat=ierr(3)) -+ allocate(tetprefactor(1:ntet),stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2548,0.d0) -+ -+c Compute the prefactor -+ -+ k = nq4+nq6+1 -+ do it = 1,ntet -+ tetprefactor = dcolvar(k)/dble(zetaninc(it)*zetann(it)) -+ k = k + 1 -+ end do -+ -+c zero contribution to the stress tensor -+ -+ strs1=0.0d0 -+ strs2=0.0d0 -+ strs3=0.0d0 -+ strs5=0.0d0 -+ strs6=0.0d0 -+ strs9=0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+c no tetrahedral contributions from this atom type? -+ -+ ztype = zetasite(itype) -+ if ( ztype == 0 ) cycle -+ -+ ii = ii + 1 ! index for this list -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector -+ ydf(k) = yyy(jatm) - yyy(iatm) -+ zdf(k) = zzz(jatm) - zzz(iatm) -+ -+ end do -+ -+ nn = nflist(ii) -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) -+ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ df_ij = dfc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ xj = xdf(k) ; yj = ydf(k) ; zj = zdf(k) -+ -+ invrij = 1.0d0/r_ij -+ -+ rij_hat(1) = xj*invrij -+ rij_hat(2) = yj*invrij -+ rij_hat(3) = zj*invrij -+ -+ do m = k + 1,nflist(ii) -+ -+ r_ik = sqrt(xdf(m)*xdf(m) + ydf(m)*ydf(m) + zdf(m)*zdf(m)) -+ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ df_ik = dfc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ xk = xdf(m) ; yk = ydf(m) ; zk = zdf(m) -+ -+ invrik = 1.0d0/r_ik -+ -+ rik_hat(1) = xk*invrik -+ rik_hat(2) = yk*invrik -+ rik_hat(3) = zk*invrik -+ -+ ctheta = dot_product(rij_hat,rik_hat) -+ dot = ctheta + third -+ -+ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrij -+ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ij*f_ik -+ -+c force between atom i and atom j due to second term -+c i.e. ( f_ij*f_ik*dot*dot ) -+ -+ fxj = tmpvar*(rik_hat(1) - rij_hat(1)*ctheta) + -+ x tmpvar2*rij_hat(1) -+ fyj = tmpvar*(rik_hat(2) - rij_hat(2)*ctheta) + -+ x tmpvar2*rij_hat(2) -+ fzj = tmpvar*(rik_hat(3) - rij_hat(3)*ctheta) + -+ x tmpvar2*rij_hat(3) -+ -+ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrik -+ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ik*f_ij -+ -+c force between atom i and atom k due to second term -+c i.e ( f_ij*f_ik*dot*dot ) -+ -+ fxk = tmpvar*(rij_hat(1) - rik_hat(1)*ctheta) + -+ x tmpvar2*rik_hat(1) -+ fyk = tmpvar*(rij_hat(2) - rik_hat(2)*ctheta) + -+ x tmpvar2*rik_hat(2) -+ fzk = tmpvar*(rij_hat(3) - rik_hat(3)*ctheta) + -+ x tmpvar2*rik_hat(3) -+ -+c Add in to forces, virial and stress tensor -+ -+ katm = flist(m,ii) -+ -+ fxx(iatm) = fxx(iatm) + fxj + fxk -+ fyy(iatm) = fyy(iatm) + fyj + fyk -+ fzz(iatm) = fzz(iatm) + fzj + fzk -+ -+ fxx(jatm) = fxx(jatm) - fxj -+ fyy(jatm) = fyy(jatm) - fyj -+ fzz(jatm) = fzz(jatm) - fzj -+ -+ fxx(katm) = fxx(katm) - fxk -+ fyy(katm) = fyy(katm) - fyk -+ fzz(katm) = fzz(katm) - fzk -+ -+ virord = virord - fxj*xj - fyj*yj - fzj*zj -+ virord = virord - fxk*xk - fyk*yk - fzk*zk -+ -+ strs1 = strs1 + xk*fxk + xj*fxj -+ strs2 = strs2 + xk*fyk + xj*fyj -+ strs3 = strs3 + xk*fzk + xj*fzj -+ strs5 = strs5 + yk*fyk + yj*fyj -+ strs6 = strs6 + yk*fzk + yj*fzj -+ strs9 = strs9 + zk*fzk + zj*fzj -+ -+ end do -+ end do -+ end do -+ -+c Complete stress tensor -+ -+ stress(1)=stress(1)+strs1 -+ stress(2)=stress(2)+strs2 -+ stress(3)=stress(3)+strs3 -+ stress(4)=stress(4)+strs2 -+ stress(5)=stress(5)+strs5 -+ stress(6)=stress(6)+strs6 -+ stress(7)=stress(7)+strs3 -+ stress(8)=stress(8)+strs6 -+ stress(9)=stress(9)+strs9 -+ -+ -+c Tidy up -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tetrahedral_Forces -+ -+ Subroutine Mfrz_Error(kode,arg) -+ -+c--------------------------------------------------------------------- -+c -+c Author W. Smith Daresbury Laboratory January 2011 -+c Adapted from D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : nrite,nhist,nread,nconf,nstats, -+ x nrest,nfield,ntable,nevnt -+ -+ implicit none -+ integer,intent(in) :: kode -+ real(8),intent(in) :: arg -+ -+ if(onroot)then -+ -+ if(kode.eq.2500)then -+ -+ write(nrite,"( -+ x 'Error in number of collective variables - '// -+ x 'ncolvar too small?' -+ x )") -+ -+ elseif(kode.eq.2501)then -+ -+ write(nrite,"( -+ x 'Wang-Landau style recursion not yet implemented'// -+ x 'for ncolvar > 1' -+ x )") -+ -+ elseif(kode.eq.2502)then -+ -+ write(nrite,"('Unrecognised Gaussian height scheme')") -+ -+ elseif(kode.eq.2503)then -+ -+ write(nrite,"('Error maxhis exceeded in metadynamics')") -+ -+ elseif(kode.eq.2504)then -+ -+ write(nrite,"( -+ x 'Error allocating comms buffer in compute_bias_potential' -+ x )") -+ -+ elseif(kode.eq.2505)then -+ -+ write(nrite,"('Error allocating driven array')") -+ -+ elseif(kode.eq.2506)then -+ -+ write(nrite,"('Could not open METACONTROL')") -+ -+ elseif(kode.eq.2508)then -+ -+ write(nrite,"('Comms error in metadynamics setup')") -+ -+ elseif(kode.eq.2509)then -+ -+ write(nrite,"( -+ x 'Cannot bias local and global PE in same run' -+ x )") -+ -+ elseif(kode.eq.2510)then -+ -+ write(nrite,"('Error allocating local force arrays')") -+ -+ elseif(kode.eq.2511)then -+ -+ write(nrite,"( -+ x 'Error allocating collective variables arrays' -+ x )") -+ -+ elseif(kode.eq.2512)then -+ -+ write(nrite,"('Error allocating Wang-Landau bins')") -+ -+ elseif(kode.eq.2515)then -+ -+ write(nrite,"( -+ x 'Error allocating Steinhardt parameter arrays' -+ x )") -+ -+ elseif(kode.eq.2516)then -+ -+ write(nrite,"('Could not open STEINHARDT')") -+ -+ elseif(kode.eq.2517)then -+ -+ write(nrite,"('Error allocating q4site')") -+ -+ elseif(kode.eq.2518)then -+ -+ write(nrite,"('Error allocating q6site')") -+ -+ elseif(kode.eq.2519)then -+ -+ write(nrite,"('Error deallocating buff')") -+ -+ elseif(kode.eq.2521)then -+ -+ write(nrite,"('Error reading line ',i5,' of STEINHARDT' -+ x )")nint(arg) -+ -+ elseif(kode.eq.2522)then -+ -+ write(nrite,"( -+ x 'Error allocating Steinhardt parameter arrays' -+ x )") -+ -+ elseif(kode.eq.2523)then -+ -+ write(nrite,"('Could not open ZETA')") -+ -+ elseif(kode.eq.2524)then -+ -+ write(nrite,"('Error allocating zetasite')") -+ -+ elseif(kode.eq.2525)then -+ -+ write(nrite,"('Error allocating full neighbour list')") -+ -+ elseif(kode.eq.2527)then -+ -+ write(nrite,"( -+ x 'Number of collective variables incorrect for specified'// -+ x 'order parameters' -+ x )") -+ -+ elseif(kode.eq.2529)then -+ -+ write(nrite,"('Error reading line ',i5,' of ZETA' -+ x )")nint(arg) -+ -+ elseif(kode.eq.2531)then -+ -+ write(nrite,"('Comms error on reading METADYNAMICS')") -+ -+ elseif(kode.eq.2532)then -+ -+ write(nrite,"('Error in fc function - out of range')") -+ write(nrite,"('Value of r was ',1p,e14.6)")arg -+ -+ elseif(kode.eq.2533)then -+ -+ write(nrite,"( -+ x 'Error allocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2534)then -+ -+ write(nrite,"('Error allocating comms buffer arrays')") -+ -+ elseif(kode.eq.2535)then -+ -+ write(nrite,"('Solvation list overrun')") -+ -+ elseif(kode.eq.2536)then -+ -+ write(nrite,"( -+ x 'Error deallocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2537)then -+ -+ write(nrite,"('Error deallocating comms buffer arrays')") -+ -+ elseif(kode.eq.2538)then -+ -+ write(nrite,"( -+ x 'Error allocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2540)then -+ -+ write(nrite,"('Error allocating force prefactor arrays')") -+ -+ elseif(kode.eq.2541)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2542)then -+ -+ write(nrite,"( -+ x 'Error in metafreeze_module.f90 mxninc too small' -+ x )") -+ -+ elseif(kode.eq.2543)then -+ -+ write(nrite,"('nnn too small in compute_tet_nlist')") -+ -+ elseif(kode.eq.2544)then -+ -+ write(nrite,"('mxflist too small in metafreeze_module')") -+ -+ elseif(kode.eq.2545)then -+ -+ write(nrite,"( -+ x 'Memory deallocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2546)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2547)then -+ -+ write(nrite,"( -+ x 'Memory deallocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2548)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ endif -+ -+c close all i/o channels -+ -+ close (nrite) -+ close (nhist) -+ close (nread) -+ close (nconf) -+ close (nstats) -+ close (nrest) -+ close (nfield) -+ close (ntable) -+ close (nevnt) -+ close (stn) -+ close (zta) -+ close (mtd) -+ -+ endif -+ -+c shut down communications -+ -+ call gsync() -+ call exitcomms() -+ -+ end Subroutine Mfrz_Error -+ -+ end module metafreeze_module -+ -diff -urN dl_class_1.9.orig/srcmod/metal_module.f dl_class_1.9/srcmod/metal_module.f ---- dl_class_1.9.orig/srcmod/metal_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/metal_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1669 @@ -+ module metal_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining metal potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ logical lmetab -+ integer, allocatable :: ltpmet(:),lstmet(:) -+ real(8), allocatable :: prmmet(:,:),vmet(:,:,:),dmet(:,:,:) -+ real(8), allocatable :: rho(:),elrcm(:),vlrcm(:),fmet(:,:,:) -+ -+ save lmetab,ltpmet,lstmet,prmmet,vmet,dmet,fmet,rho,elrcm,vlrcm -+ -+ contains -+ -+ subroutine alloc_met_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ integer i,fail,idnode -+ -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (ltpmet(mxmet),stat=fail(1)) -+ allocate (lstmet(mxmet),stat=fail(2)) -+ allocate (prmmet(mxmet,mxpmet),stat=fail(3)) -+ allocate (vmet(mxgrid,mxmet,2),stat=fail(4)) -+ allocate (dmet(mxgrid,mxmet,2),stat=fail(5)) -+ allocate (rho(mxatms),stat=fail(6)) -+ allocate (elrcm(0:mxsmet),stat=fail(7)) -+ allocate (vlrcm(0:mxsmet),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1280) -+ enddo -+ -+ end subroutine alloc_met_arrays -+ -+ subroutine define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rmet,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining metal potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom1,atom2 -+ character*1 message(80) -+ integer idnode,ntpmet,ntpatm,idum,imet,j -+ integer keypot,numpar,katm1,katm2,keymet,ntab,i,fail,itpmet -+ integer jtpatm -+ real(8) rmet,engunit -+ -+ real(8), allocatable :: parpot(:) -+ allocate (parpot(mxpmet),stat=fail) -+ -+ ntpmet=intstr(record,lenrec,idum) -+ -+ lmetab=.false. -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified metal ', -+ x 'potentials',i10)") ntpmet -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ',3x, -+ x ' key',30x,'parameters'/,/)") -+ -+ endif -+ -+ if(ntpmet.ge.mxmet) call error(idnode,71) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do imet=1,mxmet -+ lstmet(imet)=0 -+ ltpmet(imet)=0 -+ enddo -+ -+ do itpmet=1,ntpmet -+ -+ do i=1,mxpmet -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'stch') then -+ keypot=1 -+ numpar=5 -+ else if(keyword(1:4).eq.'fnsc') then -+ keypot=2 -+ numpar=7 -+ else if(keyword(1:4).eq.'gupt') then -+ keypot=3 -+ numpar=5 -+ elseif(keyword(1:4).eq.'eam ') then -+ keypot=999 -+ lmetab=.true. -+ numpar=0 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,461) -+ endif -+ -+ if(.not.lmetab)then -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ parpot(4)=dblstr(record,lenrec,idum) -+ parpot(5)=dblstr(record,lenrec,idum) -+ parpot(6)=dblstr(record,lenrec,idum) -+ parpot(7)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,2a8,2x,a4,3x,1p,9e13.5)") -+ x atom1,atom2,keyword(1:4),(parpot(j),j=1,numpar) -+ -+ endif -+ -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm1.eq.0.or.katm2.eq.0) then -+ call error(idnode,463) -+ endif -+ -+ keymet=loc2(katm1,katm2) -+ -+c convert energies to internal unit -+ -+ if(keymet.ge.mxmet) call error(idnode,465) -+ -+ parpot(1)=parpot(1)*engunit -+ -+ if(keypot.eq.2)then -+ -+ parpot(2)=parpot(2)*engunit -+ parpot(3)=parpot(3)*engunit -+ parpot(5)=parpot(5)*engunit -+ -+ endif -+ -+ if(keypot.eq.3)then -+ parpot(4)=parpot(4)*engunit -+ endif -+ -+ if(lstmet(keymet).ne.0) call error(idnode,141) -+ lstmet(keymet)=itpmet -+ ltpmet(itpmet)=keypot -+ if(itpmet.gt.1)then -+ if(keypot.ne.ltpmet(itpmet-1))call error(idnode,72) -+ endif -+ -+ if(.not.lmetab)then -+ -+ do i=1,numpar -+ prmmet(itpmet,i)=parpot(i) -+ enddo -+ -+ endif -+ -+ enddo -+ -+c check for unspecified atom-atom potentials -+ -+ ntab=(ntpatm*(ntpatm+1))/2 -+ -+ if(ntpmet.lt.ntab) then -+ -+ call warning(idnode,110,0.d0,0.d0,0.d0) -+ -+ do i=1,ntab -+ if(lstmet(i).eq.0) lstmet(i)=ntpmet+1 -+ enddo -+ -+c set zero potential for undefined interactions -+ -+ do i=1,mxmet -+ -+ vmet(1,i,1)=0.d0 -+ vmet(1,i,2)=0.d0 -+ dmet(1,i,1)=0.d0 -+ dmet(1,i,2)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c generate metal force arrays -+ -+ call metgen(idnode,ntpatm,rmet) -+ -+ if(lmetab) -+ x call mettab(ntpatm,idnode,rmet,engunit) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_metals -+ -+ subroutine metdens -+ x (idnode,imcon,mxnode,natms,engmet,virden) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local density in metals -+c using the verlet neighbour list and sutton-chen potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,imcon,mxnode,natms,i,j,k,ii,k0,l -+ real(8) engmet,engtmp,virden,rhosqr,rrr,ppp,fk0,fk1,fk2,t1,t2 -+ -+ safe=.true. -+ -+c initialise energy accumulator -+ -+ engmet=0.d0 -+ virden=0.d0 -+ -+c initialise density array -+ -+ do i=1,natms -+ rho(i)=0.d0 -+ enddo -+ -+c calculate local atomic density -+ -+ ii=0 -+ -+c outer loop over atoms -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ enddo -+ -+ if(lmetab)then -+ -+c calculate EAM density contributions -+ -+ call eamden(safe,i,lentry(ii)) -+ -+ else -+ -+c calculate FS density contributions -+ -+ call fsden(safe,i,lentry(ii)) -+ -+ endif -+ -+ enddo -+ -+c global sum of local atomic densities -+ -+ if(mxnode.gt.1)call gdsum(rho,natms,buffer) -+ -+c calculate embedding energy -+ -+ if(lmetab)then -+ -+c density terms for eam potentials -+ -+ do i=1,natms -+ -+ if(rho(i).gt.0.d0)then -+ -+ k0=ltype(i) -+ rrr=rho(i)-fmet(2,k0,1) -+ l=min(nint(rrr/fmet(4,k0,1)),int(fmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=(rrr/fmet(4,k0,1))-dble(l) -+ -+c calculate embedding energy using 3-point interpolation -+ -+ fk0=fmet(l-1,k0,1) -+ fk1=fmet(l,k0,1) -+ fk2=fmet(l+1,k0,1) -+ -+ t1=fk1+(fk1-fk0)*ppp -+ t2=fk1+(fk2-fk1)*ppp -+ if(ppp.lt.0.d0)then -+ engtmp=-(t1+0.5d0*(t2-t1)*(ppp+1.d0)) -+ else -+ engtmp=-(t2+0.5d0*(t2-t1)*(ppp-1.d0)) -+ endif -+ -+ engmet=engmet+engtmp -+ -+c calculate derivative of embedding function wrt density using 3-point -+c interpolation - store result in rho array -+ -+ fk0=fmet(l-1,k0,2) -+ fk1=fmet(l,k0,2) -+ fk2=fmet(l+1,k0,2) -+ -+ t1=fk1+(fk1-fk0)*ppp -+ t2=fk1+(fk2-fk1)*ppp -+ if(ppp.lt.0.d0)then -+ rho(i)=(t1+0.5d0*(t2-t1)*(ppp+1.d0)) -+ else -+ rho(i)=(t2+0.5d0*(t2-t1)*(ppp-1.d0)) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ else -+ -+c analytical square root of density dependence -+ -+ do i=1,natms -+ -+ if(rho(i).gt.0.d0)then -+ -+ rhosqr=sqrt(rho(i)+elrcm(ltype(i))) -+ engmet=engmet+rhosqr -+ rho(i)=0.5d0/rhosqr -+ virden=virden+vlrcm(ltype(i))/rhosqr -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ engmet=-engmet/dble(mxnode) -+ virden=virden/dble(mxnode) -+ -+c check interpolation is safe -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ return -+ end subroutine metdens -+ -+ subroutine fsden(safe,iatm,ik) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local atomic density -+c for FS type metal potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer iatm,jatm,ik,m,k0,l -+ real(8) rdr,ai,aj,ab,rsq,rrr,ppp,t1,t2 -+ real(8) vk0,vk1,vk2,density -+ -+c start of primary loop for density -+ -+ ai=dble(ltype(iatm)) -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ -+ aj=dble(ltype(jatm)) -+ if(ai.gt.aj) then -+ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 -+ else -+ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 -+ endif -+ -+ k0=lstmet(int(ab)) -+ -+ if((ltpmet(k0).ge.1).and.(abs(dmet(1,k0,1)).gt.0.d0))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+c apply cutoff condition -+ -+ if(rsq.le.dmet(3,k0,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,k0,1) -+ rrr=sqrt(rsq)-dmet(2,k0,1) -+ l=min(nint(rrr*rdr),int(dmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,k0,1) -+ vk1=dmet(l,k0,1) -+ vk2=dmet(l+1,k0,1) -+ -+ t1=vk1+ppp*(vk1-vk0) -+ t2=vk1+ppp*(vk2-vk1) -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ if(ai.gt.aj)then -+ -+ rho(iatm)=rho(iatm)+density*dmet(1,k0,2) -+ rho(jatm)=rho(jatm)+density*dmet(2,k0,2) -+ -+ else -+ -+ rho(iatm)=rho(iatm)+density*dmet(2,k0,2) -+ rho(jatm)=rho(jatm)+density*dmet(1,k0,2) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine fsden -+ -+ subroutine eamden(safe,iatm,ik) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local atomic density -+c for EAM type metal potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ logical safe -+ integer iatm,jatm,ik,m,l,ktyp1,ktyp2 -+ real(8) rdr,rsq,rrr,ppp,t1,t2 -+ real(8) vk0,vk1,vk2,density -+ -+c start of primary loop for density -+ -+ ktyp1=ltype(iatm) -+ -+ do m=1,ik -+ -+c first metal atom density -+ -+ jatm=ilist(m) -+ ktyp2=ltype(jatm) -+ -+ if(abs(dmet(1,ktyp2,1)).gt.0.d0)then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.le.dmet(3,ktyp2,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,ktyp2,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp2,1) -+ l=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,ktyp2,1) -+ vk1=dmet(l,ktyp2,1) -+ vk2=dmet(l+1,ktyp2,1) -+ -+ t1=vk1+ppp*(vk1-vk0) -+ t2=vk1+ppp*(vk2-vk1) -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ rho(iatm)=rho(iatm)+density -+ if(ktyp1.eq.ktyp2)rho(jatm)=rho(jatm)+density -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c second metal atom density -+ -+ if(ktyp1.ne.ktyp2)then -+ -+ if(abs(dmet(1,ktyp1,1)).gt.0.d0)then -+ -+c apply truncation of potential -+ -+ if(rsq.le.dmet(3,ktyp1,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,ktyp1,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp1,1) -+ l=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,ktyp1,1) -+ vk1=dmet(l,ktyp1,1) -+ vk2=dmet(l+1,ktyp1,1) -+ -+ t1=vk1+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*ppp -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ rho(jatm)=rho(jatm)+density -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine eamden -+ -+ subroutine metfrc(safe,iatm,ik,engmet,virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating metal forces -+c for EAM and FS potentials using a verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer iatm,jatm,ik,m,k0,l,ld,ktyp1,ktyp2 -+ real(8) engmet,virmet,strs -+ real(8) rdr,rsq,rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2 -+ real(8) gamma,gamma1,gamma2,gamma3,fx,fy,fz,fi -+ dimension fi(3),strs(6) -+ -+CDIR$ CACHE_ALIGN fi -+ -+c initialise potential energy and virial -+ -+ engmet=0.d0 -+ virmet=0.d0 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ -+c store forces for iatm -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ ktyp1=ltype(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ ktyp2=ltype(jatm) -+ k0=lstmet(loc2(ktyp1,ktyp2)) -+ -+ if((ltpmet(k0).gt.0).and.(abs(vmet(1,k0,1)).gt.0.d0))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.le.vmet(3,k0,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/vmet(4,k0,1) -+ rrr=sqrt(rsq)-vmet(2,k0,1) -+ l=min(nint(rrr*rdr),int(vmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ gamma1=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vmet(l-1,k0,1) -+ vk1=vmet(l,k0,1) -+ vk2=vmet(l+1,k0,1) -+ -+ t1=vk1+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*ppp -+ if(ppp.lt.0.d0)then -+ engmet=engmet+t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ engmet=engmet+t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+c calculate pair forces using 3-point interpolation -+ -+ gk0=vmet(l-1,k0,2) -+ gk1=vmet(l,k0,2) -+ gk2=vmet(l+1,k0,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma1=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma1=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+c calculate embedding forces using 3-point interpolation -+ -+ if(lmetab)then -+ -+ if(rsq.le.dmet(3,ktyp2,1)**2)then -+ -+ rdr=1.d0/dmet(4,ktyp2,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp2,1) -+ ld=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) -+ if(ld.lt.1)then -+ -+ safe=.false. -+ gamma2=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(ld) -+ -+ gk0=dmet(ld-1,ktyp2,2) -+ gk1=dmet(ld,ktyp2,2) -+ gk2=dmet(ld+1,ktyp2,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+ else -+ -+ gamma2=0.d0 -+ -+ endif -+ -+ if(ktyp1.eq.ktyp2)then -+ -+ gamma3=gamma2 -+ -+ elseif(rsq.le.dmet(3,ktyp1,1)**2)then -+ -+ rdr=1.d0/dmet(4,ktyp1,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp1,1) -+ ld=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) -+ if(ld.lt.1)then -+ -+ safe=.false. -+ gamma3=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(ld) -+ gk0=dmet(ld-1,ktyp1,2) -+ gk1=dmet(ld,ktyp1,2) -+ gk2=dmet(ld+1,ktyp1,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma3=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma3=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+ else -+ -+ gamma3=0.d0 -+ -+ endif -+ -+ gamma=(gamma1+(gamma2*rho(iatm)+gamma3*rho(jatm)))/rsq -+ -+ else -+ -+ if(safe.and.rsq.le.dmet(3,k0,1)**2)then -+ -+ gk0=dmet(l-1,k0,2) -+ gk1=dmet(l,k0,2) -+ gk2=dmet(l+1,k0,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ else -+ -+ gamma2=0.d0 -+ -+ endif -+ -+ if(ktyp1.gt.ktyp2)then -+ -+ gamma=(gamma1-gamma2*(rho(iatm)*dmet(1,k0,2)+ -+ x rho(jatm)*dmet(2,k0,2)))/rsq -+ -+ else -+ -+ gamma=(gamma1-gamma2*(rho(iatm)*dmet(2,k0,2)+ -+ x rho(jatm)*dmet(1,k0,2)))/rsq -+ -+ endif -+ -+ endif -+ -+c calculate forces -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+c calculate virial -+ -+ virmet=virmet-gamma*rsq -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ return -+ end subroutine metfrc -+ -+ subroutine metgen(idnode,ntpatm,rmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating potential energy and -+c force arrays for metal potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,kmet,mmet,katm1,katm2,ntpatm,imet,nmet -+ integer idnode,nnn,mmm -+ real(8) dlrpot,rmet,rrr,eps,sig,cc0,cc1,cc2,ccc -+ real(8) ddd,bet,cut1,cut2,aaa,rr0,ppp,qqq -+ -+c define grid resolution for potential arrays -+ -+ dlrpot=rmet/dble(mxgrid-1) -+ -+c construct arrays for metal potentials -+ -+ kmet=0 -+ do katm1=1,ntpatm -+ -+ do katm2=1,katm1 -+ -+ kmet=kmet+1 -+ imet=lstmet(kmet) -+ -+ if(ltpmet(imet).gt.0)then -+ -+c store array specification parameters -+ -+ vmet(1,imet,1)=dble(mxgrid) -+ vmet(2,imet,1)=0.d0 -+ vmet(3,imet,1)=rmet -+ vmet(4,imet,1)=dlrpot -+ -+ do i=1,4 -+ -+ vmet(i,imet,2)=vmet(i,imet,1) -+ dmet(i,imet,1)=vmet(i,imet,1) -+ dmet(i,imet,2)=0.d0 -+ -+ enddo -+ -+ if(ltpmet(imet).eq.1)then -+ -+c sutton-chen potentials -+ -+ eps=prmmet(imet,1) -+ sig=prmmet(imet,2) -+ nnn=nint(prmmet(imet,3)) -+ mmm=nint(prmmet(imet,4)) -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=eps*(sig/rrr)**nnn -+ vmet(i,imet,2)=dble(nnn)*eps*(sig/rrr)**nnn -+ dmet(i,imet,1)=(sig/rrr)**mmm -+ dmet(i,imet,2)=dble(mmm)*(sig/rrr)**mmm -+ -+ enddo -+ -+ if(katm1.eq.katm2)then -+ -+ dmet(1,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 -+ dmet(2,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 -+ -+ else -+ -+ nmet=lstmet((katm1*(katm1+1))/2) -+ mmet=lstmet((katm2*(katm2+1))/2) -+ dmet(1,imet,2)=(prmmet(nmet,1)*prmmet(nmet,5))**2 -+ dmet(2,imet,2)=(prmmet(mmet,1)*prmmet(mmet,5))**2 -+ -+ endif -+ -+ else if(ltpmet(imet).eq.2)then -+ -+c finnis sinclair potentials -+ -+ cc0=prmmet(imet,1) -+ cc1=prmmet(imet,2) -+ cc2=prmmet(imet,3) -+ ccc=prmmet(imet,4) -+ ddd=prmmet(imet,6) -+ bet=prmmet(imet,7) -+ cut1=ccc+4.d0*dlrpot -+ cut2=ddd+4.d0*dlrpot -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=0.d0 -+ vmet(i,imet,2)=0.d0 -+ dmet(i,imet,1)=0.d0 -+ dmet(i,imet,2)=0.d0 -+ -+ if(rrr.le.cut1)then -+ -+ vmet(i,imet,1)=(cc0+cc1*rrr+cc2*rrr*rrr)*(rrr-ccc)**2 -+ vmet(i,imet,2)=-rrr*(2.d0*(cc0+cc1*rrr+cc2*rrr*rrr)* -+ x (rrr-ccc)+(cc1+2.d0*cc2*rrr)*(rrr-ccc)**2) -+ -+ endif -+ -+ if(rrr.le.cut2)then -+ -+ dmet(i,imet,1)=(rrr-ddd)**2+bet*(rrr-ddd)**3/ddd -+ dmet(i,imet,2)=-rrr*(2.d0*(rrr-ddd)+ -+ x 3.d0*bet*(rrr-ddd)**2/ddd) -+ -+ endif -+ -+ enddo -+ -+ if(katm1.eq.katm2)then -+ -+ dmet(1,imet,2)=prmmet(imet,5)**2 -+ dmet(2,imet,2)=prmmet(imet,5)**2 -+ -+ else -+ -+ nmet=lstmet((katm1*(katm1+1))/2) -+ mmet=lstmet((katm2*(katm2+1))/2) -+ dmet(1,imet,2)=prmmet(nmet,5)**2 -+ dmet(2,imet,2)=prmmet(mmet,5)**2 -+ -+ endif -+ -+ else if(ltpmet(imet).eq.3)then -+ -+c gupta potentials -+ -+ aaa=prmmet(imet,1) -+ rr0=prmmet(imet,2) -+ ppp=prmmet(imet,3) -+ qqq=prmmet(imet,5) -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=aaa*exp(-ppp*(rrr-rr0)/rr0) -+ vmet(i,imet,2)=vmet(i,imet,1)*rrr*ppp/rr0 -+ dmet(i,imet,1)=exp(-2.d0*qqq*(rrr-rr0)/rr0) -+ dmet(i,imet,2)=2.d0*dmet(i,imet,1)*rrr*qqq/rr0 -+ -+ enddo -+ -+ dmet(1,imet,2)=prmmet(imet,4)**2 -+ dmet(2,imet,2)=prmmet(imet,4)**2 -+ -+ else if(.not.lmetab)then -+ -+ call error(idnode,151) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine metgen -+ -+ subroutine lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rmet,volm) -+ -+c************************************************************************* -+c -+c DL_POLY subroutine to evaluate long-range corrections to -+c pressure and energy in a periodic metal system. -+c -+c copyright daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*************************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,imcon,natms,ntpatm,i,ka,j -+ integer kmet,k0,k1,k2 -+ real(8) engunit,rmet,volm,twopi,forpi,eps,sig,nnn,mmm,ccc -+ real(8) elrcm0,elrcm1,elrcm2,vlrcm0,vlrcm1,vlrcm2,aaa,rr0,ppp -+ real(8) zet,qqq,eee -+ -+ save newjob -+ data newjob/.true./ -+ -+ twopi=2.0d0*pi -+ forpi=4.0d0*pi -+ -+c initalise counter arrays -+ -+ do i=1,mxsmet -+ numtyp(i)=0 -+ enddo -+ -+c evaluate species populations in system -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp(ka)=numtyp(ka)+1 -+ -+ enddo -+ -+c number densities -+ -+ do i=1,ntpatm -+ dens(i)=dble(numtyp(i))/volm -+ enddo -+ -+c long range corrections to density, energy and pressure -+ -+ do i=0,mxsmet -+ -+ elrcm(i)=0.d0 -+ vlrcm(i)=0.d0 -+ -+ enddo -+ -+ if(imcon.ne.0.and.imcon.ne.6) then -+ -+ kmet=0 -+ do i=1,ntpatm -+ -+ do j=1,i -+ -+ elrcm0=0.d0 -+ elrcm1=0.d0 -+ elrcm2=0.d0 -+ vlrcm0=0.d0 -+ vlrcm1=0.d0 -+ vlrcm2=0.d0 -+ -+ kmet=kmet+1 -+ k0=lstmet(kmet) -+ -+ if(ltpmet(k0).eq.1) then -+ -+c sutton-chen potentials -+ -+ eps=prmmet(k0,1) -+ sig=prmmet(k0,2) -+ nnn=prmmet(k0,3) -+ mmm=prmmet(k0,4) -+ ccc=prmmet(k0,5) -+ -+ elrcm0=eps*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) -+ vlrcm0=eps*nnn*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) -+ if(i.ne.j) then -+ elrcm0=elrcm0*2.d0 -+ vlrcm0=vlrcm0*2.d0 -+ endif -+ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 -+ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 -+ -+ if(i.eq.j) then -+ -+ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (eps*ccc)**2 -+ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 -+ -+ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (eps*ccc)**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 -+ -+ else -+ -+ k1=lstmet((i*(i+1))/2) -+ k2=lstmet((j*(j+1))/2) -+ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k1,1)*prmmet(k1,5))**2 -+ elrcm2=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k2,1)*prmmet(k2,5))**2 -+ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 -+ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 -+ -+ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k1,1)*prmmet(k1,5))**2 -+ vlrcm2=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k2,1)*prmmet(k2,5))**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 -+ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 -+ -+ endif -+ -+ else if(ltpmet(k0).eq.3) then -+ -+c gupta potentials -+ -+ aaa=prmmet(k0,1) -+ rr0=prmmet(k0,2) -+ ppp=prmmet(k0,3) -+ zet=prmmet(k0,4) -+ qqq=prmmet(k0,5) -+ eee=exp(-ppp*(rmet-rr0)/rr0) -+ -+ elrcm0=aaa*(rr0/ppp)*(rmet**2+2.d0*rmet*(rr0/ppp)+ -+ x 2.d0*(rr0/ppp)**2)*eee -+ vlrcm0=aaa*(rmet**3+3.d0*rmet**2*(rr0/ppp)+ -+ x 6.d0*rmet*(rr0/ppp)**2+6.d0*(rr0/rmet)**3)*eee -+ if(i.ne.j) then -+ elrcm0=elrcm0*2.d0 -+ vlrcm0=vlrcm0*2.d0 -+ endif -+ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 -+ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 -+ -+ eee=exp(-2.d0*qqq*(rmet-rr0)/rr0) -+ -+ if(i.eq.j) then -+ -+ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee*zet**2 -+ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 -+ -+ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 -+ -+ else -+ -+ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* -+ x zet**2 -+ elrcm2=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* -+ x zet**2 -+ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 -+ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 -+ -+ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm2=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 -+ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/, -+ x 'long range corrections for metal potentials',/)") -+ write(nrite, -+ x "('short range energy and virial corrections:', -+ x 1p,2e15.6,/)") -+ x elrcm(0)/engunit,vlrcm(0)/engunit -+ write(nrite, -+ x "('density dependent energy and virial corrections',/)") -+ -+ do i=1,ntpatm -+ -+ kmet=lstmet((i*(i+1))/2) -+ if(lstmet(kmet).gt.0)then -+ -+ write(nrite,"(25x,a8,1p,2e15.6)")unqatm(i), -+ x elrcm(i)/engunit,vlrcm(i)/engunit -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lrcmetal -+ -+ subroutine mettab(ntpatm,idnode,rmet,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading potential energy and -+c force arrays for EAM metal forces only -+c -+c copyright - daresbury laboratory -+c author - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 atom1,atom2,type -+ integer idnode,ntpatm,idum,fail -+ integer imet,katm1,katm2,jtpatm,i,j,k,ktype -+ integer numpot,numpts,ipot -+ real(8) rmet,engunit,start,finish -+ data fail/0/ -+ -+c allocate embedding array -+ -+ allocate(fmet(mxgrid,mxmet,2),stat=fail) -+ if(fail.ne.0)call error(idnode,36) -+ -+c define zero function for undefined interactions -+ -+ do i=1,mxmet -+ -+ fmet(1,i,1)=0.d0 -+ fmet(1,i,2)=0.d0 -+ -+ enddo -+ -+ if(idnode.eq.0)open (ntable,file='TABEAM') -+ -+c skip header record -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ -+c read number of potential functions in file -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ numpot=intstr(record,lenrec,idum) -+ -+ do ipot=1,numpot -+ -+c read data type, atom labels, number of points, start and end -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ -+c indentify data type -+ -+ ktype=1 -+ if(findstring('dens',record,idum).or. -+ x findstring('DENS',record,idum))ktype=2 -+ if(findstring('embe',record,idum).or. -+ x findstring('EMBE',record,idum))ktype=3 -+ call getword(type,record,8,lenrec) -+ -+c identify atom types -+ -+ call getword(atom1,record,8,lenrec) -+ if(ktype.eq.1)then -+ call getword(atom2,record,8,lenrec) -+ else -+ atom2=atom1 -+ endif -+ -+c data specifiers -+ -+ numpts=intstr(record,lenrec,idum) -+ start=dblstr(record,lenrec,idum) -+ finish=dblstr(record,lenrec,idum) -+ -+c check atom indentities -+ -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm1.eq.0.or.katm2.eq.0) then -+ if(idnode.eq.0) -+ x write(nrite,'(a)') ' **** '//atom1//' *** '//atom2//' ****' -+ call error(idnode,81) -+ endif -+ -+c check array dimensions -+ -+ if(mxbuff.lt.numpts+4)then -+ -+ if(idnode.eq.0) -+ x write(nrite,*) 'mxbuff must be >=',numpts+4,' in mettab' -+ call error(idnode,28) -+ -+ endif -+ -+c store working parameters (start shifted for DL_POLY interpolation) -+ -+ buffer(1)=dble(numpts+4) -+ buffer(4)=(finish-start)/dble(numpts-1) -+ buffer(2)=start-5.d0*buffer(4) -+ buffer(3)=finish -+ if(idnode.eq.0) -+ x write(nrite,"(16x,2a8,2x,a4,3x,1p,4e13.5)") -+ x atom1,atom2,type,dble(numpts),start,finish,buffer(4) -+ -+c read potential arrays -+ -+ k=4 -+ do j=1,(numpts+3)/4 -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ buffer(k+1)=dblstr(record,lenrec,idum) -+ buffer(k+2)=dblstr(record,lenrec,idum) -+ buffer(k+3)=dblstr(record,lenrec,idum) -+ buffer(k+4)=dblstr(record,lenrec,idum) -+ k=k+4 -+ -+ enddo -+ -+c copy data to internal arrays -+ -+ if(ktype.eq.1)then -+ -+c check range against specified cutoff -+ -+ if(rmet.lt.finish)call error(idnode,26) -+ -+c identify potential -+ -+ imet=lstmet(loc2(katm1,katm2)) -+ -+c pair potential terms -+ -+ vmet(1,imet,1)=buffer(1) -+ vmet(2,imet,1)=buffer(2) -+ vmet(3,imet,1)=buffer(3) -+ vmet(4,imet,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ vmet(i,imet,1)=0.d0 -+ else -+ vmet(i,imet,1)=buffer(i)*engunit -+ buffer(i)=buffer(i)*engunit -+ endif -+ -+ enddo -+ -+c calculate derivative of pair potential function -+ -+ call metal_deriv(imet,vmet,buffer) -+ -+c adapt derivatives for use in interpolation -+ -+ do i=5,numpts+4 -+ vmet(i,imet,2)=-(dble(i)*buffer(4)+buffer(2))* -+ x vmet(i,imet,2) -+ enddo -+ -+ else if(ktype.eq.2)then -+ -+c check range against specified cutoff -+ -+ if(rmet.lt.finish)call error(idnode,26) -+ -+c density terms -+ -+ dmet(1,katm1,1)=buffer(1) -+ dmet(2,katm1,1)=buffer(2) -+ dmet(3,katm1,1)=buffer(3) -+ dmet(4,katm1,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ dmet(i,katm1,1)=0.d0 -+ else -+ dmet(i,katm1,1)=buffer(i) -+ endif -+ -+ enddo -+ -+c calculate derivative of density function -+ -+ call metal_deriv(katm1,dmet,buffer) -+ -+c adapt derivatives for use in interpolation -+ -+ dmet(1,katm1,2)=0.d0 -+ dmet(2,katm1,2)=0.d0 -+ dmet(3,katm1,2)=0.d0 -+ dmet(4,katm1,2)=0.d0 -+ do i=5,numpts+4 -+ dmet(i,katm1,2)=-(dble(i)*buffer(4)+buffer(2))* -+ x dmet(i,katm1,2) -+ enddo -+ -+ else if(ktype.eq.3)then -+ -+c embedding function arrays -+ -+ fmet(1,katm1,1)=buffer(1) -+ fmet(2,katm1,1)=buffer(2) -+ fmet(3,katm1,1)=buffer(3) -+ fmet(4,katm1,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ fmet(i,katm1,1)=0.d0 -+ else -+ fmet(i,katm1,1)=buffer(i)*engunit -+ buffer(i)=buffer(i)*engunit -+ endif -+ -+ enddo -+ -+c calculate derivative of embedding function -+ -+ call metal_deriv(katm1,fmet,buffer) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (ntable) -+ -+ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') -+ x 'potential tables read from TABEAM file' -+ -+ return -+ end subroutine mettab -+ -+ subroutine metal_deriv(ityp,vvv,buffer) -+ -+c********************************************************************** -+c -+c calculate numerical derivatives of tabulated EAM metal potentials -+c -+c copyright - daresbury laboratory -+c author - w.smith march 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer ityp,i,npt -+ real(8) vvv,buffer,delmet,aa0,aa1,aa2,aa3,aa4,d1y,d2y,d3y,d4y -+ real(8) f0,f1,f2,f3,f4 -+ -+ dimension vvv(mxgrid,mxmet,2),buffer(mxbuff) -+ -+c interpolation parameters -+ -+ vvv(1,ityp,2)=buffer(1) -+ vvv(2,ityp,2)=buffer(2) -+ vvv(3,ityp,2)=buffer(3) -+ vvv(4,ityp,2)=buffer(4) -+ -+c construct interpolation table -+ -+ delmet=buffer(4) -+ npt=nint(buffer(1))-2 -+ do i=7,npt -+ -+ aa0=buffer(i) -+ f0=buffer(i-2)/aa0 -+ f1=buffer(i-1)/aa0 -+ f2=1.d0 -+ f3=buffer(i+1)/aa0 -+ f4=buffer(i+2)/aa0 -+ -+c calculate numerical differences for 5-point interpolation -+ -+ d1y=(f1-f0) -+ d2y=(f2-f1)-(f1-f0) -+ d3y=(f3-f0)+3.d0*(f1-f2) -+ d4y=(f4-f3)+3.d0*(f2-f3)+3.d0*(f2-f1)+(f0-f1) -+ -+c calculate polynomial coefficients -+ -+ aa0=aa0/delmet -+ aa4=d4y/24.d0 -+ aa3=(d3y+12.d0*aa4)/6.d0 -+ aa2=(d2y+6.d0*aa3-14.d0*aa4)/2.d0 -+ aa1=d1y+3.d0*aa2-7.d0*aa3+15.d0*aa4 -+ -+c calculate derivatives -+ -+ vvv(i,ityp,2)=aa1*aa0 -+ -+c derivatives at extremes of range -+ -+ if(i.eq.7)then -+ -+ vvv(5,ityp,2)=(aa1-4.d0*aa2+12.d0*aa3-32.d0*aa4)*aa0 -+ vvv(6,ityp,2)=(aa1-2.d0*aa2+3.d0*aa3-4.d0*aa4)*aa0 -+ -+ else if(i.eq.npt)then -+ -+ vvv(npt+1,ityp,2)=(aa1+2.d0*aa2+3.d0*aa3+4.d0*aa4)*aa0 -+ vvv(npt+2,ityp,2)=(aa1+4.d0*aa2+12.d0*aa3+32.d0*aa4)*aa0 -+ -+ endif -+ -+ enddo -+ -+c set derivatives to zero beyond end point of function -+ -+ do i=npt+3,mxgrid -+ vvv(i,ityp,2)=0.d0 -+ enddo -+ -+ return -+ end subroutine metal_deriv -+ -+ subroutine abort_eamtable_read(idnode,ntable) -+ -+c*********************************************************************** -+c -+c dl_poly error exit subroutine for reading TABEAM file -+c -+c copyright - daresbury laboratory -+c author - w. smith mar 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer idnode,ntable -+ -+ if(idnode.eq.0)close (ntable) -+ -+ call error(idnode,29) -+ -+ end subroutine abort_eamtable_read -+ -+ end module metal_module -diff -urN dl_class_1.9.orig/srcmod/neu_coul_module.f dl_class_1.9/srcmod/neu_coul_module.f ---- dl_class_1.9.orig/srcmod/neu_coul_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/neu_coul_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,731 @@ -+ module neu_coul_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining neutral group coulomb terms -+c copyright - daresbury laboratory -+c -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007 : solvation, free energy etc -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use ewald_module -+ use metafreeze_module -+ use pair_module -+ use setup_module -+ use solvation_module -+ -+ contains -+ -+ subroutine coul0neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c 1/r potential, no truncation or damping. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,epsq,chgprd,rsq,rrr,coul,reps,fcoul -+ real(8) fx,fy,fz -+ real(8) strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ reps=r4pie0/epsq -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(jatm)*chge(iatm)*reps -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+ rsq=rsqdf(m) -+ rrr=sqrt(rsq) -+ -+c calculate coulomb energy and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul0neu -+ -+ subroutine coul2neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a distance dependant dielectric `constant'. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,epsq,fx,fy,fz,chgprd,rrsq,coul,egamma -+ real(8) strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(iatm)*chge(jatm)*r4pie0/epsq -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate potential energy -+ -+ rrsq=1.d0/rsqdf(m) -+ coul=chgprd*rrsq -+ egamma=2.d0*coul*rrsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+2.d0*coul -+ coul=lambda1*coul -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-2.d0*coul -+ coul=lambda2*coul -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and Virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-2.d0*coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-2.d0*coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul2neu -+ -+ subroutine coul3neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq,rcut,alpha) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c reaction field potential -+c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) -+c adapted for fennell-gezelter coulombic model -+c by w.smith june 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester february 1995 -+c stress tensor - t.forester feb 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,newjob,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,erc1,fer1 -+ real(8) rcsq,b0,rfld0,rfld1,rfld2,chgprd,rsq,coul,omega,fcoul -+ real(8) fx,fy,fz,rrr,alpha,a1,a2,a3,a4,a5,pp,tt,exp1 -+ real(8) strs(6),strs_loc(6) -+ -+ save newjob,b0,rfld0,rfld1,rfld2,vcon,fcon -+ -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+c reaction field terms -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ -+c screened coulomb terms -+ -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/(rcut*rcut) -+ vcon=erc1+rfld2*rcut**2-rfld1 -+ fcon=rcut*fer1-rfld0*rcut -+ -+ endif -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(jatm)*chge(iatm)*r4pie0 -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ rrr=sqrt(rsq) -+ -+c error function terms -+ -+ tt=1.d0/(1.d0+pp*alpha*rrr) -+ exp1=exp(-(alpha*rrr)**2) -+ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rrr -+ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/rsq -+ -+c calculate potential energy -+ -+ omega=erc1-vcon+fcon*(rrr-rcut) -+ coul=chgprd*(omega+rfld2*rsq-rfld1) -+ -+c calculate forces -+ -+ fcoul=chgprd*(fer1-fcon/rrr-rfld0) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic force -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul3neu -+ -+ end module neu_coul_module -diff -urN dl_class_1.9.orig/srcmod/nlist_builders_module.f dl_class_1.9/srcmod/nlist_builders_module.f ---- dl_class_1.9.orig/srcmod/nlist_builders_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/nlist_builders_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,2216 @@ -+ module nlist_builders_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining neighbourlist builder routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use exclude_module -+ use pair_module -+ use setup_module -+ use utility_module -+ -+ contains -+ -+ subroutine nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to select and implement neighbour list -+c builders for short range force calculations -+c -+c copyright - daresbury laboratory -+c author - w. smith june 2006 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,loglnk,newjob,ltad -+ integer natms,idnode,mxnode,imcon,nneut,keyfce -+ real(8) rcut,delr,tstep -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+c skip if no pair force calculations required -+ -+ if(keyfce.gt.0)then -+ -+c test for updating the Verlet list -+ -+ if(ltad)then -+ -+ call vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) -+ -+ else -+ -+ call vertest(newlst,idnode,mxnode,natms,delr,tstep) -+ -+ endif -+ -+c set up nonbonded interaction (verlet) list -+ -+ newlst=(newjob.or.newlst) -+ -+ if(newlst)then -+ -+ if(.not.lneut)then -+ -+ if(lnsq)then -+ -+c calculate distant interactions explicitly -+ -+ call parlst_nsq(newlst,natms,idnode,mxnode,imcon,rcut) -+ -+ elseif(loglnk)then -+ -+c ignore real space distant interactions -+ -+ call parlink -+ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+ else -+ -+ call parlst -+ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+ endif -+ -+ else -+ -+ if(.not.loglnk)then -+ -+ call parneulst -+ x (newlst,lneut,nneut,idnode,mxnode,imcon,rcut, -+ x delr) -+ -+ else -+ -+ call parlinkneu -+ x (newlst,natms,nneut,idnode,mxnode,imcon, -+ x rcut,delr) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+ return -+ end subroutine nlist_driver -+ -+ subroutine parlst(newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atoms taken into account -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w.smith march 1992 -+c modified - t.forester october 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,lfrzi,ldo -+ integer natms,idnode,mxnode,imcon,ibig,last,mpm2 -+ integer npm2,idum,i,m,ii,j -+ real(8) rcut,delr,rclim,rsq -+ -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c check size of work array -+ -+ if(mxxdf.lt.(natms+1)/2)then -+ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', -+ x (natms+1)/2 -+ call error(idnode,474) -+ endif -+ -+c set control variables -+ -+ last=natms -+ lchk=.true. -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius -+ -+ rclim=(rcut+delr)**2 -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ noxatm(i)=1 -+ -+ enddo -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate atoms to neighbour list -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ -+c reject atoms in excluded pair list -+ -+ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) -+ x then -+ -+ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) -+ -+c reject frozen atom pairs -+ -+ else -+ -+ ldo=.true. -+ if(lfrzi)ldo=(lstfrz(j).eq.0) -+ -+ if(ldo)then -+ -+c calculate interatomic distance -+ -+ if(imcon.eq.6)then -+ -+ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii) -+ -+ else -+ -+ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii)+zdf(ii)*zdf(ii) -+ -+ endif -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.lt.rclim)then -+ -+ lentry(ii)=lentry(ii)+1 -+ -+ if(lentry(ii).gt.mxlist)then -+ -+ lchk=.false. -+ ibig=max(lentry(ii),ibig) -+ -+ endif -+ -+c compile neighbour list array -+ -+ if(lchk)then -+ -+ list(ii,lentry(ii))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be at least ',ibig -+ write(nrite,*) ' mxlist is currently ',mxlist -+ endif -+ call error(idnode,110) -+ -+ endif -+ -+c check all excluded atoms are accounted for -+ -+ do i=1,ii -+ -+ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. -+ -+ enddo -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk) call error(idnode,160) -+ -+ endif -+ -+ return -+ end subroutine parlst -+ -+ subroutine parlink(newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on link-cell method. -+c frozen atoms taken into account -+c -+c to be used with the link version of exclude :exclude_link -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester september 1993. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,linc,newjob,lfrzi,ldo -+ integer natms,idnode,mxnode,imcon,idum,nix,niy,niz,fail -+ integer i,ibig,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz,j,icell -+ integer ic,ii,kc,ik,jx,jy,jz,jc,ixl -+ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz -+ real(8) cx,cy,cz,sxd,syd,szd,xd,yd,zd,rsq -+ -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension nix(508),niy(508),niz(508) -+ -+ save newjob -+ data newjob/.true./ -+ -+ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1,2,0,0,-2,2,-1,1,0,-2,2,0, -+ x 0,-1,1,0,-1,1,-2,2,-2,2,-1,1,-1,1,-1,1,-2,2,0,-2,2,0,-2,2,-2,2, -+ x -1,1,-2,2,-2,2,-1,1,-2,2,-2,2,3,0,0,-3,3,-1,1,0,-3,3,0,0,-1,1,0, -+ x -1,1,-3,3,-3,3,-1,1,-1,1,-1,1,-3,3,-2,2,0,-3,3,0,0,-2,2,0,-2,2, -+ x -3,3,-3,3,-2,2,-1,1,-3,3,-3,3,-1,1,-1,1,-2,2,-2,2,-1,1,-2,2,-3,3, -+ x -3,3,-2,2,-2,2,-2,2,-3,3,0,-3,3,0,-3,3,-3,3,-1,1,-3,3,-3,3,-1,1, -+ x -3,3,-3,3,-2,2,-3,3,-3,3,-2,2,-3,3,-3,3,4,0,0,-4,4,-1,1,0,-4,4,0, -+ x 0,-1,1,0,-1,1,-4,4,-4,4,-1,1,-1,1,-1,1,-4,4,-2,2,0,-4,4,0,0,-2,2, -+ x 0,-2,2,-4,4,-4,4,-2,2,-1,1,-4,4,-4,4,-1,1,-1,1,-2,2,-2,2,-1,1,-2, -+ x 2,-4,4,-4,4,-2,2,-2,2,-2,2,-4,4,-3,3,0,-4,4,0,0,-3,3,0,-3,3,-4,4, -+ x -4,4,-3,3,-1,1,-4,4,-4,4,-1,1,-1,1,-3,3,-3,3,-1,1,-3,3,-4,4,-4,4, -+ x -3,3,-2,2,-4,4,-4,4,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3,-4,4,-4,4,-3,3, -+ x -3,3,-3,3,-4,4,0,-4,4,0,-4,4,-4,4,-1,1,-4,4,-4,4,-1,1,-4,4,-4,4, -+ x -2,2,-4,4,-4,4,-2,2,-4,4,-4,4,-3,3,-4,4,-4,4,-3,3,5,0,0,-5,5,-1, -+ x 1,0,-5,5,0,0,-1,1,0,-1,1,-5,5,-5,5,-1,1,-1,1,-1,1,-5,5,-2,2,0,-5, -+ x 5,0,0,-2,2,0,-2,2,-5,5,-5,5,-2,2,-1,1,-5,5,-5,5,-1,1,-1,1,-2,2, -+ x -2,2,-1,1,-2,2,-5,5,-5,5,-2,2,-2,2,-2,2,-5,5,-3,3,0,-5,5,0,0,-3, -+ x 3,0,-3,3,-5,5,-5,5,-3,3,-1,1,-5,5,-5,5,-1,1,-1,1,-3,3,-3,3,-1,1, -+ x -3,3,-5,5,-5,5,-3,3,-2,2,-5,5,-5,5,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3, -+ x -5,5,-5,5,-3,3,-3,3,-3,3/ -+ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1,0,2,0,1,1,2,2,-2,0,0,2, -+ x -1,0,0,1,-2,-2,-1,-1,1,1,2,2,-1,-1,1,1,2,2,-2,0,0,2,-2,-2,2,2,-2, -+ x -2,-1,-1,1,1,2,2,-2,-2,2,2,0,3,0,1,1,3,3,-3,0,0,3,-1,0,0,1,-3,-3, -+ x -1,-1,1,1,3,3,-1,-1,1,1,2,2,3,3,-3,0,0,3,-2,0,0,2,-3,-3,-2,-2,2, -+ x 2,3,3,-3,-3,-1,-1,1,1,3,3,-2,-2,-1,-1,1,1,2,2,-3,-3,-2,-2,2,2,3, -+ x 3,-2,-2,2,2,3,3,-3,0,0,3,-3,-3,3,3,-3,-3,-1,-1,1,1,3,3,-3,-3,3,3, -+ x -3,-3,-2,-2,2,2,3,3,-3,-3,3,3,0,4,0,1,1,4,4,-4,0,0,4,-1,0,0,1,-4, -+ x -4,-1,-1,1,1,4,4,-1,-1,1,1,2,2,4,4,-4,0,0,4,-2,0,0,2,-4,-4,-2,-2, -+ x 2,2,4,4,-4,-4,-1,-1,1,1,4,4,-2,-2,-1,-1,1,1,2,2,-4,-4,-2,-2,2,2, -+ x 4,4,-2,-2,2,2,3,3,4,4,-4,0,0,4,-3,0,0,3,-4,-4,-3,-3,3,3,4,4,-4, -+ x -4,-1,-1,1,1,4,4,-3,-3,-1,-1,1,1,3,3,-4,-4,-3,-3,3,3,4,4,-4,-4, -+ x -2,-2,2,2,4,4,-3,-3,-2,-2,2,2,3,3,-4,-4,-3,-3,3,3,4,4,-3,-3,3,3, -+ x 4,4,-4,0,0,4,-4,-4,4,4,-4,-4,-1,-1,1,1,4,4,-4,-4,4,4,-4,-4,-2,-2, -+ x 2,2,4,4,-4,-4,4,4,-4,-4,-3,-3,3,3,4,4,0,5,0,1,1,5,5,-5,0,0,5,-1, -+ x 0,0,1,-5,-5,-1,-1,1,1,5,5,-1,-1,1,1,2,2,5,5,-5,0,0,5,-2,0,0,2,-5, -+ x -5,-2,-2,2,2,5,5,-5,-5,-1,-1,1,1,5,5,-2,-2,-1,-1,1,1,2,2,-5,-5, -+ x -2,-2,2,2,5,5,-2,-2,2,2,3,3,5,5,-5,0,0,5,-3,0,0,3,-5,-5,-3,-3,3, -+ x 3,5,5,-5,-5,-1,-1,1,1,5,5,-3,-3,-1,-1,1,1,3,3,-5,-5,-3,-3,3,3,5, -+ x 5,-5,-5,-2,-2,2,2,5,5,-3,-3,-2,-2,2,2,3,3,-5,-5,-3,-3,3,3,5,5,-3, -+ x -3,3,3/ -+ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,0,0,1,1,1,1,2,2,2, -+ x 2,1,1,1,1,1,1,1,1,2,2,2,2,0,0,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2, -+ x 2,2,2,0,0,3,0,0,0,0,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,3,3,3,3,0,0, -+ x 0,0,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3, -+ x 3,3,2,2,2,2,2,2,2,2,3,3,3,3,0,0,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3, -+ x 2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,1,1,1,1,4,4,4,4,1, -+ x 1,1,1,1,1,1,1,4,4,4,4,0,0,0,0,2,2,2,2,4,4,4,4,1,1,1,1,1,1,1,1,2, -+ x 2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,4,4,4,4,0,0,0,0,3, -+ x 3,3,3,4,4,4,4,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,2, -+ x 2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4, -+ x 4,4,4,0,0,4,4,4,4,1,1,1,1,4,4,4,4,4,4,4,4,2,2,2,2,4,4,4,4,4,4,4, -+ x 4,3,3,3,3,4,4,4,4,4,4,4,4,0,0,5,0,0,0,0,1,1,1,1,5,5,5,5,1,1,1,1, -+ x 1,1,1,1,5,5,5,5,0,0,0,0,2,2,2,2,5,5,5,5,1,1,1,1,1,1,1,1,2,2,2,2, -+ x 2,2,2,2,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,5,5,5,5,0,0,0,0,3,3,3,3, -+ x 5,5,5,5,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,2,2,2,2, -+ x 2,2,2,2,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,5,5,5,5/ -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1890) -+ -+ if(newlst)then -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x call error(idnode,300) -+ lchk=.true. -+ ibig=0 -+ -+c zero link arrays -+ -+ do i=1,natms -+ link(i)=0 -+ enddo -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+c real space cut off -+ -+ rcsq=(rcut+delr)**2 -+ -+c create mock cell vector for non-periodic system -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+c find maximum x,y,z postions -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ -+ endif -+ -+ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) -+ -+ endif -+ -+ call dcell(cell,celprp) -+ call invert(cell,rcell,det) -+ -+c ratio of link cell length to cut off diameter - max value is 5 -+ -+c irat=nint((rcut+delr)/rlink) -+c irat=min(max(irat,1),5) -+ -+ irat=1 -+ -+ -+c number of subcells -+ -+ if (irat.eq.1)then -+ -+ nsbcll=14 -+ -+ elseif(irat.eq.2)then -+ -+ nsbcll=63 -+ -+ elseif(irat.eq.3)then -+ -+ nsbcll=156 -+ -+ elseif(irat.eq.4)then -+ -+ nsbcll=307 -+ -+ elseif(irat.eq.5)then -+ -+ nsbcll=508 -+ -+ endif -+ -+ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) -+ ily=int(celprp(8)*dble(irat)/(rcut+delr)) -+ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) -+ -+c check there are enough link cells -+ -+ linc=.true. -+ if(ilx.lt.2*irat+1)linc=.false. -+ if(ily.lt.2*irat+1)linc=.false. -+ if(ilz.lt.2*irat+1)linc=.false. -+ if(.not.linc) call error(idnode,305) -+ ncells=ilx*ily*ilz -+ if(ncells.gt.mxcell) call error(idnode,392) -+ -+c calculate link cell indices -+ -+ do i=1,ncells -+ -+ lct(i)=0 -+ -+ enddo -+ -+c link-cell cutoff for reduced space -+ -+ xdc=dble(ilx) -+ ydc=dble(ily) -+ zdc=dble(ilz) -+ -+c reduced space coordinates -+ if(newjob)then -+ -+ newjob=.false. -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(mxnode.gt.1) call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ do i=1,natms -+ -+ tx=xxx(i) -+ ty=yyy(i) -+ tz=zzz(i) -+ -+ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 -+ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 -+ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 -+ -+ enddo -+ -+c link neighbours -+ -+ do i=1,natms -+ -+ ix=min(int(xdc*uxx(i)),ilx-1) -+ iy=min(int(ydc*uyy(i)),ily-1) -+ iz=min(int(zdc*uzz(i)),ilz-1) -+ -+ icell=1+ix+ilx*(iy+ily*iz) -+ -+ j=lct(icell) -+ lct(icell)=i -+ link(i)=j -+ -+ enddo -+ -+c set control variables for loop over subcells -+ -+ ix=1 -+ iy=1 -+ iz=1 -+ -+c primary loop over subcells -+ -+ do ic=1,ncells -+ -+ ii=lct(ic) -+ if(ii.gt.0)then -+ -+c secondary loop over subcells -+ -+ ik=0 -+ -+ do kc=1,nsbcll -+ -+ i=ii -+ -+ cx=0.d0 -+ cy=0.d0 -+ cz=0.d0 -+ jx=ix+nix(kc) -+ jy=iy+niy(kc) -+ jz=iz+niz(kc) -+ -+c minimum image convention -+ -+ if(jx.gt.ilx)then -+ -+ jx=jx-ilx -+ cx=1.d0 -+ -+ elseif(jx.lt.1)then -+ -+ jx=jx+ilx -+ cx=-1.d0 -+ -+ endif -+ -+ if(jy.gt.ily)then -+ -+ jy=jy-ily -+ cy=1.d0 -+ -+ elseif(jy.lt.1)then -+ -+ jy=jy+ily -+ cy=-1.d0 -+ -+ endif -+ -+ if(jz.gt.ilz)then -+ -+ jz=jz-ilz -+ cz=1.d0 -+ -+ elseif(jz.lt.1)then -+ -+ jz=jz+ilz -+ cz=-1.d0 -+ -+ endif -+ -+c index of neighbouring cell -+ -+ jc=jx+ilx*((jy-1)+ily*(jz-1)) -+ j=lct(jc) -+ -+c ignore if empty -+ -+ if(j.gt.0)then -+ -+ do while(i.ne.0) -+ -+c test if site is of interest to this node -+ -+ if(mod(i-1,mxnode).eq.idnode)then -+ -+ -+c i's index for this processor -+ ik=((i-1)/mxnode)+1 -+ -+c test if i is a frozen atom -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+ if(ic.eq.jc) j=link(i) -+ if(j.gt.0)then -+ -+ do while(j.ne.0) -+ -+c test of frozen atom pairs -+ -+ ldo=.true. -+ if(lfrzi)ldo=(lstfrz(j).eq.0) -+ -+ if(ldo)then -+ -+c distance in real space : minimum image applied -+ -+ sxd=uxx(j)-uxx(i)+cx -+ syd=uyy(j)-uyy(i)+cy -+ szd=uzz(j)-uzz(i)+cz -+ -+ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd -+ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd -+ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd -+ -+ if(imcon.eq.6)then -+ -+ rsq=xd**2+yd**2 -+ -+ else -+ -+ rsq=xd**2+yd**2+zd**2 -+ -+ endif -+ -+c test of distance -+ if(rcsq.gt.rsq)then -+ -+c test for excluded atom -+ -+ linc=.true. -+ do ixl=1,nexatm(ik) -+ -+ if(lexatm(ik,ixl).eq.j) linc=.false. -+ -+ enddo -+ -+ if(linc)then -+ -+ lentry(ik)=lentry(ik)+1 -+ -+ if(lentry(ik).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ik)) -+ lchk=.false. -+ -+ else -+ -+ list(ik,lentry(ik))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ j=link(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ j=lct(jc) -+ i=link(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ ix=ix+1 -+ if(ix.gt.ilx)then -+ -+ ix=1 -+ iy=iy+1 -+ -+ if(iy.gt.ily)then -+ -+ iy=1 -+ iz=iz+1 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be >= ',ibig -+ write(nrite,*) ' mxlist is currenty ',mxlist -+ endif -+ call error(idnode,106) -+ -+ endif -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (uxx,uyy,uzz,stat=fail) -+ -+ return -+ end subroutine parlink -+ -+ subroutine parneulst(newlst,lneut,nneut,idnode,mxnode,imcon, -+ x rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atoms taken into account -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - t.forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,lneut,safe,lfrzi -+ integer nneut,idnode,mxnode,imcon,idum,fail,mpm2,npm2,ibig -+ integer i,ill,ia,im,jmlast,jmwrap,nuei1,nuei2,ii,jm1,jm,jj0,jj2 -+ integer j,ii1 -+ real(8) rcut,delr,rclim,fi,rrr,rcl1 -+ -+ logical, allocatable :: lms(:) -+ dimension fi(3) -+ -+ data fail/0/ -+ -+C DIR$ CACHE_ALIGN fi -+ -+c allocate work arrays -+ -+ allocate (lms(mxneut),stat=fail) -+ if(fail.ne.0)call error(idnode,1910) -+ -+ if(newlst.and.lneut)then -+ -+c set control variables -+ -+ safe=.true. -+ lchk= .true. -+ mpm2=(nneut+2)/2 -+ npm2=(nneut+1)/2 -+ -+c set cutoff radius -+ -+ rcl1=(rcut+delr) -+ rclim=(rcut+delr)**2 -+ ibig=0 -+ ill=0 -+ -+c construct pair force neighbour list: neutral groups -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+ -+c outer loop over groups -+ -+ ia=0 -+ -+ do im=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ if(im.ge.mpm2) mpm2=npm2 -+ -+ lms(1)=.false. -+ do j=2,mpm2 -+ lms(j)=.true. -+ enddo -+ -+ jmlast=min(nneut,im+mpm2-1) -+ jmwrap=max(0,im+mpm2-1-nneut) -+ -+c loop over atomic pairs -+ -+ nuei1=neulst(im) -+ nuei2=neulst(im+1)-1 -+ -+ do i=nuei1,nuei2 -+ -+ fi(1)=xxx(i) -+ fi(2)=yyy(i) -+ fi(3)=zzz(i) -+ lfrzi=(lstfrz(i).eq.0) -+ -+ ii=0 -+ jm1=1 -+ do jm=im+1,jmlast -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ xdf(ii)=fi(1)-xxx(j) -+ ydf(ii)=fi(2)-yyy(j) -+ zdf(ii)=fi(3)-zzz(j) -+ -+ else -+ -+ ibig=max(ibig,ii) -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ xdf(ii)=fi(1)-xxx(j) -+ ydf(ii)=fi(2)-yyy(j) -+ zdf(ii)=fi(3)-zzz(j) -+ -+ else -+ -+ safe=.false. -+ ibig=max(ibig,ii) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c apply minimum image convention -+ -+ ii1=min(ii,mxxdf) -+ call images(imcon,0,1,ii1,cell,xdf,ydf,zdf) -+ -+c search for those in cutoff -+ -+ ii=0 -+ jm1=1 -+ do jm=im+1,jmlast -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ if(lms(jm1))then -+ -+ if(lfrzi)then -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ elseif(lstfrz(j).eq.0)then -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ if(lms(jm1))then -+ -+ if(lfrzi)then -+ -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ elseif(lstfrz(j).eq.0)then -+ -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c compile neighbour list for ia -+c with running check of neighbour list array capacity -+ -+ jm1=0 -+ do jm=im,jmlast -+ -+ jm1=jm1+1 -+ if(.not.lms(jm1))then -+ -+ lentry(ia)=lentry(ia)+1 -+ if(lentry(ia).le.mxlist)then -+ -+ list(ia,lentry(ia))=jm -+ -+ else -+ -+ ill=max(ill,lentry(ia)) -+ lchk=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(.not.lms(jm1))then -+ -+ lentry(ia)=lentry(ia)+1 -+ if(lentry(ia).le.mxlist)then -+ -+ list(ia,lentry(ia))=jm -+ -+ else -+ -+ ill=max(ill,lentry(ia)) -+ lchk=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ if(.not.lchk)then -+ -+ call gimax(ill,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be at least ',ill -+ write(nrite,*) ' mxlist is currently ',mxlist -+ endif -+ call error(idnode,108) -+ -+ endif -+ -+c terminate job if work arrays exceeded -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*)'mxxdf must be at least ',ibig -+ write(nrite,*)'mxxdf is currently ',mxxdf -+ endif -+ call error(idnode,476) -+ endif -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(lms,stat=fail) -+ -+ return -+ end subroutine parneulst -+ -+ subroutine parlinkneu -+ x (newlst,natms,nneut,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on link-cell method with neutral groups -+c frozen atoms taken into account -+c -+c to be used with the link version of exclude :excludeneu_link -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1996 -+c author - t. forester january 1996. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,linc,newjob,lfrzi,ldo,swop -+ integer natms,nneut,idnode,mxnode,imcon,idum,fail,ibig -+ integer nix,niy,niz,i,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz -+ integer icell,j,ic,ii,kc,jx,jy,jz,jc,ineu,ik,jneu,ineua,jneua -+ integer ika,jneua1,i1,j1 -+ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz -+ real(8) cx,cy,cz,sxd,syd,szd,rsq,xd,yd,zd -+ -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension nix(14),niy(14),niz(14) -+ -+ save newjob -+ -+ data newjob/.true./ -+ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1/ -+ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1/ -+ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1/ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1900) -+ -+ lchk=.true. -+ ibig=0 -+ if(newlst)then -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x call error(idnode,300) -+ -+c zero link arrays -+ -+ do i=1,natms -+ -+ link(i)=0 -+ -+ enddo -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+c real space cut off -+ -+ rcsq=(rcut+delr)**2 -+c -+c create mock cell vector for non-periodic system -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+c find maximum x,y,z postions -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ -+ endif -+ -+ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) -+ -+ endif -+ -+ call dcell(cell,celprp) -+ call invert(cell,rcell,det) -+ -+c ratio of link cell length to cut off diameter -+ -+ irat=1 -+ -+c number of subcells -+ -+ nsbcll=14 -+ -+ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) -+ ily=int(celprp(8)*dble(irat)/(rcut+delr)) -+ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) -+c -+c check there are enough link cells -+ -+ linc=.false. -+ if(ilx.lt.2*irat+1) linc=.true. -+ if(ily.lt.2*irat+1) linc=.true. -+ if(ilz.lt.2*irat+1) linc=.true. -+ if(linc) call error(idnode,305) -+ -+ ncells=ilx*ily*ilz -+ if(ncells.gt.mxcell)then -+ -+ if(idnode.eq.0) write(nrite,*) 'mxcell must be >= ',ncells -+ call error(idnode,392) -+ -+ endif -+ -+c calculate link cell indices -+ -+ do i=1,ncells -+ -+ lct(i)=0 -+ -+ enddo -+ -+c link-cell cutoff for reduced space -+ -+ xdc=dble(ilx) -+ ydc=dble(ily) -+ zdc=dble(ilz) -+ -+c reduced space coordinates -+ if(newjob)then -+ -+ newjob=.false. -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(mxnode.gt.1) call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ do i=1,natms -+ -+ tx=xxx(i) -+ ty=yyy(i) -+ tz=zzz(i) -+ -+ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 -+ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 -+ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 -+ -+ enddo -+ -+c link neighbours -+ -+ do i=1,natms -+ -+ ix=min(int(xdc*uxx(i)),ilx-1) -+ iy=min(int(ydc*uyy(i)),ily-1) -+ iz=min(int(zdc*uzz(i)),ilz-1) -+ -+ icell=1+ix+ilx*(iy+ily*iz) -+ -+ j=lct(icell) -+ lct(icell)=i -+ link(i)=j -+ -+ enddo -+ -+c set control variables for loop over subcells -+ -+ ix=1 -+ iy=1 -+ iz=1 -+ -+c primary loop over subcells -+ -+ do ic=1,ncells -+ -+ ii=lct(ic) -+ if(ii.gt.0)then -+ -+c secondary loop over subcells -+ -+ do kc=1,nsbcll -+ -+ i=ii -+ -+ cx=0.d0 -+ cy=0.d0 -+ cz=0.d0 -+ jx=ix+nix(kc) -+ jy=iy+niy(kc) -+ jz=iz+niz(kc) -+ -+c minimum image convention -+ -+ if(jx.gt.ilx)then -+ -+ jx=jx-ilx -+ cx=1.d0 -+ -+ elseif(jx.lt.1)then -+ -+ jx=jx+ilx -+ cx=-1.d0 -+ -+ endif -+ -+ if(jy.gt.ily)then -+ -+ jy=jy-ily -+ cy=1.d0 -+ -+ elseif(jy.lt.1)then -+ -+ jy=jy+ily -+ cy=-1.d0 -+ -+ endif -+ -+ if(jz.gt.ilz)then -+ -+ jz=jz-ilz -+ cz=1.d0 -+ -+ elseif(jz.lt.1)then -+ -+ jz=jz+ilz -+ cz=-1.d0 -+ -+ endif -+ -+c index of neighbouring cell -+ -+ jc=jx+ilx*((jy-1)+ily*(jz-1)) -+ j=lct(jc) -+ -+c ignore if empty -+ -+ if(j.gt.0)then -+ -+ do while(i.ne.0) -+ -+c test if site is of interest to this node -+ -+ ineu=lstneu(i) -+ ik=0 -+ -+c i's group index for this processor -+ -+ if(mod(ineu-1,mxnode).eq.idnode) -+ x ik=((ineu-1)/mxnode)+1 -+ -+c test if i is a frozen atom -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+ if(ic.eq.jc) j=link(i) -+ if(j.gt.0)then -+ -+ do while(j.ne.0) -+ -+ jneu=lstneu(j) -+ -+c swop tests for switching of group indices, -+c ldo for 'doing' interaction -+ -+ swop=.false. -+ ldo=(ik.gt.0) -+ jneua=jneu -+ ineua=ineu -+ ika=ik -+ -+c keep only Brode-Ahlrichs pairs -+ -+ if(jneua.ge.ineua)then -+ -+ if(jneua-ineua.gt.nneut/2)then -+ -+ swop=(mod(jneu-1,mxnode).eq.idnode) -+ if(swop)then -+ ldo=((nneut+ineua-jneua).le.(nneut-1)/2) -+ else -+ ldo=.false. -+ endif -+ -+ endif -+ -+ elseif(nneut+jneua-ineua.gt.(nneut-1)/2)then -+ -+ swop=(mod(jneu-1,mxnode).eq.idnode) -+ if(swop)then -+ ldo=((ineua-jneua).le.nneut/2) -+ else -+ ldo=.false. -+ endif -+ -+ endif -+ -+ if(swop.and.ldo)then -+ jneua=ineu -+ ineua=jneu -+ ika=((jneu-1)/mxnode)+1 -+ endif -+ -+c test of frozen atom pairs -+ -+ if(lfrzi.and.ldo)ldo=(lstfrz(j).eq.0) -+ -+c check we haven't already included this group in the list ... -+ -+ jneua1=0 -+ do while -+ x (ldo.and.jneua1.lt.min(lentry(ika),mxlist)) -+ -+ jneua1=jneua1+1 -+ if(list(ika,jneua1).eq.jneua) ldo=.false. -+ -+ enddo -+ -+ if(ldo)then -+ -+c distance in real space : minimum image applied -+ -+ sxd=uxx(j)-uxx(i)+cx -+ syd=uyy(j)-uyy(i)+cy -+ szd=uzz(j)-uzz(i)+cz -+ -+ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd -+ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd -+ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd -+ -+ rsq=xd*xd+yd*yd+zd*zd -+ -+c test of distance -+ -+ if(rsq.lt.rcsq)then -+ -+ lentry(ika)=lentry(ika)+1 -+ if(lentry(ika).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ika)) -+ lchk=.false. -+ -+ else -+ -+ list(ika,lentry(ika))=jneua -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ j=link(j) -+ -+ enddo -+ -+ endif -+ -+ j=lct(jc) -+ i=link(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ ix=ix+1 -+ if(ix.gt.ilx)then -+ -+ ix=1 -+ iy=iy+1 -+ -+ if(iy.gt.ily)then -+ -+ iy=1 -+ iz=iz+1 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*)'mxlist must be at least ',ibig -+ write(nrite,*)'mxlist is currently ',mxlist -+ endif -+ call error(idnode,107) -+ -+ endif -+ -+c sort list into order .. -+c use link as a work array -+ -+ ik=0 -+ do i=1+idnode,nneut,mxnode -+ -+ ik=ik+1 -+ do j=1,lentry(ik) -+ -+ link(j)=list(ik,j) -+ -+ enddo -+ call shellsort(lentry(ik),link) -+ -+c ensure Brode-Ahlrichs ordering -+ -+ i1=lentry(ik)+1 -+ j1=0 -+ do j=1,lentry(ik) -+ -+ if(link(j).ge.i)then -+ -+ j1=j1+1 -+ list(ik,j1)=link(j) -+ i1=min(i1,j) -+ -+ endif -+ -+ enddo -+ -+ do j=1,i1-1 -+ -+ j1=j1+1 -+ list(ik,j1)=link(j) -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (uxx,uyy,uzz,stat=fail) -+ -+ return -+ end subroutine parlinkneu -+ -+ subroutine parlst_nsq -+ x (newlst,natms,idnode,mxnode,imcon,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atom option included -+c -+c to be used with multiple_nsq -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted - w.smith aug 2008 - solvation, excitation etc -+c -+c stress tensor : t.forester may 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst -+ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 -+ integer npm2,m,ii,j,idum -+ real(8) rcut,rclim,rsq,rrr -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c check size of work array -+ -+ if(mxxdf.lt.(natms+1)/2)then -+ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', -+ x (natms+1)/2 -+ call error(idnode,475) -+ endif -+ -+c set control variables -+ -+ last=natms -+ lchk=.true. -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius - ignore border width -+ -+ rclim=(rcut)**2 -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ noxatm(i)=1 -+ -+ enddo -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+c calculate interatomic displacements -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate atoms to neighbour list -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) -+ x then -+ -+ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) -+ -+ elseif(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then -+ -+c reject frozen atoms and calculate interatomic distance -+ -+ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.lt.rclim)then -+ -+ lentry(ii)=lentry(ii)+1 -+ -+ if(lentry(ii).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ii)) -+ lchk=.false. -+ -+ endif -+ -+c compile neighbour list array -+ -+ if(lchk)then -+ -+ list(ii,lentry(ii))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gisum(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be >= ',ibig -+ write(nrite,*) ' mxlist is currenty ',mxlist -+ endif -+ call error(idnode,109) -+ -+ endif -+ -+c check all excluded atoms are accounted for -+ -+ do i=1,ii -+ -+ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ -+ if(.not.lchk) call error(idnode,160) -+ -+ endif -+ -+ return -+ end subroutine parlst_nsq -+ -+ subroutine primlst(idnode,mxnode,natms,imcon,rprim) -+ -+c********************************************************************* -+c -+c dlpoly routine to split interaction list into primary and -+c secondary neighbours for use with multiple timestep method -+c -+c copyright daresbury laboratory -+c author - t. forester february 1993 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,imcon,ii,k,j,i -+ real(8) rprim,rprim2,rsq -+ -+ rprim2=rprim*rprim -+ ii=0 -+ -+ do i=1+idnode,natms,mxnode -+ -+ ii=ii+1 -+ -+ do j=1,lentry(ii) -+ -+ k=iabs(list(ii,j)) -+ xdf(j)=xxx(i)-xxx(k) -+ ydf(j)=yyy(i)-yyy(k) -+ zdf(j)=zzz(i)-zzz(k) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c assign atoms as primary or secondary -+ -+ -+ do j=1,lentry(ii) -+ -+c calculate interatomic distance -+ -+ rsq=xdf(j)**2+ydf(j)**2+zdf(j)**2 -+ -+ if(rsq.lt.rprim2)then -+ -+c compile primary neighbour list array : -ve indices -+ -+ list(ii,j)=-iabs(list(ii,j)) -+ -+ else -+ -+c compile secondary neighbour list array : +ve indices -+ -+ list(ii,j)=iabs(list(ii,j)) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine primlst -+ -+ subroutine prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+c*********************************************************************** -+c -+c dlpoly routine to partition neutral group list into -+c primary and secondary groups -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,ldo -+ integer imcon,idnode,mxnode,nneut,ineu,ia,jj,ibig,ii -+ integer jj0,jneu,j,i,idum -+ real(8) rprim,rclim,xi,yi,zi,rrr -+ -+ lchk=.true. -+ -+ if(newlst)then -+ -+c set primary cutoff limit -+ -+ rclim=rprim*rprim -+ -+c set list to negative - signal for seconary shell -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+ do jj=1,lentry(ia) -+ -+ list(ia,jj)=-abs(list(ia,jj)) -+ -+ enddo -+ -+ enddo -+ -+c loop over neutral group ineu sites -+ -+ lchk=.true. -+ ibig=0 -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+ ii=0 -+ do i=neulst(ineu),neulst(ineu+1)-1 -+ -+ xi=xxx(i) -+ yi=yyy(i) -+ zi=zzz(i) -+ -+ do jj=1,lentry(ia) -+ -+ jneu=-list(ia,jj) -+ jj0=neulst(jneu) -+ -+ if(ineu.eq.jneu) jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,neulst(jneu+1)-1 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ xdf(ii)=xi-xxx(j) -+ ydf(ii)=yi-yyy(j) -+ zdf(ii)=zi-zzz(j) -+ else -+ lchk=.false. -+ ibig=ii -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c apply minimum image convention -+ -+ ii=min(ii,mxxdf) -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate groups to primary or secondary shell -+c on basis of closest atom-atom interactions -+ -+ ii=0 -+ do i=neulst(ineu),neulst(ineu+1)-1 -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj) -+ ldo=(jneu.lt.0) -+ if(ldo)then -+ jneu=-jneu -+ jj0=neulst(jneu) -+ if(ineu.eq.jneu) jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,neulst(jneu+1)-1 -+ -+ if(ldo)then -+ -+ ii=min(ii+1,mxxdf) -+ -+ if(abs(xdf(ii)).lt.rprim)then -+ if(abs(ydf(ii)).lt.rprim)then -+ if(abs(zdf(ii)).lt.rprim)then -+ -+c calculate interatomic distance -+ -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c put in primary list if found any interaction close enough -+ -+ if(rrr.le.rclim)then -+ ldo=.false. -+ list(ia,jj)=jneu -+ endif -+ -+ endif -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) 'mxxdf must be at least ',ibig -+ write(nrite,*) 'mxxdf is currently ',mxxdf -+ endif -+ call error(idnode,477) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine prneulst -+ -+ subroutine vertest(newlst,idnode,mxnode,natms,delr,tstep) -+ -+c********************************************************************* -+c -+c DL_POLY subroutime to test for updating of Verlet list -+c replicated data version -+c -+c copyright daresbury laboratory 1993 -+c author - t. forester may 1993 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,newjob -+ integer idnode,mxnode,natms,i,j,k,moved,ibuff,fail -+ real(8) rmax,dr,delr,tstep -+ -+ real(8), allocatable :: xold(:),yold(:),zold(:) -+ -+ save newjob,xold,yold,zold -+ -+ data newjob/.true./,fail/0/ -+ -+ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) -+ -+ if(newjob)then -+ -+c set up initial arrays -+ -+ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=0.d0 -+ yold(j)=0.d0 -+ zold(j)=0.d0 -+ -+ enddo -+ -+ newjob=.false. -+ newlst=.true. -+ -+ else -+ -+c integrate velocities -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xold(j)+vxx(i) -+ yold(j)=yold(j)+vyy(i) -+ zold(j)=zold(j)+vzz(i) -+ -+ enddo -+ -+c maximum displacement -+ -+ rmax=(delr/2.d0)**2 -+ -+c test atomic displacements -+ -+ moved=0 -+ -+ do k=1,j -+ -+ dr=tstep**2*(xold(k)**2+yold(k)**2+zold(k)**2) -+ if(dr.gt.rmax) moved=moved+1 -+ -+ enddo -+ -+c global sum of moved atoms -+ -+ if(mxnode.gt.1) call gisum(moved,1,ibuff) -+ -+c test for new verlet list -+ -+ newlst=(moved.ge.2) -+ -+c update stored positions -+ -+ if(newlst)then -+ -+ do k=1,j -+ -+ xold(k)=0.d0 -+ yold(k)=0.d0 -+ zold(k)=0.d0 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine vertest -+ -+ subroutine vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) -+ -+c********************************************************************* -+c -+c DL_POLY subroutime to test for updating of Verlet list -+c replicated data version (version 2) -+c -+c copyright daresbury laboratory -+c author - w.smith 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,newjob -+ integer idnode,mxnode,natms,imcon,i,j,k,moved,ibuff,fail -+ real(8) rmax,dr,delr,tstep -+ -+ real(8), allocatable :: xold(:),yold(:),zold(:) -+ real(8), allocatable :: xdif(:),ydif(:),zdif(:) -+ -+ save newjob,xold,yold,zold -+ -+ data newjob/.true./,fail/0/ -+ -+ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) -+ -+c set up initial arrays -+ -+ allocate (xdif(msatms),ydif(msatms),zdif(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ if(newjob)then -+ -+ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ -+ enddo -+ -+ newjob=.false. -+ newlst=.true. -+ -+ else -+ -+c calculate atomic shifts -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xdif(j)=xxx(i)-xold(j) -+ ydif(j)=yyy(i)-yold(j) -+ zdif(j)=zzz(i)-zold(j) -+ -+ enddo -+ -+c minimum image calculation -+ -+ call images(imcon,0,1,j,cell,xdif,ydif,zdif) -+ -+c maximum displacement -+ -+ rmax=(delr/2.d0)**2 -+ -+c test atomic displacements -+ -+ moved=0 -+ -+ do k=1,j -+ -+ dr=(xdif(k)**2+ydif(k)**2+zdif(k)**2) -+ if(dr.gt.rmax)moved=moved+1 -+ -+ enddo -+ -+c global sum of moved atoms -+ -+ if(mxnode.gt.1) call gisum(moved,1,ibuff) -+ -+c test for new verlet list -+ -+ newlst=(moved.ge.2) -+ -+c update stored positions -+ -+ if(newlst)then -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c deallocate arrays -+ -+ deallocate(xdif,ydif,zdif,stat=fail) -+ -+ return -+ end subroutine vertest2 -+ -+ end module nlist_builders_module -diff -urN dl_class_1.9.orig/srcmod/optimiser_module.f dl_class_1.9/srcmod/optimiser_module.f ---- dl_class_1.9.orig/srcmod/optimiser_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/optimiser_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1144 @@ -+ module optimiser_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining structural optimiser routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: ggx(:),ggy(:),ggz(:) -+ real(8), allocatable :: hhx(:),hhy(:),hhz(:) -+ real(8), allocatable :: oxx(:),oyy(:),ozz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ -+ save hhx,hhy,hhz -+ -+ contains -+ -+ subroutine optimisation_selector -+ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, -+ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) -+ -+c*********************************************************************** -+c -+c dl_poly routine for selecting and running a nominated -+c structure optimisation algorithm using energy minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith june 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loptim,stropt,lzero -+ integer idnode,mxnode,natms,imcon,nscons,ngrp,ntfree,keystr -+ integer keytol,ntcons -+ real(8) engcfg,tstep,opttol,hnorm,grad0,grad1,ff1,sgn -+ -+ save grad0,grad1,ff1,sgn,hnorm -+ -+ stropt=.false. -+ -+ if(loptim)then -+ -+c conjugate gradient structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ else if(lzero)then -+ -+c zero kelvin structure optimisation -+ -+ call zero_kelvin -+ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) -+ -+ endif -+ -+ return -+ end subroutine optimisation_selector -+ -+ subroutine zero_kelvin -+ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) -+ -+c*********************************************************************** -+c -+c dl_poly routine for zero Kelvin temperature optimization -+c if velocity.Force < 0 then velocity is set to zero in -+c preparation for integration of equations of motion -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical stropt -+ integer idnode,mxnode,imcon,natms,ngrp,ntfree,fail,i -+ integer iatm0,iatm1,igrp1,igrp2,ifre1,ifre2,jr,ig,j,id -+ real(8) dot,fsq,fcomx,fcomy,fcomz,trx,try,trz,tax,tay,taz -+ real(8) rot,ggg,opttol -+ -+ dimension rot(9) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1920) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c check for convergence of forces -+ -+ ggg=0.d0 -+ do i=iatm0,iatm1 -+ ggg=ggg+fxx(i)**2+fyy(i)**2+fzz(i)**2 -+ enddo -+ -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ -+c check convergence condition for forces -+ -+ if(opttol.ge.abs(ggg)/dble(natms))then -+ -+ stropt=.true. -+ return -+ -+ endif -+ -+ if(ngrp.eq.0) then -+ -+c take component of velocity in direction of force -+ -+ do i=iatm0,iatm1 -+ -+ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ if(dot.lt.0.d0) then -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) -+ fsq=dot/max(1.d-10,fsq) -+ vxx(i)=fxx(i)*fsq -+ vyy(i)=fyy(i)*fsq -+ vzz(i)=fzz(i)*fsq -+ -+ endif -+ -+ enddo -+ -+ else -+ -+c block indices for groups and free atoms -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do j=ifre1,ifre2 -+ -+c reset atomic velocities -+ -+ i=lstfre(j) -+ -+ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ if(dot.lt.0.d0) then -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) -+ fsq=dot/max(1.d-10,fsq) -+ vxx(i)=fxx(i)*fsq -+ vyy(i)=fyy(i)*fsq -+ vzz(i)=fzz(i)*fsq -+ -+ endif -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c reset rigid body velocites (linear and angular) -+ -+ fcomx=0.d0 -+ fcomy=0.d0 -+ fcomz=0.d0 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c forces on com -+ -+ fcomx=fcomx+fxx(i) -+ fcomy=fcomy+fyy(i) -+ fcomz=fcomz+fzz(i) -+ -+ enddo -+ -+ dot=gvxx(ig)*fcomx+gvyy(ig)*fcomy+gvzz(ig)*fcomz -+ if(dot.lt.0.d0) then -+ -+ gvxx(ig)=0.d0 -+ gvyy(ig)=0.d0 -+ gvzz(ig)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fcomx**2+fcomy**2+fcomz**2) -+ fsq=dot/max(1.d-10,fsq) -+ gvxx(ig)=fcomx*fsq -+ gvyy(ig)=fcomy*fsq -+ gvzz(ig)=fcomz*fsq -+ -+ endif -+ -+ enddo -+ -+c site to com distances -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ do j=1,numgsit(lstgtp(ig)) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ig) -+ yyt(jr)=yyy(i)-gcmy(ig) -+ zzt(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ trx=0.d0 -+ try=0.d0 -+ trz=0.d0 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ trx=trx+yyt(jr)*fzz(i)-zzt(jr)*fyy(i) -+ try=try+zzt(jr)*fxx(i)-xxt(jr)*fzz(i) -+ trz=trz+xxt(jr)*fyy(i)-yyt(jr)*fxx(i) -+ -+ enddo -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+c transform to body fixed frame -+ -+ tax=(trx*rot(1)+try*rot(4)+trz*rot(7))*rotinx(id,2) -+ tay=(trx*rot(2)+try*rot(5)+trz*rot(8))*rotiny(id,2) -+ taz=(trx*rot(3)+try*rot(6)+trz*rot(9))*rotinz(id,2) -+ -+ dot=omx(ig)*tax+omy(ig)*tay+omz(ig)*taz -+ if(dot.le.0.d0) then -+ -+ omx(ig)=0.d0 -+ omy(ig)=0.d0 -+ omz(ig)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of torque -+ -+ fsq=(tax**2+tay**2+taz**2) -+ fsq=dot/max(1.d-10,fsq) -+ omx(ig)=tax*fsq -+ omy(ig)=tay*fsq -+ omz(ig)=taz*fsq -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine zero_kelvin -+ -+ subroutine strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,fnew,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for optimising molecular structures -+c based on conjugate gradient method -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2005 -+c -+c note. basis of minimisation criterion : -+c keytol=0 : absolute force -+c keytol=1 : absolute energy -+c keytol=2 : absolute displacement -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ logical stropt,newjob,engchk -+ integer keystr,keytol,idnode,mxnode,natms,i,j,k -+ integer iatm0,iatm1,fail,ngrp,ntcons,nscons,jr -+ integer imcon,ig,jf,id,ntfree,igrp1,igrp2,ifre1,ifre2 -+ real(8) hnorm,grad0,grad1,grad2,ff1,stride,tstep,step -+ real(8) ggg,fnew,fff,gam2,sgn,opttol,dischk -+ -+ dimension fail(nnn) -+ -+ save iatm0,iatm1,igrp1,igrp2,engchk,ifre1,ifre2,newjob -+ -+ data newjob/.true./,engchk/.false./ -+ -+c define initial data -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ if(newjob)then -+ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(1)) -+ endif -+ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) -+ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(3)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(4)) -+ if(ngrp.gt.0)then -+ -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(6)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ if(ngrp.eq.0) -+ x allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxatms),dyy(mxatms),dzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ -+ endif -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1925) -+ enddo -+ -+ if(newjob)then -+ -+c define atoms for this node -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ newjob=.false. -+ -+ endif -+ -+c step length for relaxation -+ -+ if(ntcons.gt.0)then -+ step=tstep**2 -+ else -+ step=10.d0*tstep**2 -+ endif -+ -+c current system configuration energy -+ -+ fff=fnew -+ -+c initialise conjugate gradient position arrays -+ -+ do i=1,natms -+ -+ oxx(i)=xxx(i) -+ oyy(i)=yyy(i) -+ ozz(i)=zzz(i) -+ ggx(i)=0.d0 -+ ggy(i)=0.d0 -+ ggz(i)=0.d0 -+ -+ enddo -+ -+c define constraint bonds -+ -+ if(ntcons.gt.0)then -+ -+c calculate constraint bond vector -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate pseudo forces for constraint bonds -+ -+ call pseudo_shake(nscons,natms,mxnode,fff) -+ -+ do i=1,natms -+ -+ ggx(i)=fxx(i)+ggx(i) -+ ggy(i)=fyy(i)+ggy(i) -+ ggz(i)=fzz(i)+ggz(i) -+ -+ enddo -+ -+ else -+ -+ do i=1,natms -+ -+ ggx(i)=fxx(i) -+ ggy(i)=fyy(i) -+ ggz(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c calculate pseudo forces for rigid bodies -+ -+ if(ngrp.gt.0)call torque_split -+ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, -+ x uxx,uyy,uzz,dtx,dty,dtz) -+ -+c determine magnitude of 3N force vector -+ -+ ggg=0.d0 -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ enddo -+ -+ else -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ ggg=sqrt(ggg) -+ -+c check convergence condition for forces -+ -+ if(keytol.eq.0.and.opttol.ge.abs(ggg)/dble(natms))stropt=.true. -+ -+ if(keystr.eq.0) then -+ -+c set original search direction -+ -+ ff1=fff -+ hnorm=ggg -+ grad0=ggg -+ grad1=ggg -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ -+ else -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ -+ enddo -+ -+ enddo -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ keystr=1 -+ sgn=1.d0 -+ -+ elseif(keystr.eq.1)then -+ -+c check convergence condition for energy -+ -+ if(engchk.and.keytol.eq.1.and. -+ x opttol.ge.abs(fff-ff1))stropt=.true. -+ engchk=.false. -+ -+c line search along chosen direction -+ -+ ff1=fff -+ grad2=grad1 -+ grad1=0.d0 -+ do i=iatm0,iatm1 -+ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=grad1 -+ call gdsum(buffer(1),1,buffer(2)) -+ grad1=buffer(1) -+ endif -+ grad1=sgn*grad1/hnorm -+ -+c linear extrapolation to minimum -+ -+ stride=sgn*step -+ if(grad1.lt.0.d0)then -+ -+ keystr=2 -+ stride=sgn*step*grad1/(grad2-grad1) -+ -+ endif -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ else -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ elseif(keystr.eq.2)then -+ -+c construct conjugate search vector -+ -+ ff1=fff -+ gam2=(ggg/grad0)**2 -+ hnorm=0.d0 -+ grad0=ggg -+ grad1=0.d0 -+ do i=iatm0,iatm1 -+ -+ hhx(i)=ggx(i)+gam2*hhx(i) -+ hhy(i)=ggy(i)+gam2*hhy(i) -+ hhz(i)=ggz(i)+gam2*hhz(i) -+ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 -+ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ -+ enddo -+ if(mxnode.gt.1)then -+ -+ buffer(1)=hnorm -+ buffer(2)=grad1 -+ call gdsum(buffer(1),2,buffer(3)) -+ hnorm=buffer(1) -+ grad1=buffer(2) -+ -+ endif -+ hnorm=sqrt(hnorm) -+ grad1=grad1/hnorm -+ sgn=sign(1.d0,grad1) -+ grad1=sgn*grad1 -+ stride=sgn*step -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ else -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ engchk=.true. -+ keystr=1 -+ -+ endif -+ -+c merge coordinate arrays -+ -+ if(mxnode.gt.1)then -+ -+ if(ngrp.eq.0)then -+ -+ call merge -+ x (idnode,mxnode,natms,mxbuff,oxx,oyy,ozz,buffer) -+ -+ else -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,oxx,oyy,ozz,buffer) -+ -+ endif -+ -+ endif -+ -+c reassign atomic positions and calculate max displacement -+ -+ dischk=0.d0 -+ do i=1,natms -+ -+ dischk=max(dischk,(xxx(i)-oxx(i))**2+ -+ x (yyy(i)-oyy(i))**2+(zzz(i)-ozz(i))**2) -+ -+ xxx(i)=oxx(i) -+ yyy(i)=oyy(i) -+ zzz(i)=ozz(i) -+ -+ enddo -+ -+c check convergence condition for position -+ -+ if(keytol.eq.2.and.keystr.gt.0.and. -+ x opttol.ge.sqrt(dischk))stropt=.true. -+ -+c deallocate working arrays -+ -+ deallocate(ggx,ggy,ggz,dtx,dty,dtz,oxx,oyy,ozz,stat=fail(1)) -+ if(ngrp.gt.0)then -+ deallocate(txx,tyy,tzz,uxx,uyy,uzz,stat=fail(2)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(3)) -+ if(ngrp.eq.0)deallocate(txx,tyy,tzz,stat=fail(4)) -+ -+ endif -+ -+ return -+ end subroutine strucopt -+ -+ subroutine pseudo_shake(nscons,natms,mxnode,fff) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine treating rigid bonds as stiff harmonic bonds -+c suitable for conjugate gradient minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ real(8), parameter :: harm=1.d6 -+ -+ integer i,j,k,natms,nscons,mxnode -+ real(8) fff,engbnd,dis,rrr,gamma -+ -+c calculate energy and force -+ -+ engbnd=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dis=prmcon(listcon(k,1)) -+ rrr=sqrt(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ engbnd=engbnd+0.5d0*harm*(rrr-dis)**2 -+ gamma=harm*(rrr-dis)/rrr -+ ggx(i)=ggx(i)-dxx(k)*gamma -+ ggy(i)=ggy(i)-dyy(k)*gamma -+ ggz(i)=ggz(i)-dzz(k)*gamma -+ -+ ggx(j)=ggx(j)+dxx(k)*gamma -+ ggy(j)=ggy(j)+dyy(k)*gamma -+ ggz(j)=ggz(j)+dzz(k)*gamma -+ -+ enddo -+ -+c global sum of pseudo forces -+ -+ call global_sum_forces(natms,mxnode,ggx,ggy,ggz) -+ if(mxnode.gt.1)then -+ buffer(1)=engbnd -+ call gdsum(buffer(1),1,buffer(2)) -+ engbnd=buffer(1) -+ endif -+ fff=fff+engbnd -+ -+ return -+ end subroutine pseudo_shake -+ -+ subroutine torque_split -+ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, -+ x uxx,uyy,uzz,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for resolving torques into equivalent atomic -+c forces suitable for conjugate gradient minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,ig,id,jr,jrs,ngrp,igrp1,igrp2,idnode,imcon,mxnode -+ -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,trq,txx,tyy,tzz -+ real(8) ggx,ggy,ggz,tmp,taq,scale -+ real(8) uxx,uyy,uzz,dtx,dty,dtz -+ -+ dimension ggx(mxatms),ggy(mxatms),ggz(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ dimension dtx(mxatms),dty(mxatms),dtz(mxatms) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c calculate centres of mass of rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uxx(jr)=xxx(i)-txx(ig) -+ uyy(jr)=yyy(i)-tyy(ig) -+ uzz(jr)=zzz(i)-tzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,uxx,uyy,uzz) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*uxx(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*uyy(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*uzz(jr) -+ -+ enddo -+ -+c final centre of mass -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c calculate atom displacements from rigid body com -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c resolve rigid body forces and torques to orthogonal atomic basis -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+ggx(i) -+ fmy=fmy+ggy(i) -+ fmz=fmz+ggz(i) -+ -+ enddo -+ fmx=fmx/dble(numgsit(id)) -+ fmy=fmy/dble(numgsit(id)) -+ fmz=fmz/dble(numgsit(id)) -+ -+c calculate torque on rigid body -+ -+ jr=jrs -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*ggz(i)-dtz(jr)*ggy(i) -+ tqy=tqy+dtz(jr)*ggx(i)-dtx(jr)*ggz(i) -+ tqz=tqz+dtx(jr)*ggy(i)-dty(jr)*ggx(i) -+ -+ enddo -+ -+c magnitude of torque -+ -+ trq=sqrt(tqx**2+tqy**2+tqz**2) -+ -+c construct unit vectors for new site forces -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ txx(i)=dty(jr)*tqz-tqy*dtz(jr) -+ tyy(i)=dtz(jr)*tqx-tqz*dtx(jr) -+ tzz(i)=dtx(jr)*tqy-tqx*dty(jr) -+ tmp=sqrt(txx(i)**2+tyy(i)**2+tzz(i)**2) -+ if(tmp.gt.1.d-10)then -+ -+ txx(i)=txx(i)/tmp -+ tyy(i)=tyy(i)/tmp -+ tzz(i)=tzz(i)/tmp -+ -+ else -+ -+ txx(i)=0.d0 -+ tyy(i)=0.d0 -+ tzz(i)=0.d0 -+ -+ endif -+ -+ enddo -+ -+c construct unit vectors for site location -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uxx(i)=(tyy(i)*tqz-tqy*tzz(i))/trq -+ uyy(i)=(tzz(i)*tqx-tqz*txx(i))/trq -+ uzz(i)=(txx(i)*tqy-tqx*tyy(i))/trq -+ -+ enddo -+ -+c scale unit vectors to working lengths -+ -+ jr=jrs -+ taq=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ tmp=dtx(jr)*uxx(i)+dty(jr)*uyy(i)+dtz(jr)*uzz(i) -+ taq=taq+tmp**2 -+ txx(i)=tmp*txx(i) -+ tyy(i)=tmp*tyy(i) -+ tzz(i)=tmp*tzz(i) -+ uxx(i)=tmp*uxx(i) -+ uyy(i)=tmp*uyy(i) -+ uzz(i)=tmp*uzz(i) -+ -+ enddo -+ -+c calculate force scale factor -+ -+ scale=trq/taq -+ -+c final site forces -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ txx(i)=scale*txx(i) -+ tyy(i)=scale*tyy(i) -+ tzz(i)=scale*tzz(i) -+ ggx(i)=fmx -+ ggy(i)=fmy -+ ggz(i)=fmz -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine torque_split -+ -+ subroutine turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+c*********************************************************************** -+c -+c dl_poly routine for updating positions of atoms in a rigid body -+c during a conjugate gradient minimisation -+c -+c copyright daresbury laboratory -+c author w.smith may 2006 -+c -+c note: coz=cos(theta)-1 -+c zin=sin(theta)/theta -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,jr,jf,ig,id,igrp1,igrp2,ifre1,ifre2 -+ real(8) step,hhx,hhy,hhz,uxx,uyy,uzz,txx,tyy,tzz -+ real(8) oxx,oyy,ozz,uuu,ttt,the2,coz,zin -+ -+ dimension hhx(mxatms),hhy(mxatms),hhz(mxatms) -+ dimension oxx(mxatms),oyy(mxatms),ozz(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+c update free atom positions -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ -+c update rigid body atoms -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uuu=uxx(i)**2+uyy(i)**2+uzz(i)**2 -+ if(uuu.gt.1.d-10)then -+ -+ ttt=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ the2=(ttt/uuu)*step**2 -+ -+ coz=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- -+ x the2/132.d0)/90.d0)/56.d0)/30.d0)/12.d0)/2.d0 -+ zin=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- -+ x the2/156.d0)/110.d0)/72.d0)/42.d0)/20.d0)/6.d0+1.d0 -+ -+ oxx(i)=oxx(i)+coz*uxx(i)+step*(hhx(i)+zin*txx(i)) -+ oyy(i)=oyy(i)+coz*uyy(i)+step*(hhy(i)+zin*tyy(i)) -+ ozz(i)=ozz(i)+coz*uzz(i)+step*(hhz(i)+zin*tzz(i)) -+ -+ else -+ -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine turn_rigid_body -+ -+ end module optimiser_module -diff -urN dl_class_1.9.orig/srcmod/pair_module.f dl_class_1.9/srcmod/pair_module.f ---- dl_class_1.9.orig/srcmod/pair_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pair_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,46 @@ -+ module pair_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining atom pair data -+c copyright - daresbury laboratory -+c author - w. smith mar 2004 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer, allocatable :: ilist(:),jlist(:) -+ real(8), allocatable :: xdf(:),ydf(:),zdf(:) -+ real(8), allocatable :: rsqdf(:) -+ -+ save ilist,jlist,xdf,ydf,zdf,rsqdf -+ -+ contains -+ -+ subroutine alloc_pair_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ allocate (ilist(mxxdf),stat=fail(1)) -+ allocate (jlist(mxxdf),stat=fail(2)) -+ allocate (xdf(mxxdf),stat=fail(3)) -+ allocate (ydf(mxxdf),stat=fail(4)) -+ allocate (zdf(mxxdf),stat=fail(5)) -+ allocate (rsqdf(mxxdf),stat=fail(6)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1940) -+ enddo -+ -+ end subroutine alloc_pair_arrays -+ -+ end module pair_module -diff -urN dl_class_1.9.orig/srcmod/parse_module.f dl_class_1.9/srcmod/parse_module.f ---- dl_class_1.9.orig/srcmod/parse_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/parse_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,585 @@ -+ module parse_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining parsing arrays -+c copyright - daresbury laboratory -+c author - w. smith jan 2004 -+c -+c*********************************************************************** -+ -+ integer, parameter :: lenrec=150 -+ character*1 record(lenrec) -+ save record -+ -+ contains -+ -+ subroutine getrec(safe,idnode,ifile) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to read a character string on one node -+c and broadcast it to all other nodes -+c -+c copyright daresbury laboratory 1994 -+c author w.smith december 1994 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ -+ character*150 line -+ integer export,import,idnode,ifile,i -+ dimension export(lenrec),import(lenrec) -+ -+ safe=.true. -+ -+ call gsync() -+ -+ if(idnode.eq.0)then -+ -+ read(ifile,'(a150)',end=100)line -+ -+ do i=1,lenrec -+ -+ record(i)=line(i:i) -+ export(i)=ichar(line(i:i)) -+ -+ enddo -+ -+ call gstate(safe) -+ call gisum(export,lenrec,import) -+ -+ return -+ -+ 100 safe=.false. -+ -+ call gstate(safe) -+ -+ else -+ -+ call gstate(safe) -+ if(.not.safe)return -+ -+ do i=1,lenrec -+ -+ export(i)=0 -+ -+ enddo -+ -+ call gisum(export,lenrec,import) -+ -+ do i=1,lenrec -+ -+ record(i)=char(export(i)) -+ -+ enddo -+ -+ return -+ -+ endif -+ -+ end subroutine getrec -+ -+ integer function intstr(word,len,lst) -+ -+c*********************************************************************** -+c -+c dl_poly function for extracting integers from a -+c character string -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith may 1994. -+c -+c parameters: -+c word - input character string -+c len - working length of character string -+c lst - location of space character at end of -+c integer string -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical flag,count,final -+ character*1 n,word,ksn -+ integer lst,len,j,isn -+ -+ dimension n(0:9),word(len) -+ data n/'0','1','2','3','4','5','6','7','8','9'/ -+ -+ isn=1 -+ lst=0 -+ ksn='+' -+ intstr=0 -+ flag=.false. -+ final=.false. -+ count=.false. -+ -+ do while(lst.lt.len.and.(.not.final)) -+ -+ lst=lst+1 -+ flag=.false. -+ -+ do j=0,9 -+ -+ if(n(j).eq.word(lst))then -+ -+ intstr=10*intstr+j -+ count=.true. -+ flag=.true. -+ -+ endif -+ -+ enddo -+ -+ if(count.and.(.not.flag))final=.true. -+ if(flag.and.ksn.eq.'-')isn=-1 -+ ksn=word(lst) -+ -+ enddo -+ -+ intstr=isn*intstr -+ -+ do j=lst,len -+ word(j-lst+1)=word(j) -+ enddo -+ do j=len-lst+2,len -+ word(j)=' ' -+ enddo -+ -+ return -+ end function intstr -+ -+ real(8) function dblstr(word,len,lst) -+ -+c*********************************************************************** -+c -+c dl_poly function for extracting double precisions from a -+c character string. -+c modified from dl_poly function intstr -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith may 1994. -+c modified - t. forester april 1994 -+c -+c parameters: -+c word - input character string -+c len - working length of character string -+c lst - location of space character at end of -+c double precision string -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 n,word,ksn,dot,d,e -+ logical flag,ldot,start,final -+ integer len,lst,iexp,idum,i,j,fail -+ real(8) sn,ten,one -+ dimension n(0:9),word(len) -+ character*1, allocatable :: work(:) -+ -+ data n/'0','1','2','3','4','5','6','7','8','9'/ -+ data dot/'.'/ -+ data d/'d'/ -+ data e/'e'/ -+ -+ allocate(work(len),stat=fail) -+ -+ lst=0 -+ sn=1.d0 -+ ksn='+' -+ ten=10.d0 -+ one=1.d0 -+ -+ dblstr=0.d0 -+ iexp=0 -+ idum=0 -+ start=.false. -+ ldot=.false. -+ final=.false. -+ -+ do while(lst.lt.len.and.(.not.final)) -+ -+ lst=lst+1 -+ flag=.false. -+ -+ do j=0,9 -+ -+ if(n(j).eq.word(lst))then -+ -+ dblstr=ten*dblstr+one*dble(j) -+ flag=.true. -+ start=.true. -+ -+ endif -+ -+ enddo -+ -+ if(dot.eq.word(lst))then -+ -+ flag=.true. -+ ten=1.d0 -+ ldot=.true. -+ start=.true. -+ -+ endif -+ -+ if(flag.and.ksn.eq.'-') sn=-1.d0 -+ if(ldot) one=one/10.d0 -+ ksn=word(lst) -+ if(ksn.eq."D")ksn="d" -+ if(ksn.eq."E")ksn="e" -+ -+ if(start)then -+ -+ if(d.eq.ksn.or.e.eq.ksn)then -+ -+ do i=1,len-lst -+ work(i)=word(i+lst) -+ enddo -+ iexp=intstr(work,len-lst,idum) -+ final=.true. -+ -+ endif -+ -+ if(.not.flag)final=.true. -+ -+ endif -+ -+ enddo -+ -+ dblstr=sn*dblstr*(10.d0**iexp) -+ lst=lst+idum -+ -+ do j=lst,len -+ word(j-lst+1)=word(j) -+ enddo -+ do j=len-lst+2,len -+ word(j)=' ' -+ enddo -+ -+ deallocate(work,stat=idum) -+ -+ return -+ end function dblstr -+ -+ subroutine strip(string,imax) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to strip blanks from start of a string -+c maximum length is 255 characters -+c -+c copyright daresbury laboratory 1993 -+c author t.forester july 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,imax,j -+ character*1 string(imax) -+ -+ do i=1,imax -+ -+ if(string(1).eq.' ')then -+ -+ do j=1,imax-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(imax)=' ' -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine strip -+ -+ subroutine lowcase(string,length) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to lowercase a string of up to 255 characters. -+c Transportable to non-ASCII machines -+c -+c copyright daresbury laboratory 1993 -+c author t. forester july 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 string(*) -+ character*1 letter -+ integer i,length -+ -+ do i=1,min(255,length) -+ -+ letter=string(i) -+ -+ if(letter.eq.'A')then -+ letter='a' -+ else if(letter.eq.'B')then -+ letter='b' -+ else if(letter.eq.'C')then -+ letter='c' -+ else if(letter.eq.'D')then -+ letter='d' -+ else if(letter.eq.'E')then -+ letter='e' -+ else if(letter.eq.'F')then -+ letter='f' -+ else if(letter.eq.'G')then -+ letter='g' -+ else if(letter.eq.'H')then -+ letter='h' -+ else if(letter.eq.'I')then -+ letter='i' -+ else if(letter.eq.'J')then -+ letter='j' -+ else if(letter.eq.'K')then -+ letter='k' -+ else if(letter.eq.'L')then -+ letter='l' -+ else if(letter.eq.'M')then -+ letter='m' -+ else if(letter.eq.'N')then -+ letter='n' -+ else if(letter.eq.'O')then -+ letter='o' -+ else if(letter.eq.'P')then -+ letter='p' -+ else if(letter.eq.'Q')then -+ letter='q' -+ else if(letter.eq.'R')then -+ letter='r' -+ else if(letter.eq.'S')then -+ letter='s' -+ else if(letter.eq.'T')then -+ letter='t' -+ else if(letter.eq.'U')then -+ letter='u' -+ else if(letter.eq.'V')then -+ letter='v' -+ else if(letter.eq.'W')then -+ letter='w' -+ else if(letter.eq.'X')then -+ letter='x' -+ else if(letter.eq.'Y')then -+ letter='y' -+ else if(letter.eq.'Z')then -+ letter='z' -+ endif -+ -+ string(i)=letter -+ -+ enddo -+ -+ return -+ end subroutine lowcase -+ -+ subroutine copystring(oldstr,newstr,length) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to copy one string into another -+c -+c copyright daresbury laboratory -+c author w. smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 newstr(*),oldstr(*) -+ integer i,length -+ -+ do i=1,length -+ -+ newstr(i)=oldstr(i) -+ -+ enddo -+ -+ return -+ end subroutine copystring -+ -+ logical function findstring(seek,string,here) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to find an explicit string in an input record -+c note: variable `seek' is a character string while variable -+c `string' is a character*1 array i.e. code is application specific -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,n,m,here -+ character*(*) seek -+ character*1 string(lenrec) -+ -+ m=lenrec -+ n=len(seek) -+ findstring=.false. -+ -+ here=0 -+ do while(here.le.m-n.and.(.not.findstring)) -+ -+ findstring=.true. -+ -+ do i=1,n -+ if(seek(i:i).ne.string(here+i))findstring=.false. -+ enddo -+ -+ here=here+1 -+ -+ enddo -+ -+ return -+ end function findstring -+ -+ subroutine striptext(string,length,nwords) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to strip leading text from a data record -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical final -+ integer length,nwords,i,j,k -+ character*1 string(length) -+ -+ do k=1,nwords -+ -+ i=0 -+ final=.false. -+ -+ do while(.not.final.and.i.lt.length) -+ -+ i=i+1 -+ -+ if(string(1).eq.' ')then -+ -+ final=.true. -+ -+ else -+ -+ do j=1,length-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(length)=' ' -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine striptext -+ -+ subroutine getword(word,string,len1,len2) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to fetch an 8 character word from a string -+c while ignoring leading blanks -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical final -+ character*8 word -+ integer len1,len2,i,j,k -+ character*1 wrdseq(len1),string(len2) -+ -+ do i=1,len1 -+ wrdseq(i)=' ' -+ enddo -+ -+ i=0 -+ k=0 -+ final=.false. -+ -+ do while(.not.final.and.i.lt.len2) -+ -+ i=i+1 -+ -+ if(string(1).eq.' ')then -+ -+ if(k.gt.0)final=.true. -+ -+ else -+ -+ k=k+1 -+ wrdseq(k)=string(1) -+ if(k.eq.len1)final=.true. -+ -+ endif -+ -+ do j=1,len2-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(len2)=' ' -+ -+ enddo -+ -+ word=mkwd8(wrdseq) -+ -+ return -+ end subroutine getword -+ -+ character*8 function mkwd8(string) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to make an 8 character word from a string -+c -+c copyright daresbury laboratory -+c author w.smith nov 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i -+ character*1 string(*) -+ -+ do i=1,8 -+ mkwd8(i:i)=string(i) -+ enddo -+ -+ return -+ end function mkwd8 -+ -+ end module parse_module -+ -+ -diff -urN dl_class_1.9.orig/srcmod/pass_tools.f dl_class_1.9/srcmod/pass_tools.f ---- dl_class_1.9.orig/srcmod/pass_tools.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pass_tools.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,318 @@ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about bond -+c constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection (i.e. this version may be intel specific) -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c MPI version t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical safe,lshmov -+ integer idnode,mxnode,natms,nscons,lashap,lishap,listme,ierr -+ integer listin,listot,listcon,lstfrz,i,j,k,jdnode,idum -+ -+ dimension listme(mxatms),listin(mxatms),listot(mxatms) -+ dimension lishap(mxlshp),lashap(mxproc),listcon(mxcons,3) -+ dimension lstfrz(mxatms) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ -+ safe=.true. -+ -+ do i=1,natms -+ -+ listme(i)=0 -+ -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ j=0 -+ call gsync() -+ do k=1,mxnode-1 -+ -+ jdnode=mod(idnode+mxnode-k,mxnode) -+ -+ call MPI_IRECV(listin,natms,MPI_INTEGER, -+ x MPI_ANY_SOURCE,Passcon_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(listme,natms,MPI_INTEGER,jdnode, -+ x Passcon_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+ do i=1,natms -+ -+ if((listme(i).gt.0).and.(listin(i).gt.0.and. -+ x lstfrz(i).eq.0))then -+ -+ j=j+1 -+ if(j.gt.mxlshp)then -+ -+ safe=.false. -+ -+ else -+ -+ lishap(j)=i -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ lashap(k)=j -+ -+ enddo -+ -+ endif -+ -+c check for global error condition -+ -+ if(mxnode.gt.1) call gstate(safe) -+ -+ if(.not.safe)call error(idnode,103) -+ -+ if(mxnode.gt.1) then -+ call gisum(j,1,idum) -+ if(idnode.eq.0) write(nrite,'(/,a,14x,i10)') -+ x ' shared atoms from passcon',j/2 -+ lshmov = (j.gt.0) -+ endif -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ -+ listot(i)=1 -+ -+ else -+ -+ listot(i)=0 -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gisum(listot,natms,listin) -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about PMF -+c constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection (i.e. this version may be intel specific) -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester august 1995. -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf -+ integer npmf,i,j,k -+ -+ dimension listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ dimension lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ -+ listpm(i)=0 -+ -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+c -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ -+ lstpmt(i)=1 -+ -+ else -+ -+ lstpmt(i)=0 -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gisum(lstpmt,natms,listin) -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about rigid body -+c atoms involved in bond constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester december 1995. -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical lcnb,safe -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,listin -+ integer listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp -+ integer numgsit,igrp1,igrp2,i,jr,igrp,itmols,imols,lgrp,id -+ integer jj,ik,j,k -+ -+ dimension listin(mxatms) -+ dimension listcon(mxcons,3),lstcsit(2*mxcons) -+ dimension lstout(mxatms),lstrgd(mxgatm) -+ dimension nummols(mxtmls),numgrp(mxtmls),numgsit(mxungp) -+ dimension lstgtp(mxgrp) -+ -+ integer status(MPI_STATUS_SIZE) -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ if(mxnode.gt.1) call gisum(listin,natms,lstout) -+ -+ safe = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ safe = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ safe = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ if(mxnode.gt.1) call gstate(safe) -+ lcnb = (.not.safe) -+ -+ return -+ end -+ -+ -+ -diff -urN dl_class_1.9.orig/srcmod/pmf_module.f dl_class_1.9/srcmod/pmf_module.f ---- dl_class_1.9.orig/srcmod/pmf_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pmf_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1911 @@ -+ module pmf_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining potential of mean force arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use ensemble_tools_module -+ use lf_motion_module -+ use lf_rotation1_module -+ use parse_module -+ use property_module -+ use setup_module -+ use shake_module -+ use vv_motion_module -+ use utility_module -+ -+ implicit none -+ -+ integer npmf -+ real(8) prmpmf,pmfnrm -+ real(8), allocatable :: pmfwght(:) -+ integer, allocatable :: numpmf(:) -+ integer, allocatable :: indpmf(:) -+ integer, allocatable :: listpm(:) -+ integer, allocatable :: lstpmt(:) -+ integer, allocatable :: lstpmf(:,:) -+ -+ dimension npmf(2),pmfnrm(2) -+ -+ save npmf,prmpmf,pmfnrm,pmfwght,numpmf,indpmf,listpm -+ save lstpmt,lstpmf -+ -+ contains -+ -+ subroutine alloc_pmf_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for allocating pmf arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,idnode,fail -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (pmfwght(mxspmf),stat=fail(1)) -+ allocate (indpmf(mxspmf),stat=fail(2)) -+ allocate (numpmf(mxtmls),stat=fail(3)) -+ allocate (listpm(mxpmf),stat=fail(4)) -+ allocate (lstpmt(mxpmf),stat=fail(5)) -+ allocate (lstpmf(mxspmf,mspmf),stat=fail(6)) -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1210) -+ enddo -+ -+ do i=1,mxtmls -+ numpmf(i)=0 -+ enddo -+ -+ end subroutine alloc_pmf_arrays -+ -+ subroutine define_pmf(safe,idnode,itmols,nspmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining pmf units -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,itmols,nspmf,ipmf,jpmf,iatm1,idum -+ real(8) wght -+ -+ numpmf(itmols)=1 -+ prmpmf=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,' PMF bondlength :', -+ x 5x,f20.10)") prmpmf -+ write(nrite, -+ x "(/,/,12x,'unit, site and weight details:' -+ x ,/,/,16x,'unit',6x,'index',5x,'weight')") -+ endif -+ -+ do ipmf=1,2 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ call strip(record,lenrec) -+ call lowcase(record,lenrec) -+ if(.not.findstring('pmf unit',record,idum)) -+ x call error(idnode,462) -+ npmf(ipmf)=intstr(record,lenrec,idum) -+ -+ do jpmf=1,npmf(ipmf) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ iatm1=intstr(record,lenrec,idum) -+ wght=dblstr(record,lenrec,idum) -+ if(wght.le.1.d-10) wght=1.d0 -+ -+ nspmf=nspmf+1 -+ -+ if(nspmf.gt.mxspmf) call error(idnode,460) -+ -+ indpmf(nspmf)=iatm1 -+ pmfwght(nspmf)=wght -+ -+ if(idnode.eq.0) then -+ -+ if(jpmf.eq.1) then -+ write(nrite,"(16x,i5,i10,f12.6)") -+ x ipmf,indpmf(nspmf),pmfwght(nspmf) -+ else -+ write(nrite,"(21x,i10,f12.6)") -+ x indpmf(nspmf),pmfwght(nspmf) -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine define_pmf -+ -+ subroutine pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxp,dyp,dzp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing vectors for PMF calculations -+c -+c copyright - daresbury laboratory -+c adapted by w.smith october 2005 -+c original by t.forester aug 1995 -+c -+c set variable img true for PBC shifted vectors -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical img -+ integer nspmf,imcon,k,jj,kk,ipmf,i,i1,i2 -+ -+ real(8) xxx(mxatms),yyy(mxatms),zzz(mxatms) -+ real(8) xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ real(8) xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ real(8) dxp(mspmf),dyp(mspmf),dzp(mspmf),cell(9) -+ -+ do k=1,nspmf -+ -+ jj=0 -+ kk=0 -+ -+c calculate difference vectors -+ -+ do ipmf=1,2 -+ -+ i1=lstpmf(jj+1,k) -+ -+c position difference vectors -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i2=lstpmf(jj,k) -+ xxt(i)=xxx(i2)-xxx(i1) -+ yyt(i)=yyy(i2)-yyy(i1) -+ zzt(i)=zzz(i2)-zzz(i1) -+ -+ enddo -+ -+c correct for periodic images - assume less than half box length -+ -+ if(img)call images(imcon,0,1,npmf(ipmf),cell,xxt,yyt,zzt) -+ -+c create weighted coordinate -+ -+ xxa(ipmf,k)=0.d0 -+ yya(ipmf,k)=0.d0 -+ zza(ipmf,k)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ kk=kk+1 -+ xxa(ipmf,k)=xxa(ipmf,k)+pmfwght(kk)*xxt(i) -+ yya(ipmf,k)=yya(ipmf,k)+pmfwght(kk)*yyt(i) -+ zza(ipmf,k)=zza(ipmf,k)+pmfwght(kk)*zzt(i) -+ -+ enddo -+ -+ xxa(ipmf,k)=xxa(ipmf,k)/pmfnrm(ipmf)+xxx(i1) -+ yya(ipmf,k)=yya(ipmf,k)/pmfnrm(ipmf)+yyy(i1) -+ zza(ipmf,k)=zza(ipmf,k)/pmfnrm(ipmf)+zzz(i1) -+ -+ enddo -+ -+ dxp(k)=xxa(2,k)-xxa(1,k) -+ dyp(k)=yya(2,k)-yya(1,k) -+ dzp(k)=zza(2,k)-zza(1,k) -+ -+ enddo -+ -+c periodic boundary condition for pmf vectors -+ -+ if(img)call images(imcon,0,1,nspmf,cell,dxp,dyp,dzp) -+ -+ return -+ end subroutine pmf_vectors -+ -+ subroutine pmflf -+ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE -+c and PMF_SHAKE - for potential of mean force calculations. -+c -+c parallel replicated data version : block data -+c adapted from dl_poly routine nve_1.f -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester aug 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ logical safe,lshmov,safep,unsafe,img -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf -+ integer fail,iatm0,iatm1,i,j,k,jj,ii,ipmf,icyc -+ real(8) engke,tolnce,tstep,vircon,virpmf,strpmf,summas -+ real(8) rstep,viracc,strkin,strcon -+ -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ dimension strpmf(9),strcon(9),strkin(9),summas(2),fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) -+ allocate(xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(3)) -+ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(4)) -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(5)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(8)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1220) -+ enddo -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c store initial values of position -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate mass terms for PMF units -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ ii=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(ii) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxp,dyp,dzp) -+ -+c move atoms by leapfrog algorithm -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c RDSHAKE procedure -+ -+ if(ntcons.gt.0.or.ntpmf.gt.0) then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c apply bond constraints -+ -+ viracc=0.d0 -+ if(ntcons.gt.0)call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c apply pmf constraints -+ -+ viracc=0.d0 -+ if(ntpmf.gt.0)call pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) -+ -+ enddo -+ -+ safep=.not.unsafe -+ -+c calculate velocity correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+c update corrected velocity -+ -+ j=j+1 -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxx(i))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyy(i))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzz(i))*weight(i)*rstep -+ -+ enddo -+ -+ endif -+ -+c calculate velocity at full time step -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=0.5d0*(vxx(i)+uxx(i)) -+ vyy(i)=0.5d0*(vyy(i)+uyy(i)) -+ vzz(i)=0.5d0*(vzz(i)+uzz(i)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c total contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(uxx,uyy,uzz,dxp,dyp,dzp,stat=fail(2)) -+ deallocate(txx,tyy,tzz,xxo,yyo,zzo,stat=fail(3)) -+ deallocate(dxt,dyt,dzt,xxa,yya,zza,stat=fail(4)) -+ -+ return -+ end subroutine pmflf -+ -+ subroutine pmflfq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon,safep,nspmf,ntpmf,virpmf) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=14 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob,safep,unsafe,img -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre -+ integer jg,ig,k,id,jr,nspmf,ntpmf,jj,ii,ipmf,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc,virpmf -+ real(8) trx,try,trz,delx,dely,delz,engfke,viracc -+ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz -+ real(8) strpmf,strcon,summas -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ -+ dimension strkin(9),strgrp(9),rot(9),fail(nnn) -+ -+ dimension strpmf(9),strcon(9),summas(2) -+ -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) -+ -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(13)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(14)) -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1500) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate mass terms for PMF units -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ ii=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(ii) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxp,dyp,dzp) -+ -+c move atoms by leapfrog algorithm -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0.or.ntpmf.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c apply bond constraints -+ -+ viracc=0.d0 -+ if(ntcons.gt.0)call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c apply pmf constraints -+ -+ viracc=0.d0 -+ if(ntpmf.gt.0)call pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) -+ -+ enddo -+ -+ safep=.not.unsafe -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational rigid body motion -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) -+ -+c estimate velocity at full time step -+ -+ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c calculate ridid body kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore rigid body half timestep velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c store current angular velocity -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+delx*pt5 -+ opy(jg)=omy(ig)+dely*pt5 -+ opz(jg)=omz(ig)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omx(ig)+delx -+ uyy(ig)=omy(ig)+dely -+ uzz(ig)=omz(ig)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omx(ig)+delx*1.5d0 -+ oqy(jg)=omy(ig)+dely*1.5d0 -+ oqz(jg)=omz(ig)+delz*1.5d0 -+ -+c angular velocity at timestep n -+ -+ omx(ig)=omx(ig)+pt5*delx -+ omy(ig)=omy(ig)+pt5*dely -+ omz(ig)=omz(ig)+pt5*delz -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i)+ -+ x strpmf(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies - relative to c.o.m -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) -+ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) -+ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) -+ deallocate(dxp,dyp,dzp,xxa,yya,zza,stat=fail(7)) -+ -+ return -+ end subroutine pmflfq_1 -+ -+ subroutine pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x virpmf,xxt,yyt,zzt,strpmf,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accummulates constraint force to maintain reaction coordinate -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory 1995 -+c author t.forester august 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,fail,icyc,k,jj -+ integer ii,i,ipmf -+ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas -+ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,strs1,strs2,strs3,strs5 -+ real(8) strs6,strs9,tstep2,dis,omega2,eps,gamma,gammi -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ dimension amt(2),strpmf(9),summas(2) -+ -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:),dsq(:) -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),dsq(mspmf), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1230) -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c accumulators for strpmf tensor -+ -+ virpmf=0.d0 -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safep=.false. -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c calculate bond constraint length -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxt,dyt,dzt) -+ -+ amt(1)= tstep2/summas(1) -+ amt(2)=-tstep2/summas(2) -+ -+ eps=0.d0 -+ dis=prmpmf -+ omega2=dis*dis -+ -+ do k=1,nspmf -+ -+ dsq(k)=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ eps=max(eps,abs((omega2-dsq(k))/(2.0d0*dis))) -+ -+ enddo -+ -+c check convergence condition -+ -+ safep=(eps.le.tolnce) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ gamma=(omega2-dsq(k))/(-2.d0*(amt(2)-amt(1))* -+ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) -+ -+c accumulate pmf virial -+ -+ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) -+ -+ strs1=strs1-gamma*dxp(k)*dxp(k) -+ strs2=strs2-gamma*dxp(k)*dyp(k) -+ strs3=strs3-gamma*dxp(k)*dzp(k) -+ strs5=strs5-gamma*dyp(k)*dyp(k) -+ strs6=strs6-gamma*dyp(k)*dzp(k) -+ strs9=strs9-gamma*dzp(k)*dzp(k) -+ -+c improve approximate atomic positions -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-gamma*amt(ipmf) -+ -+ do ii=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ xxx(i)=xxx(i)+dxp(k)*gammi -+ yyy(i)=yyy(i)+dyp(k)*gammi -+ zzz(i)=zzz(i)+dzp(k)*gammi -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c complete strpmf tensor -+ -+ strpmf(1)=strs1 -+ strpmf(2)=strs2 -+ strpmf(3)=strs3 -+ strpmf(4)=strs2 -+ strpmf(5)=strs5 -+ strpmf(6)=strs6 -+ strpmf(7)=strs3 -+ strpmf(8)=strs6 -+ strpmf(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=virpmf -+ call gdsum(buffer(1),1,buffer(2)) -+ virpmf=buffer(1) -+ call gdsum(strpmf,9,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxt,dyt,dzt,dsq,stat=fail) -+ -+ return -+ end subroutine pmf_shake -+ -+ subroutine pmfvv -+ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Velocity Verlet With PMF_RATTLE -+c for potential of mean force calculations. -+c -+c copyright - daresbury laboratory -+c adapted by w.smith october 2005 -+c original by t.forester aug 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical safe,lshmov,safep,unsafe,newjob,img -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf -+ integer isw,mxtop -+ integer fail,iatm0,iatm1,i,j,k,jj,i1,ipmf,icyc -+ real(8) engke,tolnce,tstep,vircon,virpmf,strcon,summas -+ real(8) viracc,strpmf,strkin -+ -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ -+ dimension strcon(9),strpmf(9),strkin(9),summas(2),fail(nnn) -+ save summas,newjob,strpmf -+ data newjob/.true./ -+ -+c set default safety flags -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ if(safe.and.safep)return -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ mxtop=max(mxcons,mspmf) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(3)) -+ allocate(dxt(mxtop),dyt(mxtop),dzt(mxtop),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(6)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1220) -+ enddo -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate mass terms for PMF units -+ -+ if(newjob)then -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i1=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(i1) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxp,dyp,dzp) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ if(isw.eq.1)then -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ if(isw.eq.1)then -+ -+c apply bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+ endif -+ -+c apply pmf constraints -+ -+ if(ntpmf.gt.0)then -+ -+ safep=.false. -+ call pmf_rattle_r -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, -+ x dxt,dyt,dzt,strcon) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ endif -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).le.1.d-10)) -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c apply rattle velocity constraints -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ -+ endif -+ -+c apply pmf velocity constraints -+ -+ if(ntpmf.gt.0)then -+ -+ safep=.false. -+ call pmf_rattle_v -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x summas,dxp,dyp,dzp,xxt,yyt,zzt,xxa,yya,zza,dxt,dyt,dzt) -+ -+ endif -+ -+ unsafe=(.not.(safe.and.safep)) -+ -+ endif -+ -+ enddo -+ -+ safep=(.not.unsafe) -+ -+c periodic boundary condition -+ -+ if(isw.eq.1)call images -+ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(isw.eq.2)then -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c total contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+ endif -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(isw.eq.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(dxp,dyp,dzp,dxt,dyt,dzt,stat=fail(2)) -+ deallocate(txx,tyy,tzz,xxa,yya,zza,stat=fail(3)) -+ -+ return -+ end subroutine pmfvv -+ -+ subroutine pmf_rattle_r -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x virpmf,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, -+ x dxt,dyt,dzt,strpmf) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accumulates constraint force to maintain reaction coordinate. -+c velocity verlet adaptation -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory -+c adapted by w.smith october 2005 -+c original t.forester august 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj -+ integer i1,i,ipmf -+ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas,gamma -+ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,tstep2,dis,omega2,eps,gammi -+ real(8) strs1,strs2,strs3,strs5,strs6,strs9,dxt,dyt,dzt,dsq -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ dimension amt(2),strpmf(9),summas(2) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c pmf virial -+ -+ virpmf=0.d0 -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c array bound check -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ img=.true. -+ safep=.false. -+ dis=prmpmf -+ omega2=dis*dis -+ amt(1)= tstep2/summas(1) -+ amt(2)=-tstep2/summas(2) -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxt,dyt,dzt) -+ -+c check convergence -+ -+ eps=0.d0 -+ -+ do k=1,nspmf -+ -+ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ eps=max(eps,abs((omega2-dsq)/dis)) -+ -+ enddo -+ -+ eps=eps*0.5d0 -+ -+c verification of convergence -+ -+ safep=(eps.lt.tolnce) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ gamma=(omega2-dsq)/(-(amt(2)-amt(1))* -+ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) -+ -+c accumulate pmf virial -+ -+ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) -+ -+ strs1=strs1-gamma*dxp(k)*dxp(k) -+ strs2=strs2-gamma*dxp(k)*dyp(k) -+ strs3=strs3-gamma*dxp(k)*dzp(k) -+ strs5=strs5-gamma*dyp(k)*dyp(k) -+ strs6=strs6-gamma*dyp(k)*dzp(k) -+ strs9=strs9-gamma*dzp(k)*dzp(k) -+ -+c improve approximate atomic positions and velocities -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-0.5d0*gamma*amt(ipmf) -+ -+ do i1=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ xxx(i)=xxx(i)+dxp(k)*gammi -+ yyy(i)=yyy(i)+dyp(k)*gammi -+ zzz(i)=zzz(i)+dzp(k)*gammi -+ vxx(i)=vxx(i)+dxp(k)*gammi/tstep -+ vyy(i)=vyy(i)+dyp(k)*gammi/tstep -+ vzz(i)=vzz(i)+dzp(k)*gammi/tstep -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ strpmf(1)=strs1 -+ strpmf(2)=strs2 -+ strpmf(3)=strs3 -+ strpmf(4)=strs2 -+ strpmf(5)=strs5 -+ strpmf(6)=strs6 -+ strpmf(7)=strs3 -+ strpmf(8)=strs6 -+ strpmf(9)=strs9 -+ -+c splice coordinate and velocity arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=virpmf -+ call gdsum(buffer(1),1,buffer(2)) -+ virpmf=buffer(1) -+ call gdsum(strpmf,9,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine pmf_rattle_r -+ -+ subroutine pmf_rattle_v -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce,summas, -+ x dxp,dyp,dzp,vxt,vyt,vzt,vxa,vya,vza,vxp,vyp,vzp) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accumulates velocity correction for second constraint condition -+c velocity verlet adaptation -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory -+c author w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj -+ integer i1,i,ipmf -+ real(8) tstep,tolnce,summas,gamma,vxt,vyt,vzt,vxa,vya,vza -+ real(8) vxp,vyp,vzp,dxp,dyp,dzp,amt,omega,eps,gammi,tolvel -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension vxp(mspmf),vyp(mspmf),vzp(mspmf) -+ dimension vxt(mxatms),vyt(mxatms),vzt(mxatms) -+ dimension vxa(2,mspmf),vya(2,mspmf),vza(2,mspmf) -+ dimension amt(2),summas(2) -+ -+c constraint convergence tolerance -+ -+ tolvel=tolnce/tstep -+ -+c array bound check -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ img=.false. -+ safep=.false. -+ amt(1)= 0.5d0*tstep/summas(1) -+ amt(2)=-0.5d0*tstep/summas(2) -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,vxx,vyy,vzz,vxt,vyt,vzt,vxa,vya,vza, -+ x vxp,vyp,vzp) -+ -+c check convergence -+ -+ eps=0.d0 -+ do k=1,nspmf -+ -+ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) -+ eps=max(eps,abs(omega)/prmpmf) -+ -+ enddo -+ -+c verification of convergence -+ -+ safep=(eps.lt.tolvel) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) -+ gamma=omega/((amt(2)-amt(1))* -+ x (dxp(k)**2+dyp(k)**2+dzp(k)**2)) -+ -+c improve approximate atomic velocities -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-gamma*amt(ipmf) -+ -+ do i1=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ vxx(i)=vxx(i)+dxp(k)*gammi -+ vyy(i)=vyy(i)+dyp(k)*gammi -+ vzz(i)=vzz(i)+dzp(k)*gammi -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1)call splice -+ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) -+ -+ return -+ end subroutine pmf_rattle_v -+ -+ end module pmf_module -diff -urN dl_class_1.9.orig/srcmod/property_module.f dl_class_1.9/srcmod/property_module.f ---- dl_class_1.9.orig/srcmod/property_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/property_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1318 @@ -+ module property_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation property data -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use setup_module -+ use site_module -+ use tether_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ real(8), allocatable :: rdf(:,:),zdens(:,:) -+ real(8), allocatable :: stpval(:),sumval(:) -+ real(8), allocatable :: ssqval(:),zumval(:) -+ real(8), allocatable :: ravval(:),stkval(:,:) -+ real(8), allocatable :: xx0(:),yy0(:),zz0(:) -+ real(8), allocatable :: amsd(:) -+ -+ save rdf,zdens,stpval,sumval,ssqval,xx0,yy0,zz0 -+ save zumval,ravval,stkval -+ -+ contains -+ -+ subroutine alloc_prp_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (zdens(mxzdn,mxatyp),stat=fail(1)) -+ allocate (rdf(mxrdf,mxxtyp),amsd(mxatyp),stat=fail(2)) -+ allocate (stpval(mxnstk),sumval(mxnstk),stat=fail(3)) -+ allocate (ssqval(mxnstk),zumval(mxnstk),stat=fail(4)) -+ allocate (ravval(mxnstk),stkval(mxstak,mxnstk),stat=fail(5)) -+ allocate (xx0(mxatms),yy0(mxatms),zz0(mxatms),stat=fail(6)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1740) -+ enddo -+ -+ end subroutine alloc_prp_arrays -+ -+ subroutine result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit,conint, -+ x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing simulation summary and -+c saving the restart data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith dec 1992. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 hms,dec -+ logical lgofr,lpgr,lzden,check,ltad,lbpd,goprint -+ -+ integer idnode,imcon,keyens,mxnode,natms,nzden,nstep,ntpatm -+ integer levcfg,numacc,numrdf,keybpd,i,iadd,io,j -+ real(8) chip,chit,conint,rcut,tstep,volm,timelp,avvol,zlen,dc -+ real(8) engcfg,virtot,vircom,prntim,simtim,tboost,chit_shl -+ -+c save restart data -+ -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+c for TAD and BPD system averages not generally meaningful -+c useful only for BPD in configurational sampling mode -+ -+ goprint=.not.(ltad.or.(lbpd.and.keybpd.gt.1)) -+ -+ if(goprint)then -+ -+c calculate final fluctuations -+ -+ do i=1,mxnstk -+ ssqval(i)=sqrt(max(0.d0,ssqval(i))) -+ enddo -+ -+c final averages and fluctuations -+ -+ call timchk(0,timelp) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'run terminated after',i8,' steps.', -+ x ' final averages calculated over',i8,' steps.',/,/)") -+ x nstep,numacc -+ write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x,'eng_cfg', -+ x 5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd',5x,'eng_ang',5x, -+ x 'eng_dih',5x,'eng_tet',/,1x,'time ',5x,' eng_pv',4x, -+ x 'temp_rot',5x,'vir_cfg',5x,'vir_vdw',5x,'vir_cou',5x, -+ x 'vir_bnd',5x,'vir_ang',5x,'vir_con',5x,'vir_tet',/, -+ x 1x,'cpu time',6x,'volume',4x,'temp_shl',5x,'eng_shl', -+ x 5x,'vir_shl',7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ write(nrite,'(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)') -+ x nstep,(sumval(i),i=1,9), -+ x simtim,dec,(sumval(i),i=10,18), -+ x prntim,hms,(sumval(i),i=19,27) -+ write(nrite,"(/,1x,' r.m.s. ',1p,9e12.4,/,1x,'fluctn. ', -+ x 1p,9e12.4,/,9x,9e12.4)") (ssqval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+c write out bias potential boost factor -+ -+ if(lbpd)write(nrite,"(/,/,1x, -+ x 'calculated bias potential boost factor',1p,e16.8)")tboost -+ -+ if(numacc.gt.0)then -+ iadd=27 -+ -+c write out estimated diffusion coefficients -+ -+ if(numacc.gt.0)then -+ -+ write(nrite,"(/,/,12x,'Approximate 3D Diffusion', -+ x ' coefficients (10^-9 m^2 / s)',/,/,12x,'atom',7x, -+ x ' D ')") -+ -+ do i=1,ntpatm -+ -+ iadd=iadd+1 -+ dc=(ravval(iadd)-sumval(iadd))/ -+ x (3.d0*dble(numacc-min(mxnstk,numacc-1))*tstep)*10.d0 -+ if(dc.lt.1d-10) dc=0.d0 -+ if(lbpd)dc=dc/tboost -+ write(nrite,'(12x,a8,1p,e13.4)') unqatm(i),dc -+ -+ enddo -+ -+ endif -+ -+c print out average pressure tensor -+ -+ write(nrite,"(/,/,16x,'Average pressure tensor', -+ x 39x,'r.m.s. fluctuations ',/)") -+ -+ do i=iadd,iadd+6,3 -+ write(nrite,'(9x,1p,3e12.4,24x,3e12.4)') -+ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) -+ enddo -+ iadd=iadd+9 -+ -+ write(nrite,'(/,12x,a,1p,e12.4)') 'trace/3. ', -+ x (sumval(iadd)+sumval(iadd-4)+sumval(iadd-8))/3.d0 -+ -+c write out mean cell vectors for npt -+ -+ if(keyens.gt.3.and.(keyens.le.7))then -+ -+ write(nrite,"(/,/,17x,'Average cell vectors', -+ x 41x,'r.m.s. fluctuations ',/)") -+ -+ do i=iadd,iadd+6,3 -+ write(nrite,'(3f20.10,9x,1p,3e12.4)') -+ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) -+ enddo -+ iadd=iadd+9 -+ -+ endif -+ -+c write out remaining registers -+ -+ check=.false. -+ do i=iadd+1,mxnstk -+ -+ if((abs(sumval(i)).gt.1.d-10).or. -+ x (abs(ssqval(i)).gt.1.d-10)) check=.true. -+ -+ enddo -+ -+ if(check)then -+ -+ write(nrite,"(/,/,12x, -+ x 'Remaining non-zero statistics registers ',/,/,12x, -+ x 'Register',7x,'Average value',8x,'r.m.s. fluc.')") -+ -+ do i=iadd+1,mxnstk -+ -+ if((abs(sumval(i)).gt.1.d-10).or. -+ x (abs(ssqval(i)).gt.1.d-10)) -+ x write(nrite,'(10x,i10,2f20.10)') i,sumval(i),ssqval(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c print out sample of final configuration -+ -+ write(nrite,"(/,/,1x,'sample of final configuration',/)") -+ write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',7x,'fx(i)',7x, -+ x 'fy(i)',7x,'fz(i)',/,/)") -+ io=(natms+19)/20 -+ -+ do i=1,natms,io -+ -+ write(nrite,"(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i), -+ x fxx(i),fyy(i),fzz(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c bypass printing averages for certain tad and bpd options -+ -+ if(goprint)then -+ -+c average volume -+ -+ avvol=sumval(19) -+ if(imcon.eq.0.or.imcon.eq.6)then -+ avvol=4.d0*pi/3.d0*rcut**3 -+ volm=avvol -+ endif -+ -+c calculate and print radial distribution functions -+ -+ if(lgofr.and.lpgr.and.(numrdf.gt.0))then -+ -+c scale densities for average volume -+ -+ do i=1,ntpatm -+ dens(i)=dens(i)*(volm/avvol) -+ enddo -+ -+ call rdf1 -+ x (lpgr,idnode,mxnode,ntpatm,numrdf,avvol,rcut) -+ -+ endif -+ -+ if(lzden.and.lpgr.and.(nzden.gt.0))then -+ call zden1(lpgr,idnode,mxnode,ntpatm,nzden,avvol,zlen) -+ endif -+ -+ if(imcon.eq.0)volm=0.d0 -+ -+ endif -+ -+c print final time check -+ -+ call timchk(1,timelp) -+ -+ return -+ end subroutine result -+ -+ subroutine diffsn0(idnode,natms,mxnode,tstep) -+ -+c*********************************************************************** -+c -+c DL_POLY routine for calculating displacements of sites from -+c t=0 positions -+c -+c use diffsn1 for mean squared displacements -+c -+c parallel version - replicated data. -+c -+c copyright daresbury laboratory 1993 -+c -+c author - t. forester june 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,mxnode,iatm1,iatm2,i -+ real(8) tstep -+ -+ save newjob,iatm1,iatm2 -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+ newjob=.false. -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ endif -+ -+ do i=iatm1,iatm2 -+ -+ xx0(i)=xx0(i)+vxx(i)*tstep -+ yy0(i)=yy0(i)+vyy(i)*tstep -+ zz0(i)=zz0(i)+vzz(i)*tstep -+ -+ enddo -+ -+ return -+ end subroutine diffsn0 -+ -+ subroutine diffsn1(idnode,natms,ntpatm,mxnode) -+ -+c*********************************************************************** -+c -+c DL_POLY routine for calculating mean squared displacements -+c -+c displacements calculated in diffsn0 -+c -+c parallel version - replicated data. -+c -+c copyright daresbury laboratory 1993 -+c -+c author - t. forester june 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,ntpatm,mxnode,iatm1,iatm2,k,i -+ -+ save newjob,iatm1,iatm2 -+ -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+ newjob=.false. -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ endif -+ -+c running sum of squared displacements -+ -+ do k=1,ntpatm -+ -+ amsd(k)=0.d0 -+ -+ enddo -+ -+c calculate square of displacements for each atom type -+ -+ do i=iatm1,iatm2 -+ -+ k=ltype(i) -+ amsd(k)=amsd(k)+xx0(i)**2+yy0(i)**2+zz0(i)**2 -+ -+ enddo -+ -+c global sum - replicated data strategy -+ -+ if(mxnode.gt.1)then -+ -+ do k=1,ntpatm -+ -+ buffer(k+ntpatm)=amsd(k) -+ -+ enddo -+ -+ call gdsum(buffer(1+ntpatm),ntpatm,buffer(1)) -+ -+ do k=1,ntpatm -+ -+ amsd(k)=buffer(k+ntpatm) -+ -+ enddo -+ -+ endif -+ -+c mean squared displacement -+ -+ do k=1,ntpatm -+ -+ amsd(k)=amsd(k)/dble(max(numtyp(k),1)) -+ -+ enddo -+ -+ return -+ end subroutine diffsn1 -+ -+ subroutine rdf0(iatm,ik,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for radial -+c distribution functions. -+c double precision accumulators -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm,ll,k -+ real(8) rcut,rcsq,rdelr,ai,aj,rsq,rrr -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut*rcut -+ -+c grid interval for rdf tables -+ -+ rdelr=dble(mxrdf)/rcut -+ -+c set up atom iatm type -+ -+ ai=ltype(iatm) -+ -+c start of primary loop for rdf accumulation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ -+ aj=ltype(jatm) -+ if(ai.gt.aj)then -+ k=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ else -+ k=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ endif -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ ll=int(rrr*rdelr+0.999999d0) -+ -+c accumulate statistics -+ -+ if(ll.le.mxrdf)rdf(ll,k)=rdf(ll,k)+1.d0 -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine rdf0 -+ -+ subroutine rdf1 -+ x (lpgr,idnode,mxnode,ntpatm,numrdf,volm,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating radial distribution functions -+c from accumulated data. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntpatm,numrdf,ia,ib,k,j -+ real(8) volm,factor,sum,rrr,dvol,gofr,rcut,delrdf -+ -+ logical lpgr,zero -+ -+ if(idnode.eq.0) write(nrite, -+ x "(/,/,12X,'RADIAL DISTRIBUTION FUNCTIONS',/,/, -+ x 'calculated using ',i10,' configurations')") numrdf -+ -+ if(lpgr)then -+ -+c open RDF file and write headers -+ -+ if(idnode.eq.0)then -+ -+ open(nrdfdt,file='RDFDAT') -+ -+ write(nrdfdt,'(80a1)')cfgname -+ write(nrdfdt,'(2i10)')mxxtyp,mxrdf -+ -+ endif -+ -+c default bin width -+ -+ delrdf=rcut/dble(mxrdf) -+ -+c construct rdf tables -+ -+ do ia=1,ntpatm -+ -+ do ib=ia,ntpatm -+ -+ k=(ib*(ib-1))/2+ia -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,'g(r) :',2a8,/,/,8x,'r',6x,'g(r)',9x,'n(r)',/)") -+ x unqatm(ia),unqatm(ib) -+ write(nrdfdt,'(2a8)')unqatm(ia),unqatm(ib) -+ -+ endif -+ -+c global sum of data on all nodes -+ -+ if(mxnode.gt.1) call gdsum(rdf(1,k),mxrdf,buffer) -+ -+c normalisation factor -+ -+ factor=volm*dens(ia)*dens(ib)*dble(numrdf) -+ if((ia.eq.ib).and.(volm*dens(ia).gt.1.d0)) -+ x factor=factor*0.5d0 -+ -+c running integration of rdf -+ -+ sum=0.d0 -+ -+c loop over distances -+ -+ zero=.true. -+ -+ do j=1,mxrdf -+ -+ if(zero.and.(j.lt.mxrdf-3)) -+ x zero=(rdf(j+2,k).le.0.d0) -+ -+ rrr=(dble(j)-0.5d0)*delrdf -+ dvol=4.d0*pi*(delrdf*rrr*rrr+(delrdf**3)/12.d0) -+ -+ gofr=rdf(j,k)/(factor*dvol) -+ sum=sum+gofr*dvol*dens(ib) -+ -+c print out information -+ -+ if(idnode.eq.0)then -+ -+ write(nrdfdt,"(1p,2e14.6)")rrr,gofr -+ if(.not.zero) -+ x write(nrite,"(f10.4,1p,2e14.6)")rrr,gofr,sum -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(idnode.eq.0)close (nrdfdt) -+ -+ endif -+ -+ return -+ end subroutine rdf1 -+ -+ subroutine static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating periodic data during the -+c molecular dynamics simulation and computing the rolling averages -+c -+c copyright daresbury laboratory 1992 -+c -+c author - w. smith august 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lbpd,lzeql,newjob -+ integer idnode,intsta,imcon,keyens,natms,nstack,nstep,j -+ integer nsteql,ntpatm,numacc,mxnode,i,iadd,k,kstak -+ integer nblock,keybpd,numbpd -+ real(8) consv,degfre,degrot,engang,engbnd,engcpe,engdih -+ real(8) enginv,engke,engrot,engsrp,engunit,engcfg,stpeng -+ real(8) stpeth,stpprs,stptmp,stpvir,stpvol,tstep,virbnd -+ real(8) engfbp,vircom,vircon,vircpe,virsrp,engfld,virfld -+ real(8) engtbp,virtbp,virpmf,virshl,engshl,engtet,virtet -+ real(8) degshl,shlke,virang,width,sclnv1,sclnv2,stprot -+ real(8) stpcns,stpshl,zistk,engmet,virmet,engter,virter -+ real(8) tbold,aterm,bterm,cterm,boost,tboost -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+c open statistics file for append -+ -+ if(newjob.and.idnode.eq.0.and.intsta.gt.0)then -+ -+ open(nstats,file='STATIS',position='append') -+ newjob=.false. -+ -+ endif -+ -+ if(idnode.eq.0.and.nstep.eq.intsta.and.intsta.gt.0)then -+ -+ write(nstats,'(80a1)') cfgname -+ if(abs(engunit-9648.530821d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-9648530.821d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kilo electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=DL_POLY Internal Units ')") -+ -+ endif -+ -+c calculate cell volume and minimum cell half-width -+ -+ if(imcon.eq.0)then -+ -+ width=0.d0 -+ -+ stpvol=0.d0 -+ do i=1,10 -+ celprp(i)=0.d0 -+ enddo -+ -+ else -+ -+ call dcell(cell,celprp) -+ stpvol=celprp(10) -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ -+ if(imcon.eq.4)then -+ -+ stpvol=0.5d0*celprp(10) -+ width=sqrt(3.d0)*cell(1)/4.d0 -+ -+ elseif(imcon.eq.5)then -+ -+ stpvol=0.5d0*celprp(10) -+ width=cell(1)/2.d0 -+ -+ elseif(imcon.eq.6)then -+ -+ width=min(celprp(7),celprp(8))/2.d0 -+ -+ elseif(imcon.eq.7)then -+ -+ stpvol=0.5d0*celprp(10) -+ -+ endif -+ -+ endif -+ -+c energetic properties of system -+ -+ stpvir=virsrp+vircpe+virbnd+vircon+vircom+virtbp+virang -+ x +virshl+virtet+virter+virmet+virfld -+ stpeng=engcfg+engke+engrot -+ stprot=2.d0*engrot/(boltz*max(1.d0,degrot)) -+ stpshl=2.d0*shlke/(boltz*max(1.d0,degshl)) -+ stptmp=2.d0*(engke+engrot)/(boltz*degfre) -+ stpprs=0.d0 -+ if(imcon.gt.0)stpprs=(2.d0*engke-stpvir)/(3.d0*stpvol) -+ stpeth=stpeng+stpprs*stpvol -+ stpcns=stpeng+consv -+ -+c convert pressure to units of katm -+ -+ stpprs=stpprs*prsunt -+ -+c calculate mean squared displacements -+c atomic displacements from origin of production run -+ -+ if((.not.lzeql).or.(nstep.gt.nsteql))then -+ -+ call diffsn0(idnode,natms,mxnode,tstep) -+ call diffsn1(idnode,natms,ntpatm,mxnode) -+ -+ endif -+ -+c zero statistics arrays -+ -+ if((nstep.le.0).or.(numacc.eq.0))then -+ -+ numacc=0 -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c store current values in statistics array -+ -+ stpval(1) =stpcns/engunit -+ stpval(2) =stptmp -+ stpval(3) =engcfg/engunit -+ stpval(4) =(engsrp+engmet+engter)/engunit -+ stpval(5) =engcpe/engunit -+ stpval(6) =engbnd/engunit -+ stpval(7) =(engang+engtbp)/engunit -+ stpval(8) =(engdih+enginv+engfbp)/engunit -+ stpval(9) =engtet/engunit -+ stpval(10)=stpeth/engunit -+ stpval(11)=stprot -+ stpval(12)=stpvir/engunit -+ stpval(13)=(virsrp+virmet+virter)/engunit -+ stpval(14)=vircpe/engunit -+ stpval(15)=virbnd/engunit -+ stpval(16)=(virtbp+virang)/engunit -+ stpval(17)=vircon/engunit -+ stpval(18)=virtet/engunit -+ stpval(19)=stpvol -+ stpval(20)=stpshl -+ stpval(21)=engshl/engunit -+ stpval(22)=virshl/engunit -+ stpval(23)=acos(celprp(6))*180.d0/pi -+ stpval(24)=acos(celprp(5))*180.d0/pi -+ stpval(25)=acos(celprp(4))*180.d0/pi -+ stpval(26)=virpmf/engunit -+ stpval(27)=stpprs -+ -+ iadd=27 -+ -+c mean squared displacements -+ -+ if((.not.lzeql).or.(nstep.gt.nsteql))then -+ -+ do k=1,ntpatm -+ -+ stpval(iadd+k)=amsd(k) -+ -+ enddo -+ -+ endif -+ -+ iadd=iadd+ntpatm -+ -+c stress tensor -+ -+ if(abs(stpvol).le.1.d-10) stpvol=1.d0 -+ do i=1,9 -+ stpval(iadd+i)=stress(i)*prsunt/(stpvol) -+ enddo -+ iadd=iadd+9 -+ -+c cell vectors -+ -+ if(keyens.gt.3.and.(keyens.le.7))then -+ do i=1,9 -+ stpval(iadd+i)=cell(i) -+ enddo -+ iadd=iadd+9 -+ endif -+ -+c check on number of variables for stack - -+ -+ if(iadd.gt.mxnstk) call error(idnode,170) -+ -+c accumulate totals over steps -+ -+ numacc=numacc+1 -+ sclnv2=1.d0/dble(numacc) -+ sclnv1=dble(numacc-1)/dble(numacc) -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+c calculate true thermodynamic averages in bias potential system -+c note integers numacc and numbpd should be equal in this case -+ -+ tbold=tboost*dble(numbpd)/dble(numbpd-1)-boost/dble(numbpd-1) -+ cterm=0.d0 -+ do i=1,mxnstk -+ -+ aterm=sumval(i)*tbold -+ bterm=ssqval(i)*tbold**2 -+ if(tbold.gt.0.d0)cterm=(bterm+aterm**2)/tbold -+ ssqval(i)=(sclnv1*(sclnv1*bterm+boost*sclnv2*(cterm+ -+ x (tbold*stpval(i)-2.d0*aterm)*stpval(i))))/tboost**2 -+ sumval(i)=(sclnv1*aterm+boost*sclnv2*stpval(i))/tboost -+ -+ enddo -+ -+ else -+ -+c calculate true thermodynamic averages in normal system -+ -+ do i=1,mxnstk -+ -+ ssqval(i)=sclnv1*(ssqval(i)+sclnv2*(stpval(i)-sumval(i))**2) -+ sumval(i)=sclnv1*sumval(i)+sclnv2*stpval(i) -+ -+ enddo -+ -+ endif -+ -+c write statistics file -+ -+ if(idnode.eq.0.and.intsta.gt.0)then -+ -+ if(mod(nstep,intsta).eq.0)then -+ -+ write(nstats,'(i10,1p,e14.6,0p,i10,/,(1p,5e14.6))') -+ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) -+ call flush(nstats) -+c$$$c write option for Excel spreadsheet -+c$$$ write(nstats,'(i10,1p,e14.6,0p,i10,300(1p,5e14.6))') -+c$$$ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) -+ -+ endif -+ -+ endif -+ -+c zero rolling average accumulators -+ -+ if(nstep.le.0)then -+ -+ numacc=0 -+ -+ do i=1,mxnstk -+ -+ zumval(i)=0.d0 -+ -+ do j=1,mxstak -+ -+ stkval(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c store quantities in stack -+ -+ kstak=mod(nstep-1,nstack)+1 -+ -+ if(nstep.gt.nstack)then -+ -+ do i=1,mxnstk -+ -+ zumval(i)=zumval(i)-stkval(kstak,i) -+ -+ enddo -+ -+ endif -+ -+ do i=1,mxnstk -+ -+ stkval(kstak,i)=stpval(i) -+ zumval(i)=zumval(i)+stpval(i) -+ -+ enddo -+ -+c calculate rolling averages -+ -+ zistk=min(nstack,nstep) -+ -+ do i=1,mxnstk -+ -+ ravval(i)=zumval(i)/zistk -+ -+ enddo -+ -+c zero accumulators during equilibration period -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numacc=0 -+ do i=1,mxnstk -+ -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c close statistics file at regular intervals -+ -+ if(.not.newjob.and.mod(nstep,ndump).eq.0)then -+ -+ if(idnode.eq.0)close (nstats) -+ newjob=.true. -+ -+ endif -+ -+ return -+ end subroutine static -+ -+ subroutine revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing restart files at job termination -+c or at selected intervals in simulation -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith dec 1992. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden -+ integer idnode,imcon,mxnode,natms,nstep,nzden,numacc,numrdf -+ integer levcfg,nsum,nbuff,i,j -+ real(8) chip,chit,conint,tstep,engcfg,rmxnode,virtot,vircom -+ real(8) tboost,chit_shl -+ -+ if(mxnode.gt.1)then -+ -+c merge displacement data -+ -+ call merge(idnode,mxnode,natms,mxbuff,xx0,yy0,zz0,buffer) -+ -+c globally sum rdf information before saving -+ -+ if(lgofr)then -+ -+c maximum rdfs that can be summed in each step -+ -+ nsum=mxbuff/mxrdf -+ if(nsum.eq.0) call error(idnode,200) -+ -+ nbuff=nsum*mxrdf -+ -+ do i=1,mxxtyp,nsum -+ -+ if((mxxtyp+1-i).lt.nsum) nbuff=(mxxtyp+1-i)*mxrdf -+ call gdsum(rdf(1,i),nbuff,buffer) -+ -+ enddo -+ -+ endif -+ -+c globally sum zden information before saving -+ -+ if(lzden)then -+ -+c maximum zdfs that can be summed in each step -+ -+ nsum=mxbuff/mxzdn -+ if(nsum.eq.0) call error(idnode,200) -+ -+ nbuff=nsum*mxzdn -+ -+ do i =1,mxatyp,nsum -+ -+ if((mxatyp+1-i).lt.nsum) nbuff=(mxatyp+1-i)*mxzdn -+ call gdsum(zdens(1,i),nbuff,buffer) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c node 0 handles i/o -+ -+ if(idnode.eq.0)then -+ -+c write configuration data to new configuration file -+ -+ call config_write('REVCON',levcfg,imcon,natms,engcfg) -+ -+c write accumulator data to dump file -+ -+ open(nrest,file='REVIVE',form='unformatted') -+ -+ write(nrest) dble(nstep),dble(numacc),dble(numrdf),chit, -+ x chip,conint,dble(nzden),tboost,chit_shl -+ write(nrest) virtot,vircom,eta,strcns,strbod -+ write(nrest) stpval -+ write(nrest) sumval -+ write(nrest) ssqval -+ write(nrest) zumval -+ write(nrest) ravval -+ write(nrest) stkval -+ write(nrest) xx0,yy0,zz0 -+ write(nrest) xxs,yys,zzs -+ if(lgofr) write(nrest) rdf -+ if(lzden) write(nrest) zdens -+ -+ close (nrest) -+ -+ endif -+ -+c divide rdf data between nodes -+ -+ rmxnode=1.d0/dble(mxnode) -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=rdf(j,i)*rmxnode -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c divide zdensity data between nodes -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ -+ zdens(j,i)=zdens(j,i)*rmxnode -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine revive -+ -+ subroutine zden0(idnode,natms,mxnode,nzden,zlen) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for density profile -+c zlen=length of cell in z direction -+c -+c double precision accumulators -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nzden,iatm,ll,k -+ real(8) zlen,zleno2,rzdn -+ -+c accumulator -+ -+ nzden=nzden+1 -+ -+c half of z length -+ -+ zleno2=zlen*0.5d0 -+ -+c grid interval for density profiles -+ -+ rzdn=dble(mxzdn)/zlen -+ -+c set up atom iatm type -+ -+ do iatm=idnode+1,natms,mxnode -+ -+ k =ltype(iatm) -+ -+ ll=int((zzz(iatm)+zleno2)*rzdn+1.0d0) -+ -+c accumulate statistic -+ -+ if(ll.gt.0.and.ll.le.mxzdn)zdens(ll,k)=zdens(ll,k)+1.d0 -+ -+ enddo -+ -+ return -+ end subroutine zden0 -+ -+ subroutine zden1 -+ x (lpgr,idnode,mxnode,ntpatm,nzden,volm,zlen) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating Z density profile -+c from accumulated data. -+c double precision version -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lpgr -+ integer idnode,mxnode,ntpatm,nzden,k,j -+ real(8) volm,zlen,delzdn,dvolz,factor,sum,rrr,rho -+ -+ if(idnode.eq.0) write(nrite, -+ x "(/,/,12X,'Z DENSITY PROFILES',/,/, -+ x 'calculated using ',i10,' configurations')") nzden -+ -+ if(lpgr)then -+ -+c open Z density file and write headers -+ -+ if(idnode.eq.0)then -+ -+ open(nzdndt,file='ZDNDAT') -+ -+ write(nzdndt,'(80a1)')cfgname -+ write(nzdndt,'(2i10)')ntpatm,mxzdn -+ -+ endif -+ -+c volume of z strip (arbitrary) -+ -+ delzdn=zlen/dble(mxzdn) -+ dvolz=(volm/zlen)*delzdn -+ -+c normalisation factor -+ -+ nzden=max(nzden,1) -+ factor=1.d0/(dble(nzden)*dvolz) -+ -+ do k=1,ntpatm -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,'rho(r) :',a8,/,/,8x,'r',6x,'rho',9x,'n(r)',/)") -+ x unqatm(k) -+ write(nzdndt,'(a8)')unqatm(k) -+ -+ endif -+ -+c global sum of data on all nodes -+ -+ if(mxnode.gt.1)call gdsum(zdens(1,k),mxzdn,buffer) -+ -+c running integration of z-density -+ -+ sum=0.d0 -+ -+c loop over distances -+ -+ do j=1,mxzdn -+ -+ rrr=(dble(j)-0.5d0)*delzdn-zlen*0.5d0 -+ rho=zdens(j,k)*factor -+ sum=sum+rho*dvolz -+ -+c print out information -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(f10.4,1p,2e14.6)") rrr,rho,sum -+ write(nzdndt,"(1p,2e14.6)") rrr,rho -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(idnode.eq.0)close (nzdndt) -+ -+ endif -+ -+ return -+ end subroutine zden1 -+ -+ subroutine rdf0neu(ik,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for radial -+c distribution functions. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c amended t. forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ik,m,iatm,jatm,ll,k -+ real(8) rcut,a0,a1,a2,a3,a4,a5,rcsq,rrcsq,sqlim,rdelr -+ real(8) ai,aj,rsq,rrr,sss -+ -+ data a0,a1,a2,a3,a4,a5/.0837557783d0,2.9399054d0,-7.8475201d0, -+ x 14.1328992d0,-12.6228528d0,4.32084948d0/ -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ rrcsq=1.d0/rcsq -+ sqlim=0.01d0*rcsq -+ -+c grid interval for rdf tables -+ -+ rdelr=dble(mxrdf)/rcut -+ -+c start of primary loop for rdf accumulation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ iatm=ilist(m) -+ ai=ltype(iatm) -+ -+ jatm=jlist(m) -+ aj=ltype(jatm) -+ -+ if(ai.gt.aj)then -+ ll=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ k=lstvdw(ll) -+ else -+ ll=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ k=lstvdw(ll) -+ endif -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+c determine interpolation panel for rdf table -+ -+ if(rsq.lt.sqlim)then -+ -+ rrr=sqrt(rsq) -+ -+ else -+ -+c interpolate square-root by polynomial plus newton-raphson -+ -+ sss=rsq*rrcsq -+ rrr=1.d0/ -+ x (a0 +sss*(a1+sss*(a2+sss*(a3+sss*(a4+sss*a5))))) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr)*sss*rcut -+ -+ endif -+ -+ ll=int(rrr*rdelr+0.999999d0) -+ -+c accumulate statistics -+ -+ rdf(ll,k)=rdf(ll,k)+1.d0 -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine rdf0neu -+ -+ end module property_module -diff -urN dl_class_1.9.orig/srcmod/rigid_body_module.f dl_class_1.9/srcmod/rigid_body_module.f ---- dl_class_1.9.orig/srcmod/rigid_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/rigid_body_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,243 @@ -+ module rigid_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining rigid body arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: omx(:),omy(:),omz(:) -+ real(8), allocatable :: gcmx(:),gcmy(:),gcmz(:) -+ real(8), allocatable :: gvxx(:),gvyy(:),gvzz(:),gmass(:) -+ real(8), allocatable :: q0(:),q1(:),q2(:),q3(:) -+ real(8), allocatable :: gxx(:,:),gyy(:,:),gzz(:,:) -+ real(8), allocatable :: rotinx(:,:),rotiny(:,:),rotinz(:,:) -+ integer, allocatable :: lstrgd(:),numgsit(:),lstgtp(:) -+ integer, allocatable :: listyp(:),lstgst(:,:),lstfre(:) -+ integer, allocatable :: lstme(:),lstbod(:),lstcsit(:) -+ -+ save omx,omy,omz,gcmx,gcmy,gcmz,gvxx,gvyy,gvzz,gmass -+ save q0,q1,q2,q3,gxx,gyy,gzz,rotinx,rotiny,rotinz -+ save lstrgd,numgsit,lstgtp,listyp,lstgst,lstfre,lstme -+ save lstbod,lstcsit -+ -+ contains -+ -+ subroutine alloc_rgbdy_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (omx(mxgrp),omy(mxgrp),omz(mxgrp),stat=fail(1)) -+ allocate (gcmx(mxgrp),gcmy(mxgrp),gcmz(mxgrp),stat=fail(2)) -+ allocate (gvxx(mxgrp),gvyy(mxgrp),gvzz(mxgrp),stat=fail(3)) -+ allocate (q0(mxgrp),q1(mxgrp),q2(mxgrp),q3(mxgrp),stat=fail(4)) -+ allocate (gxx(mxungp,mxngp),gyy(mxungp,mxngp),stat=fail(5)) -+ allocate (gzz(mxungp,mxngp),gmass(mxungp),stat=fail(6)) -+ allocate (rotinx(mxungp,2),rotiny(mxungp,2),stat=fail(7)) -+ allocate (rotinz(mxungp,2),lstgtp(mxgrp),stat=fail(8)) -+ allocate (lstrgd(mxgatm),numgsit(mxungp),stat=fail(9)) -+ allocate (listyp(mxungp),lstgst(mxungp,mxngp),stat=fail(10)) -+ allocate (lstfre(mxatms),lstme(mxatms),stat=fail(11)) -+ allocate (lstbod(mxatms),lstcsit(2*mxcons),stat=fail(12)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1013) -+ enddo -+ -+ end subroutine alloc_rgbdy_arrays -+ -+ subroutine define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c adapted - p-a cazade oct 2007, solvation, excitation etc. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lghost,site_test -+ integer idnode,itmols,ngrp,ntmp,idum,igrp -+ integer j,site,natmsr -+ -+ ngrp_ghost=0 -+ ntmp=intstr(record,lenrec,idum) -+ numgrp(itmols)=numgrp(itmols)+ntmp -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of rigid units ', -+ x 6x,i10)") ntmp -+ write(nrite,"(/,' rigid body details:',/,/,21x, -+ x 6x,'unit',3x,'indices',/) ") -+ endif -+ -+ do igrp=1,numgrp(itmols) -+ -+ ngrp=ngrp+1 -+ site_test=.true. -+ -+ if(ngrp.gt.mxungp) call error(idnode,301) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ numgsit(ngrp)=intstr(record,lenrec,idum) -+ if(numgsit(ngrp).gt.mxngp) -+ x call error (idnode,302) -+ -+ listyp(ngrp)=ngrp -+ -+ do j=1,numgsit(ngrp) -+ -+ site=intstr(record,lenrec,idum) -+ -+ if(site.eq.0)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ site=intstr(record,lenrec,idum) -+ -+ endif -+ -+ lstgst(ngrp,j)=site -+ -+ if(lghost)then -+ -+ if(site_test)then -+ -+ if(site+natmsr.ge.ind_fre(3))then -+ -+ site_test=.false. -+ ngrp_ghost=ngrp_ghost+1 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0) -+ x write(nrite,"(21x,10i10,100(/,21x,10i10))") -+ x listyp(ngrp),(lstgst(ngrp,j),j=1, -+ x numgsit(ngrp)) -+ -+ enddo -+ -+ numgrp(itmols)=numgrp(itmols)-ngrp_ghost -+ ngrp=ngrp-ngrp_ghost -+ -+ return -+ end subroutine define_rigid_body -+ -+ subroutine bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to calculate rigid body contributions to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author w.smith aug 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,j,ig,id,jr,igrp1,igrp2,idnode,mxnode,ngrp -+ real(8) vircom,strbod,dtx,dty,dtz -+ -+ dimension dtx(mxatms),dty(mxatms),dtz(mxatms),strbod(9) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c zero stress tensor accumulators -+ -+ vircom=0.d0 -+ do i=1,9 -+ strbod(i)=0.d0 -+ enddo -+ -+c convert atomic virial to molecular -+c note convention: virial(atom-atom)=-sum(Ri.Fi) -+c : virial(com-com)=-sum(Rcom.Fcom) so -+c virial(com-com)=virial(atom-atom)+sum((Ri-Rcom).Fi) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ vircom=vircom+ -+ x (dtx(jr)*fxx(i)+dty(jr)*fyy(i)+dtz(jr)*fzz(i)) -+ -+c stress tensor : rigid body contributions -+ -+ strbod(1)=strbod(1)-dtx(jr)*fxx(i) -+ strbod(2)=strbod(2)-dtx(jr)*fyy(i) -+ strbod(3)=strbod(3)-dtx(jr)*fzz(i) -+ strbod(4)=strbod(4)-dty(jr)*fxx(i) -+ strbod(5)=strbod(5)-dty(jr)*fyy(i) -+ strbod(6)=strbod(6)-dty(jr)*fzz(i) -+ strbod(7)=strbod(7)-dtz(jr)*fxx(i) -+ strbod(8)=strbod(8)-dtz(jr)*fyy(i) -+ strbod(9)=strbod(9)-dtz(jr)*fzz(i) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(strbod,9,buffer) -+ buffer(1)=vircom -+ call gdsum(buffer(1),1,buffer(2)) -+ vircom=buffer(1) -+ -+ endif -+ -+c symmetrise stress tensor -+ -+ strbod(2)=0.5d0*(strbod(2)+strbod(4)) -+ strbod(4)=strbod(2) -+ strbod(3)=0.5d0*(strbod(3)+strbod(7)) -+ strbod(7)=strbod(3) -+ strbod(6)=0.5d0*(strbod(6)+strbod(8)) -+ strbod(8)=strbod(6) -+ -+ return -+ end subroutine bodystress -+ -+ end module rigid_body_module -diff -urN dl_class_1.9.orig/srcmod/serial.f dl_class_1.9/srcmod/serial.f ---- dl_class_1.9.orig/srcmod/serial.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/serial.f 2015-11-16 17:18:13.452475827 +0100 -@@ -0,0 +1,543 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c dummy initcomms routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ return -+ end -+ -+ integer*8 function get_comms() -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY with PLUMED -+c -+c******************************************************************** -+ -+ implicit none -+ -+ get_comms=0 -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode -+ -+ idnode=0 -+ mxnode=1 -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c dummy mynode routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ mynode=0 -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c dummy nodedim routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ nodedim=0 -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c dummy numnodes routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ numnodes=1 -+ -+ return -+ end -+ -+ subroutine csend(msgtag,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c dummy csend routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer msgtag,length,pe,idum -+ -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine crecv(msgtag,buf,length) -+ -+c********************************************************************* -+c -+c dummy crecv routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer msgtag,length -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy isum for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ real(8) aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ stop -+ end -+ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms -+ integer lstme(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff -+ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode, mxnode, natms -+ integer lishap(*),lashap(*) -+ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,natms -+ integer listme(*),listot(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lshmov -+ integer idnode,mxnode,natms,nscons,i,j,k -+ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) -+ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) -+ integer lstfrz(mxatms) -+ -+ do i=1,natms -+ listme(i)=0 -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ listot(i)=1 -+ else -+ listot(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use error_module -+ use setup_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,i,j,k -+ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ integer lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ listpm(i)=0 -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+ -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ lstpmt(i)=1 -+ else -+ lstpmt(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lcnb -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 -+ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp -+ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) -+ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) -+ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ lcnb = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ lcnb = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ lcnb = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ lcnb = (.not.lcnb) -+ -+ return -+ end -+ -diff -urN dl_class_1.9.orig/srcmod/serial.f.preplumed dl_class_1.9/srcmod/serial.f.preplumed ---- dl_class_1.9.orig/srcmod/serial.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/serial.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,529 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c dummy initcomms routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode -+ -+ idnode=0 -+ mxnode=1 -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c dummy mynode routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ mynode=0 -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c dummy nodedim routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ nodedim=0 -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c dummy numnodes routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ numnodes=1 -+ -+ return -+ end -+ -+ subroutine csend(msgtag,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c dummy csend routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer msgtag,length,pe,idum -+ -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine crecv(msgtag,buf,length) -+ -+c********************************************************************* -+c -+c dummy crecv routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer msgtag,length -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy isum for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ real(8) aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ stop -+ end -+ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms -+ integer lstme(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff -+ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode, mxnode, natms -+ integer lishap(*),lashap(*) -+ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,natms -+ integer listme(*),listot(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lshmov -+ integer idnode,mxnode,natms,nscons,i,j,k -+ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) -+ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) -+ integer lstfrz(mxatms) -+ -+ do i=1,natms -+ listme(i)=0 -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ listot(i)=1 -+ else -+ listot(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use error_module -+ use setup_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,i,j,k -+ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ integer lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ listpm(i)=0 -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+ -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ lstpmt(i)=1 -+ else -+ lstpmt(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lcnb -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 -+ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp -+ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) -+ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) -+ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ lcnb = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ lcnb = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ lcnb = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ lcnb = (.not.lcnb) -+ -+ return -+ end -+ -diff -urN dl_class_1.9.orig/srcmod/setup_module.f dl_class_1.9/srcmod/setup_module.f ---- dl_class_1.9.orig/srcmod/setup_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/setup_module.f 2011-07-11 17:09:10.000000000 +0200 -@@ -0,0 +1,1664 @@ -+ module setup_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining default array sizes -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c note the following internal units apply everywhere -+c -+c unit of time (to) = 1 x 10**(-12) seconds -+c unit of length (lo) = 1 x 10**(-10) metres -+c unit of mass (mo) = 1.6605402 x 10**(-27) kilograms -+c unit of charge (qo) = 1.60217733 x 10**(-19) coulombs -+c unit of energy (eo) = 1.6605402 x 10**(-23) joules -+c unit of pressure (po) = 1.6605402 x 10**( 7) pascals -+c -+c********************************************************************* -+ -+ use parse_module -+ -+ implicit none -+ -+c FIXED PARAMETERS -+ -+c standard pi values -+ -+ real(8), parameter :: pi=3.141592653589793d0 -+ real(8), parameter :: sqrpi=1.7724538509055159d0 -+ -+c conversion factor for coulombic terms in internal units -+c i.e. (unit(charge)**2/(4 pi eps0 unit(length))/unit(energy) -+ -+ real(8), parameter :: r4pie0=138935.4835d0 -+ -+c boltzmann constant in internal units -+ -+ real(8), parameter :: boltz=8.31451115d-1 -+ -+c planck's constant in internal units -+ -+ real(8), parameter :: hbar=6.350780719d0 -+ -+c conversion factor for pressure from internal units to katm -+ -+ real(8), parameter :: prsunt=0.163882576d0 -+ -+c main input channel -+ -+ integer, parameter :: nread=5 -+ -+c main output channel -+ -+ integer, parameter :: nrite=6 -+ -+c force field input channel -+ -+ integer, parameter :: nfield=9 -+ -+c configuration file input channel -+ -+ integer, parameter :: nconf=10 -+ -+c statistical data file output channel -+ -+ integer, parameter :: nstats=20 -+ -+c trajectory history file channel -+ -+ integer, parameter :: nhist=21 -+ -+c acummulators restart dump file -+ -+ integer, parameter :: nrest=22 -+ -+c tabulated potential file channel -+ -+ integer, parameter :: ntable=23 -+ -+c rdf file channel number -+ -+ integer, parameter :: nrdfdt=24 -+ -+c z density file channel number -+ -+ integer, parameter :: nzdndt=25 -+ -+c hyperdynamics reference basin file -+ -+ integer, parameter :: nbsn=30 -+ -+c neb reaction path profile file -+ -+ integer, parameter :: npro=31 -+ -+c hyperdynamics events journal file -+ -+ integer, parameter :: nevnt=33 -+ -+c hyperdynamics tracking file -+ -+ integer, parameter :: ntrk=32 -+ -+c hyperdynamics restart file -+ -+ integer, parameter :: nhrs=35 -+ -+c free energy data file -+ -+ integer, parameter :: nfrnwr=41 -+ -+c solvation data file -+ -+ integer, parameter :: nsolwr=43 -+ -+c data dumping interval in event of system crash -+ -+ integer, parameter :: ndump=1000 -+ -+c maximum number of neb calculations -+ -+ integer, parameter :: maxneb=10 -+ -+c array allocation parameters (set by subroutine parset) -+ -+ integer kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp -+ integer mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell -+ integer mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid -+ integer mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang -+ integer mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw -+ integer mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd -+ integer mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp -+ integer mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl -+ integer kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke -+ integer mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp -+ integer mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc -+ integer mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol -+ -+ save kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp -+ save mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell -+ save mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid -+ save mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang -+ save mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw -+ save mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd -+ save mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp -+ save mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl -+ save kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke -+ save mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp -+ save mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc -+ save mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol -+ -+ contains -+ -+ subroutine parset(redirect,idnode,mxnode,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to determine required array sizes for -+c allocation of memory manager -+c -+c copyright daresbury laboratory 1997 -+c author - w.smith june 1997 -+c -+c*********************************************************************** -+ -+ logical loglnk,lewald,lspme,lhke,nolink,lcshft -+ logical lsolva,lfree,lfrmas,lghost,redirect -+ real(8) cell,celprp,rctbp,rcfbp,volm,xhi,yhi,zhi,rcut,rvdw -+ real(8) densvar,delr,cut,dens,ratio,drdf,dzdn,rcter,buffer -+ real(8) zlen -+ integer imcon,nhko,ilx,ily,ilz,ncells -+ integer idnode,mxnode,mxn1 -+ -+ dimension cell(9),celprp(10),buffer(10) -+ -+ lhke=.false. -+ lspme=.false. -+ lewald=.false. -+ lcshft=.false. -+ nolink=.false. -+ redirect=.false. -+ mxtmls_sol=1 -+ mxebuf_sol=1 -+ mxatms_sol=1 -+ mxtmls_fre=1 -+ mxewld_fre=1 -+ mxebuf_fre=1 -+ mxatms_fre=1 -+ mxatyp_exc=1 -+ mxtmls_exc=1 -+ -+c specify maximum and minimum nodes -+ -+ mxproc=mxnode -+ minnode=mxnode -+ -+c scan the FIELD file data -+ -+ call fldscan(idnode,mxn1,rctbp,rcfbp,rcter) -+ -+c scan CONFIG file data -+ -+ call cfgscan -+ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) -+ -+c scan CONTROL file data -+ -+ call conscan -+ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, -+ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, -+ x zlen,cell) -+ -+c set dimension of working coordinate arrays -+ -+ msatms=max(1,(mxatms+minnode-1)/minnode) -+ if(lsolva)mxatms_sol=mxatms -+ if(lfree.or.lghost)mxatms_fre=mxatms -+ -+c maximum number of molecule types -+ -+ mxtmls=max(mxtmls,1) -+ if(lsolva)mxtmls_sol=mxtmls -+ if(lfree)mxtmls_fre=mxtmls -+ if(lghost)then -+ -+ mxtmls_exc=mxtmls -+ mxtmls_fre=mxtmls -+ -+ endif -+ -+c maximum number of specified bondlength constraints -+ -+ mxtcon=max(mxtcon,1) -+ -+c maximum number of chemical bond potentials -+ -+ mxtbnd=max(mxtbnd,1) -+ -+c maximum number of different bond angle potentials -+ -+ mxtang=max(mxtang,1) -+ -+c maximum number of different torsional potentials -+ -+ mxtdih=max(mxtdih,1) -+ -+c maximum number of different inversion potentials -+ -+ mxtinv=max(mxtinv,1) -+ -+c maximum number of unique rigid body units -+ -+ mxungp=max(mxungp,1) -+ -+c maximum number of tethered atom potentials -+ -+ mxteth=max(mxteth,1) -+ -+c maximum number of core-shell units -+ -+ mxshl=max(mxshl,1) -+ -+c set maximum number of unique atom types -+ -+ mxatyp=max(1,mxatyp) -+ mxxtyp=(mxatyp*(mxatyp+1))/2 -+ if(lghost)mxatyp_exc=mxatyp -+ -+c maximum number of vdw potentials -+ -+ mxvdw=max(mxvdw,1)+1 -+ -+c maximum number of metal potentials -+ -+ mxmet=max(mxmet,1)+1 -+ mxsmet=mxatyp -+ -+c maximum number of tersoff potentials -+ -+ if(mxter.gt.0)then -+ -+ mxter=mxatyp -+ -+ endif -+ -+c maximum number of three body potentials -+ -+ if(mxtbp.eq.0)then -+ -+ mx2tbp=0 -+ -+ else -+ -+ mx2tbp=(mxatyp*(mxatyp+1))/2 -+ mxtbp=mx2tbp*mxatyp -+ -+ endif -+ -+c maximum number of four body potentials -+ -+ if(mxfbp.eq.0)then -+ -+ mx3fbp=0 -+ -+ else -+ -+ mx3fbp=(mxatyp*(mxatyp+1)*(mxatyp+2))/6 -+ mxfbp=mxatyp*mx3fbp -+ -+ endif -+ -+c maximum number of angular potential parameters -+ -+ mxpang=6 -+ -+c maximum number of three body potential parameters -+ -+ mxptbp=mxpang+1 -+ -+c maximum number of four body potential parameters -+ -+ mxpfbp=3 -+ -+c maximum number of parameters for dihedrals -+ -+ mxpdih=5 -+ -+c maximum number of parameters for inversion potentials -+ -+ mxpinv=2 -+ -+c maximum number of parameters for bond potentials -+ -+ mxpbnd=4 -+ -+c maximum number of parameters for vdw potentials -+ -+ mxpvdw=6 -+ -+c maximum number of parameters for metal potentials -+ -+ mxpmet=7 -+ -+c maximum number of parameters for tersoff potential -+ -+ mxpter=11 -+ -+c maximum number of external field parameters -+ -+ mxfld=10 -+ -+c maximum number of excluded atoms per atom -+ -+ mxexcl=max(mxexcl,1) -+ -+c maximum number of different sites in system -+ -+ mxsite=max(mxsite,1) -+ -+c maximum number of chemical bonds per node -+ -+ mxbond=max(1,(mxbond+minnode-1)/minnode) -+ -+c maximum number of bond angles per node -+ -+ mxangl=max(1,(mxangl+minnode-1)/minnode) -+ -+c maximum number of torsion angles per node -+ -+ mxdihd=max(1,(mxdihd+minnode-1)/minnode) -+ -+c maximum number of inversion potentials per node -+ -+ mxinv=max(1,(mxinv+minnode-1)/minnode) -+ -+c maximum number of constraints per node -+ -+ mxcons=max(1,2*((mxcons+minnode-1)/minnode)) -+ -+c maximum number of tethered atoms per node -+ -+ msteth=max(1,(msteth+minnode-1)/minnode) -+ -+c maximum size for working arrays for bonds, angles, dihedrals -+c inversion potentials, tethers and core-shell units -+ -+ msbad=max(mxbond,mxangl,mxdihd,mxinv,msteth,mxshl) -+ -+c maximum number of grid points in potentials arrays -+ -+ if(mxgrid.eq.0)then -+ -+ mxgrid=max(1000,int(rvdw/0.01d0+0.5d0)+4) -+ -+ endif -+ -+ mxegrd=0 -+ if(lewald.or.lspme.or.lhke.or.lcshft)mxegrd=mxgrid -+ -+c maximum dimension of rdf arrays -+ -+ mxrdf=max(128,int(rcut/drdf)) -+ -+c maximum dimension of zdensity arrays -+ -+ mxzdn=max(128,int(zlen/dzdn)) -+ -+c maximum number of rigid groups in system -+ -+ mxgrp=max(mxgrp,1) -+ -+c maximum number of rigid groups per node -+ -+ msgrp=max(1,(mxgrp+minnode-1)/minnode) -+ -+c maximum number of sites per rigid unit -+ -+ mxngp=max(mxngp,3) -+ -+c maximum number of sites in rigid units -+ -+ mxgatm=max(1,mxgatm) -+ -+c maximum number of timesteps in stack arrays -+ -+ mxstak=max(100,mxstak) -+ -+c maximum number of variables in stack arrays -+ -+ mxnstk=45+mxatyp -+ -+c dimension of shake shared atoms array -+ -+ mxlshp=max(mxcons*2,1) -+ -+c set dimension of working arrays in ewald sum -+ -+ mxewld=1 -+ mxebuf=1 -+ if(lewald)then -+ -+ mxftab=1 -+ mxewld=msatms -+ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)*(2*kmaxc+1)-1 -+ if(lfree.or.lghost)mxebuf=3*mxebuf -+ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 -+ -+ endif -+ -+c set dimension of working arrays in spme -+ -+ mxspme=1 -+ if(lspme)then -+ -+ mxspme=mxatms -+ mxftab=2*(kmaxd+kmaxe+kmaxf) -+ -+ endif -+ -+c set dimension of working arrays for HK ewald -+ -+ mxhko=1 -+ mxhke=1 -+ if(lhke)then -+ -+ mxhko=2 -+ mxewld=msatms -+ mxhke=msatms -+ if(nhko.gt.0)mxhko=max(2,nhko) -+ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)-1 -+ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 -+ -+ endif -+ -+ if(lsolva)mxebuf_sol=mxebuf -+ if(lfree.or.lghost)then -+ -+ mxebuf_fre=mxebuf -+ mxewld_fre=mxewld -+ -+ endif -+ -+c maximum dimension of principal transfer buffer -+ -+ mxbuff=max(6*mxatms,8*(mxcons+1),8*(mxgrp+1),mxnstk*mxstak, -+ x mxebuf,mxgrid,2*kmaxa*kmaxb*kmaxc,2*kmaxd*kmaxe*kmaxf, -+ x 10000) -+ -+c maximum size of verlet neighbour/link cell list for each atom -+c decide if link-cells in use or not -+ -+ cut=rcut+delr -+ dens=dble(mxatms)/volm -+ ratio=1.5d0*dens*(4.d0*pi/3.d0)*cut**3 -+ mxlist=min(nint(ratio),(mxatms+1)/2) -+ if(imcon.eq.0) then -+ -+ cell(1)=max(xhi+2.d0*cut,3.d0*cut) -+ cell(5)=max(yhi+2.d0*cut,3.d0*cut) -+ cell(9)=max(zhi+2.d0*cut,3.d0*cut) -+ -+ endif -+ if(imcon.eq.6)then -+ -+ cell(9)=max(zhi+2.d0*cut,3.d0*cut,cell(9)) -+ -+ endif -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ call dcell(cell,celprp) -+ ilx=int(celprp(7)/cut) -+ ily=int(celprp(8)/cut) -+ ilz=int(celprp(9)/cut) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(mxneut.gt.0.and.ncells.le.36) loglnk=.false. -+ -+ endif -+ -+ mxcell=1 -+ if(loglnk)then -+ -+ mxlist=14*nint(1.5d0*dens*celprp(10)/dble(ncells)) -+ mxcell=(ilx+2)*(ily+2)*(ilz+2) -+ -+ endif -+ -+ if(mxneut.gt.0)mxlist=(mxneut+1)/2 -+ mxlist=2*mxlist -+ if(mxtbp.gt.0.or.mxfbp.gt.0.or.mxter.gt.0)then -+ -+ if(mxtbp.gt.0)cut=min(cut,rctbp) -+ if(mxfbp.gt.0)cut=min(cut,rcfbp) -+ if(mxter.gt.0)cut=min(cut,rcter) -+ ilx=max(3,int(celprp(7)/cut)) -+ ily=max(3,int(celprp(8)/cut)) -+ ilz=max(3,int(celprp(9)/cut)) -+ mxcell=max(mxcell,(ilx+2)*(ily+2)*(ilz+2)) -+ -+ endif -+ mxcell=int(dble(mxcell)*densvar/100.d0) -+ mxlist=int(dble(mxlist)*densvar/100.d0) -+ mxlist=max(500,mxlist) -+ -+c maximum size for coordinate difference arrays -+ -+ mxxdf=max(mxlist,mxatms,mxcons,mxn1*mxn1*(mxneut+1)/2) -+ -+c maximum number of core-shell unit types -+ -+ mxtshl=max(mxtshl,1) -+ -+c potential of mean force array parameter -+ -+ mxpmf=max(mxpmf,1) -+ -+c number of pmf constraints on a processor -+ -+ mspmf=max(1,(mxpmf+minnode-1)/minnode) -+ -+c maximum number of sites to define pmf units -+ -+ mxspmf=max(mxspmf,1) -+ -+c maximum iterations in quaternion integration -+ -+ mxquat=100 -+ -+c maximum number of shake cycles -+ -+ mxshak=100 -+ -+c maximum b-spline interpolation order -+ -+ mxspl=12 -+ -+c increment mxneut -+ -+ if(mxneut.gt.0)mxneut=mxneut+1 -+ -+ return -+ -+ end subroutine parset -+ -+ subroutine fldscan(idnode,mxn1,rctbp,rcfbp,rcter) -+ -+c*********************************************************************** -+c -+c dl_poly routine for scanning the field file to determine the -+c required parameters -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith november 1994 -+c -+c*********************************************************************** -+ -+ integer, parameter :: mmk=1000 -+ -+ character*8 name,keyword,chr(mmk) -+ logical check,ltable,lmetab,safe,lneut,loop1,loop2 -+ real(8) rctbp,rcter,rcfbp,rct,ppp -+ integer mxn1,nxn1,idnode,nold -+ integer itmols,ksite,numsit,isite,nrept,ifrz,i,j -+ integer ishls,ibonds,numcon,numang,icon,iang,idih,numdih -+ integer numinv,iinv,numgrp,kgrp,numgsit,numteth,iteth -+ integer ipmf,jpmf,npmf,itpvdw,itptbp,itpfbp -+ integer itpter,k,nfld,nummols,idum,numshl,nneu -+ integer numbonds,itpmet,iii,ngrid -+ -+ mxtmls=0 -+ mxatms=0 -+ mxgrp=0 -+ mxtcon=0 -+ mxtbnd=0 -+ mxtang=0 -+ mxtdih=0 -+ mxtinv=0 -+ mxpmf=0 -+ mxspmf=0 -+ mxungp=0 -+ mxngp=0 -+ mxneut=0 -+ mxmet=0 -+ mxatyp=0 -+ mxn1=0 -+ nxn1=0 -+ nold=-1 -+ mxgatm=0 -+ mxteth=0 -+ msteth=0 -+ mxvdw=0 -+ mxtbp=0 -+ mxter=0 -+ mxexcl=0 -+ mxsite=0 -+ mxbond=0 -+ mxcons=0 -+ mxangl=0 -+ mxdihd=0 -+ mxinv=0 -+ mxshl=0 -+ mxtshl=0 -+ mxfbp=0 -+ mxgrid=0 -+ rctbp=0.d0 -+ rcter=0.d0 -+ rcfbp=0.d0 -+ safe=.true. -+ loop1=.true. -+ loop2=.true. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD') -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ -+ if(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ -+ elseif(findstring('molecu',record,idum))then -+ -+ mxtmls=intstr(record,lenrec,idum) -+ -+ do itmols=1,mxtmls -+ -+ loop2=.true. -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols=intstr(record,lenrec,idum) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+ numsit=intstr(record,lenrec,idum) -+ mxatms=mxatms+numsit*nummols -+ mxsite=mxsite+numsit -+ ksite=0 -+ do isite=1,numsit -+ -+ if(ksite.lt.numsit)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ call getword(name,record,8,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ nrept=intstr(record,lenrec,idum) -+ ifrz=intstr(record,lenrec,idum) -+ nneu=intstr(record,lenrec,idum) -+ if(nrept.eq.0)nrept=1 -+ if(lneut)then -+ if(nneu.ne.nold) nxn1=0 -+ nxn1=nxn1+nrept -+ mxn1=max(mxn1,nxn1) -+ nold=nneu -+ endif -+ -+ if(mxatyp.eq.0)then -+ -+ mxatyp=1 -+ chr(1)=name -+ -+ else -+ -+ check=.true. -+ do j=1,mxatyp -+ -+ if(name.eq.chr(j))check=.false. -+ -+ enddo -+ if(check)then -+ -+ mxatyp=mxatyp+1 -+ if(mxatyp.le.mmk)chr(mxatyp)=name -+ -+ endif -+ -+ endif -+ if(nrept.eq.0)nrept=1 -+ ksite=ksite+nrept -+ -+ endif -+ -+ enddo -+ -+ if(mmk.lt.mxatyp)call abortscan(34,idnode) -+ -+ if(lneut)mxneut=mxneut+nneu*nummols -+ -+ elseif(findstring('shell',record,idum))then -+ -+ numshl=intstr(record,40,idum) -+ mxtshl=mxtshl+numshl -+ mxshl=mxshl+nummols*numshl -+ -+ do ishls=1,numshl -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ numbonds=intstr(record,lenrec,idum) -+ mxtbnd=mxtbnd+numbonds -+ mxbond=mxbond+nummols*numbonds -+ -+ do ibonds=1,numbonds -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('constr',record,idum))then -+ -+ numcon=intstr(record,lenrec,idum) -+ mxtcon=mxtcon+numcon -+ mxcons=mxcons+nummols*numcon -+ -+ do icon=1,numcon -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('angles',record,idum))then -+ -+ numang=intstr(record,lenrec,idum) -+ mxtang=mxtang+numang -+ mxangl=mxangl+nummols*numang -+ -+ do iang=1,numang -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ numdih=intstr(record,lenrec,idum) -+ mxtdih=mxtdih+numdih -+ mxdihd=mxdihd+nummols*numdih -+ -+ do idih=1,numdih -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('invers',record,idum))then -+ -+ numinv=intstr(record,lenrec,idum) -+ mxtinv=mxtinv+numinv -+ mxinv=mxinv+nummols*numinv -+ -+ do iinv=1,numinv -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ numgrp=intstr(record,lenrec,idum) -+ mxungp=mxungp+numgrp -+ mxgrp=mxgrp+numgrp*nummols -+ -+ do kgrp=1,numgrp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ numgsit=intstr(record,lenrec,idum) -+ mxgatm=mxgatm+numgsit*nummols -+ mxngp=max(mxngp,numgsit) -+ do j=1,numgsit -+ -+ iii=intstr(record,lenrec,idum) -+ if(iii.eq.0)then -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ iii=intstr(record,lenrec,idum) -+ endif -+ -+ enddo -+ -+ enddo -+ -+ elseif(findstring('teth',record,idum))then -+ -+ numteth=intstr(record,lenrec,idum) -+ mxteth=mxteth+numteth -+ msteth=msteth+numteth*nummols -+ -+ do iteth=1,numteth -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ do ipmf=1,2 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ npmf=intstr(record,lenrec,idum) -+ mxspmf=mxspmf+npmf -+ -+ do jpmf=1,npmf -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ enddo -+ -+ mxpmf=mxpmf+nummols -+ -+ elseif(findstring('finish',record,idum))then -+ -+ loop2=.false. -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ if(findstring('tab',record,idum))ltable=.true. -+ mxvdw=intstr(record,lenrec,idum) -+ do itpvdw=1,mxvdw -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ if(findstring('tab',record,idum))ltable=.true. -+ -+ enddo -+ mxvdw=max(mxvdw,(mxatyp*(mxatyp+1))/2) -+ -+ if(ltable)then -+ -+ if(idnode.eq.0)open(ntable,file='TABLE') -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ mxgrid=max(mxgrid,intstr(record,lenrec,idum)) -+ -+ close (ntable) -+ -+ endif -+ -+ elseif(findstring('metal',record,idum))then -+ -+ if(findstring('eam',record,idum))lmetab=.true. -+ mxmet=intstr(record,lenrec,idum) -+ do itpmet=1,mxmet -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ if(findstring('eam',record,idum))lmetab=.true. -+ -+ enddo -+ mxmet=max(mxmet,(mxatyp*(mxatyp+1))/2) -+ -+ if(lmetab)then -+ -+ if(idnode.eq.0)open(ntable,file='TABEAM') -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ do i=1,intstr(record,lenrec,idum) -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ ngrid=intstr(record,lenrec,idum) -+ mxgrid=max(mxgrid,ngrid+4) -+ do j=1,(ngrid+3)/4 -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ -+ enddo -+ -+ enddo -+ -+ close (ntable) -+ -+ endif -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ mxtbp=intstr(record,lenrec,idum) -+ -+ do itptbp=1,mxtbp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(keyword,record,4,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ rct=dblstr(record,lenrec,idum) -+ rctbp=max(rctbp,rct) -+ -+ enddo -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ mxfbp=intstr(record,lenrec,idum) -+ do itpfbp=1,mxfbp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(keyword,record,4,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ rct=dblstr(record,lenrec,idum) -+ rcfbp=max(rcfbp,rct) -+ -+ enddo -+ -+ elseif(findstring('tersof',record,idum))then -+ -+ mxter=intstr(record,lenrec,idum) -+ -+ do itpter=1,mxter -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ rct=dblstr(record,lenrec,idum) -+ rcter=max(rcter,rct) -+ -+ enddo -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ nfld=intstr(record,lenrec,idum) -+ if(nfld.eq.0)nfld=5 -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ do k=1,nfld -+ -+ ppp=dblstr(record,lenrec,idum) -+ if(idum.gt.lenrec.and.k.lt.nfld)then -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ endif -+ -+ enddo -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(mxpmf.gt.0)mxpmf=mxatms -+ if(mxtcon.gt.0)mxexcl=max(mxexcl,6) -+ if(mxtbnd.gt.0)mxexcl=max(mxexcl,6) -+ if(mxtang.gt.0)mxexcl=max(mxexcl,16) -+ if(mxtdih.gt.0)mxexcl=max(mxexcl,50) -+ if(mxtinv.gt.0)mxexcl=max(mxexcl,50) -+ if(mxneut.gt.0)mxexcl=max(mxexcl,10*mxn1*mxn1) -+ if(mxgrp.gt.0)mxexcl=max(mxexcl,mxngp) -+ -+ return -+ -+ end subroutine fldscan -+ -+ subroutine cfgscan -+ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scanning the initial configuration -+c file to determine the number of atoms present -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith june 1997 -+c -+c note: volm is volume containing all particles, not system volume -+c -+c*********************************************************************** -+ -+ character*80 header -+ character*8 name -+ logical lvolm -+ real(8) cell,celprp,buffer,extra,volm,xhi,yhi,zhi -+ real(8) xxx,yyy,zzz,uuu,vvv,www,coz -+ integer idnode,nconf,imcon,i,levcfg -+ dimension cell(9),celprp(10),buffer(10),extra(5) -+ -+ imcon=0 -+ xhi=0.d0 -+ yhi=0.d0 -+ zhi=0.d0 -+ volm=0.d0 -+ do i=1,9 -+ -+ cell(i)=0.d0 -+ -+ enddo -+ if(idnode.eq.0)then -+ -+ open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ read(nconf,'(a80)',end=100)header -+ read(nconf,'(2i10)',end=100)levcfg,imcon -+ lvolm=(imcon.eq.0.or.imcon.eq.6) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.gt.0)then -+ -+ read(nconf,'(3f20.0)',end=100)cell(1),cell(2),cell(3) -+ read(nconf,'(3f20.0)',end=100)cell(4),cell(5),cell(6) -+ read(nconf,'(3f20.0)',end=100)cell(7),cell(8),cell(9) -+ call dcell(cell,celprp) -+ -+ endif -+ -+ if(.not.lvolm)then -+ -+ volm=celprp(10) -+ -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ endif -+ -+ i=0 -+ do while(.true.) -+ -+ i=i+1 -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ -+ else if(levcfg.eq.1)then -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ -+ else -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ -+ endif -+ -+ if(lvolm)then -+ -+ if(i.eq.1)then -+ -+ xhi=abs(xxx) -+ yhi=abs(yyy) -+ zhi=abs(zzz) -+ -+ else -+ -+ xhi=max(xhi,abs(xxx)) -+ yhi=max(yhi,abs(yyy)) -+ zhi=max(zhi,abs(zzz)) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ 100 continue -+ -+ if(imcon.eq.0)then -+ -+ volm=8.d0*xhi*yhi*zhi -+ -+ else if(imcon.eq.6)then -+ -+ coz=(cell(1)*cell(4)+cell(2)*cell(5)+cell(3)*cell(6))/ -+ x (celprp(1)*celprp(2)) -+ volm=2.d0*zhi*celprp(1)*celprp(2)*sqrt(1.d0-coz**2) -+ -+ endif -+ -+ close (nconf) -+ -+ endif -+ -+ extra(1)=dble(imcon) -+ extra(2)=xhi -+ extra(3)=yhi -+ extra(4)=zhi -+ extra(5)=volm -+ call gdsum(extra,5,buffer) -+ call gdsum(cell,9,buffer) -+ imcon=nint(extra(1)) -+ xhi=extra(2) -+ yhi=extra(3) -+ zhi=extra(4) -+ volm=extra(5) -+ -+ return -+ -+ end subroutine cfgscan -+ -+ subroutine conscan -+ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, -+ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, -+ x zlen,cell) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scanning the contents of the control file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith june 1997 -+c -+c*********************************************************************** -+ -+ logical safe,lewald,lspme,lhke,peek,nolink,lcshft,lmetad -+ logical lsolva,lfree,lfrmas,lghost,redirect -+ real(8) cell,celprp,rcut,rvdw,delr,eps,alpha,fac,tol,tol1 -+ real(8) densvar,drdf,dzdn,zlen -+ integer nhko,idnode,imcon,idum,jmp -+ integer nlatt,kmax1,kmax2,kmax3,kmaxpow2 -+ dimension celprp(10),cell(9) -+ -+ nhko=0 -+ mxstak=0 -+ kmaxa=0 -+ kmaxb=1 -+ kmaxc=1 -+ kmaxd=1 -+ kmaxe=1 -+ kmaxf=1 -+ rcut=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ drdf=0.05d0 -+ dzdn=0.05d0 -+ zlen=0.d0 -+ densvar=1.d2 -+ peek=.true. -+ lhke=.false. -+ lspme=.false. -+ lewald=.false. -+ lcshft=.false. -+ nolink=.false. -+ lghost=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lsolva=.false. -+ lmetad=.false. -+ redirect=.false. -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open (nread,file='CONTROL') -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ -+ do while(peek) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ call lowcase(record,lenrec) -+ if(record(1).ne.'#')then -+ -+ if(findstring('stack',record,idum))then -+ -+ mxstak=intstr(record,lenrec,idum) -+ -+ elseif(findstring('no link',record,idum))then -+ -+ nolink=.true. -+ -+ elseif(findstring('metafreeze',record,idum))then -+ -+ lmetad=.true. -+ do while(lmetad) -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ call lowcase(record,lenrec) -+ lmetad=.not.findstring('endmet',record,idum) -+ enddo -+ -+ elseif(findstring('redirect',record,idum))then -+ -+ redirect=.true. -+ -+ elseif(findstring('densvar',record,idum))then -+ -+ densvar=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('shift',record,idum).or. -+ x findstring('reaction',record,idum))then -+ -+ lcshft=.true. -+ -+ elseif(findstring('ewald',record,idum).or. -+ x findstring('spme',record,idum).or. -+ x findstring('hke',record,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ lhke=findstring('hke',record,idum) -+ lspme=findstring('spme',record,idum) -+ lewald=findstring('ewald',record,idum) -+ -+ if(findstring('precision',record,idum))then -+ -+ eps=dblstr(record,lenrec,idum) -+ if(lhke) then -+ -+ nhko=intstr(record,lenrec,idum) -+ nlatt=intstr(record,lenrec,idum) -+ nlatt=min(nlatt,2) -+ -+ endif -+ -+ if(rcut.lt.1.d-6)rcut=10.d0 -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(record,lenrec,idum) -+ kmax1=intstr(record,lenrec,idum) -+ kmax2=intstr(record,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=intstr(record,lenrec,idum) -+ -+ else -+ -+ kmax3=intstr(record,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c for spme double kmax and set to next power of 2, with current -+c upper limit of 512 -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxd=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxe=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxf=2 * kmaxpow2 -+ -+ elseif(lhke) then -+ -+ kmaxa=kmax1 -+ kmaxb=kmax2 -+ kmaxc=1 -+ -+ else -+ -+ kmaxa=kmax1 -+ kmaxb=kmax2 -+ kmaxc=kmax3 -+ -+ endif -+ -+ elseif(findstring('cut',record,idum))then -+ -+ rcut=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('rvdw',record,idum))then -+ -+ rvdw=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('delr',record,idum))then -+ -+ delr=dblstr(record,100,idum) -+ -+ else if(findstring('rdf',record,idum))then -+ -+ if(.not.findstring('print',record,idum))then -+ -+ jmp=intstr(record,lenrec,idum) -+ drdf=dblstr(record,lenrec,idum) -+ -+ endif -+ -+ else if(findstring('zden',record,idum))then -+ -+ jmp=intstr(record,lenrec,idum) -+ dzdn=dblstr(record,lenrec,idum) -+ zlen=dblstr(record,lenrec,idum) -+ if(dzdn.lt.1.d-8)then -+ -+ dzdn=0.1d0 -+ zlen=0.1d0*dble(128) -+ -+ elseif(zlen.lt.1.d-8)then -+ -+ zlen=dzdn*dble(128) -+ -+ endif -+ -+ elseif(findstring('solva',record,idum))then -+ -+ lsolva=.true. -+ -+ elseif(findstring('decomp',record,idum))then -+ -+ lsolva=.true. -+ -+ elseif(findstring('free',record,idum))then -+ -+ lfree=.true. -+ -+ elseif(findstring('excit',record,idum))then -+ -+ lghost=.true. -+ lsolva=.true. -+ -+ elseif(findstring('reset_mass',record,idum))then -+ -+ lfrmas=.true. -+ -+ elseif(findstring('switch',record,idum))then -+ -+ lghost=.true. -+ lsolva=.true. -+ -+ elseif(findstring('finish',record,idum))then -+ -+ peek=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (nread) -+ if(abs(rvdw).le.1.d-10)rvdw=rcut -+ if(drdf.lt.1.d-8)drdf=0.05d0 -+ if(dzdn.lt.1.d-8)dzdn=0.05d0 -+ -+ return -+ -+ end subroutine conscan -+ -+ subroutine abortscan(key,idnode) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for controlled exit of file scan -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c********************************************************************* -+ -+ integer key,idnode -+ -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY terminated due to error ', key -+ -+ if(key.eq.17)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from CONTROL file processing' -+ -+ else if(key.eq.52)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of FIELD file encountered' -+ -+ else if(key.eq.24)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABLE file' -+ -+ else if(key.eq.34)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - character array memory allocation failure' -+ -+ endif -+ -+ if(idnode.eq.0) then -+ close (nrite) -+ close (nhist) -+ close (nread) -+ close (nconf) -+ close (nstats) -+ close (nrest) -+ close (nfield) -+ close (ntable) -+ endif -+ -+ call gsync() -+ call exitcomms() -+ -+ return -+ end subroutine abortscan -+ -+ subroutine dcell(aaa,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to calculate the dimensional properties of -+c a simulation cell specified by the input matrix aaa. -+c the results are returned in the array bbb, with : -+c -+c bbb(1 to 3) - lengths of cell vectors -+c bbb(4 to 6) - cosines of cell angles -+c bbb(7 to 9) - perpendicular cell widths -+c bbb(10) - cell volume -+c -+c copyright daresbury laboratory 1992 -+c author - w. smith july 1992 -+c -+c*********************************************************************** -+ -+ real(8) aaa,bbb,axb1,axb2,axb3,bxc1,bxc2,bxc3,cxa1,cxa2,cxa3 -+ -+ dimension aaa(9),bbb(10) -+ -+c calculate lengths of cell vectors -+ -+ bbb(1)=sqrt(aaa(1)*aaa(1)+aaa(2)*aaa(2)+aaa(3)*aaa(3)) -+ bbb(2)=sqrt(aaa(4)*aaa(4)+aaa(5)*aaa(5)+aaa(6)*aaa(6)) -+ bbb(3)=sqrt(aaa(7)*aaa(7)+aaa(8)*aaa(8)+aaa(9)*aaa(9)) -+ -+c calculate cosines of cell angles -+ -+ bbb(4)=(aaa(1)*aaa(4)+aaa(2)*aaa(5)+aaa(3)*aaa(6))/(bbb(1)*bbb(2)) -+ bbb(5)=(aaa(1)*aaa(7)+aaa(2)*aaa(8)+aaa(3)*aaa(9))/(bbb(1)*bbb(3)) -+ bbb(6)=(aaa(4)*aaa(7)+aaa(5)*aaa(8)+aaa(6)*aaa(9))/(bbb(2)*bbb(3)) -+ -+c calculate vector products of cell vectors -+ -+ axb1=aaa(2)*aaa(6)-aaa(3)*aaa(5) -+ axb2=aaa(3)*aaa(4)-aaa(1)*aaa(6) -+ axb3=aaa(1)*aaa(5)-aaa(2)*aaa(4) -+ bxc1=aaa(5)*aaa(9)-aaa(6)*aaa(8) -+ bxc2=aaa(6)*aaa(7)-aaa(4)*aaa(9) -+ bxc3=aaa(4)*aaa(8)-aaa(5)*aaa(7) -+ cxa1=aaa(8)*aaa(3)-aaa(2)*aaa(9) -+ cxa2=aaa(1)*aaa(9)-aaa(3)*aaa(7) -+ cxa3=aaa(2)*aaa(7)-aaa(1)*aaa(8) -+ -+c calculate volume of cell -+ -+ bbb(10)=abs(aaa(1)*bxc1+aaa(2)*bxc2+aaa(3)*bxc3) -+ -+c calculate cell perpendicular widths -+ -+ bbb(7)=bbb(10)/sqrt(bxc1*bxc1+bxc2*bxc2+bxc3*bxc3) -+ bbb(8)=bbb(10)/sqrt(cxa1*cxa1+cxa2*cxa2+cxa3*cxa3) -+ bbb(9)=bbb(10)/sqrt(axb1*axb1+axb2*axb2+axb3*axb3) -+ -+ return -+ end subroutine dcell -+ -+ end module setup_module -diff -urN dl_class_1.9.orig/srcmod/shake_module.f dl_class_1.9/srcmod/shake_module.f ---- dl_class_1.9.orig/srcmod/shake_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/shake_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,152 @@ -+ module shake_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond shake arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmcon(:) -+ integer, allocatable :: listcon(:,:),listot(:) -+ integer, allocatable :: numcon(:),lstcon(:,:) -+ integer, allocatable :: listme(:),lishap(:),lashap(:) -+ -+ save prmcon,listcon,listot,numcon,lstcon,listme,lishap,lashap -+ -+ contains -+ -+ subroutine alloc_shake_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (prmcon(mxtcon),stat=fail(1)) -+ allocate (numcon(mxtmls),stat=fail(2)) -+ allocate (lstcon(mxtcon,2),stat=fail(3)) -+ allocate (listcon(mxcons,3),stat=fail(4)) -+ allocate (listme(mxatms),stat=fail(5)) -+ allocate (lishap(mxlshp),stat=fail(6)) -+ allocate (lashap(mxproc),stat=fail(7)) -+ allocate (listot(mxatms),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1070) -+ enddo -+ -+ do i=1,mxtmls -+ numcon(i)=0 -+ enddo -+ -+ end subroutine alloc_shake_arrays -+ -+ subroutine define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining constraints -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c adapted - p-a cazade oct 2007, solvation, excitation etc. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lghost -+ character*1 message(80) -+ integer idnode,itmols,nconst,nsite,ntmp,icnst -+ integer icnst1,iatm1,iatm2,isite1,isite2,idum,i -+ integer isol1,isol2,natmsr -+ -+ ntmp=intstr(record,lenrec,idum) -+ numcon(itmols)=numcon(itmols)+ntmp -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of bond constraints', -+ x 5x,i10)") ntmp -+ write(nrite,"(/,/,1x,'constraint bond details:', -+ x /,/,21x,5x,'index',5x,'index',2x,'bondlength',/) -+ x ") -+ endif -+ -+ icnst1 = numcon(itmols) -+ do icnst=1,icnst1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ iatm1 = intstr(record,lenrec,idum) -+ iatm2 = intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs(:) -+ -+ isite1 = nsite - numsit(itmols) + iatm1 -+ isite2 = nsite - numsit(itmols) + iatm2 -+ if(lghost)then -+ -+ isol1=natmsr+iatm1 -+ isol2=natmsr+iatm2 -+ -+ endif -+ -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0) then -+ -+ numcon(itmols) = numcon(itmols) -1 -+ if(idnode.eq.0) write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nconst=nconst+1 -+ -+ if(nconst.gt.mxtcon) call error(idnode,40) -+ -+ lstcon(nconst,1)= iatm1 -+ lstcon(nconst,2)= iatm2 -+ prmcon(nconst)=dblstr(record,lenrec,idum) -+ -+ if(lghost)then -+ -+ if((isol1.ge.ind_fre(3)).or.(isol2.ge.ind_fre(3)))then -+ -+ numcon(itmols)=numcon(itmols)-1 -+ ntcons_ghost=ntcons_ghost+1 -+ -+ endif -+ -+ endif -+ -+ if(idnode.eq.0) -+ x write(nrite,"(21x,2i10,f12.6)") -+ x lstcon(nconst,1),lstcon(nconst,2), -+ x prmcon(nconst) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_constraints -+ -+ end module shake_module -diff -urN dl_class_1.9.orig/srcmod/site_module.f dl_class_1.9/srcmod/site_module.f ---- dl_class_1.9.orig/srcmod/site_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/site_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,233 @@ -+ module site_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining atomic/site arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use error_module -+ use parse_module -+ use setup_module -+ -+ implicit none -+ -+ character*1, allocatable :: molnam(:,:) -+ character*8, allocatable :: sitnam(:),unqatm(:) -+ real(8), allocatable :: dens(:),chgsit(:),wgtsit(:) -+ integer, allocatable :: nexsit(:),lfzsit(:),numsit(:),ltpsit(:) -+ integer, allocatable :: nugrp(:),lexsit(:,:),numgrp(:) -+ integer, allocatable :: numtyp(:),numfrz(:),nummols(:) -+ -+ save numtyp,numfrz,dens,chgsit,wgtsit,sitnam,unqatm,nexsit -+ save lfzsit,numsit,ltpsit,nugrp,lexsit,numgrp,molnam,nummols -+ -+ contains -+ -+ subroutine alloc_site_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (chgsit(mxsite),stat=fail(1)) -+ allocate (wgtsit(mxsite),stat=fail(2)) -+ allocate (nexsit(mxsite),stat=fail(3)) -+ allocate (lfzsit(mxsite),stat=fail(4)) -+ allocate (nugrp(mxsite) ,stat=fail(5)) -+ allocate (ltpsit(mxsite),stat=fail(6)) -+ allocate (numsit(mxtmls),stat=fail(7)) -+ allocate (lexsit(mxsite,mxexcl),stat=fail(8)) -+ allocate (sitnam(mxsite),stat=fail(9)) -+ allocate (unqatm(mxsite),stat=fail(10)) -+ allocate (numgrp(mxtmls),stat=fail(11)) -+ allocate (numtyp(mxatyp),stat=fail(12)) -+ allocate (numfrz(mxatyp),stat=fail(13)) -+ allocate (dens(mxatyp),stat=fail(14)) -+ allocate (nummols(mxtmls),stat=fail(15)) -+ allocate (molnam(40,mxtmls),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1090) -+ enddo -+ -+ do i=1,mxtmls -+ numsit(i)=0 -+ enddo -+ -+ end subroutine alloc_site_arrays -+ -+ subroutine define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining atom types in system -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 atom1 -+ character*1 message(80) -+ logical lneut,safe,atmchk -+ integer idnode,itmols,nsite,ksite,ntpatm,isite,nrept -+ integer ifrz,neugp,irept,jsite,idum -+ real(8) weight,charge -+ -+ numsit(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of atoms/sites', -+ x 10x,i10)") numsit(itmols) -+ if(.not.lneut) -+ x write(nrite,"(/,/,1x,'atomic characteristics:', -+ x /,/,21x,' site',5x,'name',10x,'mass',8x, -+ x 'charge',4x,'repeat',4x,'freeze'/)") -+ if(lneut) -+ x write(nrite,"(/,/,1x,'atomic characteristics:',/ -+ x /,21x,' site',5x,'name',10x,'mass',8x,'charge', -+ x 4x,'repeat',4x,'freeze',3x,'chg grp')") -+ -+ endif -+ -+ do isite=1,numsit(itmols) -+ -+ if(ksite.lt.numsit(itmols))then -+ -+c read atom name, site number, mass, charge, freeze option -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ weight=dblstr(record,lenrec,idum) -+ charge=dblstr(record,lenrec,idum) -+ nrept=intstr(record,lenrec,idum) -+ ifrz =intstr(record,lenrec,idum) -+ neugp=intstr(record,lenrec,idum) -+ if(nrept.eq.0)nrept=1 -+ ksite=ksite+nrept -+ -+ if(idnode.eq.0) then -+ -+ if(.not.lneut) then -+ -+ write(nrite, -+ x "(21x,i5,5x,a8,2f12.5,2i10)") -+ x nsite+1,atom1,weight,charge,nrept, -+ x ifrz -+ -+ else -+ -+ write(nrite, -+ x "(21x,i5,5x,a8,2f12.5,3i10)") -+ x nsite+1,atom1,weight,charge,nrept, -+ x ifrz,neugp -+ -+ endif -+ -+ endif -+ -+ do irept=1,nrept -+ -+ nsite=nsite+1 -+ if(nsite.gt.mxsite) call error(idnode,20) -+ -+ sitnam(nsite)=atom1 -+ wgtsit(nsite)=weight -+ chgsit(nsite)=charge -+ lfzsit(nsite)=ifrz -+ nugrp(nsite)=neugp -+ -+ enddo -+ -+c establish list of unique atom types -+ -+ atmchk=.true. -+ -+ do jsite=1,ntpatm -+ -+ if(atom1.eq.unqatm(jsite)) then -+ -+ atmchk=.false. -+ do irept=nsite,nsite-nrept+1,-1 -+ -+ ltpsit(irept)=jsite -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ if(atmchk)then -+ -+ ntpatm=ntpatm+1 -+ if(ntpatm.gt.mxatyp)call error(idnode,14) -+ unqatm(ntpatm)=atom1 -+ -+ do irept=nsite,nsite-nrept+1,-1 -+ -+ ltpsit(irept)=ntpatm -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_atoms -+ -+ subroutine check_syschg(idnode,ntpmls,sumchg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for checking the system charge -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,ntpmls,jsite,itmols,lsite -+ real(8) sumchg -+ -+ jsite=0 -+ do itmols=1,ntpmls -+ -+ do lsite=1,numsit(itmols) -+ -+ jsite=jsite+1 -+ sumchg=sumchg+dble(nummols(itmols))*chgsit(jsite) -+ -+ enddo -+ -+ enddo -+ -+ if(abs(sumchg).gt.1.0d-6) then -+ -+ call warning(idnode,60,sumchg,0.d0,0.d0) -+ -+ endif -+ -+ return -+ end subroutine check_syschg -+ -+ end module site_module -diff -urN dl_class_1.9.orig/srcmod/solvation_module.f dl_class_1.9/srcmod/solvation_module.f ---- dl_class_1.9.orig/srcmod/solvation_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/solvation_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,996 @@ -+ module solvation_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining decomposition of energy arrays -+c to calculate solvation energies -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ use config_module -+ -+ implicit none -+ -+ logical lcomp(9) -+ -+ integer mxtmls_sol2,mxtmls_sol3,mxtmls_sol4 -+ integer ntcons_ghost,ngrp_ghost,nswitch,niswitch -+ integer mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 -+ integer nfrn,ifrn,mfree,kfree,ind_fre(4) -+ -+ real(8) pfree,lambda1,lambda2,dlambda,eng_kin_fre -+ real(8) elrc2,virlrc2,engsic0,engsic2,elrc_sav,qfix_fre -+ real(8) virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,vlrc_fre -+ real(8) qchg0,qchg1,qchg2,ang_fre,bnd_fre,dih_fre -+ real(8) inv_fre,tbp_fre,fbp_fre,cou_fre,elrc2_sav -+ real(8) vdw_fre,eng_cfg_fre,shl_fre,virlrc2_sav,vlrc_fre_sav -+ real(8) qchg_sav,vir_cfg_fre,ang_vir,bnd_vir,dih_vir -+ real(8) inv_vir,tbp_vir,fbp_vir,cou_vir,vdw_vir,shl_vir -+ -+ integer, allocatable :: atm_fre(:) -+ integer, allocatable :: atmolt(:),rigid_sol(:),const_sol(:) -+ integer, allocatable :: lstgot_sol(:),natm_sol(:) -+ -+ real(8), allocatable :: elrc_sol(:),elrc_sol_sav(:),shl_sol(:) -+ real(8), allocatable :: cou_sol(:),vdw_sol(:),bnd_sol(:) -+ real(8), allocatable :: ckc_sol_sum(:),cks_sol_sum(:) -+ real(8), allocatable :: cou_sol_sic(:),ebuf_sol1(:),inv_sol(:) -+ real(8), allocatable :: ang_sol(:),dih_sol(:),en3_sol(:) -+ real(8), allocatable :: qfix_sol(:),ebuf_sol2(:),en4_sol(:) -+ real(8), allocatable :: vdw_sol_lng(:),cou_sol_lng(:) -+ real(8), allocatable :: degfre_sol(:),degrot_sol(:),temp_sol(:) -+ real(8), allocatable :: vxo_sol(:),vyo_sol(:),vzo_sol(:) -+ real(8), allocatable :: ckc1(:),cks1(:),ckc2(:),cks2(:) -+ real(8), allocatable :: ckc_fre_sum(:),cks_fre_sum(:) -+ real(8), allocatable :: ebuf_exc1(:),ebuf_exc2(:) -+ real(8), allocatable :: vxo_fre(:),vyo_fre(:),vzo_fre(:) -+ real(8), allocatable :: elrc_exc(:),elrc_exc_sav(:) -+ real(8), allocatable :: cou_exc(:),vdw_exc(:),bnd_exc(:) -+ real(8), allocatable :: ang_exc(:),dih_exc(:),en4_exc(:) -+ real(8), allocatable :: vdw_exc_lng(:),cou_exc_lng(:) -+ real(8), allocatable :: shl_exc(:),en3_exc(:),inv_exc(:) -+ real(8), allocatable :: qfix_exc(:),cou_exc_sic(:),weight_sav(:) -+ -+ save atmolt,rigid_sol,const_sol,lstgot_sol,natm_sol,elrc_sol -+ save elrc_sol_sav,cou_sol,vdw_sol,bnd_sol,ckc_sol_sum,cks_sol_sum -+ save cou_sol_sic,ebuf_sol1,en4_sol,ang_sol,dih_sol,en3_sol -+ save qfix_sol,ebuf_sol2,shl_sol,vdw_sol_lng,cou_sol_lng,degfre_sol -+ save degrot_sol,inv_sol,temp_sol,vxo_sol,vyo_sol,vzo_sol -+ save mxtmls_sol2,mxtmls_sol3,mxtmls_sol4,lcomp -+ -+ save nfrn,ifrn,mfree,kfree,pfree,lambda1,lambda2,dlambda -+ save eng_kin_fre,elrc2,virlrc2,engsic0,engsic2,cks_fre_sum -+ save virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,qchg1,qchg2 -+ save ang_fre,bnd_fre,dih_fre,inv_fre,tbp_fre,fbp_fre,qchg0 -+ save cou_fre,vdw_fre,eng_cfg_fre,elrc2_sav,elrc_sav,vlrc_fre -+ save ang_vir,bnd_vir,dih_vir,inv_vir,tbp_vir,fbp_vir,cou_vir -+ save vdw_vir,shl_vir,vir_cfg_fre,qfix_fre,virlrc2_sav -+ save ind_fre,atm_fre,ckc1,cks1,ckc2,cks2,ckc_fre_sum -+ save ebuf_exc1,ebuf_exc2,vxo_fre,vyo_fre,vzo_fre,vlrc_fre_sav -+ save weight_sav -+ -+ save ntcons_ghost,ngrp_ghost,qchg_sav,nswitch,niswitch -+ save mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 -+ save cou_exc,vdw_exc,bnd_exc,ang_exc,dih_exc,en4_exc,vdw_exc_lng -+ save cou_exc_lng,shl_exc,en3_exc,inv_exc,elrc_exc,elrc_exc_sav -+ save qfix_exc,cou_exc_sic -+ -+ contains -+ -+ subroutine alloc_sol_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for allocating solvation module arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=37 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ mxtmls_sol2=((mxtmls_sol+1)*mxtmls_sol)/2 -+ mxtmls_sol3=(((mxtmls_sol+3)*mxtmls_sol+2)*mxtmls_sol)/6 -+ mxtmls_sol4=((((mxtmls_sol+6)*mxtmls_sol+11)*mxtmls_sol+6)* -+ x mxtmls_sol)/24 -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (cou_sol(mxtmls_sol2),stat=fail(1)) -+ allocate (vdw_sol(mxtmls_sol2),stat=fail(2)) -+ allocate (shl_sol(mxtmls_sol),stat=fail(3)) -+ allocate (ebuf_sol1(mxebuf_sol),stat=fail(4)) -+ allocate (cou_sol_sic(mxtmls_sol2),stat=fail(5)) -+ allocate (cks_sol_sum(mxtmls_sol),stat=fail(6)) -+ allocate (ckc_sol_sum(mxtmls_sol),stat=fail(7)) -+ allocate (bnd_sol(mxtmls_sol),stat=fail(8)) -+ allocate (ang_sol(mxtmls_sol),stat=fail(9)) -+ allocate (dih_sol(mxtmls_sol),stat=fail(10)) -+ allocate (atmolt(mxatms_sol),stat=fail(11)) -+ allocate (en3_sol(mxtmls_sol3),stat=fail(12)) -+ allocate (en4_sol(mxtmls_sol4),stat=fail(13)) -+ allocate (qfix_sol(mxtmls_sol),stat=fail(14)) -+ allocate (elrc_sol(mxtmls_sol2),stat=fail(15)) -+ allocate (elrc_sol_sav(mxtmls_sol2),stat=fail(16)) -+ allocate (ebuf_sol2(mxebuf_sol),stat=fail(23)) -+ allocate (rigid_sol(mxtmls_sol),stat=fail(24)) -+ allocate (const_sol(mxtmls_sol),stat=fail(25)) -+ allocate (degfre_sol(mxtmls_sol),stat=fail(26)) -+ allocate (degrot_sol(mxtmls_sol),stat=fail(27)) -+ allocate (natm_sol(mxtmls_sol),stat=fail(28)) -+ allocate (lstgot_sol(mxatms_sol),stat=fail(29)) -+ allocate (temp_sol(mxtmls_sol),stat=fail(30)) -+ allocate (vxo_sol(mxatms_sol),stat=fail(31)) -+ allocate (vyo_sol(mxatms_sol),stat=fail(32)) -+ allocate (vzo_sol(mxatms_sol),stat=fail(33)) -+ allocate (vdw_sol_lng(mxtmls_sol2),stat=fail(34)) -+ allocate (cou_sol_lng(mxtmls_sol2),stat=fail(35)) -+ allocate (inv_sol(mxtmls_sol),stat=fail(36)) -+ allocate (weight_sav(mxatms_fre),stat=fail(37)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+c initialise accumulators -+ -+ lcomp(:)=.false. -+ elrc_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ en3_sol(:)=0.d0 -+ en4_sol(:)=0.d0 -+ bnd_sol(:)=0.d0 -+ ang_sol(:)=0.d0 -+ dih_sol(:)=0.d0 -+ inv_sol(:)=0.d0 -+ -+ return -+ end subroutine alloc_sol_arrays -+ -+ subroutine solva_temp(idnode,mxnode,natms,keyver) -+ -+c*********************************************************************** -+c -+c dl_poly routine for solvation module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode,natms,keyver -+ real(8) vvx,vvy,vvz -+ -+ temp_sol(:)=0.d0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ if(keyver.eq.0)then -+ -+ vvx=0.5d0*(vxx(i)+vxo_sol(i)) -+ vvy=0.5d0*(vyy(i)+vyo_sol(i)) -+ vvz=0.5d0*(vzz(i)+vzo_sol(i)) -+ -+ else -+ -+ vvx=vxx(i) -+ vvy=vyy(i) -+ vvz=vzz(i) -+ -+ endif -+ -+ temp_sol(atmolt(i))=temp_sol(atmolt(i))+weight(i)* -+ x (vvx*vvx+vvy*vvy+vvz*vvz)/(boltz*degfre_sol(atmolt(i))) -+ -+ enddo -+ -+c global sum -+ -+ if(mxnode.gt.1)call gdsum(temp_sol,mxtmls_sol,buffer) -+ -+ return -+ end subroutine solva_temp -+ -+ subroutine alloc_free_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine to allocate free energy arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (ebuf_exc1(mxebuf_fre),stat=fail(1)) -+ allocate (ckc1(mxewld_fre),stat=fail(2)) -+ allocate (cks1(mxewld_fre),stat=fail(3)) -+ allocate (ckc2(mxewld_fre),stat=fail(4)) -+ allocate (cks2(mxewld_fre),stat=fail(5)) -+ allocate (cks_fre_sum(mxtmls_fre),stat=fail(6)) -+ allocate (ckc_fre_sum(mxtmls_fre),stat=fail(7)) -+ allocate (atm_fre(mxatms_fre),stat=fail(8)) -+ allocate (ebuf_exc2(mxebuf_fre),stat=fail(9)) -+ allocate (vxo_fre(mxatms_fre),stat=fail(10)) -+ allocate (vyo_fre(mxatms_fre),stat=fail(11)) -+ allocate (vzo_fre(mxatms_fre),stat=fail(12)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+ return -+ -+ end subroutine alloc_free_arrays -+ -+ subroutine lrcorrect_fre(lfree,volm,elrc,virlrc) -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical lfree -+ real(8) volm,elrc,virlrc -+ -+ elrc=elrc_sav*(volm_sav/volm) -+ elrc2=elrc2_sav*(volm_sav/volm) -+ virlrc=virlrc_sav*(volm_sav/volm) -+ virlrc2=virlrc2_sav*(volm_sav/volm) -+ if(lfree)then -+ elrc_fre=elrc_fre_sav*(volm_sav/volm) -+ vlrc_fre=vlrc_fre_sav*(volm_sav/volm) -+ endif -+ -+ end subroutine lrcorrect_fre -+ -+ subroutine free_kinetic(lfrmas,idnode,mxnode,keyver) -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module -+c calculate kinetic energy difference between states -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008: parallel version -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfrmas -+ integer i,idnode,mxnode,keyver -+ real(8) fac -+ -+ fac=dlambda -+ eng_kin_fre=0.d0 -+ -+ if(keyver.eq.0)then -+ -+ if(lfrmas)fac=dlambda/lambda1 -+ do i=ind_fre(1)+idnode,ind_fre(2),mxnode -+ -+ eng_kin_fre=eng_kin_fre- -+ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ -+ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) -+ -+ enddo -+ -+ if(lfrmas)fac=dlambda/lambda2 -+ do i=ind_fre(3)+idnode,ind_fre(4),mxnode -+ -+ eng_kin_fre=eng_kin_fre+ -+ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ -+ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) -+ -+ enddo -+ -+ eng_kin_fre=eng_kin_fre/8.d0 -+ -+ else -+ -+ if(lfrmas)fac=dlambda/lambda1 -+ do i=ind_fre(1)+idnode,ind_fre(2),mxnode -+ -+ eng_kin_fre=eng_kin_fre-fac*weight(i)*(vxx(i)**2+ -+ x vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ if(lfrmas)fac=dlambda/lambda2 -+ do i=ind_fre(3)+idnode,ind_fre(4),mxnode -+ -+ eng_kin_fre=eng_kin_fre+fac*weight(i)*(vxx(i)**2+ -+ x vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ eng_kin_fre=eng_kin_fre/2.d0 -+ -+ endif -+ -+c global sum -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=eng_kin_fre -+ call gdsum(buffer(1),1,buffer(2)) -+ eng_kin_fre=buffer(1) -+ -+ endif -+ -+ return -+ end subroutine free_kinetic -+ -+ subroutine freegen() -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module: select mixing scheme -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,fac1,fac2 -+ real(8) sigma1,sigma2,acc,arg,gss,tt,pp,a1,a2,a3,a4,a5,err -+ -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ -+ if(mfree.eq.1)then -+ -+c linear mixing -+ -+ lambda1=(1.d0-pfree) -+ lambda2=pfree -+ dlambda=1.d0 -+ -+ elseif(mfree.eq.2)then -+ -+c nonlinear mixing -+ -+ lambda1=(1.d0-pfree)**kfree -+ lambda2=(1.d0-(1.d0-pfree)**kfree) -+ dlambda=dble(kfree)*(1.d0-pfree)**(kfree-1) -+ -+ elseif(mfree.eq.3)then -+ -+c trigonmetric mixing -+ -+ lambda2=0.5d0*(1.d0+sin(pi*(pfree-0.5d0))) -+ lambda1=1.d0-lambda2 -+ dlambda=0.5d0*pi*cos(pi*(pfree-0.5d0)) -+ -+ elseif(mfree.eq.4)then -+ -+c error function mixing -+ -+ acc=12.d0 -+ arg=2.d0*sqrt(2.302585093*acc) -+ gss=exp(-(arg*(pfree-0.5d0))**2) -+ tt=1.d0/(1.d0+pp*arg*abs(pfree-0.5d0)) -+ err=1.d0-tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*gss -+ lambda2=0.5d0*(1.d0+sign(err,(pfree-0.5d0))) -+ lambda1=1.d0-lambda2 -+ dlambda=gss*arg/sqrpi -+ -+ elseif(mfree.eq.5)then -+ -+c polynomial mixing -+ -+ sigma1=0.d0 -+ -+ do i=0,kfree-1 -+ -+ fac1=1 -+ fac2=1 -+ -+ do j=0,i-1 -+ -+ fac1=fac1*(kfree-1+i-j) -+ fac2=fac2*(i-j) -+ -+ enddo -+ -+ sigma1=sigma1+(dble(fac1/fac2))*pfree**i -+ -+ enddo -+ -+ lambda1=sigma1*(1.d0-pfree)**kfree -+ lambda2=1.d0-lambda1 -+ dlambda=sigma1*kfree*(1.d0-pfree)**(kfree-1) -+ -+ sigma2=0.d0 -+ -+ do i=1,kfree-1 -+ -+ fac1=1 -+ fac2=1 -+ -+ do j=0,i-1 -+ -+ fac1=fac1*(kfree-1+i-j) -+ fac2=fac2*(i-j) -+ -+ enddo -+ -+ sigma2=sigma2+(dble(fac1*i/fac2))*pfree**(i-1) -+ -+ enddo -+ -+ dlambda=dlambda-sigma2*(1.d0-pfree)**kfree -+ -+ else -+ -+c spline kernel mixing -+ -+ arg=pfree-0.5d0 -+ lambda2=2.d0*pfree-8.d0*arg**3*(1.d0-abs(arg))-0.5d0 -+ lambda1=1.d0-lambda2 -+ dlambda=2.d0+arg**2*(32.d0*abs(arg)-24.d0) -+ -+ endif -+ -+ return -+ end subroutine freegen -+ -+ subroutine free_energy_write(idnode,nstep,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing free energy file at selected -+c intervals in simulation -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade dec 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,nstep -+ real(8) engunit -+ -+ save newjob -+ data newjob/.true./ -+ -+ if(idnode.eq.0)then -+ -+c open the FREENG file if new job or file closed -+ -+ if(newjob)then -+ -+ newjob = .false. -+ open(nfrnwr,file='FREENG',position='append') -+ -+ endif -+ -+ if(nstep.eq.nfrn.or.nstep.eq.ifrn)then -+ -+ write(nfrnwr,'(80a1)')cfgname -+ -+ if(abs(engunit-9648.530821d0).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=DL_POLY Internal UNITS ')") -+ -+ write(nfrnwr,'(1p,4e16.8)')pfree,lambda1,lambda2,dlambda -+ -+ endif -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ write(nfrnwr,"(i10,1p,2e16.8)") -+ x nstep,eng_cfg_fre/engunit,vir_cfg_fre/engunit -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine free_energy_write -+ -+ subroutine alloc_exi_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine to allocate excited state arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer, parameter :: nnn=15 -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ mxtmls_exc2=((mxtmls_exc+1)*mxtmls_exc)/2 -+ mxtmls_exc3=(((mxtmls_exc+3)*mxtmls_exc+2)*mxtmls_exc)/6 -+ mxtmls_exc4=((((mxtmls_exc+6)*mxtmls_exc+11)*mxtmls_exc+6)* -+ x mxtmls_exc)/24 -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (cou_exc(mxtmls_exc2),stat=fail(1)) -+ allocate (vdw_exc(mxtmls_exc2),stat=fail(2)) -+ allocate (bnd_exc(mxtmls_exc),stat=fail(3)) -+ allocate (ang_exc(mxtmls_exc),stat=fail(4)) -+ allocate (dih_exc(mxtmls_exc),stat=fail(5)) -+ allocate (en3_exc(mxtmls_exc3),stat=fail(6)) -+ allocate (en4_exc(mxtmls_exc4),stat=fail(7)) -+ allocate (shl_exc(mxtmls_exc),stat=fail(8)) -+ allocate (vdw_exc_lng(mxtmls_exc2),stat=fail(9)) -+ allocate (cou_exc_lng(mxtmls_exc2),stat=fail(10)) -+ allocate (inv_exc(mxtmls_exc),stat=fail(11)) -+ allocate (elrc_exc(mxtmls_exc2),stat=fail(12)) -+ allocate (elrc_exc_sav(mxtmls_exc2),stat=fail(13)) -+ allocate (qfix_exc(mxtmls_exc),stat=fail(14)) -+ allocate (cou_exc_sic(mxtmls_exc2),stat=fail(15)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+c initialise accumulators -+ -+ bnd_exc(:)=0.d0 -+ ang_exc(:)=0.d0 -+ dih_exc(:)=0.d0 -+ inv_exc(:)=0.d0 -+ en3_exc(:)=0.d0 -+ en4_exc(:)=0.d0 -+ elrc_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ return -+ end subroutine alloc_exi_arrays -+ -+ subroutine update_ghost(idnode,mxnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c update the positions of ghost atoms -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode -+ -+ if(ind_fre(1).lt.ind_fre(3))then -+ -+ ii=ind_fre(3) -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ xxx(ii)=xxx(i) -+ yyy(ii)=yyy(i) -+ zzz(ii)=zzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ else -+ -+ ii=ind_fre(1) -+ -+ do i=ind_fre(3),ind_fre(4) -+ -+ xxx(ii)=xxx(i) -+ yyy(ii)=yyy(i) -+ zzz(ii)=zzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine update_ghost -+ -+ subroutine copy_force(idnode,mxnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode -+ -+ ii=ind_fre(3) -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ fxx(ii)=fxx(i) -+ fyy(ii)=fyy(i) -+ fzz(ii)=fzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ return -+ end subroutine copy_force -+ -+ subroutine switch(elrc,virlrc) -+c*********************************************************************** -+c -+c dl_poly routine for switching system in excitation simulation -+c copyright - daresbury laboratory -+c author - w. smith sep 2008 -+c adapted from p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ real(8) :: swap,elrc,virlrc -+ real(8), allocatable :: cou_sic_swp(:),qfix_swp(:) -+ real(8), allocatable :: elrc_swp(:) -+ -+ allocate(cou_sic_swp(mxtmls_exc2),qfix_swp(mxtmls_exc)) -+ allocate(elrc_swp(mxtmls_exc2)) -+ -+ swap=elrc -+ elrc=elrc2 -+ elrc2=swap -+ -+ swap=engsic0 -+ engsic0=engsic2 -+ engsic2=swap -+ -+ swap=virlrc -+ virlrc=virlrc2 -+ virlrc2=swap -+ -+ swap=elrc_sav -+ elrc_sav=elrc2_sav -+ elrc2_sav=swap -+ -+ swap=virlrc_sav -+ virlrc_sav=virlrc2_sav -+ virlrc2_sav=swap -+ -+ swap=qchg0 -+ qchg0=qchg2 -+ qchg2=swap -+ -+ cou_sic_swp(:)=cou_sol_sic(:) -+ cou_sol_sic(:)=cou_exc_sic(:) -+ cou_exc_sic(:)=cou_sic_swp(:) -+ -+ qfix_swp(:)=qfix_sol(:) -+ qfix_sol(:)=qfix_exc(:) -+ qfix_exc(:)=qfix_swp(:) -+ -+ elrc_swp(:)=elrc_sol(:) -+ elrc_sol(:)=elrc_exc(:) -+ elrc_exc(:)=elrc_swp(:) -+ -+ elrc_swp(:)=elrc_sol_sav(:) -+ elrc_sol_sav(:)=elrc_exc_sav(:) -+ elrc_exc_sav(:)=elrc_swp(:) -+ -+ deallocate(elrc_swp,cou_sic_swp,qfix_swp) -+ -+ return -+ -+ end subroutine switch -+ -+ subroutine lrcorrect_sol(lghost,volm) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical :: lghost -+ real(8) :: volm -+ -+ elrc_sol(:)=elrc_sol_sav(:)*(volm_sav/volm) -+ if(lghost)elrc_exc(:)=elrc_exc_sav(:)*(volm_sav/volm) -+ -+ return -+ end subroutine lrcorrect_sol -+ -+ subroutine switch_atm(lfrmas) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excitation module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical lfrmas -+ integer i,at1_swap,at2_swap -+ -+ at1_swap=ind_fre(1) -+ at2_swap=ind_fre(2) -+ ind_fre(1)=ind_fre(3) -+ ind_fre(2)=ind_fre(4) -+ ind_fre(3)=at1_swap -+ ind_fre(4)=at2_swap -+ -+ if(lfrmas)then -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ atm_fre(i)=1 -+ weight(i)=lambda1*weight_sav(i) -+ -+ enddo -+ -+ do i=ind_fre(3),ind_fre(4) -+ -+ atm_fre(i)=2 -+ weight(i)=lambda2*weight_sav(i) -+ -+ enddo -+ -+ else -+ -+ do i=ind_fre(1),ind_fre(2) -+ atm_fre(i)=1 -+ enddo -+ -+ do i=ind_fre(3),ind_fre(4) -+ atm_fre(i)=2 -+ enddo -+ -+ endif -+ -+ return -+ end subroutine switch_atm -+ -+ subroutine solvation_write -+ x (lexcite,lswitch,idnode,natms,nstep,nsolva,isolva, -+ x tstep,engunit,elrc) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing solva file at selected -+c intervals in simulation -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade jun 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob,lexcite,lswitch -+ integer idnode,natms,nstep,nsolva,isolva,i,j,k -+ integer mxtmls2,mxtmls3,mxtmls4 -+ real(8) tstep,engunit,elrc -+ character*80 aa,bb,cc,dd -+ -+ save newjob -+ data newjob/.true./ -+ -+ mxtmls2=((mxtmls+1)*mxtmls)/2 -+ mxtmls3=(((mxtmls+3)*mxtmls+2)*mxtmls)/6 -+ mxtmls4=((((mxtmls+6)*mxtmls+11)*mxtmls+6)*mxtmls)/24 -+ -+ if(idnode.eq.0)then -+ -+c open the SOLVAT file if new job or file closed -+ -+ if(newjob)then -+ -+ newjob=.false. -+ open(nsolwr,file='SOLVAT',position='append') -+ -+ endif -+ -+c write file header block -+ -+ if(nstep.eq.nsolva.or.nstep.eq.isolva)then -+ -+ write(nsolwr,'(80a1)')cfgname -+ -+ if(abs(engunit-9648.530821d0).le.1.d-10)write(nsolwr, -+ x "('ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=DL_POLY Internal UNITS ')") -+ -+ write(nsolwr,'(2i10)')natms,mxtmls -+ write(nsolwr,'(1x,11a4)')' lex','lsw',' bnd',' ang', -+ x ' dih',' inv',' shl',' cou',' vdw',' 3bd',' 4bd' -+ write(nsolwr,'(11l4)')lexcite,lswitch,lcomp -+ -+ endif -+ -+c write out periodic data -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+c mark start of time step data -+ -+ if(lexcite)then -+ write(nsolwr,'("timestep",i10,f12.5,1p,2e14.6)') -+ x nstep,tstep,elrc/engunit,elrc2/engunit -+ else -+ write(nsolwr,'("timestep",i10,f12.5,1p,e14.6)') -+ x nstep,tstep,elrc/engunit -+ endif -+ -+c write intramolecular data -+ -+ write(nsolwr,'(1p,5e14.6)')temp_sol -+ if(lcomp(1))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')bnd_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(2))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')ang_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(3))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')dih_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(4))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')inv_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit -+ endif -+ endif -+ -+c write core-shell data -+ -+ if(lcomp(5))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')shl_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit -+ endif -+ endif -+ -+c write coulombic data -+ -+ if(lcomp(6))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')cou_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit -+ endif -+ endif -+ -+c write vdw data -+ -+ if(lcomp(7))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')vdw_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit -+ endif -+ endif -+ -+c write 3-body data -+ -+ if(lcomp(8))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')en3_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit -+ endif -+ endif -+ -+c write 4-body data -+ -+ if(lcomp(9))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')en4_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit -+ endif -+ endif -+ -+ endif -+ -+c close SOLVAT file at regular intervals -+ -+ if(.not.newjob.and.mod(nstep,ndump).eq.0)then -+ -+ close(nsolwr) -+ newjob=.true. -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine solvation_write -+ -+ end module solvation_module -diff -urN dl_class_1.9.orig/srcmod/spme_module.f dl_class_1.9/srcmod/spme_module.f ---- dl_class_1.9.orig/srcmod/spme_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/spme_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1175 @@ -+ module spme_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining spme arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use setup_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: csp(:),qqc(:,:,:),ffttable(:) -+ real(8), allocatable :: bspx(:,:), bspy(:,:), bspz(:,:) -+ real(8), allocatable :: bsdx(:,:), bsdy(:,:), bsdz(:,:) -+ integer, allocatable :: key1(:),key2(:),key3(:) -+ complex(8), allocatable :: ww1(:), ww2(:), ww3(:) -+ complex(8), allocatable :: qqq(:,:,:) -+ complex(8), allocatable :: bscx(:), bscy(:),bscz(:) -+CFFTW pointer, save :: fplan, bplan -+ -+ save csp,qqc,qqq,ww1,ww2,ww3,bscx,bscy,bscz,ffttable -+ save bspx,bspy,bspz,bsdx,bsdy,bsdz,key1,key2,key3 -+ -+ contains -+ -+ subroutine alloc_spme_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=9 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (csp(mxspl),ffttable(mxftab),stat=fail(1)) -+ allocate (bspx(mxspme,mxspl),bspy(mxspme,mxspl),stat=fail(2)) -+ allocate (bspz(mxspme,mxspl),bsdx(mxspme,mxspl),stat=fail(3)) -+ allocate (bsdy(mxspme,mxspl),bsdz(mxspme,mxspl),stat=fail(4)) -+ allocate (bscx(kmaxd),bscy(kmaxe),bscz(kmaxf),stat=fail(5)) -+ allocate (key1(kmaxd),key2(kmaxe),key3(kmaxf),stat=fail(6)) -+ allocate (ww1(kmaxd),ww2(kmaxe),ww3(kmaxf),stat=fail(7)) -+ allocate (qqc(kmaxd,kmaxe,kmaxf),stat=fail(8)) -+ allocate (qqq(kmaxd,kmaxe,kmaxf),stat=fail(9)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1750) -+ enddo -+ -+ end subroutine alloc_spme_arrays -+ -+ subroutine bspcoe(nospl,kmax1,kmax2,kmax3) -+ -+c********************************************************************** -+c -+c dl_poly subroutine to calculate B-spline coefficients for -+c Euler exponential splines. -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nospl,kmax1,kmax2,kmax3,k,i,j -+ complex(8) ccc -+ -+c calculate B-splines at knots -+ -+ csp(1)=0.d0 -+ csp(2)=1.d0 -+ -+ do k=3,nospl -+ -+ csp(k)=0.d0 -+ -+ do j=k,2,-1 -+ -+ csp(j)=(dble(j-1)*csp(j)+dble(k-j+1)*csp(j-1))/dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+c calculate B-spline coefficients -+ -+ do i=0,kmax1-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww1(mod(i*k,kmax1)+1) -+ -+ enddo -+ -+ bscx(i+1)=ww1(mod(i*(nospl-1),kmax1)+1)/ccc -+ -+ enddo -+ -+ do i=0,kmax2-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww2(mod(i*k,kmax2)+1) -+ -+ enddo -+ -+ bscy(i+1)=ww2(mod(i*(nospl-1),kmax2)+1)/ccc -+ -+ enddo -+ -+ do i=0,kmax3-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww3(mod(i*k,kmax3)+1) -+ -+ enddo -+ -+ bscz(i+1)=ww3(mod(i*(nospl-1),kmax3)+1)/ccc -+ -+ enddo -+ -+ return -+ end subroutine bspcoe -+ -+ subroutine bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to calculate B-splines for SPME method -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nospl,natms,idnode,mxnode,iatm0,iatm1,i,j,k -+ real(8) aaa,bbb,ccc,txx,tyy,tzz -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ -+c set up atoms numbers for nodes -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct B-splines -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,1)=1.d0 -+ bsdy(i,1)=1.d0 -+ bsdz(i,1)=1.d0 -+ bsdx(i,2)=-1.d0 -+ bsdy(i,2)=-1.d0 -+ bsdz(i,2)=-1.d0 -+ bspx(i,1)=txx(i)-int(txx(i)) -+ bspy(i,1)=tyy(i)-int(tyy(i)) -+ bspz(i,1)=tzz(i)-int(tzz(i)) -+ bspx(i,2)=1.d0-txx(i)+int(txx(i)) -+ bspy(i,2)=1.d0-tyy(i)+int(tyy(i)) -+ bspz(i,2)=1.d0-tzz(i)+int(tzz(i)) -+ -+ enddo -+ -+ do k=3,nospl -+ -+ do i=iatm0,iatm1 -+ -+ bspx(i,k)=0.d0 -+ bspy(i,k)=0.d0 -+ bspz(i,k)=0.d0 -+ -+ enddo -+ -+ do j=k,2,-1 -+ -+ if(k.eq.nospl)then -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,j)=bspx(i,j)-bspx(i,j-1) -+ bsdy(i,j)=bspy(i,j)-bspy(i,j-1) -+ bsdz(i,j)=bspz(i,j)-bspz(i,j-1) -+ -+ enddo -+ -+ endif -+ -+ do i=iatm0,iatm1 -+ -+ aaa=txx(i)+dble(j-1)-int(txx(i)) -+ bbb=tyy(i)+dble(j-1)-int(tyy(i)) -+ ccc=tzz(i)+dble(j-1)-int(tzz(i)) -+ bspx(i,j)=(aaa*bspx(i,j)+(dble(k)-aaa)*bspx(i,j-1))/ -+ x dble(k-1) -+ bspy(i,j)=(bbb*bspy(i,j)+(dble(k)-bbb)*bspy(i,j-1))/ -+ x dble(k-1) -+ bspz(i,j)=(ccc*bspz(i,j)+(dble(k)-ccc)*bspz(i,j-1))/ -+ x dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+ if(k.eq.nospl)then -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,1)=bspx(i,1) -+ bsdy(i,1)=bspy(i,1) -+ bsdz(i,1)=bspz(i,1) -+ -+ enddo -+ -+ endif -+ -+ do i=iatm0,iatm1 -+ -+ bspx(i,1)=(txx(i)-int(txx(i)))*bspx(i,1)/dble(k-1) -+ bspy(i,1)=(tyy(i)-int(tyy(i)))*bspy(i,1)/dble(k-1) -+ bspz(i,1)=(tzz(i)-int(tzz(i)))*bspz(i,1)/dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine bspgen -+ -+ subroutine ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engcpe,vircpe,alpha,volm,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using the smoothed particle mesh ewald method -+c due to Essmann et al J. Chem. Phys. 103 (1995) 8577. -+c -+c parallel replicated data version (part 1) -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c additional FFT code - j. geronowicz sept 1999 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob,lconsw -+ -+ integer idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl -+ integer npass,i,nnn,ipass,l,ll,k,kk,j,jj,fail,iatm0,iatm1 -+ real(8) engcpe,vircpe,alpha,volm,epsq,omg,bb1,bb2,bb3,qchg -+ real(8) twopi,engsic,rvolm,ralph,shiftx,shifty,shiftz,det,qfix -+ real(8) tx,ty,tz,rcpcut,rcpct2,rkx1,rky1,rkz1,rkx2,rky2,rkz2 -+ real(8) rkx3,rky3,rkz3,rksq,akv,eng1,den,scal1,tmp,rclprp -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+CESSL integer inc2,inc3 -+CSGIC real(8) nauxfft(4) -+ -+ dimension omg(9),rclprp(10) -+ complex(8) cpetot,vterm -+ save newjob,engsic,qchg,iatm0,iatm1 -+ -+ data newjob/.true./,fail/0/ -+CSGIC data nauxfft/3,0,0,0/ -+ -+c allocate temporary arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1760) -+ -+ npass=1 -+ lconsw=.true. -+ twopi=2.d0*pi -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+c set up atoms numbers for nodes -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate self interaction correction and net system charge -+ -+ qchg=0.d0 -+ engsic=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ qchg=qchg+chge(i) -+ engsic=engsic+chge(i)**2 -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=qchg -+ buffer(2)=engsic -+ call gdsum(buffer(1),2,buffer(3)) -+ qchg =buffer(1) -+ engsic=buffer(2) -+ -+ endif -+ -+ engsic=-r4pie0/epsq*alpha*engsic/sqrpi -+ -+c initialise the complex exponential arrays -+ -+CCRAY call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CESSL call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CFFTW call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CSGIC call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+ -+c initialise the default fft routine -+ -+ call dlpfft3(1,1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c calculate B-spline coefficients -+ -+ call bspcoe(nospl,kmax1,kmax2,kmax3) -+ -+ endif -+ -+c initialise coulombic potential energy -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c initalize stress tensor working arrays -+ -+ do i = 1,9 -+ omg(i) = 0.d0 -+ enddo -+ -+c set working parameters -+ -+ rvolm=twopi/volm -+ ralph=-0.25d0/alpha**2 -+ -+c set switch for TO, RD and HP boundary conditions -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) then -+ -+ npass=2 -+ lconsw=.false. -+ rvolm=0.5d0*rvolm -+ shiftx=0.5d0*dble(kmax1) -+ shifty=0.5d0*dble(kmax2) -+ shiftz=0.5d0*dble(kmax3) -+ if(imcon.eq.7)shiftz=0.d0 -+ -+ endif -+ -+c convert cell coordinates to fractional coordinates -+ -+ call invert(cell,rcell,det) -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ -+ do i=iatm0,iatm1 -+ -+ txx(i)=dble(kmax1)*(rcell(1)*xxx(i)+rcell(4)*yyy(i)+ -+ x rcell(7)*zzz(i)+0.5d0) -+ tyy(i)=dble(kmax2)*(rcell(2)*xxx(i)+rcell(5)*yyy(i)+ -+ x rcell(8)*zzz(i)+0.5d0) -+ tzz(i)=dble(kmax3)*(rcell(3)*xxx(i)+rcell(6)*yyy(i)+ -+ x rcell(9)*zzz(i)+0.5d0) -+ -+ enddo -+ -+c construct B-splines for atoms -+ -+ call bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) -+ -+c zero 3D charge array -+ -+ nnn=kmaxd*kmaxe*kmaxf -+ call set_block(nnn,0.d0,qqc) -+ -+c construct 3D charge array -+ -+ do ipass=1,npass -+ -+ do i=iatm0,iatm1 -+ -+ do l=1,nospl -+ -+ ll=int(tzz(i))-l+2 -+ if(ll.gt.kmax3)ll=1 -+ if(ll.lt.1)ll=ll+kmax3 -+ do k=1,nospl -+ -+ kk=int(tyy(i))-k+2 -+ if(kk.gt.kmax2)kk=1 -+ if(kk.lt.1)kk=kk+kmax2 -+ -+ do j=1,nospl -+ -+ jj=int(txx(i))-j+2 -+ if(jj.gt.kmax1)jj=1 -+ if(jj.lt.1)jj=jj+kmax1 -+ -+ qqc(jj,kk,ll)=qqc(jj,kk,ll)+ -+ x chge(i)*bspx(i,j)*bspy(i,k)*bspz(i,l) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(.not.lconsw)then -+ -+ do i=iatm0,iatm1 -+ -+ tx=txx(i)-shiftx -+ ty=tyy(i)-shifty -+ tz=tzz(i)-shiftz -+ txx(i)=txx(i)-sign(shiftx,tx) -+ tyy(i)=tyy(i)-sign(shifty,ty) -+ tzz(i)=tzz(i)-sign(shiftz,tz) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c global sum of charge array -+ -+ if(mxnode.gt.1) call gdsum(qqc,nnn,buffer) -+ -+c load charge array into complex array for FFT -+ -+ call cpy_rtc(nnn,qqc,qqq) -+ -+c calculate inverse 3D FFT of charge array (in place). -+ -+CFFTW call fftwnd_f77_one(fplan,qqq,0) -+ -+CESSL inc2=kmaxd -+CESSL inc3=kmaxd*kmaxe -+CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, -+CESSL x -1,1.d0,buffer,mxbuff) -+ -+CSGIC call zzfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+CCRAY call ccfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+ call dlpfft3(0,1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c set reciprocal space cutoff -+ -+ call dcell(rcell,rclprp) -+ -+ rcpcut=0.5d0*min(dble(kmax1)*rclprp(7),dble(kmax2)*rclprp(8), -+ x dble(kmax3)*rclprp(9)) -+ rcpcut=rcpcut*1.05d0*twopi -+ rcpct2=rcpcut**2 -+ -+c calculate convolution of charge array with gaussian function -+ -+ do l=1,kmax3 -+ -+ ll=l-1 -+ if(l.gt.kmax3/2)ll=l-kmax3-1 -+ tmp=twopi*dble(ll) -+ rkx1=tmp*rcell(3) -+ rky1=tmp*rcell(6) -+ rkz1=tmp*rcell(9) -+ bb3=real(bscz(l)*conjg(bscz(l))) -+ -+ do k=1,kmax2 -+ -+ kk=k-1 -+ if(k.gt.kmax2/2)kk=k-kmax2-1 -+ tmp=twopi*dble(kk) -+ rkx2=rkx1+tmp*rcell(2) -+ rky2=rky1+tmp*rcell(5) -+ rkz2=rkz1+tmp*rcell(8) -+ bb2=bb3*real(bscy(k)*conjg(bscy(k))) -+ -+ do j=1,kmax1 -+ -+ jj=j-1 -+ if(j.gt.kmax1/2)jj=j-kmax1-1 -+ tmp=twopi*dble(jj) -+ rkx3=rkx2+tmp*rcell(1) -+ rky3=rky2+tmp*rcell(4) -+ rkz3=rkz2+tmp*rcell(7) -+ bb1=bb2*real(bscx(j)*conjg(bscx(j))) -+ -+ rksq=rkx3*rkx3+rky3*rky3+rkz3*rkz3 -+ -+ if(rksq.gt.1.d-6.and.rksq.le.rcpct2)then -+ -+ vterm=bb1*exp(ralph*rksq)/rksq*qqq(j,k,l) -+ akv=2.d0*(1.d0/rksq-ralph)*real(vterm*conjg(qqq(j,k,l))) -+ omg(1)=omg(1)-rkx3*rkx3*akv -+ omg(5)=omg(5)-rky3*rky3*akv -+ omg(9)=omg(9)-rkz3*rkz3*akv -+ omg(2)=omg(2)-rkx3*rky3*akv -+ omg(3)=omg(3)-rkx3*rkz3*akv -+ omg(6)=omg(6)-rky3*rkz3*akv -+ qqq(j,k,l)=vterm -+ -+ else -+ -+ qqq(j,k,l)=(0.d0,0.d0) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+CFFTW call fftwnd_f77_one(bplan,qqq,0) -+CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, -+CESSL x 1,1.d0,buffer,mxbuff) -+ -+CSGIC call zzfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+CCRAY call ccfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+ call dlpfft3(0,-1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c calculate atomic forces -+ -+ call spme_for -+ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, -+ x epsq,txx,tyy,tzz) -+ -+c complete product of charge array and its gaussian convolution -+ -+ call ele_prd(nnn,qqq,qqc,qqq) -+ -+c correction for charged systems -+ -+ qfix=-(0.5d0*pi*r4pie0/epsq)*((qchg/alpha)**2/volm)/ -+ x dble(mxnode) -+ -+c calculate total energy -+ -+ call scl_csum(nnn,cpetot,qqq) -+ -+ eng1=real(cpetot) -+ den=1.d0/dble(npass) -+ engcpe=engcpe+(den*rvolm*r4pie0*eng1/epsq+engsic)/ -+ x dble(mxnode)+qfix -+ -+c calculate stress tensor (symmetrical) -+ -+ scal1=den*rvolm*r4pie0/(epsq*dble(mxnode)) -+ stress(1) = stress(1)+scal1*(omg(1)+eng1)+qfix -+ stress(2) = stress(2)+scal1*omg(2) -+ stress(3) = stress(3)+scal1*omg(3) -+ stress(4) = stress(4)+scal1*omg(2) -+ stress(5) = stress(5)+scal1*(omg(5)+eng1)+qfix -+ stress(6) = stress(6)+scal1*omg(6) -+ stress(7) = stress(7)+scal1*omg(3) -+ stress(8) = stress(8)+scal1*omg(6) -+ stress(9) = stress(9)+scal1*(omg(9)+eng1)+qfix -+ -+c virial term -+ -+ vircpe=vircpe-scal1*(omg(1)+omg(5)+omg(9)+3.d0*eng1)-3.d0*qfix -+ -+c deallocate temporary arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail) -+ -+ return -+ end subroutine ewald_spme -+ -+ subroutine spme_for -+ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, -+ x epsq,txx,tyy,tzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using smoothed particle mesh ewald method -+c -+c parallel replicated data version (part 1) -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith oct 1998 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,i,ll -+ integer iatm0,iatm1,kk,k,j,jj,l -+ real(8) rvolm,epsq,txx,tyy,tzz,fff,fac,bdx,bdy,bdz -+ real(8) det,qsum -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension fff(3) -+ -+ fac=-2.d0*rvolm*r4pie0/epsq -+ call invert(cell,rcell,det) -+ -+c set up atom numbers for nodes -+ -+ iatm0 = (idnode*natms)/mxnode + 1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+c calculate forces -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ do l=1,nospl -+ -+ ll=int(tzz(i))-l+2 -+ if(ll.gt.kmax3)ll=1 -+ if(ll.lt.1)ll=ll+kmax3 -+ -+ do k=1,nospl -+ -+ kk=int(tyy(i))-k+2 -+ if(kk.gt.kmax2)kk=1 -+ if(kk.lt.1)kk=kk+kmax2 -+ -+ do j=1,nospl -+ -+ jj=int(txx(i))-j+2 -+ if(jj.gt.kmax1)jj=1 -+ if(jj.lt.1)jj=jj+kmax1 -+ -+ qsum=real(qqq(jj,kk,ll)) -+ bdx=qsum*bsdx(i,j)*bspy(i,k)*bspz(i,l)*dble(kmax1) -+ bdy=qsum*bspx(i,j)*bsdy(i,k)*bspz(i,l)*dble(kmax2) -+ bdz=qsum*bspx(i,j)*bspy(i,k)*bsdz(i,l)*dble(kmax3) -+ -+ fxx(i)=fxx(i)+fac*chge(i)*(bdx*rcell(1)+bdy*rcell(2)+ -+ x bdz*rcell(3)) -+ fyy(i)=fyy(i)+fac*chge(i)*(bdx*rcell(4)+bdy*rcell(5)+ -+ x bdz*rcell(6)) -+ fzz(i)=fzz(i)+fac*chge(i)*(bdx*rcell(7)+bdy*rcell(8)+ -+ x bdz*rcell(9)) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c remove COM drift arising from SPME approximations -+ -+ fff(1)=0.d0 -+ fff(2)=0.d0 -+ fff(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ fff(1)=fff(1)+fxx(i) -+ fff(2)=fff(2)+fyy(i) -+ fff(3)=fff(3)+fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)call gdsum(fff,3,buffer) -+ -+ fff(1)=fff(1)/dble(natms) -+ fff(2)=fff(2)/dble(natms) -+ fff(3)=fff(3)/dble(natms) -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=fxx(i)-fff(1) -+ fyy(i)=fyy(i)-fff(2) -+ fzz(i)=fzz(i)-fff(3) -+ -+ enddo -+ -+ return -+ end subroutine spme_for -+ -+ subroutine dlpfft3 -+ x (ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,ww1,ww2,ww3,aaa) -+ -+c*********************************************************************** -+c -+c dl-poly 3D fast fourier transform routine (in place) -+c -+c copyright daresbury laboratory 1998 -+c author w smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lkx,lky,lkz -+ integer ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,i,idm,kkk -+ integer nu1,nu2,nu3,iii,jjj,j,jj2,num,l,kk1,k12,k -+ real(8) tpi,arg -+ -+ dimension key1(ndiv1),key2(ndiv2),key3(ndiv3) -+ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) -+ complex(8) ttt,aaa(ndiv1,ndiv2,ndiv3) -+ save nu1,nu2,nu3 -+ -+ data tpi/6.283185307179586d0/ -+ -+ if(ind.gt.0)then -+ -+c check FFT array dimensions -+ -+ idm=1 -+ lkx=.true. -+ lky=.true. -+ lkz=.true. -+ -+ do i=1,30 -+ -+ idm=2*idm -+ -+ if(idm.eq.ndiv1)then -+ -+ lkx=.false. -+ nu1=i -+ -+ endif -+ if(idm.eq.ndiv2)then -+ -+ lky=.false. -+ nu2=i -+ -+ endif -+ if(idm.eq.ndiv3)then -+ -+ lkz=.false. -+ nu3=i -+ -+ endif -+ -+ enddo -+ -+ if(lkx.or.lky.or.lkz)then -+ -+ write(*,*)'error - FFT array not 2**N' -+ stop -+ -+ endif -+ -+c set reverse bit address arrays -+ -+ do kkk=1,ndiv1 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu1 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key1(kkk)=iii+1 -+ -+ enddo -+ -+ do kkk=1,ndiv2 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu2 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key2(kkk)=iii+1 -+ -+ enddo -+ -+ do kkk=1,ndiv3 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu3 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key3(kkk)=iii+1 -+ -+ enddo -+ -+c initialise complex exponential factors -+ -+ ww1(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv1/2 -+ -+ arg=(tpi/dble(ndiv1))*dble(i) -+ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww1(ndiv1+1-i)=conjg(ww1(i+1)) -+ -+ enddo -+ -+ ww2(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv2/2 -+ -+ arg=(tpi/dble(ndiv2))*dble(i) -+ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww2(ndiv2+1-i)=conjg(ww2(i+1)) -+ -+ enddo -+ -+ ww3(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv3/2 -+ -+ arg=(tpi/dble(ndiv3))*dble(i) -+ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww3(ndiv3+1-i)=conjg(ww3(i+1)) -+ -+ enddo -+ -+ return -+ -+ endif -+ -+c take conjugate of exponentials if required -+ -+ if(isw.lt.0)then -+ -+ do i=1,ndiv1 -+ -+ ww1(i)=conjg(ww1(i)) -+ -+ enddo -+ -+ do i=1,ndiv2 -+ -+ ww2(i)=conjg(ww2(i)) -+ -+ enddo -+ -+ do i=1,ndiv3 -+ -+ ww3(i)=conjg(ww3(i)) -+ -+ enddo -+ -+ endif -+ -+c perform fourier transform in X direction -+ -+ kkk=0 -+ num=ndiv1/2 -+ -+ do l=1,nu1 -+ -+ do while(kkk.lt.ndiv1) -+ -+ do i=1,num -+ -+ iii=key1(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv2 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(k12,j,k)*ww1(iii) -+ aaa(k12,j,k)=aaa(kk1,j,k)-ttt -+ aaa(kk1,j,k)=aaa(kk1,j,k)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv1 -+ -+ iii=key1(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv2 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(kkk,j,k) -+ aaa(kkk,j,k)=aaa(iii,j,k) -+ aaa(iii,j,k)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c perform fourier transform in Y direction -+ -+ kkk=0 -+ num=ndiv2/2 -+ -+ do l=1,nu2 -+ -+ do while(kkk.lt.ndiv2) -+ -+ do i=1,num -+ -+ iii=key2(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(j,k12,k)*ww2(iii) -+ aaa(j,k12,k)=aaa(j,kk1,k)-ttt -+ aaa(j,kk1,k)=aaa(j,kk1,k)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv2 -+ -+ iii=key2(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(j,kkk,k) -+ aaa(j,kkk,k)=aaa(j,iii,k) -+ aaa(j,iii,k)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c perform fourier transform in Z direction -+ -+ kkk=0 -+ num=ndiv3/2 -+ -+ do l=1,nu3 -+ -+ do while(kkk.lt.ndiv3) -+ -+ do i=1,num -+ -+ iii=key3(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv2 -+ -+ ttt=aaa(j,k,k12)*ww3(iii) -+ aaa(j,k,k12)=aaa(j,k,kk1)-ttt -+ aaa(j,k,kk1)=aaa(j,k,kk1)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv3 -+ -+ iii=key3(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv2 -+ -+ ttt=aaa(j,k,kkk) -+ aaa(j,k,kkk)=aaa(j,k,iii) -+ aaa(j,k,iii)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c restore exponentials to unconjugated values if necessary -+ -+ if(isw.lt.0)then -+ -+ do i=1,ndiv1 -+ -+ ww1(i)=conjg(ww1(i)) -+ -+ enddo -+ -+ do i=1,ndiv2 -+ -+ ww2(i)=conjg(ww2(i)) -+ -+ enddo -+ -+ do i=1,ndiv3 -+ -+ ww3(i)=conjg(ww3(i)) -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine dlpfft3 -+ -+ subroutine spl_cexp(ndiv1,ndiv2,ndiv3,ww1,ww2,ww3) -+ -+c*********************************************************************** -+c -+c dl-poly routine to create complex exponential arrays for -+c b-splines -+c -+c copyright daresbury laboratory 1998 -+c author w smith oct 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ndiv1,ndiv2,ndiv3,i -+ real(8) tpi,arg -+ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) -+ -+ data tpi/6.283185307179586d0/ -+ -+c initialise complex exponential factors -+ -+ ww1(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv1/2 -+ -+ arg=(tpi/dble(ndiv1))*dble(i) -+ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww1(ndiv1+1-i)=conjg(ww1(i+1)) -+ -+ enddo -+ -+ ww2(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv2/2 -+ -+ arg=(tpi/dble(ndiv2))*dble(i) -+ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww2(ndiv2+1-i)=conjg(ww2(i+1)) -+ -+ enddo -+ -+ ww3(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv3/2 -+ -+ arg=(tpi/dble(ndiv3))*dble(i) -+ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww3(ndiv3+1-i)=conjg(ww3(i+1)) -+ -+ enddo -+ -+ return -+ end subroutine spl_cexp -+ -+ end module spme_module -diff -urN dl_class_1.9.orig/srcmod/temp_scalers_module.f dl_class_1.9/srcmod/temp_scalers_module.f ---- dl_class_1.9.orig/srcmod/temp_scalers_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/temp_scalers_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,768 @@ -+ module temp_scalers_module -+ -+c*********************************************************************** -+c -+c dl_poly module for temperature scaling routines -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use core_shell_module -+ use error_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use utility_module -+ -+ contains -+ -+ subroutine quench(imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for quenching the bond energies in the -+c initial structure of a molecule defined by constraints -+c -+c copyright - daresbury laboratory 1992 -+c author w.smith november 1992 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ integer imcon,idnode,mxnode,natms,nscons,i,j,k,icyc -+ integer fail -+ real(8) tolnce,ddd,esig,vvv,ww1,ww2 -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ dimension fail(3) -+ -+ data fail/0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(3)) -+ -+ do i=1,3 -+ if(fail(i).ne.0)call error(idnode,1770) -+ enddo -+ -+c calculate bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c normalise bond vectors -+ -+ do k=1,nscons -+ -+ ddd=sqrt(dxt(k)**2+dyt(k)**2+dzt(k)**2) -+ -+ dxt(k)=dxt(k)/ddd -+ dyt(k)=dyt(k)/ddd -+ dzt(k)=dzt(k)/ddd -+ -+ enddo -+ -+c start of quenching cycle -+ -+ icyc=0 -+ safe=.false. -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ uxx(i)=0.d0 -+ uyy(i)=0.d0 -+ uzz(i)=0.d0 -+ -+ enddo -+ -+c calculate velocity corrections and error -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ vvv=dxt(k)*(vxx(i)-vxx(j))+dyt(k)*(vyy(i)-vyy(j))+ -+ x dzt(k)*(vzz(i)-vzz(j)) -+ -+ esig=max(esig,abs(vvv)) -+ -+ ww1=weight(j)*vvv/(weight(i)+weight(j)) -+ ww2=weight(i)*vvv/(weight(i)+weight(j)) -+ uxx(i)=uxx(i)-ww1*dxt(k) -+ uyy(i)=uyy(i)-ww1*dyt(k) -+ uzz(i)=uzz(i)-ww1*dzt(k) -+ uxx(j)=uxx(j)+ww2*dxt(k) -+ uyy(j)=uyy(j)+ww2*dyt(k) -+ uzz(j)=uzz(j)+ww2*dzt(k) -+ -+ enddo -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)then -+ -+c transport velocity adjustments to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ call shmove -+ x (idnode,mxnode,natms,lashap,lishap,uxx,uyy,uzz, -+ x xxt,yyt,zzt,buffer) -+ -+ endif -+ -+c update velocities -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ vxx(i)=vxx(i)+uxx(i)/dble(listme(i)) -+ vyy(i)=vyy(i)+uyy(i)/dble(listme(i)) -+ vzz(i)=vzz(i)+uzz(i)/dble(listme(i)) -+ vxx(j)=vxx(j)+uxx(j)/dble(listme(j)) -+ vyy(j)=vyy(j)+uyy(j)/dble(listme(j)) -+ vzz(j)=vzz(j)+uzz(j)/dble(listme(j)) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit if quenching fails -+ -+ if(.not.safe)call error(idnode,70) -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1) call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,stat=fail(3)) -+ -+ return -+ end subroutine quench -+ -+ subroutine quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to convert atomic velocities to rigid body -+c c.o.m. and angular velocity -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993. -+c author - t.forester nov 1993. -+c amended - t.forester dec 1994 : block data. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,mxnode,natms,ngrp,fail,ig,jr,id -+ integer igrp1,igrp2,i,j -+ real(8) rot,wxx,wyy,wzz -+ -+ dimension rot(9) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1780) -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c translate atomic velocites to com velocity & angular velocity -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=0.d0 -+ gvyy(ig)=0.d0 -+ gvzz(ig)=0.d0 -+ omx(ig)=0.d0 -+ omy(ig)=0.d0 -+ omz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr =jr+1 -+ i =lstrgd(jr) -+ -+c centre of mass momentum -+ -+ gvxx(ig)=gvxx(ig)+weight(i)*vxx(i) -+ gvyy(ig)=gvyy(ig)+weight(i)*vyy(i) -+ gvzz(ig)=gvzz(ig)+weight(i)*vzz(i) -+ -+c distance to c.o.m of molecule -+ -+ xxt(jr)=xxx(i)-gcmx(ig) -+ yyt(jr)=yyy(i)-gcmy(ig) -+ zzt(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+c centre of mass velocity -+ -+ gvxx(ig)=gvxx(ig)/gmass(id) -+ gvyy(ig)=gvyy(ig)/gmass(id) -+ gvzz(ig)=gvzz(ig)/gmass(id) -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+c angular momentum accumulators -+ -+ wxx=0.d0 -+ wyy=0.d0 -+ wzz=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr =jr+1 -+ i =lstrgd(jr) -+ -+ wxx=wxx+weight(i)*(yyt(jr)*vzz(i)-zzt(jr)*vyy(i)) -+ wyy=wyy+weight(i)*(zzt(jr)*vxx(i)-xxt(jr)*vzz(i)) -+ wzz=wzz+weight(i)*(xxt(jr)*vyy(i)-yyt(jr)*vxx(i)) -+ -+ enddo -+ -+c angular velocity in body fixed frame -+ -+ omx(ig)=(rot(1)*wxx+rot(4)*wyy+rot(7)*wzz)*rotinx(id,2) -+ omy(ig)=(rot(2)*wxx+rot(5)*wyy+rot(8)*wzz)*rotiny(id,2) -+ omz(ig)=(rot(3)*wxx+rot(6)*wyy+rot(9)*wzz)*rotinz(id,2) -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr +1 -+ i=lstrgd(jr) -+ -+c site velocity in body frame -+ -+ wxx=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ wyy=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ wzz=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*wxx+rot(2)*wyy+rot(3)*wzz+gvxx(ig) -+ vyy(i)=rot(4)*wxx+rot(5)*wyy+rot(6)*wzz+gvyy(ig) -+ vzz(i)=rot(7)*wxx+rot(8)*wyy+rot(9)*wzz+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,omx,omy,omz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine quatqnch -+ -+ subroutine vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for scaling the velocity arrays to the -+c desired temperature -+c -+c zeroes angular momentum in non-periodic system. -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1992. -+c author - w.smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,imcon,natms,ngrp,iatm1,iatm2,i -+ real(8) sigma,roti,rotinv,cmx,cmy,cmz,cmvx,cmvy,cmvz,sysmas -+ real(8) amx,amy,amz,det,scale,rsq,wxx,wyy,wzz,sumke -+ -+ dimension roti(9),rotinv(9) -+ -+c block indices -+ -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+c calculate centre of mass position and motion of the system -+ -+ cmx=0.d0 -+ cmy=0.d0 -+ cmz=0.d0 -+ cmvx=0.d0 -+ cmvy=0.d0 -+ cmvz=0.d0 -+ sysmas=0.d0 -+ -+ do i=iatm1,iatm2 -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ cmx=cmx+weight(i)*xxx(i) -+ cmy=cmy+weight(i)*yyy(i) -+ cmz=cmz+weight(i)*zzz(i) -+ sysmas=sysmas+weight(i) -+ cmvx=cmvx+vxx(i)*weight(i) -+ cmvy=cmvy+vyy(i)*weight(i) -+ cmvz=cmvz+vzz(i)*weight(i) -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ buffer(8)=sysmas -+ buffer(9)=cmx -+ buffer(10)=cmy -+ buffer(11)=cmz -+ buffer(12)=cmvx -+ buffer(13)=cmvy -+ buffer(14)=cmvz -+ call gdsum(buffer(8),7,buffer(1)) -+ sysmas= buffer(8) -+ cmx=buffer(9) -+ cmy=buffer(10) -+ cmz=buffer(11) -+ cmvx=buffer(12) -+ cmvy=buffer(13) -+ cmvz=buffer(14) -+ endif -+ -+ cmx=cmx/sysmas -+ cmy=cmy/sysmas -+ cmz=cmz/sysmas -+ -+ cmvx=cmvx/sysmas -+ cmvy=cmvy/sysmas -+ cmvz=cmvz/sysmas -+ -+c remove centre of mass motion -+ -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ vxx(i)=vxx(i)-cmvx -+ vyy(i)=vyy(i)-cmvy -+ vzz(i)=vzz(i)-cmvz -+ -+ else -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ endif -+ -+ enddo -+ -+c zero angular momentum about centre of mass - non-periodic system -+ -+ if(imcon.eq.0)then -+ -+c move to centre of mass origin -+ -+ do i=1,natms -+ -+ xxx(i)=xxx(i)-cmx -+ yyy(i)=yyy(i)-cmy -+ zzz(i)=zzz(i)-cmz -+ -+ enddo -+ -+c angular momentum accumulators -+ -+ amx=0.d0 -+ amy=0.d0 -+ amz=0.d0 -+ -+c rotational inertia accumulators -+ -+ do i=1,9 -+ roti(i)=0.d0 -+ enddo -+ -+ do i=iatm1,iatm2 -+ -+ amx=amx+weight(i)*(yyy(i)*vzz(i)-zzz(i)*vyy(i)) -+ amy=amy+weight(i)*(zzz(i)*vxx(i)-xxx(i)*vzz(i)) -+ amz=amz+weight(i)*(xxx(i)*vyy(i)-yyy(i)*vxx(i)) -+ -+ rsq=xxx(i)**2+yyy(i)**2+zzz(i)**2 -+ roti(1)=roti(1)+weight(i)*(xxx(i)*xxx(i)-rsq) -+ roti(2)=roti(2)+weight(i)* xxx(i)*yyy(i) -+ roti(3)=roti(3)+weight(i)* xxx(i)*zzz(i) -+ roti(5)=roti(5)+weight(i)*(yyy(i)*yyy(i)-rsq) -+ roti(6)=roti(6)+weight(i)* yyy(i)*zzz(i) -+ roti(9)=roti(9)+weight(i)*(zzz(i)*zzz(i)-rsq) -+ -+ enddo -+ -+c complete rotational inertia matrix -+ -+ roti(4)=roti(2) -+ roti(7)=roti(3) -+ roti(8)=roti(6) -+ -+c global sum -+ -+ if(mxnode.gt.1)then -+ buffer(13)=amx -+ buffer(14)=amy -+ buffer(15)=amz -+ do i=1,9 -+ buffer(15+i)=roti(i) -+ enddo -+ call gdsum(buffer(13),12,buffer(1)) -+ amx=buffer(13) -+ amy=buffer(14) -+ amz=buffer(15) -+ do i=1,9 -+ roti(i)=buffer(15+i) -+ enddo -+ endif -+ -+c invert rotational inertia matrix -+ -+ call invert (roti,rotinv,det) -+ -+c correction to angular velocity -+ -+ wxx=rotinv(1)*amx+rotinv(2)*amy+rotinv(3)*amz -+ wyy=rotinv(4)*amx+rotinv(5)*amy+rotinv(6)*amz -+ wzz=rotinv(7)*amx+rotinv(8)*amy+rotinv(9)*amz -+ -+c correction to linear velocity -+ -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ vxx(i)=vxx(i)+(wyy*zzz(i)-wzz*yyy(i)) -+ vyy(i)=vyy(i)+(wzz*xxx(i)-wxx*zzz(i)) -+ vzz(i)=vzz(i)+(wxx*yyy(i)-wyy*xxx(i)) -+ -+ endif -+ -+ enddo -+ -+c reset positions to original reference frame -+ -+ do i=1,natms -+ -+ xxx(i)=xxx(i)+cmx -+ yyy(i)=yyy(i)+cmy -+ zzz(i)=zzz(i)+cmz -+ -+ enddo -+ -+ endif -+ -+c calculate temperature -+ -+ sumke=0.d0 -+ -+ do i=iatm1,iatm2 -+ -+ sumke=sumke+weight(i)* -+ x (vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ sumke=0.5d0*sumke -+ if(mxnode.gt.1)then -+ buffer(1)=sumke -+ call gdsum(buffer(1),1,buffer(2)) -+ sumke=buffer(1) -+ endif -+ -+c apply temperature scaling -+ -+ scale=1.d0 -+ if(sumke.gt.1.d-6)scale=sqrt(sigma/sumke) -+ -+ do i=1,natms -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+ if(ngrp.gt.0)then -+ call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ endif -+ -+ return -+ end subroutine vscaleg -+ -+ subroutine shlqnch(idnode,mxnode,ntshl,temp) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for quenching the internal bond energies -+c in ions defined by shell model -+c -+c copyright - daresbury laboratory 1994 -+c author w.smith july 1994 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m -+ real(8) temp,pke,rmu,dvx,dvy,dvz,tmx,tmy,tmz,scl -+ -+c permitted core-shell internal kinetic energy -+ -+ pke=boltz*temp*1.d-4 -+ -+c block indices -+ -+ ishl1 = (idnode*ntshl)/mxnode+1 -+ ishl2 = ((idnode+1)*ntshl)/mxnode -+ -+c calculate core and shell velocities from total momentum -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) -+ -+ if(rmu.gt.0.d0)then -+ -+ dvx=vxx(j)-vxx(i) -+ dvy=vyy(j)-vyy(i) -+ dvz=vzz(j)-vzz(i) -+ -+ scl=sqrt(pke/(rmu*(dvx*dvx+dvy*dvy+dvz*dvz))) -+ -+ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) -+ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) -+ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) -+ -+ vxx(i)=tmx/(weight(i)+weight(j))-scl*rmu*dvx/weight(i) -+ vxx(j)=tmx/(weight(i)+weight(j))+scl*rmu*dvx/weight(j) -+ vyy(i)=tmy/(weight(i)+weight(j))-scl*rmu*dvy/weight(i) -+ vyy(j)=tmy/(weight(i)+weight(j))+scl*rmu*dvy/weight(j) -+ vzz(i)=tmz/(weight(i)+weight(j))-scl*rmu*dvz/weight(i) -+ vzz(j)=tmz/(weight(i)+weight(j))+scl*rmu*dvz/weight(j) -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) -+ -+ return -+ end subroutine shlqnch -+ -+ subroutine regauss -+ x (idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for resetting the system velocities -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,mxnode,natms,ngrp,nscons -+ integer ntcons,ntshl,i,k,keyshl -+ real(8) temp,tolnce,sigma,rsq -+ -+c set atomic velocities from gaussian distribution -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch -+ x (idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ return -+ end subroutine regauss -+ -+ subroutine impact(khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c********************************************************************* -+c -+c DLPOLY routinue for impacting a selected atom with a specified -+c recoil energy -+c -+c copyright daresbury laboratory -+c author w.smith september 2007 -+c -+c********************************************************************* -+ -+ use config_module -+ use ensemble_tools_module -+ -+ implicit none -+ -+ integer i,khit,natms,idnode,mxnode,iatm0,iatm1 -+ real(8) ehit,vxo,vyo,vzo,xhit,yhit,zhit,fac,smass,vel -+ -+c store original particle velocity -+ -+ vxo=vxx(khit) -+ vyo=vyy(khit) -+ vzo=vzz(khit) -+ -+c determine recoil velocity -+ -+ vel=sqrt(2.d0*ehit/(weight(khit)*(xhit**2+yhit**2+zhit**2))) -+ -+c reassign particle velocity -+ -+ vxx(khit)=vel*xhit -+ vyy(khit)=vel*yhit -+ vzz(khit)=vel*zhit -+ -+c determine system mass -+ -+ smass=getmass(natms,idnode,mxnode) -+ -+c calculate net system velocity -+ -+ vxo=(vxx(khit)-vxo)*weight(khit)/smass -+ vyo=(vyy(khit)-vyo)*weight(khit)/smass -+ vzo=(vzz(khit)-vzo)*weight(khit)/smass -+ -+c reset system net velocity to zero -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vxo -+ vyy(i)=vyy(i)-vyo -+ vzz(i)=vzz(i)-vzo -+ -+ enddo -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ return -+ end subroutine impact -+ -+ end module temp_scalers_module -diff -urN dl_class_1.9.orig/srcmod/tersoff_module.f dl_class_1.9/srcmod/tersoff_module.f ---- dl_class_1.9.orig/srcmod/tersoff_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/tersoff_module.f 2011-04-16 16:13:06.000000000 +0200 -@@ -0,0 +1,1011 @@ -+ module tersoff_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining tersoff potential arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ integer, allocatable :: lstter(:),ltpter(:),lattsf(:) -+ real(8), allocatable :: prmter(:,:),prmter2(:,:) -+ real(8), allocatable :: vmbp(:,:,:),gmbp(:,:,:) -+ real(8), allocatable :: xtf(:),ytf(:),ztf(:),rtf(:) -+ real(8), allocatable :: ert(:),eat(:),grt(:),gat(:) -+ real(8), allocatable :: scr(:),gcr(:),gam(:),gvr(:) -+ -+ save xtf,ytf,ztf,rtf,ert,eat,grt,gat,scr,gcr,gam,filter -+ save prmter,prmter2,lstter,ltpter,lattsf,vmbp,gmbp -+ -+ contains -+ -+ subroutine alloc_ter_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=20 -+ -+ integer i,fail,idnode,npairs -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ npairs=(mxter*(mxter+1))/2 -+ allocate (prmter(mxter,mxpter),stat=fail(1)) -+ allocate (prmter2(2,npairs),stat=fail(2)) -+ allocate (lstter(mxter),stat=fail(3)) -+ allocate (ltpter(mxter),stat=fail(4)) -+ allocate (lattsf(mxatms),stat=fail(5)) -+ allocate (xtf(mxatms),stat=fail(6)) -+ allocate (ytf(mxatms),stat=fail(7)) -+ allocate (ztf(mxatms),stat=fail(8)) -+ allocate (rtf(mxatms),stat=fail(9)) -+ allocate (ert(mxatms),stat=fail(10)) -+ allocate (eat(mxatms),stat=fail(11)) -+ allocate (grt(mxatms),stat=fail(12)) -+ allocate (gat(mxatms),stat=fail(13)) -+ allocate (scr(mxatms),stat=fail(14)) -+ allocate (gcr(mxatms),stat=fail(15)) -+ allocate (gam(mxatms),stat=fail(16)) -+ allocate (gvr(mxatms),stat=fail(17)) -+ allocate (vmbp(mxgrid,npairs,3),stat=fail(18)) -+ allocate (gmbp(mxgrid,npairs,3),stat=fail(19)) -+ allocate (filter(mxsite),stat=fail(20)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1945) -+ enddo -+ -+ end subroutine alloc_ter_arrays -+ -+ subroutine define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining tersoff potentials -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1 -+ character*1 message(80) -+ integer fail,idnode,ntpter,ntpatm,i,idum,j,itpter -+ integer keypot,jtpatm,k,katm0,katm1,icross,npairs,ktyp -+ real(8) rctter,engunit -+ real(8), allocatable :: parpot(:) -+ data fail/0/ -+ -+ allocate (parpot(mxpter),stat=fail) -+ if(fail.ne.0)call error(idnode,1955) -+ -+ ntpter=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified tersoff ', -+ x 'atom potentials',i10)") ntpter -+ write(nrite,"(/,/,16x,'atom ',3x,' key',30x, -+ x 'parameters'/,/)") -+ -+ endif -+ if(ntpter.gt.mxter) call error(idnode,88) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ rctter=0.d0 -+ -+ do i=1,mxter -+ lstter(i)=-1 -+ enddo -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ k=0 -+ do i=1,mxter -+ do j=1,i -+ -+ k=k+1 -+ prmter2(1,k)=0.d0 -+ prmter2(2,k)=0.d0 -+ -+ enddo -+ enddo -+ -+ do itpter=1,ntpter -+ -+ do i=1,mxpter -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom0,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'ters') then -+ -+ keypot=1 -+ -+ else -+ -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,1972) -+ -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) ! A_i -+ parpot(2)=dblstr(record,lenrec,idum) ! a_i -+ parpot(3)=dblstr(record,lenrec,idum) ! B_i -+ parpot(4)=dblstr(record,lenrec,idum) ! b_i -+ parpot(5)=dblstr(record,lenrec,idum) ! R_i -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ parpot(6)=dblstr(record,lenrec,idum) ! S_i -+ parpot(7)=dblstr(record,lenrec,idum) ! beta_i -+ parpot(8)=dblstr(record,lenrec,idum) ! eta_i -+ parpot(9)=dblstr(record,lenrec,idum) ! c_i -+ parpot(10)=dblstr(record,lenrec,idum) ! d_i -+ parpot(11)=dblstr(record,lenrec,idum) ! h_i -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(16x,a8,2x,a4,2x,1p,5e13.5)") -+ x atom0,keyword(1:4),(parpot(j),j=1,5) -+ write(nrite,"(32x,1p,5e13.5)")(parpot(j),j=6,mxpter) -+ -+ endif -+ -+ katm0=0 -+ -+ do jtpatm=1,ntpatm -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ enddo -+ -+ if(katm0.eq.0)call error(idnode,92) -+ -+ filter(katm0)=.true. -+ -+c convert parameters to internal units -+ -+ if(keypot.eq.1)then -+ -+ parpot(1)=parpot(1)*engunit -+ parpot(3)=parpot(3)*engunit -+ -+ endif -+ if(lstter(katm0).gt.-1) call error(idnode,21) -+ lstter(katm0)=itpter -+ ltpter(itpter)=keypot -+ -+c calculate max tersoff cutoff -+ -+ rctter=max(rctter,parpot(6)) -+ -+c store tersoff single atom potential parameters -+ -+ do i=1,mxpter -+ prmter(itpter,i)=parpot(i) -+ enddo -+ -+ enddo -+ -+ if(rctter.lt.1.d-6)call error(idnode,1953) -+ -+c start processing double atom potential parameters -+ -+ npairs=(ntpter*(ntpter+1))/2 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'number of tersoff ', -+ x 'cross terms',i10)") npairs -+ write(nrite,"(/,/,16x,'atom ','atom ',10x, -+ x 'parameters'/,/)") -+ -+ endif -+ -+ do icross=1,npairs -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call getword(atom0,record,8,lenrec) -+ call getword(atom1,record,8,lenrec) -+ -+ parpot(1)=dblstr(record,lenrec,idum) ! chi_ij -+ parpot(2)=dblstr(record,lenrec,idum) ! omega_ij -+ -+ katm0=0 -+ katm1=0 -+ -+ do jtpatm=1,ntpatm -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0)call error(idnode,92) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ -+ ktyp=loc2(lstter(katm0),lstter(katm1)) -+ prmter2(1,ktyp)=parpot(1) -+ prmter2(2,ktyp)=parpot(2) -+ -+ if(idnode.eq.0)write(nrite,"(16x,a8,a8,1p,2e13.5)") -+ x atom0,atom1,(parpot(j),j=1,2) -+ -+ enddo -+ -+c generate tersoff interpolation arrays -+ -+ call tergen(ntpatm,rctter) -+ -+ return -+ end subroutine define_tersoff -+ -+ subroutine tergen(ntpatm,rctter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating potential energy and -+c force arrays for tersoff forces only -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ntpatm,katm0,katm1,ipt,jpt,kpt,i -+ real(8) dlrpot,rctter,baij,saij,bbij,sbij,rij,sij,att,arg -+ real(8) rrr,rep -+ -+c define grid resolution for potential arrays -+ -+ dlrpot=rctter/dble(mxgrid-4) -+ -+c construct arrays for all types of short ranged potential -+ -+ do katm0=1,ntpatm -+ -+ if(filter(katm0))then -+ -+ ipt=lstter(katm0) -+ -+ do katm1=1,katm0 -+ -+ if(filter(katm1))then -+ -+ jpt=lstter(katm1) -+ -+ if((ltpter(ipt).eq.1).and.(ltpter(jpt).eq.1))then -+ -+ kpt=loc2(ipt,jpt) -+ -+c define tersoff parameters -+ -+ baij=sqrt(prmter(ipt,1)*prmter(jpt,1)) -+ saij=0.5d0*(prmter(ipt,2)+prmter(jpt,2)) -+ bbij=sqrt(prmter(ipt,3)*prmter(jpt,3)) -+ sbij=0.5d0*(prmter(ipt,4)+prmter(jpt,4)) -+ rij=sqrt(prmter(ipt,5)*prmter(jpt,5)) -+ sij=sqrt(prmter(ipt,6)*prmter(jpt,6)) -+ -+c store potential cutoff -+ -+ vmbp(1,kpt,1)=sij -+ -+c calculate screening function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ if(rrr.le.rij)then -+ -+ vmbp(i,kpt,1)=1.d0 -+ gmbp(i,kpt,1)=0.d0 -+ -+ else -+ -+ arg=pi*(rrr-rij)/(sij-rij) -+ vmbp(i,kpt,1)=0.5d0*(1.d0+cos(arg)) -+ gmbp(i,kpt,1)=0.5d0*pi*rrr*sin(arg)/(sij-rij) -+ -+ endif -+ -+ enddo -+ -+c calculate screened repulsion function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ rep=baij*exp(-saij*rrr) -+ vmbp(i,kpt,2)=rep*vmbp(i,kpt,1) -+ gmbp(i,kpt,2)=rep*(gmbp(i,kpt,1)+ -+ x saij*rrr*vmbp(i,kpt,1)) -+ -+ enddo -+ -+c calculate screened attraction function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ att=bbij*exp(-sbij*rrr) -+ vmbp(i,kpt,3)=att*vmbp(i,kpt,1) -+ gmbp(i,kpt,3)=att*(gmbp(i,kpt,1)+ -+ x sbij*rrr*vmbp(i,kpt,1)) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine tergen -+ -+ subroutine tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating potential and forces -+c due to a tersoff potential -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped, cubic or orthorhombic -+c cell geometry -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,natms,imcon,nix,niy,niz,i,j,nbx -+ integer nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz,jcell,iter -+ integer limit,ii,iatm -+ real(8) rctter,engter,virter,xm,ym,zm,det,cprp -+ real(8) xdc,ydc,zdc,sxx,syy,szz,strs -+ -+ dimension nix(27),niy(27),niz(27),cprp(10),strs(6) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise potential energy and virial -+ -+ engter=0.d0 -+ virter=0.d0 -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ cell(1)=2.d0*xm+rctter -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rctter -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rctter -+ -+ endif -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,1974) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rctter+1.d-6)) -+ nby=int(cprp(8)/(rctter+1.d-6)) -+ nbz=int(cprp(9)/(rctter+1.d-6)) -+ if(nbx.lt.3.or.nby.lt.3.or.nbz.lt.3)then -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,'(a,3i5)') -+ x 'tersoff link cell decomposition is',nbx,nby,nbz -+ -+ endif -+ -+ call error(idnode,1977) -+ -+ endif -+ ncells=nbx*nby*nbz -+ -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,'(a,i6)') -+ x 'number of required link cells in tersoff.f is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in tersoff.f is ',mxcell -+ call error(idnode,1976) -+ -+ endif -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of angles -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+c construct mini-list of neighbour cell contents -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ lattsf(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ iatm=lattsf(ii) -+ iter=lstter(ltype(iatm)) -+ -+ if(mod(iatm,mxnode).eq.idnode.and.iter.ge.0)then -+ -+c construct working arrays by interpolation -+ -+ call terint(iatm,limit,rctter) -+ -+c calculate three body (attractive) terms -+ -+ call tersoff3(ii,limit,engter,virter,strs) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c calculate stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,1978) -+ -+c global sum of three body potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engter -+ buffer(2)=virter -+ call gdsum(buffer(1),2,buffer(3)) -+ engter=buffer(1) -+ virter=buffer(2) -+ -+ endif -+ -+c remove effect of double counting -+ -+ engter=0.5d0*engter -+ virter=0.5d0*virter -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+ return -+ end subroutine tersoff -+ -+ subroutine terint(iatm,limit,rctter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing working arrays for -+c a tersoff potential using interpolation -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,jatm,jj,limit,iter,jter,jjter,ll -+ real(8) rctter,sxij,syij,szij,ppp,t1,t2,rdr -+ real(8) vk0,vk1,vk2,gk0,gk1,gk2 -+ -+ rdr=dble(mxgrid-4)/rctter -+ iter=lstter(ltype(iatm)) -+ -+c initialise working arrays -+ -+ do jj=1,limit -+ -+ xtf(jj)=0.d0 -+ ytf(jj)=0.d0 -+ ztf(jj)=0.d0 -+ rtf(jj)=0.d0 -+ ert(jj)=0.d0 -+ eat(jj)=0.d0 -+ grt(jj)=0.d0 -+ gat(jj)=0.d0 -+ scr(jj)=0.d0 -+ gcr(jj)=0.d0 -+ -+ enddo -+ -+c construct working arrays -+ -+ do jj=1,limit -+ -+ jatm=lattsf(jj) -+ jter=lstter(ltype(jatm)) -+ -+ if(jatm.ne.iatm.and.jter.ge.0)then -+ -+ sxij=xxx(jatm)-xxx(iatm) -+ sxij=sxij-nint(sxij) -+ syij=yyy(jatm)-yyy(iatm) -+ syij=syij-nint(syij) -+ szij=zzz(jatm)-zzz(iatm) -+ szij=szij-nint(szij) -+ -+ xtf(jj)=cell(1)*sxij+cell(4)*syij+cell(7)*szij -+ ytf(jj)=cell(2)*sxij+cell(5)*syij+cell(8)*szij -+ ztf(jj)=cell(3)*sxij+cell(6)*syij+cell(9)*szij -+ rtf(jj)=sqrt(xtf(jj)**2+ytf(jj)**2+ztf(jj)**2) -+ xtf(jj)=xtf(jj)/rtf(jj) -+ ytf(jj)=ytf(jj)/rtf(jj) -+ ztf(jj)=ztf(jj)/rtf(jj) -+ -+ jjter=loc2(iter,jter) -+ if(rtf(jj).le.vmbp(1,jjter,1))then -+ -+ ll=int(rdr*rtf(jj)) -+ ppp=rtf(jj)*rdr-dble(ll) -+ -+c interpolate screening function -+ -+ vk0=vmbp(ll,jjter,1) -+ vk1=vmbp(ll+1,jjter,1) -+ vk2=vmbp(ll+2,jjter,1) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ scr(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of screening function -+ -+ gk0=gmbp(ll,jjter,1) -+ gk1=gmbp(ll+1,jjter,1) -+ gk2=gmbp(ll+2,jjter,1) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gcr(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+c interpolate repulsive component of energy -+ -+ vk0=vmbp(ll,jjter,2) -+ vk1=vmbp(ll+1,jjter,2) -+ vk2=vmbp(ll+2,jjter,2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ ert(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of repulsive function -+ -+ gk0=gmbp(ll,jjter,2) -+ gk1=gmbp(ll+1,jjter,2) -+ gk2=gmbp(ll+2,jjter,2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ grt(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+c interpolate attractive component of energy -+ -+ vk0=vmbp(ll,jjter,3) -+ vk1=vmbp(ll+1,jjter,3) -+ vk2=vmbp(ll+2,jjter,3) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ eat(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of attractive function -+ -+ gk0=gmbp(ll,jjter,3) -+ gk1=gmbp(ll+1,jjter,3) -+ gk2=gmbp(ll+2,jjter,3) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gat(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine terint -+ -+ subroutine tersoff3(ii,limit,engter,virter,strs) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating three body contributions -+c to a tersoff potential and tersoff potential, virial and -+c atomic forces -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical flag -+ integer iatm,jatm,katm,limit,ii,jj,kk -+ integer iter,jter,kter,jjter,kkter -+ real(8) cost,gtheta,ci,di,hi,gamma,gam_j,gam_k,eterm,gterm,strs -+ real(8) fxa,fya,fza,fxc,fyc,fzc,engter,virter,vterm,gam_ij,bi,ei -+ -+ dimension strs(6) -+ -+ iatm=lattsf(ii) -+ iter=lstter(ltype(iatm)) -+ -+ bi=prmter(iter,7) -+ ei=prmter(iter,8) -+ ci=prmter(iter,9) -+ di=prmter(iter,10) -+ hi=prmter(iter,11) -+ -+ do jj=1,limit -+ -+ jatm=lattsf(jj) -+ jter=lstter(ltype(jatm)) -+ if(jter.ge.0.and.iatm.ne.jatm)then -+ -+ jjter=loc2(iter,jter) -+ if(rtf(jj).le.vmbp(1,jjter,1))then -+ -+ flag=.false. -+ -+c potential energy and virial terms -+ -+ vterm=0.d0 -+ eterm=0.d0 -+ -+c initialise work arrays -+ -+ do kk=1,limit -+ -+ gam(kk)=0.d0 -+ gvr(kk)=0.d0 -+ -+ enddo -+ -+c calculate bond factor -+ -+ do kk=1,limit -+ -+ katm=lattsf(kk) -+ kter=lstter(ltype(katm)) -+ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then -+ -+ kkter=loc2(iter,kter) -+ -+ if(rtf(kk).le.vmbp(1,kkter,1))then -+ -+ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ztf(jj)*ztf(kk)) -+ gtheta=1.d0+(ci/di)**2-ci**2/(di**2+(hi-cost)**2) -+ eterm=eterm+gtheta*prmter2(2,kkter)*scr(kk) -+ vterm=vterm+gtheta*prmter2(2,kkter)*gcr(kk)*rtf(kk) -+ gvr(kk)=2.d0*ci**2*(hi-cost)/(di**2+(hi-cost)**2)**2 -+ gam(kk)=gtheta -+ flag=.true. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(flag)then -+ -+c tersoff energy and virial -+ -+ gam_ij=prmter2(1,jjter)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei) -+ gamma=0.5d0*prmter2(1,jjter)*bi*(bi*eterm)**(ei-1.d0)* -+ x eat(jj)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei-1.d0) -+ engter=engter+ert(jj)-gam_ij*eat(jj) -+ virter=virter+gamma*vterm+(grt(jj)-gam_ij*gat(jj))*rtf(jj) -+ -+c calculate 3-body forces -+ -+ do kk=1,limit -+ -+ katm=lattsf(kk) -+ kter=lstter(ltype(katm)) -+ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then -+ -+ kkter=loc2(iter,kter) -+ if(rtf(kk).le.vmbp(1,kkter,1))then -+ -+ gam_j=0.5d0*gamma*prmter2(2,kkter)*scr(kk)*gvr(kk) -+ gam_k=0.5d0*gamma*prmter2(2,kkter)*gcr(kk)*gam(kk) -+ -+c calculate contribution to atomic forces -+ -+ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ -+ x ztf(jj)*ztf(kk)) -+ -+ fxa=gam_j*(xtf(kk)-xtf(jj)*cost)/rtf(jj) -+ fya=gam_j*(ytf(kk)-ytf(jj)*cost)/rtf(jj) -+ fza=gam_j*(ztf(kk)-ztf(jj)*cost)/rtf(jj) -+ -+ fxc=gam_j*(xtf(jj)-xtf(kk)*cost)/rtf(kk)- -+ x gam_k*xtf(kk) -+ fyc=gam_j*(ytf(jj)-ytf(kk)*cost)/rtf(kk)- -+ x gam_k*ytf(kk) -+ fzc=gam_j*(ztf(jj)-ztf(kk)*cost)/rtf(kk)- -+ x gam_k*ztf(kk) -+ -+ fxx(jatm)=fxx(jatm)+fxa -+ fyy(jatm)=fyy(jatm)+fya -+ fzz(jatm)=fzz(jatm)+fza -+ -+ fxx(iatm)=fxx(iatm)-(fxa+fxc) -+ fyy(iatm)=fyy(iatm)-(fya+fyc) -+ fzz(iatm)=fzz(iatm)-(fza+fzc) -+ -+ fxx(katm)=fxx(katm)+fxc -+ fyy(katm)=fyy(katm)+fyc -+ fzz(katm)=fzz(katm)+fzc -+ -+c calculate contributions to stress tensor -+ -+ strs(1)=strs(1)+(fxa*xtf(jj)*rtf(jj)+ -+ x fxc*xtf(kk)*rtf(kk)) -+ strs(2)=strs(2)+(fxa*ytf(jj)*rtf(jj)+ -+ x fxc*ytf(kk)*rtf(kk)) -+ strs(3)=strs(3)+(fxa*ztf(jj)*rtf(jj)+ -+ x fxc*ztf(kk)*rtf(kk)) -+ strs(4)=strs(4)+(fya*ytf(jj)*rtf(jj)+ -+ x fyc*ytf(kk)*rtf(kk)) -+ strs(5)=strs(5)+(fya*ztf(jj)*rtf(jj)+ -+ x fyc*ztf(kk)*rtf(kk)) -+ strs(6)=strs(6)+(fza*ztf(jj)*rtf(jj)+ -+ x fzc*ztf(kk)*rtf(kk)) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ gam_ij=prmter2(1,jjter) -+ engter=engter+ert(jj)-gam_ij*eat(jj) -+ virter=virter+(grt(jj)-gam_ij*gat(jj))*rtf(jj) -+ -+ endif -+ -+c calculate two body force terms -+ -+ gterm=0.5d0*(grt(jj)-gam_ij*gat(jj)) -+ fxx(iatm)=fxx(iatm)+xtf(jj)*gterm -+ fyy(iatm)=fyy(iatm)+ytf(jj)*gterm -+ fzz(iatm)=fzz(iatm)+ztf(jj)*gterm -+ fxx(jatm)=fxx(jatm)-xtf(jj)*gterm -+ fyy(jatm)=fyy(jatm)-ytf(jj)*gterm -+ fzz(jatm)=fzz(jatm)-ztf(jj)*gterm -+ -+c calculate contributions to stress tensor -+ -+ strs(1)=strs(1)-gterm*rtf(jj)*xtf(jj)*xtf(jj) -+ strs(2)=strs(2)-gterm*rtf(jj)*xtf(jj)*ytf(jj) -+ strs(3)=strs(3)-gterm*rtf(jj)*xtf(jj)*ztf(jj) -+ strs(4)=strs(4)-gterm*rtf(jj)*ytf(jj)*ytf(jj) -+ strs(5)=strs(5)-gterm*rtf(jj)*ytf(jj)*ztf(jj) -+ strs(6)=strs(6)-gterm*rtf(jj)*ztf(jj)*ztf(jj) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine tersoff3 -+ -+ end module tersoff_module -diff -urN dl_class_1.9.orig/srcmod/tether_module.f dl_class_1.9/srcmod/tether_module.f ---- dl_class_1.9.orig/srcmod/tether_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/tether_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,447 @@ -+ module tether_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining tether potential arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmtet(:,:) -+ integer, allocatable :: listtet(:,:) -+ integer, allocatable :: numteth(:),keytet(:),lsttet(:) -+ real(8), allocatable :: xxs(:),yys(:),zzs(:) -+ -+ save prmtet,lsttet,listtet,numteth,keytet,xxs,yys,zzs -+ -+ contains -+ -+ subroutine alloc_tet_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (prmtet(mxteth,mxpbnd),stat=fail(1)) -+ allocate (numteth(mxtmls),stat=fail(2)) -+ allocate (keytet(mxteth),stat=fail(3)) -+ allocate (lsttet(mxteth),stat=fail(4)) -+ allocate (listtet(msteth,2),stat=fail(5)) -+ allocate (xxs(mxatms),stat=fail(6)) -+ allocate (yys(mxatms),stat=fail(7)) -+ allocate (zzs(mxatms),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1260) -+ enddo -+ -+ do i=1,mxtmls -+ numteth(i)=0 -+ enddo -+ -+ end subroutine alloc_tet_arrays -+ -+ subroutine define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining tether bonds -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ real(8) engunit -+ integer idnode,itmols,nteth,nsite,ntmp,iteth,iteth1,idum -+ integer iatm1,isite1,j,i -+ -+ ntmp=intstr(record,lenrec,idum) -+ numteth(itmols)=numteth(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of tethered atoms ', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,' tethered atom details:',/,/, -+ x 21x,7x,'key',6x,'atom',19x,'parameters',/) ") -+ endif -+ -+ iteth1=numteth(itmols) -+ do iteth=1,iteth1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ call strip(record,lenrec) -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ iatm1=intstr(record,lenrec,idum) -+ -+c test for frozen atom -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ -+ if(lfzsit(isite1).ne.0)then -+ -+ numteth(itmols)=numteth(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nteth=nteth+1 -+ if(nteth.gt.mxteth)call error(idnode,62) -+ -+ if(keyword(1:4).eq.'harm')then -+ keytet(nteth)=1 -+ elseif(keyword(1:4).eq.'rhrm')then -+ keytet(nteth)=2 -+ elseif(keyword(1:4).eq.'quar')then -+ keytet(nteth)=3 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,450) -+ endif -+ -+ lsttet(nteth)=iatm1 -+ prmtet(nteth,1)=dblstr(record,lenrec,idum) -+ prmtet(nteth,2)=dblstr(record,lenrec,idum) -+ prmtet(nteth,3)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,i10,1p,9e12.4)") -+ x keyword(1:4),lsttet(nteth), -+ x (prmtet(nteth,j),j=1,mxpbnd) -+ -+c convert energy units to internal units -+ -+ if(abs(keytet(nteth)).eq.1)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ elseif(abs(keytet(nteth)).eq.2)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ elseif(abs(keytet(nteth)).eq.3)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ prmtet(nteth,2)=prmtet(nteth,2)*engunit -+ prmtet(nteth,3)=prmtet(nteth,3)*engunit -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_tethers -+ -+ subroutine tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c*********************************************************************** -+c -+c dl_poly routine to tether atoms to initial positions -+c includes stress tensor -+c -+c replicated data version : block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester feb 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,imcon,natms,nstep,ntteth,i,ii,ia,kk -+ integer itet1,itet2,fail -+ -+ real(8) engtet,virtet,rab -+ real(8) rrab,omega,gamma -+ -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ -+ data safe/.true./ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) -+ if(fail.ne.0)call error(idnode,1270) -+ -+c set up reference positions at start of job -+ -+ if(nstep.le.1)then -+ -+ do i=1,natms -+ -+ xxs(i)=xxx(i) -+ yys(i)=yyy(i) -+ zzs(i)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+c check size of work arrays -+ -+ if((ntteth-mxnode+1)/mxnode.gt.msbad) call error(idnode,420) -+ -+c block indices -+ -+ itet1=(idnode*ntteth)/mxnode+1 -+ itet2=((idnode+1)*ntteth)/mxnode -+ -+ ii=0 -+ do i=itet1,itet2 -+ -+ ii=ii+1 -+ -+c atomic index -+ -+ ia= listtet(ii,2) -+ -+c tether vector -+ -+ xdab(ii)=xxx(ia)-xxs(ia) -+ ydab(ii)=yyy(ia)-yys(ia) -+ zdab(ii)=zzz(ia)-zzs(ia) -+ -+ enddo -+ -+c ignore periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ -+c zero tether energy and virial accumulators -+ -+ engtet=0.d0 -+ virtet=0.d0 -+ -+c loop over all specified tethered atoms -+ -+ ii=0 -+ do i=itet1,itet2 -+ -+ ii=ii+1 -+ -+c define components of bond vector -+ -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ -+c check for possible zero length vector -+ -+ if(rab.lt.1.d-10)then -+ -+ rrab =0.d0 -+ -+ else -+ -+ rrab=1.d0/rab -+ -+ endif -+ -+c index of potential function parameters -+ -+ kk=listtet(ii,1) -+ -+c calculate scalar constant terms -+ -+ if(keytet(kk).eq.1)then -+ -+c harmonic function -+ -+ omega=0.5d0*prmtet(kk,1)*rab**2 -+ gamma=prmtet(kk,1) -+ -+ elseif(keytet(kk).eq.2)then -+ -+c restrained harmonic: -+ -+ omega=0.5d0*prmtet(kk,1)*(min(rab,prmtet(kk,2)))**2 -+ x +prmtet(kk,1)*prmtet(kk,2)* -+ x (sign(max(rab-prmtet(kk,2),0.d0),rab)) -+ gamma=prmtet(kk,1)*(sign(min(rab,prmtet(kk,2)),rab))*rrab -+ -+ elseif(keytet(kk).eq.3)then -+ -+c quartic potential -+ -+ omega=0.5d0*prmtet(kk,1)*rab**2 + -+ x 1.d0/3.d0*prmtet(kk,2)*rab**3+ -+ x 0.25d0*prmtet(kk,3)*rab**4 -+ gamma=(prmtet(kk,1)*rab + -+ x prmtet(kk,2)*rab**2 + -+ x prmtet(kk,3)*rab**3)*rrab -+ -+ else -+ safe=.false. -+ omega=0.d0 -+ gamma=0.d0 -+ endif -+ -+ gamma=-gamma -+ -+c calculate tether energy and virial -+ -+ engtet=engtet+omega -+ virtet=virtet-gamma*rab*rab -+ -+c index of atom -+ -+ ia=listtet(ii,2) -+ -+c calculate atomic forces -+ -+ fxx(ia)=fxx(ia)+gamma*xdab(ii) -+ fyy(ia)=fyy(ia)+gamma*ydab(ii) -+ fzz(ia)=fzz(ia)+gamma*zdab(ii) -+ -+c stress tensor -+ -+ stress(1)=stress(1)+xdab(ii)*gamma*xdab(ii) -+ stress(2)=stress(2)+xdab(ii)*gamma*ydab(ii) -+ stress(3)=stress(3)+xdab(ii)*gamma*zdab(ii) -+ stress(4)=stress(4)+ydab(ii)*gamma*xdab(ii) -+ stress(5)=stress(5)+ydab(ii)*gamma*ydab(ii) -+ stress(6)=stress(6)+ydab(ii)*gamma*zdab(ii) -+ stress(7)=stress(7)+zdab(ii)*gamma*xdab(ii) -+ stress(8)=stress(8)+zdab(ii)*gamma*ydab(ii) -+ stress(9)=stress(9)+zdab(ii)*gamma*zdab(ii) -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,450) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(3)=engtet -+ buffer(4)=virtet -+ -+ call gdsum(buffer(3),2,buffer(1)) -+ -+ engtet=buffer(3) -+ virtet=buffer(4) -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail) -+ -+ return -+ end subroutine tethfrc -+ -+ subroutine xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+c*********************************************************************** -+c -+c dl_poly routine to scale positions with change in box shape -+c -+c parallel replicated data version -+c -+c copyright daresbury laboratory 1995 -+c author t.forester october 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,keyens,imcon,iatm0,iatm1,i -+ real(8) tstep,xa,ya,za,totmas,xcmo,ycmo,zcmo -+ -+c assign block of atoms to processor -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if((keyens.eq.4).or.(keyens.eq.6))then -+ -+c berendsen npt/nst -+ -+ do i=iatm0,iatm1 -+ -+ xa=eta(1)*xxs(i)+eta(2)*yys(i)+eta(3)*zzs(i) -+ ya=eta(4)*xxs(i)+eta(5)*yys(i)+eta(6)*zzs(i) -+ za=eta(7)*xxs(i)+eta(8)*yys(i)+eta(9)*zzs(i) -+ -+ xxs(i)=xa -+ yys(i)=ya -+ zzs(i)=za -+ -+ enddo -+ -+ elseif(keyens.eq.5.or.keyens.eq.7)then -+ -+c hoover npt/nst -+ -+ totmas=0.d0 -+ do i=1,natms -+ if(rmass(i).gt.0.d0)totmas=totmas+weight(i) -+ enddo -+ -+ xcmo=0.d0 -+ ycmo=0.d0 -+ zcmo=0.d0 -+ -+ do i=1,natms -+ -+ if(rmass(i).gt.0.d0)then -+ -+ xcmo=xcmo+weight(i)*xxs(i) -+ ycmo=ycmo+weight(i)*yys(i) -+ zcmo=zcmo+weight(i)*zzs(i) -+ -+ endif -+ -+ enddo -+ xcmo=xcmo/totmas -+ ycmo=ycmo/totmas -+ zcmo=zcmo/totmas -+ -+ do i=iatm0,iatm1 -+ -+ xa=xxs(i)-xcmo -+ ya=yys(i)-ycmo -+ za=zzs(i)-zcmo -+ -+ xxs(i)=xxs(i)+tstep*(eta(1)*xa+eta(2)*ya+eta(3)*za) -+ yys(i)=yys(i)+tstep*(eta(2)*xa+eta(5)*ya+eta(6)*za) -+ zzs(i)=zzs(i)+tstep*(eta(3)*xa+eta(6)*ya+eta(9)*za) -+ -+ enddo -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxs,yys,zzs) -+ -+ endif -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxs,yys,zzs,buffer) -+ -+ return -+ end subroutine xscale -+ -+ end module tether_module -+ -diff -urN dl_class_1.9.orig/srcmod/three_body_module.f dl_class_1.9/srcmod/three_body_module.f ---- dl_class_1.9.orig/srcmod/three_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/three_body_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,882 @@ -+ module three_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining three-body potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - w. smith aug 2008 : solvation, free energy excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ real(8), allocatable :: prmtbp(:,:),rcut3b(:) -+ integer, allocatable :: lsttbp(:),ltptbp(:),lattbp(:) -+ -+ save prmtbp,rcut3b,lsttbp,ltptbp,lattbp,filter -+ -+ contains -+ -+ subroutine alloc_tbp_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(6) -+ -+ do i=1,6 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmtbp(mxtbp,mxptbp),stat=fail(1)) -+ allocate (rcut3b(mxtbp),stat=fail(2)) -+ allocate (lsttbp(mxtbp),stat=fail(3)) -+ allocate (ltptbp(mxtbp),stat=fail(4)) -+ allocate (lattbp(mxatms),stat=fail(5)) -+ allocate (filter(mxsite),stat=fail(6)) -+ -+ do i=1,6 -+ if(fail(i).gt.0)call error(idnode,1170) -+ enddo -+ -+ end subroutine alloc_tbp_arrays -+ -+ subroutine define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining three body potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1,atom2 -+ character*1 message(80) -+ integer idnode,ntptbp,ntpatm,fail,i,itbp,itptbp,keypot -+ integer idum,katm1,katm2,katm0,j,keytbp,ktbp,jtpatm -+ real(8) rcuttb,engunit -+ real(8), allocatable :: parpot(:) -+ -+ data fail/0/ -+ -+ allocate (parpot(mxptbp),stat=fail) -+ if(fail.ne.0)call error(idnode,1180) -+ -+ ntptbp=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified three ', -+ x 'body potentials',i10)") ntptbp -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', -+ x 3x,' key',30x,'parameters'/,/)") -+ -+ endif -+ if(ntptbp.gt.mxtbp) call error(idnode,83) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ do itbp=1,mxtbp -+ lsttbp(itbp)=0 -+ enddo -+ -+ do itbp=1,mxtbp,mx2tbp -+ lsttbp(itbp)=-1 -+ enddo -+ -+ rcuttb=0.d0 -+ -+ do itptbp=1,ntptbp -+ -+ do i=1,mxptbp -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+c Note the order!! atom0 is central -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom0,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call lowcase(record,lenrec) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'harm') then -+ keypot=0 -+ elseif(keyword(1:4).eq.'thrm') then -+ keypot=1 -+ elseif(keyword(1:4).eq.'shrm') then -+ keypot=2 -+ elseif(keyword(1:4).eq.'bvs1') then -+ keypot=3 -+ elseif(keyword(1:4).eq.'bvs2') then -+ keypot=4 -+ elseif(keyword(1:4).eq.'hbnd') then -+ keypot=5 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,442) -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ parpot(4)=dblstr(record,lenrec,idum) -+ parpot(5)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,3a8,4x,a4,1x,1p,9e13.5)") -+ x atom1,atom0,atom2,keyword(1:4),(parpot(j),j=1,mxptbp) -+ -+ katm0=0 -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0) -+ x call error(idnode,84) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ filter(katm2)=.true. -+ -+ keytbp=(max(katm1,katm2)*(max(katm1,katm2)-1))/2+ -+ x min(katm1,katm2)+(katm0-1)*mx2tbp -+ -+ if(keytbp.gt.mxtbp) call error(idnode,86) -+ -+c convert parameters to internal units -+ -+ parpot(1)=parpot(1)*engunit -+ if(keypot.ne.5)parpot(2)=parpot(2)*(pi/180.d0) -+ -+ if(lsttbp(keytbp).gt.0) call error(idnode,18) -+ lsttbp(keytbp)=itptbp -+ ltptbp(itptbp)=keypot -+ ktbp=mx2tbp*((keytbp-1)/mx2tbp)+1 -+ if(lsttbp(ktbp).lt.0)lsttbp(ktbp)=0 -+ -+c calculate max three body cutoff -+ -+ rcuttb=max(rcuttb,parpot(5)) -+ rcut3b(itptbp)=parpot(5) -+ -+c store three body potential parameters -+ -+ do i=1,4 -+ prmtbp(itptbp,i)=parpot(i) -+ enddo -+ if(mxptbp.ge.6) then -+ do i=6,mxptbp -+ prmtbp(itptbp,i-1)=parpot(i-1) -+ enddo -+ endif -+ enddo -+ -+ if(rcuttb.lt.1.d-6)call error(idnode,451) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_three_body -+ -+ subroutine thbfrc -+ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating three body forces arising -+c from the included angle between three atoms -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped cell geometry -+c -+c copyright - daresbury laboratory 1994 -+c author - w.smith mar 1994 -+c adapted - w.smith aug 2008 solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lskip -+ logical idrive,jdrive,kdrive -+ integer idnode,mxnode,natms,imcon,nix,niy,niz -+ integer i,nbx,nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz -+ integer j,jcell,ii,itbp,limit,last,ktbp,jtbp,jktbp,kktbp -+ integer ia,ib,ic,ktyp,jj,jk,kkk -+ real(8) rcuttb,engtbp,virtbp,tterm,uterm,xm,ym,zm,cprp,det -+ real(8) xdc,ydc,zdc,sxx,syy,szz,sxab,syab,szab,xab,yab,zab -+ real(8) rab,sxbc,sybc,szbc,xbc,ybc,zbc,rbc,xac,yac,zac,rac -+ real(8) rrab,rrbc,rrac,cost,sint,theta,pterm,gamma,vterm -+ real(8) gamsa,gamsb,gamsc,scrn,fxa,fya,fza,fxc,fyc,fzc,strs -+ real(8) strs_loc -+ -+ dimension nix(27),niy(27),niz(27),cprp(10),strs(6),strs_loc(9) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+ lskip=(lfree.or.lexcite) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ engtbp=0.d0 -+ virtbp=0.d0 -+ tbp_fre=0.d0 -+ tbp_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(8)=.true. -+ en3_sol(:)=0.d0 -+ if(lexcite)en3_exc(:)=0.d0 -+ -+ endif -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ do i=1,natms -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ enddo -+ -+ cell(1)=2.d0*xm+rcuttb -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rcuttb -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rcuttb -+ -+ endif -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,67) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rcuttb+1.d-6)) -+ nby=int(cprp(8)/(rcuttb+1.d-6)) -+ nbz=int(cprp(9)/(rcuttb+1.d-6)) -+ ncells=nbx*nby*nbz -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,'(a,i6)') -+ x 'number of required link cells in routine thbfrc is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in routine thbfrc is ',mxcell -+ call error(idnode,69) -+ -+ endif -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of angles -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+c construct mini-list of neighbour cell contents -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ lattbp(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ i=lattbp(ii) -+ itbp=mx2tbp*(ltype(i)-1) -+ if(mod(i,mxnode).eq.idnode.and.lsttbp(itbp+1).ge.0)then -+ -+ last=limit -+ -+ do kk=1,limit/2 -+ -+ if(kk.gt.(limit-1)/2)last=limit/2 -+ -+ do jj=1,last -+ -+ j=lattbp(jj) -+ jk=jj+kk -+ if(jk.gt.limit)jk=jk-limit -+ k=lattbp(jk) -+ if(i.ne.j.and.i.ne.k)then -+ -+ jtbp=max(ltype(j),ltype(k)) -+ ktbp=min(ltype(j),ltype(k)) -+ jktbp=itbp+(jtbp*(jtbp-1))/2+ktbp -+ kktbp=lsttbp(jktbp) -+ if(kktbp.gt.0)then -+ -+c make labels etc consistent with angfrc.f -+ -+ ia=j -+ ib=i -+ ic=k -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ -+ endif -+ -+ if(lskip)then -+ -+ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. -+ x atm_fre(ic).eq.1).and.(atm_fre(ia).eq.2.or. -+ x atm_fre(ib).eq.2.or.atm_fre(ic).eq.2))cycle -+ -+ endif -+ -+ sxab=xxx(ia)-xxx(ib) -+ sxab=sxab-nint(sxab) -+ syab=yyy(ia)-yyy(ib) -+ syab=syab-nint(syab) -+ szab=zzz(ia)-zzz(ib) -+ szab=szab-nint(szab) -+ -+ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab -+ if(abs(xab).lt.rcuttb)then -+ -+ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab -+ if(abs(yab).lt.rcuttb)then -+ -+ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab -+ if(abs(zab).lt.rcuttb)then -+ -+ sxbc=xxx(ic)-xxx(ib) -+ sxbc=sxbc-nint(sxbc) -+ sybc=yyy(ic)-yyy(ib) -+ sybc=sybc-nint(sybc) -+ szbc=zzz(ic)-zzz(ib) -+ szbc=szbc-nint(szbc) -+ -+ xbc=cell(1)*sxbc+cell(4)*sybc+cell(7)*szbc -+ if(abs(xbc).lt.rcuttb)then -+ -+ ybc=cell(2)*sxbc+cell(5)*sybc+cell(8)*szbc -+ if(abs(ybc).lt.rcuttb)then -+ -+ zbc=cell(3)*sxbc+cell(6)*sybc+cell(9)*szbc -+ if(abs(zbc).lt.rcuttb)then -+ -+ ktyp=ltptbp(kktbp) -+ rab=sqrt(xab*xab+yab*yab+zab*zab) -+ rbc=sqrt(xbc*xbc+ybc*ybc+zbc*zbc) -+ -+ if(rcut3b(kktbp).ge.max(rab,rbc))then -+ -+ xac=xab-xbc -+ yac=yab-ybc -+ zac=zab-zbc -+ rac=sqrt(xac*xac+yac*yac+zac*zac) -+ -+ rrab=1.d0/rab -+ rrbc=1.d0/rbc -+ rrac=1.d0/rac -+ -+c normalise direction vectors -+ -+ xab=xab*rrab -+ yab=yab*rrab -+ zab=zab*rrab -+ -+ xbc=xbc*rrbc -+ ybc=ybc*rrbc -+ zbc=zbc*rrbc -+ -+ xac=xac*rrac -+ yac=yac*rrac -+ zac=zac*rrac -+ -+ cost=(xab*xbc+yab*ybc+zab*zbc) -+ if(abs(cost).gt.1.d0)cost=sign(1.d0,cost) -+ if(ktyp.ne.5)then -+ -+ sint=max(1.d-8,sqrt(1.d0-cost*cost)) -+ theta=acos(cost) -+ -+ endif -+ -+ if(ktyp.eq.0)then -+ -+c harmonic angle potential -+ -+ pterm=0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ gamma=prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.1)then -+ -+c truncated harmonic valence angle potential -+ -+ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,3)**8) -+ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,3)**8 -+ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ gamsa=(8.d0*pterm/prmtbp(kktbp,3)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmtbp(kktbp,3)**8)*rbc**7 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.2)then -+ -+c screened harmonic valence angle potential -+ -+ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) -+ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) -+ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ gamsa=(pterm/prmtbp(kktbp,3)) -+ gamsc=(pterm/prmtbp(kktbp,4)) -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.3)then -+ -+c screened vessal potential type 1 -+ -+ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) -+ pterm=scrn*prmtbp(kktbp,1)/ -+ x (8.d0*(prmtbp(kktbp,2)-pi)**2)* -+ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)**2 -+ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) -+ gamma=scrn*prmtbp(kktbp,1)/ -+ x (2.d0*(prmtbp(kktbp,2)-pi)**2)* -+ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)*(theta-pi)/sint -+ gamsa=(pterm/prmtbp(kktbp,3)) -+ gamsc=(pterm/prmtbp(kktbp,4)) -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.4)then -+ -+c truncated vessal potential type 2 - use with sw1 -+ -+ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,4)**8) -+ pterm=scrn*prmtbp(kktbp,1)*(theta**prmtbp(kktbp,3)* -+ x (theta-prmtbp(kktbp,2))**2*(theta+prmtbp(kktbp,2)- -+ x 2.d0*pi)**2-0.5d0*prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3) -+ x -1.d0)*(theta-prmtbp(kktbp,2))**2*(pi- -+ x prmtbp(kktbp,2))**3) -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,4)**8 -+ gamma=scrn*prmtbp(kktbp,1)*(theta**(prmtbp(kktbp,3)-1.d0)* -+ x (theta-prmtbp(kktbp,2))*(theta+prmtbp(kktbp,2)- -+ x 2.d0*pi)*((prmtbp(kktbp,3)+4.d0)*theta**2-2.d0*pi* -+ x (prmtbp(kktbp,3)+2.d0)*theta+prmtbp(kktbp,3)* -+ x prmtbp(kktbp,2)*(2.d0*pi-prmtbp(kktbp,2)))- -+ x prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3)-1.d0)* -+ x (theta-prmtbp(kktbp,2))*(pi-prmtbp(kktbp,2))**3)/sint -+ gamsa=(8.d0*pterm/prmtbp(kktbp,4)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmtbp(kktbp,4)**8)*rbc**7 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.5)then -+ -+ if(min(rab,rbc).lt.1.5d0)then -+ -+ scrn=(5.d0*(prmtbp(kktbp,2)/rac)**2-6.d0)* -+ x (prmtbp(kktbp,2)/rac)**10 -+ tterm=prmtbp(kktbp,1)*cost**4 -+ pterm=scrn*tterm -+ uterm=60.d0*((prmtbp(kktbp,2)/rac)**2-1.d0)* -+ x (prmtbp(kktbp,2)/rac)**10 -+ vterm=tterm*uterm -+ gamma=scrn*4.d0*prmtbp(kktbp,1)*cost**3 -+ gamsb=tterm*uterm/rac -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ pterm=0.d0 -+ vterm=0.d0 -+ gamma=0.d0 -+ gamsa=0.d0 -+ gamsb=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set triple index -+ -+ if(lsolva)kkk=loc3(atmolt(ia),atmolt(ib),atmolt(ic)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1) -+ x .and.(atm_fre(ic).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) -+ -+ if(lsolva)en3_exc(kkk)=en3_exc(kkk)+pterm -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1) -+ x .or.(atm_fre(ic).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ tbp_fre=tbp_fre-pterm -+ tbp_vir=tbp_vir-vterm -+ pterm=lambda1*pterm -+ vterm=lambda1*vterm -+ gamma=lambda1*gamma -+ gamsa=lambda1*gamsa -+ gamsb=lambda1*gamsb -+ gamsc=lambda1*gamsc -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2) -+ x .or.(atm_fre(ic).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ tbp_fre=tbp_fre+pterm -+ tbp_vir=tbp_vir+vterm -+ pterm=lambda2*pterm -+ vterm=lambda2*vterm -+ gamma=lambda2*gamma -+ gamsa=lambda2*gamsa -+ gamsb=lambda2*gamsb -+ gamsc=lambda2*gamsc -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential and virial -+ -+ engtbp=engtbp+pterm -+ virtbp=virtbp+vterm -+ -+ if(lsolva)en3_sol(kkk)=en3_sol(kkk)+pterm -+ -+c calculate atomic forces -+ -+ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab+gamsb*xac -+ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab+gamsb*yac -+ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab+gamsb*zac -+ -+ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc-gamsb*xac -+ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc-gamsb*yac -+ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc-gamsb*zac -+ -+ fxx(ia)=fxx(ia)+fxa -+ fyy(ia)=fyy(ia)+fya -+ fzz(ia)=fzz(ia)+fza -+ -+ fxx(ib)=fxx(ib)-fxa-fxc -+ fyy(ib)=fyy(ib)-fya-fyc -+ fzz(ib)=fzz(ib)-fza-fzc -+ -+ fxx(ic)=fxx(ic)+fxc -+ fyy(ic)=fyy(ic)+fyc -+ fzz(ic)=fzz(ic)+fzc -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc -+ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc -+ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc -+ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc -+ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn)then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+pterm -+ vir_loc=vir_loc+vterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fxa -+ fyy_loc(ia)=fyy_loc(ia)+fya -+ fzz_loc(ia)=fzz_loc(ia)+fza -+ -+ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc -+ fyy_loc(ib)=fyy_loc(ib)-fya-fyc -+ fzz_loc(ib)=fzz_loc(ib)-fza-fzc -+ -+ fxx_loc(ic)=fxx_loc(ic)+fxc -+ fyy_loc(ic)=fyy_loc(ic)+fyc -+ fzz_loc(ic)=fzz_loc(ic)+fzc -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc -+ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc -+ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc -+ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc -+ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,442) -+ -+c global sum of three body potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engtbp -+ buffer(2)=virtbp -+ buffer(3)=tbp_fre -+ buffer(4)=tbp_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engtbp=buffer(1) -+ virtbp=buffer(2) -+ tbp_fre=buffer(3) -+ tbp_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(en3_sol,mxtmls_sol3,buffer(1)) -+ if(lexcite)call gdsum(en3_exc,mxtmls_exc3,buffer(1)) -+ -+ endif -+ -+ endif -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+ return -+ -+ end subroutine thbfrc -+ -+ end module three_body_module -diff -urN dl_class_1.9.orig/srcmod/utility_module.f dl_class_1.9/srcmod/utility_module.f ---- dl_class_1.9.orig/srcmod/utility_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/utility_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1612 @@ -+ module utility_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ contains -+ -+ subroutine global_sum_forces(natms,mxnode,gxx,gyy,gzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to perform global sum of atomic forces as -+c requred by replicated data strategy -+c -+c copyright - daresbury laboratory -+c author - w.smith december 2005 -+c -+c*********************************************************************** -+ -+ use config_module -+ -+ implicit none -+ -+ integer natms,mxnode,i,j -+ real(8) gxx(*),gyy(*),gzz(*) -+ -+ if(mxnode.gt.1) then -+ -+ j=0 -+ do i=1,natms -+ -+ buffer(j+1)=gxx(i) -+ buffer(j+2)=gyy(i) -+ buffer(j+3)=gzz(i) -+ j=j+3 -+ -+ enddo -+ call gdsum(buffer(1),3*natms,buffer(3*natms+1)) -+ j=0 -+ do i=1,natms -+ -+ gxx(i)=buffer(j+1) -+ gyy(i)=buffer(j+2) -+ gzz(i)=buffer(j+3) -+ j=j+3 -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine global_sum_forces -+ -+ subroutine images -+ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating the minimum image -+c of atom pairs within a specified MD cell -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c T3D optimised version. t.forester july 1994 -+c -+c for -+c imcon=0 no boundary conditions apply -+c imcon=1 standard cubic boundaries apply -+c imcon=2 orthorhombic boundaries apply -+c imcon=3 parallelepiped boundaries apply -+c imcon=4 truncated octahedron boundaries apply -+c imcon=5 rhombic dodecahedron boundaries apply -+c imcon=6 x-y parallelogram boundary conditions : no periodicity in z -+c imcon=7 hexagonal prism boundaries apply -+c -+c note: in all cases the centre of the cell is at (0,0,0) -+c warning - replicated data version: does not re-merge -+c coordinate arrays -+c -+c*********************************************************************** -+ -+ use error_module -+ -+ implicit none -+ -+ integer imcon,idnode,mxnode,natms,iatm1,iatm2,i -+ real(8) cell,xxx,yyy,zzz,aaa,bbb,ccc,det,rt2,rt3,ssx -+ real(8) ssy,ssz,ddd,xss,yss,zss,rcell -+ -+ dimension xxx(*),yyy(*),zzz(*) -+ dimension cell(9),rcell(9) -+ -+ data rt2/1.41421356623d0/,rt3/1.7320508075d0/ -+ -+ if(imcon.gt.0) then -+ -+c block indices -+ -+ iatm1 = (idnode*natms)/mxnode+1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ endif -+ -+ if(imcon.eq.1)then -+ -+c standard cubic boundary conditions -+ -+ -+ aaa=1.d0/cell(1) -+ -+ do i=iatm1,iatm2 -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) -+ enddo -+ -+ else if(imcon.eq.2)then -+ -+c rectangular (slab) boundary conditions -+ -+ aaa=1.d0/cell(1) -+ bbb=1.d0/cell(5) -+ ccc=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(5)*nint(bbb*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(ccc*zzz(i)) -+ -+ enddo -+ -+ else if(imcon.eq.3)then -+ -+c parallelepiped boundary conditions -+ -+ call invert(cell,rcell,det) -+ -+ do i=iatm1,iatm2 -+ -+ ssx=(rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i)) -+ ssy=(rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i)) -+ ssz=(rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i)) -+ -+ xss=ssx-nint(ssx) -+ yss=ssy-nint(ssy) -+ zss=ssz-nint(ssz) -+ -+ xxx(i)=(cell(1)*xss+cell(4)*yss+cell(7)*zss) -+ yyy(i)=(cell(2)*xss+cell(5)*yss+cell(8)*zss) -+ zzz(i)=(cell(3)*xss+cell(6)*yss+cell(9)*zss) -+ -+ enddo -+ -+ else if(imcon.eq.4)then -+ -+c truncated octahedral boundary conditions -+ -+ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. -+ x abs(cell(5)-cell(9)).lt.1.d-6)) call error(idnode,130) -+ -+ aaa=1.d0/cell(1) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) -+ -+ if((abs(xxx(i))+abs(yyy(i))+abs(zzz(i))).ge. -+ x (0.75d0*cell(1)))then -+ -+ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) -+ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) -+ zzz(i)=zzz(i)-0.5d0*sign(cell(1),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ else if(imcon.eq.5)then -+ -+c rhombic dodecahedral boundary conditions -+ -+ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. -+ x abs(cell(9)-cell(1)*rt2).lt.1.d-6)) -+ x call error(idnode,140) -+ -+ aaa=1.d0/cell(1) -+ bbb=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(bbb*zzz(i)) -+ -+ if((abs(xxx(i))+abs(yyy(i))+abs(rt2*zzz(i))).ge. -+ x cell(1))then -+ -+ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) -+ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) -+ zzz(i)=zzz(i)-0.5d0*sign(cell(9),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ else if(imcon.eq.6) then -+ -+c x-y boundary conditions -+ -+ det = cell(1)*cell(5) - cell(2)*cell(4) -+ -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ -+ det = 1.d0/det -+ -+ rcell(1) = det*cell(5) -+ rcell(2) = -det*cell(2) -+ rcell(4) = -det*cell(4) -+ rcell(5) = det*cell(1) -+ -+ do i=iatm1,iatm2 -+ -+ ssx = rcell(1)*xxx(i) + rcell(4)*yyy(i) -+ ssy = rcell(2)*xxx(i) + rcell(5)*yyy(i) -+ -+ xss = ssx - nint(ssx) -+ yss = ssy - nint(ssy) -+ -+ xxx(i)=cell(1)*xss + cell(4)*yss -+ yyy(i)=cell(2)*xss + cell(5)*yss -+ -+ enddo -+ -+ else if(imcon.eq.7) then -+ -+c hexagonal prism boundary conditions -+ -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,135) -+ -+ aaa=cell(1)/(rt3*2.d0) -+ bbb=cell(1)/rt3 -+ ccc=rt3/cell(1) -+ ddd=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ yyy(i)=yyy(i)-bbb*nint(ccc*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(ddd*zzz(i)) -+ -+ if((abs(yyy(i))+abs(rt3*xxx(i))).ge.bbb)then -+ -+ xxx(i)=xxx(i)-rt3*sign(aaa,xxx(i)) -+ yyy(i)=yyy(i)-sign(aaa,yyy(i)) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine images -+ -+ subroutine config_write(fname,levcfg,imcon,natms,engcfg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing CONFIG files -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2007 -+c -+c*********************************************************************** -+ -+ use config_module -+ use setup_module -+ -+ implicit none -+ -+ character*6 fname -+ -+ integer i,natms,levcfg,imcon,nstep -+ real(8) engcfg -+ -+ open(nconf,file=fname,form='formatted') -+ -+ write(nconf,'(80a1)') cfgname -+ write(nconf,'(3i10,1p,g20.12)') levcfg,imcon,natms,engcfg -+ if(imcon.gt.0) write(nconf,'(3f20.12)') cell -+ -+ do i=1,natms -+ -+ write(nconf,'(a8,i10)') atmnam(i),i -+ write(nconf,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ if(levcfg.gt.0)write(nconf,'(3g20.12)') -+ x vxx(i),vyy(i),vzz(i) -+ if(levcfg.gt.1)write(nconf,'(3g20.12)') -+ x fxx(i),fyy(i),fzz(i) -+ -+ enddo -+ -+ close (nconf) -+ -+ return -+ end subroutine config_write -+ -+ subroutine bomb(idnode,nyr,nmn,ndy) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to set an expiry date in a compiled program -+c -+c copyright - daresbury laboratory -+c author - w. smith oct 2002 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ logical safe -+ integer info(8) -+ character*12 dat,tim,zon -+ integer idnode,nyr,nmn,ndy -+ -+ safe=.true. -+ -+ call date_and_time(dat,tim,zon,info) -+ -+ if(info(1).gt.nyr)then -+ -+ safe=.false. -+ -+ else if(info(1).eq.nyr)then -+ -+ if(info(2).gt.nmn)then -+ -+ safe=.false. -+ -+ else if(info(2).eq.nmn)then -+ -+ if(info(3).ge.ndy)safe=.false. -+ -+ endif -+ -+ endif -+ -+ if(.not.safe)then -+ -+ if(idnode.eq.0)write(nrite,'(a,/,a)') -+ x 'THE EXPIRY DATE OF THIS EXECUTABLE HAS PASSED.', -+ X 'PLEASE CONTACT W.SMITH@DL.AC.UK FOR A NEW LICENCE' -+ -+ call exitcomms() -+ -+ endif -+ -+ return -+ end subroutine bomb -+ -+ subroutine cpy_rtc(nnn,aaa,bbb) -+ -+c********************************************************************** -+c -+c dl_poly subroutine for copying a real array into a complex array -+c of the same dimension -+c -+c copyright daresbury laboratory 1998 -+c author w.smith oct 1998 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,nnn -+ real(8) aaa(*) -+ complex(8) bbb(*) -+ -+ do i=1,nnn -+ -+ bbb(i)=cmplx(aaa(i),0.d0,kind=8) -+ -+ enddo -+ -+ return -+ end subroutine cpy_rtc -+ -+ function duni() -+ -+c********************************************************************* -+c -+c dl_poly random number generator based on the universal -+c random number generator of marsaglia, zaman and tsang -+c (stats and prob. lett. 8 (1990) 35-39.) it must be -+c called once to initialise parameters u,c,cd,cm -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical new -+ integer ir,jr,i,j,k,l,m,ii,jj -+ real(4) s,t,u,c,cd,cm,uni -+ real(8) duni -+ dimension u(97) -+ save u,c,cd,cm,uni,ir,jr,new -+ data new/.true./ -+ -+ if(new)then -+ -+c initial values of i,j,k must be in range 1 to 178 (not all 1) -+c initial value of l must be in range 0 to 168. -+ -+ i=12 -+ j=34 -+ k=56 -+ l=78 -+c -+ ir=97 -+ jr=33 -+ new=.false. -+ -+ do 200 ii=1,97 -+ s=0.0 -+ t=0.5 -+ do 100 jj=1,24 -+ m=mod(mod(i*j,179)*k,179) -+ i=j -+ j=k -+ k=m -+ l=mod(53*l+1,169) -+ if(mod(l*m,64).ge.32)s=s+t -+ t=0.5*t -+ 100 continue -+ u(ii)=s -+ 200 continue -+ c = 362436.0/16777216.0 -+ cd= 7654321.0/16777216.0 -+ cm=16777213.0/16777216.0 -+ else -+ -+c calculate random number -+ uni=u(ir)-u(jr) -+ if(uni.lt.0.0)uni=uni+1.0 -+ u(ir)=uni -+ ir=ir-1 -+ if(ir.eq.0)ir=97 -+ jr=jr-1 -+ if(jr.eq.0)jr=97 -+ c=c-cd -+ if(c.lt.0.0)c=c+cm -+ uni=uni-c -+ if(uni.lt.0.0)uni=uni+1.0 -+ duni=dble(uni) -+ endif -+ -+ return -+ end function duni -+ -+ subroutine ele_prd(nnn,aaa,bbb,ccc) -+ -+c********************************************************************** -+c -+c dl_poly subroutine for element by element product of -+c a real array (bbb) and a complex array (ccc) -+c -+c copyright daresbury laboratory 1998 -+c author w.smith july 1998 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,nnn -+ real(8) bbb(*) -+ complex(8) aaa(*),ccc(*) -+ -+ do i=1,nnn -+ -+ aaa(i)=bbb(i)*ccc(i) -+ -+ enddo -+ -+ return -+ end subroutine ele_prd -+ -+ subroutine gauss(natms,vxx,vyy,vzz) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for constructing velocity arrays -+c with a gaussian distribution of unit variance. -+c -+c based on the Box-Muller method -+c -+c note - this version uses a universal random number -+c generator, which generates pseudo-random numbers between -+c 0 and 1. it is based on the algorithm of marsaglia, zaman -+c and tsang in: stats and prob. lett. 8 (1990) 35-39. -+c -+c copyright daresbury laboratory 2007 -+c author - w. smith nov 2007 -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ integer natms,i -+ real(8) vxx,vyy,vzz,rrr,rr1,rr2 -+ -+ dimension vxx(natms),vyy(natms),vzz(natms) -+ -+c initialise random number generator -+ -+ rrr=duni() -+ -+c calculate gaussian random numbers -+ -+ do i=1,2*(natms/2),2 -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vxx(i)=rr1*cos(rr2) -+ vxx(i+1)=rr1*sin(rr2) -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vyy(i)=rr1*cos(rr2) -+ vyy(i+1)=rr1*sin(rr2) -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vzz(i)=rr1*cos(rr2) -+ vzz(i+1)=rr1*sin(rr2) -+ -+ enddo -+ if(mod(natms,2).ne.0)then -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vxx(natms)=rr1*cos(rr2) -+ vyy(natms)=rr1*sin(rr2) -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vzz(natms)=rr1*cos(rr2) -+ -+ endif -+ -+ return -+ end subroutine gauss -+ -+ subroutine invert(a,b,d) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to invert a 3 * 3 matrix using cofactors -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith april 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ real(8) a,b,d,r -+ -+ dimension a(9),b(9) -+ -+c calculate adjoint matrix -+ b(1)=a(5)*a(9)-a(6)*a(8) -+ b(2)=a(3)*a(8)-a(2)*a(9) -+ b(3)=a(2)*a(6)-a(3)*a(5) -+ b(4)=a(6)*a(7)-a(4)*a(9) -+ b(5)=a(1)*a(9)-a(3)*a(7) -+ b(6)=a(3)*a(4)-a(1)*a(6) -+ b(7)=a(4)*a(8)-a(5)*a(7) -+ b(8)=a(2)*a(7)-a(1)*a(8) -+ b(9)=a(1)*a(5)-a(2)*a(4) -+ -+c calculate determinant -+ d=a(1)*b(1)+a(4)*b(2)+a(7)*b(3) -+ r=0.d0 -+ if(abs(d).gt.0.d0)r=1.d0/d -+ -+c complete inverse matrix -+ b(1)=r*b(1) -+ b(2)=r*b(2) -+ b(3)=r*b(3) -+ b(4)=r*b(4) -+ b(5)=r*b(5) -+ b(6)=r*b(6) -+ b(7)=r*b(7) -+ b(8)=r*b(8) -+ b(9)=r*b(9) -+ -+ return -+ end subroutine invert -+ -+ subroutine jacobi(a,v,n) -+ -+c*********************************************************************** -+c -+c diagonalisation of real symmetric matices by jacobi method -+c -+c input parameters: -+c -+c a(n,n) is the matrix to be diagonalised -+c v(n,n) is the eigenvector matrix -+c n is the dimension of the matrices -+c -+c jacobi processes lower triangle only (upper triangle unchanged) -+c -+c variable rho sets absolute tolerance on convergence -+c variable tes is a moving tolerance that diminishes -+c on each pass until at true convergence tesdlrpot) .or. (ngrid-4 /= nint(cutpot/delpot))) then -+ -+ if (idnode == 0) write(nrite,"( -+ x 'expected radial increment : ',1p,e15.7,/, -+ x 'TABLE radial increment : ',1p,e15.7,/,/, -+ x 'expected number of grid points : ',0p,i10,/, -+ x 'grid points in TABLE : ',i10)") -+ x dlrpot, delpot, mxgrid, ngrid -+ -+ call error(idnode,22) -+ -+ endif -+ -+ if(cutpot.lt.rcut) call error(idnode,504) -+ if(abs(1.d0-(delpot/dlrpot)).gt.1.0d-8) then -+ if(idnode.eq.0) write(nrite, -+ x "(/,' TABLE arrays resized for mxgrid=',i10)") mxgrid -+ endif -+ -+c read potential arrays for all pairs -+ -+ do ivdw=1,ntpvdw -+ -+c read potential arrays if potential not already defined -+ -+ if(ltpvdw(ivdw).eq.0)then -+ -+c read pair potential labels and long range corrections -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_table_read(idnode,ntable) -+ -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ prmvdw(ivdw,1)=dblstr(record,lenrec,idum) -+ prmvdw(ivdw,2)=dblstr(record,lenrec,idum) -+ -+ katom1=0 -+ katom2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katom1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katom2=jtpatm -+ -+ enddo -+ -+ if(katom1.eq.0.or.katom2.eq.0)then -+ if(idnode.eq.0) -+ x write(nrite,'(a)') '****',atom1,'***',atom2,'****' -+ call error(idnode,81) -+ endif -+ -+ keyvdw=loc2(katom1,katom2) -+ -+ if(lstvdw(keyvdw).ne.ivdw) call error(idnode,23) -+ -+c read potential arrays -+ -+ if(mxbuff.lt.ngrid) then -+ -+ if(idnode.eq.0) -+ x write(nrite,*) 'mxbuff must be >=',ngrid,' in fortab' -+ call error(idnode,48) -+ -+ endif -+ -+c read in potential arrays -+ -+ do i=1,(ngrid+3)/4 -+ -+ l=min(4,ngrid-(i-1)*4) -+ if (idnode == 0) then -+ read(unit=ntable, fmt=*, end=100) -+ x (buffer((i-1)*4+j),j=1,l) -+ else -+ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 -+ endif -+ -+ enddo -+ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) -+ -+c reconstruct arrays using 3pt interpolation -+ -+ rdr=1.d0/delpot -+ vvv(1,ivdw)=1.d0 -+ ggg(1,ivdw)=0.d0 -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ vk0=buffer(l) -+ vk1=buffer(l+1) -+ vk2=buffer(l+2) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ vvv(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 -+ -+ enddo -+ -+c read in force arrays -+ -+ do i=1,(ngrid+3)/4 -+ -+ l=min(4,ngrid-(i-1)*4) -+ if (idnode == 0) then -+ read(unit=ntable, fmt=*, end=100) -+ x (buffer((i-1)*4+j),j=1,l) -+ else -+ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 -+ endif -+ -+ enddo -+ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) -+ -+c reconstruct ggg arrays using 3pt interpolation -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ vk0=buffer(l) -+ vk1=buffer(l+1) -+ vk2=buffer(l+2) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ -+ ggg(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c convert to internal units -+ -+ do k=1,ntpvdw -+ -+ if(ltpvdw(k).eq.0)then -+ -+ do i=1,mxgrid -+ -+ vvv(i,k)=vvv(i,k)*engunit -+ ggg(i,k)=ggg(i,k)*engunit -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (ntable) -+ -+ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') -+ x 'potential tables read from TABLE file' -+ -+ return -+ -+c end of file error exit -+ -+ 100 call abort_table_read(idnode,ntable) -+ -+ end subroutine fortab -+ -+ subroutine abort_table_read(idnode,ntable) -+ -+c*********************************************************************** -+c -+c dl_poly error exit subroutine for reading TABLE file -+c -+c copyright - daresbury laboratory -+c author - w. smith sept 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer idnode,ntable -+ -+ if(idnode.eq.0)close (ntable) -+ -+ call error(idnode,24) -+ -+ end subroutine abort_table_read -+ -+ subroutine srfrce -+ x (lsolva,lfree,lghost,iatm,ik,engsrp,virsrp,rcut,dlrpot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating short range force and -+c potential energy terms using verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c -+c version 3 -+c author - t. forester june 1993 -+c stress tensor added t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,k,l,kkk -+ real(8) engsrp,virsrp,rcut,dlrpot -+ real(8) ab,rrr,rsq,ppp,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,gamma -+ real(8) fi,rcsq,rdr,ai,aj,fx,fy,fz,omega -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c interpolation spacing -+ -+ rdr=1.d0/dlrpot -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engsrp=0.d0 -+ virsrp=0.d0 -+ -+c store forces for iatm -+ -+ ai=dble(ltype(iatm)) -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ aj=dble(ltype(jatm)) -+ -+ if(ai.gt.aj) then -+ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 -+ else -+ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 -+ endif -+ -+ k=lstvdw(int(ab)) -+ -+ if((ltpvdw(k).lt.100).and.(abs(vvv(1,k)).gt.1.d-10))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+ if(l.eq.0)then -+ -+ omega=vvv(1,k) -+ gamma=ggg(1,k) -+ -+ else -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre-omega -+ vdw_vir=vdw_vir+gamma*rsq -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre+omega -+ vdw_vir=vdw_vir-gamma*rsq -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential and virial -+ -+ engsrp=engsrp+omega -+ virsrp=virsrp-gamma*rsq -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega -+ -+c calculate forces -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-gamma*rsq -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine srfrce -+ -+ subroutine lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rcut,volm) -+ -+c************************************************************************* -+c -+c DL_POLY subroutine to evaluate long-range corrections to -+c pressure and energy in a periodic system. -+c -+c copyright daresbury laboratory 1993 -+c author - t. forester may 1993 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=10 -+ logical lsolva,lfree,lghost -+ integer idnode,imcon,keyfce,natms,ntpatm,i,ka,ntpvdw -+ integer ivdw,j,k,it,jt,kt,fail -+ real(8) natyp,nbtyp,nctyp,ndtyp,nafrz,nbfrz,ncfrz,ndfrz -+ real(8) elrc,engunit,virlrc,rcut,volm,twopi,eadd,padd -+ real(8) denprd,aaa,bbb,ccc,ddd,eee,eps,sig,rr0,ann,amm -+ real(8) denprd1,denprd2,denprd3,denprdf -+ integer, allocatable :: numtyp_sol0(:,:),numfrz_sol0(:,:) -+ integer, allocatable :: numtyp_sol1(:,:),numfrz_sol1(:,:) -+ integer, allocatable :: numtyp_sol2(:,:),numfrz_sol2(:,:) -+ integer, allocatable :: numtyp_fre(:,:),numfrz_fre(:,:) -+ real(8), allocatable :: elrc_sol0(:),elrc_exc0(:) -+ -+ dimension fail(nnn) -+ -+ twopi=2.0d0*pi -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ allocate (numtyp_fre(mxatyp,0:2),stat=fail(1)) -+ allocate (numfrz_fre(mxatyp,0:2),stat=fail(2)) -+ allocate (elrc_exc0(mxtmls_exc2),stat=fail(3)) -+ -+ endif -+ -+ if(lsolva)then -+ -+ allocate (elrc_sol0(mxtmls_sol2),stat=fail(4)) -+ allocate (numtyp_sol0(mxatyp,mxtmls),stat=fail(5)) -+ allocate (numfrz_sol0(mxatyp,mxtmls),stat=fail(6)) -+ -+ if(lghost)then -+ -+ allocate (numtyp_sol1(mxatyp,mxtmls),stat=fail(7)) -+ allocate (numfrz_sol1(mxatyp,mxtmls),stat=fail(8)) -+ allocate (numtyp_sol2(mxatyp,mxtmls),stat=fail(9)) -+ allocate (numfrz_sol2(mxatyp,mxtmls),stat=fail(10)) -+ -+ endif -+ -+ endif -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1015) -+ enddo -+ -+c initalise counter arrays -+ -+ do i=1,ntpatm -+ -+ numtyp(i)=0 -+ numfrz(i)=0 -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ numtyp_fre(:,:)=0 -+ numfrz_fre(:,:)=0 -+ -+ endif -+ -+ if(lsolva)then -+ -+ numtyp_sol0(:,:)=0 -+ numfrz_sol0(:,:)=0 -+ -+ if(lghost)then -+ -+ numtyp_sol1(:,:)=0 -+ numfrz_sol1(:,:)=0 -+ numtyp_sol2(:,:)=0 -+ numfrz_sol2(:,:)=0 -+ -+ endif -+ -+ endif -+ -+c evaluate number density in system -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp(ka)=numtyp(ka)+1 -+ if(lstfrz(i).ne.0)numfrz(ka)=numfrz(ka)+1 -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp_fre(ka,atm_fre(i))=numtyp_fre(ka,atm_fre(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_fre(ka,atm_fre(i))=numfrz_fre(ka,atm_fre(i))+1 -+ -+ enddo -+ -+ endif -+ -+ if(lsolva)then -+ -+ if(lghost)then -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ -+ if(atm_fre(i).eq.0)then -+ -+ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 -+ -+ elseif(atm_fre(i).eq.1)then -+ -+ numtyp_sol1(ka,atmolt(i))=numtyp_sol1(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol1(ka,atmolt(i))=numfrz_sol1(ka,atmolt(i))+1 -+ -+ elseif(atm_fre(i).eq.2)then -+ -+ numtyp_sol2(ka,atmolt(i))=numtyp_sol2(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol2(ka,atmolt(i))=numfrz_sol2(ka,atmolt(i))+1 -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities -+ -+ do i=1,ntpatm -+ dens(i)=dble(numtyp(i))/volm -+ enddo -+ -+c long range corrections to energy and pressure -+ -+ elrc=0.d0 -+ elrc2=0.d0 -+ virlrc=0.d0 -+ virlrc2=0.d0 -+ denprdf=0.d0 -+ volm_sav=0.d0 -+ elrc_fre=0.d0 -+ vlrc_fre=0.d0 -+ -+ if(imcon.ne.0.and.imcon.ne.6.and.ntpvdw.gt.0) then -+ -+ if(mod(keyfce,2).eq.1) then -+ -+ ivdw=0 -+ -+ do i=1,ntpatm -+ -+ do j=1,i -+ -+ eadd=0.d0 -+ padd=0.d0 -+ -+ ivdw=ivdw+1 -+ k=lstvdw(ivdw) -+ -+ if(ltpvdw(k).eq.0) then -+ -+c tabulated potential -+ -+ eadd=prmvdw(k,1) -+ padd=-prmvdw(k,2) -+ -+ else if(ltpvdw(k).eq.1) then -+ -+c 12-6 potential -+ -+ aaa=prmvdw(k,1) -+ bbb=prmvdw(k,2) -+ -+ eadd=aaa/(9.d0*rcut**9)-bbb/(3.d0*rcut**3) -+ padd=12.d0*aaa/(9.d0*rcut**9)-6.d0*bbb/(3.d0*rcut**3) -+ -+ else if(ltpvdw(k).eq.2) then -+ -+c Lennard Jones potential -+ -+ eps=prmvdw(k,1) -+ sig=prmvdw(k,2) -+ -+ eadd=4.d0*eps*(sig**12/(9.d0*rcut**9)- -+ x sig**6/(3.d0*rcut**3)) -+ padd=4.d0*eps*(12.d0*sig**12/(9.d0*rcut**9)- -+ x 2.d0*sig**6/(rcut**3)) -+ -+ else if(ltpvdw(k).eq.3) then -+ -+c n - m potential -+ -+ eps=prmvdw(k,1) -+ ann=prmvdw(k,2) -+ amm=prmvdw(k,3) -+ rr0=prmvdw(k,4) -+ -+ eadd=eps/(ann-amm)*(amm*rr0**ann/((ann-3.d0)* -+ x rcut**(ann-3.d0))-ann*rr0**amm/((amm-3.0d0)* -+ x rcut**(amm-3.d0))) -+ padd=eps/(ann-amm)*ann*amm*(rr0**ann/((ann-3.d0)* -+ x rcut**(ann-3.d0))-rr0**amm/((amm-3.0d0)* -+ x rcut**(amm-3.d0))) -+ -+ else if(ltpvdw(k).eq.4) then -+ -+c buckingham exp - 6 potential -+ -+ ccc=prmvdw(k,3) -+ -+ eadd=-ccc/(3.d0*rcut**3) -+ padd=-2.d0*ccc/(rcut**3) -+ -+ else if(ltpvdw(k).eq.5) then -+ -+c born huggins meyer exp -6 - 8 potential -+ -+ ddd=prmvdw(k,4) -+ eee=prmvdw(k,5) -+ -+ eadd=-ddd/(3.d0*rcut**3)-eee/(5.d0*rcut**5) -+ padd=-2.d0*ddd/(rcut**3)-8.d0*eee/(5.d0*rcut**5) -+ -+ else if(ltpvdw(k).eq.6) then -+ -+c hydrogen bond 12 - 10 potential -+ -+ aaa=prmvdw(k,1) -+ bbb=prmvdw(k,2) -+ -+ eadd=aaa/(9.d0*rcut**9)-bbb/(7.d0*rcut**7) -+ padd=12.d0*aaa/(9.d0*rcut**9)-1.d1*bbb/(7.d0*rcut**7) -+ -+ endif -+ -+ if(i.ne.j) then -+ -+ eadd=eadd*2.d0 -+ padd=padd*2.d0 -+ -+ endif -+ -+ if(.not.(lfree.or.lghost))then -+ -+ denprd=twopi*(dble(numtyp(i))*dble(numtyp(j))- -+ x dble(numfrz(i))*dble(numfrz(j)))/volm**2 -+ -+ else -+ -+ nafrz=dble(numfrz_fre(i,0)+numfrz_fre(i,1)) -+ natyp=dble(numtyp_fre(i,0)+numtyp_fre(i,1)) -+ nbfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,1)) -+ nbtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,1)) -+ ncfrz=dble(numfrz_fre(i,0)+numfrz_fre(i,2)) -+ nctyp=dble(numtyp_fre(i,0)+numtyp_fre(i,2)) -+ ndfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,2)) -+ ndtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,2)) -+ -+ if(lghost)then -+ -+ denprd=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 -+ denprd3=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 -+ -+ elseif(lfree)then -+ -+ denprd1=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 -+ denprd2=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 -+ denprd=lambda1*denprd1+lambda2*denprd2 -+ denprd3=lambda2*denprd1+lambda1*denprd2 -+ denprdf=denprd2-denprd1 -+ -+ endif -+ -+ endif -+ -+ elrc=elrc+volm*denprd*eadd -+ virlrc=virlrc-denprd*padd*volm -+ -+ if(lfree.or.lghost)then -+ -+ elrc2=elrc2+volm*denprd3*eadd -+ virlrc2=virlrc2-denprd3*padd*volm -+ if(lfree)then -+ elrc_fre=elrc_fre+volm*denprdf*eadd -+ vlrc_fre=vlrc_fre-denprdf*padd*volm -+ endif -+ -+ endif -+ -+ if(lsolva)then -+ -+ elrc_sol0(:)=0.d0 -+ if(lghost)elrc_exc0(:)=0.d0 -+ -+ do it=1,mxtmls -+ -+ do jt=1,mxtmls -+ -+ kt=loc2(it,jt) -+ -+ if(lghost)then -+ -+ natyp=dble(numtyp_sol0(i,it)+numtyp_sol1(i,it)) -+ nbtyp=dble(numtyp_sol0(j,jt)+numtyp_sol1(j,jt)) -+ nafrz=dble(numfrz_sol0(i,it)+numfrz_sol1(i,it)) -+ nbfrz=dble(numfrz_sol0(j,jt)+numfrz_sol1(j,jt)) -+ -+ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* -+ x nbtyp-nafrz*nbfrz)/volm**2 -+ -+ nctyp=dble(numtyp_sol0(i,it)+numtyp_sol2(i,it)) -+ ndtyp=dble(numtyp_sol0(j,jt)+numtyp_sol2(j,jt)) -+ ncfrz=dble(numfrz_sol0(i,it)+numfrz_sol2(i,it)) -+ ndfrz=dble(numfrz_sol0(j,jt)+numfrz_sol2(j,jt)) -+ -+ elrc_exc0(kt)=elrc_exc0(kt)+twopi*(nctyp* -+ x ndtyp-ncfrz*ndfrz)/volm**2 -+ -+ else -+ -+ natyp=dble(numtyp_sol0(i,it)) -+ nbtyp=dble(numtyp_sol0(j,jt)) -+ nafrz=dble(numfrz_sol0(i,it)) -+ nbfrz=dble(numfrz_sol0(j,jt)) -+ -+ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* -+ x nbtyp-nafrz*nbfrz)/volm**2 -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(lghost)then -+ -+ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) -+ elrc_exc(:)=elrc_exc(:)+volm*eadd*elrc_exc0(:) -+ -+ else -+ -+ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ elrc_sav=elrc -+ elrc2_sav=elrc2 -+ virlrc_sav=virlrc -+ virlrc2_sav=virlrc2 -+ elrc_fre_sav=elrc_fre -+ vlrc_fre_sav=vlrc_fre -+ -+ endif -+ -+ volm_sav=volm -+ -+ if(lghost)then -+ -+ elrc_sol_sav(:)=elrc_sol(:) -+ elrc_exc_sav(:)=elrc_exc(:) -+ -+ elseif(lsolva)then -+ -+ elrc_sol_sav(:)=elrc_sol(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,'long range correction for: vdw energy ',e15.6,/, -+ x 25x,': vdw pressure',e15.6)")elrc/engunit, -+ x prsunt*virlrc/(-3.d0*volm) -+ -+ if(lghost) -+ x write(nrite, -+ x "(/,/,'long range correction for: vdw energy ',e15.6,/, -+ x 25x,': vdw pressure',e15.6)")elrc2/engunit, -+ x prsunt*virlrc2/(-3.d0*volm) -+ -+ endif -+ -+c deallocate work arrays -+ -+ if(lfree.or.lghost) -+ x deallocate (elrc_exc0,numtyp_fre,numfrz_fre,stat=fail(1)) -+ -+ if(lsolva)then -+ -+ deallocate (elrc_sol0,numtyp_sol0,numfrz_sol0,stat=fail(2)) -+ -+ if(lghost)then -+ -+ deallocate (numtyp_sol1,numfrz_sol1,stat=fail(3)) -+ deallocate (numtyp_sol2,numfrz_sol2,stat=fail(4)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lrcorrect -+ -+ -+ subroutine srfrceneu -+ x (lsolva,lfree,lghost,ik,engsrp,virsrp,dlrpot,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating short range force and -+c potential energy terms using verlet neighbour list -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c -+c neutral groups -+c author - t. forester march 1994 -+c -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,l,k,kkk -+ real(8) engsrp,virsrp,dlrpot,rcut,rcsq,fx,fy,fz,omega,omega_exc -+ real(8) rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2,rdlpot,gamma -+ real(8) ai,aj,ak,rsq,strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lghost) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c reciprocal of interpolation spacing -+ -+ rdlpot=1.d0/dlrpot -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engsrp=0.d0 -+ virsrp=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ aj=ltype(jatm) -+ ai=ltype(iatm) -+ -+ if(ai.gt.aj) then -+ ak=(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ else -+ ak=(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ endif -+ k=lstvdw(int(ak)) -+ -+ if(abs(vvv(1,k)).gt.1.d-10)then -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.lt.rcsq) then -+ -+ rrr=sqrt(rsq) -+ -+c determine interpolation panel for force arrays -+ -+ l=int(rrr*rdlpot) -+ ppp=rrr*rdlpot-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engsrp=omega+engsrp -+ virsrp=virsrp-gamma*rsq -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-gamma*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine srfrceneu -+ -+ end module vdw_module -diff -urN dl_class_1.9.orig/srcmod/vv_motion_module.f dl_class_1.9/srcmod/vv_motion_module.f ---- dl_class_1.9.orig/srcmod/vv_motion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_motion_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,3031 @@ -+ module vv_motion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for velocity verlet integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module,only : lmetadyn -+ use property_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration. rattle algorithm -+c must be used in conjunction with integration algorithms -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check,safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,esig -+ real(8) txx,tyy,tzz,xxt,yyt,zzt,stresh,dx,dy,dz,dis,omega2 -+ real(8) strs1,strs2,strs3,strs5,strs6,strs9,amti,amtj,gamma -+ real(8) gammi,gammj,dli,dlj -+ -+ dimension stresh(9) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ -+c constraint virial -+ -+ vircon=0.d0 -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c test size of work arrays -+ -+ check=.true. -+ if(mxxdf.lt.nscons)check=.false. -+ if(mxnode.gt.1)call gstate(check) -+ if(.not.check)call error(idnode,412) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dx=dxt(k) -+ dy=dyt(k) -+ dz=dzt(k) -+ dis=prmcon(listcon(k,1)) -+ esig=max(esig,abs(dx*dx+dy*dy+dz*dz-dis*dis)/dis) -+ -+ enddo -+ -+ esig=esig*0.5d0 -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c bypass calculations if all tolerances satisfied -+ -+ if(.not.safe)then -+ -+c initialise increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c set constraint parameters -+ -+ dis=prmcon(listcon(k,1)) -+ omega2= dis*dis -+ amti= tstep*rmass(i) -+ amtj=-tstep*rmass(j) -+ -+c constraint force parameter -+ -+ dx=dxt(k) -+ dy=dyt(k) -+ dz=dzt(k) -+ -+ gamma=(omega2-(dx*dx+dy*dy+dz*dz))/ -+ x (-tstep*(amti-amtj)*(dxx(k)*dx+dyy(k)*dy+dzz(k)*dz)) -+ -+c accumulate bond virial -+ -+ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1-gamma*dxx(k)*dxx(k) -+ strs2=strs2-gamma*dxx(k)*dyy(k) -+ strs3=strs3-gamma*dxx(k)*dzz(k) -+ strs5=strs5-gamma*dyy(k)*dyy(k) -+ strs6=strs6-gamma*dyy(k)*dzz(k) -+ strs9=strs9-gamma*dzz(k)*dzz(k) -+ -+c improve approximate constraint force -+ -+ gammi=-0.5d0*gamma*amti -+ xxt(i)=xxt(i)+dxx(k)*gammi -+ yyt(i)=yyt(i)+dyy(k)*gammi -+ zzt(i)=zzt(i)+dzz(k)*gammi -+ -+ gammj=-0.5d0*gamma*amtj -+ xxt(j)=xxt(j)+dxx(k)*gammj -+ yyt(j)=yyt(j)+dyy(k)*gammj -+ zzt(j)=zzt(j)+dzz(k)*gammj -+ -+ enddo -+ -+c sum up constraint forces across nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov)call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.0d0/dble(listme(i)) -+ dlj=1.0d0/dble(listme(j)) -+ -+ xxx(i)=xxx(i)+tstep*dli*xxt(i) -+ yyy(i)=yyy(i)+tstep*dli*yyt(i) -+ zzz(i)=zzz(i)+tstep*dli*zzt(i) -+ xxx(j)=xxx(j)+tstep*dlj*xxt(j) -+ yyy(j)=yyy(j)+tstep*dlj*yyt(j) -+ zzz(j)=zzz(j)+tstep*dlj*zzt(j) -+ -+ vxx(i)=vxx(i)+dli*xxt(i) -+ vzz(i)=vzz(i)+dli*zzt(i) -+ vyy(i)=vyy(i)+dli*yyt(i) -+ vxx(j)=vxx(j)+dlj*xxt(j) -+ vyy(j)=vyy(j)+dlj*yyt(j) -+ vzz(j)=vzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit for non-convergence -+ -+ if(.not.safe)return -+ -+c complete stress tensor -+ -+ stresh(1)=strs1 -+ stresh(2)=strs2 -+ stresh(3)=strs3 -+ stresh(4)=strs2 -+ stresh(5)=strs5 -+ stresh(6)=strs6 -+ stresh(7)=strs3 -+ stresh(8)=strs6 -+ stresh(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdrattle_r -+ -+ subroutine rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for applying a bond constraints to -+c the velocities of the constrained atoms using the rattle -+c procedure (replicated data version) -+c -+c copyright - daresbury laboratory -+c author w.smith october 2002 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,natms,nscons,icyc -+ integer i,j,k -+ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt -+ real(8) esig,amti,amtj,gamma,gammi,gammj,dli,dlj,tolvel -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ -+c constraint convergence tolerance -+ -+ tolvel=tolnce/tstep -+ -+c start of rattle cycle -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate velocity constraint corrections -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ amti= 0.5d0*tstep*rmass(i) -+ amtj=-0.5d0*tstep*rmass(j) -+ -+c calculate constraint force parameter -+ -+ gamma=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ -+ x dzz(k)*(vzz(i)-vzz(j)))/((amti-amtj)* -+ x (dxx(k)**2+dyy(k)**2+dzz(k)**2)) -+ esig=max(esig,abs(gamma)) -+ -+c improve approximate constraint force -+ -+ gammi=-gamma*amti -+ xxt(i)=xxt(i)+gammi*dxx(k) -+ yyt(i)=yyt(i)+gammi*dyy(k) -+ zzt(i)=zzt(i)+gammi*dzz(k) -+ gammj=-gamma*amtj -+ xxt(j)=xxt(j)+gammj*dxx(k) -+ yyt(j)=yyt(j)+gammj*dyy(k) -+ zzt(j)=zzt(j)+gammj*dzz(k) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolvel) -+ if(mxnode.gt.1)then -+ -+ call gstate(safe) -+ -+ endif -+ -+c terminate iteration if constraints satisfied -+ -+ if(.not.safe)then -+ -+c transport velocity adjustments to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+c update velocities -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ vxx(i)=vxx(i)+dli*xxt(i) -+ vyy(i)=vyy(i)+dli*yyt(i) -+ vzz(i)=vzz(i)+dli*zzt(i) -+ dlj=1.d0/dble(listme(j)) -+ vxx(j)=vxx(j)+dlj*xxt(j) -+ vyy(j)=vyy(j)+dlj*yyt(j) -+ vzz(j)=vzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit if rattle fails -+ -+ if(.not.safe)return -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdrattle_v -+ -+ subroutine nvevv_1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nve ensemble -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,i,j,k -+ integer iatm0,iatm1 -+ real(8) tstep,engke,tolnce,vircon -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1980) -+ enddo -+ -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c update velocities for first and second stages -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvevv_1 -+ -+ subroutine nvtvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,taut,sigma,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,taut,sigma,engke,tolnce,vircon,chit -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1990) -+ enddo -+ -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c first pass of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+ engke=engke*chit**2 -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz, -+ x buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_b1 -+ -+ subroutine nvtvv_e1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - evans thermostat -+c Comp. Phys. reports 1, 299, (1984) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,engke,tolnce,vircon,vdotf,scale,chit -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2000) -+ enddo -+ -+ endif -+ -+ if(ntcons.eq.0)safe=.true. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ engke=0.5d0*engke -+ chit=0.5d0*vdotf/engke -+ -+c thermostat the velocities -+ -+ scale=(1.d0-0.5d0*tstep*chit) -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ engke=0.5d0*engke -+ chit=0.5d0*vdotf/engke -+ scale=(1.d0-0.5d0*tstep*chit) -+ -+c scale velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+ engke=engke*scale**2 -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_e1 -+ -+ subroutine nvtvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntshl,keyshl,tstep,taut,sigma,chit,consv,conint,engke, -+ x tolnce,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - nose-hoover thermostat -+c Molecular Physics 87 (1996) 1117 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,taut,sigma,chit,consv,conint,engke,tolnce,vircon -+ real(8) hstep,qmass -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2010) -+ enddo -+ -+ endif -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ hstep=0.5d0*tstep -+ qmass=2.d0*sigma*taut**2 -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c integrate and apply nvt thermostat -+ -+ call nvtscale -+ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, -+ x chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c integrate and apply nvt thermostat -+ -+ call nvtscale -+ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, -+ x chit,conint) -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_h1 -+ -+ subroutine nptvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical newjob,safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk -+ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce -+ real(8) virtot,vircon,volm,volm0,elrc0,virlrc0,psyst -+ real(8) chit,chip,scale,beta -+ -+ integer fail(nnn) -+ real(8) strkin(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2020) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2030) -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+ scale=1.d0 -+ -+ if(iter.eq.mxiter)then -+ -+c calculate system pressure -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ -+c apply Berendsen barostat taup is relaxation time -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+ endif -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=scale*xxx(i)+tstep*vxx(i) -+ yyy(i)=scale*yyy(i)+tstep*vyy(i) -+ zzz(i)=scale*zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c apply Berendsen thermostat taut is relaxation time -+ -+ engke=getkin(natms,idnode,mxnode) -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nptvv_b1 -+ -+ subroutine nptvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp,chip,chit, -+ x consv,conint,engke,elrc,tolnce,vircon,virtot,virlrc,volm, -+ x press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c npt ensemble - Melchionna, Ciccotti and Holian -+c Molecular Physics 78 (1993) 533 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith november 2002 -+c amended - w. smith january 2005: f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ integer, parameter :: ncyc=5 -+ -+ logical safe,lshmov,newjob -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc -+ real(8) tstep,taup,taut,sigma,temp,chip,chit,consv,conint -+ real(8) engke,elrc,tolnce,vircon,virtot,virlrc,volm,press -+ real(8) volm0,elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass -+ real(8) vzero,chit0,chip0,cons0,scale,fstep -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) cell0(9),com(3),vom(3),strkin(9),uni(9) -+ -+ save newjob,totmas,volm0,elrc0,virlrc0,dens0 -+ save cell0,iatm0,iatm1,hstep,qstep,fstep,pmass,qmass -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2040) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c inertia parameter for Nose-Hoover thermostat and barostat -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2050) -+ enddo -+ -+ endif -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metdynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c volume integration parameter -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptscale_p -+ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update positions -+ -+ scale=exp(tstep*chip) -+ do i=iatm0,iatm1 -+ -+ xxx(i)=scale*(xxx(i)-com(1))+tstep*vxx(i)+com(1) -+ yyy(i)=scale*(yyy(i)-com(2))+tstep*vyy(i)+com(2) -+ zzz(i)=scale*(zzz(i)-com(3))+tstep*vzz(i)+com(3) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptscale_p -+ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2+ -+ x 0.5d0*pmass*chip**2+press*volm -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nptvv_h1 -+ -+ subroutine nstvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c anisotropic npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical newjob,safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,mode -+ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce,beta -+ real(8) vircon,volm,volm0,elrc0,virlrc0,chit -+ real(8) xtmp,ytmp,ztmp -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) uni(9),strkin(9),celp(10) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2060) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2070) -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c extract previous constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c zero scaling matrix -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(iter.eq.mxiter)then -+ -+c calculate Berendsen barostat - taup is relaxation time -+ -+ do i=1,9 -+ eta(i)=tstep*beta*(stress(i)+strcns(i)- -+ x press*volm*uni(i))/(taup*volm)+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ endif -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xtmp=eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) -+ ytmp=eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) -+ ztmp=eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) -+ xxx(i)=tstep*vxx(i)+xtmp -+ yyy(i)=tstep*vyy(i)+ytmp -+ zzz(i)=tstep*vzz(i)+ztmp -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c apply Berendsen thermostat taut is relaxation time -+ -+ engke=getkin(natms,idnode,mxnode) -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nstvv_b1 -+ -+ subroutine nstvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma,temp,chit, -+ x consv,conint,engke,elrc,tolnce,vircon,virlrc,volm,press, -+ x chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c anisotropic npt ensemble - Melchionna, Ciccotti and Holian -+c Molecular Physics 78 (1993) 533 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith november 2002 -+c amended - w. smith january 2005 : f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ integer, parameter :: ncyc=5 -+ -+ logical safe,lshmov,newjob -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc,mode -+ real(8) tstep,taup,taut,sigma,temp,chit,consv,conint,chit0 -+ real(8) engke,elrc,tolnce,vircon,virlrc,volm,press,volm0 -+ real(8) elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass -+ real(8) cons0,cxx,cyy,czz,chip2,fstep -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) com(3),vom(3),czero(9),strkin(9),eta0(9),celp(10) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metdynamics shell thermostat variables -+ -+ data newjob/.true./ -+ -+ save newjob,totmas,volm0,elrc0,virlrc0,dens0 -+ save iatm0,iatm1,hstep,qstep,pmass,qmass,fstep -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2080) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c system total mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c inertia parameter for Nose-Hoover thermostat and barostat -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2090) -+ enddo -+ -+ endif -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metdynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ czero(i)=cell(i) -+ eta0(i)=eta(i) -+ -+ enddo -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c subtract kinetic terms from stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i) -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c calculate current volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstscale_p -+ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ -+ xxx(i)=xxx(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyy(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzz(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c subtract old constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c correct constraint bonds using rattle -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+c add new constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ cell(i)=czero(i) -+ eta(i)=eta0(i) -+ -+ enddo -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c add constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstscale_p -+ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nstvv_h1 -+ -+ end module vv_motion_module -+ -diff -urN dl_class_1.9.orig/srcmod/vv_rotation1_module.f dl_class_1.9/srcmod/vv_rotation1_module.f ---- dl_class_1.9.orig/srcmod/vv_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_rotation1_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,4701 @@ -+ module vv_rotation1_module -+ -+c*********************************************************************** -+c -+c dl_poly module 1 for velocity verlet rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module, only : lmetadyn -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use vv_motion_module -+ use utility_module -+ -+ contains -+ -+ subroutine rotate_omega -+ x (idnode,mxnode,ngrp,tstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for updating the angular velocity and momentum -+c for rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith sept 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,i,j,jr,jrs,ig,igrp1,igrp2,id -+ real(8) ftx,fty,ftz,fmx,fmy,fmz,tstep,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ -+ real(8) p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp) -+ real(8) dtx(mxatms),dty(mxatms),dtz(mxatms),rot(9) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ tq1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ tq2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ tq3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=p0(ig)+tq0*tstep -+ p1(ig)=p1(ig)+tq1*tstep -+ p2(ig)=p2(ig)+tq2*tstep -+ p3(ig)=p3(ig)+tq3*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+ enddo -+ -+ return -+ end subroutine rotate_omega -+ -+ subroutine nosquish(ig,tstep,qq0,qq1,qq2,qq3,pp0,pp1,pp2,pp3) -+ -+c*********************************************************************** -+c -+c dlpoly routine to implement the symplectic no_squish quaternion -+c algorithm of miller et al j.chem.phys 116 (2002) 8649 -+c -+c copyright daresbury laboratory -+c author m. leslie jan 2004 -+c amended w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer m,ig,id -+ real(8) zetax,zetay,zetaz,tstep,cs,sn,trstep -+ -+ integer, parameter :: mrot=10 -+ real(8), parameter :: ov4=0.25d0 -+ real(8), parameter :: ov8=0.125d0 -+ -+ real(8) qq0(*),qq1(*),qq2(*),qq3(*) -+ real(8) pp0(*),pp1(*),pp2(*),pp3(*) -+ -+ real(8) qn1(0:3),pq2(0:3),qn2(0:3),pq3(0:3) -+ real(8) qn3(0:3),pq4(0:3) -+ -+c rotational time step -+ -+ trstep=tstep/dble(mrot) -+ -+c rotation: iterate over mrot rotational time steps -+ -+ id=lstgtp(ig) -+ -+ do m=1,mrot -+ -+ zetaz=ov8*rotinz(id,2)*trstep* -+ x (-pp0(ig)*qq3(ig)+pp1(ig)*qq2(ig)- -+ x pp2(ig)*qq1(ig)+pp3(ig)*qq0(ig)) -+ cs=cos(zetaz) -+ sn=sin(zetaz) -+ qn1(0)=cs*qq0(ig)-sn*qq3(ig) -+ qn1(1)=cs*qq1(ig)+sn*qq2(ig) -+ qn1(2)=cs*qq2(ig)-sn*qq1(ig) -+ qn1(3)=cs*qq3(ig)+sn*qq0(ig) -+ pq2(0)=cs*pp0(ig)-sn*pp3(ig) -+ pq2(1)=cs*pp1(ig)+sn*pp2(ig) -+ pq2(2)=cs*pp2(ig)-sn*pp1(ig) -+ pq2(3)=cs*pp3(ig)+sn*pp0(ig) -+ -+ zetay=ov8*rotiny(id,2)*trstep* -+ x (-pq2(0)*qn1(2)-pq2(1)*qn1(3)+ -+ x pq2(2)*qn1(0)+pq2(3)*qn1(1)) -+ cs=cos(zetay) -+ sn=sin(zetay) -+ qn2(0)=cs*qn1(0)-sn*qn1(2) -+ qn2(1)=cs*qn1(1)-sn*qn1(3) -+ qn2(2)=cs*qn1(2)+sn*qn1(0) -+ qn2(3)=cs*qn1(3)+sn*qn1(1) -+ pq3(0)=cs*pq2(0)-sn*pq2(2) -+ pq3(1)=cs*pq2(1)-sn*pq2(3) -+ pq3(2)=cs*pq2(2)+sn*pq2(0) -+ pq3(3)=cs*pq2(3)+sn*pq2(1) -+ -+ zetax=ov4*rotinx(id,2)*trstep* -+ x (-pq3(0)*qn2(1)+pq3(1)*qn2(0)+ -+ x pq3(2)*qn2(3)-pq3(3)*qn2(2)) -+ cs=cos(zetax) -+ sn=sin(zetax) -+ qn3(0)=cs*qn2(0)-sn*qn2(1) -+ qn3(1)=cs*qn2(1)+sn*qn2(0) -+ qn3(2)=cs*qn2(2)+sn*qn2(3) -+ qn3(3)=cs*qn2(3)-sn*qn2(2) -+ pq4(0)=cs*pq3(0)-sn*pq3(1) -+ pq4(1)=cs*pq3(1)+sn*pq3(0) -+ pq4(2)=cs*pq3(2)+sn*pq3(3) -+ pq4(3)=cs*pq3(3)-sn*pq3(2) -+ -+ zetay=ov8*rotiny(id,2)*trstep* -+ x (-pq4(0)*qn3(2)-pq4(1)*qn3(3)+ -+ x pq4(2)*qn3(0)+pq4(3)*qn3(1)) -+ cs=cos(zetay) -+ sn=sin(zetay) -+ qn2(0)=cs*qn3(0)-sn*qn3(2) -+ qn2(1)=cs*qn3(1)-sn*qn3(3) -+ qn2(2)=cs*qn3(2)+sn*qn3(0) -+ qn2(3)=cs*qn3(3)+sn*qn3(1) -+ pq3(0)=cs*pq4(0)-sn*pq4(2) -+ pq3(1)=cs*pq4(1)-sn*pq4(3) -+ pq3(2)=cs*pq4(2)+sn*pq4(0) -+ pq3(3)=cs*pq4(3)+sn*pq4(1) -+ -+ zetaz=ov8*rotinz(id,2)*trstep* -+ x (-pq3(0)*qn2(3)+pq3(1)*qn2(2)- -+ x pq3(2)*qn2(1)+pq3(3)*qn2(0)) -+ cs=cos(zetaz) -+ sn=sin(zetaz) -+ qq0(ig)=cs*qn2(0)-sn*qn2(3) -+ qq1(ig)=cs*qn2(1)+sn*qn2(2) -+ qq2(ig)=cs*qn2(2)-sn*qn2(1) -+ qq3(ig)=cs*qn2(3)+sn*qn2(0) -+ pp0(ig)=cs*pq3(0)-sn*pq3(3) -+ pp1(ig)=cs*pq3(1)+sn*pq3(2) -+ pp2(ig)=cs*pq3(2)-sn*pq3(1) -+ pp3(ig)=cs*pq3(3)+sn*pq3(0) -+ -+ enddo -+ -+ return -+ end subroutine nosquish -+ -+ subroutine nveqvv_1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author m. leslie jan 2004 -+c amended w.smith jan 2005: f90 conversion -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,jrs,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,engfke -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2100) -+ enddo -+ -+ newjob=.false. -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c merge centre of mass velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge centre of mass position from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nveqvv_1 -+ -+ subroutine nvtqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1 -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,engfke -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2120) -+ enddo -+ -+ newjob=.false. -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algoritm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c exchange position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nvtqvv_b1 -+ -+ subroutine nvtqvv_h1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, -+ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr -+ integer id,ig,ifre,jrs,idum -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) engfke -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c nose-hoover inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2140) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c apply thermostat for first stage -+ -+ if(isw.eq.1)then -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ endif -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algoritm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+ engke=engfke+engtrn -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nvtqvv_h1 -+ -+ subroutine nptqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,chip,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 -+ real(8) virtot,psyst,press,taup,scale,engfke -+ -+ integer, parameter :: nnn=11 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2160) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ if(isw.eq.1)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) -+ -+ endif -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2170) -+ enddo -+ -+ newjob=.false. -+ if(ntcons.gt.0)safe=.false. -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta at start of time step -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c rigid body motion for first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 -+ -+ mxiter=1 -+ if(ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+ scale=1.d0 -+ -+ if(iter.eq.mxiter)then -+ -+c calculate system pressure -+ -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ -+c apply Berendsen barostat -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+ endif -+ -+c update centre of mass position -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=scale*gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=scale*gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=scale*gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=gcmx(ig)+ -+ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ yyy(i)=gcmy(ig)+ -+ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ zzz(i)=gcmz(ig)+ -+ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=scale*xxx(i)+tstep*vxx(i) -+ yyy(i)=scale*yyy(i)+tstep*vyy(i) -+ zzz(i)=scale*zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ if(isw.eq.1)then -+ -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) -+ deallocate(gxo,gyo,gzo,stat=fail(6)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine nptqvv_b1 -+ -+ subroutine nptqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virtot,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr -+ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) taup,temp,press,virtot,vzero,chit0,chip0,cons0 -+ real(8) chip,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas -+ real(8) volm0,scale,cxx,cyy,czz,engfke,fstep -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,hstep,qstep,fstep,pmass,qmass -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 -+ save totmas,dens0,cell0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2200) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) -+ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2210) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gcmx(ig)-com(1) -+ cyy=gcmy(ig)-com(2) -+ czz=gcmz(ig)-com(3) -+ gcmx(ig)=gcmx(ig)+tstep*(gvxx(ig)+chip*cxx) -+ gcmy(ig)=gcmy(ig)+tstep*(gvyy(ig)+chip*cyy) -+ gcmz(ig)=gcmz(ig)+tstep*(gvzz(ig)+chip*czz) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ xxx(i)=xxx(i)+tstep*(vxx(i)+chip*cxx) -+ yyy(i)=yyy(i)+tstep*(vyy(i)+chip*cyy) -+ zzz(i)=zzz(i)+tstep*(vzz(i)+chip*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c operations for second stage only -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c calculate conserved variable -+ -+ consv=conint+0.5d0*qmass*chit**2+press*volm -+ x +0.5d0*pmass*chip**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c end of iteration cycle -+ -+ enddo -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) -+ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) -+ -+ endif -+ -+ return -+ end subroutine nptqvv_h1 -+ -+ subroutine nstqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nst ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk,mode -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engfke -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 -+ real(8) press,taup,xtmp,ytmp,ztmp -+ -+ integer, parameter :: nnn=11 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ real(8) celp(10),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2240) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ if(isw.eq.1)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) -+ -+ endif -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2250) -+ enddo -+ -+ newjob=.false. -+ if(ntcons.gt.0)safe=.false. -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta at start of time step -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c rigid body motion for first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c extract previous constraint terms from stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 -+ -+ mxiter=1 -+ if(ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c zero scaling matrix -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(iter.eq.mxiter)then -+ -+c calculate Berendsen barostat -+ -+ do i=1,9 -+ eta(i)=tstep*beta*(stress(i)+strcns(i)- -+ x press*volm*uni(i))/(taup*volm)+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ endif -+ -+c update centre of mass position -+ -+ do ig=igrp1,igrp2 -+ -+ xtmp=eta(1)*gcmx(ig)+eta(4)*gcmy(ig)+eta(7)*gcmz(ig) -+ ytmp=eta(2)*gcmx(ig)+eta(5)*gcmy(ig)+eta(8)*gcmz(ig) -+ ztmp=eta(3)*gcmx(ig)+eta(6)*gcmy(ig)+eta(9)*gcmz(ig) -+ gcmx(ig)=tstep*gvxx(ig)+xtmp -+ gcmy(ig)=tstep*gvyy(ig)+ytmp -+ gcmz(ig)=tstep*gvzz(ig)+ztmp -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=gcmx(ig)+ -+ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ yyy(i)=gcmy(ig)+ -+ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ zzz(i)=gcmz(ig)+ -+ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=tstep*vxx(i)+ -+ x eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) -+ yyy(i)=tstep*vyy(i)+ -+ x eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) -+ zzz(i)=tstep*vzz(i)+ -+ x eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ if(isw.eq.1)then -+ -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) -+ deallocate(gxo,gyo,gzo,stat=fail(6)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine nstqvv_b1 -+ -+ subroutine nstqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr,mode -+ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) taup,temp,press,vzero,chit0,cons0 -+ real(8) chip2,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas -+ real(8) volm0,cxx,cyy,czz,engfke,fstep -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) -+ real(8) czero(9),eta0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,hstep,qstep,fstep,pmass,qmass -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 -+ save totmas,dens0 -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ if(newjob)then -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2280) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) -+ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2290) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ eta0(i)=eta(i) -+ czero(i)=cell(i) -+ -+ enddo -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, -+ x press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gcmx(ig)-com(1) -+ cyy=gcmy(ig)-com(2) -+ czz=gcmz(ig)-com(3) -+ gcmx(ig)=gcmx(ig)+ -+ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ gcmy(ig)=gcmy(ig)+ -+ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ gcmz(ig)=gcmz(ig)+ -+ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ k=k+1 -+ i=lstfre(ifre) -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ xxx(i)=xxx(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyy(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzz(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c subtract old constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c correct constraint bonds using rattle -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+c add new constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ eta(i)=eta0(i) -+ cell(i)=czero(i) -+ -+ enddo -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c operations for second stage only -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+c add constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c kinetic terms for stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, -+ x press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c end of iteration cycle -+ -+ enddo -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) -+ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) -+ -+ endif -+ -+ return -+ end subroutine nstqvv_h1 -+ -+ end module vv_rotation1_module -+ -diff -urN dl_class_1.9.orig/srcmod/vv_rotation2_module.f dl_class_1.9/srcmod/vv_rotation2_module.f ---- dl_class_1.9.orig/srcmod/vv_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_rotation2_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,5924 @@ -+ module vv_rotation2_module -+ -+c*********************************************************************** -+c -+c dl_poly module 2 for velocity verlet rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module, only : lmetadyn -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use vv_rotation1_module -+ use utility_module -+ -+ contains -+ -+ subroutine qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration in the velocity verlet scheme. assumes rigid -+c bodies connected by constraints. must be used in conjunction with -+c velocity verlet integration algorithm. note the iteration is -+c handled by the calling routine. -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k,ik -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy -+ real(8) tzz,xxt,yyt,zzt,stresh,strs1,strs2,strs3,strs5,strs6 -+ real(8) strs9,tstep2,esig,dis2,tqa,tqb,gamma,dli,dlj -+ -+ real(8), allocatable :: esig1(:),ggx(:),ggy(:),ggz(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension stresh(9),tqa(3),tqb(3) -+ -+ save newjob,esig1,ggx,ggy,ggz -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (esig1(mxcons),ggx(mxcons),ggy(mxcons),ggz(mxcons), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1615) -+ newjob=.false. -+ -+ endif -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c constraint bond vectors are dxx,dyy,dzz (input) -+ -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+ dis2=prmcon(listcon(k,1))**2 -+ esig1(k)=(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 -+ esig=max(esig,abs(esig1(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c continue if any tolerances unsatisfied -+ -+ if(.not.safe)then -+ -+c initialise force increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dis2=prmcon(listcon(k,1))**2 -+ -+ if(newstep)then -+ -+ call pivot(1,i,k,ik,tqa,dxx,dyy,dzz) -+ call pivot(1,j,k,ik,tqb,dxx,dyy,dzz) -+ -+ ggx(k)=tstep2*(tqa(1)+tqb(1))/dis2 -+ ggy(k)=tstep2*(tqa(2)+tqb(2))/dis2 -+ ggz(k)=tstep2*(tqa(3)+tqb(3))/dis2 -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig1(k)/(dxt(k)*ggx(k)+dyt(k)*ggy(k)+dzt(k)*ggz(k)) -+ -+c accumulate bond virial -+ -+ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1+gamma*dxx(k)*dxx(k) -+ strs2=strs2+gamma*dxx(k)*dyy(k) -+ strs3=strs3+gamma*dxx(k)*dzz(k) -+ strs5=strs5+gamma*dyy(k)*dyy(k) -+ strs6=strs6+gamma*dyy(k)*dzz(k) -+ strs9=strs9+gamma*dzz(k)*dzz(k) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)+dxx(k)*gamma -+ yyt(i)=yyt(i)+dyy(k)*gamma -+ zzt(i)=zzt(i)+dzz(k)*gamma -+ xxt(j)=xxt(j)-dxx(k)*gamma -+ yyt(j)=yyt(j)-dyy(k)*gamma -+ zzt(j)=zzt(j)-dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+xxt(i)*dli -+ fyy(i)=fyy(i)+yyt(i)*dli -+ fzz(i)=fzz(i)+zzt(i)*dli -+ fxx(j)=fxx(j)+xxt(j)*dlj -+ fyy(j)=fyy(j)+yyt(j)*dlj -+ fzz(j)=fzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+c complete stress tensor -+ -+ stresh(1)=stresh(1)+strs1 -+ stresh(2)=stresh(2)+strs2 -+ stresh(3)=stresh(3)+strs3 -+ stresh(4)=stresh(4)+strs2 -+ stresh(5)=stresh(5)+strs5 -+ stresh(6)=stresh(6)+strs6 -+ stresh(7)=stresh(7)+strs3 -+ stresh(8)=stresh(8)+strs6 -+ stresh(9)=stresh(9)+strs9 -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ -+ endif -+ -+ return -+ end subroutine qrattle_r -+ -+ subroutine qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration in the velocity verlet scheme. assumes rigid -+c bodies connected by constraints. must be used in conjunction with -+c velocity verlet integration algorithm. note the iteration is -+c handled by the calling routine. -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,mxnode,natms,nscons,i,j,k,ik -+ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,tqa,tqb -+ real(8) xxt,yyt,zzt,tstep2,esig,gamma,dli,dlj -+ real(8) tolvel -+ -+ real(8), allocatable :: esig2(:),hhx(:),hhy(:),hhz(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension tqa(3),tqb(3) -+ -+ save newjob,esig2,hhx,hhy,hhz -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (esig2(mxcons),hhx(mxcons),hhy(mxcons),hhz(mxcons), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1625) -+ newjob=.false. -+ -+ endif -+ -+c constraint bond vectors are dxx,dyy,dzz (input) -+ -+c half timestep -+ -+ tstep2=tstep/2.d0 -+ -+c tolerance for velocity convergence -+ -+ tolvel=tolnce/tstep -+ -+c calculate maximum error in constraint -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ esig2(k)=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ -+ x dzz(k)*(vzz(i)-vzz(j))) -+ esig=max(esig,abs(esig2(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolvel) -+ -+ if(mxnode.gt.1)then -+ call gstate(safe) -+ endif -+ -+c continue if all tolerances satisfied else return to calling routine -+ -+ if(.not.safe)then -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint correction -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(newstep)then -+ -+ call pivot(2,i,k,ik,tqa,dxx,dyy,dzz) -+ call pivot(2,j,k,ik,tqb,dxx,dyy,dzz) -+ -+ hhx(k)=tstep2*(tqa(1)+tqb(1)) -+ hhy(k)=tstep2*(tqa(2)+tqb(2)) -+ hhz(k)=tstep2*(tqa(3)+tqb(3)) -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig2(k)/(dxx(k)*hhx(k)+dyy(k)*hhy(k)+dzz(k)*hhz(k)) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)-dxx(k)*gamma -+ yyt(i)=yyt(i)-dyy(k)*gamma -+ zzt(i)=zzt(i)-dzz(k)*gamma -+ xxt(j)=xxt(j)+dxx(k)*gamma -+ yyt(j)=yyt(j)+dyy(k)*gamma -+ zzt(j)=zzt(j)+dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+dli*xxt(i) -+ fyy(i)=fyy(i)+dli*yyt(i) -+ fzz(i)=fzz(i)+dli*zzt(i) -+ fxx(j)=fxx(j)+dlj*xxt(j) -+ fyy(j)=fyy(j)+dlj*yyt(j) -+ fzz(j)=fzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine qrattle_v -+ -+ subroutine pivot(k,i,kk,ik,tqq,dxx,dyy,dzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for computing pivot vector for velocity -+c corrections to bonds between rigid bodies -+c must be used in conjunction with qrattle routines: -+c if k=1 - use with qrattle_r -+c if k=2 - use with qrattle_v -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer k,i,kk,ik,ig,id,jj -+ real(8) xxa,yya,zza,tax,tay,taz,trx,try,trz,vix,viy,viz -+ real(8) rot(9),tqq(3),dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ -+ ig=lstbod(i) -+ -+ if(ig.eq.0)then -+ -+c atoms in constraint bonds -+ -+ tqq(1)=dxx(kk)*rmass(i) -+ tqq(2)=dyy(kk)*rmass(i) -+ tqq(3)=dzz(kk)*rmass(i) -+ -+ else -+ -+c terms for rigid body atoms -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ tqq(1)=dxx(kk)/gmass(id) -+ tqq(2)=dyy(kk)/gmass(id) -+ tqq(3)=dzz(kk)/gmass(id) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c com-site vector in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+gzz(id,jj)*rot(9)) -+ -+c cross product of com-site vector and interatomic vector -+ -+ tax=yya*dzz(kk)-zza*dyy(kk) -+ tay=zza*dxx(kk)-xxa*dzz(kk) -+ taz=xxa*dyy(kk)-yya*dxx(kk) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+ if(k.eq.1)then -+ -+c direction of induced velocites in body frame -+ -+ vix=try*gzz(id,jj)-trz*gyy(id,jj) -+ viy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ viz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ tqq(1)=tqq(1)+vix*rot(1)+viy*rot(2)+viz*rot(3) -+ tqq(2)=tqq(2)+vix*rot(4)+viy*rot(5)+viz*rot(6) -+ tqq(3)=tqq(3)+vix*rot(7)+viy*rot(8)+viz*rot(9) -+ -+ elseif(k.eq.2)then -+ -+c transform to lab frame -+ -+ tqq(1)=tqq(1)+trx*rot(1)+try*rot(2)+trz*rot(3) -+ tqq(2)=tqq(2)+trx*rot(4)+try*rot(5)+trz*rot(6) -+ tqq(3)=tqq(3)+trx*rot(7)+try*rot(8)+trz*rot(9) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine pivot -+ -+ subroutine nveqvv_2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith jan 2005 -+c amended w.smith feb 2005: qrattle added -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2110) -+ enddo -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge free atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ -+ engke=engke+engtrn -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nveqvv_2 -+ -+ subroutine nvtqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke -+ real(8) engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(mxatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2130) -+ enddo -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engke+engtrn+engrot -+ engke=engke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nvtqvv_b2 -+ -+ subroutine nvtqvv_h2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, -+ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,engfke -+ real(8) taut,sigma,chit,hstep,qmass,conint,consv -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c nose-hoover inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2150) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c apply thermostat for first stage -+ -+ if(isw.eq.1)then -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ engke=engfke+engtrn -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nvtqvv_h2 -+ -+ subroutine nptqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sep 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig,ntpatm -+ integer iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke,engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit -+ real(8) volm,elrc0,elrc,virlrc0,virlrc,scale,psyst,virtot,chip -+ real(8) beta,press,taup,engfke,vzero -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ save newstep,newjob,volm0,elrc0,virlrc0,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2180) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(12)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(13)) -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2190) -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c cell parameters -+ -+ vzero=volm -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+ endif -+ -+c -------------- start of barostat iteration cycle ----------------- -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c calculate system pressure -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ -+c apply Berendsen barostat -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ chip=1.d0 -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+c reset constraint virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=scale*gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=scale*gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=scale*gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=scale*xxo(i)+tstep*vxx(i) -+ yyy(i)=scale*yyo(i)+tstep*vyy(i) -+ zzz(i)=scale*zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ if(isw.eq.2)call bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=uni(i)*scale -+ enddo -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ -+ return -+ end subroutine nptqvv_b2 -+ -+ subroutine nptqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virtot,virlrc,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm -+ integer jcyc,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,engfke -+ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv -+ real(8) cxx,cyy,czz,scale,virtot,press,chip,temp -+ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc -+ real(8) virlrc,elrc0,virlrc0,chit0,chip0,vzero,cons0 -+ -+ integer, parameter :: nnn=16 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: vx1(:),vy1(:),vz1(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas -+ save pmass -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2220) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) -+ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) -+ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), -+ x stat=fail(13)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), -+ x stat=fail(14)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) -+ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2230) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c store key config data at start of timestep -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c store rigid body positions -+ -+ do ig=1,ngrp -+ -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ do i=1,natms -+ -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+c integration of barostat and thermostat (part 1) -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore free atom velocities -+ -+ do i=1,natms -+ -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+c restore rigid body quaternions angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+c current constraint virial -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/vzero)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c reset constraint virial and stress -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) -+ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) -+ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) -+ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store intermediate velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vx1(i)=vxx(i) -+ vy1(i)=vyy(i) -+ vz1(i)=vzz(i) -+ -+ enddo -+ do ig=igrp1,igrp2 -+ -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gvx1(ig)=gvxx(ig) -+ gvy1(ig)=gvyy(ig) -+ gvz1(ig)=gvzz(ig) -+ -+ enddo -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c restore rigid body quaternions, angular momenta and velocities -+ -+ do ig=igrp1,igrp2 -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gvxx(ig)=gvx1(ig) -+ gvyy(ig)=gvy1(ig) -+ gvzz(ig)=gvz1(ig) -+ -+ enddo -+ -+c calculate new rigid body velocities -+ -+ call rotate_omega -+ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update centre of mass position by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gxo(ig)-com(1) -+ cyy=gyo(ig)-com(2) -+ czz=gzo(ig)-com(3) -+ gcmx(ig)=gxo(ig)+tstep*(gvxx(ig)+chip*cxx) -+ gcmy(ig)=gyo(ig)+tstep*(gvyy(ig)+chip*cyy) -+ gcmz(ig)=gzo(ig)+tstep*(gvzz(ig)+chip*czz) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxo(i)-com(1) -+ cyy=yyo(i)-com(2) -+ czz=zzo(i)-com(3) -+ xxx(i)=xxo(i)+tstep*(vxx(i)+chip*cxx) -+ yyy(i)=yyo(i)+tstep*(vyy(i)+chip*cyy) -+ zzz(i)=zzo(i)+tstep*(vzz(i)+chip*czz) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c integration of barostat and thermostat (part 2) -+ -+ if(isw.eq.2)then -+ -+c current constraint virial -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/vzero)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+ endif -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.2)then -+ -+c calculate conserved variable -+ -+ consv=conint+0.5d0*qmass*chit**2+press*volm -+ x +0.5d0*pmass*chip**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c merge velocity arrays -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c exchange position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(oxo,oyo,ozo,dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ -+ return -+ end subroutine nptqvv_h2 -+ -+ subroutine nstqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nst ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sep 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode -+ integer iter,mxiter,jrs -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke -+ real(8) engtrn,taut,sigma,chit -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ real(8) volm,elrc0,elrc,virlrc0,virlrc -+ real(8) beta,press,taup,engfke,hstep,vzero -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),uni(9),celp(10) -+ real(8) cell0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ save newstep,newjob,volm0,elrc0,virlrc0,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,hstep -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2260) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(12)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(13)) -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2270) -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c cell parameters -+ -+ vzero=volm -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c extract previous constraint terms from stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+ endif -+ -+c -------------- start of barostat iteration cycle ----------------- -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c calculate Berendsen barostat -+ -+ do i=1,9 -+ eta(i)=tstep*beta*((stress(i)+strcns(i))/volm- -+ x press*uni(i))/taup+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c reset constraint virial -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*hstep -+ p1(ig)=c1(jg)+tq1*hstep -+ p2(ig)=c2(jg)+tq2*hstep -+ p3(ig)=c3(jg)+tq3*hstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=tstep*gvxx(ig)+ -+ x eta(1)*gxo(jg)+eta(4)*gyo(jg)+eta(7)*gzo(jg) -+ gcmy(ig)=tstep*gvyy(ig)+ -+ x eta(2)*gxo(jg)+eta(5)*gyo(jg)+eta(8)*gzo(jg) -+ gcmz(ig)=tstep*gvzz(ig)+ -+ x eta(3)*gxo(jg)+eta(6)*gyo(jg)+eta(9)*gzo(jg) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=tstep*vxx(i)+ -+ x eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) -+ yyy(i)=tstep*vyy(i)+ -+ x eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) -+ zzz(i)=tstep*vzz(i)+ -+ x eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ if(isw.eq.2)call bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ -+ return -+ end subroutine nstqvv_b2 -+ -+ subroutine nstqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sept 2005 -+c adapted d. quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode -+ integer jcyc,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,engfke -+ real(8) vaa,vbb,vcc,opx,opy,opz -+ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv -+ real(8) cxx,cyy,czz,press,chip2,temp -+ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc -+ real(8) virlrc,elrc0,virlrc0,chit0,vzero,cons0 -+ -+ integer, parameter :: nnn=16 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) -+ real(8) cell0(9),eta0(9),stres0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: vx1(:),vy1(:),vz1(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas -+ save pmass -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2220) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) -+ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) -+ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), -+ x stat=fail(13)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), -+ x stat=fail(14)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) -+ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2230) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c store key config data at start of timestep -+ -+ vzero=volm -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ eta0(i)=eta(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c store rigid body positions -+ -+ do ig=1,ngrp -+ -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ do i=1,natms -+ -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+c integration of barostat and thermostat (part 1) -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ cell(i)=cell0(i) -+ eta(i)=eta0(i) -+ -+ enddo -+ -+c restore free atom velocities -+ -+ do i=1,natms -+ -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+c restore rigid body quaternions angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+c kinetic contributions to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, -+ x volm,strkin,strgrp) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c reset constraint virial and stress -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ stress(i)=stress(i)-strcns(i)-strbod(i) -+ strcns(i)=0.d0 -+ -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) -+ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) -+ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) -+ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store intermediate velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vx1(i)=vxx(i) -+ vy1(i)=vyy(i) -+ vz1(i)=vzz(i) -+ -+ enddo -+ do ig=igrp1,igrp2 -+ -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gvx1(ig)=gvxx(ig) -+ gvy1(ig)=gvyy(ig) -+ gvz1(ig)=gvzz(ig) -+ -+ enddo -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c restore rigid body quaternions, angular momenta and velocities -+ -+ do ig=igrp1,igrp2 -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gvxx(ig)=gvx1(ig) -+ gvyy(ig)=gvy1(ig) -+ gvzz(ig)=gvz1(ig) -+ -+ enddo -+ -+c calculate new rigid body velocities -+ -+ call rotate_omega -+ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update centre of mass position by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gxo(ig)-com(1) -+ cyy=gyo(ig)-com(2) -+ czz=gzo(ig)-com(3) -+ gcmx(ig)=gxo(ig)+ -+ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ gcmy(ig)=gyo(ig)+ -+ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ gcmz(ig)=gzo(ig)+ -+ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxo(i)-com(1) -+ cyy=yyo(i)-com(2) -+ czz=zzo(i)-com(3) -+ xxx(i)=xxo(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyo(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzo(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add new constraint terms to stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strbod(i) -+ enddo -+ -+ endif -+ -+c integration of barostat and thermostat (part 2) -+ -+ if(isw.eq.2)then -+ -+c kinetic contributions to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add kinetic and body contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, -+ x volm,strkin,strgrp) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c sum up all contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.2)then -+ -+c calculate conserved variable -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c merge velocity arrays -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nstqvv_h2 -+ -+ end module vv_rotation2_module diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch b/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch deleted file mode 100644 index b6219c6207..0000000000 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/PLUMED-2.2.0.patch +++ /dev/null @@ -1,93945 +0,0 @@ -# This patch allows to use Plumed 2.2 with DL_POLY. It is autogenerated with the help -# of Plumed and https://groups.google.com/forum/#!topic/plumed-users/cWaIDU5F6Bw -# Follow the instructions on that forum and you can generate the patch below -# The makefile is also adjust to use the EB set values for building -# Ward Poelmans -diff -urN dl_class_1.9.orig/Plumed.cmake dl_class_1.9/Plumed.cmake ---- dl_class_1.9.orig/Plumed.cmake 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.cmake 2015-11-09 14:26:25.657769545 +0100 -@@ -0,0 +1,3 @@ -+# PLUMED: runtime installation -+set(PLUMED_LOAD -L$ENV{EBROOTPLUMED}/lib -lplumed -ldl ) -+set(PLUMED_DEPENDENCIES ) -diff -urN dl_class_1.9.orig/Plumed.h dl_class_1.9/Plumed.h ---- dl_class_1.9.orig/Plumed.h 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.h 2015-11-09 14:26:31.797805893 +0100 -@@ -0,0 +1,500 @@ -+/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -+ Copyright (c) 2011-2015 The plumed team -+ (see the PEOPLE file at the root of the distribution for a list of names) -+ -+ See http://www.plumed-code.org for more information. -+ -+ This file is part of plumed, version 2. -+ -+ plumed is free software: you can redistribute it and/or modify -+ it under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ plumed is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with plumed. If not, see . -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ -+#ifndef __PLUMED_wrapper_Plumed_h -+#define __PLUMED_wrapper_Plumed_h -+ -+/** -+\page ReferencePlumedH Reference for interfacing MD codes with PLUMED -+ -+ Plumed.h and Plumed.c contain the external plumed interface, which is used to -+ integrate it with MD engines. This interface is very general, and is expected -+ not to change across plumed versions. Plumed.c also implements a dummy version -+ of the interface, so as to allow a code to be fully linked even if the plumed -+ library is not available yet. These files could be directly included in the official -+ host MD distribution. In this manner, it will be sufficient to link the plumed -+ library at link time (on all systems) or directly at runtime (on system where -+ dynamic loading is enabled) to include plumed features. -+ -+ Why is Plumed.c written in C and not C++? The reason is that the resulting Plumed.o -+ needs to be linked with the host MD code immediately (whereas the rest of plumed -+ could be linked a posteriori). Imagine the MD code is written in FORTRAN: when we -+ link the Plumed.o file we would like not to need any C++ library linked. In this -+ manner, we do not need to know which C++ compiler will be used to compile plumed. -+ The C++ library is only linked to the "rest" of plumed, which actually use it. -+ Anyway, Plumed.c is written in such a manner to allow its compilation also in C++ -+ (C++ is a bit stricter than C; compatibility is checked when PlumedStatic.cpp, -+ which basically includes Plumed.c, is compiled with the C++ compiler). This will -+ allow e.g. MD codes written in C++ to just incorporate Plumed.c (maybe renamed into -+ Plumed.cpp), without the need of configuring a plain C compiler. -+ -+ Plumed interface can be used from C, C++ and FORTRAN. Everything concerning plumed -+ is hidden inside a single object type, which is described in C by a structure -+ (struct \ref plumed), in C++ by a class (PLMD::Plumed) and in FORTRAN by a -+ fixed-length string (CHARACTER(LEN=32)). Obviously C++ can use both struct -+ and class interfaces, but the first should be preferred. The reference interface -+ is the C one, whereas FORTRAN and C++ interfaces are implemented as wrappers -+ around it. -+ -+ In the C++ interface, all the routines are implemented as methods of PLMD::Plumed. -+ In the C and FORTRAN interfaces, all the routines are named plumed_*, to -+ avoid potential name clashes. Notice that the entire plumed library -+ is implemented in C++, and it is hidden inside the PLMD namespace. -+ -+ Handlers to the plumed object can be converted among different representations, -+ to allow inter-operability among languages. In C, there are tools to convert -+ to/from FORTRAN, whereas in C++ there are tools to convert to/from FORTRAN and C. -+ -+ These handlers only contain a pointer to the real structure, so that -+ when a plumed object is brought from one language to another, -+ it brings a reference to the same environment. -+ -+ Moreover, to simplify life in all cases where a single Plumed object is -+ required for the entire simulation (which covers most of the practical -+ applications with conventional MD codes) it is possible to take advantage -+ of a global interface, which is implicitly referring to a unique global instance. -+ The global object should still be initialized and finalized properly. -+ -+ The basic method to send a message to plumed is -+\verbatim -+ (C) plumed_cmd -+ (C++) PLMD::Plumed::cmd -+ (FORTRAN) PLUMED_F_CMD -+\endverbatim -+ -+ To initialize a plumed object, use: -+\verbatim -+ (C) plumed_create -+ (C++) (constructor of PLMD::Plumed) -+ (FORTRAN) PLUMED_F_CREATE -+\endverbatim -+ -+ To finalize it, use -+\verbatim -+ (C) plumed_finalize -+ (C++) (destructor of PLMD::Plumed) -+ (FORTRAN) PLUMED_F_FINALIZE -+\endverbatim -+ -+ To access to the global-object, use -+\verbatim -+ (C) plumed_gcreate, plumed_gfinalize, plumed_gcmd -+ (C++) PLMD::Plumed::gcreate, PLMD::Plumed::gfinalize, PLMD::Plumed::gcmd -+ (FORTRAN) PLUMED_F_GCREATE, PLUMED_F_GFINALIZE, PLUMED_F_GCMD -+\endverbatim -+ -+ To check if the global object has been initialized, use -+\verbatim -+ (C) plumed_ginitialized -+ (C++) PLMD::Plumed::ginitialized -+ (FORTRAN) PLUMED_F_GINITIALIZED -+\endverbatim -+ -+ To check if plumed library is available (this is useful for runtime linking), use -+\verbatim -+ (C) plumed_installed -+ (C++) PLMD::Plumed::installed -+ (FORTRAN) PLUMED_F_INSTALLED -+\endverbatim -+ -+ To convert handlers use -+\verbatim -+ (C) plumed_c2f (C to FORTRAN) -+ (C) plumed_f2c (FORTRAN to C) -+ (C++) Plumed(plumed) constructor (C to C++) -+ (C++) operator plumed() cast (C++ to C) -+ (C++) Plumed(char*) constructor (FORTRAN to C++) -+ (C++) toFortran(char*) (C++ to FORTRAN) -+\endverbatim -+ -+\verbatim -+ FORTRAN interface -+ SUBROUTINE PLUMED_F_INSTALLED(i) -+ INTEGER, INTENT(OUT) :: i -+ SUBROUTINE PLUMED_F_GINITIALIZED(i) -+ INTEGER, INTENT(OUT) :: i -+ SUBROUTINE PLUMED_F_GCREATE() -+ SUBROUTINE PLUMED_F_GCMD(key,val) -+ CHARACTER(LEN=*), INTENT(IN) :: key -+ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) -+ SUBROUTINE PLUMED_F_GFINALIZE() -+ SUBROUTINE PLUMED_F_GLOBAL(p) -+ CHARACTER(LEN=32), INTENT(OUT) :: p -+ SUBROUTINE PLUMED_F_CREATE(p) -+ CHARACTER(LEN=32), INTENT(OUT) :: p -+ SUBROUTINE PLUMED_F_CMD(p,key,val) -+ CHARACTER(LEN=32), INTENT(IN) :: p -+ CHARACTER(LEN=*), INTENT(IN) :: key -+ UNSPECIFIED_TYPE, INTENT(INOUT) :: val(*) -+ SUBROUTINE PLUMED_F_FINALIZE(p) -+ CHARACTER(LEN=32), INTENT(IN) :: p -+\endverbatim -+ -+ The main routine is "cmd", which accepts two arguments: -+ key is a string containing the name of the command -+ val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed -+ is going to modify val in several cases (using a const_cast). -+ In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted). -+ The set of possible keys is the real API of the plumed library, and will be expanded with time. -+ New commands will be added, but backward compatibility will be retained as long as possible. -+ -+ To pass plumed a callback function use the following syntax (not available in FORTRAN yet) -+\verbatim -+ plumed_function_holder ff; -+ ff.p=your_function; -+ plumed_cmd(plumed,"xxxx",&ff); -+\endverbatim -+ (this is passing the your_function() function to the "xxxx" command) -+*/ -+ -+#ifdef __cplusplus -+ extern "C" { -+#endif -+ -+/* Generic function pointer */ -+typedef void (*plumed_function_pointer)(void); -+ -+/** -+ \brief Holder for function pointer. -+ -+ To pass plumed a callback function use the following syntax: -+\verbatim -+ plumed_function_holder ff; -+ ff.p=your_function; -+ plumed_cmd(plumed,"xxxx",&ff); -+\endverbatim -+ (this is going to pass the your_function() function to the "xxxx" command) -+*/ -+ -+typedef struct { -+ plumed_function_pointer p; -+} plumed_function_holder; -+ -+/** -+ \brief Main plumed object -+ -+ This is an object containing a Plumed instance, which should be used in -+ the MD engine. It should first be initialized with plumed_create(), -+ then it communicates with the MD engine using plumed_cmd(). Finally, -+ before the termination, it should be deallocated with plumed_finalize(). -+ Its interface is very simple and general, and is expected -+ not to change across plumed versions. See \ref ReferencePlumedH. -+*/ -+typedef struct { -+/** -+ \private -+ \brief Void pointer holding the real PlumedMain structure -+*/ -+ void*p; -+} plumed; -+ -+/** \relates plumed -+ \brief Constructor -+ -+ \return The constructed plumed object -+*/ -+plumed plumed_create(void); -+ -+/** \relates plumed -+ \brief Tells p to execute a command -+ -+ \param p The plumed object on which command is acting -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like plumed_cmd(p,"A","B"), -+ but for some choice of key it can change the content -+*/ -+void plumed_cmd(plumed p,const char*key,const void*val); -+ -+/** \relates plumed -+ \brief Destructor -+ -+ \param p The plumed object to be deallocated -+*/ -+void plumed_finalize(plumed p); -+ -+/** \relates plumed -+ \brief Check if plumed is installed (for runtime binding) -+ -+ \return 1 if plumed is installed, to 0 otherwise -+*/ -+int plumed_installed(void); -+ -+/** \relates plumed -+ \brief Retrieves an handler to the global structure. -+*/ -+plumed plumed_global(void); -+ -+/** \relates plumed -+ \brief Check if the global interface has been initialized -+ -+ \return 1 if plumed has been initialized, 0 otherwise -+*/ -+int plumed_ginitialized(void); -+ -+/* global C interface, working on a global object */ -+ -+/** \relates plumed -+ \brief Constructor for the global interface. -+ -+ \note Equivalent to plumed_create(), but initialize a static global plumed object -+*/ -+void plumed_gcreate(void); -+ -+/** \relates plumed -+ \brief Tells to the global interface to execute a command. -+ -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like plumed_gcmd("A","B"), -+ but for some choice of key it can change the content -+ -+ \note Equivalent to plumed_cmd(), but skipping the plumed argument -+*/ -+void plumed_gcmd(const char* key,const void* val); -+ -+/** \relates plumed -+ \brief Destructor for the global interface. -+ -+ \note Equivalent to plumed_finalize(), but skipping the plumed argument -+*/ -+void plumed_gfinalize(void); -+ -+/* routines to convert char handler from/to plumed objects */ -+ -+/** \related plumed -+ \brief Converts a C handler to a FORTRAN handler -+ -+ \param p The C handler -+ \param c The FORTRAN handler (a char[32]) -+*/ -+void plumed_c2f(plumed p,char* c); -+ -+/** \related plumed -+ \brief Converts a FORTRAN handler to a C handler -+ \param c The FORTRAN handler (a char[32]) -+ \return The C handler -+*/ -+plumed plumed_f2c(const char* c); -+ -+#ifdef __cplusplus -+ } -+#endif -+ -+#ifdef __cplusplus -+ -+/* this is to include the NULL pointer */ -+#include -+ -+/* C++ interface is hidden in PLMD namespace (same as plumed library) */ -+namespace PLMD { -+ -+/** -+ C++ wrapper for \ref plumed. -+ -+ This class provides a C++ interface to PLUMED. -+*/ -+ -+class Plumed{ -+ plumed main; -+/** -+ keeps track if the object was created from scratch using -+ the defaults destructor (reference=false) or if it was imported -+ from C or FORTRAN (reference=true). In the latter case, the -+ plumed_finalize() method is not called when destructing the object, -+ since it is expected to be finalized in the C/FORTRAN code -+*/ -+ bool reference; -+public: -+/** -+ Check if plumed is installed (for runtime binding) -+ \return true if plumed is installed, false otherwise -+*/ -+ static bool installed(); -+/** -+ Check if global-plumed has been initialized -+ \return true if global plumed object (see global()) is initialized (i.e. if gcreate() has been -+ called), false otherwise. -+*/ -+ static bool ginitialized(); -+/** -+ Initialize global-plumed -+*/ -+ static void gcreate(); -+/** -+ Send a command to global-plumed -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like gcmd("A","B"), -+ but for some choice of key it can change the content -+*/ -+ static void gcmd(const char* key,const void* val); -+/** -+ Finalize global-plumed -+*/ -+ static void gfinalize(); -+/** -+ Returns the Plumed global object -+ \return The Plumed global object -+*/ -+ static Plumed global(); -+/** -+ Constructor -+*/ -+ Plumed(); -+/** -+ Clone a Plumed object from a FORTRAN char* handler -+ \param c The FORTRAN handler (a char[32]). -+ -+ \attention The Plumed object created in this manner -+ will not finalize the corresponding plumed structure. -+ It is expected that the FORTRAN code calls plumed_c_finalize for it -+*/ -+// to have maximum portability of this file I do not use the explicit keyword here -+// I thus add a suppress command for cppcheck -+// cppcheck-suppress noExplicitConstructor -+ Plumed(const char*c); -+/** -+ Clone a Plumed object from a C plumed structure -+ \param p The C plumed structure. -+ -+ \attention The Plumed object created in this manner -+ will not finalize the corresponding plumed structure. -+ It is expected that the C code calls plumed_finalize for it -+*/ -+// to have maximum portability of this file I do not use the explicit keyword here -+// I thus add a suppress command for cppcheck -+// cppcheck-suppress noExplicitConstructor -+ Plumed(plumed p); -+private: -+/** Copy constructor is disabled (private and unimplemented) -+ The problem here is that after copying it will not be clear who is -+ going to finalize the corresponding plumed structure. -+*/ -+ Plumed(const Plumed&); -+/** Assignment operator is disabled (private and unimplemented) -+ The problem here is that after copying it will not be clear who is -+ going to finalize the corresponding plumed structure. -+*/ -+ Plumed&operator=(const Plumed&); -+public: -+/** -+ Retrieve the C plumed structure for this object -+*/ -+ operator plumed()const; -+/** -+ Retrieve a FORTRAN handler for this object -+ \param c The FORTRAN handler (a char[32]). -+*/ -+ void toFortran(char*c)const; -+/** -+ Send a command to this plumed object -+ \param key The name of the command to be executed -+ \param val The argument. It is declared as const to allow calls like p.cmd("A","B"), -+ but for some choice of key it can change the content -+*/ -+ void cmd(const char*key,const void*val=NULL); -+/** -+ Destructor -+ -+ Destructor is virtual so as to allow correct inheritance from Plumed object. -+ To avoid linking problems with g++, I specify "inline" also here (in principle -+ it should be enough to specify it down in the definition of the function, but -+ for some reason that I do not understand g++ does not inline it properly in that -+ case and complains when Plumed.h is included but Plumed.o is not linked. Anyway, the -+ way it is done here seems to work properly). -+*/ -+ inline virtual ~Plumed(); -+}; -+ -+/* All methods are inlined so as to avoid the compilation of an extra c++ file */ -+ -+inline -+bool Plumed::installed(){ -+ return plumed_installed(); -+} -+ -+inline -+Plumed::Plumed(): -+ main(plumed_create()), -+ reference(false) -+{} -+ -+inline -+Plumed::Plumed(const char*c): -+ main(plumed_f2c(c)), -+ reference(true) -+{} -+ -+inline -+Plumed::Plumed(plumed p): -+ main(p), -+ reference(true) -+{} -+ -+inline -+Plumed::operator plumed()const{ -+ return main; -+} -+ -+inline -+void Plumed::toFortran(char*c)const{ -+ plumed_c2f(main,c); -+} -+ -+inline -+void Plumed::cmd(const char*key,const void*val){ -+ plumed_cmd(main,key,val); -+} -+ -+inline -+Plumed::~Plumed(){ -+ if(!reference)plumed_finalize(main); -+} -+ -+inline -+bool Plumed::ginitialized(){ -+ return plumed_ginitialized(); -+} -+ -+inline -+void Plumed::gcreate(){ -+ plumed_gcreate(); -+} -+ -+inline -+void Plumed::gcmd(const char* key,const void* val){ -+ plumed_gcmd(key,val); -+} -+ -+inline -+void Plumed::gfinalize(){ -+ plumed_gfinalize(); -+} -+ -+inline -+Plumed Plumed::global(){ -+ return plumed_global(); -+} -+ -+} -+ -+#endif -+ -+ -+#endif -diff -urN dl_class_1.9.orig/Plumed.inc dl_class_1.9/Plumed.inc ---- dl_class_1.9.orig/Plumed.inc 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/Plumed.inc 2015-11-09 14:26:16.827714651 +0100 -@@ -0,0 +1,3 @@ -+# PLUMED: runtime installation -+PLUMED_LOAD= -L$(EBROOTPLUMED)/lib -lplumed -ldl -+PLUMED_DEPENDENCIES= -diff -urN dl_class_1.9.orig/srcmod/angles_module.f dl_class_1.9/srcmod/angles_module.f ---- dl_class_1.9.orig/srcmod/angles_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/angles_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,741 @@ -+ module angles_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining valence angle potentials -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c modified - p.-a.cazade oct 2007 : solvation etc. -+c modified - d. quigley 2010 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmang(:,:) -+ integer, allocatable :: listang(:,:) -+ integer, allocatable :: numang(:),keyang(:),lstang(:,:) -+ -+ save prmang,listang,numang,keyang,lstang -+ -+ contains -+ -+ subroutine alloc_ang_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining valence angle potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmang(mxtang,mxpang),stat=fail(1)) -+ allocate (numang(mxtmls),stat=fail(2)) -+ allocate (keyang(mxtang),stat=fail(3)) -+ allocate (lstang(mxtang,3),stat=fail(4)) -+ allocate (listang(mxangl,4),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1010) -+ enddo -+ -+ do i=1,mxtmls -+ numang(i)=0 -+ enddo -+ -+ end subroutine alloc_ang_arrays -+ -+ subroutine define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining bond angles -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,nangle,nsite,ntmp,i,iang,iang1 -+ integer idum,iatm1,iatm2,iatm3,isite1,isite2,isite3,ia,ja -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numang(itmols)=numang(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of bond angles', -+ x 10x,i10)")ntmp -+ write(nrite,"(/,/,1x,'bond angle details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'f-const',7x,'angle',/)") -+ endif -+ -+ iang1=numang(itmols) -+ do iang=1,iang1 -+ -+c read bond angle potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3).ne.0)then -+ -+ numang(itmols)=numang(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nangle=nangle+1 -+ -+ if(nangle.gt.mxtang)call error(idnode,50) -+ -+ if(keyword(1:4).eq.'harm')then -+ keyang(nangle)=1 -+ elseif(keyword(1:4).eq.'-hrm')then -+ keyang(nangle)=-1 -+ elseif(keyword(1:4).eq.'quar')then -+ keyang(nangle)=2 -+ elseif(keyword(1:4).eq.'-qur')then -+ keyang(nangle)=-2 -+ elseif(keyword(1:4).eq.'thrm')then -+ keyang(nangle)=3 -+ elseif(keyword(1:4).eq.'-thm')then -+ keyang(nangle)=-3 -+ elseif(keyword(1:4).eq.'shrm')then -+ keyang(nangle)=4 -+ elseif(keyword(1:4).eq.'-shm')then -+ keyang(nangle)=-4 -+ elseif(keyword(1:4).eq.'bvs1')then -+ keyang(nangle)=5 -+ elseif(keyword(1:4).eq.'-bv1')then -+ keyang(nangle)=-5 -+ elseif(keyword(1:4).eq.'bvs2')then -+ keyang(nangle)=6 -+ elseif(keyword(1:4).eq.'-bv2')then -+ keyang(nangle)=-6 -+ elseif(keyword(1:4).eq.'hcos')then -+ keyang(nangle)=7 -+ elseif(keyword(1:4).eq.'-hcs')then -+ keyang(nangle)=-7 -+ elseif(keyword(1:4).eq.'cos ')then -+ keyang(nangle)=8 -+ elseif(keyword(1:4).eq.'-cos')then -+ keyang(nangle)=-8 -+ elseif(keyword(1:4).eq.'mmsb')then -+ keyang(nangle)=9 -+ elseif(keyword(1:4).eq.'-msb')then -+ keyang(nangle)=-9 -+ elseif(keyword(1:4).eq.'stst') then -+ keyang(nangle)=10 -+ elseif(keyword(1:4).eq.'-sts') then -+ keyang(nangle)=-10 -+ elseif(keyword(1:4).eq.'stbe') then -+ keyang(nangle)=11 -+ elseif(keyword(1:4).eq.'-stb') then -+ keyang(nangle)=-11 -+ elseif(keyword(1:4).eq.'cmps') then -+ keyang(nangle)=12 -+ elseif(keyword(1:4).eq.'-cmp') then -+ keyang(nangle)=-12 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,440) -+ endif -+ -+ lstang(nangle,1)=iatm1 -+ lstang(nangle,2)=iatm2 -+ lstang(nangle,3)=iatm3 -+ prmang(nangle,1)=dblstr(record,lenrec,idum) -+ prmang(nangle,2)=dblstr(record,lenrec,idum) -+ prmang(nangle,3)=dblstr(record,lenrec,idum) -+ prmang(nangle,4)=dblstr(record,lenrec,idum) -+ prmang(nangle,5)=dblstr(record,lenrec,idum) -+ prmang(nangle,6)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,3i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstang(nangle,ia),ia=1,3), -+ x (prmang(nangle,ja),ja=1,mxpang) -+ -+c convert energies to internal units -+ -+ prmang(nangle,1)=prmang(nangle,1)*engunit -+ if(abs(keyang(nangle)).eq.2)then -+ prmang(nangle,3)=prmang(nangle,3)*engunit -+ prmang(nangle,4)=prmang(nangle,4)*engunit -+ elseif(abs(keyang(nangle)).eq.12)then -+ prmang(nangle,2)=prmang(nangle,2)*engunit -+ prmang(nangle,3)=prmang(nangle,3)*engunit -+ endif -+ -+c convert angles to radians -+ -+ if(abs(keyang(nangle)).eq.12)then -+ prmang(nangle,4)=prmang(nangle,4)*(pi/180.d0) -+ elseif(abs(keyang(nangle)).ne.10)then -+ prmang(nangle,2)=prmang(nangle,2)*(pi/180.d0) -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_angles -+ -+ subroutine angfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating bond angle energy and -+c force terms in molecular dynamics. -+c -+c replicated data - blocked version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992 -+c modified - t. forester feb 1993 -+c modified - t. forester nov 1994 : block data -+c modified - t. forester may 1995 : stress tensor -+c modified - p.-a.cazade oct 2007 : solvation etc. -+c modified - d. quigley nov 2010 : metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive,kdrive -+ integer idnode,mxnode,imcon,ntangl,fail1,fail2 -+ integer ii,iang1,iang2,i,ia,ib,ic,kk,keya -+ real(8) engang,virang,theta,fxc,fyc,fzc,rab,xab -+ real(8) yab,zab,rbc,xbc,ybc,zbc,sint,cost,pterm,vterm -+ real(8) gamma,gamsa,gamsc,rrbc,rrab,fxa,fya,fza -+ real(8) strs(6),strs_loc(6) -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) -+ if(fail1.ne.fail2)call error(idnode,1020) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntangl-mxnode+1)/mxnode.gt.msbad)call error(idnode,419) -+ -+c block indices -+ -+ iang1=(idnode*ntangl)/mxnode+1 -+ iang2=((idnode+1)*ntangl)/mxnode -+ -+c zero accumulators -+ -+ engang=0.d0 -+ virang=0.d0 -+ ang_fre=0.d0 -+ ang_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(2)=.true. -+ ang_sol(:)=0.d0 -+ if(lexcite)ang_exc(:)=0.d0 -+ -+ endif -+ -+c calculate atom separation vectors -+ -+ ii=0 -+ do i=iang1,iang2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listang(ii,2) -+ ib=listang(ii,3) -+ ic=listang(ii,4) -+ -+c components of first bond vector -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+c components of second bond vector -+ -+ xdbc(ii)=xxx(ic)-xxx(ib) -+ ydbc(ii)=yyy(ic)-yyy(ib) -+ zdbc(ii)=zzz(ic)-zzz(ib) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) -+ -+c loop over all specified angle potentials -+ -+ ii=0 -+ do i=iang1,iang2 -+ -+ ii=ii+1 -+ -+c define components of first bond vector -+ -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ rrab=1.d0/rab -+ -+ xab=xdab(ii)*rrab -+ yab=ydab(ii)*rrab -+ zab=zdab(ii)*rrab -+ -+c define components of second bond vector -+ -+ rbc=sqrt(xdbc(ii)**2+ydbc(ii)**2+zdbc(ii)**2) -+ rrbc=1.d0/rbc -+ -+ xbc=xdbc(ii)*rrbc -+ ybc=ydbc(ii)*rrbc -+ zbc=zdbc(ii)*rrbc -+ -+c index of potential function parameters -+ -+ kk=listang(ii,1) -+ -+c determine bond angle and calculate potential energy -+ -+ cost=(xab*xbc+yab*ybc+zab*zbc) -+ theta=acos(cost) -+ sint=max(1.d-8,sqrt(1.d0-cost**2)) -+ -+ keya=abs(keyang(kk)) -+ -+ if(keya.eq.1)then -+ -+c harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2 -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.2)then -+ -+c quartic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2+ -+ x 1.d0/3.d0*prmang(kk,3)*(theta-prmang(kk,2))**3+ -+ x 0.25d0*prmang(kk,4)*(theta-prmang(kk,2))**4 -+ gamma=(prmang(kk,1)*(theta-prmang(kk,2))+ -+ x prmang(kk,3)*(theta-prmang(kk,2))**2+ -+ x prmang(kk,4)*(theta-prmang(kk,2))**3)/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.3)then -+ -+c truncated harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* -+ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8) -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))* -+ x exp(-(rab**8+rbc**8)/prmang(kk,3)**8)/sint -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,3)**8 -+ gamsa=(8.d0*pterm/prmang(kk,3)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmang(kk,3)**8)*rbc**7 -+ -+ elseif(keya.eq.4)then -+ -+c screened harmonic potential -+ -+ pterm=0.5d0*prmang(kk,1)*(theta-prmang(kk,2))**2* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) -+ gamma=prmang(kk,1)*(theta-prmang(kk,2))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint -+ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) -+ gamsa=(pterm/prmang(kk,3)) -+ gamsc=(pterm/prmang(kk,4)) -+ -+ elseif(keya.eq.5)then -+ -+c screened vessal potential (type 1) -+ -+ pterm=(prmang(kk,1)/(8.d0*(prmang(kk,2)-pi)**2)* -+ x (((prmang(kk,2)-pi)**2-(theta-pi)**2)**2))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4))) -+ gamma=(prmang(kk,1)/(2.d0*(prmang(kk,2)-pi)**2)* -+ x ((prmang(kk,2)-pi)**2-(theta-pi)**2)*(theta-pi))* -+ x exp(-(rab/prmang(kk,3)+rbc/prmang(kk,4)))/sint -+ vterm=-pterm*(rab/prmang(kk,3)+rbc/prmang(kk,4)) -+ gamsa=(pterm/prmang(kk,3)) -+ gamsc=(pterm/prmang(kk,4)) -+ -+ elseif(keya.eq.6)then -+ -+c truncated vessal potential (type 2) -+ -+ pterm=prmang(kk,1)*(theta**prmang(kk,3)*(theta-prmang(kk,2)) -+ x **2*(theta+prmang(kk,2)-2.d0*pi)**2-0.5d0*prmang(kk,3)*pi -+ x **(prmang(kk,3)-1.d0)*(theta-prmang(kk,2))**2*(pi-prmang(kk, -+ x 2))**3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8) -+ gamma=prmang(kk,1)*(theta**(prmang(kk,3)-1.d0)*(theta-prmang -+ x (kk,2))*(theta+prmang(kk,2)-2.d0*pi)*((prmang(kk,3)+4.d0)* -+ x theta**2-2.d0*pi*(prmang(kk,3)+2.d0)*theta+prmang(kk,3)* -+ x prmang(kk,2)*(2.d0*pi-prmang(kk,2)))-prmang(kk,3)*pi** -+ x (prmang(kk,3)-1.d0)*(theta-prmang(kk,2))*(pi-prmang(kk,2)) -+ x **3)*exp(-(rab**8+rbc**8)/prmang(kk,4)**8)/sint -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmang(kk,4)**8 -+ gamsa=(8.d0*pterm/prmang(kk,4)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmang(kk,4)**8)*rbc**7 -+ -+ elseif(keya.eq.7)then -+ -+c harmonic cosine potential -+ -+ pterm=0.5d0*prmang(kk,1)*(cos(theta)-cos(prmang(kk,2)))**2 -+ gamma=-prmang(kk,1)*(cos(theta)-cos(prmang(kk,2))) -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.8)then -+ -+c ordinary cosine potential -+ -+ pterm=prmang(kk,1)*(1+cos(prmang(kk,3)*theta-prmang(kk,2))) -+ gamma=-prmang(kk,1)*prmang(kk,3)*sin(prmang(kk,3)*theta- -+ x prmang(kk,2))/sint -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ elseif(keya.eq.9)then -+ -+c mm3 stretch-bend potential -+ -+ pterm=prmang(kk,1)*(theta-prmang(kk,2))* -+ x (rab-prmang(kk,3))*(rbc-prmang(kk,4)) -+ gamma=prmang(kk,1)*(rab-prmang(kk,3))*(rbc- -+ x prmang(kk,4))/sint -+ gamsa=-prmang(kk,1)*(theta-prmang(kk,2))*(rbc-prmang(kk,4)) -+ gamsc=-prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ elseif(keya.eq.10)then -+ -+c compass stretch-stretch potential -+ -+ pterm=prmang(kk,1)*(rab-prmang(kk,2))*(rbc-prmang(kk,3)) -+ gamma=0.d0 -+ gamsa=-prmang(kk,1)*(rbc-prmang(kk,3)) -+ gamsc=-prmang(kk,1)*(rab-prmang(kk,2)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ elseif(keya.eq.11)then -+ -+c compass stretch-bend potential -+ -+ pterm=prmang(kk,1)*(theta-prmang(kk,2))*(rab-prmang(kk,3)) -+ gamma=prmang(kk,1)*(rab-prmang(kk,3))/sint -+ gamsa=-prmang(kk,1)*(theta-prmang(kk,2)) -+ gamsc=0.d0 -+ vterm=-gamsa*rab -+ -+ elseif(keya.eq.12)then -+ -+c combined compass angle potential with 3 coupling terms -+ -+ pterm=prmang(kk,1)*(rab-prmang(kk,5))*(rbc-prmang(kk,6))+ -+ x (theta-prmang(kk,4))*(prmang(kk,2)*(rab-prmang(kk,5))+ -+ x prmang(kk,3)*(rbc-prmang(kk,6))) -+ gamma=(prmang(kk,2)*(rab-prmang(kk,5))+ -+ x prmang(kk,3)*(rbc-prmang(kk,6)))/sint -+ gamsa=-prmang(kk,2)*(theta-prmang(kk,4))- -+ x prmang(kk,1)*(rbc-prmang(kk,6)) -+ gamsc=-prmang(kk,3)*(theta-prmang(kk,4))- -+ x prmang(kk,1)*(rab-prmang(kk,5)) -+ vterm=-(gamsa*rab+gamsc*rbc) -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ pterm=0.d0 -+ vterm=0.d0 -+ gamma=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listang(ii,2) -+ ib=listang(ii,3) -+ ic=listang(ii,4) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) -+ -+ if(lsolva)then -+ ang_exc(atmolt(ia))=ang_exc(atmolt(ia))+pterm -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ ang_fre=ang_fre-pterm -+ ang_vir=ang_vir-vterm -+ pterm=lambda1*pterm -+ vterm=lambda1*vterm -+ gamma=lambda1*gamma -+ gamsa=lambda1*gamsa -+ gamsc=lambda1*gamsc -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ ang_fre=ang_fre+pterm -+ ang_vir=ang_vir+vterm -+ pterm=lambda2*pterm -+ vterm=lambda2*vterm -+ gamma=lambda2*gamma -+ gamsa=lambda2*gamsa -+ gamsc=lambda2*gamsc -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c sum potential energy and virial -+ -+ engang=engang+pterm -+ virang=virang+vterm -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ ang_sol(atmolt(ia))=ang_sol(atmolt(ia))+pterm -+ endif -+ -+c calculate atomic forces -+ -+ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab -+ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab -+ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab -+ -+ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc -+ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc -+ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc -+ -+c sum atomic forces -+ -+ fxx(ia)=fxx(ia)+fxa -+ fyy(ia)=fyy(ia)+fya -+ fzz(ia)=fzz(ia)+fza -+ -+ fxx(ib)=fxx(ib)-fxa-fxc -+ fyy(ib)=fyy(ib)-fya-fyc -+ fzz(ib)=fzz(ib)-fza-fzc -+ -+ fxx(ic)=fxx(ic)+fxc -+ fyy(ic)=fyy(ic)+fyc -+ fzz(ic)=fzz(ic)+fzc -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc -+ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc -+ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc -+ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc -+ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+pterm -+ vir_loc=vir_loc+vterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fxa -+ fyy_loc(ia)=fyy_loc(ia)+fya -+ fzz_loc(ia)=fzz_loc(ia)+fza -+ -+ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc -+ fyy_loc(ib)=fyy_loc(ib)-fya-fyc -+ fzz_loc(ib)=fzz_loc(ib)-fza-fzc -+ -+ fxx_loc(ic)=fxx_loc(ic)+fxc -+ fyy_loc(ic)=fyy_loc(ic)+fyc -+ fzz_loc(ic)=fzz_loc(ic)+fzc -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc -+ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc -+ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc -+ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc -+ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,440) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c sum up contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engang -+ buffer(2)=virang -+ buffer(3)=ang_fre -+ buffer(4)=ang_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engang=buffer(1) -+ virang=buffer(2) -+ ang_fre=buffer(3) -+ ang_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(ang_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(ang_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdbc,ydbc,zdbc,stat=fail2) -+ -+ return -+ end subroutine angfrc -+ -+ end module angles_module -diff -urN dl_class_1.9.orig/srcmod/basic_comms.f dl_class_1.9/srcmod/basic_comms.f ---- dl_class_1.9.orig/srcmod/basic_comms.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/basic_comms.f 2015-11-09 14:52:08.086294333 +0100 -@@ -0,0 +1,389 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c communication harness initialisation -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_init MPI_init_ -+ -+ call MPI_init(ierr) -+ -+ return -+ end -+ -+c PLUMED -+ integer*8 function get_comms() -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining the communicator -+c this is used by plumed -+c -+c author - G. Tribello -+c -+c********************************************************************* -+ -+ get_comms=MPI_COMM_WORLD -+ end -+ -+ subroutine machine(idnode,mxnode) -+c PLUMED -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining charcteristics of -+c the computer on which the program is being run -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,mynode,numnodes -+ -+ idnode=mynode() -+ mxnode=numnodes() -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c routine to determine identity of processing node -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ -+ -+ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c calculate dimension of hypercube -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer i,n,ierr,mxnode -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) -+ n=1 -+ nodedim = -1 -+ do i=0,16 -+ -+ if(n.eq.mxnode)nodedim=i -+ n=2*n -+ -+ enddo -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c calculate number of nodes -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) -+ -+ return -+ end -+ -+ subroutine csend(tagmsg,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c Intel-like csend (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length,pe,idum -+ -+ integer ierr -+ real(8) buf(*) -+ -+CMPIU define MPI_send MPI_send_ -+ -+ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, -+ x MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine crecv(tagmsg,buf,length) -+ -+c********************************************************************* -+c -+c Intel-like crecv (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length -+ -+ integer ierr -+ integer status(MPI_STATUS_SIZE) -+ real(8) buf(*) -+ -+CMPIU define MPI_RECV MPI_RECV_ -+ -+ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, -+ x tagmsg,MPI_COMM_WORLD,status,ierr) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for MPI - hypercube assumed -+c double precision version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,ierror -+ real(8) aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global maximum subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_MAX,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dl_poly global status subroutine : gisum version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c MPI version - t. forester may 1995 -+c -+c*********************************************************************** -+ -+ -+ implicit none -+ -+ logical check -+ integer i,idum -+ -+ i = 0 -+ if(.not.check) i = 1 -+ -+ call gisum(i,1,idum) -+ -+ check = (i.eq.0) -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c barrier / synchronization routine -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ierr -+ -+ include "comms.inc" -+ -+CMPIU define MPI_BARRIER MPI_BARRIER_ -+ -+ call MPI_BARRIER(MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c exitcomms: exit from communication harness -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+CMPIU define MPI_FINALIZE MPI_FINALIZE_ -+ -+ call MPI_FINALIZE(ierr) -+ call exit(0) -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/basic_comms.f.preplumed dl_class_1.9/srcmod/basic_comms.f.preplumed ---- dl_class_1.9.orig/srcmod/basic_comms.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/basic_comms.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,373 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c communication harness initialisation -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_init MPI_init_ -+ -+ call MPI_init(ierr) -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for obtaining charcteristics of -+c the computer on which the program is being run -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,mynode,numnodes -+ -+ idnode=mynode() -+ mxnode=numnodes() -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c routine to determine identity of processing node -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_RANK MPI_COMM_RANK_ -+ -+ call MPI_COMM_RANK(MPI_COMM_WORLD, mynode ,ierr) -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c calculate dimension of hypercube -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer i,n,ierr,mxnode -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, mxnode ,ierr) -+ n=1 -+ nodedim = -1 -+ do i=0,16 -+ -+ if(n.eq.mxnode)nodedim=i -+ n=2*n -+ -+ enddo -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c calculate number of nodes -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+ -+CMPIU define MPI_COMM_SIZE MPI_COMM_SIZE_ -+ -+ call MPI_COMM_SIZE(MPI_COMM_WORLD, numnodes, ierr) -+ -+ return -+ end -+ -+ subroutine csend(tagmsg,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c Intel-like csend (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length,pe,idum -+ -+ integer ierr -+ real(8) buf(*) -+ -+CMPIU define MPI_send MPI_send_ -+ -+ call MPI_send(buf,length,MPI_DOUBLE_PRECISION,pe,tagmsg, -+ x MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine crecv(tagmsg,buf,length) -+ -+c********************************************************************* -+c -+c Intel-like crecv (double precision) -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer tagmsg,length -+ -+ integer ierr -+ integer status(MPI_STATUS_SIZE) -+ real(8) buf(*) -+ -+CMPIU define MPI_RECV MPI_RECV_ -+ -+ call MPI_RECV(buf,length,MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, -+ x tagmsg,MPI_COMM_WORLD,status,ierr) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,ierror,iii,kk,k,k0,k1,k2,msg1,msg2 -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global summation subroutine for MPI - hypercube assumed -+c double precision version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,ierror -+ real(8) aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+ -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_DOUBLE_PRECISION, -+ x MPI_SUM,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly global maximum subroutine for hypercube - MPI version -+c integer version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ integer nnn,i,iii,kk,k1,k2,k,k0msg1,msg2,ierror -+ integer aaa(nnn),bbb(nnn) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE) -+CMPIU define MPI_allreduce MPI_allreduce_ -+ -+ call MPI_allreduce(aaa,bbb,nnn,MPI_INTEGER, -+ x MPI_MAX,MPI_COMM_WORLD,ierror) -+ -+ do i = 1,nnn -+ aaa(i) = bbb(i) -+ enddo -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dl_poly global status subroutine : gisum version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c MPI version - t. forester may 1995 -+c -+c*********************************************************************** -+ -+ -+ implicit none -+ -+ logical check -+ integer i,idum -+ -+ i = 0 -+ if(.not.check) i = 1 -+ -+ call gisum(i,1,idum) -+ -+ check = (i.eq.0) -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c barrier / synchronization routine -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ierr -+ -+ include "comms.inc" -+ -+CMPIU define MPI_BARRIER MPI_BARRIER_ -+ -+ call MPI_BARRIER(MPI_COMM_WORLD,ierr) -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c exitcomms: exit from communication harness -+c -+c copyright - daresbury laboratory -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer ierr -+CMPIU define MPI_FINALIZE MPI_FINALIZE_ -+ -+ call MPI_FINALIZE(ierr) -+ call exit(0) -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/bonds_module.f dl_class_1.9/srcmod/bonds_module.f ---- dl_class_1.9.orig/srcmod/bonds_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/bonds_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,579 @@ -+ module bonds_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c adapted for metadynamics -+c - d. quigley 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmbnd(:,:) -+ integer, allocatable :: listbnd(:,:) -+ integer, allocatable :: numbonds(:),keybnd(:),lstbnd(:,:) -+ -+ save prmbnd,listbnd,numbonds,keybnd,lstbnd -+ -+ contains -+ -+ subroutine alloc_bnd_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmbnd(mxtbnd,mxpbnd),stat=fail(1)) -+ allocate (numbonds(mxtmls),stat=fail(2)) -+ allocate (keybnd(mxtbnd),stat=fail(3)) -+ allocate (lstbnd(mxtbnd,3),stat=fail(4)) -+ allocate (listbnd(mxbond,4),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+ do i=1,mxtmls -+ numbonds(i)=0 -+ enddo -+ -+ end subroutine alloc_bnd_arrays -+ -+ subroutine define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining bonds -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,nbonds,nsite,ntmp,ibond,ibond1 -+ integer iatm1,iatm2,isite1,isite2,idum,i,j -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numbonds(itmols)=numbonds(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of chemical bonds', -+ x 7x,i10)")ntmp -+ write(nrite,"(/,/,1x,'chemical bond details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',28x, -+ x 'parameters', /)") -+ endif -+ -+ ibond1=numbonds(itmols) -+ do ibond=1,ibond1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0)then -+ -+ numbonds(itmols)=numbonds(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(12x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nbonds=nbonds+1 -+ if(nbonds.gt.mxtbnd)call error(idnode,30) -+ -+ if(keyword(1:4).eq.'harm')then -+ keybnd(nbonds)=1 -+ elseif(keyword(1:4).eq.'-hrm')then -+ keybnd(nbonds)=-1 -+ elseif(keyword(1:4).eq.'mors')then -+ keybnd(nbonds)=2 -+ elseif(keyword(1:4).eq.'-mrs')then -+ keybnd(nbonds)=-2 -+ elseif(keyword(1:4).eq.'12-6')then -+ keybnd(nbonds)=3 -+ elseif(keyword(1:4).eq.'-126')then -+ keybnd(nbonds)=-3 -+ elseif(keyword(1:4).eq.'rhrm')then -+ keybnd(nbonds)=4 -+ elseif(keyword(1:4).eq.'-rhm')then -+ keybnd(nbonds)=-4 -+ elseif(keyword(1:4).eq.'quar')then -+ keybnd(nbonds)=5 -+ elseif(keyword(1:4).eq.'-qur')then -+ keybnd(nbonds)=-5 -+ elseif(keyword(1:4).eq.'buck')then -+ keybnd(nbonds)=6 -+ elseif(keyword(1:4).eq.'-bck')then -+ keybnd(nbonds)=-6 -+ elseif(keyword(1:4).eq.'fene')then -+ keybnd(nbonds)=7 -+ elseif(keyword(1:4).eq.'-fen')then -+ keybnd(nbonds)=-7 -+ elseif(keyword(1:4).eq.'coul')then -+ keybnd(nbonds)=8 -+ elseif(keyword(1:4).eq.'-cou')then -+ keybnd(nbonds)=-8 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,444) -+ endif -+ -+ lstbnd(nbonds,1)=iatm1 -+ lstbnd(nbonds,2)=iatm2 -+ prmbnd(nbonds,1)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,2)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,3)=dblstr(record,lenrec,idum) -+ prmbnd(nbonds,4)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,2i10,2x,1p,10e15.6)") -+ x keyword(1:4),lstbnd(nbonds,1), -+ x lstbnd(nbonds,2),(prmbnd(nbonds,j),j=1,mxpbnd) -+c -+c convert energy units to internal units -+ -+ if(abs(keybnd(nbonds)).eq.3)then -+ prmbnd(nbonds,2)=prmbnd(nbonds,2)*engunit -+ endif -+ if(abs(keybnd(nbonds)).eq.5)then -+ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit -+ prmbnd(nbonds,4)=prmbnd(nbonds,4)*engunit -+ endif -+ if(abs(keybnd(nbonds)).eq.6)then -+ prmbnd(nbonds,3)=prmbnd(nbonds,3)*engunit -+ endif -+ -+ if(abs(keybnd(nbonds)).ne.8) -+ x prmbnd(nbonds,1)=prmbnd(nbonds,1)*engunit -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_bonds -+ -+ subroutine bndfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating chemical bond energy and -+c force terms in molecular dynamics. -+c -+c replicated data - blocked data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c modified - t. forester march 1993 -+c modified - t. forester march 1994 -+c modified - t. forester may 1994 -+c modified - t. forester nov 1994 -+c modified - w. smith nov 2006 -+c modified - p.-a. cazade oct 2007, solvation etc. -+c modified - d. quigley 2007, metdynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive -+ integer i,fail,ibnd1,ibnd2,idnode,mxnode,ii,ia,ib,imcon -+ integer keyb,kk,ntbond -+ real(8) strs(6),strs_loc(6) -+ real(8) rab,rrab,omega,gamma,fx,fy,fz,engbnd,virbnd,epsq -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) -+ if(fail.ne.0)call error(idnode,1040) -+ -+c flag for undefined potential -+ -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntbond-mxnode+1)/mxnode.gt.msbad)call error(idnode,418) -+ -+c block indices -+ -+ ibnd1=(idnode*ntbond)/mxnode+1 -+ ibnd2=((idnode+1)*ntbond)/mxnode -+ -+c initialise accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ bnd_fre=0.d0 -+ bnd_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(1)=.true. -+ bnd_sol(:)=0.d0 -+ if(lexcite)bnd_exc(:)=0.d0 -+ -+ endif -+ -+c calculate atom separation vectors -+ -+ ii=0 -+ do i=ibnd1,ibnd2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listbnd(ii,2) -+ ib=listbnd(ii,3) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ -+ endif -+ -+c components of bond vector -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ -+c loop over all specified chemical bond potentials -+ -+ ii=0 -+ do i=ibnd1,ibnd2 -+ -+ ii=ii+1 -+ -+c define components of bond vector -+ -+ rrab=0.d0 -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ if(rab.gt.1.d-6)rrab=1.d0/rab -+ -+c index of potential function parameters -+ -+ kk=listbnd(ii,1) -+ keyb=abs(keybnd(kk)) -+ -+c calculate scalar constant terms -+ -+ if(keyb.eq.0)then -+ -+c null interaction -+ -+ omega=0.d0 -+ gamma=0.d0 -+ -+ elseif(keyb.eq.1)then -+ -+c harmonic potential -+ -+ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2 -+ gamma=prmbnd(kk,1)*(rab-prmbnd(kk,2))*rrab -+ -+ else if(keyb.eq.2)then -+ -+c morse potential -+ -+ omega=prmbnd(kk,1)*((1.d0-exp(-prmbnd(kk,3)* -+ x (rab-prmbnd(kk,2))))**2-1.d0) -+ gamma=2.d0*prmbnd(kk,1)*prmbnd(kk,3)*(1.d0- -+ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2))))* -+ x exp(-prmbnd(kk,3)*(rab-prmbnd(kk,2)))*rrab -+ -+ else if(keyb.eq.3)then -+ -+c 12-6 potential -+ -+ omega=(prmbnd(kk,1)*rrab**6-prmbnd(kk,2))*rrab**6 -+ gamma=(6.d0*prmbnd(kk,2)-12.d0*prmbnd(kk,1)*rrab**6)* -+ x rrab**8 -+ -+ elseif(keyb.eq.4)then -+ -+c restrained harmonic -+ -+ rab=rab-prmbnd(kk,2) -+ omega=0.5d0*prmbnd(kk,1)*(min(abs(rab),prmbnd(kk,3)))**2 -+ x +prmbnd(kk,1)*prmbnd(kk,3)*max(abs(rab)-prmbnd(kk,3),0.d0) -+ gamma=rrab*prmbnd(kk,1)*(sign(min(abs(rab),prmbnd(kk,3)),rab)) -+ -+ elseif(keyb.eq.5)then -+ -+c quartic potential -+ -+ omega=0.5d0*prmbnd(kk,1)*(rab-prmbnd(kk,2))**2+ -+ x 1.d0/3.d0*prmbnd(kk,3)*(rab-prmbnd(kk,2))**3+ -+ x 0.25d0*prmbnd(kk,4)*(rab-prmbnd(kk,2))**4 -+ gamma=rrab*(prmbnd(kk,1)*(rab-prmbnd(kk,2))+ -+ x prmbnd(kk,3)*(rab-prmbnd(kk,2))**2+ -+ x prmbnd(kk,4)*(rab-prmbnd(kk,2))**3) -+ -+ else if(keyb.eq.6)then -+ -+c buckingham exp-6 potential -+ -+ omega=prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))-prmbnd(kk,3)* -+ x rrab**6 -+ gamma=-rrab*prmbnd(kk,1)*exp(-rab/prmbnd(kk,2))/prmbnd(kk,2)+ -+ x 6.d0*prmbnd(kk,3)*rrab**8 -+ -+ else if(keyb.eq.7)then -+ -+c FENE bond potential -+ -+ omega=-0.5d0*prmbnd(kk,1)*prmbnd(kk,2)**2*log(1.d0- -+ x ((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) -+ gamma=rrab*prmbnd(kk,1)*(rab-prmbnd(kk,3))/ -+ x (1.d0-((rab-prmbnd(kk,3))/prmbnd(kk,2))**2) -+ -+ else if(keyb.eq.8)then -+ -+c coulomb bond potential -+ -+ omega=prmbnd(kk,1)*prmbnd(kk,2)*rrab*r4pie0/epsq -+ gamma=-omega*rrab*rrab -+ -+ else -+ -+c undefined potential -+ -+ omega=0.d0 -+ gamma=0.d0 -+ safe=.false. -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listbnd(ii,2) -+ ib=listbnd(ii,3) -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib).eq.0) -+ -+ if(lsolva)then -+ bnd_exc(atmolt(ia))=bnd_exc(atmolt(ia))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ bnd_fre=bnd_fre-omega -+ bnd_vir=bnd_vir-gamma*rab*rab -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ bnd_fre=bnd_fre+omega -+ bnd_vir=bnd_vir+gamma*rab*rab -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate bond energy and virial -+ -+ engbnd=engbnd+omega -+ virbnd=virbnd+gamma*rab*rab -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ bnd_sol(atmolt(ia))=bnd_sol(atmolt(ia))+omega -+ endif -+ -+c calculate forces -+ -+ fx=-gamma*xdab(ii) -+ fy=-gamma*ydab(ii) -+ fz=-gamma*zdab(ii) -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(ib)=fxx(ib)-fx -+ fyy(ib)=fyy(ib)-fy -+ fzz(ib)=fzz(ib)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdab(ii)*fx -+ strs(2)=strs(2)+xdab(ii)*fy -+ strs(3)=strs(3)+xdab(ii)*fz -+ strs(4)=strs(4)+ydab(ii)*fy -+ strs(5)=strs(5)+ydab(ii)*fz -+ strs(6)=strs(6)+zdab(ii)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc+gamma*rab*rab -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(ib)=fxx_loc(ib)-fx -+ fyy_loc(ib)=fyy_loc(ib)-fy -+ fzz_loc(ib)=fzz_loc(ib)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdab(ii)*fx -+ strs_loc(2)=strs_loc(2)+xdab(ii)*fy -+ strs_loc(3)=strs_loc(3)+xdab(ii)*fz -+ strs_loc(4)=strs_loc(4)+ydab(ii)*fy -+ strs_loc(5)=strs_loc(5)+ydab(ii)*fz -+ strs_loc(6)=strs_loc(6)+zdab(ii)*fz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,444) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engbnd -+ buffer(2)=virbnd -+ buffer(3)=bnd_fre -+ buffer(4)=bnd_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engbnd=buffer(1) -+ virbnd=buffer(2) -+ bnd_fre=buffer(3) -+ bnd_vir=buffer(4) -+ -+ if(lsolva)then -+ -+ call gdsum(bnd_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(bnd_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail) -+ -+ return -+ end subroutine bndfrc -+ -+ end module bonds_module -diff -urN dl_class_1.9.orig/srcmod/comms.inc dl_class_1.9/srcmod/comms.inc ---- dl_class_1.9.orig/srcmod/comms.inc 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/comms.inc 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,42 @@ -+c********************************************************************* -+c -+c dl_poly include file for MPI, PVM and SHMEM -+c copyright - daresbury laboratory -+c -+c********************************************************************* -+ -+CMPIU define mpipriv mpipriv_ -+ -+ include "mpif.h" -+ -+c parameters for message tags -+ -+ integer Xgcopy_tag, Merge1_tag -+ integer Dgsum_tag1, Dgsum_tag2 -+ integer Igmax_tag1, Igmax_tag2 -+ integer Igsum_tag1, Igsum_tag2 -+ integer Shmove_tag, Merge_tag -+ integer Merge4_tag, Shell_tag -+ integer Gstate_tag1, Gstate_tag2 -+ integer Passcon_tag, Msgtag -+ -+c MPI tagsizes -+ -+ parameter( -+ $ Xgcopy_tag = 105, -+ $ Dgsum_tag1 = 6001, -+ $ Dgsum_tag2 = 9001, -+ $ Igsum_tag1 = 12001, -+ $ Igsum_tag2 = 15001, -+ $ Shmove_tag = 18001, -+ $ Merge_tag = 6001, -+ $ Merge1_tag = 9001, -+ $ Merge4_tag = 12001, -+ $ Gstate_tag1 = 15001, -+ $ Gstate_tag2 = 18001, -+ $ Shell_tag = 21001, -+ $ Passcon_tag = 3001, -+ $ Igmax_tag1 = 24001, -+ $ Igmax_tag2 = 27001, -+ $ Msgtag = 30000) -+ -diff -urN dl_class_1.9.orig/srcmod/config_module.f dl_class_1.9/srcmod/config_module.f ---- dl_class_1.9.orig/srcmod/config_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/config_module.f 2015-11-09 14:15:45.054258793 +0100 -@@ -0,0 +1,103 @@ -+ module config_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation configuration data -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ character*1 cfgname(80) -+ character*1 sysname(80) -+ real(8) cell(9),rcell(9),celprp(10) -+ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) -+ -+ character*8, allocatable :: atmnam(:) -+ real(8), allocatable :: xxx(:),yyy(:),zzz(:) -+ real(8), allocatable :: vxx(:),vyy(:),vzz(:) -+ real(8), allocatable :: fxx(:),fyy(:),fzz(:) -+ real(8), allocatable :: flx(:),fly(:),flz(:) -+ real(8), allocatable :: chge(:),weight(:),rmass(:) -+ integer, allocatable :: ltype(:),lstfrz(:) -+ integer, allocatable :: neulst(:),lstneu(:) -+ integer, allocatable :: lentry(:),list(:,:) -+ integer, allocatable :: lstout(:),link(:) -+ integer, allocatable :: lct(:),lst(:) -+ -+ real(8), allocatable :: buffer(:) -+ -+c PLUMED variables -+ logical, save :: lplumed -+c PLUMED variables -+ -+ save atmnam,neulst,lstneu,cfgname,sysname -+ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz -+ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz -+ save lentry,list,lstout,link,lct,lst,celprp,rmass -+ save eta,stress,stresl,strcns,rcell -+ -+ contains -+ -+ subroutine alloc_config_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining simulation configuration arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ integer, parameter :: nnn=27 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xxx(mxatms),stat=fail(1)) -+ allocate (yyy(mxatms),stat=fail(2)) -+ allocate (zzz(mxatms),stat=fail(3)) -+ allocate (vxx(mxatms),stat=fail(4)) -+ allocate (vyy(mxatms),stat=fail(5)) -+ allocate (vzz(mxatms),stat=fail(6)) -+ allocate (fxx(mxatms),stat=fail(7)) -+ allocate (fyy(mxatms),stat=fail(8)) -+ allocate (fzz(mxatms),stat=fail(9)) -+ allocate (weight(mxatms),stat=fail(11)) -+ allocate (chge(mxatms),stat=fail(12)) -+ allocate (ltype(mxatms),stat=fail(13)) -+ allocate (lstfrz(mxatms),stat=fail(14)) -+ allocate (flx(mxatms),stat=fail(15)) -+ allocate (fly(mxatms),stat=fail(16)) -+ allocate (flz(mxatms),stat=fail(17)) -+ allocate (atmnam(mxatms),stat=fail(18)) -+ allocate (neulst(mxneut),stat=fail(19)) -+ allocate (lstneu(mxatms),stat=fail(20)) -+ allocate (lstout(mxatms),stat=fail(21)) -+ allocate (lentry(msatms),stat=fail(22)) -+ allocate (list(msatms,mxlist),stat=fail(23)) -+ allocate (link(mxatms),stat=fail(24)) -+ allocate (lct(mxcell),stat=fail(25)) -+ allocate (lst(mxcell),stat=fail(26)) -+ allocate (rmass(mxatms),stat=fail(27)) -+ allocate (buffer(mxbuff),stat=fail(10)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1000) -+ endif -+ enddo -+ -+ end subroutine alloc_config_arrays -+ -+ end module config_module -diff -urN dl_class_1.9.orig/srcmod/config_module.f.preplumed dl_class_1.9/srcmod/config_module.f.preplumed ---- dl_class_1.9.orig/srcmod/config_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/config_module.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,99 @@ -+ module config_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation configuration data -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ character*1 cfgname(80) -+ character*1 sysname(80) -+ real(8) cell(9),rcell(9),celprp(10) -+ real(8) eta(9),stress(9),stresl(9),strcns(9),strbod(9) -+ -+ character*8, allocatable :: atmnam(:) -+ real(8), allocatable :: xxx(:),yyy(:),zzz(:) -+ real(8), allocatable :: vxx(:),vyy(:),vzz(:) -+ real(8), allocatable :: fxx(:),fyy(:),fzz(:) -+ real(8), allocatable :: flx(:),fly(:),flz(:) -+ real(8), allocatable :: chge(:),weight(:),rmass(:) -+ integer, allocatable :: ltype(:),lstfrz(:) -+ integer, allocatable :: neulst(:),lstneu(:) -+ integer, allocatable :: lentry(:),list(:,:) -+ integer, allocatable :: lstout(:),link(:) -+ integer, allocatable :: lct(:),lst(:) -+ -+ real(8), allocatable :: buffer(:) -+ -+ save atmnam,neulst,lstneu,cfgname,sysname -+ save cell,xxx,yyy,zzz,vxx,vyy,vzz,fxx,fyy,fzz -+ save buffer,weight,chge,ltype,lstfrz,flx,fly,flz -+ save lentry,list,lstout,link,lct,lst,celprp,rmass -+ save eta,stress,stresl,strcns,rcell -+ -+ contains -+ -+ subroutine alloc_config_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining simulation configuration arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ integer, parameter :: nnn=27 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xxx(mxatms),stat=fail(1)) -+ allocate (yyy(mxatms),stat=fail(2)) -+ allocate (zzz(mxatms),stat=fail(3)) -+ allocate (vxx(mxatms),stat=fail(4)) -+ allocate (vyy(mxatms),stat=fail(5)) -+ allocate (vzz(mxatms),stat=fail(6)) -+ allocate (fxx(mxatms),stat=fail(7)) -+ allocate (fyy(mxatms),stat=fail(8)) -+ allocate (fzz(mxatms),stat=fail(9)) -+ allocate (weight(mxatms),stat=fail(11)) -+ allocate (chge(mxatms),stat=fail(12)) -+ allocate (ltype(mxatms),stat=fail(13)) -+ allocate (lstfrz(mxatms),stat=fail(14)) -+ allocate (flx(mxatms),stat=fail(15)) -+ allocate (fly(mxatms),stat=fail(16)) -+ allocate (flz(mxatms),stat=fail(17)) -+ allocate (atmnam(mxatms),stat=fail(18)) -+ allocate (neulst(mxneut),stat=fail(19)) -+ allocate (lstneu(mxatms),stat=fail(20)) -+ allocate (lstout(mxatms),stat=fail(21)) -+ allocate (lentry(msatms),stat=fail(22)) -+ allocate (list(msatms,mxlist),stat=fail(23)) -+ allocate (link(mxatms),stat=fail(24)) -+ allocate (lct(mxcell),stat=fail(25)) -+ allocate (lst(mxcell),stat=fail(26)) -+ allocate (rmass(mxatms),stat=fail(27)) -+ allocate (buffer(mxbuff),stat=fail(10)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1000) -+ endif -+ enddo -+ -+ end subroutine alloc_config_arrays -+ -+ end module config_module -diff -urN dl_class_1.9.orig/srcmod/core_shell_module.f dl_class_1.9/srcmod/core_shell_module.f ---- dl_class_1.9.orig/srcmod/core_shell_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/core_shell_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,826 @@ -+ module core_shell_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining core_shell arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use parse_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmshl(:,:) -+ integer, allocatable :: listshl(:,:) -+ integer, allocatable :: numshl(:),lstshl(:,:) -+ -+ save prmshl,listshl,numshl,lstshl -+ -+ contains -+ -+ subroutine alloc_csh_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining core_shell arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(4) -+ -+ do i=1,4 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmshl(mxtshl,2),stat=fail(1)) -+ allocate (numshl(mxtmls),stat=fail(2)) -+ allocate (lstshl(mxtshl,2),stat=fail(3)) -+ allocate (listshl(mxshl,3),stat=fail(4)) -+ -+ do i=1,4 -+ if(fail(i).gt.0)call error(idnode,1100) -+ enddo -+ -+ do i=1,mxtmls -+ numshl(i)=0 -+ enddo -+ -+ end subroutine alloc_csh_arrays -+ -+ subroutine define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining core-shell units -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ logical safe -+ integer idnode,itmols,nshels,nsite,ntmp,ishls -+ integer iatm1,iatm2,isite1,isite2,keyshl,kshl,idum -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numshl(itmols)=numshl(itmols)+ntmp -+ kshl=intstr(record,lenrec,idum) -+ if(keyshl.eq.0)then -+ keyshl=kshl -+ elseif(kshl.ne.keyshl)then -+ call error(idnode,1960) -+ endif -+ if(idnode.eq.0) then -+ -+ write(nrite, -+ x "(/,1x,'number of core-shell units',5x,i10)") -+ x ntmp -+ if(keyshl.eq.1)then -+ -+ write(nrite, -+ x "(/,/,1x,'core-shell details:',/,/,21x, -+ x 5x,'index',5x,'index',6x,'parameter')") -+ -+ else -+ -+ write(nrite, -+ x "(/,/,1x,'core-shell details:',/,/,21x, -+ x 6x,'core',5x,'shell',6x,'parameter')") -+ -+ endif -+ -+ endif -+ -+ do ishls=1,numshl(itmols) -+ -+ nshels=nshels+1 -+ if(nshels.gt.mxtshl) call error(idnode,57) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ lstshl(nshels,1)=iatm1 -+ lstshl(nshels,2)=iatm2 -+ prmshl(nshels,1)=dblstr(record,lenrec,idum) -+ prmshl(nshels,2)=dblstr(record,lenrec,idum) -+ if(idnode.eq.0) write(nrite, -+ x "(21x,2i10,2f15.4)") -+ x lstshl(nshels,1),lstshl(nshels,2), -+ x prmshl(nshels,1),prmshl(nshels,2) -+ -+c test for frozen cores or shells -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0) -+ x call error(idnode,49) -+ -+c convert energy units to internal units -+ -+ prmshl(nshels,1)=prmshl(nshels,1)*engunit -+ prmshl(nshels,2)=prmshl(nshels,2)*engunit -+ -+ enddo -+ -+ return -+ end subroutine define_core_shell -+ -+ subroutine corshl(idnode,mxnode,ntshl,shlke) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating the internal kinetic -+c energy of core-shell units in the shell polarisation model -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith july 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m -+ real(8) shlke,ppp,ccc,sss -+ -+ shlke=0.d0 -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c loop over all specified core-shell pairs -+ -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of atoms involved -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c calculate atom translational kinetic energy -+ -+ ppp=((weight(i)*vxx(i)+weight(j)*vxx(j))**2 -+ x +(weight(i)*vyy(i)+weight(j)*vyy(j))**2 -+ x +(weight(i)*vzz(i)+weight(j)*vzz(j))**2) -+ x /(weight(i)+weight(j)) -+ -+c calculate individual core and shell kinetic energies -+ -+ ccc=weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ sss=weight(j)*(vxx(j)**2+vyy(j)**2+vzz(j)**2) -+ -+c calculate core-shell internal kinetic energy -+ -+ shlke=shlke+0.5d0*(ccc+sss-ppp) -+ -+ enddo -+ -+c global average of core-shell internal kinetic energy -+ -+ if(mxnode.gt.1)then -+ buffer(1)=shlke -+ call gdsum(buffer(1),1,buffer(2)) -+ shlke=buffer(1) -+ endif -+ -+ return -+ end subroutine corshl -+ -+ subroutine put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for placing shells on top of cores in the -+c shell model at the start of a simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith feb 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, allocatable :: ltop(:) -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m,fail -+ -+c allocate ltop array -+ -+ allocate(ltop(ntshl),stat=fail) -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c zero ltop array -+ -+ do i=1,ntshl -+ ltop(i)=0 -+ enddo -+ -+c loop over all specified core-shell pairs -+ -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of atoms involved -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c set shell and core positions equal -+ -+ ltop(m)=j -+ xxx(j)=xxx(i) -+ yyy(j)=yyy(i) -+ zzz(j)=zzz(i) -+ -+ enddo -+ -+c merge data on different processors -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,ntshl,ltop,xxx,yyy,zzz,buffer) -+ -+c deallocate ltop array -+ -+ deallocate(ltop,stat=fail) -+ -+ return -+ end subroutine put_shells_on_cores -+ -+ subroutine shlfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating shell model spring energy and -+c force terms in molecular dynamics. -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith july 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect -+ integer idnode,imcon,mxnode,ntshl,ishl1,ishl2,i,j,k,m,kk -+ real(8) engshl,virshl,rij2,omega,gamma,ffx,ffy,ffz,strs -+ -+ dimension strs(6) -+ -+c check adequate workspace is available -+ -+ if(mxxdf.lt.mxshl)call error(idnode,423) -+ -+c block indices -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c initialise accumulators -+ -+ engshl=0.d0 -+ virshl=0.d0 -+ shl_fre=0.d0 -+ shl_vir=0.d0 -+ -+ do i=1,6 -+ strs(i)=0.d0 -+ enddo -+ -+ if(lsolva)then -+ -+ lcomp(5)=.true. -+ shl_sol(:)=0.d0 -+ if(lexcite)shl_exc(:)=0.d0 -+ -+ endif -+ -+c calculate core-shell separation vectors -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c components of bond vector -+ -+ xdf(m)=xxx(i)-xxx(j) -+ ydf(m)=yyy(i)-yyy(j) -+ zdf(m)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,m,cell,xdf,ydf,zdf) -+ -+c loop over all specified core-shell units -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c index of potential parameters -+ -+ kk=listshl(m,1) -+ -+c core-shell separation -+ -+ rij2=xdf(m)**2+ydf(m)**2+zdf(m)**2 -+ -+c calculate scalar constant terms -+ -+ omega=(0.5d0*prmshl(kk,1)+0.25d0*prmshl(kk,2)*rij2)*rij2 -+ gamma=prmshl(kk,1)+prmshl(kk,2)*rij2 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(i)+atm_fre(i).eq.0) -+ -+ if(lsolva)then -+ shl_exc(atmolt(i))=shl_exc(atmolt(i))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ shl_fre=shl_fre-omega -+ shl_vir=shl_vir-gamma*rij2 -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ shl_fre=shl_fre+omega -+ shl_vir=shl_vir+gamma*rij2 -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate spring energy and virial -+ -+ engshl=engshl+omega -+ virshl=virshl+gamma*rij2 -+ -+ if(lsolva)then -+ shl_sol(atmolt(i))=shl_sol(atmolt(i))+omega -+ endif -+ -+c calculate spring forces -+ -+ ffx=-gamma*xdf(m) -+ ffy=-gamma*ydf(m) -+ ffz=-gamma*zdf(m) -+ -+ fxx(i)=fxx(i)+ffx -+ fyy(i)=fyy(i)+ffy -+ fzz(i)=fzz(i)+ffz -+ -+ fxx(j)=fxx(j)-ffx -+ fyy(j)=fyy(j)-ffy -+ fzz(j)=fzz(j)-ffz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*ffx -+ strs(2)=strs(2)+xdf(m)*ffy -+ strs(3)=strs(3)+xdf(m)*ffz -+ strs(4)=strs(4)+ydf(m)*ffy -+ strs(5)=strs(5)+ydf(m)*ffz -+ strs(6)=strs(6)+zdf(m)*ffz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1) then -+ -+ buffer(1)=engshl -+ buffer(2)=virshl -+ buffer(3)=shl_fre -+ buffer(4)=shl_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engshl=buffer(1) -+ virshl=buffer(2) -+ shl_fre=buffer(3) -+ shl_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(shl_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(shl_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine shlfrc -+ -+ subroutine check_shells(idnode,itmols,nshels,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to check no core-shell units are in -+c rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,itmols,nshels,ngrp,k1,ia,ib,kk -+ integer id,jj,ia1,jk,ib1 -+ -+ nshels=nshels-numshl(itmols) -+ do k1=1,numshl(itmols) -+ -+ nshels=nshels+1 -+ ia=lstshl(nshels,1) -+ ib=lstshl(nshels,2) -+ -+ ngrp=ngrp-numgrp(itmols) -+ -+ do kk=1,numgrp(itmols) -+ -+ ngrp=ngrp+1 -+ id=listyp(ngrp) -+ -+ do jj=1,numgsit(id)-1 -+ -+ ia1=lstgst(ngrp,jj) -+ if(ia1.eq.ia) then -+ -+ do jk=jj,numgsit(id) -+ -+ ib1=lstgst(ngrp,jk) -+ if(ib1.eq.ib) then -+ -+ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') -+ x 'error: sites ',ia,ib -+ call error(idnode,456) -+ -+ endif -+ -+ enddo -+ -+ elseif(ia1.eq.ib) then -+ -+ do jk=jj,numgsit(id) -+ -+ ib1=lstgst(ngrp,jk) -+ if(ib1.eq.ia) then -+ -+ if(idnode.eq.0)write(nrite,'(/,13x,a,2i10)') -+ x 'error: sites ',ia,ib -+ call error(idnode,456) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ enddo -+ enddo -+ -+ return -+ end subroutine check_shells -+ -+ subroutine relax_shells -+ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep,rlxtol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for relaxing shells to zero force -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical relaxed,newjob -+ integer keyrlx,idnode,mxnode,natms,i,j,itmols,imols -+ integer iatm1,iatm2,fail,numopt,isite,ishls,jshls,lshls,ntpmls -+ integer nbuff -+ real(8) hnorm,grad0,grad1,grad2,stride,tstep,step -+ real(8) ggg,gam2,sgn,rlxtol -+ -+ dimension fail(4) -+ -+ integer, allocatable :: lstopt(:) -+ real(8), allocatable :: ggx(:),ggy(:),ggz(:) -+ real(8), allocatable :: hhx(:),hhy(:),hhz(:) -+ real(8), allocatable :: oxx(:),oyy(:),ozz(:) -+ -+ save hnorm,grad0,grad1,grad2,stride,lstopt -+ save ggx,ggy,ggz,hhx,hhy,hhz,oxx,oyy,ozz,numopt,nbuff,sgn -+ -+ data newjob/.true./,fail/0,0,0,0/ -+ -+c define initial data -+ -+ if(newjob)then -+ -+ newjob=.false. -+ allocate(lstopt(mxatms),stat=fail(1)) -+ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) -+ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(3)) -+ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1970) -+ enddo -+ -+c identify the shells -+ -+ isite=0 -+ ishls=0 -+ jshls=0 -+ do i=1,natms -+ -+ lstopt(i)=0 -+ -+ enddo -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do lshls=1,numshl(itmols) -+ -+ ishls=ishls+1 -+ lstopt(lstshl(lshls+jshls,2)+isite)=1 -+ -+ enddo -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ jshls=jshls+numshl(itmols) -+ -+ enddo -+ -+ numopt=ishls -+ -+ endif -+ -+c load coordinates of shells -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstopt(i).gt.0)then -+ -+ j=j+1 -+ oxx(j)=xxx(i) -+ oyy(j)=yyy(i) -+ ozz(j)=zzz(i) -+ ggx(j)=fxx(i) -+ ggy(j)=fyy(i) -+ ggz(j)=fzz(i) -+ -+ endif -+ -+ enddo -+ -+c step length for relaxation -+ -+ step=tstep**2 -+ -+c define atoms for this nodes -+ -+ iatm1=(idnode*numopt)/mxnode+1 -+ iatm2=((idnode+1)*numopt)/mxnode -+ -+ ggg=0.d0 -+ do i=iatm1,iatm2 -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ ggg=sqrt(ggg) -+ -+c check convergence -+ -+ if(abs(ggg)/dble(numopt).lt.rlxtol)then -+ -+ relaxed=.true. -+ return -+ -+ endif -+ -+ if(keyrlx.eq.0) then -+ -+c set original search direction -+ -+ hnorm=ggg -+ grad0=ggg -+ grad2=ggg -+ do i=iatm1,iatm2 -+ -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ keyrlx=1 -+ sgn=1.d0 -+ -+ elseif(keyrlx.eq.1)then -+ -+c line search along chosen direction -+ -+ grad1=grad2 -+ grad2=0.d0 -+ do i=iatm1,iatm2 -+ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=grad2 -+ call gdsum(buffer(1),1,buffer(2)) -+ grad2=buffer(1) -+ endif -+ grad2=sgn*grad2/hnorm -+ -+c linear extrapolation to minimum -+ -+ stride=sgn*step -+ if(grad2.lt.0.d0)then -+ -+ keyrlx=2 -+ stride=sgn*step*grad2/(grad1-grad2) -+ -+ endif -+ -+ do i=iatm1,iatm2 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ elseif(keyrlx.eq.2)then -+ -+c construct conjugate search vector -+ -+ gam2=(ggg/grad0)**2 -+ hnorm=0.d0 -+ grad0=ggg -+ grad2=0.d0 -+ do i=iatm1,iatm2 -+ -+ hhx(i)=ggx(i)+gam2*hhx(i) -+ hhy(i)=ggy(i)+gam2*hhy(i) -+ hhz(i)=ggz(i)+gam2*hhz(i) -+ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 -+ grad2=grad2+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ -+ enddo -+ if(mxnode.gt.1)then -+ -+ buffer(1)=hnorm -+ buffer(2)=grad2 -+ call gdsum(buffer(1),2,buffer(3)) -+ hnorm=buffer(1) -+ grad2=buffer(2) -+ -+ endif -+ hnorm=sqrt(hnorm) -+ grad2=grad2/hnorm -+ sgn=sign(1.d0,grad2) -+ grad2=sgn*grad2 -+ -+ do i=iatm1,iatm2 -+ -+ oxx(i)=oxx(i)+sgn*step*hhx(i) -+ oyy(i)=oyy(i)+sgn*step*hhy(i) -+ ozz(i)=ozz(i)+sgn*step*hhz(i) -+ -+ enddo -+ -+ keyrlx=1 -+ -+ endif -+ -+c merge coordinate arrays -+ -+ if(mxnode.gt.1)then -+ -+ nbuff=6*(numopt+mxnode-1)/mxnode -+ call merge(idnode,mxnode,numopt,nbuff,oxx,oyy,ozz,buffer) -+ -+ endif -+ -+c unload coordinates of shells -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstopt(i).gt.0)then -+ -+ j=j+1 -+ xxx(i)=oxx(j) -+ yyy(i)=oyy(j) -+ zzz(i)=ozz(j) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine relax_shells -+ -+ end module core_shell_module -diff -urN dl_class_1.9.orig/srcmod/coulomb_module.f dl_class_1.9/srcmod/coulomb_module.f ---- dl_class_1.9.orig/srcmod/coulomb_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/coulomb_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1542 @@ -+ module coulomb_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining coulomb terms -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ewald_module -+ use metafreeze_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ -+ implicit none -+ -+ contains -+ -+ subroutine coul0 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c 1/r potential, no truncation or damping -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester february 1993 -+c stress tensor - t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) rcsq,chgea,rsq,chgprd,rrr,coul,fcoul,fi,fx,fy,fz -+ real(8) engcpe,vircpe,rcut,epsq,strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ -+c coulomb potential and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul0 -+ -+ subroutine coul1 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a standard coulomb potential truncated at rcut -+c and shifted to zero at rcut. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith december 1992. -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c stress tensor t.forester may 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq,rcsq,chgea,rsq -+ real(8) fi,chgprd,omega,egamma,fx,fy,fz,rrr -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)*r4pie0/epsq -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+c start of primary loop for forces evaluation -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10) then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ -+c calculate potential energy and virial -+ -+ omega=chgprd*(rcut-rrr)/(rrr*rcut) -+ egamma=chgprd/(rrr*rsq) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-omega -+ cou_vir=cou_vir+egamma*rsq -+ omega=lambda1*omega -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+omega -+ cou_vir=cou_vir-egamma*rsq -+ omega=lambda2*omega -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+omega -+ vircpe=vircpe-egamma*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+omega -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-egamma*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul1 -+ -+ subroutine coul2 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a distance dependant dielectric `constant'. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester april 1993 -+c stress tensor added - t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq -+ real(8) fi,rcsq,chgea,chgprd,rsq,rrsq,coul,egamma,fx,fy,fz -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+c calculate potential energy and Virial -+ -+ rrsq=1.d0/rsq -+ coul=chgprd*rrsq -+ egamma=2.d0*coul*rrsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+2.d0*coul -+ coul=lambda1*coul -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-2.d0*coul -+ coul=lambda2*coul -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and Virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-2.d0*coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-2.d0*coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul2 -+ -+ subroutine coul3 -+ x (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c reaction field potential -+c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) -+c adapted for fennell-gezelter coulombic model -+c by w.smith june 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester february 1995 -+c stress tensor - t.forester feb 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,l,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq -+ real(8) b0,rfld0,rfld1,rfld2,chgea,chgprd,rsq,coul,omega -+ real(8) fx,fy,fz,fcoul,rrr,vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 -+ real(8) strs(6),strs_loc(6) -+ dimension fi(3) -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c reaction field terms -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ -+c screened coulomb terms -+ -+ vcon=erc(mxegrd-4)+rfld2*rcut**2-rfld1 -+ fcon=rcut*fer(mxegrd-4)-rfld0*rcut -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ rdr=dble(mxegrd-4)/rcut -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+c calculate potential energy using 3-point interpolation -+ -+ vk0=erc(l) -+ vk1=erc(l+1) -+ vk2=erc(l+2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0-vcon+fcon*(rrr-rcut) -+ coul=chgprd*(omega+rfld2*rsq-rfld1) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=fer(l) -+ gk1=fer(l+1) -+ gk2=fer(l+2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr-rfld0) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic force -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul3 -+ -+ subroutine coul4 -+ X (lsolva,lfree,lghost,iatm,ik,engcpe,vircpe,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a force shifted coulomb potential. -+c adapted for fennell-gezelter coulombic model -+c by w.smith may 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester october 1995 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,l,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,fi,rcsq,coul -+ real(8) strs9,chgea,chgprd,rsq,rrr,omega,fcoul,fx,fy,fz -+ real(8) vk0,vk1,vk2,gk0,gk1,gk2,t1,t2 -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c screened coulomb terms -+ -+ vcon=erc(mxegrd-4) -+ fcon=rcut*fer(mxegrd-4) -+ rdr=dble(mxegrd-4)/rcut -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ chgea=chge(iatm)*r4pie0/epsq -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+c start of primary loop for forces evaluation -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chgea*chge(jatm) -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+c apply truncation of potential -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+c calculate potential energy using 3-point interpolation -+ -+ vk0=erc(l) -+ vk1=erc(l+1) -+ vk2=erc(l+2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ coul=chgprd*(omega-vcon+fcon*(rrr-rcut)) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=fer(l) -+ gk1=fer(l+1) -+ gk2=fer(l+2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ fcoul=chgprd*((t1+(t2-t1)*ppp*0.5d0)-fcon/rrr) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate the coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine coul4 -+ -+ subroutine coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcpe,vircpe) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic potential and forces -+c for the all-pairs algorithm beyond the range of the normal cutoff -+c i.e. the 'tertiary' forces. frozen atom option included -+c -+c to be used with multiple_nsq -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w.smith august 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip -+ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 -+ integer npm2,m,ii,j,idum,kkk -+ real(8) engcpe,epsq,rcut,vircpe,rsq,rrr,chgprd,fcoul,coul,rct2 -+ -+ lskip=(lfree.or.lghost) -+ -+c zero energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ flx(i)=0.d0 -+ fly(i)=0.d0 -+ flz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation accumulators -+ -+ if(lsolva)then -+ -+ cou_sol_lng(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc_lng(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c set control variables -+ -+ last=natms -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius -+ -+ rct2=rcut**2 -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ if(lskip)then -+ if(atm_fre(i)*atm_fre(j).eq.2)cycle -+ endif -+ -+c calculate interatomic displacements -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c calculate coulomb terms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ if(lskip)then -+ if(atm_fre(i)*atm_fre(j).eq.2)cycle -+ endif -+ -+ ii=ii+1 -+ if(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then -+ -+c reject frozen atoms and calculate interatomic distance -+ -+ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.ge.rct2)then -+ -+ chgprd=chge(i)*chge(j)*r4pie0/epsq -+ rrr=sqrt(rsq) -+ -+c calculate potential energy and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(i),atmolt(j)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(i).ne.1).and.(atm_fre(j).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(i)+atm_fre(j).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc_lng(kkk)=cou_exc_lng(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(i).eq.1).or.(atm_fre(j).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(i).eq.2).or.(atm_fre(j).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol_lng(kkk)=cou_sol_lng(kkk)+coul -+ -+c calculate forces -+ -+ flx(i)=flx(i)+fcoul*xdf(ii) -+ fly(i)=fly(i)+fcoul*ydf(ii) -+ flz(i)=flz(i)+fcoul*zdf(ii) -+ -+ flx(j)=flx(j)-fcoul*xdf(ii) -+ fly(j)=fly(j)-fcoul*ydf(ii) -+ flz(j)=flz(j)-fcoul*zdf(ii) -+ -+c stress tensor -+ -+ stresl(1)=stresl(1)+xdf(ii)*fcoul*xdf(ii) -+ stresl(2)=stresl(2)+xdf(ii)*fcoul*ydf(ii) -+ stresl(3)=stresl(3)+xdf(ii)*fcoul*zdf(ii) -+ stresl(5)=stresl(5)+ydf(ii)*fcoul*ydf(ii) -+ stresl(6)=stresl(6)+ydf(ii)*fcoul*zdf(ii) -+ stresl(9)=stresl(9)+zdf(ii)*fcoul*zdf(ii) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c complete stress tensor -+ -+ stresl(4)=stresl(2) -+ stresl(7)=stresl(3) -+ stresl(8)=stresl(6) -+ -+ return -+ end subroutine coul_nsq -+ -+ end module coulomb_module -diff -urN dl_class_1.9.orig/srcmod/define_system_module.f dl_class_1.9/srcmod/define_system_module.f ---- dl_class_1.9.orig/srcmod/define_system_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/define_system_module.f 2015-11-09 14:15:45.054258793 +0100 -@@ -0,0 +1,6004 @@ -+ module define_system_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007, solvation, free energy -+c and excitation -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use dihedral_module -+ use ensemble_tools_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use inversion_module -+ use metafreeze_module -+ use metal_module -+ use parse_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use vdw_module -+ -+ contains -+ -+ subroutine simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the simulation control -+c parameters -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992. -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c modified -+c author - t.forester may 1993 -+c amended - t.forester sept 1994 - dl_poly_1.1 -+c amended - t.forester nov 1994 - macro version -+c amended - w.smith dec 1994 - t3d adaptation -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 hms -+ character*1 directive(lenrec) -+ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc -+ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe -+ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill -+ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau -+ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo -+ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn -+ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit -+ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack -+ integer idum,imcon,keyver,keytol,nblock,blkout,numgau -+ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol -+ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units -+ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin -+ real(8) prntim -+ -+CSGIC real(8) dummy -+CCRAY real(8) dummy -+CFFTWc FFTW instruction codes -+CFFTW -+CFFTW integer FFTW_FORWARD,FFTW_BACKWARD -+CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) -+CFFTW -+CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL -+CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) -+CFFTW -+CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE -+CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) -+CFFTW -+CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM -+CFFTW parameter (FFTW_OUT_OF_PLACE=0) -+CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) -+CFFTW -+CFFTW integer FFTW_THREADSAFE -+CFFTW parameter (FFTW_THREADSAFE=128) -+CFFTW -+ -+c intitialize system variables: temperature,pressure,ensemble key -+c force key, cutoff, primary cutoff, verlet shell width, relative -+c dielectric constant,timestep,temperature scaling flag, -+c temp scaling interval -+ -+ mode=0 -+ nhko=0 -+ nlatt=0 -+ nsteql=0 -+ nstrun=0 -+ minstp=0 -+ keybpd=0 -+ keyres=0 -+ keyens=0 -+ keyver=0 -+ taut=0.d0 -+ nstbts=0 -+ nstbgr=0 -+ nsbzdn=0 -+ nstbpo=100 -+ nstack=mxstak -+ intsta=0 -+ nstraj=0 -+ istraj=1 -+ keytrj=0 -+ numgau=1 -+ alpha=0.d0 -+ kmax1=0 -+ kmax2=0 -+ kmax3=0 -+ nospl=min(8,mxspl) -+ isolva=1 -+ nsolva=0 -+ niswitch=0 -+ nswitch=0 -+ nofic=1000 -+ -+ fmax=1000.d0 -+ keyfce=0 -+ multt=1 -+ keytol=0 -+ tstep=0.d0 -+ temp=0.d0 -+ press=0.d0 -+ rcut=0.d0 -+ rprim=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ epsq=1.d0 -+ rlxtol=1.d0 -+ opttol=1.d0 -+ tolnce=1.d-8 -+ quattol=1.d-8 -+ timjob=0.d0 -+ timcls=0.d0 -+ delrdf=0.d0 -+ delzdn=0.d0 -+ zlen=0.d0 -+ ehit=0.d0 -+ xhit=0.d0 -+ yhit=0.d0 -+ zhit=0.d0 -+ vmin=0.d0 -+ ebias=0.d0 -+ catchrad=0.d0 -+ pfree=0.d0 -+ -+ lhit=.false. -+ lbpd=.false. -+ ltad=.false. -+ lneb=.false. -+ loop=.true. -+ lnfic=.false. -+ lpsoc=.false. -+ lzero=.false. -+ ltscal=.false. -+ lewald=.false. -+ lspme=.false. -+ lhke=.false. -+ lgofr=.false. -+ lpgr=.false. -+ lzeql=.true. -+ loptim=.false. -+ lminim=.false. -+ lminopt=.false. -+ ltraj=.false. -+ lfcap=.false. -+ ltemp=.false. -+ lstep=.false. -+ lcut=.false. -+ ldelr=.false. -+ lprim=.false. -+ lforc=.false. -+ lens=.false. -+ lvdw=.false. -+ lrvdw=.false. -+ lpres=.false. -+ kill=.false. -+ lnsq=.false. -+ lzden=.false. -+ nolink=.false. -+ newgau=.false. -+ prechk=.false. -+ tadall=.false. -+ lsolva=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lexcite=.false. -+ lswitch=.false. -+ lghost=.false. -+ nebgo=.true. -+ seek='all ' -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open(nread,file='CONTROL',status='old') -+ -+ -+c PlUMED defaults -+ lplumed=.false. -+c PLUMED defaults -+c read job title -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+ call copystring(record,sysname,80) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, -+ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") -+ x sysname -+ -+ endif -+ -+c read and process directives from CONTROL file -+ -+ do while(loop) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+c convert to lowercase and strip out leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('redirect',directive,idum))then -+ -+c ignore this option in this context -+ -+c PLUMED modifications -+ elseif(findstring('plumed',directive,idum))then -+ if(findstring('on',directive,idum)) lplumed=.true. -+ if(findstring('off',directive,idum)) lplumed=.false. -+c PLUMED modifications -+ cycle -+ -+ elseif(findstring('steps',directive,idum))then -+ -+c number of timesteps -+ -+ nstrun=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun -+ -+ elseif(findstring('integ',directive,idum))then -+ -+c choice of integration algorithm -+ -+ if(findstring('leapfrog',directive,idum))then -+ -+ keyver=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'leapfrog verlet integration selected')") -+ -+ elseif(findstring('velocity',directive,idum))then -+ -+ keyver=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'velocity verlet integration selected')") -+ -+ endif -+ -+ elseif(findstring('no fic',directive,idum))then -+ -+c cancel possible "flying ice cube" in Berendsen thermostats -+ -+ lnfic=.true. -+ nofic=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('shells',directive,idum).and. -+ x findstring('on',directive,idum).and. -+ x findstring('cores',directive,idum))then -+ -+c put shells on cores at start - shell model only (else null) -+ -+ lpsoc=.true. -+ -+ elseif(findstring('densvar',directive,idum))then -+ -+c specify allowed density variation -+ -+ densvar=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") -+ x densvar -+ -+ elseif(findstring('no link',directive,idum))then -+ -+c switch off link cell option -+ -+ nolink=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'link cells option deactivated')") -+ -+ elseif(findstring('equil',directive,idum))then -+ -+c number of equilibration timesteps -+ -+ nsteql=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration period ',3x,i10)")nsteql -+ -+ elseif(findstring('restart',directive,idum))then -+ -+c restart control -+ -+ if(findstring('noscale',directive,idum))then -+ -+ keyres=3 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'noscale restart requested')") -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ keyres=2 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'scaled restart requested')") -+ -+ else -+ -+ keyres=1 -+ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") -+ -+ endif -+ -+ elseif(findstring('ensemble',directive,idum))then -+ -+c ensemble selection -+ -+ call ensemble_selection(directive,lens,kill,idnode,keyens, -+ x mode,taut,taup) -+ -+ elseif(findstring('regauss',directive,idum))then -+ -+c re-initialise velocities option (regaussing) -+ -+ newgau=.true. -+ numgau=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'regaussing option activated', -+ x /,1x,'regaussing interval set to ',3x,i10)") -+ x numgau -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ nstbts=intstr(directive,lenrec,idum) -+ if(nstbts.gt.0)then -+ ltscal=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'temperature scaling on' -+ x /,1x,'temperature scaling interval',3x,i10)") -+ x nstbts -+ -+ endif -+ -+ elseif(findstring('rdf',directive,idum))then -+ -+ if(findstring('print',directive,idum))then -+ -+ lpgr=.true. -+ lpgr=(lgofr.and.lpgr) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'g(r) printing option on ')") -+ -+ else -+ -+ lgofr=.true. -+ nstbgr=intstr(directive,lenrec,idum) -+ delrdf=dblstr(directive,lenrec,idum) -+ if(nstbgr.eq.0)nstbgr=10 -+ if(delrdf.lt.1.d-8)delrdf=0.05d0 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'radial distribution functions on ', -+ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr -+ write(nrite, -+ x "(1x,'g(r) bin width ',3x,1p,e12.4)") -+ x delrdf -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('zden',directive,idum))then -+ -+ lzden=.true. -+ nsbzdn=intstr(directive,lenrec,idum) -+ delzdn=dblstr(directive,lenrec,idum) -+ zlen=dblstr(directive,lenrec,idum) -+ if(nsbzdn.eq.0)nsbzdn=10 -+ if(delzdn.lt.1.d-8)then -+ zlen=0.1d0*dble(mxzdn) -+ delzdn=0.1d0 -+ elseif(zlen.lt.1.d-8)then -+ zlen=delzdn*dble(mxzdn) -+ endif -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'Z density profile requested', -+ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn -+ write(nrite, -+ x "(1x,'zdensity bin width ',3x,1p,e12.4)") -+ x delzdn -+ write(nrite, -+ x "(1x,'zdensity range ',3x,1p,e12.4)") -+ x zlen -+ -+ endif -+ -+ elseif(findstring('collect',directive,idum))then -+ -+ lzeql=.false. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration included in overall averages')") -+ -+ elseif(findstring('neb',directive,idum))then -+ -+c activate nudged elastic band option -+ -+ call neb_option(directive,lneb,lminopt,idnode, -+ x numneb,keytol,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('impact',directive,idum))then -+ -+c activate the impact option -+ -+ if(lhit)call error(idnode,516) -+ lhit=.true. -+ khit=intstr(directive,lenrec,idum) -+ nhit=intstr(directive,lenrec,idum) -+ ehit=dblstr(directive,lenrec,idum) -+ xhit=dblstr(directive,lenrec,idum) -+ yhit=dblstr(directive,lenrec,idum) -+ zhit=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'impact option selected')") -+ write(nrite,"( -+ x /,1x,'identity of impact atom ',i10, -+ x /,1x,'time step of impact ',i10, -+ x /,1x,'impact recoil energy (keV) ',1p,e12.4, -+ x /,1x,'impact direction (x component) ',1p,e12.4, -+ x /,1x,'impact direction (y component) ',1p,e12.4, -+ x /,1x,'impact direction (z component) ',1p,e12.4)") -+ x khit,nhit,ehit,xhit,yhit,zhit -+ -+ endif -+ -+c convert impact energy from keV to internal units -+ -+ ehit=ehit*9648530.821d0 -+ -+ elseif(findstring('bpd',directive,idum))then -+ -+c activate the BPD option -+ -+ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, -+ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, -+ x catchrad,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('tad',directive,idum))then -+ -+c activate temperature accelerated dynamics option -+ -+ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, -+ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, -+ x deltad,opttol,hyp_units) -+ -+ elseif(findstring('minim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ minstp=intstr(directive,lenrec,idum) -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ lminim=.true. -+ loptim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'minimisation programme requested')") -+ write(nrite, -+ x "(1x,'structure minimisation interval ', -+ x 3x,i10)")minstp -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'structure minimisation tolerance', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('optim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ loptim=.true. -+ lminim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'structure optimisation requested')") -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'tolerance for structure optimisation ', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('zero',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ temp=1.d0 -+ lzero=.true. -+ loptim=.false. -+ lminim=.false. -+ ltemp=.true. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'zero K optimisation requested')") -+ write(nrite, -+ x "(' temperature reset to',1p,e12.4)")1.d0 -+ -+ endif -+ -+ else if(findstring('solva',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ else if(findstring('decomp',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ elseif(findstring('metafreeze',directive,idum).or. -+ x findstring('metadyn',directive,idum))then -+ -+c activate metadynamics option - d. quigley -+ -+ call metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+ else if(findstring('free',directive,idum))then -+ -+ call free_energy_option(directive,lfree,lfrmas,idnode) -+ -+ else if(findstring('excite',directive,idum))then -+ -+ call excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+ else if(findstring('switch',directive,idum))then -+ -+ call switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+ elseif(findstring('print',directive,idum))then -+ -+ nstbpo=intstr(directive,lenrec,idum) -+ nstbpo=max(nstbpo,1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data printing interval ',3x,i10)")nstbpo -+ -+ elseif(findstring('stack',directive,idum))then -+ -+ nstack=intstr(directive,lenrec,idum) -+ -+c reset stack limit if too large -+ -+ nstack=min(nstack,mxstak) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data stacking interval ',3x,i10)")nstack -+ -+ elseif(findstring('stats',directive,idum))then -+ -+ intsta=intstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'statistics file interval ',3x,i10)")intsta -+ -+ elseif(findstring('traj',directive,idum))then -+ -+ ltraj=.true. -+ nstraj=intstr(directive,lenrec,idum) -+ istraj=max(intstr(directive,lenrec,idum),1) -+ keytrj=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'trajectory file option on ', -+ x /,1x,'trajectory file start ',3x,i10, -+ x /,1x,'trajectory file interval ',3x,i10 -+ x /,1x,'trajectory file info key ',3x,i10)") -+ x nstraj,istraj,keytrj -+ -+ elseif(findstring('ewald',directive,idum).or. -+ x findstring('spme',directive,idum).or. -+ x findstring('hke',directive,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ call ewald_selection(directive,lhke,lspme,lewald,lcut, -+ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, -+ x kmax3,alpha,rcut) -+ -+ elseif(findstring('distan',directive,idum))then -+ -+ keyfce=4 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('coul',directive,idum))then -+ -+ keyfce=6 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Coulombic potential')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('shift',directive,idum))then -+ -+ keyfce=8 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('reaction',directive,idum))then -+ -+ keyfce=10 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : reaction field')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('cap',directive,idum))then -+ -+ lfcap=.true. -+ fm=dblstr(directive,lenrec,idum) -+ if(fm.gt.0.d0)fmax=fm -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax -+ -+ elseif(findstring('no vdw',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'short-range potential terms off')") -+ lvdw=.true. -+ -+ elseif(findstring('no elec',directive,idum))then -+ -+ keyfce=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'electrostatic potential terms off')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('mult',directive,idum))then -+ -+ multt=max(intstr(directive,lenrec,idum),1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'multiple timestep interval ',3x,i10)")multt -+ -+ elseif(findstring('timestep',directive,idum))then -+ -+ lstep=.true. -+ tstep=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep -+ -+ elseif(findstring('temp',directive,idum))then -+ -+ ltemp=.true. -+ temp=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp -+ -+ elseif(findstring('pres',directive,idum))then -+ -+ press=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press -+ -+c convert from katm to internal units of pressure -+ -+ press=press/prsunt -+ lpres=.true. -+ -+ elseif(findstring('prim',directive,idum))then -+ -+c primary cutoff -+ -+ lprim=.true. -+ rprim=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim -+ -+ elseif(findstring('rvdw',directive,idum))then -+ -+c cutoff for short range potentials -+ -+ rvdw=dblstr(directive,lenrec,idum) -+ lrvdw=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw -+ -+ elseif(findstring('delr',directive,idum))then -+ -+c Verlet shell width -+ -+ ldelr=.true. -+ delr=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr -+ -+ elseif(findstring('cut',directive,idum))then -+ -+c cutoff -+ -+ lcut=.true. -+ rcut=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut -+ -+ elseif(findstring('eps',directive,idum))then -+ -+c relative dielectric constant -+ -+ epsq=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq -+ -+ elseif(findstring('rlxtol',directive,idum))then -+ -+c force tolerance for shell relaxation -+ -+ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol -+ -+ elseif(findstring('shake',directive,idum))then -+ -+c tolerance for shake -+ -+ tolnce=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce -+ -+ elseif(findstring('quaternion',directive,idum))then -+ -+c tolerance for quaternion integration -+ -+ quattol=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol -+ -+ elseif(findstring('job time',directive,idum))then -+ -+c time for simulation (in seconds/minutes/hours/days or indefinite) -+ -+ if(findstring('indef',directive,idum))then -+ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 -+ else -+ timjob=dblstr(directive,lenrec,idum) -+ if(findstring('m',directive,idum))then -+ timjob=6.0d1*timjob -+ elseif(findstring('h',directive,idum))then -+ timjob=3.6d3*timjob -+ elseif(findstring('d',directive,idum))then -+ timjob=8.64d4*timjob -+ endif -+ endif -+ -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") -+ x hms,prntim -+ -+ elseif(findstring('close time',directive,idum))then -+ -+c time for winding up a job (in seconds) -+ -+ timcls=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls -+ -+ elseif(findstring('all pairs',directive,idum))then -+ -+c full minimum image - N^2 interactions each timestep -+ -+ lnsq=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'All-pairs requested for electrostatics')") -+ -+ elseif(findstring('nospl',directive,idum))then -+ -+c set ewald_spme interpolation order -+ -+ nospl=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('finish',directive,idum))then -+ -+c safe termination of reading CONTROL file -+ -+ loop=.false. -+ -+ else -+ -+c unrecognised directive in control file -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ enddo -+ -+c check on steps before temperature scaling -+ -+ if(nstbts.eq.0)nstbts=nstrun+1 -+ -+c conduct consistency checks on directives -+ -+ if(lminim)then -+ -+c ensure final configuration follows minimisation -+ -+ if(minstp.eq.0)minstp=nstrun -+ nstrun=minstp*(nstrun/minstp) -+ -+ endif -+ -+c check force activation options -+ -+ if(.not.lforc)then -+ -+c check if any forces are in operation -+ -+ if(.not.lvdw)then -+ -+ kill=.true. -+ call error(idnode,-383) -+ -+ endif -+ -+ else -+ -+c turn on short range forces -+ -+ if(lvdw)then -+ -+ if(keyfce.eq.0)then -+ -+ lcut=.true. -+ ldelr=.true. -+ -+ endif -+ -+ else -+ -+ keyfce=keyfce+1 -+ -+ endif -+ -+ endif -+ -+c if tad selected use only leap frog -+ -+ if(ltad.and.keyver.eq.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to leapfrog for TAD dynamics')") -+ keyver=0 -+ -+ endif -+ -+c error checking -+ -+ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then -+ -+ kill=.true. -+ call error(idnode,-2360) -+ -+ endif -+ -+ if(lsolva.or.lfree.or.lexcite.or.lswitch)then -+ -+ if(lspme)then -+ -+ kill=.true. -+ call error(idnode,-601) -+ -+ endif -+ -+ if(lhke)then -+ -+ kill=.true. -+ call error(idnode,-602) -+ -+ endif -+ -+ endif -+ -+ if(lghost.and.nstbgr.ne.isolva)then -+ -+ call warning(idnode,130,dble(isolva),0.d0,0.d0) -+ nstbgr=isolva -+ -+ endif -+ if(lfree.and.lgofr)then -+ -+ call warning(idnode,140,0.d0,0.d0,0.d0) -+ lgofr=.false. -+ lpgr=.false. -+ -+ endif -+ if(loptim)then -+ -+ temp=0.d0 -+ -+ elseif(.not.ltemp)then -+ -+ kill=.true. -+ call error(idnode,-380) -+ -+ endif -+ -+ if(.not.lstep)then -+ -+ kill=.true. -+ call error(idnode,-381) -+ -+ endif -+ -+ if(.not.lcut)then -+ -+ kill=.true. -+ call error(idnode,-382) -+ -+ endif -+ -+c check if van der Waals cutoff set -+ -+ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then -+ -+ if(rcut.gt.0.d0)then -+ -+ rvdw=rcut -+ -+ else -+ -+ kill=.true. -+ call error(idnode,-402) -+ -+ endif -+ -+ endif -+ -+ if(.not.ldelr)then -+ -+ kill=.true. -+ call error(idnode,-384) -+ -+ endif -+ -+ if(multt.gt.1)then -+ -+ if(.not.lprim)then -+ -+ kill=.true. -+ call error(idnode,-385) -+ -+ elseif(rprim.gt.rcut)then -+ -+ kill=.true. -+ call error(idnode,-386) -+ -+ endif -+ -+ endif -+ -+c check settings in nvt ensemble -+ -+ if(keyens.ge.2.and.keyens.le.3)then -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ -+ endif -+ -+c check settings in npt ensemble -+ -+ if(keyens.ge.4.and.keyens.le.7)then -+ -+ if(.not.lpres)then -+ -+ kill=.true. -+ call error(idnode,-387) -+ -+ endif -+ -+c check barostat and thermostat rates non zero -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ if(taup.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-466) -+ -+ endif -+ -+ endif -+ -+c check multiple timestep cutoffs are sensible -+ -+ if(multt.gt.1)then -+ if(rcut-rprim.lt.delr)then -+ -+ kill=.true. -+ call error(idnode,-398) -+ -+ endif -+ endif -+ -+c check rcut > rvdw (for verlet list constructor) -+ -+ if(rcut.lt.rvdw)then -+ -+ kill=.true. -+ call error(idnode,-400) -+ -+ endif -+ -+c check spme is not being used with incorrect pbc -+ -+ if(lspme)then -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ kill=.true. -+ call error(idnode,-513) -+ -+ endif -+ -+ endif -+ -+c check on all-pairs calculation request -+ -+ if(lnsq)then -+ -+ if(multt.eq.1)then -+ -+ kill=.true. -+ call error(idnode,-422) -+ -+ endif -+ -+ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then -+ -+ kill=.true. -+ call error(idnode,-424) -+ -+ endif -+ -+ endif -+ -+c cancel rdf option if no vdw or coulombic forces -+ -+ if(lgofr.and.keyfce.eq.0)then -+ -+ lgofr=.false. -+ call warning(idnode,120,0.d0,0.d0,0.d0) -+ -+ endif -+ -+ if(kill)call abort_control_read(2,idnode,nread) -+ -+c close CONTROL file -+ -+ if(idnode.eq.0)close(nread) -+ -+ return -+ end subroutine simdef -+ -+ subroutine sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the molecular specifications -+c of the system to be simulated -+c version for rigid unit data and neutral groups -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992. -+c amended - w.smith march 1994 -+c amended - t.forester april 1994 -+c amended - w.smith dec 1994 - getrec etc -+c amended - a.smondyrev may 2000 - keydih=5 for -+c ryckaert-bellemans potential in dihedrals -+c amended - a.smondyrev may 2000 - keydih=6 for -+c fluorinated ryckaert-bellemans potential in dihedrals -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf -+ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost -+ -+ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls -+ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite -+ integer nsite,nconst,nangle,ndihed,ninver,nbonds -+ integer nteth,nspmf,itmols,i,idum,keyver -+ integer ntpter,keyshl,iatm,natmsr,ntghost -+ -+ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb -+ real(8) sumchg -+ -+ data loop1/.true./,loop2/.true./ -+ -+c initialise system counters: atomic site index, number of -+c constraints, bond angles, dihedrals, inversions, chemical bonds, -+c unique atom types, total number of atoms, -+c total number of rigid groups, number of tethered atoms, -+c number of three body potentials -+ -+ nsite=0 -+ nconst=0 -+ nangle=0 -+ ndihed=0 -+ ninver=0 -+ nbonds=0 -+ ntpatm=0 -+ natms=0 -+ ngrp=0 -+ nteth=0 -+ ntptbp=0 -+ ntpter=0 -+ ntpmet=0 -+ ntpvdw=0 -+ ntpfbp=0 -+ nshels=0 -+ nspmf=0 -+ keyfld=0 -+ keyshl=0 -+ ntghost=0 -+ natmsr=0 -+ ntcons_ghost=0 -+ -+ lunits=.false. -+ lmols=.false. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ lshl=.false. -+ lpmf=.false. -+ engunit=1.d0 -+ -+ numbonds(:)=0 -+ numpmf(:)=0 -+ numcon(:)=0 -+ numdih(:)=0 -+ numinv(:)=0 -+ numgrp(:)=0 -+ numsit(:)=0 -+ numteth(:)=0 -+ numshl(:)=0 -+ npmf(:)=0 -+ indpmf(:)=0 -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD',status='old') -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c convert to lowercase and remove leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('units',record,idum))then -+ -+c identify energy unit for input/output -+ -+ lunits=.true. -+ call define_units(idnode,engunit) -+ -+c neutral group control option -+ -+ elseif(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ if(idnode.eq.0) -+ x write(nrite,"(/,' neutral group implementation in use')") -+ -+c can't have neutral groups with all-pairs -+ -+ if(lnsq)call error(idnode,426) -+ -+c specify molecular species -+ -+ elseif(findstring('molecu',record,idum))then -+ -+c number of molecular types -+ -+ if(lmols)call error(idnode,11) -+ lmols=.true. -+ ntpmls=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") -+ x ntpmls -+ -+ if(ntpmls.gt.mxtmls)call error(idnode,10) -+ -+c initialise total system charge -+ -+ sumchg=0.d0 -+ -+c read in molecular characteristics -+ -+ do itmols=1,ntpmls -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'molecular species type',9x,i10)") -+ x itmols -+ -+c name of molecular species -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call copystring(record,molnam(1,itmols),40) -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") -+ x (molnam(i,itmols),i=1,40) -+ -+c stop processing if energy unit has not been specified -+ -+ if(.not.lunits)call error(idnode,6) -+ -+c read molecular data -+ -+ loop2=.true. -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'number of molecules ', -+ x 10x,i10)")nummols(itmols) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+c read in atomic details -+ -+ call define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read core - shell spring parameters -+ -+ elseif(findstring('shell',record,idum))then -+ -+ lshl=.true. -+ call define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl, -+ x engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read chemical bond force constant and bondlength -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ call define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read bond atom indices and constraint bondlength -+ -+ elseif(findstring('constr',record,idum))then -+ -+ call define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read pmf bond atom indices, weights and constraint bondlength -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ if(lpmf)call error(idnode,484) -+ lpmf=.true. -+ call define_pmf(safe,idnode,itmols,nspmf) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular angular potential parameters -+ -+ elseif(findstring('angles',record,idum))then -+ -+ call define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular dihedral potential parameters -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ call define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular inversion potential parameters -+ -+ elseif(findstring('invers',record,idum))then -+ -+ call define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read rigid body data -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ call define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read tethered atom indices and tethering parameters -+ -+ elseif(findstring('teth',record,idum))then -+ -+ call define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c finish of data for one molecular type -+ -+ elseif(findstring('finish',record,idum))then -+ -+c running total of number of atoms in system -+ -+ natms=natms+nummols(itmols)*numsit(itmols) -+ if(natms.gt.mxatms)call error(idnode,75) -+ -+c check core-shell units are not both in same rigid body unit -+ -+ call check_shells(idnode,itmols,nshels,ngrp) -+ -+ loop2=.false. -+ -+ else -+ -+c error exit for unidentified directive in molecular data -+ -+ if(idnode.eq.0)write(nrite,'(12x,a)')record -+ call error(idnode,12) -+ -+ endif -+ -+ enddo -+ -+c construction of atmolt table for solvation calculation -+ -+ if(lsolva)then -+ -+ do iatm=natmsr+1,natms -+ atmolt(iatm)=itmols -+ enddo -+ natmsr=natms -+ -+ endif -+ -+ enddo -+ -+c construction of atm_fre table for free energy or excitation -+ -+ if(lfree.or.lexcite.or.lswitch)then -+ -+ atm_fre(:)=0 -+ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then -+ -+ do iatm=ind_fre(1),ind_fre(2) -+ atm_fre(iatm)=1 -+ enddo -+ -+ endif -+ -+ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then -+ -+ do iatm=ind_fre(3),ind_fre(4) -+ -+ atm_fre(iatm)=2 -+ if(lghost)ntghost=ntghost+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c calculate system charge -+ -+ call check_syschg(idnode,ntpmls,sumchg) -+ -+c read in the nonbonded potential energy parameters -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ call define_van_der_waals -+ x (safe,ltable,lunits,lmols,idnode,ntpvdw, -+ x ntpatm,keyfce,dlrpot,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the metal potential energy parameters -+ -+ elseif(findstring('met',record,idum))then -+ -+ call define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the three body potential energy parameters -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ call define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the tersoff potential energy parameters -+ -+ elseif(findstring('tersoff',record,idum))then -+ -+ call define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the four body potential energy parameters -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ call define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read external field data -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c normal end of FIELD file -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. -+ x mod(keyfce,2).eq.1)call error(idnode,145) -+ -+c error exit for unidentified directive -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(100a)')record -+ call abort_field_read(2,idnode,nfield) -+ -+ endif -+ -+ enddo -+ -+c close force field file -+ -+ if(idnode.eq.0)close (nfield) -+ -+ -+ if(lshl.and.idnode.eq.0)then -+ -+ if(keyshl.eq.1)write(nrite, -+ x "(/,/,'adiabatic shell model in operation')") -+ -+ if(keyshl.eq.2)write(nrite, -+ x "(/,/,'relaxed shell model in operation')") -+ -+ endif -+ -+ if(lshl.and.keyshl.eq.0)call error(idnode,1951) -+ -+c if metadynamics and shell selected use only velocity verlet -+ -+ if(lshl.and.lmetadyn.and.keyver.eq.0)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to velocity verlet for metadynamics')") -+ keyver=1 -+ -+ endif -+ -+ return -+ end subroutine sysdef -+ -+ subroutine sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the configuration data file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 atname(8) -+ -+ logical loglnk,safe,lneut,nolink,lfree,lfrmas -+ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt -+ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz -+ integer m,l,ncells,idum,mxnode -+ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc -+ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi -+ real(8) width,dum1,dum2,test,com(3) -+ -+c open the system input file -+ -+ if(idnode.eq.0)open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ call copystring(record,cfgname,80) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ levcfg=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'selected image convention',6x,i10)")imcon -+ -+c check config file contents for consistent data -+ -+ if((imcon.eq.0.or.imcon.eq.6).and. -+ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) -+ x call error(idnode,180) -+ -+ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) -+ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) -+ -+ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) -+ x call error(idnode,390) -+ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 -+ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.eq.0)then -+ -+c if no periodic boundaries - set zero values for cell -+c vectors and cell volume -+ -+ cell(:)=0.d0 -+ volm=0.d0 -+ -+ else -+ -+c read cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+ endif -+ -+c read the atomic coordinates -+ -+ indatm=0 -+ indnam=0 -+ indneu=0 -+ safe=.true. -+ -+ do k=1,ntpmls -+ -+ do l=1,nummols(k) -+ -+ do m=1,numsit(k) -+ -+ indatm=indatm+1 -+ -+ if(indatm.gt.mxatms)call error(idnode,45) -+ -+ xxx(indatm)=0.d0 -+ yyy(indatm)=0.d0 -+ zzz(indatm)=0.d0 -+ vxx(indatm)=0.d0 -+ vyy(indatm)=0.d0 -+ vzz(indatm)=0.d0 -+ fxx(indatm)=0.d0 -+ fyy(indatm)=0.d0 -+ fzz(indatm)=0.d0 -+ -+ if(idnode.eq.0)then -+ -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ -+ elseif(levcfg.eq.1)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ -+ else -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce -+ -+ endif -+ -+c strip blanks off atom name -+ -+ call strip(atname,8) -+ -+ if(sitnam(indnam+m).eq.mkwd8(atname))then -+ -+ xxx(indatm)=xcoord -+ yyy(indatm)=ycoord -+ zzz(indatm)=zcoord -+ -+ if(levcfg.gt.0)then -+ -+ vxx(indatm)=xveloc -+ vyy(indatm)=yveloc -+ vzz(indatm)=zveloc -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ fxx(indatm)=xforce -+ fyy(indatm)=yforce -+ fzz(indatm)=zforce -+ -+ endif -+ -+ else -+ -+ write(nrite,"(/,/,'unidentified atom label :',8a1, -+ x ': atom number ',i5)")atname,indatm -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ call gstate(safe) -+ if(.not.safe)call error(idnode,25) -+ -+ ltype(indatm)=ltpsit(indnam+m) -+ weight(indatm)=wgtsit(indnam+m) -+ chge(indatm)=chgsit(indnam+m) -+ atmnam(indatm)=sitnam(indnam+m) -+ lstfrz(indatm)=lfzsit(indnam+m) -+ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu -+ -+c reset atomic masses according to free energy definitions -+ -+ if(lfree)then -+ -+ weight_sav(indatm)=weight(indatm) -+ -+ if(lfrmas)then -+ -+ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then -+ weight(indatm)=lambda1*weight(indatm) -+ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) -+ x then -+ weight(indatm)=lambda2*weight(indatm) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ indneu=indneu+nugrp(indnam+numsit(k)) -+ -+ enddo -+ -+ indnam=indnam+numsit(k) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(xxx,indatm,buffer) -+ call gdsum(yyy,indatm,buffer) -+ call gdsum(zzz,indatm,buffer) -+ -+ if(levcfg.gt.0)then -+ -+ call gdsum(vxx,indatm,buffer) -+ call gdsum(vyy,indatm,buffer) -+ call gdsum(vzz,indatm,buffer) -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ call gdsum(fxx,indatm,buffer) -+ call gdsum(fyy,indatm,buffer) -+ call gdsum(fzz,indatm,buffer) -+ -+ endif -+ -+ endif -+ -+c check integrity of cell vectors : for cubic, TO and RD cases -+c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) -+ -+ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then -+ -+ axx=(abs(cell(1))+abs(cell(5)))/2.d0 -+ test=1.d-8*axx -+ if(abs(cell(1)-axx).gt.test)call error(idnode,410) -+ if(abs(cell(5)-axx).gt.test)call error(idnode,410) -+ if(imcon.eq.5)then -+ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) -+ x call error(idnode,410) -+ else -+ if(abs(cell(9)-axx).gt.test)call error(idnode,410) -+ endif -+ -+ endif -+ -+c check integrity of hexagonal prism cell vectors -+ -+ if(imcon.eq.7)then -+ -+ rt3=sqrt(3.d0) -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,410) -+ -+ endif -+ -+c check 2D PBC for imcon=6 -+ -+ if(imcon.eq.6)then -+ -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c check for diagonal cell matrix if appropriate -+ -+ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. -+ x (imcon.eq.5).or.(imcon.eq.7))then -+ -+ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c put centre of mass at centre of coordinates if imcon=0 -+ -+ if(imcon.eq.0)then -+ -+ totmas=getmass(indatm,idnode,mxnode) -+ call getcom(indatm,idnode,mxnode,totmas,com) -+ -+ do i=1,indatm -+ -+ xxx(i)=xxx(i)-com(1) -+ yyy(i)=yyy(i)-com(2) -+ zzz(i)=zzz(i)-com(3) -+ -+ enddo -+ -+ endif -+ -+c set widths if unset - needed for check on link cells below -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ xhi=abs(xxx(1)) -+ yhi=abs(yyy(1)) -+ zhi=abs(zzz(1)) -+ do i=2,indatm -+ -+ xhi=max(xhi,abs(xxx(i))) -+ yhi=max(yhi,abs(yyy(i))) -+ zhi=max(zhi,abs(zzz(i))) -+ -+ enddo -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ if(imcon.eq.6.and.cell(9).lt.1.d-6)then -+ -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ endif -+ -+c calculate dimensional properties of simulation cell -+ -+ call dcell(cell,celprp) -+ -+ if(imcon.eq.0)then -+ -+ volm=0.d0 -+ -+ elseif(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ else -+ -+ volm=celprp(10) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") -+ write(nrite,"(21x,3f12.6)")cell -+ -+ write(nrite, -+ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm -+ -+ endif -+ -+c check value of cutoff and reset if necessary -+ -+ if(imcon.gt.0)then -+ -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 -+ if(imcon.eq.5)width=cell(1)/2.d0 -+ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 -+ -+c halt program if potential cutoff exceeds cell width -+ -+ if(rcut.gt.width)call error(idnode,95) -+ -+ endif -+ -+c decide on whether to use link cells for verlet list constructor -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ -+ ilx=int(celprp(7)/(rcut+delr)) -+ ily=int(celprp(8)/(rcut+delr)) -+ ilz=int(celprp(9)/(rcut+delr)) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(lneut.and.ncells.le.36)loglnk=.false. -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(loglnk.and.ncells.gt.mxcell)then -+ -+ dum1=dble(ncells) -+ dum2=dble(mxcell) -+ call warning(idnode,90,dum1,dum2,dum2) -+ loglnk=.false. -+ -+ endif -+ -+ endif -+ -+ if(loglnk.and.idnode.eq.0) -+ x write(nrite,"(/,/,' link cell algorithm in use')") -+ -+ if(idnode.eq.0)close (nconf) -+ -+c ensure PBC compliance of starting structure -+ -+ if(keyres.eq.0.and.imcon.gt.0)then -+ -+ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ -+c error exit for config file read -+ -+ 100 call abort_config_read(2,idnode,nconf) -+ -+ end subroutine sysgen -+ -+ subroutine sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the REVIVE file data and -+c defining the initial thermodynamic and structural accumulators. -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc -+ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc -+ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw -+ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm -+ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost -+ real(8) chit_shl -+ -+c read or initialise accumulator arrays -+ -+ if(keyres.eq.1.and.idnode.eq.0)then -+ -+c read accumulator data from dump file -+ -+ open(nrest,file='REVOLD',form='unformatted') -+ -+ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, -+ x tboost,chit_shl -+ read(nrest) virtot,vircom,eta,strcns,strbod -+ read(nrest) stpval -+ read(nrest) sumval -+ read(nrest) ssqval -+ read(nrest) zumval -+ read(nrest) ravval -+ read(nrest) stkval -+ read(nrest) xx0,yy0,zz0 -+ read(nrest) xxs,yys,zzs -+ -+ if(lgofr) read(nrest)rdf -+ if(lzden) read(nrest)zdens -+ -+ nstep=nint(dnstep) -+ numacc=nint(dnumac) -+ numrdf=nint(dnumrd) -+ nzden=nint(dnzden) -+ close (nrest) -+ -+ else -+ -+c initialise step counters -+ -+ nstep=0 -+ numacc=0 -+ numrdf=0 -+ nzden=0 -+ -+c initialise temperature and pressure coupling parameters -+c and integral for conserved quantity -+ -+ chit=0.d0 -+ chip=0.d0 -+ conint=0.d0 -+ virtot=0.d0 -+ vircom=0.d0 -+ chit_shl=0.d0 -+ do i=1,9 -+ -+ eta(i)=0.d0 -+ strcns(i)=0.d0 -+ strbod(i)=0.d0 -+ -+ enddo -+ -+c initialise accumulator arrays -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ zumval(i)=0.d0 -+ ravval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ xxs(i)=0.d0 -+ yys(i)=0.d0 -+ zzs(i)=0.d0 -+ -+ enddo -+ -+ do j=1,mxnstk -+ -+ do i=1,mxstak -+ -+ stkval(i,j)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ zdens(j,i)=0.d0 -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c put shells on cores at start -+ -+ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) -+ x call put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c if restart then broadcast stored variables via a global sum -+ -+ if(keyres.eq.1.and.mxnode.gt.1)then -+ -+ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) -+ x call error(idnode,186) -+ -+ buffer(1)=chit -+ buffer(2)=chip -+ buffer(3)=conint -+ buffer(4)=dble(nstep) -+ buffer(5)=dble(numacc) -+ buffer(6)=dble(numrdf) -+ buffer(7)=dble(nzden) -+ buffer(8)=tboost -+ buffer(9)=virtot -+ buffer(10)=vircom -+ buffer(11)=chit_shl -+ call gdsum(buffer(1),11,buffer(12)) -+ chit=buffer(1) -+ chip=buffer(2) -+ conint=buffer(3) -+ nstep=nint(buffer(4)) -+ numacc=nint(buffer(5)) -+ numrdf=nint(buffer(6)) -+ nzden=nint(buffer(7)) -+ tboost=buffer(8) -+ virtot=buffer(9) -+ vircom=buffer(10) -+ chit_shl=buffer(11) -+ -+ call gdsum(eta,9,buffer) -+ call gdsum(strcns,9,buffer) -+ call gdsum(strbod,9,buffer) -+ call gdsum(stpval,mxnstk,buffer) -+ call gdsum(sumval,mxnstk,buffer) -+ call gdsum(ssqval,mxnstk,buffer) -+ call gdsum(zumval,mxnstk,buffer) -+ call gdsum(ravval,mxnstk,buffer) -+ call gdsum(stkval,mxnstk*mxstak,buffer) -+ call gdsum(xx0,natms,buffer) -+ call gdsum(yy0,natms,buffer) -+ call gdsum(zz0,natms,buffer) -+ call gdsum(xxs,natms,buffer) -+ call gdsum(yys,natms,buffer) -+ call gdsum(zzs,natms,buffer) -+ -+c for rdf table - broadcast and normalise -+ -+ if(lgofr)then -+ -+ do k=1,mxxtyp -+ -+ call gdsum(rdf(1,k),mxrdf,buffer) -+ -+ do j=1,mxrdf -+ rdf(j,k)=rdf(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do k=1,mxatyp -+ -+ call gdsum(zdens(1,k),mxzdn,buffer) -+ -+ do j=1,mxzdn -+ zdens(j,k)=zdens(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities and long-range corrections -+ -+ elrc=0.d0 -+ virlrc=0.d0 -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 -+ -+ call lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) -+ -+ if(lmetab.or.ntpmet.eq.0)then -+ -+ elrcm(0)=0.d0 -+ vlrcm(0)=0.d0 -+ -+ else -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 -+ -+ return -+ end subroutine sysinit -+ -+ subroutine systemp -+ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for setting the initial system temperature -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl -+ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq -+ -+c number of degrees of freedom -+c 3 for com translation -+c 3 for angular momentum about origin (non-periodic systems only) -+ -+ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre -+ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 -+ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) -+ degshl=dble(3*ntshl) -+ -+c lose one degree of freedom if temperature constrained -+c gaussian constraints -+ -+c if(keyens.eq.1)degfre=degfre-1.d0 -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, -+ x ' rotational degrees of freedom ',f20.0,/, -+ x ' shell pseudo degrees of freedom',f20.0)") -+ x degfre,degrot,degshl -+ if(degfre.lt.1.d0)call error(idnode,350) -+ -+c define reciprocal masses of atoms -+ -+ do i=1,natms -+ -+ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then -+ -+ rmass(i)=0.d0 -+ weight(i)=0.d0 -+ -+ else -+ -+ rmass(i)=1.d0/weight(i) -+ -+ endif -+ -+ enddo -+ -+c generate starting velocities -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+ if(keyres.eq.0)then -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ elseif(keyres.eq.1.or.keyres.eq.3)then -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ elseif(keyres.eq.2)then -+ -+ if(ngrp.gt.0)then -+ -+ call vscaleg -+ x (idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ elseif(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c print out sample of initial configuration -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'sample of starting configuration',/)") -+ -+ io=(natms+19)/20 -+ if((levcfg.le.1).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") -+ if((levcfg.eq.2).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', -+ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") -+ -+ do i=1,natms,io -+ -+ if(levcfg.le.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) -+ -+ elseif(levcfg.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i), -+ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine systemp -+ -+ subroutine sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine defining global bookkeeping -+c arrays -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost -+ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i -+ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl -+ integer ntghost,natms2 -+ real(8) degfre,degrot -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c neutral group bookkeeping -+ -+ call neutbook(lneut,idnode,natms,nneut) -+ -+c rigid body bookkeeping -+ -+ call quatbook -+ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, -+ x ntfree,degfre,degrot) -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost -+ -+ endif -+ -+c construct list of excluded pair interactions -+ -+ if(lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ call excludeneu(idnode,mxnode,nneut) -+ -+ elseif(.not.lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ -+ if(loglnk)then -+ -+ call exclude_link(idnode,mxnode,ntpmls) -+ -+ else -+ -+ call exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+ endif -+ -+ endif -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost -+ -+ endif -+ -+c construct interaction lists for bonded forces -+ -+ call intlist -+ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c adaptations for solvation and excitation simulations -+ -+ if(lsolva.or.lghost)then -+ -+ natmsf=0 -+ natmsl=0 -+ natm_sol(:)=0 -+ const_sol(:)=numcon(:)*nummols(:) -+ rigid_sol(:)=numgrp(:)*nummols(:) -+ -+ if(ngrp.eq.0)then -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ else -+ -+ ii=1 -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstgot_sol(ii).eq.isol)then -+ ii=ii+1 -+ else -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ -+ endif -+ -+ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost -+ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) -+ -+ endif -+ -+ return -+ end subroutine sysbook -+ -+ subroutine define_units(idnode,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting energy units -+c -+c copyright - daresbury laboratory -+c author - w. smith august 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,idum,i -+ real(8) engunit -+ logical blank -+ -+ blank=.true. -+ -+ do i=6,lenrec -+ if(record(i).ne.' ')blank=.false. -+ enddo -+ -+ if(blank)then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal ', -+ x 'units ')") -+ -+ elseif(findstring('ev',record,idum))then -+ -+ engunit=9648.530821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=electron volts ')") -+ -+ elseif(findstring('kev',record,idum))then -+ -+ engunit=9648530.821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kilo electron volts ')") -+ -+ elseif(findstring('kcal',record,idum))then -+ -+ engunit=418.4d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kcal/ mol ')") -+ -+ elseif(findstring('kj',record,idum))then -+ -+ engunit=1.d2 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kjoule/mol ')") -+ -+ elseif(findstring('k',record,idum))then -+ -+ engunit=boltz -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kelvin ')") -+ -+ elseif(findstring('internal',record,idum))then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal', -+ x ' units ')") -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(a)')record -+ call error(idnode,5) -+ -+ endif -+ -+ return -+ end subroutine define_units -+ -+ subroutine quatbook -+ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, -+ x degfre,degrot) -+ -+c************************************************************************** -+c -+c dl_poly subroutine for setting up bookkeeping for rigid bodies -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c************************************************************************* -+ -+ implicit none -+ -+ logical safe,pass1,pass2,linear,lsolva -+ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree -+ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id -+ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij -+ integer fngrp,lngrp -+ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 -+ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz -+ real(8) rotlim,rrr -+ -+ integer, allocatable :: ind(:,:),lstgot(:) -+ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) -+ -+ data fail/0,0,0,0,0/ -+ -+c allocate working arrays -+ -+ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) -+ allocate (accum(mxungp),stat=fail(5)) -+ do i=1,5 -+ if(fail(i).ne.0)call error(idnode,1790) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ igrp=0 -+ jgrp=0 -+ kgrp=0 -+ isite=0 -+ jr=0 -+ jt=0 -+ safe=.true. -+ degfre=0.d0 -+ degrot=0.d0 -+ -+c rigid body identifier -+ -+ do i=1,natms -+ lstbod(i)=0 -+ enddo -+ -+c number of rigid groups in system -+ -+ ngrp=0 -+ do itmols=1,ntpmls -+ ngrp=ngrp+nummols(itmols)*numgrp(itmols) -+ enddo -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if(igrp.le.mxgrp)then -+ -+ lstgtp(igrp)=listyp(lgrp+kgrp) -+ id=listyp(lgrp+kgrp) -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then -+ -+ jgrp=jgrp+1 -+ -+ do jj=1,numgsit(id) -+ -+ jr=jr+1 -+ jt=jt+1 -+ -+ if(jr.le.mxatms.and.jt.le.mxatms)then -+ -+ lstrgd(jr)=lstgst(id,jj)+isite -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do jj=1,numgsit(id) -+ -+ jt=jt+1 -+ if(jt.le.mxatms)then -+ -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,304) -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kgrp=kgrp+numgrp(itmols) -+ -+ enddo -+ -+ if(ngrp.eq.0)then -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0)then -+ -+ j=j+1 -+ lstfre(j)=i -+ -+ endif -+ -+ enddo -+ ntfree=j -+ -+ else -+ -+c centre of mass of groups -+c assumes group dimensions are smaller than half box width -+ -+ do i=1,natms -+ lstme(i)=0 -+ enddo -+ -+ do id=1,mxungp -+ gmass(id)=0.d0 -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ safe=.false. -+ if(abs(gmass(id)).lt.1.d-10)safe=.true. -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ xxt(jr)=xxx(i)-txx(ig) -+ yyt(jr)=yyy(i)-tyy(ig) -+ zzt(jr)=zzz(i)-tzz(ig) -+ if(safe)gmass(id)=gmass(id)+weight(i) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) -+ -+ enddo -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c global communications -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+c make sure all nodes have same copy of gmass -+ -+ if(mxnode.gt.1)then -+ -+ do id=1,mxungp -+ -+ accum(id)=0.d0 -+ if(gmass(id).gt.0.d0)accum(id)=1.d0 -+ -+ enddo -+ -+ call gdsum(gmass(1),mxungp,buffer(1)) -+ call gdsum(accum(1),mxungp,buffer(1)) -+ -+ do id=1,mxungp -+ -+ dnorm=max(1.d0,accum(id)) -+ gmass(id)=gmass(id)/dnorm -+ -+ enddo -+ -+ endif -+ -+c find a group of each type on this node to -+c find principal axis system of the group type -+ -+ do id=1,mxungp -+ -+ jr=0 -+ ij=0 -+ safe=.false. -+ -+ do while(.not.safe.and.ij.lt.ngrp) -+ -+ ij=ij+1 -+ jr=jr+numgsit(lstgtp(ij)) -+ if(lstgtp(ij).eq.id)safe=.true. -+ -+ enddo -+ -+ if(safe)then -+ -+c rotational inertia accumulator -+ -+ do k=1,3 -+ -+ do kk=1,3 -+ -+ rotinr(k,kk)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ij) -+ yyt(jr)=yyy(i)-gcmy(ij) -+ zzt(jr)=zzz(i)-gcmz(ij) -+ -+ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) -+ -+ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) -+ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) -+ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) -+ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) -+ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) -+ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) -+ -+ enddo -+ -+ rotinr(2,1)=rotinr(1,2) -+ rotinr(3,1)=rotinr(1,3) -+ rotinr(3,2)=rotinr(2,3) -+ -+ call jacobi(rotinr,rot1,3) -+ -+ rot(1)=rot1(1,1) -+ rot(4)=rot1(2,1) -+ rot(7)=rot1(3,1) -+ rot(2)=rot1(1,2) -+ rot(5)=rot1(2,2) -+ rot(8)=rot1(3,2) -+ rot(3)=rot1(1,3) -+ rot(6)=rot1(2,3) -+ rot(9)=rot1(3,3) -+ -+c rotational inertia accumulators -+ -+ rotinx(id,1)=0.d0 -+ rotiny(id,1)=0.d0 -+ rotinz(id,1)=0.d0 -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+c site positions in principal axis system -+ -+ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) -+ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) -+ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) -+ -+c impose rounding -+ -+ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 -+ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 -+ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 -+ -+c rotational inertia tensor of group type -+ -+ rotinx(id,1)=rotinx(id,1)+ -+ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) -+ rotiny(id,1)=rotiny(id,1)+ -+ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) -+ rotinz(id,1)=rotinz(id,1)+ -+ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) -+ -+ enddo -+ -+c set axis system such that: Ixx >=Iyy >=Izz -+ -+ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) -+ -+ if(rotxyz.ge.rotinx(id,1))then -+ -+ if(rotiny(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gyy(id,j) -+ gyy(id,j)=-a1 -+ -+ enddo -+ -+ rotiny(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ elseif(rotinz(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ rotinz(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ endif -+ -+ endif -+ -+ if(rotinz(id,1).gt.rotiny(id,1))then -+ -+ do j=1,numgsit(id) -+ -+ a1=gyy(id,j) -+ gyy(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ a1=rotinz(id,1) -+ rotinz(id,1)=rotiny(id,1) -+ rotiny(id,1)=a1 -+ -+ endif -+ -+c set up principal axis system in terms of site positions -+ -+c test for (near) linear unit -+ -+ ill=0 -+ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) -+ -+ if(rtall.gt.1.d-5)then -+ rotall=rtall -+ else -+ rotall=1.d0 -+ endif -+ -+ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) -+ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall -+ -+ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ -+ if(ill.ge.2)then -+ -+c point particle only -+ -+ ind(id,1)=1 -+ ind(id,2)=1 -+ ind(id,3)=1 -+ -+ do jj=1,9 -+ gaxs(id,jj)=0.d0 -+ enddo -+ -+ elseif(ill.eq.1)then -+ -+c linear molecule -+ -+ ind(id,1)=1 -+ ind(id,2)=2 -+ ind(id,3)=1 -+ -+ aa(1)=gxx(id,1)-gxx(id,2) -+ aa(4)=gyy(id,1)-gyy(id,2) -+ aa(7)=gzz(id,1)-gzz(id,2) -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+ call invert(aa,bb,det) -+ -+ if(abs(det).lt.1.d-5)call error(idnode,306) -+ -+ do j=1,9 -+ gaxs(id,j)=bb(j) -+ enddo -+ -+ elseif(ill.eq.0)then -+ -+c non-linear molecule -+ -+ i1=1 -+ i2=1 -+ i3=1 -+ pass1=.true. -+ dettest=1.d-1 -+ -+ do while(pass1.and.i2.lt.numgsit(id)-1) -+ -+ i2=i2+1 -+ i3=i2 -+ pass2=.true. -+ -+ do while(pass2.and.i3.lt.numgsit(id)) -+ -+ i3=i3+1 -+ -+ aa(1)=gxx(id,i1)-gxx(id,i2) -+ aa(4)=gyy(id,i1)-gyy(id,i2) -+ aa(7)=gzz(id,i1)-gzz(id,i2) -+ aa(2)=gxx(id,i1)-gxx(id,i3) -+ aa(5)=gyy(id,i1)-gyy(id,i3) -+ aa(8)=gzz(id,i1)-gzz(id,i3) -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c invert matrix -+ -+ call invert(aa,bb,det) -+ -+c check on size of determinant - to see if the 3 sites are -+c too close to being linear for safety. -+ -+ pass2=abs(det).lt.dettest -+ -+ enddo -+ -+ pass1=abs(det).lt.dettest -+ -+ enddo -+ -+ if(abs(det).lt.dettest)call error(idnode,306) -+ -+c store indices used -+ -+ ind(id,1)=i1 -+ ind(id,2)=i2 -+ ind(id,3)=i3 -+ -+c store coefficients -+ -+ do j=1,9 -+ -+ gaxs(id,j)=bb(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check that rigid unit does not contain frozen atoms -+ -+ safe=.true. -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ if(lstfrz(i).ne.0)safe=.false. -+ -+ enddo -+ -+ enddo -+ -+c global check on error condition -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,360) -+ -+c quaternions for all rigid groups in system -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ i1=lstrgd(jr+ind(id,1)) -+ i2=lstrgd(jr+ind(id,2)) -+ i3=lstrgd(jr+ind(id,3)) -+ -+ jr=jr+numgsit(id) -+ -+c group basis vectors -+ -+ aa(1)=xxx(i1)-xxx(i2) -+ aa(4)=yyy(i1)-yyy(i2) -+ aa(7)=zzz(i1)-zzz(i2) -+ -+ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) -+ -+ if(rotmin(id).gt.1.d-5)then -+ -+ aa(2)=xxx(i1)-xxx(i3) -+ aa(5)=yyy(i1)-yyy(i3) -+ aa(8)=zzz(i1)-zzz(i3) -+ -+ else -+ -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ endif -+ -+ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c group rotational matrix -+ -+ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) -+ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) -+ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) -+ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) -+ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) -+ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) -+ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) -+ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) -+ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) -+ -+c determine quaternions from rotational matrix -+ -+ aq=rot(1)+rot(5) -+ bq=rot(2)-rot(4) -+ cq=rot(6)-rot(8) -+ dq=rot(2)+rot(4) -+ eq=rot(3)+rot(7) -+ fq=rot(6)+rot(8) -+ gq=rot(3)-rot(7) -+ hq=rot(1)-rot(5) -+ -+ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) -+ -+ if(q0(ig).gt.1.d-4)then -+ -+ q1(ig)=-0.25d0*cq/q0(ig) -+ q2(ig)=0.25d0*gq/q0(ig) -+ q3(ig)=-0.25d0*bq/q0(ig) -+ -+ else -+ -+ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q1(ig).gt.1.d-4)then -+ -+ q2(ig)=0.25d0*dq/q1(ig) -+ q3(ig)=0.25d0*eq/q1(ig) -+ -+ else -+ -+ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q2(ig).gt.1.d-4)then -+ -+ q3(ig)=0.25d0*fq/q2(ig) -+ -+ else -+ -+ q3(ig)=1.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c normalise quaternions -+ -+ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) -+ q0(ig)=rnorm*q0(ig) -+ q1(ig)=rnorm*q1(ig) -+ q2(ig)=rnorm*q2(ig) -+ q3(ig)=rnorm*q3(ig) -+ -+ enddo -+ -+c test for redundant degrees of freedom -+c and ensure rotational inertias are non-zero -+ -+ degrot=0.d0 -+ -+ if(lsolva)then -+ degrot_sol(:)=0.d0 -+ endif -+ -+ do ig=1,ngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ enddo -+ -+c rotational degrees of freedom and rigid body contribution -+c to total degrees of freedom -+ -+ degrot=degrot+dble(ngrp)*3.d0 -+ degfre=degrot+dble(ngrp)*3.d0 -+ -+ if(lsolva)then -+ -+ fngrp=1 -+ lngrp=0 -+ -+ do itmols=1,mxtmls -+ -+ lngrp=lngrp+nummols(itmols)*numgrp(itmols) -+ -+ do ig=fngrp,lngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ enddo -+ -+ fngrp=lngrp+1 -+ -+ enddo -+ -+ endif -+ -+c summarise results -+ -+ if(idnode.eq.0)then -+ -+ if(gmass(1).gt.0.d0)then -+ -+ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' -+ -+ do id=1,mxungp -+ -+ if(gmass(id).gt.0.d0)then -+ -+ write(nrite,'(/,a,i10)')' group of type ',id -+ write(nrite,'(12x,a,f20.10)')' total mass ', -+ x gmass(id) -+ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', -+ x rotinx(id,1),rotiny(id,1),rotinz(id,1) -+ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', -+ x 'b coord','c coord' -+ do j=1,numgsit(id) -+ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), -+ x gyy(id,j),gzz(id,j) -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c find number of unique groups -+ -+ ngp=0 -+ do ig=1,ngrp -+ ngp=max(ngp,lstgtp(ig)) -+ enddo -+ -+c calculate reciprocal of rotational inertias -+ -+ do id=1,ngp -+ -+ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1))*1.d-5 -+ -+ if(rotinx(id,1).lt.rotlim)then -+ rotinx(id,2)=0.d0 -+ else -+ rotinx(id,2)=1.d0/rotinx(id,1) -+ endif -+ -+ if(rotiny(id,1).lt.rotlim)then -+ rotiny(id,2)=0.d0 -+ else -+ rotiny(id,2)=1.d0/rotiny(id,1) -+ endif -+ -+ if(rotinz(id,1).lt.rotlim)then -+ rotinz(id,2)=0.d0 -+ else -+ rotinz(id,2)=1.d0/rotinz(id,1) -+ endif -+ -+ enddo -+ -+c Check of quaternion set up with atomic positions -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c group type -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ -+ txx(jr)=xxx(i)-xxt(i) -+ tyy(jr)=yyy(i)-yyt(i) -+ tzz(jr)=zzz(i)-zzt(i) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,txx,tyy,tzz) -+ -+c set tolerance for testing quaternion setup. -+ -+ rsq=0.d0 -+ tol=1.d-2 -+ -+ do i=1,jr -+ -+ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ if(rrr.gt.tol)then -+ -+ rsq=rrr -+ -+ endif -+ -+ enddo -+ -+c exit if error in set up -+ -+ safe=.true. -+ if(rsq.gt.tol)safe=.false. -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)call error(idnode,310) -+ -+c sort lstgot into ascending order -+ -+ call shellsort(jt,lstgot) -+ -+c check that no site is in more than 1 rigid group -+ -+ i=1 -+ safe=.true. -+ do while(i.lt.jt) -+ -+ i=i+1 -+ linear=.true. -+ do while(linear) -+ -+ linear=.false. -+ -+ if(lstgot(i).eq.lstgot(i-1))then -+ -+ linear=.true. -+ safe=.false. -+ jt=jt-1 -+ -+ do j=i,jt -+ lstgot(j)=lstgot(j+1) -+ enddo -+ -+ endif -+ -+ if(i.ge.jt)linear=.false. -+ -+ enddo -+ -+ enddo -+ -+ if(.not.safe)call error(idnode,320) -+ -+c list of 'free' sites -+ -+ ii=1 -+ jj=0 -+ do i=1,natms -+ -+ if(lstgot(ii).eq.i)then -+ -+ ii=ii+1 -+ -+ else -+ -+ if(lstfrz(i).eq.0)then -+ jj=jj+1 -+ lstfre(jj)=i -+ endif -+ -+ endif -+ -+ enddo -+ -+c number of free sites -+ -+ ntfree=jj -+ -+c list of atoms integrated on this node -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ jr=jr+numgsit(id) -+ -+ enddo -+ -+ do i=1,jr -+ lstme(i)=lstrgd(i) -+ enddo -+ -+c block parameters for free atoms -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do i=ifre1,ifre2 -+ -+ jr=jr+1 -+ lstme(jr)=lstfre(i) -+ -+ enddo -+ -+c exchange quaternion data with other nodes -+ -+ if(mxnode.gt.1)call merge4 -+ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+ if(lsolva)lstgot_sol(:)=lstgot(:) -+ -+c deallocate work arrays -+ -+ deallocate (ind,lstgot,stat=fail(1)) -+ deallocate (txx,tyy,tzz,stat=fail(2)) -+ deallocate (xxt,yyt,zzt,stat=fail(3)) -+ deallocate (gaxs,rotmin,stat=fail(4)) -+ deallocate (accum,stat=fail(5)) -+ -+ return -+ end subroutine quatbook -+ -+ subroutine abort_field_read(kode,idnode,nfield) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting FIELD file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nfield -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(kode.eq.1)then -+ -+c end of field file error exit -+ -+ call error(idnode,52) -+ -+ elseif(kode.eq.2)then -+ -+c unrecognised directive in field file -+ -+ call error(idnode,4) -+ -+ endif -+ -+ return -+ end subroutine abort_field_read -+ -+ subroutine abort_control_read(kode,idnode,nread) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nread -+ -+ if(idnode.eq.0)close (nread) -+ -+ if(kode.eq.1)then -+ -+c end of control file error exit -+ -+ call error(idnode,53) -+ -+ elseif(kode.eq.2)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,0) -+ -+ endif -+ -+ return -+ end subroutine abort_control_read -+ -+ subroutine abort_config_read(kode,idnode,nconf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nconf -+ -+ if(idnode.eq.0)close (nconf) -+ -+ if(kode.eq.1)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,54) -+ -+ elseif(kode.eq.2)then -+ -+c end of config file error exit -+ -+ call error(idnode,55) -+ -+ endif -+ -+ return -+ end subroutine abort_config_read -+ -+ subroutine neutbook(lneut,idnode,natms,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for neutral group bookkeeping -+c -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lneut,safe -+ integer idnode,natms,nneut,i -+ -+ safe=.true. -+ -+c neutral group bookkeeping: sites must be listed consecutively -+ -+ if(lneut)then -+ -+ if(lstneu(1).ne.1)call error(idnode,230) -+ -+ neulst(1)=1 -+ nneut=1 -+ -+ do i=2,natms -+ -+ safe=.false. -+ if(lstneu(i).eq.lstneu(i-1))safe=.true. -+ if(lstneu(i).eq.lstneu(i-1)+1)then -+ -+ safe=.true. -+ nneut=nneut+1 -+ if(nneut.gt.mxneut)call error(idnode,220) -+ neulst(nneut)=i -+ -+ endif -+ -+ if(.not.safe)call error(idnode,230) -+ -+ enddo -+ -+ neulst(nneut+1)=natms+1 -+ -+ endif -+ -+ return -+ -+ end subroutine neutbook -+ -+ subroutine intlist -+ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the interaction lists -+c for the entire simulated system -+c -+c parallel replicated dat version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,safe1,lcnb,lchk,lfail -+ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons -+ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf -+ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle -+ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths -+ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 -+ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum -+ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 -+ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 -+ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle -+ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp -+ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail -+ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail -+ real(8) tol -+ -+ integer, allocatable :: itest(:),index(:),kscons(:) -+ integer, allocatable :: msite(:),mconst(:),listin(:) -+ -+ dimension fail(4) -+ -+ data fail/0,0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) -+ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) -+ allocate (listin(mxatms),stat=fail(3)) -+ allocate (kscons(0:mxproc-1),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1800) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ ibonds=0 -+ jbonds=0 -+ kbonds=0 -+ ipmf=0 -+ jpmf=0 -+ iangle=0 -+ jangle=0 -+ kangle=0 -+ idihed=0 -+ jdihed=0 -+ kdihed=0 -+ iinver=0 -+ jinver=0 -+ kinver=0 -+ iteths=0 -+ jteths=0 -+ kteths=0 -+ ishels=0 -+ jshels=0 -+ kshels=0 -+ safe=.true. -+ safe1=.true. -+ -+c find total number of bonds,pmf constraints,bond constraints, -+c angles,dihedrals,inversions, tethers,core-shells, in system -+c - ignoring frozen atoms -+ -+ ntbon0=0 -+ ntpmf0=0 -+ ntcon0=0 -+ ntang0=0 -+ ntdih0=0 -+ ntinv0=0 -+ nttet0=0 -+ ntshl0=0 -+ nscons=0 -+ ntcons=0 -+ -+ do itmols=1,ntpmls -+ -+ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) -+ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) -+ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) -+ ntang0=ntang0+nummols(itmols)*numang(itmols) -+ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) -+ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) -+ nttet0=nttet0+nummols(itmols)*numteth(itmols) -+ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) -+ -+ enddo -+ -+ isite=0 -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ -+c first and last index of bonds, angles etc for this node -+ -+ ibnd1=(idnode*ntbon0)/mxnode+1 -+ ibnd2=((idnode+1)*ntbon0)/mxnode -+ -+ ipmf1=(idnode*ntpmf0)/mxnode+1 -+ ipmf2=((idnode+1)*ntpmf0)/mxnode -+ ntpmf=ntpmf0 -+ nspmf=ipmf2+1-ipmf1 -+ -+ iang1=(idnode*ntang0)/mxnode+1 -+ iang2=((idnode+1)*ntang0)/mxnode -+ -+ idih1=(idnode*ntdih0)/mxnode+1 -+ idih2=((idnode+1)*ntdih0)/mxnode -+ -+ iinv1=(idnode*ntinv0)/mxnode+1 -+ iinv2=((idnode+1)*ntinv0)/mxnode -+ -+ itet1=(idnode*nttet0)/mxnode+1 -+ itet2=((idnode+1)*nttet0)/mxnode -+ -+ ishl1=(idnode*ntshl0)/mxnode+1 -+ ishl2=((idnode+1)*ntshl0)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct bond constraint list later -+c construct chemical bond interaction list -+ -+ do lbonds=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then -+ -+ jbonds=jbonds+1 -+ if(jbonds.le.mxbond)then -+ -+ listbnd(jbonds,1)=lbonds+kbonds -+ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) -+ x +isite -+ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,31) -+ -+c construct pmf site lists - no exclusions -+ -+ do lpmf=1,numpmf(itmols) -+ -+ ipmf=ipmf+1 -+ -+ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then -+ -+ jpmf=jpmf+1 -+ if(jpmf.le.mspmf)then -+ -+ nnn=npmf(1)+npmf(2) -+ if(nnn.le.mxspmf)then -+ -+ do jj=1,npmf(1)+npmf(2) -+ lstpmf(jj,jpmf)=indpmf(jj)+isite -+ enddo -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ else -+ -+ safe1=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe1) -+ if(.not.safe1)call error(idnode,458) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,460) -+ -+c construct valence angle interaction list -+ -+ do langle=1,numang(itmols) -+ -+ iangle=iangle+1 -+ -+ if(iangle.ge.iang1.and.iangle.le.iang2)then -+ -+ jangle=jangle+1 -+ if(jangle.le.mxangl)then -+ -+ listang(jangle,1)=langle+kangle -+ listang(jangle,2)=lstang(langle+kangle,1) -+ x +isite -+ listang(jangle,3)=lstang(langle+kangle,2) -+ x +isite -+ listang(jangle,4)=lstang(langle+kangle,3) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,51) -+ -+c construct dihedral angle interaction list -+ -+ do ldihed=1,numdih(itmols) -+ -+ idihed=idihed+1 -+ -+ if(idihed.ge.idih1.and.idihed.le.idih2)then -+ -+ jdihed=jdihed+1 -+ if(jdihed.le.mxdihd)then -+ -+ listdih(jdihed,1)=ldihed+kdihed -+ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) -+ x +isite -+ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) -+ x +isite -+ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) -+ x +isite -+ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,61) -+ -+c construct inversion potential list -+ -+ do linver=1,numinv(itmols) -+ -+ iinver=iinver+1 -+ -+ if(iinver.ge.iinv1.and.iinver.le.iinv2)then -+ -+ jinver=jinver+1 -+ if(jinver.le.mxinv)then -+ -+ listinv(jinver,1)=linver+kinver -+ listinv(jinver,2)=lstinv(linver+kinver,1) -+ x +isite -+ listinv(jinver,3)=lstinv(linver+kinver,2) -+ x +isite -+ listinv(jinver,4)=lstinv(linver+kinver,3) -+ x +isite -+ listinv(jinver,5)=lstinv(linver+kinver,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,77) -+ -+c construct tethered atoms interaction list -+ -+ do lteths=1,numteth(itmols) -+ -+ iteths=iteths+1 -+ -+ if(iteths.ge.itet1.and.iteths.le.itet2)then -+ -+ jteths=jteths+1 -+ if(jteths.le.msteth)then -+ -+ listtet(jteths,1)=lteths+kteths -+ listtet(jteths,2)=lsttet(lteths+kteths)+isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,63) -+ -+c construct core-shell list -+ -+ do lshels=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ if(ishels.ge.ishl1.and.ishels.le.ishl2)then -+ -+ jshels=jshels+1 -+ if(jshels.le.mxshl)then -+ -+ listshl(jshels,1)=lshels+kshels -+ listshl(jshels,2)=lstshl(lshels+kshels,1) -+ x +isite -+ listshl(jshels,3)=lstshl(lshels+kshels,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,59) -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kbonds=kbonds+numbonds(itmols) -+ kangle=kangle+numang(itmols) -+ kdihed=kdihed+numdih(itmols) -+ kinver=kinver+numinv(itmols) -+ kteths=kteths+numteth(itmols) -+ kshels=kshels+numshl(itmols) -+ -+ enddo -+ -+c store array counters for bookkeeping -+ -+ ntbond=ibonds -+ ntangl=iangle -+ ntdihd=idihed -+ ntinv=iinver -+ ntteth=iteths -+ ntshl=ishels -+ -+c pass bond constraint information to other nodes -+ -+ if(ntcon0.gt.0)then -+ -+ ntcons=ntcon0 -+ -+c find starting site no. and constraint no. for each molec. type -+ -+ msite(1)=0 -+ mconst(1)=0 -+ -+ do itmols=2,ntpmls -+ -+ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* -+ x nummols(itmols-1) -+ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) -+ -+ enddo -+ -+c sort molecules into ascending order of number of constraints -+ -+ do i=1,ntpmls -+ -+ itest(i)=numcon(i) -+ index(i)=0 -+ -+ enddo -+ -+ call shellsort(ntpmls,itest) -+ -+ do i=1,ntpmls -+ -+ lchk=.true. -+ do j=1,ntpmls -+ -+ if(itest(i).eq.numcon(j))then -+ -+ if(lchk)then -+ index(i)=j -+ lchk=.false. -+ -+ endif -+ -+ do ii=1,i-1 -+ if(index(ii).eq.j)lchk=.true. -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c load balance to within 10% -+ -+ tol=1.0d0+(0.10d0)/2.d0 -+ kcons=(ntcons)/mxnode -+ ntmp=0 -+ -+c find smallest constrained molecule to allocate to a node -+ -+ do i=1,ntpmls -+ -+ if(ntmp.le.mxnode)then -+ -+ if(numcon(index(i)).gt.0)then -+ ntmp=ntmp+nummols(index(i)) -+ klo=max(0,kcons-numcon(index(i))/2) -+ khi=klo+numcon(index(i))+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+c reset hi/lo limits if molecules contain too many constraints -+ -+ if(dble(khi)/dble(max(1,klo)).gt.tol)then -+ klo=nint(dble(kcons)/tol) -+ khi=nint(dble(kcons)*tol)+1 -+ endif -+ -+c store lo value for later -+ -+ klo0=klo -+ -+c begin assignment of constraints ---------------------------------- -+ -+ ifail=-1 -+ lfail=.true. -+ do while(lfail) -+ -+ ifail=ifail+1 -+ -+ if(ifail.gt.ntpmls)then -+ call error(idnode,432) -+ endif -+ -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ lconst=0 -+ -+c zero running totals of constraints on each processor -+ -+ do id=0,mxnode-1 -+ kscons(id)=0 -+ enddo -+ -+ iloop=0 -+ lfail=.false. -+ iconst=0 -+ jconst=0 -+ nnode=0 -+ -+c assign difficult molecules in blocks -+ -+ if(ifail.gt.0)then -+ -+ nfail=0 -+ do i=1,ifail -+ -+ ii=ntpmls+1-i -+ nfail=nfail+nummols(index(ii))*numcon(index(ii)) -+ -+ enddo -+ -+c decide on number of processors to split over -+ -+ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) -+ nnode=max(2,nnode) -+ nnode=min(nnode,mxnode) -+ -+c assign to processors 0..nnode-1 -+ -+ do id=0,nnode-1 -+ -+ nscons0=(id*nfail)/nnode+1 -+ nscons1=((id+1)*nfail)/nnode -+ -+ kscons(id)=nscons1+1-nscons0 -+ -+ enddo -+ -+c this processors block -+ -+ nscons0=(idnode*nfail)/nnode+1 -+ nscons1=((idnode+1)*nfail)/nnode -+ -+c assign in blocks -+ -+ do itmols=ntpmls,ntpmls-ifail+1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ -+c construct bond constraint list -+ -+ do lconst=1,numcon(ii) -+ -+ iconst=iconst+1 -+ -+ if(iconst.ge.nscons0.and.iconst.le.nscons1)then -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c assign non-problematic molecules -+ -+ jdnode=mod(nnode+1,mxnode) -+ -+ do itmols=ntpmls-ifail,1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ itry=0 -+ lchk=.true. -+ do while(lchk) -+ -+ if(kscons(jdnode)+icon.le.klo)then -+ -+ if(jdnode.ne.idnode)then -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ else -+ -+c construct bond constraint list -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ do lconst=1,numcon(ii) -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ -+ endif -+ -+ else -+ -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.true. -+ itry=itry+1 -+ -+ endif -+ -+ if(lchk.and.itry.gt.mxnode)then -+ -+ klo=kcons -+ kcons=khi -+ itry=0 -+ iloop=iloop+1 -+ -+ endif -+ -+c split molecule across nodes if have to -+ -+ if(iloop.gt.3)then -+ lfail=.true. -+ kcons=ntcons/mxnode -+ klo=klo0 -+ lchk=.false. -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c check no node has less than minimum number -+ -+ do id=0,mxnode-1 -+ if(kscons(id).lt.klo0)then -+ lfail=.true. -+ endif -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(mxnode.gt.1)call gimax(jconst,1,idum) -+ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') -+ x 'Number of constraints found ',jconst,'Max allowed ',mxcons -+ -+ call error(idnode,41) -+ -+ endif -+ -+ nscons=kscons(idnode) -+ -+ call passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+ endif -+ -+ if(npmf(1).gt.0)then -+ -+ call passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+ endif -+ -+c pass rigid body data -+ -+ lcnb=.false. -+ if(ntcons.gt.0.and.ngrp.gt.0)then -+ -+ call passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, -+ x numgsit) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(itest,index,msite,stat=fail(1)) -+ deallocate(mconst,kscons,listin,stat=fail(2)) -+ -+ return -+ end subroutine intlist -+ -+ subroutine ensemble_selection -+ x (directive,lens,kill,idnode,keyens,mode,taut,taup) -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ensemble and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical kill,lens -+ integer keyens,idnode,idum,mode -+ real(8) taut,taup -+ -+ if(findstring('nve',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'microcanonical ensemble')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('nvt',directive,idum))then -+ -+ if(findstring('evans',directive,idum))then -+ -+ keyens=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Evans Gaussian temperature constraints', -+ x ' in use')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('ber',directive,idum))then -+ -+ keyens=2 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen thermostat', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=3 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('npt',directive,idum))then -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=4 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen isotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=5 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('nst',directive,idum))then -+ -+ mode=0 -+ if(findstring('block',directive,idum))mode=1 -+ if(findstring('surf',directive,idum))mode=2 -+ if(findstring('slab',directive,idum))mode=3 -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=6 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen anisotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=7 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ if(mode.eq.0)then -+ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") -+ elseif(mode.eq.1)then -+ write(nrite, -+ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") -+ elseif(mode.eq.2)then -+ write(nrite, -+ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") -+ elseif(mode.eq.3)then -+ write(nrite, -+ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") -+ endif -+ -+ endif -+ -+ elseif(findstring('pmf',directive,idum))then -+ -+ keyens=8 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'potential of mean force calculation (NVE)')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ call error(idnode,-436) -+ kill=.true. -+ -+ endif -+ -+ return -+ end subroutine ensemble_selection -+ -+ subroutine neb_option -+ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, -+ x opttol,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for NEB option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical lneb,lminopt,endneb,safe -+ integer numneb,idnode,keytol,i,idum -+ real(8) sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ lminopt=.true. -+ lneb=.true. -+ endneb=.false. -+ numneb=intstr(directive,lenrec,idum) -+ if(numneb.eq.0)numneb=1 -+ numneb=min(maxneb,numneb) -+ -+ hyp_units=1.d0 -+ do while(.not.endneb) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endneb',directive,idum))then -+ endneb=.true. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('basin_1',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_1(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('basin_2',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_2(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'NEB calculation controls')") -+ write(nrite,"(/,1x,'identity of basin 1 ', -+ x 10i10)")(bsn_1(i),i=1,numneb) -+ write(nrite,"(1x,'identity of basin 2 ', -+ x 10i10)")(bsn_2(i),i=1,numneb) -+ write(nrite, -+ x "(1x,'NEB spring constant ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x sprneb,opttol,cunit -+ -+ call print_optim(keytol) -+ -+ endif -+ -+c units conversion -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine neb_option -+ -+ subroutine bpd_option -+ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, -+ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for bias potential -+c dynamics option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 directive(lenrec) -+ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo -+ integer keybpd,idnode,nblock,ntrack,keytol,idum -+ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(ltad)call error(idnode,2355) -+ lminopt=.true. -+ lbpd=.true. -+ endbpd=.false. -+ cunit=" dl_poly" -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'bias potential dynamics controls')") -+ -+ if(findstring('dyn',directive,idum))then -+ -+ keybpd=1 -+ hyp_units=energy_unit() -+ ebias=dblstr(directive,lenrec,idum) -+ vmin=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ if(idnode.eq.0)write(nrite,"( -+ x 1x,'dynamics option selected ', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4 -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,cunit -+ -+ elseif(findstring('path',directive,idum))then -+ -+ keybpd=2 -+ nebgo=.true. -+ hyp_units=1.d0 -+ do while(.not.endbpd) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endbpd',directive,idum))then -+ endbpd=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('noneb',directive,idum))then -+ nebgo=.false. -+ elseif(findstring('target',directive,idum))then -+ call getword(seek,directive,8,lenrec) -+ call getword(seek,directive,8,lenrec) -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('ebias',directive,idum))then -+ ebias=dblstr(directive,lenrec,idum) -+ elseif(findstring('vmin',directive,idum))then -+ vmin=dblstr(directive,lenrec,idum) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"( -+ x 1x,'dynamics with path analysis selected', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4, -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'configuration catch radius (A)',f10.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'atom type to be tracked ',2x,a8, -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit -+ if(nebgo)write(nrite, -+ x "(1x,'NEB spring constant ',e12.4)")sprneb -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ endif -+ -+ return -+ end subroutine bpd_option -+ -+ subroutine tad_option -+ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, -+ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for TAD option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe -+ integer idnode,nblock,ntrack,blkout,keytol,idum -+ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(lbpd)call error(idnode,2355) -+ lminopt=.true. -+ ltad=.true. -+ endtad=.false. -+ hyp_units=1.d0 -+ -+ do while(.not.endtad) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endtad',directive,idum))then -+ endtad=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('all',directive,idum))then -+ tadall=.true. -+ if(findstring('false',directive,idum))tadall=.false. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('blackout',directive,idum))then -+ blkout=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('deltad',directive,idum))then -+ deltad=dblstr(directive,lenrec,idum) -+ elseif(findstring('low_temp',directive,idum))then -+ tlow=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'TAD dynamics controls' -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'steps in blackout periods ',i10, -+ x /,1x,'configuration catch radius ',1p,e12.4, -+ x /,1x,'NEB spring constant ',e12.4, -+ x /,1x,'stopping parameter ',e12.4, -+ x /,1x,'target low temperature ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x nblock,ntrack,blkout,catchrad,sprneb,deltad, -+ x tlow,opttol,cunit -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ if(tadall)write(nrite, -+ x "(1x,'option for all basins analysis selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine tad_option -+ -+ subroutine metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for metadynamics option -+c copyright - daresbury laboratory -+c author - w. smith jan 2011 -+c -+c note: default values are set in metafreeze_module -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe -+ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int -+ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt -+ -+ lmetadyn=.true. -+ endmet=.false. -+ -+ do while(.not.endmet) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endmet',directive,idum))then -+ endmet=.true. -+ elseif(findstring('ncolvar',directive,idum))then -+ ncolvar=intstr(directive,lenrec,idum) -+ elseif(findstring('lstein',directive,idum))then -+ lstein=.true. -+ if(findstring('false',directive,idum))lstein=.false. -+ elseif(findstring('ltet',directive,idum))then -+ ltet=.true. -+ if(findstring('false',directive,idum))ltet=.false. -+ elseif(findstring('lglobpe',directive,idum))then -+ lglobpe=.true. -+ if(findstring('false',directive,idum))lglobpe=.false. -+ elseif(findstring('llocpe',directive,idum))then -+ llocpe=.true. -+ if(findstring('false',directive,idum))llocpe=.false. -+ elseif(findstring('globpe_scale',directive,idum))then -+ globpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('locpe_scale',directive,idum))then -+ locpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('nq4',directive,idum))then -+ nq4=intstr(directive,lenrec,idum) -+ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('nq6',directive,idum))then -+ nq6=intstr(directive,lenrec,idum) -+ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('ntet',directive,idum))then -+ ntet=intstr(directive,lenrec,idum) -+ elseif(findstring('meta_step_int',directive,idum))then -+ meta_step_int=intstr(directive,lenrec,idum) -+ elseif(findstring('ref_w_aug',directive,idum))then -+ ref_W_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('h_aug',directive,idum))then -+ h_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('hkey',directive,idum))then -+ hkey=intstr(directive,lenrec,idum) -+ elseif(findstring('wt_dt',directive,idum))then -+ wt_dt=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'metadynamics controls' -+ x /,1x,'total number of collective variables',i10, -+ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, -+ x /,1x,'tetrahedral parameters option (zeta)',l10, -+ x /,1x,'global potential parameter option ',l10, -+ x /,1x,'local potential parameter option ',l10, -+ x /,1x,'global potential param. scale factor',e12.4, -+ x /,1x,'local potential param. scale factor ',e12.4)") -+ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale -+ -+ write(nrite, -+ x "( 1x,'number of Q4 atom pair types ',i10, -+ x /,1x,'number of Q6 atom pair types ',i10, -+ x /,1x,'number of zeta atom triplet types ',i10)") -+ x nq4,nq6,ntet -+ -+ write(nrite, -+ x "( 1x,'gaussian deposition interval ',i10, -+ x /,1x,'reference gaussian height ',e12.4, -+ x /,1x,'gaussian width parameter ',e12.4, -+ x /,1x,'height control key ',i10, -+ x /,1x,'well-tempered control parameter ',e12.4)") -+ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt -+ -+ endif -+ -+ return -+ end subroutine metadyn_option -+ -+ subroutine ewald_selection -+ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, -+ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ewald method and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lhke,lspme,lewald,lcut,lforc,kill,safe -+ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum -+ integer kmaxpow2 -+ real(8) alpha,rcut,eps,tol,fac,tol1 -+ -+ lhke=findstring('hke',directive,idum) -+ lspme=findstring('spme',directive,idum) -+ lewald=findstring('ewald',directive,idum) -+ if(lewald)keyfce=2 -+ if(lspme)keyfce=12 -+ if(lhke)keyfce=14 -+ if(idnode.eq.0)open(nconf,file='CONFIG') -+ call getrec(safe,idnode,nconf) -+ call getrec(safe,idnode,nconf) -+ imcon=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then -+ -+ call error(idnode,-180) -+ kill=.true. -+ -+ endif -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps -+ -+ if(lhke)then -+ -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ if(nlatt.eq.0)nlatt=1 -+ if(nhko.eq.0)nhko=1 -+ -+ endif -+ -+ if(.not.lcut)then -+ call error(idnode,-433) -+ kill=.true. -+ else -+ -+c retreive cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(directive,lenrec,idum) -+ kmax1=intstr(directive,lenrec,idum) -+ kmax2=intstr(directive,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ -+ else -+ -+ kmax3=intstr(directive,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c if spme double kmax and set to next power of 2, with current upper -+c limit of 512. -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax1=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax2=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax3=2 * kmaxpow2 -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ close(nconf) -+ -+ if(lspme)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : SPME ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1/2,kmax2/2,kmax3/2 -+ -+ elseif(lhke)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 ',2i5)") -+ x alpha,kmax1,kmax2 -+ -+ write(nrite, -+ x "(1x,'HKE expansion order ',7x,i10, -+ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt -+ -+ else -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1,kmax2,kmax3 -+ -+ endif -+ -+ endif -+ -+ if(lspme)then -+ -+c Initialize fft tables -+ -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (fplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+CFFTW -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (bplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+ -+CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CSGIC x dummy,1,1,ffttable,dummy,dummy ) -+ -+CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CCRAY x dummy,1,1,ffttable,dummy,dummy ) -+ -+ endif -+ -+ if(lspme)then -+ -+ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ elseif(lhke)then -+ -+ if(kmax2.gt.kmaxb)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ else -+ -+ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ lforc=.true. -+ -+ return -+ end subroutine ewald_selection -+ -+ subroutine print_optim(keytol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing the optimisation option -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer keytol -+ -+ if(keytol.eq.0)then -+ write(nrite, -+ x "(1x,'convergence to minimum force selected')") -+ elseif(keytol.eq.1)then -+ write(nrite, -+ x "(1x,'convergence to minimum energy selected')") -+ else -+ write(nrite, -+ x "(1x,'convergence to minimum position selected')") -+ endif -+ -+ return -+ end subroutine print_optim -+ -+ function energy_unit() -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for assigning energy conversion factors -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idum -+ real(8) energy_unit -+ -+ energy_unit=1.d0 -+ if(findstring('ev',record,idum))then -+ energy_unit=9648.530821d0 -+ elseif(findstring('kev',record,idum))then -+ energy_unit=9648530.821d0 -+ elseif(findstring('kcal',record,idum))then -+ energy_unit=418.4d0 -+ elseif(findstring('kj',record,idum))then -+ energy_unit=1.d2 -+ elseif(findstring('k',record,idum))then -+ energy_unit=boltz -+ endif -+ -+ return -+ end function energy_unit -+ -+ subroutine solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for solvation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,endsol,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ endsol=.false. -+ -+ nsolva=intstr(directive,lenrec,idum) -+ isolva=intstr(directive,lenrec,idum) -+ -+ if(nsolva.eq.0.and.isolva.eq.0)then -+ -+ do while(.not.endsol) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endsol',directive,idum))then -+ endsol=.true. -+ elseif(findstring('enddec',directive,idum))then -+ endsol=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=max(intstr(directive,lenrec,idum),1) -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'solvation calculation selected', -+ x /,1x,'start of solvation calculation ',i10, -+ x /,1x,'solvation calculation interval ',i10)") -+ x nsolva,isolva -+ -+ endif -+ -+ return -+ end subroutine solvation_option -+ -+ subroutine free_energy_option(directive,lfree,lfrmas,idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for free energy option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lfree,lfrmas,endfre,safe -+ integer idnode,idum -+ -+ mfree=1 -+ kfree=1 -+ lfree=.true. -+ lfrmas=.false. -+ endfre=.false. -+ -+ do while(.not.endfre) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endfre',directive,idum))then -+ endfre=.true. -+ elseif(findstring('start',directive,idum))then -+ nfrn=intstr(directive,lenrec,idum) -+ elseif(findstring('interval',directive,idum))then -+ ifrn=intstr(directive,lenrec,idum) -+ elseif(findstring('lambda',directive,idum))then -+ pfree=dblstr(directive,lenrec,idum) -+ elseif(findstring('mix',directive,idum))then -+ mfree=intstr(directive,lenrec,idum) -+ elseif(findstring('expo',directive,idum))then -+ kfree=intstr(directive,lenrec,idum) -+ elseif(findstring('reset_mass',directive,idum))then -+ lfrmas=.true. -+ if(findstring('false',directive,idum))lfrmas=.false. -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(mfree.eq.1)kfree=1 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'free energy option selected', -+ x /,1x,'start of free energy calculation ',i10, -+ x /,1x,'sampling interval ',i10, -+ x /,1x,'free energy parameter (lambda) ',f10.3, -+ x /,1x,'mixing rule selected ',i10, -+ x /,1x,'mixing rule exponent ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10, -+ x /,1x,'mass scaling option ',l10)") -+ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas -+ -+ endif -+ -+c define free energy scaling parameters -+ -+ call freegen() -+ -+ return -+ end subroutine free_energy_option -+ -+ subroutine excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for excitation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lexcite,lghost,endexc,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lexcite=.true. -+ endexc=.false. -+ -+ do while(.not.endexc) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endexc',directive,idum))then -+ endexc=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'excitation option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,ind_fre -+ -+ endif -+ -+ return -+ end subroutine excitation_option -+ -+ subroutine switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for switching option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lswitch,lghost,endswi,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lswitch=.true. -+ endswi=.false. -+ niswitch=0 -+ -+ do while(.not.endswi) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endswi',directive,idum))then -+ endswi=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('period',directive,idum))then -+ niswitch=max(intstr(directive,lenrec,idum),2) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(niswitch.eq.0)niswitch=nsolva -+ nswitch=nsolva -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'switching option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'switching period ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,niswitch,ind_fre -+ -+ endif -+ -+ return -+ end subroutine switching_option -+ -+ end module define_system_module -+ -diff -urN dl_class_1.9.orig/srcmod/define_system_module.f.preplumed dl_class_1.9/srcmod/define_system_module.f.preplumed ---- dl_class_1.9.orig/srcmod/define_system_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/define_system_module.f.preplumed 2011-10-17 17:32:15.000000000 +0200 -@@ -0,0 +1,5994 @@ -+ module define_system_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007, solvation, free energy -+c and excitation -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use dihedral_module -+ use ensemble_tools_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use inversion_module -+ use metafreeze_module -+ use metal_module -+ use parse_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use vdw_module -+ -+ contains -+ -+ subroutine simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the simulation control -+c parameters -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992. -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c modified -+c author - t.forester may 1993 -+c amended - t.forester sept 1994 - dl_poly_1.1 -+c amended - t.forester nov 1994 - macro version -+c amended - w.smith dec 1994 - t3d adaptation -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 hms -+ character*1 directive(lenrec) -+ logical lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,lpsoc -+ logical ltscal,lzeql,loptim,ltraj,lfcap,lgofr,lpgr,lpres,safe -+ logical lstep,ltemp,lcut,ldelr,lprim,lforc,lens,lvdw,lrvdw,kill -+ logical lnsq,lzden,lewald,lspme,lhke,loop,lzero,nolink,newgau -+ logical lminim,lminopt,ltad,lneb,lhit,lbpd,prechk,tadall,nebgo -+ integer idnode,intsta,istraj,keyens,keyfce,keyres,nstbpo,nsbzdn -+ integer keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,khit,nhit -+ integer nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,ntrack -+ integer idum,imcon,keyver,keytol,nblock,blkout,numgau -+ integer minstp,numneb,i,keybpd,mode,nsolva,isolva,nofic -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,rlxtol,opttol -+ real(8) eps,tol,fm,densvar,delrdf,delzdn,zlen,ehit,hyp_units -+ real(8) catchrad,sprneb,deltad,tlow,xhit,yhit,zhit,ebias,vmin -+ real(8) prntim -+ -+CSGIC real(8) dummy -+CCRAY real(8) dummy -+CFFTWc FFTW instruction codes -+CFFTW -+CFFTW integer FFTW_FORWARD,FFTW_BACKWARD -+CFFTW parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1) -+CFFTW -+CFFTW integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL -+CFFTW parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1) -+CFFTW -+CFFTW integer FFTW_ESTIMATE,FFTW_MEASURE -+CFFTW parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1) -+CFFTW -+CFFTW integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM -+CFFTW parameter (FFTW_OUT_OF_PLACE=0) -+CFFTW parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16) -+CFFTW -+CFFTW integer FFTW_THREADSAFE -+CFFTW parameter (FFTW_THREADSAFE=128) -+CFFTW -+ -+c intitialize system variables: temperature,pressure,ensemble key -+c force key, cutoff, primary cutoff, verlet shell width, relative -+c dielectric constant,timestep,temperature scaling flag, -+c temp scaling interval -+ -+ mode=0 -+ nhko=0 -+ nlatt=0 -+ nsteql=0 -+ nstrun=0 -+ minstp=0 -+ keybpd=0 -+ keyres=0 -+ keyens=0 -+ keyver=0 -+ taut=0.d0 -+ nstbts=0 -+ nstbgr=0 -+ nsbzdn=0 -+ nstbpo=100 -+ nstack=mxstak -+ intsta=0 -+ nstraj=0 -+ istraj=1 -+ keytrj=0 -+ numgau=1 -+ alpha=0.d0 -+ kmax1=0 -+ kmax2=0 -+ kmax3=0 -+ nospl=min(8,mxspl) -+ isolva=1 -+ nsolva=0 -+ niswitch=0 -+ nswitch=0 -+ nofic=1000 -+ -+ fmax=1000.d0 -+ keyfce=0 -+ multt=1 -+ keytol=0 -+ tstep=0.d0 -+ temp=0.d0 -+ press=0.d0 -+ rcut=0.d0 -+ rprim=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ epsq=1.d0 -+ rlxtol=1.d0 -+ opttol=1.d0 -+ tolnce=1.d-8 -+ quattol=1.d-8 -+ timjob=0.d0 -+ timcls=0.d0 -+ delrdf=0.d0 -+ delzdn=0.d0 -+ zlen=0.d0 -+ ehit=0.d0 -+ xhit=0.d0 -+ yhit=0.d0 -+ zhit=0.d0 -+ vmin=0.d0 -+ ebias=0.d0 -+ catchrad=0.d0 -+ pfree=0.d0 -+ -+ lhit=.false. -+ lbpd=.false. -+ ltad=.false. -+ lneb=.false. -+ loop=.true. -+ lnfic=.false. -+ lpsoc=.false. -+ lzero=.false. -+ ltscal=.false. -+ lewald=.false. -+ lspme=.false. -+ lhke=.false. -+ lgofr=.false. -+ lpgr=.false. -+ lzeql=.true. -+ loptim=.false. -+ lminim=.false. -+ lminopt=.false. -+ ltraj=.false. -+ lfcap=.false. -+ ltemp=.false. -+ lstep=.false. -+ lcut=.false. -+ ldelr=.false. -+ lprim=.false. -+ lforc=.false. -+ lens=.false. -+ lvdw=.false. -+ lrvdw=.false. -+ lpres=.false. -+ kill=.false. -+ lnsq=.false. -+ lzden=.false. -+ nolink=.false. -+ newgau=.false. -+ prechk=.false. -+ tadall=.false. -+ lsolva=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lexcite=.false. -+ lswitch=.false. -+ lghost=.false. -+ nebgo=.true. -+ seek='all ' -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open(nread,file='CONTROL',status='old') -+ -+c read job title -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+ call copystring(record,sysname,80) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(3(1x,120('*'),/),1x,15('*'),5x,80a1,5x,15('*'),/, -+ x 3(1x,120('*'),/),/,/,1x,'SIMULATION CONTROL PARAMETERS',/)") -+ x sysname -+ -+ endif -+ -+c read and process directives from CONTROL file -+ -+ do while(loop) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ -+c convert to lowercase and strip out leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('redirect',directive,idum))then -+ -+c ignore this option in this context -+ cycle -+ -+ elseif(findstring('steps',directive,idum))then -+ -+c number of timesteps -+ -+ nstrun=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'selected number of timesteps',3x,i10)")nstrun -+ -+ elseif(findstring('integ',directive,idum))then -+ -+c choice of integration algorithm -+ -+ if(findstring('leapfrog',directive,idum))then -+ -+ keyver=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'leapfrog verlet integration selected')") -+ -+ elseif(findstring('velocity',directive,idum))then -+ -+ keyver=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'velocity verlet integration selected')") -+ -+ endif -+ -+ elseif(findstring('no fic',directive,idum))then -+ -+c cancel possible "flying ice cube" in Berendsen thermostats -+ -+ lnfic=.true. -+ nofic=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('shells',directive,idum).and. -+ x findstring('on',directive,idum).and. -+ x findstring('cores',directive,idum))then -+ -+c put shells on cores at start - shell model only (else null) -+ -+ lpsoc=.true. -+ -+ elseif(findstring('densvar',directive,idum))then -+ -+c specify allowed density variation -+ -+ densvar=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'allowed density variation ',3x,1p,e12.4)") -+ x densvar -+ -+ elseif(findstring('no link',directive,idum))then -+ -+c switch off link cell option -+ -+ nolink=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'link cells option deactivated')") -+ -+ elseif(findstring('equil',directive,idum))then -+ -+c number of equilibration timesteps -+ -+ nsteql=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration period ',3x,i10)")nsteql -+ -+ elseif(findstring('restart',directive,idum))then -+ -+c restart control -+ -+ if(findstring('noscale',directive,idum))then -+ -+ keyres=3 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'noscale restart requested')") -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ keyres=2 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'scaled restart requested')") -+ -+ else -+ -+ keyres=1 -+ if(idnode.eq.0)write(nrite,"(/,1x,'restart requested')") -+ -+ endif -+ -+ elseif(findstring('ensemble',directive,idum))then -+ -+c ensemble selection -+ -+ call ensemble_selection(directive,lens,kill,idnode,keyens, -+ x mode,taut,taup) -+ -+ elseif(findstring('regauss',directive,idum))then -+ -+c re-initialise velocities option (regaussing) -+ -+ newgau=.true. -+ numgau=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'regaussing option activated', -+ x /,1x,'regaussing interval set to ',3x,i10)") -+ x numgau -+ -+ elseif(findstring('scale',directive,idum))then -+ -+ nstbts=intstr(directive,lenrec,idum) -+ if(nstbts.gt.0)then -+ ltscal=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'temperature scaling on' -+ x /,1x,'temperature scaling interval',3x,i10)") -+ x nstbts -+ -+ endif -+ -+ elseif(findstring('rdf',directive,idum))then -+ -+ if(findstring('print',directive,idum))then -+ -+ lpgr=.true. -+ lpgr=(lgofr.and.lpgr) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'g(r) printing option on ')") -+ -+ else -+ -+ lgofr=.true. -+ nstbgr=intstr(directive,lenrec,idum) -+ delrdf=dblstr(directive,lenrec,idum) -+ if(nstbgr.eq.0)nstbgr=10 -+ if(delrdf.lt.1.d-8)delrdf=0.05d0 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'radial distribution functions on ', -+ x /,1x,'g(r) collection interval ',3x,i10)")nstbgr -+ write(nrite, -+ x "(1x,'g(r) bin width ',3x,1p,e12.4)") -+ x delrdf -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('zden',directive,idum))then -+ -+ lzden=.true. -+ nsbzdn=intstr(directive,lenrec,idum) -+ delzdn=dblstr(directive,lenrec,idum) -+ zlen=dblstr(directive,lenrec,idum) -+ if(nsbzdn.eq.0)nsbzdn=10 -+ if(delzdn.lt.1.d-8)then -+ zlen=0.1d0*dble(mxzdn) -+ delzdn=0.1d0 -+ elseif(zlen.lt.1.d-8)then -+ zlen=delzdn*dble(mxzdn) -+ endif -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'Z density profile requested', -+ x /,1x,'zdensity collection interval',3x,i10)")nsbzdn -+ write(nrite, -+ x "(1x,'zdensity bin width ',3x,1p,e12.4)") -+ x delzdn -+ write(nrite, -+ x "(1x,'zdensity range ',3x,1p,e12.4)") -+ x zlen -+ -+ endif -+ -+ elseif(findstring('collect',directive,idum))then -+ -+ lzeql=.false. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'equilibration included in overall averages')") -+ -+ elseif(findstring('neb',directive,idum))then -+ -+c activate nudged elastic band option -+ -+ call neb_option(directive,lneb,lminopt,idnode, -+ x numneb,keytol,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('impact',directive,idum))then -+ -+c activate the impact option -+ -+ if(lhit)call error(idnode,516) -+ lhit=.true. -+ khit=intstr(directive,lenrec,idum) -+ nhit=intstr(directive,lenrec,idum) -+ ehit=dblstr(directive,lenrec,idum) -+ xhit=dblstr(directive,lenrec,idum) -+ yhit=dblstr(directive,lenrec,idum) -+ zhit=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'impact option selected')") -+ write(nrite,"( -+ x /,1x,'identity of impact atom ',i10, -+ x /,1x,'time step of impact ',i10, -+ x /,1x,'impact recoil energy (keV) ',1p,e12.4, -+ x /,1x,'impact direction (x component) ',1p,e12.4, -+ x /,1x,'impact direction (y component) ',1p,e12.4, -+ x /,1x,'impact direction (z component) ',1p,e12.4)") -+ x khit,nhit,ehit,xhit,yhit,zhit -+ -+ endif -+ -+c convert impact energy from keV to internal units -+ -+ ehit=ehit*9648530.821d0 -+ -+ elseif(findstring('bpd',directive,idum))then -+ -+c activate the BPD option -+ -+ call bpd_option(directive,seek,lbpd,ltad,lminopt,prechk, -+ x nebgo,keybpd,idnode,nblock,ntrack,keytol,ebias,vmin, -+ x catchrad,sprneb,opttol,hyp_units) -+ -+ elseif(findstring('tad',directive,idum))then -+ -+c activate temperature accelerated dynamics option -+ -+ call tad_option(directive,ltad,lbpd,lminopt,prechk,tadall, -+ x idnode,nblock,ntrack,blkout,keytol,catchrad,sprneb,tlow, -+ x deltad,opttol,hyp_units) -+ -+ elseif(findstring('minim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ minstp=intstr(directive,lenrec,idum) -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ lminim=.true. -+ loptim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'minimisation programme requested')") -+ write(nrite, -+ x "(1x,'structure minimisation interval ', -+ x 3x,i10)")minstp -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'structure minimisation tolerance', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('optim',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ if(findstring('forc',directive,idum))keytol=0 -+ if(findstring('ener',directive,idum))keytol=1 -+ if(findstring('posi',directive,idum))keytol=2 -+ hyp_units=energy_unit() -+ opttol=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ loptim=.true. -+ lminim=.false. -+ lzero=.false. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'structure optimisation requested')") -+ call print_optim(keytol) -+ write(nrite, -+ x "(1x,'tolerance for structure optimisation ', -+ x 3x,1p,e12.4,1x,a8)")opttol,cunit -+ -+ endif -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ elseif(findstring('zero',directive,idum))then -+ -+ if(lminopt)call error(idnode,225) -+ temp=1.d0 -+ lzero=.true. -+ loptim=.false. -+ lminim=.false. -+ ltemp=.true. -+ ltscal=.false. -+ lminopt=.true. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'zero K optimisation requested')") -+ write(nrite, -+ x "(' temperature reset to',1p,e12.4)")1.d0 -+ -+ endif -+ -+ else if(findstring('solva',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ else if(findstring('decomp',directive,idum))then -+ -+ call solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+ elseif(findstring('metafreeze',directive,idum).or. -+ x findstring('metadyn',directive,idum))then -+ -+c activate metadynamics option - d. quigley -+ -+ call metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+ else if(findstring('free',directive,idum))then -+ -+ call free_energy_option(directive,lfree,lfrmas,idnode) -+ -+ else if(findstring('excite',directive,idum))then -+ -+ call excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+ else if(findstring('switch',directive,idum))then -+ -+ call switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+ elseif(findstring('print',directive,idum))then -+ -+ nstbpo=intstr(directive,lenrec,idum) -+ nstbpo=max(nstbpo,1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data printing interval ',3x,i10)")nstbpo -+ -+ elseif(findstring('stack',directive,idum))then -+ -+ nstack=intstr(directive,lenrec,idum) -+ -+c reset stack limit if too large -+ -+ nstack=min(nstack,mxstak) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'data stacking interval ',3x,i10)")nstack -+ -+ elseif(findstring('stats',directive,idum))then -+ -+ intsta=intstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'statistics file interval ',3x,i10)")intsta -+ -+ elseif(findstring('traj',directive,idum))then -+ -+ ltraj=.true. -+ nstraj=intstr(directive,lenrec,idum) -+ istraj=max(intstr(directive,lenrec,idum),1) -+ keytrj=intstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'trajectory file option on ', -+ x /,1x,'trajectory file start ',3x,i10, -+ x /,1x,'trajectory file interval ',3x,i10 -+ x /,1x,'trajectory file info key ',3x,i10)") -+ x nstraj,istraj,keytrj -+ -+ elseif(findstring('ewald',directive,idum).or. -+ x findstring('spme',directive,idum).or. -+ x findstring('hke',directive,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ call ewald_selection(directive,lhke,lspme,lewald,lcut, -+ x lforc,kill,idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2, -+ x kmax3,alpha,rcut) -+ -+ elseif(findstring('distan',directive,idum))then -+ -+ keyfce=4 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Distance dependent dielectric')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('coul',directive,idum))then -+ -+ keyfce=6 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Coulombic potential')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('shift',directive,idum))then -+ -+ keyfce=8 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : Shifted Coulombic potential')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('reaction',directive,idum))then -+ -+ keyfce=10 -+ alpha=0.d0 -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'Electrostatics : reaction field')") -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(.not.lcut)then -+ call error(idnode,-435) -+ kill=.true. -+ else -+ -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(1x,'Specified precision parameter : ',1p, -+ x e12.4)")eps -+ write(nrite, -+ x "(1x,'Calculated damping parameter: ',1p, -+ x e12.4)")alpha -+ -+ endif -+ -+ endif -+ -+ elseif(findstring('damp',directive,idum))then -+ -+ alpha=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(1x,'Specified damping parameter : ',1p,e12.4)") -+ x alpha -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('cap',directive,idum))then -+ -+ lfcap=.true. -+ fm=dblstr(directive,lenrec,idum) -+ if(fm.gt.0.d0)fmax=fm -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'force capping :',16x,1p,e12.4,' kT/A')")fmax -+ -+ elseif(findstring('no vdw',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'short-range potential terms off')") -+ lvdw=.true. -+ -+ elseif(findstring('no elec',directive,idum))then -+ -+ keyfce=0 -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'electrostatic potential terms off')") -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ -+ lforc=.true. -+ -+ elseif(findstring('mult',directive,idum))then -+ -+ multt=max(intstr(directive,lenrec,idum),1) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'multiple timestep interval ',3x,i10)")multt -+ -+ elseif(findstring('timestep',directive,idum))then -+ -+ lstep=.true. -+ tstep=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation timestep ',3x,1p,e12.4)")tstep -+ -+ elseif(findstring('temp',directive,idum))then -+ -+ ltemp=.true. -+ temp=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation temperature ',3x,1p,e12.4)")temp -+ -+ elseif(findstring('pres',directive,idum))then -+ -+ press=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'simulation pressure (katm) ',3x,1p,e12.4)")press -+ -+c convert from katm to internal units of pressure -+ -+ press=press/prsunt -+ lpres=.true. -+ -+ elseif(findstring('prim',directive,idum))then -+ -+c primary cutoff -+ -+ lprim=.true. -+ rprim=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'primary neighbour cut off ',3x,1p,e12.4)")rprim -+ -+ elseif(findstring('rvdw',directive,idum))then -+ -+c cutoff for short range potentials -+ -+ rvdw=dblstr(directive,lenrec,idum) -+ lrvdw=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off (vdw) ',3x,1p,e12.4)")rvdw -+ -+ elseif(findstring('delr',directive,idum))then -+ -+c Verlet shell width -+ -+ ldelr=.true. -+ delr=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'border width of Verlet shell',3x,1p,e12.4)")delr -+ -+ elseif(findstring('cut',directive,idum))then -+ -+c cutoff -+ -+ lcut=.true. -+ rcut=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'real space cut off ',3x,1p,e12.4)")rcut -+ -+ elseif(findstring('eps',directive,idum))then -+ -+c relative dielectric constant -+ -+ epsq=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'relative dielectric constant',3x,1p,e12.4)")epsq -+ -+ elseif(findstring('rlxtol',directive,idum))then -+ -+c force tolerance for shell relaxation -+ -+ rlxtol=max(rlxtol,dblstr(directive,lenrec,idum)) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for shell relaxn. ',3x,1p,e12.4)")rlxtol -+ -+ elseif(findstring('shake',directive,idum))then -+ -+c tolerance for shake -+ -+ tolnce=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for SHAKE ',3x,1p,e12.4)")tolnce -+ -+ elseif(findstring('quaternion',directive,idum))then -+ -+c tolerance for quaternion integration -+ -+ quattol=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'tolerance for Quaternions ',3x,1p,e12.4)")quattol -+ -+ elseif(findstring('job time',directive,idum))then -+ -+c time for simulation (in seconds/minutes/hours/days or indefinite) -+ -+ if(findstring('indef',directive,idum))then -+ timjob=1.0d6*365.25d0*24.d0*60.d0*60.d0 -+ else -+ timjob=dblstr(directive,lenrec,idum) -+ if(findstring('m',directive,idum))then -+ timjob=6.0d1*timjob -+ elseif(findstring('h',directive,idum))then -+ timjob=3.6d3*timjob -+ elseif(findstring('d',directive,idum))then -+ timjob=8.64d4*timjob -+ endif -+ endif -+ -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'user allocated job time (',a1,') ',3x,f8.4)") -+ x hms,prntim -+ -+ elseif(findstring('close time',directive,idum))then -+ -+c time for winding up a job (in seconds) -+ -+ timcls=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'job closure time (s) ',3x,f8.3)")timcls -+ -+ elseif(findstring('all pairs',directive,idum))then -+ -+c full minimum image - N^2 interactions each timestep -+ -+ lnsq=.true. -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'All-pairs requested for electrostatics')") -+ -+ elseif(findstring('nospl',directive,idum))then -+ -+c set ewald_spme interpolation order -+ -+ nospl=intstr(directive,lenrec,idum) -+ -+ elseif(findstring('finish',directive,idum))then -+ -+c safe termination of reading CONTROL file -+ -+ loop=.false. -+ -+ else -+ -+c unrecognised directive in control file -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ enddo -+ -+c check on steps before temperature scaling -+ -+ if(nstbts.eq.0)nstbts=nstrun+1 -+ -+c conduct consistency checks on directives -+ -+ if(lminim)then -+ -+c ensure final configuration follows minimisation -+ -+ if(minstp.eq.0)minstp=nstrun -+ nstrun=minstp*(nstrun/minstp) -+ -+ endif -+ -+c check force activation options -+ -+ if(.not.lforc)then -+ -+c check if any forces are in operation -+ -+ if(.not.lvdw)then -+ -+ kill=.true. -+ call error(idnode,-383) -+ -+ endif -+ -+ else -+ -+c turn on short range forces -+ -+ if(lvdw)then -+ -+ if(keyfce.eq.0)then -+ -+ lcut=.true. -+ ldelr=.true. -+ -+ endif -+ -+ else -+ -+ keyfce=keyfce+1 -+ -+ endif -+ -+ endif -+ -+c if tad selected use only leap frog -+ -+ if(ltad.and.keyver.eq.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to leapfrog for TAD dynamics')") -+ keyver=0 -+ -+ endif -+ -+c error checking -+ -+ if(lmetadyn.and.keyens.ne.3.and.keyens.ne.5.and.keyens.ne.7)then -+ -+ kill=.true. -+ call error(idnode,-2360) -+ -+ endif -+ -+ if(lsolva.or.lfree.or.lexcite.or.lswitch)then -+ -+ if(lspme)then -+ -+ kill=.true. -+ call error(idnode,-601) -+ -+ endif -+ -+ if(lhke)then -+ -+ kill=.true. -+ call error(idnode,-602) -+ -+ endif -+ -+ endif -+ -+ if(lghost.and.nstbgr.ne.isolva)then -+ -+ call warning(idnode,130,dble(isolva),0.d0,0.d0) -+ nstbgr=isolva -+ -+ endif -+ if(lfree.and.lgofr)then -+ -+ call warning(idnode,140,0.d0,0.d0,0.d0) -+ lgofr=.false. -+ lpgr=.false. -+ -+ endif -+ if(loptim)then -+ -+ temp=0.d0 -+ -+ elseif(.not.ltemp)then -+ -+ kill=.true. -+ call error(idnode,-380) -+ -+ endif -+ -+ if(.not.lstep)then -+ -+ kill=.true. -+ call error(idnode,-381) -+ -+ endif -+ -+ if(.not.lcut)then -+ -+ kill=.true. -+ call error(idnode,-382) -+ -+ endif -+ -+c check if van der Waals cutoff set -+ -+ if(.not.lrvdw.and.mod(keyfce,2).eq.1)then -+ -+ if(rcut.gt.0.d0)then -+ -+ rvdw=rcut -+ -+ else -+ -+ kill=.true. -+ call error(idnode,-402) -+ -+ endif -+ -+ endif -+ -+ if(.not.ldelr)then -+ -+ kill=.true. -+ call error(idnode,-384) -+ -+ endif -+ -+ if(multt.gt.1)then -+ -+ if(.not.lprim)then -+ -+ kill=.true. -+ call error(idnode,-385) -+ -+ elseif(rprim.gt.rcut)then -+ -+ kill=.true. -+ call error(idnode,-386) -+ -+ endif -+ -+ endif -+ -+c check settings in nvt ensemble -+ -+ if(keyens.ge.2.and.keyens.le.3)then -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ -+ endif -+ -+c check settings in npt ensemble -+ -+ if(keyens.ge.4.and.keyens.le.7)then -+ -+ if(.not.lpres)then -+ -+ kill=.true. -+ call error(idnode,-387) -+ -+ endif -+ -+c check barostat and thermostat rates non zero -+ -+ if(taut.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-464) -+ -+ endif -+ if(taup.le.0.d0)then -+ -+ kill=.true. -+ call error(idnode,-466) -+ -+ endif -+ -+ endif -+ -+c check multiple timestep cutoffs are sensible -+ -+ if(multt.gt.1)then -+ if(rcut-rprim.lt.delr)then -+ -+ kill=.true. -+ call error(idnode,-398) -+ -+ endif -+ endif -+ -+c check rcut > rvdw (for verlet list constructor) -+ -+ if(rcut.lt.rvdw)then -+ -+ kill=.true. -+ call error(idnode,-400) -+ -+ endif -+ -+c check spme is not being used with incorrect pbc -+ -+ if(lspme)then -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ kill=.true. -+ call error(idnode,-513) -+ -+ endif -+ -+ endif -+ -+c check on all-pairs calculation request -+ -+ if(lnsq)then -+ -+ if(multt.eq.1)then -+ -+ kill=.true. -+ call error(idnode,-422) -+ -+ endif -+ -+ if(keyfce/2.lt.2.or.keyfce/2.gt.3)then -+ -+ kill=.true. -+ call error(idnode,-424) -+ -+ endif -+ -+ endif -+ -+c cancel rdf option if no vdw or coulombic forces -+ -+ if(lgofr.and.keyfce.eq.0)then -+ -+ lgofr=.false. -+ call warning(idnode,120,0.d0,0.d0,0.d0) -+ -+ endif -+ -+ if(kill)call abort_control_read(2,idnode,nread) -+ -+c close CONTROL file -+ -+ if(idnode.eq.0)close(nread) -+ -+ return -+ end subroutine simdef -+ -+ subroutine sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading in the molecular specifications -+c of the system to be simulated -+c version for rigid unit data and neutral groups -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith may 1992. -+c amended - w.smith march 1994 -+c amended - t.forester april 1994 -+c amended - w.smith dec 1994 - getrec etc -+c amended - a.smondyrev may 2000 - keydih=5 for -+c ryckaert-bellemans potential in dihedrals -+c amended - a.smondyrev may 2000 - keydih=6 for -+c fluorinated ryckaert-bellemans potential in dihedrals -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lunits,lmols,lneut,ltable,lnsq,lshl,safe,lpmf -+ logical loop1,loop2,lsolva,lfree,lexcite,lswitch,lghost -+ -+ integer idnode,keyfce,keyfld,natms,ngrp,ntpatm,ntpmls -+ integer ntpvdw,ntptbp,ntpmet,ntpfbp,nshels,ksite -+ integer nsite,nconst,nangle,ndihed,ninver,nbonds -+ integer nteth,nspmf,itmols,i,idum,keyver -+ integer ntpter,keyshl,iatm,natmsr,ntghost -+ -+ real(8) dlrpot,engunit,rvdw,rcuttb,rctter,rcutfb -+ real(8) sumchg -+ -+ data loop1/.true./,loop2/.true./ -+ -+c initialise system counters: atomic site index, number of -+c constraints, bond angles, dihedrals, inversions, chemical bonds, -+c unique atom types, total number of atoms, -+c total number of rigid groups, number of tethered atoms, -+c number of three body potentials -+ -+ nsite=0 -+ nconst=0 -+ nangle=0 -+ ndihed=0 -+ ninver=0 -+ nbonds=0 -+ ntpatm=0 -+ natms=0 -+ ngrp=0 -+ nteth=0 -+ ntptbp=0 -+ ntpter=0 -+ ntpmet=0 -+ ntpvdw=0 -+ ntpfbp=0 -+ nshels=0 -+ nspmf=0 -+ keyfld=0 -+ keyshl=0 -+ ntghost=0 -+ natmsr=0 -+ ntcons_ghost=0 -+ -+ lunits=.false. -+ lmols=.false. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ lshl=.false. -+ lpmf=.false. -+ engunit=1.d0 -+ -+ numbonds(:)=0 -+ numpmf(:)=0 -+ numcon(:)=0 -+ numdih(:)=0 -+ numinv(:)=0 -+ numgrp(:)=0 -+ numsit(:)=0 -+ numteth(:)=0 -+ numshl(:)=0 -+ npmf(:)=0 -+ indpmf(:)=0 -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD',status='old') -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,'SYSTEM SPECIFICATION')") -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c convert to lowercase and remove leading blanks -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.' ')then -+ -+c record is commented out -+ cycle -+ -+ elseif(findstring('units',record,idum))then -+ -+c identify energy unit for input/output -+ -+ lunits=.true. -+ call define_units(idnode,engunit) -+ -+c neutral group control option -+ -+ elseif(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ if(idnode.eq.0) -+ x write(nrite,"(/,' neutral group implementation in use')") -+ -+c can't have neutral groups with all-pairs -+ -+ if(lnsq)call error(idnode,426) -+ -+c specify molecular species -+ -+ elseif(findstring('molecu',record,idum))then -+ -+c number of molecular types -+ -+ if(lmols)call error(idnode,11) -+ lmols=.true. -+ ntpmls=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'number of molecular types',6x,i10)") -+ x ntpmls -+ -+ if(ntpmls.gt.mxtmls)call error(idnode,10) -+ -+c initialise total system charge -+ -+ sumchg=0.d0 -+ -+c read in molecular characteristics -+ -+ do itmols=1,ntpmls -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'molecular species type',9x,i10)") -+ x itmols -+ -+c name of molecular species -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call copystring(record,molnam(1,itmols),40) -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,1x,'name of species:',13x,40a1)") -+ x (molnam(i,itmols),i=1,40) -+ -+c stop processing if energy unit has not been specified -+ -+ if(.not.lunits)call error(idnode,6) -+ -+c read molecular data -+ -+ loop2=.true. -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'number of molecules ', -+ x 10x,i10)")nummols(itmols) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+c read in atomic details -+ -+ call define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read core - shell spring parameters -+ -+ elseif(findstring('shell',record,idum))then -+ -+ lshl=.true. -+ call define_core_shell -+ x (safe,idnode,itmols,nshels,nsite,keyshl, -+ x engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read chemical bond force constant and bondlength -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ call define_bonds -+ x (safe,idnode,itmols,nbonds,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read bond atom indices and constraint bondlength -+ -+ elseif(findstring('constr',record,idum))then -+ -+ call define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read pmf bond atom indices, weights and constraint bondlength -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ if(lpmf)call error(idnode,484) -+ lpmf=.true. -+ call define_pmf(safe,idnode,itmols,nspmf) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular angular potential parameters -+ -+ elseif(findstring('angles',record,idum))then -+ -+ call define_angles -+ x (safe,idnode,itmols,nangle,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular dihedral potential parameters -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ call define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read intramolecular inversion potential parameters -+ -+ elseif(findstring('invers',record,idum))then -+ -+ call define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read rigid body data -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ call define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read tethered atom indices and tethering parameters -+ -+ elseif(findstring('teth',record,idum))then -+ -+ call define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c finish of data for one molecular type -+ -+ elseif(findstring('finish',record,idum))then -+ -+c running total of number of atoms in system -+ -+ natms=natms+nummols(itmols)*numsit(itmols) -+ if(natms.gt.mxatms)call error(idnode,75) -+ -+c check core-shell units are not both in same rigid body unit -+ -+ call check_shells(idnode,itmols,nshels,ngrp) -+ -+ loop2=.false. -+ -+ else -+ -+c error exit for unidentified directive in molecular data -+ -+ if(idnode.eq.0)write(nrite,'(12x,a)')record -+ call error(idnode,12) -+ -+ endif -+ -+ enddo -+ -+c construction of atmolt table for solvation calculation -+ -+ if(lsolva)then -+ -+ do iatm=natmsr+1,natms -+ atmolt(iatm)=itmols -+ enddo -+ natmsr=natms -+ -+ endif -+ -+ enddo -+ -+c construction of atm_fre table for free energy or excitation -+ -+ if(lfree.or.lexcite.or.lswitch)then -+ -+ atm_fre(:)=0 -+ if((ind_fre(1).ne.0).and.(ind_fre(2).ne.0))then -+ -+ do iatm=ind_fre(1),ind_fre(2) -+ atm_fre(iatm)=1 -+ enddo -+ -+ endif -+ -+ if((ind_fre(3).ne.0).and.(ind_fre(4).ne.0))then -+ -+ do iatm=ind_fre(3),ind_fre(4) -+ -+ atm_fre(iatm)=2 -+ if(lghost)ntghost=ntghost+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c calculate system charge -+ -+ call check_syschg(idnode,ntpmls,sumchg) -+ -+c read in the nonbonded potential energy parameters -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ call define_van_der_waals -+ x (safe,ltable,lunits,lmols,idnode,ntpvdw, -+ x ntpatm,keyfce,dlrpot,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the metal potential energy parameters -+ -+ elseif(findstring('met',record,idum))then -+ -+ call define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rvdw,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the three body potential energy parameters -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ call define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read the tersoff potential energy parameters -+ -+ elseif(findstring('tersoff',record,idum))then -+ -+ call define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read in the four body potential energy parameters -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ call define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c read external field data -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ if(.not.safe)call abort_field_read(1,idnode,nfield) -+ -+c normal end of FIELD file -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ if(ntpvdw.eq.0.and.ntpmet.eq.0.and. -+ x mod(keyfce,2).eq.1)call error(idnode,145) -+ -+c error exit for unidentified directive -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(100a)')record -+ call abort_field_read(2,idnode,nfield) -+ -+ endif -+ -+ enddo -+ -+c close force field file -+ -+ if(idnode.eq.0)close (nfield) -+ -+ -+ if(lshl.and.idnode.eq.0)then -+ -+ if(keyshl.eq.1)write(nrite, -+ x "(/,/,'adiabatic shell model in operation')") -+ -+ if(keyshl.eq.2)write(nrite, -+ x "(/,/,'relaxed shell model in operation')") -+ -+ endif -+ -+ if(lshl.and.keyshl.eq.0)call error(idnode,1951) -+ -+c if metadynamics and shell selected use only velocity verlet -+ -+ if(lshl.and.lmetadyn.and.keyver.eq.0)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'switching to velocity verlet for metadynamics')") -+ keyver=1 -+ -+ endif -+ -+ return -+ end subroutine sysdef -+ -+ subroutine sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the configuration data file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 atname(8) -+ -+ logical loglnk,safe,lneut,nolink,lfree,lfrmas -+ integer idnode,imcon,keyens,keyfce,keyres,levcfg,multt -+ integer ntpmls,i,indatm,indnam,indneu,k,ilx,ily,ilz -+ integer m,l,ncells,idum,mxnode -+ real(8) delr,rcut,volm,xcoord,ycoord,zcoord,totmas,xveloc -+ real(8) yveloc,zveloc,xforce,yforce,zforce,axx,rt3,xhi,yhi,zhi -+ real(8) width,dum1,dum2,test,com(3) -+ -+c open the system input file -+ -+ if(idnode.eq.0)open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ call copystring(record,cfgname,80) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'configuration file name: ',/,/,10x,80a1)")cfgname -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ -+ levcfg=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'selected image convention',6x,i10)")imcon -+ -+c check config file contents for consistent data -+ -+ if((imcon.eq.0.or.imcon.eq.6).and. -+ x (keyfce/2.eq.1.or.keyfce/2.eq.6)) -+ x call error(idnode,180) -+ -+ if(imcon.eq.0.and.(.not.lneut).and.(keyfce.gt.1) -+ x .and.(multt.eq.1))call warning(idnode,30,0.d0,0.d0,0.d0) -+ -+ if(imcon.eq.0.and.(keyens.ge.4.and.keyens.le.7)) -+ x call error(idnode,390) -+ if(imcon.le.2.and.(keyens.eq.6.or.keyens.eq.7))imcon=3 -+ if(keyres.gt.0.and.levcfg.lt.1)call error(idnode,85) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.eq.0)then -+ -+c if no periodic boundaries - set zero values for cell -+c vectors and cell volume -+ -+ cell(:)=0.d0 -+ volm=0.d0 -+ -+ else -+ -+c read cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ if(.not.safe)call abort_config_read(1,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+ endif -+ -+c read the atomic coordinates -+ -+ indatm=0 -+ indnam=0 -+ indneu=0 -+ safe=.true. -+ -+ do k=1,ntpmls -+ -+ do l=1,nummols(k) -+ -+ do m=1,numsit(k) -+ -+ indatm=indatm+1 -+ -+ if(indatm.gt.mxatms)call error(idnode,45) -+ -+ xxx(indatm)=0.d0 -+ yyy(indatm)=0.d0 -+ zzz(indatm)=0.d0 -+ vxx(indatm)=0.d0 -+ vyy(indatm)=0.d0 -+ vzz(indatm)=0.d0 -+ fxx(indatm)=0.d0 -+ fyy(indatm)=0.d0 -+ fzz(indatm)=0.d0 -+ -+ if(idnode.eq.0)then -+ -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ -+ elseif(levcfg.eq.1)then -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ -+ else -+ -+ read(nconf,'(8a1)',end=100)atname -+ read(nconf,'(3f20.0)',end=100)xcoord,ycoord,zcoord -+ read(nconf,'(3f20.0)',end=100)xveloc,yveloc,zveloc -+ read(nconf,'(3f20.0)',end=100)xforce,yforce,zforce -+ -+ endif -+ -+c strip blanks off atom name -+ -+ call strip(atname,8) -+ -+ if(sitnam(indnam+m).eq.mkwd8(atname))then -+ -+ xxx(indatm)=xcoord -+ yyy(indatm)=ycoord -+ zzz(indatm)=zcoord -+ -+ if(levcfg.gt.0)then -+ -+ vxx(indatm)=xveloc -+ vyy(indatm)=yveloc -+ vzz(indatm)=zveloc -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ fxx(indatm)=xforce -+ fyy(indatm)=yforce -+ fzz(indatm)=zforce -+ -+ endif -+ -+ else -+ -+ write(nrite,"(/,/,'unidentified atom label :',8a1, -+ x ': atom number ',i5)")atname,indatm -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ call gstate(safe) -+ if(.not.safe)call error(idnode,25) -+ -+ ltype(indatm)=ltpsit(indnam+m) -+ weight(indatm)=wgtsit(indnam+m) -+ chge(indatm)=chgsit(indnam+m) -+ atmnam(indatm)=sitnam(indnam+m) -+ lstfrz(indatm)=lfzsit(indnam+m) -+ if(lneut)lstneu(indatm)=nugrp(indnam+m)+indneu -+ -+c reset atomic masses according to free energy definitions -+ -+ if(lfree)then -+ -+ weight_sav(indatm)=weight(indatm) -+ -+ if(lfrmas)then -+ -+ if(indatm.ge.ind_fre(1).and.indatm.le.ind_fre(2))then -+ weight(indatm)=lambda1*weight(indatm) -+ elseif(indatm.ge.ind_fre(3).and.indatm.le.ind_fre(4)) -+ x then -+ weight(indatm)=lambda2*weight(indatm) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ indneu=indneu+nugrp(indnam+numsit(k)) -+ -+ enddo -+ -+ indnam=indnam+numsit(k) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(xxx,indatm,buffer) -+ call gdsum(yyy,indatm,buffer) -+ call gdsum(zzz,indatm,buffer) -+ -+ if(levcfg.gt.0)then -+ -+ call gdsum(vxx,indatm,buffer) -+ call gdsum(vyy,indatm,buffer) -+ call gdsum(vzz,indatm,buffer) -+ -+ endif -+ -+ if(levcfg.gt.1)then -+ -+ call gdsum(fxx,indatm,buffer) -+ call gdsum(fyy,indatm,buffer) -+ call gdsum(fzz,indatm,buffer) -+ -+ endif -+ -+ endif -+ -+c check integrity of cell vectors : for cubic, TO and RD cases -+c ie. cell(1)=cell(5)=cell(9) (or cell(9)/sqrt(2) for RD) -+ -+ if((imcon.eq.1).or.(imcon.eq.4).or.(imcon.eq.5))then -+ -+ axx=(abs(cell(1))+abs(cell(5)))/2.d0 -+ test=1.d-8*axx -+ if(abs(cell(1)-axx).gt.test)call error(idnode,410) -+ if(abs(cell(5)-axx).gt.test)call error(idnode,410) -+ if(imcon.eq.5)then -+ if(abs(cell(9)-axx*sqrt(2.d0)).gt.test) -+ x call error(idnode,410) -+ else -+ if(abs(cell(9)-axx).gt.test)call error(idnode,410) -+ endif -+ -+ endif -+ -+c check integrity of hexagonal prism cell vectors -+ -+ if(imcon.eq.7)then -+ -+ rt3=sqrt(3.d0) -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,410) -+ -+ endif -+ -+c check 2D PBC for imcon=6 -+ -+ if(imcon.eq.6)then -+ -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c check for diagonal cell matrix if appropriate -+ -+ if((imcon.eq.1).or.(imcon.eq.2).or.(imcon.eq.4).or. -+ x (imcon.eq.5).or.(imcon.eq.7))then -+ -+ if(abs(cell(2)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(3)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(4)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(6)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(7)).gt.1.d-10)call error(idnode,410) -+ if(abs(cell(8)).gt.1.d-10)call error(idnode,410) -+ -+ endif -+ -+c put centre of mass at centre of coordinates if imcon=0 -+ -+ if(imcon.eq.0)then -+ -+ totmas=getmass(indatm,idnode,mxnode) -+ call getcom(indatm,idnode,mxnode,totmas,com) -+ -+ do i=1,indatm -+ -+ xxx(i)=xxx(i)-com(1) -+ yyy(i)=yyy(i)-com(2) -+ zzz(i)=zzz(i)-com(3) -+ -+ enddo -+ -+ endif -+ -+c set widths if unset - needed for check on link cells below -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+ xhi=abs(xxx(1)) -+ yhi=abs(yyy(1)) -+ zhi=abs(zzz(1)) -+ do i=2,indatm -+ -+ xhi=max(xhi,abs(xxx(i))) -+ yhi=max(yhi,abs(yyy(i))) -+ zhi=max(zhi,abs(zzz(i))) -+ -+ enddo -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*yhi+rcut+delr,3.d0*(rcut+delr)) -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ if(imcon.eq.6.and.cell(9).lt.1.d-6)then -+ -+ cell(9)=max(2.d0*zhi+rcut+delr,3.d0*(rcut+delr)) -+ -+ endif -+ -+ endif -+ -+c calculate dimensional properties of simulation cell -+ -+ call dcell(cell,celprp) -+ -+ if(imcon.eq.0)then -+ -+ volm=0.d0 -+ -+ elseif(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ else -+ -+ volm=celprp(10) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'simulation cell vectors'/,/)") -+ write(nrite,"(21x,3f12.6)")cell -+ -+ write(nrite, -+ x "(/,/,1x,'system volume ',2x,1p,g22.12)")volm -+ -+ endif -+ -+c check value of cutoff and reset if necessary -+ -+ if(imcon.gt.0)then -+ -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ if(imcon.eq.4)width=sqrt(3.d0)*cell(1)/4.d0 -+ if(imcon.eq.5)width=cell(1)/2.d0 -+ if(imcon.eq.6)width=min(celprp(7),celprp(8))/2.d0 -+ -+c halt program if potential cutoff exceeds cell width -+ -+ if(rcut.gt.width)call error(idnode,95) -+ -+ endif -+ -+c decide on whether to use link cells for verlet list constructor -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ -+ ilx=int(celprp(7)/(rcut+delr)) -+ ily=int(celprp(8)/(rcut+delr)) -+ ilz=int(celprp(9)/(rcut+delr)) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(lneut.and.ncells.le.36)loglnk=.false. -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(loglnk.and.ncells.gt.mxcell)then -+ -+ dum1=dble(ncells) -+ dum2=dble(mxcell) -+ call warning(idnode,90,dum1,dum2,dum2) -+ loglnk=.false. -+ -+ endif -+ -+ endif -+ -+ if(loglnk.and.idnode.eq.0) -+ x write(nrite,"(/,/,' link cell algorithm in use')") -+ -+ if(idnode.eq.0)close (nconf) -+ -+c ensure PBC compliance of starting structure -+ -+ if(keyres.eq.0.and.imcon.gt.0)then -+ -+ call images(imcon,idnode,mxnode,indatm,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,indatm,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ -+c error exit for config file read -+ -+ 100 call abort_config_read(2,idnode,nconf) -+ -+ end subroutine sysgen -+ -+ subroutine sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading the REVIVE file data and -+c defining the initial thermodynamic and structural accumulators. -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c adapted - d. quigley nov 2010, metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden,lfree,lsolva,lghost,lpsoc -+ integer idnode,imcon,keyfce,keyres,mxnode,natms,nstep,numacc -+ integer numrdf,ntpatm,nzden,i,j,k,ntpmet,ntshl,ntpvdw -+ real(8) chip,chit,conint,elrc,engunit,virlrc,rvdw,volm -+ real(8) dnumrd,dnstep,dnumac,dnzden,virtot,vircom,tboost -+ real(8) chit_shl -+ -+c read or initialise accumulator arrays -+ -+ if(keyres.eq.1.and.idnode.eq.0)then -+ -+c read accumulator data from dump file -+ -+ open(nrest,file='REVOLD',form='unformatted') -+ -+ read(nrest) dnstep,dnumac,dnumrd,chit,chip,conint,dnzden, -+ x tboost,chit_shl -+ read(nrest) virtot,vircom,eta,strcns,strbod -+ read(nrest) stpval -+ read(nrest) sumval -+ read(nrest) ssqval -+ read(nrest) zumval -+ read(nrest) ravval -+ read(nrest) stkval -+ read(nrest) xx0,yy0,zz0 -+ read(nrest) xxs,yys,zzs -+ -+ if(lgofr) read(nrest)rdf -+ if(lzden) read(nrest)zdens -+ -+ nstep=nint(dnstep) -+ numacc=nint(dnumac) -+ numrdf=nint(dnumrd) -+ nzden=nint(dnzden) -+ close (nrest) -+ -+ else -+ -+c initialise step counters -+ -+ nstep=0 -+ numacc=0 -+ numrdf=0 -+ nzden=0 -+ -+c initialise temperature and pressure coupling parameters -+c and integral for conserved quantity -+ -+ chit=0.d0 -+ chip=0.d0 -+ conint=0.d0 -+ virtot=0.d0 -+ vircom=0.d0 -+ chit_shl=0.d0 -+ do i=1,9 -+ -+ eta(i)=0.d0 -+ strcns(i)=0.d0 -+ strbod(i)=0.d0 -+ -+ enddo -+ -+c initialise accumulator arrays -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ zumval(i)=0.d0 -+ ravval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ xxs(i)=0.d0 -+ yys(i)=0.d0 -+ zzs(i)=0.d0 -+ -+ enddo -+ -+ do j=1,mxnstk -+ -+ do i=1,mxstak -+ -+ stkval(i,j)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ zdens(j,i)=0.d0 -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c put shells on cores at start -+ -+ if(lpsoc.and.keyres.ne.1.and.ntshl.gt.0) -+ x call put_shells_on_cores(idnode,mxnode,ntshl) -+ -+c if restart then broadcast stored variables via a global sum -+ -+ if(keyres.eq.1.and.mxnode.gt.1)then -+ -+ if(mxbuff.lt.natms.or.mxbuff.lt.mxnstk*mxstak) -+ x call error(idnode,186) -+ -+ buffer(1)=chit -+ buffer(2)=chip -+ buffer(3)=conint -+ buffer(4)=dble(nstep) -+ buffer(5)=dble(numacc) -+ buffer(6)=dble(numrdf) -+ buffer(7)=dble(nzden) -+ buffer(8)=tboost -+ buffer(9)=virtot -+ buffer(10)=vircom -+ buffer(11)=chit_shl -+ call gdsum(buffer(1),11,buffer(12)) -+ chit=buffer(1) -+ chip=buffer(2) -+ conint=buffer(3) -+ nstep=nint(buffer(4)) -+ numacc=nint(buffer(5)) -+ numrdf=nint(buffer(6)) -+ nzden=nint(buffer(7)) -+ tboost=buffer(8) -+ virtot=buffer(9) -+ vircom=buffer(10) -+ chit_shl=buffer(11) -+ -+ call gdsum(eta,9,buffer) -+ call gdsum(strcns,9,buffer) -+ call gdsum(strbod,9,buffer) -+ call gdsum(stpval,mxnstk,buffer) -+ call gdsum(sumval,mxnstk,buffer) -+ call gdsum(ssqval,mxnstk,buffer) -+ call gdsum(zumval,mxnstk,buffer) -+ call gdsum(ravval,mxnstk,buffer) -+ call gdsum(stkval,mxnstk*mxstak,buffer) -+ call gdsum(xx0,natms,buffer) -+ call gdsum(yy0,natms,buffer) -+ call gdsum(zz0,natms,buffer) -+ call gdsum(xxs,natms,buffer) -+ call gdsum(yys,natms,buffer) -+ call gdsum(zzs,natms,buffer) -+ -+c for rdf table - broadcast and normalise -+ -+ if(lgofr)then -+ -+ do k=1,mxxtyp -+ -+ call gdsum(rdf(1,k),mxrdf,buffer) -+ -+ do j=1,mxrdf -+ rdf(j,k)=rdf(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(lzden)then -+ -+ do k=1,mxatyp -+ -+ call gdsum(zdens(1,k),mxzdn,buffer) -+ -+ do j=1,mxzdn -+ zdens(j,k)=zdens(j,k)/dble(mxnode) -+ enddo -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities and long-range corrections -+ -+ elrc=0.d0 -+ virlrc=0.d0 -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=4.d0*pi/3.d0*rvdw**3 -+ -+ call lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rvdw,volm) -+ -+ if(lmetab.or.ntpmet.eq.0)then -+ -+ elrcm(0)=0.d0 -+ vlrcm(0)=0.d0 -+ -+ else -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+ if(imcon.eq.0.or.imcon.eq.6)volm=0.d0 -+ -+ return -+ end subroutine sysinit -+ -+ subroutine systemp -+ x (idnode,imcon,keyres,mxnode,natms,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for setting the initial system temperature -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyres,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,ntshl,levcfg,i,io,k,keyshl -+ real(8) degfre,degshl,degrot,temp,tolnce,sigma,rsq -+ -+c number of degrees of freedom -+c 3 for com translation -+c 3 for angular momentum about origin (non-periodic systems only) -+ -+ degfre=dble(3*(ntfree-ntshl)-3-ntcons)+degfre -+ if(imcon.eq.0.or.imcon.eq.6)degfre=degfre-3.0d0 -+ if(imcon.eq.0.or.imcon.eq.6)degrot=max(0.d0,degrot-3.0d0) -+ degshl=dble(3*ntshl) -+ -+c lose one degree of freedom if temperature constrained -+c gaussian constraints -+ -+c if(keyens.eq.1)degfre=degfre-1.d0 -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,/,' total degrees of freedom ',f20.0,/, -+ x ' rotational degrees of freedom ',f20.0,/, -+ x ' shell pseudo degrees of freedom',f20.0)") -+ x degfre,degrot,degshl -+ if(degfre.lt.1.d0)call error(idnode,350) -+ -+c define reciprocal masses of atoms -+ -+ do i=1,natms -+ -+ if(lstfrz(i).ne.0.or.weight(i).lt.1.d-6)then -+ -+ rmass(i)=0.d0 -+ weight(i)=0.d0 -+ -+ else -+ -+ rmass(i)=1.d0/weight(i) -+ -+ endif -+ -+ enddo -+ -+c generate starting velocities -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+ if(keyres.eq.0)then -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ elseif(keyres.eq.1.or.keyres.eq.3)then -+ -+ if(ngrp.gt.0)call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ elseif(keyres.eq.2)then -+ -+ if(ngrp.gt.0)then -+ -+ call vscaleg -+ x (idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ elseif(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c print out sample of initial configuration -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'sample of starting configuration',/)") -+ -+ io=(natms+19)/20 -+ if((levcfg.le.1).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',/,/)") -+ if((levcfg.eq.2).and.(idnode.eq.0)) -+ x write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)', -+ x 7x,'fx(i)',7x,'fy(i)',7x,'fz(i)',/,/)") -+ -+ do i=1,natms,io -+ -+ if(levcfg.le.1)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i) -+ -+ elseif(levcfg.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i), -+ x vxx(i),vyy(i),vzz(i),fxx(i),fyy(i),fzz(i) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine systemp -+ -+ subroutine sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine defining global bookkeeping -+c arrays -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith july 1997 -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loglnk,lneut,lshmov,lcnb,lsolva,lghost -+ integer idnode,imcon,mxnode,natms,nneut,ngrp,nscons,ntangl,i -+ integer ntbond,ntcons,ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,ii,isol,itmols,igsol,iggsol,natmsf,natmsl -+ integer ntghost,natms2 -+ real(8) degfre,degrot -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c neutral group bookkeeping -+ -+ call neutbook(lneut,idnode,natms,nneut) -+ -+c rigid body bookkeeping -+ -+ call quatbook -+ x (lsolva,idnode,imcon,mxnode,natms2,ngrp,ntpmls, -+ x ntfree,degfre,degrot) -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)+ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)+ngrp_ghost -+ -+ endif -+ -+c construct list of excluded pair interactions -+ -+ if(lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ call excludeneu(idnode,mxnode,nneut) -+ -+ elseif(.not.lneut)then -+ -+ call exclude(idnode,mxnode,natms,ntpmls) -+ -+ if(loglnk)then -+ -+ call exclude_link(idnode,mxnode,ntpmls) -+ -+ else -+ -+ call exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+ endif -+ -+ endif -+ -+c if excitation calculation, allow for ghost species -+ -+ if(lghost)then -+ -+ numcon(mxtmls)=numcon(mxtmls)-ntcons_ghost -+ numgrp(mxtmls)=numgrp(mxtmls)-ngrp_ghost -+ -+ endif -+ -+c construct interaction lists for bonded forces -+ -+ call intlist -+ x (lshmov,lcnb,idnode,mxnode,natms2,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c adaptations for solvation and excitation simulations -+ -+ if(lsolva.or.lghost)then -+ -+ natmsf=0 -+ natmsl=0 -+ natm_sol(:)=0 -+ const_sol(:)=numcon(:)*nummols(:) -+ rigid_sol(:)=numgrp(:)*nummols(:) -+ -+ if(ngrp.eq.0)then -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ else -+ -+ ii=1 -+ -+ do itmols=1,mxtmls -+ -+ natmsl=natmsl+numsit(itmols)*nummols(itmols) -+ -+ do isol=natmsf+1,natmsl -+ -+ if(lstgot_sol(ii).eq.isol)then -+ ii=ii+1 -+ else -+ -+ if(lstfrz(isol).eq.0)then -+ natm_sol(itmols)=natm_sol(itmols)+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+ natmsf=natmsl -+ -+ enddo -+ -+ degrot_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ degfre_sol(:)=degrot_sol(:)+dble(rigid_sol(:))*3.d0 -+ -+ endif -+ -+ if(lghost)natm_sol(mxtmls)=natm_sol(mxtmls)-ntghost -+ degfre_sol(:)=dble(3*(natm_sol(:))-const_sol(:))+degfre_sol(:) -+ -+ endif -+ -+ return -+ end subroutine sysbook -+ -+ subroutine define_units(idnode,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting energy units -+c -+c copyright - daresbury laboratory -+c author - w. smith august 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,idum,i -+ real(8) engunit -+ logical blank -+ -+ blank=.true. -+ -+ do i=6,lenrec -+ if(record(i).ne.' ')blank=.false. -+ enddo -+ -+ if(blank)then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal ', -+ x 'units ')") -+ -+ elseif(findstring('ev',record,idum))then -+ -+ engunit=9648.530821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=electron volts ')") -+ -+ elseif(findstring('kev',record,idum))then -+ -+ engunit=9648530.821d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kilo electron volts ')") -+ -+ elseif(findstring('kcal',record,idum))then -+ -+ engunit=418.4d0 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kcal/ mol ')") -+ -+ elseif(findstring('kj',record,idum))then -+ -+ engunit=1.d2 -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kjoule/mol ')") -+ -+ elseif(findstring('k',record,idum))then -+ -+ engunit=boltz -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=kelvin ')") -+ -+ elseif(findstring('internal',record,idum))then -+ -+ if(idnode.eq.0) -+ x write(nrite,"(/,' energy units=dl_poly internal', -+ x ' units ')") -+ -+ else -+ -+ if(idnode.eq.0)write(nrite,'(a)')record -+ call error(idnode,5) -+ -+ endif -+ -+ return -+ end subroutine define_units -+ -+ subroutine quatbook -+ x (lsolva,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree, -+ x degfre,degrot) -+ -+c************************************************************************** -+c -+c dl_poly subroutine for setting up bookkeeping for rigid bodies -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c adapted - p.-a. cazade oct 2007, solvation etc -+c -+c************************************************************************* -+ -+ implicit none -+ -+ logical safe,pass1,pass2,linear,lsolva -+ integer fail,idnode,imcon,mxnode,natms,ngrp,ntpmls,ntfree -+ integer i,igrp,jgrp,kgrp,jr,jt,igrp1,igrp2,itmols,imols,lgrp,id -+ integer ii,jj,isite,k,kk,ill,i1,i2,i3,j,ngp,ifre1,ifre2,ig,ij -+ integer fngrp,lngrp -+ real(8) degfre,degrot,dnorm,a1,rtall,rotall,rot,aa,rotinr,bb,rot1 -+ real(8) rsq,det,dettest,aq,bq,cq,dq,eq,fq,gq,hq,rnorm,tol,rotxyz -+ real(8) rotlim,rrr -+ -+ integer, allocatable :: ind(:,:),lstgot(:) -+ real(8), allocatable :: gaxs(:,:),rotmin(:),accum(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ dimension rot(9),aa(9),rotinr(3,3),bb(9),rot1(3,3),fail(5) -+ -+ data fail/0,0,0,0,0/ -+ -+c allocate working arrays -+ -+ allocate (ind(mxgrp,3),lstgot(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate (gaxs(mxungp,9),rotmin(mxungp),stat=fail(4)) -+ allocate (accum(mxungp),stat=fail(5)) -+ do i=1,5 -+ if(fail(i).ne.0)call error(idnode,1790) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ igrp=0 -+ jgrp=0 -+ kgrp=0 -+ isite=0 -+ jr=0 -+ jt=0 -+ safe=.true. -+ degfre=0.d0 -+ degrot=0.d0 -+ -+c rigid body identifier -+ -+ do i=1,natms -+ lstbod(i)=0 -+ enddo -+ -+c number of rigid groups in system -+ -+ ngrp=0 -+ do itmols=1,ntpmls -+ ngrp=ngrp+nummols(itmols)*numgrp(itmols) -+ enddo -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if(igrp.le.mxgrp)then -+ -+ lstgtp(igrp)=listyp(lgrp+kgrp) -+ id=listyp(lgrp+kgrp) -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2))then -+ -+ jgrp=jgrp+1 -+ -+ do jj=1,numgsit(id) -+ -+ jr=jr+1 -+ jt=jt+1 -+ -+ if(jr.le.mxatms.and.jt.le.mxatms)then -+ -+ lstrgd(jr)=lstgst(id,jj)+isite -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do jj=1,numgsit(id) -+ -+ jt=jt+1 -+ if(jt.le.mxatms)then -+ -+ lstgot(jt)=lstgst(id,jj)+isite -+ lstbod(lstgst(id,jj)+isite)=igrp -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,304) -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kgrp=kgrp+numgrp(itmols) -+ -+ enddo -+ -+ if(ngrp.eq.0)then -+ -+ j=0 -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0)then -+ -+ j=j+1 -+ lstfre(j)=i -+ -+ endif -+ -+ enddo -+ ntfree=j -+ -+ else -+ -+c centre of mass of groups -+c assumes group dimensions are smaller than half box width -+ -+ do i=1,natms -+ lstme(i)=0 -+ enddo -+ -+ do id=1,mxungp -+ gmass(id)=0.d0 -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ safe=.false. -+ if(abs(gmass(id)).lt.1.d-10)safe=.true. -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ xxt(jr)=xxx(i)-txx(ig) -+ yyt(jr)=yyy(i)-tyy(ig) -+ zzt(jr)=zzz(i)-tzz(ig) -+ if(safe)gmass(id)=gmass(id)+weight(i) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*xxt(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*yyt(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*zzt(jr) -+ -+ enddo -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c global communications -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+c make sure all nodes have same copy of gmass -+ -+ if(mxnode.gt.1)then -+ -+ do id=1,mxungp -+ -+ accum(id)=0.d0 -+ if(gmass(id).gt.0.d0)accum(id)=1.d0 -+ -+ enddo -+ -+ call gdsum(gmass(1),mxungp,buffer(1)) -+ call gdsum(accum(1),mxungp,buffer(1)) -+ -+ do id=1,mxungp -+ -+ dnorm=max(1.d0,accum(id)) -+ gmass(id)=gmass(id)/dnorm -+ -+ enddo -+ -+ endif -+ -+c find a group of each type on this node to -+c find principal axis system of the group type -+ -+ do id=1,mxungp -+ -+ jr=0 -+ ij=0 -+ safe=.false. -+ -+ do while(.not.safe.and.ij.lt.ngrp) -+ -+ ij=ij+1 -+ jr=jr+numgsit(lstgtp(ij)) -+ if(lstgtp(ij).eq.id)safe=.true. -+ -+ enddo -+ -+ if(safe)then -+ -+c rotational inertia accumulator -+ -+ do k=1,3 -+ -+ do kk=1,3 -+ -+ rotinr(k,kk)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ij) -+ yyt(jr)=yyy(i)-gcmy(ij) -+ zzt(jr)=zzz(i)-gcmz(ij) -+ -+ call images(imcon,0,1,1,cell,xxt(jr),yyt(jr),zzt(jr)) -+ -+ rotinr(1,1)=rotinr(1,1)+weight(i)*(xxt(jr)**2) -+ rotinr(1,2)=rotinr(1,2)+weight(i)*xxt(jr)*yyt(jr) -+ rotinr(1,3)=rotinr(1,3)+weight(i)*xxt(jr)*zzt(jr) -+ rotinr(2,2)=rotinr(2,2)+weight(i)*(yyt(jr)**2) -+ rotinr(2,3)=rotinr(2,3)+weight(i)*yyt(jr)*zzt(jr) -+ rotinr(3,3)=rotinr(3,3)+weight(i)*(zzt(jr)**2) -+ -+ enddo -+ -+ rotinr(2,1)=rotinr(1,2) -+ rotinr(3,1)=rotinr(1,3) -+ rotinr(3,2)=rotinr(2,3) -+ -+ call jacobi(rotinr,rot1,3) -+ -+ rot(1)=rot1(1,1) -+ rot(4)=rot1(2,1) -+ rot(7)=rot1(3,1) -+ rot(2)=rot1(1,2) -+ rot(5)=rot1(2,2) -+ rot(8)=rot1(3,2) -+ rot(3)=rot1(1,3) -+ rot(6)=rot1(2,3) -+ rot(9)=rot1(3,3) -+ -+c rotational inertia accumulators -+ -+ rotinx(id,1)=0.d0 -+ rotiny(id,1)=0.d0 -+ rotinz(id,1)=0.d0 -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstgot(jr) -+ -+c site positions in principal axis system -+ -+ gxx(id,j)=rot(1)*xxt(jr)+rot(4)*yyt(jr)+rot(7)*zzt(jr) -+ gyy(id,j)=rot(2)*xxt(jr)+rot(5)*yyt(jr)+rot(8)*zzt(jr) -+ gzz(id,j)=rot(3)*xxt(jr)+rot(6)*yyt(jr)+rot(9)*zzt(jr) -+ -+c impose rounding -+ -+ if(abs(gxx(id,j)).lt.1.d-8)gxx(id,j)=0.d0 -+ if(abs(gyy(id,j)).lt.1.d-8)gyy(id,j)=0.d0 -+ if(abs(gzz(id,j)).lt.1.d-8)gzz(id,j)=0.d0 -+ -+c rotational inertia tensor of group type -+ -+ rotinx(id,1)=rotinx(id,1)+ -+ x weight(i)*(gyy(id,j)**2+gzz(id,j)**2) -+ rotiny(id,1)=rotiny(id,1)+ -+ x weight(i)*(gzz(id,j)**2+gxx(id,j)**2) -+ rotinz(id,1)=rotinz(id,1)+ -+ x weight(i)*(gxx(id,j)**2+gyy(id,j)**2) -+ -+ enddo -+ -+c set axis system such that: Ixx >=Iyy >=Izz -+ -+ rotxyz=max(rotinx(id,1),rotiny(id,1),rotinz(id,1)) -+ -+ if(rotxyz.ge.rotinx(id,1))then -+ -+ if(rotiny(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gyy(id,j) -+ gyy(id,j)=-a1 -+ -+ enddo -+ -+ rotiny(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ elseif(rotinz(id,1).ge.rotxyz)then -+ -+ do j=1,numgsit(id) -+ -+ a1=gxx(id,j) -+ gxx(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ rotinz(id,1)=rotinx(id,1) -+ rotinx(id,1)=rotxyz -+ -+ endif -+ -+ endif -+ -+ if(rotinz(id,1).gt.rotiny(id,1))then -+ -+ do j=1,numgsit(id) -+ -+ a1=gyy(id,j) -+ gyy(id,j)=gzz(id,j) -+ gzz(id,j)=-a1 -+ -+ enddo -+ -+ a1=rotinz(id,1) -+ rotinz(id,1)=rotiny(id,1) -+ rotiny(id,1)=a1 -+ -+ endif -+ -+c set up principal axis system in terms of site positions -+ -+c test for (near) linear unit -+ -+ ill=0 -+ rtall=(rotinx(id,1)+rotiny(id,1)+rotinz(id,1)) -+ -+ if(rtall.gt.1.d-5)then -+ rotall=rtall -+ else -+ rotall=1.d0 -+ endif -+ -+ rotmin(id)=min(rotinx(id,1),rotiny(id,1)) -+ rotmin(id)=min(rotmin(id),rotinz(id,1))/rotall -+ -+ if((rotinx(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotiny(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ if((rotinz(id,1)/rotall).lt.1.d-5)ill=ill+1 -+ -+ if(ill.ge.2)then -+ -+c point particle only -+ -+ ind(id,1)=1 -+ ind(id,2)=1 -+ ind(id,3)=1 -+ -+ do jj=1,9 -+ gaxs(id,jj)=0.d0 -+ enddo -+ -+ elseif(ill.eq.1)then -+ -+c linear molecule -+ -+ ind(id,1)=1 -+ ind(id,2)=2 -+ ind(id,3)=1 -+ -+ aa(1)=gxx(id,1)-gxx(id,2) -+ aa(4)=gyy(id,1)-gyy(id,2) -+ aa(7)=gzz(id,1)-gzz(id,2) -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+ call invert(aa,bb,det) -+ -+ if(abs(det).lt.1.d-5)call error(idnode,306) -+ -+ do j=1,9 -+ gaxs(id,j)=bb(j) -+ enddo -+ -+ elseif(ill.eq.0)then -+ -+c non-linear molecule -+ -+ i1=1 -+ i2=1 -+ i3=1 -+ pass1=.true. -+ dettest=1.d-1 -+ -+ do while(pass1.and.i2.lt.numgsit(id)-1) -+ -+ i2=i2+1 -+ i3=i2 -+ pass2=.true. -+ -+ do while(pass2.and.i3.lt.numgsit(id)) -+ -+ i3=i3+1 -+ -+ aa(1)=gxx(id,i1)-gxx(id,i2) -+ aa(4)=gyy(id,i1)-gyy(id,i2) -+ aa(7)=gzz(id,i1)-gzz(id,i2) -+ aa(2)=gxx(id,i1)-gxx(id,i3) -+ aa(5)=gyy(id,i1)-gyy(id,i3) -+ aa(8)=gzz(id,i1)-gzz(id,i3) -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c invert matrix -+ -+ call invert(aa,bb,det) -+ -+c check on size of determinant - to see if the 3 sites are -+c too close to being linear for safety. -+ -+ pass2=abs(det).lt.dettest -+ -+ enddo -+ -+ pass1=abs(det).lt.dettest -+ -+ enddo -+ -+ if(abs(det).lt.dettest)call error(idnode,306) -+ -+c store indices used -+ -+ ind(id,1)=i1 -+ ind(id,2)=i2 -+ ind(id,3)=i3 -+ -+c store coefficients -+ -+ do j=1,9 -+ -+ gaxs(id,j)=bb(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check that rigid unit does not contain frozen atoms -+ -+ safe=.true. -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ if(lstfrz(i).ne.0)safe=.false. -+ -+ enddo -+ -+ enddo -+ -+c global check on error condition -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,360) -+ -+c quaternions for all rigid groups in system -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ i1=lstrgd(jr+ind(id,1)) -+ i2=lstrgd(jr+ind(id,2)) -+ i3=lstrgd(jr+ind(id,3)) -+ -+ jr=jr+numgsit(id) -+ -+c group basis vectors -+ -+ aa(1)=xxx(i1)-xxx(i2) -+ aa(4)=yyy(i1)-yyy(i2) -+ aa(7)=zzz(i1)-zzz(i2) -+ -+ call images(imcon,0,1,1,cell,aa(1),aa(4),aa(7)) -+ -+ if(rotmin(id).gt.1.d-5)then -+ -+ aa(2)=xxx(i1)-xxx(i3) -+ aa(5)=yyy(i1)-yyy(i3) -+ aa(8)=zzz(i1)-zzz(i3) -+ -+ else -+ -+ rsq=sqrt(aa(1)**2+aa(4)**2+aa(7)**2) -+ -+ if(abs(aa(7)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(7)**2) -+ aa(2)=0.d0 -+ aa(5)=aa(7)/rsq -+ aa(8)=-aa(4)/rsq -+ -+ elseif(abs(aa(4)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(4)**2+aa(1)**2) -+ aa(2)=-aa(4)/rsq -+ aa(5)=aa(1)/rsq -+ aa(8)=0.d0 -+ -+ elseif(abs(aa(1)/rsq).gt.0.5d0)then -+ -+ rsq=sqrt(aa(1)**2+aa(7)**2) -+ aa(2)=-aa(7)/rsq -+ aa(5)=0.d0 -+ aa(8)=aa(1)/rsq -+ -+ endif -+ -+ endif -+ -+ call images(imcon,0,1,1,cell,aa(2),aa(5),aa(8)) -+ -+ aa(3)=aa(4)*aa(8)-aa(7)*aa(5) -+ aa(6)=aa(7)*aa(2)-aa(1)*aa(8) -+ aa(9)=aa(1)*aa(5)-aa(4)*aa(2) -+ -+c group rotational matrix -+ -+ rot(1)=gaxs(id,1)*aa(1)+gaxs(id,4)*aa(2)+gaxs(id,7)*aa(3) -+ rot(2)=gaxs(id,2)*aa(1)+gaxs(id,5)*aa(2)+gaxs(id,8)*aa(3) -+ rot(3)=gaxs(id,3)*aa(1)+gaxs(id,6)*aa(2)+gaxs(id,9)*aa(3) -+ rot(4)=gaxs(id,1)*aa(4)+gaxs(id,4)*aa(5)+gaxs(id,7)*aa(6) -+ rot(5)=gaxs(id,2)*aa(4)+gaxs(id,5)*aa(5)+gaxs(id,8)*aa(6) -+ rot(6)=gaxs(id,3)*aa(4)+gaxs(id,6)*aa(5)+gaxs(id,9)*aa(6) -+ rot(7)=gaxs(id,1)*aa(7)+gaxs(id,4)*aa(8)+gaxs(id,7)*aa(9) -+ rot(8)=gaxs(id,2)*aa(7)+gaxs(id,5)*aa(8)+gaxs(id,8)*aa(9) -+ rot(9)=gaxs(id,3)*aa(7)+gaxs(id,6)*aa(8)+gaxs(id,9)*aa(9) -+ -+c determine quaternions from rotational matrix -+ -+ aq=rot(1)+rot(5) -+ bq=rot(2)-rot(4) -+ cq=rot(6)-rot(8) -+ dq=rot(2)+rot(4) -+ eq=rot(3)+rot(7) -+ fq=rot(6)+rot(8) -+ gq=rot(3)-rot(7) -+ hq=rot(1)-rot(5) -+ -+ q0(ig)=0.5d0*sqrt(aq+sqrt(aq*aq+bq*bq)) -+ -+ if(q0(ig).gt.1.d-4)then -+ -+ q1(ig)=-0.25d0*cq/q0(ig) -+ q2(ig)=0.25d0*gq/q0(ig) -+ q3(ig)=-0.25d0*bq/q0(ig) -+ -+ else -+ -+ q1(ig)=0.5d0*sqrt(hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q1(ig).gt.1.d-4)then -+ -+ q2(ig)=0.25d0*dq/q1(ig) -+ q3(ig)=0.25d0*eq/q1(ig) -+ -+ else -+ -+ q2(ig)=0.5d0*sqrt(-hq+sqrt(hq*hq+dq*dq)) -+ -+ if(q2(ig).gt.1.d-4)then -+ -+ q3(ig)=0.25d0*fq/q2(ig) -+ -+ else -+ -+ q3(ig)=1.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c normalise quaternions -+ -+ rnorm=1.d0/sqrt(q0(ig)**2+q1(ig)**2+q2(ig)**2+q3(ig)**2) -+ q0(ig)=rnorm*q0(ig) -+ q1(ig)=rnorm*q1(ig) -+ q2(ig)=rnorm*q2(ig) -+ q3(ig)=rnorm*q3(ig) -+ -+ enddo -+ -+c test for redundant degrees of freedom -+c and ensure rotational inertias are non-zero -+ -+ degrot=0.d0 -+ -+ if(lsolva)then -+ degrot_sol(:)=0.d0 -+ endif -+ -+ do ig=1,ngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot=degrot-1.d0 -+ endif -+ -+ enddo -+ -+c rotational degrees of freedom and rigid body contribution -+c to total degrees of freedom -+ -+ degrot=degrot+dble(ngrp)*3.d0 -+ degfre=degrot+dble(ngrp)*3.d0 -+ -+ if(lsolva)then -+ -+ fngrp=1 -+ lngrp=0 -+ -+ do itmols=1,mxtmls -+ -+ lngrp=lngrp+nummols(itmols)*numgrp(itmols) -+ -+ do ig=fngrp,lngrp -+ -+ id=lstgtp(ig) -+ rotall=1.d0/max(1.d-5,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1)) -+ -+ if(rotall*rotinx(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotiny(id,1).lt.1.d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ if(rotall*rotinz(id,1).lt.1d-5)then -+ degrot_sol(itmols)=degrot_sol(itmols)-1.d0 -+ endif -+ -+ enddo -+ -+ fngrp=lngrp+1 -+ -+ enddo -+ -+ endif -+ -+c summarise results -+ -+ if(idnode.eq.0)then -+ -+ if(gmass(1).gt.0.d0)then -+ -+ write(nrite,'(/,/,12x,a)')' summary of rigid body set up' -+ -+ do id=1,mxungp -+ -+ if(gmass(id).gt.0.d0)then -+ -+ write(nrite,'(/,a,i10)')' group of type ',id -+ write(nrite,'(12x,a,f20.10)')' total mass ', -+ x gmass(id) -+ write(nrite,'(12x,a,3f20.10)')' rot. inertia ', -+ x rotinx(id,1),rotiny(id,1),rotinz(id,1) -+ write(nrite,'(/,12x,a,3(8x,a7))')' site','a coord', -+ x 'b coord','c coord' -+ do j=1,numgsit(id) -+ write(nrite,'(12x,i5,1p,3e15.5)')j,gxx(id,j), -+ x gyy(id,j),gzz(id,j) -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c find number of unique groups -+ -+ ngp=0 -+ do ig=1,ngrp -+ ngp=max(ngp,lstgtp(ig)) -+ enddo -+ -+c calculate reciprocal of rotational inertias -+ -+ do id=1,ngp -+ -+ rotlim=max(1.d-2,rotinx(id,1)+rotiny(id,1)+ -+ x rotinz(id,1))*1.d-5 -+ -+ if(rotinx(id,1).lt.rotlim)then -+ rotinx(id,2)=0.d0 -+ else -+ rotinx(id,2)=1.d0/rotinx(id,1) -+ endif -+ -+ if(rotiny(id,1).lt.rotlim)then -+ rotiny(id,2)=0.d0 -+ else -+ rotiny(id,2)=1.d0/rotiny(id,1) -+ endif -+ -+ if(rotinz(id,1).lt.rotlim)then -+ rotinz(id,2)=0.d0 -+ else -+ rotinz(id,2)=1.d0/rotinz(id,1) -+ endif -+ -+ enddo -+ -+c Check of quaternion set up with atomic positions -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c group type -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyt(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzt(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ -+ txx(jr)=xxx(i)-xxt(i) -+ tyy(jr)=yyy(i)-yyt(i) -+ tzz(jr)=zzz(i)-zzt(i) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,txx,tyy,tzz) -+ -+c set tolerance for testing quaternion setup. -+ -+ rsq=0.d0 -+ tol=1.d-2 -+ -+ do i=1,jr -+ -+ rrr=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ if(rrr.gt.tol)then -+ -+ rsq=rrr -+ -+ endif -+ -+ enddo -+ -+c exit if error in set up -+ -+ safe=.true. -+ if(rsq.gt.tol)safe=.false. -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)call error(idnode,310) -+ -+c sort lstgot into ascending order -+ -+ call shellsort(jt,lstgot) -+ -+c check that no site is in more than 1 rigid group -+ -+ i=1 -+ safe=.true. -+ do while(i.lt.jt) -+ -+ i=i+1 -+ linear=.true. -+ do while(linear) -+ -+ linear=.false. -+ -+ if(lstgot(i).eq.lstgot(i-1))then -+ -+ linear=.true. -+ safe=.false. -+ jt=jt-1 -+ -+ do j=i,jt -+ lstgot(j)=lstgot(j+1) -+ enddo -+ -+ endif -+ -+ if(i.ge.jt)linear=.false. -+ -+ enddo -+ -+ enddo -+ -+ if(.not.safe)call error(idnode,320) -+ -+c list of 'free' sites -+ -+ ii=1 -+ jj=0 -+ do i=1,natms -+ -+ if(lstgot(ii).eq.i)then -+ -+ ii=ii+1 -+ -+ else -+ -+ if(lstfrz(i).eq.0)then -+ jj=jj+1 -+ lstfre(jj)=i -+ endif -+ -+ endif -+ -+ enddo -+ -+c number of free sites -+ -+ ntfree=jj -+ -+c list of atoms integrated on this node -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ jr=jr+numgsit(id) -+ -+ enddo -+ -+ do i=1,jr -+ lstme(i)=lstrgd(i) -+ enddo -+ -+c block parameters for free atoms -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do i=ifre1,ifre2 -+ -+ jr=jr+1 -+ lstme(jr)=lstfre(i) -+ -+ enddo -+ -+c exchange quaternion data with other nodes -+ -+ if(mxnode.gt.1)call merge4 -+ x (idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+ if(lsolva)lstgot_sol(:)=lstgot(:) -+ -+c deallocate work arrays -+ -+ deallocate (ind,lstgot,stat=fail(1)) -+ deallocate (txx,tyy,tzz,stat=fail(2)) -+ deallocate (xxt,yyt,zzt,stat=fail(3)) -+ deallocate (gaxs,rotmin,stat=fail(4)) -+ deallocate (accum,stat=fail(5)) -+ -+ return -+ end subroutine quatbook -+ -+ subroutine abort_field_read(kode,idnode,nfield) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting FIELD file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nfield -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(kode.eq.1)then -+ -+c end of field file error exit -+ -+ call error(idnode,52) -+ -+ elseif(kode.eq.2)then -+ -+c unrecognised directive in field file -+ -+ call error(idnode,4) -+ -+ endif -+ -+ return -+ end subroutine abort_field_read -+ -+ subroutine abort_control_read(kode,idnode,nread) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nread -+ -+ if(idnode.eq.0)close (nread) -+ -+ if(kode.eq.1)then -+ -+c end of control file error exit -+ -+ call error(idnode,53) -+ -+ elseif(kode.eq.2)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,0) -+ -+ endif -+ -+ return -+ end subroutine abort_control_read -+ -+ subroutine abort_config_read(kode,idnode,nconf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for aborting CONTROL file read -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer kode,idnode,nconf -+ -+ if(idnode.eq.0)close (nconf) -+ -+ if(kode.eq.1)then -+ -+c general error exit from field file processing -+ -+ call error(idnode,54) -+ -+ elseif(kode.eq.2)then -+ -+c end of config file error exit -+ -+ call error(idnode,55) -+ -+ endif -+ -+ return -+ end subroutine abort_config_read -+ -+ subroutine neutbook(lneut,idnode,natms,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for neutral group bookkeeping -+c -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lneut,safe -+ integer idnode,natms,nneut,i -+ -+ safe=.true. -+ -+c neutral group bookkeeping: sites must be listed consecutively -+ -+ if(lneut)then -+ -+ if(lstneu(1).ne.1)call error(idnode,230) -+ -+ neulst(1)=1 -+ nneut=1 -+ -+ do i=2,natms -+ -+ safe=.false. -+ if(lstneu(i).eq.lstneu(i-1))safe=.true. -+ if(lstneu(i).eq.lstneu(i-1)+1)then -+ -+ safe=.true. -+ nneut=nneut+1 -+ if(nneut.gt.mxneut)call error(idnode,220) -+ neulst(nneut)=i -+ -+ endif -+ -+ if(.not.safe)call error(idnode,230) -+ -+ enddo -+ -+ neulst(nneut+1)=natms+1 -+ -+ endif -+ -+ return -+ -+ end subroutine neutbook -+ -+ subroutine intlist -+ x (lshmov,lcnb,idnode,mxnode,natms,nscons,ntangl,ntbond, -+ x ntcons,ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf,ngrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the interaction lists -+c for the entire simulated system -+c -+c parallel replicated dat version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,safe1,lcnb,lchk,lfail -+ integer idnode,mxnode,natms,nscons,ntangl,ntbond,ntcons -+ integer ntdihd,ntinv,ntpmls,ntteth,ntshl,ntpmf,nspmf -+ integer ibonds,jbonds,kbonds,ipmf,jpmf,iangle,jangle,kangle -+ integer idihed,jdihed,kdihed,iinver,jinver,kinver,iteths -+ integer jteths,kteths,ishels,jshels,kshels,ntbon0,ntpmf0 -+ integer ntang0,ntdih0,ntinv0,nttet0,ntshl0,ntcon0,idum -+ integer itmols,isite,iconst,jconst,kconst,ibnd1,ibnd2,ipmf1 -+ integer ipmf2,iang1,iang2,idih1,idih2,iinv1,iinv2,itet1 -+ integer itet2,ishl1,ishl2,imols,lbonds,lpmf,jj,nnn,langle -+ integer ldihed,linver,lteths,lshels,i,ii,ntmp,klo,khi,ngrp -+ integer klo0,ifail,iloop,nnode,nscons0,nscons1,icon,fail -+ integer kcons,id,jdnode,lconst,itry,iatom,jatom,j,nfail -+ real(8) tol -+ -+ integer, allocatable :: itest(:),index(:),kscons(:) -+ integer, allocatable :: msite(:),mconst(:),listin(:) -+ -+ dimension fail(4) -+ -+ data fail/0,0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (itest(mxtmls),index(mxtmls),stat=fail(1)) -+ allocate (msite(mxtmls),mconst(mxtmls),stat=fail(2)) -+ allocate (listin(mxatms),stat=fail(3)) -+ allocate (kscons(0:mxproc-1),stat=fail(4)) -+ do i=1,4 -+ if(fail(i).ne.0)call error(idnode,1800) -+ enddo -+ -+c initialise bookkeeping indices -+ -+ ibonds=0 -+ jbonds=0 -+ kbonds=0 -+ ipmf=0 -+ jpmf=0 -+ iangle=0 -+ jangle=0 -+ kangle=0 -+ idihed=0 -+ jdihed=0 -+ kdihed=0 -+ iinver=0 -+ jinver=0 -+ kinver=0 -+ iteths=0 -+ jteths=0 -+ kteths=0 -+ ishels=0 -+ jshels=0 -+ kshels=0 -+ safe=.true. -+ safe1=.true. -+ -+c find total number of bonds,pmf constraints,bond constraints, -+c angles,dihedrals,inversions, tethers,core-shells, in system -+c - ignoring frozen atoms -+ -+ ntbon0=0 -+ ntpmf0=0 -+ ntcon0=0 -+ ntang0=0 -+ ntdih0=0 -+ ntinv0=0 -+ nttet0=0 -+ ntshl0=0 -+ nscons=0 -+ ntcons=0 -+ -+ do itmols=1,ntpmls -+ -+ ntbon0=ntbon0+nummols(itmols)*numbonds(itmols) -+ ntpmf0=ntpmf0+nummols(itmols)*numpmf(itmols) -+ ntcon0=ntcon0+nummols(itmols)*numcon(itmols) -+ ntang0=ntang0+nummols(itmols)*numang(itmols) -+ ntdih0=ntdih0+nummols(itmols)*numdih(itmols) -+ ntinv0=ntinv0+nummols(itmols)*numinv(itmols) -+ nttet0=nttet0+nummols(itmols)*numteth(itmols) -+ ntshl0=ntshl0+nummols(itmols)*numshl(itmols) -+ -+ enddo -+ -+ isite=0 -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ -+c first and last index of bonds, angles etc for this node -+ -+ ibnd1=(idnode*ntbon0)/mxnode+1 -+ ibnd2=((idnode+1)*ntbon0)/mxnode -+ -+ ipmf1=(idnode*ntpmf0)/mxnode+1 -+ ipmf2=((idnode+1)*ntpmf0)/mxnode -+ ntpmf=ntpmf0 -+ nspmf=ipmf2+1-ipmf1 -+ -+ iang1=(idnode*ntang0)/mxnode+1 -+ iang2=((idnode+1)*ntang0)/mxnode -+ -+ idih1=(idnode*ntdih0)/mxnode+1 -+ idih2=((idnode+1)*ntdih0)/mxnode -+ -+ iinv1=(idnode*ntinv0)/mxnode+1 -+ iinv2=((idnode+1)*ntinv0)/mxnode -+ -+ itet1=(idnode*nttet0)/mxnode+1 -+ itet2=((idnode+1)*nttet0)/mxnode -+ -+ ishl1=(idnode*ntshl0)/mxnode+1 -+ ishl2=((idnode+1)*ntshl0)/mxnode -+ -+c loop over molecule types -+ -+ do itmols=1,ntpmls -+ -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct bond constraint list later -+c construct chemical bond interaction list -+ -+ do lbonds=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(ibonds.ge.ibnd1.and.ibonds.le.ibnd2)then -+ -+ jbonds=jbonds+1 -+ if(jbonds.le.mxbond)then -+ -+ listbnd(jbonds,1)=lbonds+kbonds -+ listbnd(jbonds,2)=lstbnd(lbonds+kbonds,1) -+ x +isite -+ listbnd(jbonds,3)=lstbnd(lbonds+kbonds,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,31) -+ -+c construct pmf site lists - no exclusions -+ -+ do lpmf=1,numpmf(itmols) -+ -+ ipmf=ipmf+1 -+ -+ if(ipmf.ge.ipmf1.and.ipmf.le.ipmf2)then -+ -+ jpmf=jpmf+1 -+ if(jpmf.le.mspmf)then -+ -+ nnn=npmf(1)+npmf(2) -+ if(nnn.le.mxspmf)then -+ -+ do jj=1,npmf(1)+npmf(2) -+ lstpmf(jj,jpmf)=indpmf(jj)+isite -+ enddo -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ else -+ -+ safe1=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe1) -+ if(.not.safe1)call error(idnode,458) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,460) -+ -+c construct valence angle interaction list -+ -+ do langle=1,numang(itmols) -+ -+ iangle=iangle+1 -+ -+ if(iangle.ge.iang1.and.iangle.le.iang2)then -+ -+ jangle=jangle+1 -+ if(jangle.le.mxangl)then -+ -+ listang(jangle,1)=langle+kangle -+ listang(jangle,2)=lstang(langle+kangle,1) -+ x +isite -+ listang(jangle,3)=lstang(langle+kangle,2) -+ x +isite -+ listang(jangle,4)=lstang(langle+kangle,3) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,51) -+ -+c construct dihedral angle interaction list -+ -+ do ldihed=1,numdih(itmols) -+ -+ idihed=idihed+1 -+ -+ if(idihed.ge.idih1.and.idihed.le.idih2)then -+ -+ jdihed=jdihed+1 -+ if(jdihed.le.mxdihd)then -+ -+ listdih(jdihed,1)=ldihed+kdihed -+ listdih(jdihed,2)=lstdih(ldihed+kdihed,1) -+ x +isite -+ listdih(jdihed,3)=lstdih(ldihed+kdihed,2) -+ x +isite -+ listdih(jdihed,4)=lstdih(ldihed+kdihed,3) -+ x +isite -+ listdih(jdihed,5)=lstdih(ldihed+kdihed,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,61) -+ -+c construct inversion potential list -+ -+ do linver=1,numinv(itmols) -+ -+ iinver=iinver+1 -+ -+ if(iinver.ge.iinv1.and.iinver.le.iinv2)then -+ -+ jinver=jinver+1 -+ if(jinver.le.mxinv)then -+ -+ listinv(jinver,1)=linver+kinver -+ listinv(jinver,2)=lstinv(linver+kinver,1) -+ x +isite -+ listinv(jinver,3)=lstinv(linver+kinver,2) -+ x +isite -+ listinv(jinver,4)=lstinv(linver+kinver,3) -+ x +isite -+ listinv(jinver,5)=lstinv(linver+kinver,4) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,77) -+ -+c construct tethered atoms interaction list -+ -+ do lteths=1,numteth(itmols) -+ -+ iteths=iteths+1 -+ -+ if(iteths.ge.itet1.and.iteths.le.itet2)then -+ -+ jteths=jteths+1 -+ if(jteths.le.msteth)then -+ -+ listtet(jteths,1)=lteths+kteths -+ listtet(jteths,2)=lsttet(lteths+kteths)+isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,63) -+ -+c construct core-shell list -+ -+ do lshels=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ if(ishels.ge.ishl1.and.ishels.le.ishl2)then -+ -+ jshels=jshels+1 -+ if(jshels.le.mxshl)then -+ -+ listshl(jshels,1)=lshels+kshels -+ listshl(jshels,2)=lstshl(lshels+kshels,1) -+ x +isite -+ listshl(jshels,3)=lstshl(lshels+kshels,2) -+ x +isite -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,59) -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ kbonds=kbonds+numbonds(itmols) -+ kangle=kangle+numang(itmols) -+ kdihed=kdihed+numdih(itmols) -+ kinver=kinver+numinv(itmols) -+ kteths=kteths+numteth(itmols) -+ kshels=kshels+numshl(itmols) -+ -+ enddo -+ -+c store array counters for bookkeeping -+ -+ ntbond=ibonds -+ ntangl=iangle -+ ntdihd=idihed -+ ntinv=iinver -+ ntteth=iteths -+ ntshl=ishels -+ -+c pass bond constraint information to other nodes -+ -+ if(ntcon0.gt.0)then -+ -+ ntcons=ntcon0 -+ -+c find starting site no. and constraint no. for each molec. type -+ -+ msite(1)=0 -+ mconst(1)=0 -+ -+ do itmols=2,ntpmls -+ -+ msite(itmols)=msite(itmols-1)+numsit(itmols-1)* -+ x nummols(itmols-1) -+ mconst(itmols)=mconst(itmols-1)+numcon(itmols-1) -+ -+ enddo -+ -+c sort molecules into ascending order of number of constraints -+ -+ do i=1,ntpmls -+ -+ itest(i)=numcon(i) -+ index(i)=0 -+ -+ enddo -+ -+ call shellsort(ntpmls,itest) -+ -+ do i=1,ntpmls -+ -+ lchk=.true. -+ do j=1,ntpmls -+ -+ if(itest(i).eq.numcon(j))then -+ -+ if(lchk)then -+ index(i)=j -+ lchk=.false. -+ -+ endif -+ -+ do ii=1,i-1 -+ if(index(ii).eq.j)lchk=.true. -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c load balance to within 10% -+ -+ tol=1.0d0+(0.10d0)/2.d0 -+ kcons=(ntcons)/mxnode -+ ntmp=0 -+ -+c find smallest constrained molecule to allocate to a node -+ -+ do i=1,ntpmls -+ -+ if(ntmp.le.mxnode)then -+ -+ if(numcon(index(i)).gt.0)then -+ ntmp=ntmp+nummols(index(i)) -+ klo=max(0,kcons-numcon(index(i))/2) -+ khi=klo+numcon(index(i))+1 -+ endif -+ -+ endif -+ -+ enddo -+ -+c reset hi/lo limits if molecules contain too many constraints -+ -+ if(dble(khi)/dble(max(1,klo)).gt.tol)then -+ klo=nint(dble(kcons)/tol) -+ khi=nint(dble(kcons)*tol)+1 -+ endif -+ -+c store lo value for later -+ -+ klo0=klo -+ -+c begin assignment of constraints ---------------------------------- -+ -+ ifail=-1 -+ lfail=.true. -+ do while(lfail) -+ -+ ifail=ifail+1 -+ -+ if(ifail.gt.ntpmls)then -+ call error(idnode,432) -+ endif -+ -+ iconst=0 -+ jconst=0 -+ kconst=0 -+ lconst=0 -+ -+c zero running totals of constraints on each processor -+ -+ do id=0,mxnode-1 -+ kscons(id)=0 -+ enddo -+ -+ iloop=0 -+ lfail=.false. -+ iconst=0 -+ jconst=0 -+ nnode=0 -+ -+c assign difficult molecules in blocks -+ -+ if(ifail.gt.0)then -+ -+ nfail=0 -+ do i=1,ifail -+ -+ ii=ntpmls+1-i -+ nfail=nfail+nummols(index(ii))*numcon(index(ii)) -+ -+ enddo -+ -+c decide on number of processors to split over -+ -+ nnode=int(dble(nfail)/dble(max(kcons,1))+1.d0/tol) -+ nnode=max(2,nnode) -+ nnode=min(nnode,mxnode) -+ -+c assign to processors 0..nnode-1 -+ -+ do id=0,nnode-1 -+ -+ nscons0=(id*nfail)/nnode+1 -+ nscons1=((id+1)*nfail)/nnode -+ -+ kscons(id)=nscons1+1-nscons0 -+ -+ enddo -+ -+c this processors block -+ -+ nscons0=(idnode*nfail)/nnode+1 -+ nscons1=((idnode+1)*nfail)/nnode -+ -+c assign in blocks -+ -+ do itmols=ntpmls,ntpmls-ifail+1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ -+c construct bond constraint list -+ -+ do lconst=1,numcon(ii) -+ -+ iconst=iconst+1 -+ -+ if(iconst.ge.nscons0.and.iconst.le.nscons1)then -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c assign non-problematic molecules -+ -+ jdnode=mod(nnode+1,mxnode) -+ -+ do itmols=ntpmls-ifail,1,-1 -+ -+ ii=index(itmols) -+ icon=numcon(ii) -+ kconst=mconst(ii) -+ -+ do imols=1,nummols(ii) -+ -+ itry=0 -+ lchk=.true. -+ do while(lchk) -+ -+ if(kscons(jdnode)+icon.le.klo)then -+ -+ if(jdnode.ne.idnode)then -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ else -+ -+c construct bond constraint list -+ -+ isite=msite(ii)+(imols-1)*numsit(ii) -+ do lconst=1,numcon(ii) -+ -+ jconst=jconst+1 -+ -+ if(jconst.le.mxcons)then -+ -+ listcon(jconst,1)=lconst+kconst -+ iatom=lstcon(lconst+kconst,1)+isite -+ jatom=lstcon(lconst+kconst,2)+isite -+ listcon(jconst,2)=iatom -+ listcon(jconst,3)=jatom -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ kscons(jdnode)=kscons(jdnode)+icon -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.false. -+ -+ endif -+ -+ else -+ -+ jdnode=mod(jdnode+1,mxnode) -+ lchk=.true. -+ itry=itry+1 -+ -+ endif -+ -+ if(lchk.and.itry.gt.mxnode)then -+ -+ klo=kcons -+ kcons=khi -+ itry=0 -+ iloop=iloop+1 -+ -+ endif -+ -+c split molecule across nodes if have to -+ -+ if(iloop.gt.3)then -+ lfail=.true. -+ kcons=ntcons/mxnode -+ klo=klo0 -+ lchk=.false. -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c check no node has less than minimum number -+ -+ do id=0,mxnode-1 -+ if(kscons(id).lt.klo0)then -+ lfail=.true. -+ endif -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(mxnode.gt.1)call gimax(jconst,1,idum) -+ if(idnode.eq.0)write(nrite,'(a,i10,a,i10)') -+ x 'Number of constraints found ',jconst,'Max allowed ',mxcons -+ -+ call error(idnode,41) -+ -+ endif -+ -+ nscons=kscons(idnode) -+ -+ call passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+ endif -+ -+ if(npmf(1).gt.0)then -+ -+ call passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+ endif -+ -+c pass rigid body data -+ -+ lcnb=.false. -+ if(ntcons.gt.0.and.ngrp.gt.0)then -+ -+ call passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp, -+ x numgsit) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(itest,index,msite,stat=fail(1)) -+ deallocate(mconst,kscons,listin,stat=fail(2)) -+ -+ return -+ end subroutine intlist -+ -+ subroutine ensemble_selection -+ x (directive,lens,kill,idnode,keyens,mode,taut,taup) -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ensemble and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical kill,lens -+ integer keyens,idnode,idum,mode -+ real(8) taut,taup -+ -+ if(findstring('nve',directive,idum))then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'microcanonical ensemble')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('nvt',directive,idum))then -+ -+ if(findstring('evans',directive,idum))then -+ -+ keyens=1 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Evans Gaussian temperature constraints', -+ x ' in use')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('ber',directive,idum))then -+ -+ keyens=2 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen thermostat', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=3 -+ taut=dblstr(directive,69,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4)") -+ x taut -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('npt',directive,idum))then -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=4 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen isotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=5 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) isotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ elseif(findstring('nst',directive,idum))then -+ -+ mode=0 -+ if(findstring('block',directive,idum))mode=1 -+ if(findstring('surf',directive,idum))mode=2 -+ if(findstring('slab',directive,idum))mode=3 -+ -+ if(findstring('ber',directive,idum))then -+ -+ keyens=6 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Berendsen anisotropic N-P-T', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ elseif(findstring('hoover',directive,idum))then -+ -+ keyens=7 -+ taut=dblstr(directive,lenrec,idum) -+ taup=dblstr(directive,lenrec,idum) -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Nose-Hoover (Melchionna) anisotropic N-P-T ', -+ x /,1x,'thermostat relaxation time ',1p,e12.4, -+ x /,1x,'barostat relaxation time ',1p,e12.4)") -+ x taut,taup -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ kill=.true. -+ if(idnode.eq.0)write(nrite,"(/,/,100a1)")record -+ call error(idnode,-3) -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ if(mode.eq.0)then -+ write(nrite,"(/,1x,'NST mode 0 X<>Y<>Z')") -+ elseif(mode.eq.1)then -+ write(nrite, -+ x "(/,1x,'NST mode 1 X<>Y<>Z (rectangular block)')") -+ elseif(mode.eq.2)then -+ write(nrite, -+ x "(/,1x,'NST mode 2 X=Y<>Z (liquid surface)')") -+ elseif(mode.eq.3)then -+ write(nrite, -+ x "(/,1x,'NST mode 3 X<>Y<>Z (solid slab)')") -+ endif -+ -+ endif -+ -+ elseif(findstring('pmf',directive,idum))then -+ -+ keyens=8 -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'potential of mean force calculation (NVE)')") -+ if(lens)then -+ call error(idnode,-414) -+ kill=.true. -+ endif -+ lens=.true. -+ -+ else -+ -+ call error(idnode,-436) -+ kill=.true. -+ -+ endif -+ -+ return -+ end subroutine ensemble_selection -+ -+ subroutine neb_option -+ x (directive,lneb,lminopt,idnode,numneb,keytol,sprneb, -+ x opttol,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for NEB option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical lneb,lminopt,endneb,safe -+ integer numneb,idnode,keytol,i,idum -+ real(8) sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ lminopt=.true. -+ lneb=.true. -+ endneb=.false. -+ numneb=intstr(directive,lenrec,idum) -+ if(numneb.eq.0)numneb=1 -+ numneb=min(maxneb,numneb) -+ -+ hyp_units=1.d0 -+ do while(.not.endneb) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endneb',directive,idum))then -+ endneb=.true. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('basin_1',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_1(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('basin_2',directive,idum))then -+ call striptext(directive,lenrec,1) -+ do i=1,numneb -+ bsn_2(i)=intstr(directive,lenrec,idum) -+ enddo -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,1x,'NEB calculation controls')") -+ write(nrite,"(/,1x,'identity of basin 1 ', -+ x 10i10)")(bsn_1(i),i=1,numneb) -+ write(nrite,"(1x,'identity of basin 2 ', -+ x 10i10)")(bsn_2(i),i=1,numneb) -+ write(nrite, -+ x "(1x,'NEB spring constant ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x sprneb,opttol,cunit -+ -+ call print_optim(keytol) -+ -+ endif -+ -+c units conversion -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine neb_option -+ -+ subroutine bpd_option -+ x (directive,seek,lbpd,ltad,lminopt,prechk,nebgo,keybpd,idnode, -+ x nblock,ntrack,keytol,ebias,vmin,catchrad,sprneb,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for bias potential -+c dynamics option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit,seek -+ character*1 directive(lenrec) -+ logical lbpd,ltad,lminopt,prechk,endbpd,safe,nebgo -+ integer keybpd,idnode,nblock,ntrack,keytol,idum -+ real(8) ebias,vmin,catchrad,sprneb,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(ltad)call error(idnode,2355) -+ lminopt=.true. -+ lbpd=.true. -+ endbpd=.false. -+ cunit=" dl_poly" -+ if(idnode.eq.0) -+ x write(nrite,"(/,1x,'bias potential dynamics controls')") -+ -+ if(findstring('dyn',directive,idum))then -+ -+ keybpd=1 -+ hyp_units=energy_unit() -+ ebias=dblstr(directive,lenrec,idum) -+ vmin=dblstr(directive,lenrec,idum) -+ call getword(cunit,directive,8,lenrec) -+ if(idnode.eq.0)write(nrite,"( -+ x 1x,'dynamics option selected ', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4 -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,cunit -+ -+ elseif(findstring('path',directive,idum))then -+ -+ keybpd=2 -+ nebgo=.true. -+ hyp_units=1.d0 -+ do while(.not.endbpd) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endbpd',directive,idum))then -+ endbpd=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('noneb',directive,idum))then -+ nebgo=.false. -+ elseif(findstring('target',directive,idum))then -+ call getword(seek,directive,8,lenrec) -+ call getword(seek,directive,8,lenrec) -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('ebias',directive,idum))then -+ ebias=dblstr(directive,lenrec,idum) -+ elseif(findstring('vmin',directive,idum))then -+ vmin=dblstr(directive,lenrec,idum) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"( -+ x 1x,'dynamics with path analysis selected', -+ x /,1x,'bias potential E_bias (kelvin)',f10.4, -+ x /,1x,'bias potential V_min (kelvin)',f10.4, -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'configuration catch radius (A)',f10.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'atom type to be tracked ',2x,a8, -+ x /,1x,'energy units ',2x,a8)") -+ x ebias,vmin,nblock,ntrack,catchrad,opttol,seek,cunit -+ if(nebgo)write(nrite, -+ x "(1x,'NEB spring constant ',e12.4)")sprneb -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ endif -+ -+ return -+ end subroutine bpd_option -+ -+ subroutine tad_option -+ x (directive,ltad,lbpd,lminopt,prechk,tadall,idnode,nblock, -+ x ntrack,blkout,keytol,catchrad,sprneb,tlow,deltad,opttol, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for TAD option -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 cunit -+ character*1 directive(lenrec) -+ logical ltad,lbpd,lminopt,prechk,tadall,endtad,safe -+ integer idnode,nblock,ntrack,blkout,keytol,idum -+ real(8) catchrad,sprneb,deltad,tlow,opttol,hyp_units -+ -+ if(lminopt)call error(idnode,225) -+ if(lbpd)call error(idnode,2355) -+ lminopt=.true. -+ ltad=.true. -+ endtad=.false. -+ hyp_units=1.d0 -+ -+ do while(.not.endtad) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endtad',directive,idum))then -+ endtad=.true. -+ elseif(findstring('pre',directive,idum))then -+ prechk=.true. -+ if(findstring('false',directive,idum))prechk=.false. -+ elseif(findstring('all',directive,idum))then -+ tadall=.true. -+ if(findstring('false',directive,idum))tadall=.false. -+ elseif(findstring('units',directive,idum))then -+ hyp_units=energy_unit() -+ call getword(cunit,directive,8,lenrec) -+ call getword(cunit,directive,8,lenrec) -+ elseif(findstring('num_block',directive,idum))then -+ nblock=intstr(directive,lenrec,idum) -+ elseif(findstring('num_track',directive,idum))then -+ ntrack=intstr(directive,lenrec,idum) -+ elseif(findstring('blackout',directive,idum))then -+ blkout=intstr(directive,lenrec,idum) -+ elseif(findstring('catch_radius',directive,idum))then -+ catchrad=dblstr(directive,lenrec,idum) -+ elseif(findstring('neb_spring',directive,idum))then -+ sprneb=dblstr(directive,lenrec,idum) -+ elseif(findstring('deltad',directive,idum))then -+ deltad=dblstr(directive,lenrec,idum) -+ elseif(findstring('low_temp',directive,idum))then -+ tlow=dblstr(directive,lenrec,idum) -+ elseif(findstring('forc',directive,idum))then -+ keytol=0 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('ener',directive,idum))then -+ keytol=1 -+ opttol=dblstr(directive,lenrec,idum) -+ elseif(findstring('posi',directive,idum))then -+ keytol=2 -+ opttol=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'TAD dynamics controls' -+ x /,1x,'steps per time block ',i10, -+ x /,1x,'steps per tracking block ',i10, -+ x /,1x,'steps in blackout periods ',i10, -+ x /,1x,'configuration catch radius ',1p,e12.4, -+ x /,1x,'NEB spring constant ',e12.4, -+ x /,1x,'stopping parameter ',e12.4, -+ x /,1x,'target low temperature ',e12.4, -+ x /,1x,'minimisation tolerance ',e12.4, -+ x /,1x,'energy units ',2x,a8)") -+ x nblock,ntrack,blkout,catchrad,sprneb,deltad, -+ x tlow,opttol,cunit -+ if(prechk)write(nrite, -+ x "(1x,'transition prechecking option selected')") -+ if(tadall)write(nrite, -+ x "(1x,'option for all basins analysis selected')") -+ call print_optim(keytol) -+ -+ endif -+ -+c energy unit conversions -+ -+ sprneb=sprneb*hyp_units -+ if(keytol.lt.2)opttol=opttol*hyp_units -+ -+ return -+ end subroutine tad_option -+ -+ subroutine metadyn_option -+ x (directive,lmetadyn,lstein,ltet,lglobpe,llocpe,idnode, -+ x ncolvar,nq4,nq6,ntet,hkey,meta_step_int,globpe_scale, -+ x locpe_scale,ref_W_aug,h_aug,wt_Dt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for metadynamics option -+c copyright - daresbury laboratory -+c author - w. smith jan 2011 -+c -+c note: default values are set in metafreeze_module -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lmetadyn,endmet,lstein,ltet,lglobpe,llocpe,safe -+ integer idnode,idum,ncolvar,nq4,nq6,ntet,hkey,meta_step_int -+ real(8) globpe_scale,locpe_scale,ref_W_aug,h_aug,wt_Dt -+ -+ lmetadyn=.true. -+ endmet=.false. -+ -+ do while(.not.endmet) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(record(1).eq.'#'.or.record(1).eq.'&')then -+c information only - skip record -+ cycle -+ elseif(findstring('endmet',directive,idum))then -+ endmet=.true. -+ elseif(findstring('ncolvar',directive,idum))then -+ ncolvar=intstr(directive,lenrec,idum) -+ elseif(findstring('lstein',directive,idum))then -+ lstein=.true. -+ if(findstring('false',directive,idum))lstein=.false. -+ elseif(findstring('ltet',directive,idum))then -+ ltet=.true. -+ if(findstring('false',directive,idum))ltet=.false. -+ elseif(findstring('lglobpe',directive,idum))then -+ lglobpe=.true. -+ if(findstring('false',directive,idum))lglobpe=.false. -+ elseif(findstring('llocpe',directive,idum))then -+ llocpe=.true. -+ if(findstring('false',directive,idum))llocpe=.false. -+ elseif(findstring('globpe_scale',directive,idum))then -+ globpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('locpe_scale',directive,idum))then -+ locpe_scale=dblstr(directive,lenrec,idum) -+ elseif(findstring('nq4',directive,idum))then -+ nq4=intstr(directive,lenrec,idum) -+ nq4=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('nq6',directive,idum))then -+ nq6=intstr(directive,lenrec,idum) -+ nq6=intstr(directive,lenrec,idum) ! do twice - number in name! -+ elseif(findstring('ntet',directive,idum))then -+ ntet=intstr(directive,lenrec,idum) -+ elseif(findstring('meta_step_int',directive,idum))then -+ meta_step_int=intstr(directive,lenrec,idum) -+ elseif(findstring('ref_w_aug',directive,idum))then -+ ref_W_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('h_aug',directive,idum))then -+ h_aug=dblstr(directive,lenrec,idum) -+ elseif(findstring('hkey',directive,idum))then -+ hkey=intstr(directive,lenrec,idum) -+ elseif(findstring('wt_dt',directive,idum))then -+ wt_dt=dblstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'metadynamics controls' -+ x /,1x,'total number of collective variables',i10, -+ x /,1x,'steinhardt parameters option (Q4/Q6)',l10, -+ x /,1x,'tetrahedral parameters option (zeta)',l10, -+ x /,1x,'global potential parameter option ',l10, -+ x /,1x,'local potential parameter option ',l10, -+ x /,1x,'global potential param. scale factor',e12.4, -+ x /,1x,'local potential param. scale factor ',e12.4)") -+ x ncolvar,lstein,ltet,lglobpe,llocpe,globpe_scale,locpe_scale -+ -+ write(nrite, -+ x "( 1x,'number of Q4 atom pair types ',i10, -+ x /,1x,'number of Q6 atom pair types ',i10, -+ x /,1x,'number of zeta atom triplet types ',i10)") -+ x nq4,nq6,ntet -+ -+ write(nrite, -+ x "( 1x,'gaussian deposition interval ',i10, -+ x /,1x,'reference gaussian height ',e12.4, -+ x /,1x,'gaussian width parameter ',e12.4, -+ x /,1x,'height control key ',i10, -+ x /,1x,'well-tempered control parameter ',e12.4)") -+ x meta_step_int,ref_W_aug,h_aug,hkey,wt_Dt -+ -+ endif -+ -+ return -+ end subroutine metadyn_option -+ -+ subroutine ewald_selection -+ x (directive,lhke,lspme,lewald,lcut,lforc,kill,idnode,keyfce, -+ x imcon,nhko,nlatt,kmax1,kmax2,kmax3,alpha,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the ewald method and reading -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lhke,lspme,lewald,lcut,lforc,kill,safe -+ integer idnode,keyfce,imcon,nhko,nlatt,kmax1,kmax2,kmax3,idum -+ integer kmaxpow2 -+ real(8) alpha,rcut,eps,tol,fac,tol1 -+ -+ lhke=findstring('hke',directive,idum) -+ lspme=findstring('spme',directive,idum) -+ lewald=findstring('ewald',directive,idum) -+ if(lewald)keyfce=2 -+ if(lspme)keyfce=12 -+ if(lhke)keyfce=14 -+ if(idnode.eq.0)open(nconf,file='CONFIG') -+ call getrec(safe,idnode,nconf) -+ call getrec(safe,idnode,nconf) -+ imcon=intstr(record,lenrec,idum) -+ imcon=intstr(record,lenrec,idum) -+ if(.not.lhke.and.(imcon.eq.0.or.imcon.eq.6))then -+ -+ call error(idnode,-180) -+ kill=.true. -+ -+ endif -+ -+ if(findstring('precision',directive,idum))then -+ -+ eps=dblstr(directive,lenrec,idum) -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'Ewald sum precision ',7x,1p,e12.4)")eps -+ -+ if(lhke)then -+ -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ if(nlatt.eq.0)nlatt=1 -+ if(nhko.eq.0)nhko=1 -+ -+ endif -+ -+ if(.not.lcut)then -+ call error(idnode,-433) -+ kill=.true. -+ else -+ -+c retreive cell vectors -+ -+ call getrec(safe,idnode,nconf) -+ cell(1)=dblstr(record,lenrec,idum) -+ cell(2)=dblstr(record,lenrec,idum) -+ cell(3)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(4)=dblstr(record,lenrec,idum) -+ cell(5)=dblstr(record,lenrec,idum) -+ cell(6)=dblstr(record,lenrec,idum) -+ call getrec(safe,idnode,nconf) -+ cell(7)=dblstr(record,lenrec,idum) -+ cell(8)=dblstr(record,lenrec,idum) -+ cell(9)=dblstr(record,lenrec,idum) -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(directive,lenrec,idum) -+ kmax1=intstr(directive,lenrec,idum) -+ kmax2=intstr(directive,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=min(intstr(directive,lenrec,idum),3) -+ nlatt=min(intstr(directive,lenrec,idum),2) -+ -+ else -+ -+ kmax3=intstr(directive,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c if spme double kmax and set to next power of 2, with current upper -+c limit of 512. -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax1=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax2=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ enddo -+ kmax3=2 * kmaxpow2 -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ close(nconf) -+ -+ if(lspme)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : SPME ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1/2,kmax2/2,kmax3/2 -+ -+ elseif(lhke)then -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Hautman-Klein-Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 ',2i5)") -+ x alpha,kmax1,kmax2 -+ -+ write(nrite, -+ x "(1x,'HKE expansion order ',7x,i10, -+ x /,1x,'HKE lattice control ',7x,i10)")nhko,nlatt -+ -+ else -+ -+ write(nrite, -+ x "(/,1x,'Electrostatics : Ewald sum ')") -+ -+ write(nrite, -+ x "(/,1x,'Ewald convergence parameter ',1p,e12.4, -+ x /,1x,'Ewald kmax1 kmax2 kmax3 ',3i5)") -+ x alpha,kmax1,kmax2,kmax3 -+ -+ endif -+ -+ endif -+ -+ if(lspme)then -+ -+c Initialize fft tables -+ -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (fplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_FORWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+CFFTW -+CFFTW call fftw3d_f77_create_plan -+CFFTW x (bplan,kmaxd,kmaxe,kmaxf, -+CFFTW x FFTW_BACKWARD,FFTW_ESTIMATE+FFTW_IN_PLACE) -+ -+CSGIC call zzfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CSGIC x dummy,1,1,ffttable,dummy,dummy ) -+ -+CCRAY call ccfft3d( 0,kmaxd,kmaxe,kmaxf,1.d0,dummy,1,1, -+CCRAY x dummy,1,1,ffttable,dummy,dummy ) -+ -+ endif -+ -+ if(lspme)then -+ -+ if(kmax1.gt.kmaxd.or.kmax2.gt.kmaxe.or.kmax3.gt.kmaxf)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ elseif(lhke)then -+ -+ if(kmax2.gt.kmaxb)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ else -+ -+ if(kmax2.gt.kmaxb.or.kmax3.gt.kmaxc)then -+ -+ kill=.true. -+ call error(idnode,-185) -+ -+ endif -+ -+ endif -+ -+ if(lforc)then -+ call error(idnode,-416) -+ kill=.true. -+ endif -+ lforc=.true. -+ -+ return -+ end subroutine ewald_selection -+ -+ subroutine print_optim(keytol) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing the optimisation option -+c the required parameters -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer keytol -+ -+ if(keytol.eq.0)then -+ write(nrite, -+ x "(1x,'convergence to minimum force selected')") -+ elseif(keytol.eq.1)then -+ write(nrite, -+ x "(1x,'convergence to minimum energy selected')") -+ else -+ write(nrite, -+ x "(1x,'convergence to minimum position selected')") -+ endif -+ -+ return -+ end subroutine print_optim -+ -+ function energy_unit() -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for assigning energy conversion factors -+c copyright - daresbury laboratory -+c author - w. smith feb 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idum -+ real(8) energy_unit -+ -+ energy_unit=1.d0 -+ if(findstring('ev',record,idum))then -+ energy_unit=9648.530821d0 -+ elseif(findstring('kev',record,idum))then -+ energy_unit=9648530.821d0 -+ elseif(findstring('kcal',record,idum))then -+ energy_unit=418.4d0 -+ elseif(findstring('kj',record,idum))then -+ energy_unit=1.d2 -+ elseif(findstring('k',record,idum))then -+ energy_unit=boltz -+ endif -+ -+ return -+ end function energy_unit -+ -+ subroutine solvation_option -+ x (directive,lsolva,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for solvation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,endsol,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ endsol=.false. -+ -+ nsolva=intstr(directive,lenrec,idum) -+ isolva=intstr(directive,lenrec,idum) -+ -+ if(nsolva.eq.0.and.isolva.eq.0)then -+ -+ do while(.not.endsol) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endsol',directive,idum))then -+ endsol=.true. -+ elseif(findstring('enddec',directive,idum))then -+ endsol=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=max(intstr(directive,lenrec,idum),1) -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'solvation calculation selected', -+ x /,1x,'start of solvation calculation ',i10, -+ x /,1x,'solvation calculation interval ',i10)") -+ x nsolva,isolva -+ -+ endif -+ -+ return -+ end subroutine solvation_option -+ -+ subroutine free_energy_option(directive,lfree,lfrmas,idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for free energy option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lfree,lfrmas,endfre,safe -+ integer idnode,idum -+ -+ mfree=1 -+ kfree=1 -+ lfree=.true. -+ lfrmas=.false. -+ endfre=.false. -+ -+ do while(.not.endfre) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endfre',directive,idum))then -+ endfre=.true. -+ elseif(findstring('start',directive,idum))then -+ nfrn=intstr(directive,lenrec,idum) -+ elseif(findstring('interval',directive,idum))then -+ ifrn=intstr(directive,lenrec,idum) -+ elseif(findstring('lambda',directive,idum))then -+ pfree=dblstr(directive,lenrec,idum) -+ elseif(findstring('mix',directive,idum))then -+ mfree=intstr(directive,lenrec,idum) -+ elseif(findstring('expo',directive,idum))then -+ kfree=intstr(directive,lenrec,idum) -+ elseif(findstring('reset_mass',directive,idum))then -+ lfrmas=.true. -+ if(findstring('false',directive,idum))lfrmas=.false. -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(mfree.eq.1)kfree=1 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'free energy option selected', -+ x /,1x,'start of free energy calculation ',i10, -+ x /,1x,'sampling interval ',i10, -+ x /,1x,'free energy parameter (lambda) ',f10.3, -+ x /,1x,'mixing rule selected ',i10, -+ x /,1x,'mixing rule exponent ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10, -+ x /,1x,'mass scaling option ',l10)") -+ x nfrn,ifrn,pfree,mfree,kfree,ind_fre,lfrmas -+ -+ endif -+ -+c define free energy scaling parameters -+ -+ call freegen() -+ -+ return -+ end subroutine free_energy_option -+ -+ subroutine excitation_option -+ x (directive,lsolva,lexcite,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for excitation option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lexcite,lghost,endexc,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lexcite=.true. -+ endexc=.false. -+ -+ do while(.not.endexc) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endexc',directive,idum))then -+ endexc=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'excitation option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,ind_fre -+ -+ endif -+ -+ return -+ end subroutine excitation_option -+ -+ subroutine switching_option -+ x (directive,lsolva,lswitch,lghost,idnode,nsolva,isolva) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading parameters for switching option -+c copyright - daresbury laboratory -+c authors - w. smith and p.-a. cazade jul 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 directive(lenrec) -+ logical lsolva,lswitch,lghost,endswi,safe -+ integer idnode,nsolva,isolva,idum -+ -+ lsolva=.true. -+ lghost=.true. -+ lswitch=.true. -+ endswi=.false. -+ niswitch=0 -+ -+ do while(.not.endswi) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abort_control_read(1,idnode,nread) -+ call lowcase(record,lenrec) -+ call strip(record,lenrec) -+ call copystring(record,directive,lenrec) -+ -+ if(findstring('endswi',directive,idum))then -+ endswi=.true. -+ elseif(findstring('start',directive,idum))then -+ nsolva=intstr(directive,lenrec,idum) -+ elseif(findstring('inter',directive,idum))then -+ isolva=intstr(directive,lenrec,idum) -+ elseif(findstring('period',directive,idum))then -+ niswitch=max(intstr(directive,lenrec,idum),2) -+ elseif(findstring('system_a',directive,idum))then -+ ind_fre(1)=intstr(directive,lenrec,idum) -+ ind_fre(2)=intstr(directive,lenrec,idum) -+ elseif(findstring('system_b',directive,idum))then -+ ind_fre(3)=intstr(directive,lenrec,idum) -+ ind_fre(4)=intstr(directive,lenrec,idum) -+ endif -+ -+ enddo -+ -+ if(niswitch.eq.0)niswitch=nsolva -+ nswitch=nsolva -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,1x,'switching option selected', -+ x /,1x,'energy decomposition start ',i10, -+ x /,1x,'energy decomposition interval ',i10, -+ x /,1x,'switching period ',i10, -+ x /,1x,'system A first atom ',i10, -+ x /,1x,'system A last atom ',i10, -+ x /,1x,'system B first atom ',i10, -+ x /,1x,'system B last atom ',i10)") -+ x nsolva,isolva,niswitch,ind_fre -+ -+ endif -+ -+ return -+ end subroutine switching_option -+ -+ end module define_system_module -+ -diff -urN dl_class_1.9.orig/srcmod/dihedral_module.f dl_class_1.9/srcmod/dihedral_module.f ---- dl_class_1.9.orig/srcmod/dihedral_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dihedral_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1121 @@ -+ module dihedral_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining dihedral potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted - p.-a. cazade oct 2007 : solvation, free energy, etc. -+c adapted - w.smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmdih(:,:) -+ integer, allocatable :: listdih(:,:) -+ integer, allocatable :: numdih(:),keydih(:),lstdih(:,:) -+ -+ save prmdih,listdih,numdih,keydih,lstdih -+ -+ contains -+ -+ subroutine alloc_dih_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmdih(mxtdih,mxpdih),stat=fail(1)) -+ allocate (numdih(mxtmls),stat=fail(2)) -+ allocate (keydih(mxtdih),stat=fail(3)) -+ allocate (lstdih(mxtdih,4),stat=fail(4)) -+ allocate (listdih(mxdihd,5),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1011) -+ enddo -+ -+ do i=1,mxtmls -+ numdih(i)=0 -+ enddo -+ -+ end subroutine alloc_dih_arrays -+ -+ subroutine define_dihedrals -+ x (safe,idnode,itmols,ndihed,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining dihedral angles -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,ndihed,nsite,ntmp,idih,idih1,i -+ integer iatm1,iatm2,iatm3,iatm4,idum,isite1,isite2,isite3 -+ integer isite4,ia,ja -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numdih(itmols)=numdih(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of dihedral angles', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,/,1x,'dihedral angle details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'index',5x,'f-const',7x,'angle', -+ x 8x,'trig',4x,'1-4 elec',5x,'1-4 vdw',/)") -+ endif -+ -+ idih1=numdih(itmols) -+ do idih=1,idih1 -+ -+c read dihedral bond angle potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ iatm4=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ isite4=nsite-numsit(itmols)+iatm4 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3)*lfzsit(isite4).ne.0)then -+ -+ numdih(itmols)=numdih(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ ndihed=ndihed+1 -+ -+ if(ndihed.gt.mxtdih)call error(idnode,60) -+ -+ if(keyword(1:4).eq.'cos ')then -+ keydih(ndihed)=1 -+ elseif(keyword(1:4).eq.'harm')then -+ keydih(ndihed)=2 -+ elseif(keyword(1:4).eq.'hcos')then -+ keydih(ndihed)=3 -+ elseif(keyword(1:4).eq.'cos3')then -+ keydih(ndihed)=4 -+ elseif(keyword(1:4).eq.'ryck')then -+ keydih(ndihed)=5 -+ elseif(keyword(1:4).eq.'rbf')then -+ keydih(ndihed)=6 -+ elseif(keyword(1:4).eq.'opls')then -+ keydih(ndihed)=7 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,448) -+ endif -+ -+ lstdih(ndihed,1)=iatm1 -+ lstdih(ndihed,2)=iatm2 -+ lstdih(ndihed,3)=iatm3 -+ lstdih(ndihed,4)=iatm4 -+ prmdih(ndihed,1)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,2)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,3)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,4)=dblstr(record,lenrec,idum) -+ prmdih(ndihed,5)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstdih(ndihed,ia),ia=1,4), -+ x (prmdih(ndihed,ja),ja=1,mxpdih) -+ -+c convert energies to internal units and angles to radians -+ -+ prmdih(ndihed,1)=prmdih(ndihed,1)*engunit -+ -+ if(keydih(ndihed).eq.4)then -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit -+ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit -+ -+ elseif(keydih(ndihed).eq.7)then -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*engunit -+ prmdih(ndihed,3)=prmdih(ndihed,3)*engunit -+ prmdih(ndihed,4)=prmdih(ndihed,4)*engunit -+ prmdih(ndihed,5)=prmdih(ndihed,5)*(pi/180.d0) -+ -+ else -+ -+ prmdih(ndihed,2)=prmdih(ndihed,2)*(pi/180.d0) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_dihedrals -+ -+ subroutine dihfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntdihd,keyfce, -+ x dlrpot,epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe, -+ x virdih,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating dihedral energy and force -+c terms in molecular dynamics. -+c -+c version 3: scale factors for reduces electrostatic and vdw -+c 1-4 interactions. -+c -+c NOTE: assumes 1-4 interactions are in the exclude list -+c -+c block as opposed to stride version -+c -+c copyright - daresbury laboratory -+c author - w. smith mar 1992 -+c modified - t. forester dec 1993 -+c modified - t. forester jun 1995 - stress tensor added -+c modified - a. smondyrev may 2000 - ryckaert-bellemans potentials -+c modified - p.-a. cazade oct 2007 - solvation etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect -+ logical idrive,jdrive,kdrive,ldrive -+ integer i,k,ii,kk,ntdihd,idnode,mxnode,idih1,idih2,ia,ib -+ integer ic,id,imcon,ka,kb,l,keyfce,fail1,fail2,fail3,kkk -+ real(8) phi,twopi,rtwopi,dterm,srpot -+ real(8) engdih,virdih,engc14,engs14,virs14,rrbc,xab,yab,erc,fer -+ real(8) zab,xbc,ybc,zbc,xcd,ycd,zcd,pbx,pby,pbz,pb2,rpb1,rpb2 -+ real(8) pcx,pcy,pcz,pc2,rpc1,rpc2,pbpc,cosp,sinp,rsinp,exp1 -+ real(8) gamma,fax,fay,faz,fcx,fcy,fcz,fb1x,fb1y,fb1z,fd1x,fd1y -+ real(8) fd1z,scale,xad,yad,zad,rad,chgprd,coul,fcoul,fx,fy,fz -+ real(8) ppp,dlrpot,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,epsq,engcpe -+ real(8) vircpe,rcut,rvdw,engsrp,virsrp,xac,yac,zac,vcon,fcon -+ real(8) virc14,b0,rfld0,rfld1,rfld2,alpha,a1,a2,a3,a4,a5,pp,tt -+ real(8) cou14_vir,vdw14_vir,strs(6),strs_loc(6) -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdbc(:),ydbc(:),zdbc(:) -+ real(8), allocatable :: xdcd(:),ydcd(:),zdcd(:) -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ data fail1,fail2,fail3/0,0,0/ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdbc(msbad),ydbc(msbad),zdbc(msbad),stat=fail2) -+ allocate (xdcd(msbad),ydcd(msbad),zdcd(msbad),stat=fail3) -+ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) -+ x call error(idnode,1060) -+ -+ twopi=2.d0*pi -+ rtwopi=1.d0/twopi -+ safe=.true. -+ -+c check size of work arrays -+ -+ if((ntdihd-mxnode+1)/mxnode.gt.msbad) call error(idnode,421) -+ -+c block indices -+ -+ idih1=(idnode*ntdihd)/mxnode+1 -+ idih2=((idnode+1)*ntdihd)/mxnode -+ -+c initialise accumulators -+ -+ engdih=0.d0 -+ virdih=0.d0 -+ dih_fre=0.d0 -+ dih_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(3)=.true. -+ dih_sol(:)=0.d0 -+ if(lexcite)dih_exc(:)=0.d0 -+ -+ endif -+ -+ if(keyfce/2.eq.4)then -+ -+c constant terms for shifted coulombic potential -+ -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut -+ -+ elseif(keyfce/2.eq.5)then -+ -+c constant terms for reaction field potential -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ vcon=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fcon=(vcon+2.d0*(alpha/sqrpi)*exp1)/rcut-rfld0*rcut -+ vcon=vcon+rfld2*rcut**2-rfld1 -+ -+ endif -+ -+c calculate bond vectors -+ -+ ii=0 -+ do i=idih1,idih2 -+ -+ ii=ii+1 -+ -+c indices of bonded atoms -+ -+ ia=listdih(ii,2) -+ ib=listdih(ii,3) -+ ic=listdih(ii,4) -+ id=listdih(ii,5) -+ -+c define components of bond vectors -+ -+ xdab(ii)=xxx(ia)-xxx(ib) -+ ydab(ii)=yyy(ia)-yyy(ib) -+ zdab(ii)=zzz(ia)-zzz(ib) -+ -+ xdbc(ii)=xxx(ib)-xxx(ic) -+ ydbc(ii)=yyy(ib)-yyy(ic) -+ zdbc(ii)=zzz(ib)-zzz(ic) -+ -+ xdcd(ii)=xxx(ic)-xxx(id) -+ ydcd(ii)=yyy(ic)-yyy(id) -+ zdcd(ii)=zzz(ic)-zzz(id) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdbc,ydbc,zdbc) -+ call images(imcon,0,1,ii,cell,xdcd,ydcd,zdcd) -+ -+c zero dihedral energy accumulator -+ -+ engdih=0.d0 -+ virdih=0.d0 -+ -+c zero scaled 1-4 electrostatic and short range potential accumulators -+ -+ engc14=0.d0 -+ virc14=0.d0 -+ engs14=0.d0 -+ virs14=0.d0 -+ vdw14_vir=0.d0 -+ cou14_vir=0.d0 -+ -+c loop over all specified dihedrals -+ -+ ii=0 -+ do i=idih1,idih2 -+ -+c define components of bond vectors -+ -+ ii=ii+1 -+ -+ xab=xdab(ii) -+ yab=ydab(ii) -+ zab=zdab(ii) -+ -+ xbc=xdbc(ii) -+ ybc=ydbc(ii) -+ zbc=zdbc(ii) -+ rrbc=1.d0/sqrt(xbc*xbc+ybc*ybc+zbc*zbc) -+ -+ xcd=xdcd(ii) -+ ycd=ydcd(ii) -+ zcd=zdcd(ii) -+ -+ xac=xab+xbc -+ yac=yab+ybc -+ zac=zab+zbc -+ -+c construct first dihedral vector -+ -+ pbx=yab*zbc-zab*ybc -+ pby=zab*xbc-xab*zbc -+ pbz=xab*ybc-yab*xbc -+ pb2=pbx*pbx+pby*pby+pbz*pbz -+ rpb1=1.d0/sqrt(pb2) -+ rpb2=rpb1*rpb1 -+ -+c construct second dihedral vector -+ -+ pcx=ybc*zcd-zbc*ycd -+ pcy=zbc*xcd-xbc*zcd -+ pcz=xbc*ycd-ybc*xcd -+ pc2=pcx*pcx+pcy*pcy+pcz*pcz -+ rpc1=1.d0/sqrt(pc2) -+ rpc2=rpc1*rpc1 -+ -+c determine dihedral angle -+ -+ pbpc=pbx*pcx+pby*pcy+pbz*pcz -+ cosp=pbpc*rpb1*rpc1 -+ sinp=(xbc*(pcy*pbz-pcz*pby)+ybc*(pbx*pcz-pbz*pcx)+ -+ x zbc*(pcx*pby-pcy*pbx))*(rpb1*rpc1*rrbc) -+ -+ phi=atan2(sinp,cosp) -+ -+c avoid singularity in sinp -+ -+ sinp=sign(max(1.d-8,abs(sinp)),sinp) -+ rsinp=1.d0/sinp -+ -+c selection of potential energy function type -+ -+ kk=listdih(ii,1) -+ -+c calculate potential energy and scalar force term -+ -+ if(keydih(kk).eq.1)then -+ -+c key=1 for torsion dihedral potential -+ -+ dterm=prmdih(kk,1)*(1.d0+cos(prmdih(kk,3)*phi- -+ x prmdih(kk,2))) -+ gamma=-rpb1*rpc1*rsinp*prmdih(kk,1)*prmdih(kk,3)* -+ x sin(prmdih(kk,3)*phi-prmdih(kk,2)) -+ -+ else if(keydih(kk).eq.2)then -+ -+c key=2 for harmonic improper dihedral -+ -+ phi=phi-prmdih(kk,2) -+ phi=phi-nint(phi*rtwopi)*twopi -+ dterm=0.5d0*prmdih(kk,1)*(phi*phi) -+ gamma=rpb1*rpc1*rsinp*prmdih(kk,1)*phi -+ -+ else if(keydih(kk).eq.3)then -+ -+c key=3 for harmonic cosine dihedral -+ -+ dterm=0.5d0*prmdih(kk,1)*(cos(phi)- -+ x cos(prmdih(kk,2)))**2 -+ gamma=-rpb1*rpc1*prmdih(kk,1)*(cos(phi)-cos(prmdih(kk,2))) -+ -+ else if(keydih(kk).eq.4)then -+ -+c key=4 for 3-term cosine dihedral -+ -+ dterm=0.5d0*(prmdih(kk,1)*(1.d0+cos(phi))+ -+ x prmdih(kk,2)*(1.d0-cos(2.d0*phi))+prmdih(kk,3)* -+ x (1.d0+cos(3.d0*phi))) -+ gamma=-rpb1*rpc1*rsinp*0.5d0*(prmdih(kk,1)*sin(phi)- -+ x 2.d0*prmdih(kk,2)*sin(2.d0*phi)+3.d0*prmdih(kk,3)* -+ x sin(3.d0*phi)) -+ -+ else if(keydih(kk).eq.5)then -+ -+c key=5 for ryckaert-bellemans potential -+c chem.phys.lett., vol.30, p.123, 1975. -+c ATTENTION !!! Modified to have trans configuration -+c correspond to phi=180 rather than -+c phi=0 as in original form. -+ -+ dterm=prmdih(kk,1)*(1.116d0-1.462d0*cos(phi)- -+ x 1.578d0*(cos(phi))**2+0.368d0*(cos(phi))**3+ -+ x 3.156d0*(cos(phi))**4+3.788d0*(cos(phi))**5) -+ gamma=prmdih(kk,1)*(1.462d0+3.156d0*cos(phi)- -+ x 1.104d0*(cos(phi))**2-12.624d0*(cos(phi))**3- -+ x 18.94d0*(cos(phi))**4)*rpb1*rpc1 -+ -+ else if(keydih(kk).eq.6)then -+ -+c key=6 for fluorinated ryckaert-bellemans potential -+c Rice at al., JCP 104, 2101, (1996). -+ -+ dterm=prmdih(kk,1)*(3.55d0-2.78d0*cos(phi)- -+ x 3.56d0*(cos(phi))**2-1.64d0*(cos(phi))**3+ -+ x 7.13d0*(cos(phi))**4+12.84d0*(cos(phi))**5+ -+ x 9.67d0*exp(-56.d0*(phi-pi)**2)) -+ gamma=(prmdih(kk,1)*(2.78d0+7.12d0*cos(phi)+ -+ x 4.92d0*(cos(phi))**2-28.52d0*(cos(phi))**3- -+ x 64.2d0*(cos(phi))**4)-1083.04d0*(phi-pi)* -+ x exp(-56.0*(phi-pi)**2))*rpb1*rpc1 -+ -+ else if(keydih(kk).eq.7)then -+ -+c key=7 for opls cosine dihedral -+ -+ phi=phi-prmdih(kk,5) -+ dterm=prmdih(kk,1)+0.5d0*(prmdih(kk,2)* -+ x (1.d0+cos(phi))+prmdih(kk,3)*(1.d0-cos(2.d0*phi))+ -+ x prmdih(kk,4)*(1.d0+cos(3.d0*phi))) -+ gamma=-0.5d0*(prmdih(kk,2)*sin(phi)-2.d0*prmdih(kk,3)* -+ x sin(2.d0*phi)+3.d0*prmdih(kk,4)*sin(3.d0*phi))*rpb1* -+ x rpc1*rsinp -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ dterm=0.d0 -+ gamma=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listdih(ii,2) -+ ib=listdih(ii,3) -+ ic=listdih(ii,4) -+ id=listdih(ii,5) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ ldrive=driven(ltype(id)) -+ -+ endif -+ -+c set selection control for angle potential -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)then -+ dih_exc(atmolt(ia))=dih_exc(atmolt(ia))+dterm -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ dih_fre=dih_fre-dterm -+ dterm=lambda1*dterm -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ dih_fre=dih_fre+dterm -+ dterm=lambda2*dterm -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy -+ -+ engdih=engdih+dterm -+ -+c calculate solvation energy for dihedral term -+ -+ if(lsolva)then -+ dih_sol(atmolt(ia))=dih_sol(atmolt(ia))+dterm -+ endif -+ -+c calculate atomic forces for dihedral term -+ -+ fax=gamma*((-pcy*zbc+pcz*ybc)-pbpc*rpb2*(-pby*zbc+pbz*ybc)) -+ fay=gamma*(( pcx*zbc-pcz*xbc)-pbpc*rpb2*( pbx*zbc-pbz*xbc)) -+ faz=gamma*((-pcx*ybc+pcy*xbc)-pbpc*rpb2*(-pbx*ybc+pby*xbc)) -+ -+ fcx=gamma*((-pcy*zab+pcz*yab)-pbpc*rpb2*(-pby*zab+pbz*yab)) -+ fcy=gamma*(( pcx*zab-pcz*xab)-pbpc*rpb2*( pbx*zab-pbz*xab)) -+ fcz=gamma*((-pcx*yab+pcy*xab)-pbpc*rpb2*(-pbx*yab+pby*xab)) -+ -+ fb1x=gamma*((-pby*zcd+pbz*ycd)-pbpc*rpc2*(-pcy*zcd+pcz*ycd)) -+ fb1y=gamma*(( pbx*zcd-pbz*xcd)-pbpc*rpc2*( pcx*zcd-pcz*xcd)) -+ fb1z=gamma*((-pbx*ycd+pby*xcd)-pbpc*rpc2*(-pcx*ycd+pcy*xcd)) -+ -+ fd1x=gamma*((-pby*zbc+pbz*ybc)-pbpc*rpc2*(-pcy*zbc+pcz*ybc)) -+ fd1y=gamma*(( pbx*zbc-pbz*xbc)-pbpc*rpc2*( pcx*zbc-pcz*xbc)) -+ fd1z=gamma*((-pbx*ybc+pby*xbc)-pbpc*rpc2*(-pcx*ybc+pcy*xbc)) -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)-fax-fcx+fb1x -+ fyy(ib)=fyy(ib)-fay-fcy+fb1y -+ fzz(ib)=fzz(ib)-faz-fcz+fb1z -+ -+ fxx(ic)=fxx(ic)+fcx-fb1x-fd1x -+ fyy(ic)=fyy(ic)+fcy-fb1y-fd1y -+ fzz(ic)=fzz(ic)+fcz-fb1z-fd1z -+ -+ fxx(id)=fxx(id)+fd1x -+ fyy(id)=fyy(id)+fd1y -+ fzz(id)=fzz(id)+fd1z -+ -+c stress tensor for dihedral term -+ -+ strs(1)=strs(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x -+ strs(2)=strs(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x -+ strs(3)=strs(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x -+ strs(4)=strs(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y -+ strs(5)=strs(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z -+ strs(6)=strs(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy (no virial) -+ -+ eng_loc=eng_loc+dterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)-fax-fcx+fb1x -+ fyy_loc(ib)=fyy_loc(ib)-fay-fcy+fb1y -+ fzz_loc(ib)=fzz_loc(ib)-faz-fcz+fb1z -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx-fb1x-fd1x -+ fyy_loc(ic)=fyy_loc(ic)+fcy-fb1y-fd1y -+ fzz_loc(ic)=fzz_loc(ic)+fcz-fb1z-fd1z -+ -+ fxx_loc(id)=fxx_loc(id)+fd1x -+ fyy_loc(id)=fyy_loc(id)+fd1y -+ fzz_loc(id)=fzz_loc(id)+fd1z -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fax+xbc*(fb1x-fcx)-xcd*fd1x -+ strs_loc(2)=strs_loc(2)+yab*fax+ybc*(fb1x-fcx)-ycd*fd1x -+ strs_loc(3)=strs_loc(3)+zab*fax+zbc*(fb1x-fcx)-zcd*fd1x -+ strs_loc(4)=strs_loc(4)+yab*fay+ybc*(fb1y-fcy)-ycd*fd1y -+ strs_loc(5)=strs_loc(5)+yab*faz+ybc*(fb1z-fcz)-ycd*fd1z -+ strs_loc(6)=strs_loc(6)+zab*faz+zbc*(fb1z-fcz)-zcd*fd1z -+ -+ endif -+ -+c calculate 1-4 dihedral interactions (coulombic and short ranged) -+c assumes 1-4 interactions are in the exclude list -+ -+ kk=listdih(ii,1) -+ -+c bypass OPLS 1-4 terms (not present) -+ -+ if(keydih(kk).ne.7)then -+ -+c 1-4 electrostatics : adjust by weighting factor -+ -+ scale=prmdih(kk,4) -+ -+ xad=xac+xcd -+ yad=yac+ycd -+ zad=zac+zcd -+ -+ rad=sqrt(xad**2+yad**2+zad**2) -+ -+c scaled charge product*dielectric -+ -+ chgprd=scale*chge(ia)*chge(id)*r4pie0 -+ coul=0.d0 -+ fcoul=0.d0 -+ -+c truncation of potential for all schemes except ewald sum -+ -+ if(abs(chgprd).gt.1.d-10.and.keyfce.gt.0)then -+ -+c electrostatics by ewald sum -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6.or.keyfce/2.eq.7)then -+ -+ coul=chgprd/(epsq*rad) -+ fcoul=coul/(rad**2) -+ -+c distance dependent dielectric -+ -+ elseif(rcut.gt.rad)then -+ -+ if(keyfce/2.eq.2)then -+ -+ coul=chgprd/(epsq*rad**2) -+ fcoul=2.0d0*coul/(rad**2) -+ -+c unmodified coulombic -+ -+ else if(keyfce/2.eq.3)then -+ -+ coul=chgprd/(epsq*rad) -+ fcoul=coul/(rad**2) -+ -+c truncated and shifted coulombic -+ -+ else if(keyfce/2.eq.4)then -+ -+ tt=1.d0/(1.d0+pp*alpha*rad) -+ exp1=exp(-(alpha*rad)**2) -+ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad -+ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 -+ -+c calculate potential energy and forces -+ -+ coul=chgprd*(erc-vcon+fcon*(rad-rcut))/epsq -+ fcoul=chgprd*(fer-fcon/rad)/epsq -+ -+c reaction field -+ -+ else if(keyfce/2.eq.5)then -+ -+ tt=1.d0/(1.d0+pp*alpha*rad) -+ exp1=exp(-(alpha*rad)**2) -+ erc=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rad -+ fer=(erc+2.d0*(alpha/sqrpi)*exp1)/rad**2 -+ coul=chgprd*(erc-vcon+fcon*(rad-rcut)+ -+ x rfld2*rad*rad-rfld1) -+ fcoul=chgprd*(fer-fcon/rad-rfld0) -+ -+ elseif(keyfce/2.eq.0)then -+ -+ coul=0.d0 -+ fcoul=0.d0 -+ -+ else -+ -+ call error(idnode,446) -+ -+ endif -+ -+ endif -+ -+c set selection control for coulombic 1-4 terms -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then -+ -+c set selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(id).eq.0) -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou14_vir=cou14_vir+fcoul*rad**2 -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou14_vir=cou14_vir-fcoul*rad**2 -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c electrostatic energy and virial for 1-4 term -+ -+ engc14=engc14+coul -+ virc14=virc14-fcoul*rad**2 -+ -+c solvation energy for coulombic 1-4 term -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c coulombic force for 1-4 term -+ -+ fx=fcoul*xad -+ fy=fcoul*yad -+ fz=fcoul*zad -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(id)=fxx(id)-fx -+ fyy(id)=fyy(id)-fy -+ fzz(id)=fzz(id)-fz -+ -+c stress tensor for coulombic 1-4 term -+ -+ strs(1)=strs(1)+xad*fx -+ strs(2)=strs(2)+xad*fy -+ strs(3)=strs(3)+xad*fz -+ strs(4)=strs(4)+yad*fy -+ strs(5)=strs(5)+yad*fz -+ strs(6)=strs(6)+zad*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rad**2 -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(id)=fxx_loc(id)-fx -+ fyy_loc(id)=fyy_loc(id)-fy -+ fzz_loc(id)=fzz_loc(id)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xad*fx -+ strs_loc(2)=strs_loc(2)+xad*fy -+ strs_loc(3)=strs_loc(3)+xad*fz -+ strs_loc(4)=strs_loc(4)+yad*fy -+ strs_loc(5)=strs_loc(5)+yad*fz -+ strs_loc(6)=strs_loc(6)+zad*fz -+ -+ endif -+ -+ endif -+ -+c 1-4 short ranged : adjust by weighting factor -+ -+ scale=prmdih(kk,5) -+ gamma=0.d0 -+ -+ if(mod(keyfce,2).eq.1)then -+ -+c atomic and potential function indices -+ -+ ka=max(ltype(ia),ltype(id)) -+ kb=min(ltype(ia),ltype(id)) -+ k=lstvdw((ka*(ka-1))/2+kb) -+ -+ if(abs(scale*vvv(1,k)).gt.1.d-10)then -+ -+c apply truncation of potential -+ -+ if(rvdw.gt.rad)then -+ -+c determine interpolation panel for force arrays -+ -+ l=int(rad/dlrpot) -+ ppp=rad/dlrpot-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ -+ srpot=scale*(t1+(t2-t1)*ppp*0.5d0) -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ -+ gamma=scale*(t1+(t2-t1)*ppp*0.5d0)/(rad**2) -+ -+c set selection control for short ranged 1-4 terms -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(ia),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(id).ne.1))then -+ -+c set selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(id).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+srpot -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre-srpot -+ vdw14_vir=vdw14_vir+gamma*rad**2 -+ srpot=lambda1*srpot -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre+srpot -+ vdw14_vir=vdw14_vir-gamma*rad**2 -+ srpot=lambda2*srpot -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c short ranged energy and virial for 1-4 term -+ -+ engs14=engs14+srpot -+ virs14=virs14-gamma*rad**2 -+ -+c solvation energy for short ranged 1-4 term -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+srpot -+ -+c short ranged forces for 1-4 term -+ -+ fx=gamma*xad -+ fy=gamma*yad -+ fz=gamma*zad -+ -+ fxx(ia)=fxx(ia)+fx -+ fyy(ia)=fyy(ia)+fy -+ fzz(ia)=fzz(ia)+fz -+ -+ fxx(id)=fxx(id)-fx -+ fyy(id)=fyy(id)-fy -+ fzz(id)=fzz(id)-fz -+ -+c stress tensor for short ranged 1-4 term -+ -+ strs(1)=strs(1)+xad*fx -+ strs(2)=strs(2)+xad*fy -+ strs(3)=strs(3)+xad*fz -+ strs(4)=strs(4)+yad*fy -+ strs(5)=strs(5)+yad*fz -+ strs(6)=strs(6)+zad*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+srpot -+ vir_loc=vir_loc-gamma*rad**2 -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fx -+ fyy_loc(ia)=fyy_loc(ia)+fy -+ fzz_loc(ia)=fzz_loc(ia)+fz -+ -+ fxx_loc(id)=fxx_loc(id)-fx -+ fyy_loc(id)=fyy_loc(id)-fy -+ fzz_loc(id)=fzz_loc(id)-fz -+ -+c stress tensor for short ranged 1-4 term -+ -+ strs_loc(1)=strs_loc(1)+xad*fx -+ strs_loc(2)=strs_loc(2)+xad*fy -+ strs_loc(3)=strs_loc(3)+xad*fz -+ strs_loc(4)=strs_loc(4)+yad*fy -+ strs_loc(5)=strs_loc(5)+yad*fz -+ strs_loc(6)=strs_loc(6)+zad*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c sum contributions to potentials -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engdih -+ buffer(2)=engc14 -+ buffer(3)=virc14 -+ buffer(4)=engs14 -+ buffer(5)=virs14 -+ buffer(6)=dih_fre -+ buffer(7)=dih_vir -+ buffer(8)=vdw14_vir -+ buffer(9)=cou14_vir -+ call gdsum(buffer(1),9,buffer(10)) -+ engdih=buffer(1) -+ engc14=buffer(2) -+ virc14=buffer(3) -+ engs14=buffer(4) -+ virs14=buffer(5) -+ dih_fre=buffer(6) -+ dih_vir=buffer(7) -+ vdw14_vir=buffer(8) -+ cou14_vir=buffer(9) -+ -+ if(lsolva)then -+ -+ call gdsum(dih_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(dih_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ engcpe=engcpe+engc14 -+ vircpe=vircpe+virc14 -+ engsrp=engsrp+engs14 -+ virsrp=virsrp+virs14 -+ vdw_vir=vdw_vir+vdw14_vir -+ cou_vir=cou_vir+cou14_vir -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,448) -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdbc,ydbc,zdbc,stat=fail2) -+ deallocate (xdcd,ydcd,zdcd,stat=fail3) -+ -+ return -+ end subroutine dihfrc -+ -+ end module dihedral_module -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f dl_class_1.9/srcmod/dlpoly.f ---- dl_class_1.9.orig/srcmod/dlpoly.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f 2015-11-09 15:05:00.200575192 +0100 -@@ -0,0 +1,975 @@ -+ program dlpoly_classic -+ -+c*********************************************************************** -+c -+c dl_poly classic is an stfc/ccp5 program package for the -+c dynamical simulation of molecular systems. -+c -+c dl_poly is the copyright of the stfc daresbury laboratory, -+c daresbury, warrington wa4 4ad. -+c -+c neither the stfc, daresbury laboratory, ccp5 nor the authors -+c of this package claim that it is free from errors and do not -+c accept liability for any loss or damage that may arise from -+c its use. it is the users responsibility to verify that the -+c package dl_poly is fit for the purpose the user intends for -+c it. -+c -+c users of this package are recommended to consult the dl_poly -+c user manual for the full description of its use and purpose. -+c -+c authors: w.smith and t.r.forester 1995 -+c copyright daresbury laboratory 1995 -+c -+c DL_POLY CLASSIC VERSION 1.9 -+c -+c*********************************************************************** -+ -+c declare required modules -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use define_system_module -+ use dihedral_module -+ use driver_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use forces_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use integrator_module -+ use inversion_module -+ use metal_module -+ use metafreeze_module -+ use nlist_builders_module -+ use pair_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ character*1 hms,dec -+ character*8 seek -+ -+ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle -+ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb -+ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd -+ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch -+ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect -+ -+ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn -+ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt -+ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj -+ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw -+ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp -+ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k -+ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit -+ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode -+ integer natms2,ntghost,nsolva,isolva,nofic -+ -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd -+ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint -+ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter -+ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom -+ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf -+ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl -+ real(8) engord,virord -+c PLUMED modifications -+ real(8) energyUnits,lengthUnits,timeUnits -+ integer(8) get_comms -+c PLUMED modifications -+ -+ real(8), allocatable :: tbuffer(:) -+ integer :: plumedavaiable -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -+ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ -+ -+c set up the communications -+ -+ call initcomms() -+ call gsync() -+ -+c determine processor identities -+ -+ call machine(idnode,mxnode) -+ -+c activate for limited-life executable -+ -+CBOMB call bomb(idnode,2008,6,30) -+ -+ allocate (tbuffer(10),stat=memr) -+ -+ call parset(redirect,idnode,mxnode,tbuffer) -+ -+c open main printing file -+ -+ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') -+ if(idnode.eq.0) write (nrite, -+ x "(/,20x,'DL_POLY Classic 1.9', -+ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode -+ -+c allocate arrays for each function -+ -+ call alloc_ang_arrays(idnode) -+ call alloc_bnd_arrays(idnode) -+ call alloc_config_arrays(idnode) -+ call alloc_csh_arrays(idnode) -+ call alloc_dih_arrays(idnode) -+ call alloc_ewald_arrays(idnode) -+ call alloc_exc_arrays(idnode) -+ call alloc_exi_arrays(idnode) -+ call alloc_fbp_arrays(idnode) -+ call alloc_fld_arrays(idnode) -+ call alloc_free_arrays(idnode) -+ call alloc_hke_arrays(idnode) -+ call alloc_hyper_arrays(idnode) -+ call alloc_inv_arrays(idnode) -+ call alloc_met_arrays(idnode) -+ call alloc_pair_arrays(idnode) -+ call alloc_pmf_arrays(idnode) -+ call alloc_prp_arrays(idnode) -+ call alloc_rgbdy_arrays(idnode) -+ call alloc_shake_arrays(idnode) -+ call alloc_site_arrays(idnode) -+ call alloc_sol_arrays(idnode) -+ call alloc_spme_arrays(idnode) -+ call alloc_tbp_arrays(idnode) -+ call alloc_ter_arrays(idnode) -+ call alloc_tet_arrays(idnode) -+ call alloc_vdw_arrays(idnode) -+ -+c start clock -+ -+ call timchk(0,tzero) -+ -+c input the control parameters defining the simulation -+ -+ call simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c input the system force field -+ -+ call sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) -+ -+c construct initial configuration of system -+ -+ call sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c construct initial bookkeeping arrays -+ -+ call sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c reset atom numbers for excitation simulation -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c set initial system temperature -+ -+ call systemp -+ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c read thermodynamic and structural data from restart file -+ -+ call sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c metadynamics by d. quigley -+ -+ if(lmetadyn) then -+ -+c make copy of excluded atom list for use by metadynamics -+ call exclude_copy_mtd(idnode) -+ -+c initialise metadynamics, read order parameter definitions etc. -+ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) -+ -+ end if -+ -+c synchronise LRC, SIC and system charge terms for switching -+ -+ llswitch=.false. -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod((nstep-nswitch)/niswitch,2).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.true. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c PLUMED modifications -+ if(lplumed)then -+ -+ call plumed_f_installed(plumedavaiable) -+ -+ if (plumedavaiable<=0) then -+ if(idnode.eq.0) write(nrite,*)"PLUMED NOT AVAILABLE" -+ stop -+ else -+ call plumed_f_gcreate() -+ call plumed_f_gcmd("setMPIFComm"//char(0),get_comms()) -+ call plumed_f_gcmd("setRealPrecision"//char(0),8) -+ energyUnits=0.01 -+ lengthUnits=0.1 -+ timeUnits=1 -+ call plumed_f_gcmd("setMDEnergyUnits"//char(0),energyUnits) -+ call plumed_f_gcmd("setMDLengthUnits"//char(0),lengthUnits) -+ call plumed_f_gcmd("setMDTimeUnits"//char(0),timeUnits) -+ call plumed_f_gcmd("setPlumedDat"//char(0),"plumed.dat"//char(0)) -+ call plumed_f_gcmd("setLogFile"//char(0),"PLUMED.OUT"//char(0)) -+ call plumed_f_gcmd("setNatoms"//char(0),natms) -+ call plumed_f_gcmd("setMDEngine"//char(0),"dlpoly2.20"//char(0)) -+ call plumed_f_gcmd("setTimestep"//char(0),tstep) -+ call plumed_f_gcmd("init"//char(0),0) -+ end if -+ endif -+ -+c PLUMED modifications -+ -+c zero long range component of stress -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero contraint terms -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ if(lminim.or.loptim.or.ntcons.eq.0)then -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c define target kinetic energy -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+c metadynamics by d. quigley -+ -+ sigma_shl=boltz*degshl*0.5d0 -+ -+c convert BPD parameters to internal units -+ -+ if(lbpd)then -+ -+ ebias=0.5d0*boltz*degfre*ebias -+ vmin=0.5d0*boltz*degfre*vmin -+ -+ endif -+ -+c time check -+ -+ call timchk(1,tzero) -+ -+c control variable for structure optimizer -+ -+ keystr=0 -+ stropt=.false. -+ -+ if(lminim)then -+ -+c first step of minimisation programme -+ -+ if(idnode.eq.0)write(nrite,"(1x,120('-'))") -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c calculate initial conditions for velocity verlet -+ -+ elseif(keyver.eq.1.and.nstep.eq.0)then -+ -+c kinetic stress tensor at start -+ -+ call dcell(cell,celprp) -+ width=min(celprp(7),celprp(8),celprp(9)) -+ call kinstress(natms,idnode,mxnode,stress) -+ engke=0.5d0*(stress(1)+stress(5)+stress(9)) -+ do i=1,9 -+ stress(i)=stress(i)/dble(mxnode) -+ enddo -+ -+c calculate initial forces -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+ endif -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+c construct the first reference state -+ -+ call hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+ endif -+ -+c perform selected NEB calculation -+ -+ if(lneb)then -+ -+ do i=1,numneb -+ -+ call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), -+ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+ call scan_profile(nturn,estar) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(1x,120('-'))") -+ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') -+ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ enddo -+ -+c bypass the MD cycle for this option -+ -+ recycle=.false. -+ -+ endif -+ -+c*********************************************************************** -+c start of molecular dynamics calculations -+c*********************************************************************** -+ -+ do while(recycle) -+ -+c increase step counter -+ -+ nstep=nstep+1 -+ recycle=(nstep.lt.nstrun) -+ -+c store velocities for free energy or solvation simulation -+ -+ if(keyver.eq.0)then -+ -+ if(lsolva)then -+ -+ vxo_sol(:)=vxx(:) -+ vyo_sol(:)=vyy(:) -+ vzo_sol(:)=vzz(:) -+ -+ elseif(lfree)then -+ -+ vxo_fre(:)=vxx(:) -+ vyo_fre(:)=vyy(:) -+ vzo_fre(:)=vzz(:) -+ -+ endif -+ -+ endif -+ -+c molecular switching option for excitation -+ -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod(nstep-nswitch,niswitch).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.not.llswitch -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c switch on the minimiser -+ -+ if(lminim)then -+ -+ lminnow=(mod(nstep,minstp).eq.0) -+ -+ endif -+ -+c conserved quantity (other than K + U) -+ -+ consv=0.d0 -+ -+c energy accumulators -+ -+ if(.not.lminnow)then -+ -+ engke=0.d0 -+ engrot=0.d0 -+ -+ endif -+ -+c calculate volume of simulation cell -+ -+ if(imcon.ne.0.and.imcon.ne.6)then -+ -+ call dcell(cell,celprp) -+ volm=celprp(10) -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ else -+ -+ volm=0.d0 -+ -+ endif -+ -+c reset sutton chen long range corrections (constant pressure only) -+ -+ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+c activate the impact option at designated time step -+ -+ if(lhit.and.nstep.eq.nhit)call impact -+ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c integrate equations of motion stage 1 of velocity verlet -+ -+ if(keyver.gt.0)then -+ -+ isw=1 -+ if(.not.loptim)then -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+ call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+ endif -+ -+ if(lminnow)then -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+ elseif(loptim.or.keyshl.ne.2)then -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+ else -+ -+ call shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+ endif -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c switching option for excitation simulation -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+c integrate equations of motion -+ -+ if(keyver.eq.0)then -+ -+c integrate equations of motion by leapfrog verlet -+ -+ if(.not.(loptim.or.lminnow))call lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+ else if(keyver.gt.0)then -+ -+c integrate equations of motion by velocity verlet (stage 2) -+ -+ isw=2 -+ if(.not.loptim)call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ endif -+ -+c update the atomic positions for the ghost molecule -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+c long range correction adjustment for free energy and solvation -+ -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+c application of transition analysis procedures -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+ engtke=engke+engrot -+ call hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+ endif -+ -+c reset average boost factor in BPD during equilibration -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate shell kinetic energy -+ -+ if(keyshl.eq.1)then -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+c apply temperature scaling -+ -+ if((ltscal.and.nstep.le.nsteql).and. -+ x mod(nstep-nsteql,nstbts).eq.0)then -+ -+ chit=0.d0 -+ chit_shl=0.d0 -+ chip=0.d0 -+ do i=1,9 -+ eta(i)=0.d0 -+ enddo -+ -+ if(keyshl.eq.1) then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c reset atom velocities at intervals if required -+ -+ if(newgau)then -+ -+ if(mod(nstep,numgau).eq.0)call regauss -+ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+ endif -+ -+c calculate physical quantities -+ -+ if(nstep.gt.0)call static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c z density calculation -+ -+ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then -+ -+ call zden0(idnode,natms,mxnode,nzden,zlen) -+ -+ endif -+ -+c terminate program if boundary conditions violated -+ -+ if(imcon.gt.0.and.rcut.gt.width)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ call error(idnode,95) -+ -+ endif -+ -+c line-printer output every nstbpo steps -+ -+ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then -+ -+ call timchk(0,timelp) -+ if(idnode.eq.0)then -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ if(mod(lines,npage).eq.0) -+ x write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, -+ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', -+ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, -+ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', -+ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', -+ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, -+ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', -+ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)") -+ x nstep,(stpval(i),i=1,9), -+ x simtim,dec,(stpval(i),i=10,18), -+ x prntim,hms,(stpval(i),i=19,27) -+ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', -+ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ lines=lines+1 -+ -+ endif -+ -+c report end of equilibration period -+ -+ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then -+ -+ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) -+ x write(nrite,"(/,/,1x,'switching off temperature ', -+ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep -+ ltscal=.false. -+ -+ endif -+ -+c write trajectory data -+ -+ if(ltraj.and.nstep.ge.nstraj) then -+ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then -+ -+ call traject -+ x (ltraj,idnode,imcon,istraj,keytrj,natms, -+ x nstraj,nstep,tstep) -+ -+ endif -+ -+ endif -+ -+c write solvation energy file -+ -+ if(lsolva.and.nstep.ge.nsolva)then -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ call solva_temp(idnode,mxnode,natms2,keyver) -+ call solvation_write(lexcite,lswitch,idnode,natms, -+ x nstep,nsolva,isolva,tstep,engunit,elrc) -+ -+ endif -+ -+ endif -+ -+c write free energy file -+ -+ if(lfree.and.nstep.ge.nfrn)then -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ call free_kinetic(lfrmas,idnode,mxnode,keyver) -+ call free_energy_write(idnode,nstep,engunit) -+ -+ endif -+ -+ endif -+ -+c save restart data in event of system crash -+ -+ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+ endif -+ -+c cycle time check -+ -+ call timchk(0,timelp) -+ recycle=(recycle.and.timjob-timelp.gt.timcls) -+ -+ enddo -+ -+c*********************************************************************** -+c end of molecular dynamics calculations -+c*********************************************************************** -+ -+c last time check -+ -+ call timchk(0,timelp) -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, -+ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") -+ x timelp,prntim,hms,timcls -+ -+c shell relaxation convergence statistics -+ -+ if(.not.loptim.and.keyshl.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'shell relaxation statistics : average cycles = ', -+ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 -+ -+ endif -+ -+c produce summary of simulation -+ -+ levcfg=2 -+ if(loptim)levcfg=0 -+ if(.not.lneb)call result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, -+ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, -+ x chit_shl) -+ -+c PLUMED -+ if(lplumed) call plumed_f_gcmd() -+c PLUMED -+ -+c write hyperdynamics restart file -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c close output channels -+ -+ if(idnode.eq.0) then -+ -+ close (nrite) -+ close (nstats) -+ close (nhist) -+ close (nevnt) -+ -+ endif -+ -+c terminate job -+ -+ call exitcomms() -+ -+ end -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.preplumed dl_class_1.9/srcmod/dlpoly.f.preplumed ---- dl_class_1.9.orig/srcmod/dlpoly.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f.preplumed 2012-04-24 18:30:31.000000000 +0200 -@@ -0,0 +1,936 @@ -+ program dlpoly_classic -+ -+c*********************************************************************** -+c -+c dl_poly classic is an stfc/ccp5 program package for the -+c dynamical simulation of molecular systems. -+c -+c dl_poly is the copyright of the stfc daresbury laboratory, -+c daresbury, warrington wa4 4ad. -+c -+c neither the stfc, daresbury laboratory, ccp5 nor the authors -+c of this package claim that it is free from errors and do not -+c accept liability for any loss or damage that may arise from -+c its use. it is the users responsibility to verify that the -+c package dl_poly is fit for the purpose the user intends for -+c it. -+c -+c users of this package are recommended to consult the dl_poly -+c user manual for the full description of its use and purpose. -+c -+c authors: w.smith and t.r.forester 1995 -+c copyright daresbury laboratory 1995 -+c -+c DL_POLY CLASSIC VERSION 1.9 -+c -+c*********************************************************************** -+ -+c declare required modules -+ -+ use angles_module -+ use bonds_module -+ use config_module -+ use core_shell_module -+ use define_system_module -+ use dihedral_module -+ use driver_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use forces_module -+ use four_body_module -+ use hkewald_module -+ use hyper_dynamics_module -+ use integrator_module -+ use inversion_module -+ use metal_module -+ use metafreeze_module -+ use nlist_builders_module -+ use pair_module -+ use pmf_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use solvation_module -+ use spme_module -+ use temp_scalers_module -+ use tersoff_module -+ use tether_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ character*1 hms,dec -+ character*8 seek -+ -+ logical ltscal,lzeql,loptim,ltraj,lgofr,lpgr,lfcap,recycle -+ logical newlst,lneut,loglnk,lnsq,lzden,lshmov,lcnb,ltad,lneb -+ logical stropt,lzero,nolink,newgau,lminim,lminnow,lhit,lbpd -+ logical prechk,tadall,lexcite,lsolva,lfree,lfrmas,lswitch -+ logical lghost,llswitch,lnfic,nebgo,lpsoc,redirect -+ -+ integer npage,lines,idnode,mxnode,memr,intsta,istraj,nsbzdn -+ integer keyens,keyfce,keyres,keytrj,kmax1,kmax2,kmax3,multt -+ integer nstack,nstbgr,nstbpo,nhko,nlatt,nstbts,nsteql,nstraj -+ integer nstrun,nospl,keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw -+ integer ntptbp,ntpmet,ntpfbp,nshels,imcon,levcfg,nneut,minstp -+ integer ntangl,ntbond,ntcons,ntdihd,ntinv,ntpmf,nspmf,ntfree -+ integer ntteth,ntshl,nstep,numacc,numrdf,nzden,nscons,i,k -+ integer ntpter,keyshl,isw,keyver,keystr,keytol,numgau,khit -+ integer nhit,keybpd,ntrack,nblock,blkout,numneb,nturn,mode -+ integer natms2,ntghost,nsolva,isolva,nofic -+ -+ real(8) alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup -+ real(8) taut,temp,timcls,timjob,tolnce,tstep,tzero,dlrpot,drewd -+ real(8) engunit,rcuttb,rctter,rcutfb,degfre,degrot,chit,conint -+ real(8) elrc,virlrc,engbnd,volm,degshl,chip,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtbp,virtbp,engter,virter -+ real(8) engfbp,virfbp,engsrp,virsrp,engcpe,vircpe,vircon,vircom -+ real(8) engfld,virfld,engshl,virshl,shlke,engtet,virtet,virpmf -+ real(8) consv,engke,engrot,sigma,virtot,engcfg,prntim,simtim -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,hyp_units,estar,chit_shl,sigma_shl -+ real(8) engord,virord -+ real(8), allocatable :: tbuffer(:) -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -+ data temp,timcls,timjob,tolnce,rlxtol/5*0.d0/ -+ -+c set up the communications -+ -+ call initcomms() -+ call gsync() -+ -+c determine processor identities -+ -+ call machine(idnode,mxnode) -+ -+c activate for limited-life executable -+ -+CBOMB call bomb(idnode,2008,6,30) -+ -+ allocate (tbuffer(10),stat=memr) -+ -+ call parset(redirect,idnode,mxnode,tbuffer) -+ -+c open main printing file -+ -+ if(.not.redirect.and.idnode.eq.0)open(nrite,file='OUTPUT') -+ if(idnode.eq.0) write (nrite, -+ x "(/,20x,'DL_POLY Classic 1.9', -+ x /,/,30x,'Running on ',i4,' nodes',/,/)") mxnode -+ -+c allocate arrays for each function -+ -+ call alloc_ang_arrays(idnode) -+ call alloc_bnd_arrays(idnode) -+ call alloc_config_arrays(idnode) -+ call alloc_csh_arrays(idnode) -+ call alloc_dih_arrays(idnode) -+ call alloc_ewald_arrays(idnode) -+ call alloc_exc_arrays(idnode) -+ call alloc_exi_arrays(idnode) -+ call alloc_fbp_arrays(idnode) -+ call alloc_fld_arrays(idnode) -+ call alloc_free_arrays(idnode) -+ call alloc_hke_arrays(idnode) -+ call alloc_hyper_arrays(idnode) -+ call alloc_inv_arrays(idnode) -+ call alloc_met_arrays(idnode) -+ call alloc_pair_arrays(idnode) -+ call alloc_pmf_arrays(idnode) -+ call alloc_prp_arrays(idnode) -+ call alloc_rgbdy_arrays(idnode) -+ call alloc_shake_arrays(idnode) -+ call alloc_site_arrays(idnode) -+ call alloc_sol_arrays(idnode) -+ call alloc_spme_arrays(idnode) -+ call alloc_tbp_arrays(idnode) -+ call alloc_ter_arrays(idnode) -+ call alloc_tet_arrays(idnode) -+ call alloc_vdw_arrays(idnode) -+ -+c start clock -+ -+ call timchk(0,tzero) -+ -+c input the control parameters defining the simulation -+ -+ call simdef -+ x (seek,lfcap,lgofr,lnsq,loptim,lzero,lminim,lpgr,ltraj,ltscal, -+ x lzeql,lzden,nolink,newgau,lhit,lbpd,ltad,lneb,prechk,tadall, -+ x lsolva,lfree,lfrmas,lexcite,lswitch,lghost,lnfic,nebgo,lpsoc, -+ x idnode,minstp,intsta,istraj,keybpd,keyens,keyfce,keyres,keyver, -+ x keytrj,kmax1,kmax2,kmax3,multt,nstack,nstbgr,nsbzdn,nstbpo, -+ x nhko,nlatt,nstbts,nsteql,nstraj,nstrun,nospl,keytol,numgau, -+ x khit,nhit,nblock,ntrack,blkout,numneb,mode,nsolva,isolva,nofic, -+ x alpha,delr,epsq,fmax,press,quattol,rcut,rprim,rvdw,taup,taut, -+ x temp,timcls,timjob,tolnce,tstep,rlxtol,opttol,zlen,ehit,xhit, -+ x yhit,zhit,ebias,vmin,catchrad,sprneb,deltad,tlow,hyp_units) -+ -+c input the system force field -+ -+ call sysdef -+ x (lneut,lnsq,lsolva,lfree,lexcite,lswitch,lghost,idnode,keyfce, -+ x keyfld,natms,ngrp,ntpatm,ntpmls,ntpvdw,ntptbp,ntpmet,ntpfbp, -+ x ntpter,nshels,keyshl,ntghost,keyver,dlrpot,engunit,rvdw,rcuttb, -+ x rctter,rcutfb) -+ -+ if(ntpmet.gt.0.and.multt.gt.1)call error(idnode,153) -+ -+c construct initial configuration of system -+ -+ call sysgen -+ x (loglnk,lneut,nolink,lfree,lfrmas,idnode,imcon,keyens, -+ x keyfce,keyres,levcfg,multt,mxnode,ntpmls,delr,rcut,volm) -+ -+c construct initial bookkeeping arrays -+ -+ call sysbook -+ x (loglnk,lneut,lshmov,lcnb,lsolva,lghost,idnode,imcon, -+ x mxnode,natms,nneut,ngrp,nscons,ntangl,ntbond,ntcons, -+ x ntdihd,ntinv,ntpmls,ntpmf,nspmf,ntfree,ntteth,ntshl, -+ x ntghost,degfre,degrot) -+ -+c reset atom numbers for excitation simulation -+ -+ if(lghost)then -+ natms2=natms-ntghost -+ else -+ natms2=natms -+ endif -+ -+c set initial system temperature -+ -+ call systemp -+ x (idnode,imcon,keyres,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntfree,ntshl,levcfg,keyshl,degfre,degshl,degrot,temp, -+ x tolnce) -+ -+c read thermodynamic and structural data from restart file -+ -+ call sysinit -+ x (lgofr,lzden,lsolva,lfree,lghost,lpsoc,idnode,imcon,keyfce, -+ x keyres,mxnode,natms,ntshl,nstep,numacc,numrdf,ntpatm, -+ x ntpmet,ntpvdw,nzden,chip,chit,conint,elrc,engunit,virlrc, -+ x rvdw,volm,virtot,vircom,tboost,chit_shl) -+ -+c metadynamics by d. quigley -+ -+ if(lmetadyn) then -+ -+c make copy of excluded atom list for use by metadynamics -+ call exclude_copy_mtd(idnode) -+ -+c initialise metadynamics, read order parameter definitions etc. -+ call define_metadynamics(idnode,mxnode,natms,ntpatm,temp) -+ -+ end if -+ -+c synchronise LRC, SIC and system charge terms for switching -+ -+ llswitch=.false. -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod((nstep-nswitch)/niswitch,2).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.true. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c zero long range component of stress -+ -+ do i=1,9 -+ stresl(i)=0.d0 -+ enddo -+ -+c zero contraint terms -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ if(lminim.or.loptim.or.ntcons.eq.0)then -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c define target kinetic energy -+ -+ sigma=temp*boltz*degfre*0.5d0 -+ -+c metadynamics by d. quigley -+ -+ sigma_shl=boltz*degshl*0.5d0 -+ -+c convert BPD parameters to internal units -+ -+ if(lbpd)then -+ -+ ebias=0.5d0*boltz*degfre*ebias -+ vmin=0.5d0*boltz*degfre*vmin -+ -+ endif -+ -+c time check -+ -+ call timchk(1,tzero) -+ -+c control variable for structure optimizer -+ -+ keystr=0 -+ stropt=.false. -+ -+ if(lminim)then -+ -+c first step of minimisation programme -+ -+ if(idnode.eq.0)write(nrite,"(1x,120('-'))") -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c calculate initial conditions for velocity verlet -+ -+ elseif(keyver.eq.1.and.nstep.eq.0)then -+ -+c kinetic stress tensor at start -+ -+ call dcell(cell,celprp) -+ width=min(celprp(7),celprp(8),celprp(9)) -+ call kinstress(natms,idnode,mxnode,stress) -+ engke=0.5d0*(stress(1)+stress(5)+stress(9)) -+ do i=1,9 -+ stress(i)=stress(i)/dble(mxnode) -+ enddo -+ -+c calculate initial forces -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+ endif -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+c construct the first reference state -+ -+ call hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+ endif -+ -+c perform selected NEB calculation -+ -+ if(lneb)then -+ -+ do i=1,numneb -+ -+ call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn_1(i), -+ x bsn_2(i),idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+ call scan_profile(nturn,estar) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(1x,120('-'))") -+ write(nrite,'(1x,"TRA",3i6,1p,4e14.5)') -+ x bsn_1(i),bsn_2(i),nturn,estar/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ enddo -+ -+c bypass the MD cycle for this option -+ -+ recycle=.false. -+ -+ endif -+ -+c*********************************************************************** -+c start of molecular dynamics calculations -+c*********************************************************************** -+ -+ do while(recycle) -+ -+c increase step counter -+ -+ nstep=nstep+1 -+ recycle=(nstep.lt.nstrun) -+ -+c store velocities for free energy or solvation simulation -+ -+ if(keyver.eq.0)then -+ -+ if(lsolva)then -+ -+ vxo_sol(:)=vxx(:) -+ vyo_sol(:)=vyy(:) -+ vzo_sol(:)=vzz(:) -+ -+ elseif(lfree)then -+ -+ vxo_fre(:)=vxx(:) -+ vyo_fre(:)=vyy(:) -+ vzo_fre(:)=vzz(:) -+ -+ endif -+ -+ endif -+ -+c molecular switching option for excitation -+ -+ if(lswitch)then -+ -+ if(nstep.ge.nswitch)then -+ -+ if(mod(nstep-nswitch,niswitch).eq.0)then -+ -+ call switch_atm(lfrmas) -+ call switch(elrc,virlrc) -+ llswitch=.not.llswitch -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c switch on the minimiser -+ -+ if(lminim)then -+ -+ lminnow=(mod(nstep,minstp).eq.0) -+ -+ endif -+ -+c conserved quantity (other than K + U) -+ -+ consv=0.d0 -+ -+c energy accumulators -+ -+ if(.not.lminnow)then -+ -+ engke=0.d0 -+ engrot=0.d0 -+ -+ endif -+ -+c calculate volume of simulation cell -+ -+ if(imcon.ne.0.and.imcon.ne.6)then -+ -+ call dcell(cell,celprp) -+ volm=celprp(10) -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ else -+ -+ volm=0.d0 -+ -+ endif -+ -+c reset sutton chen long range corrections (constant pressure only) -+ -+ if(ntpmet.gt.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rvdw,volm) -+ -+ endif -+ -+c activate the impact option at designated time step -+ -+ if(lhit.and.nstep.eq.nhit)call impact -+ x (khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c integrate equations of motion stage 1 of velocity verlet -+ -+ if(keyver.gt.0)then -+ -+ isw=1 -+ if(.not.loptim)then -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+ call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+ endif -+ -+ if(lminnow)then -+ -+ call minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+ elseif(loptim.or.keyshl.ne.2)then -+ -+ call molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero, -+ x newlst,stropt,recycle,ltad,lsolva,lfree,lghost, -+ x idnode,imcon,keyfce,keyfld,keyshl,keystr,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut, -+ x nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd, -+ x ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl, -+ x ntteth,ntcons,numrdf,nsolva,isolva,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld, -+ x enginv,engshl,engsrp,engtbp,engter,engtet,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih, -+ x virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,engord,virord) -+ -+ else -+ -+ call shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+ endif -+ -+c bias potential dynamics option - reset forces -+ -+ if(lbpd)call bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c switching option for excitation simulation -+ -+ if(llswitch)call copy_force(idnode,mxnode) -+ -+c integrate equations of motion -+ -+ if(keyver.eq.0)then -+ -+c integrate equations of motion by leapfrog verlet -+ -+ if(.not.(loptim.or.lminnow))call lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms2,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+ else if(keyver.gt.0)then -+ -+c integrate equations of motion by velocity verlet (stage 2) -+ -+ isw=2 -+ if(.not.loptim)call vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms2,nstep, -+ x ngrp,keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode, -+ x nofic,ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom, -+ x virtot,temp,press,volm,sigma,taut,taup,chit,chip,consv, -+ x conint,elrc,virlrc,virpmf,chit_shl,sigma_shl) -+ -+ endif -+ -+c update the atomic positions for the ghost molecule -+ -+ if(lghost)call update_ghost(idnode,mxnode) -+ -+c long range correction adjustment for free energy and solvation -+ -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+ if(lfree.or.lghost) -+ x call lrcorrect_fre(lfree,volm,elrc,virlrc) -+ if(lsolva)call lrcorrect_sol(lghost,volm) -+ -+c application of transition analysis procedures -+ -+ if(ltad.or.(lbpd.and.keybpd.eq.2))then -+ -+ engtke=engke+engrot -+ call hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+ endif -+ -+c reset average boost factor in BPD during equilibration -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate shell kinetic energy -+ -+ if(keyshl.eq.1)then -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+ endif -+ -+c scale t=0 tether reference positions (constant pressure only) -+ -+ if(keyver.eq.0.and.keyens.ge.4.and.keyens.le.7) then -+ -+ call xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+ endif -+ -+c apply temperature scaling -+ -+ if((ltscal.and.nstep.le.nsteql).and. -+ x mod(nstep-nsteql,nstbts).eq.0)then -+ -+ chit=0.d0 -+ chit_shl=0.d0 -+ chip=0.d0 -+ do i=1,9 -+ eta(i)=0.d0 -+ enddo -+ -+ if(keyshl.eq.1) then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms2,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+c reset atom velocities at intervals if required -+ -+ if(newgau)then -+ -+ if(mod(nstep,numgau).eq.0)call regauss -+ x (idnode,imcon,mxnode,natms2,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+ endif -+ -+c calculate physical quantities -+ -+ if(nstep.gt.0)call static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c z density calculation -+ -+ if(lzden.and.((.not.lzeql).or.(nstep.gt.nsteql))) then -+ -+ call zden0(idnode,natms,mxnode,nzden,zlen) -+ -+ endif -+ -+c terminate program if boundary conditions violated -+ -+ if(imcon.gt.0.and.rcut.gt.width)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ call error(idnode,95) -+ -+ endif -+ -+c line-printer output every nstbpo steps -+ -+ if(nstep.eq.1.or.(nstep.gt.1.and.mod(nstep,nstbpo).eq.0))then -+ -+ call timchk(0,timelp) -+ if(idnode.eq.0)then -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ if(mod(lines,npage).eq.0) -+ x write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x, -+ x 'eng_cfg',5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd', -+ x 5x,'eng_ang',5x,'eng_dih',5x,'eng_tet',/,1x, -+ x 'time ',5x,' eng_pv',4x,'temp_rot',5x,'vir_cfg', -+ x 5x,'vir_vdw',5x,'vir_cou',5x,'vir_bnd',5x,'vir_ang', -+ x 5x,'vir_con',5x,'vir_tet',/,1x,'cpu time',6x, -+ x 'volume',4x,'temp_shl',5x,'eng_shl',5x,'vir_shl', -+ x 7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ write(nrite,"(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)") -+ x nstep,(stpval(i),i=1,9), -+ x simtim,dec,(stpval(i),i=10,18), -+ x prntim,hms,(stpval(i),i=19,27) -+ write(nrite,"(/,1x,' rolling',1p,9e12.4,/,1x,'averages', -+ x 1p,9e12.4,/,9x,1p,9e12.4)") (ravval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ lines=lines+1 -+ -+ endif -+ -+c report end of equilibration period -+ -+ if((.not.loptim).and.(.not.lzero).and.(nstep.ge.nsteql))then -+ -+ if((ltscal.and.idnode.eq.0).and.(nstep.eq.nsteql)) -+ x write(nrite,"(/,/,1x,'switching off temperature ', -+ x 'scaling at step ',i6,/,/,/,1x,120('-'))") nstep -+ ltscal=.false. -+ -+ endif -+ -+c write trajectory data -+ -+ if(ltraj.and.nstep.ge.nstraj) then -+ if(idnode.eq.0.and.mod(nstep-nstraj,istraj).eq.0)then -+ -+ call traject -+ x (ltraj,idnode,imcon,istraj,keytrj,natms, -+ x nstraj,nstep,tstep) -+ -+ endif -+ -+ endif -+ -+c write solvation energy file -+ -+ if(lsolva.and.nstep.ge.nsolva)then -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ call solva_temp(idnode,mxnode,natms2,keyver) -+ call solvation_write(lexcite,lswitch,idnode,natms, -+ x nstep,nsolva,isolva,tstep,engunit,elrc) -+ -+ endif -+ -+ endif -+ -+c write free energy file -+ -+ if(lfree.and.nstep.ge.nfrn)then -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ call free_kinetic(lfrmas,idnode,mxnode,keyver) -+ call free_energy_write(idnode,nstep,engunit) -+ -+ endif -+ -+ endif -+ -+c save restart data in event of system crash -+ -+ if(mod(nstep,ndump).eq.0.and.nstep.ne.nstrun)then -+ -+ levcfg=2 -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+ endif -+ -+c cycle time check -+ -+ call timchk(0,timelp) -+ recycle=(recycle.and.timjob-timelp.gt.timcls) -+ -+ enddo -+ -+c*********************************************************************** -+c end of molecular dynamics calculations -+c*********************************************************************** -+ -+c last time check -+ -+ call timchk(0,timelp) -+ call get_prntime(hms,timjob,prntim) -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'run terminating. elapsed cpu time = ',1p,e13.5, -+ x ', job time = ',0p,f7.3,a1,', close time = ',f7.2,'s',/)") -+ x timelp,prntim,hms,timcls -+ -+c shell relaxation convergence statistics -+ -+ if(.not.loptim.and.keyshl.eq.2)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,/,1x,'shell relaxation statistics : average cycles = ', -+ x f8.3,' maximum cycles = ',f8.3)")pass1,pass2 -+ -+ endif -+ -+c produce summary of simulation -+ -+ levcfg=2 -+ if(loptim)levcfg=0 -+ if(.not.lneb)call result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit, -+ x conint,rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost, -+ x chit_shl) -+ -+c write hyperdynamics restart file -+ -+ if(ltad.or.lbpd) -+ x call hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c close output channels -+ -+ if(idnode.eq.0) then -+ -+ close (nrite) -+ close (nstats) -+ close (nhist) -+ close (nevnt) -+ -+ endif -+ -+c terminate job -+ -+ call exitcomms() -+ -+ end -diff -urN dl_class_1.9.orig/srcmod/dlpoly.f.rej dl_class_1.9/srcmod/dlpoly.f.rej ---- dl_class_1.9.orig/srcmod/dlpoly.f.rej 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/dlpoly.f.rej 2015-11-09 14:15:45.054258793 +0100 -@@ -0,0 +1,20 @@ -+--- dlpoly.f.preplumed -++++ dlpoly.f -+@@ -103,12 +103,17 @@ -+ real(8) consv,engke,engrot,sigma,virtot,engcfg -+ real(8) stpeng,stpeth,stpprs,stptmp,stpvir,stpvol,width,zlen -+ real(8) timelp,engmet,virmet,pass0,pass1,pass2,rlxtol,opttol -+ real(8) catchrad,sprneb,deltad,tlow,engtke,ehit,xhit,yhit,zhit -+ real(8) ebias,vmin,boost,heinc,tboost,hyp_units,estar -++c PLUMED modifications -++ real(8) energyUnits,lengthUnits,timeUnits -++ integer(8) get_comms -++c PLUMED modifications -+ -+ real(8), allocatable :: tbuffer(:) -++ integer :: plumedavaiable -+ -+ data timelp/0.d0/,lminnow/.false./,ntrack/10/ -+ data npage,lines/8,0/,recycle/.true./,boost/1.d0/ -+ data pass0/0.d0/,pass1/0.d0/,pass2/0.d0/ -+ data delr,epsq,press,quattol,rprim,rvdw/6*0.d0/ -diff -urN dl_class_1.9.orig/srcmod/driver_module.f dl_class_1.9/srcmod/driver_module.f ---- dl_class_1.9.orig/srcmod/driver_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/driver_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,498 @@ -+ module driver_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation driver routines -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use forces_module -+ use nlist_builders_module -+ use optimiser_module -+ use temp_scalers_module -+ -+ implicit none -+ -+ integer, parameter :: mxpass=250 -+ -+ contains -+ -+ subroutine molecular_dynamics -+ x (lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero,newlst, -+ x stropt,cycle,ltad,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,keyfld,keyshl,keystr,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, -+ x ntpter,ntpvdw,ntshl,ntteth,ntcons,numrdf,nsolva,isolva, -+ x alpha,delr,dlrpot,drewd,elrc,engang,engbnd,engcpe,engdih, -+ x engfbp,engfld,enginv,engshl,engsrp,engtbp,engter,engtet, -+ x epsq,fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,shlke, -+ x engcfg,temp,tstep,virang,virbnd,vircpe,virdih,virfbp,virfld, -+ x virinv,virlrc,virmet,virshl,virsrp,virtbp,virter,virtet,volm, -+ x engmet,virtot,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a standard -+c molecular dynamics simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,lgofr,lneut,lnsq,loglnk,loptim,lzeql,lzero -+ logical newlst,stropt,cycle,ltad,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons -+ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,nsolva -+ integer isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,virtot -+ real(8) engord,virord -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c structure optimisation -+ -+ if(loptim.or.lzero)then -+ -+ call optimisation_selector -+ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, -+ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) -+ -+ if(stropt.and.idnode.eq.0) -+ x write(nrite,"(/,/,1x,'structure optimisation converged ', -+ x 'at step ',i6,/,/,/,1x,120('-'))") nstep -+ -+ cycle=(cycle.and.(.not.stropt)) -+ -+ endif -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+ return -+ end subroutine molecular_dynamics -+ -+ subroutine shell_relaxation -+ x (lfcap,lgofr,lneut,lnsq,loglnk,lzeql,newlst,ltad,lsolva, -+ x lfree,lghost,idnode,imcon,keyfce,keyfld,keyshl, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,nhko,nlatt,nneut, -+ x nospl,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf, -+ x ntpmls,nsolva,isolva,alpha,delr,dlrpot,drewd,elrc,engang, -+ x engbnd,engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp, -+ x engtbp,engter,engtet,epsq,fmax,rctter,rcut,rcutfb,rcuttb, -+ x rprim,rvdw,shlke,engcfg,temp,tstep,virang,virbnd,vircpe, -+ x virdih,virfbp,virfld,virinv,virlrc,virmet,virshl,virsrp, -+ x virtbp,virter,virtet,volm,engmet,virtot,rlxtol,pass0, -+ x pass1,pass2,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a -+c relaxed shell molecular dynamics simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical,save :: lfirst = .true. -+ logical lfcap,lgofr,lneut,lnsq,loglnk,lzeql,ltad -+ logical newlst,relaxed,shgofr,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms -+ integer nhko,nlatt,nneut,nospl,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf -+ integer keyrlx,ntpmls,pass,nsolva,isolva,ia,ib,ishl -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,virtot,rlxtol -+ real(8) pass0,pass1,pass2,engord,virord -+ -+ real(8),allocatable,dimension(:),save :: xdcs,ydcs,zdcs -+ -+ pass=0 -+ keyrlx=0 -+ shgofr=lgofr -+ relaxed=.false. -+ -+ if(lfirst)then -+ -+ allocate(xdcs(1:ntshl)) -+ allocate(ydcs(1:ntshl)) -+ allocate(zdcs(1:ntshl)) -+ lfirst = .false. -+ -+ else -+ -+ do ishl=1,ntshl -+ -+ ia=listshl(ishl,2) -+ ib=listshl(ishl,3) -+ xxx(ib)=xxx(ia)+xdcs(ishl) -+ yyy(ib)=yyy(ia)+ydcs(ishl) -+ zzz(ib)=zzz(ia)+zdcs(ishl) -+ -+ enddo -+ -+ endif -+ -+ do while(.not.relaxed.and.pass.le.mxpass) -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+c relaxed shell option -+ -+ call relax_shells -+ x (relaxed,keyrlx,idnode,mxnode,natms,ntpmls,tstep, -+ x rlxtol) -+ -+ if(relaxed)then -+ -+ pass1=pass0*pass1 -+ pass0=pass0+1.d0 -+ pass1=pass1/pass0+pass/pass0 -+ pass2=max(dble(pass),pass2) -+c$$$ write(104,'("Relaxed shells before step: ",I5)')pass+1 -+ -+ endif -+ -+ pass=pass+1 -+ if(pass.gt.mxpass)call error(idnode,1950) -+ shgofr=.false. -+ -+c end of shell relaxation -+ -+ enddo -+ -+c store vector connecting the cores to the shells -+ -+ do ishl=1,ntshl -+ -+ ia=listshl(ishl,2) -+ ib=listshl(ishl,3) -+ xdcs(ishl)=xxx(ib)-xxx(ia) -+ ydcs(ishl)=yyy(ib)-yyy(ia) -+ zdcs(ishl)=zzz(ib)-zzz(ia) -+ -+ enddo -+ -+ call images(imcon,0,1,ntshl,cell,xdcs,ydcs,zdcs) -+ -+ return -+ end subroutine shell_relaxation -+ -+ subroutine minimiser -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,imcon,keyfce, -+ x keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt,mxnode,natms, -+ x ngrp,nhko,nlatt,nneut,nospl,nscons,ntcons,nstbgr,nstep, -+ x nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet, -+ x ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,alpha,delr,dlrpot, -+ x drewd,elrc,engang,engbnd,engcpe,engdih,engfbp,engfld,enginv, -+ x engshl,engsrp,engtbp,engter,engtet,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp,tstep, -+ x virang,virbnd,vircpe,virdih,virfbp,virfld,virinv,virlrc, -+ x virmet,virshl,virsrp,virtbp,virter,virtet,volm,engmet, -+ x virtot,sigma,tolnce,engunit,engord,virord) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls in a -+c minimisation simulation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2007 -+c adapted - d.quigley nov 2010 metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,stropt,shgofr -+ logical conopt,newjob,ltad,lsolva,lfree,lghost -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keystr,pass,i -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,keytol -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf,ntcons -+ integer fail,nsolva,isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter,sigma -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp,tolnce -+ real(8) virtbp,virter,virtet,volm,engmet,virtot,engcon -+ real(8) cfgmin,engunit,hnorm,grad0,grad1,ff1,sgn -+ real(8) engord,virord -+ -+ real(8), allocatable :: sxx(:),syy(:),szz(:) -+ -+ save cfgmin,newjob -+ -+ data newjob/.true./ -+ -+ pass=0 -+ keystr=0 -+ shgofr=.false. -+ stropt=.false. -+ -+c dummy variables -+ -+ ltad=.false. -+ lsolva=.false. -+ lfree=.false. -+ lghost=.false. -+ nsolva=0 -+ isolva=1 -+ -+c$$$c diagnostic printing (not usually active) -+c$$$ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ write(nrite,"(1x,120('-'), -+c$$$ x /,/,1x,' pass',5x,'eng_cfg',5x,'eng_vdw',5x,'eng_cou', -+c$$$ x 5x,'eng_bnd',5x,'eng_ang',5x,'eng_dih',5x,'eng_tet', -+c$$$ x 5x,'eng_met',/,1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+ do while(.not.stropt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,shgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c total virial (excluding constraint virial and c.o.m virial) -+c for npt routines note: virsrp already includes virlrc -+ -+ virtot=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet+virord -+ -+c conjugate gradient structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+c$$$c diagnostic printing (not usually active) -+c$$$ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ write(nrite,"(1x,i8,1p,8e12.4)") -+c$$$ x pass,engcfg/engunit,engsrp/engunit,engcpe/engunit, -+c$$$ x engbnd/engunit,engang/engunit,engdih/engunit,engtet/ -+c$$$ x engunit,engmet/engunit -+c$$$ write(nrite,"(1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+c end of structure minimisation -+ -+ enddo -+ -+c ensure constraints are satisfied -+ -+ if(stropt.and.ntcons.gt.0)then -+ -+ allocate(sxx(mxatms),syy(mxatms),szz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,9999) -+ -+c store current forces -+ -+ do i=1,natms -+ -+ sxx(i)=fxx(i) -+ syy(i)=fyy(i) -+ szz(i)=fzz(i) -+ -+ enddo -+ -+ keystr=0 -+ conopt=.false. -+ -+ do while(.not.conopt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ engcon=0.d0 -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c conjugate gradient structure optimisation of constraint bonds -+ -+ call strucopt -+ x (conopt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcon,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ enddo -+ -+c restore current forces -+ -+ do i=1,natms -+ -+ fxx(i)=sxx(i) -+ fyy(i)=syy(i) -+ fzz(i)=szz(i) -+ -+ enddo -+ -+ deallocate(sxx,syy,szz,stat=fail) -+ -+ endif -+ -+c write data summary -+ -+ if(idnode.eq.0)then -+ -+ if(stropt)then -+ -+ write(nrite,'(1x,"minimisation converged after ",i6," cycles" -+ x ," energy minimum: ",1pe12.4)')pass,engcfg/engunit -+ -+ else -+ -+ write(nrite,'(1x,"minimisation NOT converged after ",i6, -+ x " cycles")')pass -+ -+ endif -+ -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c reset velocities after structure optimisation -+ -+ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+c write out minimised structure if lowest obtained so far -+ -+ if(newjob.or.cfgmin.gt.engcfg)then -+ -+ if(idnode.eq.0)call config_write('CFGMIN',0,imcon,natms,engcfg) -+ cfgmin=engcfg -+ newjob=.false. -+ -+ endif -+ -+ return -+ end subroutine minimiser -+ -+ end module driver_module -diff -urN dl_class_1.9.orig/srcmod/ensemble_tools_module.f dl_class_1.9/srcmod/ensemble_tools_module.f ---- dl_class_1.9.orig/srcmod/ensemble_tools_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/ensemble_tools_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1934 @@ -+ module ensemble_tools_module -+ -+c*********************************************************************** -+c -+c dl_poly module defining tools for ensemble simulations -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use core_shell_module -+ use property_module -+ use rigid_body_module -+ use utility_module -+ -+ contains -+ -+ function getmass(natms,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate total system mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) getmass -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ getmass=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ getmass=getmass+weight(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=getmass -+ call gdsum(buffer(1),1,buffer(2)) -+ getmass=buffer(1) -+ -+ endif -+ -+ return -+ end function getmass -+ -+ subroutine getcom(natms,idnode,mxnode,totmas,com) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system centre of mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) totmas -+ -+ real(8) com(3) -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ com(1)=0.d0 -+ com(2)=0.d0 -+ com(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ com(1)=com(1)+weight(i)*xxx(i) -+ com(2)=com(2)+weight(i)*yyy(i) -+ com(3)=com(3)+weight(i)*zzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) call gdsum(com,3,buffer) -+ -+ com(1)=com(1)/totmas -+ com(2)=com(2)/totmas -+ com(3)=com(3)/totmas -+ -+ return -+ end subroutine getcom -+ -+ subroutine getvom(natms,idnode,mxnode,totmas,vom) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system centre of mass -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) totmas -+ -+ real(8) vom(3) -+ -+ iatm0 = (idnode*natms)/mxnode+1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+ vom(1)=0.d0 -+ vom(2)=0.d0 -+ vom(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ vom(1)=vom(1)+weight(i)*vxx(i) -+ vom(2)=vom(2)+weight(i)*vyy(i) -+ vom(3)=vom(3)+weight(i)*vzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) call gdsum(vom,3,buffer) -+ -+ vom(1)=vom(1)/totmas -+ vom(2)=vom(2)/totmas -+ vom(3)=vom(3)/totmas -+ -+ return -+ end subroutine getvom -+ -+ subroutine nvtscale -+ x (idnode,mxnode,natms,engke,sigma,tstep,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,sigma,tstep,qmass,chit,conint,scale,taut -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*qmass/taut**2 -+ -+c update chit to full step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+ return -+ end subroutine nvtscale -+ -+ subroutine nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,tstep,pmass,qmass,taut, -+ x chip,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith july 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,temp,sigma,tstep,pmass,qmass,chip,chit,conint,scale -+ real(8) taut -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) -+ -+c update chit to full step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+ return -+ end subroutine nptscale_t -+ -+ subroutine nptscale_p -+ x (idnode,mxnode,natms,engke,tstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT barostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm0,iatm1 -+ real(8) engke,tstep,pmass,chip,press,vircon,virtot -+ real(8) volm,scale,chit -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c propagate chip to 1/2 step -+ -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+c barostat the velocities -+ -+ scale=exp(-tstep*chip) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update volume parameter to full step -+ -+ volm=volm*exp(3.d0*tstep*chip) -+ -+c update chip to full step -+ -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+ return -+ end subroutine nptscale_p -+ -+ subroutine nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x tstep,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*qmass/taut**2 -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+tstep*(engke-sigma)/qmass -+ -+ return -+ end subroutine nvtqscl -+ -+ subroutine nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp,sigma, -+ x tstep,pmass,qmass,taut,chip,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip,pmass,temp -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 tstep -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full tstep -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp) -+ -+c update chit to full tstep -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip**2-boltz*temp)/qmass -+ -+ return -+ end subroutine nptqscl_t -+ -+ subroutine nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,tstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,i,ngrp,ntfree,igrp1,igrp2,ifre1,ifre2 -+ integer j,ig -+ real(8) engke,tstep,pmass,chip,press,vircon,virtot -+ real(8) vircom,volm,scale,engtrn,engfke,chit -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate chip to 1/2 tstep -+ -+ engke=engfke+engtrn -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+c barostat the free atom velocities -+ -+ scale=exp(-tstep*chip) -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ -+c update volume parameter to full tstep -+ -+ volm=volm*exp(3.d0*tstep*chip) -+ -+c update chip to full tstep -+ -+ engke=engfke+engtrn -+ chip=chip+0.5d0*tstep*(((2.d0*engke-virtot-vircon-vircom)- -+ x 3.d0*press*volm)/pmass-chip*chit) -+ -+ return -+ end subroutine nptqscl_p -+ -+ subroutine nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,tstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NST thermostat -+c -+c copyright daresbury laboratory -+c author - w.smith july 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 -+ real(8) engke,temp,sigma,tstep,pmass,qmass,chip2,chit,conint,scale -+ real(8) taut,fac(0:3) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engke=getkin(natms,idnode,mxnode) -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit) -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ engke=engke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+ return -+ end subroutine nstscale_t -+ -+ subroutine nstscale_p -+ x (idnode,mxnode,natms,mode,tstep,pmass,chit,press,volm) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,mode,i,iatm0,iatm1 -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c barostat the velocities -+ -+ do i=iatm0,iatm1 -+ -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c update volume to full time step -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c calculate kinetic energy and contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstscale_p -+ -+ subroutine nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,tstep,pmass,qmass,taut,chit,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig,mode -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip2,pmass,temp,fac(0:3) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+ return -+ end subroutine nstqscl_t -+ -+ subroutine nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),strgrp(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c subtract kinetic contribution from stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c barostat the free atom velocities -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c new system volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c add new kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqscl_p -+ -+ subroutine nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,tstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT thermostat -+c to atomic, group and quaternion momenta -+c -+c copyright daresbury laboratory -+c author - w.smith april 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,j,igrp1,igrp2,ifre1,ifre2 -+ integer ig,mode -+ real(8) engke,engtrn,engrot,engfke,sigma,tstep,qmass,chit,taut -+ real(8) conint,scale,chip2,pmass,temp,fac(0:3) -+ real(8) strkin(9),strgrp(9) -+ data fac/9.d0,3.d0,2.d0,5.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c remove old kinetic term from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c calculate kinetic energy -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn+engrot -+ -+c update chit to 1/2 step -+ -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c thermostat scale parameter -+ -+ scale=exp(-tstep*chit) -+ -+c thermostat free atoms -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=scale*omx(ig) -+ omy(ig)=scale*omy(ig) -+ omz(ig)=scale*omz(ig) -+ gvxx(ig)=scale*gvxx(ig) -+ gvyy(ig)=scale*gvyy(ig) -+ gvzz(ig)=scale*gvzz(ig) -+ -+ enddo -+ -+c scale kinetic energy -+ -+ engfke=engfke*scale**2 -+ engtrn=engtrn*scale**2 -+ engrot=engrot*scale**2 -+ -+c scale kinetic energy tensors -+ -+ do i=1,9 -+ -+ strkin(i)=strkin(i)*scale**2 -+ strgrp(i)=strgrp(i)*scale**2 -+ -+ enddo -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit*(qmass/taut**2+boltz*temp*fac(mode)) -+ -+c update chit to full step -+ -+ engke=engfke+engtrn+engrot -+ chit=chit+0.5d0*tstep*(2.d0*(engke-sigma)+ -+ x pmass*chip2-boltz*temp*fac(mode))/qmass -+ -+c add new kinetic terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ return -+ end subroutine nstqscl_t2 -+ -+ subroutine nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, -+ x strkin,strgrp) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c for system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit -+ real(8) strkin(9),strgrp(9),uni(9),celp(10) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c propagate barostat momentum to 1/2 step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c subtract kinetic contribution from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i)-strgrp(i) -+ enddo -+ -+c barostat the free atom velocities -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz) -+ -+ enddo -+ -+c new cell vectors -+ -+ call cell_update(tstep,cell,eta) -+ -+c new system volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c add new kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)- -+ x press*volm*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqscl_p2 -+ -+ subroutine cell_update(tstep,cell,eta) -+ -+c*********************************************************************** -+c -+c dlpoly utility to update the cell vectors in the hoover -+c nst algorithms (velocity verlet version) -+c -+c copyright daresbury laboratory -+c author w.smith july 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i -+ real(8) tstep,cell(9),eta(9),ctmp(9),uni(9) -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ do i=1,9 -+ ctmp(i)=uni(i)+tstep*eta(i) -+ enddo -+ -+ call mat_mul(ctmp,cell,cell) -+ -+ return -+ end subroutine cell_update -+ -+ subroutine cell_propagate(tstep,cell,eta) -+ -+c*********************************************************************** -+c -+c dlpoly utility to update the cell vectors in the hoover -+c nst algorithms (leapfrog version) -+c -+c copyright daresbury laboratory -+c author w.smith july 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i -+ real(8) tstep -+ real(8) cell(9),eta(9),aaa(9),bbb(9),uni(9) -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ do i=1,9 -+ aaa(i)=tstep*eta(i) -+ enddo -+ -+ call mat_mul(aaa,aaa,bbb) -+ -+ do i=1,9 -+ bbb(i)=uni(i)+aaa(i)+0.5d0*bbb(i) -+ enddo -+ -+ call mat_mul(bbb,cell,cell) -+ -+ return -+ end subroutine cell_propagate -+ -+ subroutine nstqmtk_p -+ x (idnode,mxnode,ntfree,ngrp,mode,tstep,pmass,chit,press,volm, -+ x engfke,engtrn,engrot,temp,sigma) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NPT anisotropic barostat -+c of martyna tobias and klein to atomic, group and quaternion -+c system with atomic sites and rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith may 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntfree,ngrp,i,igrp1,igrp2,ifre1,ifre2,ig,j -+ integer mode -+ real(8) tstep,pmass,press,volm,txx,tyy,tzz,chit,temp,sigma,degfre -+ real(8) engtke,engfke,engtrn,engrot,trace -+ real(8) strkin(9),strgrp(9),uni(9),ctmp(9) -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ degfre=2.d0*sigma/(temp*boltz) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c propagate barostat momentum to 1/2 step -+ -+ call invert(cell,ctmp,volm) -+ volm=abs(volm) -+ engtke=2.d0*(engfke+engtrn+engrot)/degfre -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ -+ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c barostat the free atom velocities -+ -+ trace=(eta(1)+eta(5)+eta(9))/degfre -+ -+ do j=ifre1,ifre2 -+ -+ i=lstfre(j) -+ txx=vxx(i) -+ tyy=vyy(i) -+ tzz=vzz(i) -+ vxx(i)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) -+ vyy(i)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) -+ vzz(i)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) -+ -+ enddo -+ -+c barostat the group translational velocities -+ -+ do ig=igrp1,igrp2 -+ -+ txx=gvxx(ig) -+ tyy=gvyy(ig) -+ tzz=gvzz(ig) -+ gvxx(ig)=txx-tstep*(eta(1)*txx+eta(4)*tyy+eta(7)*tzz+trace) -+ gvyy(ig)=tyy-tstep*(eta(2)*txx+eta(5)*tyy+eta(8)*tzz+trace) -+ gvzz(ig)=tzz-tstep*(eta(3)*txx+eta(6)*tyy+eta(9)*tzz+trace) -+ -+ enddo -+ -+c update volume to full time step -+ -+ volm=volm*exp(tstep*(eta(1)+eta(5)+eta(9))) -+ -+c calculate kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate new kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=2.d0*(engfke+engtrn+engrot)/degfre -+ -+c propagate barostat momentum to full step -+ -+ do i=1,9 -+ eta(i)=eta(i)+0.5d0*tstep*((stress(i)+strkin(i)+strgrp(i)+ -+ x (engtke-press*volm)*uni(i))/pmass-chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ return -+ end subroutine nstqmtk_p -+ -+ subroutine kinstr(idnode,mxnode,natms,tstep) -+ -+c*********************************************************************** -+c -+c dlpoly routine to calculate the kinetic energy contribution to -+c the stress tensor -+c -+c assumes velocities are half-timestep behind forces -+c -+c replicated data version / block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester may 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,i,iatm1,iatm2 -+ real(8) tstep,vxt,vyt,vzt -+ -+c block indices -+ -+ iatm1 = (idnode*natms)/mxnode + 1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ do i = iatm1,iatm2 -+ -+ if(rmass(i).gt.0.d0) then -+ -+ vxt = vxx(i)+fxx(i)*rmass(i)*tstep*0.5d0 -+ vyt = vyy(i)+fyy(i)*rmass(i)*tstep*0.5d0 -+ vzt = vzz(i)+fzz(i)*rmass(i)*tstep*0.5d0 -+ -+ stress(1)=stress(1)-weight(i)*vxt*vxt -+ stress(2)=stress(2)-weight(i)*vxt*vyt -+ stress(3)=stress(3)-weight(i)*vxt*vzt -+ stress(4)=stress(4)-weight(i)*vyt*vxt -+ stress(5)=stress(5)-weight(i)*vyt*vyt -+ stress(6)=stress(6)-weight(i)*vyt*vzt -+ stress(7)=stress(7)-weight(i)*vzt*vxt -+ stress(8)=stress(8)-weight(i)*vzt*vyt -+ stress(9)=stress(9)-weight(i)*vzt*vzt -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine kinstr -+ -+ function getkin(natms,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,i,iatm0,iatm1 -+ real(8) getkin,engke -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ engke=0.d0 -+ -+ do i=iatm0,iatm1 -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkin=0.5d0*engke -+ -+ return -+ end function getkin -+ -+ function getkinf(ntfree,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic energy of atoms not in -+c rigid bodies -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ntfree,idnode,mxnode,i,j,ifre0,ifre1 -+ real(8) getkinf,engke -+ -+ ifre0=(idnode*ntfree)/mxnode+1 -+ ifre1=((idnode+1)*ntfree)/mxnode -+ -+ engke=0.d0 -+ -+ do j=ifre0,ifre1 -+ -+ i=lstfre(j) -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkinf=0.5d0*engke -+ -+ return -+ end function getkinf -+ -+ subroutine getking(ngrp,idnode,mxnode,engtrn,engrot) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c amended - w.smith january 2005 : f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engtrn,engrot -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engtrn=0.d0 -+ engrot=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c group kinetic energy -+ -+ engtrn=engtrn+ -+ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) -+ -+c rotational kinetic energy -+ -+ engrot=engrot+(rotinx(id,1)*omx(ig)**2 -+ x +rotiny(id,1)*omy(ig)**2 -+ x +rotinz(id,1)*omz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+ buffer(5)=engtrn -+ buffer(6)=engrot -+ call gdsum(buffer(5),2,buffer(1)) -+ engtrn=buffer(5) -+ engrot=buffer(6) -+ -+ endif -+ -+ engtrn=0.5d0*engtrn -+ engrot=0.5d0*engrot -+ -+ return -+ end subroutine getking -+ -+ function getkint(ngrp,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate translational kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engtrn,getkint -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engtrn=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c group kinetic energy -+ -+ engtrn=engtrn+ -+ x gmass(id)*(gvxx(ig)**2+gvyy(ig)**2+gvzz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engtrn -+ call gdsum(buffer(1),1,buffer(2)) -+ engtrn=buffer(1) -+ -+ endif -+ -+ getkint=0.5d0*engtrn -+ -+ return -+ end function getkint -+ -+ function getkinr(ngrp,idnode,mxnode) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate rotational kinetic energy -+c for rigid groups only -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) engrot,getkinr -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ engrot=0.d0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c rotational kinetic energy -+ -+ engrot=engrot+(rotinx(id,1)*omx(ig)**2 -+ x +rotiny(id,1)*omy(ig)**2 -+ x +rotinz(id,1)*omz(ig)**2) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engrot -+ call gdsum(buffer(1),1,buffer(2)) -+ engrot=buffer(1) -+ -+ endif -+ -+ getkinr=0.5d0*engrot -+ -+ return -+ end function getkinr -+ -+ subroutine kinstress(natms,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author - w.smith november 2002 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,iatm0,iatm1,i -+ real(8) stresh(9) -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do i=iatm0,iatm1 -+ -+ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) -+ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) -+ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) -+ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) -+ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) -+ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstress -+ -+ subroutine kinstressg(ngrp,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c -+c********************************************************************* -+ -+ integer ngrp,idnode,mxnode,igrp1,igrp2,ig,id -+ real(8) stresh(9) -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ stresh(1)=stresh(1)+gmass(id)*gvxx(ig)*gvxx(ig) -+ stresh(2)=stresh(2)+gmass(id)*gvxx(ig)*gvyy(ig) -+ stresh(3)=stresh(3)+gmass(id)*gvxx(ig)*gvzz(ig) -+ stresh(5)=stresh(5)+gmass(id)*gvyy(ig)*gvyy(ig) -+ stresh(6)=stresh(6)+gmass(id)*gvyy(ig)*gvzz(ig) -+ stresh(9)=stresh(9)+gmass(id)*gvzz(ig)*gvzz(ig) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstressg -+ -+ subroutine getkins(natms,idnode,mxnode,getkin) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate system kinetic energy -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005: f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer natms,idnode,mxnode,iatm0,iatm1,i -+ real(8) getkin,engke -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ engke=0.d0 -+ -+ do i=iatm0,iatm1 -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ call gdsum(buffer(1),1,buffer(2)) -+ engke=buffer(1) -+ -+ endif -+ -+ getkin=0.5d0*engke -+ -+ return -+ end subroutine getkins -+ -+ subroutine kinstressf(ntfree,idnode,mxnode,stresh) -+ -+c********************************************************************* -+c -+c dl_poly routine to calculate kinetic contribution to the -+c stress tensor for unconstrained atoms -+c -+c copyright daresbury laboratory -+c author - m.leslie february 2003 -+c amended - w.smith january 2005: f90 conversion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer ntfree,idnode,mxnode,i,ifre1,ifre2,ifre -+ real(8) stresh(9) -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c initialise stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ stresh(1)=stresh(1)+weight(i)*vxx(i)*vxx(i) -+ stresh(2)=stresh(2)+weight(i)*vxx(i)*vyy(i) -+ stresh(3)=stresh(3)+weight(i)*vxx(i)*vzz(i) -+ stresh(5)=stresh(5)+weight(i)*vyy(i)*vyy(i) -+ stresh(6)=stresh(6)+weight(i)*vyy(i)*vzz(i) -+ stresh(9)=stresh(9)+weight(i)*vzz(i)*vzz(i) -+ -+ enddo -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c global sum of stress tensor -+ -+ if(mxnode.gt.1) call gdsum(stresh,9,buffer) -+ -+ return -+ end subroutine kinstressf -+ -+ subroutine nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,tstep,qmass_shl, -+ x taut,chit_shl,conint) -+ -+c********************************************************************* -+c -+c dl_poly routine to integrate and apply NVT thermostat -+c thermostats the core-shell relative motion -+c -+c copyright daresbury laboratory -+c author - w.smith october 2002 -+c amended - w.smith january 2005 : f90 conversion -+c adapted - d. quigley 2006 : core-shell motion -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,i,ishl1,ishl2,j,k,m -+ real(8) shlke,sigma_shl,tstep,qmass_shl,chit_shl,conint -+ real(8) dvx,dvy,dvz,tmx,tmy,tmz,rmu,scale,taut -+ -+ ishl1=(idnode*ntshl)/mxnode+1 -+ ishl2=((idnode+1)*ntshl)/mxnode -+ -+c calculate kinetic energy -+ -+ call corshl(idnode,mxnode,ntshl,shlke) -+ -+c update chit to 1/2 step -+ -+ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl -+ -+c thermostat the velocities -+ -+ scale=exp(-tstep*chit_shl) -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) -+ -+ if(rmu.gt.0.d0)then -+ -+ dvx=vxx(j)-vxx(i) -+ dvy=vyy(j)-vyy(i) -+ dvz=vzz(j)-vzz(i) -+ -+ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) -+ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) -+ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) -+ -+ vxx(i)=tmx/(weight(i)+weight(j))-scale*rmu*dvx/weight(i) -+ vxx(j)=tmx/(weight(i)+weight(j))+scale*rmu*dvx/weight(j) -+ vyy(i)=tmy/(weight(i)+weight(j))-scale*rmu*dvy/weight(i) -+ vyy(j)=tmy/(weight(i)+weight(j))+scale*rmu*dvy/weight(j) -+ vzz(i)=tmz/(weight(i)+weight(j))-scale*rmu*dvz/weight(i) -+ vzz(j)=tmz/(weight(i)+weight(j))+scale*rmu*dvz/weight(j) -+ -+ endif -+ -+ enddo -+ -+ shlke=shlke*scale**2 -+ -+c update chi to full step -+ -+ conint=conint+tstep*chit_shl*qmass_shl/taut**2 -+ -+c update chit to full step -+ -+ chit_shl=chit_shl+tstep*(shlke-sigma_shl)/qmass_shl -+ -+ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) -+ -+ return -+ end subroutine nvtscale_shl -+ -+ end module ensemble_tools_module -+ -diff -urN dl_class_1.9.orig/srcmod/error_module.f dl_class_1.9/srcmod/error_module.f ---- dl_class_1.9.orig/srcmod/error_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/error_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1513 @@ -+ module error_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond potentials -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ contains -+ -+ subroutine error(idnode,iode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for printing error messages and bringing -+c about a controlled termination of the program -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c warning - this routine terminates the job. user must ensure -+c that all nodes are informed of error condition before this -+c subroutine is called. e.g. using subroutine gstate(). -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ logical kill -+ integer idnode,iode,kode -+ -+ kill=(iode.ge.0) -+ kode = abs(iode) -+ -+ if(idnode.eq.0)then -+ -+ if(kill)then -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY terminated due to error ', kode -+ -+ else -+ -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY will terminate due to error ', kode -+ -+ endif -+ -+ if(kode.lt.50)then -+ -+ if(kode.eq. 0)then -+ -+c dummy entry -+ -+ elseif(kode.eq. 3)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown directive found in CONTROL file' -+ elseif(kode.eq. 4)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown directive found in FIELD file' -+ elseif(kode.eq. 5)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown energy unit requested' -+ elseif(kode.eq. 6)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - energy unit not specified' -+ elseif(kode.eq. 7)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - energy unit respecified' -+ elseif(kode.eq. 8)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - time step not specified' -+ elseif(kode.eq.10)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many molecule types specified' -+ elseif(kode.eq.11)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate molecule directive in FIELD file' -+ elseif(kode.eq.12)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown molecule directive in FIELD file' -+ elseif(kode.eq.13)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - molecular species not yet specified' -+ elseif(kode.eq.14)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many unique atom types specified' -+ elseif(kode.eq.15)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate pair potential specified' -+ elseif(kode.eq.16)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from FIELD file processing' -+ elseif(kode.eq.17)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from CONTROL file processing' -+ elseif(kode.eq.18)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate 3-body potential specified' -+ elseif(kode.eq.19)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate 4-body potential specified' -+ elseif(kode.eq.20)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many molecule sites specified' -+ elseif(kode.eq.21)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate tersoff potential specified' -+ elseif(kode.eq.22)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unsuitable radial increment in TABLE file' -+ elseif(kode.eq.23)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incompatible FIELD and TABLE file potentials' -+ elseif(kode.eq.24)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABLE file' -+ elseif(kode.eq.25)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - wrong atom type found in CONFIG file' -+ elseif(kode.eq.26)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cutoff smaller than EAM potential range' -+ elseif(kode.eq.27)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incompatible FIELD and TABEAM file potentials' -+ elseif(kode.eq.28)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in mettab' -+ elseif(kode.eq.29)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABEAM file' -+ elseif(kode.eq.30)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many chemical bonds specified' -+ elseif(kode.eq.31)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many chemical bonds in system' -+ elseif(kode.eq.32)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - integer array memory allocation failure' -+ elseif(kode.eq.33)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - real array memory allocation failure' -+ elseif(kode.eq.34)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - character array memory allocation failure' -+ elseif(kode.eq.35)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - logical array memory allocation failure' -+ elseif(kode.eq.36)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - failed fmet array allocation in mettab' -+ elseif(kode.eq.40)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond constraints specified' -+ elseif(kode.eq.41)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond constraints in system' -+ elseif(kode.eq.42)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in merge1' -+ elseif(kode.eq.45)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many atoms in CONFIG file' -+ elseif(kode.eq.46)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - ewlbuf array too small in ewald1' -+ elseif(kode.eq.47)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in merge' -+ elseif(kode.eq.48)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer too small in fortab' -+ elseif(kode.eq.49)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - frozen core-shell unit specified' -+ endif -+ -+ elseif(kode.lt.100)then -+ -+ if(kode.eq.50)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond angles specified' -+ elseif(kode.eq.51)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many bond angles in system' -+ elseif(kode.eq.52)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of FIELD file encountered' -+ elseif(kode.eq.53)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of CONTROL file encountered' -+ elseif(kode.eq.54)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - problem reading CONFIG file' -+ elseif(kode.eq.55)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of CONFIG file encountered' -+ elseif(kode.eq.57)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many core-shell units specified' -+ elseif(kode.eq.59)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many core-shell units in system' -+ elseif(kode.eq.60)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many dihedral angles specified' -+ elseif(kode.eq.61)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many dihedral angles in system' -+ elseif(kode.eq.62)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tethered atoms specified' -+ elseif(kode.eq.63)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tethered atoms in system' -+ elseif(kode.eq.65)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many excluded pairs specified' -+ elseif(kode.eq.66)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition for HK ewald' -+ elseif(kode.eq.67)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in thbfrc' -+ elseif(kode.eq.69)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells required in thbfrc' -+ elseif(kode.eq.70)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - constraint bond quench failure' -+ elseif(kode.eq.71)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many metal potentials specified' -+ elseif(kode.eq.72)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - different metal potential types specified' -+ elseif(kode.eq.73)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many inversion potentials specified' -+ elseif(kode.eq.75)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many atoms in specified system' -+ elseif(kode.eq.77)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many inversion potentials in system' -+ elseif(kode.eq.79)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in fbpfrc' -+ elseif(kode.eq.80)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many pair potentials specified' -+ elseif(kode.eq.81)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in pair potential list' -+ elseif(kode.eq.82)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated pair potential index too large' -+ elseif(kode.eq.83)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many three body potentials specified' -+ elseif(kode.eq.84)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in 3-body potential list' -+ elseif(kode.eq.85)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - required velocities not in CONFIG file' -+ elseif(kode.eq.86)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated 3-body potential index too large' -+ elseif(kode.eq.87)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells required in fbpfrc' -+ elseif(kode.eq.88)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many tersoff potentials specified' -+ elseif(kode.eq.89)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many four body potentials specified' -+ elseif(kode.eq.90)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - system total electric charge nonzero' -+ elseif(kode.eq.91)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in 4-body potential list' -+ elseif(kode.eq.92)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in tersoff potential list' -+ elseif(kode.eq.93)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with rigid molecules' -+ elseif(kode.eq.95)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - potential cutoff exceeds half-cell width' -+ elseif(kode.eq.97)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with neutral groups' -+ elseif(kode.eq.99)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cannot use shell model with constraints' -+ endif -+ -+ elseif(kode.lt.150)then -+ -+ if(kode.eq.100)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - forces working arrays too small' -+ elseif(kode.eq.101)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated 4-body potential index too large' -+ elseif(kode.eq.102)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxproc exceeded in shake arrays' -+ elseif(kode.eq.103)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxlshp exceeded in shake arrays' -+ elseif(kode.eq.105)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - shake algorithm failed to converge' -+ elseif(kode.eq.106)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlink ' -+ x //'subroutine' -+ elseif(kode.eq.107)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlinkneu ' -+ x //'subroutine' -+ elseif(kode.eq.108)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parneulst ' -+ x //'subroutine' -+ elseif(kode.eq.109)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlst_nsq ' -+ x //'subroutine' -+ elseif(kode.eq.110)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neighbour list array too small in parlst ' -+ x //'subroutine' -+ elseif(kode.eq.112)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - vertest array too small' -+ elseif(kode.eq.120)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - invalid determinant in matrix inversion' -+ elseif(kode.eq.130)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect octahedral boundary condition' -+ elseif(kode.eq.135)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect hexagonal prism boundary condition' -+ elseif(kode.eq.140)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect dodecahedral boundary condition' -+ elseif(kode.eq.141)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - duplicate metal potential specified' -+ elseif(kode.eq.142)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - interpolation outside range of metal '// -+ x 'potential attempted' -+ elseif(kode.eq.145)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - no van der waals potentials defined' -+ endif -+ -+ elseif(kode.lt.200)then -+ -+ if(kode.eq.150)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown van der waals potential selected' -+ elseif(kode.eq.151)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unknown metal potential selected' -+ elseif(kode.eq.153)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - metals not permitted with multiple timestep' -+ elseif(kode.eq.160)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unaccounted for atoms in exclude list ' -+ elseif(kode.eq.170)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many variables for statistic array ' -+ elseif(kode.eq.180)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - Ewald sum requested in non-periodic system' -+ elseif(kode.eq.185)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many reciprocal space vectors' -+ elseif(kode.eq.186)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer array too small in sysgen' -+ elseif(kode.eq.190)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - buffer array too small in splice' -+ endif -+ -+ elseif(kode.lt.250)then -+ -+ if(kode.eq.200)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - rdf buffer array too small in revive' -+ elseif(kode.eq.220)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many neutral groups in system' -+ elseif(kode.eq.225)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - multiple selection of optimisation options' -+ elseif(kode.eq.230)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neutral groups improperly arranged' -+ endif -+ -+ elseif(kode.lt.300)then -+ -+ if(kode.eq.250)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - Ewald sum requested with neutral groups' -+ elseif(kode.eq.260)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - parameter mxexcl exceeded in excludeneu routine' -+ endif -+ -+ elseif(kode.lt.350)then -+ -+ if(kode.eq.300)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect boundary condition in parlink' -+ elseif(kode.eq.301)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid body types ' -+ elseif(kode.eq.302)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many sites in rigid body ' -+ elseif(kode.eq.303)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid bodies specified' -+ elseif(kode.eq.304)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many rigid body sites in system ' -+ elseif(kode.eq.305)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - box size too small for link cells' -+ elseif(kode.eq.306)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - failed to find principal axis system' -+ elseif(kode.eq.310)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - quaternion setup failed ' -+ elseif(kode.eq.320)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - site in multiple rigid bodies' -+ elseif(kode.eq.321)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - quaternion integrator failed' -+ elseif(kode.eq.330)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxewld parameter incorrect' -+ elseif(kode.eq.331)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxhke parameter incorrect' -+ elseif(kode.eq.332)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxhko parameter too small' -+ elseif(kode.eq.340)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - invalid integration option requested' -+ endif -+ -+ elseif(kode.lt.400)then -+ -+ if(kode.eq.350)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too few degrees of freedom' -+ elseif(kode.eq.360)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - frozen atom found in rigid body' -+ elseif(kode.eq.380)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation temperature not specified' -+ elseif(kode.eq.381)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation timestep not specified' -+ elseif(kode.eq.382)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation cutoff not specified' -+ elseif(kode.eq.383)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - simulation forces option not specified' -+ elseif(kode.eq.384)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - verlet strip width not specified' -+ elseif(kode.eq.385)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - primary cutoff not specified' -+ elseif(kode.eq.386)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - primary cutoff larger than rcut' -+ elseif(kode.eq.387)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - system pressure not specified' -+ elseif(kode.eq.388)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - npt incompatible with multiple timestep' -+ elseif(kode.eq.389)then -+ write(nrite,'(/,/,1x,a)') -+ x 'number of pimd beads not specified in field file' -+ elseif(kode.eq.390)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - npt ensemble requested in non-periodic system' -+ elseif(kode.eq.391)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - incorrect number of pimd beads in config file' -+ elseif(kode.eq.392)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many link cells requested' -+ elseif(kode.eq.394)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - minimum image arrays exceeded' -+ elseif(kode.eq.396)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - interpolation array exceeded' -+ elseif(kode.eq.398)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cutoff too small for rprim and delr' -+ endif -+ -+ elseif(kode.lt.450)then -+ -+ if(kode.eq.400)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - rvdw greater than cutoff' -+ elseif(kode.eq.402)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - van der waals cutoff unset' -+ elseif(kode.eq.410)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - cell not consistent with image convention' -+ elseif(kode.eq.412)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - mxxdf parameter too small for shake routine' -+ elseif(kode.eq.414)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - conflicting ensemble options in CONTROL file' -+ elseif(kode.eq.416)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - conflicting force options in CONTROL file' -+ elseif(kode.eq.418)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in bndfrc' -+ elseif(kode.eq.419)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in angfrc' -+ elseif(kode.eq.420)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in tethfrc' -+ elseif(kode.eq.421)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in dihfrc' -+ elseif(kode.eq.422)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - all-pairs must use multiple timestep' -+ elseif(kode.eq.423)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in shlfrc' -+ elseif(kode.eq.424)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - electrostatics incorrect for all-pairs' -+ elseif(kode.eq.425)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - transfer buffer array too small in shlmerge' -+ elseif(kode.eq.426)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - neutral groups not permitted with all-pairs' -+ elseif(kode.eq.427)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - bond vector work arrays too small in invfrc' -+ elseif(kode.eq.430)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - integration routine not available' -+ elseif(kode.eq.432)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - intlist failed to assign constraints ' -+ elseif(kode.eq.433)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - specify rcut before the Ewald sum precision' -+ elseif(kode.eq.434)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - illegal entry into STRESS related routine' -+ elseif(kode.eq.435)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - specify rcut before the coulomb precision' -+ elseif(kode.eq.436)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unrecognised ensemble ' -+ elseif(kode.eq.438)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - PMF constraints failed to converge' -+ elseif(kode.eq.440)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined angular potential' -+ elseif(kode.eq.442)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined three body potential' -+ elseif(kode.eq.443)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined four body potential' -+ elseif(kode.eq.444)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined bond potential' -+ elseif(kode.eq.445)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined many body potential' -+ elseif(kode.eq.446)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined electrostatic key in dihfrc' -+ elseif(kode.eq.447)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - 1-4 separation exceeds cutoff range' -+ elseif(kode.eq.448)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined dihedral potential' -+ elseif(kode.eq.449)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined inversion potential' -+ endif -+ -+ elseif(kode.lt.500)then -+ -+ if(kode.eq.450)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined tethering potential' -+ elseif(kode.eq.451)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - three body potential cutoff undefined' -+ elseif(kode.eq.452)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined pair potential' -+ elseif(kode.eq.453)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - four body potential cutoff undefined' -+ elseif(kode.eq.454)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined external field' -+ elseif(kode.eq.456)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - core and shell in same rigid unit' -+ elseif(kode.eq.458)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many PMF constraints - param. mspmf too ' -+ x //'small' -+ elseif(kode.eq.460)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - too many PMF sites - parameter mxspmf too small' -+ elseif(kode.eq.461)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - undefined metal potential' -+ elseif(kode.eq.462)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - PMF UNIT record expected' -+ elseif(kode.eq.463)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - unidentified atom in metal potential list' -+ elseif(kode.eq.464)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - thermostat time constant must be > 0.d0' -+ elseif(kode.eq.465)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - calculated pair potential index too large' -+ elseif(kode.eq.466)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - barostat time constant must be > 0.d0' -+ elseif(kode.eq.468)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - r0 too large for snm potential with current ' -+ x //'cutoff' -+ elseif(kode.eq.470)then -+ write(nrite,'(/,/,1x,a)') -+ x 'error - n= ',nsatms -+ call error(idnode,100) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c variables for array bound checking -+ -+ ibig=0 -+ safe=.true. -+ -+c initialise excluded atom arrays -+ -+ do i=1,mxsite -+ -+ nexsit(i)=0 -+ -+ enddo -+ -+ do i=1,msatms -+ -+ nexatm(i)=0 -+ -+ enddo -+ -+ do j=1,mxexcl -+ -+ do i=1,mxsite -+ -+ lexsit(i,j)=0 -+ -+ enddo -+ -+ do i=1,msatms -+ -+ lexatm(i,j)=0 -+ -+ enddo -+ -+ enddo -+ -+ -+c loop over molecules in system -+ -+ ibonds=0 -+ iangle=0 -+ iconst=0 -+ idihdr=0 -+ invers=0 -+ igrp =0 -+ isite =0 -+ ishels=0 -+ -+ do itmols=1,ntpmls -+ -+c exclude sites on basis of chemical bonds -+ -+ do i=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(keybnd(ibonds).gt.0)then -+ -+ ia=lstbnd(ibonds,1)+isite -+ ib=lstbnd(ibonds,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of bond constraints -+ -+ do i=1,numcon(itmols) -+ -+ iconst=iconst+1 -+ ia=lstcon(iconst,1)+isite -+ ib=lstcon(iconst,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ enddo -+ -+c exclude sites on basis of bond angles -+ -+ do i=1,numang(itmols) -+ -+ iangle=iangle+1 -+ if(keyang(iangle).gt.0)then -+ ia=lstang(iangle,1)+isite -+ ib=lstang(iangle,2)+isite -+ ic=lstang(iangle,3)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude on basis of rigid groups -+ -+ do i=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ id=listyp(igrp) -+ -+ do jj=1,numgsit(id)-1 -+ -+ ia=lstgst(igrp,jj)+isite -+ -+ do jk=jj+1,numgsit(id) -+ -+ ib=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c exclude sites on basis of 1-4 dihedral angles -+ -+ do i=1,numdih(itmols) -+ -+ idihdr=idihdr+1 -+ ia=lstdih(idihdr,1)+isite -+ ib=lstdih(idihdr,2)+isite -+ ic=lstdih(idihdr,3)+isite -+ id=lstdih(idihdr,4)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+c id - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ib-isite -+ lexsit(ib,nexsit(ib))=id-isite -+ endif -+ endif -+ -+c id - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ic-isite -+ lexsit(ic,nexsit(ic))=id-isite -+ endif -+ endif -+ -+c ia - id interaction: may need to reset vdw and elec scale factors -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.id-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(id)=nexsit(id)+1 -+ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(id)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=id-isite -+ lexsit(id,nexsit(id))=ia-isite -+ endif -+ -+ elseif(keydih(idihdr).ne.7)then -+ -+c if already excluded reset 1..4 vdw and coulombic scale factors -+ -+ check=((abs(prmdih(idihdr,4)).gt.1.d-10).or. -+ x (abs(prmdih(idihdr,5)).gt.1.d-10)) -+ -+ if(check)then -+ -+ a1=dble(itmols) -+ a2=dble(ia) -+ a3=dble(id) -+ call warning(idnode,20,a1,a2,a3) -+ -+ prmdih(idihdr,4)=0.d0 -+ prmdih(idihdr,5)=0.d0 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of inversion potentials -+ -+ do i=1,numinv(itmols) -+ -+ invers=invers+1 -+ ia=lstinv(invers,1)+isite -+ ib=lstinv(invers,2)+isite -+ ic=lstinv(invers,3)+isite -+ id=lstinv(invers,4)+isite -+ -+c check if already added to lists .. -+c ia - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c ib - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib),mxexcl) -+ if(lexsit(ib,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib)=nexsit(ib)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ib),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ib,nexsit(ib))=ic-isite -+ lexsit(ic,nexsit(ic))=ib-isite -+ endif -+ endif -+ -+c ia - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(ia),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ic-isite -+ lexsit(ic,nexsit(ic))=ia-isite -+ endif -+ endif -+ -+c id - ib interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(id),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ib-isite -+ lexsit(ib,nexsit(ib))=id-isite -+ endif -+ endif -+ -+c id - ic interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(id),mxexcl) -+ if(lexsit(id,jz).eq.ic-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(id)=nexsit(id)+1 -+ nexsit(ic)=nexsit(ic)+1 -+ if(max(nexsit(id),nexsit(ic)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(id),nexsit(ic)) -+ safe=.false. -+ else -+ lexsit(id,nexsit(id))=ic-isite -+ lexsit(ic,nexsit(ic))=id-isite -+ endif -+ endif -+ -+c ia - id interaction -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.id-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(id)=nexsit(id)+1 -+ if(max(nexsit(ia),nexsit(id)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(id)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=id-isite -+ lexsit(id,nexsit(id))=ia-isite -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of core-shell units -+ -+ do i=1,numshl(itmols) -+ -+ ishels=ishels+1 -+ -+ ia=lstshl(ishels,1)+isite -+ ib=lstshl(ishels,2)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib-isite -+ lexsit(ib,nexsit(ib))=ia-isite -+ endif -+ endif -+ -+c exclude sites on basis of bonds to core-shell units -+ -+ ibonds=ibonds-numbonds(itmols) -+ do kk=1,numbonds(itmols) -+ -+ ibonds=ibonds+1 -+ -+ if(keybnd(ibonds).gt.0)then -+ -+ ia1=lstbnd(ibonds,1)+isite -+ ib1=lstbnd(ibonds,2)+isite -+ -+ if(ia.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ia.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia1),mxexcl) -+ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia1)=nexsit(ia1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia1,nexsit(ia1))=ib-isite -+ lexsit(ib,nexsit(ib))=ia1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ib.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ endif -+ -+ endif -+ if(ib.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ia1)=nexsit(ia1)+1 -+ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ia1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ia1-isite -+ lexsit(ia1,nexsit(ia1))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of constraint bonds to core-shell units -+ -+ iconst=iconst-numcon(itmols) -+ do kk=1,numcon(itmols) -+ -+ iconst=iconst+1 -+ -+ ia1=lstcon(iconst,1)+isite -+ ib1=lstcon(iconst,2)+isite -+ -+ if(ia.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ia.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia1),mxexcl) -+ if(lexsit(ia1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia1)=nexsit(ia1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ia1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ia1,nexsit(ia1))=ib-isite -+ lexsit(ib,nexsit(ib))=ia1-isite -+ endif -+ endif -+ -+ endif -+ -+ if(ib.eq.ia1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ endif -+ -+ endif -+ if(ib.eq.ib1)then -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ia1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ia1)=nexsit(ia1)+1 -+ if(max(nexsit(ia),nexsit(ia1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ia1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ia1-isite -+ lexsit(ia1,nexsit(ia1))=ia-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+c exclude sites on basis of rigid units involving core or shell -+ -+ igrp=igrp-numgrp(itmols) -+ do kk=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ id=listyp(igrp) -+ -+ do jj=1,numgsit(id) -+ -+ ia1=lstgst(igrp,jj)+isite -+ if(ia1.eq.ia)then -+ -+ do jk=1,numgsit(id) -+ -+ if(jk.ne.jj)then -+ ib1=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ib1),mxexcl) -+ if(lexsit(ib1,jz).eq.ib-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ib1)=nexsit(ib1)+1 -+ nexsit(ib)=nexsit(ib)+1 -+ if(max(nexsit(ib1),nexsit(ib)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ib1),nexsit(ib)) -+ safe=.false. -+ else -+ lexsit(ib1,nexsit(ib1))=ib-isite -+ lexsit(ib,nexsit(ib))=ib1-isite -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ if(ia1.eq.ib)then -+ -+ do jk=1,numgsit(id) -+ -+ if(jk.ne.jj)then -+ ib1=lstgst(igrp,jk)+isite -+ -+c check interaction not already included -+ -+ lchk=.true. -+ do jz=1,min(nexsit(ia),mxexcl) -+ if(lexsit(ia,jz).eq.ib1-isite)lchk=.false. -+ enddo -+ if(lchk)then -+ nexsit(ia)=nexsit(ia)+1 -+ nexsit(ib1)=nexsit(ib1)+1 -+ if(max(nexsit(ia),nexsit(ib1)).gt.mxexcl)then -+ ibig=max(ibig,nexsit(ia),nexsit(ib1)) -+ safe=.false. -+ else -+ lexsit(ia,nexsit(ia))=ib1-isite -+ lexsit(ib1,nexsit(ib1))=ia-isite -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ isite=isite+numsit(itmols) -+ -+ enddo -+ -+ ntpsit=isite -+ -+c check for exceeded array bounds -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ if(mxnode.gt.1)call gimax(ibig,1,jj) -+ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl -+ call error(idnode,65) -+ endif -+ -+c remove redundant entries from exclusion list -+c (there shouldn't be any!) -+ -+ do i=1,ntpsit -+ -+ nlast=nexsit(i) -+ do j=1,nexsit(i)-1 -+ -+ if(j.lt.nlast)then -+ -+ kk=j -+ do k=j+1,nexsit(i) -+ -+ if(lexsit(i,j).eq.lexsit(i,k))then -+ -+ nlast=nlast-1 -+ lexsit(i,k)=0 -+ -+ else if(lexsit(i,k).gt.0)then -+ -+ kk=kk+1 -+ lexsav=lexsit(i,k) -+ lexsit(i,k)=0 -+ lexsit(i,kk)=lexsav -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ nexsit(i)=nlast -+ -+ enddo -+ -+ -+ return -+ end subroutine exclude -+ -+ subroutine excludeneu(idnode,mxnode,nneut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c part 2 - neutral group implementation -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ implicit none -+ -+ logical lchk -+ integer idnode,mxnode,nneut,ibig,iatom,jatom,last,mpm2 -+ integer npm2,m,ii,im,itmols,inoff,isoff,isit,iolsit,jm,jtmols -+ integer jnoff,jsoff,jsit,jolsit,jn1,jno1,jsite,jsite0,in1,ino1 -+ integer jj0,isite,ij,idum,it -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ ibig=0 -+ iatom=0 -+ jatom=0 -+ -+c generate all atomic pairs and check for exclusions -+c with Brode Ahlrichs ordering of groups -+ -+ last=nneut -+ lchk=.true. -+ mpm2=nneut/2+1 -+ npm2=(nneut-1)/2+1 -+ -+c outer loop over groups -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2-1 -+ -+c inner loop over groups - include intragroup interactions -+ -+ ii=0 -+ -+ do im=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ -+c first site in neutral group -+ -+ itmols=1 -+ inoff=0 -+ isoff=0 -+ isit=numsit(itmols)*nummols(itmols) -+ iolsit=numsit(itmols) -+ -+c calculate j group indices -+ -+ jm=im+m-1 -+ if(jm.gt.nneut)jm=jm-nneut -+ -+c inner loop over neutral groups -+ -+ jtmols=1 -+ jnoff=0 -+ jsoff=0 -+ jsit=numsit(jtmols)*nummols(jtmols) -+ jolsit=numsit(jtmols) -+ -+c test first sites in neutral group -+ -+ jatom=neulst(jm) -+ -+c establish pointer to sets -+ -+ do while(jatom.gt.jsit) -+ -+ jtmols=jtmols+1 -+ jnoff=jsit -+ jsoff=jsoff+jolsit -+ jsit=jsit+nummols(jtmols)*numsit(jtmols) -+ jolsit=numsit(jtmols) -+ -+ enddo -+ -+ jn1=jatom-jnoff -+ jno1=(jn1/jolsit)*jolsit -+ jsite=jn1-jno1 -+ if(jsite.eq.0)then -+ jsite=jolsit -+ jno1=jno1-jolsit -+ endif -+ jsite=jsite+jsoff -+ jsite0=jsite-1 -+ -+ do iatom=neulst(im),neulst(im+1)-1 -+ -+c establish pointer to sets -+ -+ do while(iatom.gt.isit) -+ -+ itmols=itmols+1 -+ inoff=isit -+ isoff=isoff+iolsit -+ isit=isit+nummols(itmols)*numsit(itmols) -+ iolsit=numsit(itmols) -+ -+ enddo -+ -+ in1=iatom-inoff -+ ino1=(in1/iolsit)*iolsit -+ isite=in1-ino1 -+ if(isite.eq.0)then -+ isite=iolsit -+ ino1=ino1-iolsit -+ endif -+ isite=isite+isoff -+ -+c test im and jm are neutral groups on same molecule -+ -+ if((jnoff.eq.inoff).and.(ino1.eq.jno1))then -+ if(abs(im-jm).lt.iolsit)then -+ -+ jj0=neulst(jm) -+ jsite=jsite0 -+ -+c special case for im=jm (ie. same group) -+ -+ if(im.eq.jm)then -+ -+ jj0=iatom+1 -+ jsite=isite -+ -+ endif -+ -+c test for excluded interaction -+ -+ do jatom=jj0,neulst(jm+1)-1 -+ -+ jsite=jsite+1 -+ -+ do ij=1,nexsit(isite) -+ -+ if(lexsit(isite,ij).eq.jsite-jsoff)then -+ -+ it=nexatm(ii) -+ -+ if(it+2.gt.mxexcl)then -+ -+ ibig=max(it+2,ibig) -+ nexatm(ii)=it+2 -+ lchk=.false. -+ -+ else -+ -+ lexatm(ii,it+1)=iatom -+ lexatm(ii,it+2)=jatom -+ nexatm(ii)=nexatm(ii)+2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c global check -+ -+ call gstate(lchk) -+ if(.not.lchk)then -+ -+ if(mxnode.gt.1)call gimax(ibig,1,idum) -+ if(idnode.eq.0)write(nrite,*)'mxexcl must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxexcl is currently ',mxexcl -+ call error(idnode,260) -+ -+ endif -+ -+ return -+ end subroutine excludeneu -+ -+ subroutine exclude_link(idnode,mxnode,ntpmls) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c -+c part 2 - link cell implementation -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith june 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntpmls,iatom,jatom,lsite,ksite -+ integer itmols,imols,isite,kk,newatm,k -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ iatom=0 -+ jatom=0 -+ lsite=0 -+ ksite=0 -+ -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do isite=1,numsit(itmols) -+ -+ iatom=iatom+1 -+ -+ if(mod(iatom-1,mxnode).eq.idnode)then -+ -+ kk=0 -+ jatom=jatom+1 -+ -+ do k=1,nexsit(ksite+isite) -+ -+ newatm=lexsit(ksite+isite,k)+lsite -+ -+ kk=kk+1 -+ lexatm(jatom,kk)=newatm -+ -+ enddo -+ -+ nexatm(jatom)=kk -+ -+ endif -+ -+ enddo -+ -+ lsite=lsite+numsit(itmols) -+ -+ enddo -+ -+ ksite=ksite+numsit(itmols) -+ -+ enddo -+ -+ return -+ end subroutine exclude_link -+ -+ subroutine exclude_atom(idnode,mxnode,natms,ntpmls) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the excluded pair -+c interaction list of the system to be simulated -+c part 2 -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith june 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,ntpmls,iatom,jatom,lsite -+ integer ksite,itmols,isite,imols,k,kk,newatm,j,latom,i,ii -+ -+c construct excluded pair list for verlet neighbour correction -+ -+ iatom=0 -+ jatom=0 -+ lsite=0 -+ ksite=0 -+ -+ do itmols=1,ntpmls -+ -+ do imols=1,nummols(itmols) -+ -+ do isite=1,numsit(itmols) -+ -+ iatom=iatom+1 -+ -+ if(mod(iatom-1,mxnode).eq.idnode)then -+ -+ kk=0 -+ jatom=jatom+1 -+ -+ do k=1,nexsit(ksite+isite) -+ -+ newatm=lexsit(ksite+isite,k)+lsite -+ -+c keep only brode-ahlrichs combinations of indices -+ -+ if(((newatm.gt.iatom).and. -+ x (newatm-iatom.le.natms/2)).or. -+ x ((newatm.lt.iatom).and. -+ x (newatm+natms-iatom.le.(natms-1)/2)))then -+ -+ kk=kk+1 -+ lexatm(jatom,kk)=newatm -+ -+ if(kk.gt.1)then -+ -+c sort the excluded atom list in ascending indices -+ -+ do j=kk,2,-1 -+ -+ if(lexatm(jatom,j).lt.lexatm(jatom,j-1)) -+ x then -+ latom=lexatm(jatom,j) -+ lexatm(jatom,j)=lexatm(jatom,j-1) -+ lexatm(jatom,j-1)=latom -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ nexatm(jatom)=kk -+ -+ endif -+ -+ enddo -+ -+ lsite=lsite+numsit(itmols) -+ -+ enddo -+ -+ ksite=ksite+numsit(itmols) -+ -+ enddo -+ -+c final sort into brode-ahlrichs ordering -+ -+ ii=0 -+ do i=1+idnode,natms,mxnode -+ -+ ii=ii+1 -+ do j=1,nexatm(ii) -+ -+ if(lexatm(ii,1).lt.i)then -+ -+ latom=lexatm(ii,1) -+ -+ do k=1,nexatm(ii)-1 -+ -+ lexatm(ii,k)=lexatm(ii,k+1) -+ -+ enddo -+ -+ lexatm(ii,nexatm(ii))=latom -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine exclude_atom -+ -+ subroutine exclude_copy_mtd(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for copying excluded atom arrays into -+c the metadynamics module for use in computing order parameters -+c -+c author - d. quigley April 2012 -+c -+c*********************************************************************** -+ use metafreeze_module, only : mtd_lexatm,mtd_nexatm -+ implicit none -+ integer, parameter :: nnn=2 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c data needed by metadynamics module -+ allocate (mtd_lexatm(msatms,mxexcl),stat=fail(1)) -+ allocate (mtd_nexatm(msatms) ,stat=fail(2)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0) call error(idnode,1012) -+ enddo -+ -+ -+c copy exclude list into metafreeze module -+ mtd_nexatm = nexatm -+ mtd_lexatm = lexatm -+ -+ return -+ end subroutine exclude_copy_mtd -+ -+ end module exclude_module -+ -diff -urN dl_class_1.9.orig/srcmod/external_field_module.f dl_class_1.9/srcmod/external_field_module.f ---- dl_class_1.9.orig/srcmod/external_field_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/external_field_module.f 2014-02-27 13:49:34.000000000 +0100 -@@ -0,0 +1,347 @@ -+ module external_field_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining external field potential arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmfld(:) -+ -+ save prmfld -+ -+ contains -+ -+ subroutine alloc_fld_arrays(idnode) -+ -+ implicit none -+ -+ integer fail,idnode -+ -+ data fail/0/ -+ -+ allocate (prmfld(mxfld),stat=fail) -+ if(fail.ne.0)call error(idnode,1200) -+ -+ end subroutine alloc_fld_arrays -+ -+ subroutine define_external_field -+ x (safe,lunits,idnode,keyfld,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to define external fields -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c amended - p.-l. chau jun 2009 z-restraint option -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,keyfld,nfld,i,k,idum -+ real(8) engunit -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call strip(record,lenrec) -+ call lowcase(record,lenrec) -+ call copystring(record,message,80) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'elec') then -+ keyfld=1 -+ elseif(keyword(1:4).eq.'oshr') then -+ keyfld=2 -+ elseif(keyword(1:4).eq.'shrx') then -+ keyfld=3 -+ elseif(keyword(1:4).eq.'grav') then -+ keyfld=4 -+ elseif(keyword(1:4).eq.'magn') then -+ keyfld=5 -+ elseif(keyword(1:4).eq.'sphr') then -+ keyfld=6 -+ elseif(keyword(1:4).eq.'zbnd') then -+ keyfld=7 -+ elseif(keyword(1:4).eq.'zres') then -+ keyfld=9 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,454) -+ endif -+ -+ do i=1,mxfld -+ prmfld(i)=0.d0 -+ enddo -+ -+ nfld=intstr(record,lenrec,idum) -+ if(nfld.eq.0)nfld=5 -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ do k=1,nfld -+ -+ prmfld(k)=dblstr(record,lenrec,idum) -+ if(idum.gt.lenrec.and.k.lt.nfld)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'external field key ',13x,a4, -+ x /,/,30x,'external field parameters')") keyword(1:4) -+ write(nrite,"(2(/,1x,1p,5e15.5))") prmfld -+ -+ endif -+ -+c convert to internal units -+ -+ if(keyfld.eq.1.or.keyfld.eq.4.or.keyfld.eq.5) then -+ -+ if(.not.lunits)call error(idnode,6) -+ -+ do i=1,3 -+ prmfld(i)=prmfld(i)*engunit -+ enddo -+ -+ elseif(keyfld.eq.2.or.keyfld.eq.6.or.keyfld.eq.7) then -+ -+ prmfld(1)=prmfld(1)*engunit -+ -+ elseif(keyfld.eq.9) then -+ -+ prmfld(3)=prmfld(3)*engunit -+ -+ endif -+ -+ return -+ end subroutine define_external_field -+ -+ subroutine extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c*********************************************************************** -+c -+c dl_poly routine for application of an external field -+c -+c replicated data version / block data -+c -+c copyright daresbury laboratory 1993 -+c author - t.forester october 1993 -+c amended - t.forester dec 1994 -+c amended - p.-l. chau jun 2009 z-restraint option -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,keyfld,mxnode,natms,iatm1,iatm2,i,j -+ integer istart,ifinish,numresat -+ real(8) engfld,virfld,rz,rrr,gamma,zdif,totwgt -+ real(8) com(3) -+ -+c energy and virial accumulators -+ -+ engfld=0.d0 -+ virfld=0.d0 -+ -+c block indices -+ -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ if(keyfld.eq.1) then -+ -+c electric field: prmfld(1-3) are field components -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+chge(i)*prmfld(1) -+ fyy(i)=fyy(i)+chge(i)*prmfld(2) -+ fzz(i)=fzz(i)+chge(i)*prmfld(3) -+ -+ enddo -+ -+ elseif(keyfld.eq.2) then -+ -+c oscillating shear: orthorhombic box: Fx=a*cos(b.2.pi.z/L) -+ -+ rz=2.d0*pi/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+prmfld(1)*cos(prmfld(2)*zzz(i)*rz) -+ -+ enddo -+ -+ elseif(keyfld.eq.3.and.imcon.eq.6) then -+ -+c continuous shear of walls : 2D periodic box (imcon=6) -+c shear rate=prmfld(1) angstrom per ps for atoms at -+c abs(z) > prmfld(2) -+ -+ do i=iatm1,iatm2 -+ -+ if(abs(zzz(i)).gt.prmfld(2)) then -+ -+ vxx(i)=0.5d0*sign(prmfld(1),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.4) then -+ -+c gravitational field: field components given by prmfld(1-3) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+prmfld(1)*weight(i) -+ fyy(i)=fyy(i)+prmfld(2)*weight(i) -+ fzz(i)=fzz(i)+prmfld(3)*weight(i) -+ -+ enddo -+ -+ elseif(keyfld.eq.5) then -+ -+c magnetic field: field components given by prmfld(1-3) -+ -+ do i=iatm1,iatm2 -+ -+ fxx(i)=fxx(i)+(vyy(i)*prmfld(3)-vzz(i)*prmfld(2)) -+ x *chge(i) -+ fyy(i)=fyy(i)+(vzz(i)*prmfld(1)-vxx(i)*prmfld(3)) -+ x *chge(i) -+ fzz(i)=fzz(i)+(vxx(i)*prmfld(2)-vyy(i)*prmfld(1)) -+ x *chge(i) -+ -+ enddo -+ -+ elseif(keyfld.eq.6) then -+ -+c containing sphere : r^(-n) potential -+ -+ do i=iatm1,iatm2 -+ -+ rrr=sqrt(xxx(i)**2+yyy(i)**2+zzz(i)**2) -+ if(rrr.gt.prmfld(4)) then -+ rrr=prmfld(2)-rrr -+ if(rrr.lt.0.d0) rrr=0.1d0 -+ -+ gamma =prmfld(1)*rrr**(-prmfld(3)) -+ engfld=engfld+gamma -+ -+ gamma=-prmfld(3)*gamma/((prmfld(2)-rrr)*rrr) -+ -+ fxx(i)=fxx(i)+gamma*xxx(i) -+ fyy(i)=fyy(i)+gamma*yyy(i) -+ fzz(i)=fzz(i)+gamma*zzz(i) -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.7) then -+ -+c repulsive wall (harmonic) starting at z0 -+ -+ do i=iatm1,iatm2 -+ -+ if(prmfld(3)*zzz(i).gt.prmfld(3)*prmfld(2)) then -+ -+ zdif=zzz(i)-prmfld(2) -+ gamma=-prmfld(1)*zdif -+ -+ fzz(i)=fzz(i)+gamma -+ engfld=engfld-gamma*zdif/2. -+ -+ endif -+ -+ enddo -+ -+ elseif(keyfld.eq.9) then -+ -+c keyfld=9. restrain molecule z-position -+c prmfld(1) is number of first atom of restrained molecule -+c prmfld(2) is number of last atom of restrained molecule -+c prmfld(3) is the restraining constant -+c prmfld(4) is z-min -+c prmfld(5) is z-max -+ -+ istart=nint(prmfld(1)) -+ ifinish=nint(prmfld(2)) -+ numresat=ifinish-istart+1 -+ -+c calculate the centre of mass of the molecule -+ -+ call getcom_mol(istart,ifinish,imcon,idnode,mxnode,totwgt,com) -+ -+c apply restraint force according to location -+ -+ if(com(3).lt.prmfld(4))then -+ -+c if centre of mass is below z-min, activate restraining force -+ -+ do i=istart,ifinish -+ -+ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* -+ x (com(3)-prmfld(4))/mxnode -+ -+ enddo -+ -+ elseif(com(3).gt.prmfld(5))then -+ -+c if centre of mass if above z-max, activate restraining force -+ -+ do i=istart,ifinish -+ -+ fzz(i)=fzz(i)-prmfld(3)*(weight(i)/totwgt)* -+ x (com(3)-prmfld(5))/mxnode -+ -+ enddo -+ -+ endif -+ -+ else -+ -+c unidentified field potential error exit -+ -+ call error(idnode,454) -+ -+ endif -+ -+c global sum of external field potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engfld -+ buffer(2)=virfld -+ call gdsum(buffer(1),2,buffer(3)) -+ engfld=buffer(1) -+ virfld=buffer(2) -+ -+ endif -+ -+ return -+ end subroutine extnfld -+ -+ end module external_field_module -diff -urN dl_class_1.9.orig/srcmod/forces_module.f dl_class_1.9/srcmod/forces_module.f ---- dl_class_1.9.orig/srcmod/forces_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/forces_module.f 2015-11-09 14:15:45.064258843 +0100 -@@ -0,0 +1,2970 @@ -+ module forces_module -+ -+c*********************************************************************** -+c -+c dl_poly module for calculation of atomic forces -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d. quigley : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use coulomb_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use metafreeze_module -+ use metal_module -+ use neu_coul_module -+ use nlist_builders_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ use spme_module -+ use tersoff_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ contains -+ -+ subroutine force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to manage the calculation of the atomic forces -+c from all force field terms. -+c -+c copyright - daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva -+ logical lfree,lghost,llsolva -+ -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet -+ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva -+ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld -+ -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih -+ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld -+ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord -+ -+ llsolva=.false. -+ -+c initialize energy and virial accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ engang=0.d0 -+ virang=0.d0 -+ engdih=0.d0 -+ virdih=0.d0 -+ enginv=0.d0 -+ virinv=0.d0 -+ engtbp=0.d0 -+ virtbp=0.d0 -+ engter=0.d0 -+ virter=0.d0 -+ engfbp=0.d0 -+ virfbp=0.d0 -+ engsrp=0.d0 -+ virsrp=0.d0 -+ engcpe=0.d0 -+ vircpe=0.d0 -+ engfld=0.d0 -+ virfld=0.d0 -+ engshl=0.d0 -+ virshl=0.d0 -+ shlke =0.d0 -+ engtet=0.d0 -+ virtet=0.d0 -+ engmet=0.d0 -+ virmet=0.d0 -+ virord=0.0d0 -+ engord=0.0d0 -+ -+ if(lmetadyn)then -+ -+ eng_loc=0.0d0 -+ vir_loc=0.0d0 -+ fxx_loc(:)=0.0d0 -+ fyy_loc(:)=0.0d0 -+ fzz_loc(:)=0.0d0 -+ stress_loc(:)=0.0d0 -+ -+ endif -+ -+c initialise free energy accumulators -+ -+ if(lfree)then -+ -+ ang_fre=0.d0 -+ bnd_fre=0.d0 -+ dih_fre=0.d0 -+ inv_fre=0.d0 -+ tbp_fre=0.d0 -+ fbp_fre=0.d0 -+ cou_fre=0.d0 -+ vdw_fre=0.d0 -+ shl_fre=0.d0 -+ ang_vir=0.d0 -+ bnd_vir=0.d0 -+ dih_vir=0.d0 -+ inv_vir=0.d0 -+ tbp_vir=0.d0 -+ fbp_vir=0.d0 -+ cou_vir=0.d0 -+ vdw_vir=0.d0 -+ shl_vir=0.d0 -+ eng_cfg_fre=0.d0 -+ vir_cfg_fre=0.d0 -+ -+ endif -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ if(keyfce/2.gt.0)lcomp(6)=.true. -+ if(mod(keyfce,2).eq.1)lcomp(7)=.true. -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ llsolva=.true. -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c initialise the force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ if(nstep.gt.0)then -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ endif -+ -+ if(keyfce.gt.0)then -+ -+c calculate pair forces, including coulombic forces -+ -+ if(lnsq)then -+ -+c multiple timestep - all-pairs -+ -+ call multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+ elseif(.not.lneut)then -+ -+c single timestep -+ -+ if(multt.eq.1)then -+ -+ call forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, -+ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, -+ x vircpe,virsrp,volm,engmet,virmet) -+ -+ else -+ -+ call multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+ -+ endif -+ -+ elseif(lneut)then -+ -+c neutral groups -+ -+ if(multt.eq.1)then -+ -+ call forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+ else -+ -+ call multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add in long range corrections to energy and pressure -+ -+ engsrp=engsrp+elrc -+ virsrp=virsrp+virlrc -+ engmet=engmet+elrcm(0) -+ virmet=virmet+vlrcm(0) -+ if(lfree)then -+ vdw_fre=vdw_fre+elrc_fre -+ vdw_vir=vdw_vir+vlrc_fre -+ endif -+ -+c calculate three body forces -+ -+ if(ntptbp.gt.0)call thbfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c calculate four body forces -+ -+ if(ntpfbp.gt.0)call fbpfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c calculate tersoff potential forces -+ -+ if(ntpter.gt.0)call tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c calculate bond forces -+ -+ if(ntbond.gt.0)call bndfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c calculate valence angle forces -+ -+ if(ntangl.gt.0)call angfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c calculate dihedral forces -+ -+ if(ntdihd.gt.0)call dihfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, -+ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) -+ -+c calculate inversion forces -+ -+ if(ntinv.gt.0)call invfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c calculate tethered atom forces -+ -+ if(ntteth.gt.0)call tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c calculate shell model forces -+ -+ if(keyshl.gt.0)call shlfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c external field -+ -+ if(keyfld.gt.0)call extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c metadynamics option : use potential energy as order parameter -+ -+ if(lmetadyn)then -+ -+ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ -+ x engtbp+engfbp+engshl+enginv+engter+engmet -+ -+ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet -+ -+ call metafreeze_driver -+ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) -+ -+ endif -+ -+c global summation of force arrays (basic replicated data strategy) -+ -+ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) -+ -+c global sum of stress arrays -+ -+ if(mxnode.gt.1)call gdsum(stress,9,buffer) -+ -+c add long range correction to diagonal terms of stress tensor -+ -+ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 -+ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 -+ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 -+ -+c cap forces in equilibration mode -+ -+ if(nstep.le.nsteql.and.lfcap) -+ x call fcap(lfcap,natms,fmax,temp) -+ -+c total configuration energy -+ -+ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ -+ x engfbp+engshl+enginv+engter+engmet -+ -+c PLUMED modifications -+ if(lplumed)then -+ call plumed_f_gcmd("setStep"//char(0),nstep) -+ call plumed_f_gcmd("setMasses"//char(0),weight) -+ call plumed_f_gcmd("setCharges"//char(0),chge) -+ call plumed_f_gcmd("setPositionsX"//char(0),xxx) -+ call plumed_f_gcmd("setPositionsY"//char(0),yyy) -+ call plumed_f_gcmd("setPositionsZ"//char(0),zzz) -+ call plumed_f_gcmd("setBox"//char(0),cell) -+ call plumed_f_gcmd("setEnergy"//char(0),engcfg) -+ call plumed_f_gcmd("setForcesX"//char(0),fxx) -+ call plumed_f_gcmd("setForcesY"//char(0),fyy) -+ call plumed_f_gcmd("setForcesZ"//char(0),fzz) -+ call plumed_f_gcmd("setVirial"//char(0),stress) -+ call plumed_f_gcmd("calc"//char(0) ) -+ endif -+c PLUMED modifications -+ -+c total derivative of the configurational free energy -+ -+ if(lfree)then -+ -+ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ -+ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) -+ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ -+ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) -+ -+ endif -+ -+c sum solvation and excitation energies for pair forces -+ -+ if(mxnode.gt.1)then -+ -+ if(llsolva)then -+ -+ call gdsum(vdw_sol,mxtmls_sol2,buffer) -+ call gdsum(cou_sol,mxtmls_sol2,buffer) -+ -+ if(lghost)then -+ -+ call gdsum(vdw_exc,mxtmls_exc2,buffer) -+ call gdsum(cou_exc,mxtmls_exc2,buffer) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add long range corrections to solvation terms -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) -+ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) -+ -+ endif -+ -+ return -+ end subroutine force_manager -+ -+ subroutine forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, -+ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, -+ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, -+ x virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c amended - t. forester sept 1994 -+c amended - w. smith june 1995 for metal potentials -+c -+c key: -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe -+ logical lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt -+ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf -+ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii -+ -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps -+ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lhke)then -+ -+ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+ else if(lewald.or.lspme.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c initialise force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c calculate local density in metals -+ -+ if(ntpmet.gt.0)then -+ -+ call metdens -+ x (idnode,imcon,mxnode,natms,engmet,virmet) -+ -+ stress(1)=stress(1)-virmet/3.d0 -+ stress(5)=stress(5)-virmet/3.d0 -+ stress(9)=stress(9)-virmet/3.d0 -+ -+ endif -+ -+c fourier contribution to coulombic forces in Ewald sum -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c hautman-klein-ewald method -+ -+ if(lhke)then -+ -+c fourier terms of hk-ewald -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engacc,viracc,alpha,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, -+ x drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c smoothed particle mesh ewald -+ -+ if(lspme)then -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c calculate metal forces and potential -+ -+ if(ntpmet.gt.0)then -+ -+ call metfrc(safe,i,lentry(ii),engacc,viracc) -+ -+ engmet=engmet+engacc -+ virmet=virmet+viracc -+ -+ endif -+ -+c calculate short range force and potential terms -+ -+ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, -+ x rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, -+ x viracc,drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0(i,lentry(ii),rcut) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check metal interpolation is safe -+ -+ if(ntpmet.gt.0)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ endif -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ eps=epsq -+ if(loglnk)eps=eps*2.0d0 -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ enddo -+ -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ numrdf=numrdf+1 -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=engmet -+ buffer(6)=virmet -+ buffer(7)=vdw_fre -+ buffer(8)=cou_fre -+ buffer(9)=vdw_vir -+ buffer(10)=cou_vir -+ call gdsum(buffer(1),10,buffer(11)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ engmet=buffer(5) -+ virmet=buffer(6) -+ vdw_fre=buffer(7) -+ cou_fre=buffer(8) -+ vdw_vir=buffer(9) -+ cou_vir=buffer(10) -+ -+ endif -+ -+ return -+ end subroutine forces -+ -+ subroutine forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c modified - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j -+ integer ibig,ia,ineu,isn,ik,nsolva,isolva -+ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe -+ real(8) virsrp,engacc,viracc,anorm,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension fail(2) -+ -+ data fail/0,0/ -+ -+c allocate working arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ do i=1,2 -+ if(fail(i).ne.0)call error(idnode,1820) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c initialise force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c initialise energy and virial accumulators -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c outer loop over neutral groups -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ newlst=.true. -+ -+ isn=1 -+ call neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0neu(ik,rcut) -+ -+ endif -+ -+ enddo -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,478) -+ endif -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c counter for rdf statistics outside loop structure -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ -+ return -+ end subroutine forces_neu -+ -+ subroutine multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+c*************************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c reciprocal space calculated on long time steps. -+c -+c copyright daresbury laboratory -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3,4 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ -+ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme -+ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt -+ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail -+ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 -+ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 -+ real(8) vircp1,engacl,engac2,virsr1 -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ if(newlst)nstep0=nstep -+ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) -+ -+c allocate working arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1840) -+ enddo -+ -+ endif -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lspme.or.lewald.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c zero force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS****************** -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ llsolva=lsolva -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate fourier contribution to secondary coulombic forces -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+c hautman-klein-ewald method -+ -+ elseif(lhke)then -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engac1,viracc,alpha,epsq) -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, -+ x virac2,drewd,rcut,epsq) -+ -+ engac1=engac1+engac2 -+ viracc=viracc+virac2 -+ -+ elseif(lspme)then -+ -+c smoothed particle mesh ewald -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ endif -+ -+ engcpl=engcpl+engac1 -+ vircpl=vircpl+viracc -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+c note: if using link cells - have double counted excluded -+c interactions use temporary adjustment to relative dielectric -+c constant -+ -+ eps=epsq -+ if(loglnk)eps=epsq*2.0d0 -+ -+c calculate self interaction corrections for fourier contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ enddo -+ -+ endif -+ -+c calculate pair contributions to secondary neighbour forces -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c calculate pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(newplst.or. -+ x (mod(nstep-nstep0,multt).le.1))then -+ -+ if(lhke)then -+ -+ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) -+ -+ else -+ -+ call ewald4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, -+ x drewd,rcut,epsq) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ engcpl=engcpl+engacl -+ vircpl=vircpl+viracl -+ -+ else -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i)+stresl(i)*ann -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ return -+ end subroutine multiple -+ -+ subroutine multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c multiple timestep option -+c -+c parallel replicated data version -+c -+c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory april 1994 -+c author - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c = 10,11 ----- reaction field : coul3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j -+ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe -+ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp -+ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension fail(nnn),stresp(9) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ if(newjob)then -+ -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) -+ -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) -+ endif -+ -+ endif -+ newjob=.false. -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1850) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c error if ewald sum requested -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c create list of primary and secondary neighbours -+ -+ if(newlst)nstep0=nstep -+ newplst=(mod(nstep-nstep0,multt).eq.0) -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+ endif -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress arrays -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c outer loop over neutral groups -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=-1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then -+ -+ call srfrceneu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ else -+ -+ call error(idnode,250) -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,479) -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresl(i)*ann+stresp(i) -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) -+ -+ return -+ end subroutine multiple_neu -+ -+ subroutine multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c to be used with all-pairs option -+c -+c flx,fly,flz : forces from electrostatics from r > rcut -+c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory 1993 -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c Ewald sum --- not used -+c = 4,5 ------ Distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c truncated and shifted coulombic -- not used -+c reaction field - not used -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr -+ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva -+ integer isolva,i,j -+ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut -+ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 -+ real(8) engsr2,virsr2,stresp,engacc,viracc -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data numlsts/-1/ -+ data newjob/.true./ -+ -+c allocate work arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1860) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+ if(lnsq)then -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) -+ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) -+ -+c set extended cutoff for electrostatics - secondary shell -+ -+ rcut1=rcut+delr -+ -+ if(newlst)nstep0=nstep -+ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) -+ -+c ********************PROCESS TERTIARY NEIGHBOURS********************* -+ -+ if(newplst)then -+ -+ call coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcp3,vircp3) -+ -+ endif -+ -+c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ if(newplst)then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcp2=0.d0 -+ vircp2=0.d0 -+ engsr2=0.d0 -+ virsr2=0.d0 -+ -+c zero secondary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ ii=0 -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic vectors -+ -+ ik=0 -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition only for interactions > rprim -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c short range forces for secondary shell -+ -+ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsr2=engsr2+engacc -+ virsr2=virsr2+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+c truncated shifted coulombic potential -+ -+ call error(idnode,424) -+ -+ endif -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ fpx(i)=fxx(i) -+ fpy(i)=fyy(i) -+ fpz(i)=fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stress(i) -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol(:) -+ cou_sol_put(:)=cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc(:) -+ cou_exc_put(:)=cou_exc(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero primary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate primary pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,424) -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary and tertiary neighbour contributions to -+c force, energy etc -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)+fpx(i)+flx(i) -+ fyy(i)=fyy(i)+fpy(i)+fly(i) -+ fzz(i)=fzz(i)+fpz(i)+flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i) -+ enddo -+ -+ engsrp=engsrp+engsr2 -+ virsrp=virsrp+virsr2 -+ -+ engcpe=engcpe+engcp2+engcp3 -+ vircpe=vircpe+vircp2+vircp3 -+ -+c calculate solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) -+ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) -+ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine multiple_nsq -+ -+ subroutine neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to create pair lists for neutral group -+c implementations. -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c -+c isn = -1 => secondary neighbours -+c isn = 1 => primary neighbours - must contain excld interactions -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,lexc -+ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 -+ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 -+ real(8) txx,tyy,tzz,uxx,uyy,uzz -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1830) -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c set cutoff radius -+ -+ ll=0 -+ -+c number of excludes found -+ -+ if(isn.lt.0)then -+ keyexc=nexatm(ia)+2 -+ else -+ keyexc=1 -+ endif -+ -+c do centre - centre distances -+ -+ lenia=lentry(ia) -+ -+ do j=1,lenia -+ -+ jneu=abs(list(ia,j)) -+ xxt(j)=uxx(ineu)-uxx(jneu) -+ yyt(j)=uyy(ineu)-uyy(jneu) -+ zzt(j)=uzz(ineu)-uzz(jneu) -+ -+ enddo -+ -+ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) -+ -+c working intragroup vectors of central group -+c - for periodic boundaries -+ -+ in0=neulst(ineu) -+ in1=neulst(ineu+1)-1 -+ -+c loop over neutral groups sites of a -+ -+ -+c loop over groups in list -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj)*isn -+ -+ if(jneu.gt.0)then -+ -+ do i=in0,in1 -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+ if(ineu.eq.jneu)jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+c reject atoms in excluded pair list -+ -+ lexc=.false. -+ -+ if(keyexc.lt.nexatm(ia))then -+ -+ if(lexatm(ia,keyexc).eq.i)then -+ if(lexatm(ia,keyexc+1).eq.j)then -+ lexc=.true. -+ keyexc=keyexc+2 -+ endif -+ endif -+ -+ endif -+ -+c reject frozen atom pairs -+ -+ if(lstfrz(i).ne.0)then -+ if(lstfrz(j).ne.0)lexc=.true. -+ endif -+ -+ if(.not.lexc)then -+ -+ ll=ll+1 -+ if(ll.le.mxxdf)then -+ -+ xdf(ll)=txx(i)+xxt(jj)-txx(j) -+ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) -+ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) -+ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 -+ ilist(ll)=i -+ jlist(ll)=j -+ -+ else -+ -+ lchk=.false. -+ ibig=max(ibig,ll) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine neutlst -+ -+ end module forces_module -+ -diff -urN dl_class_1.9.orig/srcmod/forces_module.f.preplumed dl_class_1.9/srcmod/forces_module.f.preplumed ---- dl_class_1.9.orig/srcmod/forces_module.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/forces_module.f.preplumed 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,2952 @@ -+ module forces_module -+ -+c*********************************************************************** -+c -+c dl_poly module for calculation of atomic forces -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - d. quigley : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use coulomb_module -+ use error_module -+ use ewald_module -+ use exclude_module -+ use external_field_module -+ use four_body_module -+ use hkewald_module -+ use metafreeze_module -+ use metal_module -+ use neu_coul_module -+ use nlist_builders_module -+ use pair_module -+ use property_module -+ use setup_module -+ use solvation_module -+ use spme_module -+ use tersoff_module -+ use three_body_module -+ use utility_module -+ use vdw_module -+ -+ contains -+ -+ subroutine force_manager -+ x (newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lghost,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to manage the calculation of the atomic forces -+c from all force field terms. -+c -+c copyright - daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,lgofr,lzeql,loglnk,lfcap,lsolva -+ logical lfree,lghost,llsolva -+ -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,numrdf -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ntpmet -+ integer i,nospl,multt,nneut,ntbond,ntangl,ntdihd,nsolva,isolva -+ integer ntinv,ntteth,ntshl,ntptbp,ntpfbp,ntpter,keyshl,keyfld -+ -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang,engdih -+ real(8) virdih,enginv,virinv,engtet,virtet,engshl,virshl,engfld -+ real(8) virfld,fmax,temp,shlke,engcfg,tmpeng,tmpvir,engord,virord -+ -+ llsolva=.false. -+ -+c initialize energy and virial accumulators -+ -+ engbnd=0.d0 -+ virbnd=0.d0 -+ engang=0.d0 -+ virang=0.d0 -+ engdih=0.d0 -+ virdih=0.d0 -+ enginv=0.d0 -+ virinv=0.d0 -+ engtbp=0.d0 -+ virtbp=0.d0 -+ engter=0.d0 -+ virter=0.d0 -+ engfbp=0.d0 -+ virfbp=0.d0 -+ engsrp=0.d0 -+ virsrp=0.d0 -+ engcpe=0.d0 -+ vircpe=0.d0 -+ engfld=0.d0 -+ virfld=0.d0 -+ engshl=0.d0 -+ virshl=0.d0 -+ shlke =0.d0 -+ engtet=0.d0 -+ virtet=0.d0 -+ engmet=0.d0 -+ virmet=0.d0 -+ virord=0.0d0 -+ engord=0.0d0 -+ -+ if(lmetadyn)then -+ -+ eng_loc=0.0d0 -+ vir_loc=0.0d0 -+ fxx_loc(:)=0.0d0 -+ fyy_loc(:)=0.0d0 -+ fzz_loc(:)=0.0d0 -+ stress_loc(:)=0.0d0 -+ -+ endif -+ -+c initialise free energy accumulators -+ -+ if(lfree)then -+ -+ ang_fre=0.d0 -+ bnd_fre=0.d0 -+ dih_fre=0.d0 -+ inv_fre=0.d0 -+ tbp_fre=0.d0 -+ fbp_fre=0.d0 -+ cou_fre=0.d0 -+ vdw_fre=0.d0 -+ shl_fre=0.d0 -+ ang_vir=0.d0 -+ bnd_vir=0.d0 -+ dih_vir=0.d0 -+ inv_vir=0.d0 -+ tbp_vir=0.d0 -+ fbp_vir=0.d0 -+ cou_vir=0.d0 -+ vdw_vir=0.d0 -+ shl_vir=0.d0 -+ eng_cfg_fre=0.d0 -+ vir_cfg_fre=0.d0 -+ -+ endif -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ if(keyfce/2.gt.0)lcomp(6)=.true. -+ if(mod(keyfce,2).eq.1)lcomp(7)=.true. -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+ llsolva=.true. -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c initialise the force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ if(nstep.gt.0)then -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ endif -+ -+ if(keyfce.gt.0)then -+ -+c calculate pair forces, including coulombic forces -+ -+ if(lnsq)then -+ -+c multiple timestep - all-pairs -+ -+ call multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+ elseif(.not.lneut)then -+ -+c single timestep -+ -+ if(multt.eq.1)then -+ -+ call forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw, -+ x ntpmet,natms,nstbgr,nstep,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw, -+ x vircpe,virsrp,volm,engmet,virmet) -+ -+ else -+ -+ call multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+ -+ endif -+ -+ elseif(lneut)then -+ -+c neutral groups -+ -+ if(multt.eq.1)then -+ -+ call forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+ else -+ -+ call multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add in long range corrections to energy and pressure -+ -+ engsrp=engsrp+elrc -+ virsrp=virsrp+virlrc -+ engmet=engmet+elrcm(0) -+ virmet=virmet+vlrcm(0) -+ if(lfree)then -+ vdw_fre=vdw_fre+elrc_fre -+ vdw_vir=vdw_vir+vlrc_fre -+ endif -+ -+c calculate three body forces -+ -+ if(ntptbp.gt.0)call thbfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c calculate four body forces -+ -+ if(ntpfbp.gt.0)call fbpfrc -+ x (llsolva,lfree,lghost,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c calculate tersoff potential forces -+ -+ if(ntpter.gt.0)call tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c calculate bond forces -+ -+ if(ntbond.gt.0)call bndfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntbond,epsq, -+ x engbnd,virbnd) -+ -+c calculate valence angle forces -+ -+ if(ntangl.gt.0)call angfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntangl,engang,virang) -+ -+c calculate dihedral forces -+ -+ if(ntdihd.gt.0)call dihfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntdihd,keyfce,dlrpot, -+ x epsq,engcpe,engdih,engsrp,rcut,rvdw,alpha,vircpe,virdih,virsrp) -+ -+c calculate inversion forces -+ -+ if(ntinv.gt.0)call invfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c calculate tethered atom forces -+ -+ if(ntteth.gt.0)call tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c calculate shell model forces -+ -+ if(keyshl.gt.0)call shlfrc -+ x (llsolva,lfree,lghost,idnode,imcon,mxnode,ntshl,engshl,virshl) -+ -+c external field -+ -+ if(keyfld.gt.0)call extnfld -+ x (idnode,imcon,keyfld,mxnode,natms,engfld,virfld) -+ -+c metadynamics option : use potential energy as order parameter -+ -+ if(lmetadyn)then -+ -+ tmpeng=engsrp+engcpe+engbnd+engang+engdih+engfld+ -+ x engtbp+engfbp+engshl+enginv+engter+engmet -+ -+ tmpvir=vircpe+virsrp+virbnd+virtbp+virter+virfld+ -+ x virang+virshl+virtet+virmet -+ -+ call metafreeze_driver -+ x (imcon,natms,temp,nstep,tmpeng,tmpvir,engord,virord) -+ -+ endif -+ -+c global summation of force arrays (basic replicated data strategy) -+ -+ call global_sum_forces(natms,mxnode,fxx,fyy,fzz) -+ -+c global sum of stress arrays -+ -+ if(mxnode.gt.1)call gdsum(stress,9,buffer) -+ -+c add long range correction to diagonal terms of stress tensor -+ -+ stress(1)=stress(1)-(virlrc+vlrcm(0))/3.d0 -+ stress(5)=stress(5)-(virlrc+vlrcm(0))/3.d0 -+ stress(9)=stress(9)-(virlrc+vlrcm(0))/3.d0 -+ -+c cap forces in equilibration mode -+ -+ if(nstep.le.nsteql.and.lfcap) -+ x call fcap(lfcap,natms,fmax,temp) -+ -+c total configuration energy -+ -+ engcfg=engsrp+engcpe+engbnd+engang+engdih+engfld+engtbp+ -+ x engfbp+engshl+enginv+engter+engmet -+ -+c total derivative of the configurational free energy -+ -+ if(lfree)then -+ -+ eng_cfg_fre=dlambda*(ang_fre+bnd_fre+dih_fre+inv_fre+ -+ x tbp_fre+fbp_fre+cou_fre+vdw_fre+shl_fre) -+ vir_cfg_fre=dlambda*(ang_vir+bnd_vir+dih_vir+inv_vir+ -+ x tbp_vir+fbp_vir+cou_vir+vdw_vir+shl_vir) -+ -+ endif -+ -+c sum solvation and excitation energies for pair forces -+ -+ if(mxnode.gt.1)then -+ -+ if(llsolva)then -+ -+ call gdsum(vdw_sol,mxtmls_sol2,buffer) -+ call gdsum(cou_sol,mxtmls_sol2,buffer) -+ -+ if(lghost)then -+ -+ call gdsum(vdw_exc,mxtmls_exc2,buffer) -+ call gdsum(cou_exc,mxtmls_exc2,buffer) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c add long range corrections to solvation terms -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+elrc_sol(:) -+ if(lghost)vdw_exc(:)=vdw_exc(:)+elrc_exc(:) -+ -+ endif -+ -+ return -+ end subroutine force_manager -+ -+ subroutine forces -+ x (loglnk,lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x kmax1,kmax2,kmax3,nhko,nlatt,mxnode,ntpvdw,ntpmet,natms, -+ x nstbgr,nstep,nsteql,numrdf,nospl,nsolva,isolva,alpha,dlrpot, -+ x drewd,engcpe,engsrp,epsq,rcut,rvdw,vircpe,virsrp,volm,engmet, -+ x virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c amended - t. forester sept 1994 -+c amended - w. smith june 1995 for metal potentials -+c -+c key: -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,loglnk,lewald,lspme,lhke,newjob,lcshft,safe -+ logical lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,kmax1,kmax2,kmax3,nhko,nlatt -+ integer mxnode,ntpvdw,natms,nstbgr,nstep,nsteql,numrdf -+ integer ntpmet,nospl,nsolva,isolva,i,j,k,ii -+ -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rvdw,eps -+ real(8) vircpe,virsrp,volm,engacc,engac1,viracc,engmet,virmet -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lhke)then -+ -+ call hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+ else if(lewald.or.lspme.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+c initialise force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c calculate local density in metals -+ -+ if(ntpmet.gt.0)then -+ -+ call metdens -+ x (idnode,imcon,mxnode,natms,engmet,virmet) -+ -+ stress(1)=stress(1)-virmet/3.d0 -+ stress(5)=stress(5)-virmet/3.d0 -+ stress(9)=stress(9)-virmet/3.d0 -+ -+ endif -+ -+c fourier contribution to coulombic forces in Ewald sum -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c hautman-klein-ewald method -+ -+ if(lhke)then -+ -+c fourier terms of hk-ewald -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engacc,viracc,alpha,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engacc,viracc, -+ x drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c smoothed particle mesh ewald -+ -+ if(lspme)then -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ engcpe=engcpe+engac1 -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c calculate metal forces and potential -+ -+ if(ntpmet.gt.0)then -+ -+ call metfrc(safe,i,lentry(ii),engacc,viracc) -+ -+ engmet=engmet+engacc -+ virmet=virmet+viracc -+ -+ endif -+ -+c calculate short range force and potential terms -+ -+ if(ntpvdw.gt.0.and.mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc, -+ x rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2(llsolva,lfree,lghost,i,lentry(ii),engacc, -+ x viracc,drewd,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,lentry(ii),engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0(i,lentry(ii),rcut) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c check metal interpolation is safe -+ -+ if(ntpmet.gt.0)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ endif -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ eps=epsq -+ if(loglnk)eps=eps*2.0d0 -+ -+c outer loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (llsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ enddo -+ -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgofr.and.((.not.lzeql).or.(nstep.gt.nsteql)))then -+ -+ if(mod(nstep,nstbgr).eq.0)then -+ -+ numrdf=numrdf+1 -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=engmet -+ buffer(6)=virmet -+ buffer(7)=vdw_fre -+ buffer(8)=cou_fre -+ buffer(9)=vdw_vir -+ buffer(10)=cou_vir -+ call gdsum(buffer(1),10,buffer(11)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ engmet=buffer(5) -+ virmet=buffer(6) -+ vdw_fre=buffer(7) -+ cou_fre=buffer(8) -+ vdw_vir=buffer(9) -+ cou_vir=buffer(10) -+ -+ endif -+ -+ return -+ end subroutine forces -+ -+ subroutine forces_neu -+ x (lgofr,lzeql,lsolva,lfree,lghost,idnode,imcon,keyfce, -+ x mxnode,natms,nneut,nstbgr,nstep,nsteql,numrdf,nsolva, -+ x isolva,dlrpot,engcpe,engsrp,epsq,rcut,rvdw,alpha, -+ x vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c -+c modified - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzeql,newlst,lchk,lsolva,lfree,lghost,llsolva -+ -+ integer idnode,imcon,keyfce,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,i,fail,jneu,jj0,jj1,j -+ integer ibig,ia,ineu,isn,ik,nsolva,isolva -+ real(8) dlrpot,engcpe,engsrp,epsq,rcut,rvdw,vircpe -+ real(8) virsrp,engacc,viracc,anorm,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension fail(2) -+ -+ data fail/0,0/ -+ -+c allocate working arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ do i=1,2 -+ if(fail(i).ne.0)call error(idnode,1820) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c initialise force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c initialise energy and virial accumulators -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c outer loop over neutral groups -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ newlst=.true. -+ -+ isn=1 -+ call neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)then -+ -+ call rdf0neu(ik,rcut) -+ -+ endif -+ -+ enddo -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,478) -+ endif -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c counter for rdf statistics outside loop structure -+ -+ if( ((.not.lzeql).or.(nstep.gt.nsteql)).and.(lgofr).and. -+ x mod(nstep,nstbgr).eq.0)numrdf=numrdf+1 -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ -+ return -+ end subroutine forces_neu -+ -+ subroutine multiple -+ x (loglnk,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt, -+ x mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,nsolva, -+ x isolva,alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim, -+ x rvdw,vircpe,virsrp,volm) -+c*************************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c reciprocal space calculated on long time steps. -+c -+c copyright daresbury laboratory -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ Ewald sum : ewald1,2,3,4 -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ truncated and shifted coulombic : coul4 -+c = 10,11 ----- reaction field : coul3 -+c = 12,13 ----- Smoothed Particle Mesh Ewald : ewald[_spme,2,3,4] -+c = 14,15 ----- Hautman-Klein-Ewald : hkewald1,2,3,4 -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ -+ logical newplst,newlst,lgofr,lzeql,lgr,loglnk,lewald,lspme -+ logical lhke,newjob,lcshft,lsolva,lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,nlatt,kmax1,kmax2,kmax3,nhko,multt -+ integer mxnode,natms,nstep,nstbgr,nsteql,numrdf,nospl,fail -+ integer numlsts,i,nstep0,nsolva,isolva,ii,k,j,ik -+ real(8) alpha,dlrpot,drewd,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,volm,stresp,engcpl,engacc,viracc,engac1 -+ real(8) vircpl,eps,ann,engsr1,viracl,engsrl,virsrl,virac2,engcp1 -+ real(8) vircp1,engacl,engac2,virsr1 -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz,newjob -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ lhke=(keyfce/2.eq.7) -+ lspme=(keyfce/2.eq.6) -+ lewald=(keyfce/2.eq.1) -+ lcshft=(keyfce/2.eq.4.or.keyfce/2.eq.5) -+ if(newlst)nstep0=nstep -+ newplst=(newlst).or.(mod(nstep-nstep0,multt).eq.0) -+ -+c allocate working arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1840) -+ enddo -+ -+ endif -+ -+c create ewald interpolation arrays -+ -+ if(newjob)then -+ -+ if(lspme.or.lewald.or.lcshft)then -+ -+ call erfcgen(alpha,drewd,rcut) -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c zero force and stress arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS****************** -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ llsolva=lsolva -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate fourier contribution to secondary coulombic forces -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(lewald)then -+ -+ call ewald1 -+ x (lsolva,llsolva,lfree,lghost,idnode,mxnode,natms,imcon, -+ x kmax1,kmax2,kmax3,engac1,viracc,alpha,volm,epsq) -+ -+c hautman-klein-ewald method -+ -+ elseif(lhke)then -+ -+ call hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engac1,viracc,alpha,epsq) -+ -+c real space terms of hk-ewald -+ -+ call hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engac2, -+ x virac2,drewd,rcut,epsq) -+ -+ engac1=engac1+engac2 -+ viracc=viracc+virac2 -+ -+ elseif(lspme)then -+ -+c smoothed particle mesh ewald -+ -+ call ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engac1,viracc,alpha,volm,epsq) -+ -+ endif -+ -+ engcpl=engcpl+engac1 -+ vircpl=vircpl+viracc -+ -+c calculate corrections for intramolecular coulomb terms in -+c Ewald sum -+c note: if using link cells - have double counted excluded -+c interactions use temporary adjustment to relative dielectric -+c constant -+ -+ eps=epsq -+ if(loglnk)eps=epsq*2.0d0 -+ -+c calculate self interaction corrections for fourier contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,nexatm(ii) -+ -+ j=lexatm(ii,k) -+ jlist(k)=j -+ -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nexatm(ii),cell,xdf,ydf,zdf) -+ -+c calculate correction terms -+ -+ if(lhke)then -+ -+ call hkewald3(i,ii,engacc,viracc,eps) -+ -+ else -+ -+ call ewald3 -+ x (lsolva,lfree,lghost,i,ii,engacc,viracc,alpha,eps) -+ -+ endif -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ enddo -+ -+ endif -+ -+c calculate pair contributions to secondary neighbour forces -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme)then -+ -+ call ewald2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,drewd,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c calculate pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of distance -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+c (real space contributions to ewald sum) -+ -+ if(lewald.or.lspme.or.lhke)then -+ -+ if(newplst.or. -+ x (mod(nstep-nstep0,multt).le.1))then -+ -+ if(lhke)then -+ -+ call hkewald4(i,ik,engacc,viracc,engacl,viracl,rcut,epsq) -+ -+ else -+ -+ call ewald4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,engacl,viracl, -+ x drewd,rcut,epsq) -+ -+ endif -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ engcpl=engcpl+engacl -+ vircpl=vircpl+viracl -+ -+ else -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ elseif(keyfce/2.eq.2)then -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call coul4 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i)+stresl(i)*ann -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ return -+ end subroutine multiple -+ -+ subroutine multiple_neu -+ x (lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode,imcon, -+ x keyfce,multt,mxnode,natms,nneut,nstbgr,nstep,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rprim,rcut,rvdw,alpha,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating interatomic forces -+c using the verlet neighbour list -+c neutral group implemenation - no Ewald sum option -+c multiple timestep option -+c -+c parallel replicated data version -+c -+c fpx,fpy,fpz : forces from electrostatics fron rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory april 1994 -+c author - t. forester april 1993 -+c key: -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c = 2,3 ------ invalid -+c = 4,5 ------ distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c = 8,9 ------ invalid -+c = 10,11 ----- reaction field : coul3 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical lgofr,lzeql,newlst,newplst,lgr,lchk,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nneut,nstbgr -+ integer nstep,nsteql,numrdf,fail,i,numlsts,jneu,jj0,j -+ integer jj1,ineu,ia,isn,ibig,ik,nstep0,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rprim,rcut,rvdw,vircpe -+ real(8) virsrp,engcpl,vircpl,engsrl,virsrl,anorm,ann,stresp -+ real(8) engacc,viracc,engsr1,virsr1,engcp1,vircp1,alpha -+ -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension fail(nnn),stresp(9) -+ -+ save engcpl,engsrl,vircpl,virsrl,nstep0,numlsts,engcp1,vircp1 -+ save engsr1,virsr1,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data newjob/.true./ -+ data numlsts/-1/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ if(newjob)then -+ -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(3)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(4)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(5)) -+ -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(6)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(7)) -+ endif -+ -+ endif -+ newjob=.false. -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1850) -+ enddo -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c error if ewald sum requested -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)call error(idnode,250) -+ -+c create list of primary and secondary neighbours -+ -+ if(newlst)nstep0=nstep -+ newplst=(mod(nstep-nstep0,multt).eq.0) -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+ endif -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero force arrays -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress arrays -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c flag for accumulating rdfs -+ -+ lgr=.false. -+ if(nstbgr.gt.0)lgr=(mod(numlsts,nstbgr).eq.0) -+ lgr=(lgr.and.(newplst.and.lgofr)) -+ lgr=(lgr.and.((.not.lzeql).or.(nstep-nsteql.gt.0))) -+ -+c intra group vectors com -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-xxx(jj0) -+ tyy(j)=yyy(j)-yyy(jj0) -+ tzz(j)=zzz(j)-zzz(jj0) -+ -+ enddo -+ -+ enddo -+ -+ call images(imcon,0,1,natms,cell,txx,tyy,tzz) -+ -+ do jneu=1,nneut -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+ xxx(j)=txx(j)+xxx(jj0) -+ yyy(j)=tyy(j)+yyy(jj0) -+ zzz(j)=tzz(j)+zzz(jj0) -+ -+ enddo -+ -+c centre of molecule -+ -+ uxx(jneu)=0.d0 -+ uyy(jneu)=0.d0 -+ uzz(jneu)=0.d0 -+ anorm=1.d0/dble(jj1-jj0+1) -+ -+ do j=jj0,jj1 -+ -+ uxx(jneu)=uxx(jneu)+xxx(j)*anorm -+ uyy(jneu)=uyy(jneu)+yyy(j)*anorm -+ uzz(jneu)=uzz(jneu)+zzz(j)*anorm -+ -+ enddo -+ -+c vector from site to geometric centre -+ -+ do j=jj0,jj1 -+ -+ txx(j)=xxx(j)-uxx(jneu) -+ tyy(j)=yyy(j)-uyy(jneu) -+ tzz(j)=zzz(j)-uzz(jneu) -+ -+ enddo -+ -+ enddo -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ lchk=.true. -+ ibig=0 -+ ia=0 -+ -+ if(newplst.or.(mod(nstep-nstep0,multt).le.1))then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ engsrl=0.d0 -+ virsrl=0.d0 -+ -+c initialise solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c outer loop over neutral groups -+ -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=-1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1.and.(rvdw.gt.rprim-delr))then -+ -+ call srfrceneu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrl=engsrl+engacc -+ virsrl=virsrl+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (lsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpl=engcpl+engacc -+ vircpl=vircpl+viracc -+ -+ else -+ -+ call error(idnode,250) -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ flx(i)=fxx(i) -+ fly(i)=fyy(i) -+ flz(i)=fzz(i) -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+ do i=1,9 -+ -+ stresl(i)=stress(i) -+ stress(i)=0.d0 -+ -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol(:) -+ cou_sol_lng(:)=cou_sol(:) -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc(:) -+ cou_exc_lng(:)=cou_exc(:) -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+c calculate interatomic distances -+ -+ isn=1 -+ call neutlst -+ x (.true.,lchk,isn,imcon,idnode,ineu,ia,ik, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c trap possible array bound exception -+ -+ ibig=max(ibig,ik) -+ if(ik.gt.mxxdf)ik=0 -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrceneu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,dlrpot,rvdw) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.2)then -+ -+ call coul2neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+ call coul0neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,250) -+ -+ elseif(keyfce/2.eq.5)then -+ -+ call coul3neu -+ x (llsolva,lfree,lghost,ik,engacc,viracc,epsq,rcut,alpha) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ endif -+ -+c accumulate radial distribution functions out to rcut -+ -+ if(lgr)then -+ call rdf0neu(ik,rcut) -+ endif -+ -+ enddo -+ -+c ******************END OF PRIMARY NEIGHBOUR PROCESSING************* -+ -+c check on validity of call to neutlst -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ if(.not.lchk)then -+ call gimax(ibig,1,i) -+ if(idnode.eq.0)write(nrite,*)'mxxdf must be at least ',ibig -+ if(idnode.eq.0)write(nrite,*)'mxxdf is currently ',mxxdf -+ call error(idnode,479) -+ endif -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary neighbour contributions to force, energy etc -+ -+ if(newplst)then -+ -+ do i=1,natms -+ -+ fpx(i)=flx(i) -+ fpy(i)=fly(i) -+ fpz(i)=flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stresl(i) -+ enddo -+ -+ engsr1=engsrl -+ virsr1=virsrl -+ engcp1=engcpl -+ vircp1=vircpl -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol_lng(:) -+ cou_sol_put(:)=cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc_lng(:) -+ cou_exc_put(:)=cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c calculate force increments etc -+ -+ if(mod(nstep-nstep0,multt).eq.1)then -+ -+ do i=1,natms -+ -+ flx(i)=flx(i)-fpx(i) -+ fly(i)=fly(i)-fpy(i) -+ flz(i)=flz(i)-fpz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresl(i)=stresl(i)-stresp(i) -+ enddo -+ -+ virsrl=virsrl-virsr1 -+ engsrl=engsrl-engsr1 -+ vircpl=vircpl-vircp1 -+ engcpl=engcpl-engcp1 -+ -+c solvation and excitation increments -+ -+ if(lsolva)then -+ -+ vdw_sol_lng(:)=vdw_sol_lng(:)-vdw_sol_put(:) -+ cou_sol_lng(:)=cou_sol_lng(:)-cou_sol_put(:) -+ -+ if(lghost)then -+ -+ vdw_exc_lng(:)=vdw_exc_lng(:)-vdw_exc_put(:) -+ cou_exc_lng(:)=cou_exc_lng(:)-cou_exc_put(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c extrapolate long range terms -+ -+ ann=dble(mod(nstep-nstep0,multt)) -+ -+ do i=1,natms -+ -+ fxx(i)=fpx(i)+flx(i)*ann+fxx(i) -+ fyy(i)=fpy(i)+fly(i)*ann+fyy(i) -+ fzz(i)=fpz(i)+flz(i)*ann+fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresl(i)*ann+stresp(i) -+ enddo -+ -+ engsrp=engsr1+engsrl*ann+engsrp -+ virsrp=virsr1+virsrl*ann+virsrp -+ engcpe=engcp1+engcpl*ann+engcpe -+ vircpe=vircp1+vircpl*ann+vircpe -+ -+c solvation and excitation extrapolation -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol_put(:)+vdw_sol_lng(:)*ann+vdw_sol(:) -+ cou_sol(:)=cou_sol_put(:)+cou_sol_lng(:)*ann+cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc_put(:)+vdw_exc_lng(:)*ann+vdw_exc(:) -+ cou_exc(:)=cou_exc_put(:)+cou_exc_lng(:)*ann+cou_exc(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (txx,tyy,tzz,uxx,uyy,uzz,stat=fail(1)) -+ -+ return -+ end subroutine multiple_neu -+ -+ subroutine multiple_nsq -+ x (lnsq,lgofr,lzeql,newlst,lsolva,lfree,lghost,idnode, -+ x imcon,keyfce,multt,mxnode,natms,nstep,nstbgr,nsteql, -+ x numrdf,nsolva,isolva,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for multiple time step algorithm -+c to be used with all-pairs option -+c -+c flx,fly,flz : forces from electrostatics from r > rcut -+c fpx,fpy,fpz : forces from electrostatics from rprim < r <= rcut -+c fxx,fyy,fzz : total force -+c -+c copyright daresbury laboratory 1993 -+c -+c author t. forester, may 1993 -+c -+c keyfce = odd ------ short range potentials calculated : srfrce -+c = 0,1 ------ no electrostatics -+c Ewald sum --- not used -+c = 4,5 ------ Distance dependent dielectric : coul2 -+c = 6,7 ------ coulombic : coul0 -+c truncated and shifted coulombic -- not used -+c reaction field - not used -+c -+c**************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=5 -+ logical newplst,newlst,lgofr,lzeql,lgr,lnsq,newjob,lsolva -+ logical lfree,lghost,llsolva -+ integer idnode,imcon,keyfce,multt,mxnode,natms,nstep,nstbgr -+ integer nsteql,numrdf,fail,nstep0,ii,ik,k,numlsts,nsolva -+ integer isolva,i,j -+ real(8) delr,dlrpot,engcpe,engsrp,engcp3,epsq,rcut -+ real(8) rprim,rvdw,vircpe,virsrp,vircp3,rcut1,engcp2,vircp2 -+ real(8) engsr2,virsr2,stresp,engacc,viracc -+ -+ real(8), allocatable :: fpx(:),fpy(:),fpz(:) -+ real(8), allocatable :: vdw_sol_put(:),cou_sol_put(:) -+ real(8), allocatable :: vdw_exc_put(:),cou_exc_put(:) -+ -+ dimension stresp(9),fail(nnn) -+ -+ save engsr2,virsr2,engcp2,vircp2,nstep0,numlsts,stresp,fpx,fpy,fpz -+ save vdw_sol_put,cou_sol_put,vdw_exc_put,cou_exc_put -+ -+ data numlsts/-1/ -+ data newjob/.true./ -+ -+c allocate work arrays -+ -+ if(newjob)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (fpx(mxatms),fpy(mxatms),fpz(mxatms),stat=fail(1)) -+ if(lsolva)then -+ -+ allocate (vdw_sol_put(mxtmls_sol2),stat=fail(2)) -+ allocate (cou_sol_put(mxtmls_sol2),stat=fail(3)) -+ if(lghost)then -+ allocate (vdw_exc_put(mxtmls_exc2),stat=fail(4)) -+ allocate (cou_exc_put(mxtmls_exc2),stat=fail(5)) -+ endif -+ -+ endif -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1860) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+ if(lnsq)then -+ -+ llsolva=.false. -+ if(lsolva)then -+ llsolva=(mod(nstep-nsolva,isolva).eq.0) -+ endif -+ -+c divide neighbour list into primary and secondary neighbours -+ -+ if(newplst)then -+ -+ numlsts=numlsts+1 -+ call primlst(idnode,mxnode,natms,imcon,rprim) -+ -+ endif -+ -+c flag for accumulating rdfs -+ -+ lgr=(lgofr.and.(.not.lzeql.or.(nstep-nsteql.gt.0))) -+ lgr=(lgr.and.newplst.and.(mod(numlsts,nstbgr).eq.0)) -+ -+c set extended cutoff for electrostatics - secondary shell -+ -+ rcut1=rcut+delr -+ -+ if(newlst)nstep0=nstep -+ newplst=(newlst.or.mod(nstep-nstep0,multt).eq.0) -+ -+c ********************PROCESS TERTIARY NEIGHBOURS********************* -+ -+ if(newplst)then -+ -+ call coul_nsq -+ x (lsolva,lfree,lghost,idnode,mxnode,natms,imcon,epsq,rcut, -+ x engcp3,vircp3) -+ -+ endif -+ -+c ****************END OF TERTIARY NEIGHBOUR PROCESSING************** -+ -+c ********************PROCESS SECONDARY NEIGHBOURS******************** -+ -+ if(newplst)then -+ -+c zero accumulators for secondary neighbour energies and virial -+ -+ engcp2=0.d0 -+ vircp2=0.d0 -+ engsr2=0.d0 -+ virsr2=0.d0 -+ -+c zero secondary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+ ii=0 -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic vectors -+ -+ ik=0 -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition only for interactions > rprim -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c short range forces for secondary shell -+ -+ if((mod(keyfce,2).eq.1).and.(rvdw.gt.rprim-delr))then -+ -+ call srfrce -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsr2=engsr2+engacc -+ virsr2=virsr2+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (lsolva,lfree,lghost,i,ik,engacc,viracc,rcut1,epsq) -+ -+ engcp2=engcp2+engacc -+ vircp2=vircp2+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+c truncated shifted coulombic potential -+ -+ call error(idnode,424) -+ -+ endif -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+ enddo -+ -+c store secondary forces and stress tensor -+ -+ do i=1,natms -+ -+ fpx(i)=fxx(i) -+ fpy(i)=fyy(i) -+ fpz(i)=fzz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stresp(i)=stress(i) -+ enddo -+ -+c store solvation and excitation arrays -+ -+ if(lsolva)then -+ -+ vdw_sol_put(:)=vdw_sol(:) -+ cou_sol_put(:)=cou_sol(:) -+ -+ if(lghost)then -+ -+ vdw_exc_put(:)=vdw_exc(:) -+ cou_exc_put(:)=cou_exc(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c ****************END OF SECONDARY NEIGHBOUR PROCESSING************* -+ -+c ********************PROCESS PRIMARY NEIGHBOURS******************** -+ -+c zero accumulators for total energies and virials -+ -+ engcpe=0.d0 -+ engsrp=0.d0 -+ vircpe=0.d0 -+ virsrp=0.d0 -+ -+c zero primary forces -+ -+ do i=1,natms -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ enddo -+ -+c zero stress tensor -+ -+ do i=1,9 -+ stress(i)=0.d0 -+ enddo -+ -+c zero solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ -+ if(lghost)then -+ -+ vdw_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ -+ endif -+ -+ endif -+ -+c calculate primary pair force contributions -+ -+ ii=0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ ik=0 -+ -+ do k=1,lentry(ii) -+ -+ j=-list(ii,k) -+ -+ if(j.gt.0)then -+ -+ ik=ik+1 -+ ilist(ik)=j -+ xdf(ik)=xxx(i)-xxx(j) -+ ydf(ik)=yyy(i)-yyy(j) -+ zdf(ik)=zzz(i)-zzz(j) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,ik,cell,xdf,ydf,zdf) -+ -+c square of interatomic distances -+ -+ do k=1,ik -+ -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ -+ enddo -+ -+c accumulate radial distribution functions : out to rcut -+ -+ if(lgr)call rdf0(i,ik,rcut) -+ -+c calculate short range force and potential terms -+ -+ if(mod(keyfce,2).eq.1)then -+ -+ call srfrce -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rvdw,dlrpot) -+ -+ engsrp=engsrp+engacc -+ virsrp=virsrp+viracc -+ -+ endif -+ -+c calculate coulombic force and potential terms -+ -+ if(keyfce/2.eq.1.or.keyfce/2.eq.6)then -+ -+ call error(idnode,424) -+ -+ elseif(keyfce/2.eq.2)then -+ -+c distance dependent dielectric -+ -+ call coul2 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.3)then -+ -+c coulombic potential -+ -+ call coul0 -+ x (llsolva,lfree,lghost,i,ik,engacc,viracc,rcut,epsq) -+ -+ engcpe=engcpe+engacc -+ vircpe=vircpe+viracc -+ -+ elseif(keyfce/2.eq.4)then -+ -+ call error(idnode,424) -+ -+ endif -+ -+ enddo -+ -+c **************END OF PRIMARY NEIGHBOUR PROCESSING***************** -+ -+c counter for rdf statistics outside loop structure -+ -+ if(lgr)numrdf=numrdf+1 -+ -+c add in secondary and tertiary neighbour contributions to -+c force, energy etc -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)+fpx(i)+flx(i) -+ fyy(i)=fyy(i)+fpy(i)+fly(i) -+ fzz(i)=fzz(i)+fpz(i)+flz(i) -+ -+ enddo -+ -+ do i=1,9 -+ stress(i)=stress(i)+stresp(i) -+ enddo -+ -+ engsrp=engsrp+engsr2 -+ virsrp=virsrp+virsr2 -+ -+ engcpe=engcpe+engcp2+engcp3 -+ vircpe=vircpe+vircp2+vircp3 -+ -+c calculate solvation and excitation arrays -+ -+ if(llsolva)then -+ -+ vdw_sol(:)=vdw_sol(:)+vdw_sol_put(:)+vdw_sol_lng(:) -+ cou_sol(:)=cou_sol(:)+cou_sol_put(:)+cou_sol_lng(:) -+ -+ if(lghost)then -+ -+ vdw_exc(:)=vdw_exc(:)+vdw_exc_put(:)+vdw_exc_lng(:) -+ cou_exc(:)=cou_exc(:)+cou_exc_put(:)+cou_exc_lng(:) -+ -+ endif -+ -+ endif -+ -+c sum up contributions to short range and coulombic potential -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engsrp -+ buffer(2)=virsrp -+ buffer(3)=engcpe -+ buffer(4)=vircpe -+ buffer(5)=vdw_fre -+ buffer(6)=cou_fre -+ buffer(7)=vdw_vir -+ buffer(8)=cou_vir -+ call gdsum(buffer(1),8,buffer(9)) -+ engsrp=buffer(1) -+ virsrp=buffer(2) -+ engcpe=buffer(3) -+ vircpe=buffer(4) -+ vdw_fre=buffer(5) -+ cou_fre=buffer(6) -+ vdw_vir=buffer(7) -+ cou_vir=buffer(8) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine multiple_nsq -+ -+ subroutine neutlst -+ x (newlst,lchk,isn,imcon,idnode,ineu,ia,ll, -+ x txx,tyy,tzz,uxx,uyy,uzz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to create pair lists for neutral group -+c implementations. -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c -+c isn = -1 => secondary neighbours -+c isn = 1 => primary neighbours - must contain excld interactions -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,lexc -+ integer isn,imcon,idnode,ineu,ia,ll,i,jj,jj0,jj1 -+ integer fail,ibig,keyexc,lenia,j,jneu,in0,in1 -+ real(8) txx,tyy,tzz,uxx,uyy,uzz -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1830) -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c set cutoff radius -+ -+ ll=0 -+ -+c number of excludes found -+ -+ if(isn.lt.0)then -+ keyexc=nexatm(ia)+2 -+ else -+ keyexc=1 -+ endif -+ -+c do centre - centre distances -+ -+ lenia=lentry(ia) -+ -+ do j=1,lenia -+ -+ jneu=abs(list(ia,j)) -+ xxt(j)=uxx(ineu)-uxx(jneu) -+ yyt(j)=uyy(ineu)-uyy(jneu) -+ zzt(j)=uzz(ineu)-uzz(jneu) -+ -+ enddo -+ -+ call images(imcon,0,1,lenia,cell,xxt,yyt,zzt) -+ -+c working intragroup vectors of central group -+c - for periodic boundaries -+ -+ in0=neulst(ineu) -+ in1=neulst(ineu+1)-1 -+ -+c loop over neutral groups sites of a -+ -+ -+c loop over groups in list -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj)*isn -+ -+ if(jneu.gt.0)then -+ -+ do i=in0,in1 -+ -+ jj0=neulst(jneu) -+ jj1=neulst(jneu+1)-1 -+ -+ if(ineu.eq.jneu)jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,jj1 -+ -+c reject atoms in excluded pair list -+ -+ lexc=.false. -+ -+ if(keyexc.lt.nexatm(ia))then -+ -+ if(lexatm(ia,keyexc).eq.i)then -+ if(lexatm(ia,keyexc+1).eq.j)then -+ lexc=.true. -+ keyexc=keyexc+2 -+ endif -+ endif -+ -+ endif -+ -+c reject frozen atom pairs -+ -+ if(lstfrz(i).ne.0)then -+ if(lstfrz(j).ne.0)lexc=.true. -+ endif -+ -+ if(.not.lexc)then -+ -+ ll=ll+1 -+ if(ll.le.mxxdf)then -+ -+ xdf(ll)=txx(i)+xxt(jj)-txx(j) -+ ydf(ll)=tyy(i)+yyt(jj)-tyy(j) -+ zdf(ll)=tzz(i)+zzt(jj)-tzz(j) -+ rsqdf(ll)=xdf(ll)**2+ydf(ll)**2+zdf(ll)**2 -+ ilist(ll)=i -+ jlist(ll)=j -+ -+ else -+ -+ lchk=.false. -+ ibig=max(ibig,ll) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine neutlst -+ -+ end module forces_module -+ -diff -urN dl_class_1.9.orig/srcmod/four_body_module.f dl_class_1.9/srcmod/four_body_module.f ---- dl_class_1.9.orig/srcmod/four_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/four_body_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,979 @@ -+ module four_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining four-body potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - w. smith aug 2008 : solvation, free energy, excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ real(8), allocatable :: prmfbp(:,:),rcut4b(:) -+ integer, allocatable :: lstfbp(:),ltpfbp(:),latfbp(:) -+ -+ save prmfbp,rcut4b,lstfbp,ltpfbp,latfbp,filter -+ -+ contains -+ -+ subroutine alloc_fbp_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(6) -+ -+ do i=1,6 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmfbp(mxfbp,mxpfbp),stat=fail(1)) -+ allocate (rcut4b(mxfbp),stat=fail(2)) -+ allocate (lstfbp(mxfbp),stat=fail(3)) -+ allocate (ltpfbp(mxfbp),stat=fail(4)) -+ allocate (latfbp(mxatms),stat=fail(5)) -+ allocate (filter(mxsite),stat=fail(6)) -+ -+ do i=1,6 -+ if(fail(i).gt.0)call error(idnode,1140) -+ enddo -+ -+ end subroutine alloc_fbp_arrays -+ -+ subroutine define_four_body -+ x (safe,lunits,lmols,idnode,ntpfbp,ntpatm, -+ x rcutfb,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining four body potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1,atom2,atom3 -+ character*1 message(80) -+ integer idnode,ntpfbp,ntpatm,ifbp,itpfbp,keypot,katm0 -+ integer i,katm1,katm2,katm3,jtpatm,ka1,ka2,ka3,keyfbp,kfbp -+ integer j,fail,idum -+ real(8) rcutfb,engunit -+ real(8), allocatable :: parpot(:) -+ -+ data fail/0/ -+ -+ allocate (parpot(mxpfbp),stat=fail) -+ if(fail.ne.0)call error(idnode,1150) -+ -+ ntpfbp=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified four ', -+ x 'body potentials',i10)") ntpfbp -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', -+ x 'atom 4 ',3x,' key',30x,'parameters'/,/)") -+ -+ endif -+ if(ntpfbp.gt.mxfbp) call error(idnode,89) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ do ifbp=1,mxfbp -+ lstfbp(ifbp)=0 -+ enddo -+ -+ do ifbp=1,mxfbp,mx3fbp -+ lstfbp(ifbp)=-1 -+ enddo -+ -+ rcutfb=0.d0 -+ -+ do itpfbp=1,ntpfbp -+ -+ do i=1,mxpfbp -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+c Note the order!! atom0 is the central atom -+ -+ call copystring(record,message,80) -+ call getword(atom0,record,8,lenrec) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call getword(atom3,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'harm') then -+ keypot=1 -+ elseif(keyword(1:4).eq.'hcos') then -+ keypot=2 -+ elseif(keyword(1:4).eq.'plan') then -+ keypot=3 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,443) -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,4a8,4x,a4,1x,1p,9e13.5)") -+ x atom0,atom1,atom2,atom3,keyword(1:4),(parpot(j),j=1,mxpfbp) -+ -+ katm0=0 -+ katm1=0 -+ katm2=0 -+ katm3=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ if(atom3.eq.unqatm(jtpatm))katm3=jtpatm -+ -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0.or. -+ x katm3.eq.0) call error(idnode,91) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ filter(katm2)=.true. -+ filter(katm3)=.true. -+ -+ ka1=max(katm1,katm2,katm3) -+ ka3=min(katm1,katm2,katm3) -+ ka2=katm1+katm2+katm3-ka1-ka3 -+ keyfbp=ka3+(ka2*(ka2-1))/2+(ka1*(ka1**2-1))/6+ -+ x (katm0-1)*mx3fbp -+ -+ if(keyfbp.gt.mxfbp) call error(idnode,101) -+ -+c convert parameters to internal units -+ -+ parpot(1)=parpot(1)*engunit -+ parpot(2)=parpot(2)*(pi/180.d0) -+ -+ if(keypot.eq.2)then -+ -+ parpot(2)=cos(parpot(2)) -+ -+ endif -+ -+ if(lstfbp(keyfbp).gt.0) call error(idnode,19) -+ lstfbp(keyfbp)=itpfbp -+ ltpfbp(itpfbp)=keypot -+ kfbp=mx3fbp*((keyfbp-1)/mx3fbp)+1 -+ if(lstfbp(kfbp).lt.0)lstfbp(kfbp)=0 -+ -+c calculate max four body cutoff -+ -+ rcutfb=max(rcutfb,parpot(3)) -+ rcut4b(itpfbp)=parpot(3) -+ -+c store four body potential parameters -+ -+ do i=1,mxpfbp -+ prmfbp(itpfbp,i)=parpot(i) -+ enddo -+ -+ enddo -+ -+ if(rcutfb.lt.1.d-6)call error(idnode,453) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_four_body -+ -+ subroutine fbpfrc -+ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcutfb, -+ x engfbp,virfbp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating four body inversion forces -+c arising from the inversion angle between three atoms around a -+c nominated central atom -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped cell geometry -+c -+c copyright - daresbury laboratory 1996 -+c author - w.smith july 1996 -+c adapted - w.smith aug 2008 solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lskip -+ logical idrive,jdrive,kdrive,ldrive -+ integer idnode,mxnode,natms,imcon,nix,niy,niz -+ integer i,j,k,nbx,nby,nbz,ncells,ix,iy,iz,icell,jx,jy -+ integer jz,jj,kk,ia,ib,ifbp,jfbp,kfbp,jklbd,kkfbp,ktyp,ii -+ integer ic,ll,id,lfbp,l,limit,jcell,kkk -+ real(8) rcutfb,engfbp,virfbp,vbn,vcn,pterm,xm,ym,zm -+ real(8) strs,cprp,det,xdc,ydc,zdc,sxx,syy,szz,sxab,strs_loc -+ real(8) syab,szab,xab,yab,zab,rab2,sxac,syac,szac,xac,yac -+ real(8) zac,rac2,sxad,syad,szad,xad,yad,zad,rad2,rrab,rrac -+ real(8) rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx,vby,vbz -+ real(8) rvb,wwb,ucx,ucy,ucz,ucn,ruc,vcx,vcy,vcz,rvc,wwc -+ real(8) udx,udy,udz,udn,rud,vdx,vdy,vdz,vdn,rvd,wwd,cosb -+ real(8) cosc,cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd -+ real(8) rucd,rucb,rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc -+ real(8) fax,fay,faz,fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz -+ dimension cprp(10),strs(6),nix(27),niy(27),niz(27),strs_loc(6) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+ lskip=(lfree.or.lexcite) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ engfbp=0.d0 -+ virfbp=0.d0 -+ fbp_fre=0.d0 -+ fbp_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(9)=.true. -+ en4_sol(:)=0.d0 -+ if(lexcite)en4_exc(:)=0.d0 -+ -+ endif -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ do i=1,natms -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ enddo -+ -+ cell(1)=2.d0*xm+rcutfb -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rcutfb -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rcutfb -+ -+ endif -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,79) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rcutfb+1.d-6)) -+ nby=int(cprp(8)/(rcutfb+1.d-6)) -+ nbz=int(cprp(9)/(rcutfb+1.d-6)) -+ ncells=nbx*nby*nbz -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) write(nrite,'(a,i6)') -+ x 'number of required link cells in routine fbpfrc is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in routine fbpfrc is ',mxcell -+ call error(idnode,87) -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of inversion -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ latfbp(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ ia=latfbp(ii) -+ if(lmetadyn)idrive=driven(ltype(ia)) -+ ifbp=mx3fbp*(ltype(ia)-1) -+ if(mod(ia,mxnode).eq.idnode.and.lstfbp(ifbp+1).ge.0)then -+ -+ do jj=1,limit-2 -+ -+ ib=latfbp(jj) -+ if(lmetadyn)jdrive=driven(ltype(ib)) -+ -+ do kk=jj+1,limit-1 -+ -+ ic=latfbp(kk) -+ if(lmetadyn)kdrive=driven(ltype(ic)) -+ -+ do ll=kk+1,limit -+ -+ id=latfbp(ll) -+ if(lmetadyn)ldrive=driven(ltype(id)) -+ -+ if(lskip)then -+ -+ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. -+ x atm_fre(ic).eq.1.or.atm_fre(id).eq.1).and. -+ x (atm_fre(ia).eq.2.or.atm_fre(ib).eq.2.or. -+ x atm_fre(ic).eq.2.or.atm_fre(id).eq.2))cycle -+ -+ endif -+ -+ jfbp=max(ltype(ib),ltype(ic),ltype(id)) -+ lfbp=min(ltype(ib),ltype(ic),ltype(id)) -+ kfbp=ltype(ib)+ltype(ic)+ltype(id)-jfbp-lfbp -+ jklbd=ifbp+lfbp+(kfbp*(kfbp-1))/2+(jfbp*(jfbp**2-1))/6 -+ kkfbp=lstfbp(jklbd) -+ if(kkfbp.gt.0)then -+ -+ sxab=xxx(ib)-xxx(ia) -+ sxab=sxab-nint(sxab) -+ syab=yyy(ib)-yyy(ia) -+ syab=syab-nint(syab) -+ szab=zzz(ib)-zzz(ia) -+ szab=szab-nint(szab) -+ -+ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab -+ if(abs(xab).lt.rcutfb)then -+ -+ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab -+ if(abs(yab).lt.rcutfb)then -+ -+ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab -+ if(abs(zab).lt.rcutfb)then -+ -+ rab2=xab*xab+yab*yab+zab*zab -+ -+ sxac=xxx(ic)-xxx(ia) -+ sxac=sxac-nint(sxac) -+ syac=yyy(ic)-yyy(ia) -+ syac=syac-nint(syac) -+ szac=zzz(ic)-zzz(ia) -+ szac=szac-nint(szac) -+ -+ xac=cell(1)*sxac+cell(4)*syac+cell(7)*szac -+ if(abs(xac).lt.rcutfb)then -+ -+ yac=cell(2)*sxac+cell(5)*syac+cell(8)*szac -+ if(abs(yac).lt.rcutfb)then -+ -+ zac=cell(3)*sxac+cell(6)*syac+cell(9)*szac -+ if(abs(zac).lt.rcutfb)then -+ -+ rac2=xac*xac+yac*yac+zac*zac -+ -+ sxad=xxx(id)-xxx(ia) -+ sxad=sxad-nint(sxad) -+ syad=yyy(id)-yyy(ia) -+ syad=syad-nint(syad) -+ szad=zzz(id)-zzz(ia) -+ szad=szad-nint(szad) -+ -+ xad=cell(1)*sxad+cell(4)*syad+cell(7)*szad -+ if(abs(xad).lt.rcutfb)then -+ -+ yad=cell(2)*sxad+cell(5)*syad+cell(8)*szad -+ if(abs(yad).lt.rcutfb)then -+ -+ zad=cell(3)*sxad+cell(6)*syad+cell(9)*szad -+ if(abs(zad).lt.rcutfb)then -+ -+ rad2=xad*xad+yad*yad+zad*zad -+ -+ if(rcut4b(kkfbp)**2.ge.max(rab2,rac2,rad2))then -+ -+ rrab=1.d0/sqrt(rab2) -+ rrac=1.d0/sqrt(rac2) -+ rrad=1.d0/sqrt(rad2) -+ -+ rbc=xab*xac+yab*yac+zab*zac -+ rcd=xac*xad+yac*yad+zac*zad -+ rdb=xad*xab+yad*yab+zad*zab -+ -+c calculate bond-angle-plane vectors -+ -+ ubx=xac*rrac+xad*rrad -+ uby=yac*rrac+yad*rrad -+ ubz=zac*rrac+zad*rrad -+ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) -+ ubx=ubn*ubx -+ uby=ubn*uby -+ ubz=ubn*ubz -+ rub=xab*ubx+yab*uby+zab*ubz -+ -+ vbx=xac*rrac-xad*rrad -+ vby=yac*rrac-yad*rrad -+ vbz=zac*rrac-zad*rrad -+ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) -+ vbx=vbn*vbx -+ vby=vbn*vby -+ vbz=vbn*vbz -+ rvb=xab*vbx+yab*vby+zab*vbz -+ wwb=sqrt(rub**2+rvb**2) -+ -+ ucx=xad*rrad+xab*rrab -+ ucy=yad*rrad+yab*rrab -+ ucz=zad*rrad+zab*rrab -+ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) -+ ucx=ucn*ucx -+ ucy=ucn*ucy -+ ucz=ucn*ucz -+ ruc=xac*ucx+yac*ucy+zac*ucz -+ -+ vcx=xad*rrad-xab*rrab -+ vcy=yad*rrad-yab*rrab -+ vcz=zad*rrad-zab*rrab -+ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) -+ vcx=vcn*vcx -+ vcy=vcn*vcy -+ vcz=vcn*vcz -+ rvc=xac*vcx+yac*vcy+zac*vcz -+ wwc=sqrt(ruc**2+rvc**2) -+ -+ udx=xab*rrab+xac*rrac -+ udy=yab*rrab+yac*rrac -+ udz=zab*rrab+zac*rrac -+ udn=1.d0/sqrt(udx**2+udy**2+udz**2) -+ udx=udn*udx -+ udy=udn*udy -+ udz=udn*udz -+ rud=xad*udx+yad*udy+zad*udz -+ -+ vdx=xab*rrab-xac*rrac -+ vdy=yab*rrab-yac*rrac -+ vdz=zab*rrab-zac*rrac -+ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) -+ vdx=vdn*vdx -+ vdy=vdn*vdy -+ vdz=vdn*vdz -+ rvd=xad*vdx+yad*vdy+zad*vdz -+ wwd=sqrt(rud**2+rvd**2) -+ -+c calculate inversion angle cosines -+ -+ cosb=wwb*rrab -+ cosc=wwc*rrac -+ cosd=wwd*rrad -+ if(abs(cosb).gt.1.d0)cosb=sign(1.d0,cosb) -+ if(abs(cosc).gt.1.d0)cosc=sign(1.d0,cosc) -+ if(abs(cosd).gt.1.d0)cosd=sign(1.d0,cosd) -+ -+c select potential energy function type -+ -+ ktyp=ltpfbp(kkfbp) -+ -+c calculate potential energy and scalar force term -+ -+ if(ktyp.eq.1)then -+ -+c key=1 for harmonic potential -+ -+ thb=acos(cosb) -+ thc=acos(cosc) -+ thd=acos(cosd) -+ -+ pterm=0.5d0*prmfbp(kkfbp,1)* -+ x ((thb-prmfbp(kkfbp,2))**2+ -+ x (thc-prmfbp(kkfbp,2))**2+ -+ x (thd-prmfbp(kkfbp,2))**2)/3.d0 -+ -+ gamb=0.d0 -+ if(abs(thb).gt.1.d-12)gamb=prmfbp(kkfbp,1)* -+ x (thb-prmfbp(kkfbp,2))/(3.d0*sin(thb)) -+ gamc=0.d0 -+ if(abs(thc).gt.1.d-12)gamc=prmfbp(kkfbp,1)* -+ x (thc-prmfbp(kkfbp,2))/(3.d0*sin(thc)) -+ gamd=0.d0 -+ if(abs(thd).gt.1.d-12)gamd=prmfbp(kkfbp,1)* -+ x (thd-prmfbp(kkfbp,2))/(3.d0*sin(thd)) -+ -+ else if(ktyp.eq.2)then -+ -+c key=2 for harmonic cosine inversion potential -+ -+ pterm=0.5d0*prmfbp(kkfbp,1)* -+ x ((cosb-prmfbp(kkfbp,2))**2+ -+ x (cosc-prmfbp(kkfbp,2))**2+ -+ x (cosd-prmfbp(kkfbp,2))**2)/3.d0 -+ -+ gamb=-prmfbp(kkfbp,1)*(cosb-prmfbp(kkfbp,2))/3.d0 -+ gamc=-prmfbp(kkfbp,1)*(cosc-prmfbp(kkfbp,2))/3.d0 -+ gamd=-prmfbp(kkfbp,1)*(cosd-prmfbp(kkfbp,2))/3.d0 -+ -+ else if(ktyp.eq.3)then -+ -+c key=3 for planar inversion potentials -+ -+ pterm=prmfbp(kkfbp,1)* -+ x (3.d0-cosb-cosc-cosd)/3.d0 -+ -+ gamb=-prmfbp(kkfbp,1)/3.d0 -+ gamc=-prmfbp(kkfbp,1)/3.d0 -+ gamd=-prmfbp(kkfbp,1)/3.d0 -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ pterm=0.d0 -+ gamb=0.d0 -+ gamc=0.d0 -+ gamd=0.d0 -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set quadruple index -+ -+ if(lsolva) -+ x kkk=loc4(atmolt(ia),atmolt(ib),atmolt(ic),atmolt(id)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)en4_exc(kkk)=en4_exc(kkk)+pterm -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ fbp_fre=fbp_fre-pterm -+ pterm=lambda1*pterm -+ gamb=lambda1*gamb -+ gamc=lambda1*gamc -+ gamd=lambda1*gamd -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ fbp_fre=fbp_fre+pterm -+ pterm=lambda2*pterm -+ gamb=lambda2*gamb -+ gamc=lambda2*gamc -+ gamd=lambda2*gamd -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential -+ -+ engfbp=engfbp+pterm -+ -+ if(lsolva)en4_sol(kkk)=en4_sol(kkk)+pterm -+ -+c calculate bond and u,v scalar products -+ -+ rubc=xab*ucx+yab*ucy+zab*ucz -+ rubd=xab*udx+yab*udy+zab*udz -+ rucd=xac*udx+yac*udy+zac*udz -+ rucb=xac*ubx+yac*uby+zac*ubz -+ rudb=xad*ubx+yad*uby+zad*ubz -+ rudc=xad*ucx+yad*ucy+zad*ucz -+ -+ rvbc=xab*vcx+yab*vcy+zab*vcz -+ rvbd=xab*vdx+yab*vdy+zab*vdz -+ rvcd=xac*vdx+yac*vdy+zac*vdz -+ rvcb=xac*vbx+yac*vby+zac*vbz -+ rvdb=xad*vbx+yad*vby+zad*vbz -+ rvdc=xad*vcx+yad*vcy+zad*vcz -+ -+c calculate atomic forces -+ -+ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) -+ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) -+ x - rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) -+ x + rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) -+ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) -+ x - rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) -+ x + rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) -+ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) -+ x - rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) -+ x * gamc*rrac/wwc -+ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) -+ x + rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) -+ x * gamd*rrad/wwd -+ -+ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) -+ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) -+ x - rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) -+ x + rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) -+ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) -+ x - rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) -+ x + rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) -+ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) -+ x - rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) -+ x * gamd*rrad/wwd -+ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) -+ x + rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) -+ x * gamb*rrab/wwb -+ -+ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) -+ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) -+ x - rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) -+ x + rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) -+ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) -+ x - rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) -+ x + rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) -+ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) -+ x - rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) -+ x * gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) -+ x + rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) -+ x * gamc*rrac/wwc -+ -+ fax=-(fbx+fcx+fdx) -+ fay=-(fby+fcy+fdy) -+ faz=-(fbz+fcz+fdz) -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)+fbx -+ fyy(ib)=fyy(ib)+fby -+ fzz(ib)=fzz(ib)+fbz -+ -+ fxx(ic)=fxx(ic)+fcx -+ fyy(ic)=fyy(ic)+fcy -+ fzz(ic)=fzz(ic)+fcz -+ -+ fxx(id)=fxx(id)+fdx -+ fyy(id)=fyy(id)+fdy -+ fzz(id)=fzz(id)+fdz -+ -+c stress tensor calculation for inversion terms -+ -+ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx -+ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx -+ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx -+ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy -+ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz -+ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy (no virial) -+ -+ eng_loc=eng_loc+pterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)+fbx -+ fyy_loc(ib)=fyy_loc(ib)+fby -+ fzz_loc(ib)=fzz_loc(ib)+fbz -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx -+ fyy_loc(ic)=fyy_loc(ic)+fcy -+ fzz_loc(ic)=fzz_loc(ic)+fcz -+ -+ fxx_loc(id)=fxx_loc(id)+fdx -+ fyy_loc(id)=fyy_loc(id)+fdy -+ fzz_loc(id)=fzz_loc(id)+fdz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx -+ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx -+ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx -+ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy -+ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz -+ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ -+ enddo -+ enddo -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,443) -+ -+c global sum of four body potential and virial -+ -+ buffer(1)=engfbp -+ buffer(2)=virfbp -+ buffer(3)=fbp_fre -+ buffer(4)=fbp_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engfbp=buffer(1) -+ virfbp=buffer(2) -+ fbp_fre=buffer(3) -+ fbp_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(en4_sol,mxtmls_sol4,buffer(1)) -+ if(lexcite)call gdsum(en4_exc,mxtmls_exc4,buffer(1)) -+ -+ endif -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine fbpfrc -+ -+ end module four_body_module -diff -urN dl_class_1.9.orig/srcmod/hkewald_module.f dl_class_1.9/srcmod/hkewald_module.f ---- dl_class_1.9.orig/srcmod/hkewald_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/hkewald_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1292 @@ -+ module hkewald_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining hautman-klein ewald sum arrays -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use exclude_module -+ use error_module -+ use pair_module -+ use property_module -+ use setup_module -+ -+ implicit none -+ -+ real(8), allocatable :: ahk(:),crn(:,:) -+ real(8), allocatable :: elc(:,:),els(:,:) -+ real(8), allocatable :: emc(:,:),ems(:,:) -+ real(8), allocatable :: zzn(:),zzd(:) -+ real(8), allocatable :: hon(:,:),znp(:,:) -+ real(8), allocatable :: dhn(:,:),zgs(:) -+ real(8), allocatable :: fon(:,:),zgc(:) -+ real(8), allocatable :: ckc(:),cks(:) -+ real(8), allocatable :: pp(:),sss(:) -+ -+ save ahk,crn,elc,els,emc,ems,zzn,zzd,hon,znp,dhn,zgs -+ save fon,zgc,ckc,cks,pp,sss -+ -+ contains -+ -+ subroutine alloc_hke_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=9 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (ahk(0:mxhko),crn(0:mxhko,0:mxhko),stat=fail(1)) -+ allocate (elc(mxewld,0:1),els(mxewld,0:1),stat=fail(2)) -+ allocate (emc(mxewld,0:kmaxb),ems(mxewld,0:kmaxb),stat=fail(3)) -+ allocate (zzn(mxxdf),zzd(mxxdf),stat=fail(4)) -+ allocate (hon(mxgrid,0:mxhko),znp(mxhke,0:2*mxhko),stat=fail(5)) -+ allocate (dhn(mxgrid,0:mxhko),zgs(0:2*mxhko),stat=fail(6)) -+ allocate (fon(mxegrd,0:7),zgc(0:2*mxhko),stat=fail(7)) -+ allocate (ckc(mxewld),cks(mxewld),stat=fail(8)) -+ allocate (pp(2*mxhko),sss(mxxdf),stat=fail(9)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1730) -+ enddo -+ -+ end subroutine alloc_hke_arrays -+ -+ subroutine hkgen(idnode,nhko,nlatt,alpha,drewd,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating convergence function -+c arrays for hautman klein ewald method (up to order 3 only) -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith february 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,idnode,nhko,nlatt,k -+ real(8) alpha,drewd,rcut,ecut,den,fac,ss1,aaa,ss2 -+ -+ if(nhko.gt.mxhko)call error(idnode,332) -+ -+c define effective cutoff -+ -+ ecut=rcut*dble(2*nlatt+1) -+ -+c define grid resolution for potential arrays -+ -+ drewd=ecut/dble(mxegrd-4) -+ -+c calculate HKE coefficients -+ -+ ahk(0)=1.d0 -+ -+ do i=1,nhko -+ -+ ahk(i)=-0.25d0*ahk(i-1)*dble(2*i*(2*i-1))/dble(i*i) -+ -+ enddo -+ -+c generate convergence function arrays -+ -+ do i=1,mxegrd -+ -+ hon(i,0)=0.d0 -+ hon(i,1)=dble(i-1)*drewd -+ hon(i,2)=(2.d0*alpha/sqrpi)*exp(-(alpha*hon(i,1))**2) -+ -+ enddo -+ -+c generate error function and derivatives by recursion -+ -+ do k=100,1,-1 -+ -+ den=1.d0/dble(2*k-1) -+ fac=(2.d0*alpha**2)**(k-1) -+ -+ do i=1,mxegrd -+ -+ hon(i,0)=den*(hon(i,0)*hon(i,1)**2+fac*hon(i,2)) -+ -+ enddo -+ -+ if(k.le.2*nhko+2)then -+ -+ do i=1,mxegrd -+ -+ fon(i,k-1)=hon(i,0) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c zeroth order function -+c note: hon(1,0)=2.d0*alpha/sqrpi -+ -+ do i=1,mxegrd -+ -+ hon(i,0)= fon(i,0) -+ dhn(i,0)=-fon(i,1) -+ -+ enddo -+ -+ if(nhko.eq.0)then -+ -+ ss1=dble(mxegrd-1)*drewd -+ aaa=abs(1.d0-hon(mxegrd,nhko)*ss1) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c first order function -+c note: hon(1,1)=8.d0*alpha**3/(3.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,1)=-(2.d0*fon(i,1)-fon(i,2)*ss2) -+ dhn(i,1)= (4.d0*fon(i,2)-fon(i,3)*ss2) -+ -+ enddo -+ -+ if(nhko.eq.1)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c second order function -+c note: hon(1,2)=64.d0*alpha**5/(45.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,2)=(8.d0*fon(i,2)+ss2*(-8.d0*fon(i,3)+ss2*fon(i,4)))/9.d0 -+ dhn(i,2)=(-24.d0*fon(i,3)+ss2*(12.d0*fon(i,4)-ss2*fon(i,5))) -+ x /9.d0 -+ -+ enddo -+ -+ if(nhko.eq.2)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+c third order function (enough for anyone!) -+c note: hon(1,3)=768.d0*alpha**7/(14175.d0*sqrpi) -+ -+ do i=1,mxegrd -+ -+ ss2=(dble(i-1)*drewd)**2 -+ -+ hon(i,3)=-(48.d0*fon(i,3)+ss2*(-72.d0*fon(i,4)+ss2*( -+ x 18.d0*fon(i,5)-ss2*fon(i,6))))/225.d0 -+ dhn(i,3)= (192.d0*fon(i,4)+ss2*(-144.d0*fon(i,5)+ss2*( -+ x 24.d0*fon(i,6)-ss2*fon(i,7))))/225.d0 -+ -+ enddo -+ -+ if(nhko.eq.3)then -+ -+ aaa=abs(1.d0-hon(mxegrd,nhko)*sqrt(ss2)**(2*nhko+1)) -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,100,aaa,0.d0,0.d0) -+ -+ endif -+ -+ return -+ -+ endif -+ -+ return -+ end subroutine hkgen -+ -+ subroutine hkewald1 -+ x (idnode,mxnode,natms,imcon,nhko,kmax1,kmax2, -+ x engcpe,vircpe,alpha,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using Hautman Klein Ewald method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith february 2000 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c note - in loop over all k vectors k=2pi(ll/cl,mm/cl) -+c the values of ll and mm are selected so that the symmetry of -+c reciprocal lattice is taken into account i.e. the following -+c rules apply. -+c -+c ll ranges over the values 0 to kmax1 only. -+c -+c mm ranges over 1 to kmax2 when ll=0 and over -+c -kmax2 to kmax2 otherwise. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,mxnode,natms,imcon,nhko,kmax1,kmax2,i -+ integer iatm0,iatm1,j,k,limit,mmin,l,ll,m,mm,n -+ real(8) engcpe,vircpe,alpha,epsq,twopi,ralph,area,rarea -+ real(8) det,rcpcut,rcpct2,aaa,engsic,pm1,pm2,term,ssx,ssy -+ real(8) tmp,rkx1,rky1,rkx2,rky2,rksq,rkk,fac,eterm,fng,fn0,gaus -+ real(8) bkk,force0,forcez,pterm,scale,cprop,omg,cs -+c$$$ real(8) erfc -+ -+ dimension cprop(10),omg(9) -+ -+ save newjob,engsic -+ -+ data newjob/.true./ -+ -+c initialise coulombic potential energy -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ if(alpha.lt.1.d-8)return -+ -+c set working parameters -+ -+ twopi=2.d0*pi -+ ralph=0.5d0/alpha -+ call dcell(cell,cprop) -+ area=cprop(1)*cprop(2)*sqrt(1.d0-cprop(4)**2) -+ rarea=pi/area -+ -+c set up atoms numbers for nodes -+ -+ iatm0 = (idnode*natms)/mxnode + 1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+c initalize stress tensor working arrays -+ -+ do i = 1,9 -+ -+ omg(i) = 0.d0 -+ -+ enddo -+ -+c construct reciprocal lattice vectors and set k vector range -+ -+ call invert(cell,rcell,det) -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ call dcell(rcell,cprop) -+ rcpcut=min(dble(kmax1)*cprop(7),dble(kmax2)*cprop(8))* -+ x 1.05d0*twopi -+ rcpct2=rcpcut**2 -+ -+c compute quantities for first entry -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+c pbc check and array bound checks -+ -+ if(imcon.ne.6)call error(idnode,66) -+ if(mxhke.ne.msatms) call error(idnode,331) -+ if(mxewld.ne.msatms) call error(idnode,330) -+ -+c check hk screening function at cutoff -+ -+ aaa=cerfr(ralph,rcpcut) -+c$$$ aaa=erfc(ralph*rcpcut)/rcpcut -+ -+ if(aaa.gt.1.d-4)then -+ -+ call warning(idnode,105,aaa,0.d0,0.d0) -+c call error(idnode,487) -+ -+ endif -+ -+c calculate self interaction correction -+ -+ engsic=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ engsic=engsic+chge(i)**2 -+ -+ enddo -+ -+ engsic=-r4pie0*alpha*engsic/(sqrpi*epsq) -+ -+c binomial coefficients -+ -+ k=0 -+ crn(0,0)=0.5d0 -+ do i=1,2*nhko -+ -+ pp(i)=1.d0 -+ pm1=pp(1) -+ -+ do j=2,i -+ -+ pm2=pp(j) -+ pp(j)=pm2+pm1 -+ pm1=pm2 -+ -+ enddo -+ -+ if(mod(i,2).eq.0)then -+ -+ k=k+1 -+ do j=0,k -+ -+ term=pp(j+1)*(-1.d0)**j -+ crn(j,k)=term -+ crn(k,j)=term -+ -+ enddo -+ -+ crn(k,k)=0.5d0*crn(k,k) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c calculate and store powers of z_i -+ -+ i=0 -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ znp(i,0)=1.d0 -+ znp(i,1)=zzz(j) -+ -+ enddo -+ -+ limit=i -+ -+ do k=2,2*nhko -+ -+ do i=1,limit -+ -+ znp(i,k)=znp(i,k-1)*znp(i,1) -+ -+ enddo -+ -+ enddo -+ -+c calculate and store exponential factors -+ -+ i=0 -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ elc(i,0)=1.d0 -+ emc(i,0)=1.d0 -+ els(i,0)=0.d0 -+ ems(i,0)=0.d0 -+ ssx=rcell(1)*xxx(j)+rcell(4)*yyy(j) -+ ssy=rcell(2)*xxx(j)+rcell(5)*yyy(j) -+ elc(i,1)=cos(twopi*ssx) -+ emc(i,1)=cos(twopi*ssy) -+ els(i,1)=sin(twopi*ssx) -+ ems(i,1)=sin(twopi*ssy) -+ -+ enddo -+ -+ do l=2,kmax2 -+ -+ do i=1,limit -+ -+ emc(i,l)=emc(i,l-1)*emc(i,1)-ems(i,l-1)*ems(i,1) -+ ems(i,l)=ems(i,l-1)*emc(i,1)+emc(i,l-1)*ems(i,1) -+ -+ enddo -+ -+ enddo -+ -+c start of main loop over k vectors -+ -+ mmin=1 -+ -+ do ll=0,kmax1 -+ -+ l=ll -+ tmp = twopi*dble(ll) -+ rkx1=tmp*rcell(1) -+ rky1=tmp*rcell(4) -+ -+c put cos(i,L) terms into cos(i,0) array -+ -+ if(l.eq.1) then -+ -+ do i=1,limit -+ -+ elc(i,0)=elc(i,1) -+ els(i,0)=els(i,1) -+ -+ enddo -+ -+ elseif(l.gt.1) then -+ -+ do i=1,limit -+ -+ cs=elc(i,0) -+ elc(i,0)=cs*elc(i,1)-els(i,0)*els(i,1) -+ els(i,0)=els(i,0)*elc(i,1)+cs*els(i,1) -+ -+ enddo -+ -+ endif -+ -+ do mm=mmin,kmax2 -+ -+ m=iabs(mm) -+ tmp = twopi*dble(mm) -+ rkx2=rkx1+tmp*rcell(2) -+ rky2=rky1+tmp*rcell(5) -+ -+c test on magnitude of k vector -+ -+ rksq=rkx2*rkx2+rky2*rky2 -+ -+ if(rksq.le.rcpct2)then -+ -+c calculate exp(ikr) terms and product with charges -+ -+ i=0 -+ -+ if(mm.ge.0)then -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)-els(i,0)*ems(i,m)) -+ cks(i)=chge(j)*(els(i,0)*emc(i,m)+ems(i,m)*elc(i,0)) -+ -+ enddo -+ -+ else -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ -+ ckc(i)=chge(j)*(elc(i,0)*emc(i,m)+els(i,0)*ems(i,m)) -+ cks(i)=chge(j)*(els(i,0)*emc(i,m)-ems(i,m)*elc(i,0)) -+ -+ enddo -+ -+ endif -+ -+c calculate sum of products of powers of z_i and q_i exp(ik.s_i) -+ -+ do k=0,2*nhko -+ -+ zgc(k)=0.d0 -+ zgs(k)=0.d0 -+ -+ do i=1,limit -+ -+ zgc(k)=zgc(k)+ckc(i)*znp(i,k) -+ zgs(k)=zgs(k)+cks(i)*znp(i,k) -+ -+ enddo -+ -+ enddo -+ -+c perform global summation of zgc and zgs arrays -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(zgc(0),2*nhko+1,buffer) -+ call gdsum(zgs(0),2*nhko+1,buffer) -+ -+ endif -+ -+c calculate 0th order screening function -+ -+ rkk=sqrt(rksq) -+ fn0=cerfr(ralph,rkk) -+c$$$ fn0=erfc(ralph*rkk)/rkk -+ gaus=exp(-(ralph*rkk)**2)/(alpha*sqrpi) -+ -+c sum terms for orders of the screening function -+ -+ fac=1.d0 -+ -+ do k=0,nhko -+ -+c sum over z_i binomial contributions -+ -+ eterm=0.d0 -+ fng=fac*fn0 -+ do m=0,k -+ -+ n=2*k-m -+ -+c sum energy terms -+ -+ eterm=eterm+crn(m,k)*(zgc(m)*zgc(n)+zgs(m)*zgs(n)) -+ -+c calculate force contribution to each site -+ -+ i=0 -+ bkk=-fng*crn(m,k) -+ -+ do j=iatm0,iatm1 -+ -+ i=i+1 -+ force0=bkk*(znp(i,n)*(zgs(m)*ckc(i)-zgc(m)*cks(i))+ -+ x znp(i,m)*(zgs(n)*ckc(i)-zgc(n)*cks(i))) -+ fxx(j)=fxx(j)+rkx2*force0 -+ fyy(j)=fyy(j)+rky2*force0 -+ -+ omg(3)=omg(3)+rkx2*force0*zzz(j) -+ omg(6)=omg(6)+rky2*force0*zzz(j) -+ -+ if(k.gt.0)then -+ -+ if(m.eq.0)then -+ -+ forcez=bkk*dble(n)*znp(i,n-1)*(zgc(m)*ckc(i)+ -+ x zgs(m)*cks(i)) -+ -+ else -+ -+ forcez=bkk*(dble(m)*znp(i,m-1)*(zgc(n)*ckc(i)+ -+ x zgs(n)*cks(i))+dble(n)*znp(i,n-1)*(zgc(m)* -+ x ckc(i)+zgs(m)*cks(i))) -+ -+ endif -+ -+ omg(9)=omg(9)+forcez*zzz(j) -+ fzz(j)=fzz(j)+forcez -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c accumulate potential energy and stress tensor -+ -+ engcpe=engcpe+fng*eterm -+ pterm=(dble(2*k-1)*fng-fac*gaus)/rksq -+ omg(1)=omg(1)+eterm*(fng+pterm*rkx2*rkx2) -+ omg(5)=omg(5)+eterm*(fng+pterm*rky2*rky2) -+ omg(2)=omg(2)+eterm*pterm*rky2*rkx2 -+ fac=fac*rksq/(dble(2*(k+1))*dble(2*k+1)) -+ -+c end of loop over orders of screening function -+ -+ enddo -+ -+c end of if-block for rksq < rcpct2 -+ -+ endif -+ -+c end of inner loop over reciprocal lattice vectors -+ -+ enddo -+ -+ mmin=-kmax2 -+ -+c end of outer loop over reciprocal lattice vectors -+ -+ enddo -+ -+ engcpe=engcpe/dble(mxnode) -+ do i = 1,9 -+ -+ omg(i) = omg(i)/dble(mxnode) -+ -+ enddo -+ -+c add self interaction correction to potential -+ -+ scale=4.d0*rarea*r4pie0/epsq -+ engcpe=scale*engcpe+engsic -+ -+c virial term -+ -+ vircpe=vircpe-scale*(omg(1)+omg(5)+omg(9)) -+ -+c calculate final forces -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=scale*fxx(i) -+ fyy(i)=scale*fyy(i) -+ fzz(i)=scale*fzz(i) -+ -+ enddo -+ -+c calculate stress tensor (symmetrical) -+ -+ stress(1) = stress(1)+scale*omg(1) -+ stress(2) = stress(2)+scale*omg(2) -+ stress(3) = stress(3)+scale*omg(3) -+ stress(4) = stress(4)+scale*omg(2) -+ stress(5) = stress(5)+scale*omg(5) -+ stress(6) = stress(6)+scale*omg(6) -+ stress(7) = stress(7)+scale*omg(3) -+ stress(8) = stress(8)+scale*omg(6) -+ stress(9) = stress(9)+scale*omg(9) -+ -+ return -+ end subroutine hkewald1 -+ -+ subroutine hkewald2 -+ x (idnode,mxnode,nhko,nlatt,imcon,natms,engcpe, -+ x vircpe,drewd,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating real-space contributions to -+c the hautman-klein-ewald electrostatic method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith may 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,nhko,nlatt,imcon,natms,nix,niy -+ integer nboxes,i,j,k,n,m,ma,mpm2,npm2,ii,l0,l1,l2,last -+ real(8) engcpe,vircpe,drewd,rcut,epsq -+ real(8) step,rcsq,rdrewd,strs1,strs2,strs3 -+ real(8) strs5,strs6,strs9,dcx,dcy,udx,udy,fac,chgea,chgprd -+ real(8) ddx,ddy,ssx,ssy,ssq,coul,fcoul,rrr,ppp,vk0,vk1,vk2 -+ real(8) eterm,t1,t2,egamma,fx,fy,fz,det -+ -+ dimension nix(25),niy(25) -+ -+ data nix/ 0, 1, 1, 0,-1,-1,-1, 0, 1, 2, 2, -+ x 2, 1, 0,-1,-2,-2,-2,-2,-2,-1, 0, 1, 2, 2/ -+ data niy/ 0, 0, 1, 1, 1, 0,-1,-1,-1, 0, 1, -+ x 2, 2, 2, 2, 2, 1, 0,-1,-2,-2,-2,-2,-2,-1/ -+ -+CDIR$ CACHE_ALIGN fi -+ -+c check boundary condition -+ -+ if(imcon.ne.6)call error(idnode,66) -+ -+c number of neighbouring real space cells -+ -+ if(nlatt.gt.2)call error(idnode,488) -+ step=dble(2*nlatt+1) -+ nboxes=(2*nlatt+1)**2 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c set cutoff condition for pair forces -+ -+ rcsq=(step*rcut)**2 -+ -+c reciprocal of interpolation interval -+ -+ rdrewd = 1.d0/drewd -+ -+c reciprocal cell -+ -+ call invert(cell,rcell,det) -+ do i=1,9 -+ -+ rcell(i)=rcell(i)/step -+ -+ enddo -+ -+c initialise stress tensor accumulators -+ strs3 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs5 = 0.d0 -+ -+c loop over image cells, starting with central cell -+ -+ ma=1 -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+ do k=1,nboxes -+ -+ last=natms -+ dcx=dble(nix(k)) -+ dcy=dble(niy(k)) -+ udx=cell(1)*dcx+cell(4)*dcy -+ udy=cell(2)*dcx+cell(5)*dcy -+ -+c outer loop over atoms -+ -+ do m=ma,mpm2 -+ -+ fac=r4pie0/epsq -+ if(m.eq.0)fac=fac*0.5d0 -+ if(m.gt.npm2)last=mpm2 -+ -+c set initial array values -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ chgea=fac*chge(i) -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ chgprd=chgea*chge(j) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+ zzn(ii)=1.d0 -+ zzd(ii)=0.d0 -+ -+c calculate interatomic separation -+ -+ ddx=xxx(i)-xxx(j)+udx -+ ddy=yyy(i)-yyy(j)+udy -+ ssx=rcell(1)*ddx+rcell(4)*ddy -+ ssy=rcell(2)*ddx+rcell(5)*ddy -+ ssx=ssx-nint(ssx) -+ ssy=ssy-nint(ssy) -+ xdf(ii)=step*(ssx*cell(1)+ssy*cell(4)) -+ ydf(ii)=step*(ssx*cell(2)+ssy*cell(5)) -+ zdf(ii)=zzz(i)-zzz(j) -+ rsqdf(ii)=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c loop over HK orders -+ -+ do n=0,nhko -+ -+c inner loop over atoms -+ -+ ii=0 -+ do i=idnode+1,last,mxnode -+ -+ ii=ii+1 -+ chgea = fac*chge(i) -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ chgprd=chgea*chge(j) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c apply truncation of potential -+ -+ ssq=rsqdf(ii)-zdf(ii)*zdf(ii) -+ -+ if(rcsq.gt.ssq)then -+ -+c calculate potential energy and virial -+ -+ coul=0.d0 -+ fcoul=0.d0 -+ rrr = sqrt(rsqdf(ii)) -+ sss(ii)=sqrt(ssq) -+ -+ if(n.eq.0)then -+ -+ coul = chgprd/rrr -+ fcoul = coul/rsqdf(ii) -+ -+ endif -+ -+c interpolation parameters -+ -+ l0=int(sss(ii)*rdrewd) -+ ppp=sss(ii)*rdrewd-dble(l0) -+ l0=l0+1 -+ l1=l0+1 -+ l2=l0+2 -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0 = hon(l0,n) -+ vk1 = hon(l1,n) -+ vk2 = hon(l2,n) -+ t1 = vk0 + (vk1 - vk0)*ppp -+ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) -+ -+ eterm=(t1+(t2-t1)*ppp*0.5d0)*ahk(n)*chgprd -+ engcpe=engcpe+coul-eterm*zzn(ii) -+ -+c calculate forces using 3pt interpolation -+ -+ vk0 = dhn(l0,n) -+ vk1 = dhn(l1,n) -+ vk2 = dhn(l2,n) -+ -+ t1 = vk0 + (vk1 - vk0)*ppp -+ t2 = vk1 + (vk2 - vk1)*(ppp - 1.0d0) -+ -+c calculate in-plane forces -+ -+ egamma=fcoul+ -+ x (t1+(t2-t1)*ppp*0.5d0)*chgprd*zzn(ii)*ahk(n) -+ fx=egamma*xdf(ii) -+ fy=egamma*ydf(ii) -+ -+c calculate perpendicular forces -+ -+ fz=fcoul*zdf(ii)+2.d0*dble(n)*eterm*zzd(ii) -+ -+c add to force accumulators -+ -+ fxx(i)=fxx(i)+fx -+ fyy(i)=fyy(i)+fy -+ fzz(i)=fzz(i)+fz -+ -+ fxx(j)=fxx(j)-fx -+ fyy(j)=fyy(j)-fy -+ fzz(j)=fzz(j)-fz -+ -+c reset zzn array for next order of convergence function -+ -+ zzd(ii)=zzn(ii)*zdf(ii) -+ zzn(ii)=zzd(ii)*zdf(ii) -+ -+c calculate stress tensor -+ -+ strs1 = strs1 + xdf(ii)*fx -+ strs2 = strs2 + xdf(ii)*fy -+ strs3 = strs3 + xdf(ii)*fz -+ strs5 = strs5 + ydf(ii)*fy -+ strs6 = strs6 + ydf(ii)*fz -+ strs9 = strs9 + zdf(ii)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ ma=0 -+ -+ enddo -+ -+c calculate virial -+ -+ vircpe=vircpe-(strs1+strs5+strs9) -+ -+c complete stress tensor -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ return -+ end subroutine hkewald2 -+ -+ subroutine hkewald3(iatm,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating exclusion corrections to -+c the hautman-klein-ewald electrostatic method -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith may 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm -+ real(8) engcpe,vircpe,epsq,fx,fy,fz,strs1,strs2,strs3 -+ real(8) strs5,strs6,strs9,chgea,chgprd,rrr,rsq,coul,fcoul -+ -+CDIR$ CACHE_ALIGN fi -+ -+c initialise stress tensor accumulators -+ -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs3 = 0.d0 -+ strs5 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ -+ if(abs(chgea).gt.1.d-10)then -+ -+ do m=1,nexatm(ik) -+ -+c atomic index and charge product -+ -+ jatm=lexatm(ik,m) -+ chgprd=chgea*chge(jatm) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=xdf(m)**2+ydf(m)**2+zdf(m)**2 -+ rrr = sqrt(rsq) -+ -+c calculate potential energy and virial -+ -+ coul = chgprd/rrr -+ engcpe = engcpe - coul -+ -+c calculate forces -+ -+ fcoul = coul/rsq -+ fx = fcoul*xdf(m) -+ fy = fcoul*ydf(m) -+ fz = fcoul*zdf(m) -+ -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ -+c calculate stress tensor -+ -+ strs1 = strs1 - xdf(m)*fx -+ strs2 = strs2 - xdf(m)*fy -+ strs3 = strs3 - xdf(m)*fz -+ strs5 = strs5 - ydf(m)*fy -+ strs6 = strs6 - ydf(m)*fz -+ strs9 = strs9 - zdf(m)*fz -+ -+ endif -+ -+ enddo -+ -+c virial -+ -+ vircpe=vircpe-engcpe -+ -+c complete stress tensor -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ endif -+ -+ return -+ end subroutine hkewald3 -+ -+ subroutine hkewald4(iatm,ik,engcpe,vircpe,engcpl,vircpl,rcut,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using the hautman-klein-ewald method -+c -+c modified to allow direct calculation of primary (short-range) -+c interactions for multiple-time step corrections -+ -+c primary neighbours are taken out of the Ewald sum -+c electrostatics are evaluated directly instead -+c -+c parallel replicated data version - real space terms -+c -+c copyright - daresbury laboratory 2000 -+c author - w. smith july 2000 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm -+ real(8) engcpe,vircpe,engcpl,vircpl,rcut,epsq -+ real(8) fi,fli,rcsq,strs1,strs2,strs3,strs5,strs6 -+ real(8) strs9,strl1,strl2,strl3,strl5,strl6,strl9,chgea,chgprd -+ real(8) rsq,rrr,coul,egamma,fx,fy,fz -+ -+ dimension fi(3),fli(3) -+ -+CDIR$ CACHE_ALIGN fi -+CDIR$ CACHE_ALIGN fli -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+ engcpl=0.d0 -+ vircpl=0.d0 -+ -+c initialise stress tensor accumulators -+ -+ strs1 = 0.d0 -+ strs2 = 0.d0 -+ strs3 = 0.d0 -+ strs5 = 0.d0 -+ strs6 = 0.d0 -+ strs9 = 0.d0 -+ strl1 = 0.d0 -+ strl2 = 0.d0 -+ strl3 = 0.d0 -+ strl5 = 0.d0 -+ strl6 = 0.d0 -+ strl9 = 0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ chgea=chge(iatm)/epsq*r4pie0 -+ if(abs(chgea).gt.1.d-10)then -+ -+c temporary arrays for cache aligning -+ -+ fi(1) = fxx(iatm) -+ fi(2) = fyy(iatm) -+ fi(3) = fzz(iatm) -+ -+ fli(1) = flx(iatm) -+ fli(2) = fly(iatm) -+ fli(3) = flz(iatm) -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ jatm=ilist(m) -+ chgprd=chgea*chge(jatm) -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+c coulombic energy -+ -+ rrr = sqrt(rsq) -+ coul = chgprd/rrr -+ -+c sum contributions to the totals -+ -+ engcpe = engcpe + coul -+ engcpl = engcpl - coul -+ vircpe = vircpe - coul -+ vircpl = vircpl + coul -+ -+c calculate coulombic forces -+ -+ egamma = coul/rsq -+ -+ fx = egamma*xdf(m) -+ fy = egamma*ydf(m) -+ fz = egamma*zdf(m) -+ -+c add in contributions to instantaneous force -+ -+ fi(1) = fi(1) + fx -+ fi(2) = fi(2) + fy -+ fi(3) = fi(3) + fz -+ -+ fxx(jatm) = fxx(jatm) - fx -+ fyy(jatm) = fyy(jatm) - fy -+ fzz(jatm) = fzz(jatm) - fz -+ -+c add in contributions to the long-range force -+ -+ fli(1) = fli(1) - fx -+ fli(2) = fli(2) - fy -+ fli(3) = fli(3) - fz -+ -+ flx(jatm) = flx(jatm) + fx -+ fly(jatm) = fly(jatm) + fy -+ flz(jatm) = flz(jatm) + fz -+ -+c calculate long and short range stress tensors -+ -+ strs1 = strs1 + xdf(m)*fx -+ strl1 = strl1 - xdf(m)*fx -+ strs2 = strs2 + xdf(m)*fy -+ strl2 = strl2 - xdf(m)*fy -+ strs3 = strs3 + xdf(m)*fz -+ strl3 = strl3 - xdf(m)*fz -+ strs5 = strs5 + ydf(m)*fy -+ strl5 = strl5 - ydf(m)*fy -+ strs6 = strs6 + ydf(m)*fz -+ strl6 = strl6 - ydf(m)*fz -+ strs9 = strs9 + zdf(m)*fz -+ strl9 = strl9 - zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c copy back temporaries -+ -+ fxx(iatm) = fi(1) -+ fyy(iatm) = fi(2) -+ fzz(iatm) = fi(3) -+ -+ flx(iatm) = fli(1) -+ fly(iatm) = fli(2) -+ flz(iatm) = fli(3) -+ -+c complete stress tensor -+ -+ stresl(1) = stresl(1) + strl1 -+ stresl(2) = stresl(2) + strl2 -+ stresl(3) = stresl(3) + strl3 -+ stresl(4) = stresl(4) + strl2 -+ stresl(5) = stresl(5) + strl5 -+ stresl(6) = stresl(6) + strl6 -+ stresl(7) = stresl(7) + strl3 -+ stresl(8) = stresl(8) + strl6 -+ stresl(9) = stresl(9) + strl9 -+ -+ stress(1) = stress(1) + strs1 -+ stress(2) = stress(2) + strs2 -+ stress(3) = stress(3) + strs3 -+ stress(4) = stress(4) + strs2 -+ stress(5) = stress(5) + strs5 -+ stress(6) = stress(6) + strs6 -+ stress(7) = stress(7) + strs3 -+ stress(8) = stress(8) + strs6 -+ stress(9) = stress(9) + strs9 -+ -+ endif -+ -+ return -+ end subroutine hkewald4 -+ -+ function cerfr(alpha,rrr) -+ -+c*********************************************************************** -+c -+c dl_poly function for generating complementary error function -+c divided by r -+c -+c copyright - daresbury laboratory 2001 -+c author - w. smith february 2001 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer k -+ real(8) cerfr,sqrpi,h0,h1,alpha,rrr,rr2,fac -+ -+ sqrpi=1.7724538509055159d0 -+ -+c starting values -+ -+ h0=0.d0 -+ h1=(2.d0*alpha/sqrpi)*exp(-(alpha*rrr)**2) -+ -+c generate function by recursion -+ -+ rr2=rrr*rrr -+ do k=100,1,-1 -+ -+ fac=(2.d0*alpha**2)**(k-1) -+ h0=(h0*rr2+fac*h1)/dble(2*k-1) -+ -+ enddo -+ -+ cerfr=1.d0/rrr-h0 -+ -+ return -+ end function cerfr -+ -+ end module hkewald_module -+ -diff -urN dl_class_1.9.orig/srcmod/hyper_dynamics_module.f dl_class_1.9/srcmod/hyper_dynamics_module.f ---- dl_class_1.9.orig/srcmod/hyper_dynamics_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/hyper_dynamics_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,2821 @@ -+ module hyper_dynamics_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining hyperdynamics routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use forces_module -+ use nlist_builders_module -+ use optimiser_module -+ use property_module -+ use setup_module -+ use shake_module -+ use temp_scalers_module -+ use vv_motion_module -+ -+ implicit none -+ -+ integer, parameter :: mxtrn=10 -+ integer, parameter :: mxbsn=1000 -+ integer, parameter :: mxneb=8 -+ integer, parameter :: mxdiffs=300 -+ integer, parameter :: hyper_tag=35000 -+ -+ integer numbsn,numpro,numtrk,ndiff,maxtrk,numdark,home_bsn,numbpd -+ integer nbsa(mxbsn),nbsb(mxbsn),ktrn(mxtrn) -+ real(8) xtrn(mxtrn),ytrn(mxtrn) -+ real(8) tstop,tkeres,timhyp,timres,tboost,boost,vbase -+ -+ integer, allocatable :: idabsn(:),keymin(:) -+ real(8), allocatable :: xbas(:),ybas(:),zbas(:) -+ real(8), allocatable :: xchk(:),ychk(:),zchk(:) -+ real(8), allocatable :: xres(:),yres(:),zres(:) -+ real(8), allocatable :: vxrs(:),vyrs(:),vzrs(:) -+ real(8), allocatable :: fxrs(:),fyrs(:),fzrs(:) -+ real(8), allocatable :: xhyp(:),yhyp(:),zhyp(:) -+ real(8), allocatable :: vxhp(:),vyhp(:),vzhp(:) -+ real(8), allocatable :: fxhp(:),fyhp(:),fzhp(:) -+ real(8), allocatable :: xdiffs(:),ydiffs(:),zdiffs(:) -+ real(8), allocatable :: celneb(:,:),path(:),optk(:,:) -+ real(8), allocatable :: xneb(:),yneb(:),zneb(:),engneb(:) -+ real(8), allocatable :: fxneb(:),fyneb(:),fzneb(:) -+ real(8), allocatable :: hxneb(:),hyneb(:),hzneb(:) -+ real(8), allocatable :: taux(:),tauy(:),tauz(:) -+ real(8), allocatable :: track(:) -+ -+ integer bsn_1(maxneb),bsn_2(maxneb) -+ real(8) strhyp(9),strres(9),engbsn(2) -+ real(8) celbas(9),celhyp(9),celchk(9),celres(9) -+ -+ save numbsn,numtrk,numpro,ndiff,numdark,timres -+ save xbas,ybas,zbas,xchk,ychk,zchk,timhyp,vbase -+ save xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs -+ save xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp -+ save celbas,celhyp,celres,celchk,strhyp,strres -+ save idabsn,nbsa,nbsb,xdiffs,ydiffs,zdiffs,tkeres -+ save xneb,yneb,zneb,engneb,taux,tauy,tauz,keymin -+ save fxneb,fyneb,fzneb,hxneb,hyneb,hzneb,path -+ save optk,tstop,tboost,boost,numbpd -+ -+ contains -+ -+ subroutine alloc_hyper_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining hyperdynamics arrays and -+c initialising control variables -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ -+ integer i,fail,idnode,nebmax -+ dimension fail(nnn) -+ -+ nebmax=msatms*(mxneb+1) -+ -+c initialise control variables -+ -+ numbpd=0 -+ numtrk=0 -+ numbsn=0 -+ numpro=0 -+ ndiff=0 -+ numdark=0 -+ home_bsn=0 -+ tkeres=0.d0 -+ tstop=1.d30 -+ timhyp=0.d0 -+ timres=0.d0 -+ boost=1.d0 -+ tboost=0.d0 -+ vbase=-huge(1.d0) -+ do i=1,maxneb -+ bsn_1(i)=0 -+ bsn_2(i)=0 -+ enddo -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (xbas(msatms),ybas(msatms),zbas(msatms),stat=fail(1)) -+ allocate (xchk(msatms),ychk(msatms),zchk(msatms),stat=fail(2)) -+ allocate (xres(msatms),yres(msatms),zres(msatms),stat=fail(3)) -+ allocate (vxrs(msatms),vyrs(msatms),vzrs(msatms),stat=fail(4)) -+ allocate (fxrs(msatms),fyrs(msatms),fzrs(msatms),stat=fail(5)) -+ allocate (xhyp(msatms),yhyp(msatms),zhyp(msatms),stat=fail(6)) -+ allocate (vxhp(msatms),vyhp(msatms),vzhp(msatms),stat=fail(7)) -+ allocate (fxhp(msatms),fyhp(msatms),fzhp(msatms),stat=fail(8)) -+ allocate (xdiffs(mxdiffs),ydiffs(mxdiffs),zdiffs(mxdiffs), -+ x stat=fail(9)) -+ allocate (idabsn(mxdiffs),keymin(0:mxneb),stat=fail(10)) -+ allocate (xneb(nebmax),yneb(nebmax),zneb(nebmax),stat=fail(11)) -+ allocate (fxneb(nebmax),fyneb(nebmax),fzneb(nebmax),stat=fail(12)) -+ allocate (taux(msatms),tauy(msatms),tauz(msatms),stat=fail(13)) -+ allocate (engneb(0:mxneb),celneb(9,0:mxneb),path(0:mxneb), -+ x stat=fail(14)) -+ allocate (hxneb(nebmax),hyneb(nebmax),hzneb(nebmax),stat=fail(15)) -+ allocate (optk(5,0:mxneb),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)then -+ if(idnode.eq.0)write(nrite,'(10i5)')fail -+ call error(idnode,1115) -+ endif -+ enddo -+ -+ end subroutine alloc_hyper_arrays -+ -+ subroutine hyper_start -+ x (ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons,nstbgr, -+ x nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp, -+ x ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,ntcons,ntrack,alpha, -+ x delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol,rctter, -+ x rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,sigma, -+ x hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for starting a hyperdynamics simulation -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical ltad,lbpd,lfcap,lneut,lnsq,loglnk,lzeql,newlst,savflg -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,i,j -+ integer ntpvdw,ntshl,ntteth,numblock,iatm0,iatm1,ntcons -+ integer ktol,pass,fail,ntrack -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,engcfg -+ real(8) virlrc,cvgerr,dum,otol,cgerr,sigma,hyp_units -+ -+c allocate track array for BPD -+ -+ if(lbpd)then -+ allocate (track(0:nblock/ntrack),stat=fail) -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c current block number -+ -+ numblock=nstep/nblock -+ -+c open hyperdynamics journal file -+ -+ if(idnode.eq.0) -+ x open(nevnt,file="EVENTS",form='formatted',position='append') -+ -+c set up hyperdynamics for simulation start -+ -+ if(nstep.eq.0)then -+ -+c initialise bias potential boost factor -+ -+ numbpd=0 -+ boost=1.d0 -+ tboost=0.d0 -+ -+c set basin difference markers -+ -+ do i=1,mxbsn -+ -+ nbsa(i)=0 -+ nbsb(i)=0 -+ -+ enddo -+ -+c store the starting configuration -+ -+ savflg=.true. -+ tkeres=sigma -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+c minimise starting structure -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) -+ -+c define zero energy for BPD dynamics mode -+ -+ vbase=engcfg -+ -+c write events entry for minimisation -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x engcfg/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x engcfg/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c save minimised starting structure as basin file -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,engcfg) -+ -+c save details of starting home basin -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c restore the starting configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+ else -+ -+c restore previous data from hyperdynamics backup file -+ -+ call hyper_open(ltad,idnode,mxnode,natms,nsteql) -+ -+c reset home basin for hyperdynamics (home basin is 0 for TAD) -+ -+ if(lbpd)home_bsn=numbsn-1 -+ -+c store the current configuration -+ -+ savflg=.true. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c read minimised starting structure from home basin file -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,home_bsn,natms,imcon,idnode,engcfg) -+ -+c save details of current home basin -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c restore the current configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+ endif -+ -+ return -+ end subroutine hyper_start -+ -+ subroutine hyper_driver -+ x (seek,ltad,lbpd,recycle,lfcap,lneut,lnsq,loglnk,lzeql, -+ x newlst,prechk,tadall,nebgo,nblock,ntrack,idnode,imcon, -+ x keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3,multt, -+ x mxnode,natms,ngrp,ntcons,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth,blkout, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,engcfg,catchrad,sprneb,deltad,tlow,engtke, -+ x tolnce,hyp_units,ebias,vmin) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for implementing a hyperdynamics simulation -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical lbpd,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb -+ logical lrefmin,same,savflg,recycle,scan,prechk,tadall,nebgo -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntrack -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw -+ integer ntshl,ntteth,blkout,numblock,bsn1,bsn2,itrack -+ integer nturn,ntcons,mdiff,newbsn,iatm0,iatm1,pass,i,j,itrk -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,catchrad -+ real(8) cvgerr,estar,engcfg,cfgtmp,engcpe,engsrp,catch -+ real(8) vircpe,engmet,virmet,virlrc,engtbp,virtbp,dum -+ real(8) engfbp,virfbp,engter,virter,engbnd,virbnd,engang -+ real(8) virang,engdih,virdih,enginv,virinv,engtet,virtet -+ real(8) engshl,shlke,virshl,engfld,virfld,virsrp,sprneb -+ real(8) deltad,deltal,tlow,timhop,timlow,engtke,tolnce,hyp_units -+ real(8) ebias,vmin -+ -+ data bsn1,bsn2/0,0/ -+ -+c control variables -+ -+ lneb=.false. -+ numblock=nstep/nblock -+ maxtrk=nblock/ntrack -+ if(numdark.eq.0)numdark=nsteql -+ lrefmin=(mod(nstep,nblock).eq.0) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c BPD/TAD simulation time -+ -+ timhyp=timhyp+tstep -+ -+c track the tboost value -+ -+ if(mod(nstep,ntrack).eq.0)track(mod(numtrk,maxtrk))=tboost -+ -+c provisional check for transition - compare current config with -+c the reference state (not in dark period) -+ -+ same=.true. -+ scan=.false. -+ if(prechk.and.(mod(nstep,ntrack).eq.0).and. -+ x (lbpd.or.(ltad.and.(nstep.gt.numdark))))then -+ -+ catch=0.65d0*catchrad -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catch) -+ -+ if(.not.same.and.idnode.eq.0)then -+ -+ write(nevnt,'("PRE",i10)')nstep -+ write(nrite,'(1x,"PRE",i10)')nstep -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+ if(.not.same.or.lrefmin)then -+ -+c store the current configuration -+ -+ savflg=.true. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c minimise current structure -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+c confirm any transition -+ -+ if(ltad)scan=.true. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c transition detected - proceed with transition analysis -+ -+ if(.not.same)then -+ -+c store new basin energy -+ -+ engbsn(2)=cfgtmp -+ -+c save new minimised state (bias potential dynamics only) -+ -+ if(lbpd)then -+ -+ do i=1,9 -+ celres(i)=cell(i) -+ enddo -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xres(j)=xxx(i) -+ yres(j)=yyy(i) -+ zres(j)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+c record transition (for TAD only if outside blackout period) -+ -+ if(lbpd.or.nstep.gt.numdark)then -+ -+c check if transition results in unique new basin (TAD only) -+ -+ if(ltad)call check_basins(newbsn,mdiff,mxnode) -+ -+c analysis of new basin -+ -+ if(lbpd.or.tadall.or.newbsn.eq.numbsn)then -+ -+c set difference counters and pointers (TAD only) -+ -+ if(ltad)then -+ -+ if(numbsn.gt.mxbsn)call error(idnode,2330) -+ -+ ndiff=mdiff -+ -+ if(numbsn.gt.1)then -+ nbsa(numbsn)=nbsb(numbsn-1)+1 -+ else -+ nbsa(numbsn)=1 -+ endif -+ -+ nbsb(numbsn)=mdiff -+ -+ endif -+ -+c save the basin file and store basin energy -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode, -+ x cfgtmp) -+ -+c determine minimum (reaction) path and activation energy -+ -+ if(nebgo)call neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, -+ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,cfgtmp,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+c analyse the transition - determine e-star and destination state -+ -+ if(nebgo)call transition_properties -+ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,nturn,numbsn,alpha,delr,dlrpot, -+ x drewd,elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr,estar, -+ x catchrad,hyp_units) -+ -+c estimate time of transition from past trajectory -+ -+ call transition_time -+ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl, -+ x ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp, -+ x ntpter,ntrack,ntpvdw,ntshl,ntteth,ntcons,itrk, -+ x alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax, -+ x opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) -+ -+c update TAD control variables -+ -+ if(ltad)then -+ -+c update blackout period -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ -+c calculate stopping time -+ -+ timlow=timhop*exp(-(estar/temp-estar/tlow)/boltz) -+ tstop=min(tstop,deltad*(timlow/deltad)**(tlow/temp)) -+ -+c write transition data for TAD only -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRA",i10,3i6,1p,4e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timlow,tstop -+ write(nevnt,'("BLK",2i10)')nstep,numdark -+ write(nrite,'(1x,"TRA",i10,3i6,1p,4e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timlow,tstop -+ write(nrite,'(1x,"BLK",2i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ elseif(nebgo.and.idnode.eq.0)then -+ -+c write transition data for bias potential dynamics with NEB -+ -+ write(nevnt,'("TRA",i10,3i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,'(1x,"TRA",i10,3i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,nturn,estar/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,"(1x,120('-'))") -+ -+ numbpd=0 -+ tboost=0.0 -+ -+ elseif(idnode.eq.0)then -+ -+c write transition data for bias potential dynamics without NEB -+ -+ write(nevnt,'("TRA",i10,2i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,ebias/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,'(1x,"TRA",i10,2i6,1p,3e14.5)') -+ x nstep,home_bsn,numbsn-1,ebias/hyp_units, -+ x timhop,timhop*tboost -+ write(nrite,"(1x,120('-'))") -+ -+ numbpd=0 -+ tboost=0.0 -+ -+ endif -+ -+ else -+ -+c update blackout period when transition not unique (TAD only) -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRR",i10,3i6)')nstep,home_bsn,newbsn -+ write(nevnt,'("BLK",2i10)')nstep,numdark -+ write(nrite,'(1x,"TRR",i10,3i6)')nstep,home_bsn,newbsn -+ write(nrite,'(1x,"BLK",2i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+c actions when new basin has been visited before (TAD only) -+ -+ elseif(ltad)then -+ -+c ignore dark transition and extend blackout period (TAD only) -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("TRI",i10)')nstep -+ write(nrite,'(1x,"TRI",i10)')nstep -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ if(nstep.le.nsteql)then -+ -+ nsteql=nsteql+blkout -+ numdark=nsteql+blkout -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("EQL",2i10)')nstep,nsteql -+ write(nrite,'(1x,"EQL",2i10)')nstep,nsteql -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ else -+ -+ numdark=nblock*((nstep+blkout)/nblock+1) -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("BLK",3i10)')nstep,numdark -+ write(nrite,'(1x,"BLK",3i10)')nstep,numdark -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ if(ltad)then -+ -+c return to the block starting state after transition (TAD only) -+ -+ timhyp=timres -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+c scramble the velocities (and conserve system energy) -+ -+ call regauss(idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,tkeres,temp,tolnce) -+ -+ elseif(lbpd)then -+ -+c reset reference state to new basin (bias potential dynamics only) -+ -+ home_bsn=home_bsn+1 -+ engbsn(1)=engbsn(2) -+ -+ do i=1,9 -+ celbas(i)=celres(i) -+ enddo -+ -+ call invert(celbas,rcell,dum) -+ -+ do i=1,iatm1-iatm0+1 -+ -+ xbas(i)=rcell(1)*xres(i)+rcell(4)*yres(i)+rcell(7)*zres(i) -+ ybas(i)=rcell(2)*xres(i)+rcell(5)*yres(i)+rcell(8)*zres(i) -+ zbas(i)=rcell(3)*xres(i)+rcell(6)*yres(i)+rcell(9)*zres(i) -+ -+ enddo -+ -+c restore current hyperdynamics configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c reset boost factor -+ -+ numbpd=0 -+ tboost=0.d0 -+ -+ endif -+ -+c no transition detected so restore current trajectory -+ -+ else -+ -+c restore the current configuration -+ -+ savflg=.false. -+ call store_config(savflg,idnode,mxnode,natms,strhyp,celhyp, -+ x xhyp,yhyp,zhyp,vxhp,vyhp,vzhp,fxhp,fyhp,fzhp) -+ -+c save the block configuration as reset state (TAD only) -+ -+ if(ltad.and.lrefmin)then -+ -+ savflg=.true. -+ tkeres=engtke -+ timres=timhyp -+ call store_config(savflg,idnode,mxnode,natms,strres,celres, -+ x xres,yres,zres,vxrs,vyrs,vzrs,fxrs,fyrs,fzrs) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c close down if TAD stopping time reached -+ -+ if(ltad.and.tstop.lt.timhyp)recycle=.false. -+ -+c write a tracking file -+ -+ if(mod(nstep,ntrack).eq.0)then -+ -+ itrack=mod(numtrk,maxtrk) -+ call write_reference_config -+ x ('CFGTRK','TRACKS',ntrk,itrack,natms,imcon,idnode,engcfg) -+ -+ numtrk=numtrk+1 -+ -+ endif -+ -+ return -+ end subroutine hyper_driver -+ -+ subroutine define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,engcfg,cvgerr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling subroutine calls for a -+c structural minimisation to define a minimum state for -+c hyperdynamics simulations -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfcap,nogofr,lneut,lnsq,loglnk,stropt,lzeql -+ logical newlst,ltad,lsolva,lfree,lexcite -+ -+ integer idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer keystr,kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp -+ integer nhko,nlatt,nneut,nospl,nscons,nstbgr,nstep,nsteql -+ integer ntangl,ntbond,ntdihd,ntfree,ntinv,ntpfbp,ntpmet -+ integer ntptbp,ntpter,ntpvdw,ntshl,ntteth,numrdf -+ integer nblock,pass,mxpass,mstep,ntcons,nsolva,isolva -+ -+ real(8) alpha,delr,dlrpot,drewd,elrc,engang,engbnd -+ real(8) engcpe,engdih,engfbp,engfld,enginv,engshl,engsrp -+ real(8) engtbp,engter,engtet,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,shlke,engcfg,temp -+ real(8) tstep,virang,virbnd,vircpe,virdih,virfbp -+ real(8) virfld,virinv,virlrc,virmet,virshl,virsrp -+ real(8) virtbp,virter,virtet,volm,engmet,cfgold,cvgerr -+ real(8) hnorm,grad0,grad1,ff1,sgn,engord,virord -+ -+ data mxpass/1000/ -+ -+c control variables -+ -+ pass=0 -+ keystr=0 -+ numrdf=0 -+ ltad=.true. -+ engcfg=1.d30 -+ stropt=.false. -+ nogofr=.false. -+ -+c dummy variables -+ -+ lsolva=.false. -+ lfree=.false. -+ lexcite=.false. -+ nsolva=0 -+ isolva=1 -+ engord=0.d0 -+ virord=0.d0 -+ -+c relax the current structure -+ -+ do while(.not.stropt.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ cfgold=engcfg -+ mstep=nstep+pass -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces -+ -+ call force_manager -+ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ cvgerr=abs(engcfg-cfgold) -+ -+ enddo -+ -+ return -+ end subroutine define_minimum_state -+ -+ subroutine write_reference_config -+ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) -+ -+c*********************************************************************** -+c -+c dlpoly utility to write a minimum structure file in CONFIG -+c format -+c -+c copyright daresbury laboratory -+c author w.smith june 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*6 fnam -+ character*4 tail -+ character*6 direct -+ integer nfil,nnn,i,natms,imcon,idnode,levcfg -+ real(8) engcfg -+ -+ levcfg=0 -+ -+c node zero handles i/o -+ -+ if(idnode.eq.0)then -+ -+c write configuration data to new configuration file -+ -+ write(tail,'(i4.4)')nnn -+ open(nfil,file=direct//'/'//fnam//tail,form='formatted') -+ -+ write(nfil,'(a10)')fnam//tail -+ write(nfil,'(3i10,g20.12)') levcfg,imcon,natms,engcfg -+ -+ if(imcon.gt.0) write(nfil,'(3f20.12)') cell -+ -+ do i=1,natms -+ -+ write(nfil,'(a8,i10)') atmnam(i),i -+ write(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ -+ enddo -+ -+ close (nfil) -+ -+ endif -+ -+ nnn=nnn+1 -+ -+ return -+ end subroutine write_reference_config -+ -+ subroutine read_reference_config -+ x (fnam,direct,nfil,nnn,natms,imcon,idnode,engcfg) -+ -+c*********************************************************************** -+c -+c dlpoly utility to read a reference structure file in CONFIG -+c format -+c -+c copyright daresbury laboratory -+c author w.smith february 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*6 fnam -+ character*4 tail -+ character*6 direct -+ integer nfil,nnn,i,natms,imcon,idnode,levcfg -+ real(8) engcfg -+ -+c node zero handles i/o -+ -+ if(idnode.eq.0)then -+ -+c read configuration data from configuration file on proc 0 -+ -+ write(tail,'(i4.4)')nnn -+ open(nfil,file=direct//'/'//fnam//tail,form='formatted') -+ -+ read(nfil,*) -+ read(nfil,'(3i10,g20.12)')levcfg,imcon,natms,engcfg -+ buffer(1)=dble(levcfg) -+ buffer(2)=dble(imcon) -+ buffer(3)=dble(natms) -+ buffer(4)=engcfg -+ if(imcon.gt.0) read(nfil,'(3f20.12)') cell -+ do i=1,9 -+ buffer(i+4)=cell(i) -+ enddo -+ call gdsum(buffer(1),13,buffer(14)) -+ -+ do i=1,natms -+ -+ read(nfil,'(a8)') atmnam(i) -+ read(nfil,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ -+ enddo -+ -+ close (nfil) -+ -+ else -+ -+c gather data from configuration file on procs > 0 -+ -+ do i=1,13 -+ buffer(i)=0.d0 -+ enddo -+ call gdsum(buffer(1),13,buffer(14)) -+ -+ levcfg=nint(buffer(1)) -+ imcon=nint(buffer(2)) -+ natms=nint(buffer(3)) -+ engcfg=buffer(4) -+ do i=1,9 -+ cell(i)=buffer(i+4) -+ enddo -+ do i=1,natms -+ xxx(i)=0.d0 -+ yyy(i)=0.d0 -+ zzz(i)=0.d0 -+ enddo -+ -+ endif -+ -+c global gather of atomic coordinates -+ -+ call gdsum(xxx,natms,buffer) -+ call gdsum(yyy,natms,buffer) -+ call gdsum(zzz,natms,buffer) -+ -+ return -+ end subroutine read_reference_config -+ -+ subroutine store_config(lsave,idnode,mxnode,natms,strold,celold, -+ x xold,yold,zold,vxold,vyold,vzold,fxold,fyold,fzold) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for storing the current -+c configuration -+c -+c copyright daresbury laboratory -+c author w.smith sep 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical lsave -+ integer idnode,mxnode,natms,iatm0,iatm1,i,j -+ -+ real(8) strold(9),celold(9) -+ real(8) xold(msatms),yold(msatms),zold(msatms) -+ real(8) vxold(msatms),vyold(msatms),vzold(msatms) -+ real(8) fxold(msatms),fyold(msatms),fzold(msatms) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if(lsave)then -+ -+c save cell and stress tensors -+ -+ do i=1,9 -+ -+ celold(i)=cell(i) -+ strold(i)=stress(i) -+ -+ enddo -+ -+c save configuration -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ vxold(j)=vxx(i) -+ vyold(j)=vyy(i) -+ vzold(j)=vzz(i) -+ fxold(j)=fxx(i) -+ fyold(j)=fyy(i) -+ fzold(j)=fzz(i) -+ -+ enddo -+ -+ else -+ -+c restore cell and stress tensors -+ -+ do i=1,9 -+ -+ cell(i)=celold(i) -+ stress(i)=strold(i) -+ -+ enddo -+ -+c restore configuration -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxx(i)=xold(j) -+ yyy(i)=yold(j) -+ zzz(i)=zold(j) -+ vxx(i)=vxold(j) -+ vyy(i)=vyold(j) -+ vzz(i)=vzold(j) -+ fxx(i)=fxold(j) -+ fyy(i)=fyold(j) -+ fzz(i)=fzold(j) -+ -+ enddo -+ -+c replication of full configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine store_config -+ -+ subroutine check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for checking when a transition -+c has occured in a configuration -+c -+c copyright daresbury laboratory -+c author w.smith sep 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical same,safe,scan,all -+ integer idnode,mxnode,natms,imcon,nblock,mdiff -+ integer iatm0,iatm1,i,j -+ real(8) catchrad,catch2,rr2,dum,sxx,syy,szz,txx,tyy,tzz,pp2 -+ -+ all=(seek.eq.'all ') -+ -+c flag for comparing structures -+ -+ same=.true. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise search parameters -+ -+ catch2=catchrad**2 -+ -+c construct coordinate check arrays -+ -+ do i=1,9 -+ celchk(i)=cell(i) -+ enddo -+ -+c store structure in reduced coordinates (target atoms only) -+ -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ if(all.or.atmnam(i).eq.seek)then -+ -+ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ endif -+ -+ enddo -+ -+c compare current structure with reference basin -+ -+ j=0 -+ pp2=0.d0 -+ safe=.true. -+ mdiff=ndiff -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ if(all.or.atmnam(i).eq.seek)then -+ -+c calculate separations in reduced units -+ -+ sxx=xchk(j)-xbas(j) -+ syy=ychk(j)-ybas(j) -+ szz=zchk(j)-zbas(j) -+ -+c calculate minimum image separations -+ -+ sxx=sxx-nint(sxx) -+ syy=syy-nint(syy) -+ szz=szz-nint(szz) -+ -+c set trial structure at minimum displacements from reference -+ -+ xchk(j)=xbas(j)+sxx -+ ychk(j)=ybas(j)+syy -+ zchk(j)=zbas(j)+szz -+ -+c calculate atomic separations in real coordinates -+ -+ txx=(celchk(1)*xchk(j)+celchk(4)*ychk(j)+celchk(7)*zchk(j)) -+ x -(celbas(1)*xbas(j)+celbas(4)*ybas(j)+celbas(7)*zbas(j)) -+ tyy=(celchk(2)*xchk(j)+celchk(5)*ychk(j)+celchk(8)*zchk(j)) -+ x -(celbas(2)*xbas(j)+celbas(5)*ybas(j)+celbas(8)*zbas(j)) -+ tzz=(celchk(3)*xchk(j)+celchk(6)*ychk(j)+celchk(9)*zchk(j)) -+ x -(celbas(3)*xbas(j)+celbas(6)*ybas(j)+celbas(9)*zbas(j)) -+ -+c calculate total structural difference -+ -+ rr2=txx**2+tyy**2+tzz**2 -+ pp2=max(pp2,rr2) -+ -+c identify and store the displaced atoms -+ -+ if(scan.and.rr2.ge.catch2)then -+ -+ mdiff=mdiff+1 -+ -+ if(mdiff.le.mxdiffs)then -+ -+ idabsn(mdiff)=i -+ xdiffs(mdiff)=txx -+ ydiffs(mdiff)=tyy -+ zdiffs(mdiff)=tzz -+ -+ else -+ -+ safe=.false. -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c global check on diffs arrays -+ -+ if(scan)then -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)then -+ -+ if(idnode.eq.0)write(nrite, -+ x "(/,1x,'number of current diffs',i10)")mdiff -+ call error(idnode,2340) -+ -+ endif -+ -+ endif -+ -+c global transition check -+ -+ same=(pp2.lt.catch2) -+ if(mxnode.gt.1)call gstate(same) -+ -+ return -+ end subroutine check_for_transition -+ -+ subroutine check_basins(newbsn,mdiff,mxnode) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for checking that a new basin is not -+c one already known -+c -+c copyright daresbury laboratory -+c author w.smith jan 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical same -+ integer newbsn,ia,ib,ic,id,ibsn,i,j,k,mxnode,mdiff -+ -+ ibsn=1 -+ newbsn=0 -+ ib=mdiff -+ ia=ndiff+1 -+ same=.false. -+ do while(.not.same.and.ibsn.lt.numbsn) -+ -+ ic=nbsa(ibsn) -+ id=nbsb(ibsn) -+ -+ if(ib-ia.eq.id-ic)then -+ -+ same=.true. -+ -+ do k=0,ib-ia -+ -+ i=ia+k -+ j=ic+k -+ -+ if(.not.((idabsn(i).eq.idabsn(j)).and. -+ x (abs(xdiffs(i)-xdiffs(j)).lt.0.1d0).and. -+ x (abs(ydiffs(i)-ydiffs(j)).lt.0.1d0).and. -+ x (abs(zdiffs(i)-zdiffs(j)).lt.0.1d0)))same=.false. -+ -+ enddo -+ -+ endif -+ -+c check if same on all processors -+ -+ if(mxnode.gt.1)call gstate(same) -+ if(same)newbsn=ibsn -+ -+ ibsn=ibsn+1 -+ -+ enddo -+ -+c if not same - must be new basin! -+ -+ if(.not.same)newbsn=numbsn -+ -+ return -+ end subroutine check_basins -+ -+ subroutine neb_driver -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,lneb,bsn1, -+ x bsn2,idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql, -+ x keytol,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw,ngrp, -+ x ntcons,ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter, -+ x keyshl,ntfree,keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth, -+ x ntshl,nscons,delr,dlrpot,engcpe,engsrp,epsq,rcut, -+ x rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep,opttol,sprneb,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for controlling a nudged elastic band -+c calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lneb,newlst,lneut,lnsq,stropt -+ logical lzeql,loglnk,lfcap -+ integer idnode,mxnode,natms,imcon,nstep,nstbgr,nsteql,mstep -+ integer keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw -+ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl -+ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nscons -+ integer ngrp,keytol,ntfree,iatm0,iatm1,iatm2,ntcons -+ integer i,j,k,n,pass,mxpass,nkinks,bsn1,bsn2,itrk -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl -+ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep -+ real(8) sprneb,opttol,hyp_units,fac,xxn,yyn,zzn,tol,cvg,dum -+ -+ data mxpass/100/ -+ -+c control variables -+ -+ stropt=.false. -+ do n=0,mxneb -+ -+ keymin(n)=0 -+ do i=1,5 -+ optk(i,n)=0.d0 -+ enddo -+ -+ enddo -+ if(lneb)numpro=-(100*bsn1+bsn2) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c read in the required start and end point configurations -+ -+ if(lneb)then -+ -+c read data for first reference structure -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,bsn1,natms,imcon,idnode,engcfg) -+ -+ engbsn(1)=engcfg -+ -+ do i=1,9 -+ celbas(i)=cell(i) -+ enddo -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xbas(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ybas(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zbas(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+c read data for second reference structure -+ -+ call read_reference_config -+ x ('CFGBSN','BASINS',nbsn,bsn2,natms,imcon,idnode,engcfg) -+ -+ engbsn(2)=engcfg -+ -+ do i=1,9 -+ celchk(i)=cell(i) -+ enddo -+ call invert(cell,rcell,dum) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xchk(j)=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ ychk(j)=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ zchk(j)=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ enddo -+ -+ endif -+ -+c construct initial `bead' configurations in chain -+ -+ k=0 -+ do n=0,mxneb -+ -+ j=0 -+ fac=dble(n)/dble(mxneb) -+ -+c construct linear mix of cell vectors -+ -+ do i=1,9 -+ celneb(i,n)=(1.d0-fac)*celbas(i)+fac*celchk(i) -+ enddo -+ -+c construct beads by linear interpolation -+ -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ -+ xxn=xbas(j)+fac*((xchk(j)-xbas(j))-nint(xchk(j)-xbas(j))) -+ yyn=ybas(j)+fac*((ychk(j)-ybas(j))-nint(ychk(j)-ybas(j))) -+ zzn=zbas(j)+fac*((zchk(j)-zbas(j))-nint(zchk(j)-zbas(j))) -+ xneb(k)=celneb(1,n)*xxn+celneb(4,n)*yyn+celneb(7,n)*zzn -+ yneb(k)=celneb(2,n)*xxn+celneb(5,n)*yyn+celneb(8,n)*zzn -+ zneb(k)=celneb(3,n)*xxn+celneb(6,n)*yyn+celneb(9,n)*zzn -+ -+ enddo -+ -+ enddo -+ -+c start of NEB optimisation -+ -+ pass=0 -+ safe=.false. -+ do while(.not.safe.and.pass.lt.mxpass) -+ -+ pass=pass+1 -+ safe=.true. -+ mstep=nstep+pass -+ -+c calculate system forces on all beads -+ -+ call neb_system_forces -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, -+ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, -+ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, -+ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, -+ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep) -+ -+c calculate spring forces on all beads -+ -+ call neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) -+ -+c energy minimisation of each bead -+ -+ do n=0,mxneb -+ -+c construct cell vectors for nth bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate and force arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ fxx(i)=fxneb(k) -+ fyy(i)=fyneb(k) -+ fzz(i)=fzneb(k) -+ -+ enddo -+ -+c restore search direction vector if keymin > 0 -+ -+ if(keymin(n).gt.0)then -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ hhx(i)=hxneb(k) -+ hhy(i)=hyneb(k) -+ hhz(i)=hzneb(k) -+ -+ enddo -+ -+ endif -+ -+c form complete global arrays -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ if(keymin(n).gt.0) -+ x call merge(idnode,mxnode,natms,mxbuff,hhx,hhy,hhz,buffer) -+ -+ endif -+ -+c structure optimisation -+ -+ call strucopt -+ x (stropt,keymin(n),keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,10.d0*opttol,engneb(n),optk(1,n), -+ x optk(2,n),optk(3,n),optk(4,n),optk(5,n)) -+ safe=safe.and.stropt -+ stropt=.false. -+ -+c update coordinate arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xneb(k)=xxx(i) -+ yneb(k)=yyy(i) -+ zneb(k)=zzz(i) -+ hxneb(k)=hhx(i) -+ hyneb(k)=hhy(i) -+ hzneb(k)=hhz(i) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c convergence check -+ -+c$$$ if(.not.safe)then -+c$$$ -+c$$$ call error(idnode,2320) -+c$$$ -+c$$$ else -+ -+c save neb profile -+ -+ call write_profile(idnode,mxnode,natms,hyp_units) -+ -+c write neb summary -+ -+ if(idnode.eq.0)then -+ -+ if(lneb)then -+ -+ write(nrite,'(/,1x,"summary of NEB calculation",/)') -+ write(nrite,'(1x,"path and energy for state",i4, -+ x " ---> state",i4," transition")')bsn1,bsn2 -+ write(nrite,'(1x,"convergence status :",l4)')safe -+ write(nrite,'(1x,"obtained after ",i4," iterations",/)')pass -+ -+ do n=0,mxneb -+ write(nrite,'(6x,1p,2e14.6)')path(n),engneb(n)/hyp_units -+ enddo -+ -+ else -+ -+ write(nevnt,'("NEB",i10,3i6,1p,2e14.5)') -+ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, -+ x engbsn(2)/hyp_units -+ write(nrite,'(1x,"NEB",i10,3i6,1p,2e14.5)') -+ x nstep,pass,mxpass,mxneb+1,engbsn(1)/hyp_units, -+ x engbsn(2)/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ endif -+ -+c$$$ endif -+ -+c end of NEB optimisation -+ -+ return -+ end subroutine neb_driver -+ -+ subroutine neb_system_forces -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,idnode,mxnode, -+ x natms,mstep,imcon,nstbgr,nsteql,keyfce,kmax1,kmax2, -+ x kmax3,nhko,nlatt,ntpvdw,ntpmet,nospl,multt,nneut,ntptbp, -+ x ntpfbp,ntpter,keyshl,keyfld,ntbond,ntangl,ntdihd,ntinv, -+ x ntteth,ntshl,delr,dlrpot,engcpe,engsrp,epsq, -+ x rcut,rprim,rvdw,vircpe,virsrp,alpha,drewd,volm, -+ x engmet,virmet,elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb, -+ x engfbp,virfbp,rctter,engter,virter,engbnd,virbnd, -+ x engang,virang,engdih,virdih,enginv,virinv,engtet, -+ x virtet,engshl,shlke,virshl,engfld,virfld,engcfg,fmax, -+ x temp,tstep) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating system forces in a nudged -+c elastic band calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,ltad -+ logical lsolva,lfree,lexcite -+ integer idnode,mxnode,natms,imcon,nstbgr,nsteql,mstep -+ integer numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw -+ integer ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl -+ integer keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl -+ integer iatm0,iatm1,iatm2,i,k,n,nsolva,isolva -+ real(8) delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw -+ real(8) vircpe,virsrp,alpha,drewd,volm,engmet,virmet -+ real(8) elrc,virlrc,rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp -+ real(8) rctter,engter,virter,engbnd,virbnd,engang,virang -+ real(8) engdih,virdih,enginv,virinv,engtet,virtet,engshl -+ real(8) shlke,virshl,engfld,virfld,engcfg,fmax,temp,tstep -+ real(8) engord,virord -+ -+ numrdf=0 -+ ltad=.true. -+ nogofr=.false. -+ -+c dummy variables -+ -+ lsolva=.false. -+ lfree=.false. -+ lexcite=.false. -+ nsolva=0 -+ isolva=1 -+ engord=0.d0 -+ virord=0.d0 -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c calculate system forces for all beads -+ -+ do n=0,mxneb -+ -+c construct cell vectors for one bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate array for one bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ -+ enddo -+ -+c form complete global arrays -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c construct verlet neighbour list -+ -+ call nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c calculate atomic forces for one bead -+ -+ call force_manager -+ x (newlst,lneut,lnsq,nogofr,lzeql,loglnk,lfcap,lsolva,lfree, -+ x lexcite,idnode,mxnode,natms,imcon,mstep,nstbgr,nsteql, -+ x numrdf,keyfce,kmax1,kmax2,kmax3,nhko,nlatt,ntpvdw, -+ x ntpmet,nospl,multt,nneut,ntptbp,ntpfbp,ntpter,keyshl, -+ x keyfld,ntbond,ntangl,ntdihd,ntinv,ntteth,ntshl,nsolva, -+ x isolva,delr,dlrpot,engcpe,engsrp,epsq,rcut,rprim,rvdw, -+ x vircpe,virsrp,alpha,drewd,volm,engmet,virmet,elrc,virlrc, -+ x rcuttb,engtbp,virtbp,rcutfb,engfbp,virfbp,rctter,engter, -+ x virter,engbnd,virbnd,engang,virang,engdih,virdih,enginv, -+ x virinv,engtet,virtet,engshl,shlke,virshl,engfld,virfld, -+ x engcfg,fmax,temp,engord,virord) -+ -+c store configuration energy of bead -+ -+ engneb(n)=engcfg -+ -+c frozen atoms option -+ -+ call freeze(natms) -+ -+c allocate forces to bead atoms -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ fxneb(k)=fxx(i) -+ fyneb(k)=fyy(i) -+ fzneb(k)=fzz(i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine neb_system_forces -+ -+ subroutine neb_spring_forces(idnode,mxnode,natms,nkinks,sprneb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating spring forces in a nudged -+c elastic band calculation -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,k,n,kp,km,idnode,mxnode,natms,iatm0,iatm1,iatm2 -+ integer nkinks -+ real(8) rp2,rm2,tau2,fpar,vv0,vp1,vm1,aaa,bbb,txx,tyy,tzz -+ real(8) uxx,uyy,uzz,wxx,wyy,wzz,sxx,syy,szz,rxx,ryy,rzz -+ real(8) sprneb,fac,kink,det -+ real(8) rcella(9),rcellb(9),rcellc(9),cella(9),cellb(9),cellc(9) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c energies of first and last basins -+ -+ engneb(0)=engbsn(1) -+ engneb(mxneb)=engbsn(2) -+ -+c calculate spring tangents for all beads -+ -+ nkinks=0 -+ do n=1,mxneb-1 -+ -+ rp2=0.d0 -+ rm2=0.d0 -+ tau2=0.d0 -+ fpar=0.d0 -+ kink=0.d0 -+ vv0=engneb(n) -+ vp1=engneb(n+1) -+ vm1=engneb(n-1) -+ -+c calculate tangent vector and scalar product with system force -+ -+ if(vp1.gt.vv0.and.vv0.gt.vm1)then -+ -+ aaa=1.d0 -+ bbb=0.d0 -+ -+ else if(vp1.lt.vv0.and.vv0.lt.vm1)then -+ -+ aaa=0.d0 -+ bbb=1.d0 -+ -+ else if(vp1.gt.vm1)then -+ -+ aaa=max(abs(vp1-vv0),abs(vv0-vm1)) -+ bbb=min(abs(vp1-vv0),abs(vv0-vm1)) -+ -+ else -+ -+ aaa=min(abs(vp1-vv0),abs(vv0-vm1)) -+ bbb=max(abs(vp1-vv0),abs(vv0-vm1)) -+ -+ endif -+ -+c invert cell matrices -+ -+ do i=1,9 -+ cella(i)=celneb(i,n-1) -+ cellb(i)=celneb(i,n) -+ cellc(i)=celneb(i,n+1) -+ enddo -+ call invert(cella,rcella,det) -+ call invert(cellb,rcellb,det) -+ call invert(cellc,rcellc,det) -+ -+ j=0 -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ km=k-iatm2 -+ -+c calculate first spring vector (pbc corrected) -+ -+ sxx=rcellb(1)*xneb(k)+rcellb(4)*yneb(k)+rcellb(7)*zneb(k) -+ syy=rcellb(2)*xneb(k)+rcellb(5)*yneb(k)+rcellb(8)*zneb(k) -+ szz=rcellb(3)*xneb(k)+rcellb(6)*yneb(k)+rcellb(9)*zneb(k) -+ rxx=rcella(1)*xneb(km)+rcella(4)*yneb(km)+rcella(7)*zneb(km) -+ ryy=rcella(2)*xneb(km)+rcella(5)*yneb(km)+rcella(8)*zneb(km) -+ rzz=rcella(3)*xneb(km)+rcella(6)*yneb(km)+rcella(9)*zneb(km) -+ rxx=rxx-nint(rxx-sxx) -+ ryy=ryy-nint(ryy-syy) -+ rzz=rzz-nint(rzz-szz) -+ txx=xneb(k)- -+ x (rxx*celneb(1,n-1)+ryy*celneb(4,n-1)+rzz*celneb(7,n-1)) -+ tyy=yneb(k)- -+ x (rxx*celneb(2,n-1)+ryy*celneb(5,n-1)+rzz*celneb(8,n-1)) -+ tzz=zneb(k)- -+ x (rxx*celneb(3,n-1)+ryy*celneb(6,n-1)+rzz*celneb(9,n-1)) -+ -+c calculate second spring vector (pbc corrected) -+ -+ kp=k+iatm2 -+ rxx=rcellc(1)*xneb(kp)+rcellc(4)*yneb(kp)+rcellc(7)*zneb(kp) -+ ryy=rcellc(2)*xneb(kp)+rcellc(5)*yneb(kp)+rcellc(8)*zneb(kp) -+ rzz=rcellc(3)*xneb(kp)+rcellc(6)*yneb(kp)+rcellc(9)*zneb(kp) -+ rxx=rxx-nint(rxx-sxx) -+ ryy=ryy-nint(ryy-syy) -+ rzz=rzz-nint(rzz-szz) -+ uxx=-xneb(k)+ -+ x rxx*celneb(1,n+1)+ryy*celneb(4,n+1)+rzz*celneb(7,n+1) -+ uyy=-yneb(k)+ -+ x rxx*celneb(2,n+1)+ryy*celneb(5,n+1)+rzz*celneb(8,n+1) -+ uzz=-zneb(k)+ -+ x rxx*celneb(3,n+1)+ryy*celneb(6,n+1)+rzz*celneb(9,n+1) -+ -+ rp2=rp2+uxx*uxx+uyy*uyy+uzz*uzz -+ rm2=rm2+txx*txx+tyy*tyy+tzz*tzz -+ wxx=aaa*uxx+bbb*txx -+ wyy=aaa*uyy+bbb*tyy -+ wzz=aaa*uzz+bbb*tzz -+ taux(j)=wxx -+ tauy(j)=wyy -+ tauz(j)=wzz -+ tau2=tau2+wxx*wxx+wyy*wyy+wzz*wzz -+ fpar=fpar+wxx*fxneb(k)+wyy*fyneb(k)+wzz*fzneb(k) -+ kink=kink+txx*uxx+tyy*uyy+tzz*uzz -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=rp2 -+ buffer(2)=rm2 -+ buffer(3)=tau2 -+ buffer(4)=fpar -+ buffer(5)=kink -+ call gdsum(buffer(1),5,buffer(6)) -+ rp2=buffer(1) -+ rm2=buffer(2) -+ tau2=buffer(3) -+ fpar=buffer(4) -+ kink=buffer(5) -+ -+ endif -+ -+c check for kinking of NEB -+ -+ kink=cos(kink/sqrt(rp2*rm2)) -+ if(kink.lt.0.5d0)nkinks=nkinks+1 -+ -+c calculate final forces -+ -+ j=0 -+ k=n*iatm2 -+ tau2=sqrt(tau2) -+ fac=(sprneb*(sqrt(rp2)-sqrt(rm2))-fpar/tau2)/tau2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ fxneb(k)=fxneb(k)+fac*taux(j) -+ fyneb(k)=fyneb(k)+fac*tauy(j) -+ fzneb(k)=fzneb(k)+fac*tauz(j) -+ -+ enddo -+ -+ enddo -+ -+c abort if kinks detected -+ -+ if(nkinks.gt.0)then -+ -+ if(idnode.eq.0) -+ x write(nrite,'(1x,"number of kinks detected ",i6)')nkinks -+ call error(idnode,2350) -+ -+ endif -+ -+ return -+ end subroutine neb_spring_forces -+ -+ subroutine transition_properties -+ x (seek,ltad,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons,kmax1, -+ x kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl, -+ x nscons,nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree, -+ x ntinv,ntpfbp,ntpmet,ntptbp,ntpter,ntpvdw,ntshl,ntteth, -+ x nturn,numbsn,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, -+ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,estar,catchrad,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for analysing the NEB path and determining -+c the destination state (if not end of chain). -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 seek -+ logical lfcap,lneut,lnsq,loglnk,lzeql,newlst,ltad,scan,same -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter,pass -+ integer ntpvdw,ntshl,ntteth,nturn,i,k,n,iatm0,iatm1,iatm2 -+ integer numblock,numbsn,mdiff -+ real(8) alpha,delr,dlrpot,drewd,elrc,epsq,fmax,opttol,rctter -+ real(8) rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp -+ real(8) virlrc,cvgerr,estar,catchrad,hyp_units -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+c analyse neb profile -+ -+ call scan_profile(nturn,estar) -+ -+c determine true new state from first maximum -+ -+ if(nturn.gt.1)then -+ -+ i=1 -+ do while(ktrn(i).ge.0) -+ i=i+1 -+ enddo -+ n=-ktrn(i) -+ -+c construct cell vectors for nth bead -+ -+ do i=1,9 -+ cell(i)=celneb(i,n) -+ enddo -+ -+c construct coordinate force arrays for nth bead -+ -+ k=n*iatm2 -+ do i=iatm0,iatm1 -+ -+ k=k+1 -+ xxx(i)=xneb(k) -+ yyy(i)=yneb(k) -+ zzz(i)=zneb(k) -+ -+ enddo -+ -+c now minimise structure - this is correct new state -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation -+ -+ numblock=nstep/nblock -+ -+ if(idnode.eq.0)then -+ -+ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+ x nstep,pass,numblock,keytol,opttol/hyp_units, -+ x cfgtmp/hyp_units,cvgerr/hyp_units -+ write(nrite,"(1x,120('-'))") -+ -+ endif -+ -+ if(ltad)then -+ -+c determine differences for new state (TAD only) -+ -+ scan=.true. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+c set difference counters and pointers -+ -+ if(numbsn.gt.mxbsn)call error(idnode,2330) -+ -+ ndiff=mdiff -+ -+ if(numbsn.gt.1)then -+ nbsa(numbsn)=nbsb(numbsn-1)+1 -+ else -+ nbsa(numbsn)=1 -+ endif -+ -+ nbsb(numbsn)=mdiff -+ -+c save minimised starting structure as basin file -+ -+ call write_reference_config -+ x ('CFGBSN','BASINS',nbsn,numbsn,natms,imcon,idnode,cfgtmp) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine transition_properties -+ -+ subroutine write_profile(idnode,mxnode,natms,hyp_units) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing profile file for NEB path -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2007 -+c -+c*********************************************************************** -+ -+ character*4 tail -+ integer idnode,mxnode,natms,i,j,k,n,iatm0,iatm1,iatm2 -+ real(8) hyp_units -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ iatm2=iatm1-iatm0+1 -+ -+ if(idnode.eq.0)then -+ -+c open profile data file -+ -+ if(numpro.lt.0)then -+ -+ write(tail,'(i4.4)')iabs(numpro) -+ open(npro,file='PROFILES'//'/'//'PRX'//tail//'.XY', -+ x form='formatted') -+ -+ else -+ -+ write(tail,'(i4.4)')numpro -+ open(npro,file='PROFILES'//'/'//'PRO'//tail//'.XY', -+ x form='formatted') -+ -+ endif -+ -+ endif -+ -+c calculate path -+ -+ path(0)=0.d0 -+ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(0), -+ x engneb(0)/hyp_units -+ -+ do n=1,mxneb -+ -+ path(n)=0.d0 -+ k=n*iatm2 -+ j=(n-1)*iatm2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ k=k+1 -+ path(n)=(xneb(k)-xneb(j))**2+(yneb(k)-yneb(j))**2+ -+ x (zneb(k)-zneb(j))**2+path(n) -+ -+ enddo -+ -+ if(mxnode.gt.1)call gdsum(path(n),1,buffer(1)) -+ -+ path(n)=sqrt(path(n))+path(n-1) -+ if(idnode.eq.0)write(npro,'(1p,2e14.6)')path(n), -+ x engneb(n)/hyp_units -+ -+ enddo -+ -+ numpro=numpro+1 -+ -+ if(idnode.eq.0)close(npro) -+ -+ return -+ end subroutine write_profile -+ -+ subroutine scan_profile(nturn,estar) -+ -+c********************************************************************* -+c -+c dl_poly routine for analysing neb energy profile -+c -+c copyright - daresbury laboratory -+c author - w.smith january 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer, parameter :: nscan=100 -+ -+ integer i,np,n1,n2,npnts,fail,nturn -+ real(8) di,dj,rpd,uu,vv,v0,ss,estar -+ real(8), allocatable :: aa(:),dd(:),gg(:),zz(:) -+ -+c allocate working arrays -+ -+ allocate (aa(0:mxneb),dd(0:mxneb),gg(0:mxneb),zz(0:mxneb), -+ x stat=fail) -+ -+ npnts=mxneb+1 -+ n1=npnts-1 -+ n2=npnts-2 -+ -+c calculate spline coefficients -+ -+ gg(0)=0.d0 -+ dd(0)=path(1)-path(0) -+ -+ do i=1,n1-1 -+ -+ dd(i)=path(i+1)-path(i) -+ gg(i)=2.d0*(path(i+1)-path(i-1)) -+ zz(i)=6.d0*((engneb(i+1)-engneb(i))/dd(i)- -+ x (engneb(i)-engneb(i-1))/dd(i-1)) -+ -+ enddo -+ -+ gg(n1)=0.d0 -+ dd(n1)=0.d0 -+ aa(0)=0.d0 -+ aa(1)=dd(1)/gg(1) -+ -+ do i=2,n2-1 -+ -+ gg(i)=gg(i)-dd(i-1)*aa(i-1) -+ aa(i)=dd(i)/gg(i) -+ -+ enddo -+ -+ gg(n1-1)=gg(n1-1)-dd(n2-1)*aa(n2-1) -+ gg(1)=zz(1)/gg(1) -+ -+ do i=2,n1-1 -+ gg(i)=(zz(i)-dd(i-1)*gg(i-1))/gg(i) -+ enddo -+ -+ do i=1,n2-1 -+ gg(n1-i)=gg(n1-i)-aa(n1-i)*gg(npnts-i) -+ enddo -+ -+c now scan across the profile locating maxima and minima -+ -+ np=1 -+ nturn=0 -+ ss=1.d0 -+ v0=engneb(0) -+ rpd=(path(npnts-1)-path(0))/dble(nscan) -+ -+ do i=2,nscan-1 -+ -+ uu=rpd*dble(i)+path(0) -+ -+ do while(np.lt.npnts.and.uu.gt.path(np)) -+ np=np+1 -+ enddo -+ -+ di=uu-path(np-1) -+ dj=path(np)-uu -+ vv=(di*engneb(np)+dj*engneb(np-1)-di*dj* -+ x ((dd(np-1)+dj)*gg(np-1)+(dd(np-1)+di)*gg(np))/6.d0)/dd(np-1) -+ -+ if(ss.gt.0.d0.and.vv.le.v0)then -+ -+ nturn=nturn+1 -+ xtrn(nturn)=uu -+ ytrn(nturn)=vv -+ ktrn(nturn)=np -+ -+ else if(ss.lt.0.d0.and.vv.gt.v0)then -+ -+ nturn=nturn+1 -+ xtrn(nturn)=uu -+ ytrn(nturn)=vv -+ ktrn(nturn)=-np -+ -+ endif -+ -+ ss=sign(1.d0,vv-v0) -+ v0=vv -+ -+ enddo -+ -+c estimated activation energy -+ -+ i=1 -+ do while(ktrn(i).lt.0) -+ i=i+1 -+ enddo -+ estar=ytrn(i)-engbsn(1) -+ -+c deallocate working arrays -+ -+ deallocate (aa,dd,gg,zz,stat=fail) -+ -+ return -+ end subroutine scan_profile -+ -+ subroutine transition_time -+ x (seek,lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,idnode, -+ x imcon,keyfce,keyfld,keyshl,keytol,kmax1,kmax2,kmax3, -+ x multt,mxnode,natms,ngrp,nhko,nlatt,nneut,nospl,nscons, -+ x nstbgr,nstep,nsteql,ntangl,ntbond,ntdihd,ntfree,ntinv, -+ x ntpfbp,ntpmet,ntptbp,ntpter,ntrack,ntpvdw,ntshl,ntteth, -+ x ntcons,itrk,alpha,delr,dlrpot,drewd,elrc,virlrc,epsq, -+ x fmax,opttol,rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp, -+ x tstep,volm,cfgtmp,cvgerr,catchrad,timhop,hyp_units) -+ -+c********************************************************************* -+c -+c dl_poly routine for estimating the time of a transition -+c from a backlog of previous configurations -+c -+c copyright - daresbury laboratory -+c author - w.smith february 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ character*8 seek -+ logical same,minflg,lfcap,lneut,lnsq,loglnk,scan -+ logical lzeql,newlst -+ integer nblock,idnode,imcon,keyfce,keyfld,keyshl,keytol -+ integer kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt -+ integer nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond -+ integer ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter -+ integer ntpvdw,ntshl,ntteth,ntcons,ntrack,itrk,mdiff,pass -+ integer nback,ntry,numblock -+ real(8) alpha,delr,dlrpot,drewd,elrc,virlrc,epsq,fmax,opttol -+ real(8) rctter,rcut,rcutfb,rcuttb,rprim,rvdw,temp,tstep -+ real(8) volm,cfgtmp,cvgerr,eng,tol,catchrad,timhop,hyp_units -+ -+c determine starting tracking file -+ -+ nback=min(numtrk,maxtrk) -+ -+c search track files for transition -+ -+ itrk=0 -+ same=.false. -+ -+ do while(.not.same.and.itrk.le.nback) -+ -+ itrk=itrk+1 -+ ntry=mod(numtrk-itrk,maxtrk) -+ -+ call read_reference_config -+ x ('CFGTRK','TRACKS',ntrk,ntry,natms,imcon,idnode,eng) -+ -+ call define_minimum_state -+ x (lfcap,lneut,lnsq,loglnk,lzeql,newlst,nblock,pass, -+ x idnode,imcon,keyfce,keyfld,keyshl,keytol,ntcons, -+ x kmax1,kmax2,kmax3,multt,mxnode,natms,ngrp,nhko,nlatt, -+ x nneut,nospl,nscons,nstbgr,nstep,nsteql,ntangl,ntbond, -+ x ntdihd,ntfree,ntinv,ntpfbp,ntpmet,ntptbp,ntpter, -+ x ntpvdw,ntshl,ntteth,alpha,delr,dlrpot,drewd, -+ x elrc,virlrc,epsq,fmax,opttol,rctter,rcut,rcutfb, -+ x rcuttb,rprim,rvdw,temp,tstep,volm,cfgtmp,cvgerr) -+ -+c write events entry for minimisation (normally deactivated) -+ -+c$$$ if(idnode.eq.0)then -+c$$$ -+c$$$ numblock=nstep/nblock -+c$$$ write(nevnt,'("MIN",i10,3i6,1p,3e14.5)') -+c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, -+c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units -+c$$$ write(nrite,'(1x,"MIN",i10,3i6,1p,3e14.5)') -+c$$$ x nstep,pass,numblock,keytol,opttol/hyp_units, -+c$$$ x cfgtmp/hyp_units,cvgerr/hyp_units -+c$$$ write(nrite,"(1x,120('-'))") -+c$$$ -+c$$$ endif -+ -+c check if still in base state -+ -+ scan=.false. -+ call check_for_transition -+ x (seek,same,scan,idnode,mxnode,natms,imcon,mdiff,nblock, -+ x catchrad) -+ -+ enddo -+ -+ timhop=timhyp-tstep*dble(ntrack)*(dble(itrk)-0.5d0) -+ tboost=track(ntry) -+ -+ return -+ end subroutine transition_time -+ -+ subroutine scramble_velocities(idnode,natms) -+ -+c*********************************************************************** -+c -+c dlpoly hyperdynamics routine for randomising velocities after a -+c transition has occured (use with identical species only) -+c -+c copyright daresbury laboratory -+c author w.smith jan 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer idnode,natms,i,j,k,m,n -+ real(8) vvv -+ -+ do j=1,10 -+ -+ do i=1,natms -+ -+ k=int(natms*duni())+1 -+ vvv=vxx(i) -+ vxx(i)=vxx(k) -+ vxx(k)=vvv -+ m=int(natms*duni())+1 -+ vvv=vyy(i) -+ vyy(i)=vyy(m) -+ vyy(m)=vvv -+ n=int(natms*duni())+1 -+ vvv=vzz(i) -+ vzz(i)=vzz(n) -+ vzz(n)=vvv -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine scramble_velocities -+ -+ subroutine hyper_close(ltad,idnode,mxnode,natms,nsteql) -+ -+c*********************************************************************** -+c -+c dlpoly routine for saving hyperdynamics restart data -+c -+c copyright daresbury laboratory -+c author w.smith dec 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical ltad -+ integer idnode,mxnode,natms,nsteql -+ integer iatm0,iatm1,i,j,k,n,last,ierr,netdif -+ real(8) buff(2) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c total number of atomic differences -+ -+ buff(1)=dble(ndiff) -+ call gdsum(buff(1),1,buff(2)) -+ netdif=nint(buff(1)) -+ -+ if(idnode.eq.0)then -+ -+c open hyperdynamics restart file -+ -+ open(nhrs,file="HYPREV",form="unformatted") -+ -+c write control variables -+ -+ write(nhrs)ltad,dble(numbsn),dble(numtrk),dble(numpro), -+ x dble(netdif),dble(numdark),dble(nsteql),dble(numbpd), -+ x timhyp,timres,tstop,tkeres,tboost,vbase,strres,celres -+ write(nhrs)track -+ endif -+ -+ if(ltad.and.numbsn.gt.1)then -+ -+c load basin difference data -+ -+ n=0 -+ do i=1,numbsn-1 -+ -+ do j=nbsa(i),nbsb(i) -+ -+ buffer(n+1)=dble(idabsn(j)) -+ buffer(n+2)=dble(i) -+ buffer(n+3)=xdiffs(j) -+ buffer(n+4)=ydiffs(j) -+ buffer(n+5)=zdiffs(j) -+ n=n+5 -+ -+ enddo -+ -+ enddo -+ last=n -+ -+c write basin difference data -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ -+ call csend(hyper_tag+k,buff,1,k,ierr) -+ call crecv(2*hyper_tag+k,buff,1) -+ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) -+ last=nint(buff(1))+last -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buff,1) -+ buff(1)=dble(last) -+ call csend(2*hyper_tag+k,buff,1,0,ierr) -+ call csend(3*hyper_tag+k,buffer,last,0,ierr) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)write(nhrs)(buffer(i),i=1,last) -+ call gsync() -+ -+ endif -+ -+c load reference block configuration data -+ -+ j=0 -+ k=1 -+ do i=iatm0,iatm1 -+ -+ buffer(j+1)=xres(k) -+ buffer(j+2)=yres(k) -+ buffer(j+3)=zres(k) -+ j=j+3 -+ k=k+1 -+ -+ enddo -+ last=j -+ -+c write reference block configuration data -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buff,1,k,ierr) -+ call crecv(2*hyper_tag+k,buff,1) -+ call crecv(3*hyper_tag+k,buffer(last+1),nint(buff(1))) -+ last=nint(buff(1))+last -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buff,1) -+ buff(1)=dble(last) -+ call csend(2*hyper_tag+k,buff,1,0,ierr) -+ call csend(3*hyper_tag+k,buffer,last,0,ierr) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)then -+ -+ write(nhrs)(buffer(i),i=1,last) -+ close(nhrs) -+ -+ endif -+ call gsync() -+ -+ return -+ end subroutine hyper_close -+ -+ subroutine hyper_open(ltad,idnode,mxnode,natms,nsteql) -+ -+c*********************************************************************** -+c -+c dlpoly routine for reading hyperdynamics restart data -+c -+c copyright daresbury laboratory -+c author w.smith dec 2007 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical ltad,mtad -+ integer idnode,mxnode,natms,nsteql -+ integer iatm0,iatm1,i,j,k,n,last,netdif,ierr -+ real(8) buff(1) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c restore control variables -+ -+ mtad=.true. -+ if(idnode.eq.0)then -+ -+c open hyperdynamics restart file -+ -+ open(nhrs,file="HYPOLD",form="unformatted") -+ -+ read(nhrs)mtad,(buffer(i),i=1,30) -+ read(nhrs)track -+ -+ else -+ -+ do i=1,30 -+ buffer(i)=0.d0 -+ enddo -+ track(:)=0.d0 -+ -+ endif -+ -+c check restart file is tad compatible -+ -+ call gstate(mtad) -+ if(ltad.and.(.not.mtad))call error(idnode,2341) -+ -+ call gdsum(buffer(1),31,buffer(32)) -+ -+ numbsn=nint(buffer(1)) -+ numtrk=nint(buffer(2)) -+ numpro=nint(buffer(3)) -+ netdif=nint(buffer(4)) -+ numdark=nint(buffer(5)) -+ nsteql=nint(buffer(6)) -+ numbpd=nint(buffer(7)) -+ timhyp=buffer(8) -+ timres=buffer(9) -+ tstop=buffer(10) -+ tkeres=buffer(11) -+ tboost=buffer(12) -+ vbase=buffer(13) -+ do i=1,9 -+ -+ strres(i)=buffer(i+13) -+ celres(i)=buffer(i+22) -+ -+ enddo -+ last=size(track) -+ call gdsum(track,last,buffer) -+ -+ if(ltad.and.numbsn.gt.1)then -+ -+c restore basin difference data -+ -+ last=5*netdif -+ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) -+ -+ do k=1,mxnode-1 -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buffer,last,k,ierr) -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buffer,last) -+ -+ endif -+ -+ enddo -+ -+c reject nonlocal basin difference data -+ -+ j=0 -+ do i=1,last,5 -+ -+ n=nint(buffer(i)) -+ if(n.ge.iatm0.and.n.le.iatm1)then -+ -+ buffer(j+1)=buffer(i) -+ buffer(j+2)=buffer(i+1) -+ buffer(j+3)=buffer(i+2) -+ buffer(j+4)=buffer(i+3) -+ buffer(j+5)=buffer(i+4) -+ j=j+5 -+ -+ endif -+ -+ enddo -+ last=j -+ -+c unload basin difference data -+ -+ n=0 -+ nbsa(1)=1 -+ do i=1,numbsn-1 -+ -+ if(i.gt.1)nbsa(i)=n+1 -+ -+ do j=1,last,5 -+ -+ if(nint(buffer(j+1)).eq.i)then -+ -+ n=n+1 -+ idabsn(n)=nint(buffer(j)) -+ xdiffs(n)=buffer(j+2) -+ ydiffs(n)=buffer(j+3) -+ zdiffs(n)=buffer(j+4) -+ -+ endif -+ -+ enddo -+ -+ nbsb(i)=n -+ -+ enddo -+ ndiff=n -+ call gsync() -+ -+ endif -+ -+c retrieve reference block configuration data -+ -+ last=3*natms -+ if(idnode.eq.0)read(nhrs)(buffer(i),i=1,last) -+ -+ do k=1,mxnode-1 -+ -+c read reference block configuration data -+ -+ if(idnode.eq.0)then -+ -+ call csend(hyper_tag+k,buffer,last,k,ierr) -+ -+ elseif(k.eq.idnode)then -+ -+ call crecv(hyper_tag+k,buffer,last) -+ -+ endif -+ -+ enddo -+ -+c unload reference block configuration data -+ -+ n=1 -+ j=3*(iatm0-1) -+ do i=iatm0,iatm1 -+ -+ xres(n)=buffer(j+1) -+ yres(n)=buffer(j+2) -+ zres(n)=buffer(j+3) -+ j=j+3 -+ n=n+1 -+ -+ enddo -+ -+ if(idnode.eq.0)close(nhrs) -+ call gsync() -+ -+ return -+ end subroutine hyper_open -+ -+ subroutine bpd_forces(natms,keybpd,vmin,ebias,temp,engcfg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scaling forces in a bias potential dynamics -+c simulation using hamelberg, mongan and mccammon factor -+c J. Chem. Phys. 120 (2004) 11919 -+c -+c copyright - daresbury laboratory -+c author - w. smith jan 2008 -+c -+c*********************************************************************** -+ -+ integer i,natms,mynode,keybpd -+ real(8) alpha,vmin,ebias,beta,temp,engcfg,eboost,hscale -+ real(8) engtmp -+ -+ boost=1.d0 -+ numbpd=numbpd+1 -+ -+c reset potential energy wrt base level -+ -+ if(keybpd.eq.1)then -+ engtmp=engcfg-vbase -+ else -+ engtmp=engcfg-engbsn(1) -+ endif -+ -+ if(ebias.gt.engtmp)then -+ -+c bias potental boost -+ -+ alpha=ebias*(ebias-vmin)/vmin -+ beta=1.d0/(boltz*temp*dble(natms)) -+ eboost=(ebias-engtmp)**2/(alpha+ebias-engtmp) -+ boost=exp(beta*eboost) -+ -+c bias potential forces scaling factor -+ -+ hscale=(alpha/(alpha+ebias-engtmp))**2 -+ -+c scale forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxx(i)*hscale -+ fyy(i)=fyy(i)*hscale -+ fzz(i)=fzz(i)*hscale -+ -+ enddo -+ -+ endif -+ -+c accumulative average of boost factor -+ -+ tboost=boost/dble(numbpd)+dble(numbpd-1)*tboost/dble(numbpd) -+ -+ return -+ end subroutine bpd_forces -+ -+ end module hyper_dynamics_module -diff -urN dl_class_1.9.orig/srcmod/integrator_module.f dl_class_1.9/srcmod/integrator_module.f ---- dl_class_1.9.orig/srcmod/integrator_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/integrator_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,624 @@ -+ module integrator_module -+ -+c*********************************************************************** -+c -+c dl_poly module for selecting verlet integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use error_module -+ use lf_motion_module -+ use lf_rotation1_module -+ use lf_rotation2_module -+ use pmf_module -+ use temp_scalers_module -+ use vv_motion_module -+ use vv_rotation1_module -+ use vv_rotation2_module -+ -+ contains -+ -+ subroutine lf_integrate -+ x (lcnb,lshmov,lnfic,idnode,mxnode,imcon,natms,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x tstep,engke,engrot,tolnce,quattol,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint, -+ x elrc,virlrc,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the integration algorithm -+c to solve the the equations of motion. based on the leapfrog -+c verlet algorithm -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,safep,safeq,lcnb,lshmov,lnfic -+ integer idnode,mxnode,imcon,natms,ngrp,keyens,nscons,nofic -+ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep -+ real(8) tstep,engke,engrot,tolnce,quattol,vircon,vircom -+ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip -+ real(8) consv,conint,elrc,virlrc,virpmf -+ -+ safe=.true. -+ safeq=.true. -+ safep=.true. -+ -+ if(ngrp.eq.0) then -+ -+ if(keyens.eq.0) then -+ -+c verlet leapfrog -+ -+ call nve_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.1) then -+ -+c Evans Gaussian Temperature constraints -+ -+ call nvt_e1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.2) then -+ -+c Berendsen thermostat -+ -+ call nvt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,taut,sigma,tolnce,tstep,vircon) -+ -+ else if(keyens.eq.3) then -+ -+c Nose-Hoover thermostat -+ -+ call nvt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) -+ -+ elseif(keyens.eq.4) then -+ -+c Berendsen thermostat and isotropic barostat -+ -+ call npt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,virtot,vircon,volm) -+ -+ else if(keyens.eq.5) then -+ -+c Nose-Hoover thermostat and isotropic barostat -+ -+ call npt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) -+ -+ else if(keyens.eq.6) then -+ -+c Berendsen thermostat and barostat (cell shape varying) -+ -+ call nst_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma, -+ x tolnce,tstep,vircon,volm) -+ -+ else if(keyens.eq.7) then -+ -+c Nose-Hoover thermostat and barostat (cell shape varying) -+ -+ call nst_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) -+ -+ elseif(keyens.eq.8) then -+ -+c Potential of mean force in NVE -+ -+ call pmflf -+ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+ endif -+ -+ elseif(ngrp.gt.0) then -+ -+c apply rigid body equations of motion -+ -+ if(keyens.eq.0) then -+ -+ if(.not.lcnb) then -+ -+ call nveq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+ else -+ -+ call nveq_2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+ endif -+ -+ elseif(keyens.eq.1) then -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ elseif(keyens.eq.2) then -+ -+ if(.not.lcnb) then -+ -+ call nvtq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+ else -+ -+ call nvtq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.3) then -+ -+ if(.not.lcnb) then -+ -+ call nvtq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+ else -+ -+ call nvtq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.4) then -+ -+ if(.not.lcnb) then -+ -+ call nptq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, -+ x vircon,volm) -+ -+ else -+ -+ call nptq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, -+ x virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.5) then -+ -+ if(.not.lcnb) then -+ -+ call nptq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,virtot,vircom,vircon,volm) -+ -+ else -+ -+ call nptq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.6) then -+ -+ if(.not.lcnb) then -+ -+ call nstq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+ else -+ -+ call nstq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+ endif -+ -+ elseif(keyens.eq.7) then -+ -+ if(.not.lcnb) then -+ -+ call nstq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,volm) -+ -+ else -+ -+ call nstq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,volm) -+ -+ endif -+ -+ else -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ endif -+ -+ endif -+ -+c check on convergence of pmf-shake -+ -+ if(ntpmf.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safep) -+ if(.not.safep) call error(idnode,438) -+ -+ endif -+ -+c check on convergence of shake -+ -+ if(ntcons.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,105) -+ -+ endif -+ -+c check on convergence of quaternion algorithm -+ -+ if(ngrp.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safeq) -+ if(.not.safeq) call error(idnode,321) -+ -+ endif -+ -+c eliminate "flying ice cube" in long simulations (Berendsen) -+ -+ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then -+ -+ if(mod(nstep,nofic).eq.0)then -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lf_integrate -+ -+ subroutine vv_integrate -+ x (lcnb,lshmov,lnfic,isw,idnode,mxnode,imcon,natms,nstep,ngrp, -+ x keyens,nscons,ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nofic, -+ x ntshl,keyshl,tstep,engke,engrot,tolnce,vircon,vircom,virtot, -+ x temp,press,volm,sigma,taut,taup,chit,chip,consv,conint,elrc, -+ x virlrc,virpmf,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for selecting the integration algorithm -+c to solve the the equations of motion. based on the velocity -+c verlet algorithm -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,safep,lcnb,lshmov,lnfic -+ integer isw,idnode,mxnode,imcon,natms,ngrp,keyens,nscons -+ integer ntcons,ntpatm,ntfree,nspmf,ntpmf,mode,nstep,nofic -+ integer ntshl,keyshl -+ real(8) tstep,engke,engrot,tolnce,vircon,vircom -+ real(8) virtot,temp,press,volm,sigma,taut,taup,chit,chip -+ real(8) consv,conint,elrc,virlrc,virpmf,chit_shl,sigma_shl -+ -+ if(ngrp.eq.0) then -+ -+ if(keyens.eq.0) then -+ -+c verlet leapfrog -+ -+ call nvevv_1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,engke,tolnce,vircon) -+ -+ else if(keyens.eq.1) then -+ -+c Evans Gaussian Temperature constraints -+ -+ call nvtvv_e1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,engke,tolnce,vircon) -+ -+ else if(keyens.eq.2) then -+ -+c Berendsen thermostat -+ -+ call nvtvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,tstep,taut,sigma,engke,tolnce,vircon) -+ -+ else if(keyens.eq.3) then -+ -+c Nose-Hoover thermostat -+ -+ call nvtvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntshl,keyshl,tstep,taut,sigma,chit,consv, -+ x conint,engke,tolnce,vircon,chit_shl,sigma_shl) -+ -+ elseif(keyens.eq.4) then -+ -+c Berendsen thermostat and isotropic barostat -+ -+ call nptvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,virtot,vircon,volm) -+ -+ else if(keyens.eq.5) then -+ -+c Nose-Hoover thermostat and isotropic barostat -+ -+ call nptvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp, -+ x chip,chit,consv,conint,engke,elrc,tolnce,vircon, -+ x virtot,virlrc,volm,press,chit_shl,sigma_shl) -+ -+ else if(keyens.eq.6) then -+ -+c Berendsen thermostat and barostat (cell shape varying) -+ -+ call nstvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press, -+ x elrc,virlrc,tolnce,vircon,volm) -+ -+ else if(keyens.eq.7) then -+ -+c Nose-Hoover thermostat and barostat (cell shape varying) -+ -+ call nstvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chit,consv,conint,engke,elrc,tolnce,vircon, -+ x virlrc,volm,press,chit_shl,sigma_shl) -+ -+ elseif(keyens.eq.8) then -+ -+c Potential of mean force in NVE -+ -+ call pmfvv -+ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+ endif -+ -+ elseif(ngrp.gt.0) then -+ -+c apply rigid body equations of motion -+ -+ if(keyens.eq.0) then -+ -+ if(.not.lcnb) then -+ -+ call nveqvv_1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+ else -+ -+ call nveqvv_2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.1) then -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ elseif(keyens.eq.2) then -+ -+ if(.not.lcnb) then -+ -+ call nvtqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+ else -+ -+ call nvtqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+ endif -+ -+ elseif(keyens.eq.3) then -+ -+ if(.not.lcnb) then -+ -+ call nvtqvv_h1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, -+ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, -+ x sigma_shl) -+ -+ else -+ -+ call nvtqvv_h2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke, -+ x engrot,taut,sigma,tolnce,tstep,vircom,vircon,chit_shl, -+ x sigma_shl) -+ -+ endif -+ -+ elseif(keyens.eq.4) then -+ -+ if(.not.lcnb) then -+ -+ call nptqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+ else -+ -+ call nptqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+ endif -+ -+ elseif(keyens.eq.5) then -+ -+ if(.not.lcnb) then -+ -+ call nptqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virtot,virlrc,vircom,volm,press,chit_shl, -+ x sigma_shl) -+ -+ else -+ -+ call nptqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virtot,virlrc,volm,press,chit_shl, -+ x sigma_shl) -+ -+ endif -+ -+ elseif(keyens.eq.6) then -+ -+ if(.not.lcnb) then -+ -+ call nstqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, -+ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+ else -+ -+ call nstqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup, -+ x sigma,tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+ endif -+ -+ elseif(keyens.eq.7) then -+ -+ if(.not.lcnb) then -+ -+ call nstqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+ else -+ -+ call nstqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) -+ -+ endif -+ -+ else -+ -+c invalid option -+ -+ call error(idnode,430) -+ -+ endif -+ -+ endif -+ -+c check on convergence of pmf-shake -+ -+ if(ntpmf.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safep) -+ if(.not.safep) call error(idnode,438) -+ -+ endif -+ -+c check on convergence of shake -+ -+ if(ntcons.gt.0) then -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,105) -+ -+ endif -+ -+c eliminate "flying ice cube" in long simulations (Berendsen) -+ -+ if(lnfic.and.(keyens.eq.2.or.keyens.eq.4.or.keyens.eq.6))then -+ -+ if(mod(nstep,nofic).eq.0)then -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine vv_integrate -+ -+ end module integrator_module -diff -urN dl_class_1.9.orig/srcmod/inversion_module.f dl_class_1.9/srcmod/inversion_module.f ---- dl_class_1.9.orig/srcmod/inversion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/inversion_module.f 2011-08-16 14:42:52.000000000 +0200 -@@ -0,0 +1,828 @@ -+ module inversion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining inversion potential arrays -+c copyright - daresbury laboratory -+c -+c author - w. smith sep 2003 -+c adapted - w. smith jun 2008 : solvation, free energy, excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prminv(:,:) -+ integer, allocatable :: listinv(:,:) -+ integer, allocatable :: numinv(:),keyinv(:),lstinv(:,:) -+ -+ save prminv,listinv,numinv,keyinv,lstinv -+ -+ contains -+ -+ subroutine alloc_inv_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(5) -+ -+ do i=1,5 -+ fail(i)=0 -+ enddo -+ -+ allocate (prminv(mxtinv,mxpinv),stat=fail(1)) -+ allocate (numinv(mxtmls),stat=fail(2)) -+ allocate (keyinv(mxtinv),stat=fail(3)) -+ allocate (lstinv(mxtinv,4),stat=fail(4)) -+ allocate (listinv(mxinv,5),stat=fail(5)) -+ -+ do i=1,5 -+ if(fail(i).gt.0)call error(idnode,1120) -+ enddo -+ -+ do i=1,mxtmls -+ numinv(i)=0 -+ enddo -+ -+ end subroutine alloc_inv_arrays -+ -+ subroutine define_inversions -+ x (safe,idnode,itmols,ninver,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining inversion angle potentials -+c note: includes calcite planar potential which is not strictly -+c an inversion potential and is different in implementation -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ integer idnode,itmols,ninver,nsite,ntmp,inv,inv1,i -+ integer iatm1,iatm2,iatm3,iatm4,isite1,isite2,isite3,isite4 -+ integer ia,ja,idum -+ real(8) engunit -+ -+ ntmp=intstr(record,lenrec,idum) -+ numinv(itmols)=numinv(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of inversion terms', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,/,1x,'inversion potential details:', -+ x /,/,21x,7x,'key',5x,'index',5x,'index',5x, -+ x 'index',5x,'index',5x,'f-const',7x,'angle',/)") -+ endif -+ -+ inv1=numinv(itmols) -+ do inv=1,inv1 -+ -+c read inversion potential parameters -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ iatm1=intstr(record,lenrec,idum) -+ iatm2=intstr(record,lenrec,idum) -+ iatm3=intstr(record,lenrec,idum) -+ iatm4=intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ isite2=nsite-numsit(itmols)+iatm2 -+ isite3=nsite-numsit(itmols)+iatm3 -+ isite4=nsite-numsit(itmols)+iatm4 -+ -+ if(lfzsit(isite1)*lfzsit(isite2)* -+ x lfzsit(isite3)*lfzsit(isite4).ne.0)then -+ -+ numinv(itmols)=numinv(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ ninver=ninver+1 -+ -+ if(ninver.gt.mxtinv)call error(idnode,73) -+ -+ if(keyword(1:4).eq.'harm')then -+ keyinv(ninver)=1 -+ elseif(keyword(1:4).eq.'hcos')then -+ keyinv(ninver)=2 -+ elseif(keyword(1:4).eq.'plan')then -+ keyinv(ninver)=3 -+ elseif(keyword(1:4).eq.'calc')then -+ keyinv(ninver)=4 -+ else -+ if(idnode.eq.0)write(nrite,*)record -+ call error(idnode,449) -+ endif -+ -+ lstinv(ninver,1)=iatm1 -+ lstinv(ninver,2)=iatm2 -+ lstinv(ninver,3)=iatm3 -+ lstinv(ninver,4)=iatm4 -+ prminv(ninver,1)=dblstr(record,lenrec,idum) -+ prminv(ninver,2)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,4i10,1p,e12.4,0p,9f12.6)") -+ x keyword(1:4),(lstinv(ninver,ia),ia=1,4), -+ x (prminv(ninver,ja),ja=1,mxpinv) -+ -+c convert energies to internal units and angles to radians -+ -+ prminv(ninver,1)=prminv(ninver,1)*engunit -+ -+ if(keyinv(ninver).eq.2)then -+ -+ prminv(ninver,2)=cos(prminv(ninver,2)*(pi/180.d0)) -+ -+ elseif(keyinv(ninver).eq.4)then -+ -+ prminv(ninver,2)=prminv(ninver,2)*engunit -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_inversions -+ -+ subroutine invfrc -+ x (lsolva,lfree,lexcite,idnode,imcon,mxnode,ntinv,enginv,virinv) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating inversion energy and force -+c terms in molecular dynamics. -+c -+c copyright - daresbury laboratory 1996 -+c author - w. smith may 1996 -+c modified - w.smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lcalcite -+ logical idrive,jdrive,kdrive,ldrive -+ integer idnode,imcon,mxnode,ntinv,fail1,fail2 -+ integer fail3,inv1,inv2,i,ii,ia,id,kk,ib,ic -+ real(8) strs(6),strs_loc(6) -+ real(8) xab,yab,zab,rab2,rrab,xac,yac,zac,rac2,rrac,xad,yad -+ real(8) zad,rad2,rrad,rbc,rcd,rdb,ubx,uby,ubz,ubn,rub,vbx -+ real(8) vby,vbz,rvb,wwb,ucx,ucy,ucz,ucn,vcx,vcy,vcz,rvc,wwc -+ real(8) udx,udy,udz,udn,vdx,vdy,vdz,vdn,rvd,wwd,cosb,cosc -+ real(8) cosd,thb,thc,thd,gamb,gamc,gamd,rubc,rubd,rucd,rucb -+ real(8) rudb,rudc,rvbc,rvbd,rvcd,rvcb,rvdb,rvdc,fax,fay,faz -+ real(8) fbx,fby,fbz,fcx,fcy,fcz,fdx,fdy,fdz,vbn,vcn,ruc,rud -+ real(8) uuu,uu2,uun,uux,uuy,uuz,enginv,virinv,omega,gamma -+ real(8) gamvir -+ -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ real(8), allocatable :: xdac(:),ydac(:),zdac(:) -+ real(8), allocatable :: xdad(:),ydad(:),zdad(:) -+ -+ data fail1,fail2,fail3/0,0,0/ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail1) -+ allocate (xdac(msbad),ydac(msbad),zdac(msbad),stat=fail2) -+ allocate (xdad(msbad),ydad(msbad),zdad(msbad),stat=fail3) -+ if(fail1.ne.0.or.fail2.ne.0.or.fail3.ne.0) -+ x call error(idnode,1130) -+ -+c check size of work arrays -+ -+ if((ntinv-mxnode+1)/mxnode.gt.msbad)call error(idnode,427) -+ -+c block indices -+ -+ inv1=(idnode*ntinv)/mxnode+1 -+ inv2=((idnode+1)*ntinv)/mxnode -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ enginv=0.d0 -+ virinv=0.d0 -+ inv_fre=0.d0 -+ inv_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(4)=.true. -+ inv_sol(:)=0.d0 -+ if(lexcite)inv_exc(:)=0.d0 -+ -+ endif -+ -+c calculate bond vectors -+ -+ ii=0 -+ do i=inv1,inv2 -+ -+ ii=ii+1 -+ -+c potential energy function type -+ -+ kk=listinv(ii,1) -+ -+c indices of bonded atoms -+ -+ ia=listinv(ii,2) -+ ib=listinv(ii,3) -+ ic=listinv(ii,4) -+ id=listinv(ii,5) -+ -+c define components of bond vectors -+ -+ xdab(ii)=xxx(ib)-xxx(ia) -+ ydab(ii)=yyy(ib)-yyy(ia) -+ zdab(ii)=zzz(ib)-zzz(ia) -+ -+ if(keyinv(kk).eq.4)then -+ -+ xdac(ii)=xxx(ic)-xxx(ib) -+ ydac(ii)=yyy(ic)-yyy(ib) -+ zdac(ii)=zzz(ic)-zzz(ib) -+ -+ xdad(ii)=xxx(id)-xxx(ib) -+ ydad(ii)=yyy(id)-yyy(ib) -+ zdad(ii)=zzz(id)-zzz(ib) -+ -+ else -+ -+ xdac(ii)=xxx(ic)-xxx(ia) -+ ydac(ii)=yyy(ic)-yyy(ia) -+ zdac(ii)=zzz(ic)-zzz(ia) -+ -+ xdad(ii)=xxx(id)-xxx(ia) -+ ydad(ii)=yyy(id)-yyy(ia) -+ zdad(ii)=zzz(id)-zzz(ia) -+ -+ endif -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ call images(imcon,0,1,ii,cell,xdac,ydac,zdac) -+ call images(imcon,0,1,ii,cell,xdad,ydad,zdad) -+ -+c loop over all specified inversions -+ -+ ii=0 -+ do i=inv1,inv2 -+ -+ ii=ii+1 -+ -+c select potential energy function type -+ -+ kk=listinv(ii,1) -+ lcalcite=(keyinv(kk).eq.4) -+ -+c define components of bond vectors -+ -+ xab=xdab(ii) -+ yab=ydab(ii) -+ zab=zdab(ii) -+ rab2=xab*xab+yab*yab+zab*zab -+ rrab=1.d0/sqrt(rab2) -+ -+ xac=xdac(ii) -+ yac=ydac(ii) -+ zac=zdac(ii) -+ rac2=xac*xac+yac*yac+zac*zac -+ rrac=1.d0/sqrt(rac2) -+ -+ xad=xdad(ii) -+ yad=ydad(ii) -+ zad=zdad(ii) -+ rad2=xad*xad+yad*yad+zad*zad -+ rrad=1.d0/sqrt(rad2) -+ -+ if(lcalcite)then -+ -+c calculate vector normal to plane -+ -+ uux=yac*zad-zac*yad -+ uuy=zac*xad-xac*zad -+ uuz=xac*yad-yac*xad -+ uun=1.d0/sqrt(uux**2+uuy**2+uuz**2) -+ uux=uun*uux -+ uuy=uun*uuy -+ uuz=uun*uuz -+ uuu=xab*uux+yab*uuy+zab*uuz -+ -+ else -+ -+c scalar products of bond vectors -+ -+ rbc=xab*xac+yab*yac+zab*zac -+ rcd=xac*xad+yac*yad+zac*zad -+ rdb=xad*xab+yad*yab+zad*zab -+ -+c calculate bond-angle-plane vectors -+ -+ ubx=xac*rrac+xad*rrad -+ uby=yac*rrac+yad*rrad -+ ubz=zac*rrac+zad*rrad -+ ubn=1.d0/sqrt(ubx**2+uby**2+ubz**2) -+ ubx=ubn*ubx -+ uby=ubn*uby -+ ubz=ubn*ubz -+ rub=xab*ubx+yab*uby+zab*ubz -+ -+ vbx=xac*rrac-xad*rrad -+ vby=yac*rrac-yad*rrad -+ vbz=zac*rrac-zad*rrad -+ vbn=1.d0/sqrt(vbx**2+vby**2+vbz**2) -+ vbx=vbn*vbx -+ vby=vbn*vby -+ vbz=vbn*vbz -+ rvb=xab*vbx+yab*vby+zab*vbz -+ wwb=sqrt(rub**2+rvb**2) -+ -+ ucx=xad*rrad+xab*rrab -+ ucy=yad*rrad+yab*rrab -+ ucz=zad*rrad+zab*rrab -+ ucn=1.d0/sqrt(ucx**2+ucy**2+ucz**2) -+ ucx=ucn*ucx -+ ucy=ucn*ucy -+ ucz=ucn*ucz -+ ruc=xac*ucx+yac*ucy+zac*ucz -+ -+ vcx=xad*rrad-xab*rrab -+ vcy=yad*rrad-yab*rrab -+ vcz=zad*rrad-zab*rrab -+ vcn=1.d0/sqrt(vcx**2+vcy**2+vcz**2) -+ vcx=vcn*vcx -+ vcy=vcn*vcy -+ vcz=vcn*vcz -+ rvc=xac*vcx+yac*vcy+zac*vcz -+ wwc=sqrt(ruc**2+rvc**2) -+ -+ udx=xab*rrab+xac*rrac -+ udy=yab*rrab+yac*rrac -+ udz=zab*rrab+zac*rrac -+ udn=1.d0/sqrt(udx**2+udy**2+udz**2) -+ udx=udn*udx -+ udy=udn*udy -+ udz=udn*udz -+ rud=xad*udx+yad*udy+zad*udz -+ -+ vdx=xab*rrab-xac*rrac -+ vdy=yab*rrab-yac*rrac -+ vdz=zab*rrab-zac*rrac -+ vdn=1.d0/sqrt(vdx**2+vdy**2+vdz**2) -+ vdx=vdn*vdx -+ vdy=vdn*vdy -+ vdz=vdn*vdz -+ rvd=xad*vdx+yad*vdy+zad*vdz -+ wwd=sqrt(rud**2+rvd**2) -+ -+c calculate inversion angle cosines -+ -+ cosb=wwb*rrab -+ cosc=wwc*rrac -+ cosd=wwd*rrad -+ -+ endif -+ -+c calculate potential energy and scalar force term -+ -+ if(keyinv(kk).eq.1)then -+ -+c key=1 for harmonic inversion potential -+ -+ thb=acos(cosb) -+ thc=acos(cosc) -+ thd=acos(cosd) -+ omega=0.5d0*prminv(kk,1)*((thb-prminv(kk,2))**2+ -+ x (thc-prminv(kk,2))**2+(thd-prminv(kk,2))**2)/3.d0 -+ gamvir=0.d0 -+ -+ gamb=0.d0 -+ if(abs(thb).gt.1.d-12) -+ x gamb=prminv(kk,1)*(thb-prminv(kk,2))/(3.d0*sin(thb)) -+ gamc=0.d0 -+ if(abs(thc).gt.1.d-12) -+ x gamc=prminv(kk,1)*(thc-prminv(kk,2))/(3.d0*sin(thc)) -+ gamd=0.d0 -+ if(abs(thd).gt.1.d-12) -+ x gamd=prminv(kk,1)*(thd-prminv(kk,2))/(3.d0*sin(thd)) -+ -+ else if(keyinv(kk).eq.2)then -+ -+c key=2 for harmonic cosine inversion potential -+ -+ omega=0.5d0*prminv(kk,1)*((cosb-prminv(kk,2))**2+ -+ x (cosc-prminv(kk,2))**2+(cosb-prminv(kk,2))**2)/3.d0 -+ gamvir=0.d0 -+ -+ gamb=-prminv(kk,1)*(cosb-prminv(kk,2))/3.d0 -+ gamc=-prminv(kk,1)*(cosc-prminv(kk,2))/3.d0 -+ gamd=-prminv(kk,1)*(cosd-prminv(kk,2))/3.d0 -+ -+ else if(keyinv(kk).eq.3)then -+ -+c key=3 for planar inversion potentials -+ -+ omega=prminv(kk,1)*((1.d0-cosb)+(1.d0-cosc)+(1.d0-cosd))/3.d0 -+ gamvir=0.d0 -+ -+ gamb=prminv(kk,1)/3.d0 -+ gamc=prminv(kk,1)/3.d0 -+ gamd=prminv(kk,1)/3.d0 -+ -+ else if(keyinv(kk).eq.4)then -+ -+c key=4 for planar calcite potential -+ -+ uu2=uuu*uuu -+ omega=uu2*(prminv(kk,1)+prminv(kk,2)*uu2) -+ gamvir=uu2*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) -+ gamma=-uuu*(2.d0*prminv(kk,1)+4.d0*prminv(kk,2)*uu2) -+ -+ else -+ -+c undefined potential -+ -+ safe=.false. -+ gamvir=0.d0 -+ gamb=0.d0 -+ gamc=0.d0 -+ gamd=0.d0 -+ -+ endif -+ -+c indices of bonded atoms -+ -+ ia=listinv(ii,2) -+ ib=listinv(ii,3) -+ ic=listinv(ii,4) -+ id=listinv(ii,5) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ ldrive=driven(ltype(id)) -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1).and. -+ x (atm_fre(ic).ne.1).and.(atm_fre(id).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic)+ -+ x atm_fre(id).eq.0) -+ -+ if(lsolva)then -+ inv_exc(atmolt(ia))=inv_exc(atmolt(ia))+omega -+ endif -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1).or. -+ x (atm_fre(ic).eq.1).or.(atm_fre(id).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ inv_fre=inv_fre-omega -+ omega=lambda1*omega -+ gamb=lambda1*gamb -+ gamc=lambda1*gamc -+ gamd=lambda1*gamd -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2).or. -+ x (atm_fre(ic).eq.2).or.(atm_fre(id).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ inv_fre=inv_fre+omega -+ omega=lambda2*omega -+ gamb=lambda2*gamb -+ gamc=lambda2*gamc -+ gamd=lambda2*gamd -+ -+ endif -+ -+ endif -+ -+c calculate bond and u,v scalar products -+ -+ if(.not.lcalcite)then -+ -+ rubc=xab*ucx+yab*ucy+zab*ucz -+ rubd=xab*udx+yab*udy+zab*udz -+ rucd=xac*udx+yac*udy+zac*udz -+ rucb=xac*ubx+yac*uby+zac*ubz -+ rudb=xad*ubx+yad*uby+zad*ubz -+ rudc=xad*ucx+yad*ucy+zad*ucz -+ -+ rvbc=xab*vcx+yab*vcy+zab*vcz -+ rvbd=xab*vdx+yab*vdy+zab*vdz -+ rvcd=xac*vdx+yac*vdy+zac*vdz -+ rvcb=xac*vbx+yac*vby+zac*vbz -+ rvdb=xad*vbx+yad*vby+zad*vbz -+ rvdc=xad*vcx+yad*vcy+zad*vcz -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ enginv=enginv+omega -+ virinv=virinv+gamvir -+ -+c calculate solvation energy -+ -+ if(lsolva)then -+ inv_sol(atmolt(ia))=inv_sol(atmolt(ia))+omega -+ endif -+ -+c calculate atomic forces -+ -+ if(lcalcite)then -+ -+ fax=-gamma*uux -+ fay=-gamma*uuy -+ faz=-gamma*uuz -+ -+ fcx=gamma*uun*((yad*zab-zad*yab)-uuu*(yad*uuz-zad*uuy)) -+ fcy=gamma*uun*((zad*xab-xad*zab)-uuu*(zad*uux-xad*uuz)) -+ fcz=gamma*uun*((xad*yab-yad*xab)-uuu*(xad*uuy-yad*uux)) -+ -+ fdx=gamma*uun*((yab*zac-zab*yac)-uuu*(zac*uuy-yac*uuz)) -+ fdy=gamma*uun*((zab*xac-xab*zac)-uuu*(xac*uuz-zac*uux)) -+ fdz=gamma*uun*((xab*yac-yab*xac)-uuu*(yac*uux-xac*uuy)) -+ -+ fbx=-(fax+fcx+fdx) -+ fby=-(fay+fcy+fdy) -+ fbz=-(faz+fcz+fdz) -+ -+c stress tensor calculation for calcite terms -+ -+ strs(1)=strs(1)+uuu*gamma*uux*uux -+ strs(2)=strs(2)+uuu*gamma*uux*uuy -+ strs(3)=strs(3)+uuu*gamma*uux*uuz -+ strs(4)=strs(4)+uuu*gamma*uuy*uuy -+ strs(5)=strs(5)+uuu*gamma*uuy*uuz -+ strs(6)=strs(6)+uuu*gamma*uuz*uuz -+ -+ else -+ -+ fbx=gamb*(-cosb*xab*rrab**2+rrab*(rub*ubx+rvb*vbx)/wwb) -+ x +(ruc*ucn*rrab*(xac-ruc*ucx-(rbc-ruc*rubc)*xab*rrab**2) -+ x -rvc*vcn*rrab*(xac-rvc*vcx-(rbc-rvc*rvbc)*xab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(xad-rud*udx-(rdb-rud*rubd)*xab*rrab**2) -+ x +rvd*vdn*rrab*(xad-rvd*vdx-(rdb-rvd*rvbd)*xab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fby=gamb*(-cosb*yab*rrab**2+rrab*(rub*uby+rvb*vby)/wwb) -+ x +(ruc*ucn*rrab*(yac-ruc*ucy-(rbc-ruc*rubc)*yab*rrab**2) -+ x -rvc*vcn*rrab*(yac-rvc*vcy-(rbc-rvc*rvbc)*yab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(yad-rud*udy-(rdb-rud*rubd)*yab*rrab**2) -+ x +rvd*vdn*rrab*(yad-rvd*vdy-(rdb-rvd*rvbd)*yab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fbz=gamb*(-cosb*zab*rrab**2+rrab*(rub*ubz+rvb*vbz)/wwb) -+ x +(ruc*ucn*rrab*(zac-ruc*ucz-(rbc-ruc*rubc)*zab*rrab**2) -+ x -rvc*vcn*rrab*(zac-rvc*vcz-(rbc-rvc*rvbc)*zab*rrab**2)) -+ x *gamc*rrac/wwc -+ x +(rud*udn*rrab*(zad-rud*udz-(rdb-rud*rubd)*zab*rrab**2) -+ x +rvd*vdn*rrab*(zad-rvd*vdz-(rdb-rvd*rvbd)*zab*rrab**2)) -+ x *gamd*rrad/wwd -+ -+ fcx=gamc*(-cosc*xac*rrac**2+rrac*(ruc*ucx+rvc*vcx)/wwc) -+ x +(rud*udn*rrac*(xad-rud*udx-(rcd-rud*rucd)*xac*rrac**2) -+ x -rvd*vdn*rrac*(xad-rvd*vdx-(rcd-rvd*rvcd)*xac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(xab-rub*ubx-(rbc-rub*rucb)*xac*rrac**2) -+ x +rvb*vbn*rrac*(xab-rvb*vbx-(rbc-rvb*rvcb)*xac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fcy=gamc*(-cosc*yac*rrac**2+rrac*(ruc*ucy+rvc*vcy)/wwc) -+ x +(rud*udn*rrac*(yad-rud*udy-(rcd-rud*rucd)*yac*rrac**2) -+ x -rvd*vdn*rrac*(yad-rvd*vdy-(rcd-rvd*rvcd)*yac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(yab-rub*uby-(rbc-rub*rucb)*yac*rrac**2) -+ x +rvb*vbn*rrac*(yab-rvb*vby-(rbc-rvb*rvcb)*yac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fcz=gamc*(-cosc*zac*rrac**2+rrac*(ruc*ucz+rvc*vcz)/wwc) -+ x +(rud*udn*rrac*(zad-rud*udz-(rcd-rud*rucd)*zac*rrac**2) -+ x -rvd*vdn*rrac*(zad-rvd*vdz-(rcd-rvd*rvcd)*zac*rrac**2)) -+ x *gamd*rrad/wwd -+ x +(rub*ubn*rrac*(zab-rub*ubz-(rbc-rub*rucb)*zac*rrac**2) -+ x +rvb*vbn*rrac*(zab-rvb*vbz-(rbc-rvb*rvcb)*zac*rrac**2)) -+ x *gamb*rrab/wwb -+ -+ fdx=gamd*(-cosd*xad*rrad**2+rrad*(rud*udx+rvd*vdx)/wwd) -+ x +(rub*ubn*rrad*(xab-rub*ubx-(rdb-rub*rudb)*xad*rrad**2) -+ x -rvb*vbn*rrad*(xab-rvb*vbx-(rdb-rvb*rvdb)*xad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(xac-ruc*ucx-(rcd-ruc*rudc)*xad*rrad**2) -+ x +rvc*vcn*rrad*(xac-rvc*vcx-(rcd-rvc*rvdc)*xad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fdy=gamd*(-cosd*yad*rrad**2+rrad*(rud*udy+rvd*vdy)/wwd) -+ x +(rub*ubn*rrad*(yab-rub*uby-(rdb-rub*rudb)*yad*rrad**2) -+ x -rvb*vbn*rrad*(yab-rvb*vby-(rdb-rvb*rvdb)*yad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(yac-ruc*ucy-(rcd-ruc*rudc)*yad*rrad**2) -+ x +rvc*vcn*rrad*(yac-rvc*vcy-(rcd-rvc*rvdc)*yad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fdz=gamd*(-cosd*zad*rrad**2+rrad*(rud*udz+rvd*vdz)/wwd) -+ x +(rub*ubn*rrad*(zab-rub*ubz-(rdb-rub*rudb)*zad*rrad**2) -+ x -rvb*vbn*rrad*(zab-rvb*vbz-(rdb-rvb*rvdb)*zad*rrad**2)) -+ x *gamb*rrab/wwb -+ x +(ruc*ucn*rrad*(zac-ruc*ucz-(rcd-ruc*rudc)*zad*rrad**2) -+ x +rvc*vcn*rrad*(zac-rvc*vcz-(rcd-rvc*rvdc)*zad*rrad**2)) -+ x *gamc*rrac/wwc -+ -+ fax=-(fbx+fcx+fdx) -+ fay=-(fby+fcy+fdy) -+ faz=-(fbz+fcz+fdz) -+ -+c stress tensor calculation for inversion terms -+ -+ strs(1)=strs(1)+xab*fbx+xac*fcx+xad*fdx -+ strs(2)=strs(2)+yab*fbx+yac*fcx+yad*fdx -+ strs(3)=strs(3)+zab*fbx+zac*fcx+zad*fdx -+ strs(4)=strs(4)+yab*fby+yac*fcy+yad*fdy -+ strs(5)=strs(5)+yab*fbz+yac*fcz+yad*fdz -+ strs(6)=strs(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ fxx(ia)=fxx(ia)+fax -+ fyy(ia)=fyy(ia)+fay -+ fzz(ia)=fzz(ia)+faz -+ -+ fxx(ib)=fxx(ib)+fbx -+ fyy(ib)=fyy(ib)+fby -+ fzz(ib)=fzz(ib)+fbz -+ -+ fxx(ic)=fxx(ic)+fcx -+ fyy(ic)=fyy(ic)+fcy -+ fzz(ic)=fzz(ic)+fcz -+ -+ fxx(id)=fxx(id)+fdx -+ fyy(id)=fyy(id)+fdy -+ fzz(id)=fzz(id)+fdz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive.or.kdrive.or.ldrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc+gamvir -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fax -+ fyy_loc(ia)=fyy_loc(ia)+fay -+ fzz_loc(ia)=fzz_loc(ia)+faz -+ -+ fxx_loc(ib)=fxx_loc(ib)+fbx -+ fyy_loc(ib)=fyy_loc(ib)+fby -+ fzz_loc(ib)=fzz_loc(ib)+fbz -+ -+ fxx_loc(ic)=fxx_loc(ic)+fcx -+ fyy_loc(ic)=fyy_loc(ic)+fcy -+ fzz_loc(ic)=fzz_loc(ic)+fcz -+ -+ fxx_loc(id)=fxx_loc(id)+fdx -+ fyy_loc(id)=fyy_loc(id)+fdy -+ fzz_loc(id)=fzz_loc(id)+fdz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xab*fbx+xac*fcx+xad*fdx -+ strs_loc(2)=strs_loc(2)+yab*fbx+yac*fcx+yad*fdx -+ strs_loc(3)=strs_loc(3)+zab*fbx+zac*fcx+zad*fdx -+ strs_loc(4)=strs_loc(4)+yab*fby+yac*fcy+yad*fdy -+ strs_loc(5)=strs_loc(5)+yab*fbz+yac*fcz+yad*fdz -+ strs_loc(6)=strs_loc(6)+zab*fbz+zac*fcz+zad*fdz -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,449) -+ -+c sum contributions over all nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=enginv -+ buffer(2)=virinv -+ buffer(3)=inv_fre -+ buffer(4)=inv_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ enginv=buffer(1) -+ virinv=buffer(2) -+ inv_fre=buffer(3) -+ inv_vir=buffer(4) -+ -+ if(lsolva)then -+ -+ call gdsum(inv_sol(1),mxtmls,buffer(1)) -+ if(lexcite)call gdsum(inv_exc(1),mxtmls,buffer(1)) -+ -+ endif -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail1) -+ deallocate (xdac,ydac,zdac,stat=fail2) -+ deallocate (xdad,ydad,zdad,stat=fail3) -+ -+ return -+ end subroutine invfrc -+ -+ end module inversion_module -diff -urN dl_class_1.9.orig/srcmod/lf_motion_module.f dl_class_1.9/srcmod/lf_motion_module.f ---- dl_class_1.9.orig/srcmod/lf_motion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_motion_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,2994 @@ -+ module lf_motion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for verlet leap frog integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use property_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration. -+c Must be used in conjunction with integration algorithms -+c -+c assume bond vectors dxx,dyy,dzz are input -+c dxx =xxx(i) - xxx(j) etc -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith august 1992. -+c amended - t. forester march 1994. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k -+ real(8) tolnce,tstep,vircon,stresh,dxx,dyy,dzz,strs1,strs2 -+ real(8) strs3,strs5,strs6,strs9,tstep2,esig,esig1 -+ real(8) dis,amti,amtj,omega2,gamma,gammi,gammj,dli,dlj -+ real(8) dxt,dyt,dzt,txx,tyy,tzz,xxt,yyt,zzt -+ -+ dimension stresh(9) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ -+c test size of work arrays -+ -+ safe=.true. -+ if(mxxdf.lt.nscons)safe=.false. -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,412) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c accumulators for stress tensor -+ -+ vircon=0.d0 -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dis=prmcon(listcon(k,1)) -+ esig1=abs(dxt(k)**2+dyt(k)**2+dzt(k)**2-dis**2)/dis -+ esig=max(esig,esig1) -+ -+ enddo -+ -+ esig=esig*0.5d0 -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c bypass calculations if all tolerances satisfied -+ -+ if(.not.safe)then -+ -+c initialise increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c set constraint parameters -+ -+ dis=prmcon(listcon(k,1)) -+ omega2=dis*dis -+ amti= tstep2/weight(i) -+ amtj=-tstep2/weight(j) -+ -+ if(lstfrz(i).ne.0) amti=0.d0 -+ if(lstfrz(j).ne.0) amtj=0.d0 -+ -+c constraint force parameter -+ -+ gamma=(omega2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/ -+ x (-2.d0*(amti-amtj)* -+ x (dxx(k)*dxt(k)+dyy(k)*dyt(k)+dzz(k)*dzt(k))) -+ -+c accumulate bond virial -+ -+ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1-gamma*dxx(k)*dxx(k) -+ strs2=strs2-gamma*dxx(k)*dyy(k) -+ strs3=strs3-gamma*dxx(k)*dzz(k) -+ strs5=strs5-gamma*dyy(k)*dyy(k) -+ strs6=strs6-gamma*dyy(k)*dzz(k) -+ strs9=strs9-gamma*dzz(k)*dzz(k) -+ -+c improve approximate atomic positions -+ -+ gammi=-gamma*amti -+ xxt(i)=xxt(i)+dxx(k)*gammi -+ yyt(i)=yyt(i)+dyy(k)*gammi -+ zzt(i)=zzt(i)+dzz(k)*gammi -+ -+ gammj=-gamma*amtj -+ xxt(j)=xxt(j)+dxx(k)*gammj -+ yyt(j)=yyt(j)+dyy(k)*gammj -+ zzt(j)=zzt(j)+dzz(k)*gammj -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ xxx(i)=xxx(i)+xxt(i)*dli -+ yyy(i)=yyy(i)+yyt(i)*dli -+ zzz(i)=zzz(i)+zzt(i)*dli -+ xxx(j)=xxx(j)+xxt(j)*dlj -+ yyy(j)=yyy(j)+yyt(j)*dlj -+ zzz(j)=zzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit for non-convergence -+ -+ if(.not.safe)return -+ -+c complete stress tensor -+ -+ stresh(1)=strs1 -+ stresh(2)=strs2 -+ stresh(3)=strs3 -+ stresh(4)=strs2 -+ stresh(5)=strs5 -+ stresh(6)=strs6 -+ stresh(7)=strs3 -+ stresh(8)=strs6 -+ stresh(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdshake_1 -+ -+ subroutine nve_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE -+c -+c parallel replicated data version : block data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c amended - t.forester sept 1994 -+c amended - t.forester dec 1994 : block data -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 -+ integer iatm1,i,j,k -+ real(8) engke,tolnce,tstep,vircon,strkin,rstep -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(7) -+ -+c allocate working arrays -+ -+ do i=1,7 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) -+ do i=1,7 -+ if(fail(i).ne.0)call error(idnode,1380) -+ enddo -+ -+ safe=.false. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c move atoms by leapfrog algorithm -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+c calculate velocity correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep -+ -+ enddo -+ -+ endif -+ -+c calculate full timestep velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=0.5d0*(vxx(i)+uxx(i)) -+ vyy(i)=0.5d0*(vyy(i)+uyy(i)) -+ vzz(i)=0.5d0*(vzz(i)+uzz(i)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nve_1 -+ -+ subroutine nvt_e1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Evans -+c thermostat. -+c Comp. Phys. reports 1, 299, (1984) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond CONSTRAINTS. -+c -+c copyright - daresbury laboratory -+c author - t forester july 1993 -+c amended - w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,iatm0 -+ integer iatm1,i,j,k,iter,mxiter -+ real(8) engke,tolnce,tstep,vircon,strkin -+ real(8) rstep,chit,viracc,strcon,vdotf -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),fail(7) -+ -+c allocate working arrays -+ -+ do i=1,7 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(7)) -+ do i=1,7 -+ if(fail(i).ne.0)call error(idnode,1390) -+ enddo -+ -+ safe=.false. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial positions and velocities -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c begin temperature control iteration -+ -+ mxiter=3 -+ if(ntcons.eq.0)mxiter=2 -+ chit=0.d0 -+ -+ do iter=1,mxiter -+ -+c move atoms by leapfrog algorithm -+ -+ j=0 -+ -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxo(j)+tstep*(rmass(i)*fxx(i)-chit*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(rmass(i)*fyy(i)-chit*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(rmass(i)*fzz(i)-chit*vzz(i)) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c merge configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxo(j))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyo(j))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzo(j))*weight(i)*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ chit=vdotf/engke -+ engke=0.5d0*engke -+ -+c end of thermal constraint iteration -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_e1 -+ -+ subroutine nvt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x engke,taut,sigma,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester may 1993 -+c amended : t.forester sept 1994 -+c amended : t.forester dec 1994 : block data -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail -+ integer iatm0,iatm1,i,j,k,maxit,iter -+ real(8) engke,taut,sigma,tolnce,tstep,vircon,strkin,viracc -+ real(8) rstep,rtsq,chit0,strcon -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(8),strcon(9) -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1400) -+ enddo -+ -+ safe=.false. -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate kinetic energy at full timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=3 -+ if(ntcons.eq.0) maxit=maxit-1 -+ do iter=1,maxit -+ -+c temperature scaling coefficient - taut is the decay constant -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c unconstrained new positions with thermostat -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+c store uncorrected positions -+ -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c calculate kinetic energy -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate velocity at the full step -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_b1 -+ -+ subroutine nvt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons,ntcons, -+ x chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c copyright - daresbury laboratory -+c author - t. forester may 1993 -+c amended - w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,fail,i,j,k -+ integer iatm0,iatm1,maxit,iter -+ real(8) chit,consv,conint,engke,taut,sigma,tolnce,tstep,vircon -+ real(8) strkin,rstep,rtsq,qmass,chitp,chit0,viracc -+ real(8) chitnew,strcon -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),fail(8),strcon(9) -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1410) -+ enddo -+ -+ safe=.false. -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate velocities at full time step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy at full time step -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c propagate chit -+ -+ chitp=2.d0*(engke-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=4 -+ if(ntcons.eq.0) maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+c store uncorrected positions -+ -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1)then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chit -+ -+ chitp=2.d0*(engke-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update thermostat -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ consv=conint+0.5d0*qmass*chit0**2 -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nvt_h1 -+ -+ subroutine npt_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and isotropic pressure control -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester dec 1993 -+c amended - w.smith oct 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter -+ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep -+ real(8) virtot,vircon,volm,strkin,beta,volm0,cell0 -+ real(8) elrc0,virlrc0,rstep,rtsq,psyst,chip0,scale -+ real(8) chit0,viracc,strcon -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),cell0(9),fail(8),strcon(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1420) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume and long range corrections -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1430) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial cell vectors -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate velocity at full timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy at current timestep -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c pressure control variable - taup is pressure relaxation time -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c temperature scaling coefficient - taut is temperature relaxation time -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0)maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+scale*xxo(j) -+ yyy(i)=tstep*uyy(i)+scale*yyo(j) -+ zzz(i)=tstep*uzz(i)+scale*zzo(j) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell tensor -+ -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chip and chit -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update volume -+ -+ volm=volm*chip0 -+ -+c scale cell vectors - isotropic -+ -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for use with tethers) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=scale -+ eta(5)=scale -+ eta(9)=scale -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine npt_b1 -+ -+ subroutine npt_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,chip,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat+piston. -+c -+c reference: Melchionna, Ciccotti and Holian, -+c Mol Phys 1993, 78, p533 -+c -+c parallel replicated data version -+c -+c for systems using bond constraints (using atomic pressure) -+c -+c copyright daresbury laboratory 1995 -+c author - s. melchionna april 1995 -+c and - t. forester april 1995 -+c amended - w. smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer i,j,k,iatm0,iatm1,fail,maxit,iter -+ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press -+ real(8) taup,taut,sigma,temp,tolnce,tstep,virtot,vircon,volm -+ real(8) strcon,volm0,elrc0,virlrc0,rstep,rtsq,qmass -+ real(8) chipnew,chitp,chitnew,chit0,volnew,scale,viracc,vold -+ real(8) cons1,cons2,cons3,strkin,cell0 -+ real(8) pmass,totmas,chipp,chip0,com,vom -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strcon(9),fail(8),strkin(9),com(3),vom(3),cell0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1440) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1450) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate velocity at the full step -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c propagate chip -+ -+ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- -+ x chit*chip -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c propagate chit -+ -+ chitp=(2.d0*(engke-sigma)+pmass*chip**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0) maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell tensor -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c improved prediction of chip and chit -+ -+ chipp=(2.d0*engke-virtot-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+ chitp=(2.d0*(engke-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=chipnew -+ eta(5)=chipnew -+ eta(9)=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ cons3=0.5d0*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c updated velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine npt_h1 -+ -+ subroutine nst_b1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,elrc,engke,virlrc,press,taup,taut,sigma,tolnce, -+ x tstep,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and anisotropic pressure control -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c for systems using bond CONSTRAINTS. Frozen atoms feb 1994 -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester december 1993 -+c amended - w. smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons,mode -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter -+ real(8) elrc,engke,virlrc,press,taup,taut,sigma,tolnce,tstep -+ real(8) vircon,volm,beta,volm0,elrc0,virlrc0,rstep,rtsq,chit0 -+ real(8) viracc,strkin,strcon,cell0,stres0,uni -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),cell0(9),fail(8),stres0(9),uni(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data beta/7.3728d-3/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1460) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1470) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store original cell vectors and stress tensor -+ -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c current estimate of stres tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i) -+ enddo -+ -+c initial estimate of eta matrix and chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0)maxit=maxit-1 -+ -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+ -+ x eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) -+ yyy(i)=tstep*uyy(i)+ -+ x eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) -+ zzz(i)=tstep*uzz(i)+ -+ x eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell parameters -+ -+ call mat_mul(eta,cell0,cell) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c accumulate constraint virial terms -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i) -+ enddo -+ -+c improved calculation of eta matrix and chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c end of thermostat and barostat iterations -+ -+ enddo -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust cell vectors - anisotropic -+ -+ call mat_mul(eta,cell0,cell) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nst_b1 -+ -+ subroutine nst_h1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,ntpatm,nscons, -+ x ntcons,mode,chit,conint,consv,elrc,engke,virlrc,press, -+ x taup,taut,sigma,temp,tolnce,tstep,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat+piston. -+c -+c Parrinello - Rahman type : changing cell shape. -+c -+c reference: Melchionna, Ciccotti and Holian, -+c Mol Phys 1993, 78, p533 -+c -+c parallel replicated data version -+c -+c for systems using bond constraints (using atomic pressure) -+c -+c copyright daresbury laboratory 1995 -+c author - t. forester june 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ integer idnode,imcon,mxnode,natms,ntpatm,nscons,ntcons -+ integer fail,i,j,k,iatm0,iatm1,maxit,iter,mode -+ real(8) chip,chit,conint,consv,elrc,engke,virlrc,press -+ real(8) taup,taut,sigma,temp,tolnce,tstep,vircon,volm -+ real(8) strcon,strkin,etanew,eta0,cell0,volm0,elrc0,virlrc0 -+ real(8) rstep,rtsq,pmass,qmass,totmas,com,vom,uni,fac -+ real(8) chitp,chitnew,chit0,xxa,yya,zza,etadot -+ real(8) viracc,cons1,cons2,cons3,vold,stres0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ dimension strkin(9),strcon(9),fail(8),com(3),vom(3) -+ dimension etanew(9),eta0(9),cell0(9),stres0(9),uni(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ -+ data newjob/.true./,uni/1.d0,3*0.d0,1.d0,3*0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,8 -+ fail(i)=0 -+ enddo -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(6)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(7)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(8)) -+ do i=1,8 -+ if(fail(i).ne.0)call error(idnode,1480) -+ enddo -+ -+ safe=.false. -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob)then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1490) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ newjob=.false. -+ -+ endif -+ -+c set up block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c initialise constraint virial accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store original cell vectors and stress tensor -+ -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate kinetic energy at current timestep -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c estimate position at current time step -+ -+ xxx(i)=xxo(j)+tstep*(vxo(j)+tstep*rmass(i)*fxx(i)) -+ yyy(i)=yyo(j)+tstep*(vyo(j)+tstep*rmass(i)*fyy(i)) -+ zzz(i)=zzo(j)+tstep*(vzo(j)+tstep*rmass(i)*fzz(i)) -+ -+c estimate velocity at the full step -+ -+ vxx(i)=vxo(j)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c initial estimate of stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i) -+ enddo -+ -+c propagation of eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ maxit=5 -+ if(ntcons.eq.0) maxit=maxit-1 -+ do iter=1,maxit -+ -+c unconstrained new positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(eta0(1)+chit0)*vxx(i)- -+ x eta0(4)*vyy(i)-eta0(7)*vzz(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(eta0(5)+chit0)*vyy(i)- -+ x eta0(2)*vxx(i)-eta0(8)*vzz(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(eta0(9)+chit0)*vzz(i)- -+ x eta0(3)*vxx(i)-eta0(6)*vyy(i)) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) -+ yya=(yyy(i)+yyo(j))*0.5d0-com(2) -+ zza=(zzz(i)+zzo(j))*0.5d0-com(3) -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x etanew(1)*xxa+etanew(4)*yya+etanew(7)*zza) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x etanew(2)*xxa+etanew(5)*yya+etanew(8)*zza) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x etanew(3)*xxa+etanew(6)*yya+etanew(9)*zza) -+ -+ enddo -+ -+c start of bond constraint procedures -+ -+ if(ntcons.eq.0)safe=.true. -+ if(ntcons.gt.0)then -+ -+c store integrated positions -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c estimate new cell parameters -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,etanew) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i) -+ enddo -+ -+c improved prediction of eta -+ -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c improved prediction of chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engke-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust cell vectors - anisotropic -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,eta) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=0.5d0*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(3)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(4)) -+ -+ return -+ end subroutine nst_h1 -+ -+ end module lf_motion_module -diff -urN dl_class_1.9.orig/srcmod/lf_rotation1_module.f dl_class_1.9/srcmod/lf_rotation1_module.f ---- dl_class_1.9.orig/srcmod/lf_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_rotation1_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,5315 @@ -+ module lf_rotation1_module -+ -+c*********************************************************************** -+c -+c dl_poly module 1 for verlet leap frog rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use lf_motion_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to update the quaternion arrays as part of -+c the leapfrog algorithm -+c -+c copyright daresbury laboratory -+c author - w.smith october 2005 -+c based on - t.forester oct. 1993 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safeq -+ integer igrp1,igrp2,jg,itq,ig -+ real(8) qn0,qn1,qn2,qn3,qn0a,qn1a,qn2a,qn3a,qn0b,qn1b,qn2b,qn3b -+ real(8) rnorm,tstep,quattol,eps -+ real(8) opx(msgrp),opy(msgrp),opz(msgrp) -+ real(8) oqx(msgrp),oqy(msgrp),oqz(msgrp) -+ -+ jg=0 -+ safeq=.true. -+ -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c first iteration of new quaternions (lab fixed) -+ -+ qn0=q0(ig)+(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn1=q1(ig)+( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn2=q2(ig)+( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) -+ x *tstep*pt5 -+ qn3=q3(ig)+(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) -+ x *tstep*pt5 -+ -+ qn0b=0.d0 -+ qn1b=0.d0 -+ qn2b=0.d0 -+ qn3b=0.d0 -+ -+ itq=0 -+ eps=1.0d9 -+ do while((itq.lt.mxquat).and.(eps.gt.quattol)) -+ -+ itq=itq+1 -+ -+ qn0a=pt5*(-q1(ig)*opx(jg)-q2(ig)*opy(jg)-q3(ig)*opz(jg)) -+ x +pt5*(-qn1*oqx(jg)-qn2*oqy(jg)-qn3*oqz(jg)) -+ qn1a=pt5*( q0(ig)*opx(jg)-q3(ig)*opy(jg)+q2(ig)*opz(jg)) -+ x + pt5*( qn0*oqx(jg)-qn3*oqy(jg)+qn2*oqz(jg)) -+ qn2a=pt5*( q3(ig)*opx(jg)+q0(ig)*opy(jg)-q1(ig)*opz(jg)) -+ x + pt5*( qn3*oqx(jg)+qn0*oqy(jg)-qn1*oqz(jg)) -+ qn3a=pt5*(-q2(ig)*opx(jg)+q1(ig)*opy(jg)+q0(ig)*opz(jg)) -+ x + pt5*(-qn2*oqx(jg)+qn1*oqy(jg)+qn0*oqz(jg)) -+ -+ qn0=q0(ig)+pt5*qn0a*tstep -+ qn1=q1(ig)+pt5*qn1a*tstep -+ qn2=q2(ig)+pt5*qn2a*tstep -+ qn3=q3(ig)+pt5*qn3a*tstep -+ -+ rnorm=1.d0/sqrt(qn0**2+qn1**2+qn2**2+qn3**2) -+ qn0=qn0*rnorm -+ qn1=qn1*rnorm -+ qn2=qn2*rnorm -+ qn3=qn3*rnorm -+ -+c convergence test -+ -+ eps=sqrt(((qn0a-qn0b)**2+(qn1a-qn1b)**2+(qn2a-qn2b)**2 -+ x +(qn3a-qn3b)**2)*tstep**2) -+ -+ qn0b=qn0a -+ qn1b=qn1a -+ qn2b=qn2a -+ qn3b=qn3a -+ -+ enddo -+ -+ if(itq.ge.mxquat) safeq=.false. -+ -+c store new quaternions -+ -+ q0(ig)=qn0 -+ q1(ig)=qn1 -+ q2(ig)=qn2 -+ q3(ig)=qn3 -+ -+ enddo -+ -+ return -+ end subroutine update_quaternions -+ -+ subroutine nveq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre -+ integer jg,ig,k,id,jr -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc -+ real(8) trx,try,trz,delx,dely,delz,engfke -+ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strgrp(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1500) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational rigid body motion -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) -+ -+c estimate velocity at full time step -+ -+ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c calculate rigid body kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore rigid body half timestep velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c store current angular velocity -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+delx*pt5 -+ opy(jg)=omy(ig)+dely*pt5 -+ opz(jg)=omz(ig)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omx(ig)+delx -+ uyy(ig)=omy(ig)+dely -+ uzz(ig)=omz(ig)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omx(ig)+delx*1.5d0 -+ oqy(jg)=omy(ig)+dely*1.5d0 -+ oqz(jg)=omz(ig)+delz*1.5d0 -+ -+c angular velocity at timestep n -+ -+ omx(ig)=omx(ig)+pt5*delx -+ omy(ig)=omy(ig)+pt5*dely -+ omz(ig)=omz(ig)+pt5*delz -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies - relative to c.o.m -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) -+ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) -+ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) -+ -+ return -+ end subroutine nveq_1 -+ -+ subroutine nvtq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat. -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,safeq,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer i,fail,igrp,igrp1,igrp2,ifre,ifre1,ifre2,jg,ig -+ integer j,k,jr,id,mxiter,iter,idum -+ real(8) engke,engrot,quattol,sigma,taut,tolnce,tstep,vircom -+ real(8) vircon,strkin,strgrp,rot,rstep,rtsq -+ real(8) engtrn,trx,try,trz,chit0,rgmas,engfke -+ real(8) vaa,vbb,vcc,engtot,viracc,strcon -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2,newjob -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1510) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engtot=engfke+engrot+engtrn -+ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=2 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+xxo(j) -+ yyy(i)=tstep*vyy(i)+yyo(j) -+ zzz(i)=tstep*uzz(i)+zzo(j) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c total kinetic energy -+ -+ engtot=engke+engrot -+ -+c improved prediction of chit -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_b1 -+ -+ subroutine nvtq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,chit,consv,conint,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat. -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,safeq,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter -+ real(8) chit,consv,conint,engke,engrot,quattol,sigma,taut -+ real(8) tolnce,tstep,vircom,vircon,strkin,strgrp,strcon,rot -+ real(8) rstep,rtsq,qmass,engtrn,cons1,engtot,vaa,vbb,vcc -+ real(8) chit0,chitnew,chitp,viracc,rgmas,trx,try,trz,delx -+ real(8) dely,delz,engfke -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strgrp(9),strcon(9),rot(9),fail(nnn) -+ -+ save igrp1,igrp2,ifre1,ifre2,qmass,newjob -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1520) -+ enddo -+ -+ if(newjob)then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise constraint virial terms -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c propagate chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=4 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-chit0*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-chit0*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-chit0*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0.and.iter.eq.1) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+ if(iter.eq.mxiter)then -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-chit0*gvxx(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-chit0*gvyy(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-chit0*gvzz(ig)) -+ -+c update positions -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)then -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+ endif -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ safeq=.true. -+ engrot=0.d0 -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c improved prediction of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update thermostat variable -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ cons1=0.5d0*qmass*chit0**2 -+ consv=conint+cons1 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_h1 -+ -+ subroutine nptq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,virtot,vircom, -+ x vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and barostat. -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,i,fail,igrp,igrp1,igrp2,idum,ifre,ifre1 -+ integer ifre2,j,jg,ig,jr,k,id,iter,mxiter -+ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut -+ real(8) tolnce,tstep,virtot,vircom,vircon,volm,rot,engfke,uni -+ real(8) cell0,beta,volm0,elrc0,virlrc0,rstep,rtsq -+ real(8) engtrn,trx,try,trz,chip0,scale,engtot,chit0,viracc,czero -+ real(8) rgmas,vaa,vbb,vcc,strkin,strcon,strgrp,psyst -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension fail(nnn),rot(9),cell0(9),czero(9),uni(9) -+ dimension strcon(9),strgrp(9),strkin(9) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0,igrp1,igrp2 -+ save ifre1,ifre2 -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1530) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1540) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c constraint stress tensor accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c current cell vectors -+ -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity and temperature at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c pressure control variable - taup is the relaxation time -+ -+ engke=engfke+engtrn -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engtot=engke+engrot -+ chit0= sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+scale*xxo(j) -+ yyy(i)=tstep*uyy(i)+scale*yyo(j) -+ zzz(i)=tstep*uzz(i)+scale*zzo(j) -+ -+ enddo -+ -+c estimate new cell tensor -+ -+ do i=1,9 -+ cell(i)=scale*czero(i) -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions : -+ -+ gcmx(ig)=scale*gcxo(jg)+tstep*uxx(ig) -+ gcmy(ig)=scale*gcyo(jg)+tstep*uyy(ig) -+ gcmz(ig)=scale*gczo(jg)+tstep*uzz(ig) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c total kinetic energy -+ -+ engtot=engke+engrot -+ -+c improved pressure control variable -+ -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c improved temperature scaling coefficient -+ -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c scale cell vectors -+ -+ scale=((chip0*volm)/volm0)**(1.d0/3.d0) -+ -+ do i=1,9 -+ cell(i)=scale*cell0(i) -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nptq_b1 -+ -+ subroutine nptq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,virtot,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover -+c thermostat and barostat (Melchionna et al variant) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter,idum -+ real(8) chip,chit,consv,conint,elrc,engke,engrot,virlrc,press -+ real(8) quattol,sigma,taup,taut,temp,tolnce,tstep,virtot,vircom -+ real(8) vircon,volm,cell0,rot,volm0,elrc0,rtsq,uni -+ real(8) virlrc0,strkin,rstep,qmass,pmass,strgrp,strcon -+ real(8) trx,try,trz,chipp,chipnew,chip0,engtot,chitp -+ real(8) chitnew,chit0,volnew,scale,viracc,rgmas -+ real(8) vaa,vbb,vcc,vold,cons1,cons2,cons3,delx,dely,delz -+ real(8) engtrn,totmas,com,vom,engfke -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension fail(nnn),rot(9),cell0(9),uni(9) -+ dimension strkin(9),strcon(9),strgrp(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,cell0,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1550) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1560) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c temporary stress tensor accumulators -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacements -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate velocity at full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate kinetic energy of rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translation kinetic energy of rigid bodies -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rigid body rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c propagate chip -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircon-vircom-3.d0*press*volm)/pmass- -+ x chit*chip -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c propagate chit -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)*vxx(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)*vyy(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x chipnew*((xxx(i)+xxo(j))*0.5d0-com(1))) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x chipnew*((yyy(i)+yyo(j))*0.5d0-com(2))) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x chipnew*((zzz(i)+zzo(j))*0.5d0-com(3))) -+ -+ enddo -+ -+c estimate new cell parameters -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate force correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ if(iter.eq.mxiter)then -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas-(chit0+chip0)* -+ x gvxx(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas-(chit0+chip0)* -+ x gvyy(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas-(chit0+chip0)* -+ x gvzz(ig)) -+ -+c advance positions using leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ -+ x chipnew*((gcmx(ig)+gcxo(jg))*0.5d0-com(1))) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ -+ x chipnew*((gcmy(ig)+gcyo(jg))*0.5d0-com(2))) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ -+ x chipnew*((gcmz(ig)+gczo(jg))*0.5d0-com(3))) -+ -+c calculate full step velocities -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ if(iter.eq.mxiter)call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c calculate rigid body rotational energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c improved prediction of chip -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=0.5d0*(chip+chipnew) -+ -+c improved prediction of chit -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=1,9 -+ eta(i)=chipnew*uni(i) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ cons3=0.5d0*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nptq_h1 -+ -+ subroutine nstq_b1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Berendsen -+c thermostat and barostat. (cell may change shape). -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principl axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,idum,igrp,igrp1,igrp2,ifre,ifre1,mode -+ integer ifre2,j,k,ig,jg,jr,id,iter,mxiter -+ real(8) elrc,engke,engrot,virlrc,press,quattol,sigma,taup,taut -+ real(8) tolnce,tstep,vircom,vircon,volm,beta,uni,cell0 -+ real(8) volm0,elrc0,virlrc0,rot,rstep,rtsq,engfke -+ real(8) engtrn,trx,try,trz,engtot,chit0,rgmas -+ real(8) vaa,vbb,vcc,viracc,strkin,strcon,strgrp,stres0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension strkin(9),strcon(9),strgrp(9),stres0(9),rot(9) -+ dimension fail(nnn),uni(9),cell0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./, beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxxdf),yyo(mxxdf),zzo(mxxdf),stat=fail(9)) -+ allocate (xx1(mxxdf),yy1(mxxdf),zz1(mxxdf),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1570) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1580) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe= (igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c temporary stress tensor accumulators and new cell -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+c construct current bond vectors - required by shake -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from coms -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c estimate velocity at half-time step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c estimate kinetic energy of free atoms -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c stress tensor of free atoms -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c estimate translational kinetic energy of rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c forces on centre of mass -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep*fmx(jg)/gmass(id) -+ gvyy(ig)=gvyo(jg)+pt5*tstep*fmy(jg)/gmass(id) -+ gvzz(ig)=gvzo(jg)+pt5*tstep*fmz(jg)/gmass(id) -+ -+ enddo -+ -+c translational kinetic energy of rigid body -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c stress tensor of rigid body -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velocity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c calculate rotational kinetic energy of rigid bodies -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c find eta - taup is the relaxation time -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c temperature scaling coefficient - taut is the relaxation time -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(i)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(i)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(i)+eta(1)*xxo(j)+eta(4)*yyo(j)+eta(7)*zzo(j) -+ yyy(i)=tstep*uyy(i)+eta(2)*xxo(j)+eta(5)*yyo(j)+eta(8)*zzo(j) -+ zzz(i)=tstep*uzz(i)+eta(3)*xxo(j)+eta(6)*yyo(j)+eta(9)*zzo(j) -+ -+ enddo -+ -+c estimate new cell tensor -+ -+ call mat_mul(eta,cell0,cell) -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate current stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=(gvxo(jg)+tstep*(fmx(jg)*rgmas))*chit0 -+ uyy(ig)=(gvyo(jg)+tstep*(fmy(jg)*rgmas))*chit0 -+ uzz(ig)=(gvzo(jg)+tstep*(fmz(jg)*rgmas))*chit0 -+ -+c update positions : -+ -+ gcmx(ig)=tstep*uxx(ig)+eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+ -+ x eta(7)*gczo(jg) -+ gcmy(ig)=tstep*uyy(ig)+eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+ -+ x eta(8)*gczo(jg) -+ gcmz(ig)=tstep*uzz(ig)+eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+ -+ x eta(9)*gczo(jg) -+ -+c full step com velocity -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=(omxo(jg)+pt5*tstep*trx)*chit0 -+ omy(ig)=(omyo(jg)+pt5*tstep*try)*chit0 -+ omz(ig)=(omzo(jg)+pt5*tstep*trz)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=(omxo(jg)+tstep*trx)*chit0 -+ uyy(ig)=(omyo(jg)+tstep*try)*chit0 -+ uzz(ig)=(omzo(jg)+tstep*trz)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+1.5d0*tstep*trx)*chit0 -+ oqy(jg)=(omyo(jg)+1.5d0*tstep*try)*chit0 -+ oqz(jg)=(omzo(jg)+1.5d0*tstep*trz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c complete stress tensor - add all contributions -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+c improved prediction of eta and chit -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c update cell vectors -+ -+ call mat_mul(eta,cell0,cell) -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nstq_b1 -+ -+ subroutine nstq_h1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, -+ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, -+ x vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - verlet leapfrog with Hoover like -+c thermostat and barostat. (cell may change shape). -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principle axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ntpatm,fail,i,igrp,igrp1,igrp2,ifre,ifre1,ifre2 -+ integer j,k,ig,jg,jr,id,iter,mxiter,idum,mode -+ real(8) chit,conint,consv,elrc,engke,engrot,virlrc,press,quattol -+ real(8) sigma,taup,taut,temp,tolnce,tstep,vircom,vircon,volm -+ real(8) strkin,strcon,strgrp,eta0,etanew,rot,cell0,volm0,stres0 -+ real(8) elrc0,virlrc0,rstep,rtsq,qmass,pmass,totmas -+ real(8) engtrn,trx,try,trz,engtot,engfke,fac,etadot -+ real(8) chitp,chitnew,chit0,xxa,yya,zza,viracc,rgmas,uni -+ real(8) delx,dely,delz,vold,cons1,cons2,cons3 -+ real(8) vaa,vbb,vcc,chip,com,vom -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ dimension eta0(9),etanew(9),rot(9),cell0(9),fail(nnn),uni(9) -+ dimension strkin(9),strcon(9),strgrp(9),stres0(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass,totmas -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(12)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(13)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(14)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(15)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1590) -+ enddo -+ -+ if(newjob) then -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1600) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c calculate total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c initialise stress tensor accumulators -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c estimate velocity at full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=vxo(j)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c estimate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c estimate stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c estimate rigid body translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=gvxo(jg)+pt5*tstep/gmass(id)*fmx(jg) -+ gvyy(ig)=gvyo(jg)+pt5*tstep/gmass(id)*fmy(jg) -+ gvzz(ig)=gvzo(jg)+pt5*tstep/gmass(id)*fmz(jg) -+ -+ enddo -+ -+c rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c rigid body stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rgid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+pt5*tstep*trx -+ opy(jg)=omy(ig)+pt5*tstep*try -+ opz(jg)=omz(ig)+pt5*tstep*trz -+ -+ enddo -+ -+c store angular velcoity at timestep n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c calculate rotational kinetic energy of rigid bodies -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c propagate eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit*eta(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c begin iterations !!----------------------------------------------- -+ -+ mxiter=5 -+ if(ntcons.eq.0) mxiter=mxiter-1 -+ -+ do iter=1,mxiter -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(i)=vxo(j)+tstep*(fxx(i)*rmass(i)- -+ x (chit0+eta0(1))*vxx(i)-eta0(4)*vyy(i)-eta0(7)*vzz(i)) -+ uyy(i)=vyo(j)+tstep*(fyy(i)*rmass(i)- -+ x eta0(2)*vxx(i)-(eta0(5)+chit0)*vyy(i)-eta0(8)*vzz(i)) -+ uzz(i)=vzo(j)+tstep*(fzz(i)*rmass(i)- -+ x eta0(3)*vxx(i)-eta0(6)*vyy(i)-(eta0(9)+chit0)*vzz(i)) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(j))*0.5d0-com(1) -+ yya=(yyy(i)+yyo(j))*0.5d0-com(2) -+ zza=(zzz(i)+zzo(j))*0.5d0-com(3) -+ -+ xxx(i)=xxo(j)+tstep*(uxx(i)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ yyy(i)=yyo(j)+tstep*(uyy(i)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ zzz(i)=zzo(j)+tstep*(uzz(i)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+ enddo -+ -+c estimate new cell parameters -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ call cell_propagate(tstep,cell,etanew) -+ -+ if(ntcons.eq.0) safe=.true. -+ if(ntcons.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint correction -+ -+ call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+c contribution to constraint virial -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c calculate other constraint corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate corrected velocity -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate velocity at the full step -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+ endif -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c ***** step 1 : integrate centre of mass motion ********* -+ -+ jg =0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate thermostated velocities -+ -+ rgmas=1.d0/gmass(id) -+ uxx(ig)=gvxo(jg)+tstep*(fmx(jg)*rgmas- -+ x (chit0+eta0(1))*gvxx(ig)-eta0(4)*gvyy(ig)-eta0(7)*gvzz(ig)) -+ uyy(ig)=gvyo(jg)+tstep*(fmy(jg)*rgmas- -+ x eta0(2)*gvxx(ig)-(eta0(5)+chit0)*gvyy(ig)-eta0(8)*gvzz(ig)) -+ uzz(ig)=gvzo(jg)+tstep*(fmz(jg)*rgmas- -+ x eta0(3)*gvxx(ig)-eta0(6)*gvyy(ig)-(eta0(9)+chit0)*gvzz(ig)) -+ -+c advance positions using leapfrog -+ -+ xxa=(gcmx(ig)+gcxo(jg))*0.5d0-com(1) -+ yya=(gcmy(ig)+gcyo(jg))*0.5d0-com(2) -+ zza=(gcmz(ig)+gczo(jg))*0.5d0-com(3) -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(ig)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(ig)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(ig)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c full step com velocity -+ -+ gvxx(ig)=0.5d0*(gvxo(jg)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyo(jg)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzo(jg)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body kinetic energy and stress tensor -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ if(iter.eq.mxiter)then -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+ endif -+ -+c ****** step 2 : integrate rotational motion ********** -+ -+ jg=0 -+ safeq=.true. -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omxo(jg)+delx -+ uyy(ig)=omyo(jg)+dely -+ uzz(ig)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c complete stress tensor - add all contributions -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+c improved prediction of eta and chit -+ -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=0.5d0*(etanew(i)+eta(i)) -+ enddo -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=0.5d0*(chit+chitnew) -+ -+c end of thermostat/barostat iterations -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=0.5d0*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=0.5d0*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0) -+ x call merge1(idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (xx1,yy1,zz1,vxo,vyo,vzo,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,tqx,tqy,tqz,stat=fail(6)) -+ deallocate (omxo,omyo,omzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,gvxo,gvyo,gvzo,stat=fail(8)) -+ -+ return -+ end subroutine nstq_h1 -+ -+ end module lf_rotation1_module -diff -urN dl_class_1.9.orig/srcmod/lf_rotation2_module.f dl_class_1.9/srcmod/lf_rotation2_module.f ---- dl_class_1.9.orig/srcmod/lf_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/lf_rotation2_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,5007 @@ -+ module lf_rotation2_module -+ -+c*********************************************************************** -+c -+c dl_poly module 2 for verlet leap frog rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use lf_rotation1_module -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine nveq_2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engfke,engtrn -+ real(8) delx,dely,delz,trx,try,trz,vaa,vbb,vcc,viracc -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save newjob,igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1620) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c accumulators for constraint and virial stress tensor -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c start of shake cycle -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=1 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(j)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(j)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep/gmass(id)*fmx(jg) -+ uyy(jg)=gvyo(jg)+tstep/gmass(id)*fmy(jg) -+ uzz(jg)=gvzo(jg)+tstep/gmass(id)*fmz(jg) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)+tstep*uzz(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(uxx(jg)+gvxo(jg)) -+ gvyy(ig)=pt5*(uyy(jg)+gvyo(jg)) -+ gvzz(ig)=pt5*(uzz(jg)+gvzo(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+ opx(jg)=omxo(jg)+delx*pt5 -+ opy(jg)=omyo(jg)+dely*pt5 -+ opz(jg)=omzo(jg)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+c angular velocity at time step n -+ -+ omx(ig)=opx(jg) -+ omy(ig)=opy(jg) -+ omz(ig)=opz(jg) -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c total kinetic energy -+ -+ engke=engfke+engtrn -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,fmx,fmy,fmz,stat=fail(5)) -+ deallocate (tqx,tqy,tqz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nveq_2 -+ -+ subroutine nvtq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,sigma,taut,tolnce, -+ x tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Berendsen thermostat. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engfke -+ real(8) rot,strkin,strgrp,strcon,engtrn,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,engtot,chit0 -+ real(8) sigma,taut -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save chit0,igrp1,igrp2,ifre1,ifre2,newjob -+ -+ data chit0/1.d0/,newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1630) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c accumulators for constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c shake and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=2 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c calculate full time velocity -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c update centre of mass velocities -+ -+ gvxx(ig)=gvxo(jg)+tstep/gmass(id)*fmx(jg) -+ gvyy(ig)=gvyo(jg)+tstep/gmass(id)*fmy(jg) -+ gvzz(ig)=gvzo(jg)+tstep/gmass(id)*fmz(jg) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c advance velocity by leapfrog -+ -+ gvxx(ig)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ gvyy(ig)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ gvzz(ig)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gcyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gczo(jg)+tstep*gvzz(ig) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+ opx(jg)=(omxo(jg)+delx*pt5) -+ opy(jg)=(omyo(jg)+dely*pt5) -+ opz(jg)=(omzo(jg)+delz*pt5) -+ -+ enddo -+ -+c scaled angular velocity at timestep n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at full time step -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_b2 -+ -+ subroutine nvtq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,conint,consv,chit,engke,engrot,quattol, -+ x sigma,taut,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover thermostat. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame (input) -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,engtot -+ real(8) rot,strkin,strcon,strgrp,engtrn,engfke,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,sigma,taut,chit0 -+ real(8) chitnew,chitp,conint,consv,chit,qmass -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ -+ save newjob,igrp1,igrp2,ifre1,ifre2,qmass -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1640) -+ enddo -+ -+ if(newjob)then -+ -+c mass parameters for thermostat -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atoms displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat variable -+ -+ chit0=chit -+ -+c accumulators for constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=3 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0)* -+ x pt5*(vxx(i)+vxo(j))) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0)* -+ x pt5*(vyy(i)+vyo(j))) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0)* -+ x pt5*(vzz(i)+vzo(j))) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)+tstep*uxx(j) -+ yyy(i)=yyo(i)+tstep*uyy(j) -+ zzz(i)=zzo(i)+tstep*uzz(j) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(vxo(j)+uxx(j)) -+ vyy(i)=pt5*(vyo(j)+uyy(j)) -+ vzz(i)=pt5*(vzo(j)+uzz(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-chit0* -+ x pt5*(gvxx(ig)+gvxo(jg))) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-chit0* -+ x pt5*(gvyy(ig)+gvyo(jg))) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-chit0* -+ x pt5*(gvzz(ig)+gvzo(jg))) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)+tstep*uzz(jg) -+ -+c centre of mass velocities at half-step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=2.d0*(engtot-sigma)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10.and.icyc.gt.3)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c update thermostat variable -+ -+ chit=chitnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*qmass/taut**2 -+ consv=conint+pt5*qmass*chit0**2 -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nvtq_h2 -+ -+ subroutine nptq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon, -+ x virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Berendsen thermostat and barostat. -+c (cell may change volume) -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strgrp,strcon,engtrn,engfke,trx,try,trz -+ real(8) delx,dely,delz,czero -+ real(8) vaa,vbb,vcc,viracc,beta,elrc,virlrc,press,engtot -+ real(8) sigma,taup,taut,virtot,volm,cell0,elrc0,virlrc0 -+ real(8) chit0,volm0,chip0,psyst,scale -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension cell0(9),czero(9) -+ -+ save newjob,volm0,elrc0,virlrc0,czero,chit0,chip0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1670) -+ enddo -+ -+c store initial values of volume and long range corrections -+ -+ if(newjob) then -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1660) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ newjob=.false. -+ -+ chit0=1.d0 -+ chip0=1.d0 -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c set constraint stress and virial and inital cell vectors -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c length scaling parameter -+ -+ scale=chip0**(1.d0/3.d0) -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=3 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(i)*scale+tstep*uxx(j) -+ yyy(i)=yyo(i)*scale+tstep*uyy(j) -+ zzz(i)=zzo(i)*scale+tstep*uzz(j) -+ -+c estimate full step velocity -+ -+ vxx(i)=pt5*(vxo(j)+uxx(j)) -+ vyy(i)=pt5*(vyo(j)+uyy(j)) -+ vzz(i)=pt5*(vzo(j)+uzz(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)*scale+tstep*uxx(jg) -+ gcmy(ig)=gcyo(jg)*scale+tstep*uyy(jg) -+ gcmz(ig)=gczo(jg)*scale+tstep*uzz(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=(omxo(jg)+pt5*delx) -+ opy(jg)=(omyo(jg)+pt5*dely) -+ opz(jg)=(omzo(jg)+pt5*delz) -+ -+ enddo -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c pressure control variable -+ -+ engke=engfke+engtrn -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ chip0=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip0**(1.d0/3.d0) -+ -+c new estimate of chit -+ -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+c new cell parameters -+ -+ do i=1,9 -+ cell(i)=scale*cell0(i) -+ enddo -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c scale cell vectors -+ -+ scale=((chip0*volm)/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=scale*czero(i) -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=scale -+ eta(5)=scale -+ eta(9)=scale -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nptq_b2 -+ -+ subroutine nptq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,chip,chit,consv,conint,elrc,engke, -+ x engrot,virlrc,press,quattol,sigma,taup,taut,temp,tolnce, -+ x tstep,vircom,vircon,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover thermostat and barostat. -+c (cell may change volume) -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon,com -+ real(8) rot,strkin,strcon,strgrp,vom,engtrn,trx,try,trz -+ real(8) delx,dely,delz,engfke -+ real(8) vaa,vbb,vcc,viracc,pmass,qmass,totmas,czero -+ real(8) chip,chit,consv,conint,elrc,virlrc,press,sigma,taup,taut -+ real(8) temp,virtot,cell0,volm0,elrc0,virlrc0 -+ real(8) chit0,chip0,chipnew,chipp,engtot,chitnew,chitp,volnew -+ real(8) scale,volm,vold,cons1,cons2,cons3 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension czero(9),cell0(9),com(3),vom(3) -+ -+ save newjob,volm0,elrc0,virlrc0,czero,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1670) -+ enddo -+ -+ if(newjob) then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1680) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ do i=1,9 -+ czero(i)=cell(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+c calculate system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat and barostat variables -+ -+ chit0=chit -+ chip0=chip -+ chipnew=chip -+ -+c initialise constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vxx(i)+vxo(j))) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vyy(i)+vyo(j))) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)-(chit0+chip0)* -+ x pt5*(vzz(i)+vzo(j))) -+ -+c advance position using leapfrog -+ -+ xxx(i)=xxo(i)+tstep*(uxx(j)+ -+ x chipnew*((xxx(i)+xxo(i))*pt5-com(1))) -+ yyy(i)=yyo(i)+tstep*(uyy(j)+ -+ x chipnew*((yyy(i)+yyo(i))*pt5-com(2))) -+ zzz(i)=zzo(i)+tstep*(uzz(j)+ -+ x chipnew*((zzz(i)+zzo(i))*pt5-com(3))) -+ -+c estimate full step velocity -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c calculate kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvxx(ig)+gvxo(jg))) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvyy(ig)+gvyo(jg))) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)-(chit0+chip0)* -+ x pt5*(gvzz(ig)+gvzo(jg))) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ -+ x chipnew*((gcxo(jg)+gcmx(ig))*pt5-com(1))) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ -+ x chipnew*((gcyo(jg)+gcmy(ig))*pt5-com(2))) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ -+ x chipnew*((gczo(jg)+gcmz(ig))*pt5-com(3))) -+ -+c estimate full step velocities -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c new estimate of chip and chit -+ -+ engke=engfke+engtrn -+ chipp=(2.d0*engke-virtot-vircom-vircon-3.d0*press*volm)/pmass- -+ x chit0*chip0 -+ chipnew=chip+tstep*chipp -+ chip0=pt5*(chip+chipnew) -+ -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*chip0**2-boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+c estimate new cell tensor -+ -+ volnew=volm*exp(3.d0*tstep*chipnew) -+ scale=(volnew/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=czero(i)*scale -+ enddo -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update volume -+ -+ vold=volm -+ volm=volm*exp(3.d0*tstep*chipnew) -+ -+c scale cell vectors-isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=czero(i)*scale -+ enddo -+ -+c construct scaling tensor (for later!) -+ -+ do i=2,8 -+ eta(i)=0.d0 -+ enddo -+ eta(1)=chipnew -+ eta(5)=chipnew -+ eta(9)=chipnew -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ chip=chipnew -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+boltz*temp) -+ cons1=pt5*qmass*chit0**2 -+ cons2=press*vold -+ cons3=pt5*pmass*chip0**2 -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nptq_h2 -+ -+ subroutine nstq_b2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,elrc,engke,engrot,virlrc,press, -+ x quattol,sigma,taup,taut,tolnce,tstep,vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints. Rigid body sites and constraint sites may -+c coincide. -+c -+c verlet leapfrog with Berendsen thermostat and barostat. -+c (cell may change shape) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith nov 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob,safeq,newstep,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons,mode -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engtrn,trx,try,trz -+ real(8) delx,dely,delz,engfke -+ real(8) vaa,vbb,vcc,viracc,elrc,virlrc,press,sigma -+ real(8) taup,taut,volm,cell0,volm0,elrc0,chit0,uni -+ real(8) beta,stres0,engtot,virlrc0 -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn) -+ dimension cell0(9),uni(9),stres0(9) -+ -+ save newjob,volm0,elrc0,virlrc0,chit0,dens0 -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ data beta/7.3728d-3/ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1690) -+ enddo -+ -+c store initial values of volume, long range corrections etc -+ -+ if(newjob) then -+ -+ chit0=1.d0 -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1700) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c set virial, strain and stress tensors -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ eta(i)=uni(i) -+ strcns(i)=0.d0 -+ cell0(i)=cell(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c shake iterations and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ uxx(j)=(vxo(j)+tstep*rmass(i)*fxx(i))*chit0 -+ uyy(j)=(vyo(j)+tstep*rmass(i)*fyy(i))*chit0 -+ uzz(j)=(vzo(j)+tstep*rmass(i)*fzz(i))*chit0 -+ -+c update positions -+ -+ xxx(i)=tstep*uxx(j)+eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) -+ yyy(i)=tstep*uyy(j)+eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) -+ zzz(i)=tstep*uzz(j)+eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) -+ -+c calculate velocity at full time step -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :*********** -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c calculate thermostated velocities -+ -+ uxx(jg)=(gvxo(jg)+tstep/gmass(id)*fmx(jg))*chit0 -+ uyy(jg)=(gvyo(jg)+tstep/gmass(id)*fmy(jg))*chit0 -+ uzz(jg)=(gvzo(jg)+tstep/gmass(id)*fmz(jg))*chit0 -+ -+c update positions -+ -+ gcmx(ig)=tstep*uxx(jg)+ -+ x eta(1)*gcxo(jg)+eta(4)*gcyo(jg)+eta(7)*gczo(jg) -+ gcmy(ig)=tstep*uyy(jg)+ -+ x eta(2)*gcxo(jg)+eta(5)*gcyo(jg)+eta(8)*gczo(jg) -+ gcmz(ig)=tstep*uzz(jg)+ -+ x eta(3)*gcxo(jg)+eta(6)*gcyo(jg)+eta(9)*gczo(jg) -+ -+c centre of mass velocities at full step -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=(omxo(jg)+pt5*delx) -+ opy(jg)=(omyo(jg)+pt5*dely) -+ opz(jg)=(omzo(jg)+pt5*delz) -+ -+ enddo -+ -+c scaled angular velocity at time step n -+ -+ omx(ig)=opx(jg)*chit0 -+ omy(ig)=opy(jg)*chit0 -+ omz(ig)=opz(jg)*chit0 -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=(omxo(jg)+delx*1.5d0)*chit0 -+ oqy(jg)=(omyo(jg)+dely*1.5d0)*chit0 -+ oqz(jg)=(omzo(jg)+delz*1.5d0)*chit0 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=(omxo(jg)+delx)*chit0 -+ uyy(jg)=(omyo(jg)+dely)*chit0 -+ uzz(jg)=(omzo(jg)+delz)*chit0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c calculate total stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c calculate new cell tensor -+ -+ call mat_mul(eta,cell0,cell) -+ -+c calculate eta tensor -+ -+ do i=1,9 -+ eta(i)=beta*tstep/taup*(stress(i)/volm-press*uni(i))+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c new estimate of chit -+ -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chit0=sqrt(1.d0+tstep/taut*(sigma/engtot-1.d0)) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update volume -+ -+ volm=volm*eta(1)*eta(5)*eta(9) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nstq_b2 -+ -+ subroutine nstq_h2 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,chit,conint,consv,elrc,engke,engrot, -+ x virlrc,press,quattol,sigma,taup,taut,temp,tolnce,tstep, -+ x vircom,vircon,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints- rigid body sites and constraint sites -+c may coincide. -+c -+c verlet leapfrog with Hoover like thermostat and barostat. -+c (cell may change shape) -+c -+c parallel replicated data version : block data -+c -+c for systems using bond constraints -+c -+c tqx,tqy,tqz=torque in lab fixed frame (input) -+c omx,omy,omz=angular velocity in body fixed frame (principal axis) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1995 -+c author t.forester june 1995 -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newstep,newjob,cycle -+ integer fail,imcon,idnode,mxnode,natms,ngrp,nscons -+ integer ntcons,ntfree,igrp,igrp1,igrp2,idum,ifre,ifre1,ifre2 -+ integer i,j,k,jg,ig,jr,id,mxshak1,icyc,ntpatm,mode -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) rot,strkin,strcon,strgrp,engtrn,vxt,vyt,vzt,trx,try,trz -+ real(8) delx,dely,delz,vaa,vbb,vcc,viracc,com,fac,etadot -+ real(8) chit,conint,consv,virlrc,elrc,press,sigma,taut,taup -+ real(8) volm,eta0,etanew,cell0,volm0,elrc0,virlrc0,pmass,qmass -+ real(8) totmas,chit0,xxa,yya,zza,chip,chitp,vom,engfke -+ real(8) chitnew,vold,cons1,cons2,cons3,temp,uni -+ real(8) stres0,engtot -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: fmx(:),fmy(:),fmz(:) -+ real(8), allocatable :: tqx(:),tqy(:),tqz(:) -+ real(8), allocatable :: omxo(:),omyo(:),omzo(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ real(8), allocatable :: qn0(:),qn1(:),qn2(:),qn3(:) -+ -+ dimension rot(9),strkin(9),strcon(9),strgrp(9),fail(nnn),vom(3) -+ dimension cell0(9),eta0(9),etanew(9),stres0(9),uni(9),com(3) -+ -+ save newjob,volm0,elrc0,virlrc0,dens0,pmass,qmass -+ save igrp1,igrp2,ifre1,ifre2,totmas -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(6)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate (fmx(msgrp),fmy(msgrp),fmz(msgrp),stat=fail(11)) -+ allocate (tqx(msgrp),tqy(msgrp),tqz(msgrp),stat=fail(12)) -+ allocate (omxo(msgrp),omyo(msgrp),omzo(msgrp),stat=fail(13)) -+ allocate (gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(14)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(15)) -+ allocate (qn0(msgrp),qn1(msgrp),qn2(msgrp),qn3(msgrp), -+ x stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1710) -+ enddo -+ -+ if(newjob) then -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ qmass=2.0d0*sigma*taut**2 -+ pmass=2.0d0*sigma*taup**2 -+ -+c store initial values of volume, long range corrections etc -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ fail(1)=0 -+ allocate (dens0(mxatyp),stat=fail(1)) -+ if(fail(1).ne.0)call error(idnode,1720) -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+c system total mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ cycle=.true. -+ -+c ensure total momentum is zero -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+c correction to velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ omxo(jg)=omx(ig) -+ omyo(jg)=omy(ig) -+ omzo(jg)=omz(ig) -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ gvxo(jg)=gvxx(ig) -+ gvyo(jg)=gvyy(ig) -+ gvzo(jg)=gvzz(ig) -+ qn0(jg)=q0(ig) -+ qn1(jg)=q1(ig) -+ qn2(jg)=q2(ig) -+ qn3(jg)=q3(ig) -+ -+ enddo -+ -+c calculate centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c calculate atom displacement from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxo(i)-gcxo(jg) -+ dty(jr)=yyo(i)-gcyo(jg) -+ dtz(jr)=zzo(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c initial thermostat and barostat variables and new cell -+ -+ chit0=chit -+ do i=1,9 -+ -+ eta0(i)=eta(i) -+ cell0(i)=cell(i) -+ -+ enddo -+ -+c initialise constraint stress and virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ stres0(i)=stress(i) -+ -+ enddo -+ -+c shake and thermostat iterations start here -+ -+ icyc=0 -+ mxshak1=mxshak -+ if(ntcons.eq.0)mxshak1=4 -+ do while(cycle.and.icyc.le.mxshak1) -+ -+ icyc=icyc+1 -+ -+c restore cell vectors -+ -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore original quaternions for this step -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ q0(ig)=qn0(jg) -+ q1(ig)=qn1(jg) -+ q2(ig)=qn2(jg) -+ q3(ig)=qn3(jg) -+ -+ enddo -+ -+c integrate unconstrained new positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity using leapfrog -+ -+ vxt=pt5*(vxx(i)+vxo(j)) -+ vyt=pt5*(vyy(i)+vyo(j)) -+ vzt=pt5*(vzz(i)+vzo(j)) -+ -+ uxx(j)=vxo(j)+tstep*(fxx(i)*rmass(i)- -+ x (eta0(1)+chit0)*vxt-eta0(4)*vyt-eta0(7)*vzt) -+ uyy(j)=vyo(j)+tstep*(fyy(i)*rmass(i)- -+ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) -+ uzz(j)=vzo(j)+tstep*(fzz(i)*rmass(i)- -+ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) -+ -+c advance positions using leapfrog -+ -+ xxa=(xxx(i)+xxo(i))*pt5-com(1) -+ yya=(yyy(i)+yyo(i))*pt5-com(2) -+ zza=(zzz(i)+zzo(i))*pt5-com(3) -+ -+ xxx(i)=xxo(i)+tstep*(uxx(j)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ yyy(i)=yyo(i)+tstep*(uyy(j)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ zzz(i)=zzo(i)+tstep*(uzz(j)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c estimate full step velocities -+ -+ vxx(i)=pt5*(uxx(j)+vxo(j)) -+ vyy(i)=pt5*(uyy(j)+vyo(j)) -+ vzz(i)=pt5*(uzz(j)+vzo(j)) -+ -+ enddo -+ -+c kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore half step velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=uxx(j) -+ vyy(i)=uyy(j) -+ vzz(i)=uzz(j) -+ -+ enddo -+ -+c ********: rigid body motion - thermostated :************ -+ -+c translational kinetic energy -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate centre of mass forces -+ -+ fmx(jg)=0.d0 -+ fmy(jg)=0.d0 -+ fmz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ fmx(jg)=fmx(jg)+fxx(i) -+ fmy(jg)=fmy(jg)+fyy(i) -+ fmz(jg)=fmz(jg)+fzz(i) -+ -+ enddo -+ -+c calculate thermostated velocities -+ -+ vxt=pt5*(gvxx(ig)+gvxo(jg)) -+ vyt=pt5*(gvyy(ig)+gvyo(jg)) -+ vzt=pt5*(gvzz(ig)+gvzo(jg)) -+ -+ uxx(jg)=gvxo(jg)+tstep*(fmx(jg)/gmass(id)- -+ x (chit0+eta0(1))*vxt-eta0(4)*vyt-eta0(7)*vzt) -+ uyy(jg)=gvyo(jg)+tstep*(fmy(jg)/gmass(id)- -+ x eta0(2)*vxt-(eta0(5)+chit0)*vyt-eta0(8)*vzt) -+ uzz(jg)=gvzo(jg)+tstep*(fmz(jg)/gmass(id)- -+ x eta0(3)*vxt-eta0(6)*vyt-(eta0(9)+chit0)*vzt) -+ -+c advance positions using leapfrog -+ -+ xxa=(gcmx(ig)+gcxo(jg))*pt5-com(1) -+ yya=(gcmy(ig)+gcyo(jg))*pt5-com(2) -+ zza=(gcmz(ig)+gczo(jg))*pt5-com(3) -+ -+ gcmx(ig)=gcxo(jg)+tstep*(uxx(jg)+ -+ x eta0(1)*xxa+eta0(4)*yya+eta0(7)*zza) -+ gcmy(ig)=gcyo(jg)+tstep*(uyy(jg)+ -+ x eta0(2)*xxa+eta0(5)*yya+eta0(8)*zza) -+ gcmz(ig)=gczo(jg)+tstep*(uzz(jg)+ -+ x eta0(3)*xxa+eta0(6)*yya+eta0(9)*zza) -+ -+c estimate full step velocities -+ -+ gvxx(ig)=pt5*(gvxo(jg)+uxx(jg)) -+ gvyy(ig)=pt5*(gvyo(jg)+uyy(jg)) -+ gvzz(ig)=pt5*(gvzo(jg)+uzz(jg)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gvxx(ig)=uxx(jg) -+ gvyy(ig)=uyy(jg) -+ gvzz(ig)=uzz(jg) -+ -+ enddo -+ -+c calculate rigid body stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx(jg)=0.d0 -+ tqy(jg)=0.d0 -+ tqz(jg)=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx(jg)=tqx(jg)+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy(jg)=tqy(jg)+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz(jg)=tqz(jg)+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c angular velocity at time step n (first guess) -+ -+ opx(jg)=omxo(jg) -+ opy(jg)=omyo(jg) -+ opz(jg)=omzo(jg) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx(jg)*rot(1)+tqy(jg)*rot(4)+tqz(jg)*rot(7))* -+ x rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)* -+ x rotinx(id,2) -+ try=(tqx(jg)*rot(2)+tqy(jg)*rot(5)+tqz(jg)*rot(8))* -+ x rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)* -+ x rotiny(id,2) -+ trz=(tqx(jg)*rot(3)+tqy(jg)*rot(6)+tqz(jg)*rot(9))* -+ x rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)* -+ x rotinz(id,2) -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omxo(jg)+pt5*tstep*trx -+ opy(jg)=omyo(jg)+pt5*tstep*try -+ opz(jg)=omzo(jg)+pt5*tstep*trz -+ -+ enddo -+ -+c correction due to thermostat -+ -+ delx=tstep*(trx-chit0*pt5*(omx(ig)+omxo(jg))) -+ dely=tstep*(try-chit0*pt5*(omy(ig)+omyo(jg))) -+ delz=tstep*(trz-chit0*pt5*(omz(ig)+omzo(jg))) -+ -+c angular velocity at time step n -+ -+ omx(ig)=omxo(jg)+delx*pt5 -+ omy(ig)=omyo(jg)+dely*pt5 -+ omz(ig)=omzo(jg)+delz*pt5 -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(jg)=omxo(jg)+delx -+ uyy(jg)=omyo(jg)+dely -+ uzz(jg)=omzo(jg)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omxo(jg)+delx*1.5d0 -+ oqy(jg)=omyo(jg)+dely*1.5d0 -+ oqz(jg)=omzo(jg)+delz*1.5d0 -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step velocities -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(jg) -+ omy(ig)=uyy(jg) -+ omz(ig)=uzz(jg) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge new atomic coordinates -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c calculate total stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strcns(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+c propagate eta -+ -+ fac=9.d0 -+ do i=1,9 -+ etanew(i)=eta(i)+tstep*((stress(i)-press*volm*uni(i))/pmass- -+ x chit0*eta0(i)) -+ enddo -+ if(mode.gt.0)then -+ fac=5.d0 -+ etanew(3)=0.d0 -+ etanew(6)=0.d0 -+ etanew(7)=0.d0 -+ etanew(8)=0.d0 -+ if(mode.lt.3)then -+ fac=3.d0 -+ etanew(2)=0.d0 -+ etanew(4)=0.d0 -+ if(mode.eq.2)then -+ fac=2.d0 -+ etanew(1)=0.5d0*(etanew(1)+etanew(5)) -+ etanew(5)=etanew(1) -+ endif -+ endif -+ endif -+ do i=1,9 -+ eta0(i)=pt5*(etanew(i)+eta(i)) -+ enddo -+ -+c propagate chit -+ -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ engke=engfke+engtrn -+ engtot=engke+engrot -+ chitp=(2.d0*(engtot-sigma)+pmass*etadot-fac*boltz*temp)/qmass -+ chitnew=chit+tstep*chitp -+ chit0=pt5*(chit+chitnew) -+ -+c estimate new cell parameters -+ -+ call cell_propagate(tstep,cell,etanew) -+ -+ if(ntcons.gt.0) then -+ -+c apply constraint correction -+ -+ newstep=.false. -+ if(icyc.eq.1)newstep=.true. -+ -+ call qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ if(abs(viracc).le.1.d-10)cycle=.false. -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+ enddo -+ -+c update thermostat and barostat variables -+ -+ chit=chitnew -+ do i=1,9 -+ eta(i)=etanew(i) -+ enddo -+ -+c update volume -+ -+ chip=eta(1)+eta(5)+eta(9) -+ vold=volm -+ volm=volm*exp(tstep*chip) -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c conserved quantity less kinetic and potential energy -+ -+ conint=conint+tstep*chit0*(qmass/taut**2+fac*boltz*temp) -+ cons1=pt5*qmass*chit0**2 -+ cons2=press*vold -+ etadot=sdot0(9,eta0,eta0) -+ if(mode.eq.2)etadot=etadot-eta0(1)**2 -+ cons3=pt5*pmass*etadot -+ consv=conint+cons1+cons2+cons3 -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c merge new quaternions -+ -+ call merge4(idnode,mxnode,ngrp,mxbuff,q0,q1,q2,q3,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate (opx,opy,opz,oqx,oqy,oqz,stat=fail(1)) -+ deallocate (dtx,dty,dtz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate (uxx,uyy,uzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate (dxt,dyt,dzt,xxo,yyo,zzo,stat=fail(4)) -+ deallocate (vxo,vyo,vzo,tqx,tqy,tqz,stat=fail(5)) -+ deallocate (fmx,fmy,fmz,omxo,omyo,omzo,stat=fail(6)) -+ deallocate (gvxo,gvyo,gvzo,gcxo,gcyo,gczo,stat=fail(7)) -+ deallocate (xxt,yyt,zzt,qn0,qn1,qn2,qn3,stat=fail(8)) -+ -+ return -+ end subroutine nstq_h2 -+ -+ subroutine qshake -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for appling bond constraint corrections after -+c atomic integration. Assumes rigid bodies connected by constraints -+c If this is not so use rdshake_1 instead -+c Must be used in conjunction with leapfrog integration algorithms -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester june 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k -+ integer ik,ig,id,jj -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy -+ real(8) tzz,xxt,yyt,zzt,stresh,tstep2,esig,dis,dis2 -+ real(8) xxa,yya,zza,tax,tay,taz,doti,amti,amtj -+ real(8) trx,try,trz,vix,viy,viz,vxi,vyi,vzi -+ real(8) vjx,vjy,vjz,vxj,vyj,vzj,gamma,dli,dlj,rot -+ -+ real(8), allocatable :: redmass(:),esig1(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension stresh(9),rot(9) -+ -+ save newjob,esig1,redmass -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (redmass(mxcons),esig1(mxcons),stat=fail) -+ if(fail.ne.0)call error(idnode,1610) -+ newjob=.false. -+ -+ endif -+ -+c constraint virial -+ -+ vircon=0.d0 -+ -+c accumulators for stress tensor -+ -+ do i=1,9 -+ stresh(i)=0.d0 -+ enddo -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c one iteration of constraint (shake) algorithm -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dis=prmcon(listcon(k,1)) -+ dis2=dis*dis -+ esig1(k)=0.5d0*(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 -+ esig=max(esig,abs(esig1(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c terminate iteration if all tolerances satisfied -+ -+ if (.not.safe) then -+ -+c initialise force increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c assign effective reduced mass -+ -+ if(newstep) then -+ -+ ig=lstbod(i) -+ -+ if(ig.eq.0) then -+ -+ amti=rmass(i) -+ -+ else -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c site to com in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ -+ x gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ -+ x gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ -+ x gzz(id,jj)*rot(9)) -+ -+c find cross product between interatomic vector and vector to com -+ -+ tax=yya*dzz(k)-zza*dyy(k) -+ tay=zza*dxx(k)-xxa*dzz(k) -+ taz=xxa*dyy(k)-yya*dxx(k) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+c direction of induced velocites in body frame -+ -+ vix=try*gzz(id,jj)-trz*gyy(id,jj) -+ viy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ viz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ vxi=vix*rot(1)+viy*rot(2)+viz*rot(3) -+ vyi=vix*rot(4)+viy*rot(5)+viz*rot(6) -+ vzi=vix*rot(7)+viy*rot(8)+viz*rot(9) -+ -+c find dot product between induced translational and rotational velocities -+ -+ doti=abs(vxi*dxx(k)+vyi*dyy(k)+vzi*dzz(k)) -+ doti=doti/dis2 -+ -+ amti=(1.d0/gmass(id)+doti) -+ -+ endif -+ -+ ig=lstbod(j) -+ if(ig.eq.0) then -+ -+ amtj=rmass(j) -+ -+ else -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c site to com in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+ -+ x gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+ -+ x gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+ -+ x gzz(id,jj)*rot(9)) -+ -+c find cross product between interatomic vector and vector to com -+ -+ tax =yya*dzz(k)-zza*dyy(k) -+ tay =zza*dxx(k)-xxa*dzz(k) -+ taz =xxa*dyy(k)-yya*dxx(k) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+c direction of induced velocites in body frame -+ -+ vjx=try*gzz(id,jj)-trz*gyy(id,jj) -+ vjy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ vjz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ vxj=vjx*rot(1)+vjy*rot(2)+vjz*rot(3) -+ vyj=vjx*rot(4)+vjy*rot(5)+vjz*rot(6) -+ vzj=vjx*rot(7)+vjy*rot(8)+vjz*rot(9) -+ -+c find dot product between induced translational and rotational velocities -+ -+ doti=abs(vxj*dxx(k)+vyj*dyy(k)+vzj*dzz(k)) -+ doti=doti/dis2 -+ -+ amtj=(1.d0/gmass(id)+doti) -+ -+ endif -+ -+ redmass(k)=1.d0/(amti+amtj)/tstep2 -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig1(k)*redmass(k) -+ -+c accumulate bond virial -+ -+ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ stresh(1)=stresh(1)+gamma*dxx(k)*dxx(k) -+ stresh(2)=stresh(2)+gamma*dxx(k)*dyy(k) -+ stresh(3)=stresh(3)+gamma*dxx(k)*dzz(k) -+ stresh(5)=stresh(5)+gamma*dyy(k)*dyy(k) -+ stresh(6)=stresh(6)+gamma*dyy(k)*dzz(k) -+ stresh(9)=stresh(9)+gamma*dzz(k)*dzz(k) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)+dxx(k)*gamma -+ yyt(i)=yyt(i)+dyy(k)*gamma -+ zzt(i)=zzt(i)+dzz(k)*gamma -+ -+ xxt(j)=xxt(j)-dxx(k)*gamma -+ yyt(j)=yyt(j)-dyy(k)*gamma -+ zzt(j)=zzt(j)-dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+xxt(i)*dli -+ fyy(i)=fyy(i)+yyt(i)*dli -+ fzz(i)=fzz(i)+zzt(i)*dli -+ fxx(j)=fxx(j)+xxt(j)*dlj -+ fyy(j)=fyy(j)+yyt(j)*dlj -+ fzz(j)=fzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+c complete (symmetrical) stress tensor -+ -+ stresh(4)=stresh(2) -+ stresh(7)=stresh(3) -+ stresh(8)=stresh(6) -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine qshake -+ -+ end module lf_rotation2_module -diff -urN dl_class_1.9.orig/srcmod/Makefile dl_class_1.9/srcmod/Makefile ---- dl_class_1.9.orig/srcmod/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/Makefile 2015-11-09 14:32:49.349871999 +0100 -@@ -0,0 +1,101 @@ -+# Master makefile for DL_POLY Classic -+# Author: W. Smith January Dec 2010 -+# -+#======================================================================= -+# Define default settings -+#======================================================================= -+ -+include ../Plumed.inc -+ -+ -+BINROOT = ../execute -+CC := $(CC) -+EX = DLPOLY.X -+EXE = $(BINROOT)/$(EX) -+FC=undefined -+SHELL=/bin/sh -+TYPE=par -+ -+#===================================================================== -+# Define object files -+ -+OBJ_MOD = parse_module.o setup_module.o error_module.o \ -+ site_module.o config_module.o pair_module.o utility_module.o \ -+ metafreeze_module.o solvation_module.o tether_module.o \ -+ vdw_module.o property_module.o rigid_body_module.o \ -+ angles_module.o bonds_module.o shake_module.o \ -+ inversion_module.o dihedral_module.o core_shell_module.o \ -+ exclude_module.o ewald_module.o coulomb_module.o\ -+ external_field_module.o four_body_module.o \ -+ hkewald_module.o metal_module.o ensemble_tools_module.o \ -+ temp_scalers_module.o three_body_module.o spme_module.o \ -+ tersoff_module.o neu_coul_module.o \ -+ nlist_builders_module.o forces_module.o \ -+ lf_motion_module.o lf_rotation1_module.o \ -+ lf_rotation2_module.o vv_motion_module.o \ -+ vv_rotation1_module.o vv_rotation2_module.o \ -+ pmf_module.o integrator_module.o optimiser_module.o \ -+ hyper_dynamics_module.o driver_module.o \ -+ define_system_module.o -+ -+OBJ_SRC = dlpoly.o -+ -+OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o -+ -+#===================================================================== -+# Define targets -+all: -+ @echo "Error - please specify a target machine!" -+ @echo "Permissible targets for this Makefile are:" -+ @echo " " -+ @echo "gfortran (parallel)" -+ @echo "woodcrest (parallel)" -+ @echo " " -+ @echo "Please examine Makefile for details" -+ -+# system specific targets follow : -+ -+#================== GNU Fortran, MPI version ============================== -+gfortran: -+ $(MAKE) FC="$(MPIF90)" LD="$(MPIF90) -o" \ -+ LDFLAGS="$(LDFLAGS)" \ -+ FFLAGS="-c $(FFLAGS)" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#================= Woodcrest ========================================= -+woodcrest: -+ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ -+ FC=mpif90 FFLAGS="-c -O3" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#===================================================================== -+# Default code for parallel (MPI) execution -+ -+par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_DEPENDENCIES) -+ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) $(PLUMED_LOAD) -+ mv $(EX) $(EXE) -+ -+#===================================================================== -+# Check that a machine has been specified -+check: -+ @if test $(FC) = "undefined";\ -+ then echo "You must specify a target machine!"; \ -+ exit 99;\ -+ fi -+ -+#===================================================================== -+# Clean up the source directory -+clean: -+ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod -+ -+#===================================================================== -+# Declare dependencies -+.f.o: -+ $(FC) $(FFLAGS) $*.f -+.c.o: -+ $(CC) -c $*.c -+ -+#===================================================================== -+# Declare dependency on module files -+ -+$(OBJ_SRC): $(OBJ_MOD) -diff -urN dl_class_1.9.orig/srcmod/Makefile.plumedbck dl_class_1.9/srcmod/Makefile.plumedbck ---- dl_class_1.9.orig/srcmod/Makefile.plumedbck 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/Makefile.plumedbck 2011-02-22 12:46:11.000000000 +0100 -@@ -0,0 +1,98 @@ -+# Master makefile for DL_POLY Classic -+# Author: W. Smith January Dec 2010 -+# -+#======================================================================= -+# Define default settings -+#======================================================================= -+ -+BINROOT = ../execute -+CC = gcc -+EX = DLPOLY.X -+EXE = $(BINROOT)/$(EX) -+FC=undefined -+SHELL=/bin/sh -+TYPE=par -+ -+#===================================================================== -+# Define object files -+ -+OBJ_MOD = parse_module.o setup_module.o error_module.o \ -+ site_module.o config_module.o pair_module.o utility_module.o \ -+ metafreeze_module.o solvation_module.o tether_module.o \ -+ vdw_module.o property_module.o rigid_body_module.o \ -+ angles_module.o bonds_module.o shake_module.o \ -+ inversion_module.o dihedral_module.o core_shell_module.o \ -+ exclude_module.o ewald_module.o coulomb_module.o\ -+ external_field_module.o four_body_module.o \ -+ hkewald_module.o metal_module.o ensemble_tools_module.o \ -+ temp_scalers_module.o three_body_module.o spme_module.o \ -+ tersoff_module.o neu_coul_module.o \ -+ nlist_builders_module.o forces_module.o \ -+ lf_motion_module.o lf_rotation1_module.o \ -+ lf_rotation2_module.o vv_motion_module.o \ -+ vv_rotation1_module.o vv_rotation2_module.o \ -+ pmf_module.o integrator_module.o optimiser_module.o \ -+ hyper_dynamics_module.o driver_module.o \ -+ define_system_module.o -+ -+OBJ_SRC = dlpoly.o -+ -+OBJ_PAR = basic_comms.o merge_tools.o pass_tools.o -+ -+#===================================================================== -+# Define targets -+all: -+ @echo "Error - please specify a target machine!" -+ @echo "Permissible targets for this Makefile are:" -+ @echo " " -+ @echo "gfortran (parallel)" -+ @echo "woodcrest (parallel)" -+ @echo " " -+ @echo "Please examine Makefile for details" -+ -+# system specific targets follow : -+ -+#================== GNU Fortran, MPI version ============================== -+gfortran: -+ $(MAKE) FC="mpif90" LD="mpif90 -o" \ -+ LDFLAGS="-O2 -ffast-math" \ -+ FFLAGS="-c -O2 -ffast-math" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#================= Woodcrest ========================================= -+woodcrest: -+ $(MAKE) LD="mpif90 -o" LDFLAGS="" \ -+ FC=mpif90 FFLAGS="-c -O3" \ -+ EX=$(EX) BINROOT=$(BINROOT) $(TYPE) -+ -+#===================================================================== -+# Default code for parallel (MPI) execution -+ -+par: check $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) -+ $(LD) $(EX) $(LDFLAGS) $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) -+ mv $(EX) $(EXE) -+ -+#===================================================================== -+# Check that a machine has been specified -+check: -+ @if test $(FC) = "undefined";\ -+ then echo "You must specify a target machine!"; \ -+ exit 99;\ -+ fi -+ -+#===================================================================== -+# Clean up the source directory -+clean: -+ rm -f $(OBJ_MOD) $(OBJ_PAR) $(OBJ_SRC) *.mod -+ -+#===================================================================== -+# Declare dependencies -+.f.o: -+ $(FC) $(FFLAGS) $*.f -+.c.o: -+ $(CC) -c $*.c -+ -+#===================================================================== -+# Declare dependency on module files -+ -+$(OBJ_SRC): $(OBJ_MOD) -diff -urN dl_class_1.9.orig/srcmod/merge_tools.f dl_class_1.9/srcmod/merge_tools.f ---- dl_class_1.9.orig/srcmod/merge_tools.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/merge_tools.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,670 @@ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging coordinate arrays across -+c a number of processors -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith november 1992. -+c MPI version - t. forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff,nsize,ierr,iatm1,iatm2 -+ integer j,i,k,jdnode,kdnode,katm1,katm2,iatm,katm -+ real*8 xxx(natms),yyy(natms),zzz(natms),buffer(nbuff) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+c check that buffer is large enough -+ -+ nsize=(natms+mxnode-1)/mxnode -+ if(nbuff.lt.6*nsize)call error(idnode,47) -+ -+c load initial transfer buffer -+ -+ j=0 -+ -+c set up this nodes atoms -+ -+ iatm1 = (idnode*natms)/mxnode + 1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ iatm = iatm2-iatm1+1 -+ -+ do i=iatm1,iatm2 -+ -+ buffer(j+1)=xxx(i) -+ buffer(j+2)=yyy(i) -+ buffer(j+3)=zzz(i) -+ j=j+3 -+ -+ enddo -+ -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c identity of incoming atoms -+ -+ katm1 = (kdnode*natms)/mxnode + 1 -+ katm2 = ((kdnode+1)*natms)/mxnode -+ katm = katm2-katm1 + 1 -+ -+c systolic data pulse to transfer data -+ -+ call MPI_IRECV(buffer(3*nsize+1),3*nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),3*nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ j=3*nsize -+ -+ do i=katm1,katm2 -+ -+ xxx(i)=buffer(j+1) -+ yyy(i)=buffer(j+2) -+ zzz(i)=buffer(j+3) -+ j=j+3 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,3*nsize -+ -+ buffer(i)=buffer(3*nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging together coordinate arrays -+c across a number of processors during rigid body algorithm -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t.forester november 1993 -+c systolic pulse version. T3D t.forester sept 1994 -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical safe -+ integer idnode,mxnode,natms,ierr,i,j,k,l,mxb,nout,nin -+ integer nin1,jdnode,j1,kdnode -+ integer lstme(natms) -+ real*8 xxx(mxatms),yyy(mxatms),zzz(mxatms),buffer(mxbuff) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ -+ safe =.true. -+ -+c load up buffers -+ -+ j=1 -+ l=1 -+ do while(lstme(l).gt.0.and.l.le.natms) -+ -+ i=lstme(l) -+ buffer(j+1)=dble(i) -+ buffer(j+2)=xxx(i) -+ buffer(j+3)=yyy(i) -+ buffer(j+4)=zzz(i) -+ j=j+4 -+ l=l+1 -+ -+ enddo -+ -+c length of message -+ -+ buffer(1) = dble(j) -+ -+c array position for incoming messages -+ -+ mxb = mxbuff/2 -+ -+c load initial transfer buffer -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c out going message size -+ -+ nout = nint(buffer(1)) -+ -+ call MPI_IRECV(nin,1,MPI_INTEGER, -+ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(nout,1,MPI_INTEGER,jdnode, -+ x Merge1_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+ call MPI_IRECV(buffer(mxb),nin,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge1_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),nout,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge1_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c check buffer array not exceeded -+ -+ if(nin.gt.mxbuff-mxb) safe =.false. -+ -+c position of first data element in incoming array -+ -+ nin1 = (nin-1)/4 -+ j = mxb+1 -+ -+ do j1=1,nin1 -+ -+ i = nint(buffer(j)) -+ xxx(i)=buffer(j+1) -+ yyy(i)=buffer(j+2) -+ zzz(i)=buffer(j+3) -+ j=j+4 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,nin -+ -+ buffer(i)=buffer(mxb-1+i) -+ -+ enddo -+ -+ enddo -+ -+c global check -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,47) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for merging coordinate arrays across -+c a number of processors -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t.forester february 1994 -+c T3D version - sept 1994 t.forester -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c********************************************************************* -+ -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff,ierr,nsize,i,j,igrp1,igrp2 -+ integer k,jdnode,kdnode,kgrp1,kgrp2 -+ real*8 q0(ngrp),q1(ngrp),q2(ngrp),q3(ngrp),buffer(nbuff) -+ -+ include "comms.inc" -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ -+c check that buffer is large enough -+ -+ nsize=(ngrp+mxnode-1)/mxnode -+ if(nbuff.lt.8*nsize)call error(idnode,47) -+ -+c load initial transfer buffer -+ -+ j=0 -+ -+ igrp1 = (idnode*ngrp)/mxnode+1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+ do i=igrp1,igrp2 -+ -+ buffer(j+1)=q0(i) -+ buffer(j+2)=q1(i) -+ buffer(j+3)=q2(i) -+ buffer(j+4)=q3(i) -+ j=j+4 -+ -+ enddo -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c identity of incoming groups -+ -+ kgrp1 = (kdnode*ngrp)/mxnode+1 -+ kgrp2 = ((kdnode+1)*ngrp)/mxnode -+ -+ call MPI_IRECV(buffer(4*nsize+1),4*nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Merge4_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),4*nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Merge4_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ j=4*nsize -+ -+ do i=kgrp1,kgrp2 -+ -+ q0(i)=buffer(j+1) -+ q1(i)=buffer(j+2) -+ q2(i)=buffer(j+3) -+ q3(i)=buffer(j+4) -+ j=j+4 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,4*nsize -+ -+ buffer(i)=buffer(4*nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for merging core-shell velocity data -+c to restore data replication on all nodes -+c -+c copyright - daresbury laboratory 1993 -+c author - w. smith february 1993 -+c MPI version - w. smith june 1995 -+c CPP version - w. smith june 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use config_module -+ use core_shell_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer idnode,mxnode,ntshl,ierr,i,j,k,n,m,ishl1,ishl2,nsize -+ integer jdnode,kshl1,kshl2,kdnode -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+c check that buffer is large enough -+ -+ nsize=8*((ntshl+mxnode-1)/mxnode) -+ -+ if(mxbuff.lt.2*nsize)call error(idnode,425) -+ -+c block indices -+ -+ ishl1 = (idnode*ntshl)/mxnode+1 -+ ishl2 = ((idnode+1)*ntshl)/mxnode -+ -+c load initial transfer buffer -+ -+ n=0 -+ m=0 -+ -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+c indices of core and shell -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ buffer(n+1)=dble(i) -+ buffer(n+2)=dble(j) -+ buffer(n+3)=vxx(i) -+ buffer(n+4)=vyy(i) -+ buffer(n+5)=vzz(i) -+ buffer(n+6)=vxx(j) -+ buffer(n+7)=vyy(j) -+ buffer(n+8)=vzz(j) -+ n=n+8 -+ -+ enddo -+ -+ call gsync() -+ -+c identity of neighbour node for systolic transfer -+ -+ jdnode=mod(idnode+1,mxnode) -+ -+ do k=1,mxnode-1 -+ -+c identity of node of origin of incoming data -+ -+ kdnode=mod(idnode+mxnode-k,mxnode) -+ -+c systolic data pulse to transfer data -+ -+ call MPI_IRECV(buffer(nsize+1),nsize,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Shell_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(buffer(1),nsize,MPI_DOUBLE_PRECISION,jdnode, -+ x Shell_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+c merge the incoming data into current arrays -+ -+ n=nsize -+ -+c block indices -+ -+ kshl1 = (kdnode*ntshl)/mxnode+1 -+ kshl2 = ((kdnode+1)*ntshl)/mxnode -+ -+ do m=kshl1,kshl2 -+ -+ i=nint(buffer(n+1)) -+ j=nint(buffer(n+2)) -+ -+ vxx(i)=buffer(n+3) -+ vyy(i)=buffer(n+4) -+ vzz(i)=buffer(n+5) -+ vxx(j)=buffer(n+6) -+ vyy(j)=buffer(n+7) -+ vzz(j)=buffer(n+8) -+ -+ n=n+8 -+ -+ enddo -+ -+c shift new data to start of buffer -+ -+ do i=1,nsize -+ -+ buffer(i)=buffer(nsize+i) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for passing coordinate updates between -+c nodes during the shake iteration cycle -+c -+c parallel replicated data algorithm -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c MPI version - t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ integer idnode, mxnode, natms,ierr,i,k,j0,k0,n,jdnode,j -+ integer lishap(mxlshp),lashap(mxproc) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ real*8 xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ real*8 txx(mxatms),tyy(mxatms),tzz(mxatms) -+ real*8 buffer(mxbuff) -+ -+c store increments to be transferred -+ -+ do i=1,natms -+ -+ txx(i)=xxt(i) -+ tyy(i)=yyt(i) -+ tzz(i)=zzt(i) -+ -+ enddo -+ -+c transfer coordinate data to all nodes -+ -+ call gsync() -+ -+ do k=1,mxnode-1 -+ -+ i=0 -+ j0=0 -+ if(k.gt.1)j0=lashap(k-1) -+ -+ do j=j0+1,lashap(k) -+ -+ buffer(i+1)=txx(lishap(j)) -+ buffer(i+2)=tyy(lishap(j)) -+ buffer(i+3)=tzz(lishap(j)) -+ i=i+3 -+ -+ enddo -+ -+c inter node communication -+ -+ k0=0 -+ -+ if(k+1.lt.mxnode)k0=lashap(mxnode-k-1) -+ n=3*(lashap(mxnode-k)-k0) -+ jdnode=mod(idnode+k,mxnode) -+ -+c check for zero length messages -+ -+ if(n.gt.0) call MPI_IRECV(buffer(i+1),n,MPI_DOUBLE_PRECISION, -+ x MPI_ANY_SOURCE,Shmove_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ if(i.gt.0) call MPI_SEND(buffer(1),i,MPI_DOUBLE_PRECISION, -+ x jdnode,Shmove_tag+k,MPI_COMM_WORLD,ierr) -+ -+ if(n.gt.0) call MPI_WAIT(request,status,ierr) -+ -+c consolidate transferred data -+ -+ do j=k0+1,lashap(mxnode-k) -+ -+ xxt(lishap(j))=xxt(lishap(j))+buffer(i+1) -+ yyt(lishap(j))=yyt(lishap(j))+buffer(i+2) -+ zzt(lishap(j))=zzt(lishap(j))+buffer(i+3) -+ i=i+3 -+ -+ enddo -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for splicing together coordinate arrays -+c across a number of processors during shake algorithm -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - w. smith march 1993 -+c -+c second version of splice -+c -+c********************************************************************* -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer idnode,natms,listme,listot,j,n3,i,lastot -+ real*8 xxx,yyy,zzz,buffer -+ -+ dimension listme(mxatms),listot(mxatms) -+ dimension xxx(natms),yyy(natms),zzz(natms) -+ dimension buffer(mxbuff) -+ -+c check buffer size -+ -+ if(mxbuff.lt.6*natms) call error(idnode,190) -+ -+c load initial transfer buffers -+ -+ j=3*natms -+ n3=3*natms -+ -+ do i=1,natms -+ -+ if(listot(i).gt.0)then -+ -+ if(listme(i).gt.0)then -+ -+ buffer(j+1)=xxx(i) -+ buffer(j+2)=yyy(i) -+ buffer(j+3)=zzz(i) -+ -+ else -+ -+ buffer(j+1)=0.d0 -+ buffer(j+2)=0.d0 -+ buffer(j+3)=0.d0 -+ -+ endif -+ -+ j=j+3 -+ -+ endif -+ -+ enddo -+ -+ lastot=j-n3 -+ -+c splice constraint coordinates -+ -+ if(lastot.gt.0) call gdsum(buffer(n3+1),lastot,buffer(1)) -+ -+c reconstitute coordinate arrays -+ -+ j=n3 -+ -+ do i=1,natms -+ -+ if(listot(i).gt.0)then -+ -+ xxx(i)=buffer(j+1)/dble(listot(i)) -+ yyy(i)=buffer(j+2)/dble(listot(i)) -+ zzz(i)=buffer(j+3)/dble(listot(i)) -+ -+ j=j+3 -+ -+ endif -+ -+ enddo -+ -+ return -+ end -diff -urN dl_class_1.9.orig/srcmod/metafreeze_module.f dl_class_1.9/srcmod/metafreeze_module.f ---- dl_class_1.9.orig/srcmod/metafreeze_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/metafreeze_module.f 2012-04-24 18:30:31.000000000 +0200 -@@ -0,0 +1,3539 @@ -+ module metafreeze_module -+ -+c--------------------------------------------------------------------- -+c -+c Metafreeze module for metadynamics -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c Adapted for dl_poly classic w. smith dec 2010 -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+c Minimise usage by making everything private -+ -+ private -+ -+c--------------------------------------------------------------------- -+c P u b l i c R o u t i n e s -+c ... unless exposed here. -+c--------------------------------------------------------------------- -+ -+ public :: define_metadynamics ! Called to intitialise this module -+ public :: metafreeze_driver ! Called at every MD time-step -+ -+c--------------------------------------------------------------------- -+c P u b l i c V a r i a b l e s -+c--------------------------------------------------------------------- -+ -+ public :: lmetadyn ! Is this a metadynamics calculation? -+ public :: driven ! Is this atom site involved in metadynamics -+ public :: lstein,ltet,lglobpe,llocpe,ncolvar,nq4,nq6,ntet,hkey -+ public :: meta_step_int,globpe_scale,locpe_scale,ref_W_aug -+ public :: h_aug,wt_Dt -+ -+c Local copies of exluded atom arrays note that these are -+c not indexed by atom number, but by an index which loops -+c over the atoms handles by each MPI rank. -+ public :: mtd_nexatm,mtd_lexatm -+ -+c------------------------------------ -+c Populated from CONTROL file -+c------------------------------------ -+ -+ logical,save :: lmetadyn =.false. ! Master metadynamics flag -+ -+c------------------------------------------------------- -+c Energy, virial, stress and forces from 'local' pe -+c Populated by dlpoly energy routines -+c------------------------------------------------------- -+ -+ -+ public :: eng_loc,vir_loc,stress_loc -+ public :: fxx_loc,fyy_loc,fzz_loc -+ -+c---------------------------------------------------------------------- -+c Data accumulated for local potential energy (computed elsewhere) -+c---------------------------------------------------------------------- -+ -+ real(8),save :: eng_loc,vir_loc -+ real(8),dimension(9),save :: stress_loc -+ real(8),allocatable,dimension(:),save :: fxx_loc,fyy_loc,fzz_loc -+ -+c---------------------------------------------------------------------- -+c Arrays holding information on excluded interactions. Replicated -+c here to avoid a compilation dependency loop which would occur -+c if simply using the arrays already in exclude_module.f -+c---------------------------------------------------------------------- -+ integer,allocatable,dimension(:),save :: mtd_nexatm -+ integer,allocatable,dimension(:,:),save :: mtd_lexatm -+ -+c--------------------------------------------------------------------- -+c P r i v a t e V a r i a b l e s -+c--------------------------------------------------------------------- -+ -+c---------------------------------------------------------------- -+c Collective variables and derivatives of v_aug w.r.t colvars -+c---------------------------------------------------------------- -+ -+ integer,parameter :: maxhis = 150000 ! Size of history arrays -+ real(8),allocatable,dimension(:),save :: colvar,dcolvar -+ real(8),allocatable,dimension(:),save :: colvar_scale -+ -+c---------------------------------------------------------------- -+c Positions and heights of previous Gaussians in colvar space -+c---------------------------------------------------------------- -+ -+ real(8),allocatable,dimension(:,:),save :: colvar_his -+ real(8),allocatable,dimension(:),save :: w_aug -+ -+c------------------------------ -+c Read from CONTROL file -+c------------------------------ -+ -+ integer,save :: ncolvar = 0 ! Total number of collvars -+ logical,save :: lstein =.false. ! Q4/Q6 collective variables -+ logical,save :: ltet =.false. ! Tetrahedral order parameter -+ logical,save :: lglobpe =.false. ! Global potential energy -+ logical,save :: llocpe =.false. ! Local potential energy -+ -+ integer,save :: nq4 = 0 ! Number of Q4 pair types -+ integer,save :: nq6 = 0 ! Number of Q6 pair types -+ integer,save :: ntet = 0 ! Number of zeta triplets -+ -+ real(8),save :: globpe_scale = 1.0d0 ! Scaling factors for local -+ real(8),save :: locpe_scale = 1.0d0 ! and global pe colvars -+ -+ real(8),save :: ref_W_aug=1.0d0 ! Reference Gaussian height -+ real(8),save :: h_aug=1.0d0 ! Gaussian width -+ integer,save :: hkey=0 ! Height control scheme -+ real(8),save :: wt_Dt=100.0d0 ! "Well-tempered" parameter -+ integer,save :: meta_step_int=5 ! interval between depositions -+ -+c---------------------------------------- -+c Read from STEINHARDT or TETRAHEDRAL -+c---------------------------------------- -+ -+c Global Steinhardt order parameters -+ -+ real(8),allocatable,dimension(:),save :: q4_global -+ real(8),allocatable,dimension(:),save :: q6_global -+ -+c Global Tetrahedral order parameters -+ -+ real(8),allocatable,dimension(:),save :: zeta_global -+ -+c Bookkeeping arrays for order parameter computation -+ -+ character(8),allocatable,dimension(:,:),save :: q4label -+ character(8),allocatable,dimension(:,:),save :: q6label -+ character(8),allocatable,dimension(:),save :: zetalabel -+ -+c Inner and outer cutoffs -+ -+ real(8),allocatable,dimension(:,:),save :: q4cutoff -+ real(8),allocatable,dimension(:,:),save :: q6cutoff -+ real(8),allocatable,dimension(:,:),save :: zetacutoff -+ -+c Scaling factors for q4 and q6 -+ -+ real(8),allocatable,dimension(:),save :: q4scale -+ real(8),allocatable,dimension(:),save :: q6scale -+ real(8),allocatable,dimension(:),save :: zetascale -+ -+c Number of nearest neighbours for q4, q6 and zeta -+ -+ integer,allocatable,dimension(:),save :: q4nn,q6nn -+ integer,allocatable,dimension(:),save :: zetann -+ -+c------------------------------------------------------------ -+c Arrays holding data for computation of order parameters -+c------------------------------------------------------------ -+ -+c Steinhardt site-site interaction arrays -+ -+ integer,allocatable,dimension(:,:),save :: q4site -+ integer,allocatable,dimension(:,:),save :: q6site -+ integer,allocatable,dimension(:) ,save :: zetasite -+ -+c Number of included sites -+ -+ integer,allocatable,dimension(:),save :: q4ninc -+ integer,allocatable,dimension(:),save :: q6ninc -+ integer,allocatable,dimension(:),save :: zetaninc -+ -+c Real and imaginary parts of q4bar and q6bar -+ -+ real(8),allocatable,dimension(:,:),save :: ReQ6bar,ImQ6bar -+ real(8),allocatable,dimension(:,:),save :: ReQ4bar,ImQ4bar -+ -+c Max number of entries in co-ordination shell -+ -+ integer,parameter :: mxflist = 50 -+ integer :: mxninc -+ -+c Full neighbour list for Tetrahedral order parameter -+ -+ integer,allocatable,dimension(:) ,save :: nflist -+ integer,allocatable,dimension(:,:),save :: flist -+ -+c------------------------------------- -+c Internal bookkeeping -+c------------------------------------- -+ -+ logical,allocatable,dimension(:),save :: driven ! Metadynamics option -+ integer,save :: meta_step=1 ! Current metadynamics step number -+ real(8),save :: meta_energy ! Value of metadynamics bias potential -+ -+ integer,save :: wl_nbins=30 ! Number of bins for WL recursion -+ integer,save :: wl_cycle=0 ! Current WL cycle -+ real(8),save :: wl_range=0.175 ! range of WL -+ real(8),allocatable,dimension(:),save :: wl_bin ! WL bins -+ -+c-------------------------------------- -+c Miscellaneous internal variables -+c-------------------------------------- -+ -+ integer,allocatable,dimension(:) :: buff ! Comms buffer -+ -+c File units -+ -+ integer,save :: stn = 91 ! STEINHARDT -+ integer,save :: mtd = 92 ! METADYNAMICS -+ integer,save :: zta = 93 ! ZETA -+ integer,save :: wlb = 94 ! WL_BINS.DAT -+ -+c Error flag -+ -+ integer,dimension(100) :: ierr = 0 -+ -+c Local store of comms variables -+c Assuming no task farming, comms will require changing if farmed -+ -+ integer, save :: myrank,commsize -+ logical, save :: onroot -+ real(8),save :: kt -+ -+ contains -+ -+ Subroutine Metafreeze_Driver -+ x (imcon,natms,temp,nstep,engcfg,virtot,engord,virord) -+ -+c--------------------------------------------------------------------- -+c Top level metadynamics routine called after evaluation of all -+c other energetic and force terms within the main molecular -+c dynamics loop. -+c -+c 1. Computes the ncolvar order parameters -+c 2. Deposits a new Gaussian at the current collective variables -+c as the current number of steps reaches meta_step_int -+c 3. Computed the bias potential and its derivative w.r.t. the -+c ncolvar collective variables. -+c 4. Computes the forces stresses and virial resulting from the -+c bias -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : boltz -+ use config_module, only : fxx,fyy,fzz,stress -+ -+ implicit none -+ -+ integer,intent(in) :: nstep,imcon,natms -+ real(8),intent(in) :: engcfg,virtot,temp -+ real(8),intent(out) :: engord,virord -+ -+c Local variables -+ -+ integer :: k,iq,itet,ibin,nfail,my_meta_step -+ integer,save :: nlastg = 0 -+ real(8) :: height,buff1,wl_mean -+ logical :: flat,safe -+ -+c------------------------------------------------------ -+c Compute order parameters / collective variables -+c------------------------------------------------------ -+ -+c Steinhardt order parameters -+ -+ if ( nq4>0.or.nq6>0 ) call compute_steinhardt(imcon,natms) -+ -+ k = 1 -+ do iq = 1,nq4 -+ colvar(k) = q4_global(iq) -+ k = k + 1 -+ end do -+ do iq = 1,nq6 -+ colvar(k) = q6_global(iq) -+ k = k + 1 -+ end do -+ -+c Tetrahedral order parameters -+ -+ if ( ntet > 0 ) then -+ call compute_tet_nlist(imcon,natms) -+ call compute_tetrahedral(imcon,natms) -+ end if -+ -+ do itet = 1,ntet -+ colvar(k) = zeta_global(itet) -+ k = k + 1 -+ end do -+ -+c Energy order parameters -+ -+ if (lglobpe) then -+ colvar(k) = engcfg -+ k = k + 1 -+ end if -+ if (llocpe) then -+ -+c Global reduction of local virial and energy -+ -+ if ( commsize > 1 ) call gdsum(eng_loc,1,buff1) -+ if ( commsize > 1 ) call gdsum(vir_loc,1,buff1) -+ colvar(k) = eng_loc -+ k = k + 1 -+ end if -+ -+ if ( k-1/=ncolvar ) call Mfrz_Error(2500,0.d0) -+ -+ if ( hkey==1 ) then -+ k = int(dble(wl_nbins)*colvar(1)/wl_range) + 1 -+ if ( k < wl_nbins) wl_bin(k) = wl_bin(k) + 1.0d0 -+ end if -+ -+c-------------------------------------------------------- -+c Deposit a new Gaussian if now is the correct time -+c-------------------------------------------------------- -+ -+ if ( (mod(nstep,meta_step_int)==0).and.(nstep>nlastg) ) then -+ nlastg = nstep ! Avoid multiple depositions at the -+ ! same timestep (relaxed shell model) -+ -+ select case (hkey) -+ -+ case(0) -+ -+c Always deposit Gaussians of the same height -+ -+ height = ref_W_aug -+ -+ case(1) -+ -+c Wang-Landau style recursion -+ -+ open(unit=wlb,file='WL_BINS.DAT',status='replace') -+ -+ do ibin = 1,wl_nbins -+ write(wlb,*)ibin,wl_bin(ibin) -+ end do -+ -+ close(wlb) -+ -+ if ( ncolvar/=1 ) then -+ call Mfrz_Error(2501,0.d0) -+ else -+ -+ height = ref_W_aug*(0.5d0**dble(wl_cycle)) -+ -+ nfail = 0 -+ wl_mean = 0.d0 -+ do ibin = 6,wl_nbins-5 -+ wl_mean = wl_mean + wl_bin(ibin) -+ nfail = nfail + 1 -+ end do -+ wl_mean = wl_mean/dble(nfail) -+ -+ nfail = 0 -+ flat = .true. -+ do ibin = 6,wl_nbins-5 -+ if ( wl_bin(ibin) < 0.8d0*wl_mean ) then -+ if ( nfail > 2 ) flat = .false. -+ nfail = nfail + 1 -+ end if -+ end do -+ -+ if ( flat.and.(sum(wl_bin)>50.0d0) ) then -+ wl_cycle = wl_cycle + 1 -+ wl_bin = 0.0d0 -+ end if -+ -+ height = ref_W_aug*(0.5d0**dble(wl_cycle)) -+ -+ end if -+ -+ case(2) -+ -+c Well-tempered metadynamics -+ -+ meta_energy = 0.0d0 -+ call compute_bias_potential() -+ -+ height = ref_W_aug*exp(-meta_energy/wt_Dt) -+ -+ case default -+ -+ call Mfrz_Error(2502,0.d0) -+ -+ end select -+ -+ call deposit_gaussian(height,temp) -+ my_meta_step = (meta_step-1)/commsize + 1 -+ safe = ( maxhis >= my_meta_step ) -+ call gstate(safe) -+ if ( .not.safe ) call Mfrz_Error(2503,0.d0) -+ -+ end if -+ -+c----------------------------------------------------------- -+c Compute the bias potential and its derivatives w.r.t. -+c to the ncolvar collective variables. -+c----------------------------------------------------------- -+ -+ call compute_bias_potential() -+ -+c----------------------------------------------------------- -+c Add in the forces, stresses and virial contributions -+c from this derivative. -+c----------------------------------------------------------- -+ -+ virord = 0.0d0 ! Zero the virial -+ -+c Must compute contributions from pe order parameters -+c first before we change any forces. -+ -+ k = nq4+nq6+ntet+1 -+ -+c Energy order parameters -+ -+ if (lglobpe) then -+ -+ fxx(:) = fxx(:)*(1.0d0+dcolvar(k)) -+ fyy(:) = fyy(:)*(1.0d0+dcolvar(k)) -+ fzz(:) = fzz(:)*(1.0d0+dcolvar(k)) -+ -+c correct for later summation: -+ -+ virord = virord+dcolvar(k)*virtot/dble(commsize) -+ stress = stress*(1.0d0+dcolvar(k)) -+ -+ end if -+ if (llocpe) then -+ -+ fxx(:) = fxx(:) + fxx_loc(:)*dcolvar(k) -+ fyy(:) = fyy(:) + fyy_loc(:)*dcolvar(k) -+ fzz(:) = fzz(:) + fzz_loc(:)*dcolvar(k) -+ -+c correct for later summation: -+ -+ virord = virord + dcolvar(k)*vir_loc/dble(commsize) -+ stress = stress + stress_loc*dcolvar(k) -+ -+ end if -+ -+c Steinhardt order parameters -+ -+ if ( nq4>0.or.nq6>0 ) call -+ x compute_steinhardt_forces(imcon,natms,engord,virord) -+ -+c Tetrahedral order parameters -+ -+ if ( ntet > 0 ) call -+ x compute_tetrahedral_forces(imcon,natms,engord,virord) -+ -+c global reduction of virord -+ -+ if ( commsize > 1 ) call gdsum(virord,1,buff1) -+ -+ engord = meta_energy -+ -+c write(0,'("DEBUG : engord = ",F12.6)')engord/(temp*boltz) -+ -+ return -+ -+ end Subroutine Metafreeze_Driver -+ -+ Subroutine Deposit_Gaussian(height,temp) -+ -+c--------------------------------------------------------------------- -+c -+c Deposits a new Gaussian at the current collective variables and -+c appends to the METADYNAMICs file. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : boltz -+ -+ implicit none -+ -+ real(8),intent(in) :: height,temp -+ integer :: my_meta_step -+ character(11) :: fmtstring -+ -+c store current order parameters and Gaussian height -+ -+ if ( mod(meta_step-1,commsize) == myrank ) then -+ -+ my_meta_step = (meta_step-1)/commsize + 1 -+ w_aug(my_meta_step) = height -+ colvar_his(:,my_meta_step) = colvar(:) -+ -+ end if -+ -+ if (onroot) then -+ -+c Create format string -+ -+ write(fmtstring,'("(I8,",I1,"E15.6)")')ncolvar+1 -+ -+c write METADYNAMICS file -+ -+ open(unit=mtd,file='METADYNAMICS',status='old',position= -+ x 'append',iostat=ierr(1)) -+ write(unit=mtd,fmt=fmtstring)meta_step,colvar(:), -+ x height/(temp*boltz) -+ close(unit=mtd) -+ -+ end if -+ -+ meta_step = meta_step+1 -+ -+ return -+ -+ end Subroutine Deposit_Gaussian -+ -+ Subroutine Compute_Bias_Potential() -+ -+c--------------------------------------------------------------------- -+c -+c Computes the augmenting bias potential as a function of the -+c collective variables. Also computes the derivative of the bias -+c potential w.r.t. the collective variables required to compute -+c the metadynamics forces. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ integer :: istep,ic,k,my_meta_step -+ real(8) :: vsq,exp1,dWpsq -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+ allocate(buff1(1:2*(ncolvar+1)),stat=ierr(1)) -+ allocate(buff2(1:2*(ncolvar+1)),stat=ierr(2)) -+ -+ if (any(ierr/=0)) call Mfrz_Error(2504,0.d0) -+ -+c Set squared-width of gaussians -+ -+ dWpsq = 1.0d0/h_aug**2 -+ meta_energy = 0.0d0 -+ -+c Zero accumulators of derivative w.r.t. each order parameter -+ -+ dcolvar(:) = 0.0d0 -+ my_meta_step = (meta_step-1)/commsize + 1 -+ do istep=1,my_meta_step -+ -+ vsq = 0.0d0 -+ do ic = 1,ncolvar -+ vsq = vsq + ( colvar_scale(ic)*(colvar(ic) - -+ x colvar_his(ic,istep)) )**2 -+ end do -+ exp1 = w_aug(istep)*exp(-0.5d0*vsq*dWpsq) -+ do ic = 1,ncolvar -+ dcolvar(ic) = dcolvar(ic) - (colvar_scale(ic)**2)*exp1* -+ x (colvar(ic) - colvar_his(ic,istep))*dWpsq -+ end do -+ -+ meta_energy = meta_energy + exp1 -+ -+ end do -+ -+ buff1(1) = meta_energy -+ k = 2 -+ do ic = 1,ncolvar -+ buff1(k) = dcolvar(ic) -+ k = k + 1 -+ end do -+ -+ if ( commsize > 1 ) then -+ call gdsum(buff1,ncolvar+1,buff2) -+ end if -+ -+ meta_energy = buff1(1) -+ -+ k = 2 -+ do ic=1,ncolvar -+ dcolvar(ic) = buff1(k) -+ k = k + 1 -+ end do -+ -+c write(0,'("DEBUG : CV derivs = ",6F15.6)')dcolvar -+ -+ deallocate(buff1,buff2,stat=ierr(1)) -+ -+ return -+ -+ end Subroutine Compute_Bias_Potential -+ -+ Subroutine Define_Metadynamics(tm,ts,natms,ntpatm,temp) -+ -+c--------------------------------------------------------------------- -+c Processes the metadynamics input file. This is done in several -+c stages. -+c 1. Process the metadynamics control data read from the CONTROL -+c file, which defines the number of collective variables and -+c indicates if we need to read from auxilliary input files -+c (e.g. STEINHARDT or ZETA) which define order parameters. -+c 2. Read and process these auxilliary files. -+c 3. Process the information obtained from the CONTROL file which -+c controls the properties of the Gaussians used to build the -+c bias potential. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c Adapted w. smith - jan 2011 -+c -+c--------------------------------------------------------------------- -+ -+ use site_module -+ use config_module, only : ltype -+ use parse_module -+ -+ implicit none -+ -+ integer,intent(in) :: tm,ts,natms,ntpatm -+ real(8),intent(in) :: temp -+ -+c Local variables -+ -+ integer :: isite,jsite,ilin,i,iq,iatm0,iatm1,istrd,iatm,k,n,idum -+ logical :: lexist,go,safe -+ real(8) :: waug,dummy(1) -+ -+c Allocate the driven list. Modifications elsewhere in DLPOLY always -+c check if sites are driven (for accumulation of local PE) and hence -+c this should be allocated if this is a metadynamics run or not. -+ -+ allocate(driven(1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2505,0.d0) -+ driven = .false. -+ -+c Do nothing else if the metafreeze flag has not been set in CONTROL -+ -+ if (.not.lmetadyn) then -+ return -+ end if -+ -+ myrank=tm -+ commsize = ts -+ onroot = (myrank==0) -+ -+ -+c$$$ DEBUG -+cc$$$ if (onroot) write(0,'("================================")') -+cc$$$ if (onroot) write(0,'("Available sites from site module")') -+cc$$$ if (onroot) write(0,'("================================")') -+cc$$$ if (onroot) then -+cc$$$ do isite = 1,size(unqatm) -+cc$$$ write(0,'("Site index ",i4,": ",a8)')isite,unqatm(isite) -+cc$$$ end do -+cc$$$ end if -+ -+c Cannot bias the global and local PE in the same run. -+ -+ if ( lglobpe.and.llocpe ) call Mfrz_Error(2509,0.d0) -+ -+c Allocate local force arrays if anything is driven. -+ -+ allocate(fxx_loc(1:mxatms),stat=ierr(1)) -+ allocate(fyy_loc(1:mxatms),stat=ierr(2)) -+ allocate(fzz_loc(1:mxatms),stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2510,0.d0) -+ -+c Allocate arrays to hold collective variables -+ -+ allocate( colvar(1:ncolvar),stat=ierr(1)) -+ allocate(dcolvar(1:ncolvar),stat=ierr(2)) -+ allocate(colvar_his(1:ncolvar,1:maxhis),stat=ierr(3)) -+ allocate(colvar_scale(1:ncolvar),stat=ierr(4)) -+ allocate(w_aug(1:maxhis),stat=ierr(5)) -+ if (any(ierr/=0)) call Mfrz_Error(2511,0.d0) -+ -+c Allocate Wang-Landau bin array -+ -+ allocate(wl_bin(1:wl_nbins),stat=ierr(1)) -+ if (any(ierr/=0)) call Mfrz_Error(2512,0.d0) -+ wl_bin = 0.0d0 -+ -+c------------------------------------------------------------- -+c Process Steinhardt order parameter settings if present -+c------------------------------------------------------------- -+ -+ if ( lstein ) then -+ -+ allocate(q4label(1:2,1:nq4),stat=ierr(1)) -+ allocate(q6label(1:2,1:nq6),stat=ierr(2)) -+ allocate(q4cutoff(1:2,1:nq4),stat=ierr(3)) -+ allocate(q6cutoff(1:2,1:nq6),stat=ierr(4)) -+ allocate(q4scale(1:nq4),stat=ierr(5)) -+ allocate(q6scale(1:nq6),stat=ierr(6)) -+ allocate(q4nn(1:nq4),stat=ierr(7)) -+ allocate(q6nn(1:nq6),stat=ierr(8)) -+ allocate(q4ninc(1:nq4),stat=ierr(9)) -+ allocate(q6ninc(1:nq6),stat=ierr(10)) -+ allocate(buff(1:max(nq4,nq6)),stat=ierr(11)) -+ allocate(q4_global(1:nq4),stat=ierr(12)) -+ allocate(q6_global(1:nq6),stat=ierr(13)) -+ allocate(ReQ4Bar(-4:+4,1:nq4),stat=ierr(14)) -+ allocate(ImQ4Bar(-4:+4,1:nq4),stat=ierr(15)) -+ allocate(ReQ6Bar(-6:+6,1:nq6),stat=ierr(16)) -+ allocate(ImQ6Bar(-6:+6,1:nq6),stat=ierr(17)) -+ if (any(ierr/=0)) call Mfrz_Error(2515,0.d0) -+ -+c Open STEINHARDT file and process -+ -+ if (onroot) then -+ open(unit=stn,file='STEINHARDT',status='old',iostat=ierr(1)) -+ else -+ ierr(1)=0 -+ endif -+ call gisum(ierr(1),1,ierr(2)) -+ if ( ierr(1)/=0 ) call Mfrz_Error(2516,0.d0) -+ -+ ilin = 1 -+ safe=.true. -+ if (nq4>0) then -+ call getrec(safe,myrank,stn) ! Ignore q4 comment line -+ ilin = ilin + 1 -+ do i = 1,nq4 -+ call getrec(safe,myrank,stn) -+ if (safe) then -+ call getword(q4label(1,i),record,8,lenrec) -+ call getword(q4label(2,i),record,8,lenrec) -+ q4cutoff(1,i)=dblstr(record,lenrec,idum) -+ q4cutoff(2,i)=dblstr(record,lenrec,idum) -+ q4scale(i)=dblstr(record,lenrec,idum) -+ q4nn(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (nq6>0) then -+ call getrec(safe,myrank,stn) ! Ignore q6 comment line -+ ilin = ilin + 1 -+ do i = 1,nq6 -+ call getrec(safe,myrank,stn) -+ if (safe) then -+ call getword(q6label(1,i),record,8,lenrec) -+ call getword(q6label(2,i),record,8,lenrec) -+ q6cutoff(1,i)=dblstr(record,lenrec,idum) -+ q6cutoff(2,i)=dblstr(record,lenrec,idum) -+ q6scale(i)=dblstr(record,lenrec,idum) -+ q6nn(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (onroot) close(unit=stn) -+ -+ call gisum(ierr(1),ilin-1,ierr(ilin)) -+ do i = 1,ilin-1 -+ if (ierr(i)/=0) then -+ call Mfrz_Error(2521,dble(i)) -+ end if -+ end do -+ -+c Create array indicating which site-site connections use -+c which set of q4 cut-offs, scaling factors and num neighbours. -+ -+ allocate(q4site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2517,0.d0) -+ q4site(:,:) = 0 -+ -+ do isite = 1,ntpatm -+ do jsite = isite,ntpatm -+ do iq = 1,nq4 -+ if ((q4label(1,iq)==unqatm(isite)).and. -+ x (q4label(2,iq)==unqatm(jsite))) then -+ q4site(jsite,isite) = iq -+ q4site(isite,jsite) = iq -+ driven(jsite) = .true. -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ end do -+ -+ allocate(q6site(1:size(unqatm),1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2518,0.d0) -+ q6site(:,:) = 0 -+ do isite = 1,ntpatm -+ do jsite = isite,ntpatm -+ do iq = 1,nq6 -+ if ((q6label(1,iq)==unqatm(isite)).and. -+ x q6label(2,iq)==unqatm(jsite)) then -+ q6site(jsite,isite) = iq -+ q6site(isite,jsite) = iq -+ driven(jsite) = .true. -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ end do -+ -+c Count number of included sites -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ q4ninc = 0 -+ q6ninc = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ isite = ltype(iatm) -+ -+ do iq = 1,nq4 -+ if (unqatm(isite)==q4label(1,iq)) q4ninc(iq) = q4ninc(iq) + 1 -+ end do -+ do iq = 1,nq6 -+ if (unqatm(isite)==q6label(1,iq)) q6ninc(iq) = q6ninc(iq) + 1 -+ end do -+ -+ end do -+ -+ if ( commsize > 0 ) then -+ if (nq4>0) call gisum(q4ninc,nq4,buff(1:nq4)) -+ if (nq6>0) call gisum(q6ninc,nq6,buff(1:nq6)) -+ end if -+ -+ deallocate(buff,stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) -+ -+ end if ! end if steinhardt order parameters -+ -+ if ( ltet ) then -+ -+ allocate(zetacutoff(1:2,1:ntet),stat=ierr(1)) -+ allocate(zeta_global(1:ntet),stat=ierr(2)) -+ allocate(zetascale(1:ntet),stat=ierr(3)) -+ allocate(zetalabel(1:ntet),stat=ierr(4)) -+ allocate(zetann(1:ntet),stat=ierr(5)) -+ allocate(zetaninc(1:ntet),stat=ierr(6)) -+ allocate(buff(1:ntet),stat=ierr(7)) -+ if (any(ierr/=0)) call Mfrz_Error(2522,0.d0) -+ -+c Open ZETA file and process -+ -+ if (onroot) then -+ open(unit=zta,file='ZETA',status='old',iostat=ierr(1)) -+ else -+ ierr(1)=0 -+ endif -+ call gisum(ierr(1),1,ierr(2)) -+ if ( ierr(1)/=0 ) call Mfrz_Error(2523,0.d0) -+ -+ ilin = 1 -+ safe=.true. -+ if (ntet>0) then -+ call getrec(safe,myrank,zta) ! Ignore comment line -+ ilin = ilin + 1 -+ do i = 1,ntet -+ call getrec(safe,myrank,zta) -+ if (safe) then -+ call getword(zetalabel(i),record,8,lenrec) -+ zetacutoff(1,i)=dblstr(record,lenrec,idum) -+ zetacutoff(2,i)=dblstr(record,lenrec,idum) -+ zetascale(i)=dblstr(record,lenrec,idum) -+ zetann(i)=intstr(record,lenrec,idum) -+ ierr(ilin)=0 -+ else -+ ierr(ilin)=1 -+ endif -+ ilin = ilin + 1 -+ end do -+ end if -+ if (onroot) close(unit=zta) -+ -+ call gisum(ierr(1),ilin-1,ierr(ilin)) -+ do i = 1,ilin-1 -+ if (ierr(i)/=0) then -+ call Mfrz_Error(2529,dble(i)) -+ end if -+ end do -+ -+c Create array indicating which site-site connections use -+c which set of q4 cut-offs, scaling factors and num neighbours. -+ -+ allocate(zetasite(1:size(unqatm)),stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2524,0.d0) -+ zetasite(:) = 0 -+ -+ do isite = 1,size(unqatm) -+ do iq = 1,ntet -+ if (zetalabel(iq)==unqatm(isite)) then -+ zetasite(isite) = iq -+ driven(isite) = .true. -+ end if -+ end do -+ end do -+ -+c Count number of included sites -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ zetaninc(:) = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ isite = ltype(iatm) -+ -+ do iq = 1,ntet -+ if (unqatm(isite)==zetalabel(iq)) -+ x zetaninc(iq) = zetaninc(iq) + 1 -+ end do -+ end do -+ -+ if (commsize>1) then -+ if (ntet>0) call gisum(zetaninc,ntet,buff) -+ end if -+ -+c$$$ do iq = 1,ntet -+c$$$ write(0,'("Number of sites for zeta type ",I5," : ",I5)') -+c$$$ x iq,zetaninc(iq) -+c$$$ end do -+ -+ mxninc = max(100,4*maxval(zetaninc)/commsize) -+ allocate(nflist(1:mxninc),stat=ierr(1)) -+ allocate(flist(1:mxflist,1:mxninc),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2525,0.d0) -+ -+ deallocate(buff,stat=ierr(1)) -+ if (ierr(1)/=0) call Mfrz_Error(2519,0.d0) -+ -+ end if ! end if tetrahedral order parameters -+ -+c Check total number of collective variables (ncolvar) matches total -+c number specified by nq4, nq6, ntet and potential energy flags. -+ -+ k = 0 -+ if (llocpe ) k = k + 1 -+ if (lglobpe ) k = k + 1 -+ k = k + ntet + nq4 + nq6 -+ if ( k /= ncolvar ) call Mfrz_Error(2527,0.d0) -+ -+c populate colvar_scale -+ -+ k = 1 -+ do iq = 1,nq4 -+ colvar_scale(k) = q4scale(iq) -+ k = k + 1 -+ end do -+ do iq = 1,nq6 -+ colvar_scale(k) = q6scale(iq) -+ k = k + 1 -+ end do -+ do iq = 1,ntet -+ colvar_scale(k) = zetascale(iq) -+ k = k + 1 -+ end do -+ if (lglobpe) then -+ colvar_scale(k) = globpe_scale -+ k = k + 1 -+ end if -+ if (llocpe) then -+ colvar_scale(k) = locpe_scale -+ k = k + 1 -+ end if -+ -+c write(0,*)lglobpe,llocpe -+c write(0,'("DEBUG : CV Scaling factors : ",6F15.6)')colvar_scale(:) -+ -+ -+c Convert into internal units -+ -+ wt_Dt = wt_Dt*temp*boltz -+ ref_W_aug = ref_W_aug*temp*boltz -+ kt = temp*boltz -+ -+c--------------------------------------------------------------------- -+c Purge the METADYNAMICS file or re-open and read if this is a -+c restart. N.B. we assume a restart if REVOLD if present and -+c ignore keyres. -+c--------------------------------------------------------------------- -+ -+ if (onroot) then -+ inquire(file='REVOLD',exist=lexist) -+ else -+ lexist=.true. -+ endif -+ call gstate(lexist) -+ -+ if (lexist) then -+ -+c read contents of METADYNAMICS file -+ -+ if (onroot) then -+ -+ open(unit=mtd,file='METADYNAMICS',status='old',iostat=ierr(1)) -+ -+ k = 0 -+ do -+ read(unit=mtd,fmt=*,end=10)meta_step,colvar(:),waug -+ waug = waug*temp*boltz -+ if (k == 0) then -+ n = (meta_step-1)/commsize + 1 -+ colvar_his(:,n)=colvar(:) -+ w_aug(n)=waug -+ else -+ dummy(1)=dble(meta_step) -+ call csend(17947,dummy,1,k,idum) -+ call csend(17948,colvar,ncolvar,k,ierr(3)) -+ dummy(1)=waug -+ call csend(17949,dummy,1,k,ierr(4)) -+ end if -+ -+ k = k + 1 -+ if (k == commsize) k = 0 -+ end do -+ -+ 10 close(unit=mtd) -+ -+ do k=1,commsize-1 -+ dummy(1)=-dble(meta_step) -+ call csend(17947,dummy,1,k,ierr(2)) -+ end do -+ -+ else -+ -+ go = .true. -+ do while(go) -+ -+ call crecv(17947,dummy,1) -+ meta_step=nint(dummy(1)) -+ ierr(2)=0 -+ -+ if ( meta_step < 0 ) then -+ meta_step = -meta_step -+ go = .false. -+ else -+ call crecv(17948,colvar,ncolvar) -+ ierr(3)=0 -+ call crecv(17949,dummy,1) -+ waug=dummy(1) -+ ierr(4)=0 -+ n = (meta_step-1)/commsize + 1 -+ colvar_his(:,n)=colvar(:) -+ w_aug(n)=waug -+ end if -+ -+ enddo -+ -+ end if -+ call gisum(ierr(1),4,ierr(5)) -+ do i=1,4 -+ if (ierr(i)/=0) call Mfrz_Error(2531,0.d0) -+ enddo -+ meta_step = meta_step + 1 -+ -+ else -+ -+c purge any existing METADYNAMICS file -+ -+ if (onroot) then -+ -+ open(unit=mtd,file='METADYNAMICS',status='replace', -+ x iostat=ierr(1)) -+ close(unit=mtd) -+ -+ end if -+ -+ end if -+ -+ return -+ -+ end Subroutine Define_Metadynamics -+ -+ Function Fc(r,inner_cut,outer_cut) -+ -+c--------------------------------------------------------------------- -+c -+c Computes the smooth cut-off function used when computing an order -+c parameter as a function of pair separation. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 -+ real(8),intent(in) :: r,inner_cut,outer_cut -+ real(8) :: fc -+ -+ if ( r > outer_cut ) then -+ fc = 0.0d0 -+ elseif ( r > inner_cut ) then -+ fc = 0.5d0*cos((r-inner_cut)*Pi/(outer_cut-inner_cut))+0.5d0 -+ elseif ( r <= inner_cut ) then -+ fc = 1.0d0 -+ else -+ call Mfrz_Error(2532,r) -+ end if -+ -+ return -+ -+ end Function Fc -+ -+ Function Dfc(r,inner_cut,outer_cut) -+ -+c--------------------------------------------------------------------- -+c Computes the derivative of the smooth cut-off function used when -+c computing an order parameter as a function of pair separation. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley -+c -+c--------------------------------------------------------------------- -+ -+ implicit none -+ -+ real(8),parameter :: Pi=3.141592653589793238462643383279502884d0 -+ real(8),intent(in) :: r,inner_cut,outer_cut -+ real(8) :: dfc -+ -+ if ( r > outer_cut ) then -+ dfc = 0.0d0 -+ elseif ( r > inner_cut ) then -+ dfc = -0.5d0*sin((r-inner_cut)*Pi/(outer_cut-inner_cut)) -+ x *Pi/(outer_cut-inner_cut) -+ else -+ dfc = 0.0d0 -+ end if -+ -+ return -+ -+ end Function Dfc -+ -+ subroutine compute_steinhardt(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c Computes nq4 Q4 and nq6 Q6 global order parameters. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use setup_module, only : mxlist -+ use utility_module, only : images -+ -+ implicit none -+ -+c Arguments -+ -+ integer,intent(in) :: imcon,natms -+ -+c sqrt(pi/13) , sqrt(pi/9) , 1/3 -+ -+ real(8),parameter :: rpibtt = 0.491590249d0 -+ real(8),parameter :: rpibn = 0.590817950d0 -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ -+c Prefactors for spherical harmonics with l = 6 -+ -+ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 -+ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 -+ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 -+ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 -+ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 -+ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 -+ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 -+ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 -+ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 -+ -+c Prefactors for spherical harmonics with l = 4 -+ -+ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 -+ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 -+ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 -+ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 -+ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 -+ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 -+ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 -+ -+c Maximum no. of entries in solvation list -+ -+ integer :: maxneigh -+ -+c Solvation shell information - Q4 -+ -+ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 -+ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 -+ integer,allocatable,dimension(:) :: solvlist4,solvtype4 -+ integer :: isolvmax4 -+ -+c Solvation shell information - Q6 -+ -+ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 -+ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 -+ integer,allocatable,dimension(:) :: solvlist6,solvtype6 -+ integer :: isolvmax6 -+ -+c separation vectors and powers thereof -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8) :: x,y,z -+ real(8) :: x2,y2,z2,x3,y3,z3 -+ real(8) :: x4,y4,z4,x5,y5,z5 -+ real(8) :: x6,y6,z6 -+ real(8) :: invrc,invrs -+ -+c list of separation vectors -+ integer :: numdst -+ integer,allocatable,dimension(:) :: dstlst -+ -+ -+c Comms buffers -+ -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+c Temporaries -+ -+ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar -+ -+c Loop counters -+ -+ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv -+ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type -+ integer :: itype,jtype,l,m,iq -+ -+ maxneigh = 100 ! Max number of atoms in coordination shell -+ -+ ierr = 0 ! Error flags -+ -+ -+c DQ - modified 10/12/11, arrays now big enough -+c to hold maximum number of neighbours plus -+c maximum number of excluded atoms. -+ allocate(xdf(1:mxlist+mxexcl),stat=ierr(1)) -+ allocate(ydf(1:mxlist+mxexcl),stat=ierr(2)) -+ allocate(zdf(1:mxlist+mxexcl),stat=ierr(3)) -+ -+c DQ - modified 10/12/11, array to hold a list of -+c all atom entries in the above three arrays -+ allocate(dstlst(1:mxlist+mxexcl),stat=ierr(4)) -+ -+ allocate(solvx4(1:maxneigh),stat=ierr(5)) -+ allocate(solvy4(1:maxneigh),stat=ierr(6)) -+ allocate(solvz4(1:maxneigh),stat=ierr(7)) -+ allocate(solvrmag4(1:maxneigh),stat=ierr(8)) -+ allocate(solvimag4(1:maxneigh),stat=ierr(9)) -+ allocate(solvrsq4 (1:maxneigh),stat=ierr(10)) -+ allocate(solvlist4(1:maxneigh),stat=ierr(11)) -+ allocate(solvtype4(1:maxneigh),stat=ierr(12)) -+ -+ allocate(solvx6(1:maxneigh),stat=ierr(13)) -+ allocate(solvy6(1:maxneigh),stat=ierr(14)) -+ allocate(solvz6(1:maxneigh),stat=ierr(15)) -+ allocate(solvrmag6(1:maxneigh),stat=ierr(16)) -+ allocate(solvimag6(1:maxneigh),stat=ierr(17)) -+ allocate(solvrsq6 (1:maxneigh),stat=ierr(18)) -+ allocate(solvlist6(1:maxneigh),stat=ierr(19)) -+ allocate(solvtype6(1:maxneigh),stat=ierr(20)) -+ if (any(ierr/=0)) call Mfrz_Error(2533,0.d0) -+ -+ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) -+ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) -+ -+c Zero accumulators used in Steinhardt order parameters -+ -+ ReQ6bar = 0.0d0 -+ ImQ6bar = 0.0d0 -+ ReQ4bar = 0.0d0 -+ ImQ4bar = 0.0d0 -+ -+c Set atoms looped over by current rank -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+c -------------------------------------------------------------- -+c Build a list of the required connections to iatm. This -+c differs depending on the version of DLPOLY we are using. -+c First we loop over atoms in the neighbour list of iatm. -+c--------------------------------------------------------------- -+ -+ ii = ii + 1 -+ isite=ltype(iatm) -+ limit=lentry(ii) -+ nn = 0 -+ do k = 1,limit -+ -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ dstlst(nn) = jatm -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+c -------------------------------------------------------------- -+c Next we loop over the excluded atom list of iatm and add -+c and pairs needed for computation of the current OP. -+c--------------------------------------------------------------- -+ -+ccc DEBUG -+ccc write(0,'("atom ",I5," has ",I5," excluded interactions")') -+ccc x iatm,mtd_nexatm(iatm) -+ -+ do k = 1,mtd_nexatm(ii) -+ -+ jatm = mtd_lexatm(ii,k) -+ jsite = ltype(jatm) -+ -+ccc DEBUG -+ccc write(0,'("Interaction with atom ",I5," is excluded. ")')jatm -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ dstlst(nn) = jatm -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+ccc DEBUG -+ccc write(0,'("Num neighbours to consider for atom ",I5," : ",I5)') -+ccc x iatm,nn -+ -+ numdst = nn -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ nn = 0 -+ isolvmax4 = 0 -+ isolvmax6 = 0 -+ isolv4 = 0 -+ isolv6 = 0 -+ -+ do k = 1,numdst -+ jatm = dstlst(k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ q4type = q4site(jsite,isite) -+ q6type = q6site(jsite,isite) -+ -+ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) -+ -+ if (nq4>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q4cutoff(2,q4type)**2 ) then -+ isolv4 = isolv4 + 1 -+ solvlist4(isolv4) = jatm -+ solvrsq4(isolv4) = tmpsq -+ solvrmag4(isolv4) = sqrt(tmpsq) -+ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) -+ solvx4(isolv4) = xdf(nn) -+ solvy4(isolv4) = ydf(nn) -+ solvz4(isolv4) = zdf(nn) -+ solvtype4(isolv4) = q4type -+ end if -+ end if -+ -+ if (nq6>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q6cutoff(2,q6type)**2 ) then -+ isolv6 = isolv6 + 1 -+ solvlist6(isolv6) = jatm -+ solvrsq6(isolv6) = tmpsq -+ solvrmag6(isolv6) = sqrt(tmpsq) -+ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) -+ solvx6(isolv6) = xdf(nn) -+ solvy6(isolv6) = ydf(nn) -+ solvz6(isolv6) = zdf(nn) -+ solvtype6(isolv6) = q6type -+ end if -+ end if -+ isolvmax4 = isolv4 -+ isolvmax6 = isolv6 -+ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) -+ x call Mfrz_Error(2535,0.d0) -+ -+ end do ! end loop over k -+ -+ccc write(0,'("Num in range for OPs on atom ",I5," : ",I5)') -+ccc x iatm,isolvmax4 -+ -+ -+c--------------------------------------------------------- -+c Compute Q4 Steinhardt order parameters -+c--------------------------------------------------------- -+ -+ if ( (nq4>0).and.isolvmax4>0 ) then -+ -+ do isolv4 = 1,isolvmax4 -+ -+ jatm = solvlist4(isolv4) -+ itype = solvtype4(isolv4) -+ -+ invrc = solvimag4(isolv4)**6 -+ invrs = solvimag4(isolv4)**4 -+ -+ x = solvx4(isolv4) -+ y = solvy4(isolv4) -+ z = solvz4(isolv4) -+ -+ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-4/+4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) -+ -+ ReQ4bar(-4,itype) = ReQ4bar(-4,itype) + f_ij*ReYlm -+ ImQ4bar(-4,itype) = ImQ4bar(-4,itype) + f_ij*ImYlm -+ -+ ReQ4bar(+4,itype) = ReQ4bar(+4,itype) + f_ij*ReYlm -+ ImQ4bar(+4,itype) = ImQ4bar(+4,itype) - f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-3/+3) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) -+ -+ ReQ4bar(-3,itype) = ReQ4bar(-3,itype) + f_ij*ReYlm -+ ImQ4bar(-3,itype) = ImQ4bar(-3,itype) + f_ij*ImYlm -+ -+ ReQ4bar(+3,itype) = ReQ4bar(+3,itype) - f_ij*ReYlm -+ ImQ4bar(+3,itype) = ImQ4bar(+3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-2/+2) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+ ReQ4bar(-2,itype) = ReQ4bar(-2,itype) + f_ij*ReYlm -+ ImQ4bar(-2,itype) = ImQ4bar(-2,itype) + f_ij*ImYlm -+ -+ ReQ4bar(+2,itype) = ReQ4bar(+2,itype) + f_ij*ReYlm -+ ImQ4bar(+2,itype) = ImQ4bar(+2,itype) - f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(-1/+1) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ -+ ReQ4bar(-1,itype) = ReQ4bar(-1,itype) + f_ij*ReYlm -+ ImQ4bar(-1,itype) = ImQ4bar(-1,itype) + f_ij*ImYlm -+ -+ ReQ4bar(+1,itype) = ReQ4bar(+1,itype) - f_ij*ReYlm -+ ImQ4bar(+1,itype) = ImQ4bar(+1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary contribution to Q4bar(0) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ ReQ4bar(0,itype) = ReQ4bar(0,itype) + f_ij*ReYlm -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end if computing Q4 -+ -+c------------------------------------------------ -+c Compute Q6 Steinhardt order parameters -+c------------------------------------------------ -+ -+ if ( (nq6>0).and.isolvmax6>0 ) then -+ -+ do isolv6 = 1,isolvmax6 -+ -+ jatm = solvlist6(isolv6) -+ itype = solvtype6(isolv6) -+ -+ invrc = solvimag6(isolv6)**6 -+ invrs = solvimag6(isolv6)**4 -+ -+ x = solvx6(isolv6) -+ y = solvy6(isolv6) -+ z = solvz6(isolv6) -+ -+ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-6/+6) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) -+ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0*x*y5) -+ -+ ReQ6bar(-6,itype) = ReQ6bar(-6,itype) + f_ij*ReYlm -+ ImQ6bar(-6,itype) = ImQ6bar(-6,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+6,itype) = ReQ6bar(+6,itype) + f_ij*ReYlm -+ ImQ6bar(+6,itype) = ImQ6bar(+6,itype) - f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-5/+5) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) -+ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) -+ -+ ReQ6bar(-5,itype) = ReQ6bar(-5,itype) + f_ij*ReYlm -+ ImQ6bar(-5,itype) = ImQ6bar(-5,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+5,itype) = ReQ6bar(+5,itype) - f_ij*ReYlm -+ ImQ6bar(+5,itype) = ImQ6bar(+5,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-4/+4) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) -+ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y+ -+ x 4.0d0*x*y3) -+ -+ ReQ6bar(-4,itype) = ReQ6bar(-4,itype) + f_ij*ReYlm -+ ImQ6bar(-4,itype) = ImQ6bar(-4,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+4,itype) = ReQ6bar(+4,itype) + f_ij*ReYlm -+ ImQ6bar(+4,itype) = ImQ6bar(+4,itype) - f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-3/+3) -+c---------------------------------------------------------- -+ -+ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (-x3+3.0d0*x*y2) -+ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (3.0d0*x2*y-y3) -+ -+ ReQ6bar(-3,itype) = ReQ6bar(-3,itype) + f_ij*ReYlm -+ ImQ6bar(-3,itype) = ImQ6bar(-3,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+3,itype) = ReQ6bar(+3,itype) - f_ij*ReYlm -+ ImQ6bar(+3,itype) = ImQ6bar(+3,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-2/+2) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2*y2+ -+ x x4+2.0d0*x2*y2+y4)*(x2-y2) -+ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2-16.0d0* -+ x z2*y2+x4+2.0d0*x2*y2+y4)*x*y -+ -+ ReQ6bar(-2,itype) = ReQ6bar(-2,itype) + f_ij*ReYlm -+ ImQ6bar(-2,itype) = ImQ6bar(-2,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+2,itype) = ReQ6bar(+2,itype) + f_ij*ReYlm -+ ImQ6bar(+2,itype) = ImQ6bar(+2,itype) - f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(-1/+1) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2+ -+ x 5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+ ReQ6bar(-1,itype) = ReQ6bar(-1,itype) + f_ij*ReYlm -+ ImQ6bar(-1,itype) = ImQ6bar(-1,itype) + f_ij*ImYlm -+ -+ ReQ6bar(+1,itype) = ReQ6bar(+1,itype) - f_ij*ReYlm -+ ImQ6bar(+1,itype) = ImQ6bar(+1,itype) + f_ij*ImYlm -+ -+c---------------------------------------------------------- -+c Real and imaginary conribution to Q6bar(0) -+c---------------------------------------------------------- -+ -+ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0*z4* -+ x y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4-5.0d0 -+ x *x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) -+ -+ ReQ6bar(0,itype) = ReQ6bar(0,itype) + f_ij*ReYlm -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end if computing Q6 -+ -+ end do ! end loop over iatm -+ -+c----------------------------------------------- -+c Global summation of order parameters -+c----------------------------------------------- -+ -+ l = 1 -+ do itype = 1,nq4 -+ do m = -4,4 -+ buff1(l) = ReQ4bar(m,itype) -+ l = l + 1 -+ end do -+ do m = -4,4 -+ buff1(l) = ImQ4bar(m,itype) -+ l = l + 1 -+ end do -+ end do -+ do itype = 1,nq6 -+ do m = -6,6 -+ buff1(l) = ReQ6bar(m,itype) -+ l = l + 1 -+ end do -+ do m = -6,6 -+ buff1(l) = ImQ6bar(m,itype) -+ l = l + 1 -+ end do -+ end do -+ -+ if (commsize>1) call gdsum(buff1,18*nq4+26*nq6,buff2) -+ -+ l = 1 -+ do itype = 1,nq4 -+ do m = -4,4 -+ ReQ4bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ do m = -4,4 -+ ImQ4bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ end do -+ do itype = 1,nq6 -+ do m = -6,6 -+ ReQ6bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ do m = -6,6 -+ ImQ6bar(m,itype) = buff1(l) -+ l = l + 1 -+ end do -+ end do -+ -+c--------------------------------------------------- -+c Final computation of global order parameters -+c--------------------------------------------------- -+ -+ l = 1 -+ do iq = 1,nq4 -+ tmpvar = 0.0d0 -+ do m = 1,18 -+ tmpvar = tmpvar + buff1(l)**2 -+ l = l + 1 -+ end do -+ q4_global(iq) = 4.0d0*rpibn*sqrt(tmpvar)/ -+ x dble(q4ninc(iq)*q4nn(iq)) -+ end do -+ -+ do iq = 1,nq6 -+ tmpvar = 0.0d0 -+ do m = 1,26 -+ tmpvar = tmpvar + buff1(l)**2 -+ l = l + 1 -+ end do -+ q6_global(iq) = 4.0d0*rpibtt*sqrt(tmpvar)/ -+ x dble(q6ninc(iq)*q6nn(iq)) -+ end do -+ -+c Tidy up -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ -+ deallocate(dstlst,stat=ierr(4)) -+ -+ deallocate(solvx4,stat=ierr(5)) -+ deallocate(solvy4,stat=ierr(6)) -+ deallocate(solvz4,stat=ierr(7)) -+ deallocate(solvrmag4,stat=ierr(8)) -+ deallocate(solvimag4,stat=ierr(9)) -+ deallocate(solvrsq4 ,stat=ierr(10)) -+ deallocate(solvlist4,stat=ierr(11)) -+ deallocate(solvtype4,stat=ierr(12)) -+ -+ deallocate(solvx6,stat=ierr(13)) -+ deallocate(solvy6,stat=ierr(14)) -+ deallocate(solvz6,stat=ierr(15)) -+ deallocate(solvrmag6,stat=ierr(16)) -+ deallocate(solvimag6,stat=ierr(17)) -+ deallocate(solvrsq6 ,stat=ierr(18)) -+ deallocate(solvlist6,stat=ierr(19)) -+ deallocate(solvtype6,stat=ierr(20)) -+ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) -+ -+ deallocate(buff1,stat=ierr(1)) -+ deallocate(buff2,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Steinhardt -+ -+ Subroutine Compute_Steinhardt_Forces(imcon,natms,engord,virord) -+ -+c--------------------------------------------------------------------- -+c -+c Computes forces from nq4 Q4 and nq6 Q6 global order parameters. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use setup_module, only : mxlist -+ use utility_module, only : images -+ implicit none -+ -+c Arguments -+ -+ integer,intent(in) :: imcon,natms -+ -+ real(8),intent(inout) :: engord,virord -+ -+c sqrt(pi/13) , sqrt(pi/9) , 1/3 -+ -+ real(8),parameter :: rpibtt = 0.491590249d0 -+ real(8),parameter :: rpibn = 0.590817950d0 -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ -+c Prefactors for spherical harmonics with l = 6 -+ -+ real(8),parameter :: ypre6m6 = 0.48308411358006625446748d0 -+ real(8),parameter :: ypre6m5 = 1.67345245810009801701312d0 -+ real(8),parameter :: ypre6m4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6m3 = 0.65139048586771575166665d0 -+ real(8),parameter :: ypre6m2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6m1 = 0.41197551630114082055201d0 -+ real(8),parameter :: ypre6m0 = 0.06356920226762842462964d0 -+ real(8),parameter :: ypre6p1 = -0.41197551630114082055201d0 -+ real(8),parameter :: ypre6p2 = 0.32569524293385787583333d0 -+ real(8),parameter :: ypre6p3 = -0.65139048586771575166665d0 -+ real(8),parameter :: ypre6p4 = 0.35678126285399802686271d0 -+ real(8),parameter :: ypre6p5 = -1.67345245810009801701312d0 -+ real(8),parameter :: ypre6p6 = 0.48308411358006625446748d0 -+ -+c Prefactors for speherical harmonics with l = 4 -+ -+ real(8),parameter :: ypre4m4 = 0.44253269244498261159038d0 -+ real(8),parameter :: ypre4m3 = 1.25167147089835228968013d0 -+ real(8),parameter :: ypre4m2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4m1 = 0.47308734787878004013351d0 -+ real(8),parameter :: ypre4m0 = 0.10578554691520430930396d0 -+ real(8),parameter :: ypre4p1 = -0.47308734787878004013351d0 -+ real(8),parameter :: ypre4p2 = 0.33452327177864460416856d0 -+ real(8),parameter :: ypre4p3 = -1.25167147089835228968013d0 -+ real(8),parameter :: ypre4p4 = 0.44253269244498261159038d0 -+ -+c Maximum no. of entries in solvation list -+ -+ integer :: maxneigh -+ -+c Solvation shell information - Q4 -+ -+ real(8),allocatable,dimension(:) :: solvx4,solvy4,solvz4 -+ real(8),allocatable,dimension(:) :: solvrmag4,solvimag4,solvrsq4 -+ integer,allocatable,dimension(:) :: solvlist4,solvtype4 -+ integer :: isolvmax4 -+ -+c Solvation shell information - Q6 -+ -+ real(8),allocatable,dimension(:) :: solvx6,solvy6,solvz6 -+ real(8),allocatable,dimension(:) :: solvrmag6,solvimag6,solvrsq6 -+ integer,allocatable,dimension(:) :: solvlist6,solvtype6 -+ integer :: isolvmax6 -+ -+c Prefactors arising from derivative of bias potential -+ -+ real(8),allocatable,dimension(:) :: q4prefactor,q6prefactor -+ -+c Separation vectors and powers thereof -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8) :: x,y,z -+ real(8) :: x2,y2,z2,x3,y3,z3 -+ real(8) :: x4,y4,z4,x5,y5,z5 -+ real(8) :: x6,y6,z6 -+ real(8) :: invrc,invrs,invrq -+ -+c list of separation vectors -+ integer :: numdst -+ integer,allocatable,dimension(:) :: dstlst -+ -+c Comms buffers -+ -+ real(8),allocatable,dimension(:) :: buff1,buff2 -+ -+c Temporaries -+ -+ real(8) :: tmpsq,f_ij,df_ij,ReYlm,ImYlm,tmpvar,invrN -+ real(8) :: fx,fy,fz,fx2,fy2,fz2,prefactor2,fx1,fy1,fz1 -+ real(8) :: strs1,strs2,strs3,strs4,strs5,strs6,strs7,strs8,strs9 -+ -+ integer :: iatm1,iatm0,iatm,isite,istrd,ii,isolv4,isolv6,isolv -+ integer :: idi,idj,limit,nn,k,jatm,jsite,q4type,q6type -+ integer :: itype,jtype,l,m,iq -+ -+ maxneigh = 500 ! Max number of atoms in coordination shell -+ -+ ierr = 0 ! Error flags -+ -+c DQ - modified 10/12/11, arrays now big enough -+c to hold maximum number of neighbours plus -+c maximum number of excluded atoms. -+ allocate(xdf(1:mxlist+mxexcl),stat=ierr(1)) -+ allocate(ydf(1:mxlist+mxexcl),stat=ierr(2)) -+ allocate(zdf(1:mxlist+mxexcl),stat=ierr(3)) -+ -+c DQ - modified 10/12/11, array to hold a list of -+c all atom entries in the above three arrays -+ allocate(dstlst(1:mxlist+mxexcl),stat=ierr(4)) -+ -+ allocate(solvx4(1:maxneigh),stat=ierr(5)) -+ allocate(solvy4(1:maxneigh),stat=ierr(6)) -+ allocate(solvz4(1:maxneigh),stat=ierr(7)) -+ allocate(solvrmag4(1:maxneigh),stat=ierr(8)) -+ allocate(solvimag4(1:maxneigh),stat=ierr(9)) -+ allocate(solvrsq4 (1:maxneigh),stat=ierr(10)) -+ allocate(solvlist4(1:maxneigh),stat=ierr(11)) -+ allocate(solvtype4(1:maxneigh),stat=ierr(12)) -+ -+ allocate(solvx6(1:maxneigh),stat=ierr(13)) -+ allocate(solvy6(1:maxneigh),stat=ierr(14)) -+ allocate(solvz6(1:maxneigh),stat=ierr(15)) -+ allocate(solvrmag6(1:maxneigh),stat=ierr(16)) -+ allocate(solvimag6(1:maxneigh),stat=ierr(17)) -+ allocate(solvrsq6 (1:maxneigh),stat=ierr(18)) -+ allocate(solvlist6(1:maxneigh),stat=ierr(19)) -+ allocate(solvtype6(1:maxneigh),stat=ierr(20)) -+ if (any(ierr/=0)) call Mfrz_Error(2538,0.d0) -+ -+ allocate(buff1(1:18*nq4+26*nq6),stat=ierr(1)) -+ allocate(buff2(1:18*nq4+26*nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2534,0.d0) -+ -+ allocate(q4prefactor(1:nq4),stat=ierr(1)) -+ allocate(q6prefactor(1:nq6),stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) -+ -+c Compute the prefactors associated from dV_aug/d_q4 -+ -+ k = 1 -+ do iq = 1,nq4 -+ invrN = 1.0d0/dble(q4ninc(iq)*q4nn(iq)) -+ q4prefactor(iq) = -16.0d0*(rpibn**2)*(invrN**2)*dcolvar(k)/ -+ x Q4_global(iq) -+ k = k + 1 -+ end do -+ -+c Compute the prefactors associated from dV_aug/d_q6 -+ -+ do iq = 1,nq6 -+ invrN = 1.0d0/dble(q6ninc(iq)*q6nn(iq)) -+ q6prefactor(iq) = -16.0d0*(rpibtt**2)*(invrN**2)*dcolvar(k)/ -+ x Q6_global(iq) -+ k = k + 1 -+ end do -+ -+c write(0,'("DEBUG : q4prefactors = ",5F15.6)')q4prefactor -+ -+c Set atoms looper over by current rank -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ strs1 = 0.0d0 -+ strs2 = 0.0d0 -+ strs3 = 0.0d0 -+ strs4 = 0.0d0 -+ strs5 = 0.0d0 -+ strs6 = 0.0d0 -+ strs7 = 0.0d0 -+ strs8 = 0.0d0 -+ strs9 = 0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+c -------------------------------------------------------------- -+c Build a list of the required connections to iatm. This -+c differs depending on the version of DLPOLY we are using. -+c First we loop over atoms in the neighbour list of iatm. -+c--------------------------------------------------------------- -+ -+ ii = ii + 1 -+ isite=ltype(iatm) -+ limit=lentry(ii) -+ -+ nn = 0 -+ do k = 1,limit -+ -+ jatm = list(ii,k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ dstlst(nn) = jatm -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+c -------------------------------------------------------------- -+c Next we loop over the excluded atom list of iatm and add -+c and pairs needed for computation of the current OP. -+c--------------------------------------------------------------- -+ -+ccc DEBUG -+ccc write(0,'("atom ",I5," has ",I5," excluded interactions")') -+ccc x iatm,mtd_nexatm(iatm) -+ -+ do k = 1,mtd_nexatm(ii) -+ -+ jatm = mtd_lexatm(ii,k) -+ jsite = ltype(jatm) -+ -+ccc DEBUG -+ccc write(0,'("Interaction with atom ",I5," is excluded. ")')jatm -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ dstlst(nn) = jatm -+ -+ xdf(nn)=xxx(jatm)-xxx(iatm) -+ ydf(nn)=yyy(jatm)-yyy(iatm) -+ zdf(nn)=zzz(jatm)-zzz(iatm) -+ -+ end do -+ -+ccc DEBUG -+ccc write(0,*) -+ -+ numdst = nn -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ nn = 0 -+ isolvmax4 = 0 -+ isolvmax6 = 0 -+ isolv4 = 0 -+ isolv6 = 0 -+ do k = 1,numdst -+ jatm = dstlst(k) -+ jsite = ltype(jatm) -+ -+ if ( q4site(jsite,isite)+q6site(jsite,isite)==0 ) cycle -+ -+ nn = nn + 1 -+ -+ q4type = q4site(jsite,isite) -+ q6type = q6site(jsite,isite) -+ -+ tmpsq = xdf(nn)*xdf(nn)+ydf(nn)*ydf(nn)+zdf(nn)*zdf(nn) -+ if (nq4>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q4cutoff(2,q4type)**2 ) then -+ isolv4 = isolv4 + 1 -+ solvlist4(isolv4) = jatm -+ solvrsq4(isolv4) = tmpsq -+ solvrmag4(isolv4) = sqrt(tmpsq) -+ solvimag4(isolv4) = 1.0d0/solvrmag4(isolv4) -+ solvx4(isolv4) = xdf(nn) -+ solvy4(isolv4) = ydf(nn) -+ solvz4(isolv4) = zdf(nn) -+ solvtype4(isolv4) = q4type -+ end if -+ end if -+ -+ if (nq6>0) then -+ -+c Add to solvation lists if within cut-off -+ -+ if ( tmpsq < q6cutoff(2,q6type)**2 ) then -+ isolv6 = isolv6 + 1 -+ solvlist6(isolv6) = jatm -+ solvrsq6(isolv6) = tmpsq -+ solvrmag6(isolv6) = sqrt(tmpsq) -+ solvimag6(isolv6) = 1.0d0/solvrmag6(isolv6) -+ solvx6(isolv6) = xdf(nn) -+ solvy6(isolv6) = ydf(nn) -+ solvz6(isolv6) = zdf(nn) -+ solvtype6(isolv6) = q6type -+ end if -+ end if -+ isolvmax4 = isolv4 -+ isolvmax6 = isolv6 -+ if ((isolv4>maxneigh) .or. (isolv6>maxneigh)) -+ x call Mfrz_Error(2535,0.d0) -+ -+ end do ! end loop over k -+ -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+c Compute forces arising from Q4 order parameters -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+ -+ if ( (nq4>0).and.isolvmax4>0 ) then -+ -+ do isolv4 = 1,isolvmax4 -+ -+ jatm = solvlist4(isolv4) -+ itype = solvtype4(isolv4) -+ -+ invrc = solvimag4(isolv4)**6 -+ invrq = solvimag4(isolv4)**8 -+ invrs = solvimag4(isolv4)**4 -+ -+ x = solvx4(isolv4) -+ y = solvy4(isolv4) -+ z = solvz4(isolv4) -+ -+ f_ij = fc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ df_ij = dfc(solvrmag4(isolv4),q4cutoff(1,itype), -+ x q4cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+ fx = 0.0d0 -+ fy = 0.0d0 -+ fz = 0.0d0 -+ -+c------------------------------------- -+c Gradient of f_ij w.r.t. r_{j} -+c------------------------------------- -+ -+ fx2 = df_ij*x*solvimag4(isolv4) -+ fy2 = df_ij*y*solvimag4(isolv4) -+ fz2 = df_ij*z*solvimag4(isolv4) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -4 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m4*invrs*(x4-6.d0*x2*y2+y4) -+ ImYlm = ypre4m4*invrs*(-4.d0*x3*y+4.d0*x*y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -4 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{4,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrc*ypre4m4*4.d0*x*(4.d0*x2*y2-4.d0*y4+z2*x2- -+ x 3.d0*z2*y2) -+ fy1 = -invrc*ypre4m4*4.d0*y*(4.d0*x4-4.d0*x2*y2+3.d0* -+ x z2*x2-z2*y2) -+ fz1 = -invrc*ypre4m4*4.d0*z*(x4-6.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -4 (imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-4,itype) -+ -+c---------------------------------------------- -+c Gradient of Im(Y_{4,-4}) w.r.t r_{j} -+c---------------------------------------------- -+ -+ fx1 = invrc*ypre4m4*4.d0*y*(x4-6.d0*x2*y2-3.d0*z2*x2+ -+ x y4+z2*y2) -+ fy1 = -invrc*ypre4m4*4.d0*x*(-6.d0*x2*y2+y4+x4+z2*x2- -+ x 3.d0*z2*y2) -+ fz1 = invrc*ypre4m4*16.d0*x*y*z*(x2-y2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -3 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m3*invrs*z*(x3-3.d0*x*y2) -+ ImYlm = ypre4m3*invrs*z*(-3.d0*x2*y+y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-3,itype) -+ -+c--------------------------------------------- -+c Gradient of Re(Y_{4,-3}) w.r.t r_{j} -+c--------------------------------------------- -+ -+ fx1 = -invrc*ypre4m3*z*(x4-12.d0*x2*y2-3.d0*z2*x2+ -+ x 3.d0*y4+3.d0*z2*y2) -+ fy1 = -invrc*ypre4m3*2.d0*z*x*y*(5.0d0*x2-3.d0*y2+ -+ x 3.d0*z2) -+ fz1 = invrc*ypre4m3*x*(x2-3.d0*y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -3 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-3,itype) -+ -+c-------------------------------------------------- -+c Gradient of Im(Y_{4,-3}) w.r.t r_{j} -+c-------------------------------------------------- -+ -+ fx1 = invrc*ypre4m3*2.d0*z*x*y*(3.d0*x2-5.d0*y2-3.0d0*z2) -+ fy1 = -invrc*ypre4m3*z*(-12.d0*x2*y2+y4+3.d0*x4+3.d0*z2*x2 -+ x -3.d0*z2*y2) -+ fz1 = -invrc*ypre4m3*y*(3.d0*x2-y2)*(x2+y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -2 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre4m2*invrs*(x2-y2)*(-6.d0*z2+x2+y2) -+ ImYlm = ypre4m2*invrs*2.d0*(-6.d0*z2+x2+y2)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-2,itype) -+ -+c--------------------------------------------- -+c Gradient of Re(Y_{4,-2}) w.r.t r_{j} -+c--------------------------------------------- -+ -+ fx1 = -invrc*ypre4m2*4.d0*x*(4.d0*z2*x2+y4-9.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fy1 = invrc*ypre4m2*4.d0*y*(x4-9.d0*z2*x2+4.d0*z2*y2- -+ x 3.d0*z4+x2*y2) -+ fz1 = invrc*ypre4m2*4.d0*z*(x2-y2)*(4.d0*x2+4.d0*y2- -+ x 3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -2 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-2,itype) -+ -+c----------------------------------------- -+c Gradient of Im(Y_{4,-2}) w.r.t r_{j} -+c----------------------------------------- -+ -+ fx1 = -invrc*ypre4m2*2.d0*y*(x4-21.d0*z2*x2+5.d0*z2*y2+ -+ x 6.d0*z4-y4) -+ fy1 = invrc*ypre4m2*2.d0*x*(-y4+21.d0*z2*y2-5.d0*z2*x2 -+ x -6.d0*z4+x4) -+ fz1 = -invrc*ypre4m2*8.d0*z*x*y*(4.d0*x2+4.d0*y2-3.d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -1 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ ImYlm = ypre4m1*invrs*z*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ReQ4bar(-1,itype) -+ -+c---------------------------------------- -+c Gradient of Re(Y_{4,-1}) w.r.t r_{j} -+c---------------------------------------- -+ -+ fx1 = invrc*ypre4m1*z*(3.d0*x4-21.d0*z2*x2+z2*y2+4.d0*z4- -+ x 3.d0*y4) -+ fy1 = invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fz1 = -invrc*ypre4m1*x*(-21.d0*x2*z2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c------------------------------------------------------- -+c Force contributions from m = -1 (imaginary part) -+c------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q4prefactor(itype)*ImQ4bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{4,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrc*ypre4m1*2.d0*z*x*y*(3.d0*x2+3.d0*y2-11.d0*z2) -+ fy1 = invrc*ypre4m1*z*(-3.d0*y4+21.d0*z2*y2-z2*x2-4.d0*z4+ -+ x 3.d0*x4) -+ fz1 = invrc*ypre4m1*y*(-21.d0*z2*x2-21.d0*z2*y2+4.d0*z4+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real spherical harmonics for m = 0 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre4m0*invrs*(8.d0*z4-24.d0*z2*x2-24.d0*z2*y2+ -+ x 3.d0*x4+6.d0*x2*y2+3.d0*y4) -+ -+c-------------------------------------------------- -+c Force contributions from m = 0 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q4prefactor(itype)*ReQ4bar(0,itype) -+ -+c------------------------------------------- -+c Gradient of Re(Y_{4,0}) w.r.t r_{j} -+c------------------------------------------- -+ -+ fx1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*x -+ fy1 = 20.d0*ypre4m0*invrc*z2*(-4.d0*z2+3.d0*x2+3.d0*y2)*y -+ fz1 = -20.d0*ypre4m0*invrc*z*(-4.d0*z2*x2-4.d0*z2*y2+3.d0* -+ x x4+6.d0*x2*y2+3.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c Add into global force and stress arrays -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+c Virial -+ -+ virord = virord - (fx*x + fy*y + fz*z) -+ -+c Stress -+ -+ strs1=strs1+x*fx -+ strs2=strs2+x*fy -+ strs3=strs3+x*fz -+ strs5=strs5+y*fy -+ strs6=strs6+y*fz -+ strs9=strs9+z*fz -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end of computing Q4 -+ -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+c Compute forces arising from Q6 order parameters -+c--------------------------------------------------------- -+c--------------------------------------------------------- -+ -+ if ( (nq6>0).and.isolvmax6>0 ) then -+ -+ do isolv6 = 1,isolvmax6 -+ -+ jatm = solvlist6(isolv6) -+ itype = solvtype6(isolv6) -+ -+ invrc = solvimag6(isolv6)**6 -+ invrq = solvimag6(isolv6)**8 -+ invrs = solvimag6(isolv6)**4 -+ -+ x = solvx6(isolv6) -+ y = solvy6(isolv6) -+ z = solvz6(isolv6) -+ -+ f_ij = fc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ df_ij = dfc(solvrmag6(isolv6),q6cutoff(1,itype), -+ x q6cutoff(2,itype)) -+ -+ x2 = x*x -+ y2 = y*y -+ z2 = z*z -+ -+ x3 = x2*x -+ y3 = y2*y -+ z3 = z2*z -+ -+ x4 = x2*x2 -+ y4 = y2*y2 -+ z4 = z2*z2 -+ -+ x5 = x4*x -+ y5 = y4*y -+ z5 = z4*z -+ -+ x6 = x4*x2 -+ y6 = y4*y2 -+ z6 = z4*z2 -+ -+ fx = 0.0d0 -+ fy = 0.0d0 -+ fz = 0.0d0 -+ -+c---------------------------------------- -+c Gradient of f_ij w.r.t. r_{j} -+c---------------------------------------- -+ -+ fx2 = df_ij*x*solvimag6(isolv6) -+ fy2 = df_ij*y*solvimag6(isolv6) -+ fz2 = df_ij*z*solvimag6(isolv6) -+ -+c----------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -6 -+c----------------------------------------------------------- -+ -+ ReYlm = ypre6m6*invrc*(x6-15.0d0*x4*y2+15.0d0*x2*y4-y6) -+ ImYlm = ypre6m6*invrc*(-6.0d0*x5*y+20.0d0*x3*y3-6.0d0* -+ x x*y5) -+ -+c----------------------------------------------------- -+c Force contributions from m = -6 (real part) -+c----------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-6,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = invrq*ypre6m6*6.0d0*x*(6.0d0*x4*y2-20.0d0*x2*y4+ -+ x 6.0d0*y6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fy1 = -invrq*ypre6m6*6.0d0*y*(6.0d0*x6-20.0d0*x4*y2+6.0d0 -+ x *x2*y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+z2*y4) -+ fz1 = -invrq*ypre6m6*6.0d0*z*(x6-15.0d0*x4*y2+15.0d0*x2* -+ x y4-y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c---------------------------------------------------------- -+c Force contributions from m = -6 (Imaginary part) -+c---------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-6,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-6}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -invrq*ypre6m6*6.0d0*y*(-x6+15.0d0*x4*y2-15.0d0*x2* -+ x y4+5.0d0*z2*x4-10.0d0*z2*x2*y2+y6+z2*y4) -+ fy1 = -invrq*ypre6m6*6.0d0*x*(-15.0d0*x4*y2+15.0d0*x2*y4- -+ x y6+x6+z2*x4-10.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = invrq*ypre6m6*12.0d0*x*y*z*(3.0d0*x4-10.0d0*x2*y2+ -+ x 3.0d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c--------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -5 -+c--------------------------------------------------------- -+ -+ ReYlm = -ypre6m5*invrc*z*(-x5+10.0d0*x3*y2-5.0d0*x*y4) -+ ImYlm = -ypre6m5*invrc*z*(5.0d0*x4*y-10.0d0*x2*y3+y5) -+ -+c-------------------------------------------------- -+c Force contributions from m = -5 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-5,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6m5*invrq*z*(-x6+35.0d0*x4*y2-55.d0*x2*y4+ -+ x 5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*y6+5.0d0*z2*y4) -+ fy1 = -2.0d0*ypre6m5*invrq*x*y*z*(13.0d0*x4-30.0d0*x2 -+ x *y2+5.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fz1 = -ypre6m5*invrq*x*(x4-10.0d0*x2*y2+5.0d0*y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -5 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-5,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-5}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.0d0*ypre6m5*invrq*x*y*z*(-5.0d0*x4+30.0d0*x2*y2 -+ x -13.0d0*y4+10.0d0*z2*x2-10.0d0*z2*y2) -+ fy1 = -ypre6m5*invrq*z*(-55.0d0*x4*y2+35.0d0*x2*y4-y6+ -+ x 5.0d0*x6+5.0d0*z2*x4-30.0d0*z2*x2*y2+5.0d0*z2*y4) -+ fz1 = ypre6m5*invrq*y*(5.0d0*x4-10.0d0*x2*y2+y4)* -+ x (-x2-y2+5.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -4 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(x4-6.0d0*x2*y2+y4) -+ ImYlm = ypre6m4*invrc*(10.0d0*z2-x2-y2)*(-4.0d0*x3*y+4.0d0* -+ x x*y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -4 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.0d0*ypre6m4*invrq*x*(-8.0d0*x4*y2-13.0d0*z2*x4+ -+ x 150.0d0*z2*x2*y2+8.0d0*y6-85.0d0*z2*y4+20.0d0*z4* -+ x x2-60.0d0*z4*y2) -+ fy1 =-2.0d0*ypre6m4*invrq*y*(-8.0d0*x6+85.0d0*z2*x4+8.0d0 -+ x *x2*y4-150.0d0*z2*x2*y2+13.0d0*z2*y4+60.0d0*z4*x2- -+ x 20.0d0*z4*y2) -+ fz1 =-2.0d0*ypre6m4*invrq*z*(x4-6.0d0*x2*y2+y4)*(-13.0d0 -+ x *x2-13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -4 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-4,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-4}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -4.0d0*ypre6m4*invrq*y*(x6-35.0d0*z2*x4-5.0d0*x2*y4 -+ x +80.0d0*z2*x2*y2+30*z4*x2-9.0d0*z2*y4-10*z4*y2-5.0d0 -+ x *x4*y2+y6) -+ fy1 = -4.0d0*ypre6m4*invrq*x*(5.0d0*x4*y2-80.0d0*z2*x2*y2 -+ x -y6+35.0d0*z2*y4+9.0d0*z2*x4+10.0d0*z4*x2-30.0d0*z4 -+ x *y2-x6+5.0d0*x2*y4) -+ fz1 = 8.0d0*ypre6m4*invrq*z*x*y*(x2-y2)*(-13.0d0*x2- -+ x 13.0d0*y2+20.0d0*z2) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -3 -+c-------------------------------------------------------- -+ -+ ReYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (-x3+3.0d0*x*y2) -+ ImYlm = -ypre6m3*invrc*z*(8.0d0*z2-3.0d0*x2-3.0d0*y2)* -+ x (3.0d0*x2*y-y3) -+ -+c-------------------------------------------------- -+c Force contributions from m = -3 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-3,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 3.d0*ypre6m3*invrq*z*(x6-11.d0*x4*y2-13.d0*z2*x4- -+ x 9.d0*x2*y4+54.d0*z2*x2*y2+8.d0*z4*x2-5.d0*z2*y4- -+ x 8.d0*z4*y2+3.d0*y6) -+ fy1 = -6.d0*ypre6m3*invrq*z*x*y*(-5.d0*x4-2.d0*x2*y2+14.d0 -+ x *z2*x2+3.d0*y4-22.d0*z2*y2+8.d0*z4) -+ fz1 = -3.d0*ypre6m3*invrq*x*(x2-3.d0*y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -3 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-3,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-3}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -6.d0*ypre6m3*invrq*z*x*y*(3.d0*x4-2.d0*x2*y2-22.d0 -+ x *z2*x2-5.d0*y4+14.d0*z2*y2+8.d0*z4) -+ fy1 = -3.d0*ypre6m3*invrq*z*(9.d0*x4*y2+11.d0*x2*y4-54.d0 -+ x *z2*x2*y2-y6+13.d0*z2*y4+5.d0*z2*x4+8.d0*z4*x2-8.d0 -+ x *z4*y2-3.d0*x6) -+ fz1 = 3.d0*ypre6m3*invrq*y*(3.d0*x2-y2)*(-13.d0*z2*x2- -+ x 13.d0*z2*y2+8.d0*z4+x4+2.d0*x2*y2+y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -2 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m2*invrc*(16.0d0*z4-16.0d0*z2*x2-16.0d0*z2 -+ x *y2+x4+2.0d0*x2*y2+y4)*(x2-y2) -+ ImYlm = -ypre6m2*invrc*2.0d0*(16.0d0*z4-16.0d0*z2*x2- -+ x 16.0d0*z2*y2+x4+2.0d0*x2*y2+y4)*x*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -2 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-2,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6m2*invrq*x*( 19.d0*z2*x4-64.d0*z4*x2- -+ x 49.d0*z2*y4+64.d0*z4*y2+2.d0*x4*y2+4.d0*x2*y4+ -+ x 2.d0*y6+16.d0*z6-30.d0*z2*x2*y2) -+ fy1 = -2.d0*ypre6m2*invrq*y*(-49.d0*z2*x4+64.d0*z4*x2+ -+ x 19.d0*z2*y4-64.d0*z4*y2+2.d0*x6+4.d0*x4*y2+2.d0* -+ x x2*y4+16.d0*z6-30.d0*z2*x2*y2) -+ fz1 = -2.d0*ypre6m2*invrq*z*(x2-y2)*(-64.d0*z2*x2-64.d0 -+ x *z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -2 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-2,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-2}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -2.d0*ypre6m2*invrq*y*(53.d0*z2*x4+38.d0*z2*x2* -+ x y2-128.d0*z4*x2-x6-x4*y2+x2*y4+16.d0*z6-15.d0* -+ x z2*y4+y6) -+ fy1 = -2.d0*ypre6m2*invrq*x*(38.d0*z2*x2*y2+53.d0*z2* -+ x y4-128.d0*z4*y2+x4*y2-x2*y4-y6+16.d0*z6-15.d0* -+ x z2*x4+x6) -+ fz1 = 4.d0*ypre6m2*invrq*z*x*y*(-64.d0*z2*x2-64.d0* -+ x z2*y2+16.d0*z4+19.d0*x4+38.d0*x2*y2+19.d0*y4) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real and imaginary spherical harmonics for m = -1 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 -+ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*x -+ ImYlm = -ypre6m1*z*invrc*(8.0d0*z4-20.0d0*z2*x2-20.0d0*z2*y2 -+ x +5.0d0*x4+10.0d0*x2*y2+5.0d0*y4)*y -+ -+c-------------------------------------------------- -+c Force contributions from m = -1 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ReQ6bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = ypre6m1*invrq*z*(85.d0*z2*x4+70.d0*z2*x2*y2 -+ x -100.d0*z4*x2-5.d0*x6-5.d0*x4*y2+5.d0*x2*y4-12.d0 -+ x *z4*y2+8.d0*z6-15.d0*z2*y4+5.d0*y6) -+ fy1 = -2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0*z2* -+ x y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fz1 = -ypre6m1*invrq*x*(-100.d0*z4*x2-100.d0*z4*y2+ -+ x 8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0*z2*y4- -+ x 5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+c-------------------------------------------------------- -+c Force contributions from m = -1 (Imaginary part) -+c-------------------------------------------------------- -+ -+ prefactor2 = 2.0d0*q6prefactor(itype)*ImQ6bar(-1,itype) -+ -+c-------------------------------------------- -+c Gradient of Im(Y_{6,-1}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = 2.d0*ypre6m1*invrq*z*x*y*(-50.d0*z2*x2-50.d0* -+ x z2*y2+44.d0*z4+5.d0*x4+10.d0*x2*y2+5.d0*y4) -+ fy1 = -ypre6m1*invrq*z*(70.d0*z2*x2*y2+85.d0*z2 -+ x *y4-100.d0*z4*y2+5.d0*x4*y2-5.d0*x2*y4-5.d0*y6 -+ x -12.d0*z4*x2+8.d0*z6-15.d0*z2*x4+5.d0*x6) -+ fz1 = ypre6m1*invrq*y*(-100.d0*z4*x2-100.d0*z4 -+ x *y2+8.d0*z6+85.d0*z2*x4+170.d0*z2*x2*y2+85.d0* -+ x z2*y4-5.d0*x6-15.d0*x4*y2-15.d0*x2*y4-5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ImYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ImYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ImYlm) -+ -+c-------------------------------------------------------- -+c Real spherical harmonics for m = 0 -+c-------------------------------------------------------- -+ -+ ReYlm = ypre6m0*invrc*(16.0d0*z6-120.0d0*z4*x2-120.0d0 -+ x *z4*y2+90.0d0*z2*x4+180.0d0*z2*x2*y2+90.0d0*z2*y4 -+ x -5.0d0*x6-15.0d0*x4*y2-15.0d0*x2*y4-5.0d0*y6) -+ -+c-------------------------------------------------- -+c Force contributions from m = 0 (real part) -+c-------------------------------------------------- -+ -+ prefactor2 = q6prefactor(itype)*ReQ6bar(0,itype) -+ -+c-------------------------------------------- -+c Gradient of Re(Y_{6,0}) w.r.t r_{j} -+c-------------------------------------------- -+ -+ fx1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 -+ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*x -+ fy1 = -42.d0*ypre6m0*invrq*z2*(8.d0*z4-20.d0*z2*x2-20.d0 -+ x *z2*y2+5.d0*x4+10.d0*x2*y2+5.d0*y4)*y -+ fz1 = 42.d0*ypre6m0*invrq*z*(8.d0*z4*x2+8.d0*z4*y2-20.d0 -+ x *z2*x4-40.d0*z2*x2*y2-20.d0*z2*y4+5.d0*x6+15.d0*x4* -+ x y2+15.d0*x2*y4+5.d0*y6) -+ -+ fx = fx + prefactor2*(f_ij*fx1 + fx2*ReYlm) -+ fy = fy + prefactor2*(f_ij*fy1 + fy2*ReYlm) -+ fz = fz + prefactor2*(f_ij*fz1 + fz2*ReYlm) -+ -+ -+c Add into global force and stress arrays -+ -+ fxx(jatm) = fxx(jatm) + fx -+ fyy(jatm) = fyy(jatm) + fy -+ fzz(jatm) = fzz(jatm) + fz -+ fxx(iatm) = fxx(iatm) - fx -+ fyy(iatm) = fyy(iatm) - fy -+ fzz(iatm) = fzz(iatm) - fz -+ -+c Virial -+ -+ virord = virord - (fx*x + fy*y + fz*z) -+ -+c Stress -+ -+ strs1=strs1+x*fx -+ strs2=strs2+x*fy -+ strs3=strs3+x*fz -+ strs5=strs5+y*fy -+ strs6=strs6+y*fz -+ strs9=strs9+z*fz -+ -+ end do ! end loop over connection list for iatm -+ -+ end if ! end of computing Q6 -+ -+ -+ end do ! end loop over iatm -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs1 -+ stress(2)=stress(2)+strs2 -+ stress(3)=stress(3)+strs3 -+ stress(4)=stress(4)+strs2 -+ stress(5)=stress(5)+strs5 -+ stress(6)=stress(6)+strs6 -+ stress(7)=stress(7)+strs3 -+ stress(8)=stress(8)+strs6 -+ stress(9)=stress(9)+strs9 -+ -+c tidy up -+ -+ ierr = 0 -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ -+ deallocate(dstlst,stat=ierr(4)) -+ -+ deallocate(solvx4,stat=ierr(5)) -+ deallocate(solvy4,stat=ierr(6)) -+ deallocate(solvz4,stat=ierr(7)) -+ deallocate(solvrmag4,stat=ierr(8)) -+ deallocate(solvimag4,stat=ierr(9)) -+ deallocate(solvrsq4 ,stat=ierr(10)) -+ deallocate(solvlist4,stat=ierr(11)) -+ deallocate(solvtype4,stat=ierr(12)) -+ -+ deallocate(solvx6,stat=ierr(13)) -+ deallocate(solvy6,stat=ierr(14)) -+ deallocate(solvz6,stat=ierr(15)) -+ deallocate(solvrmag6,stat=ierr(16)) -+ deallocate(solvimag6,stat=ierr(17)) -+ deallocate(solvrsq6 ,stat=ierr(18)) -+ deallocate(solvlist6,stat=ierr(19)) -+ deallocate(solvtype6,stat=ierr(20)) -+ if (any(ierr/=0)) call Mfrz_Error(2536,0.d0) -+ -+ deallocate(buff1,stat=ierr(1)) -+ deallocate(buff2,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2537,0.d0) -+ -+ deallocate(q4prefactor,stat=ierr(1)) -+ deallocate(q6prefactor,stat=ierr(2)) -+ if (any(ierr/=0)) call Mfrz_Error(2540,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Steinhardt_Forces -+ -+ Subroutine Compute_Tet_Nlist(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c The existing neighbour list is not known by all nodes and -+c therefore we compute a new one from scratch rather than trying -+c to merge a full neighbour list across all MPI tasks or restore -+c symmetry. -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ integer :: nlast,megatm -+ -+ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype -+ integer :: ninclude,ifi,ii,ztype,nnn,k -+ real(8) :: rsq,rangesq -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ ninclude = maxval(zetaninc) -+ -+ nlast = natms -+ megatm = natms -+ -+ nnn = int(dble(ninclude*nlast*1.2)/dble(megatm)) -+ -+ allocate(xdf(1:nnn),stat=ierr(1)) -+ allocate(ydf(1:nnn),stat=ierr(2)) -+ allocate(zdf(1:nnn),stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2541,0.d0) -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+ ztype = zetasite(itype) -+ if ( ztype==0 ) cycle -+ -+ nn = 0 ! Number of images to compute -+ ii = ii + 1 ! index for this list -+ ifi = 0 ! index for entries in this list -+ -+ if (ii>mxninc) call Mfrz_Error(2542,0.d0) -+ -+ do jatm = 1,nlast -+ -+ jtype = ltype(jatm) -+ -+ if ( itype/=jtype ) cycle -+ if ( iatm == jatm ) cycle -+ -+ nn = nn + 1 -+ xdf(nn) = xxx(iatm) - xxx(jatm) ! separation vector -+ ydf(nn) = yyy(iatm) - yyy(jatm) -+ zdf(nn) = zzz(iatm) - zzz(jatm) -+ -+ end do -+ -+ if ( nn > nnn ) call Mfrz_Error(2543,0.d0) -+ -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ nn = 0 -+ do jatm = 1,nlast -+ -+ jtype = ltype(jatm) -+ -+ if ( itype/=jtype ) cycle -+ if ( iatm == jatm ) cycle -+ -+ nn = nn + 1 -+ rsq = xdf(nn)*xdf(nn) + ydf(nn)*ydf(nn) + zdf(nn)*zdf(nn) -+ -+ rangesq = zetacutoff(2,ztype)**2 -+ -+ if ( rsq < rangesq ) then -+ -+ ifi = ifi + 1 -+ flist(ifi,ii) = jatm -+ -+ end if -+ -+ end do -+ if ( ifi > mxflist ) call Mfrz_Error(2544,0.d0) -+ nflist(ii) = ifi -+ -+ end do ! end loop over iatm -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ if (any(ierr/=0))call Mfrz_Error(2545,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tet_Nlist -+ -+ Subroutine Compute_Tetrahedral(imcon,natms) -+ -+c--------------------------------------------------------------------- -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ -+ integer :: iatm0,iatm1,istrd,iatm,jatm,nn,itype,jtype -+ integer :: ninclude,ifi,ii,k,ztype,mm,katm,ktype,it -+ real(8) :: f_ij,f_ik,r_ij,r_ik,x,y,z,dot -+ real(8),parameter :: third=1.0d0/3.0d0 -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8),allocatable,dimension(:) :: buff1 -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ allocate(xdf(1:mxflist),stat=ierr(1)) -+ allocate(ydf(1:mxflist),stat=ierr(2)) -+ allocate(zdf(1:mxflist),stat=ierr(3)) -+ allocate(buff1(1:ntet),stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2546,0.d0) -+ -+ zeta_global(:) = 0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+c no tetrahedral contributions from this atom type? -+ -+ ztype = zetasite(itype) -+ if ( ztype == 0 ) cycle -+ -+ ii = ii + 1 ! index for this list -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector -+ ydf(k) = yyy(jatm) - yyy(iatm) -+ zdf(k) = zzz(jatm) - zzz(iatm) -+ -+ end do -+ -+ nn = nflist(ii) -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) -+ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ x = xdf(k) ; y = ydf(k) ; z = zdf(k) -+ -+c loop over all other entries katm -+ -+ do mm = k+1,nflist(ii) -+ -+c katm also in solvation shell of iatm -+ -+ katm = flist(mm,ii) -+ -+ r_ik = sqrt(xdf(mm)*xdf(mm) + ydf(mm)*ydf(mm) + -+ x zdf(mm)*zdf(mm)) -+ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+c The node holding the central atom keeps the contrib -+ -+ dot = (x*xdf(mm) + y*ydf(mm) + z*zdf(mm)) / (r_ij*r_ik) + -+ x third -+ zeta_global(ztype) = zeta_global(ztype) + f_ij*f_ik*dot*dot -+ end do -+ end do -+ -+ end do -+ -+ call gdsum(zeta_global(1),ntet,buff1(1:ntet)) -+ -+ do it = 1,ntet -+ zeta_global(it) = 1.0d0 - zeta_global(it)/dble(zetaninc(it)* -+ x zetann(it)) -+ end do -+ -+ deallocate(xdf ,stat=ierr(1)) -+ deallocate(ydf ,stat=ierr(2)) -+ deallocate(zdf ,stat=ierr(3)) -+ deallocate(buff1,stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tetrahedral -+ -+ Subroutine Compute_Tetrahedral_Forces(imcon,natms,engord,virord) -+ -+c--------------------------------------------------------------------- -+c -+c Author D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use config_module -+ use site_module -+ use utility_module, only : images -+ -+ implicit none -+ integer,intent(in) :: imcon,natms -+ real(8),intent(inout) :: engord,virord -+ -+ integer :: iatm,jatm,katm,iatm0,iatm1,istrd,nn -+ integer :: ii,k,m,itet,itype,jtype,ztype,it -+ -+ real(8),parameter :: third = 1.0d0/3.0d0 -+ real(8) :: strs1,strs2,strs3,strs5,strs6,strs9 -+ real(8) :: xj,yj,zj,xk,yk,zk,tmpvar,tmpvar2,dot -+ real(8) :: r_ij,r_ik,f_ij,f_ik,df_ij,df_ik -+ real(8) :: invrij,invrik,ctheta -+ real(8) :: fxj,fyj,fzj,fxk,fyk,fzk -+ -+ real(8),dimension(3) :: rij_hat,rik_hat -+ -+ real(8),allocatable,dimension(:) :: xdf,ydf,zdf -+ real(8),allocatable,dimension(:) :: tetprefactor -+ -+ iatm0 = myrank+1 -+ iatm1 = natms -+ istrd = commsize -+ -+ allocate(xdf(1:mxflist),stat=ierr(1)) -+ allocate(ydf(1:mxflist),stat=ierr(2)) -+ allocate(zdf(1:mxflist),stat=ierr(3)) -+ allocate(tetprefactor(1:ntet),stat=ierr(4)) -+ if (any(ierr/=0)) call Mfrz_Error(2548,0.d0) -+ -+c Compute the prefactor -+ -+ k = nq4+nq6+1 -+ do it = 1,ntet -+ tetprefactor = dcolvar(k)/dble(zetaninc(it)*zetann(it)) -+ k = k + 1 -+ end do -+ -+c zero contribution to the stress tensor -+ -+ strs1=0.0d0 -+ strs2=0.0d0 -+ strs3=0.0d0 -+ strs5=0.0d0 -+ strs6=0.0d0 -+ strs9=0.0d0 -+ -+ ii = 0 -+ do iatm = iatm0,iatm1,istrd -+ -+ itype = ltype(iatm) -+ -+c no tetrahedral contributions from this atom type? -+ -+ ztype = zetasite(itype) -+ if ( ztype == 0 ) cycle -+ -+ ii = ii + 1 ! index for this list -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ xdf(k) = xxx(jatm) - xxx(iatm) ! separation vector -+ ydf(k) = yyy(jatm) - yyy(iatm) -+ zdf(k) = zzz(jatm) - zzz(iatm) -+ -+ end do -+ -+ nn = nflist(ii) -+ call images(imcon,0,1,nn,cell,xdf,ydf,zdf) -+ -+ do k = 1,nflist(ii) -+ -+ jatm = flist(k,ii) -+ -+ r_ij = sqrt(xdf(k)*xdf(k) + ydf(k)*ydf(k) + zdf(k)*zdf(k)) -+ f_ij = fc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ df_ij = dfc(r_ij,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ xj = xdf(k) ; yj = ydf(k) ; zj = zdf(k) -+ -+ invrij = 1.0d0/r_ij -+ -+ rij_hat(1) = xj*invrij -+ rij_hat(2) = yj*invrij -+ rij_hat(3) = zj*invrij -+ -+ do m = k + 1,nflist(ii) -+ -+ r_ik = sqrt(xdf(m)*xdf(m) + ydf(m)*ydf(m) + zdf(m)*zdf(m)) -+ f_ik = fc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ df_ik = dfc(r_ik,zetacutoff(1,ztype),zetacutoff(2,ztype)) -+ -+ xk = xdf(m) ; yk = ydf(m) ; zk = zdf(m) -+ -+ invrik = 1.0d0/r_ik -+ -+ rik_hat(1) = xk*invrik -+ rik_hat(2) = yk*invrik -+ rik_hat(3) = zk*invrik -+ -+ ctheta = dot_product(rij_hat,rik_hat) -+ dot = ctheta + third -+ -+ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrij -+ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ij*f_ik -+ -+c force between atom i and atom j due to second term -+c i.e. ( f_ij*f_ik*dot*dot ) -+ -+ fxj = tmpvar*(rik_hat(1) - rij_hat(1)*ctheta) + -+ x tmpvar2*rij_hat(1) -+ fyj = tmpvar*(rik_hat(2) - rij_hat(2)*ctheta) + -+ x tmpvar2*rij_hat(2) -+ fzj = tmpvar*(rik_hat(3) - rij_hat(3)*ctheta) + -+ x tmpvar2*rij_hat(3) -+ -+ tmpvar = 2.0d0*dot*f_ij*f_ik*tetprefactor(ztype)*invrik -+ tmpvar2 = tetprefactor(ztype)*dot*dot*df_ik*f_ij -+ -+c force between atom i and atom k due to second term -+c i.e ( f_ij*f_ik*dot*dot ) -+ -+ fxk = tmpvar*(rij_hat(1) - rik_hat(1)*ctheta) + -+ x tmpvar2*rik_hat(1) -+ fyk = tmpvar*(rij_hat(2) - rik_hat(2)*ctheta) + -+ x tmpvar2*rik_hat(2) -+ fzk = tmpvar*(rij_hat(3) - rik_hat(3)*ctheta) + -+ x tmpvar2*rik_hat(3) -+ -+c Add in to forces, virial and stress tensor -+ -+ katm = flist(m,ii) -+ -+ fxx(iatm) = fxx(iatm) + fxj + fxk -+ fyy(iatm) = fyy(iatm) + fyj + fyk -+ fzz(iatm) = fzz(iatm) + fzj + fzk -+ -+ fxx(jatm) = fxx(jatm) - fxj -+ fyy(jatm) = fyy(jatm) - fyj -+ fzz(jatm) = fzz(jatm) - fzj -+ -+ fxx(katm) = fxx(katm) - fxk -+ fyy(katm) = fyy(katm) - fyk -+ fzz(katm) = fzz(katm) - fzk -+ -+ virord = virord - fxj*xj - fyj*yj - fzj*zj -+ virord = virord - fxk*xk - fyk*yk - fzk*zk -+ -+ strs1 = strs1 + xk*fxk + xj*fxj -+ strs2 = strs2 + xk*fyk + xj*fyj -+ strs3 = strs3 + xk*fzk + xj*fzj -+ strs5 = strs5 + yk*fyk + yj*fyj -+ strs6 = strs6 + yk*fzk + yj*fzj -+ strs9 = strs9 + zk*fzk + zj*fzj -+ -+ end do -+ end do -+ end do -+ -+c Complete stress tensor -+ -+ stress(1)=stress(1)+strs1 -+ stress(2)=stress(2)+strs2 -+ stress(3)=stress(3)+strs3 -+ stress(4)=stress(4)+strs2 -+ stress(5)=stress(5)+strs5 -+ stress(6)=stress(6)+strs6 -+ stress(7)=stress(7)+strs3 -+ stress(8)=stress(8)+strs6 -+ stress(9)=stress(9)+strs9 -+ -+ -+c Tidy up -+ -+ deallocate(xdf,stat=ierr(1)) -+ deallocate(ydf,stat=ierr(2)) -+ deallocate(zdf,stat=ierr(3)) -+ if (any(ierr/=0)) call Mfrz_Error(2547,0.d0) -+ -+ return -+ -+ end Subroutine Compute_Tetrahedral_Forces -+ -+ Subroutine Mfrz_Error(kode,arg) -+ -+c--------------------------------------------------------------------- -+c -+c Author W. Smith Daresbury Laboratory January 2011 -+c Adapted from D. Quigley - University of Warwick -+c Copyright D. Quigley October 2008 -+c -+c--------------------------------------------------------------------- -+ -+ use setup_module, only : nrite,nhist,nread,nconf,nstats, -+ x nrest,nfield,ntable,nevnt -+ -+ implicit none -+ integer,intent(in) :: kode -+ real(8),intent(in) :: arg -+ -+ if(onroot)then -+ -+ if(kode.eq.2500)then -+ -+ write(nrite,"( -+ x 'Error in number of collective variables - '// -+ x 'ncolvar too small?' -+ x )") -+ -+ elseif(kode.eq.2501)then -+ -+ write(nrite,"( -+ x 'Wang-Landau style recursion not yet implemented'// -+ x 'for ncolvar > 1' -+ x )") -+ -+ elseif(kode.eq.2502)then -+ -+ write(nrite,"('Unrecognised Gaussian height scheme')") -+ -+ elseif(kode.eq.2503)then -+ -+ write(nrite,"('Error maxhis exceeded in metadynamics')") -+ -+ elseif(kode.eq.2504)then -+ -+ write(nrite,"( -+ x 'Error allocating comms buffer in compute_bias_potential' -+ x )") -+ -+ elseif(kode.eq.2505)then -+ -+ write(nrite,"('Error allocating driven array')") -+ -+ elseif(kode.eq.2506)then -+ -+ write(nrite,"('Could not open METACONTROL')") -+ -+ elseif(kode.eq.2508)then -+ -+ write(nrite,"('Comms error in metadynamics setup')") -+ -+ elseif(kode.eq.2509)then -+ -+ write(nrite,"( -+ x 'Cannot bias local and global PE in same run' -+ x )") -+ -+ elseif(kode.eq.2510)then -+ -+ write(nrite,"('Error allocating local force arrays')") -+ -+ elseif(kode.eq.2511)then -+ -+ write(nrite,"( -+ x 'Error allocating collective variables arrays' -+ x )") -+ -+ elseif(kode.eq.2512)then -+ -+ write(nrite,"('Error allocating Wang-Landau bins')") -+ -+ elseif(kode.eq.2515)then -+ -+ write(nrite,"( -+ x 'Error allocating Steinhardt parameter arrays' -+ x )") -+ -+ elseif(kode.eq.2516)then -+ -+ write(nrite,"('Could not open STEINHARDT')") -+ -+ elseif(kode.eq.2517)then -+ -+ write(nrite,"('Error allocating q4site')") -+ -+ elseif(kode.eq.2518)then -+ -+ write(nrite,"('Error allocating q6site')") -+ -+ elseif(kode.eq.2519)then -+ -+ write(nrite,"('Error deallocating buff')") -+ -+ elseif(kode.eq.2521)then -+ -+ write(nrite,"('Error reading line ',i5,' of STEINHARDT' -+ x )")nint(arg) -+ -+ elseif(kode.eq.2522)then -+ -+ write(nrite,"( -+ x 'Error allocating Steinhardt parameter arrays' -+ x )") -+ -+ elseif(kode.eq.2523)then -+ -+ write(nrite,"('Could not open ZETA')") -+ -+ elseif(kode.eq.2524)then -+ -+ write(nrite,"('Error allocating zetasite')") -+ -+ elseif(kode.eq.2525)then -+ -+ write(nrite,"('Error allocating full neighbour list')") -+ -+ elseif(kode.eq.2527)then -+ -+ write(nrite,"( -+ x 'Number of collective variables incorrect for specified'// -+ x 'order parameters' -+ x )") -+ -+ elseif(kode.eq.2529)then -+ -+ write(nrite,"('Error reading line ',i5,' of ZETA' -+ x )")nint(arg) -+ -+ elseif(kode.eq.2531)then -+ -+ write(nrite,"('Comms error on reading METADYNAMICS')") -+ -+ elseif(kode.eq.2532)then -+ -+ write(nrite,"('Error in fc function - out of range')") -+ write(nrite,"('Value of r was ',1p,e14.6)")arg -+ -+ elseif(kode.eq.2533)then -+ -+ write(nrite,"( -+ x 'Error allocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2534)then -+ -+ write(nrite,"('Error allocating comms buffer arrays')") -+ -+ elseif(kode.eq.2535)then -+ -+ write(nrite,"('Solvation list overrun')") -+ -+ elseif(kode.eq.2536)then -+ -+ write(nrite,"( -+ x 'Error deallocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2537)then -+ -+ write(nrite,"('Error deallocating comms buffer arrays')") -+ -+ elseif(kode.eq.2538)then -+ -+ write(nrite,"( -+ x 'Error allocating solvation arrays for metadynamics' -+ x )") -+ -+ elseif(kode.eq.2540)then -+ -+ write(nrite,"('Error allocating force prefactor arrays')") -+ -+ elseif(kode.eq.2541)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2542)then -+ -+ write(nrite,"( -+ x 'Error in metafreeze_module.f90 mxninc too small' -+ x )") -+ -+ elseif(kode.eq.2543)then -+ -+ write(nrite,"('nnn too small in compute_tet_nlist')") -+ -+ elseif(kode.eq.2544)then -+ -+ write(nrite,"('mxflist too small in metafreeze_module')") -+ -+ elseif(kode.eq.2545)then -+ -+ write(nrite,"( -+ x 'Memory deallocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2546)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2547)then -+ -+ write(nrite,"( -+ x 'Memory deallocation error in compute_tet_nlist' -+ x )") -+ -+ elseif(kode.eq.2548)then -+ -+ write(nrite,"( -+ x 'Memory allocation error in compute_tet_nlist' -+ x )") -+ -+ endif -+ -+c close all i/o channels -+ -+ close (nrite) -+ close (nhist) -+ close (nread) -+ close (nconf) -+ close (nstats) -+ close (nrest) -+ close (nfield) -+ close (ntable) -+ close (nevnt) -+ close (stn) -+ close (zta) -+ close (mtd) -+ -+ endif -+ -+c shut down communications -+ -+ call gsync() -+ call exitcomms() -+ -+ end Subroutine Mfrz_Error -+ -+ end module metafreeze_module -+ -diff -urN dl_class_1.9.orig/srcmod/metal_module.f dl_class_1.9/srcmod/metal_module.f ---- dl_class_1.9.orig/srcmod/metal_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/metal_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,1669 @@ -+ module metal_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining metal potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use parse_module -+ use property_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ logical lmetab -+ integer, allocatable :: ltpmet(:),lstmet(:) -+ real(8), allocatable :: prmmet(:,:),vmet(:,:,:),dmet(:,:,:) -+ real(8), allocatable :: rho(:),elrcm(:),vlrcm(:),fmet(:,:,:) -+ -+ save lmetab,ltpmet,lstmet,prmmet,vmet,dmet,fmet,rho,elrcm,vlrcm -+ -+ contains -+ -+ subroutine alloc_met_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ integer i,fail,idnode -+ -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (ltpmet(mxmet),stat=fail(1)) -+ allocate (lstmet(mxmet),stat=fail(2)) -+ allocate (prmmet(mxmet,mxpmet),stat=fail(3)) -+ allocate (vmet(mxgrid,mxmet,2),stat=fail(4)) -+ allocate (dmet(mxgrid,mxmet,2),stat=fail(5)) -+ allocate (rho(mxatms),stat=fail(6)) -+ allocate (elrcm(0:mxsmet),stat=fail(7)) -+ allocate (vlrcm(0:mxsmet),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1280) -+ enddo -+ -+ end subroutine alloc_met_arrays -+ -+ subroutine define_metals -+ x (safe,lunits,lmols,idnode,ntpmet,ntpatm,rmet,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining metal potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom1,atom2 -+ character*1 message(80) -+ integer idnode,ntpmet,ntpatm,idum,imet,j -+ integer keypot,numpar,katm1,katm2,keymet,ntab,i,fail,itpmet -+ integer jtpatm -+ real(8) rmet,engunit -+ -+ real(8), allocatable :: parpot(:) -+ allocate (parpot(mxpmet),stat=fail) -+ -+ ntpmet=intstr(record,lenrec,idum) -+ -+ lmetab=.false. -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified metal ', -+ x 'potentials',i10)") ntpmet -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ',3x, -+ x ' key',30x,'parameters'/,/)") -+ -+ endif -+ -+ if(ntpmet.ge.mxmet) call error(idnode,71) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do imet=1,mxmet -+ lstmet(imet)=0 -+ ltpmet(imet)=0 -+ enddo -+ -+ do itpmet=1,ntpmet -+ -+ do i=1,mxpmet -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'stch') then -+ keypot=1 -+ numpar=5 -+ else if(keyword(1:4).eq.'fnsc') then -+ keypot=2 -+ numpar=7 -+ else if(keyword(1:4).eq.'gupt') then -+ keypot=3 -+ numpar=5 -+ elseif(keyword(1:4).eq.'eam ') then -+ keypot=999 -+ lmetab=.true. -+ numpar=0 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,461) -+ endif -+ -+ if(.not.lmetab)then -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ parpot(4)=dblstr(record,lenrec,idum) -+ parpot(5)=dblstr(record,lenrec,idum) -+ parpot(6)=dblstr(record,lenrec,idum) -+ parpot(7)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,2a8,2x,a4,3x,1p,9e13.5)") -+ x atom1,atom2,keyword(1:4),(parpot(j),j=1,numpar) -+ -+ endif -+ -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm1.eq.0.or.katm2.eq.0) then -+ call error(idnode,463) -+ endif -+ -+ keymet=loc2(katm1,katm2) -+ -+c convert energies to internal unit -+ -+ if(keymet.ge.mxmet) call error(idnode,465) -+ -+ parpot(1)=parpot(1)*engunit -+ -+ if(keypot.eq.2)then -+ -+ parpot(2)=parpot(2)*engunit -+ parpot(3)=parpot(3)*engunit -+ parpot(5)=parpot(5)*engunit -+ -+ endif -+ -+ if(keypot.eq.3)then -+ parpot(4)=parpot(4)*engunit -+ endif -+ -+ if(lstmet(keymet).ne.0) call error(idnode,141) -+ lstmet(keymet)=itpmet -+ ltpmet(itpmet)=keypot -+ if(itpmet.gt.1)then -+ if(keypot.ne.ltpmet(itpmet-1))call error(idnode,72) -+ endif -+ -+ if(.not.lmetab)then -+ -+ do i=1,numpar -+ prmmet(itpmet,i)=parpot(i) -+ enddo -+ -+ endif -+ -+ enddo -+ -+c check for unspecified atom-atom potentials -+ -+ ntab=(ntpatm*(ntpatm+1))/2 -+ -+ if(ntpmet.lt.ntab) then -+ -+ call warning(idnode,110,0.d0,0.d0,0.d0) -+ -+ do i=1,ntab -+ if(lstmet(i).eq.0) lstmet(i)=ntpmet+1 -+ enddo -+ -+c set zero potential for undefined interactions -+ -+ do i=1,mxmet -+ -+ vmet(1,i,1)=0.d0 -+ vmet(1,i,2)=0.d0 -+ dmet(1,i,1)=0.d0 -+ dmet(1,i,2)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c generate metal force arrays -+ -+ call metgen(idnode,ntpatm,rmet) -+ -+ if(lmetab) -+ x call mettab(ntpatm,idnode,rmet,engunit) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_metals -+ -+ subroutine metdens -+ x (idnode,imcon,mxnode,natms,engmet,virden) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local density in metals -+c using the verlet neighbour list and sutton-chen potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,imcon,mxnode,natms,i,j,k,ii,k0,l -+ real(8) engmet,engtmp,virden,rhosqr,rrr,ppp,fk0,fk1,fk2,t1,t2 -+ -+ safe=.true. -+ -+c initialise energy accumulator -+ -+ engmet=0.d0 -+ virden=0.d0 -+ -+c initialise density array -+ -+ do i=1,natms -+ rho(i)=0.d0 -+ enddo -+ -+c calculate local atomic density -+ -+ ii=0 -+ -+c outer loop over atoms -+ -+ do i=idnode+1,natms,mxnode -+ -+ ii=ii+1 -+ -+c calculate interatomic distances -+ -+ do k=1,lentry(ii) -+ -+ j=list(ii,k) -+ ilist(k)=j -+ xdf(k)=xxx(i)-xxx(j) -+ ydf(k)=yyy(i)-yyy(j) -+ zdf(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary conditions -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c square of distances -+ -+ do k=1,lentry(ii) -+ rsqdf(k)=xdf(k)**2+ydf(k)**2+zdf(k)**2 -+ enddo -+ -+ if(lmetab)then -+ -+c calculate EAM density contributions -+ -+ call eamden(safe,i,lentry(ii)) -+ -+ else -+ -+c calculate FS density contributions -+ -+ call fsden(safe,i,lentry(ii)) -+ -+ endif -+ -+ enddo -+ -+c global sum of local atomic densities -+ -+ if(mxnode.gt.1)call gdsum(rho,natms,buffer) -+ -+c calculate embedding energy -+ -+ if(lmetab)then -+ -+c density terms for eam potentials -+ -+ do i=1,natms -+ -+ if(rho(i).gt.0.d0)then -+ -+ k0=ltype(i) -+ rrr=rho(i)-fmet(2,k0,1) -+ l=min(nint(rrr/fmet(4,k0,1)),int(fmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=(rrr/fmet(4,k0,1))-dble(l) -+ -+c calculate embedding energy using 3-point interpolation -+ -+ fk0=fmet(l-1,k0,1) -+ fk1=fmet(l,k0,1) -+ fk2=fmet(l+1,k0,1) -+ -+ t1=fk1+(fk1-fk0)*ppp -+ t2=fk1+(fk2-fk1)*ppp -+ if(ppp.lt.0.d0)then -+ engtmp=-(t1+0.5d0*(t2-t1)*(ppp+1.d0)) -+ else -+ engtmp=-(t2+0.5d0*(t2-t1)*(ppp-1.d0)) -+ endif -+ -+ engmet=engmet+engtmp -+ -+c calculate derivative of embedding function wrt density using 3-point -+c interpolation - store result in rho array -+ -+ fk0=fmet(l-1,k0,2) -+ fk1=fmet(l,k0,2) -+ fk2=fmet(l+1,k0,2) -+ -+ t1=fk1+(fk1-fk0)*ppp -+ t2=fk1+(fk2-fk1)*ppp -+ if(ppp.lt.0.d0)then -+ rho(i)=(t1+0.5d0*(t2-t1)*(ppp+1.d0)) -+ else -+ rho(i)=(t2+0.5d0*(t2-t1)*(ppp-1.d0)) -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ else -+ -+c analytical square root of density dependence -+ -+ do i=1,natms -+ -+ if(rho(i).gt.0.d0)then -+ -+ rhosqr=sqrt(rho(i)+elrcm(ltype(i))) -+ engmet=engmet+rhosqr -+ rho(i)=0.5d0/rhosqr -+ virden=virden+vlrcm(ltype(i))/rhosqr -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ engmet=-engmet/dble(mxnode) -+ virden=virden/dble(mxnode) -+ -+c check interpolation is safe -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,142) -+ -+ return -+ end subroutine metdens -+ -+ subroutine fsden(safe,iatm,ik) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local atomic density -+c for FS type metal potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer iatm,jatm,ik,m,k0,l -+ real(8) rdr,ai,aj,ab,rsq,rrr,ppp,t1,t2 -+ real(8) vk0,vk1,vk2,density -+ -+c start of primary loop for density -+ -+ ai=dble(ltype(iatm)) -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ -+ aj=dble(ltype(jatm)) -+ if(ai.gt.aj) then -+ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 -+ else -+ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 -+ endif -+ -+ k0=lstmet(int(ab)) -+ -+ if((ltpmet(k0).ge.1).and.(abs(dmet(1,k0,1)).gt.0.d0))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+c apply cutoff condition -+ -+ if(rsq.le.dmet(3,k0,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,k0,1) -+ rrr=sqrt(rsq)-dmet(2,k0,1) -+ l=min(nint(rrr*rdr),int(dmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,k0,1) -+ vk1=dmet(l,k0,1) -+ vk2=dmet(l+1,k0,1) -+ -+ t1=vk1+ppp*(vk1-vk0) -+ t2=vk1+ppp*(vk2-vk1) -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ if(ai.gt.aj)then -+ -+ rho(iatm)=rho(iatm)+density*dmet(1,k0,2) -+ rho(jatm)=rho(jatm)+density*dmet(2,k0,2) -+ -+ else -+ -+ rho(iatm)=rho(iatm)+density*dmet(2,k0,2) -+ rho(jatm)=rho(jatm)+density*dmet(1,k0,2) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine fsden -+ -+ subroutine eamden(safe,iatm,ik) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating local atomic density -+c for EAM type metal potentials -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ logical safe -+ integer iatm,jatm,ik,m,l,ktyp1,ktyp2 -+ real(8) rdr,rsq,rrr,ppp,t1,t2 -+ real(8) vk0,vk1,vk2,density -+ -+c start of primary loop for density -+ -+ ktyp1=ltype(iatm) -+ -+ do m=1,ik -+ -+c first metal atom density -+ -+ jatm=ilist(m) -+ ktyp2=ltype(jatm) -+ -+ if(abs(dmet(1,ktyp2,1)).gt.0.d0)then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.le.dmet(3,ktyp2,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,ktyp2,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp2,1) -+ l=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,ktyp2,1) -+ vk1=dmet(l,ktyp2,1) -+ vk2=dmet(l+1,ktyp2,1) -+ -+ t1=vk1+ppp*(vk1-vk0) -+ t2=vk1+ppp*(vk2-vk1) -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ rho(iatm)=rho(iatm)+density -+ if(ktyp1.eq.ktyp2)rho(jatm)=rho(jatm)+density -+ -+ endif -+ -+ endif -+ -+ endif -+ -+c second metal atom density -+ -+ if(ktyp1.ne.ktyp2)then -+ -+ if(abs(dmet(1,ktyp1,1)).gt.0.d0)then -+ -+c apply truncation of potential -+ -+ if(rsq.le.dmet(3,ktyp1,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/dmet(4,ktyp1,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp1,1) -+ l=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate density using 3-point interpolation -+ -+ vk0=dmet(l-1,ktyp1,1) -+ vk1=dmet(l,ktyp1,1) -+ vk2=dmet(l+1,ktyp1,1) -+ -+ t1=vk1+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*ppp -+ if(ppp.lt.0.d0)then -+ density=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ density=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ rho(jatm)=rho(jatm)+density -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine eamden -+ -+ subroutine metfrc(safe,iatm,ik,engmet,virmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating metal forces -+c for EAM and FS potentials using a verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer iatm,jatm,ik,m,k0,l,ld,ktyp1,ktyp2 -+ real(8) engmet,virmet,strs -+ real(8) rdr,rsq,rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2 -+ real(8) gamma,gamma1,gamma2,gamma3,fx,fy,fz,fi -+ dimension fi(3),strs(6) -+ -+CDIR$ CACHE_ALIGN fi -+ -+c initialise potential energy and virial -+ -+ engmet=0.d0 -+ virmet=0.d0 -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ -+c store forces for iatm -+ -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ ktyp1=ltype(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ ktyp2=ltype(jatm) -+ k0=lstmet(loc2(ktyp1,ktyp2)) -+ -+ if((ltpmet(k0).gt.0).and.(abs(vmet(1,k0,1)).gt.0.d0))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.le.vmet(3,k0,1)**2)then -+ -+c interpolation parameters -+ -+ rdr=1.d0/vmet(4,k0,1) -+ rrr=sqrt(rsq)-vmet(2,k0,1) -+ l=min(nint(rrr*rdr),int(vmet(1,k0,1))-1) -+ if(l.lt.1)then -+ -+ safe=.false. -+ gamma1=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vmet(l-1,k0,1) -+ vk1=vmet(l,k0,1) -+ vk2=vmet(l+1,k0,1) -+ -+ t1=vk1+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*ppp -+ if(ppp.lt.0.d0)then -+ engmet=engmet+t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ engmet=engmet+t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+c calculate pair forces using 3-point interpolation -+ -+ gk0=vmet(l-1,k0,2) -+ gk1=vmet(l,k0,2) -+ gk2=vmet(l+1,k0,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma1=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma1=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+c calculate embedding forces using 3-point interpolation -+ -+ if(lmetab)then -+ -+ if(rsq.le.dmet(3,ktyp2,1)**2)then -+ -+ rdr=1.d0/dmet(4,ktyp2,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp2,1) -+ ld=min(nint(rrr*rdr),int(dmet(1,ktyp2,1))-1) -+ if(ld.lt.1)then -+ -+ safe=.false. -+ gamma2=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(ld) -+ -+ gk0=dmet(ld-1,ktyp2,2) -+ gk1=dmet(ld,ktyp2,2) -+ gk2=dmet(ld+1,ktyp2,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+ else -+ -+ gamma2=0.d0 -+ -+ endif -+ -+ if(ktyp1.eq.ktyp2)then -+ -+ gamma3=gamma2 -+ -+ elseif(rsq.le.dmet(3,ktyp1,1)**2)then -+ -+ rdr=1.d0/dmet(4,ktyp1,1) -+ rrr=sqrt(rsq)-dmet(2,ktyp1,1) -+ ld=min(nint(rrr*rdr),int(dmet(1,ktyp1,1))-1) -+ if(ld.lt.1)then -+ -+ safe=.false. -+ gamma3=0.d0 -+ -+ else -+ -+ ppp=rrr*rdr-dble(ld) -+ gk0=dmet(ld-1,ktyp1,2) -+ gk1=dmet(ld,ktyp1,2) -+ gk2=dmet(ld+1,ktyp1,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma3=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma3=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ endif -+ -+ else -+ -+ gamma3=0.d0 -+ -+ endif -+ -+ gamma=(gamma1+(gamma2*rho(iatm)+gamma3*rho(jatm)))/rsq -+ -+ else -+ -+ if(safe.and.rsq.le.dmet(3,k0,1)**2)then -+ -+ gk0=dmet(l-1,k0,2) -+ gk1=dmet(l,k0,2) -+ gk2=dmet(l+1,k0,2) -+ -+ t1=gk1+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*ppp -+ if(ppp.lt.0.d0)then -+ gamma2=t1+0.5d0*(t2-t1)*(ppp+1.d0) -+ else -+ gamma2=t2+0.5d0*(t2-t1)*(ppp-1.d0) -+ endif -+ -+ else -+ -+ gamma2=0.d0 -+ -+ endif -+ -+ if(ktyp1.gt.ktyp2)then -+ -+ gamma=(gamma1-gamma2*(rho(iatm)*dmet(1,k0,2)+ -+ x rho(jatm)*dmet(2,k0,2)))/rsq -+ -+ else -+ -+ gamma=(gamma1-gamma2*(rho(iatm)*dmet(2,k0,2)+ -+ x rho(jatm)*dmet(1,k0,2)))/rsq -+ -+ endif -+ -+ endif -+ -+c calculate forces -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+c calculate virial -+ -+ virmet=virmet-gamma*rsq -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ return -+ end subroutine metfrc -+ -+ subroutine metgen(idnode,ntpatm,rmet) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating potential energy and -+c force arrays for metal potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,kmet,mmet,katm1,katm2,ntpatm,imet,nmet -+ integer idnode,nnn,mmm -+ real(8) dlrpot,rmet,rrr,eps,sig,cc0,cc1,cc2,ccc -+ real(8) ddd,bet,cut1,cut2,aaa,rr0,ppp,qqq -+ -+c define grid resolution for potential arrays -+ -+ dlrpot=rmet/dble(mxgrid-1) -+ -+c construct arrays for metal potentials -+ -+ kmet=0 -+ do katm1=1,ntpatm -+ -+ do katm2=1,katm1 -+ -+ kmet=kmet+1 -+ imet=lstmet(kmet) -+ -+ if(ltpmet(imet).gt.0)then -+ -+c store array specification parameters -+ -+ vmet(1,imet,1)=dble(mxgrid) -+ vmet(2,imet,1)=0.d0 -+ vmet(3,imet,1)=rmet -+ vmet(4,imet,1)=dlrpot -+ -+ do i=1,4 -+ -+ vmet(i,imet,2)=vmet(i,imet,1) -+ dmet(i,imet,1)=vmet(i,imet,1) -+ dmet(i,imet,2)=0.d0 -+ -+ enddo -+ -+ if(ltpmet(imet).eq.1)then -+ -+c sutton-chen potentials -+ -+ eps=prmmet(imet,1) -+ sig=prmmet(imet,2) -+ nnn=nint(prmmet(imet,3)) -+ mmm=nint(prmmet(imet,4)) -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=eps*(sig/rrr)**nnn -+ vmet(i,imet,2)=dble(nnn)*eps*(sig/rrr)**nnn -+ dmet(i,imet,1)=(sig/rrr)**mmm -+ dmet(i,imet,2)=dble(mmm)*(sig/rrr)**mmm -+ -+ enddo -+ -+ if(katm1.eq.katm2)then -+ -+ dmet(1,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 -+ dmet(2,imet,2)=(prmmet(imet,1)*prmmet(imet,5))**2 -+ -+ else -+ -+ nmet=lstmet((katm1*(katm1+1))/2) -+ mmet=lstmet((katm2*(katm2+1))/2) -+ dmet(1,imet,2)=(prmmet(nmet,1)*prmmet(nmet,5))**2 -+ dmet(2,imet,2)=(prmmet(mmet,1)*prmmet(mmet,5))**2 -+ -+ endif -+ -+ else if(ltpmet(imet).eq.2)then -+ -+c finnis sinclair potentials -+ -+ cc0=prmmet(imet,1) -+ cc1=prmmet(imet,2) -+ cc2=prmmet(imet,3) -+ ccc=prmmet(imet,4) -+ ddd=prmmet(imet,6) -+ bet=prmmet(imet,7) -+ cut1=ccc+4.d0*dlrpot -+ cut2=ddd+4.d0*dlrpot -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=0.d0 -+ vmet(i,imet,2)=0.d0 -+ dmet(i,imet,1)=0.d0 -+ dmet(i,imet,2)=0.d0 -+ -+ if(rrr.le.cut1)then -+ -+ vmet(i,imet,1)=(cc0+cc1*rrr+cc2*rrr*rrr)*(rrr-ccc)**2 -+ vmet(i,imet,2)=-rrr*(2.d0*(cc0+cc1*rrr+cc2*rrr*rrr)* -+ x (rrr-ccc)+(cc1+2.d0*cc2*rrr)*(rrr-ccc)**2) -+ -+ endif -+ -+ if(rrr.le.cut2)then -+ -+ dmet(i,imet,1)=(rrr-ddd)**2+bet*(rrr-ddd)**3/ddd -+ dmet(i,imet,2)=-rrr*(2.d0*(rrr-ddd)+ -+ x 3.d0*bet*(rrr-ddd)**2/ddd) -+ -+ endif -+ -+ enddo -+ -+ if(katm1.eq.katm2)then -+ -+ dmet(1,imet,2)=prmmet(imet,5)**2 -+ dmet(2,imet,2)=prmmet(imet,5)**2 -+ -+ else -+ -+ nmet=lstmet((katm1*(katm1+1))/2) -+ mmet=lstmet((katm2*(katm2+1))/2) -+ dmet(1,imet,2)=prmmet(nmet,5)**2 -+ dmet(2,imet,2)=prmmet(mmet,5)**2 -+ -+ endif -+ -+ else if(ltpmet(imet).eq.3)then -+ -+c gupta potentials -+ -+ aaa=prmmet(imet,1) -+ rr0=prmmet(imet,2) -+ ppp=prmmet(imet,3) -+ qqq=prmmet(imet,5) -+ -+ do i=5,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ vmet(i,imet,1)=aaa*exp(-ppp*(rrr-rr0)/rr0) -+ vmet(i,imet,2)=vmet(i,imet,1)*rrr*ppp/rr0 -+ dmet(i,imet,1)=exp(-2.d0*qqq*(rrr-rr0)/rr0) -+ dmet(i,imet,2)=2.d0*dmet(i,imet,1)*rrr*qqq/rr0 -+ -+ enddo -+ -+ dmet(1,imet,2)=prmmet(imet,4)**2 -+ dmet(2,imet,2)=prmmet(imet,4)**2 -+ -+ else if(.not.lmetab)then -+ -+ call error(idnode,151) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine metgen -+ -+ subroutine lrcmetal -+ x (idnode,imcon,natms,ntpatm,engunit,rmet,volm) -+ -+c************************************************************************* -+c -+c DL_POLY subroutine to evaluate long-range corrections to -+c pressure and energy in a periodic metal system. -+c -+c copyright daresbury laboratory -+c author - w. smith june 1995 -+c amended - w. smith march 2006 -+c -+c*************************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,imcon,natms,ntpatm,i,ka,j -+ integer kmet,k0,k1,k2 -+ real(8) engunit,rmet,volm,twopi,forpi,eps,sig,nnn,mmm,ccc -+ real(8) elrcm0,elrcm1,elrcm2,vlrcm0,vlrcm1,vlrcm2,aaa,rr0,ppp -+ real(8) zet,qqq,eee -+ -+ save newjob -+ data newjob/.true./ -+ -+ twopi=2.0d0*pi -+ forpi=4.0d0*pi -+ -+c initalise counter arrays -+ -+ do i=1,mxsmet -+ numtyp(i)=0 -+ enddo -+ -+c evaluate species populations in system -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp(ka)=numtyp(ka)+1 -+ -+ enddo -+ -+c number densities -+ -+ do i=1,ntpatm -+ dens(i)=dble(numtyp(i))/volm -+ enddo -+ -+c long range corrections to density, energy and pressure -+ -+ do i=0,mxsmet -+ -+ elrcm(i)=0.d0 -+ vlrcm(i)=0.d0 -+ -+ enddo -+ -+ if(imcon.ne.0.and.imcon.ne.6) then -+ -+ kmet=0 -+ do i=1,ntpatm -+ -+ do j=1,i -+ -+ elrcm0=0.d0 -+ elrcm1=0.d0 -+ elrcm2=0.d0 -+ vlrcm0=0.d0 -+ vlrcm1=0.d0 -+ vlrcm2=0.d0 -+ -+ kmet=kmet+1 -+ k0=lstmet(kmet) -+ -+ if(ltpmet(k0).eq.1) then -+ -+c sutton-chen potentials -+ -+ eps=prmmet(k0,1) -+ sig=prmmet(k0,2) -+ nnn=prmmet(k0,3) -+ mmm=prmmet(k0,4) -+ ccc=prmmet(k0,5) -+ -+ elrcm0=eps*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) -+ vlrcm0=eps*nnn*sig**3*(sig/rmet)**(nnn-3.d0)/(nnn-3.d0) -+ if(i.ne.j) then -+ elrcm0=elrcm0*2.d0 -+ vlrcm0=vlrcm0*2.d0 -+ endif -+ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 -+ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 -+ -+ if(i.eq.j) then -+ -+ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (eps*ccc)**2 -+ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 -+ -+ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (eps*ccc)**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 -+ -+ else -+ -+ k1=lstmet((i*(i+1))/2) -+ k2=lstmet((j*(j+1))/2) -+ elrcm1=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k1,1)*prmmet(k1,5))**2 -+ elrcm2=sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k2,1)*prmmet(k2,5))**2 -+ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 -+ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 -+ -+ vlrcm1=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k1,1)*prmmet(k1,5))**2 -+ vlrcm2=mmm*sig**3*(sig/rmet)**(mmm-3.d0)/(mmm-3.d0)* -+ x (prmmet(k2,1)*prmmet(k2,5))**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 -+ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 -+ -+ endif -+ -+ else if(ltpmet(k0).eq.3) then -+ -+c gupta potentials -+ -+ aaa=prmmet(k0,1) -+ rr0=prmmet(k0,2) -+ ppp=prmmet(k0,3) -+ zet=prmmet(k0,4) -+ qqq=prmmet(k0,5) -+ eee=exp(-ppp*(rmet-rr0)/rr0) -+ -+ elrcm0=aaa*(rr0/ppp)*(rmet**2+2.d0*rmet*(rr0/ppp)+ -+ x 2.d0*(rr0/ppp)**2)*eee -+ vlrcm0=aaa*(rmet**3+3.d0*rmet**2*(rr0/ppp)+ -+ x 6.d0*rmet*(rr0/ppp)**2+6.d0*(rr0/rmet)**3)*eee -+ if(i.ne.j) then -+ elrcm0=elrcm0*2.d0 -+ vlrcm0=vlrcm0*2.d0 -+ endif -+ elrcm(0)=elrcm(0)+twopi*volm*dens(i)*dens(j)*elrcm0 -+ vlrcm(0)=vlrcm(0)-twopi*volm*dens(i)*dens(j)*vlrcm0 -+ -+ eee=exp(-2.d0*qqq*(rmet-rr0)/rr0) -+ -+ if(i.eq.j) then -+ -+ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee*zet**2 -+ elrcm(i)=elrcm(i)+forpi*dens(i)*elrcm1 -+ -+ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(i)*vlrcm1 -+ -+ else -+ -+ elrcm1=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* -+ x zet**2 -+ elrcm2=(rmet**2+2.d0*rmet*(0.5d0*rr0/qqq)+ -+ x 2.d0*(0.5d0*rr0/qqq)**2)*(0.5d0*rr0/qqq)*eee* -+ x zet**2 -+ elrcm(i)=elrcm(i)+forpi*dens(j)*elrcm1 -+ elrcm(j)=elrcm(j)+forpi*dens(i)*elrcm2 -+ -+ vlrcm1=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm2=(rmet**3+3.d0*rmet**2*(0.5d0*rr0/qqq)+ -+ x 6.d0*rmet*(0.5d0*rr0/qqq)**2+(0.5d0*rr0/qqq)**3)* -+ x eee*zet**2 -+ vlrcm(i)=vlrcm(i)+twopi*dens(j)*vlrcm1 -+ vlrcm(j)=vlrcm(j)+twopi*dens(i)*vlrcm2 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/, -+ x 'long range corrections for metal potentials',/)") -+ write(nrite, -+ x "('short range energy and virial corrections:', -+ x 1p,2e15.6,/)") -+ x elrcm(0)/engunit,vlrcm(0)/engunit -+ write(nrite, -+ x "('density dependent energy and virial corrections',/)") -+ -+ do i=1,ntpatm -+ -+ kmet=lstmet((i*(i+1))/2) -+ if(lstmet(kmet).gt.0)then -+ -+ write(nrite,"(25x,a8,1p,2e15.6)")unqatm(i), -+ x elrcm(i)/engunit,vlrcm(i)/engunit -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lrcmetal -+ -+ subroutine mettab(ntpatm,idnode,rmet,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for reading potential energy and -+c force arrays for EAM metal forces only -+c -+c copyright - daresbury laboratory -+c author - w. smith march 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 atom1,atom2,type -+ integer idnode,ntpatm,idum,fail -+ integer imet,katm1,katm2,jtpatm,i,j,k,ktype -+ integer numpot,numpts,ipot -+ real(8) rmet,engunit,start,finish -+ data fail/0/ -+ -+c allocate embedding array -+ -+ allocate(fmet(mxgrid,mxmet,2),stat=fail) -+ if(fail.ne.0)call error(idnode,36) -+ -+c define zero function for undefined interactions -+ -+ do i=1,mxmet -+ -+ fmet(1,i,1)=0.d0 -+ fmet(1,i,2)=0.d0 -+ -+ enddo -+ -+ if(idnode.eq.0)open (ntable,file='TABEAM') -+ -+c skip header record -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ -+c read number of potential functions in file -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ numpot=intstr(record,lenrec,idum) -+ -+ do ipot=1,numpot -+ -+c read data type, atom labels, number of points, start and end -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ -+c indentify data type -+ -+ ktype=1 -+ if(findstring('dens',record,idum).or. -+ x findstring('DENS',record,idum))ktype=2 -+ if(findstring('embe',record,idum).or. -+ x findstring('EMBE',record,idum))ktype=3 -+ call getword(type,record,8,lenrec) -+ -+c identify atom types -+ -+ call getword(atom1,record,8,lenrec) -+ if(ktype.eq.1)then -+ call getword(atom2,record,8,lenrec) -+ else -+ atom2=atom1 -+ endif -+ -+c data specifiers -+ -+ numpts=intstr(record,lenrec,idum) -+ start=dblstr(record,lenrec,idum) -+ finish=dblstr(record,lenrec,idum) -+ -+c check atom indentities -+ -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm1.eq.0.or.katm2.eq.0) then -+ if(idnode.eq.0) -+ x write(nrite,'(a)') ' **** '//atom1//' *** '//atom2//' ****' -+ call error(idnode,81) -+ endif -+ -+c check array dimensions -+ -+ if(mxbuff.lt.numpts+4)then -+ -+ if(idnode.eq.0) -+ x write(nrite,*) 'mxbuff must be >=',numpts+4,' in mettab' -+ call error(idnode,28) -+ -+ endif -+ -+c store working parameters (start shifted for DL_POLY interpolation) -+ -+ buffer(1)=dble(numpts+4) -+ buffer(4)=(finish-start)/dble(numpts-1) -+ buffer(2)=start-5.d0*buffer(4) -+ buffer(3)=finish -+ if(idnode.eq.0) -+ x write(nrite,"(16x,2a8,2x,a4,3x,1p,4e13.5)") -+ x atom1,atom2,type,dble(numpts),start,finish,buffer(4) -+ -+c read potential arrays -+ -+ k=4 -+ do j=1,(numpts+3)/4 -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_eamtable_read(idnode,ntable) -+ buffer(k+1)=dblstr(record,lenrec,idum) -+ buffer(k+2)=dblstr(record,lenrec,idum) -+ buffer(k+3)=dblstr(record,lenrec,idum) -+ buffer(k+4)=dblstr(record,lenrec,idum) -+ k=k+4 -+ -+ enddo -+ -+c copy data to internal arrays -+ -+ if(ktype.eq.1)then -+ -+c check range against specified cutoff -+ -+ if(rmet.lt.finish)call error(idnode,26) -+ -+c identify potential -+ -+ imet=lstmet(loc2(katm1,katm2)) -+ -+c pair potential terms -+ -+ vmet(1,imet,1)=buffer(1) -+ vmet(2,imet,1)=buffer(2) -+ vmet(3,imet,1)=buffer(3) -+ vmet(4,imet,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ vmet(i,imet,1)=0.d0 -+ else -+ vmet(i,imet,1)=buffer(i)*engunit -+ buffer(i)=buffer(i)*engunit -+ endif -+ -+ enddo -+ -+c calculate derivative of pair potential function -+ -+ call metal_deriv(imet,vmet,buffer) -+ -+c adapt derivatives for use in interpolation -+ -+ do i=5,numpts+4 -+ vmet(i,imet,2)=-(dble(i)*buffer(4)+buffer(2))* -+ x vmet(i,imet,2) -+ enddo -+ -+ else if(ktype.eq.2)then -+ -+c check range against specified cutoff -+ -+ if(rmet.lt.finish)call error(idnode,26) -+ -+c density terms -+ -+ dmet(1,katm1,1)=buffer(1) -+ dmet(2,katm1,1)=buffer(2) -+ dmet(3,katm1,1)=buffer(3) -+ dmet(4,katm1,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ dmet(i,katm1,1)=0.d0 -+ else -+ dmet(i,katm1,1)=buffer(i) -+ endif -+ -+ enddo -+ -+c calculate derivative of density function -+ -+ call metal_deriv(katm1,dmet,buffer) -+ -+c adapt derivatives for use in interpolation -+ -+ dmet(1,katm1,2)=0.d0 -+ dmet(2,katm1,2)=0.d0 -+ dmet(3,katm1,2)=0.d0 -+ dmet(4,katm1,2)=0.d0 -+ do i=5,numpts+4 -+ dmet(i,katm1,2)=-(dble(i)*buffer(4)+buffer(2))* -+ x dmet(i,katm1,2) -+ enddo -+ -+ else if(ktype.eq.3)then -+ -+c embedding function arrays -+ -+ fmet(1,katm1,1)=buffer(1) -+ fmet(2,katm1,1)=buffer(2) -+ fmet(3,katm1,1)=buffer(3) -+ fmet(4,katm1,1)=buffer(4) -+ -+ do i=5,mxgrid -+ -+ if(i-4.gt.numpts)then -+ fmet(i,katm1,1)=0.d0 -+ else -+ fmet(i,katm1,1)=buffer(i)*engunit -+ buffer(i)=buffer(i)*engunit -+ endif -+ -+ enddo -+ -+c calculate derivative of embedding function -+ -+ call metal_deriv(katm1,fmet,buffer) -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (ntable) -+ -+ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') -+ x 'potential tables read from TABEAM file' -+ -+ return -+ end subroutine mettab -+ -+ subroutine metal_deriv(ityp,vvv,buffer) -+ -+c********************************************************************** -+c -+c calculate numerical derivatives of tabulated EAM metal potentials -+c -+c copyright - daresbury laboratory -+c author - w.smith march 2006 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer ityp,i,npt -+ real(8) vvv,buffer,delmet,aa0,aa1,aa2,aa3,aa4,d1y,d2y,d3y,d4y -+ real(8) f0,f1,f2,f3,f4 -+ -+ dimension vvv(mxgrid,mxmet,2),buffer(mxbuff) -+ -+c interpolation parameters -+ -+ vvv(1,ityp,2)=buffer(1) -+ vvv(2,ityp,2)=buffer(2) -+ vvv(3,ityp,2)=buffer(3) -+ vvv(4,ityp,2)=buffer(4) -+ -+c construct interpolation table -+ -+ delmet=buffer(4) -+ npt=nint(buffer(1))-2 -+ do i=7,npt -+ -+ aa0=buffer(i) -+ f0=buffer(i-2)/aa0 -+ f1=buffer(i-1)/aa0 -+ f2=1.d0 -+ f3=buffer(i+1)/aa0 -+ f4=buffer(i+2)/aa0 -+ -+c calculate numerical differences for 5-point interpolation -+ -+ d1y=(f1-f0) -+ d2y=(f2-f1)-(f1-f0) -+ d3y=(f3-f0)+3.d0*(f1-f2) -+ d4y=(f4-f3)+3.d0*(f2-f3)+3.d0*(f2-f1)+(f0-f1) -+ -+c calculate polynomial coefficients -+ -+ aa0=aa0/delmet -+ aa4=d4y/24.d0 -+ aa3=(d3y+12.d0*aa4)/6.d0 -+ aa2=(d2y+6.d0*aa3-14.d0*aa4)/2.d0 -+ aa1=d1y+3.d0*aa2-7.d0*aa3+15.d0*aa4 -+ -+c calculate derivatives -+ -+ vvv(i,ityp,2)=aa1*aa0 -+ -+c derivatives at extremes of range -+ -+ if(i.eq.7)then -+ -+ vvv(5,ityp,2)=(aa1-4.d0*aa2+12.d0*aa3-32.d0*aa4)*aa0 -+ vvv(6,ityp,2)=(aa1-2.d0*aa2+3.d0*aa3-4.d0*aa4)*aa0 -+ -+ else if(i.eq.npt)then -+ -+ vvv(npt+1,ityp,2)=(aa1+2.d0*aa2+3.d0*aa3+4.d0*aa4)*aa0 -+ vvv(npt+2,ityp,2)=(aa1+4.d0*aa2+12.d0*aa3+32.d0*aa4)*aa0 -+ -+ endif -+ -+ enddo -+ -+c set derivatives to zero beyond end point of function -+ -+ do i=npt+3,mxgrid -+ vvv(i,ityp,2)=0.d0 -+ enddo -+ -+ return -+ end subroutine metal_deriv -+ -+ subroutine abort_eamtable_read(idnode,ntable) -+ -+c*********************************************************************** -+c -+c dl_poly error exit subroutine for reading TABEAM file -+c -+c copyright - daresbury laboratory -+c author - w. smith mar 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer idnode,ntable -+ -+ if(idnode.eq.0)close (ntable) -+ -+ call error(idnode,29) -+ -+ end subroutine abort_eamtable_read -+ -+ end module metal_module -diff -urN dl_class_1.9.orig/srcmod/neu_coul_module.f dl_class_1.9/srcmod/neu_coul_module.f ---- dl_class_1.9.orig/srcmod/neu_coul_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/neu_coul_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,731 @@ -+ module neu_coul_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining neutral group coulomb terms -+c copyright - daresbury laboratory -+c -+c author - w. smith aug 2006 -+c adapted - p.-a. cazade oct 2007 : solvation, free energy etc -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use ewald_module -+ use metafreeze_module -+ use pair_module -+ use setup_module -+ use solvation_module -+ -+ contains -+ -+ subroutine coul0neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c 1/r potential, no truncation or damping. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,epsq,chgprd,rsq,rrr,coul,reps,fcoul -+ real(8) fx,fy,fz -+ real(8) strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ reps=r4pie0/epsq -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(jatm)*chge(iatm)*reps -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+ rsq=rsqdf(m) -+ rrr=sqrt(rsq) -+ -+c calculate coulomb energy and force -+ -+ coul=chgprd/rrr -+ fcoul=coul/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+coul -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-coul -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul0neu -+ -+ subroutine coul2neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces -+c assuming a distance dependant dielectric `constant'. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,epsq,fx,fy,fz,chgprd,rrsq,coul,egamma -+ real(8) strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(iatm)*chge(jatm)*r4pie0/epsq -+ -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate potential energy -+ -+ rrsq=1.d0/rsqdf(m) -+ coul=chgprd*rrsq -+ egamma=2.d0*coul*rrsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+2.d0*coul -+ coul=lambda1*coul -+ egamma=lambda1*egamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-2.d0*coul -+ coul=lambda2*coul -+ egamma=lambda2*egamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and Virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-2.d0*coul -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate forces -+ -+ fx=egamma*xdf(m) -+ fy=egamma*ydf(m) -+ fz=egamma*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-2.d0*coul -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul2neu -+ -+ subroutine coul3neu -+ x (lsolva,lfree,lexcite,ik,engcpe,vircpe,epsq,rcut,alpha) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic force. -+c reaction field potential -+c Ref: M Neumann, J Chem Phys, 82, 5633, (1985) -+c adapted for fennell-gezelter coulombic model -+c by w.smith june 2007 -+c Ref: CJ Fennell and JD Gezelter, J Chem Phys, -+c 124, 234104, (2006) -+c adapted for solvation, free energy and excitation -+c - p.-a. cazade oct 2007 -+c -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester february 1995 -+c stress tensor - t.forester feb 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lexcite,lselect,lskip,newjob,idrive,jdrive -+ integer ik,m,iatm,jatm,kkk -+ real(8) engcpe,vircpe,rcut,epsq,vcon,fcon,rdr,ppp,erc1,fer1 -+ real(8) rcsq,b0,rfld0,rfld1,rfld2,chgprd,rsq,coul,omega,fcoul -+ real(8) fx,fy,fz,rrr,alpha,a1,a2,a3,a4,a5,pp,tt,exp1 -+ real(8) strs(6),strs_loc(6) -+ -+ save newjob,b0,rfld0,rfld1,rfld2,vcon,fcon -+ -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+c reaction field terms -+ -+ b0=2.d0*(epsq-1.d0)/(2.d0*epsq+1.d0) -+ rfld0=b0/rcut**3 -+ rfld1=(1.d0+b0*0.5d0)/rcut -+ rfld2=rfld0*0.5d0 -+ -+c screened coulomb terms -+ -+ tt=1.d0/(1.d0+pp*alpha*rcut) -+ exp1=exp(-(alpha*rcut)**2) -+ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rcut -+ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/(rcut*rcut) -+ vcon=erc1+rfld2*rcut**2-rfld1 -+ fcon=rcut*fer1-rfld0*rcut -+ -+ endif -+ -+ lskip=(lfree.or.lexcite) -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic index and charge product -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ chgprd=chge(jatm)*chge(iatm)*r4pie0 -+ if(abs(chgprd).gt.1.d-10)then -+ -+c calculate interatomic distance -+ -+ rsq=rsqdf(m) -+ rrr=sqrt(rsq) -+ -+c error function terms -+ -+ tt=1.d0/(1.d0+pp*alpha*rrr) -+ exp1=exp(-(alpha*rrr)**2) -+ erc1=tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*exp1/rrr -+ fer1=(erc1+2.d0*(alpha/sqrpi)*exp1)/rsq -+ -+c calculate potential energy -+ -+ omega=erc1-vcon+fcon*(rrr-rcut) -+ coul=chgprd*(omega+rfld2*rsq-rfld1) -+ -+c calculate forces -+ -+ fcoul=chgprd*(fer1-fcon/rrr-rfld0) -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_exc(kkk)=cou_exc(kkk)+coul -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre-coul -+ cou_vir=cou_vir+fcoul*rsq -+ coul=lambda1*coul -+ fcoul=lambda1*fcoul -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ cou_fre=cou_fre+coul -+ cou_vir=cou_vir-fcoul*rsq -+ coul=lambda2*coul -+ fcoul=lambda2*fcoul -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate coulombic energy and virial -+ -+ engcpe=engcpe+coul -+ vircpe=vircpe-fcoul*rsq -+ -+c calculate solvation energy -+ -+ if(lsolva)cou_sol(kkk)=cou_sol(kkk)+coul -+ -+c calculate coulombic force -+ -+ fx=fcoul*xdf(m) -+ fy=fcoul*ydf(m) -+ fz=fcoul*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local definitions -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+coul -+ vir_loc=vir_loc-fcoul*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine coul3neu -+ -+ end module neu_coul_module -diff -urN dl_class_1.9.orig/srcmod/nlist_builders_module.f dl_class_1.9/srcmod/nlist_builders_module.f ---- dl_class_1.9.orig/srcmod/nlist_builders_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/nlist_builders_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,2216 @@ -+ module nlist_builders_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining neighbourlist builder routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use exclude_module -+ use pair_module -+ use setup_module -+ use utility_module -+ -+ contains -+ -+ subroutine nlist_driver -+ x (newlst,lneut,lnsq,loglnk,ltad,natms,idnode,mxnode,imcon, -+ x nneut,keyfce,rcut,delr,tstep) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to select and implement neighbour list -+c builders for short range force calculations -+c -+c copyright - daresbury laboratory -+c author - w. smith june 2006 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,lneut,lnsq,loglnk,newjob,ltad -+ integer natms,idnode,mxnode,imcon,nneut,keyfce -+ real(8) rcut,delr,tstep -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+c skip if no pair force calculations required -+ -+ if(keyfce.gt.0)then -+ -+c test for updating the Verlet list -+ -+ if(ltad)then -+ -+ call vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) -+ -+ else -+ -+ call vertest(newlst,idnode,mxnode,natms,delr,tstep) -+ -+ endif -+ -+c set up nonbonded interaction (verlet) list -+ -+ newlst=(newjob.or.newlst) -+ -+ if(newlst)then -+ -+ if(.not.lneut)then -+ -+ if(lnsq)then -+ -+c calculate distant interactions explicitly -+ -+ call parlst_nsq(newlst,natms,idnode,mxnode,imcon,rcut) -+ -+ elseif(loglnk)then -+ -+c ignore real space distant interactions -+ -+ call parlink -+ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+ else -+ -+ call parlst -+ x (newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+ endif -+ -+ else -+ -+ if(.not.loglnk)then -+ -+ call parneulst -+ x (newlst,lneut,nneut,idnode,mxnode,imcon,rcut, -+ x delr) -+ -+ else -+ -+ call parlinkneu -+ x (newlst,natms,nneut,idnode,mxnode,imcon, -+ x rcut,delr) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ newjob=.false. -+ -+ return -+ end subroutine nlist_driver -+ -+ subroutine parlst(newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atoms taken into account -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w.smith march 1992 -+c modified - t.forester october 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,lfrzi,ldo -+ integer natms,idnode,mxnode,imcon,ibig,last,mpm2 -+ integer npm2,idum,i,m,ii,j -+ real(8) rcut,delr,rclim,rsq -+ -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c check size of work array -+ -+ if(mxxdf.lt.(natms+1)/2)then -+ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', -+ x (natms+1)/2 -+ call error(idnode,474) -+ endif -+ -+c set control variables -+ -+ last=natms -+ lchk=.true. -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius -+ -+ rclim=(rcut+delr)**2 -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ noxatm(i)=1 -+ -+ enddo -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate atoms to neighbour list -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ -+c reject atoms in excluded pair list -+ -+ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) -+ x then -+ -+ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) -+ -+c reject frozen atom pairs -+ -+ else -+ -+ ldo=.true. -+ if(lfrzi)ldo=(lstfrz(j).eq.0) -+ -+ if(ldo)then -+ -+c calculate interatomic distance -+ -+ if(imcon.eq.6)then -+ -+ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii) -+ -+ else -+ -+ rsq=xdf(ii)*xdf(ii)+ydf(ii)*ydf(ii)+zdf(ii)*zdf(ii) -+ -+ endif -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.lt.rclim)then -+ -+ lentry(ii)=lentry(ii)+1 -+ -+ if(lentry(ii).gt.mxlist)then -+ -+ lchk=.false. -+ ibig=max(lentry(ii),ibig) -+ -+ endif -+ -+c compile neighbour list array -+ -+ if(lchk)then -+ -+ list(ii,lentry(ii))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be at least ',ibig -+ write(nrite,*) ' mxlist is currently ',mxlist -+ endif -+ call error(idnode,110) -+ -+ endif -+ -+c check all excluded atoms are accounted for -+ -+ do i=1,ii -+ -+ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. -+ -+ enddo -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk) call error(idnode,160) -+ -+ endif -+ -+ return -+ end subroutine parlst -+ -+ subroutine parlink(newlst,natms,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on link-cell method. -+c frozen atoms taken into account -+c -+c to be used with the link version of exclude :exclude_link -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1993 -+c author - t. forester september 1993. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,linc,newjob,lfrzi,ldo -+ integer natms,idnode,mxnode,imcon,idum,nix,niy,niz,fail -+ integer i,ibig,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz,j,icell -+ integer ic,ii,kc,ik,jx,jy,jz,jc,ixl -+ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz -+ real(8) cx,cy,cz,sxd,syd,szd,xd,yd,zd,rsq -+ -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension nix(508),niy(508),niz(508) -+ -+ save newjob -+ data newjob/.true./ -+ -+ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1,2,0,0,-2,2,-1,1,0,-2,2,0, -+ x 0,-1,1,0,-1,1,-2,2,-2,2,-1,1,-1,1,-1,1,-2,2,0,-2,2,0,-2,2,-2,2, -+ x -1,1,-2,2,-2,2,-1,1,-2,2,-2,2,3,0,0,-3,3,-1,1,0,-3,3,0,0,-1,1,0, -+ x -1,1,-3,3,-3,3,-1,1,-1,1,-1,1,-3,3,-2,2,0,-3,3,0,0,-2,2,0,-2,2, -+ x -3,3,-3,3,-2,2,-1,1,-3,3,-3,3,-1,1,-1,1,-2,2,-2,2,-1,1,-2,2,-3,3, -+ x -3,3,-2,2,-2,2,-2,2,-3,3,0,-3,3,0,-3,3,-3,3,-1,1,-3,3,-3,3,-1,1, -+ x -3,3,-3,3,-2,2,-3,3,-3,3,-2,2,-3,3,-3,3,4,0,0,-4,4,-1,1,0,-4,4,0, -+ x 0,-1,1,0,-1,1,-4,4,-4,4,-1,1,-1,1,-1,1,-4,4,-2,2,0,-4,4,0,0,-2,2, -+ x 0,-2,2,-4,4,-4,4,-2,2,-1,1,-4,4,-4,4,-1,1,-1,1,-2,2,-2,2,-1,1,-2, -+ x 2,-4,4,-4,4,-2,2,-2,2,-2,2,-4,4,-3,3,0,-4,4,0,0,-3,3,0,-3,3,-4,4, -+ x -4,4,-3,3,-1,1,-4,4,-4,4,-1,1,-1,1,-3,3,-3,3,-1,1,-3,3,-4,4,-4,4, -+ x -3,3,-2,2,-4,4,-4,4,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3,-4,4,-4,4,-3,3, -+ x -3,3,-3,3,-4,4,0,-4,4,0,-4,4,-4,4,-1,1,-4,4,-4,4,-1,1,-4,4,-4,4, -+ x -2,2,-4,4,-4,4,-2,2,-4,4,-4,4,-3,3,-4,4,-4,4,-3,3,5,0,0,-5,5,-1, -+ x 1,0,-5,5,0,0,-1,1,0,-1,1,-5,5,-5,5,-1,1,-1,1,-1,1,-5,5,-2,2,0,-5, -+ x 5,0,0,-2,2,0,-2,2,-5,5,-5,5,-2,2,-1,1,-5,5,-5,5,-1,1,-1,1,-2,2, -+ x -2,2,-1,1,-2,2,-5,5,-5,5,-2,2,-2,2,-2,2,-5,5,-3,3,0,-5,5,0,0,-3, -+ x 3,0,-3,3,-5,5,-5,5,-3,3,-1,1,-5,5,-5,5,-1,1,-1,1,-3,3,-3,3,-1,1, -+ x -3,3,-5,5,-5,5,-3,3,-2,2,-5,5,-5,5,-2,2,-2,2,-3,3,-3,3,-2,2,-3,3, -+ x -5,5,-5,5,-3,3,-3,3,-3,3/ -+ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1,0,2,0,1,1,2,2,-2,0,0,2, -+ x -1,0,0,1,-2,-2,-1,-1,1,1,2,2,-1,-1,1,1,2,2,-2,0,0,2,-2,-2,2,2,-2, -+ x -2,-1,-1,1,1,2,2,-2,-2,2,2,0,3,0,1,1,3,3,-3,0,0,3,-1,0,0,1,-3,-3, -+ x -1,-1,1,1,3,3,-1,-1,1,1,2,2,3,3,-3,0,0,3,-2,0,0,2,-3,-3,-2,-2,2, -+ x 2,3,3,-3,-3,-1,-1,1,1,3,3,-2,-2,-1,-1,1,1,2,2,-3,-3,-2,-2,2,2,3, -+ x 3,-2,-2,2,2,3,3,-3,0,0,3,-3,-3,3,3,-3,-3,-1,-1,1,1,3,3,-3,-3,3,3, -+ x -3,-3,-2,-2,2,2,3,3,-3,-3,3,3,0,4,0,1,1,4,4,-4,0,0,4,-1,0,0,1,-4, -+ x -4,-1,-1,1,1,4,4,-1,-1,1,1,2,2,4,4,-4,0,0,4,-2,0,0,2,-4,-4,-2,-2, -+ x 2,2,4,4,-4,-4,-1,-1,1,1,4,4,-2,-2,-1,-1,1,1,2,2,-4,-4,-2,-2,2,2, -+ x 4,4,-2,-2,2,2,3,3,4,4,-4,0,0,4,-3,0,0,3,-4,-4,-3,-3,3,3,4,4,-4, -+ x -4,-1,-1,1,1,4,4,-3,-3,-1,-1,1,1,3,3,-4,-4,-3,-3,3,3,4,4,-4,-4, -+ x -2,-2,2,2,4,4,-3,-3,-2,-2,2,2,3,3,-4,-4,-3,-3,3,3,4,4,-3,-3,3,3, -+ x 4,4,-4,0,0,4,-4,-4,4,4,-4,-4,-1,-1,1,1,4,4,-4,-4,4,4,-4,-4,-2,-2, -+ x 2,2,4,4,-4,-4,4,4,-4,-4,-3,-3,3,3,4,4,0,5,0,1,1,5,5,-5,0,0,5,-1, -+ x 0,0,1,-5,-5,-1,-1,1,1,5,5,-1,-1,1,1,2,2,5,5,-5,0,0,5,-2,0,0,2,-5, -+ x -5,-2,-2,2,2,5,5,-5,-5,-1,-1,1,1,5,5,-2,-2,-1,-1,1,1,2,2,-5,-5, -+ x -2,-2,2,2,5,5,-2,-2,2,2,3,3,5,5,-5,0,0,5,-3,0,0,3,-5,-5,-3,-3,3, -+ x 3,5,5,-5,-5,-1,-1,1,1,5,5,-3,-3,-1,-1,1,1,3,3,-5,-5,-3,-3,3,3,5, -+ x 5,-5,-5,-2,-2,2,2,5,5,-3,-3,-2,-2,2,2,3,3,-5,-5,-3,-3,3,3,5,5,-3, -+ x -3,3,3/ -+ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,2,0,0,0,0,1,1,1,1,2,2,2, -+ x 2,1,1,1,1,1,1,1,1,2,2,2,2,0,0,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2, -+ x 2,2,2,0,0,3,0,0,0,0,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,3,3,3,3,0,0, -+ x 0,0,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3, -+ x 3,3,2,2,2,2,2,2,2,2,3,3,3,3,0,0,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3, -+ x 2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,1,1,1,1,4,4,4,4,1, -+ x 1,1,1,1,1,1,1,4,4,4,4,0,0,0,0,2,2,2,2,4,4,4,4,1,1,1,1,1,1,1,1,2, -+ x 2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,4,4,4,4,0,0,0,0,3, -+ x 3,3,3,4,4,4,4,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,2, -+ x 2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4, -+ x 4,4,4,0,0,4,4,4,4,1,1,1,1,4,4,4,4,4,4,4,4,2,2,2,2,4,4,4,4,4,4,4, -+ x 4,3,3,3,3,4,4,4,4,4,4,4,4,0,0,5,0,0,0,0,1,1,1,1,5,5,5,5,1,1,1,1, -+ x 1,1,1,1,5,5,5,5,0,0,0,0,2,2,2,2,5,5,5,5,1,1,1,1,1,1,1,1,2,2,2,2, -+ x 2,2,2,2,5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,2,5,5,5,5,0,0,0,0,3,3,3,3, -+ x 5,5,5,5,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,2,2,2,2, -+ x 2,2,2,2,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,5,5,5,5/ -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1890) -+ -+ if(newlst)then -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x call error(idnode,300) -+ lchk=.true. -+ ibig=0 -+ -+c zero link arrays -+ -+ do i=1,natms -+ link(i)=0 -+ enddo -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+c real space cut off -+ -+ rcsq=(rcut+delr)**2 -+ -+c create mock cell vector for non-periodic system -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+c find maximum x,y,z postions -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ -+ endif -+ -+ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) -+ -+ endif -+ -+ call dcell(cell,celprp) -+ call invert(cell,rcell,det) -+ -+c ratio of link cell length to cut off diameter - max value is 5 -+ -+c irat=nint((rcut+delr)/rlink) -+c irat=min(max(irat,1),5) -+ -+ irat=1 -+ -+ -+c number of subcells -+ -+ if (irat.eq.1)then -+ -+ nsbcll=14 -+ -+ elseif(irat.eq.2)then -+ -+ nsbcll=63 -+ -+ elseif(irat.eq.3)then -+ -+ nsbcll=156 -+ -+ elseif(irat.eq.4)then -+ -+ nsbcll=307 -+ -+ elseif(irat.eq.5)then -+ -+ nsbcll=508 -+ -+ endif -+ -+ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) -+ ily=int(celprp(8)*dble(irat)/(rcut+delr)) -+ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) -+ -+c check there are enough link cells -+ -+ linc=.true. -+ if(ilx.lt.2*irat+1)linc=.false. -+ if(ily.lt.2*irat+1)linc=.false. -+ if(ilz.lt.2*irat+1)linc=.false. -+ if(.not.linc) call error(idnode,305) -+ ncells=ilx*ily*ilz -+ if(ncells.gt.mxcell) call error(idnode,392) -+ -+c calculate link cell indices -+ -+ do i=1,ncells -+ -+ lct(i)=0 -+ -+ enddo -+ -+c link-cell cutoff for reduced space -+ -+ xdc=dble(ilx) -+ ydc=dble(ily) -+ zdc=dble(ilz) -+ -+c reduced space coordinates -+ if(newjob)then -+ -+ newjob=.false. -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(mxnode.gt.1) call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ do i=1,natms -+ -+ tx=xxx(i) -+ ty=yyy(i) -+ tz=zzz(i) -+ -+ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 -+ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 -+ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 -+ -+ enddo -+ -+c link neighbours -+ -+ do i=1,natms -+ -+ ix=min(int(xdc*uxx(i)),ilx-1) -+ iy=min(int(ydc*uyy(i)),ily-1) -+ iz=min(int(zdc*uzz(i)),ilz-1) -+ -+ icell=1+ix+ilx*(iy+ily*iz) -+ -+ j=lct(icell) -+ lct(icell)=i -+ link(i)=j -+ -+ enddo -+ -+c set control variables for loop over subcells -+ -+ ix=1 -+ iy=1 -+ iz=1 -+ -+c primary loop over subcells -+ -+ do ic=1,ncells -+ -+ ii=lct(ic) -+ if(ii.gt.0)then -+ -+c secondary loop over subcells -+ -+ ik=0 -+ -+ do kc=1,nsbcll -+ -+ i=ii -+ -+ cx=0.d0 -+ cy=0.d0 -+ cz=0.d0 -+ jx=ix+nix(kc) -+ jy=iy+niy(kc) -+ jz=iz+niz(kc) -+ -+c minimum image convention -+ -+ if(jx.gt.ilx)then -+ -+ jx=jx-ilx -+ cx=1.d0 -+ -+ elseif(jx.lt.1)then -+ -+ jx=jx+ilx -+ cx=-1.d0 -+ -+ endif -+ -+ if(jy.gt.ily)then -+ -+ jy=jy-ily -+ cy=1.d0 -+ -+ elseif(jy.lt.1)then -+ -+ jy=jy+ily -+ cy=-1.d0 -+ -+ endif -+ -+ if(jz.gt.ilz)then -+ -+ jz=jz-ilz -+ cz=1.d0 -+ -+ elseif(jz.lt.1)then -+ -+ jz=jz+ilz -+ cz=-1.d0 -+ -+ endif -+ -+c index of neighbouring cell -+ -+ jc=jx+ilx*((jy-1)+ily*(jz-1)) -+ j=lct(jc) -+ -+c ignore if empty -+ -+ if(j.gt.0)then -+ -+ do while(i.ne.0) -+ -+c test if site is of interest to this node -+ -+ if(mod(i-1,mxnode).eq.idnode)then -+ -+ -+c i's index for this processor -+ ik=((i-1)/mxnode)+1 -+ -+c test if i is a frozen atom -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+ if(ic.eq.jc) j=link(i) -+ if(j.gt.0)then -+ -+ do while(j.ne.0) -+ -+c test of frozen atom pairs -+ -+ ldo=.true. -+ if(lfrzi)ldo=(lstfrz(j).eq.0) -+ -+ if(ldo)then -+ -+c distance in real space : minimum image applied -+ -+ sxd=uxx(j)-uxx(i)+cx -+ syd=uyy(j)-uyy(i)+cy -+ szd=uzz(j)-uzz(i)+cz -+ -+ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd -+ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd -+ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd -+ -+ if(imcon.eq.6)then -+ -+ rsq=xd**2+yd**2 -+ -+ else -+ -+ rsq=xd**2+yd**2+zd**2 -+ -+ endif -+ -+c test of distance -+ if(rcsq.gt.rsq)then -+ -+c test for excluded atom -+ -+ linc=.true. -+ do ixl=1,nexatm(ik) -+ -+ if(lexatm(ik,ixl).eq.j) linc=.false. -+ -+ enddo -+ -+ if(linc)then -+ -+ lentry(ik)=lentry(ik)+1 -+ -+ if(lentry(ik).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ik)) -+ lchk=.false. -+ -+ else -+ -+ list(ik,lentry(ik))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ j=link(j) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ j=lct(jc) -+ i=link(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ ix=ix+1 -+ if(ix.gt.ilx)then -+ -+ ix=1 -+ iy=iy+1 -+ -+ if(iy.gt.ily)then -+ -+ iy=1 -+ iz=iz+1 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be >= ',ibig -+ write(nrite,*) ' mxlist is currenty ',mxlist -+ endif -+ call error(idnode,106) -+ -+ endif -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (uxx,uyy,uzz,stat=fail) -+ -+ return -+ end subroutine parlink -+ -+ subroutine parneulst(newlst,lneut,nneut,idnode,mxnode,imcon, -+ x rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atoms taken into account -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - t.forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,lneut,safe,lfrzi -+ integer nneut,idnode,mxnode,imcon,idum,fail,mpm2,npm2,ibig -+ integer i,ill,ia,im,jmlast,jmwrap,nuei1,nuei2,ii,jm1,jm,jj0,jj2 -+ integer j,ii1 -+ real(8) rcut,delr,rclim,fi,rrr,rcl1 -+ -+ logical, allocatable :: lms(:) -+ dimension fi(3) -+ -+ data fail/0/ -+ -+C DIR$ CACHE_ALIGN fi -+ -+c allocate work arrays -+ -+ allocate (lms(mxneut),stat=fail) -+ if(fail.ne.0)call error(idnode,1910) -+ -+ if(newlst.and.lneut)then -+ -+c set control variables -+ -+ safe=.true. -+ lchk= .true. -+ mpm2=(nneut+2)/2 -+ npm2=(nneut+1)/2 -+ -+c set cutoff radius -+ -+ rcl1=(rcut+delr) -+ rclim=(rcut+delr)**2 -+ ibig=0 -+ ill=0 -+ -+c construct pair force neighbour list: neutral groups -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+ -+c outer loop over groups -+ -+ ia=0 -+ -+ do im=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ if(im.ge.mpm2) mpm2=npm2 -+ -+ lms(1)=.false. -+ do j=2,mpm2 -+ lms(j)=.true. -+ enddo -+ -+ jmlast=min(nneut,im+mpm2-1) -+ jmwrap=max(0,im+mpm2-1-nneut) -+ -+c loop over atomic pairs -+ -+ nuei1=neulst(im) -+ nuei2=neulst(im+1)-1 -+ -+ do i=nuei1,nuei2 -+ -+ fi(1)=xxx(i) -+ fi(2)=yyy(i) -+ fi(3)=zzz(i) -+ lfrzi=(lstfrz(i).eq.0) -+ -+ ii=0 -+ jm1=1 -+ do jm=im+1,jmlast -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ xdf(ii)=fi(1)-xxx(j) -+ ydf(ii)=fi(2)-yyy(j) -+ zdf(ii)=fi(3)-zzz(j) -+ -+ else -+ -+ ibig=max(ibig,ii) -+ safe=.false. -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ xdf(ii)=fi(1)-xxx(j) -+ ydf(ii)=fi(2)-yyy(j) -+ zdf(ii)=fi(3)-zzz(j) -+ -+ else -+ -+ safe=.false. -+ ibig=max(ibig,ii) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c apply minimum image convention -+ -+ ii1=min(ii,mxxdf) -+ call images(imcon,0,1,ii1,cell,xdf,ydf,zdf) -+ -+c search for those in cutoff -+ -+ ii=0 -+ jm1=1 -+ do jm=im+1,jmlast -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ if(lms(jm1))then -+ -+ if(lfrzi)then -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ elseif(lstfrz(j).eq.0)then -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(lms(jm1))then -+ -+ jj0=neulst(jm) -+ jj2=neulst(jm+1)-1 -+ -+ do j=jj0,jj2 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ -+ if(lms(jm1))then -+ -+ if(lfrzi)then -+ -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ elseif(lstfrz(j).eq.0)then -+ -+ if(abs(zdf(ii)).lt.rcl1)then -+ if(abs(ydf(ii)).lt.rcl1)then -+ if(abs(xdf(ii)).lt.rcl1)then -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ if(rrr.lt.rclim) lms(jm1)=.false. -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c compile neighbour list for ia -+c with running check of neighbour list array capacity -+ -+ jm1=0 -+ do jm=im,jmlast -+ -+ jm1=jm1+1 -+ if(.not.lms(jm1))then -+ -+ lentry(ia)=lentry(ia)+1 -+ if(lentry(ia).le.mxlist)then -+ -+ list(ia,lentry(ia))=jm -+ -+ else -+ -+ ill=max(ill,lentry(ia)) -+ lchk=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ do jm=1,jmwrap -+ -+ jm1=jm1+1 -+ if(.not.lms(jm1))then -+ -+ lentry(ia)=lentry(ia)+1 -+ if(lentry(ia).le.mxlist)then -+ -+ list(ia,lentry(ia))=jm -+ -+ else -+ -+ ill=max(ill,lentry(ia)) -+ lchk=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ if(.not.lchk)then -+ -+ call gimax(ill,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be at least ',ill -+ write(nrite,*) ' mxlist is currently ',mxlist -+ endif -+ call error(idnode,108) -+ -+ endif -+ -+c terminate job if work arrays exceeded -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*)'mxxdf must be at least ',ibig -+ write(nrite,*)'mxxdf is currently ',mxxdf -+ endif -+ call error(idnode,476) -+ endif -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(lms,stat=fail) -+ -+ return -+ end subroutine parneulst -+ -+ subroutine parlinkneu -+ x (newlst,natms,nneut,idnode,mxnode,imcon,rcut,delr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on link-cell method with neutral groups -+c frozen atoms taken into account -+c -+c to be used with the link version of exclude :excludeneu_link -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1996 -+c author - t. forester january 1996. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst,linc,newjob,lfrzi,ldo,swop -+ integer natms,nneut,idnode,mxnode,imcon,idum,fail,ibig -+ integer nix,niy,niz,i,irat,nsbcll,ilx,ily,ilz,ncells,ix,iy,iz -+ integer icell,j,ic,ii,kc,jx,jy,jz,jc,ineu,ik,jneu,ineua,jneua -+ integer ika,jneua1,i1,j1 -+ real(8) rcut,delr,rcsq,xm,ym,zm,det,xdc,ydc,zdc,tx,ty,tz -+ real(8) cx,cy,cz,sxd,syd,szd,rsq,xd,yd,zd -+ -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ -+ dimension nix(14),niy(14),niz(14) -+ -+ save newjob -+ -+ data newjob/.true./ -+ data nix/0,1,0,0,-1,1,0,-1,1,0,-1,1,-1,1/ -+ data niy/ 0,0,1,0,1,1,-1,0,0,1,-1,-1,1,1/ -+ data niz/0,0,0,1,0,0,1,1,1,1,1,1,1,1/ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1900) -+ -+ lchk=.true. -+ ibig=0 -+ if(newlst)then -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x call error(idnode,300) -+ -+c zero link arrays -+ -+ do i=1,natms -+ -+ link(i)=0 -+ -+ enddo -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ -+ enddo -+ -+c real space cut off -+ -+ rcsq=(rcut+delr)**2 -+c -+c create mock cell vector for non-periodic system -+ -+ if(imcon.eq.0.or.imcon.eq.6)then -+ -+c find maximum x,y,z postions -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ if(imcon.eq.0)then -+ -+ cell(1)=max(2.d0*xm+rcut+delr,3.d0*(rcut+delr)) -+ cell(5)=max(2.d0*ym+rcut+delr,3.d0*(rcut+delr)) -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ -+ endif -+ -+ cell(9)=max(2.d0*zm+rcut+delr,3.d0*(rcut+delr),cell(9)) -+ -+ endif -+ -+ call dcell(cell,celprp) -+ call invert(cell,rcell,det) -+ -+c ratio of link cell length to cut off diameter -+ -+ irat=1 -+ -+c number of subcells -+ -+ nsbcll=14 -+ -+ ilx=int(celprp(7)*dble(irat)/(rcut+delr)) -+ ily=int(celprp(8)*dble(irat)/(rcut+delr)) -+ ilz=int(celprp(9)*dble(irat)/(rcut+delr)) -+c -+c check there are enough link cells -+ -+ linc=.false. -+ if(ilx.lt.2*irat+1) linc=.true. -+ if(ily.lt.2*irat+1) linc=.true. -+ if(ilz.lt.2*irat+1) linc=.true. -+ if(linc) call error(idnode,305) -+ -+ ncells=ilx*ily*ilz -+ if(ncells.gt.mxcell)then -+ -+ if(idnode.eq.0) write(nrite,*) 'mxcell must be >= ',ncells -+ call error(idnode,392) -+ -+ endif -+ -+c calculate link cell indices -+ -+ do i=1,ncells -+ -+ lct(i)=0 -+ -+ enddo -+ -+c link-cell cutoff for reduced space -+ -+ xdc=dble(ilx) -+ ydc=dble(ily) -+ zdc=dble(ilz) -+ -+c reduced space coordinates -+ if(newjob)then -+ -+ newjob=.false. -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(mxnode.gt.1) call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+ do i=1,natms -+ -+ tx=xxx(i) -+ ty=yyy(i) -+ tz=zzz(i) -+ -+ uxx(i)=(rcell(1)*tx+rcell(4)*ty+rcell(7)*tz)+0.5d0 -+ uyy(i)=(rcell(2)*tx+rcell(5)*ty+rcell(8)*tz)+0.5d0 -+ uzz(i)=(rcell(3)*tx+rcell(6)*ty+rcell(9)*tz)+0.5d0 -+ -+ enddo -+ -+c link neighbours -+ -+ do i=1,natms -+ -+ ix=min(int(xdc*uxx(i)),ilx-1) -+ iy=min(int(ydc*uyy(i)),ily-1) -+ iz=min(int(zdc*uzz(i)),ilz-1) -+ -+ icell=1+ix+ilx*(iy+ily*iz) -+ -+ j=lct(icell) -+ lct(icell)=i -+ link(i)=j -+ -+ enddo -+ -+c set control variables for loop over subcells -+ -+ ix=1 -+ iy=1 -+ iz=1 -+ -+c primary loop over subcells -+ -+ do ic=1,ncells -+ -+ ii=lct(ic) -+ if(ii.gt.0)then -+ -+c secondary loop over subcells -+ -+ do kc=1,nsbcll -+ -+ i=ii -+ -+ cx=0.d0 -+ cy=0.d0 -+ cz=0.d0 -+ jx=ix+nix(kc) -+ jy=iy+niy(kc) -+ jz=iz+niz(kc) -+ -+c minimum image convention -+ -+ if(jx.gt.ilx)then -+ -+ jx=jx-ilx -+ cx=1.d0 -+ -+ elseif(jx.lt.1)then -+ -+ jx=jx+ilx -+ cx=-1.d0 -+ -+ endif -+ -+ if(jy.gt.ily)then -+ -+ jy=jy-ily -+ cy=1.d0 -+ -+ elseif(jy.lt.1)then -+ -+ jy=jy+ily -+ cy=-1.d0 -+ -+ endif -+ -+ if(jz.gt.ilz)then -+ -+ jz=jz-ilz -+ cz=1.d0 -+ -+ elseif(jz.lt.1)then -+ -+ jz=jz+ilz -+ cz=-1.d0 -+ -+ endif -+ -+c index of neighbouring cell -+ -+ jc=jx+ilx*((jy-1)+ily*(jz-1)) -+ j=lct(jc) -+ -+c ignore if empty -+ -+ if(j.gt.0)then -+ -+ do while(i.ne.0) -+ -+c test if site is of interest to this node -+ -+ ineu=lstneu(i) -+ ik=0 -+ -+c i's group index for this processor -+ -+ if(mod(ineu-1,mxnode).eq.idnode) -+ x ik=((ineu-1)/mxnode)+1 -+ -+c test if i is a frozen atom -+ -+ lfrzi=(lstfrz(i).ne.0) -+ -+ if(ic.eq.jc) j=link(i) -+ if(j.gt.0)then -+ -+ do while(j.ne.0) -+ -+ jneu=lstneu(j) -+ -+c swop tests for switching of group indices, -+c ldo for 'doing' interaction -+ -+ swop=.false. -+ ldo=(ik.gt.0) -+ jneua=jneu -+ ineua=ineu -+ ika=ik -+ -+c keep only Brode-Ahlrichs pairs -+ -+ if(jneua.ge.ineua)then -+ -+ if(jneua-ineua.gt.nneut/2)then -+ -+ swop=(mod(jneu-1,mxnode).eq.idnode) -+ if(swop)then -+ ldo=((nneut+ineua-jneua).le.(nneut-1)/2) -+ else -+ ldo=.false. -+ endif -+ -+ endif -+ -+ elseif(nneut+jneua-ineua.gt.(nneut-1)/2)then -+ -+ swop=(mod(jneu-1,mxnode).eq.idnode) -+ if(swop)then -+ ldo=((ineua-jneua).le.nneut/2) -+ else -+ ldo=.false. -+ endif -+ -+ endif -+ -+ if(swop.and.ldo)then -+ jneua=ineu -+ ineua=jneu -+ ika=((jneu-1)/mxnode)+1 -+ endif -+ -+c test of frozen atom pairs -+ -+ if(lfrzi.and.ldo)ldo=(lstfrz(j).eq.0) -+ -+c check we haven't already included this group in the list ... -+ -+ jneua1=0 -+ do while -+ x (ldo.and.jneua1.lt.min(lentry(ika),mxlist)) -+ -+ jneua1=jneua1+1 -+ if(list(ika,jneua1).eq.jneua) ldo=.false. -+ -+ enddo -+ -+ if(ldo)then -+ -+c distance in real space : minimum image applied -+ -+ sxd=uxx(j)-uxx(i)+cx -+ syd=uyy(j)-uyy(i)+cy -+ szd=uzz(j)-uzz(i)+cz -+ -+ xd=cell(1)*sxd+cell(4)*syd+cell(7)*szd -+ yd=cell(2)*sxd+cell(5)*syd+cell(8)*szd -+ zd=cell(3)*sxd+cell(6)*syd+cell(9)*szd -+ -+ rsq=xd*xd+yd*yd+zd*zd -+ -+c test of distance -+ -+ if(rsq.lt.rcsq)then -+ -+ lentry(ika)=lentry(ika)+1 -+ if(lentry(ika).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ika)) -+ lchk=.false. -+ -+ else -+ -+ list(ika,lentry(ika))=jneua -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ j=link(j) -+ -+ enddo -+ -+ endif -+ -+ j=lct(jc) -+ i=link(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ ix=ix+1 -+ if(ix.gt.ilx)then -+ -+ ix=1 -+ iy=iy+1 -+ -+ if(iy.gt.ily)then -+ -+ iy=1 -+ iz=iz+1 -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*)'mxlist must be at least ',ibig -+ write(nrite,*)'mxlist is currently ',mxlist -+ endif -+ call error(idnode,107) -+ -+ endif -+ -+c sort list into order .. -+c use link as a work array -+ -+ ik=0 -+ do i=1+idnode,nneut,mxnode -+ -+ ik=ik+1 -+ do j=1,lentry(ik) -+ -+ link(j)=list(ik,j) -+ -+ enddo -+ call shellsort(lentry(ik),link) -+ -+c ensure Brode-Ahlrichs ordering -+ -+ i1=lentry(ik)+1 -+ j1=0 -+ do j=1,lentry(ik) -+ -+ if(link(j).ge.i)then -+ -+ j1=j1+1 -+ list(ik,j1)=link(j) -+ i1=min(i1,j) -+ -+ endif -+ -+ enddo -+ -+ do j=1,i1-1 -+ -+ j1=j1+1 -+ list(ik,j1)=link(j) -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (uxx,uyy,uzz,stat=fail) -+ -+ return -+ end subroutine parlinkneu -+ -+ subroutine parlst_nsq -+ x (newlst,natms,idnode,mxnode,imcon,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing the verlet neighbour -+c list based on the brode-ahlrichs scheme -+c frozen atom option included -+c -+c to be used with multiple_nsq -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c adapted - w.smith aug 2008 - solvation, excitation etc -+c -+c stress tensor : t.forester may 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lchk,newlst -+ integer natms,idnode,mxnode,imcon,ibig,i,last,mpm2 -+ integer npm2,m,ii,j,idum -+ real(8) rcut,rclim,rsq,rrr -+ -+ if(newlst)then -+ -+ ibig=0 -+ -+c check size of work array -+ -+ if(mxxdf.lt.(natms+1)/2)then -+ if(idnode.eq.0) write(nrite,*) 'mxxdf must be greater than ', -+ x (natms+1)/2 -+ call error(idnode,475) -+ endif -+ -+c set control variables -+ -+ last=natms -+ lchk=.true. -+ mpm2=natms/2 -+ npm2=(natms-1)/2 -+ -+c set cutoff radius - ignore border width -+ -+ rclim=(rcut)**2 -+ -+c construct pair force neighbour list -+ -+ do i=1,msatms -+ -+ lentry(i)=0 -+ noxatm(i)=1 -+ -+ enddo -+ -+c outer loop over atoms -+ -+ do m=1,mpm2 -+ -+ if(m.gt.npm2)last=mpm2 -+ -+c inner loop over atoms -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+c calculate interatomic displacements -+ -+ ii=ii+1 -+ xdf(ii)=xxx(i)-xxx(j) -+ ydf(ii)=yyy(i)-yyy(j) -+ zdf(ii)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate atoms to neighbour list -+ -+ ii=0 -+ -+ do i=idnode+1,last,mxnode -+ -+c calculate atom indices -+ -+ j=i+m -+ if(j.gt.natms)j=j-natms -+ -+ ii=ii+1 -+ if((nexatm(ii).gt.0).and.(lexatm(ii,noxatm(ii)).eq.j)) -+ x then -+ -+ noxatm(ii)=min(noxatm(ii)+1,nexatm(ii)) -+ -+ elseif(lstfrz(i).eq.0.or.lstfrz(j).eq.0)then -+ -+c reject frozen atoms and calculate interatomic distance -+ -+ rsq=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c running check of neighbour list array capacity -+ -+ if(rsq.lt.rclim)then -+ -+ lentry(ii)=lentry(ii)+1 -+ -+ if(lentry(ii).gt.mxlist)then -+ -+ ibig=max(ibig,lentry(ii)) -+ lchk=.false. -+ -+ endif -+ -+c compile neighbour list array -+ -+ if(lchk)then -+ -+ list(ii,lentry(ii))=j -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c terminate job if neighbour list array exceeded -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ -+ if(.not.lchk)then -+ -+ call gisum(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) ' mxlist must be >= ',ibig -+ write(nrite,*) ' mxlist is currenty ',mxlist -+ endif -+ call error(idnode,109) -+ -+ endif -+ -+c check all excluded atoms are accounted for -+ -+ do i=1,ii -+ -+ if(nexatm(i).gt.0.and.noxatm(i).ne.nexatm(i))lchk=.false. -+ -+ enddo -+ -+ if(mxnode.gt.1)call gstate(lchk) -+ -+ if(.not.lchk) call error(idnode,160) -+ -+ endif -+ -+ return -+ end subroutine parlst_nsq -+ -+ subroutine primlst(idnode,mxnode,natms,imcon,rprim) -+ -+c********************************************************************* -+c -+c dlpoly routine to split interaction list into primary and -+c secondary neighbours for use with multiple timestep method -+c -+c copyright daresbury laboratory -+c author - t. forester february 1993 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,imcon,ii,k,j,i -+ real(8) rprim,rprim2,rsq -+ -+ rprim2=rprim*rprim -+ ii=0 -+ -+ do i=1+idnode,natms,mxnode -+ -+ ii=ii+1 -+ -+ do j=1,lentry(ii) -+ -+ k=iabs(list(ii,j)) -+ xdf(j)=xxx(i)-xxx(k) -+ ydf(j)=yyy(i)-yyy(k) -+ zdf(j)=zzz(i)-zzz(k) -+ -+ enddo -+ -+c apply minimum image convention -+ -+ call images(imcon,0,1,lentry(ii),cell,xdf,ydf,zdf) -+ -+c assign atoms as primary or secondary -+ -+ -+ do j=1,lentry(ii) -+ -+c calculate interatomic distance -+ -+ rsq=xdf(j)**2+ydf(j)**2+zdf(j)**2 -+ -+ if(rsq.lt.rprim2)then -+ -+c compile primary neighbour list array : -ve indices -+ -+ list(ii,j)=-iabs(list(ii,j)) -+ -+ else -+ -+c compile secondary neighbour list array : +ve indices -+ -+ list(ii,j)=iabs(list(ii,j)) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine primlst -+ -+ subroutine prneulst(newlst,imcon,idnode,mxnode,nneut,rprim) -+ -+c*********************************************************************** -+c -+c dlpoly routine to partition neutral group list into -+c primary and secondary groups -+c loops over group ineu -+c -+c replicated data version -+c -+c copyright daresbury laboratory 1994 -+c author t.forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newlst,lchk,ldo -+ integer imcon,idnode,mxnode,nneut,ineu,ia,jj,ibig,ii -+ integer jj0,jneu,j,i,idum -+ real(8) rprim,rclim,xi,yi,zi,rrr -+ -+ lchk=.true. -+ -+ if(newlst)then -+ -+c set primary cutoff limit -+ -+ rclim=rprim*rprim -+ -+c set list to negative - signal for seconary shell -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+ do jj=1,lentry(ia) -+ -+ list(ia,jj)=-abs(list(ia,jj)) -+ -+ enddo -+ -+ enddo -+ -+c loop over neutral group ineu sites -+ -+ lchk=.true. -+ ibig=0 -+ -+ ia=0 -+ do ineu=idnode+1,nneut,mxnode -+ -+ ia=ia+1 -+ -+ ii=0 -+ do i=neulst(ineu),neulst(ineu+1)-1 -+ -+ xi=xxx(i) -+ yi=yyy(i) -+ zi=zzz(i) -+ -+ do jj=1,lentry(ia) -+ -+ jneu=-list(ia,jj) -+ jj0=neulst(jneu) -+ -+ if(ineu.eq.jneu) jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,neulst(jneu+1)-1 -+ -+ ii=ii+1 -+ if(ii.le.mxxdf)then -+ xdf(ii)=xi-xxx(j) -+ ydf(ii)=yi-yyy(j) -+ zdf(ii)=zi-zzz(j) -+ else -+ lchk=.false. -+ ibig=ii -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c apply minimum image convention -+ -+ ii=min(ii,mxxdf) -+ call images(imcon,0,1,ii,cell,xdf,ydf,zdf) -+ -+c allocate groups to primary or secondary shell -+c on basis of closest atom-atom interactions -+ -+ ii=0 -+ do i=neulst(ineu),neulst(ineu+1)-1 -+ -+ do jj=1,lentry(ia) -+ -+ jneu=list(ia,jj) -+ ldo=(jneu.lt.0) -+ if(ldo)then -+ jneu=-jneu -+ jj0=neulst(jneu) -+ if(ineu.eq.jneu) jj0=i+1 -+ -+c loop over jneu sites -+ -+ do j=jj0,neulst(jneu+1)-1 -+ -+ if(ldo)then -+ -+ ii=min(ii+1,mxxdf) -+ -+ if(abs(xdf(ii)).lt.rprim)then -+ if(abs(ydf(ii)).lt.rprim)then -+ if(abs(zdf(ii)).lt.rprim)then -+ -+c calculate interatomic distance -+ -+ rrr=xdf(ii)**2+ydf(ii)**2+zdf(ii)**2 -+ -+c put in primary list if found any interaction close enough -+ -+ if(rrr.le.rclim)then -+ ldo=.false. -+ list(ia,jj)=jneu -+ endif -+ -+ endif -+ endif -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) call gstate(lchk) -+ if(.not.lchk)then -+ -+ call gimax(ibig,1,idum) -+ if(idnode.eq.0)then -+ write(nrite,*) 'mxxdf must be at least ',ibig -+ write(nrite,*) 'mxxdf is currently ',mxxdf -+ endif -+ call error(idnode,477) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine prneulst -+ -+ subroutine vertest(newlst,idnode,mxnode,natms,delr,tstep) -+ -+c********************************************************************* -+c -+c DL_POLY subroutime to test for updating of Verlet list -+c replicated data version -+c -+c copyright daresbury laboratory 1993 -+c author - t. forester may 1993 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,newjob -+ integer idnode,mxnode,natms,i,j,k,moved,ibuff,fail -+ real(8) rmax,dr,delr,tstep -+ -+ real(8), allocatable :: xold(:),yold(:),zold(:) -+ -+ save newjob,xold,yold,zold -+ -+ data newjob/.true./,fail/0/ -+ -+ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) -+ -+ if(newjob)then -+ -+c set up initial arrays -+ -+ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=0.d0 -+ yold(j)=0.d0 -+ zold(j)=0.d0 -+ -+ enddo -+ -+ newjob=.false. -+ newlst=.true. -+ -+ else -+ -+c integrate velocities -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xold(j)+vxx(i) -+ yold(j)=yold(j)+vyy(i) -+ zold(j)=zold(j)+vzz(i) -+ -+ enddo -+ -+c maximum displacement -+ -+ rmax=(delr/2.d0)**2 -+ -+c test atomic displacements -+ -+ moved=0 -+ -+ do k=1,j -+ -+ dr=tstep**2*(xold(k)**2+yold(k)**2+zold(k)**2) -+ if(dr.gt.rmax) moved=moved+1 -+ -+ enddo -+ -+c global sum of moved atoms -+ -+ if(mxnode.gt.1) call gisum(moved,1,ibuff) -+ -+c test for new verlet list -+ -+ newlst=(moved.ge.2) -+ -+c update stored positions -+ -+ if(newlst)then -+ -+ do k=1,j -+ -+ xold(k)=0.d0 -+ yold(k)=0.d0 -+ zold(k)=0.d0 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine vertest -+ -+ subroutine vertest2(newlst,idnode,mxnode,natms,imcon,delr,tstep) -+ -+c********************************************************************* -+c -+c DL_POLY subroutime to test for updating of Verlet list -+c replicated data version (version 2) -+c -+c copyright daresbury laboratory -+c author - w.smith 2007 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical newlst,newjob -+ integer idnode,mxnode,natms,imcon,i,j,k,moved,ibuff,fail -+ real(8) rmax,dr,delr,tstep -+ -+ real(8), allocatable :: xold(:),yold(:),zold(:) -+ real(8), allocatable :: xdif(:),ydif(:),zdif(:) -+ -+ save newjob,xold,yold,zold -+ -+ data newjob/.true./,fail/0/ -+ -+ if((natms+mxnode-1)/mxnode.gt.msatms) call error(idnode,112) -+ -+c set up initial arrays -+ -+ allocate (xdif(msatms),ydif(msatms),zdif(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ if(newjob)then -+ -+ allocate (xold(msatms),yold(msatms),zold(msatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1930) -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ -+ enddo -+ -+ newjob=.false. -+ newlst=.true. -+ -+ else -+ -+c calculate atomic shifts -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xdif(j)=xxx(i)-xold(j) -+ ydif(j)=yyy(i)-yold(j) -+ zdif(j)=zzz(i)-zold(j) -+ -+ enddo -+ -+c minimum image calculation -+ -+ call images(imcon,0,1,j,cell,xdif,ydif,zdif) -+ -+c maximum displacement -+ -+ rmax=(delr/2.d0)**2 -+ -+c test atomic displacements -+ -+ moved=0 -+ -+ do k=1,j -+ -+ dr=(xdif(k)**2+ydif(k)**2+zdif(k)**2) -+ if(dr.gt.rmax)moved=moved+1 -+ -+ enddo -+ -+c global sum of moved atoms -+ -+ if(mxnode.gt.1) call gisum(moved,1,ibuff) -+ -+c test for new verlet list -+ -+ newlst=(moved.ge.2) -+ -+c update stored positions -+ -+ if(newlst)then -+ -+ j=0 -+ do i=idnode+1,natms,mxnode -+ -+ j=j+1 -+ xold(j)=xxx(i) -+ yold(j)=yyy(i) -+ zold(j)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c deallocate arrays -+ -+ deallocate(xdif,ydif,zdif,stat=fail) -+ -+ return -+ end subroutine vertest2 -+ -+ end module nlist_builders_module -diff -urN dl_class_1.9.orig/srcmod/optimiser_module.f dl_class_1.9/srcmod/optimiser_module.f ---- dl_class_1.9.orig/srcmod/optimiser_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/optimiser_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1144 @@ -+ module optimiser_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining structural optimiser routines -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: ggx(:),ggy(:),ggz(:) -+ real(8), allocatable :: hhx(:),hhy(:),hhz(:) -+ real(8), allocatable :: oxx(:),oyy(:),ozz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ -+ save hhx,hhy,hhz -+ -+ contains -+ -+ subroutine optimisation_selector -+ x (loptim,stropt,lzero,idnode,mxnode,natms,imcon,ntcons, -+ x nscons,ngrp,ntfree,keystr,keytol,engcfg,tstep,opttol) -+ -+c*********************************************************************** -+c -+c dl_poly routine for selecting and running a nominated -+c structure optimisation algorithm using energy minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith june 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical loptim,stropt,lzero -+ integer idnode,mxnode,natms,imcon,nscons,ngrp,ntfree,keystr -+ integer keytol,ntcons -+ real(8) engcfg,tstep,opttol,hnorm,grad0,grad1,ff1,sgn -+ -+ save grad0,grad1,ff1,sgn,hnorm -+ -+ stropt=.false. -+ -+ if(loptim)then -+ -+c conjugate gradient structure optimisation -+ -+ call strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,engcfg,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+ else if(lzero)then -+ -+c zero kelvin structure optimisation -+ -+ call zero_kelvin -+ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) -+ -+ endif -+ -+ return -+ end subroutine optimisation_selector -+ -+ subroutine zero_kelvin -+ x (stropt,idnode,mxnode,imcon,natms,ngrp,ntfree,opttol) -+ -+c*********************************************************************** -+c -+c dl_poly routine for zero Kelvin temperature optimization -+c if velocity.Force < 0 then velocity is set to zero in -+c preparation for integration of equations of motion -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester march 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical stropt -+ integer idnode,mxnode,imcon,natms,ngrp,ntfree,fail,i -+ integer iatm0,iatm1,igrp1,igrp2,ifre1,ifre2,jr,ig,j,id -+ real(8) dot,fsq,fcomx,fcomy,fcomz,trx,try,trz,tax,tay,taz -+ real(8) rot,ggg,opttol -+ -+ dimension rot(9) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1920) -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c check for convergence of forces -+ -+ ggg=0.d0 -+ do i=iatm0,iatm1 -+ ggg=ggg+fxx(i)**2+fyy(i)**2+fzz(i)**2 -+ enddo -+ -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ -+c check convergence condition for forces -+ -+ if(opttol.ge.abs(ggg)/dble(natms))then -+ -+ stropt=.true. -+ return -+ -+ endif -+ -+ if(ngrp.eq.0) then -+ -+c take component of velocity in direction of force -+ -+ do i=iatm0,iatm1 -+ -+ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ if(dot.lt.0.d0) then -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) -+ fsq=dot/max(1.d-10,fsq) -+ vxx(i)=fxx(i)*fsq -+ vyy(i)=fyy(i)*fsq -+ vzz(i)=fzz(i)*fsq -+ -+ endif -+ -+ enddo -+ -+ else -+ -+c block indices for groups and free atoms -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ do j=ifre1,ifre2 -+ -+c reset atomic velocities -+ -+ i=lstfre(j) -+ -+ dot=vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ if(dot.lt.0.d0) then -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fxx(i)**2+fyy(i)**2+fzz(i)**2) -+ fsq=dot/max(1.d-10,fsq) -+ vxx(i)=fxx(i)*fsq -+ vyy(i)=fyy(i)*fsq -+ vzz(i)=fzz(i)*fsq -+ -+ endif -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c reset rigid body velocites (linear and angular) -+ -+ fcomx=0.d0 -+ fcomy=0.d0 -+ fcomz=0.d0 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c forces on com -+ -+ fcomx=fcomx+fxx(i) -+ fcomy=fcomy+fyy(i) -+ fcomz=fcomz+fzz(i) -+ -+ enddo -+ -+ dot=gvxx(ig)*fcomx+gvyy(ig)*fcomy+gvzz(ig)*fcomz -+ if(dot.lt.0.d0) then -+ -+ gvxx(ig)=0.d0 -+ gvyy(ig)=0.d0 -+ gvzz(ig)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of force -+ -+ fsq=(fcomx**2+fcomy**2+fcomz**2) -+ fsq=dot/max(1.d-10,fsq) -+ gvxx(ig)=fcomx*fsq -+ gvyy(ig)=fcomy*fsq -+ gvzz(ig)=fcomz*fsq -+ -+ endif -+ -+ enddo -+ -+c site to com distances -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ do j=1,numgsit(lstgtp(ig)) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxt(jr)=xxx(i)-gcmx(ig) -+ yyt(jr)=yyy(i)-gcmy(ig) -+ zzt(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ trx=0.d0 -+ try=0.d0 -+ trz=0.d0 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ trx=trx+yyt(jr)*fzz(i)-zzt(jr)*fyy(i) -+ try=try+zzt(jr)*fxx(i)-xxt(jr)*fzz(i) -+ trz=trz+xxt(jr)*fyy(i)-yyt(jr)*fxx(i) -+ -+ enddo -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+c transform to body fixed frame -+ -+ tax=(trx*rot(1)+try*rot(4)+trz*rot(7))*rotinx(id,2) -+ tay=(trx*rot(2)+try*rot(5)+trz*rot(8))*rotiny(id,2) -+ taz=(trx*rot(3)+try*rot(6)+trz*rot(9))*rotinz(id,2) -+ -+ dot=omx(ig)*tax+omy(ig)*tay+omz(ig)*taz -+ if(dot.le.0.d0) then -+ -+ omx(ig)=0.d0 -+ omy(ig)=0.d0 -+ omz(ig)=0.d0 -+ -+ else -+ -+c take component of velocity in direction of torque -+ -+ fsq=(tax**2+tay**2+taz**2) -+ fsq=dot/max(1.d-10,fsq) -+ omx(ig)=tax*fsq -+ omy(ig)=tay*fsq -+ omz(ig)=taz*fsq -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine zero_kelvin -+ -+ subroutine strucopt -+ x (stropt,keystr,keytol,idnode,mxnode,natms,ntcons,nscons, -+ x imcon,ngrp,ntfree,tstep,opttol,fnew,hnorm,grad0,grad1, -+ x ff1,sgn) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for optimising molecular structures -+c based on conjugate gradient method -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2005 -+c -+c note. basis of minimisation criterion : -+c keytol=0 : absolute force -+c keytol=1 : absolute energy -+c keytol=2 : absolute displacement -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ logical stropt,newjob,engchk -+ integer keystr,keytol,idnode,mxnode,natms,i,j,k -+ integer iatm0,iatm1,fail,ngrp,ntcons,nscons,jr -+ integer imcon,ig,jf,id,ntfree,igrp1,igrp2,ifre1,ifre2 -+ real(8) hnorm,grad0,grad1,grad2,ff1,stride,tstep,step -+ real(8) ggg,fnew,fff,gam2,sgn,opttol,dischk -+ -+ dimension fail(nnn) -+ -+ save iatm0,iatm1,igrp1,igrp2,engchk,ifre1,ifre2,newjob -+ -+ data newjob/.true./,engchk/.false./ -+ -+c define initial data -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ if(newjob)then -+ allocate(hhx(mxatms),hhy(mxatms),hhz(mxatms),stat=fail(1)) -+ endif -+ allocate(ggx(mxatms),ggy(mxatms),ggz(mxatms),stat=fail(2)) -+ allocate(oxx(mxatms),oyy(mxatms),ozz(mxatms),stat=fail(3)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(4)) -+ if(ngrp.gt.0)then -+ -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(6)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ if(ngrp.eq.0) -+ x allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxatms),dyy(mxatms),dzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ -+ endif -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1925) -+ enddo -+ -+ if(newjob)then -+ -+c define atoms for this node -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+ newjob=.false. -+ -+ endif -+ -+c step length for relaxation -+ -+ if(ntcons.gt.0)then -+ step=tstep**2 -+ else -+ step=10.d0*tstep**2 -+ endif -+ -+c current system configuration energy -+ -+ fff=fnew -+ -+c initialise conjugate gradient position arrays -+ -+ do i=1,natms -+ -+ oxx(i)=xxx(i) -+ oyy(i)=yyy(i) -+ ozz(i)=zzz(i) -+ ggx(i)=0.d0 -+ ggy(i)=0.d0 -+ ggz(i)=0.d0 -+ -+ enddo -+ -+c define constraint bonds -+ -+ if(ntcons.gt.0)then -+ -+c calculate constraint bond vector -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate pseudo forces for constraint bonds -+ -+ call pseudo_shake(nscons,natms,mxnode,fff) -+ -+ do i=1,natms -+ -+ ggx(i)=fxx(i)+ggx(i) -+ ggy(i)=fyy(i)+ggy(i) -+ ggz(i)=fzz(i)+ggz(i) -+ -+ enddo -+ -+ else -+ -+ do i=1,natms -+ -+ ggx(i)=fxx(i) -+ ggy(i)=fyy(i) -+ ggz(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c calculate pseudo forces for rigid bodies -+ -+ if(ngrp.gt.0)call torque_split -+ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, -+ x uxx,uyy,uzz,dtx,dty,dtz) -+ -+c determine magnitude of 3N force vector -+ -+ ggg=0.d0 -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ enddo -+ -+ else -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ggg=ggg+ggx(i)**2+ggy(i)**2+ggz(i)**2 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ buffer(1)=ggg -+ call gdsum(buffer(1),1,buffer(2)) -+ ggg=buffer(1) -+ endif -+ ggg=sqrt(ggg) -+ -+c check convergence condition for forces -+ -+ if(keytol.eq.0.and.opttol.ge.abs(ggg)/dble(natms))stropt=.true. -+ -+ if(keystr.eq.0) then -+ -+c set original search direction -+ -+ ff1=fff -+ hnorm=ggg -+ grad0=ggg -+ grad1=ggg -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ -+ else -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ -+ enddo -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ hhx(i)=ggx(i) -+ hhy(i)=ggy(i) -+ hhz(i)=ggz(i) -+ -+ enddo -+ -+ enddo -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ keystr=1 -+ sgn=1.d0 -+ -+ elseif(keystr.eq.1)then -+ -+c check convergence condition for energy -+ -+ if(engchk.and.keytol.eq.1.and. -+ x opttol.ge.abs(fff-ff1))stropt=.true. -+ engchk=.false. -+ -+c line search along chosen direction -+ -+ ff1=fff -+ grad2=grad1 -+ grad1=0.d0 -+ do i=iatm0,iatm1 -+ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ enddo -+ if(mxnode.gt.1)then -+ buffer(1)=grad1 -+ call gdsum(buffer(1),1,buffer(2)) -+ grad1=buffer(1) -+ endif -+ grad1=sgn*grad1/hnorm -+ -+c linear extrapolation to minimum -+ -+ stride=sgn*step -+ if(grad1.lt.0.d0)then -+ -+ keystr=2 -+ stride=sgn*step*grad1/(grad2-grad1) -+ -+ endif -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ else -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ elseif(keystr.eq.2)then -+ -+c construct conjugate search vector -+ -+ ff1=fff -+ gam2=(ggg/grad0)**2 -+ hnorm=0.d0 -+ grad0=ggg -+ grad1=0.d0 -+ do i=iatm0,iatm1 -+ -+ hhx(i)=ggx(i)+gam2*hhx(i) -+ hhy(i)=ggy(i)+gam2*hhy(i) -+ hhz(i)=ggz(i)+gam2*hhz(i) -+ hnorm=hnorm+hhx(i)**2+hhy(i)**2+hhz(i)**2 -+ grad1=grad1+hhx(i)*ggx(i)+hhy(i)*ggy(i)+hhz(i)*ggz(i) -+ -+ enddo -+ if(mxnode.gt.1)then -+ -+ buffer(1)=hnorm -+ buffer(2)=grad1 -+ call gdsum(buffer(1),2,buffer(3)) -+ hnorm=buffer(1) -+ grad1=buffer(2) -+ -+ endif -+ hnorm=sqrt(hnorm) -+ grad1=grad1/hnorm -+ sgn=sign(1.d0,grad1) -+ grad1=sgn*grad1 -+ stride=sgn*step -+ -+ if(ngrp.eq.0)then -+ -+ do i=iatm0,iatm1 -+ -+ oxx(i)=oxx(i)+stride*hhx(i) -+ oyy(i)=oyy(i)+stride*hhy(i) -+ ozz(i)=ozz(i)+stride*hhz(i) -+ -+ enddo -+ -+ else -+ -+ call turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,stride,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+ endif -+ -+ engchk=.true. -+ keystr=1 -+ -+ endif -+ -+c merge coordinate arrays -+ -+ if(mxnode.gt.1)then -+ -+ if(ngrp.eq.0)then -+ -+ call merge -+ x (idnode,mxnode,natms,mxbuff,oxx,oyy,ozz,buffer) -+ -+ else -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,oxx,oyy,ozz,buffer) -+ -+ endif -+ -+ endif -+ -+c reassign atomic positions and calculate max displacement -+ -+ dischk=0.d0 -+ do i=1,natms -+ -+ dischk=max(dischk,(xxx(i)-oxx(i))**2+ -+ x (yyy(i)-oyy(i))**2+(zzz(i)-ozz(i))**2) -+ -+ xxx(i)=oxx(i) -+ yyy(i)=oyy(i) -+ zzz(i)=ozz(i) -+ -+ enddo -+ -+c check convergence condition for position -+ -+ if(keytol.eq.2.and.keystr.gt.0.and. -+ x opttol.ge.sqrt(dischk))stropt=.true. -+ -+c deallocate working arrays -+ -+ deallocate(ggx,ggy,ggz,dtx,dty,dtz,oxx,oyy,ozz,stat=fail(1)) -+ if(ngrp.gt.0)then -+ deallocate(txx,tyy,tzz,uxx,uyy,uzz,stat=fail(2)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(3)) -+ if(ngrp.eq.0)deallocate(txx,tyy,tzz,stat=fail(4)) -+ -+ endif -+ -+ return -+ end subroutine strucopt -+ -+ subroutine pseudo_shake(nscons,natms,mxnode,fff) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine treating rigid bonds as stiff harmonic bonds -+c suitable for conjugate gradient minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ real(8), parameter :: harm=1.d6 -+ -+ integer i,j,k,natms,nscons,mxnode -+ real(8) fff,engbnd,dis,rrr,gamma -+ -+c calculate energy and force -+ -+ engbnd=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dis=prmcon(listcon(k,1)) -+ rrr=sqrt(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ engbnd=engbnd+0.5d0*harm*(rrr-dis)**2 -+ gamma=harm*(rrr-dis)/rrr -+ ggx(i)=ggx(i)-dxx(k)*gamma -+ ggy(i)=ggy(i)-dyy(k)*gamma -+ ggz(i)=ggz(i)-dzz(k)*gamma -+ -+ ggx(j)=ggx(j)+dxx(k)*gamma -+ ggy(j)=ggy(j)+dyy(k)*gamma -+ ggz(j)=ggz(j)+dzz(k)*gamma -+ -+ enddo -+ -+c global sum of pseudo forces -+ -+ call global_sum_forces(natms,mxnode,ggx,ggy,ggz) -+ if(mxnode.gt.1)then -+ buffer(1)=engbnd -+ call gdsum(buffer(1),1,buffer(2)) -+ engbnd=buffer(1) -+ endif -+ fff=fff+engbnd -+ -+ return -+ end subroutine pseudo_shake -+ -+ subroutine torque_split -+ x (ngrp,idnode,mxnode,imcon,ggx,ggy,ggz,txx,tyy,tzz, -+ x uxx,uyy,uzz,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for resolving torques into equivalent atomic -+c forces suitable for conjugate gradient minimisation -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,ig,id,jr,jrs,ngrp,igrp1,igrp2,idnode,imcon,mxnode -+ -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,trq,txx,tyy,tzz -+ real(8) ggx,ggy,ggz,tmp,taq,scale -+ real(8) uxx,uyy,uzz,dtx,dty,dtz -+ -+ dimension ggx(mxatms),ggy(mxatms),ggz(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ dimension dtx(mxatms),dty(mxatms),dtz(mxatms) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c calculate centres of mass of rigid bodies -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c working com is first site in group -+ -+ i=lstrgd(jr+1) -+ txx(ig)=xxx(i) -+ tyy(ig)=yyy(i) -+ tzz(ig)=zzz(i) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uxx(jr)=xxx(i)-txx(ig) -+ uyy(jr)=yyy(i)-tyy(ig) -+ uzz(jr)=zzz(i)-tzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum image from working com -+ -+ call images(imcon,0,1,jr,cell,uxx,uyy,uzz) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=0.d0 -+ gcmy(ig)=0.d0 -+ gcmz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ gcmx(ig)=gcmx(ig)+weight(i)*uxx(jr) -+ gcmy(ig)=gcmy(ig)+weight(i)*uyy(jr) -+ gcmz(ig)=gcmz(ig)+weight(i)*uzz(jr) -+ -+ enddo -+ -+c final centre of mass -+ -+ gcmx(ig)=gcmx(ig)/gmass(id)+txx(ig) -+ gcmy(ig)=gcmy(ig)/gmass(id)+tyy(ig) -+ gcmz(ig)=gcmz(ig)/gmass(id)+tzz(ig) -+ -+ enddo -+ -+c calculate atom displacements from rigid body com -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c resolve rigid body forces and torques to orthogonal atomic basis -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+ggx(i) -+ fmy=fmy+ggy(i) -+ fmz=fmz+ggz(i) -+ -+ enddo -+ fmx=fmx/dble(numgsit(id)) -+ fmy=fmy/dble(numgsit(id)) -+ fmz=fmz/dble(numgsit(id)) -+ -+c calculate torque on rigid body -+ -+ jr=jrs -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*ggz(i)-dtz(jr)*ggy(i) -+ tqy=tqy+dtz(jr)*ggx(i)-dtx(jr)*ggz(i) -+ tqz=tqz+dtx(jr)*ggy(i)-dty(jr)*ggx(i) -+ -+ enddo -+ -+c magnitude of torque -+ -+ trq=sqrt(tqx**2+tqy**2+tqz**2) -+ -+c construct unit vectors for new site forces -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ txx(i)=dty(jr)*tqz-tqy*dtz(jr) -+ tyy(i)=dtz(jr)*tqx-tqz*dtx(jr) -+ tzz(i)=dtx(jr)*tqy-tqx*dty(jr) -+ tmp=sqrt(txx(i)**2+tyy(i)**2+tzz(i)**2) -+ if(tmp.gt.1.d-10)then -+ -+ txx(i)=txx(i)/tmp -+ tyy(i)=tyy(i)/tmp -+ tzz(i)=tzz(i)/tmp -+ -+ else -+ -+ txx(i)=0.d0 -+ tyy(i)=0.d0 -+ tzz(i)=0.d0 -+ -+ endif -+ -+ enddo -+ -+c construct unit vectors for site location -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uxx(i)=(tyy(i)*tqz-tqy*tzz(i))/trq -+ uyy(i)=(tzz(i)*tqx-tqz*txx(i))/trq -+ uzz(i)=(txx(i)*tqy-tqx*tyy(i))/trq -+ -+ enddo -+ -+c scale unit vectors to working lengths -+ -+ jr=jrs -+ taq=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ tmp=dtx(jr)*uxx(i)+dty(jr)*uyy(i)+dtz(jr)*uzz(i) -+ taq=taq+tmp**2 -+ txx(i)=tmp*txx(i) -+ tyy(i)=tmp*tyy(i) -+ tzz(i)=tmp*tzz(i) -+ uxx(i)=tmp*uxx(i) -+ uyy(i)=tmp*uyy(i) -+ uzz(i)=tmp*uzz(i) -+ -+ enddo -+ -+c calculate force scale factor -+ -+ scale=trq/taq -+ -+c final site forces -+ -+ jr=jrs -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ txx(i)=scale*txx(i) -+ tyy(i)=scale*tyy(i) -+ tzz(i)=scale*tzz(i) -+ ggx(i)=fmx -+ ggy(i)=fmy -+ ggz(i)=fmz -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine torque_split -+ -+ subroutine turn_rigid_body -+ x (igrp1,igrp2,ifre1,ifre2,step,hhx,hhy,hhz, -+ x uxx,uyy,uzz,txx,tyy,tzz,oxx,oyy,ozz) -+ -+c*********************************************************************** -+c -+c dl_poly routine for updating positions of atoms in a rigid body -+c during a conjugate gradient minimisation -+c -+c copyright daresbury laboratory -+c author w.smith may 2006 -+c -+c note: coz=cos(theta)-1 -+c zin=sin(theta)/theta -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,jr,jf,ig,id,igrp1,igrp2,ifre1,ifre2 -+ real(8) step,hhx,hhy,hhz,uxx,uyy,uzz,txx,tyy,tzz -+ real(8) oxx,oyy,ozz,uuu,ttt,the2,coz,zin -+ -+ dimension hhx(mxatms),hhy(mxatms),hhz(mxatms) -+ dimension oxx(mxatms),oyy(mxatms),ozz(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension uxx(mxatms),uyy(mxatms),uzz(mxatms) -+ -+c update free atom positions -+ -+ do jf=ifre1,ifre2 -+ -+ i=lstfre(jf) -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ enddo -+ -+c update rigid body atoms -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ uuu=uxx(i)**2+uyy(i)**2+uzz(i)**2 -+ if(uuu.gt.1.d-10)then -+ -+ ttt=txx(i)**2+tyy(i)**2+tzz(i)**2 -+ the2=(ttt/uuu)*step**2 -+ -+ coz=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- -+ x the2/132.d0)/90.d0)/56.d0)/30.d0)/12.d0)/2.d0 -+ zin=-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0-the2*(1.d0- -+ x the2/156.d0)/110.d0)/72.d0)/42.d0)/20.d0)/6.d0+1.d0 -+ -+ oxx(i)=oxx(i)+coz*uxx(i)+step*(hhx(i)+zin*txx(i)) -+ oyy(i)=oyy(i)+coz*uyy(i)+step*(hhy(i)+zin*tyy(i)) -+ ozz(i)=ozz(i)+coz*uzz(i)+step*(hhz(i)+zin*tzz(i)) -+ -+ else -+ -+ oxx(i)=oxx(i)+step*hhx(i) -+ oyy(i)=oyy(i)+step*hhy(i) -+ ozz(i)=ozz(i)+step*hhz(i) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine turn_rigid_body -+ -+ end module optimiser_module -diff -urN dl_class_1.9.orig/srcmod/pair_module.f dl_class_1.9/srcmod/pair_module.f ---- dl_class_1.9.orig/srcmod/pair_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pair_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,46 @@ -+ module pair_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining atom pair data -+c copyright - daresbury laboratory -+c author - w. smith mar 2004 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer, allocatable :: ilist(:),jlist(:) -+ real(8), allocatable :: xdf(:),ydf(:),zdf(:) -+ real(8), allocatable :: rsqdf(:) -+ -+ save ilist,jlist,xdf,ydf,zdf,rsqdf -+ -+ contains -+ -+ subroutine alloc_pair_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ allocate (ilist(mxxdf),stat=fail(1)) -+ allocate (jlist(mxxdf),stat=fail(2)) -+ allocate (xdf(mxxdf),stat=fail(3)) -+ allocate (ydf(mxxdf),stat=fail(4)) -+ allocate (zdf(mxxdf),stat=fail(5)) -+ allocate (rsqdf(mxxdf),stat=fail(6)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1940) -+ enddo -+ -+ end subroutine alloc_pair_arrays -+ -+ end module pair_module -diff -urN dl_class_1.9.orig/srcmod/parse_module.f dl_class_1.9/srcmod/parse_module.f ---- dl_class_1.9.orig/srcmod/parse_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/parse_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,585 @@ -+ module parse_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining parsing arrays -+c copyright - daresbury laboratory -+c author - w. smith jan 2004 -+c -+c*********************************************************************** -+ -+ integer, parameter :: lenrec=150 -+ character*1 record(lenrec) -+ save record -+ -+ contains -+ -+ subroutine getrec(safe,idnode,ifile) -+ -+c********************************************************************* -+c -+c dl_poly subroutine to read a character string on one node -+c and broadcast it to all other nodes -+c -+c copyright daresbury laboratory 1994 -+c author w.smith december 1994 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ -+ character*150 line -+ integer export,import,idnode,ifile,i -+ dimension export(lenrec),import(lenrec) -+ -+ safe=.true. -+ -+ call gsync() -+ -+ if(idnode.eq.0)then -+ -+ read(ifile,'(a150)',end=100)line -+ -+ do i=1,lenrec -+ -+ record(i)=line(i:i) -+ export(i)=ichar(line(i:i)) -+ -+ enddo -+ -+ call gstate(safe) -+ call gisum(export,lenrec,import) -+ -+ return -+ -+ 100 safe=.false. -+ -+ call gstate(safe) -+ -+ else -+ -+ call gstate(safe) -+ if(.not.safe)return -+ -+ do i=1,lenrec -+ -+ export(i)=0 -+ -+ enddo -+ -+ call gisum(export,lenrec,import) -+ -+ do i=1,lenrec -+ -+ record(i)=char(export(i)) -+ -+ enddo -+ -+ return -+ -+ endif -+ -+ end subroutine getrec -+ -+ integer function intstr(word,len,lst) -+ -+c*********************************************************************** -+c -+c dl_poly function for extracting integers from a -+c character string -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith may 1994. -+c -+c parameters: -+c word - input character string -+c len - working length of character string -+c lst - location of space character at end of -+c integer string -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical flag,count,final -+ character*1 n,word,ksn -+ integer lst,len,j,isn -+ -+ dimension n(0:9),word(len) -+ data n/'0','1','2','3','4','5','6','7','8','9'/ -+ -+ isn=1 -+ lst=0 -+ ksn='+' -+ intstr=0 -+ flag=.false. -+ final=.false. -+ count=.false. -+ -+ do while(lst.lt.len.and.(.not.final)) -+ -+ lst=lst+1 -+ flag=.false. -+ -+ do j=0,9 -+ -+ if(n(j).eq.word(lst))then -+ -+ intstr=10*intstr+j -+ count=.true. -+ flag=.true. -+ -+ endif -+ -+ enddo -+ -+ if(count.and.(.not.flag))final=.true. -+ if(flag.and.ksn.eq.'-')isn=-1 -+ ksn=word(lst) -+ -+ enddo -+ -+ intstr=isn*intstr -+ -+ do j=lst,len -+ word(j-lst+1)=word(j) -+ enddo -+ do j=len-lst+2,len -+ word(j)=' ' -+ enddo -+ -+ return -+ end function intstr -+ -+ real(8) function dblstr(word,len,lst) -+ -+c*********************************************************************** -+c -+c dl_poly function for extracting double precisions from a -+c character string. -+c modified from dl_poly function intstr -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith may 1994. -+c modified - t. forester april 1994 -+c -+c parameters: -+c word - input character string -+c len - working length of character string -+c lst - location of space character at end of -+c double precision string -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 n,word,ksn,dot,d,e -+ logical flag,ldot,start,final -+ integer len,lst,iexp,idum,i,j,fail -+ real(8) sn,ten,one -+ dimension n(0:9),word(len) -+ character*1, allocatable :: work(:) -+ -+ data n/'0','1','2','3','4','5','6','7','8','9'/ -+ data dot/'.'/ -+ data d/'d'/ -+ data e/'e'/ -+ -+ allocate(work(len),stat=fail) -+ -+ lst=0 -+ sn=1.d0 -+ ksn='+' -+ ten=10.d0 -+ one=1.d0 -+ -+ dblstr=0.d0 -+ iexp=0 -+ idum=0 -+ start=.false. -+ ldot=.false. -+ final=.false. -+ -+ do while(lst.lt.len.and.(.not.final)) -+ -+ lst=lst+1 -+ flag=.false. -+ -+ do j=0,9 -+ -+ if(n(j).eq.word(lst))then -+ -+ dblstr=ten*dblstr+one*dble(j) -+ flag=.true. -+ start=.true. -+ -+ endif -+ -+ enddo -+ -+ if(dot.eq.word(lst))then -+ -+ flag=.true. -+ ten=1.d0 -+ ldot=.true. -+ start=.true. -+ -+ endif -+ -+ if(flag.and.ksn.eq.'-') sn=-1.d0 -+ if(ldot) one=one/10.d0 -+ ksn=word(lst) -+ if(ksn.eq."D")ksn="d" -+ if(ksn.eq."E")ksn="e" -+ -+ if(start)then -+ -+ if(d.eq.ksn.or.e.eq.ksn)then -+ -+ do i=1,len-lst -+ work(i)=word(i+lst) -+ enddo -+ iexp=intstr(work,len-lst,idum) -+ final=.true. -+ -+ endif -+ -+ if(.not.flag)final=.true. -+ -+ endif -+ -+ enddo -+ -+ dblstr=sn*dblstr*(10.d0**iexp) -+ lst=lst+idum -+ -+ do j=lst,len -+ word(j-lst+1)=word(j) -+ enddo -+ do j=len-lst+2,len -+ word(j)=' ' -+ enddo -+ -+ deallocate(work,stat=idum) -+ -+ return -+ end function dblstr -+ -+ subroutine strip(string,imax) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to strip blanks from start of a string -+c maximum length is 255 characters -+c -+c copyright daresbury laboratory 1993 -+c author t.forester july 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,imax,j -+ character*1 string(imax) -+ -+ do i=1,imax -+ -+ if(string(1).eq.' ')then -+ -+ do j=1,imax-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(imax)=' ' -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine strip -+ -+ subroutine lowcase(string,length) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to lowercase a string of up to 255 characters. -+c Transportable to non-ASCII machines -+c -+c copyright daresbury laboratory 1993 -+c author t. forester july 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 string(*) -+ character*1 letter -+ integer i,length -+ -+ do i=1,min(255,length) -+ -+ letter=string(i) -+ -+ if(letter.eq.'A')then -+ letter='a' -+ else if(letter.eq.'B')then -+ letter='b' -+ else if(letter.eq.'C')then -+ letter='c' -+ else if(letter.eq.'D')then -+ letter='d' -+ else if(letter.eq.'E')then -+ letter='e' -+ else if(letter.eq.'F')then -+ letter='f' -+ else if(letter.eq.'G')then -+ letter='g' -+ else if(letter.eq.'H')then -+ letter='h' -+ else if(letter.eq.'I')then -+ letter='i' -+ else if(letter.eq.'J')then -+ letter='j' -+ else if(letter.eq.'K')then -+ letter='k' -+ else if(letter.eq.'L')then -+ letter='l' -+ else if(letter.eq.'M')then -+ letter='m' -+ else if(letter.eq.'N')then -+ letter='n' -+ else if(letter.eq.'O')then -+ letter='o' -+ else if(letter.eq.'P')then -+ letter='p' -+ else if(letter.eq.'Q')then -+ letter='q' -+ else if(letter.eq.'R')then -+ letter='r' -+ else if(letter.eq.'S')then -+ letter='s' -+ else if(letter.eq.'T')then -+ letter='t' -+ else if(letter.eq.'U')then -+ letter='u' -+ else if(letter.eq.'V')then -+ letter='v' -+ else if(letter.eq.'W')then -+ letter='w' -+ else if(letter.eq.'X')then -+ letter='x' -+ else if(letter.eq.'Y')then -+ letter='y' -+ else if(letter.eq.'Z')then -+ letter='z' -+ endif -+ -+ string(i)=letter -+ -+ enddo -+ -+ return -+ end subroutine lowcase -+ -+ subroutine copystring(oldstr,newstr,length) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to copy one string into another -+c -+c copyright daresbury laboratory -+c author w. smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 newstr(*),oldstr(*) -+ integer i,length -+ -+ do i=1,length -+ -+ newstr(i)=oldstr(i) -+ -+ enddo -+ -+ return -+ end subroutine copystring -+ -+ logical function findstring(seek,string,here) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to find an explicit string in an input record -+c note: variable `seek' is a character string while variable -+c `string' is a character*1 array i.e. code is application specific -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,n,m,here -+ character*(*) seek -+ character*1 string(lenrec) -+ -+ m=lenrec -+ n=len(seek) -+ findstring=.false. -+ -+ here=0 -+ do while(here.le.m-n.and.(.not.findstring)) -+ -+ findstring=.true. -+ -+ do i=1,n -+ if(seek(i:i).ne.string(here+i))findstring=.false. -+ enddo -+ -+ here=here+1 -+ -+ enddo -+ -+ return -+ end function findstring -+ -+ subroutine striptext(string,length,nwords) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to strip leading text from a data record -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical final -+ integer length,nwords,i,j,k -+ character*1 string(length) -+ -+ do k=1,nwords -+ -+ i=0 -+ final=.false. -+ -+ do while(.not.final.and.i.lt.length) -+ -+ i=i+1 -+ -+ if(string(1).eq.' ')then -+ -+ final=.true. -+ -+ else -+ -+ do j=1,length-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(length)=' ' -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine striptext -+ -+ subroutine getword(word,string,len1,len2) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to fetch an 8 character word from a string -+c while ignoring leading blanks -+c -+c copyright daresbury laboratory -+c author w.smith jan 2004 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical final -+ character*8 word -+ integer len1,len2,i,j,k -+ character*1 wrdseq(len1),string(len2) -+ -+ do i=1,len1 -+ wrdseq(i)=' ' -+ enddo -+ -+ i=0 -+ k=0 -+ final=.false. -+ -+ do while(.not.final.and.i.lt.len2) -+ -+ i=i+1 -+ -+ if(string(1).eq.' ')then -+ -+ if(k.gt.0)final=.true. -+ -+ else -+ -+ k=k+1 -+ wrdseq(k)=string(1) -+ if(k.eq.len1)final=.true. -+ -+ endif -+ -+ do j=1,len2-1 -+ -+ string(j)=string(j+1) -+ -+ enddo -+ -+ string(len2)=' ' -+ -+ enddo -+ -+ word=mkwd8(wrdseq) -+ -+ return -+ end subroutine getword -+ -+ character*8 function mkwd8(string) -+ -+c*********************************************************************** -+c -+c DL_POLY routine to make an 8 character word from a string -+c -+c copyright daresbury laboratory -+c author w.smith nov 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i -+ character*1 string(*) -+ -+ do i=1,8 -+ mkwd8(i:i)=string(i) -+ enddo -+ -+ return -+ end function mkwd8 -+ -+ end module parse_module -+ -+ -diff -urN dl_class_1.9.orig/srcmod/pass_tools.f dl_class_1.9/srcmod/pass_tools.f ---- dl_class_1.9.orig/srcmod/pass_tools.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pass_tools.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,318 @@ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about bond -+c constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection (i.e. this version may be intel specific) -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith august 1992. -+c MPI version t.forester may 1995 -+c CPP version - w.smith may 1995 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical safe,lshmov -+ integer idnode,mxnode,natms,nscons,lashap,lishap,listme,ierr -+ integer listin,listot,listcon,lstfrz,i,j,k,jdnode,idum -+ -+ dimension listme(mxatms),listin(mxatms),listot(mxatms) -+ dimension lishap(mxlshp),lashap(mxproc),listcon(mxcons,3) -+ dimension lstfrz(mxatms) -+ -+ integer status(MPI_STATUS_SIZE), request -+ -+CMPIU define MPI_SEND MPI_SEND_ -+CMPIU define MPI_IRECV MPI_IRECV_ -+CMPIU define MPI_WAIT MPI_WAIT_ -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ -+ safe=.true. -+ -+ do i=1,natms -+ -+ listme(i)=0 -+ -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ j=0 -+ call gsync() -+ do k=1,mxnode-1 -+ -+ jdnode=mod(idnode+mxnode-k,mxnode) -+ -+ call MPI_IRECV(listin,natms,MPI_INTEGER, -+ x MPI_ANY_SOURCE,Passcon_tag+k,MPI_COMM_WORLD,request,ierr) -+ -+ call MPI_SEND(listme,natms,MPI_INTEGER,jdnode, -+ x Passcon_tag+k,MPI_COMM_WORLD,ierr) -+ -+ call MPI_WAIT(request,status,ierr) -+ -+ do i=1,natms -+ -+ if((listme(i).gt.0).and.(listin(i).gt.0.and. -+ x lstfrz(i).eq.0))then -+ -+ j=j+1 -+ if(j.gt.mxlshp)then -+ -+ safe=.false. -+ -+ else -+ -+ lishap(j)=i -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ lashap(k)=j -+ -+ enddo -+ -+ endif -+ -+c check for global error condition -+ -+ if(mxnode.gt.1) call gstate(safe) -+ -+ if(.not.safe)call error(idnode,103) -+ -+ if(mxnode.gt.1) then -+ call gisum(j,1,idum) -+ if(idnode.eq.0) write(nrite,'(/,a,14x,i10)') -+ x ' shared atoms from passcon',j/2 -+ lshmov = (j.gt.0) -+ endif -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ -+ listot(i)=1 -+ -+ else -+ -+ listot(i)=0 -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gisum(listot,natms,listin) -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about PMF -+c constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection (i.e. this version may be intel specific) -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester august 1995. -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf -+ integer npmf,i,j,k -+ -+ dimension listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ dimension lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ -+ listpm(i)=0 -+ -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+c -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ -+ lstpmt(i)=1 -+ -+ else -+ -+ lstpmt(i)=0 -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)call gisum(lstpmt,natms,listin) -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for passing information about rigid body -+c atoms involved in bond constraints between nodes -+c -+c parallel replicated data version assuming direct node-node -+c connection -+c -+c copyright - daresbury laboratory 1995 -+c author - t. forester december 1995. -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ -+ implicit none -+ -+ include "comms.inc" -+ -+ logical lcnb,safe -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,listin -+ integer listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp -+ integer numgsit,igrp1,igrp2,i,jr,igrp,itmols,imols,lgrp,id -+ integer jj,ik,j,k -+ -+ dimension listin(mxatms) -+ dimension listcon(mxcons,3),lstcsit(2*mxcons) -+ dimension lstout(mxatms),lstrgd(mxgatm) -+ dimension nummols(mxtmls),numgrp(mxtmls),numgsit(mxungp) -+ dimension lstgtp(mxgrp) -+ -+ integer status(MPI_STATUS_SIZE) -+ -+ if(mxproc.lt.mxnode)call error(idnode,102) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ if(mxnode.gt.1) call gisum(listin,natms,lstout) -+ -+ safe = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ safe = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ safe = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ if(mxnode.gt.1) call gstate(safe) -+ lcnb = (.not.safe) -+ -+ return -+ end -+ -+ -+ -diff -urN dl_class_1.9.orig/srcmod/pmf_module.f dl_class_1.9/srcmod/pmf_module.f ---- dl_class_1.9.orig/srcmod/pmf_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/pmf_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1911 @@ -+ module pmf_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining potential of mean force arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use ensemble_tools_module -+ use lf_motion_module -+ use lf_rotation1_module -+ use parse_module -+ use property_module -+ use setup_module -+ use shake_module -+ use vv_motion_module -+ use utility_module -+ -+ implicit none -+ -+ integer npmf -+ real(8) prmpmf,pmfnrm -+ real(8), allocatable :: pmfwght(:) -+ integer, allocatable :: numpmf(:) -+ integer, allocatable :: indpmf(:) -+ integer, allocatable :: listpm(:) -+ integer, allocatable :: lstpmt(:) -+ integer, allocatable :: lstpmf(:,:) -+ -+ dimension npmf(2),pmfnrm(2) -+ -+ save npmf,prmpmf,pmfnrm,pmfwght,numpmf,indpmf,listpm -+ save lstpmt,lstpmf -+ -+ contains -+ -+ subroutine alloc_pmf_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for allocating pmf arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,idnode,fail -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (pmfwght(mxspmf),stat=fail(1)) -+ allocate (indpmf(mxspmf),stat=fail(2)) -+ allocate (numpmf(mxtmls),stat=fail(3)) -+ allocate (listpm(mxpmf),stat=fail(4)) -+ allocate (lstpmt(mxpmf),stat=fail(5)) -+ allocate (lstpmf(mxspmf,mspmf),stat=fail(6)) -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1210) -+ enddo -+ -+ do i=1,mxtmls -+ numpmf(i)=0 -+ enddo -+ -+ end subroutine alloc_pmf_arrays -+ -+ subroutine define_pmf(safe,idnode,itmols,nspmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining pmf units -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,itmols,nspmf,ipmf,jpmf,iatm1,idum -+ real(8) wght -+ -+ numpmf(itmols)=1 -+ prmpmf=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,' PMF bondlength :', -+ x 5x,f20.10)") prmpmf -+ write(nrite, -+ x "(/,/,12x,'unit, site and weight details:' -+ x ,/,/,16x,'unit',6x,'index',5x,'weight')") -+ endif -+ -+ do ipmf=1,2 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ call strip(record,lenrec) -+ call lowcase(record,lenrec) -+ if(.not.findstring('pmf unit',record,idum)) -+ x call error(idnode,462) -+ npmf(ipmf)=intstr(record,lenrec,idum) -+ -+ do jpmf=1,npmf(ipmf) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ iatm1=intstr(record,lenrec,idum) -+ wght=dblstr(record,lenrec,idum) -+ if(wght.le.1.d-10) wght=1.d0 -+ -+ nspmf=nspmf+1 -+ -+ if(nspmf.gt.mxspmf) call error(idnode,460) -+ -+ indpmf(nspmf)=iatm1 -+ pmfwght(nspmf)=wght -+ -+ if(idnode.eq.0) then -+ -+ if(jpmf.eq.1) then -+ write(nrite,"(16x,i5,i10,f12.6)") -+ x ipmf,indpmf(nspmf),pmfwght(nspmf) -+ else -+ write(nrite,"(21x,i10,f12.6)") -+ x indpmf(nspmf),pmfwght(nspmf) -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine define_pmf -+ -+ subroutine pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxp,dyp,dzp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing vectors for PMF calculations -+c -+c copyright - daresbury laboratory -+c adapted by w.smith october 2005 -+c original by t.forester aug 1995 -+c -+c set variable img true for PBC shifted vectors -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical img -+ integer nspmf,imcon,k,jj,kk,ipmf,i,i1,i2 -+ -+ real(8) xxx(mxatms),yyy(mxatms),zzz(mxatms) -+ real(8) xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ real(8) xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ real(8) dxp(mspmf),dyp(mspmf),dzp(mspmf),cell(9) -+ -+ do k=1,nspmf -+ -+ jj=0 -+ kk=0 -+ -+c calculate difference vectors -+ -+ do ipmf=1,2 -+ -+ i1=lstpmf(jj+1,k) -+ -+c position difference vectors -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i2=lstpmf(jj,k) -+ xxt(i)=xxx(i2)-xxx(i1) -+ yyt(i)=yyy(i2)-yyy(i1) -+ zzt(i)=zzz(i2)-zzz(i1) -+ -+ enddo -+ -+c correct for periodic images - assume less than half box length -+ -+ if(img)call images(imcon,0,1,npmf(ipmf),cell,xxt,yyt,zzt) -+ -+c create weighted coordinate -+ -+ xxa(ipmf,k)=0.d0 -+ yya(ipmf,k)=0.d0 -+ zza(ipmf,k)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ kk=kk+1 -+ xxa(ipmf,k)=xxa(ipmf,k)+pmfwght(kk)*xxt(i) -+ yya(ipmf,k)=yya(ipmf,k)+pmfwght(kk)*yyt(i) -+ zza(ipmf,k)=zza(ipmf,k)+pmfwght(kk)*zzt(i) -+ -+ enddo -+ -+ xxa(ipmf,k)=xxa(ipmf,k)/pmfnrm(ipmf)+xxx(i1) -+ yya(ipmf,k)=yya(ipmf,k)/pmfnrm(ipmf)+yyy(i1) -+ zza(ipmf,k)=zza(ipmf,k)/pmfnrm(ipmf)+zzz(i1) -+ -+ enddo -+ -+ dxp(k)=xxa(2,k)-xxa(1,k) -+ dyp(k)=yya(2,k)-yya(1,k) -+ dzp(k)=zza(2,k)-zza(1,k) -+ -+ enddo -+ -+c periodic boundary condition for pmf vectors -+ -+ if(img)call images(imcon,0,1,nspmf,cell,dxp,dyp,dzp) -+ -+ return -+ end subroutine pmf_vectors -+ -+ subroutine pmflf -+ x (safe,safep,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Verlet leapfrog With RD-SHAKE -+c and PMF_SHAKE - for potential of mean force calculations. -+c -+c parallel replicated data version : block data -+c adapted from dl_poly routine nve_1.f -+c -+c copyright - daresbury laboratory 1995 -+c author - t.forester aug 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ logical safe,lshmov,safep,unsafe,img -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf -+ integer fail,iatm0,iatm1,i,j,k,jj,ii,ipmf,icyc -+ real(8) engke,tolnce,tstep,vircon,virpmf,strpmf,summas -+ real(8) rstep,viracc,strkin,strcon -+ -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ dimension strpmf(9),strcon(9),strkin(9),summas(2),fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) -+ allocate(xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(3)) -+ allocate(uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(4)) -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(5)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(8)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1220) -+ enddo -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c store initial values of position -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate mass terms for PMF units -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ ii=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(ii) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxp,dyp,dzp) -+ -+c move atoms by leapfrog algorithm -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ -+ j=0 -+ do i=iatm0,iatm1 -+ -+ j=j+1 -+ -+c update velocities -+ -+ uxx(i)=vxx(i)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyy(i)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzz(i)+tstep*rmass(i)*fzz(i) -+ -+c update positions -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+c RDSHAKE procedure -+ -+ if(ntcons.gt.0.or.ntpmf.gt.0) then -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c apply bond constraints -+ -+ viracc=0.d0 -+ if(ntcons.gt.0)call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c apply pmf constraints -+ -+ viracc=0.d0 -+ if(ntpmf.gt.0)call pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) -+ -+ enddo -+ -+ safep=.not.unsafe -+ -+c calculate velocity correction -+ -+ j=0 -+ rstep=1.d0/tstep -+ do i=iatm0,iatm1 -+ -+c update corrected velocity -+ -+ j=j+1 -+ uxx(i)=(xxx(i)-xxo(j))*rstep -+ uyy(i)=(yyy(i)-yyo(j))*rstep -+ uzz(i)=(zzz(i)-zzo(j))*rstep -+ -+c calculate the corrected forces -+ -+ fxx(i)=(uxx(i)-vxx(i))*weight(i)*rstep -+ fyy(i)=(uyy(i)-vyy(i))*weight(i)*rstep -+ fzz(i)=(uzz(i)-vzz(i))*weight(i)*rstep -+ -+ enddo -+ -+ endif -+ -+c calculate velocity at full time step -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=0.5d0*(vxx(i)+uxx(i)) -+ vyy(i)=0.5d0*(vyy(i)+uyy(i)) -+ vzz(i)=0.5d0*(vzz(i)+uzz(i)) -+ -+ enddo -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c total contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+c restore half step velocity -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(uxx,uyy,uzz,dxp,dyp,dzp,stat=fail(2)) -+ deallocate(txx,tyy,tzz,xxo,yyo,zzo,stat=fail(3)) -+ deallocate(dxt,dyt,dzt,xxa,yya,zza,stat=fail(4)) -+ -+ return -+ end subroutine pmflf -+ -+ subroutine pmflfq_1 -+ x (safe,safeq,lshmov,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,quattol,tolnce,tstep,vircom, -+ x vircon,safep,nspmf,ntpmf,virpmf) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using implicit leapfrog quaternion algorithm -+c plus bond constraints - PROVIDED rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c tqx,tqy,tqz = torque in lab fixed frame -+c omx,omy,omz = angular velocity in body fixed frame (principal axis) -+c rotinx,y,z = rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory 1993 -+c author t.forester october 1993 -+c amended t.forester dec 1994 : block data -+c amended w.smith sep 1999 : euler equation -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=14 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,safeq,lshmov,newjob,safep,unsafe,img -+ integer imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer fail,i,igrp,igrp1,igrp2,idum,ifre1,ifre2,j,ifre -+ integer jg,ig,k,id,jr,nspmf,ntpmf,jj,ii,ipmf,icyc -+ real(8) engke,engrot,quattol,tolnce,tstep,vircom,vircon -+ real(8) strkin,rot,rstep,rtsq,engtrn,vaa,vbb,vcc,virpmf -+ real(8) trx,try,trz,delx,dely,delz,engfke,viracc -+ real(8) strgrp,tqx,tqy,tqz,fmx,fmy,fmz -+ real(8) strpmf,strcon,summas -+ -+ real(8), allocatable :: opx(:),opy(:),opz(:) -+ real(8), allocatable :: oqx(:),oqy(:),oqz(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xx1(:),yy1(:),zz1(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gcxo(:),gcyo(:),gczo(:) -+ -+ -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ -+ dimension strkin(9),strgrp(9),rot(9),fail(nnn) -+ -+ dimension strpmf(9),strcon(9),summas(2) -+ -+ save igrp1,igrp2,ifre1,ifre2 -+ -+ data newjob/.true./ -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (opx(msgrp),opy(msgrp),opz(msgrp),stat=fail(1)) -+ allocate (oqx(msgrp),oqy(msgrp),oqz(msgrp),stat=fail(2)) -+ allocate (dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(3)) -+ allocate (dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(5)) -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(8)) -+ allocate (xxo(msatms),yyo(msatms),zzo(msatms),stat=fail(9)) -+ allocate (xx1(msatms),yy1(msatms),zz1(msatms),stat=fail(10)) -+ allocate (vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(11)) -+ allocate (gcxo(msgrp),gcyo(msgrp),gczo(msgrp),stat=fail(12)) -+ -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(13)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(14)) -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1500) -+ enddo -+ -+ if(newjob)then -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ newjob=.false. -+ -+ endif -+ -+ safe=.false. -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c store initial values of position and velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ xxo(j)=xxx(i) -+ yyo(j)=yyy(i) -+ zzo(j)=zzz(i) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ gcxo(jg)=gcmx(ig) -+ gcyo(jg)=gcmy(ig) -+ gczo(jg)=gcmz(ig) -+ -+ enddo -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate mass terms for PMF units -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ ii=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(ii) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxp,dyp,dzp) -+ -+c move atoms by leapfrog algorithm -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ -+c calculate atom displacements from rigid body com -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcxo(jg) -+ dty(jr)=yyy(i)-gcyo(jg) -+ dtz(jr)=zzz(i)-gczo(jg) -+ -+ enddo -+ -+ enddo -+ -+c minimum images -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c integrate 'free' particles -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c advance velocity by leapfrog -+ -+ uxx(i)=vxo(j)+tstep*rmass(i)*fxx(i) -+ uyy(i)=vyo(j)+tstep*rmass(i)*fyy(i) -+ uzz(i)=vzo(j)+tstep*rmass(i)*fzz(i) -+ -+c advance position by leapfrog -+ -+ xxx(i)=xxo(j)+tstep*uxx(i) -+ yyy(i)=yyo(j)+tstep*uyy(i) -+ zzz(i)=zzo(j)+tstep*uzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0.or.ntpmf.gt.0) then -+ -+c store integrated positions -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ j=j+1 -+ xx1(j)=xxx(i) -+ yy1(j)=yyy(i) -+ zz1(j)=zzz(i) -+ -+ enddo -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c apply bond constraints -+ -+ viracc=0.d0 -+ if(ntcons.gt.0)call rdshake_1 -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+c apply pmf constraints -+ -+ viracc=0.d0 -+ if(ntpmf.gt.0)call pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,xxt,yyt,zzt,strcon,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).lt.1.d-10)) -+ -+ enddo -+ -+ safep=.not.unsafe -+ -+c calculate force and velocity corrections -+ -+ j=0 -+ rstep=1.d0/tstep -+ rtsq=1.d0/tstep**2 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+c calculate force correction -+ -+ fxx(i)=fxx(i)+(xxx(i)-xx1(j))*weight(i)*rtsq -+ fyy(i)=fyy(i)+(yyy(i)-yy1(j))*weight(i)*rtsq -+ fzz(i)=fzz(i)+(zzz(i)-zz1(j))*weight(i)*rtsq -+ -+c calculate velocity correction -+ -+ uxx(i)=uxx(i)+(xxx(i)-xx1(j))*rstep -+ uyy(i)=uyy(i)+(yyy(i)-yy1(j))*rstep -+ uzz(i)=uzz(i)+(zzz(i)-zz1(j))*rstep -+ -+ enddo -+ -+c end of shake corrections -+ -+ endif -+ -+c estimate full step velocity -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ -+ vxx(i)=0.5d0*(uxx(i)+vxo(j)) -+ vyy(i)=0.5d0*(uyy(i)+vyo(j)) -+ vzz(i)=0.5d0*(uzz(i)+vzo(j)) -+ -+ enddo -+ -+c calculate new kinetic energy at current timestep -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ -+c restore free atom half step velocity -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=uxx(i) -+ vyy(i)=uyy(i) -+ vzz(i)=uzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+c translational rigid body motion -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+c calculate net force on rigid body -+ -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c advance velocity by leapfrog -+ -+ uxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ uyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ uzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+c advance position by leapfrog -+ -+ gcmx(ig)=gcmx(ig)+tstep*uxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*uyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*uzz(ig) -+ -+c estimate velocity at full time step -+ -+ gvxx(ig)=0.5d0*(gvxx(ig)+uxx(ig)) -+ gvyy(ig)=0.5d0*(gvyy(ig)+uyy(ig)) -+ gvzz(ig)=0.5d0*(gvzz(ig)+uzz(ig)) -+ -+ enddo -+ -+c calculate rigid body translational kinetic energy -+ -+ engtrn=getkint(ngrp,idnode,mxnode) -+ -+c total translational kinetic energy -+ -+ engke=engtrn+engfke -+ -+c calculate ridid body kinetic stress tensor -+ -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c restore rigid body half timestep velocity -+ -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=uxx(ig) -+ gvyy(ig)=uyy(ig) -+ gvzz(ig)=uzz(ig) -+ -+ enddo -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate torques in lab frame -+ -+ jr=0 -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ id=lstgtp(ig) -+ -+ tqx=0.d0 -+ tqy=0.d0 -+ tqz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ tqx=tqx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ tqy=tqy+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ tqz=tqz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c store current angular velocity -+ -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ -+c iterate angular velocity for time step n (e. yezdimer) -+ -+ do i=1,5 -+ -+ trx=(tqx*rot(1)+tqy*rot(4)+tqz*rot(7))*rotinx(id,2) -+ x +(rotiny(id,1)-rotinz(id,1))*opy(jg)*opz(jg)*rotinx(id,2) -+ try=(tqx*rot(2)+tqy*rot(5)+tqz*rot(8))*rotiny(id,2) -+ x +(rotinz(id,1)-rotinx(id,1))*opz(jg)*opx(jg)*rotiny(id,2) -+ trz=(tqx*rot(3)+tqy*rot(6)+tqz*rot(9))*rotinz(id,2) -+ x +(rotinx(id,1)-rotiny(id,1))*opx(jg)*opy(jg)*rotinz(id,2) -+ -+ delx=tstep*trx -+ dely=tstep*try -+ delz=tstep*trz -+ -+c improved angular velocity at time step n -+ -+ opx(jg)=omx(ig)+delx*pt5 -+ opy(jg)=omy(ig)+dely*pt5 -+ opz(jg)=omz(ig)+delz*pt5 -+ -+ enddo -+ -+c angular velocity at time step n+1/2 -+ -+ uxx(ig)=omx(ig)+delx -+ uyy(ig)=omy(ig)+dely -+ uzz(ig)=omz(ig)+delz -+ -+c angular velocity at time step n+1 (needed for quat algorithm) -+ -+ oqx(jg)=omx(ig)+delx*1.5d0 -+ oqy(jg)=omy(ig)+dely*1.5d0 -+ oqz(jg)=omz(ig)+delz*1.5d0 -+ -+c angular velocity at timestep n -+ -+ omx(ig)=omx(ig)+pt5*delx -+ omy(ig)=omy(ig)+pt5*dely -+ omz(ig)=omz(ig)+pt5*delz -+ -+ enddo -+ -+c rotational kinetic energy -+ -+ engrot=getkinr(ngrp,idnode,mxnode) -+ -+c restore half step angular velocity -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ opx(jg)=omx(ig) -+ opy(jg)=omy(ig) -+ opz(jg)=omz(ig) -+ omx(ig)=uxx(ig) -+ omy(ig)=uyy(ig) -+ omz(ig)=uzz(ig) -+ -+ enddo -+ -+c assign new quaternions -+ -+ call update_quaternions -+ x (safeq,igrp1,igrp2,tstep,quattol,opx,opy,opz,oqx,oqy,oqz) -+ -+c complete stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strcns(i)+strbod(i)+ -+ x strpmf(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+c minimum images of group positions and particle positions -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c new atomic positions for atoms in rigid bodies - relative to c.o.m -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1) then -+ -+c merge new group coordinates and velocities -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c ensure all atoms are within cell boundaries -+ -+ call images(imcon,0,1,natms,cell,xxx,yyy,zzz) -+ -+c deallocate work arrays -+ -+ deallocate(opx,opy,opz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(oqx,oqy,oqz,dtx,dty,dtz,stat=fail(2)) -+ deallocate(dxx,dyy,dzz,uxx,uyy,uzz,stat=fail(3)) -+ deallocate(txx,tyy,tzz,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,xx1,yy1,zz1,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,gcxo,gcyo,gczo,stat=fail(6)) -+ deallocate(dxp,dyp,dzp,xxa,yya,zza,stat=fail(7)) -+ -+ return -+ end subroutine pmflfq_1 -+ -+ subroutine pmf_shake -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x virpmf,xxt,yyt,zzt,strpmf,summas,dxp,dyp,dzp, -+ x xxa,yya,zza) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accummulates constraint force to maintain reaction coordinate -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory 1995 -+c author t.forester august 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,fail,icyc,k,jj -+ integer ii,i,ipmf -+ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas -+ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,strs1,strs2,strs3,strs5 -+ real(8) strs6,strs9,tstep2,dis,omega2,eps,gamma,gammi -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ dimension amt(2),strpmf(9),summas(2) -+ -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:),dsq(:) -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),dsq(mspmf), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1230) -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c accumulators for strpmf tensor -+ -+ virpmf=0.d0 -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safep=.false. -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c calculate bond constraint length -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt, -+ x xxa,yya,zza,dxt,dyt,dzt) -+ -+ amt(1)= tstep2/summas(1) -+ amt(2)=-tstep2/summas(2) -+ -+ eps=0.d0 -+ dis=prmpmf -+ omega2=dis*dis -+ -+ do k=1,nspmf -+ -+ dsq(k)=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ eps=max(eps,abs((omega2-dsq(k))/(2.0d0*dis))) -+ -+ enddo -+ -+c check convergence condition -+ -+ safep=(eps.le.tolnce) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ gamma=(omega2-dsq(k))/(-2.d0*(amt(2)-amt(1))* -+ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) -+ -+c accumulate pmf virial -+ -+ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) -+ -+ strs1=strs1-gamma*dxp(k)*dxp(k) -+ strs2=strs2-gamma*dxp(k)*dyp(k) -+ strs3=strs3-gamma*dxp(k)*dzp(k) -+ strs5=strs5-gamma*dyp(k)*dyp(k) -+ strs6=strs6-gamma*dyp(k)*dzp(k) -+ strs9=strs9-gamma*dzp(k)*dzp(k) -+ -+c improve approximate atomic positions -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-gamma*amt(ipmf) -+ -+ do ii=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ xxx(i)=xxx(i)+dxp(k)*gammi -+ yyy(i)=yyy(i)+dyp(k)*gammi -+ zzz(i)=zzz(i)+dzp(k)*gammi -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c complete strpmf tensor -+ -+ strpmf(1)=strs1 -+ strpmf(2)=strs2 -+ strpmf(3)=strs3 -+ strpmf(4)=strs2 -+ strpmf(5)=strs5 -+ strpmf(6)=strs6 -+ strpmf(7)=strs3 -+ strpmf(8)=strs6 -+ strpmf(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=virpmf -+ call gdsum(buffer(1),1,buffer(2)) -+ virpmf=buffer(1) -+ call gdsum(strpmf,9,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxt,dyt,dzt,dsq,stat=fail) -+ -+ return -+ end subroutine pmf_shake -+ -+ subroutine pmfvv -+ x (safe,safep,lshmov,isw,idnode,mxnode,imcon,natms,nscons, -+ x ntcons,nspmf,ntpmf,engke,tolnce,tstep,vircon,virpmf) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics. Velocity Verlet With PMF_RATTLE -+c for potential of mean force calculations. -+c -+c copyright - daresbury laboratory -+c adapted by w.smith october 2005 -+c original by t.forester aug 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical safe,lshmov,safep,unsafe,newjob,img -+ integer idnode,imcon,mxnode,natms,nscons,ntcons,nspmf,ntpmf -+ integer isw,mxtop -+ integer fail,iatm0,iatm1,i,j,k,jj,i1,ipmf,icyc -+ real(8) engke,tolnce,tstep,vircon,virpmf,strcon,summas -+ real(8) viracc,strpmf,strkin -+ -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxp(:),dyp(:),dzp(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxa(:,:),yya(:,:),zza(:,:) -+ -+ dimension strcon(9),strpmf(9),strkin(9),summas(2),fail(nnn) -+ save summas,newjob,strpmf -+ data newjob/.true./ -+ -+c set default safety flags -+ -+ safe=(ntcons.eq.0) -+ safep=(ntpmf.eq.0) -+ if(safe.and.safep)return -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ mxtop=max(mxcons,mspmf) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(1)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(2)) -+ allocate(dxp(mspmf),dyp(mspmf),dzp(mspmf),stat=fail(3)) -+ allocate(dxt(mxtop),dyt(mxtop),dzt(mxtop),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf),stat=fail(6)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1220) -+ enddo -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate mass terms for PMF units -+ -+ if(newjob)then -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ summas(ipmf)=0.d0 -+ pmfnrm(ipmf)=0.d0 -+ -+ do i=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i1=lstpmf(jj,1) -+ summas(ipmf)=summas(ipmf)+weight(i1) -+ pmfnrm(ipmf)=pmfnrm(ipmf)+pmfwght(jj) -+ -+ enddo -+ -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c calculate PMF bond constraints and store initial positions -+ -+ img=.true. -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxp,dyp,dzp) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ if(isw.eq.1)then -+ -+c constraint virials -+ -+ vircon=0.d0 -+ virpmf=0.d0 -+ -+c temporary stress tensor accumulators -+ -+ do i=1,9 -+ -+ strcns(i)=0.d0 -+ strpmf(i)=0.d0 -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c apply constraint corrections - iteratively -+ -+ icyc=0 -+ unsafe=.true. -+ -+ do while(unsafe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ if(isw.eq.1)then -+ -+c apply bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,viracc,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcon) -+ -+ vircon=vircon+viracc -+ do i=1,9 -+ strcns(i)=strcns(i)+strcon(i) -+ enddo -+ -+ endif -+ -+c apply pmf constraints -+ -+ if(ntpmf.gt.0)then -+ -+ safep=.false. -+ call pmf_rattle_r -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x viracc,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, -+ x dxt,dyt,dzt,strcon) -+ -+ virpmf=virpmf+viracc -+ do i=1,9 -+ strpmf(i)=strpmf(i)+strcon(i) -+ enddo -+ -+ endif -+ -+ unsafe=(.not.(safe.and.safep.and.abs(viracc).le.1.d-10)) -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c apply rattle velocity constraints -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ -+ endif -+ -+c apply pmf velocity constraints -+ -+ if(ntpmf.gt.0)then -+ -+ safep=.false. -+ call pmf_rattle_v -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x summas,dxp,dyp,dzp,xxt,yyt,zzt,xxa,yya,zza,dxt,dyt,dzt) -+ -+ endif -+ -+ unsafe=(.not.(safe.and.safep)) -+ -+ endif -+ -+ enddo -+ -+ safep=(.not.unsafe) -+ -+c periodic boundary condition -+ -+ if(isw.eq.1)call images -+ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+ if(isw.eq.2)then -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c total contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strpmf(i)+strcns(i)+strkin(i) -+ enddo -+ -+c add pmf and constraint virials -+ -+ vircon=vircon+virpmf -+ -+ endif -+ -+c global exchange of configuration data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ if(isw.eq.1)call merge -+ x (idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ if(ntcons.gt.0)call merge -+ x (idnode,mxnode,natms,mxbuff,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate(dxx,dyy,dzz,xxt,yyt,zzt,stat=fail(1)) -+ deallocate(dxp,dyp,dzp,dxt,dyt,dzt,stat=fail(2)) -+ deallocate(txx,tyy,tzz,xxa,yya,zza,stat=fail(3)) -+ -+ return -+ end subroutine pmfvv -+ -+ subroutine pmf_rattle_r -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce, -+ x virpmf,summas,xxt,yyt,zzt,xxa,yya,zza,dxp,dyp,dzp, -+ x dxt,dyt,dzt,strpmf) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accumulates constraint force to maintain reaction coordinate. -+c velocity verlet adaptation -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory -+c adapted by w.smith october 2005 -+c original t.forester august 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj -+ integer i1,i,ipmf -+ real(8) tstep,tolnce,virpmf,xxt,yyt,zzt,strpmf,summas,gamma -+ real(8) dxp,dyp,dzp,xxa,yya,zza,amt,tstep2,dis,omega2,eps,gammi -+ real(8) strs1,strs2,strs3,strs5,strs6,strs9,dxt,dyt,dzt,dsq -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension xxa(2,mspmf),yya(2,mspmf),zza(2,mspmf) -+ dimension amt(2),strpmf(9),summas(2) -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c pmf virial -+ -+ virpmf=0.d0 -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c array bound check -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ img=.true. -+ safep=.false. -+ dis=prmpmf -+ omega2=dis*dis -+ amt(1)= tstep2/summas(1) -+ amt(2)=-tstep2/summas(2) -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,xxx,yyy,zzz,xxt,yyt,zzt,xxa,yya,zza, -+ x dxt,dyt,dzt) -+ -+c check convergence -+ -+ eps=0.d0 -+ -+ do k=1,nspmf -+ -+ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ eps=max(eps,abs((omega2-dsq)/dis)) -+ -+ enddo -+ -+ eps=eps*0.5d0 -+ -+c verification of convergence -+ -+ safep=(eps.lt.tolnce) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ dsq=dxt(k)**2+dyt(k)**2+dzt(k)**2 -+ gamma=(omega2-dsq)/(-(amt(2)-amt(1))* -+ x (dxp(k)*dxt(k)+dyp(k)*dyt(k)+dzp(k)*dzt(k))) -+ -+c accumulate pmf virial -+ -+ virpmf=virpmf+gamma*(dxp(k)**2+dyp(k)**2+dzp(k)**2) -+ -+ strs1=strs1-gamma*dxp(k)*dxp(k) -+ strs2=strs2-gamma*dxp(k)*dyp(k) -+ strs3=strs3-gamma*dxp(k)*dzp(k) -+ strs5=strs5-gamma*dyp(k)*dyp(k) -+ strs6=strs6-gamma*dyp(k)*dzp(k) -+ strs9=strs9-gamma*dzp(k)*dzp(k) -+ -+c improve approximate atomic positions and velocities -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-0.5d0*gamma*amt(ipmf) -+ -+ do i1=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ xxx(i)=xxx(i)+dxp(k)*gammi -+ yyy(i)=yyy(i)+dyp(k)*gammi -+ zzz(i)=zzz(i)+dzp(k)*gammi -+ vxx(i)=vxx(i)+dxp(k)*gammi/tstep -+ vyy(i)=vyy(i)+dyp(k)*gammi/tstep -+ vzz(i)=vzz(i)+dzp(k)*gammi/tstep -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ strpmf(1)=strs1 -+ strpmf(2)=strs2 -+ strpmf(3)=strs3 -+ strpmf(4)=strs2 -+ strpmf(5)=strs5 -+ strpmf(6)=strs6 -+ strpmf(7)=strs3 -+ strpmf(8)=strs6 -+ strpmf(9)=strs9 -+ -+c splice coordinate and velocity arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=virpmf -+ call gdsum(buffer(1),1,buffer(2)) -+ virpmf=buffer(1) -+ call gdsum(strpmf,9,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,xxx,yyy,zzz,buffer) -+ call splice -+ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine pmf_rattle_r -+ -+ subroutine pmf_rattle_v -+ x (safep,idnode,mxnode,imcon,natms,nspmf,tstep,tolnce,summas, -+ x dxp,dyp,dzp,vxt,vyt,vzt,vxa,vya,vza,vxp,vyp,vzp) -+ -+c*********************************************************************** -+c -+c dlpoly constraint subroutine for potential of mean force calc. -+c accumulates velocity correction for second constraint condition -+c velocity verlet adaptation -+c -+c assume bond vectors dxp,dyp,dzp are input -+c dxp=(sum) wght*xxx(i,1) - (sum) wght*xxx(j,2) etc -+c -+c copyright daresbury laboratory -+c author w.smith october 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safep,img -+ integer idnode,mxnode,imcon,natms,nspmf,icyc,k,jj -+ integer i1,i,ipmf -+ real(8) tstep,tolnce,summas,gamma,vxt,vyt,vzt,vxa,vya,vza -+ real(8) vxp,vyp,vzp,dxp,dyp,dzp,amt,omega,eps,gammi,tolvel -+ -+ dimension dxp(mspmf),dyp(mspmf),dzp(mspmf) -+ dimension vxp(mspmf),vyp(mspmf),vzp(mspmf) -+ dimension vxt(mxatms),vyt(mxatms),vzt(mxatms) -+ dimension vxa(2,mspmf),vya(2,mspmf),vza(2,mspmf) -+ dimension amt(2),summas(2) -+ -+c constraint convergence tolerance -+ -+ tolvel=tolnce/tstep -+ -+c array bound check -+ -+ if(mxcons.lt.nspmf) call error(idnode,492) -+ if(mspmf .lt.nspmf) call error(idnode,458) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ img=.false. -+ safep=.false. -+ amt(1)= 0.5d0*tstep/summas(1) -+ amt(2)=-0.5d0*tstep/summas(2) -+ -+ do while(.not.safep.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ call pmf_vectors -+ x (img,nspmf,imcon,cell,vxx,vyy,vzz,vxt,vyt,vzt,vxa,vya,vza, -+ x vxp,vyp,vzp) -+ -+c check convergence -+ -+ eps=0.d0 -+ do k=1,nspmf -+ -+ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) -+ eps=max(eps,abs(omega)/prmpmf) -+ -+ enddo -+ -+c verification of convergence -+ -+ safep=(eps.lt.tolvel) -+ -+c bypass calculations if converged -+ -+ if(.not.safep)then -+ -+ do k=1,nspmf -+ -+ omega=dxp(k)*vxp(k)+dyp(k)*vyp(k)+dzp(k)*vzp(k) -+ gamma=omega/((amt(2)-amt(1))* -+ x (dxp(k)**2+dyp(k)**2+dzp(k)**2)) -+ -+c improve approximate atomic velocities -+ -+ jj=0 -+ do ipmf=1,2 -+ -+ gammi=-gamma*amt(ipmf) -+ -+ do i1=1,npmf(ipmf) -+ -+ jj=jj+1 -+ i=lstpmf(jj,k) -+ -+ vxx(i)=vxx(i)+dxp(k)*gammi -+ vyy(i)=vyy(i)+dyp(k)*gammi -+ vzz(i)=vzz(i)+dzp(k)*gammi -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1)call splice -+ x (idnode,natms,listpm,lstpmt,vxx,vyy,vzz,buffer) -+ -+ return -+ end subroutine pmf_rattle_v -+ -+ end module pmf_module -diff -urN dl_class_1.9.orig/srcmod/property_module.f dl_class_1.9/srcmod/property_module.f ---- dl_class_1.9.orig/srcmod/property_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/property_module.f 2014-02-27 13:49:34.000000000 +0100 -@@ -0,0 +1,1318 @@ -+ module property_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining simulation property data -+c copyright - daresbury laboratory -+c author - w. smith nov 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use pair_module -+ use setup_module -+ use site_module -+ use tether_module -+ use utility_module -+ use vdw_module -+ -+ implicit none -+ -+ real(8), allocatable :: rdf(:,:),zdens(:,:) -+ real(8), allocatable :: stpval(:),sumval(:) -+ real(8), allocatable :: ssqval(:),zumval(:) -+ real(8), allocatable :: ravval(:),stkval(:,:) -+ real(8), allocatable :: xx0(:),yy0(:),zz0(:) -+ real(8), allocatable :: amsd(:) -+ -+ save rdf,zdens,stpval,sumval,ssqval,xx0,yy0,zz0 -+ save zumval,ravval,stkval -+ -+ contains -+ -+ subroutine alloc_prp_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (zdens(mxzdn,mxatyp),stat=fail(1)) -+ allocate (rdf(mxrdf,mxxtyp),amsd(mxatyp),stat=fail(2)) -+ allocate (stpval(mxnstk),sumval(mxnstk),stat=fail(3)) -+ allocate (ssqval(mxnstk),zumval(mxnstk),stat=fail(4)) -+ allocate (ravval(mxnstk),stkval(mxstak,mxnstk),stat=fail(5)) -+ allocate (xx0(mxatms),yy0(mxatms),zz0(mxatms),stat=fail(6)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1740) -+ enddo -+ -+ end subroutine alloc_prp_arrays -+ -+ subroutine result -+ x (ltad,lbpd,lgofr,lpgr,lzden,idnode,imcon,keyens,mxnode,natms, -+ x levcfg,nzden,nstep,ntpatm,numacc,numrdf,keybpd,chip,chit,conint, -+ x rcut,tstep,engcfg,volm,virtot,vircom,zlen,tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing simulation summary and -+c saving the restart data -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith dec 1992. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*1 hms,dec -+ logical lgofr,lpgr,lzden,check,ltad,lbpd,goprint -+ -+ integer idnode,imcon,keyens,mxnode,natms,nzden,nstep,ntpatm -+ integer levcfg,numacc,numrdf,keybpd,i,iadd,io,j -+ real(8) chip,chit,conint,rcut,tstep,volm,timelp,avvol,zlen,dc -+ real(8) engcfg,virtot,vircom,prntim,simtim,tboost,chit_shl -+ -+c save restart data -+ -+ call revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+c for TAD and BPD system averages not generally meaningful -+c useful only for BPD in configurational sampling mode -+ -+ goprint=.not.(ltad.or.(lbpd.and.keybpd.gt.1)) -+ -+ if(goprint)then -+ -+c calculate final fluctuations -+ -+ do i=1,mxnstk -+ ssqval(i)=sqrt(max(0.d0,ssqval(i))) -+ enddo -+ -+c final averages and fluctuations -+ -+ call timchk(0,timelp) -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,1x,'run terminated after',i8,' steps.', -+ x ' final averages calculated over',i8,' steps.',/,/)") -+ x nstep,numacc -+ write(nrite,"(1x,120('-'), -+ x /,/,1x,' step',5x,'eng_tot',4x,'temp_tot',5x,'eng_cfg', -+ x 5x,'eng_vdw',5x,'eng_cou',5x,'eng_bnd',5x,'eng_ang',5x, -+ x 'eng_dih',5x,'eng_tet',/,1x,'time ',5x,' eng_pv',4x, -+ x 'temp_rot',5x,'vir_cfg',5x,'vir_vdw',5x,'vir_cou',5x, -+ x 'vir_bnd',5x,'vir_ang',5x,'vir_con',5x,'vir_tet',/, -+ x 1x,'cpu time',6x,'volume',4x,'temp_shl',5x,'eng_shl', -+ x 5x,'vir_shl',7x,'alpha',8x,'beta',7x,'gamma',5x,'vir_pmf', -+ x 7x,'press',/,/, -+ x 1x,120('-'))") -+ -+ call get_prntime(hms,timelp,prntim) -+ call get_simtime(dec,nstep,tstep,simtim) -+ write(nrite,'(1x,i8,1p,9e12.4,/,1x,0p,f7.3,a1,1p,9e12.4, -+ x /,1x,0p,f7.3,a1,1p,9e12.4)') -+ x nstep,(sumval(i),i=1,9), -+ x simtim,dec,(sumval(i),i=10,18), -+ x prntim,hms,(sumval(i),i=19,27) -+ write(nrite,"(/,1x,' r.m.s. ',1p,9e12.4,/,1x,'fluctn. ', -+ x 1p,9e12.4,/,9x,9e12.4)") (ssqval(i),i=1,27) -+ write(nrite,"(1x,120('-'))") -+ -+c write out bias potential boost factor -+ -+ if(lbpd)write(nrite,"(/,/,1x, -+ x 'calculated bias potential boost factor',1p,e16.8)")tboost -+ -+ if(numacc.gt.0)then -+ iadd=27 -+ -+c write out estimated diffusion coefficients -+ -+ if(numacc.gt.0)then -+ -+ write(nrite,"(/,/,12x,'Approximate 3D Diffusion', -+ x ' coefficients (10^-9 m^2 / s)',/,/,12x,'atom',7x, -+ x ' D ')") -+ -+ do i=1,ntpatm -+ -+ iadd=iadd+1 -+ dc=(ravval(iadd)-sumval(iadd))/ -+ x (3.d0*dble(numacc-min(mxnstk,numacc-1))*tstep)*10.d0 -+ if(dc.lt.1d-10) dc=0.d0 -+ if(lbpd)dc=dc/tboost -+ write(nrite,'(12x,a8,1p,e13.4)') unqatm(i),dc -+ -+ enddo -+ -+ endif -+ -+c print out average pressure tensor -+ -+ write(nrite,"(/,/,16x,'Average pressure tensor', -+ x 39x,'r.m.s. fluctuations ',/)") -+ -+ do i=iadd,iadd+6,3 -+ write(nrite,'(9x,1p,3e12.4,24x,3e12.4)') -+ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) -+ enddo -+ iadd=iadd+9 -+ -+ write(nrite,'(/,12x,a,1p,e12.4)') 'trace/3. ', -+ x (sumval(iadd)+sumval(iadd-4)+sumval(iadd-8))/3.d0 -+ -+c write out mean cell vectors for npt -+ -+ if(keyens.gt.3.and.(keyens.le.7))then -+ -+ write(nrite,"(/,/,17x,'Average cell vectors', -+ x 41x,'r.m.s. fluctuations ',/)") -+ -+ do i=iadd,iadd+6,3 -+ write(nrite,'(3f20.10,9x,1p,3e12.4)') -+ x (sumval(i+j),j=1,3),(ssqval(i+j),j=1,3) -+ enddo -+ iadd=iadd+9 -+ -+ endif -+ -+c write out remaining registers -+ -+ check=.false. -+ do i=iadd+1,mxnstk -+ -+ if((abs(sumval(i)).gt.1.d-10).or. -+ x (abs(ssqval(i)).gt.1.d-10)) check=.true. -+ -+ enddo -+ -+ if(check)then -+ -+ write(nrite,"(/,/,12x, -+ x 'Remaining non-zero statistics registers ',/,/,12x, -+ x 'Register',7x,'Average value',8x,'r.m.s. fluc.')") -+ -+ do i=iadd+1,mxnstk -+ -+ if((abs(sumval(i)).gt.1.d-10).or. -+ x (abs(ssqval(i)).gt.1.d-10)) -+ x write(nrite,'(10x,i10,2f20.10)') i,sumval(i),ssqval(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c print out sample of final configuration -+ -+ write(nrite,"(/,/,1x,'sample of final configuration',/)") -+ write(nrite,"(6x,'i',7x,'x(i)',8x,'y(i)',8x,'z(i)', -+ x 7x,'vx(i)',7x,'vy(i)',7x,'vz(i)',7x,'fx(i)',7x, -+ x 'fy(i)',7x,'fz(i)',/,/)") -+ io=(natms+19)/20 -+ -+ do i=1,natms,io -+ -+ write(nrite,"(1x,i6,1p,3e12.4,3e12.4,3e12.4)") -+ x i,xxx(i),yyy(i),zzz(i),vxx(i),vyy(i),vzz(i), -+ x fxx(i),fyy(i),fzz(i) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c bypass printing averages for certain tad and bpd options -+ -+ if(goprint)then -+ -+c average volume -+ -+ avvol=sumval(19) -+ if(imcon.eq.0.or.imcon.eq.6)then -+ avvol=4.d0*pi/3.d0*rcut**3 -+ volm=avvol -+ endif -+ -+c calculate and print radial distribution functions -+ -+ if(lgofr.and.lpgr.and.(numrdf.gt.0))then -+ -+c scale densities for average volume -+ -+ do i=1,ntpatm -+ dens(i)=dens(i)*(volm/avvol) -+ enddo -+ -+ call rdf1 -+ x (lpgr,idnode,mxnode,ntpatm,numrdf,avvol,rcut) -+ -+ endif -+ -+ if(lzden.and.lpgr.and.(nzden.gt.0))then -+ call zden1(lpgr,idnode,mxnode,ntpatm,nzden,avvol,zlen) -+ endif -+ -+ if(imcon.eq.0)volm=0.d0 -+ -+ endif -+ -+c print final time check -+ -+ call timchk(1,timelp) -+ -+ return -+ end subroutine result -+ -+ subroutine diffsn0(idnode,natms,mxnode,tstep) -+ -+c*********************************************************************** -+c -+c DL_POLY routine for calculating displacements of sites from -+c t=0 positions -+c -+c use diffsn1 for mean squared displacements -+c -+c parallel version - replicated data. -+c -+c copyright daresbury laboratory 1993 -+c -+c author - t. forester june 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,mxnode,iatm1,iatm2,i -+ real(8) tstep -+ -+ save newjob,iatm1,iatm2 -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+ newjob=.false. -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ endif -+ -+ do i=iatm1,iatm2 -+ -+ xx0(i)=xx0(i)+vxx(i)*tstep -+ yy0(i)=yy0(i)+vyy(i)*tstep -+ zz0(i)=zz0(i)+vzz(i)*tstep -+ -+ enddo -+ -+ return -+ end subroutine diffsn0 -+ -+ subroutine diffsn1(idnode,natms,ntpatm,mxnode) -+ -+c*********************************************************************** -+c -+c DL_POLY routine for calculating mean squared displacements -+c -+c displacements calculated in diffsn0 -+c -+c parallel version - replicated data. -+c -+c copyright daresbury laboratory 1993 -+c -+c author - t. forester june 1993 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,ntpatm,mxnode,iatm1,iatm2,k,i -+ -+ save newjob,iatm1,iatm2 -+ -+ data newjob/.true./ -+ -+ if(newjob)then -+ -+ newjob=.false. -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+ endif -+ -+c running sum of squared displacements -+ -+ do k=1,ntpatm -+ -+ amsd(k)=0.d0 -+ -+ enddo -+ -+c calculate square of displacements for each atom type -+ -+ do i=iatm1,iatm2 -+ -+ k=ltype(i) -+ amsd(k)=amsd(k)+xx0(i)**2+yy0(i)**2+zz0(i)**2 -+ -+ enddo -+ -+c global sum - replicated data strategy -+ -+ if(mxnode.gt.1)then -+ -+ do k=1,ntpatm -+ -+ buffer(k+ntpatm)=amsd(k) -+ -+ enddo -+ -+ call gdsum(buffer(1+ntpatm),ntpatm,buffer(1)) -+ -+ do k=1,ntpatm -+ -+ amsd(k)=buffer(k+ntpatm) -+ -+ enddo -+ -+ endif -+ -+c mean squared displacement -+ -+ do k=1,ntpatm -+ -+ amsd(k)=amsd(k)/dble(max(numtyp(k),1)) -+ -+ enddo -+ -+ return -+ end subroutine diffsn1 -+ -+ subroutine rdf0(iatm,ik,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for radial -+c distribution functions. -+c double precision accumulators -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,ik,m,jatm,ll,k -+ real(8) rcut,rcsq,rdelr,ai,aj,rsq,rrr -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut*rcut -+ -+c grid interval for rdf tables -+ -+ rdelr=dble(mxrdf)/rcut -+ -+c set up atom iatm type -+ -+ ai=ltype(iatm) -+ -+c start of primary loop for rdf accumulation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ -+ aj=ltype(jatm) -+ if(ai.gt.aj)then -+ k=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ else -+ k=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ endif -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ ll=Min(1+Int(rrr*rdelr),mxrdf) -+ -+c accumulate statistics -+ -+ rdf(ll,k)=rdf(ll,k)+1.d0 -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine rdf0 -+ -+ subroutine rdf1 -+ x (lpgr,idnode,mxnode,ntpatm,numrdf,volm,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating radial distribution functions -+c from accumulated data. -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ntpatm,numrdf,ia,ib,k,j -+ real(8) volm,factor,sum,rrr,dvol,gofr,rcut,delrdf -+ -+ logical lpgr,zero -+ -+ if(idnode.eq.0) write(nrite, -+ x "(/,/,12X,'RADIAL DISTRIBUTION FUNCTIONS',/,/, -+ x 'calculated using ',i10,' configurations')") numrdf -+ -+ if(lpgr)then -+ -+c open RDF file and write headers -+ -+ if(idnode.eq.0)then -+ -+ open(nrdfdt,file='RDFDAT') -+ -+ write(nrdfdt,'(80a1)')cfgname -+ write(nrdfdt,'(2i10)')mxxtyp,mxrdf -+ -+ endif -+ -+c default bin width -+ -+ delrdf=rcut/dble(mxrdf) -+ -+c construct rdf tables -+ -+ do ia=1,ntpatm -+ -+ do ib=ia,ntpatm -+ -+ k=(ib*(ib-1))/2+ia -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,'g(r) :',2a8,/,/,8x,'r',6x,'g(r)',9x,'n(r)',/)") -+ x unqatm(ia),unqatm(ib) -+ write(nrdfdt,'(2a8)')unqatm(ia),unqatm(ib) -+ -+ endif -+ -+c global sum of data on all nodes -+ -+ if(mxnode.gt.1) call gdsum(rdf(1,k),mxrdf,buffer) -+ -+c normalisation factor -+ -+ factor=volm*dens(ia)*dens(ib)*dble(numrdf) -+ if((ia.eq.ib).and.(volm*dens(ia).gt.1.d0)) -+ x factor=factor*0.5d0 -+ -+c running integration of rdf -+ -+ sum=0.d0 -+ -+c loop over distances -+ -+ zero=.true. -+ -+ do j=1,mxrdf -+ -+ if(zero.and.(j.lt.mxrdf-3)) -+ x zero=(rdf(j+2,k).le.0.d0) -+ -+ rrr=(dble(j)-0.5d0)*delrdf -+ dvol=4.d0*pi*(delrdf*rrr*rrr+(delrdf**3)/12.d0) -+ -+ gofr=rdf(j,k)/(factor*dvol) -+ sum=sum+gofr*dvol*dens(ib) -+ -+c print out information -+ -+ if(idnode.eq.0)then -+ -+ write(nrdfdt,"(1p,2e14.6)")rrr,gofr -+ if(.not.zero) -+ x write(nrite,"(f10.4,1p,2e14.6)")rrr,gofr,sum -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(idnode.eq.0)close (nrdfdt) -+ -+ endif -+ -+ return -+ end subroutine rdf1 -+ -+ subroutine static -+ x (lbpd,lzeql,idnode,intsta,imcon,keyens,natms,nstack, -+ x nstep,nsteql,ntpatm,numacc,mxnode,nblock,keybpd,numbpd, -+ x consv,degfre,degrot,engang,engbnd,engcpe,engdih,enginv, -+ x engke,engrot,engsrp,engunit,engcfg,stpeng,stpeth,stpprs, -+ x stptmp,stpvir,stpvol,tstep,virbnd,engfbp,vircom,vircon, -+ x vircpe,virsrp,engfld,virfld,engtbp,virtbp,virpmf,virshl, -+ x engshl,engtet,virtet,degshl,shlke,virang,width,engmet, -+ x virmet,engter,virter,boost,tboost) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating periodic data during the -+c molecular dynamics simulation and computing the rolling averages -+c -+c copyright daresbury laboratory 1992 -+c -+c author - w. smith august 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lbpd,lzeql,newjob -+ integer idnode,intsta,imcon,keyens,natms,nstack,nstep,j -+ integer nsteql,ntpatm,numacc,mxnode,i,iadd,k,kstak -+ integer nblock,keybpd,numbpd -+ real(8) consv,degfre,degrot,engang,engbnd,engcpe,engdih -+ real(8) enginv,engke,engrot,engsrp,engunit,engcfg,stpeng -+ real(8) stpeth,stpprs,stptmp,stpvir,stpvol,tstep,virbnd -+ real(8) engfbp,vircom,vircon,vircpe,virsrp,engfld,virfld -+ real(8) engtbp,virtbp,virpmf,virshl,engshl,engtet,virtet -+ real(8) degshl,shlke,virang,width,sclnv1,sclnv2,stprot -+ real(8) stpcns,stpshl,zistk,engmet,virmet,engter,virter -+ real(8) tbold,aterm,bterm,cterm,boost,tboost -+ -+ save newjob -+ -+ data newjob/.true./ -+ -+c open statistics file for append -+ -+ if(newjob.and.idnode.eq.0.and.intsta.gt.0)then -+ -+ open(nstats,file='STATIS',position='append') -+ newjob=.false. -+ -+ endif -+ -+ if(idnode.eq.0.and.nstep.eq.intsta.and.intsta.gt.0)then -+ -+ write(nstats,'(80a1)') cfgname -+ if(abs(engunit-9648.530821d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-9648530.821d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kilo electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nstats, -+ x "(' ENERGY UNITS=DL_POLY Internal Units ')") -+ -+ endif -+ -+c calculate cell volume and minimum cell half-width -+ -+ if(imcon.eq.0)then -+ -+ width=0.d0 -+ -+ stpvol=0.d0 -+ do i=1,10 -+ celprp(i)=0.d0 -+ enddo -+ -+ else -+ -+ call dcell(cell,celprp) -+ stpvol=celprp(10) -+ width=min(celprp(7),celprp(8),celprp(9))/2.d0 -+ -+ if(imcon.eq.4)then -+ -+ stpvol=0.5d0*celprp(10) -+ width=sqrt(3.d0)*cell(1)/4.d0 -+ -+ elseif(imcon.eq.5)then -+ -+ stpvol=0.5d0*celprp(10) -+ width=cell(1)/2.d0 -+ -+ elseif(imcon.eq.6)then -+ -+ width=min(celprp(7),celprp(8))/2.d0 -+ -+ elseif(imcon.eq.7)then -+ -+ stpvol=0.5d0*celprp(10) -+ -+ endif -+ -+ endif -+ -+c energetic properties of system -+ -+ stpvir=virsrp+vircpe+virbnd+vircon+vircom+virtbp+virang -+ x +virshl+virtet+virter+virmet+virfld -+ stpeng=engcfg+engke+engrot -+ stprot=2.d0*engrot/(boltz*max(1.d0,degrot)) -+ stpshl=2.d0*shlke/(boltz*max(1.d0,degshl)) -+ stptmp=2.d0*(engke+engrot)/(boltz*degfre) -+ stpprs=0.d0 -+ if(imcon.gt.0)stpprs=(2.d0*engke-stpvir)/(3.d0*stpvol) -+ stpeth=stpeng+stpprs*stpvol -+ stpcns=stpeng+consv -+ -+c convert pressure to units of katm -+ -+ stpprs=stpprs*prsunt -+ -+c calculate mean squared displacements -+c atomic displacements from origin of production run -+ -+ if((.not.lzeql).or.(nstep.gt.nsteql))then -+ -+ call diffsn0(idnode,natms,mxnode,tstep) -+ call diffsn1(idnode,natms,ntpatm,mxnode) -+ -+ endif -+ -+c zero statistics arrays -+ -+ if((nstep.le.0).or.(numacc.eq.0))then -+ -+ numacc=0 -+ -+ do i=1,mxnstk -+ -+ stpval(i)=0.d0 -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ -+ enddo -+ -+ do i=1,mxatms -+ -+ xx0(i)=0.d0 -+ yy0(i)=0.d0 -+ zz0(i)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c store current values in statistics array -+ -+ stpval(1) =stpcns/engunit -+ stpval(2) =stptmp -+ stpval(3) =engcfg/engunit -+ stpval(4) =(engsrp+engmet+engter)/engunit -+ stpval(5) =engcpe/engunit -+ stpval(6) =engbnd/engunit -+ stpval(7) =(engang+engtbp)/engunit -+ stpval(8) =(engdih+enginv+engfbp)/engunit -+ stpval(9) =engtet/engunit -+ stpval(10)=stpeth/engunit -+ stpval(11)=stprot -+ stpval(12)=stpvir/engunit -+ stpval(13)=(virsrp+virmet+virter)/engunit -+ stpval(14)=vircpe/engunit -+ stpval(15)=virbnd/engunit -+ stpval(16)=(virtbp+virang)/engunit -+ stpval(17)=vircon/engunit -+ stpval(18)=virtet/engunit -+ stpval(19)=stpvol -+ stpval(20)=stpshl -+ stpval(21)=engshl/engunit -+ stpval(22)=virshl/engunit -+ stpval(23)=acos(celprp(6))*180.d0/pi -+ stpval(24)=acos(celprp(5))*180.d0/pi -+ stpval(25)=acos(celprp(4))*180.d0/pi -+ stpval(26)=virpmf/engunit -+ stpval(27)=stpprs -+ -+ iadd=27 -+ -+c mean squared displacements -+ -+ if((.not.lzeql).or.(nstep.gt.nsteql))then -+ -+ do k=1,ntpatm -+ -+ stpval(iadd+k)=amsd(k) -+ -+ enddo -+ -+ endif -+ -+ iadd=iadd+ntpatm -+ -+c stress tensor -+ -+ if(abs(stpvol).le.1.d-10) stpvol=1.d0 -+ do i=1,9 -+ stpval(iadd+i)=stress(i)*prsunt/(stpvol) -+ enddo -+ iadd=iadd+9 -+ -+c cell vectors -+ -+ if(keyens.gt.3.and.(keyens.le.7))then -+ do i=1,9 -+ stpval(iadd+i)=cell(i) -+ enddo -+ iadd=iadd+9 -+ endif -+ -+c check on number of variables for stack - -+ -+ if(iadd.gt.mxnstk) call error(idnode,170) -+ -+c accumulate totals over steps -+ -+ numacc=numacc+1 -+ sclnv2=1.d0/dble(numacc) -+ sclnv1=dble(numacc-1)/dble(numacc) -+ -+ if(lbpd.and.keybpd.eq.1)then -+ -+c calculate true thermodynamic averages in bias potential system -+c note integers numacc and numbpd should be equal in this case -+ -+ tbold=tboost*dble(numbpd)/dble(numbpd-1)-boost/dble(numbpd-1) -+ cterm=0.d0 -+ do i=1,mxnstk -+ -+ aterm=sumval(i)*tbold -+ bterm=ssqval(i)*tbold**2 -+ if(tbold.gt.0.d0)cterm=(bterm+aterm**2)/tbold -+ ssqval(i)=(sclnv1*(sclnv1*bterm+boost*sclnv2*(cterm+ -+ x (tbold*stpval(i)-2.d0*aterm)*stpval(i))))/tboost**2 -+ sumval(i)=(sclnv1*aterm+boost*sclnv2*stpval(i))/tboost -+ -+ enddo -+ -+ else -+ -+c calculate true thermodynamic averages in normal system -+ -+ do i=1,mxnstk -+ -+ ssqval(i)=sclnv1*(ssqval(i)+sclnv2*(stpval(i)-sumval(i))**2) -+ sumval(i)=sclnv1*sumval(i)+sclnv2*stpval(i) -+ -+ enddo -+ -+ endif -+ -+c write statistics file -+ -+ if(idnode.eq.0.and.intsta.gt.0)then -+ -+ if(mod(nstep,intsta).eq.0)then -+ -+ write(nstats,'(i10,1p,e14.6,0p,i10,/,(1p,5e14.6))') -+ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) -+ call flush(nstats) -+c$$$c write option for Excel spreadsheet -+c$$$ write(nstats,'(i10,1p,e14.6,0p,i10,300(1p,5e14.6))') -+c$$$ x nstep,nstep*tstep,iadd,(stpval(k),k=1,iadd) -+ -+ endif -+ -+ endif -+ -+c zero rolling average accumulators -+ -+ if(nstep.le.0)then -+ -+ numacc=0 -+ -+ do i=1,mxnstk -+ -+ zumval(i)=0.d0 -+ -+ do j=1,mxstak -+ -+ stkval(j,i)=0.d0 -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c store quantities in stack -+ -+ kstak=mod(nstep-1,nstack)+1 -+ -+ if(nstep.gt.nstack)then -+ -+ do i=1,mxnstk -+ -+ zumval(i)=zumval(i)-stkval(kstak,i) -+ -+ enddo -+ -+ endif -+ -+ do i=1,mxnstk -+ -+ stkval(kstak,i)=stpval(i) -+ zumval(i)=zumval(i)+stpval(i) -+ -+ enddo -+ -+c calculate rolling averages -+ -+ zistk=min(nstack,nstep) -+ -+ do i=1,mxnstk -+ -+ ravval(i)=zumval(i)/zistk -+ -+ enddo -+ -+c zero accumulators during equilibration period -+ -+ if(lzeql.and.nstep.le.nsteql)then -+ -+ numacc=0 -+ do i=1,mxnstk -+ -+ sumval(i)=0.d0 -+ ssqval(i)=0.d0 -+ -+ enddo -+ -+ endif -+ -+c close statistics file at regular intervals -+ -+ if(.not.newjob.and.mod(nstep,ndump).eq.0)then -+ -+ if(idnode.eq.0)close (nstats) -+ newjob=.true. -+ -+ endif -+ -+ return -+ end subroutine static -+ -+ subroutine revive -+ x (lgofr,lzden,idnode,imcon,mxnode,natms,levcfg,nstep,nzden, -+ x numacc,numrdf,chip,chit,conint,tstep,engcfg,virtot,vircom, -+ x tboost,chit_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing restart files at job termination -+c or at selected intervals in simulation -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith dec 1992. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lgofr,lzden -+ integer idnode,imcon,mxnode,natms,nstep,nzden,numacc,numrdf -+ integer levcfg,nsum,nbuff,i,j -+ real(8) chip,chit,conint,tstep,engcfg,rmxnode,virtot,vircom -+ real(8) tboost,chit_shl -+ -+ if(mxnode.gt.1)then -+ -+c merge displacement data -+ -+ call merge(idnode,mxnode,natms,mxbuff,xx0,yy0,zz0,buffer) -+ -+c globally sum rdf information before saving -+ -+ if(lgofr)then -+ -+c maximum rdfs that can be summed in each step -+ -+ nsum=mxbuff/mxrdf -+ if(nsum.eq.0) call error(idnode,200) -+ -+ nbuff=nsum*mxrdf -+ -+ do i=1,mxxtyp,nsum -+ -+ if((mxxtyp+1-i).lt.nsum) nbuff=(mxxtyp+1-i)*mxrdf -+ call gdsum(rdf(1,i),nbuff,buffer) -+ -+ enddo -+ -+ endif -+ -+c globally sum zden information before saving -+ -+ if(lzden)then -+ -+c maximum zdfs that can be summed in each step -+ -+ nsum=mxbuff/mxzdn -+ if(nsum.eq.0) call error(idnode,200) -+ -+ nbuff=nsum*mxzdn -+ -+ do i =1,mxatyp,nsum -+ -+ if((mxatyp+1-i).lt.nsum) nbuff=(mxatyp+1-i)*mxzdn -+ call gdsum(zdens(1,i),nbuff,buffer) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c node 0 handles i/o -+ -+ if(idnode.eq.0)then -+ -+c write configuration data to new configuration file -+ -+ call config_write('REVCON',levcfg,imcon,natms,engcfg) -+ -+c write accumulator data to dump file -+ -+ open(nrest,file='REVIVE',form='unformatted') -+ -+ write(nrest) dble(nstep),dble(numacc),dble(numrdf),chit, -+ x chip,conint,dble(nzden),tboost,chit_shl -+ write(nrest) virtot,vircom,eta,strcns,strbod -+ write(nrest) stpval -+ write(nrest) sumval -+ write(nrest) ssqval -+ write(nrest) zumval -+ write(nrest) ravval -+ write(nrest) stkval -+ write(nrest) xx0,yy0,zz0 -+ write(nrest) xxs,yys,zzs -+ if(lgofr) write(nrest) rdf -+ if(lzden) write(nrest) zdens -+ -+ close (nrest) -+ -+ endif -+ -+c divide rdf data between nodes -+ -+ rmxnode=1.d0/dble(mxnode) -+ -+ if(lgofr)then -+ -+ do i=1,mxxtyp -+ -+ do j=1,mxrdf -+ -+ rdf(j,i)=rdf(j,i)*rmxnode -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+c divide zdensity data between nodes -+ -+ if(lzden)then -+ -+ do i=1,mxatyp -+ -+ do j=1,mxzdn -+ -+ zdens(j,i)=zdens(j,i)*rmxnode -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine revive -+ -+ subroutine zden0(idnode,natms,mxnode,nzden,zlen) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for density profile -+c zlen=length of cell in z direction -+c -+c double precision accumulators -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nzden,iatm,ll,k -+ real(8) zlen,zleno2,rzdn -+ -+c accumulator -+ -+ nzden=nzden+1 -+ -+c half of z length -+ -+ zleno2=zlen*0.5d0 -+ -+c grid interval for density profiles -+ -+ rzdn=dble(mxzdn)/zlen -+ -+c set up atom iatm type -+ -+ do iatm=idnode+1,natms,mxnode -+ -+ k =ltype(iatm) -+ -+ ll=int((zzz(iatm)+zleno2)*rzdn+1.0d0) -+ -+c accumulate statistic -+ -+ if(ll.gt.0.and.ll.le.mxzdn)zdens(ll,k)=zdens(ll,k)+1.d0 -+ -+ enddo -+ -+ return -+ end subroutine zden0 -+ -+ subroutine zden1 -+ x (lpgr,idnode,mxnode,ntpatm,nzden,volm,zlen) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating Z density profile -+c from accumulated data. -+c double precision version -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lpgr -+ integer idnode,mxnode,ntpatm,nzden,k,j -+ real(8) volm,zlen,delzdn,dvolz,factor,sum,rrr,rho -+ -+ if(idnode.eq.0) write(nrite, -+ x "(/,/,12X,'Z DENSITY PROFILES',/,/, -+ x 'calculated using ',i10,' configurations')") nzden -+ -+ if(lpgr)then -+ -+c open Z density file and write headers -+ -+ if(idnode.eq.0)then -+ -+ open(nzdndt,file='ZDNDAT') -+ -+ write(nzdndt,'(80a1)')cfgname -+ write(nzdndt,'(2i10)')ntpatm,mxzdn -+ -+ endif -+ -+c volume of z strip (arbitrary) -+ -+ delzdn=zlen/dble(mxzdn) -+ dvolz=(volm/zlen)*delzdn -+ -+c normalisation factor -+ -+ nzden=max(nzden,1) -+ factor=1.d0/(dble(nzden)*dvolz) -+ -+ do k=1,ntpatm -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,'rho(r) :',a8,/,/,8x,'r',6x,'rho',9x,'n(r)',/)") -+ x unqatm(k) -+ write(nzdndt,'(a8)')unqatm(k) -+ -+ endif -+ -+c global sum of data on all nodes -+ -+ if(mxnode.gt.1)call gdsum(zdens(1,k),mxzdn,buffer) -+ -+c running integration of z-density -+ -+ sum=0.d0 -+ -+c loop over distances -+ -+ do j=1,mxzdn -+ -+ rrr=(dble(j)-0.5d0)*delzdn-zlen*0.5d0 -+ rho=zdens(j,k)*factor -+ sum=sum+rho*dvolz -+ -+c print out information -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(f10.4,1p,2e14.6)") rrr,rho,sum -+ write(nzdndt,"(1p,2e14.6)") rrr,rho -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(idnode.eq.0)close (nzdndt) -+ -+ endif -+ -+ return -+ end subroutine zden1 -+ -+ subroutine rdf0neu(ik,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for accumulating statistic for radial -+c distribution functions. -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1994 -+c author - t. forester march 1994 -+c amended t. forester april 1994 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ik,m,iatm,jatm,ll,k -+ real(8) rcut,a0,a1,a2,a3,a4,a5,rcsq,rrcsq,sqlim,rdelr -+ real(8) ai,aj,rsq,rrr,sss -+ -+ data a0,a1,a2,a3,a4,a5/.0837557783d0,2.9399054d0,-7.8475201d0, -+ x 14.1328992d0,-12.6228528d0,4.32084948d0/ -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ rrcsq=1.d0/rcsq -+ sqlim=0.01d0*rcsq -+ -+c grid interval for rdf tables -+ -+ rdelr=dble(mxrdf)/rcut -+ -+c start of primary loop for rdf accumulation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ iatm=ilist(m) -+ ai=ltype(iatm) -+ -+ jatm=jlist(m) -+ aj=ltype(jatm) -+ -+ if(ai.gt.aj)then -+ ll=int(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ k=lstvdw(ll) -+ else -+ ll=int(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ k=lstvdw(ll) -+ endif -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+c determine interpolation panel for rdf table -+ -+ if(rsq.lt.sqlim)then -+ -+ rrr=sqrt(rsq) -+ -+ else -+ -+c interpolate square-root by polynomial plus newton-raphson -+ -+ sss=rsq*rrcsq -+ rrr=1.d0/ -+ x (a0 +sss*(a1+sss*(a2+sss*(a3+sss*(a4+sss*a5))))) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr) -+ rrr=0.5d0*rrr*(3.d0-sss*rrr*rrr)*sss*rcut -+ -+ endif -+ -+ ll=int(rrr*rdelr+0.999999d0) -+ -+c accumulate statistics -+ -+ rdf(ll,k)=rdf(ll,k)+1.d0 -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine rdf0neu -+ -+ end module property_module -diff -urN dl_class_1.9.orig/srcmod/rigid_body_module.f dl_class_1.9/srcmod/rigid_body_module.f ---- dl_class_1.9.orig/srcmod/rigid_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/rigid_body_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,243 @@ -+ module rigid_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining rigid body arrays -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: omx(:),omy(:),omz(:) -+ real(8), allocatable :: gcmx(:),gcmy(:),gcmz(:) -+ real(8), allocatable :: gvxx(:),gvyy(:),gvzz(:),gmass(:) -+ real(8), allocatable :: q0(:),q1(:),q2(:),q3(:) -+ real(8), allocatable :: gxx(:,:),gyy(:,:),gzz(:,:) -+ real(8), allocatable :: rotinx(:,:),rotiny(:,:),rotinz(:,:) -+ integer, allocatable :: lstrgd(:),numgsit(:),lstgtp(:) -+ integer, allocatable :: listyp(:),lstgst(:,:),lstfre(:) -+ integer, allocatable :: lstme(:),lstbod(:),lstcsit(:) -+ -+ save omx,omy,omz,gcmx,gcmy,gcmz,gvxx,gvyy,gvzz,gmass -+ save q0,q1,q2,q3,gxx,gyy,gzz,rotinx,rotiny,rotinz -+ save lstrgd,numgsit,lstgtp,listyp,lstgst,lstfre,lstme -+ save lstbod,lstcsit -+ -+ contains -+ -+ subroutine alloc_rgbdy_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (omx(mxgrp),omy(mxgrp),omz(mxgrp),stat=fail(1)) -+ allocate (gcmx(mxgrp),gcmy(mxgrp),gcmz(mxgrp),stat=fail(2)) -+ allocate (gvxx(mxgrp),gvyy(mxgrp),gvzz(mxgrp),stat=fail(3)) -+ allocate (q0(mxgrp),q1(mxgrp),q2(mxgrp),q3(mxgrp),stat=fail(4)) -+ allocate (gxx(mxungp,mxngp),gyy(mxungp,mxngp),stat=fail(5)) -+ allocate (gzz(mxungp,mxngp),gmass(mxungp),stat=fail(6)) -+ allocate (rotinx(mxungp,2),rotiny(mxungp,2),stat=fail(7)) -+ allocate (rotinz(mxungp,2),lstgtp(mxgrp),stat=fail(8)) -+ allocate (lstrgd(mxgatm),numgsit(mxungp),stat=fail(9)) -+ allocate (listyp(mxungp),lstgst(mxungp,mxngp),stat=fail(10)) -+ allocate (lstfre(mxatms),lstme(mxatms),stat=fail(11)) -+ allocate (lstbod(mxatms),lstcsit(2*mxcons),stat=fail(12)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1013) -+ enddo -+ -+ end subroutine alloc_rgbdy_arrays -+ -+ subroutine define_rigid_body -+ x (safe,lghost,idnode,itmols,ngrp,natmsr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c adapted - p-a cazade oct 2007, solvation, excitation etc. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lghost,site_test -+ integer idnode,itmols,ngrp,ntmp,idum,igrp -+ integer j,site,natmsr -+ -+ ngrp_ghost=0 -+ ntmp=intstr(record,lenrec,idum) -+ numgrp(itmols)=numgrp(itmols)+ntmp -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of rigid units ', -+ x 6x,i10)") ntmp -+ write(nrite,"(/,' rigid body details:',/,/,21x, -+ x 6x,'unit',3x,'indices',/) ") -+ endif -+ -+ do igrp=1,numgrp(itmols) -+ -+ ngrp=ngrp+1 -+ site_test=.true. -+ -+ if(ngrp.gt.mxungp) call error(idnode,301) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ numgsit(ngrp)=intstr(record,lenrec,idum) -+ if(numgsit(ngrp).gt.mxngp) -+ x call error (idnode,302) -+ -+ listyp(ngrp)=ngrp -+ -+ do j=1,numgsit(ngrp) -+ -+ site=intstr(record,lenrec,idum) -+ -+ if(site.eq.0)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ site=intstr(record,lenrec,idum) -+ -+ endif -+ -+ lstgst(ngrp,j)=site -+ -+ if(lghost)then -+ -+ if(site_test)then -+ -+ if(site+natmsr.ge.ind_fre(3))then -+ -+ site_test=.false. -+ ngrp_ghost=ngrp_ghost+1 -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0) -+ x write(nrite,"(21x,10i10,100(/,21x,10i10))") -+ x listyp(ngrp),(lstgst(ngrp,j),j=1, -+ x numgsit(ngrp)) -+ -+ enddo -+ -+ numgrp(itmols)=numgrp(itmols)-ngrp_ghost -+ ngrp=ngrp-ngrp_ghost -+ -+ return -+ end subroutine define_rigid_body -+ -+ subroutine bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dlpoly routine to calculate rigid body contributions to the -+c stress tensor -+c -+c copyright daresbury laboratory -+c author w.smith aug 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,j,ig,id,jr,igrp1,igrp2,idnode,mxnode,ngrp -+ real(8) vircom,strbod,dtx,dty,dtz -+ -+ dimension dtx(mxatms),dty(mxatms),dtz(mxatms),strbod(9) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c zero stress tensor accumulators -+ -+ vircom=0.d0 -+ do i=1,9 -+ strbod(i)=0.d0 -+ enddo -+ -+c convert atomic virial to molecular -+c note convention: virial(atom-atom)=-sum(Ri.Fi) -+c : virial(com-com)=-sum(Rcom.Fcom) so -+c virial(com-com)=virial(atom-atom)+sum((Ri-Rcom).Fi) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ vircom=vircom+ -+ x (dtx(jr)*fxx(i)+dty(jr)*fyy(i)+dtz(jr)*fzz(i)) -+ -+c stress tensor : rigid body contributions -+ -+ strbod(1)=strbod(1)-dtx(jr)*fxx(i) -+ strbod(2)=strbod(2)-dtx(jr)*fyy(i) -+ strbod(3)=strbod(3)-dtx(jr)*fzz(i) -+ strbod(4)=strbod(4)-dty(jr)*fxx(i) -+ strbod(5)=strbod(5)-dty(jr)*fyy(i) -+ strbod(6)=strbod(6)-dty(jr)*fzz(i) -+ strbod(7)=strbod(7)-dtz(jr)*fxx(i) -+ strbod(8)=strbod(8)-dtz(jr)*fyy(i) -+ strbod(9)=strbod(9)-dtz(jr)*fzz(i) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call gdsum(strbod,9,buffer) -+ buffer(1)=vircom -+ call gdsum(buffer(1),1,buffer(2)) -+ vircom=buffer(1) -+ -+ endif -+ -+c symmetrise stress tensor -+ -+ strbod(2)=0.5d0*(strbod(2)+strbod(4)) -+ strbod(4)=strbod(2) -+ strbod(3)=0.5d0*(strbod(3)+strbod(7)) -+ strbod(7)=strbod(3) -+ strbod(6)=0.5d0*(strbod(6)+strbod(8)) -+ strbod(8)=strbod(6) -+ -+ return -+ end subroutine bodystress -+ -+ end module rigid_body_module -diff -urN dl_class_1.9.orig/srcmod/serial.f dl_class_1.9/srcmod/serial.f ---- dl_class_1.9.orig/srcmod/serial.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/serial.f 2015-11-09 14:15:45.064258843 +0100 -@@ -0,0 +1,543 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c dummy initcomms routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ return -+ end -+ -+ integer*8 function get_comms() -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY with PLUMED -+c -+c******************************************************************** -+ -+ implicit none -+ -+ get_comms=0 -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode -+ -+ idnode=0 -+ mxnode=1 -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c dummy mynode routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ mynode=0 -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c dummy nodedim routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ nodedim=0 -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c dummy numnodes routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ numnodes=1 -+ -+ return -+ end -+ -+ subroutine csend(msgtag,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c dummy csend routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer msgtag,length,pe,idum -+ -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine crecv(msgtag,buf,length) -+ -+c********************************************************************* -+c -+c dummy crecv routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer msgtag,length -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy isum for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ real(8) aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ stop -+ end -+ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms -+ integer lstme(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff -+ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode, mxnode, natms -+ integer lishap(*),lashap(*) -+ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,natms -+ integer listme(*),listot(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lshmov -+ integer idnode,mxnode,natms,nscons,i,j,k -+ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) -+ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) -+ integer lstfrz(mxatms) -+ -+ do i=1,natms -+ listme(i)=0 -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ listot(i)=1 -+ else -+ listot(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use error_module -+ use setup_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,i,j,k -+ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ integer lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ listpm(i)=0 -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+ -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ lstpmt(i)=1 -+ else -+ lstpmt(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lcnb -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 -+ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp -+ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) -+ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) -+ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ lcnb = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ lcnb = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ lcnb = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ lcnb = (.not.lcnb) -+ -+ return -+ end -+ -diff -urN dl_class_1.9.orig/srcmod/serial.f.preplumed dl_class_1.9/srcmod/serial.f.preplumed ---- dl_class_1.9.orig/srcmod/serial.f.preplumed 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/serial.f.preplumed 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,529 @@ -+ subroutine initcomms() -+ -+c********************************************************************* -+c -+c dummy initcomms routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ return -+ end -+ -+ subroutine machine(idnode,mxnode) -+ -+c********************************************************************* -+c -+c dummy machine routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode -+ -+ idnode=0 -+ mxnode=1 -+ -+ return -+ end -+ -+ integer function mynode() -+ -+c********************************************************************* -+c -+c dummy mynode routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ mynode=0 -+ -+ return -+ end -+ -+ integer function nodedim() -+ -+c********************************************************************* -+c -+c dummy nodedim routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ nodedim=0 -+ -+ return -+ end -+ -+ integer function numnodes() -+ -+c********************************************************************* -+c -+c dummy numnodes routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ numnodes=1 -+ -+ return -+ end -+ -+ subroutine csend(msgtag,buf,length,pe,idum) -+ -+c********************************************************************* -+c -+c dummy csend routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c******************************************************************** -+ -+ implicit none -+ -+ integer msgtag,length,pe,idum -+ -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine crecv(msgtag,buf,length) -+ -+c********************************************************************* -+c -+c dummy crecv routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer msgtag,length -+ real(8) buf(*) -+ -+ return -+ end -+ -+ subroutine gisum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy isum for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gdsum(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ real(8) aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gimax(aaa,nnn,bbb) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nnn -+ integer aaa(*),bbb(*) -+ -+ return -+ end -+ -+ subroutine gstate(check) -+ -+c*********************************************************************** -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check -+ -+ return -+ end -+ -+ subroutine gsync() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ return -+ end -+ -+ subroutine exitcomms() -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ stop -+ end -+ -+ subroutine merge(idnode,mxnode,natms,nbuff,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ implicit none -+ -+ integer idnode,mxnode,natms,nbuff -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,natms -+ integer lstme(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine merge4(idnode,mxnode,ngrp,nbuff,q0,q1,q2,q3,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,nbuff -+ real(8) q0(*),q1(*),q2(*),q3(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine shlmerge(idnode,mxnode,ntshl) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl -+ -+ return -+ end -+ -+ subroutine shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode, mxnode, natms -+ integer lishap(*),lashap(*) -+ real(8) xxt(*),yyt(*),zzt(*),txx(*),tyy(*),tzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,natms -+ integer listme(*),listot(*) -+ real(8) xxx(*),yyy(*),zzz(*),buffer(*) -+ -+ return -+ end -+ -+ subroutine passcon -+ x (lshmov,idnode,mxnode,natms,nscons,lashap,lishap,listme, -+ x listin,listot,listcon,lstfrz) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lshmov -+ integer idnode,mxnode,natms,nscons,i,j,k -+ integer lashap(mxproc),lishap(mxlshp),listme(mxatms) -+ integer listin(mxatms),listot(mxatms),listcon(mxcons,3) -+ integer lstfrz(mxatms) -+ -+ do i=1,natms -+ listme(i)=0 -+ enddo -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ listme(i)=listme(i)+1 -+ listme(j)=listme(j)+1 -+ -+ enddo -+ -+c keep record of all atoms subject to constraints -+ -+ do i=1,natms -+ -+ if(listme(i).gt.0)then -+ listot(i)=1 -+ else -+ listot(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passpmf -+ x (idnode,mxnode,natms,nspmf,listpm,listin,lstpmt,lstpmf,npmf) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use error_module -+ use setup_module -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,nspmf,i,j,k -+ integer listpm(mxpmf),listin(mxatms),lstpmt(mxpmf) -+ integer lstpmf(mxspmf,mspmf),npmf(2) -+ -+ if(mxpmf.lt.natms) call error(idnode,490) -+ -+ do i=1,natms -+ listpm(i)=0 -+ enddo -+ -+ do k=1,nspmf -+ -+ do j = 1,npmf(1)+npmf(2) -+ -+ i=lstpmf(j,k) -+ listpm(i)= 1 -+ -+ enddo -+ -+ enddo -+ -+c keep record of all atoms subject to pmf constraints -+ -+ do i=1,natms -+ -+ if(listpm(i).gt.0)then -+ lstpmt(i)=1 -+ else -+ lstpmt(i)=0 -+ endif -+ -+ enddo -+ -+ return -+ end -+ -+ subroutine passquat -+ x (lcnb,idnode,mxnode,natms,ngrp,nscons,ntpmls,listin, -+ x listcon,lstrgd,lstout,lstcsit,lstgtp,nummols,numgrp,numgsit) -+ -+c********************************************************************* -+c -+c dummy routine for serial DL_POLY -+c copyright daresbury laboratory -+c author - w.smith -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ logical lcnb -+ integer idnode,mxnode,natms,ngrp,nscons,ntpmls,jj,id,igrp1,igrp2 -+ integer i,j,k,jr,igrp,itmols,imols,ik,lgrp -+ integer listin(mxatms),listcon(mxcons,3),lstrgd(mxgatm) -+ integer lstout(mxatms),lstcsit(2*mxcons),numgsit(mxungp) -+ integer lstgtp(mxgrp),nummols(mxtmls),numgrp(mxtmls) -+ -+c block indices for groups -+ -+ igrp1 = (idnode*ngrp)/mxnode + 1 -+ igrp2 = ((idnode+1)*ngrp)/mxnode -+ -+c locate site indices of atoms in constraints -+ -+ do i = 1,natms -+ listin(i) = 0 -+ enddo -+ -+c loop over molecule types -+ -+ jr = 0 -+ igrp = 0 -+ do itmols=1,ntpmls -+ -+c loop over molecules in system -+ -+ do imols=1,nummols(itmols) -+ -+c construct rigid body site list: each processor has a different copy -+ -+ do lgrp=1,numgrp(itmols) -+ -+ igrp=igrp+1 -+ -+ if((igrp.ge.igrp1).and.(igrp.le.igrp2)) then -+ -+ id = lstgtp(igrp) -+ do jj = 1,numgsit(id) -+ -+ jr = jr +1 -+ i = lstrgd(jr) -+ listin(i) = jj -+ -+ enddo -+ endif -+ enddo -+ enddo -+ enddo -+ -+ lcnb = .true. -+ ik = 0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(listin(i).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(i) -+ lcnb = .false. -+ endif -+ -+ if(listin(j).ne.0) then -+ ik = ik + 1 -+ lstcsit(ik) = listin(j) -+ lcnb = .false. -+ endif -+ -+ enddo -+ -+c lcnb flags bodies connected by constraints -+ -+ lcnb = (.not.lcnb) -+ -+ return -+ end -+ -diff -urN dl_class_1.9.orig/srcmod/setup_module.f dl_class_1.9/srcmod/setup_module.f ---- dl_class_1.9.orig/srcmod/setup_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/setup_module.f 2011-07-11 17:09:10.000000000 +0200 -@@ -0,0 +1,1664 @@ -+ module setup_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining default array sizes -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c note the following internal units apply everywhere -+c -+c unit of time (to) = 1 x 10**(-12) seconds -+c unit of length (lo) = 1 x 10**(-10) metres -+c unit of mass (mo) = 1.6605402 x 10**(-27) kilograms -+c unit of charge (qo) = 1.60217733 x 10**(-19) coulombs -+c unit of energy (eo) = 1.6605402 x 10**(-23) joules -+c unit of pressure (po) = 1.6605402 x 10**( 7) pascals -+c -+c********************************************************************* -+ -+ use parse_module -+ -+ implicit none -+ -+c FIXED PARAMETERS -+ -+c standard pi values -+ -+ real(8), parameter :: pi=3.141592653589793d0 -+ real(8), parameter :: sqrpi=1.7724538509055159d0 -+ -+c conversion factor for coulombic terms in internal units -+c i.e. (unit(charge)**2/(4 pi eps0 unit(length))/unit(energy) -+ -+ real(8), parameter :: r4pie0=138935.4835d0 -+ -+c boltzmann constant in internal units -+ -+ real(8), parameter :: boltz=8.31451115d-1 -+ -+c planck's constant in internal units -+ -+ real(8), parameter :: hbar=6.350780719d0 -+ -+c conversion factor for pressure from internal units to katm -+ -+ real(8), parameter :: prsunt=0.163882576d0 -+ -+c main input channel -+ -+ integer, parameter :: nread=5 -+ -+c main output channel -+ -+ integer, parameter :: nrite=6 -+ -+c force field input channel -+ -+ integer, parameter :: nfield=9 -+ -+c configuration file input channel -+ -+ integer, parameter :: nconf=10 -+ -+c statistical data file output channel -+ -+ integer, parameter :: nstats=20 -+ -+c trajectory history file channel -+ -+ integer, parameter :: nhist=21 -+ -+c acummulators restart dump file -+ -+ integer, parameter :: nrest=22 -+ -+c tabulated potential file channel -+ -+ integer, parameter :: ntable=23 -+ -+c rdf file channel number -+ -+ integer, parameter :: nrdfdt=24 -+ -+c z density file channel number -+ -+ integer, parameter :: nzdndt=25 -+ -+c hyperdynamics reference basin file -+ -+ integer, parameter :: nbsn=30 -+ -+c neb reaction path profile file -+ -+ integer, parameter :: npro=31 -+ -+c hyperdynamics events journal file -+ -+ integer, parameter :: nevnt=33 -+ -+c hyperdynamics tracking file -+ -+ integer, parameter :: ntrk=32 -+ -+c hyperdynamics restart file -+ -+ integer, parameter :: nhrs=35 -+ -+c free energy data file -+ -+ integer, parameter :: nfrnwr=41 -+ -+c solvation data file -+ -+ integer, parameter :: nsolwr=43 -+ -+c data dumping interval in event of system crash -+ -+ integer, parameter :: ndump=1000 -+ -+c maximum number of neb calculations -+ -+ integer, parameter :: maxneb=10 -+ -+c array allocation parameters (set by subroutine parset) -+ -+ integer kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp -+ integer mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell -+ integer mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid -+ integer mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang -+ integer mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw -+ integer mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd -+ integer mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp -+ integer mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl -+ integer kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke -+ integer mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp -+ integer mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc -+ integer mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol -+ -+ save kmaxa,kmaxb,kmaxc,minnode,msatms,msbad,msgrp -+ save mspmf,msteth,mxangl,mxatms,mxbond,mxbuff,mxcell -+ save mxcons,mxdihd,mxewld,mxexcl,mxfbp,mxfld,mxgatm,mxgrid -+ save mxgrp,mxinv,mxlist,mxlshp,mxneut,mxngp,mxnstk,mxpang -+ save mxpbnd,mxpdih,mxpfbp,mxpinv,mxpmf,mxproc,mxptbp,mxpvdw -+ save mxrdf,mxzdn,mxshl,mxsite,mxspmf,mxstak,mxtang,mxtbnd -+ save mxtbp,mxtcon,mxtdih,mxteth,mxtinv,mxtmls,mxtshl,mxungp -+ save mxvdw,mxxdf,mx2tbp,mx3fbp,mxebuf,mxquat,mxshak,mxspl -+ save kmaxd,kmaxe,kmaxf,mxspme,mxftab,mxhko,mxegrd,mxhke -+ save mxmet,mxsmet,mxpmet,mxter,mxpter,mxatyp,mxxtyp -+ save mxtmls_fre,mxewld_fre,mxebuf_fre,mxatms_fre,mxatyp_exc -+ save mxtmls_exc,mxtmls_sol,mxebuf_sol,mxatms_sol -+ -+ contains -+ -+ subroutine parset(redirect,idnode,mxnode,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to determine required array sizes for -+c allocation of memory manager -+c -+c copyright daresbury laboratory 1997 -+c author - w.smith june 1997 -+c -+c*********************************************************************** -+ -+ logical loglnk,lewald,lspme,lhke,nolink,lcshft -+ logical lsolva,lfree,lfrmas,lghost,redirect -+ real(8) cell,celprp,rctbp,rcfbp,volm,xhi,yhi,zhi,rcut,rvdw -+ real(8) densvar,delr,cut,dens,ratio,drdf,dzdn,rcter,buffer -+ real(8) zlen -+ integer imcon,nhko,ilx,ily,ilz,ncells -+ integer idnode,mxnode,mxn1 -+ -+ dimension cell(9),celprp(10),buffer(10) -+ -+ lhke=.false. -+ lspme=.false. -+ lewald=.false. -+ lcshft=.false. -+ nolink=.false. -+ redirect=.false. -+ mxtmls_sol=1 -+ mxebuf_sol=1 -+ mxatms_sol=1 -+ mxtmls_fre=1 -+ mxewld_fre=1 -+ mxebuf_fre=1 -+ mxatms_fre=1 -+ mxatyp_exc=1 -+ mxtmls_exc=1 -+ -+c specify maximum and minimum nodes -+ -+ mxproc=mxnode -+ minnode=mxnode -+ -+c scan the FIELD file data -+ -+ call fldscan(idnode,mxn1,rctbp,rcfbp,rcter) -+ -+c scan CONFIG file data -+ -+ call cfgscan -+ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) -+ -+c scan CONTROL file data -+ -+ call conscan -+ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, -+ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, -+ x zlen,cell) -+ -+c set dimension of working coordinate arrays -+ -+ msatms=max(1,(mxatms+minnode-1)/minnode) -+ if(lsolva)mxatms_sol=mxatms -+ if(lfree.or.lghost)mxatms_fre=mxatms -+ -+c maximum number of molecule types -+ -+ mxtmls=max(mxtmls,1) -+ if(lsolva)mxtmls_sol=mxtmls -+ if(lfree)mxtmls_fre=mxtmls -+ if(lghost)then -+ -+ mxtmls_exc=mxtmls -+ mxtmls_fre=mxtmls -+ -+ endif -+ -+c maximum number of specified bondlength constraints -+ -+ mxtcon=max(mxtcon,1) -+ -+c maximum number of chemical bond potentials -+ -+ mxtbnd=max(mxtbnd,1) -+ -+c maximum number of different bond angle potentials -+ -+ mxtang=max(mxtang,1) -+ -+c maximum number of different torsional potentials -+ -+ mxtdih=max(mxtdih,1) -+ -+c maximum number of different inversion potentials -+ -+ mxtinv=max(mxtinv,1) -+ -+c maximum number of unique rigid body units -+ -+ mxungp=max(mxungp,1) -+ -+c maximum number of tethered atom potentials -+ -+ mxteth=max(mxteth,1) -+ -+c maximum number of core-shell units -+ -+ mxshl=max(mxshl,1) -+ -+c set maximum number of unique atom types -+ -+ mxatyp=max(1,mxatyp) -+ mxxtyp=(mxatyp*(mxatyp+1))/2 -+ if(lghost)mxatyp_exc=mxatyp -+ -+c maximum number of vdw potentials -+ -+ mxvdw=max(mxvdw,1)+1 -+ -+c maximum number of metal potentials -+ -+ mxmet=max(mxmet,1)+1 -+ mxsmet=mxatyp -+ -+c maximum number of tersoff potentials -+ -+ if(mxter.gt.0)then -+ -+ mxter=mxatyp -+ -+ endif -+ -+c maximum number of three body potentials -+ -+ if(mxtbp.eq.0)then -+ -+ mx2tbp=0 -+ -+ else -+ -+ mx2tbp=(mxatyp*(mxatyp+1))/2 -+ mxtbp=mx2tbp*mxatyp -+ -+ endif -+ -+c maximum number of four body potentials -+ -+ if(mxfbp.eq.0)then -+ -+ mx3fbp=0 -+ -+ else -+ -+ mx3fbp=(mxatyp*(mxatyp+1)*(mxatyp+2))/6 -+ mxfbp=mxatyp*mx3fbp -+ -+ endif -+ -+c maximum number of angular potential parameters -+ -+ mxpang=6 -+ -+c maximum number of three body potential parameters -+ -+ mxptbp=mxpang+1 -+ -+c maximum number of four body potential parameters -+ -+ mxpfbp=3 -+ -+c maximum number of parameters for dihedrals -+ -+ mxpdih=5 -+ -+c maximum number of parameters for inversion potentials -+ -+ mxpinv=2 -+ -+c maximum number of parameters for bond potentials -+ -+ mxpbnd=4 -+ -+c maximum number of parameters for vdw potentials -+ -+ mxpvdw=6 -+ -+c maximum number of parameters for metal potentials -+ -+ mxpmet=7 -+ -+c maximum number of parameters for tersoff potential -+ -+ mxpter=11 -+ -+c maximum number of external field parameters -+ -+ mxfld=10 -+ -+c maximum number of excluded atoms per atom -+ -+ mxexcl=max(mxexcl,1) -+ -+c maximum number of different sites in system -+ -+ mxsite=max(mxsite,1) -+ -+c maximum number of chemical bonds per node -+ -+ mxbond=max(1,(mxbond+minnode-1)/minnode) -+ -+c maximum number of bond angles per node -+ -+ mxangl=max(1,(mxangl+minnode-1)/minnode) -+ -+c maximum number of torsion angles per node -+ -+ mxdihd=max(1,(mxdihd+minnode-1)/minnode) -+ -+c maximum number of inversion potentials per node -+ -+ mxinv=max(1,(mxinv+minnode-1)/minnode) -+ -+c maximum number of constraints per node -+ -+ mxcons=max(1,2*((mxcons+minnode-1)/minnode)) -+ -+c maximum number of tethered atoms per node -+ -+ msteth=max(1,(msteth+minnode-1)/minnode) -+ -+c maximum size for working arrays for bonds, angles, dihedrals -+c inversion potentials, tethers and core-shell units -+ -+ msbad=max(mxbond,mxangl,mxdihd,mxinv,msteth,mxshl) -+ -+c maximum number of grid points in potentials arrays -+ -+ if(mxgrid.eq.0)then -+ -+ mxgrid=max(1000,int(rvdw/0.01d0+0.5d0)+4) -+ -+ endif -+ -+ mxegrd=0 -+ if(lewald.or.lspme.or.lhke.or.lcshft)mxegrd=mxgrid -+ -+c maximum dimension of rdf arrays -+ -+ mxrdf=max(128,int(rcut/drdf)) -+ -+c maximum dimension of zdensity arrays -+ -+ mxzdn=max(128,int(zlen/dzdn)) -+ -+c maximum number of rigid groups in system -+ -+ mxgrp=max(mxgrp,1) -+ -+c maximum number of rigid groups per node -+ -+ msgrp=max(1,(mxgrp+minnode-1)/minnode) -+ -+c maximum number of sites per rigid unit -+ -+ mxngp=max(mxngp,3) -+ -+c maximum number of sites in rigid units -+ -+ mxgatm=max(1,mxgatm) -+ -+c maximum number of timesteps in stack arrays -+ -+ mxstak=max(100,mxstak) -+ -+c maximum number of variables in stack arrays -+ -+ mxnstk=45+mxatyp -+ -+c dimension of shake shared atoms array -+ -+ mxlshp=max(mxcons*2,1) -+ -+c set dimension of working arrays in ewald sum -+ -+ mxewld=1 -+ mxebuf=1 -+ if(lewald)then -+ -+ mxftab=1 -+ mxewld=msatms -+ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)*(2*kmaxc+1)-1 -+ if(lfree.or.lghost)mxebuf=3*mxebuf -+ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 -+ -+ endif -+ -+c set dimension of working arrays in spme -+ -+ mxspme=1 -+ if(lspme)then -+ -+ mxspme=mxatms -+ mxftab=2*(kmaxd+kmaxe+kmaxf) -+ -+ endif -+ -+c set dimension of working arrays for HK ewald -+ -+ mxhko=1 -+ mxhke=1 -+ if(lhke)then -+ -+ mxhko=2 -+ mxewld=msatms -+ mxhke=msatms -+ if(nhko.gt.0)mxhko=max(2,nhko) -+ mxebuf=(2*kmaxa+1)*(2*kmaxb+1)-1 -+ if(mxnode.le.16.and.mxebuf.le.5000)mxebuf=1 -+ -+ endif -+ -+ if(lsolva)mxebuf_sol=mxebuf -+ if(lfree.or.lghost)then -+ -+ mxebuf_fre=mxebuf -+ mxewld_fre=mxewld -+ -+ endif -+ -+c maximum dimension of principal transfer buffer -+ -+ mxbuff=max(6*mxatms,8*(mxcons+1),8*(mxgrp+1),mxnstk*mxstak, -+ x mxebuf,mxgrid,2*kmaxa*kmaxb*kmaxc,2*kmaxd*kmaxe*kmaxf, -+ x 10000) -+ -+c maximum size of verlet neighbour/link cell list for each atom -+c decide if link-cells in use or not -+ -+ cut=rcut+delr -+ dens=dble(mxatms)/volm -+ ratio=1.5d0*dens*(4.d0*pi/3.d0)*cut**3 -+ mxlist=min(nint(ratio),(mxatms+1)/2) -+ if(imcon.eq.0) then -+ -+ cell(1)=max(xhi+2.d0*cut,3.d0*cut) -+ cell(5)=max(yhi+2.d0*cut,3.d0*cut) -+ cell(9)=max(zhi+2.d0*cut,3.d0*cut) -+ -+ endif -+ if(imcon.eq.6)then -+ -+ cell(9)=max(zhi+2.d0*cut,3.d0*cut,cell(9)) -+ -+ endif -+ -+ if(nolink)then -+ -+ loglnk=.false. -+ -+ else -+ -+ loglnk=.true. -+ call dcell(cell,celprp) -+ ilx=int(celprp(7)/cut) -+ ily=int(celprp(8)/cut) -+ ilz=int(celprp(9)/cut) -+ if(ilx.lt.3.or.ily.lt.3.or.ilz.lt.3)loglnk=.false. -+ ncells=ilx*ily*ilz -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7)loglnk=.false. -+ if(mxneut.gt.0.and.ncells.le.36) loglnk=.false. -+ -+ endif -+ -+ mxcell=1 -+ if(loglnk)then -+ -+ mxlist=14*nint(1.5d0*dens*celprp(10)/dble(ncells)) -+ mxcell=(ilx+2)*(ily+2)*(ilz+2) -+ -+ endif -+ -+ if(mxneut.gt.0)mxlist=(mxneut+1)/2 -+ mxlist=2*mxlist -+ if(mxtbp.gt.0.or.mxfbp.gt.0.or.mxter.gt.0)then -+ -+ if(mxtbp.gt.0)cut=min(cut,rctbp) -+ if(mxfbp.gt.0)cut=min(cut,rcfbp) -+ if(mxter.gt.0)cut=min(cut,rcter) -+ ilx=max(3,int(celprp(7)/cut)) -+ ily=max(3,int(celprp(8)/cut)) -+ ilz=max(3,int(celprp(9)/cut)) -+ mxcell=max(mxcell,(ilx+2)*(ily+2)*(ilz+2)) -+ -+ endif -+ mxcell=int(dble(mxcell)*densvar/100.d0) -+ mxlist=int(dble(mxlist)*densvar/100.d0) -+ mxlist=max(500,mxlist) -+ -+c maximum size for coordinate difference arrays -+ -+ mxxdf=max(mxlist,mxatms,mxcons,mxn1*mxn1*(mxneut+1)/2) -+ -+c maximum number of core-shell unit types -+ -+ mxtshl=max(mxtshl,1) -+ -+c potential of mean force array parameter -+ -+ mxpmf=max(mxpmf,1) -+ -+c number of pmf constraints on a processor -+ -+ mspmf=max(1,(mxpmf+minnode-1)/minnode) -+ -+c maximum number of sites to define pmf units -+ -+ mxspmf=max(mxspmf,1) -+ -+c maximum iterations in quaternion integration -+ -+ mxquat=100 -+ -+c maximum number of shake cycles -+ -+ mxshak=100 -+ -+c maximum b-spline interpolation order -+ -+ mxspl=12 -+ -+c increment mxneut -+ -+ if(mxneut.gt.0)mxneut=mxneut+1 -+ -+ return -+ -+ end subroutine parset -+ -+ subroutine fldscan(idnode,mxn1,rctbp,rcfbp,rcter) -+ -+c*********************************************************************** -+c -+c dl_poly routine for scanning the field file to determine the -+c required parameters -+c -+c copyright - daresbury laboratory 1994 -+c author - w. smith november 1994 -+c -+c*********************************************************************** -+ -+ integer, parameter :: mmk=1000 -+ -+ character*8 name,keyword,chr(mmk) -+ logical check,ltable,lmetab,safe,lneut,loop1,loop2 -+ real(8) rctbp,rcter,rcfbp,rct,ppp -+ integer mxn1,nxn1,idnode,nold -+ integer itmols,ksite,numsit,isite,nrept,ifrz,i,j -+ integer ishls,ibonds,numcon,numang,icon,iang,idih,numdih -+ integer numinv,iinv,numgrp,kgrp,numgsit,numteth,iteth -+ integer ipmf,jpmf,npmf,itpvdw,itptbp,itpfbp -+ integer itpter,k,nfld,nummols,idum,numshl,nneu -+ integer numbonds,itpmet,iii,ngrid -+ -+ mxtmls=0 -+ mxatms=0 -+ mxgrp=0 -+ mxtcon=0 -+ mxtbnd=0 -+ mxtang=0 -+ mxtdih=0 -+ mxtinv=0 -+ mxpmf=0 -+ mxspmf=0 -+ mxungp=0 -+ mxngp=0 -+ mxneut=0 -+ mxmet=0 -+ mxatyp=0 -+ mxn1=0 -+ nxn1=0 -+ nold=-1 -+ mxgatm=0 -+ mxteth=0 -+ msteth=0 -+ mxvdw=0 -+ mxtbp=0 -+ mxter=0 -+ mxexcl=0 -+ mxsite=0 -+ mxbond=0 -+ mxcons=0 -+ mxangl=0 -+ mxdihd=0 -+ mxinv=0 -+ mxshl=0 -+ mxtshl=0 -+ mxfbp=0 -+ mxgrid=0 -+ rctbp=0.d0 -+ rcter=0.d0 -+ rcfbp=0.d0 -+ safe=.true. -+ loop1=.true. -+ loop2=.true. -+ lneut=.false. -+ ltable=.false. -+ lmetab=.false. -+ -+c open force field data file -+ -+ if(idnode.eq.0)open (nfield,file='FIELD') -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+c read and process directives from field file -+ -+ do while(loop1) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ -+ if(findstring('neut',record,idum))then -+ -+ lneut=.true. -+ -+ elseif(findstring('molecu',record,idum))then -+ -+ mxtmls=intstr(record,lenrec,idum) -+ -+ do itmols=1,mxtmls -+ -+ loop2=.true. -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ do while(loop2) -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ -+ ksite=0 -+ -+ if(findstring('nummol',record,idum))then -+ -+ nummols=intstr(record,lenrec,idum) -+ -+ elseif(findstring('atoms',record,idum))then -+ -+ numsit=intstr(record,lenrec,idum) -+ mxatms=mxatms+numsit*nummols -+ mxsite=mxsite+numsit -+ ksite=0 -+ do isite=1,numsit -+ -+ if(ksite.lt.numsit)then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ call getword(name,record,8,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ nrept=intstr(record,lenrec,idum) -+ ifrz=intstr(record,lenrec,idum) -+ nneu=intstr(record,lenrec,idum) -+ if(nrept.eq.0)nrept=1 -+ if(lneut)then -+ if(nneu.ne.nold) nxn1=0 -+ nxn1=nxn1+nrept -+ mxn1=max(mxn1,nxn1) -+ nold=nneu -+ endif -+ -+ if(mxatyp.eq.0)then -+ -+ mxatyp=1 -+ chr(1)=name -+ -+ else -+ -+ check=.true. -+ do j=1,mxatyp -+ -+ if(name.eq.chr(j))check=.false. -+ -+ enddo -+ if(check)then -+ -+ mxatyp=mxatyp+1 -+ if(mxatyp.le.mmk)chr(mxatyp)=name -+ -+ endif -+ -+ endif -+ if(nrept.eq.0)nrept=1 -+ ksite=ksite+nrept -+ -+ endif -+ -+ enddo -+ -+ if(mmk.lt.mxatyp)call abortscan(34,idnode) -+ -+ if(lneut)mxneut=mxneut+nneu*nummols -+ -+ elseif(findstring('shell',record,idum))then -+ -+ numshl=intstr(record,40,idum) -+ mxtshl=mxtshl+numshl -+ mxshl=mxshl+nummols*numshl -+ -+ do ishls=1,numshl -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('bonds',record,idum))then -+ -+ numbonds=intstr(record,lenrec,idum) -+ mxtbnd=mxtbnd+numbonds -+ mxbond=mxbond+nummols*numbonds -+ -+ do ibonds=1,numbonds -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('constr',record,idum))then -+ -+ numcon=intstr(record,lenrec,idum) -+ mxtcon=mxtcon+numcon -+ mxcons=mxcons+nummols*numcon -+ -+ do icon=1,numcon -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('angles',record,idum))then -+ -+ numang=intstr(record,lenrec,idum) -+ mxtang=mxtang+numang -+ mxangl=mxangl+nummols*numang -+ -+ do iang=1,numang -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('dihedr',record,idum))then -+ -+ numdih=intstr(record,lenrec,idum) -+ mxtdih=mxtdih+numdih -+ mxdihd=mxdihd+nummols*numdih -+ -+ do idih=1,numdih -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('invers',record,idum))then -+ -+ numinv=intstr(record,lenrec,idum) -+ mxtinv=mxtinv+numinv -+ mxinv=mxinv+nummols*numinv -+ -+ do iinv=1,numinv -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('rigid',record,idum))then -+ -+ numgrp=intstr(record,lenrec,idum) -+ mxungp=mxungp+numgrp -+ mxgrp=mxgrp+numgrp*nummols -+ -+ do kgrp=1,numgrp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ numgsit=intstr(record,lenrec,idum) -+ mxgatm=mxgatm+numgsit*nummols -+ mxngp=max(mxngp,numgsit) -+ do j=1,numgsit -+ -+ iii=intstr(record,lenrec,idum) -+ if(iii.eq.0)then -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ iii=intstr(record,lenrec,idum) -+ endif -+ -+ enddo -+ -+ enddo -+ -+ elseif(findstring('teth',record,idum))then -+ -+ numteth=intstr(record,lenrec,idum) -+ mxteth=mxteth+numteth -+ msteth=msteth+numteth*nummols -+ -+ do iteth=1,numteth -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ elseif(findstring('pmf',record,idum))then -+ -+ do ipmf=1,2 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ npmf=intstr(record,lenrec,idum) -+ mxspmf=mxspmf+npmf -+ -+ do jpmf=1,npmf -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ enddo -+ -+ enddo -+ -+ mxpmf=mxpmf+nummols -+ -+ elseif(findstring('finish',record,idum))then -+ -+ loop2=.false. -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ elseif(findstring('vdw',record,idum))then -+ -+ if(findstring('tab',record,idum))ltable=.true. -+ mxvdw=intstr(record,lenrec,idum) -+ do itpvdw=1,mxvdw -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ if(findstring('tab',record,idum))ltable=.true. -+ -+ enddo -+ mxvdw=max(mxvdw,(mxatyp*(mxatyp+1))/2) -+ -+ if(ltable)then -+ -+ if(idnode.eq.0)open(ntable,file='TABLE') -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ mxgrid=max(mxgrid,intstr(record,lenrec,idum)) -+ -+ close (ntable) -+ -+ endif -+ -+ elseif(findstring('metal',record,idum))then -+ -+ if(findstring('eam',record,idum))lmetab=.true. -+ mxmet=intstr(record,lenrec,idum) -+ do itpmet=1,mxmet -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call lowcase(record,lenrec) -+ if(findstring('eam',record,idum))lmetab=.true. -+ -+ enddo -+ mxmet=max(mxmet,(mxatyp*(mxatyp+1))/2) -+ -+ if(lmetab)then -+ -+ if(idnode.eq.0)open(ntable,file='TABEAM') -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ do i=1,intstr(record,lenrec,idum) -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ ngrid=intstr(record,lenrec,idum) -+ mxgrid=max(mxgrid,ngrid+4) -+ do j=1,(ngrid+3)/4 -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abortscan(24,idnode) -+ -+ enddo -+ -+ enddo -+ -+ close (ntable) -+ -+ endif -+ -+ elseif(findstring('tbp',record,idum))then -+ -+ mxtbp=intstr(record,lenrec,idum) -+ -+ do itptbp=1,mxtbp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(keyword,record,4,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ rct=dblstr(record,lenrec,idum) -+ rctbp=max(rctbp,rct) -+ -+ enddo -+ -+ elseif(findstring('fbp',record,idum))then -+ -+ mxfbp=intstr(record,lenrec,idum) -+ do itpfbp=1,mxfbp -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(name,record,8,lenrec) -+ call getword(keyword,record,4,lenrec) -+ ppp=dblstr(record,lenrec,idum) -+ ppp=dblstr(record,lenrec,idum) -+ rct=dblstr(record,lenrec,idum) -+ rcfbp=max(rcfbp,rct) -+ -+ enddo -+ -+ elseif(findstring('tersof',record,idum))then -+ -+ mxter=intstr(record,lenrec,idum) -+ -+ do itpter=1,mxter -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ rct=dblstr(record,lenrec,idum) -+ rcter=max(rcter,rct) -+ -+ enddo -+ -+ elseif(findstring('extern',record,idum))then -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ nfld=intstr(record,lenrec,idum) -+ if(nfld.eq.0)nfld=5 -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ -+ do k=1,nfld -+ -+ ppp=dblstr(record,lenrec,idum) -+ if(idum.gt.lenrec.and.k.lt.nfld)then -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)call abortscan(52,idnode) -+ endif -+ -+ enddo -+ -+ elseif(findstring('close',record,idum))then -+ -+ loop1=.false. -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (nfield) -+ -+ if(mxpmf.gt.0)mxpmf=mxatms -+ if(mxtcon.gt.0)mxexcl=max(mxexcl,6) -+ if(mxtbnd.gt.0)mxexcl=max(mxexcl,6) -+ if(mxtang.gt.0)mxexcl=max(mxexcl,16) -+ if(mxtdih.gt.0)mxexcl=max(mxexcl,50) -+ if(mxtinv.gt.0)mxexcl=max(mxexcl,50) -+ if(mxneut.gt.0)mxexcl=max(mxexcl,10*mxn1*mxn1) -+ if(mxgrp.gt.0)mxexcl=max(mxexcl,mxngp) -+ -+ return -+ -+ end subroutine fldscan -+ -+ subroutine cfgscan -+ x (idnode,nconf,imcon,volm,xhi,yhi,zhi,cell,buffer) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scanning the initial configuration -+c file to determine the number of atoms present -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith june 1997 -+c -+c note: volm is volume containing all particles, not system volume -+c -+c*********************************************************************** -+ -+ character*80 header -+ character*8 name -+ logical lvolm -+ real(8) cell,celprp,buffer,extra,volm,xhi,yhi,zhi -+ real(8) xxx,yyy,zzz,uuu,vvv,www,coz -+ integer idnode,nconf,imcon,i,levcfg -+ dimension cell(9),celprp(10),buffer(10),extra(5) -+ -+ imcon=0 -+ xhi=0.d0 -+ yhi=0.d0 -+ zhi=0.d0 -+ volm=0.d0 -+ do i=1,9 -+ -+ cell(i)=0.d0 -+ -+ enddo -+ if(idnode.eq.0)then -+ -+ open (nconf,file='CONFIG') -+ -+c read the CONFIG file header -+ -+ read(nconf,'(a80)',end=100)header -+ read(nconf,'(2i10)',end=100)levcfg,imcon -+ lvolm=(imcon.eq.0.or.imcon.eq.6) -+ -+c specify molecular dynamics simulation cell -+ -+ if(imcon.gt.0)then -+ -+ read(nconf,'(3f20.0)',end=100)cell(1),cell(2),cell(3) -+ read(nconf,'(3f20.0)',end=100)cell(4),cell(5),cell(6) -+ read(nconf,'(3f20.0)',end=100)cell(7),cell(8),cell(9) -+ call dcell(cell,celprp) -+ -+ endif -+ -+ if(.not.lvolm)then -+ -+ volm=celprp(10) -+ -+ if(imcon.eq.4)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.5)then -+ -+ volm=0.5d0*celprp(10) -+ -+ elseif(imcon.eq.7)then -+ -+ volm=0.5d0*celprp(10) -+ -+ endif -+ -+ endif -+ -+ i=0 -+ do while(.true.) -+ -+ i=i+1 -+ if(levcfg.eq.0)then -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ -+ else if(levcfg.eq.1)then -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ -+ else -+ -+ read(nconf,'(a8)',end=100) name -+ read(nconf,'(3f20.0)')xxx,yyy,zzz -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ read(nconf,'(3f20.0)')uuu,vvv,www -+ -+ endif -+ -+ if(lvolm)then -+ -+ if(i.eq.1)then -+ -+ xhi=abs(xxx) -+ yhi=abs(yyy) -+ zhi=abs(zzz) -+ -+ else -+ -+ xhi=max(xhi,abs(xxx)) -+ yhi=max(yhi,abs(yyy)) -+ zhi=max(zhi,abs(zzz)) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ 100 continue -+ -+ if(imcon.eq.0)then -+ -+ volm=8.d0*xhi*yhi*zhi -+ -+ else if(imcon.eq.6)then -+ -+ coz=(cell(1)*cell(4)+cell(2)*cell(5)+cell(3)*cell(6))/ -+ x (celprp(1)*celprp(2)) -+ volm=2.d0*zhi*celprp(1)*celprp(2)*sqrt(1.d0-coz**2) -+ -+ endif -+ -+ close (nconf) -+ -+ endif -+ -+ extra(1)=dble(imcon) -+ extra(2)=xhi -+ extra(3)=yhi -+ extra(4)=zhi -+ extra(5)=volm -+ call gdsum(extra,5,buffer) -+ call gdsum(cell,9,buffer) -+ imcon=nint(extra(1)) -+ xhi=extra(2) -+ yhi=extra(3) -+ zhi=extra(4) -+ volm=extra(5) -+ -+ return -+ -+ end subroutine cfgscan -+ -+ subroutine conscan -+ x (redirect,lewald,lspme,lhke,nolink,lcshft,lsolva,lfree,lfrmas, -+ x lghost,idnode,imcon,nhko,rcut,rvdw,delr,densvar,drdf,dzdn, -+ x zlen,cell) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for scanning the contents of the control file -+c -+c copyright - daresbury laboratory 1997 -+c author - w. smith june 1997 -+c -+c*********************************************************************** -+ -+ logical safe,lewald,lspme,lhke,peek,nolink,lcshft,lmetad -+ logical lsolva,lfree,lfrmas,lghost,redirect -+ real(8) cell,celprp,rcut,rvdw,delr,eps,alpha,fac,tol,tol1 -+ real(8) densvar,drdf,dzdn,zlen -+ integer nhko,idnode,imcon,idum,jmp -+ integer nlatt,kmax1,kmax2,kmax3,kmaxpow2 -+ dimension celprp(10),cell(9) -+ -+ nhko=0 -+ mxstak=0 -+ kmaxa=0 -+ kmaxb=1 -+ kmaxc=1 -+ kmaxd=1 -+ kmaxe=1 -+ kmaxf=1 -+ rcut=0.d0 -+ rvdw=0.d0 -+ delr=0.d0 -+ drdf=0.05d0 -+ dzdn=0.05d0 -+ zlen=0.d0 -+ densvar=1.d2 -+ peek=.true. -+ lhke=.false. -+ lspme=.false. -+ lewald=.false. -+ lcshft=.false. -+ nolink=.false. -+ lghost=.false. -+ lfree=.false. -+ lfrmas=.false. -+ lsolva=.false. -+ lmetad=.false. -+ redirect=.false. -+ -+c open the simulation input file -+ -+ if(idnode.eq.0)open (nread,file='CONTROL') -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ -+ do while(peek) -+ -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ call lowcase(record,lenrec) -+ if(record(1).ne.'#')then -+ -+ if(findstring('stack',record,idum))then -+ -+ mxstak=intstr(record,lenrec,idum) -+ -+ elseif(findstring('no link',record,idum))then -+ -+ nolink=.true. -+ -+ elseif(findstring('metafreeze',record,idum))then -+ -+ lmetad=.true. -+ do while(lmetad) -+ call getrec(safe,idnode,nread) -+ if(.not.safe)call abortscan(17,idnode) -+ call lowcase(record,lenrec) -+ lmetad=.not.findstring('endmet',record,idum) -+ enddo -+ -+ elseif(findstring('redirect',record,idum))then -+ -+ redirect=.true. -+ -+ elseif(findstring('densvar',record,idum))then -+ -+ densvar=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('shift',record,idum).or. -+ x findstring('reaction',record,idum))then -+ -+ lcshft=.true. -+ -+ elseif(findstring('ewald',record,idum).or. -+ x findstring('spme',record,idum).or. -+ x findstring('hke',record,idum))then -+ -+c read Ewald or HK-Ewald or SPM-Ewald sum parameters -+ -+ lhke=findstring('hke',record,idum) -+ lspme=findstring('spme',record,idum) -+ lewald=findstring('ewald',record,idum) -+ -+ if(findstring('precision',record,idum))then -+ -+ eps=dblstr(record,lenrec,idum) -+ if(lhke) then -+ -+ nhko=intstr(record,lenrec,idum) -+ nlatt=intstr(record,lenrec,idum) -+ nlatt=min(nlatt,2) -+ -+ endif -+ -+ if(rcut.lt.1.d-6)rcut=10.d0 -+ -+c compute alpha and the kmax -+ -+ if(lewald.or.lspme)then -+ -+ call dcell(cell,celprp) -+ eps=min(abs(eps),0.5d0) -+ tol=sqrt(abs(log(eps*rcut))) -+ alpha=sqrt(abs(log(eps*rcut*tol)))/rcut -+ tol1=sqrt(-log(eps*rcut*(2.d0*tol*alpha)**2)) -+ fac=1.d0 -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) -+ x fac=2.d0**(1.d0/3.d0) -+ kmax1=nint(0.25d0+fac*celprp(1)*alpha*tol1/pi) -+ kmax2=nint(0.25d0+fac*celprp(2)*alpha*tol1/pi) -+ kmax3=nint(0.25d0+fac*celprp(3)*alpha*tol1/pi) -+ -+ elseif(lhke)then -+ -+ if(nhko.eq.0)then -+ if(eps.le.1.d-6)then -+ alpha=3.46d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=3.14d0/rcut -+ else -+ alpha=2.76d0/rcut -+ endif -+ elseif(nhko.eq.1)then -+ if(eps.le.1.d-6)then -+ alpha=4.37d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.08d0/rcut -+ else -+ alpha=3.75d0/rcut -+ endif -+ elseif(nhko.eq.2)then -+ if(eps.le.1.d-6)then -+ alpha=5.01d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=4.74d0/rcut -+ else -+ alpha=4.44d0/rcut -+ endif -+ elseif(nhko.eq.3)then -+ if(eps.le.1.d-6)then -+ alpha=5.55d0/rcut -+ elseif(eps.le.1.d-5)then -+ alpha=5.28d0/rcut -+ else -+ alpha=5.00d0/rcut -+ endif -+ endif -+ alpha=alpha/dble(2*nlatt+1) -+ if(abs(cell(9)).lt.1.d-8)cell(9)=1.d0 -+ call dcell(cell,celprp) -+ tol=2.d0*alpha*sqrt(abs(log(eps*alpha))) -+ tol1=2.d0*alpha*sqrt(abs(log(eps*alpha*tol))) -+ kmax1=nint(0.25d0+0.5d0*celprp(1)*tol1/pi) -+ kmax2=nint(0.25d0+0.5d0*celprp(2)*tol1/pi) -+ kmax3=1 -+ -+ endif -+ -+ else -+ -+ alpha=dblstr(record,lenrec,idum) -+ kmax1=intstr(record,lenrec,idum) -+ kmax2=intstr(record,lenrec,idum) -+ -+ if(lhke)then -+ -+ kmax3=1 -+ nhko=intstr(record,lenrec,idum) -+ -+ else -+ -+ kmax3=intstr(record,lenrec,idum) -+ -+ endif -+ -+ endif -+ -+c for spme double kmax and set to next power of 2, with current -+c upper limit of 512 -+ -+ if(lspme)then -+ -+ kmaxpow2=1 -+ do while (kmax1.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxd=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax2.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxe=2 * kmaxpow2 -+ -+ kmaxpow2=1 -+ do while (kmax3.gt.kmaxpow2.and.kmaxpow2.lt.256) -+ kmaxpow2=kmaxpow2 * 2 -+ end do -+ kmaxf=2 * kmaxpow2 -+ -+ elseif(lhke) then -+ -+ kmaxa=kmax1 -+ kmaxb=kmax2 -+ kmaxc=1 -+ -+ else -+ -+ kmaxa=kmax1 -+ kmaxb=kmax2 -+ kmaxc=kmax3 -+ -+ endif -+ -+ elseif(findstring('cut',record,idum))then -+ -+ rcut=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('rvdw',record,idum))then -+ -+ rvdw=dblstr(record,lenrec,idum) -+ -+ elseif(findstring('delr',record,idum))then -+ -+ delr=dblstr(record,100,idum) -+ -+ else if(findstring('rdf',record,idum))then -+ -+ if(.not.findstring('print',record,idum))then -+ -+ jmp=intstr(record,lenrec,idum) -+ drdf=dblstr(record,lenrec,idum) -+ -+ endif -+ -+ else if(findstring('zden',record,idum))then -+ -+ jmp=intstr(record,lenrec,idum) -+ dzdn=dblstr(record,lenrec,idum) -+ zlen=dblstr(record,lenrec,idum) -+ if(dzdn.lt.1.d-8)then -+ -+ dzdn=0.1d0 -+ zlen=0.1d0*dble(128) -+ -+ elseif(zlen.lt.1.d-8)then -+ -+ zlen=dzdn*dble(128) -+ -+ endif -+ -+ elseif(findstring('solva',record,idum))then -+ -+ lsolva=.true. -+ -+ elseif(findstring('decomp',record,idum))then -+ -+ lsolva=.true. -+ -+ elseif(findstring('free',record,idum))then -+ -+ lfree=.true. -+ -+ elseif(findstring('excit',record,idum))then -+ -+ lghost=.true. -+ lsolva=.true. -+ -+ elseif(findstring('reset_mass',record,idum))then -+ -+ lfrmas=.true. -+ -+ elseif(findstring('switch',record,idum))then -+ -+ lghost=.true. -+ lsolva=.true. -+ -+ elseif(findstring('finish',record,idum))then -+ -+ peek=.false. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (nread) -+ if(abs(rvdw).le.1.d-10)rvdw=rcut -+ if(drdf.lt.1.d-8)drdf=0.05d0 -+ if(dzdn.lt.1.d-8)dzdn=0.05d0 -+ -+ return -+ -+ end subroutine conscan -+ -+ subroutine abortscan(key,idnode) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for controlled exit of file scan -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c********************************************************************* -+ -+ integer key,idnode -+ -+ write(nrite,'(/,/,1x,a,i5)') -+ x 'DL_POLY terminated due to error ', key -+ -+ if(key.eq.17)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - strange exit from CONTROL file processing' -+ -+ else if(key.eq.52)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of FIELD file encountered' -+ -+ else if(key.eq.24)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - end of file encountered in TABLE file' -+ -+ else if(key.eq.34)then -+ -+ write(nrite,'(/,/,1x,a)') -+ x 'error - character array memory allocation failure' -+ -+ endif -+ -+ if(idnode.eq.0) then -+ close (nrite) -+ close (nhist) -+ close (nread) -+ close (nconf) -+ close (nstats) -+ close (nrest) -+ close (nfield) -+ close (ntable) -+ endif -+ -+ call gsync() -+ call exitcomms() -+ -+ return -+ end subroutine abortscan -+ -+ subroutine dcell(aaa,bbb) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to calculate the dimensional properties of -+c a simulation cell specified by the input matrix aaa. -+c the results are returned in the array bbb, with : -+c -+c bbb(1 to 3) - lengths of cell vectors -+c bbb(4 to 6) - cosines of cell angles -+c bbb(7 to 9) - perpendicular cell widths -+c bbb(10) - cell volume -+c -+c copyright daresbury laboratory 1992 -+c author - w. smith july 1992 -+c -+c*********************************************************************** -+ -+ real(8) aaa,bbb,axb1,axb2,axb3,bxc1,bxc2,bxc3,cxa1,cxa2,cxa3 -+ -+ dimension aaa(9),bbb(10) -+ -+c calculate lengths of cell vectors -+ -+ bbb(1)=sqrt(aaa(1)*aaa(1)+aaa(2)*aaa(2)+aaa(3)*aaa(3)) -+ bbb(2)=sqrt(aaa(4)*aaa(4)+aaa(5)*aaa(5)+aaa(6)*aaa(6)) -+ bbb(3)=sqrt(aaa(7)*aaa(7)+aaa(8)*aaa(8)+aaa(9)*aaa(9)) -+ -+c calculate cosines of cell angles -+ -+ bbb(4)=(aaa(1)*aaa(4)+aaa(2)*aaa(5)+aaa(3)*aaa(6))/(bbb(1)*bbb(2)) -+ bbb(5)=(aaa(1)*aaa(7)+aaa(2)*aaa(8)+aaa(3)*aaa(9))/(bbb(1)*bbb(3)) -+ bbb(6)=(aaa(4)*aaa(7)+aaa(5)*aaa(8)+aaa(6)*aaa(9))/(bbb(2)*bbb(3)) -+ -+c calculate vector products of cell vectors -+ -+ axb1=aaa(2)*aaa(6)-aaa(3)*aaa(5) -+ axb2=aaa(3)*aaa(4)-aaa(1)*aaa(6) -+ axb3=aaa(1)*aaa(5)-aaa(2)*aaa(4) -+ bxc1=aaa(5)*aaa(9)-aaa(6)*aaa(8) -+ bxc2=aaa(6)*aaa(7)-aaa(4)*aaa(9) -+ bxc3=aaa(4)*aaa(8)-aaa(5)*aaa(7) -+ cxa1=aaa(8)*aaa(3)-aaa(2)*aaa(9) -+ cxa2=aaa(1)*aaa(9)-aaa(3)*aaa(7) -+ cxa3=aaa(2)*aaa(7)-aaa(1)*aaa(8) -+ -+c calculate volume of cell -+ -+ bbb(10)=abs(aaa(1)*bxc1+aaa(2)*bxc2+aaa(3)*bxc3) -+ -+c calculate cell perpendicular widths -+ -+ bbb(7)=bbb(10)/sqrt(bxc1*bxc1+bxc2*bxc2+bxc3*bxc3) -+ bbb(8)=bbb(10)/sqrt(cxa1*cxa1+cxa2*cxa2+cxa3*cxa3) -+ bbb(9)=bbb(10)/sqrt(axb1*axb1+axb2*axb2+axb3*axb3) -+ -+ return -+ end subroutine dcell -+ -+ end module setup_module -diff -urN dl_class_1.9.orig/srcmod/shake_module.f dl_class_1.9/srcmod/shake_module.f ---- dl_class_1.9.orig/srcmod/shake_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/shake_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,152 @@ -+ module shake_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining bond shake arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmcon(:) -+ integer, allocatable :: listcon(:,:),listot(:) -+ integer, allocatable :: numcon(:),lstcon(:,:) -+ integer, allocatable :: listme(:),lishap(:),lashap(:) -+ -+ save prmcon,listcon,listot,numcon,lstcon,listme,lishap,lashap -+ -+ contains -+ -+ subroutine alloc_shake_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (prmcon(mxtcon),stat=fail(1)) -+ allocate (numcon(mxtmls),stat=fail(2)) -+ allocate (lstcon(mxtcon,2),stat=fail(3)) -+ allocate (listcon(mxcons,3),stat=fail(4)) -+ allocate (listme(mxatms),stat=fail(5)) -+ allocate (lishap(mxlshp),stat=fail(6)) -+ allocate (lashap(mxproc),stat=fail(7)) -+ allocate (listot(mxatms),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1070) -+ enddo -+ -+ do i=1,mxtmls -+ numcon(i)=0 -+ enddo -+ -+ end subroutine alloc_shake_arrays -+ -+ subroutine define_constraints -+ x (safe,lghost,idnode,itmols,nconst,nsite,natmsr) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining constraints -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c adapted - p-a cazade oct 2007, solvation, excitation etc. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lghost -+ character*1 message(80) -+ integer idnode,itmols,nconst,nsite,ntmp,icnst -+ integer icnst1,iatm1,iatm2,isite1,isite2,idum,i -+ integer isol1,isol2,natmsr -+ -+ ntmp=intstr(record,lenrec,idum) -+ numcon(itmols)=numcon(itmols)+ntmp -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of bond constraints', -+ x 5x,i10)") ntmp -+ write(nrite,"(/,/,1x,'constraint bond details:', -+ x /,/,21x,5x,'index',5x,'index',2x,'bondlength',/) -+ x ") -+ endif -+ -+ icnst1 = numcon(itmols) -+ do icnst=1,icnst1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ iatm1 = intstr(record,lenrec,idum) -+ iatm2 = intstr(record,lenrec,idum) -+ -+c test for frozen atom pairs(:) -+ -+ isite1 = nsite - numsit(itmols) + iatm1 -+ isite2 = nsite - numsit(itmols) + iatm2 -+ if(lghost)then -+ -+ isol1=natmsr+iatm1 -+ isol2=natmsr+iatm2 -+ -+ endif -+ -+ if(lfzsit(isite1)*lfzsit(isite2).ne.0) then -+ -+ numcon(itmols) = numcon(itmols) -1 -+ if(idnode.eq.0) write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nconst=nconst+1 -+ -+ if(nconst.gt.mxtcon) call error(idnode,40) -+ -+ lstcon(nconst,1)= iatm1 -+ lstcon(nconst,2)= iatm2 -+ prmcon(nconst)=dblstr(record,lenrec,idum) -+ -+ if(lghost)then -+ -+ if((isol1.ge.ind_fre(3)).or.(isol2.ge.ind_fre(3)))then -+ -+ numcon(itmols)=numcon(itmols)-1 -+ ntcons_ghost=ntcons_ghost+1 -+ -+ endif -+ -+ endif -+ -+ if(idnode.eq.0) -+ x write(nrite,"(21x,2i10,f12.6)") -+ x lstcon(nconst,1),lstcon(nconst,2), -+ x prmcon(nconst) -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_constraints -+ -+ end module shake_module -diff -urN dl_class_1.9.orig/srcmod/site_module.f dl_class_1.9/srcmod/site_module.f ---- dl_class_1.9.orig/srcmod/site_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/site_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,233 @@ -+ module site_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining atomic/site arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use error_module -+ use parse_module -+ use setup_module -+ -+ implicit none -+ -+ character*1, allocatable :: molnam(:,:) -+ character*8, allocatable :: sitnam(:),unqatm(:) -+ real(8), allocatable :: dens(:),chgsit(:),wgtsit(:) -+ integer, allocatable :: nexsit(:),lfzsit(:),numsit(:),ltpsit(:) -+ integer, allocatable :: nugrp(:),lexsit(:,:),numgrp(:) -+ integer, allocatable :: numtyp(:),numfrz(:),nummols(:) -+ -+ save numtyp,numfrz,dens,chgsit,wgtsit,sitnam,unqatm,nexsit -+ save lfzsit,numsit,ltpsit,nugrp,lexsit,numgrp,molnam,nummols -+ -+ contains -+ -+ subroutine alloc_site_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=16 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (chgsit(mxsite),stat=fail(1)) -+ allocate (wgtsit(mxsite),stat=fail(2)) -+ allocate (nexsit(mxsite),stat=fail(3)) -+ allocate (lfzsit(mxsite),stat=fail(4)) -+ allocate (nugrp(mxsite) ,stat=fail(5)) -+ allocate (ltpsit(mxsite),stat=fail(6)) -+ allocate (numsit(mxtmls),stat=fail(7)) -+ allocate (lexsit(mxsite,mxexcl),stat=fail(8)) -+ allocate (sitnam(mxsite),stat=fail(9)) -+ allocate (unqatm(mxsite),stat=fail(10)) -+ allocate (numgrp(mxtmls),stat=fail(11)) -+ allocate (numtyp(mxatyp),stat=fail(12)) -+ allocate (numfrz(mxatyp),stat=fail(13)) -+ allocate (dens(mxatyp),stat=fail(14)) -+ allocate (nummols(mxtmls),stat=fail(15)) -+ allocate (molnam(40,mxtmls),stat=fail(16)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1090) -+ enddo -+ -+ do i=1,mxtmls -+ numsit(i)=0 -+ enddo -+ -+ end subroutine alloc_site_arrays -+ -+ subroutine define_atoms -+ x (safe,lneut,idnode,itmols,nsite,ksite,ntpatm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining atom types in system -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ character*8 atom1 -+ character*1 message(80) -+ logical lneut,safe,atmchk -+ integer idnode,itmols,nsite,ksite,ntpatm,isite,nrept -+ integer ifrz,neugp,irept,jsite,idum -+ real(8) weight,charge -+ -+ numsit(itmols)=intstr(record,lenrec,idum) -+ if(idnode.eq.0) then -+ write(nrite,"(/,1x,'number of atoms/sites', -+ x 10x,i10)") numsit(itmols) -+ if(.not.lneut) -+ x write(nrite,"(/,/,1x,'atomic characteristics:', -+ x /,/,21x,' site',5x,'name',10x,'mass',8x, -+ x 'charge',4x,'repeat',4x,'freeze'/)") -+ if(lneut) -+ x write(nrite,"(/,/,1x,'atomic characteristics:',/ -+ x /,21x,' site',5x,'name',10x,'mass',8x,'charge', -+ x 4x,'repeat',4x,'freeze',3x,'chg grp')") -+ -+ endif -+ -+ do isite=1,numsit(itmols) -+ -+ if(ksite.lt.numsit(itmols))then -+ -+c read atom name, site number, mass, charge, freeze option -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ weight=dblstr(record,lenrec,idum) -+ charge=dblstr(record,lenrec,idum) -+ nrept=intstr(record,lenrec,idum) -+ ifrz =intstr(record,lenrec,idum) -+ neugp=intstr(record,lenrec,idum) -+ if(nrept.eq.0)nrept=1 -+ ksite=ksite+nrept -+ -+ if(idnode.eq.0) then -+ -+ if(.not.lneut) then -+ -+ write(nrite, -+ x "(21x,i5,5x,a8,2f12.5,2i10)") -+ x nsite+1,atom1,weight,charge,nrept, -+ x ifrz -+ -+ else -+ -+ write(nrite, -+ x "(21x,i5,5x,a8,2f12.5,3i10)") -+ x nsite+1,atom1,weight,charge,nrept, -+ x ifrz,neugp -+ -+ endif -+ -+ endif -+ -+ do irept=1,nrept -+ -+ nsite=nsite+1 -+ if(nsite.gt.mxsite) call error(idnode,20) -+ -+ sitnam(nsite)=atom1 -+ wgtsit(nsite)=weight -+ chgsit(nsite)=charge -+ lfzsit(nsite)=ifrz -+ nugrp(nsite)=neugp -+ -+ enddo -+ -+c establish list of unique atom types -+ -+ atmchk=.true. -+ -+ do jsite=1,ntpatm -+ -+ if(atom1.eq.unqatm(jsite)) then -+ -+ atmchk=.false. -+ do irept=nsite,nsite-nrept+1,-1 -+ -+ ltpsit(irept)=jsite -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ if(atmchk)then -+ -+ ntpatm=ntpatm+1 -+ if(ntpatm.gt.mxatyp)call error(idnode,14) -+ unqatm(ntpatm)=atom1 -+ -+ do irept=nsite,nsite-nrept+1,-1 -+ -+ ltpsit(irept)=ntpatm -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_atoms -+ -+ subroutine check_syschg(idnode,ntpmls,sumchg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for checking the system charge -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,ntpmls,jsite,itmols,lsite -+ real(8) sumchg -+ -+ jsite=0 -+ do itmols=1,ntpmls -+ -+ do lsite=1,numsit(itmols) -+ -+ jsite=jsite+1 -+ sumchg=sumchg+dble(nummols(itmols))*chgsit(jsite) -+ -+ enddo -+ -+ enddo -+ -+ if(abs(sumchg).gt.1.0d-6) then -+ -+ call warning(idnode,60,sumchg,0.d0,0.d0) -+ -+ endif -+ -+ return -+ end subroutine check_syschg -+ -+ end module site_module -diff -urN dl_class_1.9.orig/srcmod/solvation_module.f dl_class_1.9/srcmod/solvation_module.f ---- dl_class_1.9.orig/srcmod/solvation_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/solvation_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,996 @@ -+ module solvation_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining decomposition of energy arrays -+c to calculate solvation energies -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ use setup_module -+ use error_module -+ use config_module -+ -+ implicit none -+ -+ logical lcomp(9) -+ -+ integer mxtmls_sol2,mxtmls_sol3,mxtmls_sol4 -+ integer ntcons_ghost,ngrp_ghost,nswitch,niswitch -+ integer mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 -+ integer nfrn,ifrn,mfree,kfree,ind_fre(4) -+ -+ real(8) pfree,lambda1,lambda2,dlambda,eng_kin_fre -+ real(8) elrc2,virlrc2,engsic0,engsic2,elrc_sav,qfix_fre -+ real(8) virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,vlrc_fre -+ real(8) qchg0,qchg1,qchg2,ang_fre,bnd_fre,dih_fre -+ real(8) inv_fre,tbp_fre,fbp_fre,cou_fre,elrc2_sav -+ real(8) vdw_fre,eng_cfg_fre,shl_fre,virlrc2_sav,vlrc_fre_sav -+ real(8) qchg_sav,vir_cfg_fre,ang_vir,bnd_vir,dih_vir -+ real(8) inv_vir,tbp_vir,fbp_vir,cou_vir,vdw_vir,shl_vir -+ -+ integer, allocatable :: atm_fre(:) -+ integer, allocatable :: atmolt(:),rigid_sol(:),const_sol(:) -+ integer, allocatable :: lstgot_sol(:),natm_sol(:) -+ -+ real(8), allocatable :: elrc_sol(:),elrc_sol_sav(:),shl_sol(:) -+ real(8), allocatable :: cou_sol(:),vdw_sol(:),bnd_sol(:) -+ real(8), allocatable :: ckc_sol_sum(:),cks_sol_sum(:) -+ real(8), allocatable :: cou_sol_sic(:),ebuf_sol1(:),inv_sol(:) -+ real(8), allocatable :: ang_sol(:),dih_sol(:),en3_sol(:) -+ real(8), allocatable :: qfix_sol(:),ebuf_sol2(:),en4_sol(:) -+ real(8), allocatable :: vdw_sol_lng(:),cou_sol_lng(:) -+ real(8), allocatable :: degfre_sol(:),degrot_sol(:),temp_sol(:) -+ real(8), allocatable :: vxo_sol(:),vyo_sol(:),vzo_sol(:) -+ real(8), allocatable :: ckc1(:),cks1(:),ckc2(:),cks2(:) -+ real(8), allocatable :: ckc_fre_sum(:),cks_fre_sum(:) -+ real(8), allocatable :: ebuf_exc1(:),ebuf_exc2(:) -+ real(8), allocatable :: vxo_fre(:),vyo_fre(:),vzo_fre(:) -+ real(8), allocatable :: elrc_exc(:),elrc_exc_sav(:) -+ real(8), allocatable :: cou_exc(:),vdw_exc(:),bnd_exc(:) -+ real(8), allocatable :: ang_exc(:),dih_exc(:),en4_exc(:) -+ real(8), allocatable :: vdw_exc_lng(:),cou_exc_lng(:) -+ real(8), allocatable :: shl_exc(:),en3_exc(:),inv_exc(:) -+ real(8), allocatable :: qfix_exc(:),cou_exc_sic(:),weight_sav(:) -+ -+ save atmolt,rigid_sol,const_sol,lstgot_sol,natm_sol,elrc_sol -+ save elrc_sol_sav,cou_sol,vdw_sol,bnd_sol,ckc_sol_sum,cks_sol_sum -+ save cou_sol_sic,ebuf_sol1,en4_sol,ang_sol,dih_sol,en3_sol -+ save qfix_sol,ebuf_sol2,shl_sol,vdw_sol_lng,cou_sol_lng,degfre_sol -+ save degrot_sol,inv_sol,temp_sol,vxo_sol,vyo_sol,vzo_sol -+ save mxtmls_sol2,mxtmls_sol3,mxtmls_sol4,lcomp -+ -+ save nfrn,ifrn,mfree,kfree,pfree,lambda1,lambda2,dlambda -+ save eng_kin_fre,elrc2,virlrc2,engsic0,engsic2,cks_fre_sum -+ save virlrc_sav,volm_sav,elrc_fre,elrc_fre_sav,qchg1,qchg2 -+ save ang_fre,bnd_fre,dih_fre,inv_fre,tbp_fre,fbp_fre,qchg0 -+ save cou_fre,vdw_fre,eng_cfg_fre,elrc2_sav,elrc_sav,vlrc_fre -+ save ang_vir,bnd_vir,dih_vir,inv_vir,tbp_vir,fbp_vir,cou_vir -+ save vdw_vir,shl_vir,vir_cfg_fre,qfix_fre,virlrc2_sav -+ save ind_fre,atm_fre,ckc1,cks1,ckc2,cks2,ckc_fre_sum -+ save ebuf_exc1,ebuf_exc2,vxo_fre,vyo_fre,vzo_fre,vlrc_fre_sav -+ save weight_sav -+ -+ save ntcons_ghost,ngrp_ghost,qchg_sav,nswitch,niswitch -+ save mxtmls_exc2,mxtmls_exc3,mxtmls_exc4 -+ save cou_exc,vdw_exc,bnd_exc,ang_exc,dih_exc,en4_exc,vdw_exc_lng -+ save cou_exc_lng,shl_exc,en3_exc,inv_exc,elrc_exc,elrc_exc_sav -+ save qfix_exc,cou_exc_sic -+ -+ contains -+ -+ subroutine alloc_sol_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for allocating solvation module arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=37 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ mxtmls_sol2=((mxtmls_sol+1)*mxtmls_sol)/2 -+ mxtmls_sol3=(((mxtmls_sol+3)*mxtmls_sol+2)*mxtmls_sol)/6 -+ mxtmls_sol4=((((mxtmls_sol+6)*mxtmls_sol+11)*mxtmls_sol+6)* -+ x mxtmls_sol)/24 -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (cou_sol(mxtmls_sol2),stat=fail(1)) -+ allocate (vdw_sol(mxtmls_sol2),stat=fail(2)) -+ allocate (shl_sol(mxtmls_sol),stat=fail(3)) -+ allocate (ebuf_sol1(mxebuf_sol),stat=fail(4)) -+ allocate (cou_sol_sic(mxtmls_sol2),stat=fail(5)) -+ allocate (cks_sol_sum(mxtmls_sol),stat=fail(6)) -+ allocate (ckc_sol_sum(mxtmls_sol),stat=fail(7)) -+ allocate (bnd_sol(mxtmls_sol),stat=fail(8)) -+ allocate (ang_sol(mxtmls_sol),stat=fail(9)) -+ allocate (dih_sol(mxtmls_sol),stat=fail(10)) -+ allocate (atmolt(mxatms_sol),stat=fail(11)) -+ allocate (en3_sol(mxtmls_sol3),stat=fail(12)) -+ allocate (en4_sol(mxtmls_sol4),stat=fail(13)) -+ allocate (qfix_sol(mxtmls_sol),stat=fail(14)) -+ allocate (elrc_sol(mxtmls_sol2),stat=fail(15)) -+ allocate (elrc_sol_sav(mxtmls_sol2),stat=fail(16)) -+ allocate (ebuf_sol2(mxebuf_sol),stat=fail(23)) -+ allocate (rigid_sol(mxtmls_sol),stat=fail(24)) -+ allocate (const_sol(mxtmls_sol),stat=fail(25)) -+ allocate (degfre_sol(mxtmls_sol),stat=fail(26)) -+ allocate (degrot_sol(mxtmls_sol),stat=fail(27)) -+ allocate (natm_sol(mxtmls_sol),stat=fail(28)) -+ allocate (lstgot_sol(mxatms_sol),stat=fail(29)) -+ allocate (temp_sol(mxtmls_sol),stat=fail(30)) -+ allocate (vxo_sol(mxatms_sol),stat=fail(31)) -+ allocate (vyo_sol(mxatms_sol),stat=fail(32)) -+ allocate (vzo_sol(mxatms_sol),stat=fail(33)) -+ allocate (vdw_sol_lng(mxtmls_sol2),stat=fail(34)) -+ allocate (cou_sol_lng(mxtmls_sol2),stat=fail(35)) -+ allocate (inv_sol(mxtmls_sol),stat=fail(36)) -+ allocate (weight_sav(mxatms_fre),stat=fail(37)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+c initialise accumulators -+ -+ lcomp(:)=.false. -+ elrc_sol(:)=0.d0 -+ cou_sol(:)=0.d0 -+ vdw_sol(:)=0.d0 -+ en3_sol(:)=0.d0 -+ en4_sol(:)=0.d0 -+ bnd_sol(:)=0.d0 -+ ang_sol(:)=0.d0 -+ dih_sol(:)=0.d0 -+ inv_sol(:)=0.d0 -+ -+ return -+ end subroutine alloc_sol_arrays -+ -+ subroutine solva_temp(idnode,mxnode,natms,keyver) -+ -+c*********************************************************************** -+c -+c dl_poly routine for solvation module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode,natms,keyver -+ real(8) vvx,vvy,vvz -+ -+ temp_sol(:)=0.d0 -+ -+ do i=idnode+1,natms,mxnode -+ -+ if(keyver.eq.0)then -+ -+ vvx=0.5d0*(vxx(i)+vxo_sol(i)) -+ vvy=0.5d0*(vyy(i)+vyo_sol(i)) -+ vvz=0.5d0*(vzz(i)+vzo_sol(i)) -+ -+ else -+ -+ vvx=vxx(i) -+ vvy=vyy(i) -+ vvz=vzz(i) -+ -+ endif -+ -+ temp_sol(atmolt(i))=temp_sol(atmolt(i))+weight(i)* -+ x (vvx*vvx+vvy*vvy+vvz*vvz)/(boltz*degfre_sol(atmolt(i))) -+ -+ enddo -+ -+c global sum -+ -+ if(mxnode.gt.1)call gdsum(temp_sol,mxtmls_sol,buffer) -+ -+ return -+ end subroutine solva_temp -+ -+ subroutine alloc_free_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine to allocate free energy arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (ebuf_exc1(mxebuf_fre),stat=fail(1)) -+ allocate (ckc1(mxewld_fre),stat=fail(2)) -+ allocate (cks1(mxewld_fre),stat=fail(3)) -+ allocate (ckc2(mxewld_fre),stat=fail(4)) -+ allocate (cks2(mxewld_fre),stat=fail(5)) -+ allocate (cks_fre_sum(mxtmls_fre),stat=fail(6)) -+ allocate (ckc_fre_sum(mxtmls_fre),stat=fail(7)) -+ allocate (atm_fre(mxatms_fre),stat=fail(8)) -+ allocate (ebuf_exc2(mxebuf_fre),stat=fail(9)) -+ allocate (vxo_fre(mxatms_fre),stat=fail(10)) -+ allocate (vyo_fre(mxatms_fre),stat=fail(11)) -+ allocate (vzo_fre(mxatms_fre),stat=fail(12)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+ return -+ -+ end subroutine alloc_free_arrays -+ -+ subroutine lrcorrect_fre(lfree,volm,elrc,virlrc) -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical lfree -+ real(8) volm,elrc,virlrc -+ -+ elrc=elrc_sav*(volm_sav/volm) -+ elrc2=elrc2_sav*(volm_sav/volm) -+ virlrc=virlrc_sav*(volm_sav/volm) -+ virlrc2=virlrc2_sav*(volm_sav/volm) -+ if(lfree)then -+ elrc_fre=elrc_fre_sav*(volm_sav/volm) -+ vlrc_fre=vlrc_fre_sav*(volm_sav/volm) -+ endif -+ -+ end subroutine lrcorrect_fre -+ -+ subroutine free_kinetic(lfrmas,idnode,mxnode,keyver) -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module -+c calculate kinetic energy difference between states -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008: parallel version -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lfrmas -+ integer i,idnode,mxnode,keyver -+ real(8) fac -+ -+ fac=dlambda -+ eng_kin_fre=0.d0 -+ -+ if(keyver.eq.0)then -+ -+ if(lfrmas)fac=dlambda/lambda1 -+ do i=ind_fre(1)+idnode,ind_fre(2),mxnode -+ -+ eng_kin_fre=eng_kin_fre- -+ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ -+ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) -+ -+ enddo -+ -+ if(lfrmas)fac=dlambda/lambda2 -+ do i=ind_fre(3)+idnode,ind_fre(4),mxnode -+ -+ eng_kin_fre=eng_kin_fre+ -+ x fac*weight(i)*((vxx(i)+vxo_fre(i))**2+ -+ x (vyy(i)+vyo_fre(i))**2+(vzz(i)+vzo_fre(i))**2) -+ -+ enddo -+ -+ eng_kin_fre=eng_kin_fre/8.d0 -+ -+ else -+ -+ if(lfrmas)fac=dlambda/lambda1 -+ do i=ind_fre(1)+idnode,ind_fre(2),mxnode -+ -+ eng_kin_fre=eng_kin_fre-fac*weight(i)*(vxx(i)**2+ -+ x vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ if(lfrmas)fac=dlambda/lambda2 -+ do i=ind_fre(3)+idnode,ind_fre(4),mxnode -+ -+ eng_kin_fre=eng_kin_fre+fac*weight(i)*(vxx(i)**2+ -+ x vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ eng_kin_fre=eng_kin_fre/2.d0 -+ -+ endif -+ -+c global sum -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=eng_kin_fre -+ call gdsum(buffer(1),1,buffer(2)) -+ eng_kin_fre=buffer(1) -+ -+ endif -+ -+ return -+ end subroutine free_kinetic -+ -+ subroutine freegen() -+ -+c*********************************************************************** -+c -+c dl_poly routine for free energy module: select mixing scheme -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,j,fac1,fac2 -+ real(8) sigma1,sigma2,acc,arg,gss,tt,pp,a1,a2,a3,a4,a5,err -+ -+ data a1,a2,a3/0.254829592d0,-0.284496736d0,1.421413741d0/ -+ data a4,a5,pp/-1.453152027d0,1.061405429d0,0.3275911d0/ -+ -+ if(mfree.eq.1)then -+ -+c linear mixing -+ -+ lambda1=(1.d0-pfree) -+ lambda2=pfree -+ dlambda=1.d0 -+ -+ elseif(mfree.eq.2)then -+ -+c nonlinear mixing -+ -+ lambda1=(1.d0-pfree)**kfree -+ lambda2=(1.d0-(1.d0-pfree)**kfree) -+ dlambda=dble(kfree)*(1.d0-pfree)**(kfree-1) -+ -+ elseif(mfree.eq.3)then -+ -+c trigonmetric mixing -+ -+ lambda2=0.5d0*(1.d0+sin(pi*(pfree-0.5d0))) -+ lambda1=1.d0-lambda2 -+ dlambda=0.5d0*pi*cos(pi*(pfree-0.5d0)) -+ -+ elseif(mfree.eq.4)then -+ -+c error function mixing -+ -+ acc=12.d0 -+ arg=2.d0*sqrt(2.302585093*acc) -+ gss=exp(-(arg*(pfree-0.5d0))**2) -+ tt=1.d0/(1.d0+pp*arg*abs(pfree-0.5d0)) -+ err=1.d0-tt*(a1+tt*(a2+tt*(a3+tt*(a4+tt*a5))))*gss -+ lambda2=0.5d0*(1.d0+sign(err,(pfree-0.5d0))) -+ lambda1=1.d0-lambda2 -+ dlambda=gss*arg/sqrpi -+ -+ elseif(mfree.eq.5)then -+ -+c polynomial mixing -+ -+ sigma1=0.d0 -+ -+ do i=0,kfree-1 -+ -+ fac1=1 -+ fac2=1 -+ -+ do j=0,i-1 -+ -+ fac1=fac1*(kfree-1+i-j) -+ fac2=fac2*(i-j) -+ -+ enddo -+ -+ sigma1=sigma1+(dble(fac1/fac2))*pfree**i -+ -+ enddo -+ -+ lambda1=sigma1*(1.d0-pfree)**kfree -+ lambda2=1.d0-lambda1 -+ dlambda=sigma1*kfree*(1.d0-pfree)**(kfree-1) -+ -+ sigma2=0.d0 -+ -+ do i=1,kfree-1 -+ -+ fac1=1 -+ fac2=1 -+ -+ do j=0,i-1 -+ -+ fac1=fac1*(kfree-1+i-j) -+ fac2=fac2*(i-j) -+ -+ enddo -+ -+ sigma2=sigma2+(dble(fac1*i/fac2))*pfree**(i-1) -+ -+ enddo -+ -+ dlambda=dlambda-sigma2*(1.d0-pfree)**kfree -+ -+ else -+ -+c spline kernel mixing -+ -+ arg=pfree-0.5d0 -+ lambda2=2.d0*pfree-8.d0*arg**3*(1.d0-abs(arg))-0.5d0 -+ lambda1=1.d0-lambda2 -+ dlambda=2.d0+arg**2*(32.d0*abs(arg)-24.d0) -+ -+ endif -+ -+ return -+ end subroutine freegen -+ -+ subroutine free_energy_write(idnode,nstep,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing free energy file at selected -+c intervals in simulation -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade dec 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob -+ integer idnode,natms,nstep -+ real(8) engunit -+ -+ save newjob -+ data newjob/.true./ -+ -+ if(idnode.eq.0)then -+ -+c open the FREENG file if new job or file closed -+ -+ if(newjob)then -+ -+ newjob = .false. -+ open(nfrnwr,file='FREENG',position='append') -+ -+ endif -+ -+ if(nstep.eq.nfrn.or.nstep.eq.ifrn)then -+ -+ write(nfrnwr,'(80a1)')cfgname -+ -+ if(abs(engunit-9648.530821d0).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nfrnwr, -+ x "(' ENERGY UNITS=DL_POLY Internal UNITS ')") -+ -+ write(nfrnwr,'(1p,4e16.8)')pfree,lambda1,lambda2,dlambda -+ -+ endif -+ -+ if(mod(nstep-nfrn,ifrn).eq.0)then -+ -+ write(nfrnwr,"(i10,1p,2e16.8)") -+ x nstep,eng_cfg_fre/engunit,vir_cfg_fre/engunit -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine free_energy_write -+ -+ subroutine alloc_exi_arrays(idnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine to allocate excited state arrays -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer, parameter :: nnn=15 -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ mxtmls_exc2=((mxtmls_exc+1)*mxtmls_exc)/2 -+ mxtmls_exc3=(((mxtmls_exc+3)*mxtmls_exc+2)*mxtmls_exc)/6 -+ mxtmls_exc4=((((mxtmls_exc+6)*mxtmls_exc+11)*mxtmls_exc+6)* -+ x mxtmls_exc)/24 -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (cou_exc(mxtmls_exc2),stat=fail(1)) -+ allocate (vdw_exc(mxtmls_exc2),stat=fail(2)) -+ allocate (bnd_exc(mxtmls_exc),stat=fail(3)) -+ allocate (ang_exc(mxtmls_exc),stat=fail(4)) -+ allocate (dih_exc(mxtmls_exc),stat=fail(5)) -+ allocate (en3_exc(mxtmls_exc3),stat=fail(6)) -+ allocate (en4_exc(mxtmls_exc4),stat=fail(7)) -+ allocate (shl_exc(mxtmls_exc),stat=fail(8)) -+ allocate (vdw_exc_lng(mxtmls_exc2),stat=fail(9)) -+ allocate (cou_exc_lng(mxtmls_exc2),stat=fail(10)) -+ allocate (inv_exc(mxtmls_exc),stat=fail(11)) -+ allocate (elrc_exc(mxtmls_exc2),stat=fail(12)) -+ allocate (elrc_exc_sav(mxtmls_exc2),stat=fail(13)) -+ allocate (qfix_exc(mxtmls_exc),stat=fail(14)) -+ allocate (cou_exc_sic(mxtmls_exc2),stat=fail(15)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1030) -+ enddo -+ -+c initialise accumulators -+ -+ bnd_exc(:)=0.d0 -+ ang_exc(:)=0.d0 -+ dih_exc(:)=0.d0 -+ inv_exc(:)=0.d0 -+ en3_exc(:)=0.d0 -+ en4_exc(:)=0.d0 -+ elrc_exc(:)=0.d0 -+ cou_exc(:)=0.d0 -+ vdw_exc(:)=0.d0 -+ -+ return -+ end subroutine alloc_exi_arrays -+ -+ subroutine update_ghost(idnode,mxnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c update the positions of ghost atoms -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode -+ -+ if(ind_fre(1).lt.ind_fre(3))then -+ -+ ii=ind_fre(3) -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ xxx(ii)=xxx(i) -+ yyy(ii)=yyy(i) -+ zzz(ii)=zzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ else -+ -+ ii=ind_fre(1) -+ -+ do i=ind_fre(3),ind_fre(4) -+ -+ xxx(ii)=xxx(i) -+ yyy(ii)=yyy(i) -+ zzz(ii)=zzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine update_ghost -+ -+ subroutine copy_force(idnode,mxnode) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer i,ii,idnode,mxnode -+ -+ ii=ind_fre(3) -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ fxx(ii)=fxx(i) -+ fyy(ii)=fyy(i) -+ fzz(ii)=fzz(i) -+ -+ ii=ii+1 -+ -+ enddo -+ -+ return -+ end subroutine copy_force -+ -+ subroutine switch(elrc,virlrc) -+c*********************************************************************** -+c -+c dl_poly routine for switching system in excitation simulation -+c copyright - daresbury laboratory -+c author - w. smith sep 2008 -+c adapted from p.-a. cazade oct 2007 -+c -+c*********************************************************************** -+ -+ real(8) :: swap,elrc,virlrc -+ real(8), allocatable :: cou_sic_swp(:),qfix_swp(:) -+ real(8), allocatable :: elrc_swp(:) -+ -+ allocate(cou_sic_swp(mxtmls_exc2),qfix_swp(mxtmls_exc)) -+ allocate(elrc_swp(mxtmls_exc2)) -+ -+ swap=elrc -+ elrc=elrc2 -+ elrc2=swap -+ -+ swap=engsic0 -+ engsic0=engsic2 -+ engsic2=swap -+ -+ swap=virlrc -+ virlrc=virlrc2 -+ virlrc2=swap -+ -+ swap=elrc_sav -+ elrc_sav=elrc2_sav -+ elrc2_sav=swap -+ -+ swap=virlrc_sav -+ virlrc_sav=virlrc2_sav -+ virlrc2_sav=swap -+ -+ swap=qchg0 -+ qchg0=qchg2 -+ qchg2=swap -+ -+ cou_sic_swp(:)=cou_sol_sic(:) -+ cou_sol_sic(:)=cou_exc_sic(:) -+ cou_exc_sic(:)=cou_sic_swp(:) -+ -+ qfix_swp(:)=qfix_sol(:) -+ qfix_sol(:)=qfix_exc(:) -+ qfix_exc(:)=qfix_swp(:) -+ -+ elrc_swp(:)=elrc_sol(:) -+ elrc_sol(:)=elrc_exc(:) -+ elrc_exc(:)=elrc_swp(:) -+ -+ elrc_swp(:)=elrc_sol_sav(:) -+ elrc_sol_sav(:)=elrc_exc_sav(:) -+ elrc_exc_sav(:)=elrc_swp(:) -+ -+ deallocate(elrc_swp,cou_sic_swp,qfix_swp) -+ -+ return -+ -+ end subroutine switch -+ -+ subroutine lrcorrect_sol(lghost,volm) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excited state module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical :: lghost -+ real(8) :: volm -+ -+ elrc_sol(:)=elrc_sol_sav(:)*(volm_sav/volm) -+ if(lghost)elrc_exc(:)=elrc_exc_sav(:)*(volm_sav/volm) -+ -+ return -+ end subroutine lrcorrect_sol -+ -+ subroutine switch_atm(lfrmas) -+ -+c*********************************************************************** -+c -+c dl_poly routine for excitation module -+c copyright - daresbury laboratory -+c author - p.-a. cazade oct 2007 -+c adapted - w.smith aug 2008 -+c -+c*********************************************************************** -+ -+ logical lfrmas -+ integer i,at1_swap,at2_swap -+ -+ at1_swap=ind_fre(1) -+ at2_swap=ind_fre(2) -+ ind_fre(1)=ind_fre(3) -+ ind_fre(2)=ind_fre(4) -+ ind_fre(3)=at1_swap -+ ind_fre(4)=at2_swap -+ -+ if(lfrmas)then -+ -+ do i=ind_fre(1),ind_fre(2) -+ -+ atm_fre(i)=1 -+ weight(i)=lambda1*weight_sav(i) -+ -+ enddo -+ -+ do i=ind_fre(3),ind_fre(4) -+ -+ atm_fre(i)=2 -+ weight(i)=lambda2*weight_sav(i) -+ -+ enddo -+ -+ else -+ -+ do i=ind_fre(1),ind_fre(2) -+ atm_fre(i)=1 -+ enddo -+ -+ do i=ind_fre(3),ind_fre(4) -+ atm_fre(i)=2 -+ enddo -+ -+ endif -+ -+ return -+ end subroutine switch_atm -+ -+ subroutine solvation_write -+ x (lexcite,lswitch,idnode,natms,nstep,nsolva,isolva, -+ x tstep,engunit,elrc) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing solva file at selected -+c intervals in simulation -+c -+c copyright - daresbury laboratory -+c author - p.-a. cazade jun 2007 -+c adapted - w. smith aug 2008 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob,lexcite,lswitch -+ integer idnode,natms,nstep,nsolva,isolva,i,j,k -+ integer mxtmls2,mxtmls3,mxtmls4 -+ real(8) tstep,engunit,elrc -+ character*80 aa,bb,cc,dd -+ -+ save newjob -+ data newjob/.true./ -+ -+ mxtmls2=((mxtmls+1)*mxtmls)/2 -+ mxtmls3=(((mxtmls+3)*mxtmls+2)*mxtmls)/6 -+ mxtmls4=((((mxtmls+6)*mxtmls+11)*mxtmls+6)*mxtmls)/24 -+ -+ if(idnode.eq.0)then -+ -+c open the SOLVAT file if new job or file closed -+ -+ if(newjob)then -+ -+ newjob=.false. -+ open(nsolwr,file='SOLVAT',position='append') -+ -+ endif -+ -+c write file header block -+ -+ if(nstep.eq.nsolva.or.nstep.eq.isolva)then -+ -+ write(nsolwr,'(80a1)')cfgname -+ -+ if(abs(engunit-9648.530821d0).le.1.d-10)write(nsolwr, -+ x "('ENERGY UNITS=electron Volts ')") -+ if(abs(engunit-418.4d0).le.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kcal/mol ')") -+ if(abs(engunit-1.d2).le.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kjoule/mol ')") -+ if(abs(engunit-boltz).lt.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=kelvin ')") -+ if(abs(engunit-1.d0).lt.1.d-10) write(nsolwr, -+ x "('ENERGY UNITS=DL_POLY Internal UNITS ')") -+ -+ write(nsolwr,'(2i10)')natms,mxtmls -+ write(nsolwr,'(1x,11a4)')' lex','lsw',' bnd',' ang', -+ x ' dih',' inv',' shl',' cou',' vdw',' 3bd',' 4bd' -+ write(nsolwr,'(11l4)')lexcite,lswitch,lcomp -+ -+ endif -+ -+c write out periodic data -+ -+ if(mod(nstep-nsolva,isolva).eq.0)then -+ -+c mark start of time step data -+ -+ if(lexcite)then -+ write(nsolwr,'("timestep",i10,f12.5,1p,2e14.6)') -+ x nstep,tstep,elrc/engunit,elrc2/engunit -+ else -+ write(nsolwr,'("timestep",i10,f12.5,1p,e14.6)') -+ x nstep,tstep,elrc/engunit -+ endif -+ -+c write intramolecular data -+ -+ write(nsolwr,'(1p,5e14.6)')temp_sol -+ if(lcomp(1))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')bnd_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')bnd_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(2))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')ang_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')ang_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(3))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')dih_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')dih_sol(:)/engunit -+ endif -+ endif -+ if(lcomp(4))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')inv_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')inv_sol(:)/engunit -+ endif -+ endif -+ -+c write core-shell data -+ -+ if(lcomp(5))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')shl_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')shl_sol(:)/engunit -+ endif -+ endif -+ -+c write coulombic data -+ -+ if(lcomp(6))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')cou_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')cou_sol(:)/engunit -+ endif -+ endif -+ -+c write vdw data -+ -+ if(lcomp(7))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')vdw_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')vdw_sol(:)/engunit -+ endif -+ endif -+ -+c write 3-body data -+ -+ if(lcomp(8))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')en3_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')en3_sol(:)/engunit -+ endif -+ endif -+ -+c write 4-body data -+ -+ if(lcomp(9))then -+ if(lexcite)then -+ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit -+ write(nsolwr,'(1p,5e14.6)')en4_exc(:)/engunit -+ else -+ write(nsolwr,'(1p,5e14.6)')en4_sol(:)/engunit -+ endif -+ endif -+ -+ endif -+ -+c close SOLVAT file at regular intervals -+ -+ if(.not.newjob.and.mod(nstep,ndump).eq.0)then -+ -+ close(nsolwr) -+ newjob=.true. -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine solvation_write -+ -+ end module solvation_module -diff -urN dl_class_1.9.orig/srcmod/spme_module.f dl_class_1.9/srcmod/spme_module.f ---- dl_class_1.9.orig/srcmod/spme_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/spme_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1175 @@ -+ module spme_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining spme arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use setup_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: csp(:),qqc(:,:,:),ffttable(:) -+ real(8), allocatable :: bspx(:,:), bspy(:,:), bspz(:,:) -+ real(8), allocatable :: bsdx(:,:), bsdy(:,:), bsdz(:,:) -+ integer, allocatable :: key1(:),key2(:),key3(:) -+ complex(8), allocatable :: ww1(:), ww2(:), ww3(:) -+ complex(8), allocatable :: qqq(:,:,:) -+ complex(8), allocatable :: bscx(:), bscy(:),bscz(:) -+CFFTW pointer, save :: fplan, bplan -+ -+ save csp,qqc,qqq,ww1,ww2,ww3,bscx,bscy,bscz,ffttable -+ save bspx,bspy,bspz,bsdx,bsdy,bsdz,key1,key2,key3 -+ -+ contains -+ -+ subroutine alloc_spme_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=9 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate (csp(mxspl),ffttable(mxftab),stat=fail(1)) -+ allocate (bspx(mxspme,mxspl),bspy(mxspme,mxspl),stat=fail(2)) -+ allocate (bspz(mxspme,mxspl),bsdx(mxspme,mxspl),stat=fail(3)) -+ allocate (bsdy(mxspme,mxspl),bsdz(mxspme,mxspl),stat=fail(4)) -+ allocate (bscx(kmaxd),bscy(kmaxe),bscz(kmaxf),stat=fail(5)) -+ allocate (key1(kmaxd),key2(kmaxe),key3(kmaxf),stat=fail(6)) -+ allocate (ww1(kmaxd),ww2(kmaxe),ww3(kmaxf),stat=fail(7)) -+ allocate (qqc(kmaxd,kmaxe,kmaxf),stat=fail(8)) -+ allocate (qqq(kmaxd,kmaxe,kmaxf),stat=fail(9)) -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1750) -+ enddo -+ -+ end subroutine alloc_spme_arrays -+ -+ subroutine bspcoe(nospl,kmax1,kmax2,kmax3) -+ -+c********************************************************************** -+c -+c dl_poly subroutine to calculate B-spline coefficients for -+c Euler exponential splines. -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nospl,kmax1,kmax2,kmax3,k,i,j -+ complex(8) ccc -+ -+c calculate B-splines at knots -+ -+ csp(1)=0.d0 -+ csp(2)=1.d0 -+ -+ do k=3,nospl -+ -+ csp(k)=0.d0 -+ -+ do j=k,2,-1 -+ -+ csp(j)=(dble(j-1)*csp(j)+dble(k-j+1)*csp(j-1))/dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+c calculate B-spline coefficients -+ -+ do i=0,kmax1-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww1(mod(i*k,kmax1)+1) -+ -+ enddo -+ -+ bscx(i+1)=ww1(mod(i*(nospl-1),kmax1)+1)/ccc -+ -+ enddo -+ -+ do i=0,kmax2-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww2(mod(i*k,kmax2)+1) -+ -+ enddo -+ -+ bscy(i+1)=ww2(mod(i*(nospl-1),kmax2)+1)/ccc -+ -+ enddo -+ -+ do i=0,kmax3-1 -+ -+ ccc=(0.d0,0.d0) -+ -+ do k=0,nospl-2 -+ -+ ccc=ccc+csp(k+2)*ww3(mod(i*k,kmax3)+1) -+ -+ enddo -+ -+ bscz(i+1)=ww3(mod(i*(nospl-1),kmax3)+1)/ccc -+ -+ enddo -+ -+ return -+ end subroutine bspcoe -+ -+ subroutine bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to calculate B-splines for SPME method -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer nospl,natms,idnode,mxnode,iatm0,iatm1,i,j,k -+ real(8) aaa,bbb,ccc,txx,tyy,tzz -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ -+c set up atoms numbers for nodes -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct B-splines -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,1)=1.d0 -+ bsdy(i,1)=1.d0 -+ bsdz(i,1)=1.d0 -+ bsdx(i,2)=-1.d0 -+ bsdy(i,2)=-1.d0 -+ bsdz(i,2)=-1.d0 -+ bspx(i,1)=txx(i)-int(txx(i)) -+ bspy(i,1)=tyy(i)-int(tyy(i)) -+ bspz(i,1)=tzz(i)-int(tzz(i)) -+ bspx(i,2)=1.d0-txx(i)+int(txx(i)) -+ bspy(i,2)=1.d0-tyy(i)+int(tyy(i)) -+ bspz(i,2)=1.d0-tzz(i)+int(tzz(i)) -+ -+ enddo -+ -+ do k=3,nospl -+ -+ do i=iatm0,iatm1 -+ -+ bspx(i,k)=0.d0 -+ bspy(i,k)=0.d0 -+ bspz(i,k)=0.d0 -+ -+ enddo -+ -+ do j=k,2,-1 -+ -+ if(k.eq.nospl)then -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,j)=bspx(i,j)-bspx(i,j-1) -+ bsdy(i,j)=bspy(i,j)-bspy(i,j-1) -+ bsdz(i,j)=bspz(i,j)-bspz(i,j-1) -+ -+ enddo -+ -+ endif -+ -+ do i=iatm0,iatm1 -+ -+ aaa=txx(i)+dble(j-1)-int(txx(i)) -+ bbb=tyy(i)+dble(j-1)-int(tyy(i)) -+ ccc=tzz(i)+dble(j-1)-int(tzz(i)) -+ bspx(i,j)=(aaa*bspx(i,j)+(dble(k)-aaa)*bspx(i,j-1))/ -+ x dble(k-1) -+ bspy(i,j)=(bbb*bspy(i,j)+(dble(k)-bbb)*bspy(i,j-1))/ -+ x dble(k-1) -+ bspz(i,j)=(ccc*bspz(i,j)+(dble(k)-ccc)*bspz(i,j-1))/ -+ x dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+ if(k.eq.nospl)then -+ -+ do i=iatm0,iatm1 -+ -+ bsdx(i,1)=bspx(i,1) -+ bsdy(i,1)=bspy(i,1) -+ bsdz(i,1)=bspz(i,1) -+ -+ enddo -+ -+ endif -+ -+ do i=iatm0,iatm1 -+ -+ bspx(i,1)=(txx(i)-int(txx(i)))*bspx(i,1)/dble(k-1) -+ bspy(i,1)=(tyy(i)-int(tyy(i)))*bspy(i,1)/dble(k-1) -+ bspz(i,1)=(tzz(i)-int(tzz(i)))*bspz(i,1)/dble(k-1) -+ -+ enddo -+ -+ enddo -+ -+ return -+ end subroutine bspgen -+ -+ subroutine ewald_spme -+ x (idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl, -+ x engcpe,vircpe,alpha,volm,epsq) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using the smoothed particle mesh ewald method -+c due to Essmann et al J. Chem. Phys. 103 (1995) 8577. -+c -+c parallel replicated data version (part 1) -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith july 1998 -+c additional FFT code - j. geronowicz sept 1999 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical newjob,lconsw -+ -+ integer idnode,mxnode,natms,imcon,kmax1,kmax2,kmax3,nospl -+ integer npass,i,nnn,ipass,l,ll,k,kk,j,jj,fail,iatm0,iatm1 -+ real(8) engcpe,vircpe,alpha,volm,epsq,omg,bb1,bb2,bb3,qchg -+ real(8) twopi,engsic,rvolm,ralph,shiftx,shifty,shiftz,det,qfix -+ real(8) tx,ty,tz,rcpcut,rcpct2,rkx1,rky1,rkz1,rkx2,rky2,rkz2 -+ real(8) rkx3,rky3,rkz3,rksq,akv,eng1,den,scal1,tmp,rclprp -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+CESSL integer inc2,inc3 -+CSGIC real(8) nauxfft(4) -+ -+ dimension omg(9),rclprp(10) -+ complex(8) cpetot,vterm -+ save newjob,engsic,qchg,iatm0,iatm1 -+ -+ data newjob/.true./,fail/0/ -+CSGIC data nauxfft/3,0,0,0/ -+ -+c allocate temporary arrays -+ -+ allocate (txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1760) -+ -+ npass=1 -+ lconsw=.true. -+ twopi=2.d0*pi -+ -+ if(newjob)then -+ -+ newjob=.false. -+ -+c set up atoms numbers for nodes -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c calculate self interaction correction and net system charge -+ -+ qchg=0.d0 -+ engsic=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ qchg=qchg+chge(i) -+ engsic=engsic+chge(i)**2 -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=qchg -+ buffer(2)=engsic -+ call gdsum(buffer(1),2,buffer(3)) -+ qchg =buffer(1) -+ engsic=buffer(2) -+ -+ endif -+ -+ engsic=-r4pie0/epsq*alpha*engsic/sqrpi -+ -+c initialise the complex exponential arrays -+ -+CCRAY call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CESSL call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CFFTW call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+CSGIC call spl_cexp(kmax1,kmax2,kmax3,ww1,ww2,ww3) -+ -+c initialise the default fft routine -+ -+ call dlpfft3(1,1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c calculate B-spline coefficients -+ -+ call bspcoe(nospl,kmax1,kmax2,kmax3) -+ -+ endif -+ -+c initialise coulombic potential energy -+ -+ engcpe=0.d0 -+ vircpe=0.d0 -+ -+c initalize stress tensor working arrays -+ -+ do i = 1,9 -+ omg(i) = 0.d0 -+ enddo -+ -+c set working parameters -+ -+ rvolm=twopi/volm -+ ralph=-0.25d0/alpha**2 -+ -+c set switch for TO, RD and HP boundary conditions -+ -+ if(imcon.eq.4.or.imcon.eq.5.or.imcon.eq.7) then -+ -+ npass=2 -+ lconsw=.false. -+ rvolm=0.5d0*rvolm -+ shiftx=0.5d0*dble(kmax1) -+ shifty=0.5d0*dble(kmax2) -+ shiftz=0.5d0*dble(kmax3) -+ if(imcon.eq.7)shiftz=0.d0 -+ -+ endif -+ -+c convert cell coordinates to fractional coordinates -+ -+ call invert(cell,rcell,det) -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ -+ do i=iatm0,iatm1 -+ -+ txx(i)=dble(kmax1)*(rcell(1)*xxx(i)+rcell(4)*yyy(i)+ -+ x rcell(7)*zzz(i)+0.5d0) -+ tyy(i)=dble(kmax2)*(rcell(2)*xxx(i)+rcell(5)*yyy(i)+ -+ x rcell(8)*zzz(i)+0.5d0) -+ tzz(i)=dble(kmax3)*(rcell(3)*xxx(i)+rcell(6)*yyy(i)+ -+ x rcell(9)*zzz(i)+0.5d0) -+ -+ enddo -+ -+c construct B-splines for atoms -+ -+ call bspgen(idnode,mxnode,natms,nospl,txx,tyy,tzz) -+ -+c zero 3D charge array -+ -+ nnn=kmaxd*kmaxe*kmaxf -+ call set_block(nnn,0.d0,qqc) -+ -+c construct 3D charge array -+ -+ do ipass=1,npass -+ -+ do i=iatm0,iatm1 -+ -+ do l=1,nospl -+ -+ ll=int(tzz(i))-l+2 -+ if(ll.gt.kmax3)ll=1 -+ if(ll.lt.1)ll=ll+kmax3 -+ do k=1,nospl -+ -+ kk=int(tyy(i))-k+2 -+ if(kk.gt.kmax2)kk=1 -+ if(kk.lt.1)kk=kk+kmax2 -+ -+ do j=1,nospl -+ -+ jj=int(txx(i))-j+2 -+ if(jj.gt.kmax1)jj=1 -+ if(jj.lt.1)jj=jj+kmax1 -+ -+ qqc(jj,kk,ll)=qqc(jj,kk,ll)+ -+ x chge(i)*bspx(i,j)*bspy(i,k)*bspz(i,l) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ if(.not.lconsw)then -+ -+ do i=iatm0,iatm1 -+ -+ tx=txx(i)-shiftx -+ ty=tyy(i)-shifty -+ tz=tzz(i)-shiftz -+ txx(i)=txx(i)-sign(shiftx,tx) -+ tyy(i)=tyy(i)-sign(shifty,ty) -+ tzz(i)=tzz(i)-sign(shiftz,tz) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c global sum of charge array -+ -+ if(mxnode.gt.1) call gdsum(qqc,nnn,buffer) -+ -+c load charge array into complex array for FFT -+ -+ call cpy_rtc(nnn,qqc,qqq) -+ -+c calculate inverse 3D FFT of charge array (in place). -+ -+CFFTW call fftwnd_f77_one(fplan,qqq,0) -+ -+CESSL inc2=kmaxd -+CESSL inc3=kmaxd*kmaxe -+CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, -+CESSL x -1,1.d0,buffer,mxbuff) -+ -+CSGIC call zzfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+CCRAY call ccfft3d( -1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+ call dlpfft3(0,1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c set reciprocal space cutoff -+ -+ call dcell(rcell,rclprp) -+ -+ rcpcut=0.5d0*min(dble(kmax1)*rclprp(7),dble(kmax2)*rclprp(8), -+ x dble(kmax3)*rclprp(9)) -+ rcpcut=rcpcut*1.05d0*twopi -+ rcpct2=rcpcut**2 -+ -+c calculate convolution of charge array with gaussian function -+ -+ do l=1,kmax3 -+ -+ ll=l-1 -+ if(l.gt.kmax3/2)ll=l-kmax3-1 -+ tmp=twopi*dble(ll) -+ rkx1=tmp*rcell(3) -+ rky1=tmp*rcell(6) -+ rkz1=tmp*rcell(9) -+ bb3=real(bscz(l)*conjg(bscz(l))) -+ -+ do k=1,kmax2 -+ -+ kk=k-1 -+ if(k.gt.kmax2/2)kk=k-kmax2-1 -+ tmp=twopi*dble(kk) -+ rkx2=rkx1+tmp*rcell(2) -+ rky2=rky1+tmp*rcell(5) -+ rkz2=rkz1+tmp*rcell(8) -+ bb2=bb3*real(bscy(k)*conjg(bscy(k))) -+ -+ do j=1,kmax1 -+ -+ jj=j-1 -+ if(j.gt.kmax1/2)jj=j-kmax1-1 -+ tmp=twopi*dble(jj) -+ rkx3=rkx2+tmp*rcell(1) -+ rky3=rky2+tmp*rcell(4) -+ rkz3=rkz2+tmp*rcell(7) -+ bb1=bb2*real(bscx(j)*conjg(bscx(j))) -+ -+ rksq=rkx3*rkx3+rky3*rky3+rkz3*rkz3 -+ -+ if(rksq.gt.1.d-6.and.rksq.le.rcpct2)then -+ -+ vterm=bb1*exp(ralph*rksq)/rksq*qqq(j,k,l) -+ akv=2.d0*(1.d0/rksq-ralph)*real(vterm*conjg(qqq(j,k,l))) -+ omg(1)=omg(1)-rkx3*rkx3*akv -+ omg(5)=omg(5)-rky3*rky3*akv -+ omg(9)=omg(9)-rkz3*rkz3*akv -+ omg(2)=omg(2)-rkx3*rky3*akv -+ omg(3)=omg(3)-rkx3*rkz3*akv -+ omg(6)=omg(6)-rky3*rkz3*akv -+ qqq(j,k,l)=vterm -+ -+ else -+ -+ qqq(j,k,l)=(0.d0,0.d0) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+CFFTW call fftwnd_f77_one(bplan,qqq,0) -+CESSL call dcft3(qqq,inc2,inc3,qqq,inc2,inc3,kmax1,kmax2,kmax3, -+CESSL x 1,1.d0,buffer,mxbuff) -+ -+CSGIC call zzfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CSGIC x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+CCRAY call ccfft3d( 1,kmax1,kmax2,kmax3,1.d0,qqq,kmaxd,kmaxe, -+CCRAY x qqq,kmaxd,kmaxe,ffttable,buffer,nauxfft ) -+ -+ call dlpfft3(0,-1,kmax1,kmax2,kmax3,key1,key2,key3, -+ x ww1,ww2,ww3,qqq) -+ -+c calculate atomic forces -+ -+ call spme_for -+ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, -+ x epsq,txx,tyy,tzz) -+ -+c complete product of charge array and its gaussian convolution -+ -+ call ele_prd(nnn,qqq,qqc,qqq) -+ -+c correction for charged systems -+ -+ qfix=-(0.5d0*pi*r4pie0/epsq)*((qchg/alpha)**2/volm)/ -+ x dble(mxnode) -+ -+c calculate total energy -+ -+ call scl_csum(nnn,cpetot,qqq) -+ -+ eng1=real(cpetot) -+ den=1.d0/dble(npass) -+ engcpe=engcpe+(den*rvolm*r4pie0*eng1/epsq+engsic)/ -+ x dble(mxnode)+qfix -+ -+c calculate stress tensor (symmetrical) -+ -+ scal1=den*rvolm*r4pie0/(epsq*dble(mxnode)) -+ stress(1) = stress(1)+scal1*(omg(1)+eng1)+qfix -+ stress(2) = stress(2)+scal1*omg(2) -+ stress(3) = stress(3)+scal1*omg(3) -+ stress(4) = stress(4)+scal1*omg(2) -+ stress(5) = stress(5)+scal1*(omg(5)+eng1)+qfix -+ stress(6) = stress(6)+scal1*omg(6) -+ stress(7) = stress(7)+scal1*omg(3) -+ stress(8) = stress(8)+scal1*omg(6) -+ stress(9) = stress(9)+scal1*(omg(9)+eng1)+qfix -+ -+c virial term -+ -+ vircpe=vircpe-scal1*(omg(1)+omg(5)+omg(9)+3.d0*eng1)-3.d0*qfix -+ -+c deallocate temporary arrays -+ -+ deallocate (txx,tyy,tzz,stat=fail) -+ -+ return -+ end subroutine ewald_spme -+ -+ subroutine spme_for -+ x (idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,rvolm, -+ x epsq,txx,tyy,tzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating coulombic forces in a -+c periodic system using smoothed particle mesh ewald method -+c -+c parallel replicated data version (part 1) -+c -+c copyright - daresbury laboratory 1998 -+c author - w. smith oct 1998 -+c -+c part 1 - reciprocal space terms (fourier part) -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,nospl,natms,kmax1,kmax2,kmax3,i,ll -+ integer iatm0,iatm1,kk,k,j,jj,l -+ real(8) rvolm,epsq,txx,tyy,tzz,fff,fac,bdx,bdy,bdz -+ real(8) det,qsum -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension fff(3) -+ -+ fac=-2.d0*rvolm*r4pie0/epsq -+ call invert(cell,rcell,det) -+ -+c set up atom numbers for nodes -+ -+ iatm0 = (idnode*natms)/mxnode + 1 -+ iatm1 = ((idnode+1)*natms)/mxnode -+ -+c calculate forces -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=0.d0 -+ fyy(i)=0.d0 -+ fzz(i)=0.d0 -+ -+ do l=1,nospl -+ -+ ll=int(tzz(i))-l+2 -+ if(ll.gt.kmax3)ll=1 -+ if(ll.lt.1)ll=ll+kmax3 -+ -+ do k=1,nospl -+ -+ kk=int(tyy(i))-k+2 -+ if(kk.gt.kmax2)kk=1 -+ if(kk.lt.1)kk=kk+kmax2 -+ -+ do j=1,nospl -+ -+ jj=int(txx(i))-j+2 -+ if(jj.gt.kmax1)jj=1 -+ if(jj.lt.1)jj=jj+kmax1 -+ -+ qsum=real(qqq(jj,kk,ll)) -+ bdx=qsum*bsdx(i,j)*bspy(i,k)*bspz(i,l)*dble(kmax1) -+ bdy=qsum*bspx(i,j)*bsdy(i,k)*bspz(i,l)*dble(kmax2) -+ bdz=qsum*bspx(i,j)*bspy(i,k)*bsdz(i,l)*dble(kmax3) -+ -+ fxx(i)=fxx(i)+fac*chge(i)*(bdx*rcell(1)+bdy*rcell(2)+ -+ x bdz*rcell(3)) -+ fyy(i)=fyy(i)+fac*chge(i)*(bdx*rcell(4)+bdy*rcell(5)+ -+ x bdz*rcell(6)) -+ fzz(i)=fzz(i)+fac*chge(i)*(bdx*rcell(7)+bdy*rcell(8)+ -+ x bdz*rcell(9)) -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+ enddo -+ -+c remove COM drift arising from SPME approximations -+ -+ fff(1)=0.d0 -+ fff(2)=0.d0 -+ fff(3)=0.d0 -+ -+ do i=iatm0,iatm1 -+ -+ fff(1)=fff(1)+fxx(i) -+ fff(2)=fff(2)+fyy(i) -+ fff(3)=fff(3)+fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)call gdsum(fff,3,buffer) -+ -+ fff(1)=fff(1)/dble(natms) -+ fff(2)=fff(2)/dble(natms) -+ fff(3)=fff(3)/dble(natms) -+ -+ do i=iatm0,iatm1 -+ -+ fxx(i)=fxx(i)-fff(1) -+ fyy(i)=fyy(i)-fff(2) -+ fzz(i)=fzz(i)-fff(3) -+ -+ enddo -+ -+ return -+ end subroutine spme_for -+ -+ subroutine dlpfft3 -+ x (ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,ww1,ww2,ww3,aaa) -+ -+c*********************************************************************** -+c -+c dl-poly 3D fast fourier transform routine (in place) -+c -+c copyright daresbury laboratory 1998 -+c author w smith july 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lkx,lky,lkz -+ integer ind,isw,ndiv1,ndiv2,ndiv3,key1,key2,key3,i,idm,kkk -+ integer nu1,nu2,nu3,iii,jjj,j,jj2,num,l,kk1,k12,k -+ real(8) tpi,arg -+ -+ dimension key1(ndiv1),key2(ndiv2),key3(ndiv3) -+ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) -+ complex(8) ttt,aaa(ndiv1,ndiv2,ndiv3) -+ save nu1,nu2,nu3 -+ -+ data tpi/6.283185307179586d0/ -+ -+ if(ind.gt.0)then -+ -+c check FFT array dimensions -+ -+ idm=1 -+ lkx=.true. -+ lky=.true. -+ lkz=.true. -+ -+ do i=1,30 -+ -+ idm=2*idm -+ -+ if(idm.eq.ndiv1)then -+ -+ lkx=.false. -+ nu1=i -+ -+ endif -+ if(idm.eq.ndiv2)then -+ -+ lky=.false. -+ nu2=i -+ -+ endif -+ if(idm.eq.ndiv3)then -+ -+ lkz=.false. -+ nu3=i -+ -+ endif -+ -+ enddo -+ -+ if(lkx.or.lky.or.lkz)then -+ -+ write(*,*)'error - FFT array not 2**N' -+ stop -+ -+ endif -+ -+c set reverse bit address arrays -+ -+ do kkk=1,ndiv1 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu1 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key1(kkk)=iii+1 -+ -+ enddo -+ -+ do kkk=1,ndiv2 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu2 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key2(kkk)=iii+1 -+ -+ enddo -+ -+ do kkk=1,ndiv3 -+ -+ iii=0 -+ jjj=kkk-1 -+ -+ do j=1,nu3 -+ -+ jj2=jjj/2 -+ iii=2*(iii-jj2)+jjj -+ jjj=jj2 -+ -+ enddo -+ -+ key3(kkk)=iii+1 -+ -+ enddo -+ -+c initialise complex exponential factors -+ -+ ww1(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv1/2 -+ -+ arg=(tpi/dble(ndiv1))*dble(i) -+ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww1(ndiv1+1-i)=conjg(ww1(i+1)) -+ -+ enddo -+ -+ ww2(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv2/2 -+ -+ arg=(tpi/dble(ndiv2))*dble(i) -+ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww2(ndiv2+1-i)=conjg(ww2(i+1)) -+ -+ enddo -+ -+ ww3(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv3/2 -+ -+ arg=(tpi/dble(ndiv3))*dble(i) -+ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww3(ndiv3+1-i)=conjg(ww3(i+1)) -+ -+ enddo -+ -+ return -+ -+ endif -+ -+c take conjugate of exponentials if required -+ -+ if(isw.lt.0)then -+ -+ do i=1,ndiv1 -+ -+ ww1(i)=conjg(ww1(i)) -+ -+ enddo -+ -+ do i=1,ndiv2 -+ -+ ww2(i)=conjg(ww2(i)) -+ -+ enddo -+ -+ do i=1,ndiv3 -+ -+ ww3(i)=conjg(ww3(i)) -+ -+ enddo -+ -+ endif -+ -+c perform fourier transform in X direction -+ -+ kkk=0 -+ num=ndiv1/2 -+ -+ do l=1,nu1 -+ -+ do while(kkk.lt.ndiv1) -+ -+ do i=1,num -+ -+ iii=key1(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv2 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(k12,j,k)*ww1(iii) -+ aaa(k12,j,k)=aaa(kk1,j,k)-ttt -+ aaa(kk1,j,k)=aaa(kk1,j,k)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv1 -+ -+ iii=key1(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv2 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(kkk,j,k) -+ aaa(kkk,j,k)=aaa(iii,j,k) -+ aaa(iii,j,k)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c perform fourier transform in Y direction -+ -+ kkk=0 -+ num=ndiv2/2 -+ -+ do l=1,nu2 -+ -+ do while(kkk.lt.ndiv2) -+ -+ do i=1,num -+ -+ iii=key2(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(j,k12,k)*ww2(iii) -+ aaa(j,k12,k)=aaa(j,kk1,k)-ttt -+ aaa(j,kk1,k)=aaa(j,kk1,k)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv2 -+ -+ iii=key2(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv3 -+ -+ ttt=aaa(j,kkk,k) -+ aaa(j,kkk,k)=aaa(j,iii,k) -+ aaa(j,iii,k)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c perform fourier transform in Z direction -+ -+ kkk=0 -+ num=ndiv3/2 -+ -+ do l=1,nu3 -+ -+ do while(kkk.lt.ndiv3) -+ -+ do i=1,num -+ -+ iii=key3(kkk/num+1) -+ kk1=kkk+1 -+ k12=kk1+num -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv2 -+ -+ ttt=aaa(j,k,k12)*ww3(iii) -+ aaa(j,k,k12)=aaa(j,k,kk1)-ttt -+ aaa(j,k,kk1)=aaa(j,k,kk1)+ttt -+ -+ enddo -+ -+ enddo -+ -+ kkk=kkk+1 -+ -+ enddo -+ -+ kkk=kkk+num -+ -+ enddo -+ -+ kkk=0 -+ num=num/2 -+ -+ enddo -+ -+c unscramble the fft using bit address array -+ -+ do kkk=1,ndiv3 -+ -+ iii=key3(kkk) -+ -+ if(iii.gt.kkk)then -+ -+ do j=1,ndiv1 -+ -+ do k=1,ndiv2 -+ -+ ttt=aaa(j,k,kkk) -+ aaa(j,k,kkk)=aaa(j,k,iii) -+ aaa(j,k,iii)=ttt -+ -+ enddo -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c restore exponentials to unconjugated values if necessary -+ -+ if(isw.lt.0)then -+ -+ do i=1,ndiv1 -+ -+ ww1(i)=conjg(ww1(i)) -+ -+ enddo -+ -+ do i=1,ndiv2 -+ -+ ww2(i)=conjg(ww2(i)) -+ -+ enddo -+ -+ do i=1,ndiv3 -+ -+ ww3(i)=conjg(ww3(i)) -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine dlpfft3 -+ -+ subroutine spl_cexp(ndiv1,ndiv2,ndiv3,ww1,ww2,ww3) -+ -+c*********************************************************************** -+c -+c dl-poly routine to create complex exponential arrays for -+c b-splines -+c -+c copyright daresbury laboratory 1998 -+c author w smith oct 1998 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ndiv1,ndiv2,ndiv3,i -+ real(8) tpi,arg -+ complex(8) ww1(ndiv1),ww2(ndiv2),ww3(ndiv3) -+ -+ data tpi/6.283185307179586d0/ -+ -+c initialise complex exponential factors -+ -+ ww1(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv1/2 -+ -+ arg=(tpi/dble(ndiv1))*dble(i) -+ ww1(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww1(ndiv1+1-i)=conjg(ww1(i+1)) -+ -+ enddo -+ -+ ww2(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv2/2 -+ -+ arg=(tpi/dble(ndiv2))*dble(i) -+ ww2(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww2(ndiv2+1-i)=conjg(ww2(i+1)) -+ -+ enddo -+ -+ ww3(1)=(1.d0,0.d0) -+ -+ do i=1,ndiv3/2 -+ -+ arg=(tpi/dble(ndiv3))*dble(i) -+ ww3(i+1)=cmplx(cos(arg),sin(arg),kind=8) -+ ww3(ndiv3+1-i)=conjg(ww3(i+1)) -+ -+ enddo -+ -+ return -+ end subroutine spl_cexp -+ -+ end module spme_module -diff -urN dl_class_1.9.orig/srcmod/temp_scalers_module.f dl_class_1.9/srcmod/temp_scalers_module.f ---- dl_class_1.9.orig/srcmod/temp_scalers_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/temp_scalers_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,768 @@ -+ module temp_scalers_module -+ -+c*********************************************************************** -+c -+c dl_poly module for temperature scaling routines -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ use config_module -+ use core_shell_module -+ use error_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use utility_module -+ -+ contains -+ -+ subroutine quench(imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for quenching the bond energies in the -+c initial structure of a molecule defined by constraints -+c -+c copyright - daresbury laboratory 1992 -+c author w.smith november 1992 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ integer imcon,idnode,mxnode,natms,nscons,i,j,k,icyc -+ integer fail -+ real(8) tolnce,ddd,esig,vvv,ww1,ww2 -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: uxx(:),uyy(:),uzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ dimension fail(3) -+ -+ data fail/0,0,0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate (uxx(mxatms),uyy(mxatms),uzz(mxatms),stat=fail(2)) -+ allocate (dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(3)) -+ -+ do i=1,3 -+ if(fail(i).ne.0)call error(idnode,1770) -+ enddo -+ -+c calculate bond vectors -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c normalise bond vectors -+ -+ do k=1,nscons -+ -+ ddd=sqrt(dxt(k)**2+dyt(k)**2+dzt(k)**2) -+ -+ dxt(k)=dxt(k)/ddd -+ dyt(k)=dyt(k)/ddd -+ dzt(k)=dzt(k)/ddd -+ -+ enddo -+ -+c start of quenching cycle -+ -+ icyc=0 -+ safe=.false. -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ uxx(i)=0.d0 -+ uyy(i)=0.d0 -+ uzz(i)=0.d0 -+ -+ enddo -+ -+c calculate velocity corrections and error -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ vvv=dxt(k)*(vxx(i)-vxx(j))+dyt(k)*(vyy(i)-vyy(j))+ -+ x dzt(k)*(vzz(i)-vzz(j)) -+ -+ esig=max(esig,abs(vvv)) -+ -+ ww1=weight(j)*vvv/(weight(i)+weight(j)) -+ ww2=weight(i)*vvv/(weight(i)+weight(j)) -+ uxx(i)=uxx(i)-ww1*dxt(k) -+ uyy(i)=uyy(i)-ww1*dyt(k) -+ uzz(i)=uzz(i)-ww1*dzt(k) -+ uxx(j)=uxx(j)+ww2*dxt(k) -+ uyy(j)=uyy(j)+ww2*dyt(k) -+ uzz(j)=uzz(j)+ww2*dzt(k) -+ -+ enddo -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+ if(.not.safe)then -+ -+c transport velocity adjustments to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ call shmove -+ x (idnode,mxnode,natms,lashap,lishap,uxx,uyy,uzz, -+ x xxt,yyt,zzt,buffer) -+ -+ endif -+ -+c update velocities -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ vxx(i)=vxx(i)+uxx(i)/dble(listme(i)) -+ vyy(i)=vyy(i)+uyy(i)/dble(listme(i)) -+ vzz(i)=vzz(i)+uzz(i)/dble(listme(i)) -+ vxx(j)=vxx(j)+uxx(j)/dble(listme(j)) -+ vyy(j)=vyy(j)+uyy(j)/dble(listme(j)) -+ vzz(j)=vzz(j)+uzz(j)/dble(listme(j)) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit if quenching fails -+ -+ if(.not.safe)call error(idnode,70) -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1) call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail(1)) -+ deallocate (uxx,uyy,uzz,stat=fail(2)) -+ deallocate (dxt,dyt,dzt,stat=fail(3)) -+ -+ return -+ end subroutine quench -+ -+ subroutine quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to convert atomic velocities to rigid body -+c c.o.m. and angular velocity -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1993. -+c author - t.forester nov 1993. -+c amended - t.forester dec 1994 : block data. -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,mxnode,natms,ngrp,fail,ig,jr,id -+ integer igrp1,igrp2,i,j -+ real(8) rot,wxx,wyy,wzz -+ -+ dimension rot(9) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ -+ data fail/0/ -+ -+c allocate work arrays -+ -+ allocate (xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail) -+ if(fail.ne.0)call error(idnode,1780) -+ -+c block indices for groups -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c translate atomic velocites to com velocity & angular velocity -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ gvxx(ig)=0.d0 -+ gvyy(ig)=0.d0 -+ gvzz(ig)=0.d0 -+ omx(ig)=0.d0 -+ omy(ig)=0.d0 -+ omz(ig)=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr =jr+1 -+ i =lstrgd(jr) -+ -+c centre of mass momentum -+ -+ gvxx(ig)=gvxx(ig)+weight(i)*vxx(i) -+ gvyy(ig)=gvyy(ig)+weight(i)*vyy(i) -+ gvzz(ig)=gvzz(ig)+weight(i)*vzz(i) -+ -+c distance to c.o.m of molecule -+ -+ xxt(jr)=xxx(i)-gcmx(ig) -+ yyt(jr)=yyy(i)-gcmy(ig) -+ zzt(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+c centre of mass velocity -+ -+ gvxx(ig)=gvxx(ig)/gmass(id) -+ gvyy(ig)=gvyy(ig)/gmass(id) -+ gvzz(ig)=gvzz(ig)/gmass(id) -+ -+ enddo -+ -+ call images(imcon,0,1,jr,cell,xxt,yyt,zzt) -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c rotational matrix -+ -+ rot(1)=q0(ig)**2+q1(ig)**2-q2(ig)**2-q3(ig)**2 -+ rot(2)=2.d0*(q1(ig)*q2(ig)-q0(ig)*q3(ig)) -+ rot(3)=2.d0*(q1(ig)*q3(ig)+q0(ig)*q2(ig)) -+ rot(4)=2.d0*(q1(ig)*q2(ig)+q0(ig)*q3(ig)) -+ rot(5)=q0(ig)**2-q1(ig)**2+q2(ig)**2-q3(ig)**2 -+ rot(6)=2.d0*(q2(ig)*q3(ig)-q0(ig)*q1(ig)) -+ rot(7)=2.d0*(q1(ig)*q3(ig)-q0(ig)*q2(ig)) -+ rot(8)=2.d0*(q2(ig)*q3(ig)+q0(ig)*q1(ig)) -+ rot(9)=q0(ig)**2-q1(ig)**2-q2(ig)**2+q3(ig)**2 -+ -+c angular momentum accumulators -+ -+ wxx=0.d0 -+ wyy=0.d0 -+ wzz=0.d0 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr =jr+1 -+ i =lstrgd(jr) -+ -+ wxx=wxx+weight(i)*(yyt(jr)*vzz(i)-zzt(jr)*vyy(i)) -+ wyy=wyy+weight(i)*(zzt(jr)*vxx(i)-xxt(jr)*vzz(i)) -+ wzz=wzz+weight(i)*(xxt(jr)*vyy(i)-yyt(jr)*vxx(i)) -+ -+ enddo -+ -+c angular velocity in body fixed frame -+ -+ omx(ig)=(rot(1)*wxx+rot(4)*wyy+rot(7)*wzz)*rotinx(id,2) -+ omy(ig)=(rot(2)*wxx+rot(5)*wyy+rot(8)*wzz)*rotiny(id,2) -+ omz(ig)=(rot(3)*wxx+rot(6)*wyy+rot(9)*wzz)*rotinz(id,2) -+ -+ jr=jr-numgsit(id) -+ do j=1,numgsit(id) -+ -+ jr=jr +1 -+ i=lstrgd(jr) -+ -+c site velocity in body frame -+ -+ wxx=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ wyy=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ wzz=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*wxx+rot(2)*wyy+rot(3)*wzz+gvxx(ig) -+ vyy(i)=rot(4)*wxx+rot(5)*wyy+rot(6)*wzz+gvyy(ig) -+ vzz(i)=rot(7)*wxx+rot(8)*wyy+rot(9)*wzz+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,omx,omy,omz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c deallocate work arrays -+ -+ deallocate (xxt,yyt,zzt,stat=fail) -+ -+ return -+ end subroutine quatqnch -+ -+ subroutine vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for scaling the velocity arrays to the -+c desired temperature -+c -+c zeroes angular momentum in non-periodic system. -+c -+c parallel replicated data version : block data -+c -+c copyright daresbury laboratory 1992. -+c author - w.smith july 1992 -+c amended - t.forester oct 1993 -+c amended - t.forester dec 1994 : block data -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,imcon,natms,ngrp,iatm1,iatm2,i -+ real(8) sigma,roti,rotinv,cmx,cmy,cmz,cmvx,cmvy,cmvz,sysmas -+ real(8) amx,amy,amz,det,scale,rsq,wxx,wyy,wzz,sumke -+ -+ dimension roti(9),rotinv(9) -+ -+c block indices -+ -+ iatm1=(idnode*natms)/mxnode+1 -+ iatm2=((idnode+1)*natms)/mxnode -+ -+c calculate centre of mass position and motion of the system -+ -+ cmx=0.d0 -+ cmy=0.d0 -+ cmz=0.d0 -+ cmvx=0.d0 -+ cmvy=0.d0 -+ cmvz=0.d0 -+ sysmas=0.d0 -+ -+ do i=iatm1,iatm2 -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ cmx=cmx+weight(i)*xxx(i) -+ cmy=cmy+weight(i)*yyy(i) -+ cmz=cmz+weight(i)*zzz(i) -+ sysmas=sysmas+weight(i) -+ cmvx=cmvx+vxx(i)*weight(i) -+ cmvy=cmvy+vyy(i)*weight(i) -+ cmvz=cmvz+vzz(i)*weight(i) -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ buffer(8)=sysmas -+ buffer(9)=cmx -+ buffer(10)=cmy -+ buffer(11)=cmz -+ buffer(12)=cmvx -+ buffer(13)=cmvy -+ buffer(14)=cmvz -+ call gdsum(buffer(8),7,buffer(1)) -+ sysmas= buffer(8) -+ cmx=buffer(9) -+ cmy=buffer(10) -+ cmz=buffer(11) -+ cmvx=buffer(12) -+ cmvy=buffer(13) -+ cmvz=buffer(14) -+ endif -+ -+ cmx=cmx/sysmas -+ cmy=cmy/sysmas -+ cmz=cmz/sysmas -+ -+ cmvx=cmvx/sysmas -+ cmvy=cmvy/sysmas -+ cmvz=cmvz/sysmas -+ -+c remove centre of mass motion -+ -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ vxx(i)=vxx(i)-cmvx -+ vyy(i)=vyy(i)-cmvy -+ vzz(i)=vzz(i)-cmvz -+ -+ else -+ -+ vxx(i)=0.d0 -+ vyy(i)=0.d0 -+ vzz(i)=0.d0 -+ -+ endif -+ -+ enddo -+ -+c zero angular momentum about centre of mass - non-periodic system -+ -+ if(imcon.eq.0)then -+ -+c move to centre of mass origin -+ -+ do i=1,natms -+ -+ xxx(i)=xxx(i)-cmx -+ yyy(i)=yyy(i)-cmy -+ zzz(i)=zzz(i)-cmz -+ -+ enddo -+ -+c angular momentum accumulators -+ -+ amx=0.d0 -+ amy=0.d0 -+ amz=0.d0 -+ -+c rotational inertia accumulators -+ -+ do i=1,9 -+ roti(i)=0.d0 -+ enddo -+ -+ do i=iatm1,iatm2 -+ -+ amx=amx+weight(i)*(yyy(i)*vzz(i)-zzz(i)*vyy(i)) -+ amy=amy+weight(i)*(zzz(i)*vxx(i)-xxx(i)*vzz(i)) -+ amz=amz+weight(i)*(xxx(i)*vyy(i)-yyy(i)*vxx(i)) -+ -+ rsq=xxx(i)**2+yyy(i)**2+zzz(i)**2 -+ roti(1)=roti(1)+weight(i)*(xxx(i)*xxx(i)-rsq) -+ roti(2)=roti(2)+weight(i)* xxx(i)*yyy(i) -+ roti(3)=roti(3)+weight(i)* xxx(i)*zzz(i) -+ roti(5)=roti(5)+weight(i)*(yyy(i)*yyy(i)-rsq) -+ roti(6)=roti(6)+weight(i)* yyy(i)*zzz(i) -+ roti(9)=roti(9)+weight(i)*(zzz(i)*zzz(i)-rsq) -+ -+ enddo -+ -+c complete rotational inertia matrix -+ -+ roti(4)=roti(2) -+ roti(7)=roti(3) -+ roti(8)=roti(6) -+ -+c global sum -+ -+ if(mxnode.gt.1)then -+ buffer(13)=amx -+ buffer(14)=amy -+ buffer(15)=amz -+ do i=1,9 -+ buffer(15+i)=roti(i) -+ enddo -+ call gdsum(buffer(13),12,buffer(1)) -+ amx=buffer(13) -+ amy=buffer(14) -+ amz=buffer(15) -+ do i=1,9 -+ roti(i)=buffer(15+i) -+ enddo -+ endif -+ -+c invert rotational inertia matrix -+ -+ call invert (roti,rotinv,det) -+ -+c correction to angular velocity -+ -+ wxx=rotinv(1)*amx+rotinv(2)*amy+rotinv(3)*amz -+ wyy=rotinv(4)*amx+rotinv(5)*amy+rotinv(6)*amz -+ wzz=rotinv(7)*amx+rotinv(8)*amy+rotinv(9)*amz -+ -+c correction to linear velocity -+ -+ do i=1,natms -+ -+ if(lstfrz(i).eq.0.and.weight(i).gt.1.d-6)then -+ -+ vxx(i)=vxx(i)+(wyy*zzz(i)-wzz*yyy(i)) -+ vyy(i)=vyy(i)+(wzz*xxx(i)-wxx*zzz(i)) -+ vzz(i)=vzz(i)+(wxx*yyy(i)-wyy*xxx(i)) -+ -+ endif -+ -+ enddo -+ -+c reset positions to original reference frame -+ -+ do i=1,natms -+ -+ xxx(i)=xxx(i)+cmx -+ yyy(i)=yyy(i)+cmy -+ zzz(i)=zzz(i)+cmz -+ -+ enddo -+ -+ endif -+ -+c calculate temperature -+ -+ sumke=0.d0 -+ -+ do i=iatm1,iatm2 -+ -+ sumke=sumke+weight(i)* -+ x (vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ -+ enddo -+ -+ sumke=0.5d0*sumke -+ if(mxnode.gt.1)then -+ buffer(1)=sumke -+ call gdsum(buffer(1),1,buffer(2)) -+ sumke=buffer(1) -+ endif -+ -+c apply temperature scaling -+ -+ scale=1.d0 -+ if(sumke.gt.1.d-6)scale=sqrt(sigma/sumke) -+ -+ do i=1,natms -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+ if(ngrp.gt.0)then -+ call quatqnch(idnode,imcon,mxnode,natms,ngrp) -+ -+ endif -+ -+ return -+ end subroutine vscaleg -+ -+ subroutine shlqnch(idnode,mxnode,ntshl,temp) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for quenching the internal bond energies -+c in ions defined by shell model -+c -+c copyright - daresbury laboratory 1994 -+c author w.smith july 1994 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ integer idnode,mxnode,ntshl,ishl1,ishl2,i,j,k,m -+ real(8) temp,pke,rmu,dvx,dvy,dvz,tmx,tmy,tmz,scl -+ -+c permitted core-shell internal kinetic energy -+ -+ pke=boltz*temp*1.d-4 -+ -+c block indices -+ -+ ishl1 = (idnode*ntshl)/mxnode+1 -+ ishl2 = ((idnode+1)*ntshl)/mxnode -+ -+c calculate core and shell velocities from total momentum -+ -+ m=0 -+ do k=ishl1,ishl2 -+ -+ m=m+1 -+ -+ i=listshl(m,2) -+ j=listshl(m,3) -+ -+ rmu=(weight(i)*weight(j))/(weight(i)+weight(j)) -+ -+ if(rmu.gt.0.d0)then -+ -+ dvx=vxx(j)-vxx(i) -+ dvy=vyy(j)-vyy(i) -+ dvz=vzz(j)-vzz(i) -+ -+ scl=sqrt(pke/(rmu*(dvx*dvx+dvy*dvy+dvz*dvz))) -+ -+ tmx=weight(i)*vxx(i)+weight(j)*vxx(j) -+ tmy=weight(i)*vyy(i)+weight(j)*vyy(j) -+ tmz=weight(i)*vzz(i)+weight(j)*vzz(j) -+ -+ vxx(i)=tmx/(weight(i)+weight(j))-scl*rmu*dvx/weight(i) -+ vxx(j)=tmx/(weight(i)+weight(j))+scl*rmu*dvx/weight(j) -+ vyy(i)=tmy/(weight(i)+weight(j))-scl*rmu*dvy/weight(i) -+ vyy(j)=tmy/(weight(i)+weight(j))+scl*rmu*dvy/weight(j) -+ vzz(i)=tmz/(weight(i)+weight(j))-scl*rmu*dvz/weight(i) -+ vzz(j)=tmz/(weight(i)+weight(j))+scl*rmu*dvz/weight(j) -+ -+ endif -+ -+ enddo -+ -+ if(mxnode.gt.1) call shlmerge(idnode,mxnode,ntshl) -+ -+ return -+ end subroutine shlqnch -+ -+ subroutine regauss -+ x (idnode,imcon,mxnode,natms,ngrp,nscons,ntcons, -+ x ntshl,keyshl,sigma,temp,tolnce) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for resetting the system velocities -+c -+c copyright - daresbury laboratory -+c author - w. smith may 2007 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,imcon,mxnode,natms,ngrp,nscons -+ integer ntcons,ntshl,i,k,keyshl -+ real(8) temp,tolnce,sigma,rsq -+ -+c set atomic velocities from gaussian distribution -+ -+ call gauss(natms,vxx,vyy,vzz) -+ -+ do i=1,natms -+ -+ rsq=sqrt(rmass(i)) -+ vxx(i)=vxx(i)*rsq -+ vyy(i)=vyy(i)*rsq -+ vzz(i)=vzz(i)*rsq -+ -+ enddo -+ -+ if(ntcons.gt.0)call quench -+ x (imcon,idnode,mxnode,natms,nscons,tolnce) -+ -+ if(ngrp.gt.0)call quatqnch -+ x (idnode,imcon,mxnode,natms,ngrp) -+ -+ if(keyshl.eq.1)then -+ -+ do k=1,4 -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ call shlqnch(idnode,mxnode,ntshl,temp) -+ -+ enddo -+ -+ else -+ -+ call vscaleg(idnode,mxnode,imcon,natms,ngrp,sigma) -+ -+ endif -+ -+ return -+ end subroutine regauss -+ -+ subroutine impact(khit,natms,idnode,mxnode,ehit,xhit,yhit,zhit) -+ -+c********************************************************************* -+c -+c DLPOLY routinue for impacting a selected atom with a specified -+c recoil energy -+c -+c copyright daresbury laboratory -+c author w.smith september 2007 -+c -+c********************************************************************* -+ -+ use config_module -+ use ensemble_tools_module -+ -+ implicit none -+ -+ integer i,khit,natms,idnode,mxnode,iatm0,iatm1 -+ real(8) ehit,vxo,vyo,vzo,xhit,yhit,zhit,fac,smass,vel -+ -+c store original particle velocity -+ -+ vxo=vxx(khit) -+ vyo=vyy(khit) -+ vzo=vzz(khit) -+ -+c determine recoil velocity -+ -+ vel=sqrt(2.d0*ehit/(weight(khit)*(xhit**2+yhit**2+zhit**2))) -+ -+c reassign particle velocity -+ -+ vxx(khit)=vel*xhit -+ vyy(khit)=vel*yhit -+ vzz(khit)=vel*zhit -+ -+c determine system mass -+ -+ smass=getmass(natms,idnode,mxnode) -+ -+c calculate net system velocity -+ -+ vxo=(vxx(khit)-vxo)*weight(khit)/smass -+ vyo=(vyy(khit)-vyo)*weight(khit)/smass -+ vzo=(vzz(khit)-vzo)*weight(khit)/smass -+ -+c reset system net velocity to zero -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vxo -+ vyy(i)=vyy(i)-vyo -+ vzz(i)=vzz(i)-vzo -+ -+ enddo -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ return -+ end subroutine impact -+ -+ end module temp_scalers_module -diff -urN dl_class_1.9.orig/srcmod/tersoff_module.f dl_class_1.9/srcmod/tersoff_module.f ---- dl_class_1.9.orig/srcmod/tersoff_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/tersoff_module.f 2011-04-16 16:13:06.000000000 +0200 -@@ -0,0 +1,1011 @@ -+ module tersoff_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining tersoff potential arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ integer, allocatable :: lstter(:),ltpter(:),lattsf(:) -+ real(8), allocatable :: prmter(:,:),prmter2(:,:) -+ real(8), allocatable :: vmbp(:,:,:),gmbp(:,:,:) -+ real(8), allocatable :: xtf(:),ytf(:),ztf(:),rtf(:) -+ real(8), allocatable :: ert(:),eat(:),grt(:),gat(:) -+ real(8), allocatable :: scr(:),gcr(:),gam(:),gvr(:) -+ -+ save xtf,ytf,ztf,rtf,ert,eat,grt,gat,scr,gcr,gam,filter -+ save prmter,prmter2,lstter,ltpter,lattsf,vmbp,gmbp -+ -+ contains -+ -+ subroutine alloc_ter_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=20 -+ -+ integer i,fail,idnode,npairs -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ npairs=(mxter*(mxter+1))/2 -+ allocate (prmter(mxter,mxpter),stat=fail(1)) -+ allocate (prmter2(2,npairs),stat=fail(2)) -+ allocate (lstter(mxter),stat=fail(3)) -+ allocate (ltpter(mxter),stat=fail(4)) -+ allocate (lattsf(mxatms),stat=fail(5)) -+ allocate (xtf(mxatms),stat=fail(6)) -+ allocate (ytf(mxatms),stat=fail(7)) -+ allocate (ztf(mxatms),stat=fail(8)) -+ allocate (rtf(mxatms),stat=fail(9)) -+ allocate (ert(mxatms),stat=fail(10)) -+ allocate (eat(mxatms),stat=fail(11)) -+ allocate (grt(mxatms),stat=fail(12)) -+ allocate (gat(mxatms),stat=fail(13)) -+ allocate (scr(mxatms),stat=fail(14)) -+ allocate (gcr(mxatms),stat=fail(15)) -+ allocate (gam(mxatms),stat=fail(16)) -+ allocate (gvr(mxatms),stat=fail(17)) -+ allocate (vmbp(mxgrid,npairs,3),stat=fail(18)) -+ allocate (gmbp(mxgrid,npairs,3),stat=fail(19)) -+ allocate (filter(mxsite),stat=fail(20)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1945) -+ enddo -+ -+ end subroutine alloc_ter_arrays -+ -+ subroutine define_tersoff -+ x (safe,lunits,lmols,idnode,ntpter,ntpatm,rctter,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining tersoff potentials -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1 -+ character*1 message(80) -+ integer fail,idnode,ntpter,ntpatm,i,idum,j,itpter -+ integer keypot,jtpatm,k,katm0,katm1,icross,npairs,ktyp -+ real(8) rctter,engunit -+ real(8), allocatable :: parpot(:) -+ data fail/0/ -+ -+ allocate (parpot(mxpter),stat=fail) -+ if(fail.ne.0)call error(idnode,1955) -+ -+ ntpter=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified tersoff ', -+ x 'atom potentials',i10)") ntpter -+ write(nrite,"(/,/,16x,'atom ',3x,' key',30x, -+ x 'parameters'/,/)") -+ -+ endif -+ if(ntpter.gt.mxter) call error(idnode,88) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ rctter=0.d0 -+ -+ do i=1,mxter -+ lstter(i)=-1 -+ enddo -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ k=0 -+ do i=1,mxter -+ do j=1,i -+ -+ k=k+1 -+ prmter2(1,k)=0.d0 -+ prmter2(2,k)=0.d0 -+ -+ enddo -+ enddo -+ -+ do itpter=1,ntpter -+ -+ do i=1,mxpter -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call copystring(record,message,80) -+ call getword(atom0,record,8,lenrec) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'ters') then -+ -+ keypot=1 -+ -+ else -+ -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,1972) -+ -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) ! A_i -+ parpot(2)=dblstr(record,lenrec,idum) ! a_i -+ parpot(3)=dblstr(record,lenrec,idum) ! B_i -+ parpot(4)=dblstr(record,lenrec,idum) ! b_i -+ parpot(5)=dblstr(record,lenrec,idum) ! R_i -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ parpot(6)=dblstr(record,lenrec,idum) ! S_i -+ parpot(7)=dblstr(record,lenrec,idum) ! beta_i -+ parpot(8)=dblstr(record,lenrec,idum) ! eta_i -+ parpot(9)=dblstr(record,lenrec,idum) ! c_i -+ parpot(10)=dblstr(record,lenrec,idum) ! d_i -+ parpot(11)=dblstr(record,lenrec,idum) ! h_i -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(16x,a8,2x,a4,2x,1p,5e13.5)") -+ x atom0,keyword(1:4),(parpot(j),j=1,5) -+ write(nrite,"(32x,1p,5e13.5)")(parpot(j),j=6,mxpter) -+ -+ endif -+ -+ katm0=0 -+ -+ do jtpatm=1,ntpatm -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ enddo -+ -+ if(katm0.eq.0)call error(idnode,92) -+ -+ filter(katm0)=.true. -+ -+c convert parameters to internal units -+ -+ if(keypot.eq.1)then -+ -+ parpot(1)=parpot(1)*engunit -+ parpot(3)=parpot(3)*engunit -+ -+ endif -+ if(lstter(katm0).gt.-1) call error(idnode,21) -+ lstter(katm0)=itpter -+ ltpter(itpter)=keypot -+ -+c calculate max tersoff cutoff -+ -+ rctter=max(rctter,parpot(6)) -+ -+c store tersoff single atom potential parameters -+ -+ do i=1,mxpter -+ prmter(itpter,i)=parpot(i) -+ enddo -+ -+ enddo -+ -+ if(rctter.lt.1.d-6)call error(idnode,1953) -+ -+c start processing double atom potential parameters -+ -+ npairs=(ntpter*(ntpter+1))/2 -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,"(/,/,1x,'number of tersoff ', -+ x 'cross terms',i10)") npairs -+ write(nrite,"(/,/,16x,'atom ','atom ',10x, -+ x 'parameters'/,/)") -+ -+ endif -+ -+ do icross=1,npairs -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+ call getword(atom0,record,8,lenrec) -+ call getword(atom1,record,8,lenrec) -+ -+ parpot(1)=dblstr(record,lenrec,idum) ! chi_ij -+ parpot(2)=dblstr(record,lenrec,idum) ! omega_ij -+ -+ katm0=0 -+ katm1=0 -+ -+ do jtpatm=1,ntpatm -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0)call error(idnode,92) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ -+ ktyp=loc2(lstter(katm0),lstter(katm1)) -+ prmter2(1,ktyp)=parpot(1) -+ prmter2(2,ktyp)=parpot(2) -+ -+ if(idnode.eq.0)write(nrite,"(16x,a8,a8,1p,2e13.5)") -+ x atom0,atom1,(parpot(j),j=1,2) -+ -+ enddo -+ -+c generate tersoff interpolation arrays -+ -+ call tergen(ntpatm,rctter) -+ -+ return -+ end subroutine define_tersoff -+ -+ subroutine tergen(ntpatm,rctter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for generating potential energy and -+c force arrays for tersoff forces only -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w. smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer ntpatm,katm0,katm1,ipt,jpt,kpt,i -+ real(8) dlrpot,rctter,baij,saij,bbij,sbij,rij,sij,att,arg -+ real(8) rrr,rep -+ -+c define grid resolution for potential arrays -+ -+ dlrpot=rctter/dble(mxgrid-4) -+ -+c construct arrays for all types of short ranged potential -+ -+ do katm0=1,ntpatm -+ -+ if(filter(katm0))then -+ -+ ipt=lstter(katm0) -+ -+ do katm1=1,katm0 -+ -+ if(filter(katm1))then -+ -+ jpt=lstter(katm1) -+ -+ if((ltpter(ipt).eq.1).and.(ltpter(jpt).eq.1))then -+ -+ kpt=loc2(ipt,jpt) -+ -+c define tersoff parameters -+ -+ baij=sqrt(prmter(ipt,1)*prmter(jpt,1)) -+ saij=0.5d0*(prmter(ipt,2)+prmter(jpt,2)) -+ bbij=sqrt(prmter(ipt,3)*prmter(jpt,3)) -+ sbij=0.5d0*(prmter(ipt,4)+prmter(jpt,4)) -+ rij=sqrt(prmter(ipt,5)*prmter(jpt,5)) -+ sij=sqrt(prmter(ipt,6)*prmter(jpt,6)) -+ -+c store potential cutoff -+ -+ vmbp(1,kpt,1)=sij -+ -+c calculate screening function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ if(rrr.le.rij)then -+ -+ vmbp(i,kpt,1)=1.d0 -+ gmbp(i,kpt,1)=0.d0 -+ -+ else -+ -+ arg=pi*(rrr-rij)/(sij-rij) -+ vmbp(i,kpt,1)=0.5d0*(1.d0+cos(arg)) -+ gmbp(i,kpt,1)=0.5d0*pi*rrr*sin(arg)/(sij-rij) -+ -+ endif -+ -+ enddo -+ -+c calculate screened repulsion function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ rep=baij*exp(-saij*rrr) -+ vmbp(i,kpt,2)=rep*vmbp(i,kpt,1) -+ gmbp(i,kpt,2)=rep*(gmbp(i,kpt,1)+ -+ x saij*rrr*vmbp(i,kpt,1)) -+ -+ enddo -+ -+c calculate screened attraction function -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ -+ att=bbij*exp(-sbij*rrr) -+ vmbp(i,kpt,3)=att*vmbp(i,kpt,1) -+ gmbp(i,kpt,3)=att*(gmbp(i,kpt,1)+ -+ x sbij*rrr*vmbp(i,kpt,1)) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine tergen -+ -+ subroutine tersoff -+ x (idnode,mxnode,natms,imcon,rctter,engter,virter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating potential and forces -+c due to a tersoff potential -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped, cubic or orthorhombic -+c cell geometry -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,natms,imcon,nix,niy,niz,i,j,nbx -+ integer nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz,jcell,iter -+ integer limit,ii,iatm -+ real(8) rctter,engter,virter,xm,ym,zm,det,cprp -+ real(8) xdc,ydc,zdc,sxx,syy,szz,strs -+ -+ dimension nix(27),niy(27),niz(27),cprp(10),strs(6) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise potential energy and virial -+ -+ engter=0.d0 -+ virter=0.d0 -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ -+ do i=1,natms -+ -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ -+ enddo -+ -+ cell(1)=2.d0*xm+rctter -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rctter -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rctter -+ -+ endif -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,1974) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rctter+1.d-6)) -+ nby=int(cprp(8)/(rctter+1.d-6)) -+ nbz=int(cprp(9)/(rctter+1.d-6)) -+ if(nbx.lt.3.or.nby.lt.3.or.nbz.lt.3)then -+ -+ if(idnode.eq.0)then -+ -+ write(nrite,'(a,3i5)') -+ x 'tersoff link cell decomposition is',nbx,nby,nbz -+ -+ endif -+ -+ call error(idnode,1977) -+ -+ endif -+ ncells=nbx*nby*nbz -+ -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,'(a,i6)') -+ x 'number of required link cells in tersoff.f is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in tersoff.f is ',mxcell -+ call error(idnode,1976) -+ -+ endif -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of angles -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+c construct mini-list of neighbour cell contents -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ lattsf(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ iatm=lattsf(ii) -+ iter=lstter(ltype(iatm)) -+ -+ if(mod(iatm,mxnode).eq.idnode.and.iter.ge.0)then -+ -+c construct working arrays by interpolation -+ -+ call terint(iatm,limit,rctter) -+ -+c calculate three body (attractive) terms -+ -+ call tersoff3(ii,limit,engter,virter,strs) -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c calculate stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,1978) -+ -+c global sum of three body potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engter -+ buffer(2)=virter -+ call gdsum(buffer(1),2,buffer(3)) -+ engter=buffer(1) -+ virter=buffer(2) -+ -+ endif -+ -+c remove effect of double counting -+ -+ engter=0.5d0*engter -+ virter=0.5d0*virter -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+ return -+ end subroutine tersoff -+ -+ subroutine terint(iatm,limit,rctter) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for constructing working arrays for -+c a tersoff potential using interpolation -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer iatm,jatm,jj,limit,iter,jter,jjter,ll -+ real(8) rctter,sxij,syij,szij,ppp,t1,t2,rdr -+ real(8) vk0,vk1,vk2,gk0,gk1,gk2 -+ -+ rdr=dble(mxgrid-4)/rctter -+ iter=lstter(ltype(iatm)) -+ -+c initialise working arrays -+ -+ do jj=1,limit -+ -+ xtf(jj)=0.d0 -+ ytf(jj)=0.d0 -+ ztf(jj)=0.d0 -+ rtf(jj)=0.d0 -+ ert(jj)=0.d0 -+ eat(jj)=0.d0 -+ grt(jj)=0.d0 -+ gat(jj)=0.d0 -+ scr(jj)=0.d0 -+ gcr(jj)=0.d0 -+ -+ enddo -+ -+c construct working arrays -+ -+ do jj=1,limit -+ -+ jatm=lattsf(jj) -+ jter=lstter(ltype(jatm)) -+ -+ if(jatm.ne.iatm.and.jter.ge.0)then -+ -+ sxij=xxx(jatm)-xxx(iatm) -+ sxij=sxij-nint(sxij) -+ syij=yyy(jatm)-yyy(iatm) -+ syij=syij-nint(syij) -+ szij=zzz(jatm)-zzz(iatm) -+ szij=szij-nint(szij) -+ -+ xtf(jj)=cell(1)*sxij+cell(4)*syij+cell(7)*szij -+ ytf(jj)=cell(2)*sxij+cell(5)*syij+cell(8)*szij -+ ztf(jj)=cell(3)*sxij+cell(6)*syij+cell(9)*szij -+ rtf(jj)=sqrt(xtf(jj)**2+ytf(jj)**2+ztf(jj)**2) -+ xtf(jj)=xtf(jj)/rtf(jj) -+ ytf(jj)=ytf(jj)/rtf(jj) -+ ztf(jj)=ztf(jj)/rtf(jj) -+ -+ jjter=loc2(iter,jter) -+ if(rtf(jj).le.vmbp(1,jjter,1))then -+ -+ ll=int(rdr*rtf(jj)) -+ ppp=rtf(jj)*rdr-dble(ll) -+ -+c interpolate screening function -+ -+ vk0=vmbp(ll,jjter,1) -+ vk1=vmbp(ll+1,jjter,1) -+ vk2=vmbp(ll+2,jjter,1) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ scr(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of screening function -+ -+ gk0=gmbp(ll,jjter,1) -+ gk1=gmbp(ll+1,jjter,1) -+ gk2=gmbp(ll+2,jjter,1) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gcr(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+c interpolate repulsive component of energy -+ -+ vk0=vmbp(ll,jjter,2) -+ vk1=vmbp(ll+1,jjter,2) -+ vk2=vmbp(ll+2,jjter,2) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ ert(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of repulsive function -+ -+ gk0=gmbp(ll,jjter,2) -+ gk1=gmbp(ll+1,jjter,2) -+ gk2=gmbp(ll+2,jjter,2) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ grt(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+c interpolate attractive component of energy -+ -+ vk0=vmbp(ll,jjter,3) -+ vk1=vmbp(ll+1,jjter,3) -+ vk2=vmbp(ll+2,jjter,3) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ eat(jj)=t1+(t2-t1)*ppp*0.5d0 -+ -+c interpolate derivative of attractive function -+ -+ gk0=gmbp(ll,jjter,3) -+ gk1=gmbp(ll+1,jjter,3) -+ gk2=gmbp(ll+2,jjter,3) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gat(jj)=-(t1+(t2-t1)*ppp*0.5d0)/rtf(jj) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine terint -+ -+ subroutine tersoff3(ii,limit,engter,virter,strs) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating three body contributions -+c to a tersoff potential and tersoff potential, virial and -+c atomic forces -+c -+c based on potential form defined in: -+c J. Tersoff, Phys. Rev. B 39 (1989) 5566. -+c -+c copyright - daresbury laboratory -+c author - w.smith dec 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical flag -+ integer iatm,jatm,katm,limit,ii,jj,kk -+ integer iter,jter,kter,jjter,kkter -+ real(8) cost,gtheta,ci,di,hi,gamma,gam_j,gam_k,eterm,gterm,strs -+ real(8) fxa,fya,fza,fxc,fyc,fzc,engter,virter,vterm,gam_ij,bi,ei -+ -+ dimension strs(6) -+ -+ iatm=lattsf(ii) -+ iter=lstter(ltype(iatm)) -+ -+ bi=prmter(iter,7) -+ ei=prmter(iter,8) -+ ci=prmter(iter,9) -+ di=prmter(iter,10) -+ hi=prmter(iter,11) -+ -+ do jj=1,limit -+ -+ jatm=lattsf(jj) -+ jter=lstter(ltype(jatm)) -+ if(jter.ge.0.and.iatm.ne.jatm)then -+ -+ jjter=loc2(iter,jter) -+ if(rtf(jj).le.vmbp(1,jjter,1))then -+ -+ flag=.false. -+ -+c potential energy and virial terms -+ -+ vterm=0.d0 -+ eterm=0.d0 -+ -+c initialise work arrays -+ -+ do kk=1,limit -+ -+ gam(kk)=0.d0 -+ gvr(kk)=0.d0 -+ -+ enddo -+ -+c calculate bond factor -+ -+ do kk=1,limit -+ -+ katm=lattsf(kk) -+ kter=lstter(ltype(katm)) -+ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then -+ -+ kkter=loc2(iter,kter) -+ -+ if(rtf(kk).le.vmbp(1,kkter,1))then -+ -+ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ztf(jj)*ztf(kk)) -+ gtheta=1.d0+(ci/di)**2-ci**2/(di**2+(hi-cost)**2) -+ eterm=eterm+gtheta*prmter2(2,kkter)*scr(kk) -+ vterm=vterm+gtheta*prmter2(2,kkter)*gcr(kk)*rtf(kk) -+ gvr(kk)=2.d0*ci**2*(hi-cost)/(di**2+(hi-cost)**2)**2 -+ gam(kk)=gtheta -+ flag=.true. -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ if(flag)then -+ -+c tersoff energy and virial -+ -+ gam_ij=prmter2(1,jjter)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei) -+ gamma=0.5d0*prmter2(1,jjter)*bi*(bi*eterm)**(ei-1.d0)* -+ x eat(jj)*(1.d0+(bi*eterm)**ei)**(-0.5d0/ei-1.d0) -+ engter=engter+ert(jj)-gam_ij*eat(jj) -+ virter=virter+gamma*vterm+(grt(jj)-gam_ij*gat(jj))*rtf(jj) -+ -+c calculate 3-body forces -+ -+ do kk=1,limit -+ -+ katm=lattsf(kk) -+ kter=lstter(ltype(katm)) -+ if(kter.ge.0.and.iatm.ne.katm.and.jatm.ne.katm)then -+ -+ kkter=loc2(iter,kter) -+ if(rtf(kk).le.vmbp(1,kkter,1))then -+ -+ gam_j=0.5d0*gamma*prmter2(2,kkter)*scr(kk)*gvr(kk) -+ gam_k=0.5d0*gamma*prmter2(2,kkter)*gcr(kk)*gam(kk) -+ -+c calculate contribution to atomic forces -+ -+ cost=(xtf(jj)*xtf(kk)+ytf(jj)*ytf(kk)+ -+ x ztf(jj)*ztf(kk)) -+ -+ fxa=gam_j*(xtf(kk)-xtf(jj)*cost)/rtf(jj) -+ fya=gam_j*(ytf(kk)-ytf(jj)*cost)/rtf(jj) -+ fza=gam_j*(ztf(kk)-ztf(jj)*cost)/rtf(jj) -+ -+ fxc=gam_j*(xtf(jj)-xtf(kk)*cost)/rtf(kk)- -+ x gam_k*xtf(kk) -+ fyc=gam_j*(ytf(jj)-ytf(kk)*cost)/rtf(kk)- -+ x gam_k*ytf(kk) -+ fzc=gam_j*(ztf(jj)-ztf(kk)*cost)/rtf(kk)- -+ x gam_k*ztf(kk) -+ -+ fxx(jatm)=fxx(jatm)+fxa -+ fyy(jatm)=fyy(jatm)+fya -+ fzz(jatm)=fzz(jatm)+fza -+ -+ fxx(iatm)=fxx(iatm)-(fxa+fxc) -+ fyy(iatm)=fyy(iatm)-(fya+fyc) -+ fzz(iatm)=fzz(iatm)-(fza+fzc) -+ -+ fxx(katm)=fxx(katm)+fxc -+ fyy(katm)=fyy(katm)+fyc -+ fzz(katm)=fzz(katm)+fzc -+ -+c calculate contributions to stress tensor -+ -+ strs(1)=strs(1)+(fxa*xtf(jj)*rtf(jj)+ -+ x fxc*xtf(kk)*rtf(kk)) -+ strs(2)=strs(2)+(fxa*ytf(jj)*rtf(jj)+ -+ x fxc*ytf(kk)*rtf(kk)) -+ strs(3)=strs(3)+(fxa*ztf(jj)*rtf(jj)+ -+ x fxc*ztf(kk)*rtf(kk)) -+ strs(4)=strs(4)+(fya*ytf(jj)*rtf(jj)+ -+ x fyc*ytf(kk)*rtf(kk)) -+ strs(5)=strs(5)+(fya*ztf(jj)*rtf(jj)+ -+ x fyc*ztf(kk)*rtf(kk)) -+ strs(6)=strs(6)+(fza*ztf(jj)*rtf(jj)+ -+ x fzc*ztf(kk)*rtf(kk)) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ gam_ij=prmter2(1,jjter) -+ engter=engter+ert(jj)-gam_ij*eat(jj) -+ virter=virter+(grt(jj)-gam_ij*gat(jj))*rtf(jj) -+ -+ endif -+ -+c calculate two body force terms -+ -+ gterm=0.5d0*(grt(jj)-gam_ij*gat(jj)) -+ fxx(iatm)=fxx(iatm)+xtf(jj)*gterm -+ fyy(iatm)=fyy(iatm)+ytf(jj)*gterm -+ fzz(iatm)=fzz(iatm)+ztf(jj)*gterm -+ fxx(jatm)=fxx(jatm)-xtf(jj)*gterm -+ fyy(jatm)=fyy(jatm)-ytf(jj)*gterm -+ fzz(jatm)=fzz(jatm)-ztf(jj)*gterm -+ -+c calculate contributions to stress tensor -+ -+ strs(1)=strs(1)-gterm*rtf(jj)*xtf(jj)*xtf(jj) -+ strs(2)=strs(2)-gterm*rtf(jj)*xtf(jj)*ytf(jj) -+ strs(3)=strs(3)-gterm*rtf(jj)*xtf(jj)*ztf(jj) -+ strs(4)=strs(4)-gterm*rtf(jj)*ytf(jj)*ytf(jj) -+ strs(5)=strs(5)-gterm*rtf(jj)*ytf(jj)*ztf(jj) -+ strs(6)=strs(6)-gterm*rtf(jj)*ztf(jj)*ztf(jj) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine tersoff3 -+ -+ end module tersoff_module -diff -urN dl_class_1.9.orig/srcmod/tether_module.f dl_class_1.9/srcmod/tether_module.f ---- dl_class_1.9.orig/srcmod/tether_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/tether_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,447 @@ -+ module tether_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining tether potential arrays -+c -+c copyright - daresbury laboratory -+c author - w. smith oct 2003 -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use parse_module -+ use setup_module -+ use site_module -+ use utility_module -+ -+ implicit none -+ -+ real(8), allocatable :: prmtet(:,:) -+ integer, allocatable :: listtet(:,:) -+ integer, allocatable :: numteth(:),keytet(:),lsttet(:) -+ real(8), allocatable :: xxs(:),yys(:),zzs(:) -+ -+ save prmtet,lsttet,listtet,numteth,keytet,xxs,yys,zzs -+ -+ contains -+ -+ subroutine alloc_tet_arrays(idnode) -+ -+ implicit none -+ -+ integer, parameter :: nnn=8 -+ -+ integer i,fail,idnode -+ dimension fail(nnn) -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate (prmtet(mxteth,mxpbnd),stat=fail(1)) -+ allocate (numteth(mxtmls),stat=fail(2)) -+ allocate (keytet(mxteth),stat=fail(3)) -+ allocate (lsttet(mxteth),stat=fail(4)) -+ allocate (listtet(msteth,2),stat=fail(5)) -+ allocate (xxs(mxatms),stat=fail(6)) -+ allocate (yys(mxatms),stat=fail(7)) -+ allocate (zzs(mxatms),stat=fail(8)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1260) -+ enddo -+ -+ do i=1,mxtmls -+ numteth(i)=0 -+ enddo -+ -+ end subroutine alloc_tet_arrays -+ -+ subroutine define_tethers -+ x (safe,idnode,itmols,nteth,nsite,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining tether bonds -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ character*8 keyword -+ character*1 message(80) -+ real(8) engunit -+ integer idnode,itmols,nteth,nsite,ntmp,iteth,iteth1,idum -+ integer iatm1,isite1,j,i -+ -+ ntmp=intstr(record,lenrec,idum) -+ numteth(itmols)=numteth(itmols)+ntmp -+ if(idnode.eq.0)then -+ write(nrite,"(/,1x,'number of tethered atoms ', -+ x 6x,i10)")ntmp -+ write(nrite,"(/,' tethered atom details:',/,/, -+ x 21x,7x,'key',6x,'atom',19x,'parameters',/) ") -+ endif -+ -+ iteth1=numteth(itmols) -+ do iteth=1,iteth1 -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ call strip(record,lenrec) -+ call copystring(record,message,80) -+ call lowcase(record,4) -+ call getword(keyword,record,4,lenrec) -+ -+ iatm1=intstr(record,lenrec,idum) -+ -+c test for frozen atom -+ -+ isite1=nsite-numsit(itmols)+iatm1 -+ -+ if(lfzsit(isite1).ne.0)then -+ -+ numteth(itmols)=numteth(itmols)-1 -+ if(idnode.eq.0)write(nrite,'(14x,a16,40a1)') -+ x '*** frozen *** ',(message(i),i=1,40) -+ -+ else -+ -+ nteth=nteth+1 -+ if(nteth.gt.mxteth)call error(idnode,62) -+ -+ if(keyword(1:4).eq.'harm')then -+ keytet(nteth)=1 -+ elseif(keyword(1:4).eq.'rhrm')then -+ keytet(nteth)=2 -+ elseif(keyword(1:4).eq.'quar')then -+ keytet(nteth)=3 -+ else -+ if(idnode.eq.0)write(nrite,*)message -+ call error(idnode,450) -+ endif -+ -+ lsttet(nteth)=iatm1 -+ prmtet(nteth,1)=dblstr(record,lenrec,idum) -+ prmtet(nteth,2)=dblstr(record,lenrec,idum) -+ prmtet(nteth,3)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(27x,a4,i10,1p,9e12.4)") -+ x keyword(1:4),lsttet(nteth), -+ x (prmtet(nteth,j),j=1,mxpbnd) -+ -+c convert energy units to internal units -+ -+ if(abs(keytet(nteth)).eq.1)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ elseif(abs(keytet(nteth)).eq.2)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ elseif(abs(keytet(nteth)).eq.3)then -+ prmtet(nteth,1)=prmtet(nteth,1)*engunit -+ prmtet(nteth,2)=prmtet(nteth,2)*engunit -+ prmtet(nteth,3)=prmtet(nteth,3)*engunit -+ endif -+ -+ endif -+ -+ enddo -+ -+ return -+ end subroutine define_tethers -+ -+ subroutine tethfrc -+ x (idnode,mxnode,imcon,natms,nstep,ntteth,engtet,virtet) -+ -+c*********************************************************************** -+c -+c dl_poly routine to tether atoms to initial positions -+c includes stress tensor -+c -+c replicated data version : block data -+c -+c copyright daresbury laboratory 1994 -+c author t.forester feb 1994 -+c amended t.forester dec 1994 : block data -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,imcon,natms,nstep,ntteth,i,ii,ia,kk -+ integer itet1,itet2,fail -+ -+ real(8) engtet,virtet,rab -+ real(8) rrab,omega,gamma -+ -+ real(8), allocatable :: xdab(:),ydab(:),zdab(:) -+ -+ data safe/.true./ -+ -+ allocate (xdab(msbad),ydab(msbad),zdab(msbad),stat=fail) -+ if(fail.ne.0)call error(idnode,1270) -+ -+c set up reference positions at start of job -+ -+ if(nstep.le.1)then -+ -+ do i=1,natms -+ -+ xxs(i)=xxx(i) -+ yys(i)=yyy(i) -+ zzs(i)=zzz(i) -+ -+ enddo -+ -+ endif -+ -+c check size of work arrays -+ -+ if((ntteth-mxnode+1)/mxnode.gt.msbad) call error(idnode,420) -+ -+c block indices -+ -+ itet1=(idnode*ntteth)/mxnode+1 -+ itet2=((idnode+1)*ntteth)/mxnode -+ -+ ii=0 -+ do i=itet1,itet2 -+ -+ ii=ii+1 -+ -+c atomic index -+ -+ ia= listtet(ii,2) -+ -+c tether vector -+ -+ xdab(ii)=xxx(ia)-xxs(ia) -+ ydab(ii)=yyy(ia)-yys(ia) -+ zdab(ii)=zzz(ia)-zzs(ia) -+ -+ enddo -+ -+c ignore periodic boundary condition -+ -+ call images(imcon,0,1,ii,cell,xdab,ydab,zdab) -+ -+c zero tether energy and virial accumulators -+ -+ engtet=0.d0 -+ virtet=0.d0 -+ -+c loop over all specified tethered atoms -+ -+ ii=0 -+ do i=itet1,itet2 -+ -+ ii=ii+1 -+ -+c define components of bond vector -+ -+ rab=sqrt(xdab(ii)**2+ydab(ii)**2+zdab(ii)**2) -+ -+c check for possible zero length vector -+ -+ if(rab.lt.1.d-10)then -+ -+ rrab =0.d0 -+ -+ else -+ -+ rrab=1.d0/rab -+ -+ endif -+ -+c index of potential function parameters -+ -+ kk=listtet(ii,1) -+ -+c calculate scalar constant terms -+ -+ if(keytet(kk).eq.1)then -+ -+c harmonic function -+ -+ omega=0.5d0*prmtet(kk,1)*rab**2 -+ gamma=prmtet(kk,1) -+ -+ elseif(keytet(kk).eq.2)then -+ -+c restrained harmonic: -+ -+ omega=0.5d0*prmtet(kk,1)*(min(rab,prmtet(kk,2)))**2 -+ x +prmtet(kk,1)*prmtet(kk,2)* -+ x (sign(max(rab-prmtet(kk,2),0.d0),rab)) -+ gamma=prmtet(kk,1)*(sign(min(rab,prmtet(kk,2)),rab))*rrab -+ -+ elseif(keytet(kk).eq.3)then -+ -+c quartic potential -+ -+ omega=0.5d0*prmtet(kk,1)*rab**2 + -+ x 1.d0/3.d0*prmtet(kk,2)*rab**3+ -+ x 0.25d0*prmtet(kk,3)*rab**4 -+ gamma=(prmtet(kk,1)*rab + -+ x prmtet(kk,2)*rab**2 + -+ x prmtet(kk,3)*rab**3)*rrab -+ -+ else -+ safe=.false. -+ omega=0.d0 -+ gamma=0.d0 -+ endif -+ -+ gamma=-gamma -+ -+c calculate tether energy and virial -+ -+ engtet=engtet+omega -+ virtet=virtet-gamma*rab*rab -+ -+c index of atom -+ -+ ia=listtet(ii,2) -+ -+c calculate atomic forces -+ -+ fxx(ia)=fxx(ia)+gamma*xdab(ii) -+ fyy(ia)=fyy(ia)+gamma*ydab(ii) -+ fzz(ia)=fzz(ia)+gamma*zdab(ii) -+ -+c stress tensor -+ -+ stress(1)=stress(1)+xdab(ii)*gamma*xdab(ii) -+ stress(2)=stress(2)+xdab(ii)*gamma*ydab(ii) -+ stress(3)=stress(3)+xdab(ii)*gamma*zdab(ii) -+ stress(4)=stress(4)+ydab(ii)*gamma*xdab(ii) -+ stress(5)=stress(5)+ydab(ii)*gamma*ydab(ii) -+ stress(6)=stress(6)+ydab(ii)*gamma*zdab(ii) -+ stress(7)=stress(7)+zdab(ii)*gamma*xdab(ii) -+ stress(8)=stress(8)+zdab(ii)*gamma*ydab(ii) -+ stress(9)=stress(9)+zdab(ii)*gamma*zdab(ii) -+ -+ enddo -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1)call gstate(safe) -+ if(.not.safe)call error(idnode,450) -+ -+c sum contributions to potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(3)=engtet -+ buffer(4)=virtet -+ -+ call gdsum(buffer(3),2,buffer(1)) -+ -+ engtet=buffer(3) -+ virtet=buffer(4) -+ -+ endif -+ -+ deallocate (xdab,ydab,zdab,stat=fail) -+ -+ return -+ end subroutine tethfrc -+ -+ subroutine xscale(idnode,mxnode,natms,keyens,imcon,tstep) -+ -+c*********************************************************************** -+c -+c dl_poly routine to scale positions with change in box shape -+c -+c parallel replicated data version -+c -+c copyright daresbury laboratory 1995 -+c author t.forester october 1995 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,natms,keyens,imcon,iatm0,iatm1,i -+ real(8) tstep,xa,ya,za,totmas,xcmo,ycmo,zcmo -+ -+c assign block of atoms to processor -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if((keyens.eq.4).or.(keyens.eq.6))then -+ -+c berendsen npt/nst -+ -+ do i=iatm0,iatm1 -+ -+ xa=eta(1)*xxs(i)+eta(2)*yys(i)+eta(3)*zzs(i) -+ ya=eta(4)*xxs(i)+eta(5)*yys(i)+eta(6)*zzs(i) -+ za=eta(7)*xxs(i)+eta(8)*yys(i)+eta(9)*zzs(i) -+ -+ xxs(i)=xa -+ yys(i)=ya -+ zzs(i)=za -+ -+ enddo -+ -+ elseif(keyens.eq.5.or.keyens.eq.7)then -+ -+c hoover npt/nst -+ -+ totmas=0.d0 -+ do i=1,natms -+ if(rmass(i).gt.0.d0)totmas=totmas+weight(i) -+ enddo -+ -+ xcmo=0.d0 -+ ycmo=0.d0 -+ zcmo=0.d0 -+ -+ do i=1,natms -+ -+ if(rmass(i).gt.0.d0)then -+ -+ xcmo=xcmo+weight(i)*xxs(i) -+ ycmo=ycmo+weight(i)*yys(i) -+ zcmo=zcmo+weight(i)*zzs(i) -+ -+ endif -+ -+ enddo -+ xcmo=xcmo/totmas -+ ycmo=ycmo/totmas -+ zcmo=zcmo/totmas -+ -+ do i=iatm0,iatm1 -+ -+ xa=xxs(i)-xcmo -+ ya=yys(i)-ycmo -+ za=zzs(i)-zcmo -+ -+ xxs(i)=xxs(i)+tstep*(eta(1)*xa+eta(2)*ya+eta(3)*za) -+ yys(i)=yys(i)+tstep*(eta(2)*xa+eta(5)*ya+eta(6)*za) -+ zzs(i)=zzs(i)+tstep*(eta(3)*xa+eta(6)*ya+eta(9)*za) -+ -+ enddo -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxs,yys,zzs) -+ -+ endif -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxs,yys,zzs,buffer) -+ -+ return -+ end subroutine xscale -+ -+ end module tether_module -+ -diff -urN dl_class_1.9.orig/srcmod/three_body_module.f dl_class_1.9/srcmod/three_body_module.f ---- dl_class_1.9.orig/srcmod/three_body_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/three_body_module.f 2011-02-21 10:56:11.000000000 +0100 -@@ -0,0 +1,882 @@ -+ module three_body_module -+ -+c*********************************************************************** -+c -+c dl_poly module for defining three-body potential arrays -+c copyright - daresbury laboratory -+c author - w. smith sep 2003 -+c adapted - w. smith aug 2008 : solvation, free energy excitation -+c adapted - w. smith jan 2011 : metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use error_module -+ use metafreeze_module -+ use parse_module -+ use setup_module -+ use site_module -+ use solvation_module -+ use utility_module -+ -+ implicit none -+ -+ logical, allocatable :: filter(:) -+ real(8), allocatable :: prmtbp(:,:),rcut3b(:) -+ integer, allocatable :: lsttbp(:),ltptbp(:),lattbp(:) -+ -+ save prmtbp,rcut3b,lsttbp,ltptbp,lattbp,filter -+ -+ contains -+ -+ subroutine alloc_tbp_arrays(idnode) -+ -+ implicit none -+ -+ integer i,fail,idnode -+ dimension fail(6) -+ -+ do i=1,6 -+ fail(i)=0 -+ enddo -+ -+ allocate (prmtbp(mxtbp,mxptbp),stat=fail(1)) -+ allocate (rcut3b(mxtbp),stat=fail(2)) -+ allocate (lsttbp(mxtbp),stat=fail(3)) -+ allocate (ltptbp(mxtbp),stat=fail(4)) -+ allocate (lattbp(mxatms),stat=fail(5)) -+ allocate (filter(mxsite),stat=fail(6)) -+ -+ do i=1,6 -+ if(fail(i).gt.0)call error(idnode,1170) -+ enddo -+ -+ end subroutine alloc_tbp_arrays -+ -+ subroutine define_three_body -+ x (safe,lunits,lmols,idnode,ntptbp,ntpatm,rcuttb,engunit) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for defining three body potentials -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2003 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lunits,lmols -+ character*8 keyword -+ character*8 atom0,atom1,atom2 -+ character*1 message(80) -+ integer idnode,ntptbp,ntpatm,fail,i,itbp,itptbp,keypot -+ integer idum,katm1,katm2,katm0,j,keytbp,ktbp,jtpatm -+ real(8) rcuttb,engunit -+ real(8), allocatable :: parpot(:) -+ -+ data fail/0/ -+ -+ allocate (parpot(mxptbp),stat=fail) -+ if(fail.ne.0)call error(idnode,1180) -+ -+ ntptbp=intstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,"(/,/,1x,'number of specified three ', -+ x 'body potentials',i10)") ntptbp -+ write(nrite,"(/,/,16x,'atom 1 ','atom 2 ','atom 3 ', -+ x 3x,' key',30x,'parameters'/,/)") -+ -+ endif -+ if(ntptbp.gt.mxtbp) call error(idnode,83) -+ if(.not.lunits) call error(idnode,6) -+ if(.not.lmols) call error(idnode,13) -+ -+ do i=1,mxsite -+ filter(i)=.false. -+ enddo -+ -+ do itbp=1,mxtbp -+ lsttbp(itbp)=0 -+ enddo -+ -+ do itbp=1,mxtbp,mx2tbp -+ lsttbp(itbp)=-1 -+ enddo -+ -+ rcuttb=0.d0 -+ -+ do itptbp=1,ntptbp -+ -+ do i=1,mxptbp -+ parpot(i)=0.d0 -+ enddo -+ -+ call getrec(safe,idnode,nfield) -+ if(.not.safe)return -+ -+c Note the order!! atom0 is central -+ -+ call copystring(record,message,80) -+ call getword(atom1,record,8,lenrec) -+ call getword(atom0,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ call lowcase(record,lenrec) -+ call getword(keyword,record,4,lenrec) -+ -+ if(keyword(1:4).eq.'harm') then -+ keypot=0 -+ elseif(keyword(1:4).eq.'thrm') then -+ keypot=1 -+ elseif(keyword(1:4).eq.'shrm') then -+ keypot=2 -+ elseif(keyword(1:4).eq.'bvs1') then -+ keypot=3 -+ elseif(keyword(1:4).eq.'bvs2') then -+ keypot=4 -+ elseif(keyword(1:4).eq.'hbnd') then -+ keypot=5 -+ else -+ if(idnode.eq.0) write(nrite,*) message -+ call error(idnode,442) -+ endif -+ -+ parpot(1)=dblstr(record,lenrec,idum) -+ parpot(2)=dblstr(record,lenrec,idum) -+ parpot(3)=dblstr(record,lenrec,idum) -+ parpot(4)=dblstr(record,lenrec,idum) -+ parpot(5)=dblstr(record,lenrec,idum) -+ -+ if(idnode.eq.0) -+ x write(nrite,"(16x,3a8,4x,a4,1x,1p,9e13.5)") -+ x atom1,atom0,atom2,keyword(1:4),(parpot(j),j=1,mxptbp) -+ -+ katm0=0 -+ katm1=0 -+ katm2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom0.eq.unqatm(jtpatm))katm0=jtpatm -+ if(atom1.eq.unqatm(jtpatm))katm1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katm2=jtpatm -+ -+ enddo -+ -+ if(katm0.eq.0.or.katm1.eq.0.or.katm2.eq.0) -+ x call error(idnode,84) -+ -+ filter(katm0)=.true. -+ filter(katm1)=.true. -+ filter(katm2)=.true. -+ -+ keytbp=(max(katm1,katm2)*(max(katm1,katm2)-1))/2+ -+ x min(katm1,katm2)+(katm0-1)*mx2tbp -+ -+ if(keytbp.gt.mxtbp) call error(idnode,86) -+ -+c convert parameters to internal units -+ -+ parpot(1)=parpot(1)*engunit -+ if(keypot.ne.5)parpot(2)=parpot(2)*(pi/180.d0) -+ -+ if(lsttbp(keytbp).gt.0) call error(idnode,18) -+ lsttbp(keytbp)=itptbp -+ ltptbp(itptbp)=keypot -+ ktbp=mx2tbp*((keytbp-1)/mx2tbp)+1 -+ if(lsttbp(ktbp).lt.0)lsttbp(ktbp)=0 -+ -+c calculate max three body cutoff -+ -+ rcuttb=max(rcuttb,parpot(5)) -+ rcut3b(itptbp)=parpot(5) -+ -+c store three body potential parameters -+ -+ do i=1,4 -+ prmtbp(itptbp,i)=parpot(i) -+ enddo -+ if(mxptbp.ge.6) then -+ do i=6,mxptbp -+ prmtbp(itptbp,i-1)=parpot(i-1) -+ enddo -+ endif -+ enddo -+ -+ if(rcuttb.lt.1.d-6)call error(idnode,451) -+ -+ deallocate (parpot,stat=fail) -+ -+ return -+ end subroutine define_three_body -+ -+ subroutine thbfrc -+ x (lsolva,lfree,lexcite,idnode,mxnode,natms,imcon,rcuttb, -+ x engtbp,virtbp) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating three body forces arising -+c from the included angle between three atoms -+c -+c Note: the subroutine converts coordinates to reduced units -+c to avoid a call to images.f. The link cell algorithm used -+c here necessitates a parallelepiped cell geometry -+c -+c copyright - daresbury laboratory 1994 -+c author - w.smith mar 1994 -+c adapted - w.smith aug 2008 solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lsolva,lfree,lexcite,lselect,lskip -+ logical idrive,jdrive,kdrive -+ integer idnode,mxnode,natms,imcon,nix,niy,niz -+ integer i,nbx,nby,nbz,ncells,l,ix,iy,iz,k,icell,kk,jx,jy,jz -+ integer j,jcell,ii,itbp,limit,last,ktbp,jtbp,jktbp,kktbp -+ integer ia,ib,ic,ktyp,jj,jk,kkk -+ real(8) rcuttb,engtbp,virtbp,tterm,uterm,xm,ym,zm,cprp,det -+ real(8) xdc,ydc,zdc,sxx,syy,szz,sxab,syab,szab,xab,yab,zab -+ real(8) rab,sxbc,sybc,szbc,xbc,ybc,zbc,rbc,xac,yac,zac,rac -+ real(8) rrab,rrbc,rrac,cost,sint,theta,pterm,gamma,vterm -+ real(8) gamsa,gamsb,gamsc,scrn,fxa,fya,fza,fxc,fyc,fzc,strs -+ real(8) strs_loc -+ -+ dimension nix(27),niy(27),niz(27),cprp(10),strs(6),strs_loc(9) -+ -+ data nix/ 0,-1,-1,-1, 0, 0,-1, 1,-1, 0, 1,-1, 0, 1, -+ x 1, 1, 1, 0, 0, 1,-1, 1, 0,-1, 1, 0,-1/ -+ data niy/ 0, 0,-1, 1, 1, 0, 0, 0,-1,-1,-1, 1, 1, 1, -+ x 0, 1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1/ -+ data niz/ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, -+ x 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1/ -+ -+ lskip=(lfree.or.lexcite) -+ -+c flag for undefined potentials -+ -+ safe=.true. -+ -+c initialise accumulators -+ -+ engtbp=0.d0 -+ virtbp=0.d0 -+ tbp_fre=0.d0 -+ tbp_vir=0.d0 -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+ if(lsolva)then -+ -+ lcomp(8)=.true. -+ en3_sol(:)=0.d0 -+ if(lexcite)en3_exc(:)=0.d0 -+ -+ endif -+ -+c create mock cell vectors for non-periodic system -+ -+ if(imcon.eq.0) then -+ -+ xm=0.d0 -+ ym=0.d0 -+ zm=0.d0 -+ do i=1,natms -+ xm=max(xm,abs(xxx(i))) -+ ym=max(ym,abs(yyy(i))) -+ zm=max(zm,abs(zzz(i))) -+ enddo -+ -+ cell(1)=2.d0*xm+rcuttb -+ cell(2)=0.d0 -+ cell(3)=0.d0 -+ cell(4)=0.d0 -+ cell(5)=2.d0*ym+rcuttb -+ cell(6)=0.d0 -+ cell(7)=0.d0 -+ cell(8)=0.d0 -+ cell(9)=2.d0*zm+rcuttb -+ -+ endif -+ -+c check for appropriate boundary conditions -+ -+ if(imcon.gt.3)call error(idnode,67) -+ call invert(cell,rcell,det) -+ call dcell(cell,cprp) -+ -+c calculate link cell numbers -+ -+ nbx=int(cprp(7)/(rcuttb+1.d-6)) -+ nby=int(cprp(8)/(rcuttb+1.d-6)) -+ nbz=int(cprp(9)/(rcuttb+1.d-6)) -+ ncells=nbx*nby*nbz -+ if(ncells.gt.mxcell) then -+ -+ if(idnode.eq.0) then -+ -+ write(nrite,'(a,i6)') -+ x 'number of required link cells in routine thbfrc is ',ncells -+ write(nrite,'(a,i6)') -+ x 'number of default link cells in routine thbfrc is ',mxcell -+ call error(idnode,69) -+ -+ endif -+ -+ endif -+ -+c transform atomic coordinates and construct link cells -+ -+ do l=1,ncells -+ -+ lct(l)=0 -+ lst(l)=0 -+ -+ enddo -+ -+ xdc=dble(nbx) -+ ydc=dble(nby) -+ zdc=dble(nbz) -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i) -+ syy=rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i) -+ szz=rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i) -+ -+ xxx(i)=sxx -+ yyy(i)=syy -+ zzz(i)=szz -+ -+ ix=min(int(xdc*(sxx+0.5d0)),nbx-1) -+ iy=min(int(ydc*(syy+0.5d0)),nby-1) -+ iz=min(int(zdc*(szz+0.5d0)),nbz-1) -+ k=1+ix+nbx*(iy+nby*iz) -+ lst(k)=lst(k)+1 -+ link(i)=lct(k) -+ lct(k)=i -+ -+ endif -+ -+ enddo -+ -+c loop over central atoms of angles -+ -+ ix=0 -+ iy=1 -+ iz=1 -+ do icell=1,ncells -+ -+ ix=ix+1 -+ if(ix.gt.nbx)then -+ ix=1 -+ iy=iy+1 -+ if(iy.gt.nby)then -+ iy=1 -+ iz=iz+1 -+ endif -+ endif -+ -+c construct mini-list of neighbour cell contents -+ -+ k=0 -+ do kk=1,27 -+ -+ jx=ix+nix(kk) -+ jy=iy+niy(kk) -+ jz=iz+niz(kk) -+ -+ if(jx.gt.nbx)jx=1 -+ if(jy.gt.nby)jy=1 -+ if(jz.gt.nbz)jz=1 -+ if(jx.lt.1)jx=jx+nbx -+ if(jy.lt.1)jy=jy+nby -+ if(jz.lt.1)jz=jz+nbz -+ -+ jcell=jx+nbx*(jy-1+nby*(jz-1)) -+ j=lct(jcell) -+ -+ do ii=1,lst(jcell) -+ -+ k=k+1 -+ lattbp(k)=j -+ j=link(j) -+ -+ enddo -+ -+ enddo -+ -+ limit=k -+ -+ do ii=1,lst(icell) -+ -+ i=lattbp(ii) -+ itbp=mx2tbp*(ltype(i)-1) -+ if(mod(i,mxnode).eq.idnode.and.lsttbp(itbp+1).ge.0)then -+ -+ last=limit -+ -+ do kk=1,limit/2 -+ -+ if(kk.gt.(limit-1)/2)last=limit/2 -+ -+ do jj=1,last -+ -+ j=lattbp(jj) -+ jk=jj+kk -+ if(jk.gt.limit)jk=jk-limit -+ k=lattbp(jk) -+ if(i.ne.j.and.i.ne.k)then -+ -+ jtbp=max(ltype(j),ltype(k)) -+ ktbp=min(ltype(j),ltype(k)) -+ jktbp=itbp+(jtbp*(jtbp-1))/2+ktbp -+ kktbp=lsttbp(jktbp) -+ if(kktbp.gt.0)then -+ -+c make labels etc consistent with angfrc.f -+ -+ ia=j -+ ib=i -+ ic=k -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(ia)) -+ jdrive=driven(ltype(ib)) -+ kdrive=driven(ltype(ic)) -+ -+ endif -+ -+ if(lskip)then -+ -+ if((atm_fre(ia).eq.1.or.atm_fre(ib).eq.1.or. -+ x atm_fre(ic).eq.1).and.(atm_fre(ia).eq.2.or. -+ x atm_fre(ib).eq.2.or.atm_fre(ic).eq.2))cycle -+ -+ endif -+ -+ sxab=xxx(ia)-xxx(ib) -+ sxab=sxab-nint(sxab) -+ syab=yyy(ia)-yyy(ib) -+ syab=syab-nint(syab) -+ szab=zzz(ia)-zzz(ib) -+ szab=szab-nint(szab) -+ -+ xab=cell(1)*sxab+cell(4)*syab+cell(7)*szab -+ if(abs(xab).lt.rcuttb)then -+ -+ yab=cell(2)*sxab+cell(5)*syab+cell(8)*szab -+ if(abs(yab).lt.rcuttb)then -+ -+ zab=cell(3)*sxab+cell(6)*syab+cell(9)*szab -+ if(abs(zab).lt.rcuttb)then -+ -+ sxbc=xxx(ic)-xxx(ib) -+ sxbc=sxbc-nint(sxbc) -+ sybc=yyy(ic)-yyy(ib) -+ sybc=sybc-nint(sybc) -+ szbc=zzz(ic)-zzz(ib) -+ szbc=szbc-nint(szbc) -+ -+ xbc=cell(1)*sxbc+cell(4)*sybc+cell(7)*szbc -+ if(abs(xbc).lt.rcuttb)then -+ -+ ybc=cell(2)*sxbc+cell(5)*sybc+cell(8)*szbc -+ if(abs(ybc).lt.rcuttb)then -+ -+ zbc=cell(3)*sxbc+cell(6)*sybc+cell(9)*szbc -+ if(abs(zbc).lt.rcuttb)then -+ -+ ktyp=ltptbp(kktbp) -+ rab=sqrt(xab*xab+yab*yab+zab*zab) -+ rbc=sqrt(xbc*xbc+ybc*ybc+zbc*zbc) -+ -+ if(rcut3b(kktbp).ge.max(rab,rbc))then -+ -+ xac=xab-xbc -+ yac=yab-ybc -+ zac=zab-zbc -+ rac=sqrt(xac*xac+yac*yac+zac*zac) -+ -+ rrab=1.d0/rab -+ rrbc=1.d0/rbc -+ rrac=1.d0/rac -+ -+c normalise direction vectors -+ -+ xab=xab*rrab -+ yab=yab*rrab -+ zab=zab*rrab -+ -+ xbc=xbc*rrbc -+ ybc=ybc*rrbc -+ zbc=zbc*rrbc -+ -+ xac=xac*rrac -+ yac=yac*rrac -+ zac=zac*rrac -+ -+ cost=(xab*xbc+yab*ybc+zab*zbc) -+ if(abs(cost).gt.1.d0)cost=sign(1.d0,cost) -+ if(ktyp.ne.5)then -+ -+ sint=max(1.d-8,sqrt(1.d0-cost*cost)) -+ theta=acos(cost) -+ -+ endif -+ -+ if(ktyp.eq.0)then -+ -+c harmonic angle potential -+ -+ pterm=0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ gamma=prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ -+ vterm=0.d0 -+ gamsa=0.d0 -+ gamsc=0.d0 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.1)then -+ -+c truncated harmonic valence angle potential -+ -+ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,3)**8) -+ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,3)**8 -+ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ gamsa=(8.d0*pterm/prmtbp(kktbp,3)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmtbp(kktbp,3)**8)*rbc**7 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.2)then -+ -+c screened harmonic valence angle potential -+ -+ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) -+ pterm=scrn*0.5d0*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))**2 -+ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) -+ gamma=scrn*prmtbp(kktbp,1)*(theta-prmtbp(kktbp,2))/sint -+ gamsa=(pterm/prmtbp(kktbp,3)) -+ gamsc=(pterm/prmtbp(kktbp,4)) -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.3)then -+ -+c screened vessal potential type 1 -+ -+ scrn=exp(-(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4))) -+ pterm=scrn*prmtbp(kktbp,1)/ -+ x (8.d0*(prmtbp(kktbp,2)-pi)**2)* -+ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)**2 -+ vterm=-pterm*(rab/prmtbp(kktbp,3)+rbc/prmtbp(kktbp,4)) -+ gamma=scrn*prmtbp(kktbp,1)/ -+ x (2.d0*(prmtbp(kktbp,2)-pi)**2)* -+ x ((prmtbp(kktbp,2)-pi)**2-(theta-pi)**2)*(theta-pi)/sint -+ gamsa=(pterm/prmtbp(kktbp,3)) -+ gamsc=(pterm/prmtbp(kktbp,4)) -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.4)then -+ -+c truncated vessal potential type 2 - use with sw1 -+ -+ scrn=exp(-(rab**8+rbc**8)/prmtbp(kktbp,4)**8) -+ pterm=scrn*prmtbp(kktbp,1)*(theta**prmtbp(kktbp,3)* -+ x (theta-prmtbp(kktbp,2))**2*(theta+prmtbp(kktbp,2)- -+ x 2.d0*pi)**2-0.5d0*prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3) -+ x -1.d0)*(theta-prmtbp(kktbp,2))**2*(pi- -+ x prmtbp(kktbp,2))**3) -+ vterm=-8.d0*pterm*(rab**8+rbc**8)/prmtbp(kktbp,4)**8 -+ gamma=scrn*prmtbp(kktbp,1)*(theta**(prmtbp(kktbp,3)-1.d0)* -+ x (theta-prmtbp(kktbp,2))*(theta+prmtbp(kktbp,2)- -+ x 2.d0*pi)*((prmtbp(kktbp,3)+4.d0)*theta**2-2.d0*pi* -+ x (prmtbp(kktbp,3)+2.d0)*theta+prmtbp(kktbp,3)* -+ x prmtbp(kktbp,2)*(2.d0*pi-prmtbp(kktbp,2)))- -+ x prmtbp(kktbp,3)*pi**(prmtbp(kktbp,3)-1.d0)* -+ x (theta-prmtbp(kktbp,2))*(pi-prmtbp(kktbp,2))**3)/sint -+ gamsa=(8.d0*pterm/prmtbp(kktbp,4)**8)*rab**7 -+ gamsc=(8.d0*pterm/prmtbp(kktbp,4)**8)*rbc**7 -+ gamsb=0.d0 -+ -+ elseif(ktyp.eq.5)then -+ -+ if(min(rab,rbc).lt.1.5d0)then -+ -+ scrn=(5.d0*(prmtbp(kktbp,2)/rac)**2-6.d0)* -+ x (prmtbp(kktbp,2)/rac)**10 -+ tterm=prmtbp(kktbp,1)*cost**4 -+ pterm=scrn*tterm -+ uterm=60.d0*((prmtbp(kktbp,2)/rac)**2-1.d0)* -+ x (prmtbp(kktbp,2)/rac)**10 -+ vterm=tterm*uterm -+ gamma=scrn*4.d0*prmtbp(kktbp,1)*cost**3 -+ gamsb=tterm*uterm/rac -+ gamsa=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+ else -+ -+ safe=.false. -+ pterm=0.d0 -+ vterm=0.d0 -+ gamma=0.d0 -+ gamsa=0.d0 -+ gamsb=0.d0 -+ gamsc=0.d0 -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set triple index -+ -+ if(lsolva)kkk=loc3(atmolt(ia),atmolt(ib),atmolt(ic)) -+ -+ if(lexcite)then -+ -+c selected excitation option -+ -+ if((atm_fre(ia).ne.1).and.(atm_fre(ib).ne.1) -+ x .and.(atm_fre(ic).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(ia)+atm_fre(ib)+atm_fre(ic).eq.0) -+ -+ if(lsolva)en3_exc(kkk)=en3_exc(kkk)+pterm -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(ia).eq.1).or.(atm_fre(ib).eq.1) -+ x .or.(atm_fre(ic).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ tbp_fre=tbp_fre-pterm -+ tbp_vir=tbp_vir-vterm -+ pterm=lambda1*pterm -+ vterm=lambda1*vterm -+ gamma=lambda1*gamma -+ gamsa=lambda1*gamsa -+ gamsb=lambda1*gamsb -+ gamsc=lambda1*gamsc -+ -+ elseif((atm_fre(ia).eq.2).or.(atm_fre(ib).eq.2) -+ x .or.(atm_fre(ic).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ tbp_fre=tbp_fre+pterm -+ tbp_vir=tbp_vir+vterm -+ pterm=lambda2*pterm -+ vterm=lambda2*vterm -+ gamma=lambda2*gamma -+ gamsa=lambda2*gamsa -+ gamsb=lambda2*gamsb -+ gamsc=lambda2*gamsc -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential and virial -+ -+ engtbp=engtbp+pterm -+ virtbp=virtbp+vterm -+ -+ if(lsolva)en3_sol(kkk)=en3_sol(kkk)+pterm -+ -+c calculate atomic forces -+ -+ fxa=gamma*(xbc-xab*cost)*rrab+gamsa*xab+gamsb*xac -+ fya=gamma*(ybc-yab*cost)*rrab+gamsa*yab+gamsb*yac -+ fza=gamma*(zbc-zab*cost)*rrab+gamsa*zab+gamsb*zac -+ -+ fxc=gamma*(xab-xbc*cost)*rrbc+gamsc*xbc-gamsb*xac -+ fyc=gamma*(yab-ybc*cost)*rrbc+gamsc*ybc-gamsb*yac -+ fzc=gamma*(zab-zbc*cost)*rrbc+gamsc*zbc-gamsb*zac -+ -+ fxx(ia)=fxx(ia)+fxa -+ fyy(ia)=fyy(ia)+fya -+ fzz(ia)=fzz(ia)+fza -+ -+ fxx(ib)=fxx(ib)-fxa-fxc -+ fyy(ib)=fyy(ib)-fya-fyc -+ fzz(ib)=fzz(ib)-fza-fzc -+ -+ fxx(ic)=fxx(ic)+fxc -+ fyy(ic)=fyy(ic)+fyc -+ fzz(ic)=fzz(ic)+fzc -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs(2)=strs(2)+rab*xab*fya+rbc*xbc*fyc -+ strs(3)=strs(3)+rab*xab*fza+rbc*xbc*fzc -+ strs(4)=strs(4)+rab*yab*fya+rbc*ybc*fyc -+ strs(5)=strs(5)+rab*yab*fza+rbc*ybc*fzc -+ strs(6)=strs(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn)then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+pterm -+ vir_loc=vir_loc+vterm -+ -+c local forces -+ -+ fxx_loc(ia)=fxx_loc(ia)+fxa -+ fyy_loc(ia)=fyy_loc(ia)+fya -+ fzz_loc(ia)=fzz_loc(ia)+fza -+ -+ fxx_loc(ib)=fxx_loc(ib)-fxa-fxc -+ fyy_loc(ib)=fyy_loc(ib)-fya-fyc -+ fzz_loc(ib)=fzz_loc(ib)-fza-fzc -+ -+ fxx_loc(ic)=fxx_loc(ic)+fxc -+ fyy_loc(ic)=fyy_loc(ic)+fyc -+ fzz_loc(ic)=fzz_loc(ic)+fzc -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+rab*xab*fxa+rbc*xbc*fxc -+ strs_loc(2)=strs_loc(2)+rab*xab*fya+rbc*xbc*fyc -+ strs_loc(3)=strs_loc(3)+rab*xab*fza+rbc*xbc*fzc -+ strs_loc(4)=strs_loc(4)+rab*yab*fya+rbc*ybc*fyc -+ strs_loc(5)=strs_loc(5)+rab*yab*fza+rbc*ybc*fzc -+ strs_loc(6)=strs_loc(6)+rab*zab*fza+rbc*zbc*fzc -+ -+ endif -+ -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ enddo -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+c check for undefined potentials -+ -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe) call error(idnode,442) -+ -+c global sum of three body potential and virial -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engtbp -+ buffer(2)=virtbp -+ buffer(3)=tbp_fre -+ buffer(4)=tbp_vir -+ call gdsum(buffer(1),4,buffer(5)) -+ engtbp=buffer(1) -+ virtbp=buffer(2) -+ tbp_fre=buffer(3) -+ tbp_vir=buffer(4) -+ -+c sum up solvation energies -+ -+ if(lsolva)then -+ -+ call gdsum(en3_sol,mxtmls_sol3,buffer(1)) -+ if(lexcite)call gdsum(en3_exc,mxtmls_exc3,buffer(1)) -+ -+ endif -+ -+ endif -+ -+c restore coordinate array to original representation -+ -+ do i=1,natms -+ -+ if(filter(ltype(i)))then -+ -+ sxx=xxx(i) -+ syy=yyy(i) -+ szz=zzz(i) -+ -+ xxx(i)=cell(1)*sxx+cell(4)*syy+cell(7)*szz -+ yyy(i)=cell(2)*sxx+cell(5)*syy+cell(8)*szz -+ zzz(i)=cell(3)*sxx+cell(6)*syy+cell(9)*szz -+ -+ endif -+ -+ enddo -+ -+c restore cell vector -+ -+ if(imcon.eq.0) then -+ cell(1)=0.d0 -+ cell(5)=0.d0 -+ cell(9)=0.d0 -+ endif -+ -+ return -+ -+ end subroutine thbfrc -+ -+ end module three_body_module -diff -urN dl_class_1.9.orig/srcmod/utility_module.f dl_class_1.9/srcmod/utility_module.f ---- dl_class_1.9.orig/srcmod/utility_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/utility_module.f 2010-12-22 13:27:23.000000000 +0100 -@@ -0,0 +1,1612 @@ -+ module utility_module -+ -+c*********************************************************************** -+c -+c dl_poly module for utility subroutines and functions -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ contains -+ -+ subroutine global_sum_forces(natms,mxnode,gxx,gyy,gzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to perform global sum of atomic forces as -+c requred by replicated data strategy -+c -+c copyright - daresbury laboratory -+c author - w.smith december 2005 -+c -+c*********************************************************************** -+ -+ use config_module -+ -+ implicit none -+ -+ integer natms,mxnode,i,j -+ real(8) gxx(*),gyy(*),gzz(*) -+ -+ if(mxnode.gt.1) then -+ -+ j=0 -+ do i=1,natms -+ -+ buffer(j+1)=gxx(i) -+ buffer(j+2)=gyy(i) -+ buffer(j+3)=gzz(i) -+ j=j+3 -+ -+ enddo -+ call gdsum(buffer(1),3*natms,buffer(3*natms+1)) -+ j=0 -+ do i=1,natms -+ -+ gxx(i)=buffer(j+1) -+ gyy(i)=buffer(j+2) -+ gzz(i)=buffer(j+3) -+ j=j+3 -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine global_sum_forces -+ -+ subroutine images -+ x (imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating the minimum image -+c of atom pairs within a specified MD cell -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992. -+c T3D optimised version. t.forester july 1994 -+c -+c for -+c imcon=0 no boundary conditions apply -+c imcon=1 standard cubic boundaries apply -+c imcon=2 orthorhombic boundaries apply -+c imcon=3 parallelepiped boundaries apply -+c imcon=4 truncated octahedron boundaries apply -+c imcon=5 rhombic dodecahedron boundaries apply -+c imcon=6 x-y parallelogram boundary conditions : no periodicity in z -+c imcon=7 hexagonal prism boundaries apply -+c -+c note: in all cases the centre of the cell is at (0,0,0) -+c warning - replicated data version: does not re-merge -+c coordinate arrays -+c -+c*********************************************************************** -+ -+ use error_module -+ -+ implicit none -+ -+ integer imcon,idnode,mxnode,natms,iatm1,iatm2,i -+ real(8) cell,xxx,yyy,zzz,aaa,bbb,ccc,det,rt2,rt3,ssx -+ real(8) ssy,ssz,ddd,xss,yss,zss,rcell -+ -+ dimension xxx(*),yyy(*),zzz(*) -+ dimension cell(9),rcell(9) -+ -+ data rt2/1.41421356623d0/,rt3/1.7320508075d0/ -+ -+ if(imcon.gt.0) then -+ -+c block indices -+ -+ iatm1 = (idnode*natms)/mxnode+1 -+ iatm2 = ((idnode+1)*natms)/mxnode -+ -+ endif -+ -+ if(imcon.eq.1)then -+ -+c standard cubic boundary conditions -+ -+ -+ aaa=1.d0/cell(1) -+ -+ do i=iatm1,iatm2 -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) -+ enddo -+ -+ else if(imcon.eq.2)then -+ -+c rectangular (slab) boundary conditions -+ -+ aaa=1.d0/cell(1) -+ bbb=1.d0/cell(5) -+ ccc=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(5)*nint(bbb*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(ccc*zzz(i)) -+ -+ enddo -+ -+ else if(imcon.eq.3)then -+ -+c parallelepiped boundary conditions -+ -+ call invert(cell,rcell,det) -+ -+ do i=iatm1,iatm2 -+ -+ ssx=(rcell(1)*xxx(i)+rcell(4)*yyy(i)+rcell(7)*zzz(i)) -+ ssy=(rcell(2)*xxx(i)+rcell(5)*yyy(i)+rcell(8)*zzz(i)) -+ ssz=(rcell(3)*xxx(i)+rcell(6)*yyy(i)+rcell(9)*zzz(i)) -+ -+ xss=ssx-nint(ssx) -+ yss=ssy-nint(ssy) -+ zss=ssz-nint(ssz) -+ -+ xxx(i)=(cell(1)*xss+cell(4)*yss+cell(7)*zss) -+ yyy(i)=(cell(2)*xss+cell(5)*yss+cell(8)*zss) -+ zzz(i)=(cell(3)*xss+cell(6)*yss+cell(9)*zss) -+ -+ enddo -+ -+ else if(imcon.eq.4)then -+ -+c truncated octahedral boundary conditions -+ -+ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. -+ x abs(cell(5)-cell(9)).lt.1.d-6)) call error(idnode,130) -+ -+ aaa=1.d0/cell(1) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(1)*nint(aaa*zzz(i)) -+ -+ if((abs(xxx(i))+abs(yyy(i))+abs(zzz(i))).ge. -+ x (0.75d0*cell(1)))then -+ -+ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) -+ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) -+ zzz(i)=zzz(i)-0.5d0*sign(cell(1),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ else if(imcon.eq.5)then -+ -+c rhombic dodecahedral boundary conditions -+ -+ if(.not.(abs(cell(1)-cell(5)).lt.1.d-6.and. -+ x abs(cell(9)-cell(1)*rt2).lt.1.d-6)) -+ x call error(idnode,140) -+ -+ aaa=1.d0/cell(1) -+ bbb=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ xxx(i)=xxx(i)-cell(1)*nint(aaa*xxx(i)) -+ yyy(i)=yyy(i)-cell(1)*nint(aaa*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(bbb*zzz(i)) -+ -+ if((abs(xxx(i))+abs(yyy(i))+abs(rt2*zzz(i))).ge. -+ x cell(1))then -+ -+ xxx(i)=xxx(i)-0.5d0*sign(cell(1),xxx(i)) -+ yyy(i)=yyy(i)-0.5d0*sign(cell(1),yyy(i)) -+ zzz(i)=zzz(i)-0.5d0*sign(cell(9),zzz(i)) -+ -+ endif -+ -+ enddo -+ -+ else if(imcon.eq.6) then -+ -+c x-y boundary conditions -+ -+ det = cell(1)*cell(5) - cell(2)*cell(4) -+ -+ if(abs(det).lt.1.d-6)call error(idnode,120) -+ -+ det = 1.d0/det -+ -+ rcell(1) = det*cell(5) -+ rcell(2) = -det*cell(2) -+ rcell(4) = -det*cell(4) -+ rcell(5) = det*cell(1) -+ -+ do i=iatm1,iatm2 -+ -+ ssx = rcell(1)*xxx(i) + rcell(4)*yyy(i) -+ ssy = rcell(2)*xxx(i) + rcell(5)*yyy(i) -+ -+ xss = ssx - nint(ssx) -+ yss = ssy - nint(ssy) -+ -+ xxx(i)=cell(1)*xss + cell(4)*yss -+ yyy(i)=cell(2)*xss + cell(5)*yss -+ -+ enddo -+ -+ else if(imcon.eq.7) then -+ -+c hexagonal prism boundary conditions -+ -+ if(abs(cell(1)-rt3*cell(5)).ge.1.d-6) -+ x call error(idnode,135) -+ -+ aaa=cell(1)/(rt3*2.d0) -+ bbb=cell(1)/rt3 -+ ccc=rt3/cell(1) -+ ddd=1.d0/cell(9) -+ -+ do i=iatm1,iatm2 -+ -+ yyy(i)=yyy(i)-bbb*nint(ccc*yyy(i)) -+ zzz(i)=zzz(i)-cell(9)*nint(ddd*zzz(i)) -+ -+ if((abs(yyy(i))+abs(rt3*xxx(i))).ge.bbb)then -+ -+ xxx(i)=xxx(i)-rt3*sign(aaa,xxx(i)) -+ yyy(i)=yyy(i)-sign(aaa,yyy(i)) -+ -+ endif -+ -+ enddo -+ -+ endif -+ -+ return -+ end subroutine images -+ -+ subroutine config_write(fname,levcfg,imcon,natms,engcfg) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for writing CONFIG files -+c -+c copyright - daresbury laboratory -+c author - w. smith aug 2007 -+c -+c*********************************************************************** -+ -+ use config_module -+ use setup_module -+ -+ implicit none -+ -+ character*6 fname -+ -+ integer i,natms,levcfg,imcon,nstep -+ real(8) engcfg -+ -+ open(nconf,file=fname,form='formatted') -+ -+ write(nconf,'(80a1)') cfgname -+ write(nconf,'(3i10,1p,g20.12)') levcfg,imcon,natms,engcfg -+ if(imcon.gt.0) write(nconf,'(3f20.12)') cell -+ -+ do i=1,natms -+ -+ write(nconf,'(a8,i10)') atmnam(i),i -+ write(nconf,'(3g20.10)') xxx(i),yyy(i),zzz(i) -+ if(levcfg.gt.0)write(nconf,'(3g20.12)') -+ x vxx(i),vyy(i),vzz(i) -+ if(levcfg.gt.1)write(nconf,'(3g20.12)') -+ x fxx(i),fyy(i),fzz(i) -+ -+ enddo -+ -+ close (nconf) -+ -+ return -+ end subroutine config_write -+ -+ subroutine bomb(idnode,nyr,nmn,ndy) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to set an expiry date in a compiled program -+c -+c copyright - daresbury laboratory -+c author - w. smith oct 2002 -+c -+c*********************************************************************** -+ -+ use setup_module -+ -+ implicit none -+ -+ logical safe -+ integer info(8) -+ character*12 dat,tim,zon -+ integer idnode,nyr,nmn,ndy -+ -+ safe=.true. -+ -+ call date_and_time(dat,tim,zon,info) -+ -+ if(info(1).gt.nyr)then -+ -+ safe=.false. -+ -+ else if(info(1).eq.nyr)then -+ -+ if(info(2).gt.nmn)then -+ -+ safe=.false. -+ -+ else if(info(2).eq.nmn)then -+ -+ if(info(3).ge.ndy)safe=.false. -+ -+ endif -+ -+ endif -+ -+ if(.not.safe)then -+ -+ if(idnode.eq.0)write(nrite,'(a,/,a)') -+ x 'THE EXPIRY DATE OF THIS EXECUTABLE HAS PASSED.', -+ X 'PLEASE CONTACT W.SMITH@DL.AC.UK FOR A NEW LICENCE' -+ -+ call exitcomms() -+ -+ endif -+ -+ return -+ end subroutine bomb -+ -+ subroutine cpy_rtc(nnn,aaa,bbb) -+ -+c********************************************************************** -+c -+c dl_poly subroutine for copying a real array into a complex array -+c of the same dimension -+c -+c copyright daresbury laboratory 1998 -+c author w.smith oct 1998 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,nnn -+ real(8) aaa(*) -+ complex(8) bbb(*) -+ -+ do i=1,nnn -+ -+ bbb(i)=cmplx(aaa(i),0.d0,kind=8) -+ -+ enddo -+ -+ return -+ end subroutine cpy_rtc -+ -+ function duni() -+ -+c********************************************************************* -+c -+c dl_poly random number generator based on the universal -+c random number generator of marsaglia, zaman and tsang -+c (stats and prob. lett. 8 (1990) 35-39.) it must be -+c called once to initialise parameters u,c,cd,cm -+c -+c copyright daresbury laboratory 1992 -+c author - w.smith july 1992 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical new -+ integer ir,jr,i,j,k,l,m,ii,jj -+ real(4) s,t,u,c,cd,cm,uni -+ real(8) duni -+ dimension u(97) -+ save u,c,cd,cm,uni,ir,jr,new -+ data new/.true./ -+ -+ if(new)then -+ -+c initial values of i,j,k must be in range 1 to 178 (not all 1) -+c initial value of l must be in range 0 to 168. -+ -+ i=12 -+ j=34 -+ k=56 -+ l=78 -+c -+ ir=97 -+ jr=33 -+ new=.false. -+ -+ do 200 ii=1,97 -+ s=0.0 -+ t=0.5 -+ do 100 jj=1,24 -+ m=mod(mod(i*j,179)*k,179) -+ i=j -+ j=k -+ k=m -+ l=mod(53*l+1,169) -+ if(mod(l*m,64).ge.32)s=s+t -+ t=0.5*t -+ 100 continue -+ u(ii)=s -+ 200 continue -+ c = 362436.0/16777216.0 -+ cd= 7654321.0/16777216.0 -+ cm=16777213.0/16777216.0 -+ else -+ -+c calculate random number -+ uni=u(ir)-u(jr) -+ if(uni.lt.0.0)uni=uni+1.0 -+ u(ir)=uni -+ ir=ir-1 -+ if(ir.eq.0)ir=97 -+ jr=jr-1 -+ if(jr.eq.0)jr=97 -+ c=c-cd -+ if(c.lt.0.0)c=c+cm -+ uni=uni-c -+ if(uni.lt.0.0)uni=uni+1.0 -+ duni=dble(uni) -+ endif -+ -+ return -+ end function duni -+ -+ subroutine ele_prd(nnn,aaa,bbb,ccc) -+ -+c********************************************************************** -+c -+c dl_poly subroutine for element by element product of -+c a real array (bbb) and a complex array (ccc) -+c -+c copyright daresbury laboratory 1998 -+c author w.smith july 1998 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer i,nnn -+ real(8) bbb(*) -+ complex(8) aaa(*),ccc(*) -+ -+ do i=1,nnn -+ -+ aaa(i)=bbb(i)*ccc(i) -+ -+ enddo -+ -+ return -+ end subroutine ele_prd -+ -+ subroutine gauss(natms,vxx,vyy,vzz) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for constructing velocity arrays -+c with a gaussian distribution of unit variance. -+c -+c based on the Box-Muller method -+c -+c note - this version uses a universal random number -+c generator, which generates pseudo-random numbers between -+c 0 and 1. it is based on the algorithm of marsaglia, zaman -+c and tsang in: stats and prob. lett. 8 (1990) 35-39. -+c -+c copyright daresbury laboratory 2007 -+c author - w. smith nov 2007 -+c -+c********************************************************************* -+ -+ use setup_module -+ -+ implicit none -+ -+ integer natms,i -+ real(8) vxx,vyy,vzz,rrr,rr1,rr2 -+ -+ dimension vxx(natms),vyy(natms),vzz(natms) -+ -+c initialise random number generator -+ -+ rrr=duni() -+ -+c calculate gaussian random numbers -+ -+ do i=1,2*(natms/2),2 -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vxx(i)=rr1*cos(rr2) -+ vxx(i+1)=rr1*sin(rr2) -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vyy(i)=rr1*cos(rr2) -+ vyy(i+1)=rr1*sin(rr2) -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vzz(i)=rr1*cos(rr2) -+ vzz(i+1)=rr1*sin(rr2) -+ -+ enddo -+ if(mod(natms,2).ne.0)then -+ -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vxx(natms)=rr1*cos(rr2) -+ vyy(natms)=rr1*sin(rr2) -+ rr1=sqrt(-2.d0*log(duni())) -+ rr2=2.d0*pi*duni() -+ vzz(natms)=rr1*cos(rr2) -+ -+ endif -+ -+ return -+ end subroutine gauss -+ -+ subroutine invert(a,b,d) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine to invert a 3 * 3 matrix using cofactors -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith april 1992 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ real(8) a,b,d,r -+ -+ dimension a(9),b(9) -+ -+c calculate adjoint matrix -+ b(1)=a(5)*a(9)-a(6)*a(8) -+ b(2)=a(3)*a(8)-a(2)*a(9) -+ b(3)=a(2)*a(6)-a(3)*a(5) -+ b(4)=a(6)*a(7)-a(4)*a(9) -+ b(5)=a(1)*a(9)-a(3)*a(7) -+ b(6)=a(3)*a(4)-a(1)*a(6) -+ b(7)=a(4)*a(8)-a(5)*a(7) -+ b(8)=a(2)*a(7)-a(1)*a(8) -+ b(9)=a(1)*a(5)-a(2)*a(4) -+ -+c calculate determinant -+ d=a(1)*b(1)+a(4)*b(2)+a(7)*b(3) -+ r=0.d0 -+ if(abs(d).gt.0.d0)r=1.d0/d -+ -+c complete inverse matrix -+ b(1)=r*b(1) -+ b(2)=r*b(2) -+ b(3)=r*b(3) -+ b(4)=r*b(4) -+ b(5)=r*b(5) -+ b(6)=r*b(6) -+ b(7)=r*b(7) -+ b(8)=r*b(8) -+ b(9)=r*b(9) -+ -+ return -+ end subroutine invert -+ -+ subroutine jacobi(a,v,n) -+ -+c*********************************************************************** -+c -+c diagonalisation of real symmetric matices by jacobi method -+c -+c input parameters: -+c -+c a(n,n) is the matrix to be diagonalised -+c v(n,n) is the eigenvector matrix -+c n is the dimension of the matrices -+c -+c jacobi processes lower triangle only (upper triangle unchanged) -+c -+c variable rho sets absolute tolerance on convergence -+c variable tes is a moving tolerance that diminishes -+c on each pass until at true convergence tesdlrpot) .or. (ngrid-4 /= nint(cutpot/delpot))) then -+ -+ if (idnode == 0) write(nrite,"( -+ x 'expected radial increment : ',1p,e15.7,/, -+ x 'TABLE radial increment : ',1p,e15.7,/,/, -+ x 'expected number of grid points : ',0p,i10,/, -+ x 'grid points in TABLE : ',i10)") -+ x dlrpot, delpot, mxgrid, ngrid -+ -+ call error(idnode,22) -+ -+ endif -+ -+ if(cutpot.lt.rcut) call error(idnode,504) -+ if(abs(1.d0-(delpot/dlrpot)).gt.1.0d-8) then -+ if(idnode.eq.0) write(nrite, -+ x "(/,' TABLE arrays resized for mxgrid=',i10)") mxgrid -+ endif -+ -+c read potential arrays for all pairs -+ -+ do ivdw=1,ntpvdw -+ -+c read potential arrays if potential not already defined -+ -+ if(ltpvdw(ivdw).eq.0)then -+ -+c read pair potential labels and long range corrections -+ -+ call getrec(safe,idnode,ntable) -+ if(.not.safe)call abort_table_read(idnode,ntable) -+ -+ call getword(atom1,record,8,lenrec) -+ call getword(atom2,record,8,lenrec) -+ prmvdw(ivdw,1)=dblstr(record,lenrec,idum) -+ prmvdw(ivdw,2)=dblstr(record,lenrec,idum) -+ -+ katom1=0 -+ katom2=0 -+ -+ do jtpatm=1,ntpatm -+ -+ if(atom1.eq.unqatm(jtpatm))katom1=jtpatm -+ if(atom2.eq.unqatm(jtpatm))katom2=jtpatm -+ -+ enddo -+ -+ if(katom1.eq.0.or.katom2.eq.0)then -+ if(idnode.eq.0) -+ x write(nrite,'(a)') '****',atom1,'***',atom2,'****' -+ call error(idnode,81) -+ endif -+ -+ keyvdw=loc2(katom1,katom2) -+ -+ if(lstvdw(keyvdw).ne.ivdw) call error(idnode,23) -+ -+c read potential arrays -+ -+ if(mxbuff.lt.ngrid) then -+ -+ if(idnode.eq.0) -+ x write(nrite,*) 'mxbuff must be >=',ngrid,' in fortab' -+ call error(idnode,48) -+ -+ endif -+ -+c read in potential arrays -+ -+ do i=1,(ngrid+3)/4 -+ -+ l=min(4,ngrid-(i-1)*4) -+ if (idnode == 0) then -+ read(unit=ntable, fmt=*, end=100) -+ x (buffer((i-1)*4+j),j=1,l) -+ else -+ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 -+ endif -+ -+ enddo -+ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) -+ -+c reconstruct arrays using 3pt interpolation -+ -+ rdr=1.d0/delpot -+ vvv(1,ivdw)=1.d0 -+ ggg(1,ivdw)=0.d0 -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ vk0=buffer(l) -+ vk1=buffer(l+1) -+ vk2=buffer(l+2) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ vvv(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 -+ -+ enddo -+ -+c read in force arrays -+ -+ do i=1,(ngrid+3)/4 -+ -+ l=min(4,ngrid-(i-1)*4) -+ if (idnode == 0) then -+ read(unit=ntable, fmt=*, end=100) -+ x (buffer((i-1)*4+j),j=1,l) -+ else -+ buffer((i-1)*4+1:(i-1)*4+l)=0.0d0 -+ endif -+ -+ enddo -+ call gdsum(buffer(1:ngrid),ngrid,buffer(ngrid+1:2*ngrid)) -+ -+c reconstruct ggg arrays using 3pt interpolation -+ -+ do i=2,mxgrid -+ -+ rrr=dble(i)*dlrpot -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ vk0=buffer(l) -+ vk1=buffer(l+1) -+ vk2=buffer(l+2) -+ -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ -+ ggg(i,ivdw)=t1+(t2-t1)*ppp*0.5d0 -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c convert to internal units -+ -+ do k=1,ntpvdw -+ -+ if(ltpvdw(k).eq.0)then -+ -+ do i=1,mxgrid -+ -+ vvv(i,k)=vvv(i,k)*engunit -+ ggg(i,k)=ggg(i,k)*engunit -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+ if(idnode.eq.0)close (ntable) -+ -+ if(idnode.eq.0)write(nrite,'(/,/,1x,a)') -+ x 'potential tables read from TABLE file' -+ -+ return -+ -+c end of file error exit -+ -+ 100 call abort_table_read(idnode,ntable) -+ -+ end subroutine fortab -+ -+ subroutine abort_table_read(idnode,ntable) -+ -+c*********************************************************************** -+c -+c dl_poly error exit subroutine for reading TABLE file -+c -+c copyright - daresbury laboratory -+c author - w. smith sept 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ integer idnode,ntable -+ -+ if(idnode.eq.0)close (ntable) -+ -+ call error(idnode,24) -+ -+ end subroutine abort_table_read -+ -+ subroutine srfrce -+ x (lsolva,lfree,lghost,iatm,ik,engsrp,virsrp,rcut,dlrpot) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating short range force and -+c potential energy terms using verlet neighbour list -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c -+c version 3 -+c author - t. forester june 1993 -+c stress tensor added t.forester may 1994 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer iatm,ik,m,jatm,k,l,kkk -+ real(8) engsrp,virsrp,rcut,dlrpot -+ real(8) ab,rrr,rsq,ppp,t1,t2,vk0,vk1,vk2,gk0,gk1,gk2,gamma -+ real(8) fi,rcsq,rdr,ai,aj,fx,fy,fz,omega -+ real(8) strs(6),strs_loc(6) -+ -+ dimension fi(3) -+ -+CDIR$ CACHE_ALIGN fi -+ -+ lskip=(lfree.or.lghost) -+ if(lmetadyn)idrive=driven(ltype(iatm)) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c interpolation spacing -+ -+ rdr=1.d0/dlrpot -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engsrp=0.d0 -+ virsrp=0.d0 -+ -+c store forces for iatm -+ -+ ai=dble(ltype(iatm)) -+ fi(1)=fxx(iatm) -+ fi(2)=fyy(iatm) -+ fi(3)=fzz(iatm) -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ jatm=ilist(m) -+ if(lmetadyn)jdrive=driven(ltype(jatm)) -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ aj=dble(ltype(jatm)) -+ -+ if(ai.gt.aj) then -+ ab=ai*(ai-1.d0)*0.5d0+aj+0.5d0 -+ else -+ ab=aj*(aj-1.d0)*0.5d0+ai+0.5d0 -+ endif -+ -+ k=lstvdw(int(ab)) -+ -+ if((ltpvdw(k).lt.100).and.(abs(vvv(1,k)).gt.1.d-10))then -+ -+c apply truncation of potential -+ -+ rsq=rsqdf(m) -+ -+ if(rcsq.gt.rsq)then -+ -+ rrr=sqrt(rsq) -+ l=int(rrr*rdr) -+ ppp=rrr*rdr-dble(l) -+ -+ if(l.eq.0)then -+ -+ omega=vvv(1,k) -+ gamma=ggg(1,k) -+ -+ else -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq -+ -+ endif -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre-omega -+ vdw_vir=vdw_vir+gamma*rsq -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ vdw_fre=vdw_fre+omega -+ vdw_vir=vdw_vir-gamma*rsq -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential and virial -+ -+ engsrp=engsrp+omega -+ virsrp=virsrp-gamma*rsq -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega -+ -+c calculate forces -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fi(1)=fi(1)+fx -+ fi(2)=fi(2)+fy -+ fi(3)=fi(3)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-gamma*rsq -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c load temps back to fxx(iatm) etc -+ -+ fxx(iatm)=fi(1) -+ fyy(iatm)=fi(2) -+ fzz(iatm)=fi(3) -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine srfrce -+ -+ subroutine lrcorrect -+ x (lsolva,lfree,lghost,idnode,imcon,keyfce,natms, -+ x ntpatm,ntpvdw,elrc,engunit,virlrc,rcut,volm) -+ -+c************************************************************************* -+c -+c DL_POLY subroutine to evaluate long-range corrections to -+c pressure and energy in a periodic system. -+c -+c copyright daresbury laboratory 1993 -+c author - t. forester may 1993 -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*************************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=10 -+ logical lsolva,lfree,lghost -+ integer idnode,imcon,keyfce,natms,ntpatm,i,ka,ntpvdw -+ integer ivdw,j,k,it,jt,kt,fail -+ real(8) natyp,nbtyp,nctyp,ndtyp,nafrz,nbfrz,ncfrz,ndfrz -+ real(8) elrc,engunit,virlrc,rcut,volm,twopi,eadd,padd -+ real(8) denprd,aaa,bbb,ccc,ddd,eee,eps,sig,rr0,ann,amm -+ real(8) denprd1,denprd2,denprd3,denprdf -+ integer, allocatable :: numtyp_sol0(:,:),numfrz_sol0(:,:) -+ integer, allocatable :: numtyp_sol1(:,:),numfrz_sol1(:,:) -+ integer, allocatable :: numtyp_sol2(:,:),numfrz_sol2(:,:) -+ integer, allocatable :: numtyp_fre(:,:),numfrz_fre(:,:) -+ real(8), allocatable :: elrc_sol0(:),elrc_exc0(:) -+ -+ dimension fail(nnn) -+ -+ twopi=2.0d0*pi -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ allocate (numtyp_fre(mxatyp,0:2),stat=fail(1)) -+ allocate (numfrz_fre(mxatyp,0:2),stat=fail(2)) -+ allocate (elrc_exc0(mxtmls_exc2),stat=fail(3)) -+ -+ endif -+ -+ if(lsolva)then -+ -+ allocate (elrc_sol0(mxtmls_sol2),stat=fail(4)) -+ allocate (numtyp_sol0(mxatyp,mxtmls),stat=fail(5)) -+ allocate (numfrz_sol0(mxatyp,mxtmls),stat=fail(6)) -+ -+ if(lghost)then -+ -+ allocate (numtyp_sol1(mxatyp,mxtmls),stat=fail(7)) -+ allocate (numfrz_sol1(mxatyp,mxtmls),stat=fail(8)) -+ allocate (numtyp_sol2(mxatyp,mxtmls),stat=fail(9)) -+ allocate (numfrz_sol2(mxatyp,mxtmls),stat=fail(10)) -+ -+ endif -+ -+ endif -+ -+ do i=1,nnn -+ if(fail(i).ne.0)call error(idnode,1015) -+ enddo -+ -+c initalise counter arrays -+ -+ do i=1,ntpatm -+ -+ numtyp(i)=0 -+ numfrz(i)=0 -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ numtyp_fre(:,:)=0 -+ numfrz_fre(:,:)=0 -+ -+ endif -+ -+ if(lsolva)then -+ -+ numtyp_sol0(:,:)=0 -+ numfrz_sol0(:,:)=0 -+ -+ if(lghost)then -+ -+ numtyp_sol1(:,:)=0 -+ numfrz_sol1(:,:)=0 -+ numtyp_sol2(:,:)=0 -+ numfrz_sol2(:,:)=0 -+ -+ endif -+ -+ endif -+ -+c evaluate number density in system -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp(ka)=numtyp(ka)+1 -+ if(lstfrz(i).ne.0)numfrz(ka)=numfrz(ka)+1 -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp_fre(ka,atm_fre(i))=numtyp_fre(ka,atm_fre(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_fre(ka,atm_fre(i))=numfrz_fre(ka,atm_fre(i))+1 -+ -+ enddo -+ -+ endif -+ -+ if(lsolva)then -+ -+ if(lghost)then -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ -+ if(atm_fre(i).eq.0)then -+ -+ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 -+ -+ elseif(atm_fre(i).eq.1)then -+ -+ numtyp_sol1(ka,atmolt(i))=numtyp_sol1(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol1(ka,atmolt(i))=numfrz_sol1(ka,atmolt(i))+1 -+ -+ elseif(atm_fre(i).eq.2)then -+ -+ numtyp_sol2(ka,atmolt(i))=numtyp_sol2(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol2(ka,atmolt(i))=numfrz_sol2(ka,atmolt(i))+1 -+ -+ endif -+ -+ enddo -+ -+ else -+ -+ do i=1,natms -+ -+ ka=ltype(i) -+ numtyp_sol0(ka,atmolt(i))=numtyp_sol0(ka,atmolt(i))+1 -+ if(lstfrz(i).ne.0) -+ x numfrz_sol0(ka,atmolt(i))=numfrz_sol0(ka,atmolt(i))+1 -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c number densities -+ -+ do i=1,ntpatm -+ dens(i)=dble(numtyp(i))/volm -+ enddo -+ -+c long range corrections to energy and pressure -+ -+ elrc=0.d0 -+ elrc2=0.d0 -+ virlrc=0.d0 -+ virlrc2=0.d0 -+ denprdf=0.d0 -+ volm_sav=0.d0 -+ elrc_fre=0.d0 -+ vlrc_fre=0.d0 -+ -+ if(imcon.ne.0.and.imcon.ne.6.and.ntpvdw.gt.0) then -+ -+ if(mod(keyfce,2).eq.1) then -+ -+ ivdw=0 -+ -+ do i=1,ntpatm -+ -+ do j=1,i -+ -+ eadd=0.d0 -+ padd=0.d0 -+ -+ ivdw=ivdw+1 -+ k=lstvdw(ivdw) -+ -+ if(ltpvdw(k).eq.0) then -+ -+c tabulated potential -+ -+ eadd=prmvdw(k,1) -+ padd=-prmvdw(k,2) -+ -+ else if(ltpvdw(k).eq.1) then -+ -+c 12-6 potential -+ -+ aaa=prmvdw(k,1) -+ bbb=prmvdw(k,2) -+ -+ eadd=aaa/(9.d0*rcut**9)-bbb/(3.d0*rcut**3) -+ padd=12.d0*aaa/(9.d0*rcut**9)-6.d0*bbb/(3.d0*rcut**3) -+ -+ else if(ltpvdw(k).eq.2) then -+ -+c Lennard Jones potential -+ -+ eps=prmvdw(k,1) -+ sig=prmvdw(k,2) -+ -+ eadd=4.d0*eps*(sig**12/(9.d0*rcut**9)- -+ x sig**6/(3.d0*rcut**3)) -+ padd=4.d0*eps*(12.d0*sig**12/(9.d0*rcut**9)- -+ x 2.d0*sig**6/(rcut**3)) -+ -+ else if(ltpvdw(k).eq.3) then -+ -+c n - m potential -+ -+ eps=prmvdw(k,1) -+ ann=prmvdw(k,2) -+ amm=prmvdw(k,3) -+ rr0=prmvdw(k,4) -+ -+ eadd=eps/(ann-amm)*(amm*rr0**ann/((ann-3.d0)* -+ x rcut**(ann-3.d0))-ann*rr0**amm/((amm-3.0d0)* -+ x rcut**(amm-3.d0))) -+ padd=eps/(ann-amm)*ann*amm*(rr0**ann/((ann-3.d0)* -+ x rcut**(ann-3.d0))-rr0**amm/((amm-3.0d0)* -+ x rcut**(amm-3.d0))) -+ -+ else if(ltpvdw(k).eq.4) then -+ -+c buckingham exp - 6 potential -+ -+ ccc=prmvdw(k,3) -+ -+ eadd=-ccc/(3.d0*rcut**3) -+ padd=-2.d0*ccc/(rcut**3) -+ -+ else if(ltpvdw(k).eq.5) then -+ -+c born huggins meyer exp -6 - 8 potential -+ -+ ddd=prmvdw(k,4) -+ eee=prmvdw(k,5) -+ -+ eadd=-ddd/(3.d0*rcut**3)-eee/(5.d0*rcut**5) -+ padd=-2.d0*ddd/(rcut**3)-8.d0*eee/(5.d0*rcut**5) -+ -+ else if(ltpvdw(k).eq.6) then -+ -+c hydrogen bond 12 - 10 potential -+ -+ aaa=prmvdw(k,1) -+ bbb=prmvdw(k,2) -+ -+ eadd=aaa/(9.d0*rcut**9)-bbb/(7.d0*rcut**7) -+ padd=12.d0*aaa/(9.d0*rcut**9)-1.d1*bbb/(7.d0*rcut**7) -+ -+ endif -+ -+ if(i.ne.j) then -+ -+ eadd=eadd*2.d0 -+ padd=padd*2.d0 -+ -+ endif -+ -+ if(.not.(lfree.or.lghost))then -+ -+ denprd=twopi*(dble(numtyp(i))*dble(numtyp(j))- -+ x dble(numfrz(i))*dble(numfrz(j)))/volm**2 -+ -+ else -+ -+ nafrz=dble(numfrz_fre(i,0)+numfrz_fre(i,1)) -+ natyp=dble(numtyp_fre(i,0)+numtyp_fre(i,1)) -+ nbfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,1)) -+ nbtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,1)) -+ ncfrz=dble(numfrz_fre(i,0)+numfrz_fre(i,2)) -+ nctyp=dble(numtyp_fre(i,0)+numtyp_fre(i,2)) -+ ndfrz=dble(numfrz_fre(j,0)+numfrz_fre(j,2)) -+ ndtyp=dble(numtyp_fre(j,0)+numtyp_fre(j,2)) -+ -+ if(lghost)then -+ -+ denprd=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 -+ denprd3=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 -+ -+ elseif(lfree)then -+ -+ denprd1=twopi*(natyp*nbtyp-nafrz*nbfrz)/volm**2 -+ denprd2=twopi*(nctyp*ndtyp-ncfrz*ndfrz)/volm**2 -+ denprd=lambda1*denprd1+lambda2*denprd2 -+ denprd3=lambda2*denprd1+lambda1*denprd2 -+ denprdf=denprd2-denprd1 -+ -+ endif -+ -+ endif -+ -+ elrc=elrc+volm*denprd*eadd -+ virlrc=virlrc-denprd*padd*volm -+ -+ if(lfree.or.lghost)then -+ -+ elrc2=elrc2+volm*denprd3*eadd -+ virlrc2=virlrc2-denprd3*padd*volm -+ if(lfree)then -+ elrc_fre=elrc_fre+volm*denprdf*eadd -+ vlrc_fre=vlrc_fre-denprdf*padd*volm -+ endif -+ -+ endif -+ -+ if(lsolva)then -+ -+ elrc_sol0(:)=0.d0 -+ if(lghost)elrc_exc0(:)=0.d0 -+ -+ do it=1,mxtmls -+ -+ do jt=1,mxtmls -+ -+ kt=loc2(it,jt) -+ -+ if(lghost)then -+ -+ natyp=dble(numtyp_sol0(i,it)+numtyp_sol1(i,it)) -+ nbtyp=dble(numtyp_sol0(j,jt)+numtyp_sol1(j,jt)) -+ nafrz=dble(numfrz_sol0(i,it)+numfrz_sol1(i,it)) -+ nbfrz=dble(numfrz_sol0(j,jt)+numfrz_sol1(j,jt)) -+ -+ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* -+ x nbtyp-nafrz*nbfrz)/volm**2 -+ -+ nctyp=dble(numtyp_sol0(i,it)+numtyp_sol2(i,it)) -+ ndtyp=dble(numtyp_sol0(j,jt)+numtyp_sol2(j,jt)) -+ ncfrz=dble(numfrz_sol0(i,it)+numfrz_sol2(i,it)) -+ ndfrz=dble(numfrz_sol0(j,jt)+numfrz_sol2(j,jt)) -+ -+ elrc_exc0(kt)=elrc_exc0(kt)+twopi*(nctyp* -+ x ndtyp-ncfrz*ndfrz)/volm**2 -+ -+ else -+ -+ natyp=dble(numtyp_sol0(i,it)) -+ nbtyp=dble(numtyp_sol0(j,jt)) -+ nafrz=dble(numfrz_sol0(i,it)) -+ nbfrz=dble(numfrz_sol0(j,jt)) -+ -+ elrc_sol0(kt)=elrc_sol0(kt)+twopi*(natyp* -+ x nbtyp-nafrz*nbfrz)/volm**2 -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(lghost)then -+ -+ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) -+ elrc_exc(:)=elrc_exc(:)+volm*eadd*elrc_exc0(:) -+ -+ else -+ -+ elrc_sol(:)=elrc_sol(:)+volm*eadd*elrc_sol0(:) -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+ enddo -+ -+ if(lfree.or.lghost)then -+ -+ elrc_sav=elrc -+ elrc2_sav=elrc2 -+ virlrc_sav=virlrc -+ virlrc2_sav=virlrc2 -+ elrc_fre_sav=elrc_fre -+ vlrc_fre_sav=vlrc_fre -+ -+ endif -+ -+ volm_sav=volm -+ -+ if(lghost)then -+ -+ elrc_sol_sav(:)=elrc_sol(:) -+ elrc_exc_sav(:)=elrc_exc(:) -+ -+ elseif(lsolva)then -+ -+ elrc_sol_sav(:)=elrc_sol(:) -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ if(idnode.eq.0)then -+ -+ write(nrite, -+ x "(/,/,'long range correction for: vdw energy ',e15.6,/, -+ x 25x,': vdw pressure',e15.6)")elrc/engunit, -+ x prsunt*virlrc/(-3.d0*volm) -+ -+ if(lghost) -+ x write(nrite, -+ x "(/,/,'long range correction for: vdw energy ',e15.6,/, -+ x 25x,': vdw pressure',e15.6)")elrc2/engunit, -+ x prsunt*virlrc2/(-3.d0*volm) -+ -+ endif -+ -+c deallocate work arrays -+ -+ if(lfree.or.lghost) -+ x deallocate (elrc_exc0,numtyp_fre,numfrz_fre,stat=fail(1)) -+ -+ if(lsolva)then -+ -+ deallocate (elrc_sol0,numtyp_sol0,numfrz_sol0,stat=fail(2)) -+ -+ if(lghost)then -+ -+ deallocate (numtyp_sol1,numfrz_sol1,stat=fail(3)) -+ deallocate (numtyp_sol2,numfrz_sol2,stat=fail(4)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine lrcorrect -+ -+ -+ subroutine srfrceneu -+ x (lsolva,lfree,lghost,ik,engsrp,virsrp,dlrpot,rcut) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for calculating short range force and -+c potential energy terms using verlet neighbour list -+c neutral group implementation -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory 1992 -+c author - w. smith march 1992 -+c -+c neutral groups -+c author - t. forester march 1994 -+c -+c adapted - p.-a. cazade oct 2007: solvation, free energy etc -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical lsolva,lfree,lghost,lselect,lskip,idrive,jdrive -+ integer ik,m,iatm,jatm,l,k,kkk -+ real(8) engsrp,virsrp,dlrpot,rcut,rcsq,fx,fy,fz,omega,omega_exc -+ real(8) rrr,ppp,vk0,vk1,vk2,t1,t2,gk0,gk1,gk2,rdlpot,gamma -+ real(8) ai,aj,ak,rsq,strs(6),strs_loc(6) -+ -+ lskip=(lfree.or.lghost) -+ -+c set cutoff condition for pair forces -+ -+ rcsq=rcut**2 -+ -+c reciprocal of interpolation spacing -+ -+ rdlpot=1.d0/dlrpot -+ -+c initialise stress tensor accumulators -+ -+ strs(:)=0.d0 -+ strs_loc(:)=0.d0 -+ -+c initialise potential energy and virial -+ -+ engsrp=0.d0 -+ virsrp=0.d0 -+ -+c start of primary loop for forces evaluation -+ -+ do m=1,ik -+ -+c atomic and potential function indices -+ -+ iatm=ilist(m) -+ jatm=jlist(m) -+ -+c metadynamics local definitions -+ -+ if(lmetadyn)then -+ -+ idrive=driven(ltype(iatm)) -+ jdrive=driven(ltype(jatm)) -+ -+ endif -+ -+ if(lskip)then -+ if(atm_fre(iatm)*atm_fre(jatm).eq.2)cycle -+ endif -+ -+ aj=ltype(jatm) -+ ai=ltype(iatm) -+ -+ if(ai.gt.aj) then -+ ak=(ai*(ai-1.d0)*0.5d0+aj+0.5d0) -+ else -+ ak=(aj*(aj-1.d0)*0.5d0+ai+0.5d0) -+ endif -+ k=lstvdw(int(ak)) -+ -+ if(abs(vvv(1,k)).gt.1.d-10)then -+ -+ rsq=rsqdf(m) -+ -+ if(rsq.lt.rcsq) then -+ -+ rrr=sqrt(rsq) -+ -+c determine interpolation panel for force arrays -+ -+ l=int(rrr*rdlpot) -+ ppp=rrr*rdlpot-dble(l) -+ -+c calculate interaction energy using 3-point interpolation -+ -+ vk0=vvv(l,k) -+ vk1=vvv(l+1,k) -+ vk2=vvv(l+2,k) -+ t1=vk0+(vk1-vk0)*ppp -+ t2=vk1+(vk2-vk1)*(ppp-1.0d0) -+ omega=t1+(t2-t1)*ppp*0.5d0 -+ -+c calculate forces using 3-point interpolation -+ -+ gk0=ggg(l,k) -+ gk1=ggg(l+1,k) -+ gk2=ggg(l+2,k) -+ t1=gk0+(gk1-gk0)*ppp -+ t2=gk1+(gk2-gk1)*(ppp-1.0d0) -+ gamma=(t1+(t2-t1)*ppp*0.5d0)/rsq -+ -+c set selection control -+ -+ lselect=.true. -+ -+c set double index -+ -+ if(lsolva)kkk=loc2(atmolt(iatm),atmolt(jatm)) -+ -+ if(lghost)then -+ -+c selected excitation option -+ -+ if((atm_fre(iatm).ne.1).and.(atm_fre(jatm).ne.1))then -+ -+c reset selection control -+ -+ lselect=(atm_fre(iatm)+atm_fre(jatm).eq.0) -+ -+ if(lsolva)vdw_exc(kkk)=vdw_exc(kkk)+omega -+ -+ endif -+ -+ elseif(lfree)then -+ -+c selected free energy option -+ -+ if((atm_fre(iatm).eq.1).or.(atm_fre(jatm).eq.1))then -+ -+c set hamiltonian mixing parameter -+ -+ omega=lambda1*omega -+ gamma=lambda1*gamma -+ -+ elseif((atm_fre(iatm).eq.2).or.(atm_fre(jatm).eq.2))then -+ -+c set hamiltonian mixing parameter -+ -+ omega=lambda2*omega -+ gamma=lambda2*gamma -+ -+ endif -+ -+ endif -+ -+ if(lselect)then -+ -+c calculate potential energy and virial -+ -+ engsrp=omega+engsrp -+ virsrp=virsrp-gamma*rsq -+ -+ if(lsolva)vdw_sol(kkk)=vdw_sol(kkk)+omega -+ -+ fx=gamma*xdf(m) -+ fy=gamma*ydf(m) -+ fz=gamma*zdf(m) -+ -+ fxx(iatm)=fxx(iatm)+fx -+ fyy(iatm)=fyy(iatm)+fy -+ fzz(iatm)=fzz(iatm)+fz -+ -+ fxx(jatm)=fxx(jatm)-fx -+ fyy(jatm)=fyy(jatm)-fy -+ fzz(jatm)=fzz(jatm)-fz -+ -+c calculate stress tensor -+ -+ strs(1)=strs(1)+xdf(m)*fx -+ strs(2)=strs(2)+xdf(m)*fy -+ strs(3)=strs(3)+xdf(m)*fz -+ strs(4)=strs(4)+ydf(m)*fy -+ strs(5)=strs(5)+ydf(m)*fz -+ strs(6)=strs(6)+zdf(m)*fz -+ -+ endif -+ -+c metadynamics local parameters -+ -+ if(lmetadyn.and.(idrive.or.jdrive))then -+ -+c local energy and virial -+ -+ eng_loc=eng_loc+omega -+ vir_loc=vir_loc-gamma*rsq -+ -+c local forces -+ -+ fxx_loc(iatm)=fxx_loc(iatm)+fx -+ fyy_loc(iatm)=fyy_loc(iatm)+fy -+ fzz_loc(iatm)=fzz_loc(iatm)+fz -+ -+ fxx_loc(jatm)=fxx_loc(jatm)-fx -+ fyy_loc(jatm)=fyy_loc(jatm)-fy -+ fzz_loc(jatm)=fzz_loc(jatm)-fz -+ -+c local stress tensor -+ -+ strs_loc(1)=strs_loc(1)+xdf(m)*fx -+ strs_loc(2)=strs_loc(2)+xdf(m)*fy -+ strs_loc(3)=strs_loc(3)+xdf(m)*fz -+ strs_loc(4)=strs_loc(4)+ydf(m)*fy -+ strs_loc(5)=strs_loc(5)+ydf(m)*fz -+ strs_loc(6)=strs_loc(6)+zdf(m)*fz -+ -+ endif -+ -+ endif -+ -+ endif -+ -+ enddo -+ -+c complete stress tensor -+ -+ stress(1)=stress(1)+strs(1) -+ stress(2)=stress(2)+strs(2) -+ stress(3)=stress(3)+strs(3) -+ stress(4)=stress(4)+strs(2) -+ stress(5)=stress(5)+strs(4) -+ stress(6)=stress(6)+strs(5) -+ stress(7)=stress(7)+strs(3) -+ stress(8)=stress(8)+strs(5) -+ stress(9)=stress(9)+strs(6) -+ -+ if(lmetadyn)then -+ -+ stress_loc(1)=stress_loc(1)+strs_loc(1) -+ stress_loc(2)=stress_loc(2)+strs_loc(2) -+ stress_loc(3)=stress_loc(3)+strs_loc(3) -+ stress_loc(4)=stress_loc(4)+strs_loc(2) -+ stress_loc(5)=stress_loc(5)+strs_loc(4) -+ stress_loc(6)=stress_loc(6)+strs_loc(5) -+ stress_loc(7)=stress_loc(7)+strs_loc(3) -+ stress_loc(8)=stress_loc(8)+strs_loc(5) -+ stress_loc(9)=stress_loc(9)+strs_loc(6) -+ -+ endif -+ -+ return -+ end subroutine srfrceneu -+ -+ end module vdw_module -diff -urN dl_class_1.9.orig/srcmod/vv_motion_module.f dl_class_1.9/srcmod/vv_motion_module.f ---- dl_class_1.9.orig/srcmod/vv_motion_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_motion_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,3031 @@ -+ module vv_motion_module -+ -+c*********************************************************************** -+c -+c dl_poly module for velocity verlet integration schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module,only : lmetadyn -+ use property_module -+ use setup_module -+ use shake_module -+ use site_module -+ use utility_module -+ -+ contains -+ -+ subroutine rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration. rattle algorithm -+c must be used in conjunction with integration algorithms -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical check,safe,lshmov -+ integer idnode,imcon,mxnode,natms,nscons,icyc,i,j,k -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,esig -+ real(8) txx,tyy,tzz,xxt,yyt,zzt,stresh,dx,dy,dz,dis,omega2 -+ real(8) strs1,strs2,strs3,strs5,strs6,strs9,amti,amtj,gamma -+ real(8) gammi,gammj,dli,dlj -+ -+ dimension stresh(9) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ -+c constraint virial -+ -+ vircon=0.d0 -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c test size of work arrays -+ -+ check=.true. -+ if(mxxdf.lt.nscons)check=.false. -+ if(mxnode.gt.1)call gstate(check) -+ if(.not.check)call error(idnode,412) -+ -+c application of constraint (shake) algorithm -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+c set bond parameter -+ -+ dx=dxt(k) -+ dy=dyt(k) -+ dz=dzt(k) -+ dis=prmcon(listcon(k,1)) -+ esig=max(esig,abs(dx*dx+dy*dy+dz*dz-dis*dis)/dis) -+ -+ enddo -+ -+ esig=esig*0.5d0 -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c bypass calculations if all tolerances satisfied -+ -+ if(.not.safe)then -+ -+c initialise increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c set constraint parameters -+ -+ dis=prmcon(listcon(k,1)) -+ omega2= dis*dis -+ amti= tstep*rmass(i) -+ amtj=-tstep*rmass(j) -+ -+c constraint force parameter -+ -+ dx=dxt(k) -+ dy=dyt(k) -+ dz=dzt(k) -+ -+ gamma=(omega2-(dx*dx+dy*dy+dz*dz))/ -+ x (-tstep*(amti-amtj)*(dxx(k)*dx+dyy(k)*dy+dzz(k)*dz)) -+ -+c accumulate bond virial -+ -+ vircon=vircon+gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1-gamma*dxx(k)*dxx(k) -+ strs2=strs2-gamma*dxx(k)*dyy(k) -+ strs3=strs3-gamma*dxx(k)*dzz(k) -+ strs5=strs5-gamma*dyy(k)*dyy(k) -+ strs6=strs6-gamma*dyy(k)*dzz(k) -+ strs9=strs9-gamma*dzz(k)*dzz(k) -+ -+c improve approximate constraint force -+ -+ gammi=-0.5d0*gamma*amti -+ xxt(i)=xxt(i)+dxx(k)*gammi -+ yyt(i)=yyt(i)+dyy(k)*gammi -+ zzt(i)=zzt(i)+dzz(k)*gammi -+ -+ gammj=-0.5d0*gamma*amtj -+ xxt(j)=xxt(j)+dxx(k)*gammj -+ yyt(j)=yyt(j)+dyy(k)*gammj -+ zzt(j)=zzt(j)+dzz(k)*gammj -+ -+ enddo -+ -+c sum up constraint forces across nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov)call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.0d0/dble(listme(i)) -+ dlj=1.0d0/dble(listme(j)) -+ -+ xxx(i)=xxx(i)+tstep*dli*xxt(i) -+ yyy(i)=yyy(i)+tstep*dli*yyt(i) -+ zzz(i)=zzz(i)+tstep*dli*zzt(i) -+ xxx(j)=xxx(j)+tstep*dlj*xxt(j) -+ yyy(j)=yyy(j)+tstep*dlj*yyt(j) -+ zzz(j)=zzz(j)+tstep*dlj*zzt(j) -+ -+ vxx(i)=vxx(i)+dli*xxt(i) -+ vzz(i)=vzz(i)+dli*zzt(i) -+ vyy(i)=vyy(i)+dli*yyt(i) -+ vxx(j)=vxx(j)+dlj*xxt(j) -+ vyy(j)=vyy(j)+dlj*yyt(j) -+ vzz(j)=vzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit for non-convergence -+ -+ if(.not.safe)return -+ -+c complete stress tensor -+ -+ stresh(1)=strs1 -+ stresh(2)=strs2 -+ stresh(3)=strs3 -+ stresh(4)=strs2 -+ stresh(5)=strs5 -+ stresh(6)=strs6 -+ stresh(7)=strs3 -+ stresh(8)=strs6 -+ stresh(9)=strs9 -+ -+c splice coordinate arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(stresh,9,buffer) -+ call splice -+ x (idnode,natms,listme,listot,xxx,yyy,zzz,buffer) -+ call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdrattle_r -+ -+ subroutine rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ -+c********************************************************************* -+c -+c dl_poly subroutine for applying a bond constraints to -+c the velocities of the constrained atoms using the rattle -+c procedure (replicated data version) -+c -+c copyright - daresbury laboratory -+c author w.smith october 2002 -+c -+c********************************************************************* -+ -+ implicit none -+ -+ logical safe -+ integer idnode,mxnode,natms,nscons,icyc -+ integer i,j,k -+ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt -+ real(8) esig,amti,amtj,gamma,gammi,gammj,dli,dlj,tolvel -+ -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ -+c constraint convergence tolerance -+ -+ tolvel=tolnce/tstep -+ -+c start of rattle cycle -+ -+ icyc=0 -+ safe=.false. -+ -+ do while(.not.safe.and.icyc.lt.mxshak) -+ -+ icyc=icyc+1 -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate velocity constraint corrections -+ -+ esig=0.d0 -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ amti= 0.5d0*tstep*rmass(i) -+ amtj=-0.5d0*tstep*rmass(j) -+ -+c calculate constraint force parameter -+ -+ gamma=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ -+ x dzz(k)*(vzz(i)-vzz(j)))/((amti-amtj)* -+ x (dxx(k)**2+dyy(k)**2+dzz(k)**2)) -+ esig=max(esig,abs(gamma)) -+ -+c improve approximate constraint force -+ -+ gammi=-gamma*amti -+ xxt(i)=xxt(i)+gammi*dxx(k) -+ yyt(i)=yyt(i)+gammi*dyy(k) -+ zzt(i)=zzt(i)+gammi*dzz(k) -+ gammj=-gamma*amtj -+ xxt(j)=xxt(j)+gammj*dxx(k) -+ yyt(j)=yyt(j)+gammj*dyy(k) -+ zzt(j)=zzt(j)+gammj*dzz(k) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolvel) -+ if(mxnode.gt.1)then -+ -+ call gstate(safe) -+ -+ endif -+ -+c terminate iteration if constraints satisfied -+ -+ if(.not.safe)then -+ -+c transport velocity adjustments to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+c update velocities -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ vxx(i)=vxx(i)+dli*xxt(i) -+ vyy(i)=vyy(i)+dli*yyt(i) -+ vzz(i)=vzz(i)+dli*zzt(i) -+ dlj=1.d0/dble(listme(j)) -+ vxx(j)=vxx(j)+dlj*xxt(j) -+ vyy(j)=vyy(j)+dlj*yyt(j) -+ vzz(j)=vzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c error exit if rattle fails -+ -+ if(.not.safe)return -+ -+c splice velocity arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+ return -+ end subroutine rdrattle_v -+ -+ subroutine nvevv_1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nve ensemble -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,i,j,k -+ integer iatm0,iatm1 -+ real(8) tstep,engke,tolnce,vircon -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1980) -+ enddo -+ -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c update velocities for first and second stages -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strkin(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvevv_1 -+ -+ subroutine nvtvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,taut,sigma,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,taut,sigma,engke,tolnce,vircon,chit -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,1990) -+ enddo -+ -+ endif -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c first pass of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+ engke=engke*chit**2 -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz, -+ x buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_b1 -+ -+ subroutine nvtvv_e1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x tstep,engke,tolnce,vircon) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - evans thermostat -+c Comp. Phys. reports 1, 299, (1984) -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,engke,tolnce,vircon,vdotf,scale,chit -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2000) -+ enddo -+ -+ endif -+ -+ if(ntcons.eq.0)safe=.true. -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ engke=0.5d0*engke -+ chit=0.5d0*vdotf/engke -+ -+c thermostat the velocities -+ -+ scale=(1.d0-0.5d0*tstep*chit) -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate kinetic energy and evans thermostat parameter -+ -+ engke=0.d0 -+ vdotf=0.d0 -+ do i=iatm0,iatm1 -+ -+ engke=engke+weight(i)*(vxx(i)**2+vyy(i)**2+vzz(i)**2) -+ vdotf=vdotf+vxx(i)*fxx(i)+vyy(i)*fyy(i)+vzz(i)*fzz(i) -+ -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+ buffer(1)=engke -+ buffer(2)=vdotf -+ call gdsum(buffer(1),2,buffer(3)) -+ engke=buffer(1) -+ vdotf=buffer(2) -+ -+ endif -+ engke=0.5d0*engke -+ chit=0.5d0*vdotf/engke -+ scale=(1.d0-0.5d0*tstep*chit) -+ -+c scale velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=scale*vxx(i) -+ vyy(i)=scale*vyy(i) -+ vzz(i)=scale*vzz(i) -+ -+ enddo -+ -+ engke=engke*scale**2 -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_e1 -+ -+ subroutine nvtvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntshl,keyshl,tstep,taut,sigma,chit,consv,conint,engke, -+ x tolnce,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c nvt ensemble - nose-hoover thermostat -+c Molecular Physics 87 (1996) 1117 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith october 2002 -+c amended - w. smith january 2005 : f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=4 -+ -+ logical safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons -+ integer i,j,k,iatm0,iatm1 -+ real(8) tstep,taut,sigma,chit,consv,conint,engke,tolnce,vircon -+ real(8) hstep,qmass -+ integer fail(nnn) -+ real(8) strkin(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ safe=.true. -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(1)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(2)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(3)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(4)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2010) -+ enddo -+ -+ endif -+ -+c inertia parameter for Nose-Hoover thermostat -+ -+ hstep=0.5d0*tstep -+ qmass=2.d0*sigma*taut**2 -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ if(ntcons.gt.0) -+ x call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c integrate and apply nvt thermostat -+ -+ call nvtscale -+ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, -+ x chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c integrate and apply nvt thermostat -+ -+ call nvtscale -+ x (idnode,mxnode,natms,engke,sigma,hstep,qmass,taut, -+ x chit,conint) -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxt,yyt,zzt,txx,tyy,tzz,stat=fail(1)) -+ deallocate(dxx,dyy,dzz,dxt,dyt,dzt,stat=fail(2)) -+ -+ endif -+ -+ return -+ end subroutine nvtvv_h1 -+ -+ subroutine nptvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,virtot,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical newjob,safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk -+ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce -+ real(8) virtot,vircon,volm,volm0,elrc0,virlrc0,psyst -+ real(8) chit,chip,scale,beta -+ -+ integer fail(nnn) -+ real(8) strkin(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2020) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2030) -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engke=getkin(natms,idnode,mxnode) -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+ scale=1.d0 -+ -+ if(iter.eq.mxiter)then -+ -+c calculate system pressure -+ -+ psyst=(2.d0*engke-virtot-vircon)/(3.d0*volm) -+ -+c apply Berendsen barostat taup is relaxation time -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+ endif -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=scale*xxx(i)+tstep*vxx(i) -+ yyy(i)=scale*yyy(i)+tstep*vyy(i) -+ zzz(i)=scale*zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c apply Berendsen thermostat taut is relaxation time -+ -+ engke=getkin(natms,idnode,mxnode) -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nptvv_b1 -+ -+ subroutine nptvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntpatm,ntshl,keyshl,tstep,taut,taup,sigma,temp,chip,chit, -+ x consv,conint,engke,elrc,tolnce,vircon,virtot,virlrc,volm, -+ x press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c npt ensemble - Melchionna, Ciccotti and Holian -+c Molecular Physics 78 (1993) 533 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith november 2002 -+c amended - w. smith january 2005: f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ integer, parameter :: ncyc=5 -+ -+ logical safe,lshmov,newjob -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc -+ real(8) tstep,taup,taut,sigma,temp,chip,chit,consv,conint -+ real(8) engke,elrc,tolnce,vircon,virtot,virlrc,volm,press -+ real(8) volm0,elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass -+ real(8) vzero,chit0,chip0,cons0,scale,fstep -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) cell0(9),com(3),vom(3),strkin(9),uni(9) -+ -+ save newjob,totmas,volm0,elrc0,virlrc0,dens0 -+ save cell0,iatm0,iatm1,hstep,qstep,fstep,pmass,qmass -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2040) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c inertia parameter for Nose-Hoover thermostat and barostat -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2050) -+ enddo -+ -+ endif -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metdynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c volume integration parameter -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptscale_p -+ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update positions -+ -+ scale=exp(tstep*chip) -+ do i=iatm0,iatm1 -+ -+ xxx(i)=scale*(xxx(i)-com(1))+tstep*vxx(i)+com(1) -+ yyy(i)=scale*(yyy(i)-com(2))+tstep*vyy(i)+com(2) -+ zzz(i)=scale*(zzz(i)-com(3))+tstep*vzz(i)+com(3) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptscale_p -+ x (idnode,mxnode,natms,engke,fstep,pmass,chip,chit, -+ x volm,press,vircon,virtot) -+ -+c integrate and apply npt thermostat -+ -+ call nptscale_t -+ x (idnode,mxnode,natms,engke,temp,sigma,qstep,pmass,qmass, -+ x taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2+ -+ x 0.5d0*pmass*chip**2+press*volm -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nptvv_h1 -+ -+ subroutine nstvv_b1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons, -+ x ntcons,ntpatm,mode,tstep,taut,taup,sigma,engke,press,elrc, -+ x virlrc,tolnce,vircon,volm) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c anisotropic npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith december 2002 -+c amended - w. smith january 2005 : f90 conversion -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ -+ logical newjob,safe,lshmov -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,mode -+ real(8) tstep,taut,taup,sigma,engke,press,elrc,virlrc,tolnce,beta -+ real(8) vircon,volm,volm0,elrc0,virlrc0,chit -+ real(8) xtmp,ytmp,ztmp -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) uni(9),strkin(9),celp(10) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2060) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(3)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(4)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(5)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(6)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(7)) -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2070) -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c extract previous constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c zero scaling matrix -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(iter.eq.mxiter)then -+ -+c calculate Berendsen barostat - taup is relaxation time -+ -+ do i=1,9 -+ eta(i)=tstep*beta*(stress(i)+strcns(i)- -+ x press*volm*uni(i))/(taup*volm)+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ endif -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ xtmp=eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) -+ ytmp=eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) -+ ztmp=eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) -+ xxx(i)=tstep*vxx(i)+xtmp -+ yyy(i)=tstep*vyy(i)+ytmp -+ zzz(i)=tstep*vzz(i)+ztmp -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c second pass of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+0.5d0*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+0.5d0*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+0.5d0*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c apply Berendsen thermostat taut is relaxation time -+ -+ engke=getkin(natms,idnode,mxnode) -+ chit=sqrt(1.d0+tstep/taut*(sigma/engke-1.d0)) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ engke=0.5d0*(strkin(1)+strkin(5)+strkin(9)) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nstvv_b1 -+ -+ subroutine nstvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,nscons,ntcons, -+ x ntpatm,mode,ntshl,keyshl,tstep,taut,taup,sigma,temp,chit, -+ x consv,conint,engke,elrc,tolnce,vircon,virlrc,volm,press, -+ x chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for integrating newtonian equations of -+c motion in molecular dynamics - velocity verlet incorporating -+c bond constraints via the shake/rattle algorithm -+c -+c anisotropic npt ensemble - Melchionna, Ciccotti and Holian -+c Molecular Physics 78 (1993) 533 -+c -+c parallel replicated data version -+c -+c copyright - daresbury laboratory -+c author - w. smith november 2002 -+c amended - w. smith january 2005 : f90 conversion -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=7 -+ integer, parameter :: ncyc=5 -+ -+ logical safe,lshmov,newjob -+ integer isw,idnode,mxnode,natms,imcon,nscons,ntcons,ntpatm -+ integer i,j,k,iatm0,iatm1,mxiter,iter,kk,icyc,mode -+ real(8) tstep,taup,taut,sigma,temp,chit,consv,conint,chit0 -+ real(8) engke,elrc,tolnce,vircon,virlrc,volm,press,volm0 -+ real(8) elrc0,virlrc0,hstep,qstep,totmas,qmass,pmass -+ real(8) cons0,cxx,cyy,czz,chip2,fstep -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ -+ integer fail(nnn) -+ real(8) com(3),vom(3),czero(9),strkin(9),eta0(9),celp(10) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metdynamics shell thermostat variables -+ -+ data newjob/.true./ -+ -+ save newjob,totmas,volm0,elrc0,virlrc0,dens0 -+ save iatm0,iatm1,hstep,qstep,pmass,qmass,fstep -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2080) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c system total mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c inertia parameter for Nose-Hoover thermostat and barostat -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2090) -+ enddo -+ -+ endif -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metdynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ czero(i)=cell(i) -+ eta0(i)=eta(i) -+ -+ enddo -+ do i=iatm0,iatm1 -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+ endif -+ -+c subtract kinetic terms from stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ do i=1,9 -+ stress(i)=stress(i)-strkin(i) -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw = 1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c calculate current volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metdynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstscale_p -+ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update positions -+ -+ do i=iatm0,iatm1 -+ -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ -+ xxx(i)=xxx(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyy(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzz(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c subtract old constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c correct constraint bonds using rattle -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+c add new constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ cell(i)=czero(i) -+ eta(i)=eta0(i) -+ -+ enddo -+ do i=iatm0,iatm1 -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c second stage of velocity verlet algorithm -+ -+ else -+ -+c update velocities -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+ if(ntcons.gt.0)then -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c add constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+c correct constraint bond velocities using rattle -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstscale_p -+ x (idnode,mxnode,natms,mode,fstep,pmass,chit,press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstscale_t -+ x (idnode,mxnode,natms,mode,engke,temp,sigma,qstep, -+ x pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=iatm0,iatm1 -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+c merge velocity data -+ -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstress(natms,idnode,mxnode,strkin) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ if(mxnode.gt.1) -+ x call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c deallocate working arrays -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(xxo,yyo,zzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(txx,tyy,tzz,dxx,dyy,dzz,stat=fail(2)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nstvv_h1 -+ -+ end module vv_motion_module -+ -diff -urN dl_class_1.9.orig/srcmod/vv_rotation1_module.f dl_class_1.9/srcmod/vv_rotation1_module.f ---- dl_class_1.9.orig/srcmod/vv_rotation1_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_rotation1_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,4701 @@ -+ module vv_rotation1_module -+ -+c*********************************************************************** -+c -+c dl_poly module 1 for velocity verlet rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module, only : lmetadyn -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use vv_motion_module -+ use utility_module -+ -+ contains -+ -+ subroutine rotate_omega -+ x (idnode,mxnode,ngrp,tstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for updating the angular velocity and momentum -+c for rigid bodies -+c -+c copyright - daresbury laboratory -+c author - w. smith sept 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer idnode,mxnode,ngrp,i,j,jr,jrs,ig,igrp1,igrp2,id -+ real(8) ftx,fty,ftz,fmx,fmy,fmz,tstep,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ -+ real(8) p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp) -+ real(8) dtx(mxatms),dty(mxatms),dtz(mxatms),rot(9) -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ tq1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ tq2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ tq3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=p0(ig)+tq0*tstep -+ p1(ig)=p1(ig)+tq1*tstep -+ p2(ig)=p2(ig)+tq2*tstep -+ p3(ig)=p3(ig)+tq3*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxx(ig)+fmx*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*tstep/gmass(id) -+ -+ enddo -+ -+ return -+ end subroutine rotate_omega -+ -+ subroutine nosquish(ig,tstep,qq0,qq1,qq2,qq3,pp0,pp1,pp2,pp3) -+ -+c*********************************************************************** -+c -+c dlpoly routine to implement the symplectic no_squish quaternion -+c algorithm of miller et al j.chem.phys 116 (2002) 8649 -+c -+c copyright daresbury laboratory -+c author m. leslie jan 2004 -+c amended w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer m,ig,id -+ real(8) zetax,zetay,zetaz,tstep,cs,sn,trstep -+ -+ integer, parameter :: mrot=10 -+ real(8), parameter :: ov4=0.25d0 -+ real(8), parameter :: ov8=0.125d0 -+ -+ real(8) qq0(*),qq1(*),qq2(*),qq3(*) -+ real(8) pp0(*),pp1(*),pp2(*),pp3(*) -+ -+ real(8) qn1(0:3),pq2(0:3),qn2(0:3),pq3(0:3) -+ real(8) qn3(0:3),pq4(0:3) -+ -+c rotational time step -+ -+ trstep=tstep/dble(mrot) -+ -+c rotation: iterate over mrot rotational time steps -+ -+ id=lstgtp(ig) -+ -+ do m=1,mrot -+ -+ zetaz=ov8*rotinz(id,2)*trstep* -+ x (-pp0(ig)*qq3(ig)+pp1(ig)*qq2(ig)- -+ x pp2(ig)*qq1(ig)+pp3(ig)*qq0(ig)) -+ cs=cos(zetaz) -+ sn=sin(zetaz) -+ qn1(0)=cs*qq0(ig)-sn*qq3(ig) -+ qn1(1)=cs*qq1(ig)+sn*qq2(ig) -+ qn1(2)=cs*qq2(ig)-sn*qq1(ig) -+ qn1(3)=cs*qq3(ig)+sn*qq0(ig) -+ pq2(0)=cs*pp0(ig)-sn*pp3(ig) -+ pq2(1)=cs*pp1(ig)+sn*pp2(ig) -+ pq2(2)=cs*pp2(ig)-sn*pp1(ig) -+ pq2(3)=cs*pp3(ig)+sn*pp0(ig) -+ -+ zetay=ov8*rotiny(id,2)*trstep* -+ x (-pq2(0)*qn1(2)-pq2(1)*qn1(3)+ -+ x pq2(2)*qn1(0)+pq2(3)*qn1(1)) -+ cs=cos(zetay) -+ sn=sin(zetay) -+ qn2(0)=cs*qn1(0)-sn*qn1(2) -+ qn2(1)=cs*qn1(1)-sn*qn1(3) -+ qn2(2)=cs*qn1(2)+sn*qn1(0) -+ qn2(3)=cs*qn1(3)+sn*qn1(1) -+ pq3(0)=cs*pq2(0)-sn*pq2(2) -+ pq3(1)=cs*pq2(1)-sn*pq2(3) -+ pq3(2)=cs*pq2(2)+sn*pq2(0) -+ pq3(3)=cs*pq2(3)+sn*pq2(1) -+ -+ zetax=ov4*rotinx(id,2)*trstep* -+ x (-pq3(0)*qn2(1)+pq3(1)*qn2(0)+ -+ x pq3(2)*qn2(3)-pq3(3)*qn2(2)) -+ cs=cos(zetax) -+ sn=sin(zetax) -+ qn3(0)=cs*qn2(0)-sn*qn2(1) -+ qn3(1)=cs*qn2(1)+sn*qn2(0) -+ qn3(2)=cs*qn2(2)+sn*qn2(3) -+ qn3(3)=cs*qn2(3)-sn*qn2(2) -+ pq4(0)=cs*pq3(0)-sn*pq3(1) -+ pq4(1)=cs*pq3(1)+sn*pq3(0) -+ pq4(2)=cs*pq3(2)+sn*pq3(3) -+ pq4(3)=cs*pq3(3)-sn*pq3(2) -+ -+ zetay=ov8*rotiny(id,2)*trstep* -+ x (-pq4(0)*qn3(2)-pq4(1)*qn3(3)+ -+ x pq4(2)*qn3(0)+pq4(3)*qn3(1)) -+ cs=cos(zetay) -+ sn=sin(zetay) -+ qn2(0)=cs*qn3(0)-sn*qn3(2) -+ qn2(1)=cs*qn3(1)-sn*qn3(3) -+ qn2(2)=cs*qn3(2)+sn*qn3(0) -+ qn2(3)=cs*qn3(3)+sn*qn3(1) -+ pq3(0)=cs*pq4(0)-sn*pq4(2) -+ pq3(1)=cs*pq4(1)-sn*pq4(3) -+ pq3(2)=cs*pq4(2)+sn*pq4(0) -+ pq3(3)=cs*pq4(3)+sn*pq4(1) -+ -+ zetaz=ov8*rotinz(id,2)*trstep* -+ x (-pq3(0)*qn2(3)+pq3(1)*qn2(2)- -+ x pq3(2)*qn2(1)+pq3(3)*qn2(0)) -+ cs=cos(zetaz) -+ sn=sin(zetaz) -+ qq0(ig)=cs*qn2(0)-sn*qn2(3) -+ qq1(ig)=cs*qn2(1)+sn*qn2(2) -+ qq2(ig)=cs*qn2(2)-sn*qn2(1) -+ qq3(ig)=cs*qn2(3)+sn*qn2(0) -+ pp0(ig)=cs*pq3(0)-sn*pq3(3) -+ pp1(ig)=cs*pq3(1)+sn*pq3(2) -+ pp2(ig)=cs*pq3(2)-sn*pq3(1) -+ pp3(ig)=cs*pq3(3)+sn*pq3(0) -+ -+ enddo -+ -+ return -+ end subroutine nosquish -+ -+ subroutine nveqvv_1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author m. leslie jan 2004 -+c amended w.smith jan 2005: f90 conversion -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,jrs,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,engfke -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2100) -+ enddo -+ -+ newjob=.false. -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c merge centre of mass velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge centre of mass position from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nveqvv_1 -+ -+ subroutine nvtqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1 -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,engfke -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2120) -+ enddo -+ -+ newjob=.false. -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algoritm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c exchange position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nvtqvv_b1 -+ -+ subroutine nvtqvv_h1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, -+ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=6 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr -+ integer id,ig,ifre,jrs,idum -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) engfke -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,p0,p1,p2,p3 -+ -+ data newjob/.true./ -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c nose-hoover inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(6)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2140) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c apply thermostat for first stage -+ -+ if(isw.eq.1)then -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ endif -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+c operations common to first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algoritm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxx(i)+tstep*vxx(i) -+ yyy(i)=yyy(i)+tstep*vyy(i) -+ zzz(i)=zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+ engke=engfke+engtrn -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ endif -+ -+ return -+ end subroutine nvtqvv_h1 -+ -+ subroutine nptqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,chip,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 -+ real(8) virtot,psyst,press,taup,scale,engfke -+ -+ integer, parameter :: nnn=11 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2160) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ if(isw.eq.1)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) -+ -+ endif -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2170) -+ enddo -+ -+ newjob=.false. -+ if(ntcons.gt.0)safe=.false. -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta at start of time step -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c rigid body motion for first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 -+ -+ mxiter=1 -+ if(ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+ scale=1.d0 -+ -+ if(iter.eq.mxiter)then -+ -+c calculate system pressure -+ -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ -+c apply Berendsen barostat -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+ endif -+ -+c update centre of mass position -+ -+ do ig=igrp1,igrp2 -+ -+ gcmx(ig)=scale*gcmx(ig)+tstep*gvxx(ig) -+ gcmy(ig)=scale*gcmy(ig)+tstep*gvyy(ig) -+ gcmz(ig)=scale*gcmz(ig)+tstep*gvzz(ig) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=gcmx(ig)+ -+ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ yyy(i)=gcmy(ig)+ -+ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ zzz(i)=gcmz(ig)+ -+ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=scale*xxx(i)+tstep*vxx(i) -+ yyy(i)=scale*yyy(i)+tstep*vyy(i) -+ zzz(i)=scale*zzz(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=scale*uni(i) -+ enddo -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ if(isw.eq.1)then -+ -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) -+ deallocate(gxo,gyo,gzo,stat=fail(6)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine nptqvv_b1 -+ -+ subroutine nptqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virtot,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr -+ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) taup,temp,press,virtot,vzero,chit0,chip0,cons0 -+ real(8) chip,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas -+ real(8) volm0,scale,cxx,cyy,czz,engfke,fstep -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,hstep,qstep,fstep,pmass,qmass -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 -+ save totmas,dens0,cell0 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2200) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) -+ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2210) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gcmx(ig)-com(1) -+ cyy=gcmy(ig)-com(2) -+ czz=gcmz(ig)-com(3) -+ gcmx(ig)=gcmx(ig)+tstep*(gvxx(ig)+chip*cxx) -+ gcmy(ig)=gcmy(ig)+tstep*(gvyy(ig)+chip*cyy) -+ gcmz(ig)=gcmz(ig)+tstep*(gvzz(ig)+chip*czz) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ xxx(i)=xxx(i)+tstep*(vxx(i)+chip*cxx) -+ yyy(i)=yyy(i)+tstep*(vyy(i)+chip*cyy) -+ zzz(i)=zzz(i)+tstep*(vzz(i)+chip*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c operations for second stage only -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ do icyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/volm0)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c calculate conserved variable -+ -+ consv=conint+0.5d0*qmass*chit**2+press*volm -+ x +0.5d0*pmass*chip**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c end of iteration cycle -+ -+ enddo -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) -+ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) -+ -+ endif -+ -+ return -+ end subroutine nptqvv_h1 -+ -+ subroutine nstqvv_b1 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nst ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr,kk,mode -+ integer id,ifre,jrs,idum,ig,iatm0,iatm1,ntpatm,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engfke -+ real(8) tqx,tqy,tqz,ftx,fty,ftz -+ real(8) vaa,vbb,vcc,engtrn,fmx,fmy,fmz -+ real(8) qt0,qt1,qt2,qt3,opx,opy,opz,taut,sigma,engtke -+ real(8) chit,beta,volm,volm0,elrc,elrc0,virlrc,virlrc0 -+ real(8) press,taup,xtmp,ytmp,ztmp -+ -+ integer, parameter :: nnn=11 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ real(8) celp(10),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ -+ save newjob,volm0,elrc0,virlrc0,iatm0,iatm1,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+ safe=.true. -+ -+ if(newjob)then -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2240) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c atom block indices -+ -+ iatm0=(idnode*natms)/mxnode+1 -+ iatm1=((idnode+1)*natms)/mxnode -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(2)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(3)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(4)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(5)) -+ -+ if(isw.eq.1)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(6)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(7)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp),stat=fail(8)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(9)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(10)) -+ -+ endif -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(11)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2250) -+ enddo -+ -+ newjob=.false. -+ if(ntcons.gt.0)safe=.false. -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta at start of time step -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities 1/2 time step first and second stages -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+pt5*tstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+pt5*tstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+pt5*tstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c rigid body motion for first and second stages -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*pt5*tstep -+ p1(ig)=p1(ig)+qt1*pt5*tstep -+ p2(ig)=p2(ig)+qt2*pt5*tstep -+ p3(ig)=p3(ig)+qt3*pt5*tstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c store current integration variables -+ -+ if(ntcons.gt.0)then -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c extract previous constraint terms from stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+ endif -+ -+c iteration required if ntcons > 0 -+ -+ mxiter=1 -+ if(ntcons.gt.0)mxiter=2 -+ do iter=1,mxiter -+ -+c zero scaling matrix -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(iter.eq.mxiter)then -+ -+c calculate Berendsen barostat -+ -+ do i=1,9 -+ eta(i)=tstep*beta*(stress(i)+strcns(i)- -+ x press*volm*uni(i))/(taup*volm)+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+ endif -+ -+c update centre of mass position -+ -+ do ig=igrp1,igrp2 -+ -+ xtmp=eta(1)*gcmx(ig)+eta(4)*gcmy(ig)+eta(7)*gcmz(ig) -+ ytmp=eta(2)*gcmx(ig)+eta(5)*gcmy(ig)+eta(8)*gcmz(ig) -+ ztmp=eta(3)*gcmx(ig)+eta(6)*gcmy(ig)+eta(9)*gcmz(ig) -+ gcmx(ig)=tstep*gvxx(ig)+xtmp -+ gcmy(ig)=tstep*gvyy(ig)+ytmp -+ gcmz(ig)=tstep*gvzz(ig)+ztmp -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=gcmx(ig)+ -+ x rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ yyy(i)=gcmy(ig)+ -+ x rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ zzz(i)=gcmz(ig)+ -+ x rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=tstep*vxx(i)+ -+ x eta(1)*xxx(i)+eta(4)*yyy(i)+eta(7)*zzz(i) -+ yyy(i)=tstep*vyy(i)+ -+ x eta(2)*xxx(i)+eta(5)*yyy(i)+eta(8)*zzz(i) -+ zzz(i)=tstep*vzz(i)+ -+ x eta(3)*xxx(i)+eta(6)*yyy(i)+eta(9)*zzz(i) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+ endif -+ -+ if(iter.lt.mxiter)then -+ -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ -+ enddo -+ -+ endif -+ -+ enddo -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c end of first stage of velocity verlet algorithm -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+ endif -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities -+ -+ do i=iatm0,iatm1 -+ -+ if(lstfrz(i).eq.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c merge group velocities from all processors -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(2)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(3)) -+ -+ if(isw.eq.1)then -+ -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,c0,c1,c2,c3,stat=fail(5)) -+ deallocate(gxo,gyo,gzo,stat=fail(6)) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine nstqvv_b1 -+ -+ subroutine nstqvv_h1 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircon,virlrc,vircom,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly routine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - provided rigid body sites -+c and constraint sites do not coincide. -+c -+c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith may 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ integer, parameter :: nnn=12 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ logical safe,lshmov,newjob -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons,ntfree -+ integer ifre1,ifre2,igrp1,igrp2,igrp,i,j,k,jr,mode -+ integer id,ig,ifre,jrs,idum,mxiter,iter,ntpatm,kk,icyc -+ real(8) chit,consv,conint,engke,engrot,taut,sigma,tolnce,tstep -+ real(8) vircom,vircon,hstep,qmass,opx,opy,opz,fmx,fmy,fmz,engtrn -+ real(8) ftx,fty,ftz,tqx,tqy,tqz,qt0,qt1,qt2,qt3,vaa,vbb,vcc -+ real(8) taup,temp,press,vzero,chit0,cons0 -+ real(8) chip2,volm,elrc,elrc0,virlrc,virlrc0,qstep,pmass,totmas -+ real(8) volm0,cxx,cyy,czz,engfke,fstep -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) -+ real(8) czero(9),eta0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newjob,hstep,qstep,fstep,pmass,qmass -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,volm0,elrc0,virlrc0 -+ save totmas,dens0 -+ -+ data newjob/.true./ -+ -+ safe=.true. -+ if(newjob)then -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2280) -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(1)) -+ if(ntcons.gt.0)then -+ -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(2)) -+ allocate(oxo(mxgrp),oyo(mxgrp),ozo(mxgrp),stat=fail(3)) -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(4)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(5)) -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(6)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(7)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(8)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(9)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp),stat=fail(10)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(11)) -+ -+ endif -+ if(newjob)then -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(12)) -+ endif -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2290) -+ enddo -+ -+ newjob=.false. -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+ if(ntcons.gt.0)then -+ -+c construct current bond vectors -+ -+ do k=1,nscons -+ -+c indices of atoms in bond -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate current bond vector -+ -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition for bond vectors -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store current integration variables if ntcons > 0 -+ -+ if(ntcons.gt.0)then -+ -+ vzero=volm -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ eta0(i)=eta(i) -+ czero(i)=cell(i) -+ -+ enddo -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, -+ x press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c update free atom velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vxx(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyy(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzz(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* Rigid body motion **************************** -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c calculate com force arrays -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ qt0=2.0d0*(-q1(ig)*tqx-q2(ig)*tqy-q3(ig)*tqz) -+ qt1=2.0d0*( q0(ig)*tqx-q3(ig)*tqy+q2(ig)*tqz) -+ qt2=2.0d0*( q3(ig)*tqx+q0(ig)*tqy-q1(ig)*tqz) -+ qt3=2.0d0*(-q2(ig)*tqx+q1(ig)*tqy+q0(ig)*tqz) -+ -+c update quaternion momenta by 1/2 time step -+ -+ p0(ig)=p0(ig)+qt0*hstep -+ p1(ig)=p1(ig)+qt1*hstep -+ p2(ig)=p2(ig)+qt2*hstep -+ p3(ig)=p3(ig)+qt3*hstep -+ -+c update centre of mass velocity by 1/2 time step -+ -+ gvxx(ig)=gvxx(ig)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyy(ig)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzz(ig)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c move centre of mass by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gcmx(ig)-com(1) -+ cyy=gcmy(ig)-com(2) -+ czz=gcmz(ig)-com(3) -+ gcmx(ig)=gcmx(ig)+ -+ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ gcmy(ig)=gcmy(ig)+ -+ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ gcmz(ig)=gcmz(ig)+ -+ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c rotate rigid groups: nosquish algorithm -+ -+ do ig=igrp1,igrp2 -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ enddo -+ -+c new atomic positions for atoms in rigid bodies-relative to c.o.m -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+rot(3)*gzz(id,j) -+ x +gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+rot(6)*gzz(id,j) -+ x +gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+rot(9)*gzz(id,j) -+ x +gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ k=k+1 -+ i=lstfre(ifre) -+ cxx=xxx(i)-com(1) -+ cyy=yyy(i)-com(2) -+ czz=zzz(i)-com(3) -+ xxx(i)=xxx(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyy(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzz(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge position data -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply shake corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c subtract old constraint terms from stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+c correct constraint bonds using rattle -+ -+ safe=.false. -+ call rdrattle_r -+ x (safe,lshmov,idnode,imcon,mxnode,natms,nscons, -+ x tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt, -+ x txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ if(.not.safe)return -+ -+c add new constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore original integration parameters if iter < mxiter -+ -+ if(iter.lt.mxiter)then -+ -+ volm=vzero -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ eta(i)=eta0(i) -+ cell(i)=czero(i) -+ -+ enddo -+ do i=1,natms -+ -+ xxx(i)=xxo(i) -+ yyy(i)=yyo(i) -+ zzz(i)=zzo(i) -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ do ig=1,ngrp -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gcmx(ig)=gxo(ig) -+ gcmy(ig)=gyo(ig) -+ gcmz(ig)=gzo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+ endif -+ -+ endif -+ -+c operations for second stage only -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotation matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities from all nodes -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c correct constraint bond velocities using rattle -+ -+ if(ntcons.gt.0)then -+ -+ safe=.false. -+ call rdrattle_v -+ x (safe,idnode,mxnode,natms,nscons,tolnce,tstep, -+ x dxx,dyy,dzz,txx,tyy,tzz,xxt,yyt,zzt) -+ if(.not.safe)return -+ -+c add constraint terms to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c kinetic terms for stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strkin(i)+strgrp(i)+strbod(i) -+ enddo -+ -+ do icyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit, -+ x press,volm) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot, -+ x temp,sigma,qstep,pmass,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+ engke=engfke+engtrn -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c end of second stage of velocity verlet algorithm -+ -+ endif -+ -+c end of iteration cycle -+ -+ enddo -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do kk=1,ntpatm -+ dens(kk)=dens0(kk)*(volm0/volm) -+ enddo -+ -+c deallocate working arrays -+ -+ deallocate(dtx,dty,dtz,stat=fail(1)) -+ -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(3)) -+ deallocate(xxt,yyt,zzt,dxt,dyt,dzt,stat=fail(4)) -+ deallocate(xxo,yyo,zzo,oxo,oyo,ozo,stat=fail(5)) -+ deallocate(vxo,vyo,vzo,b0,b1,b2,b3,stat=fail(6)) -+ deallocate(gxo,gyo,gzo,gvxo,gvyo,gvzo,stat=fail(7)) -+ -+ endif -+ -+ return -+ end subroutine nstqvv_h1 -+ -+ end module vv_rotation1_module -+ -diff -urN dl_class_1.9.orig/srcmod/vv_rotation2_module.f dl_class_1.9/srcmod/vv_rotation2_module.f ---- dl_class_1.9.orig/srcmod/vv_rotation2_module.f 1970-01-01 01:00:00.000000000 +0100 -+++ dl_class_1.9/srcmod/vv_rotation2_module.f 2011-02-22 12:46:30.000000000 +0100 -@@ -0,0 +1,5924 @@ -+ module vv_rotation2_module -+ -+c*********************************************************************** -+c -+c dl_poly module 2 for velocity verlet rotational integration -+c schemes -+c copyright - daresbury laboratory -+c author - w. smith aug 2006 -+c adapted - d. quigley - metadynamics -+c -+c*********************************************************************** -+ -+ use config_module -+ use ensemble_tools_module -+ use error_module -+ use metafreeze_module, only : lmetadyn -+ use property_module -+ use rigid_body_module -+ use setup_module -+ use shake_module -+ use site_module -+ use vv_rotation1_module -+ use utility_module -+ -+ contains -+ -+ subroutine qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,stresh) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration in the velocity verlet scheme. assumes rigid -+c bodies connected by constraints. must be used in conjunction with -+c velocity verlet integration algorithm. note the iteration is -+c handled by the calling routine. -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,imcon,mxnode,natms,nscons,i,j,k,ik -+ real(8) tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt,dzt,txx,tyy -+ real(8) tzz,xxt,yyt,zzt,stresh,strs1,strs2,strs3,strs5,strs6 -+ real(8) strs9,tstep2,esig,dis2,tqa,tqb,gamma,dli,dlj -+ -+ real(8), allocatable :: esig1(:),ggx(:),ggy(:),ggz(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension dxt(mxcons),dyt(mxcons),dzt(mxcons) -+ dimension stresh(9),tqa(3),tqb(3) -+ -+ save newjob,esig1,ggx,ggy,ggz -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (esig1(mxcons),ggx(mxcons),ggy(mxcons),ggz(mxcons), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1615) -+ newjob=.false. -+ -+ endif -+ -+c accumulators for stress tensor -+ -+ strs1=0.d0 -+ strs2=0.d0 -+ strs3=0.d0 -+ strs5=0.d0 -+ strs6=0.d0 -+ strs9=0.d0 -+ -+c timestep squared -+ -+ tstep2=tstep*tstep -+ -+c constraint bond vectors are dxx,dyy,dzz (input) -+ -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+c calculate temporary bond vector -+ -+ dxt(k)=xxx(i)-xxx(j) -+ dyt(k)=yyy(i)-yyy(j) -+ dzt(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+c periodic boundary condition -+ -+ call images(imcon,0,1,nscons,cell,dxt,dyt,dzt) -+ -+c calculate maximum error in bondlength -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+ dis2=prmcon(listcon(k,1))**2 -+ esig1(k)=(dis2-(dxt(k)**2+dyt(k)**2+dzt(k)**2))/dis2 -+ esig=max(esig,abs(esig1(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolnce) -+ -+ if(mxnode.gt.1)call gstate(safe) -+ -+c continue if any tolerances unsatisfied -+ -+ if(.not.safe)then -+ -+c initialise force increment arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint forces -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dis2=prmcon(listcon(k,1))**2 -+ -+ if(newstep)then -+ -+ call pivot(1,i,k,ik,tqa,dxx,dyy,dzz) -+ call pivot(1,j,k,ik,tqb,dxx,dyy,dzz) -+ -+ ggx(k)=tstep2*(tqa(1)+tqb(1))/dis2 -+ ggy(k)=tstep2*(tqa(2)+tqb(2))/dis2 -+ ggz(k)=tstep2*(tqa(3)+tqb(3))/dis2 -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig1(k)/(dxt(k)*ggx(k)+dyt(k)*ggy(k)+dzt(k)*ggz(k)) -+ -+c accumulate bond virial -+ -+ vircon=vircon-gamma*(dxx(k)**2+dyy(k)**2+dzz(k)**2) -+ -+ strs1=strs1+gamma*dxx(k)*dxx(k) -+ strs2=strs2+gamma*dxx(k)*dyy(k) -+ strs3=strs3+gamma*dxx(k)*dzz(k) -+ strs5=strs5+gamma*dyy(k)*dyy(k) -+ strs6=strs6+gamma*dyy(k)*dzz(k) -+ strs9=strs9+gamma*dzz(k)*dzz(k) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)+dxx(k)*gamma -+ yyt(i)=yyt(i)+dyy(k)*gamma -+ zzt(i)=zzt(i)+dzz(k)*gamma -+ xxt(j)=xxt(j)-dxx(k)*gamma -+ yyt(j)=yyt(j)-dyy(k)*gamma -+ zzt(j)=zzt(j)-dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+xxt(i)*dli -+ fyy(i)=fyy(i)+yyt(i)*dli -+ fzz(i)=fzz(i)+zzt(i)*dli -+ fxx(j)=fxx(j)+xxt(j)*dlj -+ fyy(j)=fyy(j)+yyt(j)*dlj -+ fzz(j)=fzz(j)+zzt(j)*dlj -+ -+ enddo -+ -+c complete stress tensor -+ -+ stresh(1)=stresh(1)+strs1 -+ stresh(2)=stresh(2)+strs2 -+ stresh(3)=stresh(3)+strs3 -+ stresh(4)=stresh(4)+strs2 -+ stresh(5)=stresh(5)+strs5 -+ stresh(6)=stresh(6)+strs6 -+ stresh(7)=stresh(7)+strs3 -+ stresh(8)=stresh(8)+strs6 -+ stresh(9)=stresh(9)+strs9 -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ -+ endif -+ -+ return -+ end subroutine qrattle_r -+ -+ subroutine qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for applying bond constraint corrections after -+c atomic integration in the velocity verlet scheme. assumes rigid -+c bodies connected by constraints. must be used in conjunction with -+c velocity verlet integration algorithm. note the iteration is -+c handled by the calling routine. -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ logical safe,lshmov,newstep,newjob -+ integer fail,idnode,mxnode,natms,nscons,i,j,k,ik -+ real(8) tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz,tqa,tqb -+ real(8) xxt,yyt,zzt,tstep2,esig,gamma,dli,dlj -+ real(8) tolvel -+ -+ real(8), allocatable :: esig2(:),hhx(:),hhy(:),hhz(:) -+ -+ dimension xxt(mxatms),yyt(mxatms),zzt(mxatms) -+ dimension txx(mxatms),tyy(mxatms),tzz(mxatms) -+ dimension dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ dimension tqa(3),tqb(3) -+ -+ save newjob,esig2,hhx,hhy,hhz -+ -+ data newjob/.true./,fail/0/ -+ -+ if(newjob)then -+ -+ allocate (esig2(mxcons),hhx(mxcons),hhy(mxcons),hhz(mxcons), -+ x stat=fail) -+ if(fail.ne.0)call error(idnode,1625) -+ newjob=.false. -+ -+ endif -+ -+c constraint bond vectors are dxx,dyy,dzz (input) -+ -+c half timestep -+ -+ tstep2=tstep/2.d0 -+ -+c tolerance for velocity convergence -+ -+ tolvel=tolnce/tstep -+ -+c calculate maximum error in constraint -+ -+ esig=0.d0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ esig2(k)=(dxx(k)*(vxx(i)-vxx(j))+dyy(k)*(vyy(i)-vyy(j))+ -+ x dzz(k)*(vzz(i)-vzz(j))) -+ esig=max(esig,abs(esig2(k))) -+ -+ enddo -+ -+c global verification of convergence -+ -+ safe=(esig.lt.tolvel) -+ -+ if(mxnode.gt.1)then -+ call gstate(safe) -+ endif -+ -+c continue if all tolerances satisfied else return to calling routine -+ -+ if(.not.safe)then -+ -+c initialise velocity correction arrays -+ -+ do i=1,natms -+ -+ xxt(i)=0.d0 -+ yyt(i)=0.d0 -+ zzt(i)=0.d0 -+ -+ enddo -+ -+c calculate constraint correction -+ -+ ik=0 -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ if(newstep)then -+ -+ call pivot(2,i,k,ik,tqa,dxx,dyy,dzz) -+ call pivot(2,j,k,ik,tqb,dxx,dyy,dzz) -+ -+ hhx(k)=tstep2*(tqa(1)+tqb(1)) -+ hhy(k)=tstep2*(tqa(2)+tqb(2)) -+ hhz(k)=tstep2*(tqa(3)+tqb(3)) -+ -+ endif -+ -+c constraint force parameter -+ -+ gamma=esig2(k)/(dxx(k)*hhx(k)+dyy(k)*hhy(k)+dzz(k)*hhz(k)) -+ -+c improved atomic force -+ -+ xxt(i)=xxt(i)-dxx(k)*gamma -+ yyt(i)=yyt(i)-dyy(k)*gamma -+ zzt(i)=zzt(i)-dzz(k)*gamma -+ xxt(j)=xxt(j)+dxx(k)*gamma -+ yyt(j)=yyt(j)+dyy(k)*gamma -+ zzt(j)=zzt(j)+dzz(k)*gamma -+ -+ enddo -+ -+c transport temporary positions to other nodes -+ -+ if(mxnode.gt.1)then -+ -+ if(lshmov) call shmove -+ x (idnode,mxnode,natms,lashap,lishap,xxt,yyt,zzt, -+ x txx,tyy,tzz,buffer) -+ -+ endif -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ -+ dli=1.d0/dble(listme(i)) -+ dlj=1.d0/dble(listme(j)) -+ -+ fxx(i)=fxx(i)+dli*xxt(i) -+ fyy(i)=fyy(i)+dli*yyt(i) -+ fzz(i)=fzz(i)+dli*zzt(i) -+ fxx(j)=fxx(j)+dlj*xxt(j) -+ fyy(j)=fyy(j)+dlj*yyt(j) -+ fzz(j)=fzz(j)+dlj*zzt(j) -+ -+ enddo -+ -+c splice force arrays across nodes -+ -+ if(mxnode.gt.1)then -+ -+ call splice -+ x (idnode,natms,listme,listot,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine qrattle_v -+ -+ subroutine pivot(k,i,kk,ik,tqq,dxx,dyy,dzz) -+ -+c*********************************************************************** -+c -+c dl_poly subroutine for computing pivot vector for velocity -+c corrections to bonds between rigid bodies -+c must be used in conjunction with qrattle routines: -+c if k=1 - use with qrattle_r -+c if k=2 - use with qrattle_v -+c -+c copyright - daresbury laboratory -+c author - w. smith february 2005 -+c -+c*********************************************************************** -+ -+ implicit none -+ -+ integer k,i,kk,ik,ig,id,jj -+ real(8) xxa,yya,zza,tax,tay,taz,trx,try,trz,vix,viy,viz -+ real(8) rot(9),tqq(3),dxx(mxcons),dyy(mxcons),dzz(mxcons) -+ -+ ig=lstbod(i) -+ -+ if(ig.eq.0)then -+ -+c atoms in constraint bonds -+ -+ tqq(1)=dxx(kk)*rmass(i) -+ tqq(2)=dyy(kk)*rmass(i) -+ tqq(3)=dzz(kk)*rmass(i) -+ -+ else -+ -+c terms for rigid body atoms -+ -+ ik=ik+1 -+ id=lstgtp(ig) -+ -+ tqq(1)=dxx(kk)/gmass(id) -+ tqq(2)=dyy(kk)/gmass(id) -+ tqq(3)=dzz(kk)/gmass(id) -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ jj=lstcsit(ik) -+ -+c com-site vector in lab frame -+ -+ xxa=(gxx(id,jj)*rot(1)+gyy(id,jj)*rot(2)+gzz(id,jj)*rot(3)) -+ yya=(gxx(id,jj)*rot(4)+gyy(id,jj)*rot(5)+gzz(id,jj)*rot(6)) -+ zza=(gxx(id,jj)*rot(7)+gyy(id,jj)*rot(8)+gzz(id,jj)*rot(9)) -+ -+c cross product of com-site vector and interatomic vector -+ -+ tax=yya*dzz(kk)-zza*dyy(kk) -+ tay=zza*dxx(kk)-xxa*dzz(kk) -+ taz=xxa*dyy(kk)-yya*dxx(kk) -+ -+c transform to body fixed frame -+ -+ trx=(tax*rot(1)+tay*rot(4)+taz*rot(7))*rotinx(id,2) -+ try=(tax*rot(2)+tay*rot(5)+taz*rot(8))*rotiny(id,2) -+ trz=(tax*rot(3)+tay*rot(6)+taz*rot(9))*rotinz(id,2) -+ -+ if(k.eq.1)then -+ -+c direction of induced velocites in body frame -+ -+ vix=try*gzz(id,jj)-trz*gyy(id,jj) -+ viy=trz*gxx(id,jj)-trx*gzz(id,jj) -+ viz=trx*gyy(id,jj)-try*gxx(id,jj) -+ -+c transform to lab frame -+ -+ tqq(1)=tqq(1)+vix*rot(1)+viy*rot(2)+viz*rot(3) -+ tqq(2)=tqq(2)+vix*rot(4)+viy*rot(5)+viz*rot(6) -+ tqq(3)=tqq(3)+vix*rot(7)+viy*rot(8)+viz*rot(9) -+ -+ elseif(k.eq.2)then -+ -+c transform to lab frame -+ -+ tqq(1)=tqq(1)+trx*rot(1)+try*rot(2)+trz*rot(3) -+ tqq(2)=tqq(2)+trx*rot(4)+try*rot(5)+trz*rot(6) -+ tqq(3)=tqq(3)+trx*rot(7)+try*rot(8)+trz*rot(9) -+ -+ endif -+ -+ endif -+ -+ return -+ end subroutine pivot -+ -+ subroutine nveqvv_2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,tolnce,tstep,vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith jan 2005 -+c amended w.smith feb 2005: qrattle added -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2110) -+ enddo -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge free atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ -+ engke=engke+engtrn -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nveqvv_2 -+ -+ subroutine nvtqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,engke,engrot,taut,sigma,tolnce,tstep, -+ x vircom,vircon) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nvt ensemble - Berendsen thermostat (n.b. not symplectic) -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith mar 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke -+ real(8) engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+ save newstep,newjob,p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(mxatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2130) -+ enddo -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engke+engtrn+engrot -+ engke=engke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nvtqvv_b2 -+ -+ subroutine nvtqvv_h2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntshl,keyshl,chit,consv,conint,engke,engrot, -+ x taut,sigma,tolnce,tstep,vircom,vircon,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nvt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,engfke -+ real(8) taut,sigma,chit,hstep,qmass,conint,consv -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9) -+ -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2 -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c nose-hoover inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(2)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(3)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(4)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(5)) -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(6)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(7)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(8)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(9)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(10)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(11)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(12)) -+ if(isw.eq.2)then -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(13)) -+ endif -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2150) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c initialise constraint virial -+ -+ if(isw.eq.1)then -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c apply thermostat for first stage -+ -+ if(isw.eq.1)then -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=xxo(i)+tstep*vxx(i) -+ yyy(i)=yyo(i)+tstep*vyy(i) -+ zzz(i)=zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ else -+ -+c second stage of velocity verlet algorithm -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c apply thermostat for second stage and calculate kinetic energy -+ -+ call nvtqscl -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,sigma, -+ x hstep,qmass,taut,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ engke=engfke+engtrn -+ -+c conserved quantity less kinetic and potential energy terms -+ -+ consv=conint+0.5d0*qmass*chit**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c restore forces if isw = 2 -+ -+ if(isw.eq.2)then -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nvtqvv_h2 -+ -+ subroutine nptqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,virtot,volm) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c npt ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sep 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,jrs,icyc,mxshk,idum,ig,ntpatm -+ integer iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke,engtrn -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3,taut,sigma,chit -+ real(8) volm,elrc0,elrc,virlrc0,virlrc,scale,psyst,virtot,chip -+ real(8) beta,press,taup,engfke,vzero -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ save newstep,newjob,volm0,elrc0,virlrc0,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2 -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./,beta/7.3728d-3/ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2180) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(12)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(13)) -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2190) -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c cell parameters -+ -+ vzero=volm -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engke=engfke+engtrn -+ -+ endif -+ -+c -------------- start of barostat iteration cycle ----------------- -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c calculate system pressure -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ psyst=(2.d0*engke-virtot-vircon-vircom)/(3.d0*volm) -+ -+c apply Berendsen barostat -+ -+ chip=1.d0+beta*tstep*(psyst-press)/taup -+ chip=1.d0 -+ scale=chip**(1.d0/3.d0) -+ volm=chip*volm -+ -+c reset cell parameters for new volume -+ -+ do i=1,9 -+ cell(i)=scale*cell(i) -+ enddo -+ -+c reset constraint virial -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+(pt5*tstep*rmass(i))*fxx(i) -+ vyy(i)=vyo(j)+(pt5*tstep*rmass(i))*fyy(i) -+ vzz(i)=vzo(j)+(pt5*tstep*rmass(i))*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*pt5*tstep -+ p1(ig)=c1(jg)+tq1*pt5*tstep -+ p2(ig)=c2(jg)+tq2*pt5*tstep -+ p3(ig)=c3(jg)+tq3*pt5*tstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*pt5*tstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*pt5*tstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*pt5*tstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=scale*gxo(jg)+tstep*gvxx(ig) -+ gcmy(ig)=scale*gyo(jg)+tstep*gvyy(ig) -+ gcmz(ig)=scale*gzo(jg)+tstep*gvzz(ig) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=scale*xxo(i)+tstep*vxx(i) -+ yyy(i)=scale*yyo(i)+tstep*vyy(i) -+ zzz(i)=scale*zzo(i)+tstep*vzz(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ if(isw.eq.2)call bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor for tethered bonds -+ -+ do i=1,9 -+ eta(i)=uni(i)*scale -+ enddo -+ -+ endif -+ -+ if(isw.eq.2)then -+ -+c calculate kinetic energy -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ -+ return -+ end subroutine nptqvv_b2 -+ -+ subroutine nptqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,ntshl,keyshl,tstep,taut,taup,sigma, -+ x temp,chip,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virtot,virlrc,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c npt ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith april 2005 -+c adapted d.quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm -+ integer jcyc,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,vaa,vbb,vcc,opx,opy,opz,engfke -+ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv -+ real(8) cxx,cyy,czz,scale,virtot,press,chip,temp -+ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc -+ real(8) virlrc,elrc0,virlrc0,chit0,chip0,vzero,cons0 -+ -+ integer, parameter :: nnn=16 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),cell0(9),com(3),vom(3),uni(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: vx1(:),vy1(:),vz1(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas -+ save pmass -+ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2220) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) -+ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) -+ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), -+ x stat=fail(13)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), -+ x stat=fail(14)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) -+ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2230) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c store key config data at start of timestep -+ -+ vzero=volm -+ chit0=chit -+ chip0=chip -+ cons0=conint -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c store rigid body positions -+ -+ do ig=1,ngrp -+ -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ do i=1,natms -+ -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+c integration of barostat and thermostat (part 1) -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ chit=chit0 -+ chip=chip0 -+ conint=cons0 -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c restore free atom velocities -+ -+ do i=1,natms -+ -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+c restore rigid body quaternions angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+c current constraint virial -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/vzero)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+c reset constraint virial and stress -+ -+ vircon=0.d0 -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) -+ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) -+ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) -+ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store intermediate velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vx1(i)=vxx(i) -+ vy1(i)=vyy(i) -+ vz1(i)=vzz(i) -+ -+ enddo -+ do ig=igrp1,igrp2 -+ -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gvx1(ig)=gvxx(ig) -+ gvy1(ig)=gvyy(ig) -+ gvz1(ig)=gvzz(ig) -+ -+ enddo -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c restore rigid body quaternions, angular momenta and velocities -+ -+ do ig=igrp1,igrp2 -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gvxx(ig)=gvx1(ig) -+ gvyy(ig)=gvy1(ig) -+ gvzz(ig)=gvz1(ig) -+ -+ enddo -+ -+c calculate new rigid body velocities -+ -+ call rotate_omega -+ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update centre of mass position by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gxo(ig)-com(1) -+ cyy=gyo(ig)-com(2) -+ czz=gzo(ig)-com(3) -+ gcmx(ig)=gxo(ig)+tstep*(gvxx(ig)+chip*cxx) -+ gcmy(ig)=gyo(ig)+tstep*(gvyy(ig)+chip*cyy) -+ gcmz(ig)=gzo(ig)+tstep*(gvzz(ig)+chip*czz) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxo(i)-com(1) -+ cyy=yyo(i)-com(2) -+ czz=zzo(i)-com(3) -+ xxx(i)=xxo(i)+tstep*(vxx(i)+chip*cxx) -+ yyy(i)=yyo(i)+tstep*(vyy(i)+chip*cyy) -+ zzz(i)=zzo(i)+tstep*(vzz(i)+chip*czz) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c integration of barostat and thermostat (part 2) -+ -+ if(isw.eq.2)then -+ -+c current constraint virial -+ -+ vircon=-(strcns(1)+strcns(5)+strcns(9)) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply npt barostat -+ -+ call nptqscl_p -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,fstep,pmass, -+ x chip,chit,volm,press,vircon,virtot,vircom) -+ -+c integrate and apply npt thermostat -+ -+ call nptqscl_t -+ x (idnode,mxnode,ntfree,ngrp,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chip,chit,conint) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c scale cell vectors - isotropic -+ -+ scale=(volm/vzero)**(1.d0/3.d0) -+ do i=1,9 -+ cell(i)=cell0(i)*scale -+ enddo -+ -+ endif -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.2)then -+ -+c calculate conserved variable -+ -+ consv=conint+0.5d0*qmass*chit**2+press*volm -+ x +0.5d0*pmass*chip**2 -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c merge velocity arrays -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+c construct scaling tensor (for tethered atoms) -+ -+ do i=1,9 -+ eta(i)=chip*uni(i) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c exchange position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(oxo,oyo,ozo,dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ -+ return -+ end subroutine nptqvv_h2 -+ -+ subroutine nstqvv_b2 -+ x (safe,lshmov,isw,imcon,idnode,mxnode,natms,ngrp,nscons, -+ x ntcons,ntfree,ntpatm,mode,engke,engrot,press,taut,taup,sigma, -+ x tolnce,tstep,vircom,vircon,elrc,virlrc,volm) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nst ensemble - Berendsen thermostat and barostat -+c (n.b. not symplectic) -+c -+c isothermal compressibility (beta) set to that of liquid water -+c = 0.007372 dlpoly units -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sep 2005 -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jg,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode -+ integer iter,mxiter,jrs -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon,engtke -+ real(8) engtrn,taut,sigma,chit -+ real(8) vaa,vbb,vcc,opx,opy,opz,ftx,fty,ftz,volm0 -+ real(8) fmx,fmy,fmz,tqx,tqy,tqz,tq0,tq1,tq2,tq3 -+ real(8) volm,elrc0,elrc,virlrc0,virlrc -+ real(8) beta,press,taup,engfke,hstep,vzero -+ -+ integer, parameter :: nnn=13 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),uni(9),celp(10) -+ real(8) cell0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ -+ save newstep,newjob,volm0,elrc0,virlrc0,dens0 -+ save p0,p1,p2,p3,ifre1,ifre2,igrp1,igrp2,hstep -+ -+ data newjob/.true./,beta/7.3728d-3/ -+ data uni/1.d0,0.d0,0.d0,0.d0,1.d0,0.d0,0.d0,0.d0,1.d0/ -+ -+c set array alocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c timestep parameters -+ -+ hstep=pt5*tstep -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2260) -+ -+c store initial values of volume and long range corrections -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ -+ newjob=.false. -+ -+ endif -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(msgrp),gyo(msgrp),gzo(msgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(8)) -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(9)) -+ allocate(vxo(msatms),vyo(msatms),vzo(msatms),stat=fail(10)) -+ allocate(gvxo(msgrp),gvyo(msgrp),gvzo(msgrp),stat=fail(11)) -+ allocate(b0(msgrp),b1(msgrp),b2(msgrp),b3(msgrp), -+ x stat=fail(12)) -+ allocate(c0(msgrp),c1(msgrp),c2(msgrp),c3(msgrp), -+ x stat=fail(13)) -+ -+c check array allocation error flags -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2270) -+ enddo -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c calculate quaternion momenta at start of time step -+ -+ if(isw.eq.1)then -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-q1(ig)*opx-q2(ig)*opy-q3(ig)*opz) -+ p1(ig)=2.0d0*( q0(ig)*opx-q3(ig)*opy+q2(ig)*opz) -+ p2(ig)=2.0d0*( q3(ig)*opx+q0(ig)*opy-q1(ig)*opz) -+ p3(ig)=2.0d0*(-q2(ig)*opx+q1(ig)*opy+q0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store key config data at start of time step -+ -+ if(isw.eq.1)then -+ -+c cell parameters -+ -+ vzero=volm -+ do i=1,9 -+ cell0(i)=cell(i) -+ enddo -+ -+c atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c rigid body positions -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ gxo(j)=gcmx(i) -+ gyo(j)=gcmy(i) -+ gzo(j)=gcmz(i) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxo(j)=vxx(i) -+ vyo(j)=vyy(i) -+ vzo(j)=vzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, momenta and cartesian velocities -+ -+ j=0 -+ do i=igrp1,igrp2 -+ -+ j=j+1 -+ b0(j)=q0(i) -+ b1(j)=q1(i) -+ b2(j)=q2(i) -+ b3(j)=q3(i) -+ c0(j)=p0(i) -+ c1(j)=p1(i) -+ c2(j)=p2(i) -+ c3(j)=p3(i) -+ gvxo(j)=gvxx(i) -+ gvyo(j)=gvyy(i) -+ gvzo(j)=gvzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c extract previous constraint terms from stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)-strcns(i) -+ enddo -+ -+ endif -+ -+c -------------- start of barostat iteration cycle ----------------- -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+ do i=1,9 -+ eta(i)=uni(i) -+ enddo -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ do i=1,9 -+ cell(i)=cell0(i) -+ enddo -+ -+c calculate Berendsen barostat -+ -+ do i=1,9 -+ eta(i)=tstep*beta*((stress(i)+strcns(i))/volm- -+ x press*uni(i))/taup+uni(i) -+ enddo -+ if(mode.gt.0)then -+ eta(3)=0.d0 -+ eta(6)=0.d0 -+ eta(7)=0.d0 -+ eta(8)=0.d0 -+ if(mode.lt.3)then -+ eta(2)=0.d0 -+ eta(4)=0.d0 -+ if(mode.eq.2)then -+ eta(1)=0.5d0*(eta(1)+eta(5)) -+ eta(5)=eta(1) -+ endif -+ endif -+ endif -+ -+c reset cell parameters for new volume -+ -+ call mat_mul(eta,cell,cell) -+ -+c calculate new volume -+ -+ call dcell(cell,celp) -+ volm=celp(10) -+ -+c reset constraint virial -+ -+ vircon=0.d0 -+ -+ do i=1,9 -+ strcns(i)=0.d0 -+ enddo -+ -+ endif -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ j=0 -+ do ifre=ifre1,ifre2 -+ -+ j=j+1 -+ i=lstfre(ifre) -+ vxx(i)=vxo(j)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vyo(j)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vzo(j)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c operations common to first and second stages -+ -+ jg=0 -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c fmx,fmy,fmz represent force on c.o.m. -+ -+ jrs=jr -+ fmx=0.d0 -+ fmy=0.d0 -+ fmz=0.d0 -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ fmx=fmx+fxx(i) -+ fmy=fmy+fyy(i) -+ fmz=fmz+fzz(i) -+ -+ enddo -+ -+c current rotational matrix -+ -+ jg=jg+1 -+ call getrotmat(b0(jg),b1(jg),b2(jg),b3(jg),rot) -+ -+c calculate torque in principal frame -+ -+ jr=jrs -+ ftx=0.d0 -+ fty=0.d0 -+ ftz=0.d0 -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ ftx=ftx+dty(jr)*fzz(i)-dtz(jr)*fyy(i) -+ fty=fty+dtz(jr)*fxx(i)-dtx(jr)*fzz(i) -+ ftz=ftz+dtx(jr)*fyy(i)-dty(jr)*fxx(i) -+ -+ enddo -+ -+ tqx=ftx*rot(1)+fty*rot(4)+ftz*rot(7) -+ tqy=ftx*rot(2)+fty*rot(5)+ftz*rot(8) -+ tqz=ftx*rot(3)+fty*rot(6)+ftz*rot(9) -+ -+c calculate quaternion torques -+ -+ tq0=2.0d0*(-b1(jg)*tqx-b2(jg)*tqy-b3(jg)*tqz) -+ tq1=2.0d0*( b0(jg)*tqx-b3(jg)*tqy+b2(jg)*tqz) -+ tq2=2.0d0*( b3(jg)*tqx+b0(jg)*tqy-b1(jg)*tqz) -+ tq3=2.0d0*(-b2(jg)*tqx+b1(jg)*tqy+b0(jg)*tqz) -+ -+c update quaternion momentum by half timestep -+ -+ p0(ig)=c0(jg)+tq0*hstep -+ p1(ig)=c1(jg)+tq1*hstep -+ p2(ig)=c2(jg)+tq2*hstep -+ p3(ig)=c3(jg)+tq3*hstep -+ -+c update centre of mass velocity by half timestep -+ -+ gvxx(ig)=gvxo(jg)+fmx*hstep/gmass(id) -+ gvyy(ig)=gvyo(jg)+fmy*hstep/gmass(id) -+ gvzz(ig)=gvzo(jg)+fmz*hstep/gmass(id) -+ -+ enddo -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+ jg=0 -+ do ig=igrp1,igrp2 -+ -+ jg=jg+1 -+ -+c update centre of mass position by full time step -+ -+ gcmx(ig)=tstep*gvxx(ig)+ -+ x eta(1)*gxo(jg)+eta(4)*gyo(jg)+eta(7)*gzo(jg) -+ gcmy(ig)=tstep*gvyy(ig)+ -+ x eta(2)*gxo(jg)+eta(5)*gyo(jg)+eta(8)*gzo(jg) -+ gcmz(ig)=tstep*gvzz(ig)+ -+ x eta(3)*gxo(jg)+eta(6)*gyo(jg)+eta(9)*gzo(jg) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ q0(ig)=b0(jg) -+ q1(ig)=b1(jg) -+ q2(ig)=b2(jg) -+ q3(ig)=b3(jg) -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ xxx(i)=tstep*vxx(i)+ -+ x eta(1)*xxo(i)+eta(4)*yyo(i)+eta(7)*zzo(i) -+ yyy(i)=tstep*vyy(i)+ -+ x eta(2)*xxo(i)+eta(5)*yyo(i)+eta(8)*zzo(i) -+ zzz(i)=tstep*vzz(i)+ -+ x eta(3)*xxo(i)+eta(6)*yyo(i)+eta(9)*zzo(i) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c rigid body contribution to stress tensor -+ -+ if(isw.eq.2)call bodystress -+ x (idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ endif -+ -+c calculate kinetic energy -+ -+ if(isw.eq.2)then -+ -+ engfke=getkinf(ntfree,idnode,mxnode) -+ call getking(ngrp,idnode,mxnode,engtrn,engrot) -+ engtke=engfke+engtrn+engrot -+ engke=engfke+engtrn -+ -+c apply Berendsen thermostat - taut is the relaxation time -+ -+ chit=sqrt(1.d0+tstep/taut*(sigma/engtke-1.d0)) -+ -+ engke=engke*chit**2 -+ engtrn=engtrn*chit**2 -+ engrot=engrot*chit**2 -+ -+c thermostat velocities of free particles -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ if(lstfrz(i).ne.0)then -+ -+ vxx(i)=chit*vxx(i) -+ vyy(i)=chit*vyy(i) -+ vzz(i)=chit*vzz(i) -+ -+ endif -+ -+ enddo -+ -+c thermostat rigid body velocities -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ omx(ig)=chit*omx(ig) -+ omy(ig)=chit*omy(ig) -+ omz(ig)=chit*omz(ig) -+ gvxx(ig)=chit*gvxx(ig) -+ gvyy(ig)=chit*gvyy(ig) -+ gvzz(ig)=chit*gvzz(ig) -+ -+ enddo -+ -+c kinetic contribution to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stress(i)+strbod(i)+strcns(i)+strkin(i)+strgrp(i) -+ enddo -+ -+ endif -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,fxo,fyo,fzo,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ -+ return -+ end subroutine nstqvv_b2 -+ -+ subroutine nstqvv_h2 -+ x (safe,lshmov,isw,idnode,mxnode,natms,imcon,ngrp,nscons, -+ x ntcons,ntpatm,ntfree,mode,ntshl,keyshl,tstep,taut,taup, -+ x sigma,temp,chit,consv,conint,engke,engrot,elrc,tolnce, -+ x vircom,vircon,virlrc,volm,press,chit_shl,sigma_shl) -+ -+c*********************************************************************** -+c -+c dlpoly subroutine to integrate rigid body equations of motion -+c using the symplectic no_squish quaternion algorithm of -+c miller et al j.chem.phys 116 (2002) 8649 -+c plus bond constraints - including rigid body sites linked -+c by constraint sites (qrattle algorithm) -+c -+c nst ensemble - nose-hoover thermostat Molec Phys 87 (1996) 1117 -+c -+c parallel replicated data version : block data -+c -+c omx,omy,omz=angular velocity in body fixed frame (principal axes) -+c rotinx,y,z =rotational inertia in body fixed frame -+c -+c copyright daresbury laboratory -+c author w.smith sept 2005 -+c adapted d. quigley : metadynamics -+c -+c********************************************************************** -+ -+ implicit none -+ -+ logical newstep,safe,lshmov,newjob -+ -+ integer isw,imcon,idnode,mxnode,natms,ngrp,nscons,ntcons -+ integer ntfree,i,j,k,igrp1,igrp2,igrp,ifre1,ifre2,jr -+ integer id,ifre,icyc,mxshk,idum,ig,ntpatm,mode -+ integer jcyc,iter,mxiter -+ -+ real(8) engke,engrot,tolnce,tstep,vircom,vircon -+ real(8) engtrn,engfke -+ real(8) vaa,vbb,vcc,opx,opy,opz -+ real(8) taut,taup,sigma,chit,hstep,qmass,conint,consv -+ real(8) cxx,cyy,czz,press,chip2,temp -+ real(8) volm,pmass,totmas,qstep,fstep,volm0,elrc -+ real(8) virlrc,elrc0,virlrc0,chit0,vzero,cons0 -+ -+ integer, parameter :: nnn=16 -+ integer, parameter :: ncyc=5 -+ real(8), parameter :: pt5=0.5d0 -+ -+ integer fail(nnn) -+ real(8) rot(9),strkin(9),strgrp(9),com(3),vom(3) -+ real(8) cell0(9),eta0(9),stres0(9) -+ -+ real(8), allocatable :: dens0(:) -+ real(8), allocatable :: xxo(:),yyo(:),zzo(:) -+ real(8), allocatable :: vxo(:),vyo(:),vzo(:) -+ real(8), allocatable :: vx1(:),vy1(:),vz1(:) -+ real(8), allocatable :: fxo(:),fyo(:),fzo(:) -+ real(8), allocatable :: gxo(:),gyo(:),gzo(:) -+ real(8), allocatable :: oxo(:),oyo(:),ozo(:) -+ real(8), allocatable :: dxx(:),dyy(:),dzz(:) -+ real(8), allocatable :: txx(:),tyy(:),tzz(:) -+ real(8), allocatable :: xxt(:),yyt(:),zzt(:) -+ real(8), allocatable :: dxt(:),dyt(:),dzt(:) -+ real(8), allocatable :: dtx(:),dty(:),dtz(:) -+ real(8), allocatable :: b0(:),b1(:),b2(:),b3(:) -+ real(8), allocatable :: c0(:),c1(:),c2(:),c3(:) -+ real(8), allocatable :: p0(:),p1(:),p2(:),p3(:) -+ real(8), allocatable :: gvxo(:),gvyo(:),gvzo(:) -+ real(8), allocatable :: gvx1(:),gvy1(:),gvz1(:) -+ -+c metadynamics shell thermostat variables -+ -+ integer ntshl,keyshl -+ real(8) sigma_shl -+ -+ logical,save :: lfirst=.true. -+ real(8) :: chit_shl -+ real(8),save :: qmass_shl -+ real(8) :: shlke -+ -+c end metadynamics shell thermostat variables -+ -+ save newstep,newjob,p0,p1,p2,p3,hstep,fstep,qmass,ifre1,ifre2 -+ save igrp1,igrp2,volm0,elrc0,virlrc0,qstep,dens0,totmas -+ save pmass -+ -+ data newjob/.true./ -+ -+c set array allocation error flags -+ -+ do i=1,nnn -+ fail(i)=0 -+ enddo -+ -+c assign initial parameters -+ -+ if(newjob)then -+ -+c store intitial parameters -+ -+ volm0=volm -+ elrc0=elrc -+ virlrc0=virlrc -+ hstep=0.5d0*tstep -+ fstep=0.5d0*tstep/dble(ncyc) -+ qstep=0.25d0*tstep/dble(ncyc) -+ -+c allocate density storage array -+ -+ fail(1)=0 -+ allocate(dens0(mxatyp),stat=fail(1)) -+ if(fail(1).gt.0)call error(idnode,2220) -+ -+ do i=1,ntpatm -+ dens0(i)=dens(i) -+ enddo -+ -+c total system mass -+ -+ totmas=getmass(natms,idnode,mxnode) -+ -+c nose-hoover thermostat and barostat inertia parameter -+ -+ qmass=2.d0*sigma*taut**2 -+ pmass=2.d0*sigma*taup**2 -+ -+c free atom block indices -+ -+ ifre1=(idnode*ntfree)/mxnode+1 -+ ifre2=((idnode+1)*ntfree)/mxnode -+ -+c group block indices -+ -+ igrp1=(idnode*ngrp)/mxnode+1 -+ igrp2=((idnode+1)*ngrp)/mxnode -+ -+c check work arrays are large enough -+ -+ safe=(igrp2-igrp1+1.le.msgrp) -+ if(mxnode.gt.1) call gstate(safe) -+ if(.not.safe)then -+ igrp=igrp2-igrp1+1 -+ call gimax(igrp,1,idum) -+ if(idnode.eq.0) write(nrite,*) ' make msgrp >=',igrp -+ call error(idnode,506) -+ endif -+ -+ allocate(p0(mxgrp),p1(mxgrp),p2(mxgrp),p3(mxgrp),stat=fail(1)) -+ newjob=.false. -+ -+ endif -+ -+ if(ntcons.gt.0)safe=.false. -+ -+c allocate working arrays -+ -+ if(isw.eq.1)then -+ -+ allocate(xxo(mxatms),yyo(mxatms),zzo(mxatms),stat=fail(2)) -+ allocate(gxo(mxgrp),gyo(mxgrp),gzo(mxgrp),stat=fail(3)) -+ -+ endif -+ if(ntcons.gt.0)then -+ -+ allocate(dxx(mxcons),dyy(mxcons),dzz(mxcons),stat=fail(4)) -+ allocate(txx(mxatms),tyy(mxatms),tzz(mxatms),stat=fail(5)) -+ allocate(xxt(mxatms),yyt(mxatms),zzt(mxatms),stat=fail(6)) -+ allocate(dxt(mxcons),dyt(mxcons),dzt(mxcons),stat=fail(7)) -+ -+ endif -+ allocate(dtx(mxatms),dty(mxatms),dtz(mxatms),stat=fail(8)) -+ allocate(vxo(mxatms),vyo(mxatms),vzo(mxatms),stat=fail(9)) -+ allocate(vx1(mxatms),vy1(mxatms),vz1(mxatms),stat=fail(10)) -+ allocate(fxo(mxatms),fyo(mxatms),fzo(mxatms),stat=fail(11)) -+ allocate(oxo(mxatms),oyo(mxatms),ozo(mxatms),stat=fail(12)) -+ allocate(b0(mxgrp),b1(mxgrp),b2(mxgrp),b3(mxgrp), -+ x stat=fail(13)) -+ allocate(c0(mxgrp),c1(mxgrp),c2(mxgrp),c3(mxgrp), -+ x stat=fail(14)) -+ allocate(gvxo(mxgrp),gvyo(mxgrp),gvzo(mxgrp),stat=fail(15)) -+ allocate(gvx1(mxgrp),gvy1(mxgrp),gvz1(mxgrp),stat=fail(16)) -+ -+ do i=1,nnn -+ if(fail(i).gt.0)call error(idnode,2230) -+ enddo -+ -+ if(lmetadyn.and.lfirst.and.(ntshl>0))then -+ if(idnode.eq.0)then -+ write(*,*)"Warning - Metadynamics Modification" -+ write(*,*)"=========================" -+ write(*,*)"Coupling core-shell motion thermostat at 1 K" -+ endif -+ lfirst=.false. -+c use same relaxation time for global and core-shell? -+ qmass_shl=2.d0*sigma_shl*taut**2 -+ endif -+ -+c construct current bond vectors -+ -+ if(ntcons.gt.0)then -+ -+ do k=1,nscons -+ -+ i=listcon(k,2) -+ j=listcon(k,3) -+ dxx(k)=xxx(i)-xxx(j) -+ dyy(k)=yyy(i)-yyy(j) -+ dzz(k)=zzz(i)-zzz(j) -+ -+ enddo -+ -+ call images(imcon,0,1,nscons,cell,dxx,dyy,dzz) -+ -+ endif -+ -+c atom displacement from rigid body centre of mass -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+ dtx(jr)=xxx(i)-gcmx(ig) -+ dty(jr)=yyy(i)-gcmy(ig) -+ dtz(jr)=zzz(i)-gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c periodic boundary condition for displacement vectors -+ -+ call images(imcon,0,1,jr,cell,dtx,dty,dtz) -+ -+c store key config data at start of timestep -+ -+ vzero=volm -+ chit0=chit -+ cons0=conint -+ do i=1,9 -+ -+ cell0(i)=cell(i) -+ eta0(i)=eta(i) -+ stres0(i)=stress(i) -+ -+ enddo -+ -+ if(isw.eq.1)then -+ -+c remove system centre of mass velocity -+ -+ call getvom(natms,idnode,mxnode,totmas,vom) -+ -+ do i=1,natms -+ -+ vxx(i)=vxx(i)-vom(1) -+ vyy(i)=vyy(i)-vom(2) -+ vzz(i)=vzz(i)-vom(3) -+ -+ enddo -+ -+ do ig=1,ngrp -+ -+ gvxx(ig)=gvxx(ig)-vom(1) -+ gvyy(ig)=gvyy(ig)-vom(2) -+ gvzz(ig)=gvzz(ig)-vom(3) -+ -+ enddo -+ -+c store atom positions -+ -+ do i=1,natms -+ -+ xxo(i)=xxx(i) -+ yyo(i)=yyy(i) -+ zzo(i)=zzz(i) -+ -+ enddo -+ -+c store rigid body positions -+ -+ do ig=1,ngrp -+ -+ gxo(ig)=gcmx(ig) -+ gyo(ig)=gcmy(ig) -+ gzo(ig)=gcmz(ig) -+ -+ enddo -+ -+ endif -+ -+c store free atom velocities -+ -+ do i=1,natms -+ -+ vxo(i)=vxx(i) -+ vyo(i)=vyy(i) -+ vzo(i)=vzz(i) -+ -+ enddo -+ -+c store forces -+ -+ do i=1,natms -+ -+ fxo(i)=fxx(i) -+ fyo(i)=fyy(i) -+ fzo(i)=fzz(i) -+ -+ enddo -+ -+c store rigid body quaternions, angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ b0(ig)=q0(ig) -+ b1(ig)=q1(ig) -+ b2(ig)=q2(ig) -+ b3(ig)=q3(ig) -+ oxo(ig)=omx(ig) -+ oyo(ig)=omy(ig) -+ ozo(ig)=omz(ig) -+ gvxo(ig)=gvxx(ig) -+ gvyo(ig)=gvyy(ig) -+ gvzo(ig)=gvzz(ig) -+ -+ enddo -+ -+c iteration necessary if ntcons > 0 and isw=1 -+ -+ mxiter=1 -+ if(isw.eq.1.and.ntcons.gt.0)mxiter=3 -+ do iter=1,mxiter -+ -+c integration of barostat and thermostat (part 1) -+ -+ if(isw.eq.1)then -+ -+c restore cell parameters -+ -+ volm=vzero -+ chit=chit0 -+ conint=cons0 -+ do i=1,9 -+ -+ cell(i)=cell0(i) -+ eta(i)=eta0(i) -+ -+ enddo -+ -+c restore free atom velocities -+ -+ do i=1,natms -+ -+ vxx(i)=vxo(i) -+ vyy(i)=vyo(i) -+ vzz(i)=vzo(i) -+ -+ enddo -+ -+c restore rigid body quaternions angular and cartesian velocities -+ -+ do ig=1,ngrp -+ -+ omx(ig)=oxo(ig) -+ omy(ig)=oyo(ig) -+ omz(ig)=ozo(ig) -+ gvxx(ig)=gvxo(ig) -+ gvyy(ig)=gvyo(ig) -+ gvzz(ig)=gvzo(ig) -+ -+ enddo -+ -+c kinetic contributions to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, -+ x volm,strkin,strgrp) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c reset constraint virial and stress -+ -+ vircon=0.d0 -+ do i=1,9 -+ -+ stress(i)=stress(i)-strcns(i)-strbod(i) -+ strcns(i)=0.d0 -+ -+ enddo -+ -+c calculate quaternion momenta -+ -+ do ig=igrp1,igrp2 -+ -+ id=lstgtp(ig) -+ opx=omx(ig)*rotinx(id,1) -+ opy=omy(ig)*rotiny(id,1) -+ opz=omz(ig)*rotinz(id,1) -+ p0(ig)=2.0d0*(-b1(ig)*opx-b2(ig)*opy-b3(ig)*opz) -+ p1(ig)=2.0d0*( b0(ig)*opx-b3(ig)*opy+b2(ig)*opz) -+ p2(ig)=2.0d0*( b3(ig)*opx+b0(ig)*opy-b1(ig)*opz) -+ p3(ig)=2.0d0*(-b2(ig)*opx+b1(ig)*opy+b0(ig)*opz) -+ -+ enddo -+ -+ endif -+ -+c store intermediate velocities -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vx1(i)=vxx(i) -+ vy1(i)=vyy(i) -+ vz1(i)=vzz(i) -+ -+ enddo -+ do ig=igrp1,igrp2 -+ -+ c0(ig)=p0(ig) -+ c1(ig)=p1(ig) -+ c2(ig)=p2(ig) -+ c3(ig)=p3(ig) -+ gvx1(ig)=gvxx(ig) -+ gvy1(ig)=gvyy(ig) -+ gvz1(ig)=gvzz(ig) -+ -+ enddo -+ -+c -------------- start of shake iteration cycle ------------------- -+ -+ icyc=0 -+ mxshk=1 -+ safe=.false. -+ newstep=.true. -+ if(ntcons.gt.0)mxshk=mxshak -+ -+ do while(.not.safe.and.icyc.lt.mxshk) -+ -+ icyc=icyc+1 -+ -+c update velocities of free atoms 1/2 timestep -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ vxx(i)=vx1(i)+hstep*rmass(i)*fxx(i) -+ vyy(i)=vy1(i)+hstep*rmass(i)*fyy(i) -+ vzz(i)=vz1(i)+hstep*rmass(i)*fzz(i) -+ -+ enddo -+ -+c ************* rigid body motion **************************** -+ -+c restore rigid body quaternions, angular momenta and velocities -+ -+ do ig=igrp1,igrp2 -+ -+ q0(ig)=b0(ig) -+ q1(ig)=b1(ig) -+ q2(ig)=b2(ig) -+ q3(ig)=b3(ig) -+ p0(ig)=c0(ig) -+ p1(ig)=c1(ig) -+ p2(ig)=c2(ig) -+ p3(ig)=c3(ig) -+ gvxx(ig)=gvx1(ig) -+ gvyy(ig)=gvy1(ig) -+ gvzz(ig)=gvz1(ig) -+ -+ enddo -+ -+c calculate new rigid body velocities -+ -+ call rotate_omega -+ x (idnode,mxnode,ngrp,hstep,p0,p1,p2,p3,dtx,dty,dtz) -+ -+c first stage of velocity verlet algorithm -+ -+ if(isw.eq.1)then -+ -+c calculate system centre of mass -+ -+ call getcom(natms,idnode,mxnode,totmas,com) -+ -+c update centre of mass position by full time step -+ -+ do ig=igrp1,igrp2 -+ -+ cxx=gxo(ig)-com(1) -+ cyy=gyo(ig)-com(2) -+ czz=gzo(ig)-com(3) -+ gcmx(ig)=gxo(ig)+ -+ x tstep*(gvxx(ig)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ gcmy(ig)=gyo(ig)+ -+ x tstep*(gvyy(ig)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ gcmz(ig)=gzo(ig)+ -+ x tstep*(gvzz(ig)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+c calculate rotation of rigid groups: nosquish algorithm -+ -+ call nosquish(ig,tstep,q0,q1,q2,q3,p0,p1,p2,p3) -+ -+ enddo -+ -+c merge group coms from all nodes -+ -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+c new atomic positions for atoms in rigid bodies - relative to com -+ -+ k=0 -+ do ig=igrp1,igrp2 -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+ id=lstgtp(ig) -+ do j=1,numgsit(id) -+ -+ k=k+1 -+ i=lstme(k) -+ xxx(i)=rot(1)*gxx(id,j)+rot(2)*gyy(id,j)+ -+ x rot(3)*gzz(id,j)+gcmx(ig) -+ yyy(i)=rot(4)*gxx(id,j)+rot(5)*gyy(id,j)+ -+ x rot(6)*gzz(id,j)+gcmy(ig) -+ zzz(i)=rot(7)*gxx(id,j)+rot(8)*gyy(id,j)+ -+ x rot(9)*gzz(id,j)+gcmz(ig) -+ -+ enddo -+ -+ enddo -+ -+c update positions of free particles to full time step -+ -+ do ifre=ifre1,ifre2 -+ -+ i=lstfre(ifre) -+ cxx=xxo(i)-com(1) -+ cyy=yyo(i)-com(2) -+ czz=zzo(i)-com(3) -+ xxx(i)=xxo(i)+ -+ x tstep*(vxx(i)+eta(1)*cxx+eta(4)*cyy+eta(7)*czz) -+ yyy(i)=yyo(i)+ -+ x tstep*(vyy(i)+eta(2)*cxx+eta(5)*cyy+eta(8)*czz) -+ zzz(i)=zzo(i)+ -+ x tstep*(vzz(i)+eta(3)*cxx+eta(6)*cyy+eta(9)*czz) -+ -+ enddo -+ -+c merge atom positions -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ -+c apply rattle corrections to bond constraints -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ call qrattle_r -+ x (newstep,safe,lshmov,idnode,imcon,mxnode,natms, -+ x nscons,tolnce,tstep,vircon,dxx,dyy,dzz,dxt,dyt, -+ x dzt,txx,tyy,tzz,xxt,yyt,zzt,strcns) -+ -+ endif -+ -+c end of first stage -+ -+ endif -+ -+c second stage of velocity verlet algorithm -+ -+ if(isw.eq.2)then -+ -+ jr=0 -+ do ig=igrp1,igrp2 -+ -+c new angular momenta and velocities -+ -+ opx=pt5*(-q1(ig)*p0(ig)+q0(ig)*p1(ig)+ -+ x q3(ig)*p2(ig)-q2(ig)*p3(ig)) -+ opy=pt5*(-q2(ig)*p0(ig)-q3(ig)*p1(ig)+ -+ x q0(ig)*p2(ig)+q1(ig)*p3(ig)) -+ opz=pt5*(-q3(ig)*p0(ig)+q2(ig)*p1(ig)- -+ x q1(ig)*p2(ig)+q0(ig)*p3(ig)) -+ -+ id=lstgtp(ig) -+ -+ omx(ig)=opx*rotinx(id,2) -+ omy(ig)=opy*rotiny(id,2) -+ omz(ig)=opz*rotinz(id,2) -+ -+c new rotational matrix -+ -+ call getrotmat(q0(ig),q1(ig),q2(ig),q3(ig),rot) -+ -+c new atomic velocites -+ -+ do j=1,numgsit(id) -+ -+ jr=jr+1 -+ i=lstrgd(jr) -+ -+c new atomic velocites in body frame -+ -+ vaa=omy(ig)*gzz(id,j)-omz(ig)*gyy(id,j) -+ vbb=omz(ig)*gxx(id,j)-omx(ig)*gzz(id,j) -+ vcc=omx(ig)*gyy(id,j)-omy(ig)*gxx(id,j) -+ -+c new atomic velocites in lab frame -+ -+ vxx(i)=rot(1)*vaa+rot(2)*vbb+rot(3)*vcc+gvxx(ig) -+ vyy(i)=rot(4)*vaa+rot(5)*vbb+rot(6)*vcc+gvyy(ig) -+ vzz(i)=rot(7)*vaa+rot(8)*vbb+rot(9)*vcc+gvzz(ig) -+ -+ enddo -+ -+ enddo -+ -+c merge velocities and forces from all nodes -+ -+ if(ntcons.gt.0)then -+ -+ if(mxnode.gt.1)then -+ -+ call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ call merge1 -+ x (idnode,mxnode,natms,lstme,fxx,fyy,fzz,buffer) -+ -+ endif -+ -+c correct constraint bond velocities using rattle -+ -+ call qrattle_v -+ x (newstep,safe,lshmov,idnode,mxnode,natms, -+ x nscons,tolnce,tstep,dxx,dyy,dzz,txx,tyy,tzz, -+ x xxt,yyt,zzt) -+ -+ endif -+ -+c end of second stage -+ -+ endif -+ -+ newstep=.false. -+ -+ enddo -+ -+c check shake convergence -+ -+ if(.not.safe)call error(idnode,105) -+ -+c sum constraint virial and stress across processors -+ -+ if(mxnode.gt.1.and.isw.eq.1)then -+ -+ buffer(1)=vircon -+ call gdsum(buffer(1),1,buffer(2)) -+ vircon=buffer(1) -+ call gdsum(strcns,9,buffer) -+ -+ endif -+ -+c -------------- end of shake iteration cycle ------------------- -+ -+c calculate rigid body contribution to stress tensor -+ -+ call bodystress(idnode,mxnode,ngrp,vircom,strbod,dtx,dty,dtz) -+ -+c add new constraint terms to stress tensor -+ -+ if(isw.eq.1)then -+ -+ do i=1,9 -+ stress(i)=stress(i)+strcns(i)+strbod(i) -+ enddo -+ -+ endif -+ -+c integration of barostat and thermostat (part 2) -+ -+ if(isw.eq.2)then -+ -+c kinetic contributions to stress tensor -+ -+ call kinstressf(ntfree,idnode,mxnode,strkin) -+ call kinstressg(ngrp,idnode,mxnode,strgrp) -+ -+c add kinetic and body contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+ do jcyc=1,ncyc -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+c integrate and apply nst barostat -+ -+ call nstqscl_p2 -+ x (idnode,mxnode,ntfree,ngrp,mode,fstep,pmass,chit,press, -+ x volm,strkin,strgrp) -+ -+c integrate and apply nst thermostat -+ -+ call nstqscl_t2 -+ x (idnode,mxnode,ntfree,ngrp,mode,engfke,engtrn,engrot,temp, -+ x sigma,qstep,pmass,qmass,taut,chit,conint,strkin,strgrp) -+ -+c metadynamics shell thermostat -+c ==================================================== -+c Must first merge update velocities as the core-shell -+c velocites are not distributed according to the same -+c rules. -+c ==================================================== -+ if(lmetadyn.and.keyshl.eq.1)then -+ if(mxnode.gt.1)call merge -+ x (idnode,mxnode,natms,mxbuff,vxx,vyy,vzz,buffer) -+ call nvtscale_shl -+ x (idnode,mxnode,ntshl,shlke,sigma_shl,hstep,qmass_shl, -+ x taut,chit_shl,conint) -+ endif -+ -+ enddo -+ -+c translational kinetic energy -+ -+ engke=engfke+engtrn -+ -+c sum up all contributions to stress tensor -+ -+ do i=1,9 -+ stress(i)=stres0(i)+strkin(i)+strgrp(i)+strbod(i)+strcns(i) -+ enddo -+ -+ endif -+ -+c restore forces -+ -+ do i=1,natms -+ -+ fxx(i)=fxo(i) -+ fyy(i)=fyo(i) -+ fzz(i)=fzo(i) -+ -+ enddo -+ -+c -------------- end of barostat iteration cycle ---------------- -+ -+ enddo -+ -+ if(isw.eq.2)then -+ -+c calculate conserved variable -+ -+ chip2=sdot0(9,eta,eta) -+ if(mode.eq.2)chip2=chip2-eta(1)**2 -+ consv=conint+0.5d0*qmass*chit**2+0.5d0*pmass*chip2+press*volm -+ -+c metadynamics shell thermostat -+ -+ if(lmetadyn.and.keyshl.eq.1)then -+ consv=consv+0.5d0*qmass_shl*chit_shl**2 -+ endif -+ -+c merge velocity arrays -+ -+ if(mxnode.gt.1)call merge1 -+ x (idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c adjust long range corrections and number density -+ -+ elrc=elrc0*(volm0/volm) -+ virlrc=virlrc0*(volm0/volm) -+ do k=1,ntpatm -+ dens(k)=dens0(k)*(volm0/volm) -+ enddo -+ -+ if(mxnode.gt.1)then -+ -+c merge new group coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gvxx,gvyy,gvzz,buffer) -+ -+c merge new atomic coordinates and velocities -+ -+ if(isw.eq.1) -+ x call merge1(idnode,mxnode,natms,lstme,xxx,yyy,zzz,buffer) -+ call merge1(idnode,mxnode,natms,lstme,vxx,vyy,vzz,buffer) -+ -+ endif -+ -+c periodic boundary condition -+ -+ if(isw.eq.2)then -+ -+ call images(imcon,idnode,mxnode,natms,cell,xxx,yyy,zzz) -+ call images(imcon,idnode,mxnode,ngrp,cell,gcmx,gcmy,gcmz) -+ -+c merge position data -+ -+ if(mxnode.gt.1)then -+ -+ call merge(idnode,mxnode,natms,mxbuff,xxx,yyy,zzz,buffer) -+ call merge(idnode,mxnode,ngrp,mxbuff,gcmx,gcmy,gcmz,buffer) -+ -+ endif -+ -+ endif -+ -+c deallocate working arrays -+ -+ deallocate(gvxo,gvyo,gvzo,vxo,vyo,vzo,stat=fail(1)) -+ deallocate(b0,b1,b2,b3,c0,c1,c2,c3,stat=fail(2)) -+ deallocate(dtx,dty,dtz,stat=fail(3)) -+ if(isw.eq.1)then -+ deallocate(xxo,yyo,zzo,gxo,gyo,gzo,stat=fail(4)) -+ endif -+ if(ntcons.gt.0)then -+ -+ deallocate(dxx,dyy,dzz,txx,tyy,tzz,stat=fail(5)) -+ deallocate(dxt,dyt,dzt,xxt,yyt,zzt,stat=fail(6)) -+ -+ endif -+ if(isw.eq.2)then -+ deallocate(fxo,fyo,fzo,stat=fail(7)) -+ endif -+ -+ return -+ end subroutine nstqvv_h2 -+ -+ end module vv_rotation2_module -- GitLab From 0d983d87666a1a11c3b976d1821811e428b34f97 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Thu, 1 Dec 2016 13:45:41 +0100 Subject: [PATCH 0086/1311] ncview needs X11 develop libs --- easybuild/easyconfigs/n/ncview/ncview-2.1.7-intel-2016b.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/n/ncview/ncview-2.1.7-intel-2016b.eb b/easybuild/easyconfigs/n/ncview/ncview-2.1.7-intel-2016b.eb index 09cf15c6d3..5320b4aa4c 100644 --- a/easybuild/easyconfigs/n/ncview/ncview-2.1.7-intel-2016b.eb +++ b/easybuild/easyconfigs/n/ncview/ncview-2.1.7-intel-2016b.eb @@ -33,6 +33,7 @@ dependencies = [ ('netCDF', '4.4.1'), ('netCDF-Fortran', '4.4.4'), ('UDUNITS', '2.2.20'), + ('X11', '20160819'), ] sanity_check_paths = { -- GitLab From 560712929d11edf201e1d10708aa23fdfdeed043 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Thu, 1 Dec 2016 14:21:52 +0100 Subject: [PATCH 0087/1311] {bio} [intel/2016b] taco/0.5.1 --- .../taco-0.5.1-intel-2016b-Pyton-2.7.12.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb diff --git a/easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb b/easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb new file mode 100644 index 0000000000..833d9ac2f4 --- /dev/null +++ b/easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'taco' +version = '0.5.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://tacorna.github.io' +description = """Multi-sample transcriptome assembly from RNA-Seq""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/tacorna/taco/archive'] + +dependencies = [ + ('Python', '2.7.12'), +] + +postinstallcmds = ["mv %(installdir)s/bin/taco_run.py %(installdir)s/bin/taco_run"] + +sanity_check_paths = { + 'files': ['bin/taco_run'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'bio' -- GitLab From 4f6c474457ac4f860dad788baac039badf7b53e1 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Thu, 1 Dec 2016 14:28:13 +0100 Subject: [PATCH 0088/1311] Fix typo --- ...6b-Pyton-2.7.12.eb => taco-0.5.1-intel-2016b-Python-2.7.12.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/t/taco/{taco-0.5.1-intel-2016b-Pyton-2.7.12.eb => taco-0.5.1-intel-2016b-Python-2.7.12.eb} (100%) diff --git a/easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb b/easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Python-2.7.12.eb similarity index 100% rename from easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Pyton-2.7.12.eb rename to easybuild/easyconfigs/t/taco/taco-0.5.1-intel-2016b-Python-2.7.12.eb -- GitLab From 6d6a8541b20dfdadd81abe1b23028407544b218f Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Thu, 1 Dec 2016 14:31:29 +0100 Subject: [PATCH 0089/1311] {data}[intel/2016b] CDO 1.7.2 (REVIEW) --- .../c/CDO/CDO-1.7.2-intel-2016b.eb | 29 +++++++++++++++++++ .../y/YAXT/YAXT-0.5.1-intel-2016b.eb | 23 +++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/c/CDO/CDO-1.7.2-intel-2016b.eb create mode 100644 easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/c/CDO/CDO-1.7.2-intel-2016b.eb b/easybuild/easyconfigs/c/CDO/CDO-1.7.2-intel-2016b.eb new file mode 100644 index 0000000000..3af830a1e6 --- /dev/null +++ b/easybuild/easyconfigs/c/CDO/CDO-1.7.2-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'CDO' +version = '1.7.2' + +homepage = 'https://code.zmaw.de/projects/cdo' +description = """CDO is a collection of command line Operators to manipulate and analyse Climate and NWP model Data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://code.zmaw.de/attachments/download/12760/'] +checksums = [('md5', 'f08e4ce8739a4f2b63fc81a24db3ee31')] + +dependencies = [ + ('HDF5', '1.8.17'), + ('netCDF', '4.4.1'), + ('YAXT', '0.5.1'), +] + +configopts = "--with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF" + +sanity_check_paths = { + 'files': ["bin/cdo"], + 'dirs': [], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2016b.eb b/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2016b.eb new file mode 100644 index 0000000000..e2e871aa13 --- /dev/null +++ b/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'YAXT' +version = '0.5.1' + +homepage = 'https://www.dkrz.de/redmine/projects/yaxt' +description = "Yet Another eXchange Tool" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://www.dkrz.de/redmine/attachments/download/473/'] +checksums = [('md5', '2176c5b1096146e58163656b9d83c0b3')] + +sanity_check_paths = { + 'files': ["include/yaxt.h", "include/yaxt.mod", "lib/libyaxt.a", "lib/libyaxt.%s" % SHLIB_EXT], + 'dirs': ["include/xt"], +} + +configopts = 'FC="$F90" FCFLAGS="$F90FLAGS -cpp"' + +moduleclass = 'tools' -- GitLab From 41bdd846ccf8327a8d60c218fbd7148b1db1a008 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 14:53:34 +0100 Subject: [PATCH 0090/1311] adding easyconfigs: netCDF-Fortran-4.4.4-foss-2016b.eb, netCDF-4.4.1.1-foss-2016b.eb --- .../netCDF-Fortran-4.4.4-foss-2016b.eb | 17 ++++++++++ .../n/netCDF/netCDF-4.4.1.1-foss-2016b.eb | 34 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb new file mode 100644 index 0000000000..4298086b09 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb @@ -0,0 +1,17 @@ +name = 'netCDF-Fortran' +version = '4.4.4' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/Unidata/netcdf-fortran/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('netCDF', '4.4.1.1')] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-foss-2016b.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-foss-2016b.eb new file mode 100644 index 0000000000..5da2b108a0 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-foss-2016b.eb @@ -0,0 +1,34 @@ +name = 'netCDF' +version = '4.4.1.1' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = ['v%(version)s.tar.gz'] +source_urls = [ + 'https://github.com/Unidata/netcdf-c/archive/' +] + +dependencies = [ + ('HDF5', '1.8.17'), + ('cURL', '7.49.1'), + ('Szip', '2.1'), +] + +builddependencies = [ + ('CMake', '3.5.2'), + ('Doxygen', '1.8.11'), +] + +# make sure both static and shared libs are built +configopts = [ + "-DBUILD_SHARED_LIBS=OFF ", + "-DBUILD_SHARED_LIBS=ON ", +] + +moduleclass = 'data' -- GitLab From 6a87da52ab1b7eb25566f85ce4554bf44bc4ffc7 Mon Sep 17 00:00:00 2001 From: edo Date: Thu, 1 Dec 2016 16:17:14 +0100 Subject: [PATCH 0091/1311] adding easyconfigs: METIS-5.1.0-foss-2016b.eb --- .../m/METIS/METIS-5.1.0-foss-2016b.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb new file mode 100644 index 0000000000..1510375706 --- /dev/null +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb @@ -0,0 +1,22 @@ +name = 'METIS' +version = '5.1.0' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, + and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the + multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', +] + +builddependencies = [('CMake', '3.6.1')] + +configopts = ['', 'shared=1'] + +moduleclass = 'math' -- GitLab From 2c1a0f3cdee4cd5b1aa4d74bf6e518f2e1e1c168 Mon Sep 17 00:00:00 2001 From: edo Date: Thu, 1 Dec 2016 17:15:47 +0100 Subject: [PATCH 0092/1311] adding easyconfigs: ParaView-5.1.2-foss-2016b-mpi.eb --- .../ParaView/ParaView-5.1.2-foss-2016b-mpi.eb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/p/ParaView/ParaView-5.1.2-foss-2016b-mpi.eb diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.1.2-foss-2016b-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.1.2-foss-2016b-mpi.eb new file mode 100644 index 0000000000..986537e37c --- /dev/null +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.1.2-foss-2016b-mpi.eb @@ -0,0 +1,50 @@ +easyblock = 'CMakeMake' + +name = 'ParaView' +version = '5.1.2' +versionsuffix = '-mpi' + +homepage = "http://www.paraview.org" +description = "ParaView is a scientific parallel visualizer." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +download_suffix = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=all&downloadFile=' +source_urls = ['http://www.paraview.org/paraview-downloads/%s' % download_suffix] +sources = ["ParaView-v%(version)s.tar.gz"] + +dependencies = [ + ('X11', '20160819'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('Qt', '4.8.7'), + ('zlib', '1.2.8'), + ('HDF5', '1.8.17'), + ('Python', '2.7.12'), +] + +builddependencies = [('CMake', '3.6.1')] + +separate_build_dir = True + +configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON -DPARAVIEW_USE_MPI=ON ' +configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s ' % SHLIB_EXT +configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.%s ' % SHLIB_EXT +configopts += '-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s ' % SHLIB_EXT +configopts += '-DVTK_USE_SYSTEM_HDF5=ON -DPARAVIEW_ENABLE_PYTHON=ON -DBUILD_SHARED_LIBS=ON ' +# if you want to build server only Paraview, uncomment the following line: +# configopts += '-DVTK_USE_X=OFF ' + +# Without internet connection turn off testing (uncomment the following line) +configopts += '-DBUILD_TESTING=OFF ' +# Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md +# and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly +# Without internet connection, comment the following two lines (configopts and prebuildopts) +configopts += '-DExternalData_OBJECT_STORES=%(builddir)s/ExternalData ' +# The ParaView server can be cranky, test downloads are quite often failing, especially in the case +# of parallel downloads. Using ; insted of && gives a second chance to download the test files, if the +# first serial attempt would fail. +prebuildopts = 'make VTKData ;' + +moduleclass = 'vis' -- GitLab From 9d745bc21549aff93a1a15db90926543354a6b60 Mon Sep 17 00:00:00 2001 From: edo Date: Thu, 1 Dec 2016 17:24:47 +0100 Subject: [PATCH 0093/1311] adding easyconfigs: SCOTCH-6.0.4-foss-2016b.eb --- .../s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb new file mode 100644 index 0000000000..9fb7233435 --- /dev/null +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb @@ -0,0 +1,14 @@ +name = 'SCOTCH' +version = '6.0.4' + +homepage = 'http://gforge.inria.fr/projects/scotch/' +description = """Software package and libraries for sequential and parallel graph partitioning, +static mapping, and sparse matrix block ordering, and sequential mesh and hypergraph partitioning.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] +sources = ['%(namelower)s_%(version)s.tar.gz'] + +moduleclass = 'math' -- GitLab From 528ca3eceb8a8ca670dd6ea61ce319f1265f291a Mon Sep 17 00:00:00 2001 From: edo Date: Thu, 1 Dec 2016 17:32:59 +0100 Subject: [PATCH 0094/1311] missing dep --- .../easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb new file mode 100644 index 0000000000..0a4c160172 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb @@ -0,0 +1,55 @@ +# Built with EasyBuild version 3.0.0 on 2016-11-21_19-05-37 +name = 'Qt' +version = '4.8.7' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/' +] +sources = ['%(namelower)s-everywhere-opensource-src-%(version)s.tar.gz'] + +patches = ['Qt-%(version)s_phonon-export.patch'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +dependencies = [ + ('GLib', '2.49.5'), + ('libpng', '1.6.24'), + ('X11', '20160819'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' + +# Build statistics +buildstats = [{ + "build_time": 3318.3, + "command_line": ["--buildpath='/sw/easybuild/build'", '--force', "--installpath='/sw/easybuild'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/sw/easybuild/packages'", "--prefix='/sw/easybuild'", "--repositorypath='/sw/easybuild/ebfiles_repo'", "--robot='/home/AEN/80001180/obot:/sw/easybuild/software/EasyBuild/3.0.0/lib/python2.6/site-packages/easybuild_easyconfigs-3.0.0-py2.6.egg/easybuild/easyconfigs'", "--robot-paths='/home/AEN/80001180/obot:'", "--sourcepath='/sw/easybuild/sources'", "--try-toolchain='foss,2016b'", 'Qt-4.8.7-intel-2016b.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU X5670 @ 2.93GHz", + "cpu_speed": 2934.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.0.0", + "easybuild-framework_version": "3.0.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/sw/easybuild/software/GCCcore/5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/sw/easybuild/software/GCCcore/5.4.0 --with-local-prefix=/sw/easybuild/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/sw/easybuild/build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.12", + "hostname": "login1", + "install_size": 675436975, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos", + "os_type": "Linux", + "os_version": "6.6", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.6.6 (r266:84292, Jan 22 2014, 09:42:36) ; [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]", + "system_gcc_path": "/sw/easybuild/software/GCCcore/5.4.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1479751534, + "total_memory": 24150, +}] -- GitLab From 91a85bb702331d5584d09fe0e98901d79aa11f08 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Dec 2016 22:26:05 +0100 Subject: [PATCH 0095/1311] stick to netCDF 4.4.1 in netCDF-Fortran 4.4.4 easyconfig --- .../n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb index 4298086b09..8da424609f 100644 --- a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb +++ b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-foss-2016b.eb @@ -12,6 +12,6 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/Unidata/netcdf-fortran/archive/'] sources = ['v%(version)s.tar.gz'] -dependencies = [('netCDF', '4.4.1.1')] +dependencies = [('netCDF', '4.4.1')] moduleclass = 'data' -- GitLab From 54821b59dd9d45e61526105e9f2b8d6f1928285e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 09:21:58 +0100 Subject: [PATCH 0096/1311] fix accidental lowercasing in sanity check paths for xproto 7.0.27 w/ goolf/1.5.14 --- .../easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb index 648ba72bf8..634833a4a6 100644 --- a/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.27-goolf-1.5.14.eb @@ -13,11 +13,11 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_PROTO_SOURCE] sanity_check_paths = { - 'files': ['include/x11/%s' % x for x in ['ap_keysym.h', 'hpkeysym.h', 'keysym.h', 'xalloca.h', 'xatom.h', - 'xf86keysym.h', 'xfuncs.h', 'xmd.h', 'xos.h', 'xpoll.h', 'xprotostr.h', - 'xw32defs.h', 'xwindows.h', 'deckeysym.h', 'keysymdef.h', 'sunkeysym.h', - 'xarch.h', 'xdefs.h', 'xfuncproto.h', 'x.h', 'xosdefs.h', 'xos_r.h', - 'xproto.h', 'xthreads.h', 'xwdfile.h', 'xwinsock.h']], + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], 'dirs': [] } -- GitLab From 1ca5a3f791464ee94d8891d4a5dac6c4189a3176 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 10:18:40 +0100 Subject: [PATCH 0097/1311] add checksums in DL_POLY Classic easyconfigs --- .../DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb | 1 + .../DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb | 6 ++++++ .../d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb | 1 + 3 files changed, 8 insertions(+) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb index a5b0e16996..daa85f8912 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb @@ -10,6 +10,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +checksums = ['66e40eccc6d3f696c8e3654b5dd2de54'] sanity_check_paths = { 'files': ['bin/DLPOLY.X'], diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb index 9541b2f02f..0223680bc9 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b-PLUMED-2.2.3.eb @@ -15,6 +15,12 @@ sources = [ 'dlpoly2.tar.gz', ] patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] +checksums = [ + '66e40eccc6d3f696c8e3654b5dd2de54', # dl_class_1.9.tar.gz + '39edd8805751b3581b9a4a0147ec1c67', # dlpoly2.tar.gz + '81f2cfd95c578aabc5c87a2777b106c3', # DL_POLY_Classic-1.9_fix-PLUMED-integration.patch +] + plumedversion = '2.2.3' versionsuffix = '-PLUMED-%s' % plumedversion diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb index c4fcfd2f6b..04e4e4da9b 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-intel-2016b.eb @@ -9,6 +9,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +checksums = ['66e40eccc6d3f696c8e3654b5dd2de54'] # parallel build tends to break parallel = 1 -- GitLab From c125531dd2e0682ca9db92df10d2e285956c99e4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 10:20:03 +0100 Subject: [PATCH 0098/1311] add checksums in DL_POLY Classic easyconfigs --- .../DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb | 5 +++++ .../DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb | 5 +++++ .../DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb | 1 + 3 files changed, 11 insertions(+) diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb index 957737f32e..72b5773546 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.1.4.eb @@ -15,6 +15,11 @@ sources = [ 'dlpoly2.tar.gz', ] patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] +checksums = [ + '66e40eccc6d3f696c8e3654b5dd2de54', # dl_class_1.9.tar.gz + '39edd8805751b3581b9a4a0147ec1c67', # dlpoly2.tar.gz + '81f2cfd95c578aabc5c87a2777b106c3', # DL_POLY_Classic-1.9_fix-PLUMED-integration.patch +] plumedversion = '2.1.4' versionsuffix = '-PLUMED-%s' % plumedversion diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb index 6ccf002e66..e62d26024b 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-foss-2015b-PLUMED-2.2.0.eb @@ -15,6 +15,11 @@ sources = [ 'dlpoly2.tar.gz', ] patches = [('DL_POLY_Classic-%(version)s_fix-PLUMED-integration.patch', '..')] +checksums = [ + '66e40eccc6d3f696c8e3654b5dd2de54', # dl_class_1.9.tar.gz + '39edd8805751b3581b9a4a0147ec1c67', # dlpoly2.tar.gz + '81f2cfd95c578aabc5c87a2777b106c3', # DL_POLY_Classic-1.9_fix-PLUMED-integration.patch +] plumedversion = '2.2.0' versionsuffix = '-PLUMED-%s' % plumedversion diff --git a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb index a5b0e16996..daa85f8912 100644 --- a/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb +++ b/easybuild/easyconfigs/d/DL_POLY_Classic/DL_POLY_Classic-1.9-ictce-5.3.0-no-gui.eb @@ -10,6 +10,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = ['dl_class_%(version)s.tar.gz'] source_urls = ['http://ccpforge.cse.rl.ac.uk/gf/download/frsrelease/255/2627/'] +checksums = ['66e40eccc6d3f696c8e3654b5dd2de54'] sanity_check_paths = { 'files': ['bin/DLPOLY.X'], -- GitLab From 0829aab1d427f180d7aa90aaa4442de298ed42ca Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 14:00:37 +0100 Subject: [PATCH 0099/1311] adding easyconfigs: PGI-16.10-GCC-5.4.0-2.26.eb --- .../p/PGI/PGI-16.10-GCC-5.4.0-2.26.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/p/PGI/PGI-16.10-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.10-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/p/PGI/PGI-16.10-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..c31c9c139b --- /dev/null +++ b/easybuild/easyconfigs/p/PGI/PGI-16.10-GCC-5.4.0-2.26.eb @@ -0,0 +1,25 @@ +name = 'PGI' +version = '16.10' + +homepage = 'http://www.pgroup.com/' +description = "C, C++ and Fortran compilers from The Portland Group - PGI" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['pgilinux-20%(version_major)s-%(version_major)s%(version_minor)s-x86_64.tar.gz'] +checksums = ['9bb6bfb7b1052f9e6a45829ba7a24e47'] + +gccver = '5.4.0' +binutilsver = '2.26' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), + ('numactl', '2.0.11', '', ('GCCcore', gccver)), +] + +# license file +license_file = HOME + '/licenses/pgi/license.dat' + +moduleclass = 'compiler' -- GitLab From 51bb3205862ddc74ce078b6c1355974ccf0722c5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 15:53:30 +0100 Subject: [PATCH 0100/1311] adding easyconfigs: CP2K-4.1-intel-2016b.eb, libxsmm-1.6-intel-2016b.eb --- .../c/CP2K/CP2K-4.1-intel-2016b.eb | 41 +++++++++++++++++++ .../l/libxsmm/libxsmm-1.6-intel-2016b.eb | 26 ++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb new file mode 100644 index 0000000000..cd0f3a9a66 --- /dev/null +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb @@ -0,0 +1,41 @@ +name = 'CP2K' +version = '4.1' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. """ + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [SOURCEFORGE_SOURCE] + +patches = [ + 'CP2K-2.4.0-fix_compile_date_lastsvn.patch', +] + +dependencies = [ + ('Libint', '1.1.6'), + ('libxc', '2.2.3'), + ('PLUMED', '2.2.3'), + ('libxsmm', '1.6'), +] + +builddependencies = [ + ('flex', '2.6.0'), + ('Bison', '3.0.4'), +] + +# don't use parallel make, results in compilation failure +# because Fortran module files aren't created before they are needed +parallel = 1 + +# regression test reports failures +ignore_regtest_fails = True + +plumed = True + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb new file mode 100644 index 0000000000..bb0cffc7fe --- /dev/null +++ b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libxsmm' +version = '1.6' + +homepage = 'https://github.com/hfp/libxsmm' +description = """LIBXSMM is a library for small dense and small sparse matrix-matrix multiplications +targeting Intel Architecture (x86).""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(version)s.tar.gz'] +source_urls = ['https://github.com/hfp/libxsmm/archive/'] + +# install both static and dynamic version +installopts = ['PREFIX=%(installdir)s', 'PREFIX=%(installdir)s STATIC=0'] + +skipsteps = ['configure'] +maxparallel = 1 + +sanity_check_paths = { + 'files': ['bin/libxsmm_gemm_generator', 'include/libxsmm.h', 'lib/libxsmm.a', 'lib/libxsmm.%s' % SHLIB_EXT], + 'dirs': ['share'] +} + +moduleclass = 'math' -- GitLab From 3dc4a6f9f9a29c9aef0881ebd2547052c0678ba7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 18:43:16 +0100 Subject: [PATCH 0101/1311] trivial style fixes in vt, Voro++, ViennaRNA, VTune, VEGAS, VCFtools, VASP easyconfigs --- .../v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb | 4 ++-- .../VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb | 4 ++-- .../VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb | 4 ++-- easybuild/easyconfigs/v/VEGAS/VEGAS-0.8.27.eb | 2 +- easybuild/easyconfigs/v/VTune/VTune-2013_update10.eb | 3 ++- easybuild/easyconfigs/v/VTune/VTune-2013_update6.eb | 3 ++- easybuild/easyconfigs/v/VTune/VTune-2013_update8.eb | 3 ++- easybuild/easyconfigs/v/VTune/VTune-2013_update9.eb | 3 ++- .../v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb | 2 +- .../v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb | 2 +- .../v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb | 2 +- .../easyconfigs/v/Voro++/Voro++-0.4.6-foss-2016a.eb | 9 +++++---- .../easyconfigs/v/Voro++/Voro++-0.4.6-intel-2016a.eb | 9 +++++---- easybuild/easyconfigs/v/vt/vt-0.577-goolf-1.7.20.eb | 6 +++--- 14 files changed, 31 insertions(+), 25 deletions(-) diff --git a/easybuild/easyconfigs/v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb index 5cd635730b..c9841ec8b6 100644 --- a/easybuild/easyconfigs/v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/v/VASP/VASP-5.4.1-intel-2016.02-GCC-4.9.eb @@ -15,11 +15,11 @@ toolchainopts = {'usempi': True} sources = ['vasp.5.4.1.24Jun15.tar.gz'] # uncommment after downloading patches from http://cms.mpi.univie.ac.at/wiki/index.php/Installing_VASP -#patches = [ +# patches = [ # 'vasp.5.4.1.08072015.patch', # 'vasp.5.4.1.27082015.patch', # 'vasp.5.4.1.06112015.patch', -#] +# ] checksums = [ '9a56174e272ac0c07645c42932848788', # vasp.5.4.1.24Jun15.tar.gz diff --git a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb index cbdd6fa4eb..c4c82d2f79 100644 --- a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb @@ -18,7 +18,7 @@ source_urls = ['https://github.com/vcftools/vcftools/releases/download/v%(versio sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('Perl' , '5.16.3'), + ('Perl', '5.16.3'), ] sanity_check_paths = { @@ -28,7 +28,7 @@ sanity_check_paths = { } modextrapaths = { - 'PERL5LIB': 'lib/perl5/site_perl/', + 'PERL5LIB': 'lib/perl5/site_perl/', } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb index c98bd74904..6a770e5ef1 100644 --- a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb +++ b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb @@ -18,7 +18,7 @@ source_urls = ['https://github.com/vcftools/vcftools/releases/download/v%(versio sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('Perl' , '5.22.2'), + ('Perl', '5.22.2'), ] sanity_check_paths = { @@ -28,7 +28,7 @@ sanity_check_paths = { } modextrapaths = { - 'PERL5LIB': 'lib/perl5/site_perl/', + 'PERL5LIB': 'lib/perl5/site_perl/', } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/VEGAS/VEGAS-0.8.27.eb b/easybuild/easyconfigs/v/VEGAS/VEGAS-0.8.27.eb index 83780a4e6c..367fff5696 100644 --- a/easybuild/easyconfigs/v/VEGAS/VEGAS-0.8.27.eb +++ b/easybuild/easyconfigs/v/VEGAS/VEGAS-0.8.27.eb @@ -17,7 +17,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://gump.qimr.edu.au/VEGAS/'] sources = ['vegas-%(version)s-hapmapCEU.tar.gz'] -checksums= ["87ca985fec0c64820bfd202f15fb31de"] +checksums = ['87ca985fec0c64820bfd202f15fb31de'] modextrapaths = {'PATH': ''} diff --git a/easybuild/easyconfigs/v/VTune/VTune-2013_update10.eb b/easybuild/easyconfigs/v/VTune/VTune-2013_update10.eb index 109b1823e3..2c12506de3 100644 --- a/easybuild/easyconfigs/v/VTune/VTune-2013_update10.eb +++ b/easybuild/easyconfigs/v/VTune/VTune-2013_update10.eb @@ -2,7 +2,8 @@ name = 'VTune' version = '2013_update10' homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' -description = "Intel VTune Amplifier XE 2013 is the premier performance profiler for C, C++, C#, Fortran, Assembly and Java." +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/v/VTune/VTune-2013_update6.eb b/easybuild/easyconfigs/v/VTune/VTune-2013_update6.eb index 52589402c4..3a689d5347 100644 --- a/easybuild/easyconfigs/v/VTune/VTune-2013_update6.eb +++ b/easybuild/easyconfigs/v/VTune/VTune-2013_update6.eb @@ -2,7 +2,8 @@ name = 'VTune' version = '2013_update6' homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' -description = "Intel VTune Amplifier XE 2013 is the premier performance profiler for C, C++, C#, Fortran, Assembly and Java." +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/v/VTune/VTune-2013_update8.eb b/easybuild/easyconfigs/v/VTune/VTune-2013_update8.eb index de9aeec90d..210397b41a 100644 --- a/easybuild/easyconfigs/v/VTune/VTune-2013_update8.eb +++ b/easybuild/easyconfigs/v/VTune/VTune-2013_update8.eb @@ -2,7 +2,8 @@ name = 'VTune' version = '2013_update8' homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' -description = "Intel VTune Amplifier XE 2013 is the premier performance profiler for C, C++, C#, Fortran, Assembly and Java." +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/v/VTune/VTune-2013_update9.eb b/easybuild/easyconfigs/v/VTune/VTune-2013_update9.eb index f40578b690..c56eb22325 100644 --- a/easybuild/easyconfigs/v/VTune/VTune-2013_update9.eb +++ b/easybuild/easyconfigs/v/VTune/VTune-2013_update9.eb @@ -2,7 +2,8 @@ name = 'VTune' version = '2013_update9' homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' -description = "Intel VTune Amplifier XE 2013 is the premier performance profiler for C, C++, C#, Fortran, Assembly and Java." +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb index 1e20cf23ec..759ecb7840 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb @@ -29,7 +29,7 @@ source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA'] configopts = '--without-perl' # Alternatively, you may want to use the following to copy the perl-module to a "local" directory # Code NOT yet tested, therefor left here for future recycling -#preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' sanity_check_paths = { 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb index a66be3332b..f0b4020253 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb @@ -32,7 +32,7 @@ patches = ['ViennaRNA_ictce-pragma.patch'] configopts = '--without-perl' # Alternatively, you may want to use the following to copy the perl-module to a "local" directory # Code NOT yet tested, therefor left here for future recycling -#preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' sanity_check_paths = { 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb index 664ec56172..106d2f71e3 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb @@ -31,7 +31,7 @@ patches = ['ViennaRNA-2.1.6_ictce.patch'] configopts = '--without-perl' # Alternatively, you may want to use the following to copy the perl-module to a "local" directory # Code NOT yet tested, therefor left here for future recycling -#preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' sanity_check_paths = { 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', diff --git a/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-foss-2016a.eb b/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-foss-2016a.eb index 93353953b6..7020ae2236 100644 --- a/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-foss-2016a.eb +++ b/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-foss-2016a.eb @@ -4,10 +4,11 @@ name = 'Voro++' version = '0.4.6' homepage = 'http://math.lbl.gov/voro++/' -description = """Voro++ is a software library for carrying out three-dimensional computations of the Voronoi tessellation. -A distinguishing feature of the Voro++ library is that it carries out cell-based calculations, computing the Voronoi cell -for each particle individually. It is particularly well-suited for applications that rely on cell-based statistics, -where features of Voronoi cells (eg. volume, centroid, number of faces) can be used to analyze a system of particles.""" +description = """Voro++ is a software library for carrying out three-dimensional computations of the Voronoi +tessellation. A distinguishing feature of the Voro++ library is that it carries out cell-based calculations, +computing the Voronoi cell for each particle individually. It is particularly well-suited for applications that +rely on cell-based statistics, where features of Voronoi cells (eg. volume, centroid, number of faces) can be used +to analyze a system of particles.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-intel-2016a.eb b/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-intel-2016a.eb index 4e1d6c3176..d7bac431f7 100644 --- a/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-intel-2016a.eb +++ b/easybuild/easyconfigs/v/Voro++/Voro++-0.4.6-intel-2016a.eb @@ -4,10 +4,11 @@ name = 'Voro++' version = '0.4.6' homepage = 'http://math.lbl.gov/voro++/' -description = """Voro++ is a software library for carrying out three-dimensional computations of the Voronoi tessellation. -A distinguishing feature of the Voro++ library is that it carries out cell-based calculations, computing the Voronoi cell -for each particle individually. It is particularly well-suited for applications that rely on cell-based statistics, -where features of Voronoi cells (eg. volume, centroid, number of faces) can be used to analyze a system of particles.""" +description = """Voro++ is a software library for carrying out three-dimensional computations of the Voronoi +tessellation. A distinguishing feature of the Voro++ library is that it carries out cell-based calculations, +computing the Voronoi cell for each particle individually. It is particularly well-suited for applications that +rely on cell-based statistics, where features of Voronoi cells (eg. volume, centroid, number of faces) can be used +to analyze a system of particles.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/v/vt/vt-0.577-goolf-1.7.20.eb b/easybuild/easyconfigs/v/vt/vt-0.577-goolf-1.7.20.eb index 8a87b5f908..f8de4a4721 100644 --- a/easybuild/easyconfigs/v/vt/vt-0.577-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/v/vt/vt-0.577-goolf-1.7.20.eb @@ -6,7 +6,7 @@ easyblock = 'MakeCp' name = 'vt' -version = '0.577' +version = '0.577' homepage = 'http://genome.sph.umich.edu/wiki/Vt' description = """A tool set for short variant discovery in genetic sequence data.""" @@ -17,13 +17,13 @@ source_urls = ['https://github.com/atks/vt/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] runtest = 'test' files_to_copy = [(["vt"], "bin"), "README.md", "LICENSE"] - + sanity_check_paths = { 'files': ["bin/vt"], 'dirs': [], -- GitLab From cca664d0c11caaf06c9066ab0d810bc5a0615f6c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 2 Dec 2016 18:47:39 +0100 Subject: [PATCH 0102/1311] death to all tabs --- .../b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb | 6 +++--- .../BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb | 4 ++-- .../Blender/Blender-2.77a-intel-2016b-Python-3.5.2.eb | 4 ++-- .../easyconfigs/b/bwakit/bwakit-0.7.15_x64-linux.eb | 2 +- .../Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb | 6 +++--- .../d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb | 2 +- .../easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb | 8 ++++---- .../e/EIGENSOFT/EIGENSOFT-6.0.1-foss-2016a.eb | 2 +- .../e/EIGENSOFT/EIGENSOFT-6.1.1-foss-2016a.eb | 2 +- .../e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb | 2 +- .../IPython-4.2.0-goolf-1.7.20-Python-2.7.11.eb | 2 +- .../IPython/IPython-4.2.0-intel-2016a-Python-2.7.11.eb | 2 +- .../MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb | 6 ++++-- .../MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb | 6 ++++-- easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb | 4 +--- .../p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb | 4 ++-- .../p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb | 4 ++-- .../r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb | 2 +- .../ScientificPython-2.9.4-foss-2016a-Python-2.7.11.eb | 2 +- ...ScientificPython-2.9.4-intel-2016a-Python-2.7.11.eb | 2 +- .../s/SelEstim/SelEstim-1.1.4-Linux-64bits.eb | 10 +++++----- .../s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb | 2 +- .../s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb | 2 +- ...o-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb | 2 +- 25 files changed, 46 insertions(+), 44 deletions(-) diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb index 056a4ca4d8..885f9339b0 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb @@ -18,8 +18,8 @@ source_urls = ['https://github.com/samtools/bcftools/releases/download/%(version sources = [SOURCELOWER_TAR_BZ2] dependencies = [ - ('zlib', '1.2.8'), - ('GSL', '1.16'), + ('zlib', '1.2.8'), + ('GSL', '1.16'), ] buildopts = " USE_GPL=1 GSL_LIBS='-lgsl -lgslcblas'" @@ -27,7 +27,7 @@ buildopts = " USE_GPL=1 GSL_LIBS='-lgsl -lgslcblas'" runtest = 'test' files_to_copy = [(["bcftools", "plot-vcfstats", "vcfutils.pl"], "bin"), - "doc", "plugins", "test", "LICENSE", "README", "AUTHORS"] + "doc", "plugins", "test", "LICENSE", "README", "AUTHORS"] sanity_check_paths = { 'files': ["bin/bcftools"], diff --git a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb index d62e2cbb88..2661f0fe38 100644 --- a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb @@ -27,8 +27,8 @@ exts_list = [ }), (name, version, { 'modulename': 'Bio::Perl', - 'source_tmpl': 'release-%s.tar.gz' % version.replace('.', '-'), - 'source_urls': ['https://github.com/bioperl/bioperl-live/archive/'], + 'source_tmpl': 'release-%s.tar.gz' % version.replace('.', '-'), + 'source_urls': ['https://github.com/bioperl/bioperl-live/archive/'], }), ] diff --git a/easybuild/easyconfigs/b/Blender/Blender-2.77a-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/b/Blender/Blender-2.77a-intel-2016b-Python-3.5.2.eb index 1ddf498f76..0c7912b766 100644 --- a/easybuild/easyconfigs/b/Blender/Blender-2.77a-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/b/Blender/Blender-2.77a-intel-2016b-Python-3.5.2.eb @@ -46,8 +46,8 @@ separate_build_dir = 'True' modextravars = {'GALLIUM_DRIVER': 'swr'} sanity_check_paths = { - 'files': ['bin/blender'], - 'dirs': [] + 'files': ['bin/blender'], + 'dirs': [] } moduleclass = 'vis' diff --git a/easybuild/easyconfigs/b/bwakit/bwakit-0.7.15_x64-linux.eb b/easybuild/easyconfigs/b/bwakit/bwakit-0.7.15_x64-linux.eb index 5e016d4b0d..25c4049311 100644 --- a/easybuild/easyconfigs/b/bwakit/bwakit-0.7.15_x64-linux.eb +++ b/easybuild/easyconfigs/b/bwakit/bwakit-0.7.15_x64-linux.eb @@ -25,7 +25,7 @@ sanity_check_paths = { # add the installation dir to PATH modextrapaths = { - 'PATH': "", + 'PATH': '', } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb index 7cce1f3518..6a2974e5b4 100644 --- a/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb @@ -30,7 +30,7 @@ exts_list = [ }), ('python-dateutil', '2.6.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], - 'modulename': 'dateutil', + 'modulename': 'dateutil', }), ('future', '0.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/f/future/'], @@ -52,7 +52,7 @@ exts_list = [ }), ('jinja2-time', '0.2.0', { 'source_urls': ['https://pypi.python.org/packages/source/j/jinja2-time/'], - 'modulename': 'jinja2', + 'modulename': 'jinja2', }), ('click', '6.6', { 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], @@ -64,7 +64,7 @@ exts_list = [ 'source_urls': ['https://pypi.python.org/packages/source/m/MarkupSafe/'], }), ('cookiecutter', version, { - 'source_urls': ['https://pypi.python.org/packages/source/c/cookiecutter/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/cookiecutter/'], }), ] diff --git a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb index e419bc6e0b..86590d12e7 100644 --- a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb +++ b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb @@ -13,7 +13,7 @@ correlated electron systems. This module bundles all the dependencies for the CP toolchain = {'name': 'CrayGNU', 'version': '2015.11'} dependencies = [ - ('CMake', '3.5.0'), + ('CMake', '3.5.0'), ('spglib', '1.7.3'), ('NFFT', '3.3.0'), ('GSL', '2.1'), diff --git a/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb b/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb index 0edd0228ed..1a6bd6a25d 100644 --- a/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb @@ -20,10 +20,10 @@ dependencies = [ ('LASTZ', '1.02.00'), ] -binaries = [ 'assemble', 'assemble1', 'assemble_illumina', 'build_sff_index', 'convertFastqFasta', - 'cull_components', 'DIAL', 'filter', 'filter_clusters', 'fish_clusters', 'make_template', - 'masker', 'partition', 'remove_clones', 'remove_clusters', 'update', 'update_clusters', - 'update_status',] +binaries = ['assemble', 'assemble1', 'assemble_illumina', 'build_sff_index', 'convertFastqFasta', + 'cull_components', 'DIAL', 'filter', 'filter_clusters', 'fish_clusters', 'make_template', + 'masker', 'partition', 'remove_clones', 'remove_clusters', 'update', 'update_clusters', + 'update_status'] sanity_check_paths = { 'files': ['bin/%s' % binfile for binfile in binaries], diff --git a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.0.1-foss-2016a.eb b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.0.1-foss-2016a.eb index 653bc39a36..c1c0d70437 100644 --- a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.0.1-foss-2016a.eb +++ b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.0.1-foss-2016a.eb @@ -27,7 +27,7 @@ source_urls = [ sources = ['EIG%(version)s.tar.gz'] dependencies = [ - ('GSL', '2.1'), + ('GSL', '2.1'), ] # -lm and -pthread are missing in the Makefile diff --git a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-foss-2016a.eb b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-foss-2016a.eb index 90343733e3..198de40465 100644 --- a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-foss-2016a.eb @@ -27,7 +27,7 @@ source_urls = [ sources = ['EIG%(version)s.tar.gz'] dependencies = [ - ('GSL', '2.1'), + ('GSL', '2.1'), ] # -lm and -pthread are missing in the Makefile diff --git a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb index fc4103fecb..6b962c6687 100644 --- a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb @@ -21,7 +21,7 @@ description = """The EIGENSOFT package combines functionality from our populatio toolchain = {'name': 'goolf', 'version': '1.7.20'} dependencies = [ - ('GSL', '1.16'), + ('GSL', '1.16'), ] source_urls = [ diff --git a/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb b/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb index 21da1fddad..59de3272db 100644 --- a/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb +++ b/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb @@ -25,7 +25,7 @@ sanity_check_paths = { # add the installation dir to PATH modextrapaths = { - 'PATH': "", + 'PATH': '', } moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/IPython/IPython-4.2.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/i/IPython/IPython-4.2.0-goolf-1.7.20-Python-2.7.11.eb index 4cb75395cc..e5a53f115d 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-4.2.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-4.2.0-goolf-1.7.20-Python-2.7.11.eb @@ -60,7 +60,7 @@ exts_list = [ }), ('MarkupSafe', '0.23', { 'source_urls': ['https://pypi.python.org/packages/source/M/MarkupSafe/'], - 'modulename': 'markupsafe', + 'modulename': 'markupsafe', }), ('Jinja2', '2.8', { 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], diff --git a/easybuild/easyconfigs/i/IPython/IPython-4.2.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/i/IPython/IPython-4.2.0-intel-2016a-Python-2.7.11.eb index 0626eb2c28..ec8e81a4ce 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-4.2.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-4.2.0-intel-2016a-Python-2.7.11.eb @@ -60,7 +60,7 @@ exts_list = [ }), ('MarkupSafe', '0.23', { 'source_urls': ['https://pypi.io/packages/source/M/MarkupSafe/'], - 'modulename': 'markupsafe', + 'modulename': 'markupsafe', }), ('Jinja2', '2.8', { 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb index 0a8633bccd..c8deee658d 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb @@ -26,8 +26,10 @@ dependencies = [ # compile JNI wrapper library as described in docs # http://mpj-express.org/docs/readme/README -postinstallcmds = ["mkdir %(installdir)s/src/mpjdev/natmpjdev/lib/build", - "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s",] +postinstallcmds = [ + "mkdir %(installdir)s/src/mpjdev/natmpjdev/lib/build", + "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s", +] modextrapaths = { 'CLASSPATH': 'lib', diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb index 25c03b4120..273c10ebde 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb @@ -29,8 +29,10 @@ dependencies = [ # compile JNI wrapper library as described in docs # http://mpj-express.org/docs/readme/README -postinstallcmds = ["mkdir %(installdir)s/src/mpjdev/natmpjdev/lib/build", - "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s",] +postinstallcmds = [ + "mkdir %(installdir)s/src/mpjdev/natmpjdev/lib/build", + "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s", +] modextrapaths = { 'CLASSPATH': 'lib', diff --git a/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb b/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb index c9e316a7de..379bdbc80d 100644 --- a/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb +++ b/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb @@ -21,10 +21,8 @@ configopts = '--disable-latex-doc' postinstallcmds = ["mv %(installdir)s/etc/probabel_config.cfg.example %(installdir)s/etc/probabel_config.cfg"] sanity_check_paths = { - 'files': ['bin/probabel', 'bin/pacoxph', - 'bin/palinear', 'bin/palogist','etc/probabel_config.cfg'], + 'files': ['bin/probabel', 'bin/pacoxph', 'bin/palinear', 'bin/palogist','etc/probabel_config.cfg'], 'dirs': ['share'], } moduleclass = 'bio' - diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb index 61ca6bdf28..f0889a65b2 100644 --- a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb @@ -30,10 +30,10 @@ exts_filter = ("python -c 'import %(ext_name)s'", '') exts_list = [ ('Cython', '0.23.4', { - 'source_urls': ['http://cython.org/release/'], + 'source_urls': ['http://cython.org/release/'], }), ('pysam', version, { - 'source_tmpl': 'v%(version)s.tar.gz', + 'source_tmpl': 'v%(version)s.tar.gz', 'source_urls': ['https://github.com/pysam-developers/pysam/archive/'], }), ] diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb index 9a77cac29a..3deabf6808 100644 --- a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb @@ -33,10 +33,10 @@ exts_filter = ("python -c 'import %(ext_name)s'", '') exts_list = [ ('Cython', '0.25.1', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], }), ('pysam', version, { - 'source_tmpl': 'v%(version)s.tar.gz', + 'source_tmpl': 'v%(version)s.tar.gz', 'source_urls': ['https://github.com/pysam-developers/pysam/archive/'], }), ] diff --git a/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb b/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb index c431cc2a4f..e5d10e8061 100644 --- a/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb @@ -19,7 +19,7 @@ sources = ['%(name)s_%(version)s.tar.gz'] buildopts = ' CC=$CC' files_to_copy = [(['rainbow', 'ezmsim', 'rbasm', 'select_sec_rbcontig.pl', - 'select_best_rbcontig_plus_read1.pl', 'select_sec_rbcontig.pl', 'select_all_rbcontig.pl'], 'bin')] + 'select_best_rbcontig_plus_read1.pl', 'select_sec_rbcontig.pl', 'select_all_rbcontig.pl'], 'bin')] parallel = 1 diff --git a/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-foss-2016a-Python-2.7.11.eb index 267282ee97..3fb71e8f46 100644 --- a/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-foss-2016a-Python-2.7.11.eb @@ -11,7 +11,7 @@ description = """ScientificPython is a collection of Python modules for scientif toolchain = {'name': 'foss', 'version': '2016a'} -source_urls = ['https://sourcesup.cru.fr/frs/download.php/file/4570'] +source_urls = ['https://sourcesup.cru.fr/frs/download.php/file/4570'] sources = [SOURCE_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-intel-2016a-Python-2.7.11.eb index df468d25d7..90ba252429 100644 --- a/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.9.4-intel-2016a-Python-2.7.11.eb @@ -11,7 +11,7 @@ description = """ScientificPython is a collection of Python modules for scientif toolchain = {'name': 'intel', 'version': '2016a'} -source_urls = ['https://sourcesup.cru.fr/frs/download.php/file/4570'] +source_urls = ['https://sourcesup.cru.fr/frs/download.php/file/4570'] sources = [SOURCE_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/s/SelEstim/SelEstim-1.1.4-Linux-64bits.eb b/easybuild/easyconfigs/s/SelEstim/SelEstim-1.1.4-Linux-64bits.eb index 7fd49e7b9f..1b943d4062 100644 --- a/easybuild/easyconfigs/s/SelEstim/SelEstim-1.1.4-Linux-64bits.eb +++ b/easybuild/easyconfigs/s/SelEstim/SelEstim-1.1.4-Linux-64bits.eb @@ -20,11 +20,11 @@ source_urls = ['http://www1.montpellier.inra.fr/CBGP/software/selestim/files/'] sources = ['%(name)s_%(version)s.zip'] postinstallcmds = [ - "rm -fr %(installdir)s/__MACOSX/ ", - "mv %(installdir)s/SelEstim_%(version)s/* %(installdir)s ", - "rm %(installdir)s/bin/SelEstim_1.1.4_OSX64bits ", - "rm %(installdir)s/bin/SelEstim_1.1.4_Linux32bits ", - "cd %(installdir)s/bin/ && ln -s SelEstim_%(version)s_Linux64bits SelEstim ", + "rm -fr %(installdir)s/__MACOSX/ ", + "mv %(installdir)s/SelEstim_%(version)s/* %(installdir)s ", + "rm %(installdir)s/bin/SelEstim_1.1.4_OSX64bits ", + "rm %(installdir)s/bin/SelEstim_1.1.4_Linux32bits ", + "cd %(installdir)s/bin/ && ln -s SelEstim_%(version)s_Linux64bits SelEstim ", ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb index 249a32fcb8..e8b9b26666 100644 --- a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb @@ -27,7 +27,7 @@ exts_list = [ }), ('MarkupSafe', '0.23', { 'source_urls': ['https://pypi.io/packages/source/M/MarkupSafe/'], - 'modulename': 'markupsafe', + 'modulename': 'markupsafe', }), ('Docutils', '0.12', { 'source_tmpl': 'docutils-%(version)s.tar.gz', diff --git a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb index 90efc667c6..a58b6b19e0 100644 --- a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb @@ -27,7 +27,7 @@ exts_list = [ }), ('MarkupSafe', '0.23', { 'source_urls': ['https://pypi.io/packages/source/M/MarkupSafe/'], - 'modulename': 'markupsafe', + 'modulename': 'markupsafe', }), ('Docutils', '0.12', { 'source_tmpl': 'docutils-%(version)s.tar.gz', diff --git a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb index 9e4faf5254..0c99f457cb 100644 --- a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb +++ b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb @@ -47,7 +47,7 @@ sanity_check_paths = { # Yambo is installed with QuantumESPRESSO. I do not like if the same program (with different versions) # is twice in the PATH. Withouth removing the QuantumESPRESSO one, this version of Yambo would be used, # because it is earlier in the PATH -modtclfooter = "remove-path PATH $::env(EBROOTQUANTUMESPRESSO)/espresso-%s/YAMBO/bin" % qever +modtclfooter = "remove-path PATH $::env(EBROOTQUANTUMESPRESSO)/espresso-%s/YAMBO/bin" % qever modluafooter = 'remove_path("PATH", os.getenv("EBROOTQUANTUMESPRESSO") .. "/espresso-%s/YAMBO/bin")' % qever moduleclass = 'phys' -- GitLab From 41f86c6d5d362e64a797a5754d3ce4e0ad1e5fd3 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sat, 3 Dec 2016 09:31:31 +0100 Subject: [PATCH 0103/1311] adding easyconfigs: SolexaQA++-3.1.5-foss-2016b.eb --- .../SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb b/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb new file mode 100644 index 0000000000..1b16b01f26 --- /dev/null +++ b/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb @@ -0,0 +1,35 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Adam Huffman +# The Francis Crick Institute +easyblock = 'MakeCp' + +name = 'SolexaQA++' +version = '3.1.5' + +homepage = 'http://solexaqa.sourceforge.net' +description = """SolexaQA calculates sequence quality statistics and creates visual representations + of data quality for second-generation sequencing data. Originally developed for the Illumina system + (historically known as “Solexa”), SolexaQA now also supports Ion Torrent and 454 data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['%(name)s_v%(version)s.zip'] +source_urls = ['https://sourceforge.net/projects/solexaqa/files/src/'] + +dependencies = [ + ('Boost', '1.61.0'), + ('zlib', '1.2.8'), +] + +start_dir = 'source' + +files_to_copy = [ '%(name)s' ] + +sanity_check_paths = { + 'files': ['%(name)s'], + 'dirs': ["."] +} + +modextrapaths = {'PATH': ['']} + +moduleclass = 'bio' -- GitLab From 60dbeef9a168a513b68bb3f3c3b7628b06cc0b78 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 3 Dec 2016 10:16:09 +0100 Subject: [PATCH 0104/1311] minor style fixes in SolexaQA++ easyconfig --- .../easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb b/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb index 1b16b01f26..bb975b50f8 100644 --- a/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb +++ b/easybuild/easyconfigs/s/SolexaQA++/SolexaQA++-3.1.5-foss-2016b.eb @@ -23,11 +23,11 @@ dependencies = [ start_dir = 'source' -files_to_copy = [ '%(name)s' ] +files_to_copy = ['%(name)s'] sanity_check_paths = { 'files': ['%(name)s'], - 'dirs': ["."] + 'dirs': [], } modextrapaths = {'PATH': ['']} -- GitLab From 02af79b486c632969109ce7a00ad26c4609136d2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 3 Dec 2016 11:06:56 +0100 Subject: [PATCH 0105/1311] trivial style fixes in Text-CSV, Theano, TotalView, Trinity, tbb, tecplot360ex, tmux, UFL, util-linux, Valgrind, VampirTrace easyconfigs --- .../t/Text-CSV/Text-CSV-1.33-foss-2016a-Perl-5.22.1.eb | 2 +- .../t/Theano/Theano-0.8.2-foss-2016a-Python-2.7.11.eb | 4 ++-- .../t/Theano/Theano-0.8.2-foss-2016a-Python-3.5.1.eb | 2 +- .../t/Theano/Theano-0.8.2-intel-2016b-Python-3.5.2.eb | 2 +- .../t/TotalView/TotalView-8.11.0-0-linux-x86-64.eb | 4 +--- .../t/TotalView/TotalView-8.11.0-2-linux-x86-64.eb | 4 +--- .../t/TotalView/TotalView-8.12.0-0-linux-x86-64.eb | 4 +--- .../t/Trinity/Trinity-2012-10-05-goolf-1.4.10.eb | 3 +-- easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb | 4 +--- easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb | 4 +--- easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb | 4 +--- easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb | 4 +--- .../easyconfigs/t/tecplot360ex/tecplot360ex-linux64.eb | 6 ++---- easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb | 4 ++-- easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb | 4 ++-- .../u/UFL/UFL-1.0.0-goolf-1.4.10-Python-2.7.3.eb | 6 +++--- .../u/UFL/UFL-1.0.0-ictce-5.3.0-Python-2.7.3.eb | 7 +++---- .../u/util-linux/util-linux-2.26.1-goolf-1.4.10.eb | 2 +- .../easyconfigs/u/util-linux/util-linux-2.28-foss-2016a.eb | 2 +- .../easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb | 4 ++-- .../v/VampirTrace/VampirTrace-5.14.4-goolf-1.5.14.eb | 2 +- 21 files changed, 30 insertions(+), 48 deletions(-) diff --git a/easybuild/easyconfigs/t/Text-CSV/Text-CSV-1.33-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/t/Text-CSV/Text-CSV-1.33-foss-2016a-Perl-5.22.1.eb index ea1cf33d00..3b019db7fc 100644 --- a/easybuild/easyconfigs/t/Text-CSV/Text-CSV-1.33-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/t/Text-CSV/Text-CSV-1.33-foss-2016a-Perl-5.22.1.eb @@ -2,7 +2,7 @@ easyblock = 'PerlModule' name = 'Text-CSV' version = '1.33' -versionsuffix = '-Perl-%(perlver)s' +versionsuffix = '-Perl-%(perlver)s' homepage = 'https://metacpan.org/pod/Text::CSV' description = """Text-CSV parser""" diff --git a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-2.7.11.eb index 84985c3bcb..c127bf9261 100644 --- a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-2.7.11.eb @@ -18,11 +18,11 @@ dependencies = [('Python', '2.7.11')] builddependencies = [('nose-parameterized', '0.5.0', versionsuffix)] # The tests take very long to finish (they are installed too) -#runtest = 'nosetests theano' +# runtest = 'nosetests theano' sanity_check_paths = { 'files': ['bin/theano-cache', 'bin/theano-nose', 'bin/theano-test'], 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -moduleclass = 'math' \ No newline at end of file +moduleclass = 'math' diff --git a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-3.5.1.eb index d7e9b83bcb..bb0c6b10ff 100644 --- a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-foss-2016a-Python-3.5.1.eb @@ -18,7 +18,7 @@ dependencies = [('Python', '3.5.1')] builddependencies = [('nose-parameterized', '0.5.0', versionsuffix)] # The tests take very long to finish (they are installed too) -#runtest = 'nosetests theano' +# runtest = 'nosetests theano' sanity_check_paths = { 'files': ['bin/theano-cache', 'bin/theano-nose', 'bin/theano-test'], diff --git a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-intel-2016b-Python-3.5.2.eb index fdea58014e..ce6dc2f205 100644 --- a/easybuild/easyconfigs/t/Theano/Theano-0.8.2-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/t/Theano/Theano-0.8.2-intel-2016b-Python-3.5.2.eb @@ -18,7 +18,7 @@ dependencies = [('Python', '3.5.2')] builddependencies = [('nose-parameterized', '0.5.0', versionsuffix)] # The tests take very long to finish (they are installed too) -#runtest = 'nosetests theano' +# runtest = 'nosetests theano' sanity_check_paths = { 'files': ['bin/theano-cache', 'bin/theano-nose', 'bin/theano-test'], diff --git a/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-0-linux-x86-64.eb b/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-0-linux-x86-64.eb index 132fdbeeb9..edea937fc8 100644 --- a/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-0-linux-x86-64.eb +++ b/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-0-linux-x86-64.eb @@ -30,8 +30,6 @@ sources = [ '%(namelower)s.%(version)s-doc.tar', ] -# licensepath -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "roguewave", "license.lic") +license_file = HOME + '/licenses/roguewave/license.lic' moduleclass = 'debugger' diff --git a/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-2-linux-x86-64.eb b/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-2-linux-x86-64.eb index c3d83422cb..7af5c3b6cd 100644 --- a/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-2-linux-x86-64.eb +++ b/easybuild/easyconfigs/t/TotalView/TotalView-8.11.0-2-linux-x86-64.eb @@ -30,8 +30,6 @@ sources = [ '%(namelower)s.%(version)s-doc.tar', ] -# licensepath -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "roguewave", "license.lic") +license_file = HOME + '/licenses/roguewave/license.lic' moduleclass = 'debugger' diff --git a/easybuild/easyconfigs/t/TotalView/TotalView-8.12.0-0-linux-x86-64.eb b/easybuild/easyconfigs/t/TotalView/TotalView-8.12.0-0-linux-x86-64.eb index 6144d45261..69f8803b05 100644 --- a/easybuild/easyconfigs/t/TotalView/TotalView-8.12.0-0-linux-x86-64.eb +++ b/easybuild/easyconfigs/t/TotalView/TotalView-8.12.0-0-linux-x86-64.eb @@ -30,8 +30,6 @@ sources = [ '%(namelower)s.%(version)s-doc.tar', ] -# licensepath -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "roguewave", "license.lic") +license_file = HOME + '/licenses/roguewave/license.lic' moduleclass = 'debugger' diff --git a/easybuild/easyconfigs/t/Trinity/Trinity-2012-10-05-goolf-1.4.10.eb b/easybuild/easyconfigs/t/Trinity/Trinity-2012-10-05-goolf-1.4.10.eb index e966db8b0a..dcb9ea5cad 100644 --- a/easybuild/easyconfigs/t/Trinity/Trinity-2012-10-05-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/t/Trinity/Trinity-2012-10-05-goolf-1.4.10.eb @@ -34,7 +34,6 @@ bwapluginver = "0.5.7" RSEMmod = True # required for GCC v4.7, see http://forums.bannister.org/ubbthreads.php?ubb=showflat&Number=79791&page=2 -import os -os.putenv('CPPONLYFLAGS', '-Wno-narrowing') +prebuildopts = "export CPPONLYFLAGS='-Wno-narrowing' && " moduleclass = 'bio' diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb b/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb index a157686a4a..276beb485d 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb @@ -19,8 +19,6 @@ patches = ['tbb-4.0_productsdb.patch'] dontcreateinstalldir = 'True' -# license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb b/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb index 150aaf30f9..88a0f19397 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb @@ -19,8 +19,6 @@ patches = ['tbb-4.0_productsdb.patch'] dontcreateinstalldir = 'True' -# license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb b/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb index 27609d139f..bf885c9389 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb @@ -17,8 +17,6 @@ sources = ['l_%(name)s_%(version)s.tgz'] dontcreateinstalldir = 'True' -# license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb b/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb index a09fc45270..c5d8deaf1f 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb @@ -17,8 +17,6 @@ sources = ['l_%(name)s_%(version)s.tgz'] dontcreateinstalldir = 'True' -# license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tecplot360ex/tecplot360ex-linux64.eb b/easybuild/easyconfigs/t/tecplot360ex/tecplot360ex-linux64.eb index 40607b6960..da50b02fdf 100644 --- a/easybuild/easyconfigs/t/tecplot360ex/tecplot360ex-linux64.eb +++ b/easybuild/easyconfigs/t/tecplot360ex/tecplot360ex-linux64.eb @@ -4,10 +4,8 @@ name = 'tecplot360ex' version = 'linux64' homepage = 'http://www.tecplot.com/products/tecplot-360/' -description = """ - Quickly plot and animate your CFD results exactly the way you want. Analyze complex solutions, arrange multiple layouts, - and communicate your results with professional images and animations. -""" +description = """Quickly plot and animate your CFD results exactly the way you want. Analyze complex solutions, +arrange multiple layouts, and communicate your results with professional images and animations.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb index b34529fe92..8b0f6b51a8 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb @@ -4,8 +4,8 @@ name = 'tmux' version = '1.9a' homepage = 'http://tmux.sourceforge.net/' -description = """tmux is a terminal multiplexer. It lets you switch easily -between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.""" +description = """tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, +detach them (they keep running in the background) and reattach them to a different terminal.""" toolchain = {'name': 'GCC', 'version': '4.9.2'} toolchainopts = {'optarch': True} diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb b/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb index a8b6500ba3..391b43238f 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb @@ -4,8 +4,8 @@ name = 'tmux' version = '2.2' homepage = 'http://tmux.sourceforge.net/' -description = """tmux is a terminal multiplexer. It lets you switch easily -between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.""" +description = """tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, +detach them (they keep running in the background) and reattach them to a different terminal.""" toolchain = {'name': 'GCCcore', 'version': '4.9.3'} toolchainopts = {'optarch': True} diff --git a/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goolf-1.4.10-Python-2.7.3.eb index 44bbfb4a06..5ef4a81e2d 100644 --- a/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goolf-1.4.10-Python-2.7.3.eb @@ -4,9 +4,9 @@ name = 'UFL' version = '1.0.0' homepage = 'https://launchpad.net/ufl' -description = """The Unified Form Language (UFL) is a domain specific language for declaration of finite element discretizations -of variational forms. More precisely, it defines a flexible interface for choosing finite element spaces and defining expressions -for weak forms in a notation close to mathematical notation.""" +description = """The Unified Form Language (UFL) is a domain specific language for declaration of finite element +discretizations of variational forms. More precisely, it defines a flexible interface for choosing finite element +spaces and defining expressions for weak forms in a notation close to mathematical notation.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/u/UFL/UFL-1.0.0-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-ictce-5.3.0-Python-2.7.3.eb index 30a212235a..325975ad7c 100644 --- a/easybuild/easyconfigs/u/UFL/UFL-1.0.0-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-ictce-5.3.0-Python-2.7.3.eb @@ -4,10 +4,9 @@ name = 'UFL' version = '1.0.0' homepage = 'https://launchpad.net/ufl' -description = """The Unified Form Language (UFL) is a domain specific language for declaration of finite element discretizations - of variational forms. More precisely, it defines a flexible interface for choosing finite element spaces and defining expressions - for weak forms in a notation close to mathematical notation.""" - +description = """The Unified Form Language (UFL) is a domain specific language for declaration of finite element +discretizations of variational forms. More precisely, it defines a flexible interface for choosing finite element +spaces and defining expressions for weak forms in a notation close to mathematical notation.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/u/util-linux/util-linux-2.26.1-goolf-1.4.10.eb b/easybuild/easyconfigs/u/util-linux/util-linux-2.26.1-goolf-1.4.10.eb index dec0e334ca..395c68df0e 100644 --- a/easybuild/easyconfigs/u/util-linux/util-linux-2.26.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/u/util-linux/util-linux-2.26.1-goolf-1.4.10.eb @@ -26,7 +26,7 @@ configopts += "--without-python " dependencies = [('ncurses', '5.9')] sanity_check_paths = { - 'files': ['lib/lib%s.a' % x for x in ['blkid' , 'mount', 'uuid']], + 'files': ['lib/lib%s.a' % x for x in ['blkid', 'mount', 'uuid']], 'dirs': ['include', 'bin', 'share', 'sbin'], } diff --git a/easybuild/easyconfigs/u/util-linux/util-linux-2.28-foss-2016a.eb b/easybuild/easyconfigs/u/util-linux/util-linux-2.28-foss-2016a.eb index 2ed80e7b90..8c21c443e7 100644 --- a/easybuild/easyconfigs/u/util-linux/util-linux-2.28-foss-2016a.eb +++ b/easybuild/easyconfigs/u/util-linux/util-linux-2.28-foss-2016a.eb @@ -30,4 +30,4 @@ sanity_check_paths = { 'dirs': ['include', 'bin', 'share', 'sbin'], } -moduleclass = 'tools' \ No newline at end of file +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb b/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb index 39c544296b..1582b5a179 100644 --- a/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb +++ b/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb @@ -19,8 +19,8 @@ binaries = [ ] sanity_check_paths = { - 'files': ['bin/%s' % x for x in binaries] - + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'files': ['bin/%s' % x for x in binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], 'dirs': [] } diff --git a/easybuild/easyconfigs/v/VampirTrace/VampirTrace-5.14.4-goolf-1.5.14.eb b/easybuild/easyconfigs/v/VampirTrace/VampirTrace-5.14.4-goolf-1.5.14.eb index 722868d4b7..8c1fc2104f 100644 --- a/easybuild/easyconfigs/v/VampirTrace/VampirTrace-5.14.4-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/v/VampirTrace/VampirTrace-5.14.4-goolf-1.5.14.eb @@ -27,7 +27,7 @@ dependencies = [ ('PDT', '3.19'), ] -configopts = 'MPIFC="$MPIF90"' +configopts = 'MPIFC="$MPIF90"' # MPI suite should always be specified -- MUCH quicker and SAVER than autodetect # note: these options are toolchain specific! -- GitLab From 9397c5b845e06ba5397c05c220fd00a03785c139 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 3 Dec 2016 12:21:42 +0100 Subject: [PATCH 0106/1311] fix long lines in Tcl description --- easybuild/easyconfigs/t/Tcl/Tcl-8.3.5-ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-foss-2014b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-intel-2014b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.15-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.5.16-ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-intel-2014b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.8.4.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.9.2.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015.05.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-gompi-1.5.16.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.14.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.16.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.7.20.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-intel-2015a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2015.11.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2016.03.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GCC-4.9.3-2.25.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GNU-4.9.3-2.25.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2016a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-gimkl-2.11.5.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.7.20.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-ictce-7.3.5.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016.02-GCC-4.9.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.07.eb | 3 ++- .../t/Tcl/Tcl-8.6.4-iomkl-2016.09-GCC-4.9.3-2.25.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-4.9.3-2.25.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-5.4.0-2.26.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016.04.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016a.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-intel-2016b.eb | 3 ++- easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-4.9.3.eb | 3 ++- 48 files changed, 96 insertions(+), 48 deletions(-) diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.3.5-ictce-5.5.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.3.5-ictce-5.5.0.eb index c8585dbd41..2fb940fc61 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.3.5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.3.5-ictce-5.5.0.eb @@ -5,7 +5,8 @@ version = '8.3.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-foss-2014b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-foss-2014b.eb index 32fe48b93c..79ab065024 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-foss-2014b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-foss-2014b.eb @@ -5,7 +5,8 @@ version = '8.5.12' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, - suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2014b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-goolf-1.4.10.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-goolf-1.4.10.eb index 7c9d9e8066..dbd46e992a 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-goolf-1.4.10.eb @@ -5,7 +5,8 @@ version = '8.5.12' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.3.0.eb index 19f101522b..7c87bd01fd 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.3.0.eb @@ -5,7 +5,8 @@ version = '8.5.12' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, - suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.5.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.5.0.eb index 35f9095bc8..a2241ff65f 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-ictce-5.5.0.eb @@ -5,7 +5,8 @@ version = '8.5.12' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, - suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-intel-2014b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-intel-2014b.eb index ca1465be0b..e7614a7834 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-intel-2014b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.12-intel-2014b.eb @@ -5,7 +5,8 @@ version = '8.5.12' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, - suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2014b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-goolf-1.4.10.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-goolf-1.4.10.eb index 3e317dec24..f339e9e06f 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-goolf-1.4.10.eb @@ -5,7 +5,8 @@ version = '8.5.14' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-ictce-5.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-ictce-5.3.0.eb index 5e237ee834..8e3c92be6b 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.14-ictce-5.3.0.eb @@ -5,7 +5,8 @@ version = '8.5.14' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.15-ictce-5.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.15-ictce-5.3.0.eb index 78a978f384..820b74eea5 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.15-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.15-ictce-5.3.0.eb @@ -5,7 +5,8 @@ version = '8.5.15' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.16-ictce-5.5.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.16-ictce-5.5.0.eb index f46eebeee8..a62da8c0a0 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.16-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.16-ictce-5.5.0.eb @@ -5,7 +5,8 @@ version = '8.5.16' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-goolf-1.4.10.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-goolf-1.4.10.eb index 39ddf4b3a8..a560004738 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-goolf-1.4.10.eb @@ -5,7 +5,8 @@ version = '8.6.1' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-ictce-5.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-ictce-5.3.0.eb index 1392ae5cc8..60d6ac83f4 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.1-ictce-5.3.0.eb @@ -5,7 +5,8 @@ version = '8.6.1' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-ictce-5.5.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-ictce-5.5.0.eb index 8c3980c54e..db36da55f6 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-ictce-5.5.0.eb @@ -5,7 +5,8 @@ version = '8.6.2' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-intel-2014b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-intel-2014b.eb index 7a5ef170a5..60cb2b1b94 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-intel-2014b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.2-intel-2014b.eb @@ -5,7 +5,8 @@ version = '8.6.2' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2014b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.8.4.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.8.4.eb index d3061eabd1..9b4e305153 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.8.4.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.8.4.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCC', 'version': '4.8.4'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.9.2.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.9.2.eb index b3a8beb767..c4d2010766 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-GCC-4.9.2.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCC', 'version': '4.9.2'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015.05.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015.05.eb index bd202e0e1b..bf1d499974 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015.05.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015.05.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2015.05'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015a.eb index 45613c8d4e..16e045859c 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015a.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015b.eb index ec3f168cb0..46e9e125bb 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-foss-2015b.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2015b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-gompi-1.5.16.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-gompi-1.5.16.eb index 5aa437f573..ee5b42935f 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-gompi-1.5.16.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-gompi-1.5.16.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'gompi', 'version': '1.5.16'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.14.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.14.eb index f169881758..1238368e89 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.14.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.16.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.16.eb index a8f55caa25..dee69d837b 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.5.16.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.5.16'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.7.20.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.7.20.eb index 41060701af..c19a00ca57 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-goolf-1.7.20.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-intel-2015a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-intel-2015a.eb index 945189208b..ab41f83d76 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-intel-2015a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.3-intel-2015a.eb @@ -5,7 +5,8 @@ version = '8.6.3' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2015.11.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2015.11.eb index 0a0ed38e56..37cac05971 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2015.11.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2016.03.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2016.03.eb index b72c2fc21c..8211069c61 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-CrayGNU-2016.03.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'CrayGNU', 'version': '2016.03'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GCC-4.9.3-2.25.eb index e7800ee700..1a1dd7dcd5 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GCC-4.9.3-2.25.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GNU-4.9.3-2.25.eb index b0ebdff41b..5046ee4992 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-GNU-4.9.3-2.25.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015a.eb index d1a6b6efb2..40a19f82a3 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015a.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2015a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015b.eb index ba9826c847..d067d918e3 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2015b.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2015b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2016a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2016a.eb index 3884765bf6..c3671ebebf 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2016a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-foss-2016a.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-gimkl-2.11.5.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-gimkl-2.11.5.eb index 154b3e9e27..6e056f40fd 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-gimkl-2.11.5.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'gimkl', 'version': '2.11.5'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.4.10.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.4.10.eb index fe02a2bc48..be5009eda9 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.4.10.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.7.20.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.7.20.eb index e2124cc24d..ff3e6c8167 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-goolf-1.7.20.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-ictce-7.3.5.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-ictce-7.3.5.eb index ab1bbc53d3..df8dfb36e7 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-ictce-7.3.5.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-ictce-7.3.5.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'ictce', 'version': '7.3.5'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015a.eb index b2673863fd..c5eceb0d1f 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015a.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015b.eb index ae2268790f..869c8a60db 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2015b.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2015b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016.02-GCC-4.9.eb index c2af97cc03..11676da053 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016.02-GCC-4.9.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2016.02-GCC-4.9'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016a.eb index 20cd9eb96c..1851e0e592 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-intel-2016a.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2016a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.07.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.07.eb index 598c79f35a..e35e81b24e 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.07.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'iomkl', 'version': '2016.07'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.09-GCC-4.9.3-2.25.eb index b0142c9365..88e6740d05 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.4-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -5,7 +5,8 @@ version = '8.6.4' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'iomkl', 'version': '2016.09-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-4.9.3-2.25.eb index bb197b61b9..3f4c4832f3 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-4.9.3-2.25.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-5.4.0-2.26.eb index cee27f6687..0c3128d657 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCC-5.4.0-2.26.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016.04.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016.04.eb index c3516cdb44..3de0513341 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016.04.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016.04.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2016.04'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016a.eb index 1dc1677c34..f15e62a824 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016a.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016b.eb index d91801e33e..ee88524e1e 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-foss-2016b.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'foss', 'version': '2016b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-intel-2016b.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-intel-2016b.eb index 4691e322fe..b9bb3175fa 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-intel-2016b.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-intel-2016b.eb @@ -5,7 +5,8 @@ version = '8.6.5' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'intel', 'version': '2016b'} diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-4.9.3.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-4.9.3.eb index 35b772ac6f..d71a52e8c4 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-4.9.3.eb @@ -5,7 +5,8 @@ version = '8.6.6' homepage = 'http://www.tcl.tk/' description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, -suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more.""" +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" toolchain = {'name': 'GCCcore', 'version': '4.9.3'} -- GitLab From b8ee716dc0d884323f701717661358af7480a845 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 5 Dec 2016 08:56:02 +0100 Subject: [PATCH 0107/1311] remove unnecessary comment line --- .../easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb index e3739900df..ae04827ae1 100644 --- a/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb @@ -45,6 +45,5 @@ sanity_check_paths = { } modextravars = {'USPEXPATH': '%(installdir)s/src'} -#modextrapaths = {'PATH': ''} moduleclass = 'phys' -- GitLab From f8673e454e84710333eb8dfa0f6151aaae6b9c3d Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 5 Dec 2016 16:48:41 +0100 Subject: [PATCH 0108/1311] Intel version of hdf5 1.10.0-patch1 --- .../h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb new file mode 100644 index 0000000000..fa799d10e5 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.10.0-patch1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' -- GitLab From 97ac3b7c01ea971c6b4c19ec59a58cdb304cd482 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 5 Dec 2016 18:12:40 +0100 Subject: [PATCH 0109/1311] h5py based on hdf5 1.8.17 for loss 2016b --- ....0-foss-2016b-Python-2.7.12-HDF5-1.8.17.eb | 34 +++++++++++++++++++ ...kgconfig-1.1.0-foss-2016b-Python-2.7.12.eb | 26 ++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.17.eb create mode 100644 easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.17.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.17.eb new file mode 100644 index 0000000000..42eeacfdf5 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.17.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.8.17' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..6e76927dc1 --- /dev/null +++ b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'pkgconfig' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://github.com/matze/pkgconfig' +description = """pkgconfig is a Python module to interface with the pkg-config command line tool""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('pkg-config', '0.29.1'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' -- GitLab From 8ca45507f2ddba5caf9395eff67d27b5d54d89b3 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 5 Dec 2016 18:13:50 +0100 Subject: [PATCH 0110/1311] Update to download location for pkg-config --- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb index 7e76d64603..28a56f25ff 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'foss', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['http://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb index eeb50eabb1..43b8d6cf24 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['http://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb index 57705ced4a..9f34b705ae 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['http://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True -- GitLab From 598a05e543691f0af53fef007639c9a2a690499e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 6 Dec 2016 11:40:30 +0100 Subject: [PATCH 0111/1311] adding easyconfigs: UCLUST-1.2.22q-i86linux64.eb, USEARCH-5.2.236-6.1.544-i86linux32.eb --- .../u/UCLUST/UCLUST-1.2.22q-i86linux64.eb | 22 +++++++++++ .../USEARCH-5.2.236-6.1.544-i86linux32.eb | 37 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/u/UCLUST/UCLUST-1.2.22q-i86linux64.eb create mode 100644 easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb diff --git a/easybuild/easyconfigs/u/UCLUST/UCLUST-1.2.22q-i86linux64.eb b/easybuild/easyconfigs/u/UCLUST/UCLUST-1.2.22q-i86linux64.eb new file mode 100644 index 0000000000..9defd28727 --- /dev/null +++ b/easybuild/easyconfigs/u/UCLUST/UCLUST-1.2.22q-i86linux64.eb @@ -0,0 +1,22 @@ +easyblock = 'Binary' + +name = 'UCLUST' +version = '1.2.22q' +versionsuffix = '-i86linux64' + +homepage = 'http://www.drive5.com/usearch/index.html' +description = """UCLUST: Extreme high-speed sequence clustering, alignment and database search.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# licensed for use with PyNAST and QIIME, see http://www.drive5.com/uclust/downloads1_2_22q.html +source_urls = ['http://www.drive5.com/uclust/'] +uclust_bin = 'uclust%s%s_%s' % (version[-1], version[:-1], versionsuffix[1:]) +sources = [uclust_bin] + +install_cmd = "mkdir -p %%(installdir)s/bin && mv %s %%(installdir)s/bin/%%(namelower)s" % uclust_bin + +sanity_check_paths = { + 'files': ['bin/%(namelower)s'], + 'dirs': [], +} diff --git a/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb new file mode 100644 index 0000000000..52e9495873 --- /dev/null +++ b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb @@ -0,0 +1,37 @@ +easyblock = 'Binary' + +name = 'USEARCH' +ver1 = '5.2.236' +ver2 = '6.1.544' +version = '%s-%s' % (ver1, ver2) +versionsuffix = '-i86linux32' + +homepage = 'http://www.drive5.com/usearch/index.html' +description = """USEARCH is a unique sequence analysis tool which offers search and clustering algorithms that are + often orders of magnitude faster than BLAST.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download via http://www.drive5.com/usearch/download.html +usearch5_bin = 'usearch%s_%s' % (ver1, versionsuffix[1:]) +usearch6_bin = 'usearch%s_%s' % (ver2, versionsuffix[1:]) +sources = [ + usearch5_bin, + usearch6_bin, +] + +install_cmd = "mkdir -p %(installdir)s/bin && " +install_cmd += "cp %s %%(installdir)s/bin/%%(namelower)s && " % usearch5_bin +install_cmd += "cp %s %%(installdir)s/bin/%%(namelower)s61 && " % usearch6_bin +install_cmd += "chmod a+rx %(installdir)s/bin/*" + +modloadmsg = """USEARCH (32-bit) is licensed software but + can be used for free by individuals when registered. A 64-bit version is + also available. For more information see http://www.drive5.com/usearch .""" + +sanity_check_paths = { + 'files': ['bin/%(namelower)s', 'bin/%(namelower)s61'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From e8c2cfeaee01fc2b0cd694ca1e8c2143425fa118 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 6 Dec 2016 11:41:47 +0100 Subject: [PATCH 0112/1311] adding easyconfigs: PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb, PyCogent-1.9-intel-2016b-Python-2.7.12.eb --- .../PyCogent-1.9-intel-2016b-Python-2.7.12.eb | 28 ++++++++++++++++++ .../PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb | 29 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyCogent/PyCogent-1.9-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PyCogent/PyCogent-1.9-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.9-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bcf748bc38 --- /dev/null +++ b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.9-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'PyCogent' +version = '1.9' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pycogent/pycogent/' +description = """PyCogent includes connectors to remote databases, built-in generalized probabilistic techniques +for working with biological sequences, and controllers for 3rd party applications.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/pycogent/pycogent/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), +] + +options = {'modulename': 'cogent'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..6aa228c803 --- /dev/null +++ b/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'PyNAST' +version = '1.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/qiime/pynast/' +description = """Python Nearest Alignment Space Termination tool""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/biocore/pynast/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyCogent', '1.9', versionsuffix), + ('UCLUST', '1.2.22q', '-i86linux64', True), +] + +options = {'modulename': 'pynast'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'bio' -- GitLab From 110d9866f5500d7564286bce1fe950b74bc89076 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 6 Dec 2016 11:49:24 +0100 Subject: [PATCH 0113/1311] stick to PyCogent 1.5.3, required for QIIME 1.9.1 --- ...yCogent-1.5.3-intel-2016b-Python-2.7.12.eb | 28 +++++++++++++++++++ .../PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..af2c1864ad --- /dev/null +++ b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'PyCogent' +version = '1.5.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pycogent/pycogent/' +description = """PyCogent includes connectors to remote databases, built-in generalized probabilistic techniques +for working with biological sequences, and controllers for 3rd party applications.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/pycogent/pycogent/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), +] + +options = {'modulename': 'cogent'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb index 6aa228c803..874abcf752 100644 --- a/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyNAST/PyNAST-1.2.2-intel-2016b-Python-2.7.12.eb @@ -15,7 +15,7 @@ sources = ['%(version)s.tar.gz'] dependencies = [ ('Python', '2.7.12'), - ('PyCogent', '1.9', versionsuffix), + ('PyCogent', '1.5.3', versionsuffix), ('UCLUST', '1.2.22q', '-i86linux64', True), ] -- GitLab From 79a156ca3fcd55761e832f3303a5260e55670e8d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 6 Dec 2016 11:57:51 +0100 Subject: [PATCH 0114/1311] fix sources spec for PyCogent 1.5.3 --- .../p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb index af2c1864ad..a1f5a8ace4 100644 --- a/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyCogent/PyCogent-1.5.3-intel-2016b-Python-2.7.12.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} source_urls = ['https://github.com/pycogent/pycogent/archive/'] -sources = ['%(version)s.tar.gz'] +sources = ['%(version)s-release.tar.gz'] dependencies = [ ('Python', '2.7.12'), -- GitLab From 6d71522c3810359e77112a774b633488e3b18887 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 6 Dec 2016 13:01:35 +0100 Subject: [PATCH 0115/1311] Included HDF5 v1.8.18, supporting Intel 2017.01 and h5py for foss/2016b --- .../HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb | 27 +++++++++++++++ .../h/HDF5/HDF5-1.8.18-foss-2016b.eb | 22 ++++++++++++ .../h/HDF5/HDF5-1.8.18-intel-2016b.eb | 27 +++++++++++++++ .../h/HDF5/HDF5-1.8.18-intel-2017.01.eb | 27 +++++++++++++++ ...-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb | 34 +++++++++++++++++++ ....0-foss-2016b-Python-2.7.12-HDF5-1.8.18.eb | 34 +++++++++++++++++++ .../s/Szip/Szip-2.1-intel-2017.01.eb | 23 +++++++++++++ 7 files changed, 194 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017.01.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb new file mode 100644 index 0000000000..6ce67710b4 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb @@ -0,0 +1,27 @@ +name = 'HDF5' +version = '1.10.0-patch1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017.01'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] + +#patches = [ +# 'HDF5-1.8.15_configure_intel.patch', +# 'configure_libtool.patch', +#] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb new file mode 100644 index 0000000000..4acd8f2563 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.8.18' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb new file mode 100644 index 0000000000..fa6b36683e --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb @@ -0,0 +1,27 @@ +name = 'HDF5' +version = '1.8.18' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +#patches = [ +# 'HDF5-1.8.15_configure_intel.patch', +# 'configure_libtool.patch', +#] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb new file mode 100644 index 0000000000..03df97290d --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb @@ -0,0 +1,27 @@ +name = 'HDF5' +version = '1.8.18' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017.01'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +#patches = [ +# 'HDF5-1.8.15_configure_intel.patch', +# 'configure_libtool.patch', +#] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb new file mode 100644 index 0000000000..4c5a2d0115 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.10.0-patch1' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.18.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.18.eb new file mode 100644 index 0000000000..433ac80652 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-2.7.12-HDF5-1.8.18.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017.01.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017.01.eb new file mode 100644 index 0000000000..73468933aa --- /dev/null +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017.01.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'Szip' +version = '2.1' + +homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' +description = "Szip compression software, providing lossless compression of scientific data" + +toolchain = {'name': 'intel', 'version': '2017.01'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +sanity_check_paths = { + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From b2c62bb7f0ce6614680215d6d898603a143b81d0 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 6 Dec 2016 14:18:35 +0100 Subject: [PATCH 0116/1311] added zlib for intel 2017.01 This seems what the travis error message: AssertionError: [('zlib', '1.2.8'), ('Szip', '2.1')] != [('zlib', '1.2.8', '', ('GCCcore', '5.4.0')), ('Szip', '2.1')] wants. --- .../z/zlib/zlib-1.2.8-intel-2017.01.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.8-intel-2017.01.eb diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-intel-2017.01.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-intel-2017.01.eb new file mode 100644 index 0000000000..a722d48768 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-intel-2017.01.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.8' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'intel', 'version': '2017.01'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 49000e8ea7e201e5ce5361366adb10507f8a9a1a Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 6 Dec 2016 14:41:46 +0100 Subject: [PATCH 0117/1311] Clean up Clean up or so far commented patch lines. The patches, required in earlier HDF5 versions, made the build fail. --- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb | 5 ----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb | 5 ----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb | 5 ----- 3 files changed, 15 deletions(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb index 6ce67710b4..d088c774df 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb @@ -12,11 +12,6 @@ source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%( sources = [SOURCELOWER_TAR_GZ] checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] -#patches = [ -# 'HDF5-1.8.15_configure_intel.patch', -# 'configure_libtool.patch', -#] - buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb index fa6b36683e..287bffebb8 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb @@ -12,11 +12,6 @@ source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] -#patches = [ -# 'HDF5-1.8.15_configure_intel.patch', -# 'configure_libtool.patch', -#] - buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb index 03df97290d..acb75da6fd 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb @@ -12,11 +12,6 @@ source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] -#patches = [ -# 'HDF5-1.8.15_configure_intel.patch', -# 'configure_libtool.patch', -#] - buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' dependencies = [ -- GitLab From ba044d87d1eb10521b928cb2a703103bab732411 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 6 Dec 2016 15:10:14 +0100 Subject: [PATCH 0118/1311] {cae}[intel/2016b] MATSim 0.8.1 w Java-1.8.0_112 (REVIEW) --- .../MATSim-intel-2016b-Java-1.8.0_112.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb new file mode 100644 index 0000000000..ed4cdd1a5e --- /dev/null +++ b/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb @@ -0,0 +1,31 @@ +easyblock = 'PackedBinary' + +name = 'MATSim' +version = '0.8.1' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://www.matsim.org/' +description = """MATSim is an open-source framework to implement large-scale agent-based transport simulations.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/matsim-org/matsim/releases/download/%(namelower)s-%(version)s/'] +sources = ['%(namelower)s-%(version)s.zip'] + +dependencies = [ + ('Java', '1.8.0_112', '', True), + ('X11', '20160819'), +] + +sanity_check_paths = { + 'files': ['%(namelower)s-%(version)s.jar'], + 'dirs': ['libs'], +} + +modextrapaths = {'CLASSPATH': '%(namelower)s-%(version)s.jar'} + +modloadmsg = """To execute MATSim GUI: java -jar \\${EBROOTMATSIM}/%(namelower)s-%(version)s.jar +To execute MATSim in batch mode: java org.matsim.run.Controller +You might have to adjust the requested memory""" + +moduleclass = 'cae' -- GitLab From 08a687674f4399a8cf23ebce8eff0c943f1220af Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 6 Dec 2016 15:13:18 +0100 Subject: [PATCH 0119/1311] Fixed CLASSPATH --- .../easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb index ed4cdd1a5e..35b0a5d11b 100644 --- a/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb @@ -22,7 +22,7 @@ sanity_check_paths = { 'dirs': ['libs'], } -modextrapaths = {'CLASSPATH': '%(namelower)s-%(version)s.jar'} +modextrapaths = {'CLASSPATH': 'libs/*'} modloadmsg = """To execute MATSim GUI: java -jar \\${EBROOTMATSIM}/%(namelower)s-%(version)s.jar To execute MATSim in batch mode: java org.matsim.run.Controller -- GitLab From 5842418c106410d22853d334ab80b2e27e489c09 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 6 Dec 2016 16:17:24 +0100 Subject: [PATCH 0120/1311] {phys}[intel/2016b] RASPA2 2.0.3 w/Python-2.7.12 (REVIEW) --- .../RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..6c6251f79c --- /dev/null +++ b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'RASPA2' +version = '2.0.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/numat/RASPA2' +description = """A general purpose classical simulation package that can be used for the simulation of + molecules in gases, fluids, zeolites, aluminosilicates, + metal-organic frameworks, carbon nanotubes and external fields.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/source/r/RASPA2/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': ['bin/raspa-dir', 'bin/simulate'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s-linux-x86_64.egg'] +} + +options = {'modulename': 'RASPA2'} + +moduleclass = 'phys' -- GitLab From c6826fcd3be9202374bbd8affa9374540048a959 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 7 Dec 2016 11:01:47 +0100 Subject: [PATCH 0121/1311] adding easyconfigs: BamUtil-1.0.13-intel-2016b.eb, BamUtil-1.0.13-foss-2015b.eb --- .../b/BamUtil/BamUtil-1.0.13-foss-2015b.eb | 3 ++ .../b/BamUtil/BamUtil-1.0.13-intel-2016b.eb | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-foss-2015b.eb b/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-foss-2015b.eb index 66b054cceb..bbca7a748e 100644 --- a/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-foss-2015b.eb +++ b/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-foss-2015b.eb @@ -21,6 +21,9 @@ toolchain = {'name': 'foss', 'version': '2015b'} sources = ['%(name)sLibStatGen.%(version)s.tgz'] source_urls = ['http://genome.sph.umich.edu/w/images/7/70/'] +# make sure right compilers are used by passing them as options to 'make' (default is to use gcc/g++) +buildopts = 'CC="$CC" CXX="$CXX"' + files_to_copy = ["bamUtil/bin", "libStatGen"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-intel-2016b.eb b/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-intel-2016b.eb new file mode 100644 index 0000000000..ceadf51bc5 --- /dev/null +++ b/easybuild/easyconfigs/b/BamUtil/BamUtil-1.0.13-intel-2016b.eb @@ -0,0 +1,35 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Author: Adam Huffman +# adam.huffman@crick.ac.uk +# The Francis Crick Institute +# +# This is the version with the bundled libStatGen library + +name = 'BamUtil' +version = '1.0.13' + +easyblock = 'MakeCp' + +homepage = 'http://genome.sph.umich.edu/wiki/BamUtil' +description = """BamUtil is a repository that contains several programs + that perform operations on SAM/BAM files. All of these programs + are built into a single executable, bam.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(name)sLibStatGen.%(version)s.tgz'] +source_urls = ['http://genome.sph.umich.edu/w/images/7/70/'] + +# make sure right compilers are used by passing them as options to 'make' (default is to use gcc/g++) +# USER_WARNINGS needs to be emptied to avoid use of -Werror which leads to compiler errors with Intel compilers +buildopts = 'CC="$CC" CXX="$CXX" USER_WARNINGS=""' + +files_to_copy = ['bamUtil/bin', 'libStatGen'] + +sanity_check_paths = { + 'files': ['bin/bam'], + 'dirs': ['libStatGen'], +} + +moduleclass = 'bio' -- GitLab From 689029571bb0a77e110c33399f0cc5132b1d394a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 7 Dec 2016 14:31:38 +0100 Subject: [PATCH 0122/1311] {lib}[intel/2016b] numpy 1.9.2, scipy 0.16.0 w/ Python 2.7.12 --- .../numpy-1.9.2-intel-2016b-Python-2.7.12.eb | 25 ++++++ .../scipy-0.16.0-intel-2016b-Python-2.7.12.eb | 26 +++++++ .../scipy-0.16.0_fix-failing-tests-mkl.patch | 76 +++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/scipy/scipy-0.16.0_fix-failing-tests-mkl.patch diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bfa473034f --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +name = 'numpy' +version = '1.9.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.numpy.org' +description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: + a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran + code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, + NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be + defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['numpy-1.8.0-mkl.patch'] + +dependencies = [ + ('Python', '2.7.12'), +] + +use_pip = True + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1e66e9e276 --- /dev/null +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,26 @@ +name = 'scipy' +version = '0.16.0' +versionsuffix = '-Python-2.7.12' + +homepage = 'http://www.scipy.org' +description = """SciPy is a collection of mathematical algorithms and convenience + functions built on the Numpy extension for Python.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [('http://sourceforge.net/projects/scipy/files/scipy/%(version)s', 'download')] +sources = [SOURCE_TAR_GZ] + +patches = ['scipy-%(version)s_fix-failing-tests-mkl.patch'] + +dependencies = [ + ('numpy', '1.9.2', versionsuffix), +] + +# recompile patch Cython source file +prebuildopts = "cython scipy/linalg/_decomp_update.pyx && " + +use_pip = True + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0_fix-failing-tests-mkl.patch b/easybuild/easyconfigs/s/scipy/scipy-0.16.0_fix-failing-tests-mkl.patch new file mode 100644 index 0000000000..9284ae921c --- /dev/null +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0_fix-failing-tests-mkl.patch @@ -0,0 +1,76 @@ +backported fix from https://github.com/scipy/scipy/pull/6135, +requires recompiling scipy/linalg/_decomp_update.pyx using 'cython scipy/linalg/_decomp_update.pyx' +see also https://github.com/scipy/scipy/issues/6132 +author: Kenneth Hoste (HPC-UGent) +--- scipy/linalg/_decomp_update.pyx.in.orig 2015-06-26 08:28:59.000000000 +0200 ++++ scipy/linalg/_decomp_update.pyx.in 2016-12-07 09:44:34.757075909 +0100 +@@ -47,7 +47,6 @@ + cimport libc.float + from libc.math cimport sqrt, fabs, hypot + from libc.string cimport memset +-cimport libc.stdio + + cimport numpy as cnp + +@@ -715,9 +714,15 @@ + # First zero the lower part of the new columns using a qr. + + # query the workspace, ++ # set tau to point at something to keep new MKL working. ++ tau = &c + info = geqrf(m-n+p, p, index2(r, rs, n-p, k), m, tau, &c, -1) ++ if info < 0: ++ return libc.stdlib.abs(info) + info = ormqr(side, trans, m, m-(n-p), p, index2(r, rs, n-p, k), m, + tau, index2(q, qs, 0, n-p), m, &s, -1) ++ if info < 0: ++ return info + + # we're only doing one allocation, so use the larger + lwork = to_lwork(c, s) +@@ -887,6 +892,8 @@ + # query the workspace + # below p_subdiag_qr will need workspace of size m, which is the + # minimum, ormqr will also require. ++ # set tau to point at something, to keep new MKL working. ++ tau = &c + info = geqrf(m-n, p, index2(u, us, n, 0), m, tau, &c, -1) + if info < 0: + return libc.stdlib.abs(info) +--- scipy/linalg/tests/test_decomp_update.py.orig 2016-12-07 09:40:24.369816052 +0100 ++++ scipy/linalg/tests/test_decomp_update.py 2016-12-07 09:46:41.725683380 +0100 +@@ -876,7 +876,7 @@ + check_qr(q1, r1, a1, self.rtol, self.atol, False) + + def test_Mx1_economic_p_col(self): +- a, q, r, u = self.generate('Mx1', 'full', 'col', 3) ++ a, q, r, u = self.generate('Mx1', 'economic', 'col', 3) + for col in range(r.shape[1]): + q1, r1 = qr_insert(q, r, u, col, 'col', overwrite_qru=False) + a1 = np.insert(a, col*np.ones(3, np.intp), u, 1) +--- ./scipy/linalg/_decomp_update.pyx.orig 2016-12-07 10:32:54.264284722 +0100 ++++ ./scipy/linalg/_decomp_update.pyx 2016-12-07 10:34:47.153042590 +0100 +@@ -759,9 +759,15 @@ + # First zero the lower part of the new columns using a qr. + + # query the workspace, ++ # set tau to point at something to keep new MKL working. ++ tau = &c + info = geqrf(m-n+p, p, index2(r, rs, n-p, k), m, tau, &c, -1) ++ if info < 0: ++ return libc.stdlib.abs(info) + info = ormqr(side, trans, m, m-(n-p), p, index2(r, rs, n-p, k), m, + tau, index2(q, qs, 0, n-p), m, &s, -1) ++ if info < 0: ++ return info + + # we're only doing one allocation, so use the larger + lwork = to_lwork(c, s) +@@ -931,6 +937,7 @@ + # query the workspace + # below p_subdiag_qr will need workspace of size m, which is the + # minimum, ormqr will also require. ++ tau = &c + info = geqrf(m-n, p, index2(u, us, n, 0), m, tau, &c, -1) + if info < 0: + return libc.stdlib.abs(info) -- GitLab From 98bab5b680508ff1f7c1e3213b77e786c516727f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 7 Dec 2016 15:39:20 +0100 Subject: [PATCH 0123/1311] fix source_urls in pkg-config easyconfigs --- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-goolf-1.4.10.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.3.0.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.5.0.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb | 2 +- easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.8.2.eb | 2 +- easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.9.2.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.28-GNU-4.9.3-2.25.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.28-ictce-5.5.0.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.28-intel-2015a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29-foss-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29-gimkl-2.11.5.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015b.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29-intel-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-4.9.3.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb index 73c06e7f1b..d7052c1c1b 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-foss-2015b.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'foss', 'version': '2015b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-goolf-1.4.10.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-goolf-1.4.10.eb index 0b6b8bc927..79931f690c 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-goolf-1.4.10.eb @@ -12,7 +12,7 @@ for instance, rather than hard-coding values on where to find glib (or other lib toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.3.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.3.0.eb index 206bdee244..61f51a7288 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.3.0.eb @@ -13,7 +13,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.5.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.5.0.eb index fee25e4441..2b11660583 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-ictce-5.5.0.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'ictce', 'version': '5.5.0'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015a.eb index ddfabeac31..d3711e40bd 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015a.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'intel', 'version': '2015a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb index f271d1a673..853d2fd1aa 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.27.1-intel-2015b.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'intel', 'version': '2015b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.8.2.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.8.2.eb index b4996e7af3..8373b491c4 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.8.2.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.8.2.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'GCC', 'version': '4.8.2'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.9.2.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.9.2.eb index 68447b95f4..db1a5eb0a1 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GCC-4.9.2.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'GCC', 'version': '4.9.2'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GNU-4.9.3-2.25.eb index a3cc058e1f..acc7f7d1bf 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-GNU-4.9.3-2.25.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-ictce-5.5.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-ictce-5.5.0.eb index 7c85168da3..bbe881a34b 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-ictce-5.5.0.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'ictce', 'version': '5.5.0'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-intel-2015a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-intel-2015a.eb index f5981f1368..2bcff32be7 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-intel-2015a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.28-intel-2015a.eb @@ -15,7 +15,7 @@ tar_config_opts = True toolchain = {'name': 'intel', 'version': '2015a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] configopts = " --with-internal-glib" diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-foss-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-foss-2016a.eb index 2796515752..d4b7b3f1dd 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-foss-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-foss-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-gimkl-2.11.5.eb index c593a8d395..e9844ad8e6 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-gimkl-2.11.5.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'gimkl', 'version': '2.11.5'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015a.eb index 55e66932e2..de19601429 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2015a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015b.eb index 245547ce08..4ffff0c4e5 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2015b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2015b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2016a.eb index cc9d6a1ec7..4b47af4546 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29-intel-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-4.9.3.eb index 08db3ee5e8..3fb349d523 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-4.9.3.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'GCCcore', 'version': '4.9.3'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] builddependencies = [('binutils', '2.25')] diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016a.eb index bb2fea6cae..a8da4a98c8 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb index 7e76d64603..2449f8de68 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'foss', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb index eeb50eabb1..647242172e 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb index 57705ced4a..0ae50de1d1 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkgconfig.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True -- GitLab From 1c8de3e354f53a3cba480d9ef9441d98f68f859c Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 7 Dec 2016 15:40:46 +0100 Subject: [PATCH 0124/1311] adding easyconfigs: Subread-1.5.0-p1-foss-2016b.eb --- .../s/Subread/Subread-1.5.0-p1-foss-2016b.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/s/Subread/Subread-1.5.0-p1-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/Subread/Subread-1.5.0-p1-foss-2016b.eb b/easybuild/easyconfigs/s/Subread/Subread-1.5.0-p1-foss-2016b.eb new file mode 100644 index 0000000000..ecdac2f7d2 --- /dev/null +++ b/easybuild/easyconfigs/s/Subread/Subread-1.5.0-p1-foss-2016b.eb @@ -0,0 +1,27 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Adam Huffman +# The Francis Crick Institute +easyblock = 'MakeCp' + +name = 'Subread' +version = '1.5.0-p1' + +homepage = 'http://subread.sourceforge.net/' +description = """High performance read alignment, quantification and mutation discovery""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['%(namelower)s-%(version)s-source.tar.gz'] +source_urls = [('https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s-%(version)s', 'download')] + +start_dir = 'src' +buildopts = '-f Makefile.Linux' + +files_to_copy = ['bin', 'annotation', 'doc', 'LICENSE', 'README.txt', 'src', 'test'] + +sanity_check_paths = { + 'files': ['LICENSE', 'README.txt'], + 'dirs': ['bin', 'annotation', 'doc', 'src', 'test'] +} + +moduleclass = 'bio' -- GitLab From e410022c0d93d46e5c20ed1f51d03aa898c67e45 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 7 Dec 2016 15:41:59 +0100 Subject: [PATCH 0125/1311] adding easyconfigs: PLINK-1.07-foss-2016b.eb --- .../p/PLINK/PLINK-1.07-foss-2016b.eb | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/p/PLINK/PLINK-1.07-foss-2016b.eb diff --git a/easybuild/easyconfigs/p/PLINK/PLINK-1.07-foss-2016b.eb b/easybuild/easyconfigs/p/PLINK/PLINK-1.07-foss-2016b.eb new file mode 100644 index 0000000000..8d5a6d2eb6 --- /dev/null +++ b/easybuild/easyconfigs/p/PLINK/PLINK-1.07-foss-2016b.eb @@ -0,0 +1,51 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# Author: Adam Huffman +# The Francis Crick Institute + +easyblock = 'MakeCp' + +name = 'PLINK' +version = '1.07' + +homepage = 'http://pngu.mgh.harvard.edu/~purcell/plink/' +description = """ PLINK is a free, open-source whole genome association analysis toolset, + designed to perform a range of basic, large-scale analyses in a computationally efficient manner. + The focus of PLINK is purely on analysis of genotype/phenotype data, so there is no support for + steps prior to this (e.g. study design and planning, generating genotype or CNV calls from raw data). + Through integration with gPLINK and Haploview, there is some support for the subsequent visualization, + annotation and storage of results. """ + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'openmp': True} + +sources = ['%(namelower)s-%(version)s-src.zip'] +source_urls = ['http://pngu.mgh.harvard.edu/~purcell/plink/dist/'] + +patches = ['PLINK-1.07_redeclaration.patch'] + +dependencies = [('zlib', '1.2.8')] + +# plink makefile is a little bit tricky so we pass every options as arguments +# review plink original makefile for details +# if you want "new version check" change to WITH_WEBCHECK="1", but if your compute nodes +# have no internet access better leave it as is +buildopts = ' CXX_UNIX="$CXX $CXXFLAGS" WITH_R_PLUGINS=1 WITH_WEBCHECK="" WITH_ZLIB=1 ' +buildopts += ' WITH_LAPACK=1 FORCE_DYNAMIC=1 LIB_LAPACK=$EBROOTOPENBLAS/lib/libopenblas.%s' % SHLIB_EXT + +files_to_copy = [ + (["plink", "gPLINK.jar"], 'bin'), + "test.map", + "test.ped", + "COPYING.txt", + "README.txt", +] + +sanity_check_paths = { + 'files': ["bin/plink", "bin/gPLINK.jar", "test.map", "test.ped", "COPYING.txt", "README.txt"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 2d02d3251119dc202d8b3b6c357ef7bb620c7f9d Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Wed, 7 Dec 2016 15:51:38 +0100 Subject: [PATCH 0126/1311] Use of variable in download location for HDF5 1.10.0-patch1 --- easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb | 2 +- easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb | 2 +- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb index 019c7bfd91..55975c97d5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb @@ -8,7 +8,7 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb index fa799d10e5..8eddf5504b 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb @@ -8,7 +8,7 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb index d088c774df..5cf3a3e7f5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb @@ -8,7 +8,7 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'intel', 'version': '2017.01'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] -- GitLab From 8e0a53de4ada9b0531e72e6490d7c344bde25791 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Wed, 7 Dec 2016 16:16:35 +0100 Subject: [PATCH 0127/1311] Requested change to URL in HDF5 1.8.18 --- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb | 6 +++++- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb | 6 +++++- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb index 4acd8f2563..e6c0e7eab7 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb @@ -8,7 +8,11 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb index 287bffebb8..d1efd2d906 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb @@ -8,7 +8,11 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb index acb75da6fd..2b7452c39b 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb @@ -8,7 +8,11 @@ description = """HDF5 is a unique technology suite that makes possible the manag toolchain = {'name': 'intel', 'version': '2017.01'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['https://support.hdfgroup.org/ftp/HDF5/current18/src/'] +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] -- GitLab From 3d5f95b1f94c619d000ff6c0ae9e6337b9b880a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 7 Dec 2016 16:35:09 +0100 Subject: [PATCH 0128/1311] easyconfig for psmc 0.6.5 with foss/2016a --- .../p/psmc/psmc-0.6.5-foss-2016a.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb diff --git a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb new file mode 100644 index 0000000000..7fd8dd02df --- /dev/null +++ b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb @@ -0,0 +1,34 @@ +easyblock = 'MakeCp' + +name = 'psmc' +version = '0.6.5' + +homepage = 'https://github.com/lh3/psmc' +description = """This software package infers population size history from a diploid sequence +using the Pairwise Sequentially Markovian Coalescent (PSMC) model.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['https://github.com/lh3/psmc/archive/'] +sources = ['%(version)s.tar.gz'] + +buildopts = ' && cd utils && make' + +utils = [ + 'avg.pl', 'calD', 'cntcpg', 'ctime_plot.pl', 'dec2ctime.pl', 'decode2bed.pl', 'fq2psmcfa', 'history2ms.pl', + 'ms2psmcfa.pl', 'mutDiff', 'pcnt_bezier.lua', 'psmc2history.pl', 'psmc_plot.pl', 'psmc_trunc.pl', 'splitfa', +] + +files_to_copy = [ + (['psmc'], 'bin'), + (['utils/%s' % util for util in utils], 'bin') +] + +sanity_check_paths = { + 'files': ['bin/psmc'] + ['bin/%s' % util for util in utils], + 'dirs': [], +# 'dirs': ['doc'], +} + +moduleclass = 'bio' + -- GitLab From d085efbf8653449483b42d23c67f618e2b15badc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 7 Dec 2016 16:38:11 +0100 Subject: [PATCH 0129/1311] Removed an obsolete line --- easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb index 7fd8dd02df..59854681b1 100644 --- a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb +++ b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/lh3/psmc/archive/'] sources = ['%(version)s.tar.gz'] -buildopts = ' && cd utils && make' +buildopts = '&& cd utils && make' utils = [ 'avg.pl', 'calD', 'cntcpg', 'ctime_plot.pl', 'dec2ctime.pl', 'decode2bed.pl', 'fq2psmcfa', 'history2ms.pl', @@ -27,7 +27,6 @@ files_to_copy = [ sanity_check_paths = { 'files': ['bin/psmc'] + ['bin/%s' % util for util in utils], 'dirs': [], -# 'dirs': ['doc'], } moduleclass = 'bio' -- GitLab From ed49ba795229f6c963ee84e4c2701b09ada5a237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 7 Dec 2016 16:39:21 +0100 Subject: [PATCH 0130/1311] remove empty line --- easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb index 59854681b1..59517cb978 100644 --- a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb +++ b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb @@ -30,4 +30,3 @@ sanity_check_paths = { } moduleclass = 'bio' - -- GitLab From c4e8db1627f21bf1df1463adca4ca4a0ab5011d4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 7 Dec 2016 16:40:29 +0100 Subject: [PATCH 0131/1311] avoid that pip uninstalls numpy/scipy in 'parent' Python installation, add clarifying comments --- .../n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb | 6 ++++++ .../s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb index bfa473034f..836e3e51b2 100644 --- a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb @@ -20,6 +20,12 @@ dependencies = [ ('Python', '2.7.12'), ] +# need to use pip rather than regular 'setup.py install,' +# to ensure that this numpy wins over the one in the Python installation; +# using easy_install does not work... use_pip = True +# tell pip NOT to uninstall other installed numpy versions +installopts = '--ignore-installed' + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb index 1e66e9e276..f09bde2522 100644 --- a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb @@ -21,6 +21,12 @@ dependencies = [ # recompile patch Cython source file prebuildopts = "cython scipy/linalg/_decomp_update.pyx && " +# need to use pip rather than regular 'setup.py install,' +# to ensure that this numpy wins over the one in the Python installation; +# using easy_install does not work... use_pip = True +# tell pip NOT to uninstall other installed numpy versions +installopts = '--ignore-installed' + moduleclass = 'math' -- GitLab From 6125a767d9ccbab23b42d18df42c4985080bf61e Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Thu, 8 Dec 2016 09:42:53 +0100 Subject: [PATCH 0132/1311] sanity_check_paths removed egg directory from path --- .../r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb index 6c6251f79c..6de866b39f 100644 --- a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb @@ -20,7 +20,7 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/raspa-dir', 'bin/simulate'], - 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s-linux-x86_64.egg'] + 'dirs': ['lib/python%(pyshortver)s/site-packages'] } options = {'modulename': 'RASPA2'} -- GitLab From 57a5004d12bcc6173f4fd5a5cb63daae494203da Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Thu, 8 Dec 2016 10:03:13 +0100 Subject: [PATCH 0133/1311] Change for https URL in pkg-config eb-files --- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb | 2 +- .../easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb index 28a56f25ff..2449f8de68 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'foss', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkg-config.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb index 43b8d6cf24..647242172e 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016a.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkg-config.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb index 9f34b705ae..0ae50de1d1 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2016b.eb @@ -12,7 +12,7 @@ description = """pkg-config is a helper tool used when compiling applications an toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://pkg-config.freedesktop.org/releases/'] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] # don't use PAX, it might break. tar_config_opts = True -- GitLab From 00cf07abedb20566a882404015fef5f841427f6f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Dec 2016 10:49:39 +0100 Subject: [PATCH 0134/1311] remove --ignore-installed install option, already done in PythonPackage easyblock with https://github.com/hpcugent/easybuild-easyblocks/pull/1066 --- .../n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb | 3 --- .../s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb | 3 --- 2 files changed, 6 deletions(-) diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb index 836e3e51b2..142e68dd00 100644 --- a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb @@ -25,7 +25,4 @@ dependencies = [ # using easy_install does not work... use_pip = True -# tell pip NOT to uninstall other installed numpy versions -installopts = '--ignore-installed' - moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb index f09bde2522..a3befefce0 100644 --- a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb @@ -26,7 +26,4 @@ prebuildopts = "cython scipy/linalg/_decomp_update.pyx && " # using easy_install does not work... use_pip = True -# tell pip NOT to uninstall other installed numpy versions -installopts = '--ignore-installed' - moduleclass = 'math' -- GitLab From b8d23bb1b65ebd0e86fda12e0afa1fd80b864a97 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Thu, 8 Dec 2016 12:15:51 +0100 Subject: [PATCH 0135/1311] Fileset for recent CMake versions in GCCcore compilers CMake in the GCCcore will support all foss, intel and pomkl toolchains using that GCCcore. --- .../c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb | 36 ++++++++++++++++++ .../c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb | 36 ++++++++++++++++++ .../c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb | 35 +++++++++++++++++ .../n/ncurses/ncurses-6.0-GCCcore-5.4.0.eb | 38 +++++++++++++++++++ .../n/ncurses/ncurses-6.0-GCCcore-6.2.0.eb | 38 +++++++++++++++++++ 5 files changed, 183 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb create mode 100644 easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.2.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..aa63de70da --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.6.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +builddependencies = [ + ('binutils', '2.26'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..5b3221d0bf --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.1' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +builddependencies = [ + ('binutils', '2.26'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb new file mode 100644 index 0000000000..b364332ea0 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.1' +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.2.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..afda72a745 --- /dev/null +++ b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-5.4.0.eb @@ -0,0 +1,38 @@ +easyblock = 'ConfigureMake' + +name = 'ncurses' +version = '6.0' + +homepage = 'http://www.gnu.org/software/ncurses/' +description = """The Ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, + and more. It uses Terminfo format, supports pads and color and multiple highlights and forms characters and + function-key mapping, and has all the other SYSV-curses enhancements over BSD Curses.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['ncurses-%(version)s_gcc-5.patch'] + +builddependencies = [('binutils', '2.26')] + +configopts = [ + # default build + '--with-shared --enable-overwrite', + # the UTF-8 enabled version (ncursesw) + '--with-shared --enable-overwrite --enable-ext-colors --enable-widec --includedir=%(installdir)s/include/ncursesw/' +] + +libs = ["form", "menu", "ncurses", "panel"] +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["captoinfo", "clear", "infocmp", "infotocap", "ncurses%(version_major)s-config", + "reset", "tabs", "tic", "toe", "tput", "tset"]] + + ['lib/lib%s%s.a' % (x, y) for x in libs for y in ['', '_g', 'w', 'w_g']] + + ['lib/lib%s%s.%s' % (x, y, SHLIB_EXT) for x in libs for y in ['', 'w']] + + ['lib/libncurses++%s.a' % x for x in ['', 'w']], + 'dirs': ['include', 'include/ncursesw'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.2.0.eb b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.2.0.eb new file mode 100644 index 0000000000..a573fe0099 --- /dev/null +++ b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.2.0.eb @@ -0,0 +1,38 @@ +easyblock = 'ConfigureMake' + +name = 'ncurses' +version = '6.0' + +homepage = 'http://www.gnu.org/software/ncurses/' +description = """The Ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, + and more. It uses Terminfo format, supports pads and color and multiple highlights and forms characters and + function-key mapping, and has all the other SYSV-curses enhancements over BSD Curses.""" + +toolchain = {'name': 'GCCcore', 'version': '6.2.0'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['ncurses-%(version)s_gcc-5.patch'] + +builddependencies = [('binutils', '2.27')] + +configopts = [ + # default build + '--with-shared --enable-overwrite', + # the UTF-8 enabled version (ncursesw) + '--with-shared --enable-overwrite --enable-ext-colors --enable-widec --includedir=%(installdir)s/include/ncursesw/' +] + +libs = ["form", "menu", "ncurses", "panel"] +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["captoinfo", "clear", "infocmp", "infotocap", "ncurses%(version_major)s-config", + "reset", "tabs", "tic", "toe", "tput", "tset"]] + + ['lib/lib%s%s.a' % (x, y) for x in libs for y in ['', '_g', 'w', 'w_g']] + + ['lib/lib%s%s.%s' % (x, y, SHLIB_EXT) for x in libs for y in ['', 'w']] + + ['lib/libncurses++%s.a' % x for x in ['', 'w']], + 'dirs': ['include', 'include/ncursesw'], +} + +moduleclass = 'devel' -- GitLab From 5098a192fe7869b6546a951195f48404017a4be5 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 8 Dec 2016 13:12:36 +0100 Subject: [PATCH 0136/1311] adding easyconfigs: zsh-5.2-foss-2016b.eb --- .../easyconfigs/z/zsh/zsh-5.2-foss-2016b.eb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 easybuild/easyconfigs/z/zsh/zsh-5.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/z/zsh/zsh-5.2-foss-2016b.eb b/easybuild/easyconfigs/z/zsh/zsh-5.2-foss-2016b.eb new file mode 100644 index 0000000000..635c04bd74 --- /dev/null +++ b/easybuild/easyconfigs/z/zsh/zsh-5.2-foss-2016b.eb @@ -0,0 +1,18 @@ +easyblock = 'ConfigureMake' + +name = 'zsh' +version = '5.2' + +homepage = 'http://www.zsh.org/' +description = "Zsh is a shell designed for interactive use, although it is also a powerful scripting language." + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +dependencies = [ + ('ncurses', '6.0'), +] + +moduleclass = 'tools' -- GitLab From 5f113b8ff7018248713f091d28930cea40cc0d2d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Dec 2016 15:11:14 +0100 Subject: [PATCH 0137/1311] adding easyconfigs: travis-1.8.4-Ruby-2.3.3.eb, Ruby-2.3.3.eb --- easybuild/easyconfigs/r/Ruby/Ruby-2.3.3.eb | 64 +++++++++++++++++++ .../t/travis/travis-1.8.4-Ruby-2.3.3.eb | 24 +++++++ 2 files changed, 88 insertions(+) create mode 100644 easybuild/easyconfigs/r/Ruby/Ruby-2.3.3.eb create mode 100644 easybuild/easyconfigs/t/travis/travis-1.8.4-Ruby-2.3.3.eb diff --git a/easybuild/easyconfigs/r/Ruby/Ruby-2.3.3.eb b/easybuild/easyconfigs/r/Ruby/Ruby-2.3.3.eb new file mode 100644 index 0000000000..6c9287f577 --- /dev/null +++ b/easybuild/easyconfigs/r/Ruby/Ruby-2.3.3.eb @@ -0,0 +1,64 @@ +# With <3 for EasyBuild +# +# EasyConfig for Ruby 2.1: +# ---------------------------------------------------------------------------- +# Copyright: 2014 - Gregor Mendel Institute of Molecular Plant Biology GmBH +# License: MIT +# Authors: Aaron Zauner +# ---------------------------------------------------------------------------- + +name = 'Ruby' +version = '2.3.3' + +homepage = 'https://www.ruby-lang.org' +description = """Ruby is a dynamic, open source programming language with + a focus on simplicity and productivity. It has an elegant syntax that is + natural to read and easy to write.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://cache.ruby-lang.org/pub/ruby/'] + +ext_options = { + 'source_urls': ['http://rubygems.org/downloads/'], + 'source_tmpl': '%(name)s-%(version)s.gem', +} + +exts_list = [ + ('ffi', '1.9.14', ext_options), + ('childprocess', '0.5.9', ext_options), + ('json', '2.0.2', ext_options), + ('cabin', '0.9.0', ext_options), + ('backports', '3.6.8', ext_options), + ('arr-pm', '0.0.10', ext_options), + ('clamp', '1.1.1', ext_options), + ('multipart-post', '2.0.0', ext_options), + ('faraday', '0.10.0', ext_options), + ('faraday_middleware', '0.10.1', ext_options), + ('highline', '1.7.8', ext_options), + ('net-http-pipeline', '1.0.1', ext_options), + ('net-http-persistent', '2.9.4', ext_options), + ('multi_json', '1.12.1', ext_options), + ('public_suffix', '2.0.4', ext_options), + ('addressable', '2.4.0', ext_options), + ('gh', '0.15.0', ext_options), + ('launchy', '2.4.3', ext_options), + ('ethon', '0.10.1', ext_options), + ('typhoeus', '0.6.9', ext_options), + ('websocket', '1.2.3', ext_options), + ('pusher-client', '0.6.2', ext_options), + ('diff-lcs', '1.2.5', ext_options), + ('rspec-support', '3.5.0', ext_options), + ('rspec-mocks', '3.5.0', ext_options), + ('rspec-expectations', '3.5.0', ext_options), + ('rspec-core', '3.5.4', ext_options), + ('rspec', '3.5.0', ext_options), + ('rack', '1.6.5', ext_options), + ('rack-protection', '1.5.3', ext_options), + ('tilt', '2.0.5', ext_options), + ('sinatra', '1.4.7', ext_options), + ('rack-test', '0.6.3', ext_options), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/travis/travis-1.8.4-Ruby-2.3.3.eb b/easybuild/easyconfigs/t/travis/travis-1.8.4-Ruby-2.3.3.eb new file mode 100644 index 0000000000..6327f1f42e --- /dev/null +++ b/easybuild/easyconfigs/t/travis/travis-1.8.4-Ruby-2.3.3.eb @@ -0,0 +1,24 @@ +easyblock = 'RubyGem' + +name = 'travis' +version = '1.8.4' + +rubyver = '2.3.3' +versionsuffix = '-Ruby-%s' % rubyver + +homepage = 'https://github.com/travis-ci/travis.rb' +description = """Travis CI Client (CLI and Ruby library)""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = ['http://rubygems.org/downloads/'] +sources = ['%(namelower)s-%(version)s.gem'] + +dependencies = [('Ruby', rubyver)] + +sanity_check_paths = { + 'files': ['bin/travis'], + 'dirs': ['gems/travis-%(version)s/lib/travis'], +} + +moduleclass = 'tools' -- GitLab From 11e61f2f216434ede60f097e984924a9e700ab1c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Dec 2016 20:21:07 +0100 Subject: [PATCH 0138/1311] install numpy/scipy as .egg to ensure shadowing of numpy/scipy in parent Python installation --- .../n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb | 4 ++++ .../s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb index 142e68dd00..b0f7a1aaf1 100644 --- a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb @@ -25,4 +25,8 @@ dependencies = [ # using easy_install does not work... use_pip = True +# install as zipped egg to get a .pth file in lib/python*/site-packages; +# this enables shadowing of the numpy that is part of the Python installation +zipped_egg = True + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb index a3befefce0..a6ab83c9a7 100644 --- a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb @@ -22,8 +22,12 @@ dependencies = [ prebuildopts = "cython scipy/linalg/_decomp_update.pyx && " # need to use pip rather than regular 'setup.py install,' -# to ensure that this numpy wins over the one in the Python installation; +# to ensure that this scipy wins over the one in the Python installation; # using easy_install does not work... use_pip = True +# install as zipped egg to get a .pth file in lib/python*/site-packages; +# this enables shadowing of the scipy that is part of the Python installation +zipped_egg = True + moduleclass = 'math' -- GitLab From 83b557f47201c2559c955ca8c6f38f2c9b9992d6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Fri, 9 Dec 2016 00:43:05 +0100 Subject: [PATCH 0139/1311] adding easyconfigs: RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb --- ...-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb diff --git a/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb new file mode 100644 index 0000000000..440179c3bc --- /dev/null +++ b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb @@ -0,0 +1,41 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Adam Huffman +# The Francis Crick Institute + +easyblock = 'PythonPackage' + +name = 'RSeQC' +version = '2.6.4' +versionsuffix = '-Python-%(pyver)s-R-%(rver)s' +basepyversionsuffix = '-Python-%(pyver)s' + +homepage = 'http://rseqc.sourceforge.net/' +description = """RSeQC provides a number of useful modules that can + comprehensively evaluate high throughput sequence data especially RNA-seq + data. Some basic modules quickly inspect sequence quality, nucleotide + composition bias, PCR bias and GC bias, while RNA-seq specific modules + evaluate sequencing saturation, mapped reads distribution, coverage + uniformity, strand specificity, transcript level RNA integrity etc.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = [SOURCEFORGE_SOURCE] + +dependencies = [ + ('R', '3.3.1'), + ('numpy', '1.11.0', basepyversionsuffix), + ('Python', '2.7.12'), + ('Pysam', '0.9.0', basepyversionsuffix), +] + +runtest = "python setup.py test" + +sanity_check_paths = { + 'files': ['bin/bam_stat.py', 'bin/overlay_bigwig.py', 'bin/split_paired_bam.py'], + 'dirs': ["bin", "lib"] +} + +options = {'modulename': 'qcmodule'} + +moduleclass = 'bio' -- GitLab From e3a74ecd829b31d1f600a06788ac8cee59058c73 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 9 Dec 2016 14:09:32 +0100 Subject: [PATCH 0140/1311] Make version string match name of easyconfig file. Simplify sources definition. --- .../a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb index 334e0f3893..6c9afb465d 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb @@ -1,5 +1,5 @@ name = 'Allinea' -version = '6.1.1' +version = '6.1.1-Ubuntu-14.04-x86_64' homepage = 'http://www.allinea.com' description = """The Allinea environment is an essential toolkit for developers and computational scientists @@ -8,7 +8,7 @@ looking to get results faster.""" toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://content.allinea.com/downloads/'] -sources = ['%(namelower)s-forge-latest-Ubuntu-14.04-x86_64.tar'] +sources = ['%(namelower)s-forge-%(version)s.tar'] # Example of templates usage #templates = [ -- GitLab From 9622203731db678422581aedd0c4de785423eeca Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 9 Dec 2016 14:42:18 +0100 Subject: [PATCH 0141/1311] Don't use import in easyconfig files --- .../easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb index 6c9afb465d..787adf013e 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb @@ -20,7 +20,6 @@ sources = ['%(namelower)s-forge-%(version)s.tar'] #sysconfig = 'system.config.hpc2n' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "allinea", "license.lic") +license_file = HOME + 'licenses/allinea/license.lic' moduleclass = 'tools' -- GitLab From 0bf71e2a04cca3835f55c95daa733b351bc641b2 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 9 Dec 2016 15:10:50 +0100 Subject: [PATCH 0142/1311] Don't use import in easyconfig files, change older Allinea .eb files too. --- .../a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb | 3 +-- .../a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb index d4565683b6..759ccc88b1 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb @@ -11,7 +11,6 @@ source_urls = ['http://content.allinea.com/downloads/'] sources = ['%(namelower)s-tools-%(version)s.tar'] # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "allinea", "license.lic") +license_file = HOME + 'licenses/allinea/license.lic' moduleclass = 'tools' diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb index 90466a2643..129550a3ed 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb @@ -11,7 +11,6 @@ source_urls = ['http://content.allinea.com/downloads/'] sources = ['%(namelower)s-tools-%(version)s.tar'] # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "allinea", "license.lic") +license_file = HOME + 'licenses/allinea/license.lic' moduleclass = 'tools' -- GitLab From 7aa7c37249a948fc98f3be64e5e555ddcdb46865 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 9 Dec 2016 16:39:07 +0100 Subject: [PATCH 0143/1311] use available Mono easyblock, add build deps in Mono easyconfigs --- easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb | 3 +-- easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb index 045b7d03ec..4cf5bdb001 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'Mono' version = '4.6.2.7' @@ -13,6 +11,7 @@ source_urls = ['http://download.mono-project.com/sources/mono/'] sources = [SOURCELOWER_TAR_BZ2] builddependencies = [ + ('Autotools', '20150215'), ('Bison', '3.0.4'), ('gettext', '0.19.8'), ] diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb index 9518306110..33f94e3000 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'Mono' version = '4.6.2.7' @@ -12,6 +10,10 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://download.mono-project.com/sources/mono/'] sources = [SOURCELOWER_TAR_BZ2] -osdependencies = ['gettext'] +builddependencies = [ + ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8'), +] moduleclass = 'lang' -- GitLab From cad16c8fa11335b29a34d7308d908ca8f0130dae Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 9 Dec 2016 21:21:10 +0100 Subject: [PATCH 0144/1311] Fix typo, missing "/" --- .../a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb | 2 +- .../a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb | 2 +- .../easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb index 759ccc88b1..e3a2bc98c4 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-5.7-x86_64.eb @@ -11,6 +11,6 @@ source_urls = ['http://content.allinea.com/downloads/'] sources = ['%(namelower)s-tools-%(version)s.tar'] # license file -license_file = HOME + 'licenses/allinea/license.lic' +license_file = HOME + '/licenses/allinea/license.lic' moduleclass = 'tools' diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb index 129550a3ed..9b1ddba636 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-4.1-32834-Redhat-6.0-x86_64.eb @@ -11,6 +11,6 @@ source_urls = ['http://content.allinea.com/downloads/'] sources = ['%(namelower)s-tools-%(version)s.tar'] # license file -license_file = HOME + 'licenses/allinea/license.lic' +license_file = HOME + '/licenses/allinea/license.lic' moduleclass = 'tools' diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb index 787adf013e..9a71b607be 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb @@ -20,6 +20,6 @@ sources = ['%(namelower)s-forge-%(version)s.tar'] #sysconfig = 'system.config.hpc2n' # license file -license_file = HOME + 'licenses/allinea/license.lic' +license_file = HOME + '/licenses/allinea/license.lic' moduleclass = 'tools' -- GitLab From 0f273d608275133c17c5256f4e93f2289592b9f6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sat, 10 Dec 2016 15:50:20 +0100 Subject: [PATCH 0145/1311] Add missing deps --- .../numpy-1.11.1-foss-2016b-Python-2.7.12.eb | 25 ++++++++++ .../Pysam-0.9.0-foss-2016b-Python-2.7.12.eb | 50 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100755 easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..23d10a78e7 --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +name = 'numpy' +version = '1.11.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.numpy.org' +description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: + a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran + code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, + NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be + defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = [ + 'numpy-1.8.0-mkl.patch', +] + +dependencies = [ + ('Python', '2.7.12'), +] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..dc85128908 --- /dev/null +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,50 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Bundle' + +name = 'Pysam' +version = '0.9.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pysam-developers/pysam' +description = """Pysam is a python module for reading and manipulating Samfiles. + It's a lightweight wrapper of the samtools C-API. Pysam also includes an interface for tabix.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +parallel = 1 + +dependencies = [ + ('Python', '2.7.12'), + ('ncurses', '6.0'), + ('zlib', '1.2.8'), + ('cURL', '7.49.1'), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') + +exts_list = [ + ('Cython', '0.24.1', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython'], + }), + ('pysam', version, { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/pysam-developers/pysam/archive/'], + }), +] + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/pysam-%(version)s-py%(pyshortver)s-linux-x86_64.egg'], +} + +moduleclass = 'bio' -- GitLab From 80c17131993a6612b99f41dee2aa6ba92ede6847 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sat, 10 Dec 2016 16:01:09 +0100 Subject: [PATCH 0146/1311] adding easyconfigs: SWIG-3.0.10-foss-2016b-Python-2.7.12.eb --- .../SWIG-3.0.10-foss-2016b-Python-2.7.12.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-3.0.10-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.10-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.10-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1c14fe070d --- /dev/null +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.10-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,20 @@ +name = 'SWIG' +version = '3.0.10' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.swig.org/' +description = """SWIG is a software development tool that connects programs written in C and C++ with + a variety of high-level programming languages.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('PCRE', '8.39'), +] + +moduleclass = 'devel' -- GitLab From 7e31e62a63196b84837d7bb54e523833135706d6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sun, 11 Dec 2016 22:56:41 +0100 Subject: [PATCH 0147/1311] Remove unnecessary numpy, use variables better and update Pysam dep --- .../r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb index 440179c3bc..f122fed527 100644 --- a/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb +++ b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb @@ -6,8 +6,8 @@ easyblock = 'PythonPackage' name = 'RSeQC' version = '2.6.4' -versionsuffix = '-Python-%(pyver)s-R-%(rver)s' basepyversionsuffix = '-Python-%(pyver)s' +versionsuffix = basepyversionsuffix + '-R-%(rver)s' homepage = 'http://rseqc.sourceforge.net/' description = """RSeQC provides a number of useful modules that can @@ -24,9 +24,8 @@ source_urls = [SOURCEFORGE_SOURCE] dependencies = [ ('R', '3.3.1'), - ('numpy', '1.11.0', basepyversionsuffix), ('Python', '2.7.12'), - ('Pysam', '0.9.0', basepyversionsuffix), + ('Pysam', '0.9.1.4', basepyversionsuffix), ] runtest = "python setup.py test" -- GitLab From e56befdf202d187a71d93cc9b5561f9489022945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 12 Dec 2016 10:37:33 +0100 Subject: [PATCH 0148/1311] fix broken links to infernal the URL of infernals homepage and the download link changed, therefore fetching files fails --- easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb | 4 ++-- easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb | 4 ++-- .../easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb | 4 ++-- .../easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb index 33a8943618..f657c307da 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'Infernal' version = "1.1" -homepage = 'http://infernal.janelia.org/' +homepage = 'http://eddylab.org/infernal/' description = """Infernal ("INFERence of RNA ALignment") is for searching DNA sequence databases for RNA structure and sequence similarities.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['ftp://selab.janelia.org/pub/software/%(namelower)s'] +source_urls = ['http://eddylab.org/infernal/%(namelower)s'] sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb index 10d6e8c986..3dadbaea42 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'Infernal' version = "1.1" -homepage = 'http://infernal.janelia.org/' +homepage = 'http://eddylab.org/infernal/' description = """Infernal ("INFERence of RNA ALignment") is for searching DNA sequence databases for RNA structure and sequence similarities.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['ftp://selab.janelia.org/pub/software/%(namelower)s'] +source_urls = ['http://eddylab.org/infernal/%(namelower)s'] sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb index 9c4049ce58..fb8d8108e5 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'Infernal' version = '1.1rc1' -homepage = 'http://infernal.janelia.org/' +homepage = 'http://eddylab.org/infernal/' description = """Infernal ('INFERence of RNA ALignment') is for searching DNA sequence databases for RNA structure and sequence similarities.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['ftp://selab.janelia.org/pub/software/%s' % name.lower()] +source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb index ee33a329e8..ff6fb44d80 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'Infernal' version = '1.1rc1' -homepage = 'http://infernal.janelia.org/' +homepage = 'http://eddylab.org/infernal/' description = """Infernal ('INFERence of RNA ALignment') is for searching DNA sequence databases for RNA structure and sequence similarities.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['ftp://selab.janelia.org/pub/software/%s' % name.lower()] +source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', -- GitLab From b202dd91241cea2c36f09d12c3c10200addb298e Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 12 Dec 2016 16:02:07 +0100 Subject: [PATCH 0149/1311] openpgm got moved to the archive of google code --- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb index 4177d8d359..4e6e7ed78b 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb @@ -13,7 +13,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' -- GitLab From bc9f53890a07d5027ee105e241ec6701138f0ca0 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 12 Dec 2016 16:14:43 +0100 Subject: [PATCH 0150/1311] update to util-linux and zeromq for intel 2016b --- .../util-linux/util-linux-2.29-intel-2016b.eb | 33 +++++++++++++++++ .../z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb | 36 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 easybuild/easyconfigs/u/util-linux/util-linux-2.29-intel-2016b.eb create mode 100644 easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/u/util-linux/util-linux-2.29-intel-2016b.eb b/easybuild/easyconfigs/u/util-linux/util-linux-2.29-intel-2016b.eb new file mode 100644 index 0000000000..b5ac58a535 --- /dev/null +++ b/easybuild/easyconfigs/u/util-linux/util-linux-2.29-intel-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'util-linux' +version = '2.29' + +homepage = 'http://www.kernel.org/pub/linux/utils/util-linux' +description = """Set of Linux utilities""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['%s/v%%(version_major_minor)s' % homepage] +sources = [SOURCELOWER_TAR_GZ] + +# disable account related utilities (they need OS dependant pam-devel files) +# disable wall and friends (requires group changing permissions for install user) +# install systemd service files in install dir +# install bash completion files in install dir +configopts = "--disable-chfn-chsh --disable-login --disable-su " +configopts += "--disable-wall --disable-use-tty-group " +configopts += "--disable-makeinstall-chown --disable-makeinstall-setuid " +configopts += "--with-systemdsystemunitdir='${prefix}/systemd' " +configopts += "--with-bashcompletiondir='${prefix}/share/bash-completion/completions' " +# disable building Python bindings (since we don't include Python as a dep) +configopts += "--without-python " + +dependencies = [('ncurses', '6.0')] + +sanity_check_paths = { + 'files': ['lib/lib%s.a' % x for x in ['blkid', 'mount', 'uuid']], + 'dirs': ['include', 'bin', 'share', 'sbin'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb new file mode 100644 index 0000000000..2844a5ce90 --- /dev/null +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'ZeroMQ' +version = '4.2.0' + +homepage = 'http://www.zeromq.org/' +description = """ZeroMQ looks like an embeddable networking library but acts like a concurrency framework. + It gives you sockets that carry atomic messages across various transports like in-process, + inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fanout, + pub-sub, task distribution, and request-reply. It's fast enough to be the fabric for clustered + products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous + message-processing tasks. It has a score of language APIs and runs on most operating systems.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/zeromq/zeromq%(version_major)s-%(version_minor)s/releases/download/v%(version)s/'] +source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +# --with-pgm will use shipped OpenPGM (in foreign subdir) +configopts = '--with-pic --with-system-pgm ' +configopts += 'OpenPGM_CFLAGS="-I$EBROOTOPENPGM/include/pgm-${EBVERSIONOPENPGM%.*}" ' +configopts += 'OpenPGM_LIBS="-L$EBROOTOPENPGM/lib -lpgm -lrt -lpthread -lm" ' + +dependencies = [ + ('OpenPGM', '5.2.122'), + ('util-linux', '2.29'), + ('libsodium', '1.0.11'), +] + +sanity_check_paths = { + 'files': ['lib/libzmq.so', 'lib/libzmq.a'], + 'dirs': ['include', 'lib'], +} + +moduleclass = 'devel' -- GitLab From ac2168d5f29db96cbf5c269aa81043394871b0f4 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 13 Dec 2016 07:06:12 +0000 Subject: [PATCH 0151/1311] Remove unnecessary numpy and Pysam --- .../numpy-1.11.1-foss-2016b-Python-2.7.12.eb | 25 ---------- .../Pysam-0.9.0-foss-2016b-Python-2.7.12.eb | 50 ------------------- 2 files changed, 75 deletions(-) delete mode 100755 easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb delete mode 100755 easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb deleted file mode 100755 index 23d10a78e7..0000000000 --- a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb +++ /dev/null @@ -1,25 +0,0 @@ -name = 'numpy' -version = '1.11.1' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://www.numpy.org' -description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: - a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran - code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, - NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be - defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" - -toolchain = {'name': 'foss', 'version': '2016b'} - -source_urls = [SOURCEFORGE_SOURCE] -sources = [SOURCE_TAR_GZ] - -patches = [ - 'numpy-1.8.0-mkl.patch', -] - -dependencies = [ - ('Python', '2.7.12'), -] - -moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb deleted file mode 100755 index dc85128908..0000000000 --- a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-foss-2016b-Python-2.7.12.eb +++ /dev/null @@ -1,50 +0,0 @@ -# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild -# Author: Pablo Escobar Lopez -# sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics - -easyblock = 'Bundle' - -name = 'Pysam' -version = '0.9.0' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://github.com/pysam-developers/pysam' -description = """Pysam is a python module for reading and manipulating Samfiles. - It's a lightweight wrapper of the samtools C-API. Pysam also includes an interface for tabix.""" - -toolchain = {'name': 'foss', 'version': '2016b'} - -parallel = 1 - -dependencies = [ - ('Python', '2.7.12'), - ('ncurses', '6.0'), - ('zlib', '1.2.8'), - ('cURL', '7.49.1'), -] - -# this is a bundle of Python packages -exts_defaultclass = 'PythonPackage' -exts_filter = ("python -c 'import %(ext_name)s'", '') - -exts_list = [ - ('Cython', '0.24.1', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cython'], - }), - ('pysam', version, { - 'source_tmpl': 'v%(version)s.tar.gz', - 'source_urls': ['https://github.com/pysam-developers/pysam/archive/'], - }), -] - -modextrapaths = { - 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], -} - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages/pysam-%(version)s-py%(pyshortver)s-linux-x86_64.egg'], -} - -moduleclass = 'bio' -- GitLab From 401c65c8a5e5ce1eba934b6f3a4f22bb6f6c49e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 13 Dec 2016 09:57:01 +0100 Subject: [PATCH 0152/1311] update to 2.3.0 + foss2016a --- .../l/libharu/libharu-2.3.0-foss-2016a.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016a.eb diff --git a/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016a.eb b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016a.eb new file mode 100644 index 0000000000..f150abd20c --- /dev/null +++ b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016a.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA +# Authors:: George Tsouloupas , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +easyblock = 'CMakeMake' + +name = 'libharu' +version = '2.3.0' + +homepage = 'http://libharu.org/' +description = """libHaru is a free, cross platform, open source library for generating PDF files.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = [' https://github.com/libharu/libharu/archive/'] +sources = ['RELEASE_%s.tar.gz' % '_'.join(version.split('.'))] + +dependencies = [('libpng', '1.6.23')] + +builddependencies = [('CMake', '3.6.1')] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libhpdf.%s' % SHLIB_EXT], + 'dirs': ['if', 'include', 'lib'] +} + +moduleclass = 'lib' -- GitLab From 9a514b5ed2054aa2d006c22e3ba3ef2dba8b4c71 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 13 Dec 2016 11:33:23 +0100 Subject: [PATCH 0153/1311] foss 2016b version of ZeroMQ 4.2, missing checksums in intel fileset --- .../libsodium/libsodium-1.0.11-foss-2016b.eb | 22 ++++++++++++ .../o/OpenPGM/OpenPGM-5.2.122-foss-2016b.eb | 30 ++++++++++++++++ .../o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb | 2 ++ .../util-linux/util-linux-2.29-foss-2016b.eb | 33 +++++++++++++++++ .../z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb | 36 +++++++++++++++++++ .../z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb | 2 +- 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/l/libsodium/libsodium-1.0.11-foss-2016b.eb create mode 100644 easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016b.eb create mode 100644 easybuild/easyconfigs/u/util-linux/util-linux-2.29-foss-2016b.eb create mode 100644 easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libsodium/libsodium-1.0.11-foss-2016b.eb b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.11-foss-2016b.eb new file mode 100644 index 0000000000..9f0f8fead0 --- /dev/null +++ b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.11-foss-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'libsodium' +version = '1.0.11' + +homepage = 'http://doc.libsodium.org/' +description = """Sodium is a modern, easy-to-use software library for encryption, decryption, signatures, + password hashing and more.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://download.libsodium.org/libsodium/releases/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['b58928d035064b2a46fb564937b83540'] + +sanity_check_paths = { + 'files': ['include/sodium.h', 'lib/libsodium.%s' % SHLIB_EXT, 'lib/libsodium.a'], + 'dirs': ['include/sodium', 'lib/pkgconfig'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016b.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016b.eb new file mode 100644 index 0000000000..3584a3c705 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'OpenPGM' +version = '5.2.122' + +homepage = 'http://code.google.com/p/openpgm/' +description = """OpenPGM is an open source implementation of the Pragmatic General Multicast (PGM) + specification in RFC 3208 available at www.ietf.org. PGM is a reliable and scalable multicast protocol + that enables receivers to detect loss, request retransmission of lost data, or notify an application + of unrecoverable loss. PGM is a receiver-reliable protocol, which means the receiver is responsible + for ensuring all data is received, absolving the sender of reception responsibility.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] +sources = ['libpgm-%(version)s.tar.gz'] + +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + +configopts = '--with-pic' + +start_dir = 'pgm' + +sanity_check_paths = { + 'files': ['lib/libpgm.%s' % SHLIB_EXT, 'lib/libpgm.a'], + 'dirs': ['include'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb index 4e6e7ed78b..f8d13d0834 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016b.eb @@ -16,6 +16,8 @@ toolchainopts = {'pic': True} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/u/util-linux/util-linux-2.29-foss-2016b.eb b/easybuild/easyconfigs/u/util-linux/util-linux-2.29-foss-2016b.eb new file mode 100644 index 0000000000..27b08c5298 --- /dev/null +++ b/easybuild/easyconfigs/u/util-linux/util-linux-2.29-foss-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'util-linux' +version = '2.29' + +homepage = 'http://www.kernel.org/pub/linux/utils/util-linux' +description = """Set of Linux utilities""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['%s/v%%(version_major_minor)s' % homepage] +sources = [SOURCELOWER_TAR_GZ] + +# disable account related utilities (they need OS dependant pam-devel files) +# disable wall and friends (requires group changing permissions for install user) +# install systemd service files in install dir +# install bash completion files in install dir +configopts = "--disable-chfn-chsh --disable-login --disable-su " +configopts += "--disable-wall --disable-use-tty-group " +configopts += "--disable-makeinstall-chown --disable-makeinstall-setuid " +configopts += "--with-systemdsystemunitdir='${prefix}/systemd' " +configopts += "--with-bashcompletiondir='${prefix}/share/bash-completion/completions' " +# disable building Python bindings (since we don't include Python as a dep) +configopts += "--without-python " + +dependencies = [('ncurses', '6.0')] + +sanity_check_paths = { + 'files': ['lib/lib%s.a' % x for x in ['blkid', 'mount', 'uuid']], + 'dirs': ['include', 'bin', 'share', 'sbin'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb new file mode 100644 index 0000000000..2e2077d599 --- /dev/null +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'ZeroMQ' +version = '4.2.0' + +homepage = 'http://www.zeromq.org/' +description = """ZeroMQ looks like an embeddable networking library but acts like a concurrency framework. + It gives you sockets that carry atomic messages across various transports like in-process, + inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fanout, + pub-sub, task distribution, and request-reply. It's fast enough to be the fabric for clustered + products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous + message-processing tasks. It has a score of language APIs and runs on most operating systems.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums=['1fb2595d2a905a9e820c976a1d8348bc'] + +# --with-pgm will use shipped OpenPGM (in foreign subdir) +configopts = '--with-pic --with-system-pgm ' +configopts += 'OpenPGM_CFLAGS="-I$EBROOTOPENPGM/include/pgm-${EBVERSIONOPENPGM%.*}" ' +configopts += 'OpenPGM_LIBS="-L$EBROOTOPENPGM/lib -lpgm -lrt -lpthread -lm" ' + +dependencies = [ + ('OpenPGM', '5.2.122'), + ('util-linux', '2.29'), + ('libsodium', '1.0.11'), +] + +sanity_check_paths = { + 'files': ['lib/libzmq.so', 'lib/libzmq.a'], + 'dirs': ['include', 'lib'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb index 2844a5ce90..6df9703bcd 100644 --- a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb @@ -13,9 +13,9 @@ description = """ZeroMQ looks like an embeddable networking library but acts lik toolchain = {'name': 'intel', 'version': '2016b'} -source_urls = ['https://github.com/zeromq/zeromq%(version_major)s-%(version_minor)s/releases/download/v%(version)s/'] source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] sources = [SOURCELOWER_TAR_GZ] +checksum=['1fb2595d2a905a9e820c976a1d8348bc'] # --with-pgm will use shipped OpenPGM (in foreign subdir) configopts = '--with-pic --with-system-pgm ' -- GitLab From a5463adddecbaca8bc99c0f1cc2284b6a36f073e Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 13 Dec 2016 13:26:42 +0100 Subject: [PATCH 0154/1311] Added the pyzmq configs Added the easyconfig files for pyzmq in foss/2016b and intel/2016b Also fix to checksum in zeromq for intel 2016b --- ...MQ-16.0.2-foss-2016b-Python-2.7.12-zmq4.eb | 30 +++++++++++++++++++ ...ZMQ-16.0.2-foss-2016b-Python-3.5.2-zmq4.eb | 30 +++++++++++++++++++ ...Q-16.0.2-intel-2016b-Python-2.7.12-zmq4.eb | 30 +++++++++++++++++++ ...MQ-16.0.2-intel-2016b-Python-3.5.2-zmq4.eb | 30 +++++++++++++++++++ .../z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb | 2 +- 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-2.7.12-zmq4.eb create mode 100644 easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-3.5.2-zmq4.eb create mode 100644 easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-2.7.12-zmq4.eb create mode 100644 easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-3.5.2-zmq4.eb diff --git a/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-2.7.12-zmq4.eb b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-2.7.12-zmq4.eb new file mode 100644 index 0000000000..2ae02cf975 --- /dev/null +++ b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-2.7.12-zmq4.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyZMQ' +version = '16.0.2' +zmqversion = '4.2.0' +versionsuffix = '-Python-%%(pyver)s-zmq%s' % zmqversion.split('.')[0] + +homepage = 'http://www.zeromq.org/bindings:python' +description = """Python bindings for ZeroMQ""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['9a8768b00a566a400d70318f8c359cfe'] + +dependencies = [ + ('Python', '2.7.12'), + ('ZeroMQ', zmqversion), +] + +options = {'modulename': 'zmq'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/zmq'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-3.5.2-zmq4.eb b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-3.5.2-zmq4.eb new file mode 100644 index 0000000000..a6d0276b23 --- /dev/null +++ b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-foss-2016b-Python-3.5.2-zmq4.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyZMQ' +version = '16.0.2' +zmqversion = '4.2.0' +versionsuffix = '-Python-%%(pyver)s-zmq%s' % zmqversion.split('.')[0] + +homepage = 'http://www.zeromq.org/bindings:python' +description = """Python bindings for ZeroMQ""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['9a8768b00a566a400d70318f8c359cfe'] + +dependencies = [ + ('Python', '3.5.2'), + ('ZeroMQ', zmqversion), +] + +options = {'modulename': 'zmq'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/zmq'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-2.7.12-zmq4.eb b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-2.7.12-zmq4.eb new file mode 100644 index 0000000000..83db644170 --- /dev/null +++ b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-2.7.12-zmq4.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyZMQ' +version = '16.0.2' +zmqversion = '4.2.0' +versionsuffix = '-Python-%%(pyver)s-zmq%s' % zmqversion.split('.')[0] + +homepage = 'http://www.zeromq.org/bindings:python' +description = """Python bindings for ZeroMQ""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['9a8768b00a566a400d70318f8c359cfe'] + +dependencies = [ + ('Python', '2.7.12'), + ('ZeroMQ', zmqversion), +] + +options = {'modulename': 'zmq'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/zmq'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-3.5.2-zmq4.eb b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-3.5.2-zmq4.eb new file mode 100644 index 0000000000..0d5d945f58 --- /dev/null +++ b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2016b-Python-3.5.2-zmq4.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyZMQ' +version = '16.0.2' +zmqversion = '4.2.0' +versionsuffix = '-Python-%%(pyver)s-zmq%s' % zmqversion.split('.')[0] + +homepage = 'http://www.zeromq.org/bindings:python' +description = """Python bindings for ZeroMQ""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['9a8768b00a566a400d70318f8c359cfe'] + +dependencies = [ + ('Python', '3.5.2'), + ('ZeroMQ', zmqversion), +] + +options = {'modulename': 'zmq'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/zmq'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb index 6df9703bcd..b5d9aa81e3 100644 --- a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] sources = [SOURCELOWER_TAR_GZ] -checksum=['1fb2595d2a905a9e820c976a1d8348bc'] +checksums=['1fb2595d2a905a9e820c976a1d8348bc'] # --with-pgm will use shipped OpenPGM (in foreign subdir) configopts = '--with-pic --with-system-pgm ' -- GitLab From 8da82f63f586eae8382bb1d997858c346437c17f Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 13 Dec 2016 14:48:10 +0100 Subject: [PATCH 0155/1311] URL update in all OpenPGM easy configs --- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb | 2 +- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016a.eb | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb index 34c308ea5d..7f603e2ded 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb @@ -12,7 +12,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'foss', 'version': '2015a'} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb index 5f92dedd69..f0db21de50 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb @@ -12,7 +12,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'foss', 'version': '2016a'} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb index da4b481d25..8c657eaefc 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb @@ -12,7 +12,7 @@ for ensuring all data is received, absolving the sender of reception responsibil toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://%s.googlecode.com/files/' % (name.lower())] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb index 367fbc744c..5e79a01c61 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb @@ -12,7 +12,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'goolf', 'version': '1.7.20'} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb index 8aaab1f337..297afcd738 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb @@ -13,7 +13,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['http://%s.googlecode.com/files/' % (name.lower())] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb index e0719d72e6..d3b8b839f7 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb @@ -12,7 +12,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'ictce', 'version': '5.5.0'} -source_urls = ['http://%s.googlecode.com/files/' % (name.lower())] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb index 690b4d99ca..3ad4934739 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb @@ -12,7 +12,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'intel', 'version': '2015a'} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb index 26e1420fda..65b515f1f1 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb @@ -13,7 +13,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'pic': True} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016a.eb index d391dfe9fd..803b19d70e 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2016a.eb @@ -13,7 +13,7 @@ description = """OpenPGM is an open source implementation of the Pragmatic Gener toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] configopts = '--with-pic' -- GitLab From aa65058524145544e04d46ada82f9d874698b89c Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Tue, 13 Dec 2016 15:00:28 +0100 Subject: [PATCH 0156/1311] Added checksum to OpenPGM legacy easyconfigs --- easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb | 2 ++ easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb | 2 ++ 8 files changed, 16 insertions(+) diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb index 7f603e2ded..2ae64198e6 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2015a.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'foss', 'version': '2015a'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb index f0db21de50..a3d2763924 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-foss-2016a.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb index 8c657eaefc..ba0d346657 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.4.10.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb index 5e79a01c61..34fa9dd22f 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-goolf-1.7.20.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb index 297afcd738..5c73a02ebe 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.3.0.eb @@ -16,6 +16,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb index d3b8b839f7..d10ebd9897 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-ictce-5.5.0.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['%s-%s.tar.gz' % ('libpgm', version)] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb index 3ad4934739..b7949218e2 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015a.eb @@ -15,6 +15,8 @@ toolchain = {'name': 'intel', 'version': '2015a'} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb index 65b515f1f1..abec09000c 100644 --- a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2015b.eb @@ -16,6 +16,8 @@ toolchainopts = {'pic': True} source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] sources = ['libpgm-%(version)s.tar.gz'] +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + configopts = '--with-pic' start_dir = 'pgm' -- GitLab From 9ef7cd64e7f8b808927c08022984f7ca07a1e07b Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Wed, 14 Dec 2016 10:04:38 +0100 Subject: [PATCH 0157/1311] version number added in the EB filename --- ...MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb new file mode 100644 index 0000000000..35b0a5d11b --- /dev/null +++ b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb @@ -0,0 +1,31 @@ +easyblock = 'PackedBinary' + +name = 'MATSim' +version = '0.8.1' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://www.matsim.org/' +description = """MATSim is an open-source framework to implement large-scale agent-based transport simulations.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/matsim-org/matsim/releases/download/%(namelower)s-%(version)s/'] +sources = ['%(namelower)s-%(version)s.zip'] + +dependencies = [ + ('Java', '1.8.0_112', '', True), + ('X11', '20160819'), +] + +sanity_check_paths = { + 'files': ['%(namelower)s-%(version)s.jar'], + 'dirs': ['libs'], +} + +modextrapaths = {'CLASSPATH': 'libs/*'} + +modloadmsg = """To execute MATSim GUI: java -jar \\${EBROOTMATSIM}/%(namelower)s-%(version)s.jar +To execute MATSim in batch mode: java org.matsim.run.Controller +You might have to adjust the requested memory""" + +moduleclass = 'cae' -- GitLab From c358201a5302d9ba545e3664960c88ced8a3cfcc Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Wed, 14 Dec 2016 10:32:27 +0100 Subject: [PATCH 0158/1311] h5py for Python 3.5 in foss 2016b and h5py for intel 2016b This is a follow up to an earlier PR providing the latest HDF5 versions 1.8.18 and 1.10.0-patch1. This PR contains python bindings for Python 3.5 in foss 2016b and hdf5 in Intel 2016b --- ...s-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb | 34 +++++++++++++++++++ ...6.0-foss-2016b-Python-3.5.2-HDF5-1.8.18.eb | 34 +++++++++++++++++++ ...-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb | 34 +++++++++++++++++++ ...0-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb | 34 +++++++++++++++++++ ...l-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb | 34 +++++++++++++++++++ ....0-intel-2016b-Python-3.5.2-HDF5-1.8.18.eb | 34 +++++++++++++++++++ ...pkgconfig-1.1.0-foss-2016b-Python-3.5.2.eb | 26 ++++++++++++++ 7 files changed, 230 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb new file mode 100644 index 0000000000..07938a2cc2 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.10.0-patch1' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.5.2'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.8.18.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.8.18.eb new file mode 100644 index 0000000000..b9073d01d0 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-foss-2016b-Python-3.5.2-HDF5-1.8.18.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.5.2'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb new file mode 100644 index 0000000000..ddafe208b0 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.10.0-patch1.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.10.0-patch1' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb new file mode 100644 index 0000000000..1bb3147cb8 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb new file mode 100644 index 0000000000..3cae2c6786 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.10.0-patch1.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.10.0-patch1' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.5.2'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.8.18.eb b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.8.18.eb new file mode 100644 index 0000000000..e3874f47d4 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.6.0-intel-2016b-Python-3.5.2-HDF5-1.8.18.eb @@ -0,0 +1,34 @@ +easyblock = "PythonPackage" + +name = 'h5py' +version = '2.6.0' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +hdf5ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.5.2'), + ('HDF5', hdf5ver), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..f2590ee0e4 --- /dev/null +++ b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.1.0-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'pkgconfig' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://github.com/matze/pkgconfig' +description = """pkgconfig is a Python module to interface with the pkg-config command line tool""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('pkg-config', '0.29.1'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' -- GitLab From c8d9d846c507a87d4c7c1c9500ca009107909cd0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Dec 2016 15:50:57 +0100 Subject: [PATCH 0159/1311] fix test that verifies dumped easyconfig, take into account that dumped dependencies may include hardcoded dependency --- test/easyconfigs/easyconfigs.py | 34 ++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/test/easyconfigs/easyconfigs.py b/test/easyconfigs/easyconfigs.py index 5901ae8d4c..551695c259 100644 --- a/test/easyconfigs/easyconfigs.py +++ b/test/easyconfigs/easyconfigs.py @@ -45,6 +45,7 @@ import easybuild.tools.options as eboptions from easybuild.easyblocks.generic.configuremake import ConfigureMake from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig.default import DEFAULT_CONFIG +from easybuild.framework.easyconfig.format.format import DEPENDENCY_PARAMETERS from easybuild.framework.easyconfig.easyconfig import EasyConfig from easybuild.framework.easyconfig.easyconfig import get_easyblock_class, letter_dir_for, resolve_template from easybuild.framework.easyconfig.parser import EasyConfigParser, fetch_parameters_from_easyconfig @@ -282,7 +283,7 @@ def template_easyconfig_test(self, spec): ec.template_values.update(dummy_template_values) ec_dict = ec.parser.get_config_dict() - keys = [] + orig_toolchain = ec_dict['toolchain'] for key in ec_dict: # skip parameters for which value is equal to default value orig_val = ec_dict[key] @@ -293,11 +294,38 @@ def template_easyconfig_test(self, spec): if key not in DEFAULT_CONFIG and key not in extra_opts: continue - keys.append(key) orig_val = resolve_template(ec_dict[key], ec.template_values) dumped_val = resolve_template(dumped_ec[key], ec.template_values) - self.assertEqual(orig_val, dumped_val) + # take into account that dumped value for *dependencies may include hard-coded subtoolchains + # if no easyconfig was found for the dependency with the 'parent' toolchain, + # if may get resolved using a subtoolchain, which is then hardcoded in the dumped easyconfig + if key in DEPENDENCY_PARAMETERS: + # number of dependencies should remain the same + self.assertEqual(len(orig_val), len(dumped_val)) + for orig_dep, dumped_dep in zip(orig_val, dumped_val): + # name/version should always match + self.assertEqual(orig_dep[:2], dumped_dep[:2]) + + # 3rd value is versionsuffix; + if len(dumped_dep) >= 3: + # if no versionsuffix was specified in original dep spec, then dumped value should be empty string + if len(orig_dep) >= 3: + self.assertEqual(dumped_dep[2], orig_dep[2]) + else: + self.assertEqual(dumped_dep[2], '') + + # 4th value is toolchain spec + if len(dumped_dep) >= 4: + if len(orig_dep) >= 4: + self.assertEqual(dumped_dep[3], orig_dep[3]) + else: + # if a subtoolchain is specifed (only) in the dumped easyconfig, + # it should *not* be the same as the parent toolchain + self.assertNotEqual(dumped_dep[3], (orig_toolchain['name'], orig_toolchain['version'])) + + else: + self.assertEqual(orig_val, dumped_val) # cache the parsed easyconfig, to avoid that it is parsed again self.parsed_easyconfigs.append(ecs[0]) -- GitLab From cdec48b7867b39a00b851c3408ce7ec91cac6a6c Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Wed, 14 Dec 2016 20:32:07 +0100 Subject: [PATCH 0160/1311] remove wrong file --- .../MATSim-intel-2016b-Java-1.8.0_112.eb | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb deleted file mode 100644 index 35b0a5d11b..0000000000 --- a/easybuild/easyconfigs/m/MATSim/MATSim-intel-2016b-Java-1.8.0_112.eb +++ /dev/null @@ -1,31 +0,0 @@ -easyblock = 'PackedBinary' - -name = 'MATSim' -version = '0.8.1' -versionsuffix = '-Java-%(javaver)s' - -homepage = 'http://www.matsim.org/' -description = """MATSim is an open-source framework to implement large-scale agent-based transport simulations.""" - -toolchain = {'name': 'intel', 'version': '2016b'} - -source_urls = ['https://github.com/matsim-org/matsim/releases/download/%(namelower)s-%(version)s/'] -sources = ['%(namelower)s-%(version)s.zip'] - -dependencies = [ - ('Java', '1.8.0_112', '', True), - ('X11', '20160819'), -] - -sanity_check_paths = { - 'files': ['%(namelower)s-%(version)s.jar'], - 'dirs': ['libs'], -} - -modextrapaths = {'CLASSPATH': 'libs/*'} - -modloadmsg = """To execute MATSim GUI: java -jar \\${EBROOTMATSIM}/%(namelower)s-%(version)s.jar -To execute MATSim in batch mode: java org.matsim.run.Controller -You might have to adjust the requested memory""" - -moduleclass = 'cae' -- GitLab From 426d9e1ac93d596a2721616f2003a779ef258cef Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 15 Dec 2016 19:31:42 +0100 Subject: [PATCH 0161/1311] Include Makefile patch to ensure use of toolchain compiler, not OS --- .../r/RSEM/RSEM-1.3.0-foss-2016b.eb | 32 ++++++++++ .../r/RSEM/RSEM-1.3.0_makefiles.patch | 61 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/r/RSEM/RSEM-1.3.0_makefiles.patch diff --git a/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb new file mode 100644 index 0000000000..d01f2f9089 --- /dev/null +++ b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'RSEM' +version = '1.3.0' + +homepage = 'http://deweylab.github.io/RSEM/' +description = """RNA-Seq by Expectation-Maximization""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/deweylab/RSEM/archive/'] +sources = ['v%(version)s.tar.gz'] + +patches = ['RSEM-%(version)s_makefiles.patch'] + +skipsteps = ['configure'] +installopts = "prefix=%(installdir)s" + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.8'), + ('Perl', '5.24.0'), + ('R', '3.3.1'), +] + +sanity_check_paths = { + 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', 'bin/rsem-bam2wig', + 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], + 'dirs': ['bin/samtools-1.3'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0_makefiles.patch b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0_makefiles.patch new file mode 100644 index 0000000000..4edfe60165 --- /dev/null +++ b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0_makefiles.patch @@ -0,0 +1,61 @@ +# Remove preset CXX and CPPFLAGS for each makefile, such that it uses the ones defined by EB. +# Author: Bob Dröge - Rijksuniversiteit Groningen (RUG) +--- RSEM-1.2.30/Makefile 2016-04-20 23:59:26.000000000 +0200 ++++ RSEM-1.2.30.new/Makefile 2016-05-13 16:25:04.000000000 +0200 +@@ -11,12 +11,12 @@ + BOOST = . + + # Compilation variables +-CXX = g++ +-CXXFLAGS = -std=gnu++98 -Wall -I. -I$(BOOST) -I$(SAMTOOLS)/$(HTSLIB) +-CPPFLAGS = ++#CXX = g++ ++CXXFLAGS += -std=gnu++98 -Wall -I. -I$(BOOST) -I$(SAMTOOLS)/$(HTSLIB) ++#CPPFLAGS = + +-LDFLAGS = +-LDLIBS = ++#LDFLAGS = ++#LDLIBS = + + # Installation variables + INSTALL = install +--- RSEM-1.2.30/samtools-1.3/Makefile 2016-04-20 23:59:26.000000000 +0200 ++++ RSEM-1.2.30.new/samtools-1.3/Makefile 2016-05-13 16:25:42.000000000 +0200 +@@ -21,10 +21,10 @@ + # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + # DEALINGS IN THE SOFTWARE. + +-CC = gcc +-CPPFLAGS = +-CFLAGS = -g -Wall -O2 +-LDFLAGS = ++#CC = gcc ++#CPPFLAGS = ++#CFLAGS = -g -Wall -O2 ++#LDFLAGS = + LIBS = + + DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE +--- RSEM-1.2.30/samtools-1.3/htslib-1.3/Makefile 2016-04-20 23:59:26.000000000 +0200 ++++ RSEM-1.2.30.new/samtools-1.3/htslib-1.3/Makefile 2016-05-13 16:26:24.000000000 +0200 +@@ -22,15 +22,15 @@ + # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + # DEALINGS IN THE SOFTWARE. + +-CC = gcc ++#CC = gcc + AR = ar + RANLIB = ranlib + +-CPPFLAGS = ++#CPPFLAGS = + # TODO: probably update cram code to make it compile cleanly with -Wc++-compat +-CFLAGS = -g -Wall -O2 ++#CFLAGS = -g -Wall -O2 + EXTRA_CFLAGS_PIC = -fpic +-LDFLAGS = ++#LDFLAGS = + LIBS = + + # For now these don't work too well as samtools also needs to know to -- GitLab From 2d812d94b0f579e2484ee88fb2966a5db05001a2 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 15 Dec 2016 19:54:05 +0100 Subject: [PATCH 0162/1311] adding easyconfigs: Perl-5.24.0-foss-2016b-bare.eb --- .../p/Perl/Perl-5.24.0-foss-2016b-bare.eb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b-bare.eb diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b-bare.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b-bare.eb new file mode 100644 index 0000000000..05c6f2b9c0 --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b-bare.eb @@ -0,0 +1,17 @@ +name = 'Perl' +version = '5.24.0' +versionsuffix = '-bare' + +homepage = 'http://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = ['http://www.cpan.org/src/%(version_major)s.0'] +sources = [SOURCELOWER_TAR_GZ] + +# bare, no extensions +exts_list = [] + +moduleclass = 'lang' -- GitLab From 1758b2467dead2b3594231542740ecd5ad6c0f8d Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 09:36:09 +0100 Subject: [PATCH 0163/1311] libGLU added --- .../f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb index 1965349120..be03ac9e22 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb @@ -21,6 +21,7 @@ dependencies = [ ('libXext', '1.3.3'), ('libXrandr', '1.5.0'), ('libXi', '1.7.6'), + ('libGLU', '9.0.0'), ('Mesa', mesa_ver), ] -- GitLab From ee8445789dded63e988be0fe4c64d925bd2bb0ed Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 09:57:49 +0100 Subject: [PATCH 0164/1311] libGLU for recent freeglut versions --- .../f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb | 2 +- easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a.eb | 1 + .../f/freeglut/freeglut-3.0.0-intel-2016a-Mesa-11.2.1.eb | 1 + easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a.eb | 1 + easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016b.eb | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb index be03ac9e22..c44a62753b 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a-Mesa-11.2.1.eb @@ -21,7 +21,7 @@ dependencies = [ ('libXext', '1.3.3'), ('libXrandr', '1.5.0'), ('libXi', '1.7.6'), - ('libGLU', '9.0.0'), + ('libGLU', '9.0.0', versionsuffix), ('Mesa', mesa_ver), ] diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a.eb index aa4fa34ea2..0c095217cc 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016a.eb @@ -18,6 +18,7 @@ dependencies = [ ('libXext', '1.3.3'), ('libXrandr', '1.5.0'), ('libXi', '1.7.6'), + ('libGLU', '9.0.0'), ('Mesa', '11.1.2'), ] diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a-Mesa-11.2.1.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a-Mesa-11.2.1.eb index fceaa15cbb..325b61b0da 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a-Mesa-11.2.1.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a-Mesa-11.2.1.eb @@ -21,6 +21,7 @@ dependencies = [ ('libXext', '1.3.3'), ('libXrandr', '1.5.0'), ('libXi', '1.7.6'), + ('libGLU', '9.0.0', versionsuffix), ('Mesa', mesa_ver), ] diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a.eb index fe4a731eff..96cd6a9c81 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016a.eb @@ -18,6 +18,7 @@ dependencies = [ ('libXext', '1.3.3'), ('libXrandr', '1.5.0'), ('libXi', '1.7.6'), + ('libGLU', '9.0.0'), ('Mesa', '11.1.2'), ] diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016b.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016b.eb index ccad2796aa..531932c8dd 100644 --- a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016b.eb +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2016b.eb @@ -15,6 +15,7 @@ builddependencies = [('CMake', '3.6.1')] dependencies = [ ('X11', '20160819'), + ('libGLU', '9.0.0'), ('Mesa', '12.0.2'), ] -- GitLab From 00c32af72263640e0306be1046581a62ca97c083 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:23:02 +0100 Subject: [PATCH 0165/1311] ROOT with foss2016a --- .../ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb new file mode 100644 index 0000000000..82204420b9 --- /dev/null +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb @@ -0,0 +1,58 @@ +name = 'ROOT' +version = 'v6.06.06' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://root.cern.ch/drupal/' +description = """The ROOT system provides a set of OO frameworks with all the functionality + needed to handle and analyze large amounts of data in a very efficient way.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'pic': True} + +#root_v6.06.06.source.tar.gz +sources = ['%(namelower)s_%(version)s.source.tar.gz'] +source_urls = ['https://root.cern.ch/download/'] +patches = [ +# 'configure_FftwFromMkl_28.patch', +# 'ROOT-v5_recent-ifort.patch', + 'ROOT-v5.34.26_libX.patch', +] + +dependencies = [ + ('GSL', '2.1'), + ('Mesa', '11.1.2'), + ('libxml2', '2.9.3'), + ('PCRE', '8.38'), + ('CFITSIO', '3.38'), + ('freetype', '2.6.2'), + ('Python', '2.7.11'), + ('zlib', '1.2.8'), + ('libXft', '2.3.2'), + ('libXpm', '3.5.11'), + ('libXext', '1.3.3'), + +] + +# use external ZLIB +preconfigopts = 'env ZLIB=$EBROOTZLIB ' + +# architecture +arch = 'linuxx8664gcc' + +# disable features +configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' +configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' +# enable features +configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' +configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' +configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' +# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' +configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' +configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' +configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' +configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' +configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' +configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' + +moduleclass = 'data' \ No newline at end of file -- GitLab From 02b82470e5157e949bf45240c45249a51fb2cb59 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:24:45 +0100 Subject: [PATCH 0166/1311] v6.08 --- .../ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb new file mode 100644 index 0000000000..39d6986823 --- /dev/null +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -0,0 +1,64 @@ +name = 'ROOT' +version = 'v6.08.02' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://root.cern.ch/drupal/' +description = """The ROOT system provides a set of OO frameworks with all the functionality + needed to handle and analyze large amounts of data in a very efficient way.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'pic': True} + +#root_v6.06.06.source.tar.gz +sources = ['%(namelower)s_%(version)s.source.tar.gz'] +source_urls = ['https://root.cern.ch/download/'] +patches = [ +# 'configure_FftwFromMkl_28.patch', +# 'ROOT-v5_recent-ifort.patch', + 'ROOT-v5.34.26_libX.patch', +] + +builddependencies = [ + ('CMake', '3.6.1'), +] + +dependencies = [ + ('GSL', '2.1'), + ('Mesa', '11.2.1'), + ('libxml2', '2.9.3'), + ('PCRE', '8.38'), + ('CFITSIO', '3.38'), + ('freetype', '2.6.2'), + ('Python', '2.7.11'), + ('zlib', '1.2.8'), + ('libXft', '2.3.2'), + ('libXpm', '3.5.11'), + ('libXext', '1.3.3'), + ('libpng', '1.6.23'), +# ('libjpeg-turbo', '1.5.0'), +] + +# use external ZLIB +preconfigopts = 'env ZLIB=$EBROOTZLIB ' + +# architecture +arch = 'linuxx8664gcc' + +# disable features +configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' +configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' +configopts += ' --disable-asimage' +# enable features +configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' +configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' +configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' +# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' +configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' +configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' +configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' +configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' +configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' +configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' + +moduleclass = 'data' -- GitLab From 69fc0a2b85847807cd3e0087793608963e6c70a2 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:25:23 +0100 Subject: [PATCH 0167/1311] New version --- .../ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb | 58 ----------------- .../ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 64 ------------------- 2 files changed, 122 deletions(-) delete mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb delete mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb deleted file mode 100644 index 82204420b9..0000000000 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.06-foss-2016a-Python-2.7.11.eb +++ /dev/null @@ -1,58 +0,0 @@ -name = 'ROOT' -version = 'v6.06.06' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://root.cern.ch/drupal/' -description = """The ROOT system provides a set of OO frameworks with all the functionality - needed to handle and analyze large amounts of data in a very efficient way.""" - -toolchain = {'name': 'foss', 'version': '2016a'} -toolchainopts = {'pic': True} - -#root_v6.06.06.source.tar.gz -sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['https://root.cern.ch/download/'] -patches = [ -# 'configure_FftwFromMkl_28.patch', -# 'ROOT-v5_recent-ifort.patch', - 'ROOT-v5.34.26_libX.patch', -] - -dependencies = [ - ('GSL', '2.1'), - ('Mesa', '11.1.2'), - ('libxml2', '2.9.3'), - ('PCRE', '8.38'), - ('CFITSIO', '3.38'), - ('freetype', '2.6.2'), - ('Python', '2.7.11'), - ('zlib', '1.2.8'), - ('libXft', '2.3.2'), - ('libXpm', '3.5.11'), - ('libXext', '1.3.3'), - -] - -# use external ZLIB -preconfigopts = 'env ZLIB=$EBROOTZLIB ' - -# architecture -arch = 'linuxx8664gcc' - -# disable features -configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' -configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' -# enable features -configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' -configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' -configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' -# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' -configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' -configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' -configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' -configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' -configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' -configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' -configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' - -moduleclass = 'data' \ No newline at end of file diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb deleted file mode 100644 index 39d6986823..0000000000 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ /dev/null @@ -1,64 +0,0 @@ -name = 'ROOT' -version = 'v6.08.02' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://root.cern.ch/drupal/' -description = """The ROOT system provides a set of OO frameworks with all the functionality - needed to handle and analyze large amounts of data in a very efficient way.""" - -toolchain = {'name': 'foss', 'version': '2016a'} -toolchainopts = {'pic': True} - -#root_v6.06.06.source.tar.gz -sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['https://root.cern.ch/download/'] -patches = [ -# 'configure_FftwFromMkl_28.patch', -# 'ROOT-v5_recent-ifort.patch', - 'ROOT-v5.34.26_libX.patch', -] - -builddependencies = [ - ('CMake', '3.6.1'), -] - -dependencies = [ - ('GSL', '2.1'), - ('Mesa', '11.2.1'), - ('libxml2', '2.9.3'), - ('PCRE', '8.38'), - ('CFITSIO', '3.38'), - ('freetype', '2.6.2'), - ('Python', '2.7.11'), - ('zlib', '1.2.8'), - ('libXft', '2.3.2'), - ('libXpm', '3.5.11'), - ('libXext', '1.3.3'), - ('libpng', '1.6.23'), -# ('libjpeg-turbo', '1.5.0'), -] - -# use external ZLIB -preconfigopts = 'env ZLIB=$EBROOTZLIB ' - -# architecture -arch = 'linuxx8664gcc' - -# disable features -configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' -configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' -configopts += ' --disable-asimage' -# enable features -configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' -configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' -configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' -# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' -configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' -configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' -configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' -configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' -configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' -configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' -configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' - -moduleclass = 'data' -- GitLab From 96777ea7bb16f2d9e7f118746a6e99c703c3092d Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:26:21 +0100 Subject: [PATCH 0168/1311] ROOT v6.08.02 --- .../ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb new file mode 100644 index 0000000000..39d6986823 --- /dev/null +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -0,0 +1,64 @@ +name = 'ROOT' +version = 'v6.08.02' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://root.cern.ch/drupal/' +description = """The ROOT system provides a set of OO frameworks with all the functionality + needed to handle and analyze large amounts of data in a very efficient way.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'pic': True} + +#root_v6.06.06.source.tar.gz +sources = ['%(namelower)s_%(version)s.source.tar.gz'] +source_urls = ['https://root.cern.ch/download/'] +patches = [ +# 'configure_FftwFromMkl_28.patch', +# 'ROOT-v5_recent-ifort.patch', + 'ROOT-v5.34.26_libX.patch', +] + +builddependencies = [ + ('CMake', '3.6.1'), +] + +dependencies = [ + ('GSL', '2.1'), + ('Mesa', '11.2.1'), + ('libxml2', '2.9.3'), + ('PCRE', '8.38'), + ('CFITSIO', '3.38'), + ('freetype', '2.6.2'), + ('Python', '2.7.11'), + ('zlib', '1.2.8'), + ('libXft', '2.3.2'), + ('libXpm', '3.5.11'), + ('libXext', '1.3.3'), + ('libpng', '1.6.23'), +# ('libjpeg-turbo', '1.5.0'), +] + +# use external ZLIB +preconfigopts = 'env ZLIB=$EBROOTZLIB ' + +# architecture +arch = 'linuxx8664gcc' + +# disable features +configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' +configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' +configopts += ' --disable-asimage' +# enable features +configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' +configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' +configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' +# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' +configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' +configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' +configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' +configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' +configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' +configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' + +moduleclass = 'data' -- GitLab From 87a91e03cb80c8884d627aa40e69dd45c8d18c33 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:27:42 +0100 Subject: [PATCH 0169/1311] ROOT-v6.08.02 --- .../ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 43 +++++-------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 39d6986823..d9fab8ef52 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -1,3 +1,5 @@ +easyblock = 'CMakeMake' + name = 'ROOT' version = 'v6.08.02' versionsuffix = '-Python-%(pyver)s' @@ -9,14 +11,8 @@ description = """The ROOT system provides a set of OO frameworks with all the fu toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True} -#root_v6.06.06.source.tar.gz sources = ['%(namelower)s_%(version)s.source.tar.gz'] source_urls = ['https://root.cern.ch/download/'] -patches = [ -# 'configure_FftwFromMkl_28.patch', -# 'ROOT-v5_recent-ifort.patch', - 'ROOT-v5.34.26_libX.patch', -] builddependencies = [ ('CMake', '3.6.1'), @@ -24,41 +20,24 @@ builddependencies = [ dependencies = [ ('GSL', '2.1'), - ('Mesa', '11.2.1'), ('libxml2', '2.9.3'), ('PCRE', '8.38'), ('CFITSIO', '3.38'), ('freetype', '2.6.2'), ('Python', '2.7.11'), ('zlib', '1.2.8'), + ('libX11, '1.6.3'), ('libXft', '2.3.2'), ('libXpm', '3.5.11'), ('libXext', '1.3.3'), - ('libpng', '1.6.23'), -# ('libjpeg-turbo', '1.5.0'), + ('Mesa', '11.2.1'), + ('libGLU', '9.0.0'), + ('GL2PS', '1.3.9', '-Mesa-11.2.1'), ] -# use external ZLIB -preconfigopts = 'env ZLIB=$EBROOTZLIB ' - -# architecture -arch = 'linuxx8664gcc' - -# disable features -configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' -configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' -configopts += ' --disable-asimage' -# enable features -configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' -configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' -configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' -# configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' -configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' -configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' -configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' -configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' -configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLIBXEXT/lib' -configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' -configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' +separate_build_dir = True -moduleclass = 'data' +configopts = '-Dxrootd=OFF -Dmysql=OFF -Dkrb5=OFF -Dodbc=OFF ' +configopts += '-Doracle=OFF -Dpgsql=OFF -Dqt=OFF -Dsqlite=OFF ' +configopts += '-Dcxx14=ON ' +configopts += '-Dunuran=ON -Dtable=ON -Dexplicitlink=ON -Dminuit2=ON ' -- GitLab From 8fd152f829f1d6f0fa8d75ffd310d317c3c31230 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:29:49 +0100 Subject: [PATCH 0170/1311] moduleclass --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index d9fab8ef52..3c8f28f3b6 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -41,3 +41,5 @@ configopts = '-Dxrootd=OFF -Dmysql=OFF -Dkrb5=OFF -Dodbc=OFF ' configopts += '-Doracle=OFF -Dpgsql=OFF -Dqt=OFF -Dsqlite=OFF ' configopts += '-Dcxx14=ON ' configopts += '-Dunuran=ON -Dtable=ON -Dexplicitlink=ON -Dminuit2=ON ' + +moduleclass = 'data' -- GitLab From 92cad2ad914ef592662808a55ed308452ca52561 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 11:54:45 +0100 Subject: [PATCH 0171/1311] stringfix --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 3c8f28f3b6..2db0941809 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -26,7 +26,7 @@ dependencies = [ ('freetype', '2.6.2'), ('Python', '2.7.11'), ('zlib', '1.2.8'), - ('libX11, '1.6.3'), + ('libX11', '1.6.3'), ('libXft', '2.3.2'), ('libXpm', '3.5.11'), ('libXext', '1.3.3'), -- GitLab From e0b9c1c2ff10eab96c59bc813a76226d808c31af Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 12:04:15 +0100 Subject: [PATCH 0172/1311] CFITSIO dep --- .../c/CFITSIO/CFITSIO-3.38-foss-2016a.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb new file mode 100644 index 0000000000..654a6284e8 --- /dev/null +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'CFITSIO' +version = '3.38' + +homepage = 'http://heasarc.gsfc.nasa.gov/fitsio/' +description = """CFITSIO is a library of C and Fortran subroutines for reading and writing data files in +FITS (Flexible Image Transport System) data format.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'optarch': True, 'pic': True} + +srcversion = '%s0' % version.replace('.', '') +source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +sources = ['%%(namelower)s%s.tar.gz' % srcversion] + +sanity_check_paths = { + 'files': ["lib/libcfitsio.a"], + 'dirs': ["include"], +} + +moduleclass = 'lib' -- GitLab From c3fdb8a1079810e560ccbc32c144ce9bd03c62ac Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 12:15:55 +0100 Subject: [PATCH 0173/1311] resolve dependencies --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 2db0941809..4e5c119324 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -15,7 +15,7 @@ sources = ['%(namelower)s_%(version)s.source.tar.gz'] source_urls = ['https://root.cern.ch/download/'] builddependencies = [ - ('CMake', '3.6.1'), + ('CMake', '3.4.3'), ] dependencies = [ @@ -31,7 +31,7 @@ dependencies = [ ('libXpm', '3.5.11'), ('libXext', '1.3.3'), ('Mesa', '11.2.1'), - ('libGLU', '9.0.0'), + ('libGLU', '9.0.0', '-Mesa-11.2.1'), ('GL2PS', '1.3.9', '-Mesa-11.2.1'), ] -- GitLab From e1129440993ecd8b3ea10f5320ac76b830fe89cc Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 12:26:40 +0100 Subject: [PATCH 0174/1311] another dependency conflict --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 4e5c119324..49eeabd571 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -23,7 +23,7 @@ dependencies = [ ('libxml2', '2.9.3'), ('PCRE', '8.38'), ('CFITSIO', '3.38'), - ('freetype', '2.6.2'), + ('freetype', '2.6.3'), ('Python', '2.7.11'), ('zlib', '1.2.8'), ('libX11', '1.6.3'), -- GitLab From 986469c3afecc6beb022fa3571d240dfb684125c Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 12:39:51 +0100 Subject: [PATCH 0175/1311] dep for ROOT --- .../libXft-2.3.2-foss-2016a-freetype-2.6.3.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb diff --git a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb new file mode 100644 index 0000000000..b95d581275 --- /dev/null +++ b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb @@ -0,0 +1,39 @@ +easyblock = 'ConfigureMake' + +name = 'libXft' +version = '2.3.2' + +homepage = "http://www.freedesktop.org/wiki/Software/xlibs" +description = """X11 client-side library""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +sources = [SOURCE_TAR_GZ] +source_urls = [XORG_LIB_SOURCE] + +builddependencies = [ + ('inputproto', '2.3.1'), + ('kbproto', '1.0.7'), + ('libpthread-stubs', '0.3'), + ('renderproto', '0.11'), + ('xcb-proto', '1.11', '', True), + ('xextproto', '7.3.0'), + ('xorg-macros', '1.19.0'), + ('xproto', '7.0.28'), + ('xtrans', '1.3.5'), +] + + +dependencies = [ + ('libX11', '1.6.3'), + ('libXrender', '0.9.9'), + ('freetype', '2.6.2'), + ('fontconfig', '2.11.94'), +] + +sanity_check_paths = { + 'files': ['lib/libXft.a'], + 'dirs': [], +} + +moduleclass = 'vis' -- GitLab From 23e789c7f5ec885b939bc524fd08ef23aeb3633f Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 12:41:04 +0100 Subject: [PATCH 0176/1311] versionchange in configfile --- .../l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb index b95d581275..c7a72b5751 100644 --- a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb +++ b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb @@ -27,7 +27,7 @@ builddependencies = [ dependencies = [ ('libX11', '1.6.3'), ('libXrender', '0.9.9'), - ('freetype', '2.6.2'), + ('freetype', '2.6.3'), ('fontconfig', '2.11.94'), ] -- GitLab From c65ec3f1259769433cd855140d7489008aed112b Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 13:00:09 +0100 Subject: [PATCH 0177/1311] versionsuffix --- .../l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb index c7a72b5751..d8dcb2c792 100644 --- a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb +++ b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb @@ -2,6 +2,9 @@ easyblock = 'ConfigureMake' name = 'libXft' version = '2.3.2' +freetypever = '2.6.3' + +versionsuffix = '-freetype-%s' % freetypever homepage = "http://www.freedesktop.org/wiki/Software/xlibs" description = """X11 client-side library""" -- GitLab From 40f82a0e933ae6ca17fac9cb095a05321128ebb4 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 16 Dec 2016 13:15:16 +0100 Subject: [PATCH 0178/1311] wrong lib versionsuffix --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 49eeabd571..81755cd856 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -27,7 +27,7 @@ dependencies = [ ('Python', '2.7.11'), ('zlib', '1.2.8'), ('libX11', '1.6.3'), - ('libXft', '2.3.2'), + ('libXft', '2.3.2', '-freetype-2.6.3'), ('libXpm', '3.5.11'), ('libXext', '1.3.3'), ('Mesa', '11.2.1'), -- GitLab From 16a83f31e0ead1f8240405db178d66b5eefb8737 Mon Sep 17 00:00:00 2001 From: Stephane Thiell Date: Fri, 16 Dec 2016 16:43:26 -0800 Subject: [PATCH 0179/1311] add easyconfig for cuDNN 5.1 for CUDA 8.0.44 --- .../c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb diff --git a/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb b/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb new file mode 100644 index 0000000000..0cbdeea8a4 --- /dev/null +++ b/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb @@ -0,0 +1,35 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Author: Stephane Thiell +## +easyblock = 'Tarball' + +name = 'cuDNN' +version = '5.1' +cuda_version = '8.0.44' + +versionsuffix = '-CUDA-%s' % cuda_version + +homepage = 'https://developer.nvidia.com/cudnn' +description = """The NVIDIA CUDA Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for + deep neural networks.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# Nvidia developer registration required. +# Download link: https://developer.nvidia.com/rdp/cudnn-download +sources = ['%(namelower)s-8.0-linux-x64-v%(version)s.tgz'] + +dependencies = [('CUDA', cuda_version)] + +checksums = [ + '099ca6a9b21b35e32f3408eff2a1c06d', # cudnn-8.0-linux-x64-v5.1.tgz +] + +sanity_check_paths = { + 'files': ['include/cudnn.h', 'lib64/libcudnn_static.a'], + 'dirs': ['include', 'lib64'], +} + +moduleclass = 'numlib' -- GitLab From cae721657768d17dfa4f8cf2e5e50f7e4ebf50d5 Mon Sep 17 00:00:00 2001 From: Stephane Thiell Date: Fri, 16 Dec 2016 16:50:47 -0800 Subject: [PATCH 0180/1311] add generic easyconfig for CUDA 8.0.44 --- easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb new file mode 100644 index 0000000000..9407a6399e --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb @@ -0,0 +1,18 @@ +name = 'CUDA' +version = '8.0.44' + +homepage = 'https://developer.nvidia.com/cuda-toolkit' +description = """CUDA (formerly Compute Unified Device Architecture) is a parallel + computing platform and programming model created by NVIDIA and implemented by the + graphics processing units (GPUs) that they produce. CUDA gives developers access + to the virtual instruction set and memory of the parallel computational elements in CUDA GPUs.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/prod/local_installers/'] + +sources = ['%(namelower)s_%(version)s_linux-run'] + +modextravars = { 'CUDA_HOME': '%(installdir)s' } + +moduleclass = 'system' -- GitLab From 4bae8902e16774c8562943d9a666cf5782fd75a3 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Sun, 18 Dec 2016 00:44:34 +0100 Subject: [PATCH 0181/1311] libXft conflict --- .../l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb index d8dcb2c792..d6e94f6323 100644 --- a/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb +++ b/easybuild/easyconfigs/l/libXft/libXft-2.3.2-foss-2016a-freetype-2.6.3.eb @@ -31,7 +31,7 @@ dependencies = [ ('libX11', '1.6.3'), ('libXrender', '0.9.9'), ('freetype', '2.6.3'), - ('fontconfig', '2.11.94'), + ('fontconfig', '2.11.95'), ] sanity_check_paths = { -- GitLab From a3753694cb499667863364eee7c6ddf26315e558 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Sun, 18 Dec 2016 17:30:17 +0800 Subject: [PATCH 0182/1311] prepare release notes for eb302 --- RELEASE_NOTES | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 44fdf028c3..4481aaa265 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,6 +6,28 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,225 easyconfig files, for 1,123 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.0.2 (December 21st 2016) +--------------------------- + +bugfix release +- added example easyconfig files for 7 new software packages: + - BamUtil (#3904), MATSim (#3902), Molcas (#2084), ne (#3376), osmc (#3910), PLINK (#3908), PyCongent, + PyNAST (#3897), RASPA2 (#3903), SimPEG (#3876), SolexaQA++ (#3892), Subread (#3906), taco (#3882), + UCLUST, USEARCH (#3896), USPEX (#3767) +- added additional easyconfigs for various supported software packages +- added new easyconfigs for existing toolchains: + - CUDA 8.0.44 (#3940) +- various enhancements, including: + - fix long lines in Tcl description (#3893) + - trivial style fixes (t-v) + replace tabs w/ spaces (#3895) + - fileset for recent CMake versions in GCCcore compilers (#3913) + - install numpy/scipy as .egg to ensure shadowing of numpy/scipy in parent Python installation (#3921) + - fix test that verifies dumped easyconfig, take into account that dumped dependencies may include hardcoded dependency (#3932) +- various bug fixes, including: + - add X11 develop libs to ncview easyconfig (#3881) + - fix source_urls in pkg-config easyconfigs (#3907) + + v3.0.1 (November 30th 2016) --------------------------- -- GitLab From 7727f04619ae6d324ad7f1de524ffa9f944f3530 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 19 Dec 2016 11:26:11 +1300 Subject: [PATCH 0183/1311] New EasyConfig for NetLogo --- .../easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb diff --git a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb new file mode 100644 index 0000000000..fa15b824e3 --- /dev/null +++ b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb @@ -0,0 +1,31 @@ +easyblock = 'PackedBinary' + +name = 'NetLogo' +version = '5.3.1' +versionsuffix = '-64' + +homepage = 'http://ccl.northwestern.edu/netlogo/' +description = """NetLogo is a multi-agent programmable modeling environment. It +is used by tens of thousands of students, teachers and researchers worldwide. +It also powers HubNet participatory simulations. It is authored by Uri Wilensky +and developed at the CCL.""" + +# NetLogo needs Java, but no particular toolchain +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://ccl.northwestern.edu/netlogo/%(version)s/'] +sources = ['%(name)s-%(version)s%(versionsuffix)s.tgz'] + +# If the suffix (e.g., bits) is present in the expanded tarball, remove it. +#unpack_options = "--transform='s,^%(namelower)s-%(version)s%(versionsuffix)s,%(namelower)s-%(version)s,'" + +dependencies = [ + ('Java', '1.8.0_40') +] + +sanity_check_paths = { + 'files': ['NetLogo', 'NetLogo3D', 'NetLogoLogging'], + 'dirs': ['app', 'runtime'], +} + +moduleclass = 'math' -- GitLab From 8a35310c3eef9e1d5329b0f600be18cff20692d1 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 19 Dec 2016 11:28:12 +1300 Subject: [PATCH 0184/1311] Don't bother transforming the extracted src dir --- easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb | 3 --- 1 file changed, 3 deletions(-) diff --git a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb index fa15b824e3..1869d96297 100644 --- a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb +++ b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb @@ -16,9 +16,6 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://ccl.northwestern.edu/netlogo/%(version)s/'] sources = ['%(name)s-%(version)s%(versionsuffix)s.tgz'] -# If the suffix (e.g., bits) is present in the expanded tarball, remove it. -#unpack_options = "--transform='s,^%(namelower)s-%(version)s%(versionsuffix)s,%(namelower)s-%(version)s,'" - dependencies = [ ('Java', '1.8.0_40') ] -- GitLab From 652909b293ea91e488aefc98dbddf8e374569a40 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 19 Dec 2016 11:32:35 +1300 Subject: [PATCH 0185/1311] NetLogo comes with its own Java - therefore no dependencies --- easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb index 1869d96297..bd778d69d8 100644 --- a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb +++ b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb @@ -10,16 +10,13 @@ is used by tens of thousands of students, teachers and researchers worldwide. It also powers HubNet participatory simulations. It is authored by Uri Wilensky and developed at the CCL.""" -# NetLogo needs Java, but no particular toolchain +# NetLogo is precompiled and needs no particular toolchain. +# It even comes with its own Java. toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://ccl.northwestern.edu/netlogo/%(version)s/'] sources = ['%(name)s-%(version)s%(versionsuffix)s.tgz'] -dependencies = [ - ('Java', '1.8.0_40') -] - sanity_check_paths = { 'files': ['NetLogo', 'NetLogo3D', 'NetLogoLogging'], 'dirs': ['app', 'runtime'], -- GitLab From b6f65a980cfd4a07b5ece84e6acb057c9a554fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 19 Dec 2016 09:28:27 +0100 Subject: [PATCH 0186/1311] added checksums for source files --- easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb | 2 ++ .../easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb | 2 ++ 4 files changed, 8 insertions(+) diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb index f657c307da..40fc5929ce 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb @@ -25,6 +25,8 @@ toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://eddylab.org/infernal/%(namelower)s'] +checksums = ['04bc8c9693cffba371b8559f023b6548'] + sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', 'fetch', 'press', 'scan', 'search', 'stat']], diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb index 3dadbaea42..1c51f95023 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb @@ -25,6 +25,8 @@ toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://eddylab.org/infernal/%(namelower)s'] +checksums = ['04bc8c9693cffba371b8559f023b6548'] + sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', 'fetch', 'press', 'scan', 'search', 'stat']], diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb index fb8d8108e5..b8fdead078 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb @@ -25,6 +25,8 @@ toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] +checksums = ['300c208dd5550b422dd02d93c131958a'] + sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', 'fetch', 'press', 'scan', 'search', 'stat']], diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb index ff6fb44d80..e5790c46c4 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb @@ -25,6 +25,8 @@ toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] +checksums = ['300c208dd5550b422dd02d93c131958a'] + sanity_check_paths = { 'files': ['bin/cm%s' % x for x in ['align', 'build', 'calibrate', 'convert', 'emit', 'fetch', 'press', 'scan', 'search', 'stat']], -- GitLab From 06109d6ff9a0c76a8c615c7d2b9364abdc78ee74 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 19 Dec 2016 10:59:30 +0100 Subject: [PATCH 0187/1311] build Mono with --with-large-heap=yes --- easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb | 2 ++ easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb index 4cf5bdb001..4b58a5cd71 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb @@ -16,4 +16,6 @@ builddependencies = [ ('gettext', '0.19.8'), ] +configopts = "--with-large-heap=yes" + moduleclass = 'lang' diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb index 33f94e3000..ea1fdc2813 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb @@ -16,4 +16,6 @@ builddependencies = [ ('gettext', '0.19.8'), ] +configopts = "--with-large-heap=yes" + moduleclass = 'lang' -- GitLab From 70da41ea3b8d9d6d3608e5f1dd9446048e24d112 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 19 Dec 2016 11:26:54 +0100 Subject: [PATCH 0188/1311] adding easyconfigs: MyMediaLite-3.11-intel-2016b.eb --- .../m/MyMediaLite/MyMediaLite-3.11-intel-2016b.eb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.11-intel-2016b.eb diff --git a/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.11-intel-2016b.eb b/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.11-intel-2016b.eb new file mode 100644 index 0000000000..ece632eb0f --- /dev/null +++ b/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.11-intel-2016b.eb @@ -0,0 +1,14 @@ +name = 'MyMediaLite' +version = '3.11' + +homepage = 'http://www.ismll.uni-hildesheim.de/mymedialite/' +description = """MyMediaLite is a lightweight, multi-purpose library of recommender system algorithms.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.mymedialite.net/download/'] +sources = ['%(name)s-%(version)s.src.tar.gz'] + +dependencies = [('Mono', '4.6.2.7')] + +moduleclass = 'lib' -- GitLab From 4bb240f85f475406e316215161c4b117c2e9ff25 Mon Sep 17 00:00:00 2001 From: edo Date: Mon, 19 Dec 2016 12:11:18 +0100 Subject: [PATCH 0189/1311] removed comments --- .../easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb index 0a4c160172..b274210da0 100644 --- a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2016b.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.0.0 on 2016-11-21_19-05-37 name = 'Qt' version = '4.8.7' @@ -27,29 +26,3 @@ dependencies = [ ] moduleclass = 'devel' - -# Build statistics -buildstats = [{ - "build_time": 3318.3, - "command_line": ["--buildpath='/sw/easybuild/build'", '--force', "--installpath='/sw/easybuild'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/sw/easybuild/packages'", "--prefix='/sw/easybuild'", "--repositorypath='/sw/easybuild/ebfiles_repo'", "--robot='/home/AEN/80001180/obot:/sw/easybuild/software/EasyBuild/3.0.0/lib/python2.6/site-packages/easybuild_easyconfigs-3.0.0-py2.6.egg/easybuild/easyconfigs'", "--robot-paths='/home/AEN/80001180/obot:'", "--sourcepath='/sw/easybuild/sources'", "--try-toolchain='foss,2016b'", 'Qt-4.8.7-intel-2016b.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU X5670 @ 2.93GHz", - "cpu_speed": 2934.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.0.0", - "easybuild-framework_version": "3.0.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/sw/easybuild/software/GCCcore/5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/sw/easybuild/software/GCCcore/5.4.0 --with-local-prefix=/sw/easybuild/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/sw/easybuild/build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.12", - "hostname": "login1", - "install_size": 675436975, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos", - "os_type": "Linux", - "os_version": "6.6", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.6.6 (r266:84292, Jan 22 2014, 09:42:36) ; [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]", - "system_gcc_path": "/sw/easybuild/software/GCCcore/5.4.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1479751534, - "total_memory": 24150, -}] -- GitLab From 38f650c15b1e92eaa34de168b423994ed8d6bc61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 19 Dec 2016 13:45:45 +0100 Subject: [PATCH 0190/1311] fixed source_urls --- easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb | 2 +- .../easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb index 40fc5929ce..033191a3d9 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-goolf-1.4.10.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://eddylab.org/infernal/%(namelower)s'] +source_urls = ['http://eddylab.org/%(namelower)s'] checksums = ['04bc8c9693cffba371b8559f023b6548'] diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb index 1c51f95023..e7debfe98f 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1-ictce-5.3.0.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://eddylab.org/infernal/%(namelower)s'] +source_urls = ['http://eddylab.org/%(namelower)s'] checksums = ['04bc8c9693cffba371b8559f023b6548'] diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb index b8fdead078..5171c8b613 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-goolf-1.4.10.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] +source_urls = ['http://eddylab.org/%(namelower)s'] checksums = ['300c208dd5550b422dd02d93c131958a'] diff --git a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb index e5790c46c4..a1476edd29 100644 --- a/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/Infernal/Infernal-1.1rc1-ictce-5.3.0.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://eddylab.org/infernal/%s' % name.lower()] +source_urls = ['http://eddylab.org/%(namelower)s'] checksums = ['300c208dd5550b422dd02d93c131958a'] -- GitLab From 2b96deda85c1c0e290ddef6353feaf694b146d99 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 19 Dec 2016 16:34:25 +0100 Subject: [PATCH 0191/1311] RASPA2 direct running problem solution --- .../r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb index 6de866b39f..e77065d69c 100644 --- a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb @@ -18,6 +18,11 @@ dependencies = [ ('Python', '2.7.12'), ] +to_delete = '%(installdir)s/lib/python%(pyshortver)s/site-packages' +to_delete += '/RASPA2-%(version)s-py%(pyshortver)s-linux-x86_64.egg' +to_delete += '/RASPA2/simulations/lib/libraspa2.py*' +postinstallcmds = ['rm %s' % to_delete] + sanity_check_paths = { 'files': ['bin/raspa-dir', 'bin/simulate'], 'dirs': ['lib/python%(pyshortver)s/site-packages'] -- GitLab From 03bc37d52b0fff55723d9356bb60c0df5e252f90 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 20 Dec 2016 12:01:54 +0100 Subject: [PATCH 0192/1311] adding easyconfigs: Jellyfish-2.2.6-goolf-1.7.20.eb --- .../Jellyfish/Jellyfish-2.2.6-goolf-1.7.20.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/j/Jellyfish/Jellyfish-2.2.6-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/j/Jellyfish/Jellyfish-2.2.6-goolf-1.7.20.eb b/easybuild/easyconfigs/j/Jellyfish/Jellyfish-2.2.6-goolf-1.7.20.eb new file mode 100644 index 0000000000..09aa380fc6 --- /dev/null +++ b/easybuild/easyconfigs/j/Jellyfish/Jellyfish-2.2.6-goolf-1.7.20.eb @@ -0,0 +1,33 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'ConfigureMake' + +name = 'Jellyfish' +version = '2.2.6' + +homepage = 'http://www.genome.umd.edu/jellyfish.html' +description = """ Jellyfish is a tool for fast, memory-efficient counting of k-mers in DNA.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/gmarcais/Jellyfish/releases/download/v%(version)s'] +sources = [SOURCELOWER_TAR_GZ] + +parallel = 1 + +# The tests for the Bloom filter are statistical tests and can randomly fail, they actually don't make a lot of sense +runtest = "check GTEST_FILTER=-'*Bloom*'" + +postinstallcmds = ["cp config.h %(installdir)s/include/%(namelower)s-%(version)s/%(namelower)s/"] + +sanity_check_paths = { + 'files': ['bin/jellyfish'], + 'dirs': [] +} + +modextrapaths = {'CPATH': 'include/%(namelower)s-%(version)s'} + +moduleclass = 'bio' -- GitLab From d34bc662b812b57f520cc8870fb7b2a1393b53c0 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 20 Dec 2016 12:02:58 +0100 Subject: [PATCH 0193/1311] adding easyconfigs: Minia-2.0.7-goolf-1.7.20.eb --- .../m/Minia/Minia-2.0.7-goolf-1.7.20.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb new file mode 100644 index 0000000000..8523144221 --- /dev/null +++ b/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb @@ -0,0 +1,31 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "CMakeMake" + +name = 'Minia' +version = '2.0.7' + +homepage = 'http://minia.genouest.org/' +description = """Minia is a short-read assembler based on a de Bruijn graph""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/GATB/minia/releases/download/v%(version)s/'] +sources = ['%(namelower)s-v%(version)s-Source.tar.gz'] + +builddependencies = [('CMake', '3.4.3')] + +dependencies = [('zlib', '1.2.8')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ["bin/minia"], + 'dirs': [], +} + +moduleclass = 'bio' + -- GitLab From ab19a8ece21b9a84b5266fd6ff2325970f4cd7be Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 20 Dec 2016 12:03:29 +0100 Subject: [PATCH 0194/1311] adding easyconfigs: Platanus-1.2.4-goolf-1.7.20.eb --- .../p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb new file mode 100644 index 0000000000..9f312bdd69 --- /dev/null +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'MakeCp' + +name = 'Platanus' +version = '1.2.4' + +homepage = 'http://platanus.bio.titech.ac.jp/' +description = """PLATform for Assembling NUcleotide Sequences""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'openmp': True} + +# the download cannot be automated because it points to a PHP form +# http://platanus.bio.titech.ac.jp/?ddownload=150 +sources = ['%(name)s_v%(version)s.tar.gz'] + +buildopts = 'CXX="$CXX"' + +files_to_copy = [(["platanus"],'bin'), "README", "LICENSE"] + +sanity_check_paths = { + 'files': ["bin/platanus"], + 'dirs': [""], +} + +moduleclass = 'bio' -- GitLab From d526bb8f6c0a54257e7b9a2ff77ab62ade522499 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Dec 2016 12:14:04 +0100 Subject: [PATCH 0195/1311] adding easyconfigs: CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb --- .../c/CMake/CMake-3.7.1-intel-2016b.eb | 31 +++++++++++++++++++ ...MiniSat-5.0.1-intel-2016b-Python-2.7.12.eb | 27 ++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb new file mode 100644 index 0000000000..0464c9024d --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.1' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.0.2j'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..c33c7d54d9 --- /dev/null +++ b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,27 @@ +easyblock = 'CMakeMake' + +name = 'CryptoMiniSat' +version = '5.0.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/msoos/cryptominisat' +description = "CryptoMiniSat is an advanced SAT solver" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/msoos/cryptominisat/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [('Python', '2.7.12')] +builddependencies = [('CMake', '3.7.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['bin/cryptominisat%(version_major)s_simple', 'lib/libcryptominisat%%(version_major)s.%s' % SHLIB_EXT], + 'dirs': ['include/cryptominisat%(version_major)s'], +} + +sanity_check_commands = ["python -c 'import pycryptosat'"] + +moduleclass = 'tools' -- GitLab From 208a492c7f2c36d6c02d3785aa1f38ce10bd3d7e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Dec 2016 12:20:05 +0100 Subject: [PATCH 0196/1311] adding easyconfigs: vsc-mympirun-scoop-3.4.1-intel-2016b-Python-2.7.12.eb --- ...eenlet-0.4.11-intel-2016b-Python-2.7.12.eb | 30 +++++++++++++++++++ .../SCOOP-0.6.2-intel-2016b-Python-2.7.12.eb | 27 +++++++++++++++++ ...n-scoop-3.4.1-intel-2016b-Python-2.7.12.eb | 29 ++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 easybuild/easyconfigs/g/Greenlet/Greenlet-0.4.11-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/SCOOP/SCOOP-0.6.2-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/v/vsc-mympirun-scoop/vsc-mympirun-scoop-3.4.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/g/Greenlet/Greenlet-0.4.11-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/Greenlet/Greenlet-0.4.11-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..93d3caf46d --- /dev/null +++ b/easybuild/easyconfigs/g/Greenlet/Greenlet-0.4.11-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'Greenlet' +version = '0.4.11' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/python-greenlet/greenlet' +description = """The greenlet package is a spin-off of Stackless, a version of CPython that +supports micro-threads called "tasklets". Tasklets run pseudo-concurrently (typically in a single +or a few OS-level threads) and are synchronized with data exchanges on "channels". +A "greenlet", on the other hand, is a still more primitive notion of micro-thread with no implicit +scheduling; coroutines, in other words. This is useful when you want to control exactly when your code runs. +""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_ZIP] + +patches = ['Greenlet-0.4.2_icc_no_amd64_predefined_in_prepocessor.patch'] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': ['include/python%(pyshortver)s/greenlet/greenlet.h', + 'lib/python%(pyshortver)s/site-packages/greenlet.so'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/SCOOP/SCOOP-0.6.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SCOOP/SCOOP-0.6.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..b9287e35c2 --- /dev/null +++ b/easybuild/easyconfigs/s/SCOOP/SCOOP-0.6.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'SCOOP' +version = '0.6.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://pyscoop.org' +description = """SCOOP (Scalable COncurrent Operations in Python) is a distributed task module + allowing concurrent parallel programming on various environments, from heterogeneous grids to supercomputers.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/soravux/scoop/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), # python with builtin argparse + ('Greenlet', '0.4.11', versionsuffix), + ('PyZMQ', '16.0.2', versionsuffix + '-zmq4'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/v/vsc-mympirun-scoop/vsc-mympirun-scoop-3.4.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/v/vsc-mympirun-scoop/vsc-mympirun-scoop-3.4.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..fa730a6cad --- /dev/null +++ b/easybuild/easyconfigs/v/vsc-mympirun-scoop/vsc-mympirun-scoop-3.4.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,29 @@ +easyblock = 'VSCPythonPackage' + +name = 'vsc-mympirun-scoop' +version = '3.4.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://hpcugent.github.com/vsc-mympirun/' +description = """VSC-tools is a set of Python libraries and scripts that are commonly used within HPC-UGent.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/hpcugent/vsc-mympirun-scoop/archive/'] + +dependencies = [ + ('vsc-processcontrol', '1.0', '-vsc-base-2.1.2', True), + ('vsc-mympirun', '3.4.2', '', True), + ('Python', '2.7.12'), + ('SCOOP', '0.6.2', versionsuffix), +] + +options = {'modulename': 'vsc.mympirun.scoop'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/vsc/mympirun/scoop'], +} + +moduleclass = 'tools' -- GitLab From 018cf708d5ab6cff3b01778c7051ed873bdf3c58 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Dec 2016 14:01:43 +0100 Subject: [PATCH 0197/1311] include Boost dep for CryptoMiniSat, also check for bin/cryptominisat5 --- .../CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb index c33c7d54d9..dbc77180d7 100644 --- a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb @@ -12,13 +12,16 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/msoos/cryptominisat/archive/'] sources = ['%(version)s.tar.gz'] -dependencies = [('Python', '2.7.12')] +dependencies = [ + ('Python', '2.7.12'), + ('Boost', '1.61.0', versionsuffix), +] builddependencies = [('CMake', '3.7.1')] separate_build_dir = True sanity_check_paths = { - 'files': ['bin/cryptominisat%(version_major)s_simple', 'lib/libcryptominisat%%(version_major)s.%s' % SHLIB_EXT], + 'files': ['bin/cryptominisat%(version_major)s', 'lib/libcryptominisat%%(version_major)s.%s' % SHLIB_EXT], 'dirs': ['include/cryptominisat%(version_major)s'], } -- GitLab From 7a218bdba483424f44e8d65e38cd28d02b26722b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Dec 2016 14:41:43 +0100 Subject: [PATCH 0198/1311] fix install location of Python bindings for CryptoMiniSat --- ...CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb | 7 ++++++- .../CryptoMiniSat-5.0.1_fix-python-prefix.patch | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1_fix-python-prefix.patch diff --git a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb index dbc77180d7..28c7775c76 100644 --- a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1-intel-2016b-Python-2.7.12.eb @@ -11,6 +11,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/msoos/cryptominisat/archive/'] sources = ['%(version)s.tar.gz'] +patches = ['CryptoMiniSat-%(version)s_fix-python-prefix.patch'] dependencies = [ ('Python', '2.7.12'), @@ -20,9 +21,13 @@ builddependencies = [('CMake', '3.7.1')] separate_build_dir = True +configopts = "-DPYTHON_PACKAGES_PATH=%(installdir)s/lib/python%(pyshortver)s/site-packages" + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + sanity_check_paths = { 'files': ['bin/cryptominisat%(version_major)s', 'lib/libcryptominisat%%(version_major)s.%s' % SHLIB_EXT], - 'dirs': ['include/cryptominisat%(version_major)s'], + 'dirs': ['include/cryptominisat%(version_major)s', 'lib/python%(pyshortver)s/site-packages'], } sanity_check_commands = ["python -c 'import pycryptosat'"] diff --git a/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1_fix-python-prefix.patch b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1_fix-python-prefix.patch new file mode 100644 index 0000000000..27de192b01 --- /dev/null +++ b/easybuild/easyconfigs/c/CryptoMiniSat/CryptoMiniSat-5.0.1_fix-python-prefix.patch @@ -0,0 +1,13 @@ +install Python bindings into same CryptoMiniSat-specific installation directory rather than in Python installation directory +author: Kenneth Hoste (HPC-UGent) +--- cryptominisat-5.0.1/python/CMakeLists.txt.orig 2016-12-20 14:29:51.756760945 +0100 ++++ cryptominisat-5.0.1/python/CMakeLists.txt 2016-12-20 14:29:59.786688501 +0100 +@@ -14,7 +14,7 @@ + + add_custom_target(python_interface ALL DEPENDS ${OUTPUT}/timestamp) + +-install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install --record files.txt)") ++install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install --prefix ${CMAKE_INSTALL_PREFIX} --record files.txt)") + + if (ENABLE_TESTING) + add_test (NAME pytest -- GitLab From ded06909a7e657c3ed5c121d697f42120d29b8c1 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 20 Dec 2016 15:30:09 +0100 Subject: [PATCH 0199/1311] comment and simplify postinstallcmds --- .../r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb index e77065d69c..b11e63c026 100644 --- a/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/r/RASPA2/RASPA2-2.0.3-intel-2016b-Python-2.7.12.eb @@ -18,10 +18,8 @@ dependencies = [ ('Python', '2.7.12'), ] -to_delete = '%(installdir)s/lib/python%(pyshortver)s/site-packages' -to_delete += '/RASPA2-%(version)s-py%(pyshortver)s-linux-x86_64.egg' -to_delete += '/RASPA2/simulations/lib/libraspa2.py*' -postinstallcmds = ['rm %s' % to_delete] +# remove stub loader for libraspa2.so, it causes problems like "invalid ELF header" and is not really needed anyway +postinstallcmds = ["rm %(installdir)s/lib/python*/site-packages/*.egg/RASPA2/simulations/lib/libraspa2.py*"] sanity_check_paths = { 'files': ['bin/raspa-dir', 'bin/simulate'], -- GitLab From a7b7e4572d42ebd0a4df052fcc1db67b0f0f3a19 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 20 Dec 2016 21:50:57 +0100 Subject: [PATCH 0200/1311] added patch for freesurfer --- .../FreeSurfer-5.3.0-centos6_x86_64.eb | 2 ++ .../FreeSurfer-5.3.0-matlab-2013.patch | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-matlab-2013.patch diff --git a/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-centos6_x86_64.eb b/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-centos6_x86_64.eb index 9edb3efbfd..8d5cb684a5 100644 --- a/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-centos6_x86_64.eb +++ b/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-centos6_x86_64.eb @@ -12,6 +12,8 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['%(namelower)s-Linux%(versionsuffix)s-stable-pub-v%(version)s.tar.gz'] source_urls = ['ftp://surfer.nmr.mgh.harvard.edu/pub/dist/%(namelower)s/%(version)s'] +patches = ['FreeSurfer-5.3.0-matlab-2013.patch'] + license_text = """email@example.com 00000 g1bb3r1sh""" diff --git a/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-matlab-2013.patch b/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-matlab-2013.patch new file mode 100644 index 0000000000..a713512b02 --- /dev/null +++ b/easybuild/easyconfigs/f/FreeSurfer/FreeSurfer-5.3.0-matlab-2013.patch @@ -0,0 +1,17 @@ +this patch fixes an issue when using MATLAB 2013 or higher. +Details in https://mail.nmr.mgh.harvard.edu/pipermail//freesurfer/2016-March/044183.html +--- freesurfer.orig/matlab/SearchProjectionOnPial.m 2013-05-13 23:34:06.000000000 +0200 ++++ freesurfer/matlab/SearchProjectionOnPial.m 2016-12-20 21:37:40.732901000 +0100 +@@ -4,7 +4,11 @@ + % limit redundancies in the resulting path file. + + verticeslist=[]; +-for t=1:step:size(perim,2) ++% this file has been patched as described in ++% https://mail.nmr.mgh.harvard.edu/pipermail//freesurfer/2016-March/044183.html ++%for t=1:step:size(perim,2) ++si=max(size(perim)); ++for t=1:step:si + [nearestIndexMT,nearestValuesMT]=mesh_vertex_nearest(mesh_total.vertices,mesh_outer.vertices(perim(t),:)); + verticeslist= [verticeslist nearestIndexMT]; + end -- GitLab From c94b1472efe3ed1a05d109ad23a8ff919ba29411 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Dec 2016 09:29:32 +0100 Subject: [PATCH 0201/1311] bump version to 3.0.2 + minor changes/updates to release notes --- RELEASE_NOTES | 28 ++++++++++++++-------------- setup.py | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 4481aaa265..3ed16807e4 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,29 +3,29 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,225 easyconfig files, for 1,123 different software packages, +The latest version of easybuild-easyconfig provides 6,225 easyconfig files, for 1,136 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. -v3.0.2 (December 21st 2016) +v3.0.2 (December 22nd 2016) --------------------------- bugfix release -- added example easyconfig files for 7 new software packages: - - BamUtil (#3904), MATSim (#3902), Molcas (#2084), ne (#3376), osmc (#3910), PLINK (#3908), PyCongent, - PyNAST (#3897), RASPA2 (#3903), SimPEG (#3876), SolexaQA++ (#3892), Subread (#3906), taco (#3882), - UCLUST, USEARCH (#3896), USPEX (#3767) -- added additional easyconfigs for various supported software packages -- added new easyconfigs for existing toolchains: - - CUDA 8.0.44 (#3940) +- added example easyconfig files for 13 new software packages: + - CryptoMiniSat (#3952), MATSim (#3902), Molcas (#2084), ne (#3376), psmc (#3910), PyCogent (#3897), + PyNAST (#3897), RASPA2 (#3903, #3946), SimPEG (#3876), SolexaQA++ (#3892), taco (#3882), + UCLUST (#3896), USPEX (#3767) +- added additional easyconfigs for various supported software packages, including: + - Mono 4.6.2.7, PGI 16.10, ROOT 6.08.02 - various enhancements, including: - - fix long lines in Tcl description (#3893) - - trivial style fixes (t-v) + replace tabs w/ spaces (#3895) - - fileset for recent CMake versions in GCCcore compilers (#3913) - - install numpy/scipy as .egg to ensure shadowing of numpy/scipy in parent Python installation (#3921) - - fix test that verifies dumped easyconfig, take into account that dumped dependencies may include hardcoded dependency (#3932) + - trivial style fixes (#3878, #3893, #3895) - various bug fixes, including: - add X11 develop libs to ncview easyconfig (#3881) - fix source_urls in pkg-config easyconfigs (#3907) + - install numpy/scipy as .egg to ensure shadowing of numpy/scipy in parent Python installation (#3921) + - fix broken source URL + homepage for Infernal (#3928) + - fix test that verifies dumped easyconfig, take into account that dumped dependencies may include hardcoded dependency (#3932) + - include libGLU as dependency in freeglut easyconfigs with recent Mesa (#3936) + - add patch for FreeSurfer to fix issue with MATLAB 2013 (#3954) v3.0.1 (November 30th 2016) diff --git a/setup.py b/setup.py index 003be273e7..3979a91f64 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.1.0.dev0' +VERSION = '3.0.2' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 46e2a74612f995049c41f42e5a0321b93bd64ad1 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 21 Dec 2016 12:41:01 +0100 Subject: [PATCH 0202/1311] added missing cmake easyconfig --- .../c/CMake/CMake-3.4.3-goolf-1.7.20.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb new file mode 100644 index 0000000000..383be7ac07 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.4.3' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +dependencies = [ + ('ncurses', '5.9'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.0.1p'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 06b3f5dbc9df4fb041f2d556a33105479c3fe85a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Dec 2016 12:20:15 +0100 Subject: [PATCH 0203/1311] adding easyconfigs: EasyBuild-3.0.2.eb --- .../e/EasyBuild/EasyBuild-3.0.2.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.0.2.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.0.2.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.0.2.eb new file mode 100644 index 0000000000..708295ab3c --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.0.2.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.0.2' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/aa/d9/7dc5b88a5644975683b4df1d0a16be90f6af4598528aa68dba27f7f3c532', + # vsc-base + 'https://pypi.python.org/packages/73/24/e4244a743e0cfc4af1f3b3b772698e2f4dafc7052bc006a1b829b66f7a3a', + # easybuild-framework + 'https://pypi.python.org/packages/b3/cd/d9720621804e083e2ef7ffa4a746f011933a4f1314d6d34e871517d3cb5c', + # easybuild-easyblocks + 'https://pypi.python.org/packages/6e/b8/77f635112bb78799195e31053d3827e86c07c635ac9ac03d691d7fc6f655', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/05/92/c39b8430f27a028d7c9065ad80639c15c5f11844012801937e24435a262f', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.21.tar.gz', + 'vsc-base-2.5.5.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From 95a8a8ebeb6e358b8ce4ce24a8e6903e5f2421d7 Mon Sep 17 00:00:00 2001 From: edo Date: Thu, 22 Dec 2016 12:58:28 +0100 Subject: [PATCH 0204/1311] adding easyconfigs: libpciaccess-0.13.4-foss-2016a.eb --- .../l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb index c39482e40c..0baaea5ccf 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'foss', 'version': '2016a'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], -- GitLab From f7d2a6301a6361eebeef69b1c1cc190f590e73a3 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 29 Dec 2016 14:15:05 +0000 Subject: [PATCH 0205/1311] Update GSL to 2.3 for foss-2016b --- .../easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb new file mode 100644 index 0000000000..35f4331406 --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = '2.3' + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions + and least-squares fitting.""" + +toolchain = {'version': '2016b', 'name': 'foss'} +toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +configopts = '--with-pic' + +moduleclass = 'numlib' -- GitLab From 14d63fa65ccf60fe9df28d560aebdb5961fa957a Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 29 Dec 2016 14:20:08 +0000 Subject: [PATCH 0206/1311] Update EIGENSORT to 6.1.4 for foss-2016b --- .../e/EIGENSOFT/EIGENSOFT-6.1.4-foss-2016b.eb | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.4-foss-2016b.eb b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.4-foss-2016b.eb new file mode 100644 index 0000000000..5b6b65198e --- /dev/null +++ b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.4-foss-2016b.eb @@ -0,0 +1,49 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# 6.1.4 modified by: +# Adam Huffman +# The Francis Crick Institute + +# Provided binaries required OpenBLAS and GSL libraries + +easyblock = 'MakeCp' + +name = 'EIGENSOFT' +version = '6.1.4' + +homepage = 'http://www.hsph.harvard.edu/alkes-price/software/' +description = """The EIGENSOFT package combines functionality from our population genetics methods (Patterson et al. +2006) and our EIGENSTRAT stratification correction method (Price et al. 2006). The EIGENSTRAT method uses principal +components analysis to explicitly model ancestry differences between cases and controls along continuous axes of +variation; the resulting correction is specific to a candidate marker’s variation in frequency across ancestral +populations, minimizing spurious associations while maximizing power to detect true associations. The EIGENSOFT +package has a built-in plotting script and supports multiple file formats and quantitative phenotypes.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'https://data.broadinstitute.org/alkesgroup/EIGENSOFT/', + 'https://data.broadinstitute.org/alkesgroup/EIGENSOFT/OLD/' +] +sources = ['EIG-%(version)s.tar.gz'] + +dependencies = [ + ('GSL', '2.3'), +] + +# -lm and -pthread are missing in the Makefile +# also run "make install" after make to copy all binaries to the bin dir +buildopts = 'LDLIBS="-lgsl $LIBBLAS -lrt -lm" LDFLAGS="$LDFLAGS -pthread" && make install' + +start_dir = 'src' + +files_to_copy = ['bin', 'CONVERTF', 'EIGENSTRAT', 'POPGEN', 'README'] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["baseprog", "convertf", "eigenstrat", "eigenstratQTL"]], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 4fc696c30669917e29f22d4d80c245ba1b42c754 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 29 Dec 2016 14:21:16 +0000 Subject: [PATCH 0207/1311] Fix toolchain order --- easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb index 35f4331406..b5798d1552 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb @@ -8,7 +8,7 @@ description = """The GNU Scientific Library (GSL) is a numerical library for C a The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting.""" -toolchain = {'version': '2016b', 'name': 'foss'} +toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -- GitLab From 52ec3b03afb70192a0b3958335d9342d44722532 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 29 Dec 2016 18:20:42 +0000 Subject: [PATCH 0208/1311] Kraken for foss-2016b, plus deps --- .../Jellyfish/Jellyfish-1.1.11-foss-2016b.eb | 29 ++++++++++++ ...aken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb | 44 +++++++++++++++++++ .../l/libidn/libidn-1.32-foss-2016b.eb | 19 ++++++++ .../w/wget/wget-1.17.1-foss-2016b.eb | 40 +++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 easybuild/easyconfigs/j/Jellyfish/Jellyfish-1.1.11-foss-2016b.eb create mode 100644 easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb create mode 100644 easybuild/easyconfigs/l/libidn/libidn-1.32-foss-2016b.eb create mode 100644 easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/j/Jellyfish/Jellyfish-1.1.11-foss-2016b.eb b/easybuild/easyconfigs/j/Jellyfish/Jellyfish-1.1.11-foss-2016b.eb new file mode 100644 index 0000000000..6acf8320e7 --- /dev/null +++ b/easybuild/easyconfigs/j/Jellyfish/Jellyfish-1.1.11-foss-2016b.eb @@ -0,0 +1,29 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# Foss-2016b version +# modified by: +# Adam Huffman +# The Francis Crick Institute +easyblock = 'ConfigureMake' + +name = 'Jellyfish' +version = '1.1.11' + +homepage = 'http://www.cbcb.umd.edu/software/jellyfish/' +description = """ Jellyfish is a tool for fast, memory-efficient counting of k-mers in DNA.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.cbcb.umd.edu/software/jellyfish/'] +sources = [SOURCELOWER_TAR_GZ] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/jellyfish'], + 'dirs': [] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..8814a7c92c --- /dev/null +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb @@ -0,0 +1,44 @@ +easyblock = 'PackedBinary' + +name = 'Kraken' +version = '0.10.5-beta' +versionsuffix='-Perl-%(perlver)s' + +homepage = 'http://ccb.jhu.edu/software/kraken/' +description = """Kraken is a system for assigning taxonomic labels to short DNA sequences, + usually obtained through metagenomic studies. Previous attempts by other + bioinformatics software to accomplish this task have often used sequence + alignment or machine learning techniques that were quite slow, leading to + the development of less sensitive but much faster abundance estimation + programs. Kraken aims to achieve high sensitivity and high speed by + utilizing exact alignments of k-mers and a novel classification algorithm.""" + +#Part is compiled with CXX, the rest is in Perl +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'openmp': True} + +source_urls = ['http://ccb.jhu.edu/software/kraken/dl/'] +sources = [SOURCELOWER_TGZ] + +patches = ['Kraken_%(version)s_makefile.patch'] + +dependencies = [ + ('Perl', '5.24.0'), + ('Jellyfish', '1.1.11'), + ('wget', '1.17.1'), +] + +install_cmd = 'cd %(builddir)s/%(namelower)s-%(version)s && ' +install_cmd += './install_kraken.sh %(installdir)s' + +sanity_check_paths = { + 'files': ['add_to_library.sh', 'build_kraken_db.sh', 'check_for_jellyfish.sh', 'classify', 'clean_db.sh', + 'cp_into_tempfile.pl', 'db_shrink', 'db_sort', 'download_genomic_library.sh', + 'download_taxonomy.sh', 'kraken', 'kraken-build', 'kraken-filter', 'krakenlib.pm', + 'kraken-mpa-report', 'kraken-report', 'kraken-translate', 'make_seqid_to_taxid_map', + 'read_merger.pl', 'report_gi_numbers.pl', 'set_lcas', 'shrink_db.sh', + 'standard_installation.sh', 'upgrade_db.sh', 'verify_gi_numbers.pl'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/l/libidn/libidn-1.32-foss-2016b.eb b/easybuild/easyconfigs/l/libidn/libidn-1.32-foss-2016b.eb new file mode 100644 index 0000000000..d505fd0deb --- /dev/null +++ b/easybuild/easyconfigs/l/libidn/libidn-1.32-foss-2016b.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'libidn' +version = '1.32' + +homepage = 'http://www.gnu.org/software/libidn' +description = """GNU Libidn is a fully documented implementation of the Stringprep, Punycode and IDNA specifications. +Libidn's purpose is to encode and decode internationalized domain names.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/idn', 'lib/libidn.%s' % SHLIB_EXT], + 'dirs': ['include'], +} +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016b.eb b/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016b.eb new file mode 100644 index 0000000000..10ef0d42d4 --- /dev/null +++ b/easybuild/easyconfigs/w/wget/wget-1.17.1-foss-2016b.eb @@ -0,0 +1,40 @@ +easyblock = 'ConfigureMake' + +name = 'wget' +version = '1.17.1' + +homepage = 'https://www.gnu.org/software/wget/' +description = """GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, + the most widely-used Internet protocols. It is a non-interactive commandline tool, + so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('PCRE', '8.38'), + ('libidn', '1.32'), + ('zlib', '1.2.8'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1s'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date gnutls for security reasons + # ('GnuTLS', '3.4.11'), +] + +configopts = '--with-ssl=openssl ' + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] +# Optionally, you can use gnutls (default) instead of OpenSSL. +# Do not forget to comment out configopts in that case. +# osdependencies = [('gnutls-devel', 'gnutls-dev', 'libgnutls-devel')] + +sanity_check_paths = { + 'files': ['bin/wget'], + 'dirs': [] +} + +moduleclass = 'devel' -- GitLab From 6c6f05da815195db82a0b9960cbb575dce53cc01 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 3 Jan 2017 18:46:15 +0100 Subject: [PATCH 0209/1311] adding easyconfigs: zlib-1.2.10.eb --- easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb new file mode 100644 index 0000000000..02bb809a0b --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.10' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} +toolchainopts = {'pic': True} + +source_urls = ['http://zlib.net/'] +sources = [SOURCELOWER_TAR_GZ] + +# need to take care of $CFLAGS ourselves with dummy toolchain +# we need to add -fPIC, but should also include -O* option to avoid compiling with -O0 (default for GCC) +buildopts = 'CFLAGS="-O2 -fPIC"' + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 6ec49b353f0b3f457afee3fc6382ed0e2cd7a440 Mon Sep 17 00:00:00 2001 From: Andreas Hilboll Date: Wed, 27 Jul 2016 22:07:48 +0200 Subject: [PATCH 0210/1311] ENH: add easyconfig for WPS3.8 --- .../w/WPS/WPS-3.8-intel-2016a-dmpar.eb | 35 +++++++++++++++++++ .../w/WPS/WPS-3.8_fix_known_problems.patch | 28 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb create mode 100644 easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb new file mode 100644 index 0000000000..8ee829c884 --- /dev/null +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb @@ -0,0 +1,35 @@ +name = 'WPS' +version = '3.8' + +homepage = 'http://www.wrf-model.org' +description = """WRF Preprocessing System (WPS) for WRF. The Weather Research and Forecasting (WRF) Model is + a next-generation mesoscale numerical weather prediction system designed to serve both operational + forecasting and atmospheric research needs.""" + +toolchain = {'name': 'intel', 'version': '2016a'} +toolchainopts = {'opt': True} + +sources = ['%(name)sV%(version)s.TAR.gz'] +source_urls = [ + 'http://www2.mmm.ucar.edu/wrf/src/', + 'http://www.mmm.ucar.edu/wrf/src/', +] + +checksums = ['2ab4e4ddae4e105432c18c59819a4523'] + +patches = ['WPS-%(version)s_netCDF-Fortran_seperate_path.patch', + 'WPS-%(version)s_fix_known_problems.patch'] + +buildtype = "dmpar" +versionsuffix = '-%s' % buildtype + +dependencies = [ + ('WRF', version, versionsuffix), + ('netCDF', '4.4.0'), + ('netCDF-Fortran', '4.4.2'), + ('zlib', '1.2.8'), + ('libpng', '1.6.21'), + ('JasPer', '1.900.1'), +] + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch b/easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch new file mode 100644 index 0000000000..e03a2fbc76 --- /dev/null +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch @@ -0,0 +1,28 @@ +--- WPS.orig/ungrib/src/rd_grib1.F 2013-06-08 00:48:10.000000000 +0200 ++++ WPS/ungrib/src/rd_grib1.F 2016-07-26 11:02:19.021497705 +0200 +@@ -406,7 +406,7 @@ + !print *,'new dx = ',map%dx + endif + endif +- if ( ABS((map%ny-1) * map%dy - 2.*abs(map%lat1)) .lt. 1 ) then ++ if ( ABS((map%ny-1) * map%dy - 2.*abs(map%lat1)) .lt. 1. ) then + if ( ABS ( map%dy - (2.*abs(map%lat1)/real(map%ny-1)) ) .gt. 0.00001 ) then + !print *,'old dy = ',ginfo(9) + map%dy = 2.*abs(map%lat1)/real(map%ny-1) +@@ -471,6 +471,16 @@ + map%lat1 = ginfo(3) + write(tmp8,'(b8.8)') infogrid(5) + if (tmp8(5:5) .eq. '0') map%grid_wind = .false. ++! If this is global data, then the dx and dy are more accurately ++! computed by the number of points than the 3 digits grib permits. ++ if ( ABS(map%nx * map%dx - 360.) .lt. 1. ) then ++ if ( ABS ( map%dx - (360./real(map%nx)) ) .gt. 0.00001 ) then ++ ! print *,'old dx = ',ginfo(8) ++ map%dx = 360./real(map%nx) ++ ! print *,'new dx = ',map%dx ++ endif ++ endif ++ + + elseif (ksec2(4).eq.5) then ! Polar-Stereographic Grid. + map%igrid = 5 -- GitLab From 8b44bad8fda472d2a58e14311618d726e9c731f2 Mon Sep 17 00:00:00 2001 From: Andreas Hilboll Date: Wed, 27 Jul 2016 22:25:32 +0200 Subject: [PATCH 0211/1311] DOC: add comment about WPS known problems --- easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb index 8ee829c884..1b72f4dbcc 100644 --- a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb @@ -17,6 +17,8 @@ source_urls = [ checksums = ['2ab4e4ddae4e105432c18c59819a4523'] +# patches for known problems as of 27 Jul 2016, see +# http://www2.mmm.ucar.edu/wrf/users/wpsv3.8/known-prob-3.8.html patches = ['WPS-%(version)s_netCDF-Fortran_seperate_path.patch', 'WPS-%(version)s_fix_known_problems.patch'] -- GitLab From b4b41745a58a975734a514860606b6b68706cd47 Mon Sep 17 00:00:00 2001 From: Andreas Hilboll Date: Wed, 17 Aug 2016 15:48:26 +0200 Subject: [PATCH 0212/1311] BUG: rename patch file --- ...rate_path.patch => WPS-3.8_netCDF-Fortran_seperate_path.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/w/WPS/{WPS_netCDF-Fortran_seperate_path.patch => WPS-3.8_netCDF-Fortran_seperate_path.patch} (100%) diff --git a/easybuild/easyconfigs/w/WPS/WPS_netCDF-Fortran_seperate_path.patch b/easybuild/easyconfigs/w/WPS/WPS-3.8_netCDF-Fortran_seperate_path.patch similarity index 100% rename from easybuild/easyconfigs/w/WPS/WPS_netCDF-Fortran_seperate_path.patch rename to easybuild/easyconfigs/w/WPS/WPS-3.8_netCDF-Fortran_seperate_path.patch -- GitLab From 1b41f2d29ce7f43ac6040e075b973f199c191be3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 10 Nov 2016 22:52:56 +0100 Subject: [PATCH 0213/1311] restore original name of WPS patch file as it is used by other existing easyconfigs --- easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb | 6 ++++-- ...te_path.patch => WPS_netCDF-Fortran_seperate_path.patch} | 0 2 files changed, 4 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/w/WPS/{WPS-3.8_netCDF-Fortran_seperate_path.patch => WPS_netCDF-Fortran_seperate_path.patch} (100%) diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb index 1b72f4dbcc..c426109e50 100644 --- a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb @@ -19,8 +19,10 @@ checksums = ['2ab4e4ddae4e105432c18c59819a4523'] # patches for known problems as of 27 Jul 2016, see # http://www2.mmm.ucar.edu/wrf/users/wpsv3.8/known-prob-3.8.html -patches = ['WPS-%(version)s_netCDF-Fortran_seperate_path.patch', - 'WPS-%(version)s_fix_known_problems.patch'] +patches = [ + 'WPS_netCDF-Fortran_seperate_path.patch', + 'WPS-%(version)s_fix_known_problems.patch', +] buildtype = "dmpar" versionsuffix = '-%s' % buildtype diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8_netCDF-Fortran_seperate_path.patch b/easybuild/easyconfigs/w/WPS/WPS_netCDF-Fortran_seperate_path.patch similarity index 100% rename from easybuild/easyconfigs/w/WPS/WPS-3.8_netCDF-Fortran_seperate_path.patch rename to easybuild/easyconfigs/w/WPS/WPS_netCDF-Fortran_seperate_path.patch -- GitLab From 663b1224cabaf0d494039dc95a0d443ddfd52c97 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Jan 2017 14:34:18 +0100 Subject: [PATCH 0214/1311] adding easyconfigs: HPL-2.2-foss-2017a.eb --- .../b/Bison/Bison-3.0.4-GCCcore-6.3.0.eb | 27 +++++++++ .../b/binutils/binutils-2.27-GCCcore-6.3.0.eb | 21 +++++++ .../f/FFTW/FFTW-3.3.5-gompi-2017a.eb | 35 ++++++++++++ .../f/flex/flex-2.6.3-GCCcore-6.3.0.eb | 24 ++++++++ easybuild/easyconfigs/f/foss/foss-2017a.eb | 35 ++++++++++++ easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.27.eb | 25 +++++++++ .../easyconfigs/g/GCCcore/GCCcore-6.3.0.eb | 54 ++++++++++++++++++ easybuild/easyconfigs/g/gompi/gompi-2017a.eb | 20 +++++++ .../easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb | 18 ++++++ .../help2man/help2man-1.47.4-GCCcore-6.3.0.eb | 24 ++++++++ .../h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb | 23 ++++++++ .../m/M4/M4-1.4.18-GCCcore-6.3.0.eb | 28 ++++++++++ .../numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb | 23 ++++++++ ...BLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb | 55 +++++++++++++++++++ .../o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb | 33 +++++++++++ ...ompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb | 25 +++++++++ .../z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb | 25 +++++++++ 17 files changed, 495 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb create mode 100644 easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/f/foss/foss-2017a.eb create mode 100644 easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/g/gompi/gompi-2017a.eb create mode 100644 easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb create mode 100644 easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb create mode 100644 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-6.3.0.eb b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..76ea1be843 --- /dev/null +++ b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-6.3.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'Bison' +version = '3.0.4' + +homepage = 'http://www.gnu.org/software/bison' +description = """Bison is a general-purpose parser generator that converts an annotated context-free grammar + into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('M4', '1.4.18'), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["bison", "yacc"]] + ["lib/liby.a"], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb b/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..27418ca0e7 --- /dev/null +++ b/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb @@ -0,0 +1,21 @@ +name = 'binutils' +version = '2.27' + +homepage = 'http://directory.fsf.org/project/binutils/' +description = "binutils: GNU binary utilities" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + # zlib required, but being linked in statically, so not a runtime dep + ('zlib', '1.2.10'), + # use same binutils version that was used when building GCC toolchain, to 'bootstrap' this binutils + ('binutils', version, '', True) +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb new file mode 100644 index 0000000000..6975badd80 --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'FFTW' +version = '3.3.5' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'gompi', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [homepage] + +# FIXME +common_configopts = "--enable-threads --enable-openmp --with-pic" + +configopts = [ + common_configopts + " --enable-single --enable-sse2 --enable-mpi", + common_configopts + " --enable-long-double --enable-mpi", + common_configopts + " --enable-quad-precision", + common_configopts + " --enable-sse2 --enable-mpi", # default as last +] + +sanity_check_paths = { + 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + + ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', + '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + + ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + + ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..e7dd6de964 --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-6.3.0.eb @@ -0,0 +1,24 @@ +name = 'flex' +version = '2.6.3' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/'] + +checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] + +dependencies = [('M4', '1.4.18')] +builddependencies = [ + ('Bison', '3.0.4'), + ('help2man', '1.47.4'), + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/f/foss/foss-2017a.eb b/easybuild/easyconfigs/f/foss/foss-2017a.eb new file mode 100644 index 0000000000..58f252b974 --- /dev/null +++ b/easybuild/easyconfigs/f/foss/foss-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'Toolchain' + +name = 'foss' +version = '2017a' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain, including + OpenMPI for MPI support, OpenBLAS (BLAS and LAPACK support), FFTW and ScaLAPACK.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +gccver = '6.3.0-2.27' + +blaslib = 'OpenBLAS' +blasver = '0.2.19' +blas = '%s-%s' % (blaslib, blasver) +blassuff = '-LAPACK-3.6.1' + +# toolchain used to build foss dependencies +comp_mpi_tc_name = 'gompi' +comp_mpi_tc = (comp_mpi_tc_name, version) + +# compiler toolchain depencies +# we need GCC and OpenMPI as explicit dependencies instead of gompi toolchain +# because of toolchain preperation functions +# For binutils, stick to http://wiki.osdev.org/Cross-Compiler_Successful_Builds +dependencies = [ + ('GCC', gccver), + ('OpenMPI', '2.0.2', '', ('GCC', gccver)), + (blaslib, blasver, blassuff, ('GCC', gccver)), + ('FFTW', '3.3.5', '', comp_mpi_tc), # FIXME: --enable-sse2 --enable-avx --enable-avx2 --enable-avx512 + ('ScaLAPACK', '2.0.2', '-%s%s' % (blas, blassuff), comp_mpi_tc), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..93f922e6d0 --- /dev/null +++ b/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.27.eb @@ -0,0 +1,25 @@ +easyblock = 'Bundle' + +name = 'GCC' +version = '6.3.0' + +binutilsver = '2.27' +versionsuffix = '-%s' % binutilsver + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +dependencies = [ + ('GCCcore', version), + # binutils built on top of GCCcore, which was built on top of (dummy-built) binutils + ('binutils', binutilsver, '', ('GCCcore', version)), +] + +altroot = 'GCCcore' +altversion = 'GCCcore' + +# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb new file mode 100644 index 0000000000..725e558810 --- /dev/null +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb @@ -0,0 +1,54 @@ +easyblock = 'EB_GCC' + +name = 'GCCcore' +version = '6.3.0' + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +mpfr_version = '3.1.5' + +source_urls = [ + 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://www.multiprecision.org/mpc/download', # MPC official + 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies + 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL +] + +sources = [ + 'gcc-%(version)s.tar.bz2', + 'gmp-6.1.1.tar.bz2', + 'mpfr-%s.tar.bz2' % mpfr_version, + 'mpc-1.0.3.tar.gz', + 'isl-0.16.1.tar.bz2', +] + +builddependencies = [ + ('M4', '1.4.17'), + ('binutils', '2.27'), +] + +patches = [ + ('mpfr-%s-allpatches-20161215.patch' % mpfr_version, '../mpfr-%s' % mpfr_version), + 'GCCcore-6.2.0-fix-find-isl.patch', +] + +checksums = [ + '677a7623c7ef6ab99881bc4e048debb6', # gcc-6.3.0.tar.bz2 + '4c175f86e11eb32d8bf9872ca3a8e11d', # gmp-6.1.1.tar.bz2 + 'b1d23a55588e3b2a13e3be66bc69fd8d', # mpfr-3.1.5.tar.gz + 'd6a1d5f8ddea3abd2cc3e98f58352d26', # mpc-1.0.3.tar.gz + 'ac1f25a0677912952718a51f5bc20f32', # isl-0.16.1.tar.bz2 +] + +languages = ['c', 'c++', 'fortran'] + +withisl = True + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/g/gompi/gompi-2017a.eb b/easybuild/easyconfigs/g/gompi/gompi-2017a.eb new file mode 100644 index 0000000000..7022e6111e --- /dev/null +++ b/easybuild/easyconfigs/g/gompi/gompi-2017a.eb @@ -0,0 +1,20 @@ +easyblock = "Toolchain" + +name = 'gompi' +version = '2017a' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain, + including OpenMPI for MPI support.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +gccver = '6.3.0-2.27' + +# compiler toolchain dependencies +dependencies = [ + ('GCC', gccver), # includes both GCC 6.3.0 and binutils 2.27 + ('OpenMPI', '2.0.2', '', ('GCC', gccver)), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb new file mode 100644 index 0000000000..e59ac471b9 --- /dev/null +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb @@ -0,0 +1,18 @@ +name = 'HPL' +version = '2.2' + +homepage = 'http://www.netlib.org/benchmark/hpl/' +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic + on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the + High Performance Computing Linpack Benchmark.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.netlib.org/benchmark/%(namelower)s'] + +# fix Make dependencies, so parallel build also works +patches = ['HPL_parallel-make.patch'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-6.3.0.eb b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..4931b9f6ce --- /dev/null +++ b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-6.3.0.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'help2man' +version = '1.47.4' + +homepage = 'https://www.gnu.org/software/help2man/' +description = """help2man produces simple manual pages from the '--help' and '--version' output of other commands.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_XZ] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), +] + +sanity_check_paths = { + 'files': ['bin/help2man'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..b130fe6456 --- /dev/null +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.5' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-6.3.0.eb b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..ffbaa7a77a --- /dev/null +++ b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-6.3.0.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'M4' +version = '1.4.18' + +homepage = 'http://www.gnu.org/software/m4/m4.html' +description = """GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible + although it has some extensions (for example, handling more than 9 positional parameters to macros). + GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + +# '-fgnu89-inline' is required to avoid linking errors with older glibc's, +# see https://github.com/hpcugent/easybuild-easyconfigs/issues/529 +configopts = "--enable-cxx CPPFLAGS=-fgnu89-inline" + +sanity_check_paths = { + 'files': ["bin/m4"], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..ee922f3337 --- /dev/null +++ b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'numactl' +version = '2.0.11' + +homepage = 'http://oss.sgi.com/projects/libnuma/' +description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. +It does this by supplying a NUMA memory policy to the operating system before running your program. +The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] + +sanity_check_paths = { + 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], + 'dirs': ['share/man', 'include'] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb new file mode 100644 index 0000000000..94fc300c72 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb @@ -0,0 +1,55 @@ +easyblock = 'ConfigureMake' + +name = 'OpenBLAS' +version = '0.2.19' + +lapackver = '3.6.1' +versionsuffix = '-LAPACK-%s' % lapackver + +homepage = 'http://xianyi.github.com/OpenBLAS/' +description = """OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +lapack_src = 'lapack-%s.tgz' % lapackver +large_src = 'large.tgz' +timing_src = 'timing.tgz' + +lapack_unpack_cmd = 'cd %(name)s-%(version)s; rm -rf lapack-netlib;' +lapack_unpack_cmd += 'mkdir lapack-netlib;' +lapack_unpack_cmd += 'tar -C lapack-netlib --strip-components=1 -zxf %s; cd -' + +sources = [ + 'v%(version)s.tar.gz', + (lapack_src, lapack_unpack_cmd), + large_src, + timing_src, +] +source_urls = [ + # order matters, trying to download the LAPACK tarball from GitHub causes trouble + "http://www.netlib.org/lapack/", + "http://www.netlib.org/lapack/timing/", + "https://github.com/xianyi/OpenBLAS/archive/", +] + +patches = [ + (large_src, '.'), + (timing_src, '.'), +] + +skipsteps = ['configure'] + +buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' +installopts = "USE_THREAD=1 PREFIX=%(installdir)s" + +# extensive testing can be enabled by uncommenting the line below +#runtest = 'PATH=.:$PATH lapack-timing' + +sanity_check_paths = { + 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', + 'include/lapacke_mangling.h', 'include/lapacke_utils.h', 'include/openblas_config.h', + 'lib/libopenblas.a', 'lib/libopenblas.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..1676fb43ff --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '2.0.2' + +homepage = 'http://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-2 implementation.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] +sources = ['openmpi-%(version)src2.tar.gz'] # FIXME + +dependencies = [('hwloc', '1.11.5')] + +configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading + +# needed for --with-verbs +osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] + +libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % binfile for binfile in ["ompi_info", "opal_wrapper", "orterun"]] + + ["lib/lib%s.%s" % (libfile, SHLIB_EXT) for libfile in libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb new file mode 100644 index 0000000000..07590857f9 --- /dev/null +++ b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb @@ -0,0 +1,25 @@ +name = 'ScaLAPACK' +version = '2.0.2' + +homepage = 'http://www.netlib.org/scalapack/' +description = """The ScaLAPACK (or Scalable LAPACK) library includes a subset of LAPACK routines + redesigned for distributed memory MIMD parallel computers.""" + +toolchain = {'name': 'gompi', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [homepage] +sources = [SOURCELOWER_TGZ] + +blaslib = 'OpenBLAS' +blasver = '0.2.19' +blassuff = '-LAPACK-3.6.1' + +versionsuffix = "-%s-%s%s" % (blaslib, blasver, blassuff) + +dependencies = [(blaslib, blasver, blassuff, ('GCC', '6.3.0-2.27'))] + +# parallel build tends to fail, so disabling it +parallel = 1 + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..89be4a6599 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.10' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://zlib.net/'] +sources = [SOURCELOWER_TAR_GZ] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 3e71cd82e968afd26f38a8fc044145a938d0d045 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Jan 2017 15:18:48 +0100 Subject: [PATCH 0215/1311] adding easyconfigs: HPL-2.2-intel-2017a.eb, intel-2017a.eb, imkl-2017.1.132-iimpi-2017a.eb, iimpi-2017a.eb, impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb, iccifort-2017.1.132-GCC-6.3.0-2.27.eb, ifort-2017.1.132-GCC-6.3.0-2.27.eb, icc-2017.1.132-GCC-6.3.0-2.27.eb --- .../easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb | 18 +++++++++ .../i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb | 33 ++++++++++++++++ .../iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 18 +++++++++ .../ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb | 36 ++++++++++++++++++ easybuild/easyconfigs/i/iimpi/iimpi-2017a.eb | 20 ++++++++++ .../i/imkl/imkl-2017.1.132-iimpi-2017a.eb | 38 +++++++++++++++++++ ....132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 35 +++++++++++++++++ easybuild/easyconfigs/i/intel/intel-2017a.eb | 24 ++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/iimpi/iimpi-2017a.eb create mode 100644 easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iimpi-2017a.eb create mode 100644 easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/intel/intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb new file mode 100644 index 0000000000..80e701d1a6 --- /dev/null +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb @@ -0,0 +1,18 @@ +name = 'HPL' +version = '2.2' + +homepage = 'http://www.netlib.org/benchmark/hpl/' +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic + on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the + High Performance Computing Linpack Benchmark.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.netlib.org/benchmark/%(namelower)s'] + +# fix Make dependencies, so parallel build also works +patches = ['HPL_parallel-make.patch'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..4b07bc6dde --- /dev/null +++ b/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,33 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'icc' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-compilers/' +description = "C and C++ compiler from Intel" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['parallel_studio_xe_%(version_major)s_update%(version_minor)s_composer_edition_for_cpp.tgz'] + +checksums = ['41a0e8850ebb5f7169076c89be743ee2'] + +gccver = '6.3.0' +binutilsver = '2.27' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), +] + +# list of regex for components to install +# full list of components can be obtained from pset/mediaconfig.xml in unpacked sources +# cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide +components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-ipsc?_'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..11f7aab8ea --- /dev/null +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,18 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild +easyblock = "Toolchain" + +name = 'iccifort' +version = '2017.1.132' +versionsuffix = '-GCC-6.3.0-2.27' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +dependencies = [ + ('icc', version, versionsuffix), + ('ifort', version, versionsuffix), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..4c71563eb3 --- /dev/null +++ b/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,36 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'ifort' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-compilers/' +description = "Fortran compiler from Intel" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['parallel_studio_xe_%(version_major)s_update%(version_minor)s_composer_edition_for_fortran.tgz'] + +checksums = ['612169f4b40cdded8e212bf097925e4f'] + +# remove dependency on intel-mpi-rt-mic +patches = ['ifort_2017_no_mpi_mic_dependency.patch'] + +gccver = '6.3.0' +binutilsver = '2.27' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), +] + +# list of regex for components to install +# full list of components can be obtained from pset/mediaconfig.xml in unpacked sources +# cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide +components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel-ipsf?_'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/iimpi/iimpi-2017a.eb b/easybuild/easyconfigs/i/iimpi/iimpi-2017a.eb new file mode 100644 index 0000000000..c272ff0803 --- /dev/null +++ b/easybuild/easyconfigs/i/iimpi/iimpi-2017a.eb @@ -0,0 +1,20 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild +easyblock = "Toolchain" + +name = 'iimpi' +version = '2017a' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel C/C++ and Fortran compilers, alongside Intel MPI.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +compver = '2017.1.132' +suff = '-GCC-6.3.0-2.27' +dependencies = [ + ('icc', compver, suff), + ('ifort', compver, suff), + ('impi', compver, '', ('iccifort', '%s%s' % (compver, suff))), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iimpi-2017a.eb b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iimpi-2017a.eb new file mode 100644 index 0000000000..e28e5314fa --- /dev/null +++ b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iimpi-2017a.eb @@ -0,0 +1,38 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'imkl' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-mkl/' +description = """Intel Math Kernel Library is a library of highly optimized, + extensively threaded math routines for science, engineering, and financial + applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + +toolchain = {'name': 'iimpi', 'version': '2017a'} + +sources = ['l_mkl_%(version)s.tgz'] +checksums = ['7911c0f777c4cb04225bf4518088939e'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +interfaces = True + +postinstallcmds = [ + # extract the examples + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_f95.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_c.tgz -C %(installdir)s/mkl/examples/', +] + +modextravars = { + 'MKL_EXAMPLES': '%(installdir)s/mkl/examples/', +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..3193d2cc9a --- /dev/null +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,35 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'impi' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-mpi-library/' +description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message + passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for + Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + +toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} + +sources = ['l_mpi_%(version)s.tgz'] + +checksums = ['d5e941ac2bcf7c5576f85f6bcfee4c18'] + +dontcreateinstalldir = 'True' + +components = ['intel-mpi', 'intel-psxe', 'intel-imb'] + +license_file = HOME + '/licenses/intel/license.lic' + +# set up all the mpi commands to default to intel compilers +# set_mpi_wrappers_all = 'True' + +postinstallcmds = [ + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpich.so', + 'ln -s %(installdir)s/lib64/libmpigc4.so %(installdir)s/lib64/libmpichcxx.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libfmpich.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libmpichf90.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpl.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libopa.so' +] + +moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/i/intel/intel-2017a.eb b/easybuild/easyconfigs/i/intel/intel-2017a.eb new file mode 100644 index 0000000000..4e98f5a7f2 --- /dev/null +++ b/easybuild/easyconfigs/i/intel/intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'Toolchain' + +name = 'intel' +version = '2017a' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +intelver = '2017.1.132' +gccver = '6.3.0' +binutilsver = '2.27' +gccsuff = '-GCC-%s-%s' % (gccver, binutilsver) +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '-GCCcore-%s' % gccver), + ('icc', intelver, gccsuff), + ('ifort', intelver, gccsuff), + ('impi', intelver, '', ('iccifort', '%s%s' % (intelver, gccsuff))), + ('imkl', intelver, '', ('iimpi', version)), +] + +moduleclass = 'toolchain' -- GitLab From 8eb0ae0e9e97ac8862b4d35f5e7d7d41db8ab2e8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Jan 2017 15:35:59 +0100 Subject: [PATCH 0216/1311] add missing patch file for MPFR 3.1.5 --- .../mpfr-3.1.5-allpatches-20161215.patch | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161215.patch diff --git a/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161215.patch b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161215.patch new file mode 100644 index 0000000000..3b81ad49a1 --- /dev/null +++ b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161215.patch @@ -0,0 +1,176 @@ +# All mpfr patches as of 2016-08-04 +# taken from their website: http://www.mpfr.org/mpfr-current/#download +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-15 08:35:46.476430238 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-15 08:35:46.544430346 +0000 +@@ -0,0 +1 @@ ++vasprintf +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-15 08:35:46.544430346 +0000 +@@ -1 +1 @@ +-3.1.5 ++3.1.5-p1 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5" ++#define MPFR_VERSION_STRING "3.1.5-p1" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/vasprintf.c mpfr-3.1.5-b/src/vasprintf.c +--- mpfr-3.1.5-a/src/vasprintf.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/vasprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1593,7 +1593,7 @@ + } + else if (spec.spec == 'f' || spec.spec == 'F') + { +- if (spec.prec == -1) ++ if (spec.prec < 0) + spec.prec = 6; + if (regular_fg (np, p, spec, NULL) == -1) + goto error; +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-15 08:35:46.544430346 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5"; ++ return "3.1.5-p1"; + } +diff -Naurd mpfr-3.1.5-a/tests/tsprintf.c mpfr-3.1.5-b/tests/tsprintf.c +--- mpfr-3.1.5-a/tests/tsprintf.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tsprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1251,6 +1251,25 @@ + check_emin_aux (MPFR_EMIN_MIN); + } + ++static void ++test20161214 (void) ++{ ++ mpfr_t x; ++ char buf[32]; ++ const char s[] = "0x0.fffffffffffff8p+1024"; ++ int r; ++ ++ mpfr_init2 (x, 64); ++ mpfr_set_str (x, s, 16, MPFR_RNDN); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", -2, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN + 1, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN, x); ++ MPFR_ASSERTN(r == 316); ++ mpfr_clear (x); ++} ++ + int + main (int argc, char **argv) + { +@@ -1271,6 +1290,7 @@ + mixed (); + check_emax (); + check_emin (); ++ test20161214 (); + + #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) + #if MPFR_LCONV_DPTS +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-19 22:11:17.022676737 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-19 22:11:17.094676820 +0000 +@@ -0,0 +1 @@ ++strtofr +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-19 22:11:17.094676820 +0000 +@@ -1 +1 @@ +-3.1.5-p1 ++3.1.5-p2 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-19 22:11:17.090676815 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5-p1" ++#define MPFR_VERSION_STRING "3.1.5-p2" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/strtofr.c mpfr-3.1.5-b/src/strtofr.c +--- mpfr-3.1.5-a/src/strtofr.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/strtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -743,11 +743,14 @@ + of the pstr_size most significant digits of pstr->mant, with + equality in case exact is non-zero. */ + +- /* test if rounding is possible, and if so exit the loop */ +- if (exact || mpfr_can_round_raw (result, ysize, +- (pstr->negative) ? -1 : 1, +- ysize_bits - err - 1, +- MPFR_RNDN, rnd, MPFR_PREC(x))) ++ /* test if rounding is possible, and if so exit the loop. ++ Note: we also need to be able to determine the correct ternary value, ++ thus we use the MPFR_PREC(x) + (rnd == MPFR_RNDN) trick. ++ For example if result = xxx...xxx111...111 and rnd = RNDN, ++ then we know the correct rounding is xxx...xx(x+1), but we cannot know ++ the correct ternary value. */ ++ if (exact || mpfr_round_p (result, ysize, ysize_bits - err - 1, ++ MPFR_PREC(x) + (rnd == MPFR_RNDN))) + break; + + next_loop: +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-19 22:11:17.094676820 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5-p1"; ++ return "3.1.5-p2"; + } +diff -Naurd mpfr-3.1.5-a/tests/tstrtofr.c mpfr-3.1.5-b/tests/tstrtofr.c +--- mpfr-3.1.5-a/tests/tstrtofr.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tstrtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -1191,6 +1191,24 @@ + mpfr_clears (e, x1, x2, (mpfr_ptr) 0); + } + ++/* Note: the number is 5^47/2^9. */ ++static void ++bug20161217 (void) ++{ ++ mpfr_t fp, z; ++ static const char * num = "0.1387778780781445675529539585113525390625e31"; ++ int inex; ++ ++ mpfr_init2 (fp, 110); ++ mpfr_init2 (z, 110); ++ inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN); ++ MPFR_ASSERTN(inex == 0); ++ mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001101E-9"); ++ MPFR_ASSERTN(mpfr_equal_p (fp, z)); ++ mpfr_clear (fp); ++ mpfr_clear (z); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -1205,6 +1223,7 @@ + test20100310 (); + bug20120814 (); + bug20120829 (); ++ bug20161217 (); + + tests_end_mpfr (); + return 0; -- GitLab From af8f79840ae070ffb98938da12dc96ff585f7201 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 4 Jan 2017 14:44:37 +0000 Subject: [PATCH 0217/1311] Add sanity check and clean up GSL 2.3 --- easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb index b5798d1552..2d15b5f44a 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb @@ -9,11 +9,16 @@ description = """The GNU Scientific Library (GSL) is a numerical library for C a and least-squares fitting.""" toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} +toolchainopts = {'unroll': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [GNU_SOURCE] configopts = '--with-pic' +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'include', 'lib', 'share'], +} + moduleclass = 'numlib' -- GitLab From 9f20c1c4dce1fd1ce333e6bc81cad28518e0a40c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Jan 2017 16:02:09 +0100 Subject: [PATCH 0218/1311] make sanity_check_paths more specific for GSL 2.3 --- easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb index 2d15b5f44a..2183152ee4 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2016b.eb @@ -17,8 +17,9 @@ source_urls = [GNU_SOURCE] configopts = '--with-pic' sanity_check_paths = { - 'files': [], - 'dirs': ['bin', 'include', 'lib', 'share'], + 'files': ['bin/gsl-config', 'lib/libgsl.a', 'lib/libgsl.%s' % SHLIB_EXT, + 'lib/libgslcblas.a', 'lib/libgslcblas.%s' % SHLIB_EXT], + 'dirs': ['include/gsl', 'lib/pkgconfig', 'share'], } moduleclass = 'numlib' -- GitLab From 1cbf4f37d847820aa8e8cf747f3ef6babb1533fd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Jan 2017 16:15:53 +0100 Subject: [PATCH 0219/1311] bump LAPACK to 3.7.0, include required patch file for combining OpenBLAS 0.2.19 and LAPACK 3.7.0 --- easybuild/easyconfigs/f/foss/foss-2017a.eb | 2 +- ...LAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb} | 3 +- .../OpenBLAS-0.2.19_LAPACK-3.7.0-fixes.patch | 35 +++++++++++++++++++ ...mpi-2017a-OpenBLAS-0.2.19-LAPACK-3.7.0.eb} | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/o/OpenBLAS/{OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb => OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb} (95%) create mode 100644 easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19_LAPACK-3.7.0-fixes.patch rename easybuild/easyconfigs/s/ScaLAPACK/{ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb => ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.7.0.eb} (95%) diff --git a/easybuild/easyconfigs/f/foss/foss-2017a.eb b/easybuild/easyconfigs/f/foss/foss-2017a.eb index 58f252b974..10b0c04f90 100644 --- a/easybuild/easyconfigs/f/foss/foss-2017a.eb +++ b/easybuild/easyconfigs/f/foss/foss-2017a.eb @@ -14,7 +14,7 @@ gccver = '6.3.0-2.27' blaslib = 'OpenBLAS' blasver = '0.2.19' blas = '%s-%s' % (blaslib, blasver) -blassuff = '-LAPACK-3.6.1' +blassuff = '-LAPACK-3.7.0' # toolchain used to build foss dependencies comp_mpi_tc_name = 'gompi' diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb similarity index 95% rename from easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb rename to easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb index 94fc300c72..ba23eaadbf 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.6.1.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb @@ -3,7 +3,7 @@ easyblock = 'ConfigureMake' name = 'OpenBLAS' version = '0.2.19' -lapackver = '3.6.1' +lapackver = '3.7.0' versionsuffix = '-LAPACK-%s' % lapackver homepage = 'http://xianyi.github.com/OpenBLAS/' @@ -35,6 +35,7 @@ source_urls = [ patches = [ (large_src, '.'), (timing_src, '.'), + 'OpenBLAS-%(version)s_LAPACK-3.7.0-fixes.patch', ] skipsteps = ['configure'] diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19_LAPACK-3.7.0-fixes.patch b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19_LAPACK-3.7.0-fixes.patch new file mode 100644 index 0000000000..54c1b5525d --- /dev/null +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19_LAPACK-3.7.0-fixes.patch @@ -0,0 +1,35 @@ +fixes to combine OpenBLAS 0.2.19 with LAPACK 3.7.0 +* upstream bugfix in Makefile for LAPACK 3.7.0, cfr. https://github.com/Reference-LAPACK/lapack/commit/c5788233f95fed2c7f008ea079e8257a85348287 +* fix copying of lapacke_mangling.h, since it was renamed in LAPACK 3.7.0 +author: Kenneth Hoste (HPC-UGent) +--- OpenBLAS-0.2.19/Makefile.install.orig 2017-01-04 15:51:12.483541471 +0100 ++++ OpenBLAS-0.2.19/Makefile.install 2017-01-04 15:51:27.583647000 +0100 +@@ -50,7 +50,7 @@ + @echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_INCLUDE_DIR) + @-install -pm644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h" + @-install -pm644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke_config.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_config.h" +- @-install -pm644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke_mangling_with_flags.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h" ++ @-install -pm644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke_mangling.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h" + @-install -pm644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke_utils.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_utils.h" + endif + +--- OpenBLAS-0.2.19/lapack-netlib/SRC/CMakeLists.txt.orig ++++ OpenBLAS-0.2.19/lapack-netlib/SRC/CMakeLists.txt +@@ -454,7 +454,6 @@ set(ZLASRC + zgelqt.f zgelqt3.f zgemlqt.f + zgetsls.f zgeqr.f zlatsqr.f zlamtsqr.f zgemqr.f + zgelq.f zlaswlq.f zlamswlq.f zgemlq.f +- ztplqt.f ztplqt2.f ztpmlqt.f + zhetrd_2stage.f zhetrd_he2hb.f zhetrd_hb2st.F zhb2st_kernels.f + zheevd_2stage.f zheev_2stage.f zheevx_2stage.f zheevr_2stage.f + zhbev_2stage.f zhbevx_2stage.f zhbevd_2stage.f zhegv_2stage.f) +--- OpenBLAS-0.2.19/lapack-netlib/SRC/Makefile.orig ++++ OpenBLAS-0.2.19/lapack-netlib/SRC/Makefile +@@ -464,7 +464,6 @@ ZLASRC = \ + zgelqt.o zgelqt3.o zgemlqt.o \ + zgetsls.o zgeqr.o zlatsqr.o zlamtsqr.o zgemqr.o \ + zgelq.o zlaswlq.o zlamswlq.o zgemlq.o \ +- ztplqt.o ztplqt2.o ztpmlqt.o \ + zhetrd_2stage.o zhetrd_he2hb.o zhetrd_hb2st.o zhb2st_kernels.o \ + zheevd_2stage.o zheev_2stage.o zheevx_2stage.o zheevr_2stage.o \ + zhbev_2stage.o zhbevx_2stage.o zhbevd_2stage.o zhegv_2stage.o diff --git a/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.7.0.eb similarity index 95% rename from easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb rename to easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.7.0.eb index 07590857f9..3d67fae22f 100644 --- a/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.6.1.eb +++ b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompi-2017a-OpenBLAS-0.2.19-LAPACK-3.7.0.eb @@ -13,7 +13,7 @@ sources = [SOURCELOWER_TGZ] blaslib = 'OpenBLAS' blasver = '0.2.19' -blassuff = '-LAPACK-3.6.1' +blassuff = '-LAPACK-3.7.0' versionsuffix = "-%s-%s%s" % (blaslib, blasver, blassuff) -- GitLab From 63dc6bc9cb64283e804e4290ccc446fc5d611ff2 Mon Sep 17 00:00:00 2001 From: Andreas Hilboll Date: Wed, 4 Jan 2017 19:50:37 +0100 Subject: [PATCH 0220/1311] ENH: add support for WPS 3.8, add known_problems fixes to WRF 3.8 --- ...mpar.eb => WPS-3.8.0-intel-2016a-dmpar.eb} | 10 +-- ...s.patch => WPS-3.8.0_known_problems.patch} | 13 +++- ...S-3.8.0_netCDF-Fortran_seperate_path.patch | 71 +++++++++++++++++++ .../w/WRF/WRF-3.8.0-intel-2016a-dmpar.eb | 1 + .../w/WRF/WRF-3.8.0_known_problems.patch | 71 +++++++++++++++++++ 5 files changed, 160 insertions(+), 6 deletions(-) rename easybuild/easyconfigs/w/WPS/{WPS-3.8-intel-2016a-dmpar.eb => WPS-3.8.0-intel-2016a-dmpar.eb} (81%) rename easybuild/easyconfigs/w/WPS/{WPS-3.8_fix_known_problems.patch => WPS-3.8.0_known_problems.patch} (65%) create mode 100644 easybuild/easyconfigs/w/WPS/WPS-3.8.0_netCDF-Fortran_seperate_path.patch create mode 100644 easybuild/easyconfigs/w/WRF/WRF-3.8.0_known_problems.patch diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb b/easybuild/easyconfigs/w/WPS/WPS-3.8.0-intel-2016a-dmpar.eb similarity index 81% rename from easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb rename to easybuild/easyconfigs/w/WPS/WPS-3.8.0-intel-2016a-dmpar.eb index c426109e50..ed55b813b2 100644 --- a/easybuild/easyconfigs/w/WPS/WPS-3.8-intel-2016a-dmpar.eb +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8.0-intel-2016a-dmpar.eb @@ -1,5 +1,5 @@ name = 'WPS' -version = '3.8' +version = '3.8.0' homepage = 'http://www.wrf-model.org' description = """WRF Preprocessing System (WPS) for WRF. The Weather Research and Forecasting (WRF) Model is @@ -9,7 +9,7 @@ description = """WRF Preprocessing System (WPS) for WRF. The Weather Research an toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'opt': True} -sources = ['%(name)sV%(version)s.TAR.gz'] +sources = ['%(name)sV%(version_major_minor)s.TAR.gz'] source_urls = [ 'http://www2.mmm.ucar.edu/wrf/src/', 'http://www.mmm.ucar.edu/wrf/src/', @@ -20,8 +20,8 @@ checksums = ['2ab4e4ddae4e105432c18c59819a4523'] # patches for known problems as of 27 Jul 2016, see # http://www2.mmm.ucar.edu/wrf/users/wpsv3.8/known-prob-3.8.html patches = [ - 'WPS_netCDF-Fortran_seperate_path.patch', - 'WPS-%(version)s_fix_known_problems.patch', + 'WPS-%(version)s_netCDF-Fortran_seperate_path.patch', + 'WPS-%(version)s_known_problems.patch', ] buildtype = "dmpar" @@ -30,7 +30,7 @@ versionsuffix = '-%s' % buildtype dependencies = [ ('WRF', version, versionsuffix), ('netCDF', '4.4.0'), - ('netCDF-Fortran', '4.4.2'), + ('netCDF-Fortran', '4.4.3'), ('zlib', '1.2.8'), ('libpng', '1.6.21'), ('JasPer', '1.900.1'), diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch b/easybuild/easyconfigs/w/WPS/WPS-3.8.0_known_problems.patch similarity index 65% rename from easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch rename to easybuild/easyconfigs/w/WPS/WPS-3.8.0_known_problems.patch index e03a2fbc76..e94fa09a3a 100644 --- a/easybuild/easyconfigs/w/WPS/WPS-3.8_fix_known_problems.patch +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8.0_known_problems.patch @@ -1,5 +1,16 @@ +# ====================================================================== +# Fix known problems in WPS3.8 source code +# (http://www2.mmm.ucar.edu/wrf/users/wpsv3.8/known-prob-3.8.html) +# ====================================================================== +# +# NCAR CISL/RDA Data Type 113.0 (posted 6/16/2016) +# ================================================ +# +# Using this type of input data causes fields to shift approximately 1 degree +# longitude toward the east (when compared to raw ECMWF grib files. + --- WPS.orig/ungrib/src/rd_grib1.F 2013-06-08 00:48:10.000000000 +0200 -+++ WPS/ungrib/src/rd_grib1.F 2016-07-26 11:02:19.021497705 +0200 ++++ WPS/ungrib/src/rd_grib1.F 2016-06-30 17:18:27.000000000 +0200 @@ -406,7 +406,7 @@ !print *,'new dx = ',map%dx endif diff --git a/easybuild/easyconfigs/w/WPS/WPS-3.8.0_netCDF-Fortran_seperate_path.patch b/easybuild/easyconfigs/w/WPS/WPS-3.8.0_netCDF-Fortran_seperate_path.patch new file mode 100644 index 0000000000..a0a5dd6390 --- /dev/null +++ b/easybuild/easyconfigs/w/WPS/WPS-3.8.0_netCDF-Fortran_seperate_path.patch @@ -0,0 +1,71 @@ +diff -ru WPS.orig/arch/Config.pl WPS/arch/Config.pl +--- WPS.orig/arch/Config.pl 2012-04-07 00:07:24.000000000 +0200 ++++ WPS/arch/Config.pl 2012-06-19 15:33:40.998567539 +0200 +@@ -36,6 +36,7 @@ + if(substr( $ARGV[0], 1, 8 ) eq "netcdff=") + { + $sw_netcdff_lib = substr( $ARGV[0], 9); ++ $sw_netcdff_lib =~ s/!/ /g ; + } + if(substr( $ARGV[0], 1, 6 ) eq "phdf5=") + { +diff -ru WPS.orig/configure WPS/configure +--- WPS.orig/configure 2012-04-07 00:07:19.000000000 +0200 ++++ WPS/configure 2012-06-19 15:34:35.543132843 +0200 +@@ -119,9 +119,14 @@ + echo "Will use NETCDF in dir: $NETCDF" + # for 3.6.2 and greater there might be a second library, libnetcdff.a . Check for this and use + # if available +- NETCDFF=" " +- if [ -f "$NETCDF/lib/libnetcdff.a" ] ; then +- NETCDFF="-lnetcdff" ++ USENETCDFF=" " ++ # for netCDF 4.2 and greater, the Fortran library is a seperate install ++ if [ -z "$NETCDFF" ] ++ then ++ NETCDFF=$NETCDF ++ fi ++ if [ -f "$NETCDFF/lib/libnetcdff.a" ] ; then ++ USENETCDFF="-L$NETCDFF/lib!-lnetcdff" + fi + else + echo "Will configure for use without NetCDF" +@@ -151,7 +156,7 @@ + fi + + # Found perl, so proceed with configuration +-perl arch/Config.pl -perl=$PERL -netcdf=$NETCDF -netcdff=$NETCDFF -os=$os -mach=$mach ++perl arch/Config.pl -perl=$PERL -netcdf=$NETCDF -netcdff=$USENETCDFF -os=$os -mach=$mach + + + #Checking cross-compiling capability for some particular environment +@@ -319,9 +324,9 @@ + end program + EOF + FFLAGS=`grep ^FFLAGS configure.wps | cut -d"=" -f2-` +- cp $NETCDF/include/netcdf.inc . ++ cp $NETCDFF/include/netcdf.inc . + FC=`grep ^SFC configure.wps | cut -d"=" -f2-` +- $FC ${FFLAGS} fort_netcdf.f -o fort_netcdf -L${NETCDF}/lib $NETCDFF -lnetcdf > /dev/null 2>&1 ++ $FC ${FFLAGS} fort_netcdf.f -o fort_netcdf -L${NETCDF}/lib -lnetcdf $USENETCDFF > /dev/null 2>&1 + if [ -f "fort_netcdf" ] ; then + fort_netcdf > /dev/null 2>&1 + if [ $? = 0 ]; then +Only in WPS: configure.wps +diff -ru WPS.orig/util/src/Makefile WPS/util/src/Makefile +--- WPS.orig/util/src/Makefile 2012-04-07 00:07:26.000000000 +0200 ++++ WPS/util/src/Makefile 2012-06-19 15:36:39.849421166 +0200 +@@ -40,11 +40,11 @@ + write_met_module.o misc_definitions_module.o met_data_module.o + $(SFC) $(LDFLAGS) -o $@ elev_angle.o cio.o module_debug.o gridinfo_module.o \ + write_met_module.o misc_definitions_module.o met_data_module.o \ +- -L$(NETCDF)/lib -I$(NETCDF)/include -lnetcdf ++ -L$(NETCDFF)/lib -I$(NETCDFF)/include -lnetcdff + + elev_angle.o: elev_angle.F cio.o module_debug.o gridinfo_module.o \ + write_met_module.o misc_definitions_module.o +- $(SFC) -c elev_angle.F -I$(NETCDF)/include ++ $(SFC) -c elev_angle.F -I$(NETCDFF)/include + + calc_ecmwf_p.exe: calc_ecmwf_p.o cio.o module_debug.o module_stringutil.o gridinfo_module.o read_met_module.o \ + write_met_module.o module_date_pack.o misc_definitions_module.o met_data_module.o constants_module.o diff --git a/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016a-dmpar.eb b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016a-dmpar.eb index 8afc4ff822..e63ecee8b4 100644 --- a/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016a-dmpar.eb +++ b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016a-dmpar.eb @@ -28,6 +28,7 @@ patches = [ 'WRF_parallel_build_fix.patch', 'WRF_tests_limit-runtimes.patch', 'WRF-%(version)s_netCDF-Fortran_separate_path.patch', + 'WRF-%(version)s_known_problems.patch', ] # limit parallel build to 20 diff --git a/easybuild/easyconfigs/w/WRF/WRF-3.8.0_known_problems.patch b/easybuild/easyconfigs/w/WRF/WRF-3.8.0_known_problems.patch new file mode 100644 index 0000000000..4e591faa37 --- /dev/null +++ b/easybuild/easyconfigs/w/WRF/WRF-3.8.0_known_problems.patch @@ -0,0 +1,71 @@ +# ====================================================================== +# Fix known problems in WRF3.8 source code +# (http://www2.mmm.ucar.edu/wrf/users/wrfv3.8/known-prob-3.8.html) +# ====================================================================== +# +# Problem when using tmn_update (posted September 8, 2016) +# ======================================================== +# +# An error was introduced beginning with WRF Version 3.7 in a restart run when +# the tmn_update option is used. This error is present in WRF Versions 3.7, +# 3.7.1, 3.8 and 3.8.1. When tmn_update is activated, a moving-averaged skin +# temperature (TLAG) is used as a lower boundary condition for the land model. +# Since TLAG is left out of the restart file, any restart using the tmn_update +# option will start with 0 K as the lower boundary condition for the land model. +# This will cause the soil temperature to cool gradually, eventually affecting +# the skin and atmospheric temperature. The tmn_update option can be used for +# the following land models: SLAB, Noah, NoahMP, RUC and CLM. + +diff -Naur WRFV3.orig/Registry/Registry.EM_COMMON WRFV3/Registry/Registry.EM_COMMON +--- WRFV3.orig/Registry/Registry.EM_COMMON 2016-04-05 23:09:48.000000000 +0200 ++++ WRFV3/Registry/Registry.EM_COMMON 2017-01-04 15:25:03.000000000 +0100 +@@ -1672,7 +1672,7 @@ + state real TYR ij misc 1 - rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "TYR" "ANNUAL MEAN SFC TEMPERATURE" "K" + state real TYRA ij misc 1 - rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "TYRA" "ACCUMULATED YEARLY SFC TEMPERATURE FOR CURRENT YEAR" "K" + state real TDLY ij misc 1 - rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "TDLY" "ACCUMULATED DAILY SFC TEMPERATURE FOR CURRENT DAY" "K" +-state real TLAG i&j misc 1 - d=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "TLAG" "DAILY MEAN SFC TEMPERATURE OF PRIOR DAYS" "K" ++state real TLAG i&j misc 1 - rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "TLAG" "DAILY MEAN SFC TEMPERATURE OF PRIOR DAYS" "K" + state integer NYEAR - misc 1 - r "NYEAR" "ACCUM DAYS IN A YEAR" "" + state real NDAY - misc 1 - r "NDAY" "ACCUM TIMESTEPS IN A DAY" "" + state real XLAND ij misc 1 - i02rhd=(interp_fcnm_imask)u=(copy_fcnm) "XLAND" "LAND MASK (1 FOR LAND, 2 FOR WATER)" "" + +# Problem with Cloud Fraction (posted November 30, 2016) +# ====================================================== +# +# Beginning in V3.8, a bug was introduced to cloud fraction. This is seen by +# most radiation schemes, when a microphysics scheme is used that does not have +# cloud ice (e.g. WSM3, Kessler). When WSM3 or Kessler is used, cloud fraction +# is not computed, and hence a radiation scheme will not see any cloud. This +# results in unrealistic surface temperature and incorrect upwelling long-wave +# radiation at the top of the atmosphere. + +diff -Naur WRFV3.orig/phys/module_radiation_driver.F WRFV3/phys/module_radiation_driver.F +--- WRFV3.orig/phys/module_radiation_driver.F 2016-03-30 22:36:24.000000000 +0200 ++++ WRFV3/phys/module_radiation_driver.F 2017-01-04 15:26:17.000000000 +0100 +@@ -1120,7 +1120,7 @@ + + IF ( ICLOUD == 1 ) THEN + +- IF ( F_QC .AND. F_QI ) THEN ++ IF ( F_QC .OR. F_QI ) THEN + ! Call to cloud fraction routine based on Randall 1994 (Hong Pan 1998) + + CALL wrf_debug (1, 'CALL cldfra1') +@@ -1192,7 +1192,7 @@ + + ELSE IF ( ICLOUD == 2 ) THEN + +- IF ( F_QC .AND. F_QI ) THEN ++ IF ( F_QC .OR. F_QI ) THEN + CALL wrf_debug (1, 'CALL cldfra2') + CALL cal_cldfra2(CLDFRA,qc,qi,F_QC,F_QI, & + ids,ide, jds,jde, kds,kde, & +@@ -1205,7 +1205,7 @@ + !+---+-----------------------------------------------------------------+ + + ELSEIF (ICLOUD == 3) THEN +- IF ( F_QC .AND. F_QI ) THEN ++ IF ( F_QC .OR. F_QI ) THEN + IF ( F_QS ) THEN + DO j = jts,jte + DO k = kts,kte -- GitLab From d38f805f563026b6da2d8457fc424b5f24a3c001 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 5 Jan 2017 12:12:16 +1300 Subject: [PATCH 0221/1311] Add the directory to the executable PATH --- easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb index bd778d69d8..64cd6052f9 100644 --- a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb +++ b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb @@ -17,6 +17,8 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://ccl.northwestern.edu/netlogo/%(version)s/'] sources = ['%(name)s-%(version)s%(versionsuffix)s.tgz'] +modextrapaths = {'PATH': ''} + sanity_check_paths = { 'files': ['NetLogo', 'NetLogo3D', 'NetLogoLogging'], 'dirs': ['app', 'runtime'], -- GitLab From 5b5b3f3a0962d264ebf84d5b887ec91c28176ed0 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 5 Jan 2017 13:33:42 +1300 Subject: [PATCH 0222/1311] Remove extra modextrapaths as not needed --- easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb index 64cd6052f9..bd778d69d8 100644 --- a/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb +++ b/easybuild/easyconfigs/n/NetLogo/NetLogo-5.3.1-64.eb @@ -17,8 +17,6 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://ccl.northwestern.edu/netlogo/%(version)s/'] sources = ['%(name)s-%(version)s%(versionsuffix)s.tgz'] -modextrapaths = {'PATH': ''} - sanity_check_paths = { 'files': ['NetLogo', 'NetLogo3D', 'NetLogoLogging'], 'dirs': ['app', 'runtime'], -- GitLab From f7a88f53624fe8ad0738c6bd8b71edee1365f8c3 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Thu, 5 Jan 2017 06:37:58 +0100 Subject: [PATCH 0223/1311] [foss/2016b] Boost 1.63.0 Note: SOURCEFORGE_SOURCE returned a wrong tarball with missing files --- .../Boost-1.63.0-foss-2016b-Python-2.7.12.eb | 23 ++++++++++++++++ .../Boost-1.63.0-foss-2016b-Python-3.5.2.eb | 27 +++++++++++++++++++ .../b/Boost/Boost-1.63.0_python3.patch | 24 +++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-3.5.2.eb create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0_python3.patch diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..3f0c47295f --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('Python', '2.7.12'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..7947adb6bb --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,27 @@ +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +patches = [ + 'Boost-%(version)s_python3.patch', +] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('Python', '3.5.2'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0_python3.patch b/easybuild/easyconfigs/b/Boost/Boost-1.63.0_python3.patch new file mode 100644 index 0000000000..279cbfb666 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0_python3.patch @@ -0,0 +1,24 @@ +#Boost checks Python include in $(prefix)/include/python$(version) +#some cases it is in $(prefix)/include/python$(version)m +#see more: https://svn.boost.org/trac/boost/ticket/11120 +# Aug 27th 2016 by B. Hajgato (Free Univeristy Brussels - VUB) +--- boost_1_60_0/tools/build/src/tools/python.jam.org 2015-10-16 20:55:36.000000000 +0200 ++++ boost_1_60_0/tools/build/src/tools/python.jam 2016-07-27 16:20:52.549560154 +0200 +@@ -539,7 +539,16 @@ + } + else + { +- includes ?= $(prefix)/include/python$(version) ; ++ if not($(prefix)/include/python$(version)m) ++ { ++ debug-message "Used include path: $(prefix)/include/python$(version)m" ; ++ includes ?= $(prefix)/include/python$(version)m ; ++ } ++ else ++ { ++ debug-message "Used include path: $(prefix)/include/python$(version)" ; ++ includes ?= $(prefix)/include/python$(version) ; ++ } + + local lib = $(exec-prefix)/lib ; + libraries ?= $(lib)/python$(version)/config $(lib) ; -- GitLab From 985ed0e13c775cd78f1ce5aba13b810f51bc55a7 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 6 Jan 2017 14:29:32 +1300 Subject: [PATCH 0224/1311] Reversion to older versions of packages per request from K.H. --- .../p/Python/Python-2.7.11-foss-2015a.eb | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index 60154d0a99..a55f5a9bff 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -9,7 +9,7 @@ toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} numpyversion = '1.10.1' -scipyversion = '0.17.0' +scipyversion = '0.16.1' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] sources = [SOURCE_TGZ] @@ -30,12 +30,12 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! -# package versions updated 1 April 2016 +# package versions updated 28 May 2015 exts_list = [ - ('setuptools', '20.3.1', { + ('setuptools', '18.7.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], }), - ('pip', '8.1.1', { + ('pip', '7.1.2', { 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], }), ('nose', '1.3.7', { @@ -51,7 +51,7 @@ exts_list = [ ('blist', '1.3.6', { 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], }), - ('mpi4py', '2.0.0', { + ('mpi4py', '1.3.1', { 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], }), ('paycheck', '1.0.2', { @@ -72,7 +72,7 @@ exts_list = [ ('six', '1.10.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), - ('dateutil', '2.5.2', { + ('dateutil', '2.4.2', { 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], }), @@ -80,7 +80,7 @@ exts_list = [ 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], }), - ('decorator', '4.0.9', { + ('decorator', '4.0.4', { 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], }), ('arff', '2.1.0', { @@ -97,7 +97,7 @@ exts_list = [ ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], }), - ('pyparsing', '2.1.1', { + ('pyparsing', '2.0.6', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('netifaces', '0.10.4', { @@ -112,10 +112,10 @@ exts_list = [ ('mock', '1.3.0', { 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], }), - ('pytz', '2016.3', { + ('pytz', '2015.7', { 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], }), - ('pandas', '0.18.0', { + ('pandas', '0.17.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], }), ('enum34', '1.1.2', { @@ -128,7 +128,7 @@ exts_list = [ 'source_tmpl': '%(name)s-%(version)s.tar.gz', 'source_urls': ['https://github.com/scott-griffiths/bitstring/archive/'], }), - ('virtualenv', '15.0.1', { + ('virtualenv', '14.0.5', { 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], }), ] -- GitLab From 22daeb0d1dabbb4d87302b8e709f8e4ca418581f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 6 Jan 2017 14:48:21 +1300 Subject: [PATCH 0225/1311] Removal of custom site-specific commands --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 16 ++++++++++------ easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index c92177166e..88b4f2e32e 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -13,14 +13,18 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] -dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_80')] - -postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] +dependencies = [ + ('BLAST', '2.2.26', "-Linux_x86_64"), + ('Java', '1.7.0_80'), +] sanity_check_paths = { - 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], - 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'] + 'files': ['I-TASSERmod/runI-TASSER.pl'], + 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'], } +# You may find it desirable to put this variable in the module file. +# The command to do so has been put here (commented out) as a convenience. +#modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } + moduleclass = 'bio' -modextravars = { 'IMINTASSERDB' : '/share/db/I-TASSER/%(version)s' } diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 93f184aa24..fccdce2d50 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -13,14 +13,18 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # The source code may be downloaded manually from http://zhanglab.ccmb.med.umich.edu. sources = ['%(name)s%(version)s.tar.bz2'] -dependencies = [('BLAST', '2.2.26', "-Linux_x86_64"), ('Java', '1.7.0_80')] - -postinstallcmds = ['chmod a+x %(installdir)s/submit%(name)s'] +dependencies = [ + ('BLAST', '2.2.26', "-Linux_x86_64"), + ('Java', '1.7.0_80'), +] sanity_check_paths = { - 'files': ['submitI-TASSER', 'I-TASSERmod/runI-TASSER.pl'], - 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'] + 'files': ['I-TASSERmod/runI-TASSER.pl'], + 'dirs': ['bin', 'blast', 'COACH', 'COFACTOR', 'I-TASSERmod', 'PSSpred'], } +# You may find it desirable to put this variable in the module file. +# The command to do so has been put here (commented out) as a convenience. +#modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } + moduleclass = 'bio' -modextravars = { 'IMINTASSERDB' : '/share/db/I-TASSER/%(version)s' } -- GitLab From c0b3371903dda1d43687af13ccd5e7eef93f7c74 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 6 Jan 2017 21:19:29 +0100 Subject: [PATCH 0226/1311] update FFTW easyconfig to use FFTW easyblock (cfr. https://github.com/hpcugent/easybuild-easyblocks/pull/1083) --- .../f/FFTW/FFTW-3.3.5-gompi-2017a.eb | 21 ------------------- easybuild/easyconfigs/f/foss/foss-2017a.eb | 2 +- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb index 6975badd80..77015a0ad7 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,23 +11,4 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -# FIXME -common_configopts = "--enable-threads --enable-openmp --with-pic" - -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-quad-precision", - common_configopts + " --enable-sse2 --enable-mpi", # default as last -] - -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + - ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], - 'dirs': ['lib/pkgconfig'], -} - moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/foss/foss-2017a.eb b/easybuild/easyconfigs/f/foss/foss-2017a.eb index 10b0c04f90..badece0d08 100644 --- a/easybuild/easyconfigs/f/foss/foss-2017a.eb +++ b/easybuild/easyconfigs/f/foss/foss-2017a.eb @@ -28,7 +28,7 @@ dependencies = [ ('GCC', gccver), ('OpenMPI', '2.0.2', '', ('GCC', gccver)), (blaslib, blasver, blassuff, ('GCC', gccver)), - ('FFTW', '3.3.5', '', comp_mpi_tc), # FIXME: --enable-sse2 --enable-avx --enable-avx2 --enable-avx512 + ('FFTW', '3.3.5', '', comp_mpi_tc), ('ScaLAPACK', '2.0.2', '-%s%s' % (blas, blassuff), comp_mpi_tc), ] -- GitLab From f27abc1a4d36d66db42a8aadbe96ccef67100ccc Mon Sep 17 00:00:00 2001 From: Ravi Tripathi Date: Fri, 6 Jan 2017 15:28:09 -0600 Subject: [PATCH 0227/1311] Changed the homepage and fixed formatting for modextrapaths --- .../c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb index 2be243b7e0..5017e132ee 100644 --- a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -7,7 +7,7 @@ easyblock = "Tarball" name = 'ConnectomeWorkbench' version = '1.2.2' -homepage = 'http://www.humanconnectome.org/software/get-connectome-workbench.html' +homepage = 'http://www.humanconnectome.org/software/connectome-workbench.html' description = """Connectome Workbench is an open-source visualization and discovery tool used to explore data generated by the Human Connectome Project. The distribution includes wb_view, @@ -20,8 +20,10 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['https://ftp.humanconnectome.org/workbench/'] sources = ['workbench-rh_linux64-v%(version)s.zip'] -modextrapaths = {'PATH': 'bin_rh_linux64', 'LIBRARY_PATH': 'libs_rh_linux64', -'LD_LIBRARY_PATH': 'libs_rh_linux64'} +modextrapaths = { + 'PATH': 'bin_rh_linux64', + 'LIBRARY_PATH': 'libs_rh_linux64', + 'LD_LIBRARY_PATH': 'libs_rh_linux64'} sanity_check_paths = { 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", -- GitLab From 589730ef1c546c9c29aa64287ca2884dce1885ea Mon Sep 17 00:00:00 2001 From: Ravi Tripathi Date: Fri, 6 Jan 2017 15:44:12 -0600 Subject: [PATCH 0228/1311] Fixed formatting for modextrapaths --- .../c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb index 5017e132ee..edd7b1aa5d 100644 --- a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -23,7 +23,8 @@ sources = ['workbench-rh_linux64-v%(version)s.zip'] modextrapaths = { 'PATH': 'bin_rh_linux64', 'LIBRARY_PATH': 'libs_rh_linux64', - 'LD_LIBRARY_PATH': 'libs_rh_linux64'} + 'LD_LIBRARY_PATH': 'libs_rh_linux64', +} sanity_check_paths = { 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", -- GitLab From e37eedba449408249e6ffd00970e1b007887cd2f Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 10 Jan 2017 00:30:48 +0100 Subject: [PATCH 0229/1311] adding easyconfigs: EMBOSS-6.6.0-foss-2016b.eb, libharu-2.3.0-foss-2016b.eb --- .../e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb | 44 +++++++++++++++++++ .../l/libharu/libharu-2.3.0-foss-2016b.eb | 39 ++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb new file mode 100644 index 0000000000..ad22d09979 --- /dev/null +++ b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb @@ -0,0 +1,44 @@ +# authors: Kenneth Hoste (Ghent University), George Tsouloupas , Fotis Georgatos +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# foss-2016b modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'EMBOSS' +version = '6.6.0' + +homepage = 'http://emboss.sourceforge.net/' +description = """EMBOSS is 'The European Molecular Biology Open Software Suite'. + EMBOSS is a free Open Source software analysis package specially developed for + the needs of the molecular biology (e.g. EMBnet) user community.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/'] +sources = [SOURCE_TAR_GZ] + +patches = ['EMBOSS_disable-embossupdate.patch'] + +dependencies = [ + ('libharu', '2.3.0'), + ('Java', '1.7.0_80', '', True), +] + +configopts = " --with-hpdf=$EBROOTLIBHARU " + +# jemboss.jar does not build in a parallel build +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['seqret', 'aligncopy', 'profit', 'prophet']] + + ['lib/lib%s.a' % x for x in ['acd', 'ajax', 'ajaxdb', 'ajaxg', 'eexpat', 'ensembl', + 'epcre', 'eplplot', 'ezlib', 'nucleus']] + + ['share/EMBOSS/jemboss/lib/jemboss.jar'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016b.eb b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016b.eb new file mode 100644 index 0000000000..2b4825fe33 --- /dev/null +++ b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-foss-2016b.eb @@ -0,0 +1,39 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA +# Authors:: George Tsouloupas , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## +# Modified for foss-2016b by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'CMakeMake' + +name = 'libharu' +version = '2.3.0' + +homepage = 'http://libharu.org/' +description = """libHaru is a free, cross platform, open source library for generating PDF files.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [' https://github.com/libharu/libharu/archive/'] +sources = ['RELEASE_%s.tar.gz' % '_'.join(version.split('.'))] + +dependencies = [('libpng', '1.6.24')] + +builddependencies = [('CMake', '3.6.2')] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libhpdf.%s' % SHLIB_EXT], + 'dirs': ['if', 'include', 'lib'] +} + +moduleclass = 'lib' -- GitLab From 6a88204b7332e9fe6c36e0ceb47b058d637d072b Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 10 Jan 2017 14:56:56 +1300 Subject: [PATCH 0230/1311] Updates to packages in foss 2015a easyconfig for Python, and some tweaks to foss 2016a toolchain recommended by K.H. --- .../p/Python/Python-3.5.1-foss-2015a.eb | 24 +++++++++---------- .../p/Python/Python-3.5.1-foss-2016a.eb | 10 ++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index d5d4531b05..f2338d2948 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -7,7 +7,7 @@ description = "Python is a programming language that lets you work more quickly toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} -numpyversion = '1.10.1' +numpyversion = '1.10.4' scipyversion = '0.17.0' source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] @@ -29,12 +29,12 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev')] # order is important! -# package versions updated 1 April 2016 +# package versions updated 10 Jan 2017 cf. EasyConfig for Python-3.5.1-foss-2016a.eb exts_list = [ - ('setuptools', '20.3.1', { + ('setuptools', '20.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], }), - ('pip', '8.1.1', { + ('pip', '8.0.2', { 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], }), ('nose', '1.3.7', { @@ -64,13 +64,13 @@ exts_list = [ ('lockfile', '0.12.2', { 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], }), - ('Cython', '0.24b0', { - 'source_urls': ['http://www.cython.org/release/'], + ('Cython', '0.23.4', { + 'source_urls': ['https://pypi.python.org/packages/source/C/Cython/'], }), ('six', '1.10.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), - ('dateutil', '2.5.2', { + ('dateutil', '2.4.2', { 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], }), @@ -98,7 +98,7 @@ exts_list = [ ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], }), - ('pyparsing', '2.1.1', { + ('pyparsing', '2.1.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('netifaces', '0.10.4', { @@ -107,16 +107,16 @@ exts_list = [ ('netaddr', '0.7.18', { 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], }), - ('pytz', '2016.3', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], - }), - ('pandas', '0.18.0', { + ('pandas', '0.17.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], }), ('bitstring', '3.1.3', { 'source_tmpl': '%(name)s-%(version)s.zip', 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], }), + ('pytz', '2016.3', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), ('virtualenv', '15.0.1', { 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], }), diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb index 129c326cbb..edc992932d 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb @@ -111,6 +111,16 @@ exts_list = [ ('pandas', '0.17.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], }), + ('bitstring', '3.1.3', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('pytz', '2016.3', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('virtualenv', '15.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), ] moduleclass = 'lang' -- GitLab From 4403b680efeb23424afb468233d8752c218e2e0d Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 10 Jan 2017 16:53:27 +1300 Subject: [PATCH 0231/1311] EasyConfig for the X11 bundle using the foss-2015a toolchain --- .../fontconfig-2.12.1-foss-2015a.eb | 22 +++ .../x/X11/X11-20160819-foss-2015a.eb | 131 ++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb create mode 100644 easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb new file mode 100644 index 0000000000..815b77935c --- /dev/null +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'fontconfig' +version = '2.12.1' + +homepage = 'http://www.freedesktop.org/software/fontconfig' +description = """Fontconfig is a library designed to provide system-wide font configuration, customization and +application access.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = ['http://www.freedesktop.org/software/fontconfig/release/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('expat', '2.1.0'), # Selected an older version for consistency + ('freetype', '2.6.2'), # Selected an older version for consistency +] + +configopts = '--disable-docs ' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb new file mode 100644 index 0000000000..89cbcbda34 --- /dev/null +++ b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb @@ -0,0 +1,131 @@ +easyblock = 'Bundle' + +name = 'X11' +version = '20160819' + +homepage = 'https://www.x.org' +description = "The X Window System (X11) is a windowing system for bitmap displays" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = [ + XORG_LIB_SOURCE, + XORG_PROTO_SOURCE, + 'http://xcb.freedesktop.org/dist/', + 'http://xkbcommon.org/download/', + 'http://cgit.freedesktop.org/xorg/util/macros/snapshot', +] + +builddependencies = [ + ('Autotools', '20150215'), + ('pkg-config', '0.29.1'), +] +dependencies = [ + ('freetype', '2.6.2'), # Slightly older version than in foss-2016b for consistency + ('fontconfig', '2.12.1'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), +] + +default_easyblock = 'ConfigureMake' + +common_specs = { + 'sources': [SOURCE_TAR_GZ], + 'start_dir': '%(name)s-%(version)s', +} +components = [ + ('xorg-macros', '1.19.0', { + 'sources': ['util-macros-%(version)s.tar.gz'], + 'start_dir': 'util-macros-%(version)s', + }), + ('libpthread-stubs', '0.3', common_specs), + ('bigreqsproto', '1.1.2', common_specs), + ('compositeproto', '0.4.2', common_specs), + ('damageproto', '1.2.1', common_specs), + ('dmxproto', '2.3.1', common_specs), + ('dri2proto', '2.8', common_specs), + ('dri3proto', '1.0', common_specs), + ('fixesproto', '5.0', common_specs), + ('fontsproto', '2.1.3', common_specs), + ('glproto', '1.4.17', common_specs), + ('inputproto', '2.3.1', common_specs), + ('kbproto', '1.0.7', common_specs), + ('presentproto', '1.0', common_specs), + ('randrproto', '1.5.0', common_specs), + ('recordproto', '1.14.2', common_specs), + ('renderproto', '0.11', common_specs), + ('resourceproto', '1.2.0', common_specs), + ('scrnsaverproto', '1.2.2', common_specs), + ('videoproto', '2.3.3', common_specs), + ('xcmiscproto', '1.2.2', common_specs), + ('xextproto', '7.3.0', common_specs), + ('xf86bigfontproto', '1.2.0', common_specs), + ('xf86dgaproto', '2.1', common_specs), + ('xf86driproto', '2.1.1', common_specs), + ('xf86vidmodeproto', '2.3.1', common_specs), + ('xineramaproto', '1.2.1', common_specs), + ('xproto', '7.0.28', common_specs), + ('libXau', '1.0.8', common_specs), + ('libXdmcp', '1.1.2', common_specs), + ('xcb-proto', '1.11', common_specs), + ('libxcb', '1.11.1', common_specs), + ('xtrans', '1.3.5', common_specs), + ('libxkbcommon', '0.6.1', { + 'sources': ['libxkbcommon-%(version)s.tar.xz'], + 'start_dir': 'libxkbcommon-%(version)s', + }), + ('libX11', '1.6.3', common_specs), + ('libXext', '1.3.3', common_specs), + ('libFS', '1.0.7', common_specs), + ('libICE', '1.0.9', common_specs), + ('libSM', '1.2.2', common_specs), + ('libXScrnSaver', '1.2.2', common_specs), + ('libXt', '1.1.5', common_specs), + ('libXmu', '1.1.2', common_specs), + ('libXpm', '3.5.11', common_specs), + ('libXaw', '1.0.13', common_specs), + ('libXfixes', '5.0.2', common_specs), + ('libXcomposite', '0.4.4', common_specs), + ('libXrender', '0.9.9', common_specs), + ('libXcursor', '1.1.14', common_specs), + ('libXdamage', '1.1.4', common_specs), + ('libfontenc', '1.1.3', common_specs), + ('libXfont', '1.5.1', common_specs), + ('libXft', '2.3.2', common_specs), + ('libXi', '1.7.6', common_specs), + ('libXinerama', '1.1.3', common_specs), + ('libXrandr', '1.5.0', common_specs), + ('libXres', '1.0.7', common_specs), + ('libXtst', '1.2.2', common_specs), + ('libXv', '1.0.10', common_specs), + ('libXvMC', '1.0.9', common_specs), + ('libXxf86dga', '1.1.4', common_specs), + ('libXxf86vm', '1.1.4', common_specs), + ('libdmx', '1.1.3', common_specs), + ('libpciaccess', '0.13.4', common_specs), + ('libxkbfile', '1.0.9', common_specs), + ('libxshmfence', '1.2', common_specs), + ('xcb-util', '0.4.0', common_specs), + ('xcb-util-image', '0.4.0', common_specs), + ('xcb-util-keysyms', '0.4.0', common_specs), + ('xcb-util-renderutil', '0.3.9', common_specs), + ('xcb-util-wm', '0.4.1', common_specs), + ('xcb-util-cursor', '0.1.3', common_specs), +] + +# Python is required for xcb-proto +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[0:2]) + +preconfigopts = "if [ ! -f configure ]; then ./autogen.sh; fi && " + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['include/X11/Xlib.h', 'include/X11/Xutil.h'], + 'dirs': ['include/GL', 'include/X11', 'include/X11/extensions', 'lib', + 'lib/python%s/site-packages/xcbgen' % pyshortver, 'lib/pkgconfig', 'share/pkgconfig'], +} + +moduleclass = 'vis' -- GitLab From 980e36ac973fdd7815f389a3c3b78821f5299ab7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 10:09:09 +0100 Subject: [PATCH 0232/1311] adding easyconfigs: rhdf5-2.18.0-intel-2016b-R-3.3.1.eb --- .../rhdf5/rhdf5-2.18.0-intel-2016b-R-3.3.1.eb | 29 +++++++++++++++++++ .../zlibbioc-1.20.0-intel-2016b-R-3.3.1.eb | 26 +++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 easybuild/easyconfigs/r/rhdf5/rhdf5-2.18.0-intel-2016b-R-3.3.1.eb create mode 100644 easybuild/easyconfigs/z/zlibbioc/zlibbioc-1.20.0-intel-2016b-R-3.3.1.eb diff --git a/easybuild/easyconfigs/r/rhdf5/rhdf5-2.18.0-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/r/rhdf5/rhdf5-2.18.0-intel-2016b-R-3.3.1.eb new file mode 100644 index 0000000000..4948bcb9cc --- /dev/null +++ b/easybuild/easyconfigs/r/rhdf5/rhdf5-2.18.0-intel-2016b-R-3.3.1.eb @@ -0,0 +1,29 @@ +easyblock = 'RPackage' + +name = 'rhdf5' +version = '2.18.0' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://bioconductor.org/packages/release/bioc/html/rhdf5.html' +description = "This R/Bioconductor package provides an interface between HDF5 and R." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [ + 'http://bioconductor.org/packages/release/bioc/src/contrib/', + 'http://bioconductor.org/packages/3.3/bioc/src/contrib/', +] +sources = ['rhdf5_%(version)s.tar.gz'] + +dependencies = [ + ('R', '3.3.1'), + ('zlibbioc', '1.20.0', versionsuffix), + ('HDF5', '1.8.17'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/z/zlibbioc/zlibbioc-1.20.0-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/z/zlibbioc/zlibbioc-1.20.0-intel-2016b-R-3.3.1.eb new file mode 100644 index 0000000000..4bfc5357a0 --- /dev/null +++ b/easybuild/easyconfigs/z/zlibbioc/zlibbioc-1.20.0-intel-2016b-R-3.3.1.eb @@ -0,0 +1,26 @@ +easyblock = 'RPackage' + +name = 'zlibbioc' +version = '1.20.0' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://bioconductor.org/packages/release/bioc/html/zlibbioc.html' +description = """This package uses the source code of zlib-1.2.5 to create libraries for systems that do not have + these available via other means.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [ + 'http://bioconductor.org/packages/release/bioc/src/contrib/', + 'http://bioconductor.org/packages/3.3/bioc/src/contrib/', +] +sources = ['zlibbioc_%(version)s.tar.gz'] + +dependencies = [('R', '3.3.1')] + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'lib' -- GitLab From fd5e19bec1c8ba90898cc8fad6f5b417d458ee8a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 10:27:21 +0100 Subject: [PATCH 0233/1311] adding easyconfigs: ack-2.14.eb --- easybuild/easyconfigs/a/ack/ack-2.14.eb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/a/ack/ack-2.14.eb diff --git a/easybuild/easyconfigs/a/ack/ack-2.14.eb b/easybuild/easyconfigs/a/ack/ack-2.14.eb new file mode 100644 index 0000000000..7f10d7a34e --- /dev/null +++ b/easybuild/easyconfigs/a/ack/ack-2.14.eb @@ -0,0 +1,24 @@ +easyblock = 'CmdCp' + +name = 'ack' +version = '2.14' + +homepage = 'http://beyondgrep.com/' +description = "ack is a tool like grep, optimized for programmers" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [homepage] +# use 'cp' as 'unpack' command +sources = [('ack-%(version)s-single-file', "cp %s ack")] + +cmds_map = [('ack', "chmod a+rx ack")] + +files_to_copy = [(['ack'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/ack'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From 951d0444b47077363870f8e3baeb30130f193c82 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 10:56:07 +0100 Subject: [PATCH 0234/1311] enable running of tests in FFTW easyconfig using gompi/2017a --- easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb index 77015a0ad7..66f9239e19 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb @@ -11,4 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] +runtest = 'check' + moduleclass = 'numlib' -- GitLab From 044778cbccb3c49d0b131b331cc00f4ac7381e73 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 11:01:45 +0100 Subject: [PATCH 0235/1311] sync Python easyconfigs with foss/2015a with equivalent ones in develop --- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb | 6 +++--- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index a55f5a9bff..c5fe86070e 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -23,14 +23,14 @@ dependencies = [ ('SQLite', '3.10.0'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), # required for pycrypto -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's + # nice to have an up to date openssl for security reasons ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! -# package versions updated 28 May 2015 +# package versions updated May 28th 2015 exts_list = [ ('setuptools', '18.7.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index f2338d2948..68a366030d 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -20,8 +20,9 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '5.9'), ('SQLite', '3.10.0'), - ('Tk', '8.6.4', '-no-X11'), + ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), + ('XZ', '5.2.2'), # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's # nice to have an up to date openssl for security reasons ] @@ -29,7 +30,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev')] # order is important! -# package versions updated 10 Jan 2017 cf. EasyConfig for Python-3.5.1-foss-2016a.eb +# package versions updated Feb 25th 2016 exts_list = [ ('setuptools', '20.1.1', { 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], -- GitLab From b612216bacefe6526966216851e58965ebec7139 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 15:05:32 +0100 Subject: [PATCH 0236/1311] update FFTW 3.3.5 easyconfigs to use FFTW easyblock & enable running of tests --- .../f/FFTW/FFTW-3.3.5-gompi-2016.07.eb | 20 +----------------- .../f/FFTW/FFTW-3.3.5-gompi-2016.09.eb | 20 +----------------- .../f/FFTW/FFTW-3.3.5-gompi-2016b.eb | 20 +----------------- .../f/FFTW/FFTW-3.3.5-gompic-2016.10.eb | 20 +----------------- .../f/FFTW/FFTW-3.3.5-intel-2016b.eb | 21 +++++-------------- 5 files changed, 9 insertions(+), 92 deletions(-) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.07.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.07.eb index 854d665922..b4418131e1 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.07.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.07.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,22 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -common_configopts = "--enable-threads --enable-openmp --with-pic" - -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-quad-precision", - common_configopts + " --enable-sse2 --enable-mpi", # default as last -] - -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + - ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], - 'dirs': ['lib/pkgconfig'], -} +runtest = 'check' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.09.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.09.eb index 95601b61f5..2b26aebdb1 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.09.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016.09.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,22 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -common_configopts = "--enable-threads --enable-openmp --with-pic" - -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-quad-precision", - common_configopts + " --enable-sse2 --enable-mpi", # default as last -] - -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + - ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], - 'dirs': ['lib/pkgconfig'], -} +runtest = 'check' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016b.eb index e222c97b5d..2398a80c24 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016b.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2016b.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,22 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -common_configopts = "--enable-threads --enable-openmp --with-pic" - -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-quad-precision", - common_configopts + " --enable-sse2 --enable-mpi", # default as last -] - -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + - ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], - 'dirs': ['lib/pkgconfig'], -} +runtest = 'check' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompic-2016.10.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompic-2016.10.eb index 2499d7f87a..802e40e5f2 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompic-2016.10.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompic-2016.10.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,22 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -common_configopts = "--enable-threads --enable-openmp --with-pic" - -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-avx --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-quad-precision", - common_configopts + " --enable-sse2 --enable-avx --enable-mpi", # default as last -] - -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom', 'q-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']] + - ['lib/libfftw3q.a', 'lib/libfftw3q_omp.a'], - 'dirs': ['lib/pkgconfig'], -} +runtest = 'check' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb index 6fcdd25eb5..aba6939866 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb @@ -1,5 +1,3 @@ -easyblock = 'ConfigureMake' - name = 'FFTW' version = '3.3.5' @@ -13,22 +11,13 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] -common_configopts = "--enable-threads --enable-openmp --with-pic" - # no quad precision, requires GCC v4.6 or higher # see also http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html -configopts = [ - common_configopts + " --enable-single --enable-sse2 --enable-mpi", - common_configopts + " --enable-long-double --enable-mpi", - common_configopts + " --enable-sse2 --enable-mpi", # default as last -] +with_quad_prec = False + +# compilation fails when configuring with --enable-avx-128-fma +use_fma = False -sanity_check_paths = { - 'files': ['bin/fftw%s' % x for x in ['-wisdom', '-wisdom-to-conf', 'f-wisdom', 'l-wisdom']] + - ['include/fftw3%s' % x for x in ['-mpi.f03', '-mpi.h', '.f', '.f03', - '.h', 'l-mpi.f03', 'l.f03', 'q.f03']] + - ['lib/libfftw3%s%s.a' % (x, y) for x in ['', 'f', 'l'] for y in ['', '_mpi', '_omp', '_threads']], - 'dirs': ['lib/pkgconfig'], -} +runtest = 'check' moduleclass = 'numlib' -- GitLab From f2eba976b9a31b86c26cac9f3b7b2584d5477356 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Tue, 10 Jan 2017 16:40:56 +0200 Subject: [PATCH 0237/1311] Remove redudant byacc in libmatheval and remove trivial GSL update --- easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb | 4 ++-- .../l/libmatheval/libmatheval-1.1.11-foss-2016b.eb | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb index c5ee5164d4..f7799c2690 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-2.1-foss-2016b.eb @@ -11,9 +11,9 @@ description = """The GNU Scientific Library (GSL) is a numerical library for C a toolchain = {'version': '2016b', 'name': 'foss'} toolchainopts = {'opt': True, 'optarch': True, 'unroll': True, 'pic': True} -source_urls = [GNU_SOURCE] sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] -configopts = "--with-pic" +configopts = '--with-pic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb index 187e735268..ae6c12b340 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2016b.eb @@ -16,7 +16,6 @@ source_urls = [GNU_SOURCE] dependencies = [ ('flex', '2.6.0'), ('Bison', '3.0.4'), - ('byacc', '20160606'), ('Guile', '1.8.8'), ] -- GitLab From 175e23dc49bf0d75743200410f8d726937f306ad Mon Sep 17 00:00:00 2001 From: edo Date: Tue, 10 Jan 2017 17:27:23 +0100 Subject: [PATCH 0238/1311] adding easyconfigs: OpenFOAM-4.0-foss-2016b.eb --- .../o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb new file mode 100644 index 0000000000..bf8451bef3 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb @@ -0,0 +1,38 @@ +name = 'OpenFOAM' +version = '4.0' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/OpenFOAM/OpenFOAM-%(version_major)s.x/archive'] +sources = ['version-%(version)s.tar.gz'] + +checksums = ['294b520811aae87241f3a78423f05952'] + +patches = ['OpenFOAM-%(version)s-cleanup.patch'] + +dependencies = [ + ('libreadline', '6.3'), + ('ncurses', '6.0'), + # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) + ('METIS', '5.1.0'), + #('METIS', '5.1.0', '-32bitIDX'), + ('SCOTCH', '6.0.4'), + #('Boost', '1.61.0'), + ('CGAL', '4.8.1'), + ('ParaView', '5.1.2', '-mpi'), +] + +builddependencies = [ + ('Bison', '3.0.4'), + ('CMake', '3.6.1'), + ('flex', '2.6.0'), +] + +moduleclass = 'cae' -- GitLab From f45bd6199b3798c3e71822f0dd8a39f9fc37bcc9 Mon Sep 17 00:00:00 2001 From: edo Date: Tue, 10 Jan 2017 17:41:04 +0100 Subject: [PATCH 0239/1311] Missing dep. --- .../c/CGAL/CGAL-4.8.1-foss-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb new file mode 100644 index 0000000000..20c45dda38 --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb @@ -0,0 +1,34 @@ +name = 'CGAL' +version = '4.8.1' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-%(version)s'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('Boost', '1.61.0'), + ('MPFR', '3.1.4'), + ('GMP', '6.1.1'), + ('libGLU', '9.0.0'), + ('Qt5', '5.7.0'), +] + +builddependencies = [ + ('CMake', '3.6.1'), + ('Eigen', '3.2.9'), +] + +configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DWITH_ZLIB=ON -DWITH_MPFR=ON -DWITH_OpenGL=ON -DWITH_Eigen3=ON " +configopts += "-DWITH_GMPXX=ON -DWITH_LAPACK=ON -DWITH_BLAS=ON " + +moduleclass = 'numlib' -- GitLab From ffd9e45bc0efcbb849de538cfec749b3bc9979c1 Mon Sep 17 00:00:00 2001 From: edo Date: Tue, 10 Jan 2017 17:50:57 +0100 Subject: [PATCH 0240/1311] Missing dep. --- .../m/MPFR/MPFR-3.1.4-foss-2016b.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb new file mode 100644 index 0000000000..d0abf27110 --- /dev/null +++ b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'MPFR' +version = '3.1.4' + +homepage = 'http://www.mpfr.org' +description = """The MPFR library is a C library for multiple-precision + floating-point computations with correct rounding.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.mpfr.org/mpfr-%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +patches = ['MPFR_ictce_remove-deprecated-mp.patch'] + +dependencies = [('GMP', '6.1.1')] + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libmpfr.%s' % SHLIB_EXT, 'include/mpfr.h'], + 'dirs': [] +} + +moduleclass = 'math' -- GitLab From 8ecbcdc8d31f3058a3dca8daa4122933479d7696 Mon Sep 17 00:00:00 2001 From: edo Date: Tue, 10 Jan 2017 17:53:02 +0100 Subject: [PATCH 0241/1311] Missing dep. --- .../easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb new file mode 100644 index 0000000000..66c30f53b8 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'EB_Qt' + +name = 'Qt5' +version = '5.7.0' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/single/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/single/' +] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] + +patches = ['%(name)s-%(version)s-workaround-icpc-bug.patch'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +# qtgamepad needs recent kernel/libevdev (fails on RHEL 6.x) +configopts = '-skip qtgamepad' + +dependencies = [ + ('GLib', '2.49.5'), + ('libpng', '1.6.24'), + ('X11', '20160819'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' -- GitLab From a1158ee3b38aaa61221ad610324a0b35a60831c1 Mon Sep 17 00:00:00 2001 From: edo Date: Tue, 10 Jan 2017 17:54:24 +0100 Subject: [PATCH 0242/1311] Missing dep. --- .../easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb new file mode 100644 index 0000000000..2e997dc434 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.2.9' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' -- GitLab From a6f8634b21cff39fe345e13342495b947211a9a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Jan 2017 20:23:49 +0100 Subject: [PATCH 0243/1311] bump to libxsmm 1.6.4 --- easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb | 2 +- ...{libxsmm-1.6-intel-2016b.eb => libxsmm-1.6.4-intel-2016b.eb} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/l/libxsmm/{libxsmm-1.6-intel-2016b.eb => libxsmm-1.6.4-intel-2016b.eb} (97%) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb index cd0f3a9a66..0ca8d21ab0 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb @@ -21,7 +21,7 @@ dependencies = [ ('Libint', '1.1.6'), ('libxc', '2.2.3'), ('PLUMED', '2.2.3'), - ('libxsmm', '1.6'), + ('libxsmm', '1.6.4'), ] builddependencies = [ diff --git a/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-intel-2016b.eb similarity index 97% rename from easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb rename to easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-intel-2016b.eb index bb0cffc7fe..8418328180 100644 --- a/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-intel-2016b.eb @@ -1,7 +1,7 @@ easyblock = 'ConfigureMake' name = 'libxsmm' -version = '1.6' +version = '1.6.4' homepage = 'https://github.com/hfp/libxsmm' description = """LIBXSMM is a library for small dense and small sparse matrix-matrix multiplications -- GitLab From a8bbc9ddafb2c073711bf7a5ff3296b4a5acb4fe Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Tue, 10 Jan 2017 16:26:22 -0500 Subject: [PATCH 0244/1311] New easyconfig file for Yade-2016.06a with foss-2016b toolchain --- .../Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bd962a1366 --- /dev/null +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,62 @@ +easyblock = 'CMakeMake' + +name = 'Yade' +version = '2016.06a' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://yade-dem.org/doc/' +description = """ Yade is an extensible open-source framework for discrete numerical models, + focused on Discrete Element Method. The computation parts are written in c++ using flexible object model, + allowing independent implementation of new alogrithms and interfaces. + Python is used for rapid and concise scene construction, simulation control, postprocessing and debugging. """ + +toolchain = {'name': foss'version': '2016b'} + +source_urls = ['https://launchpad.net/yade/trunk/yade-1.00.0/+download/'] +sources = [SOURCELOWER_TAR_GZ] +patches = ['Yade-%(version)s_include-signal.patch'] + +dependencies = [ + ('Boost', '1.61.0', versionsuffix), + ('CGAL', '4.8.1', versionsuffix), + ('GDB', '7.11.1', versionsuffix), + ('GL2PS', '1.3.9'), + ('GTS', '0.7.6'), + ('IPython', '5.1.0', versionsuffix), + ('libQGLViewer', '2.6.3'), + ('Loki', '0.1.7'), + ('matplotlib', '1.5.3', versionsuffix), + ('minieigen', '0.5.3', versionsuffix), + ('PyGTS', '0.3.1', versionsuffix), + ('Python', '2.7.12'), + ('Qt5', '5.7.0'), + ('SQLite', '3.13.0'), + ('VTK', '6.3.0', versionsuffix), + ('zlib', '1.2.8'), +] + +builddependencies = [ + ('CMake', '3.7.1'), + ('Eigen', '3.2.9'), +] + +separate_build_dir = True + +configopts = '-DENABLE_GUI=OFF -DENABLE_LINSOLV=OFF -DENABLE_PFVFLOW=OFF ' +configopts += '-DCGAL_INCLUDE_DIR=$EBROOTCGAL/include ' +configopts += '-DGMP_INCLUDE_DIR=$EBROOTGMP/include -DGMP_LIBRARIES=$EBROOTGMP/lib -DGMPXX_LIBRARIES=$EBROOTGMP/lib ' + +modextrapaths = { + 'LD_LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'PYTHONPATH': ['lib/x86_64-linux-gnu/yade-%(version)s/py', 'lib64/yade-%(version)s/py'], +} + +sanity_check_paths = { + 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', + ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], + 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], +} + +moduleclass = 'devel' -- GitLab From 1c0dbbadb2418d1d81de6e33d89942896cbd31ba Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 11 Jan 2017 11:27:01 +1300 Subject: [PATCH 0245/1311] Add pkg-config easyconfig (needed dependency) --- .../pkg-config-0.29.1-foss-2015a.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2015a.eb diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2015a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2015a.eb new file mode 100644 index 0000000000..ab1875711a --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2015a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From c8e921cbc2ef59a291e511c11167edaef68bd2ca Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 11 Jan 2017 11:27:58 +1300 Subject: [PATCH 0246/1311] Remove some unnecessary comments --- .../easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb index 815b77935c..dc6e546916 100644 --- a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-foss-2015a.eb @@ -13,8 +13,8 @@ source_urls = ['http://www.freedesktop.org/software/fontconfig/release/'] sources = [SOURCE_TAR_GZ] dependencies = [ - ('expat', '2.1.0'), # Selected an older version for consistency - ('freetype', '2.6.2'), # Selected an older version for consistency + ('expat', '2.1.0'), + ('freetype', '2.6.2'), ] configopts = '--disable-docs ' -- GitLab From 4e477a5d8a3da2511e186a3792fa24fcc7db958f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 11 Jan 2017 14:47:32 +1300 Subject: [PATCH 0247/1311] Removed an unnecessary comment --- easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb index 89cbcbda34..ca30f6a696 100644 --- a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb +++ b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb @@ -21,7 +21,7 @@ builddependencies = [ ('pkg-config', '0.29.1'), ] dependencies = [ - ('freetype', '2.6.2'), # Slightly older version than in foss-2016b for consistency + ('freetype', '2.6.2'), ('fontconfig', '2.12.1'), ('zlib', '1.2.8'), ('bzip2', '1.0.6'), -- GitLab From bb1bceb47f8e8874d26df31de22b873c334498ed Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Wed, 11 Jan 2017 00:16:06 -0500 Subject: [PATCH 0248/1311] missing dependencies --- .../CGAL-4.8.1-foss-2016b-Python-2.7.12.eb | 36 ++++ .../c/CMake/CMake-3.7.1-foss-2016b.eb | 31 ++++ .../e/Eigen/Eigen-3.2.9-foss-2016b.eb | 13 ++ .../f/freeglut/freeglut-3.0.0-foss-2016b.eb | 35 ++++ .../GDB-7.11.1-foss-2016b-Python-2.7.12.eb | 35 ++++ .../g/GL2PS/GL2PS-1.3.9-foss-2016b.eb | 32 ++++ .../easyconfigs/g/GTS/GTS-0.7.6-foss-2016b.eb | 25 +++ .../IPython-5.1.0-foss-2016b-Python-2.7.12.eb | 155 ++++++++++++++++++ .../l/Loki/Loki-0.1.7-foss-2016b.eb | 24 +++ .../libQGLViewer-2.6.3-foss-2016b.eb | 20 +++ .../m/MPFR/MPFR-3.1.4-foss-2016b.eb | 26 +++ ...inieigen-0.5.3-foss-2016b-Python-2.7.12.eb | 26 +++ .../PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb | 30 ++++ .../path.py-8.2.1-foss-2016b-Python-2.7.12.eb | 33 ++++ .../pip/pip-8.1.2-foss-2016b-Python-2.7.12.eb | 19 +++ ...-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb | 33 ++++ .../easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 33 ++++ .../testpath-0.3-foss-2016b-Python-2.7.12.eb | 30 ++++ .../VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb | 58 +++++++ .../wcwidth-0.1.7-foss-2016b-Python-2.7.12.eb | 30 ++++ .../Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 124 +++++++------- 21 files changed, 786 insertions(+), 62 deletions(-) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb create mode 100644 easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/GDB/GDB-7.11.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/GTS/GTS-0.7.6-foss-2016b.eb create mode 100644 easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.3-foss-2016b.eb create mode 100644 easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/path.py/path.py-8.2.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/pip/pip-8.1.2-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/t/testpath/testpath-0.3-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/w/wcwidth/wcwidth-0.1.7-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..e32190898d --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,36 @@ +name = 'CGAL' +version = '4.8.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-%(version)s'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('Python', '2.7.12'), + ('Boost', '1.61.0', versionsuffix), + ('MPFR', '3.1.4'), + ('GMP', '6.1.1'), + ('libGLU', '9.0.0'), + ('Qt5', '5.7.0'), +] + +builddependencies = [ + ('CMake', '3.7.1'), + ('Eigen', '3.2.9'), +] + +configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DWITH_ZLIB=ON -DWITH_MPFR=ON -DWITH_OpenGL=ON -DWITH_Eigen3=ON " +configopts += "-DWITH_GMPXX=ON -DWITH_LAPACK=ON -DWITH_BLAS=ON " + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb new file mode 100644 index 0000000000..e459f784ef --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.1' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.0.2j'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb new file mode 100644 index 0000000000..ce9863f2a8 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.2.9' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016b.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016b.eb new file mode 100644 index 0000000000..9a0faa6f49 --- /dev/null +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-foss-2016b.eb @@ -0,0 +1,35 @@ +easyblock = 'CMakeMake' + +name = 'freeglut' +version = '3.0.0' + +homepage = 'http://freeglut.sourceforge.net/' +description = "freeglut is a completely OpenSourced alternative to the OpenGL Utility Toolkit (GLUT) library." + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(name)s'] + +builddependencies = [('CMake', '3.7.1')] + +dependencies = [ + ('X11', '20160819'), + ('libGLU', '9.0.0'), + ('Mesa', '12.0.2'), +] + +configopts = ' -DX11_X11_LIB="$EBROOTX11/lib/libX11.so" ' +configopts += ' -DX11_X11_INCLUDE_PATH="$EBROOTX11/include/X11" ' +configopts += ' -DX11_Xext_LIB="$EBROOTX11/lib/libXext.so" ' +configopts += ' -DX11_Xrandr_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xrandr_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' +configopts += ' -DX11_Xi_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xi_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' + +sanity_check_paths = { + 'files': [('lib/libglut.a', 'lib64/libglut.a'), ('lib/libglut.%s' % SHLIB_EXT, 'lib64/libglut.%s' % SHLIB_EXT)], + 'dirs': ['include/GL'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/g/GDB/GDB-7.11.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDB/GDB-7.11.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..f10761fccd --- /dev/null +++ b/easybuild/easyconfigs/g/GDB/GDB-7.11.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'GDB' +version = '7.11.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gnu.org/software/gdb/gdb.html' +description = "The GNU Project Debugger" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = [GNU_SOURCE] + +patches = ['GDB-7.9-missing-makeinfo.patch'] + +dependencies = [ + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('expat', '2.2.0'), + ('Python', '2.7.12'), +] + +configopts = '--with-system-zlib --with-python=$EBROOTPYTHON/bin/python --with-expat=$EBROOTEXPAT ' +configopts += '--with-system-readline --enable-tui --enable-plugins' + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/gdb', 'bin/gdbserver'], + 'dirs': [], +} + +moduleclass = 'debugger' diff --git a/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb new file mode 100644 index 0000000000..153b5aa920 --- /dev/null +++ b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'CMakeMake' + +name = 'GL2PS' +version = '1.3.9' + +homepage = 'http://www.geuz.org/gl2ps/' +description = """GL2PS: an OpenGL to PostScript printing library""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://geuz.org/gl2ps/src/'] +sources = [SOURCELOWER_TGZ] + +builddependencies = [ + ('CMake', '3.7.1'), +] + +dependencies = [ + ('X11', '20160819'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('freeglut', '3.0.0'), + ('libpng', '1.6.26'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['include/gl2ps.h', 'lib/libgl2ps.so'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/GTS/GTS-0.7.6-foss-2016b.eb b/easybuild/easyconfigs/g/GTS/GTS-0.7.6-foss-2016b.eb new file mode 100644 index 0000000000..a04d059816 --- /dev/null +++ b/easybuild/easyconfigs/g/GTS/GTS-0.7.6-foss-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'GTS' +version = '0.7.6' + +homepage = 'http://gts.sourceforge.net/' +description = """GTS stands for the GNU Triangulated Surface Library. + It is an Open Source Free Software Library intended to provide a set of useful + functions to deal with 3D surfaces meshed with interconnected triangles.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('GLib', '2.49.5'), +] + +sanity_check_paths = { + 'files': ['lib/libgts.%s' % SHLIB_EXT, 'bin/gts2oogl', 'bin/gtscheck'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..df95bd6282 --- /dev/null +++ b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,155 @@ +easyblock = 'Bundle' + +name = 'IPython' +version = '5.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://ipython.org/index.html' +description = """IPython provides a rich architecture for interactive computing with: + Powerful interactive shells (terminal and Qt-based). + A browser-based notebook with support for code, text, mathematical expressions, inline plots and other rich media. + Support for interactive data visualization and use of GUI toolkits. + Flexible, embeddable interpreters to load into your own projects. + Easy to use, high performance tools for parallel computing.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +dependencies = [ + ('Python', '2.7.12'), + ('PyZMQ', '16.0.2', '%s-zmq4' % versionsuffix), + ('testpath', '0.3', versionsuffix), + # required by 'nbconvert', but causes problems w.r.t. 'backports' module... + # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 + #('entrypoints', '0.2.2', versionsuffix), + ('path.py', '8.2.1', versionsuffix), + ('prompt-toolkit', '1.0.6', versionsuffix), +] + +# this is a bundle of Python packages +# XXX: the wheel packages (testpath, entrypoints, path.py, prompt-toolkit) have +# to be included as dependencies because bundling wheels does not work +exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') + +exts_list = [ + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('requests', '2.11.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], + }), + ('nbformat', '4.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbformat/'], + }), + ('Pygments', '2.1.3', { + 'source_urls': ['https://pypi.python.org/packages/source/P/Pygments/'], + 'modulename': 'pygments', + }), + ('singledispatch', '3.4.0.3', { + 'source_urls': ['https://pypi.python.org/packages/source/s/singledispatch/'], + }), + ('certifi', '2016.8.8', { + 'source_urls': ['https://pypi.python.org/packages/source/c/certifi/'], + }), + ('backports_abc', '0.4', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports_abc/'], + }), + ('tornado', '4.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/t/tornado/'], + }), + ('MarkupSafe', '0.23', { + 'source_urls': ['https://pypi.python.org/packages/source/M/MarkupSafe/'], + 'modulename': 'markupsafe', + }), + ('Jinja2', '2.8', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + 'modulename': 'jinja2', + }), + ('jupyter_client', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_client/'], + }), + ('functools32', '3.2.3-2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/functools32/'], + }), + ('jsonschema', '2.5.1', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jsonschema/'], + }), + ('mistune', '0.7.3', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mistune/'], + }), + ('ptyprocess', '0.5.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/ptyprocess/'], + }), + ('terminado', '0.6', { + 'source_urls': ['https://pypi.python.org/packages/source/t/terminado/'], + }), + ('setuptools', '25.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + }), + ('simplegeneric', '0.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/simplegeneric/'], + 'source_tmpl': 'simplegeneric-%(version)s.zip', + }), + ('ipython_genutils', '0.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython_genutils/'], + }), + ('pathlib2', '2.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pathlib2/'], + }), + ('pickleshare', '0.7.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pickleshare/'], + }), + ('traitlets', '4.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traitlets/'], + }), + ('notebook', '4.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/n/notebook/'], + }), + ('jupyter_core', '4.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_core/'], + }), + ('ipykernel', '4.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipykernel/'], + }), + ('pexpect', '4.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], + }), + # disabled because entrypoints on which this depends pull in configparser, which causes problems + # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 + #('nbconvert', '4.2.0', { + # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + #}), + ('backports.shutil_get_terminal_size', '1.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], + }), + ('decorator', '4.0.10', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('ipython', version, { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython/'], + 'patches': ['ipython-5.0.0_fix-test-paths-symlink.patch'], + 'modulename': 'IPython', + }), + ('ipywidgets', '5.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipywidgets/'], + }), + ('widgetsnbextension', '1.2.6', { + 'source_urls': ['https://pypi.python.org/packages/source/w/widgetsnbextension/'], + }), +] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/ipython'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/IPython'], +} + +sanity_check_commands = [ + ('ipython -h', ''), + ('ipython notebook --help', ''), + ('iptest', ''), + ('iptest2', ''), +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb new file mode 100644 index 0000000000..63a5c28598 --- /dev/null +++ b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'Loki' +version = '0.1.7' + +homepage = 'http://loki-lib.sourceforge.net/' +description = """ Loki is a C++ library of designs, containing flexible implementations of common design patterns and + idioms. """ + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://sourceforge.net/projects/loki-lib/files/Loki/Loki %(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +skipsteps = ['configure'] + +installopts = "prefix=%(installdir)s" + +sanity_check_paths={ + 'files': ['lib/libloki.a', 'lib/libloki.%s' % SHLIB_EXT, 'lib/libloki.%s.%%(version)s' % SHLIB_EXT], + 'dirs': ['include/loki'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.3-foss-2016b.eb b/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.3-foss-2016b.eb new file mode 100644 index 0000000000..faac098188 --- /dev/null +++ b/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.3-foss-2016b.eb @@ -0,0 +1,20 @@ +name = 'libQGLViewer' +version = '2.6.3' + +homepage = 'http://libqglviewer.com/' +description = "libQGLViewer is a C++ library based on Qt that eases the creation of OpenGL 3D viewers." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.libqglviewer.com/src/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('libGLU', '9.0.0'), +] + +builddependencies = [('Qt', '4.8.7')] + +start_dir = '%(builddir)s/libQGLViewer-%(version)s/QGLViewer' + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb new file mode 100644 index 0000000000..d9a98da483 --- /dev/null +++ b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'MPFR' +version = '3.1.4' + +homepage = 'http://www.mpfr.org' +description = """The MPFR library is a C library for multiple-precision + floating-point computations with correct rounding.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.mpfr.org/mpfr-%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +patches = ['MPFR_ictce_remove-deprecated-mp.patch'] + +dependencies = [('GMP', '6.1.1')] + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libmpfr.%s' % SHLIB_EXT, 'include/mpfr.h'], + 'dirs': [] +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..b281fdb609 --- /dev/null +++ b/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'minieigen' +version = '0.5.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://launchpad.net/minieigen/' +description = """A small wrapper for core parts of EIgen, c++ library for linear algebra.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] + +dependencies = [ + ('Boost', '1.61.0', versionsuffix), + ('Eigen', '3.2.9'), + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': ['lib/python%%(pyshortver)s/site-packages/minieigen.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..372e050018 --- /dev/null +++ b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyGTS' +version = '0.3.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://sourceforge.net/projects/pygts/' +description = """ PyGTS is a python package used to construct, manipulate, + and perform computations on triangulated surfaces. + It is a hand-crafted and pythonic binding for the GNU Triangulated Surface (GTS) Library. """ + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('GLib', '2.49.5'), + ('GTS' ,'0.7.6'), +] + +options = {'modulename': 'gts'} + +sanity_check_paths = { + 'files': ['lib/python%%(pyshortver)s/site-packages/gts/_gts.%s' % SHLIB_EXT], + 'dirs':[], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/path.py/path.py-8.2.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/path.py/path.py-8.2.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..85d32100c5 --- /dev/null +++ b/easybuild/easyconfigs/p/path.py/path.py-8.2.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,33 @@ +easyblock = 'PythonPackage' + +name = 'path.py' +version = '8.2.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jaraco/path.py' +description = """path.py is a Python library implementing path objects as first-class entities, + allowing common operations on files to be invoked on those path objects directly.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/fc/fc/dcae2146aed6becbea77158eddb4e437718170efeade0f7fdf0aebe46b94/'] +sources = ['path.py-%(version)s-py2.py3-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), +] +builddependencies = [ + ('pip', '8.1.2', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['lib/python%(pyshortver)s/site-packages/path.py'], + 'dirs': [], +} + +options = {'modulename': 'path'} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/pip/pip-8.1.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/pip/pip-8.1.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..77fa36d059 --- /dev/null +++ b/easybuild/easyconfigs/p/pip/pip-8.1.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,19 @@ +easyblock = 'PythonPackage' + +name = 'pip' +version = '8.1.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pip.pypa.io' +description = """The PyPA recommended tool for installing Python packages.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..e6261f564a --- /dev/null +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,33 @@ +easyblock = 'PythonPackage' + +name = 'prompt-toolkit' +version = '1.0.6' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' +description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/eb/81/a7ad3c223f323d05381208c262889bd09577852bd5044a13965a9a13f5ed/'] +sources = ['prompt_toolkit-%(version)s-py2-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), + ('wcwidth', '0.1.7', versionsuffix), +] +builddependencies = [ + ('pip', '8.1.2', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/prompt_toolkit'], +} + +options = {'modulename': 'prompt_toolkit'} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb new file mode 100644 index 0000000000..9d87351ad2 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'EB_Qt' + +name = 'Qt5' +version = '5.7.0' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/single/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/single/' +] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] + +patches = ['%(name)s-%(version)s-workaround-icpc-bug.patch'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +# qtgamepad needs recent kernel/libevdev (fails on RHEL 6.x) +configopts = '-skip qtgamepad' + +dependencies = [ + ('GLib', '2.49.5'), + ('libpng', '1.6.26'), + ('X11', '20160819'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/testpath/testpath-0.3-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/t/testpath/testpath-0.3-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..0c3651f6d7 --- /dev/null +++ b/easybuild/easyconfigs/t/testpath/testpath-0.3-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'testpath' +version = '0.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jupyter/testpath' +description = """Test utilities for code working with files and commands""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/py2.py3/t/testpath/'] +sources = ['testpath-%(version)s-py2.py3-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), +] +builddependencies = [ + ('pip', '8.1.2', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/testpath'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..3054f25a62 --- /dev/null +++ b/easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,58 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## + +easyblock = 'CMakeMake' + +name = 'VTK' +version = '7.0.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.vtk.org' +description = """The Visualization Toolkit (VTK) is an open-source, freely available software system for + 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several + interpreted interface layers including Tcl/Tk, Java, and Python. VTK supports a wide variety of visualization + algorithms including: scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques + such as: implicit modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.vtk.org/files/release/%(version_major_minor)s'] +sources = [ + SOURCE_TAR_GZ, + '%(name)sData-%(version)s.tar.gz', +] + +builddependencies = [('CMake', '3.6.1')] + +dependencies = [ + ('Python', '2.7.12'), + ('libGLU', '9.0.0'), +] + +configopts = "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DVTK_WRAP_PYTHON=ON " +configopts += "-DPYTHON_LIBRARY=$EBROOTPYTHON/lib/libpython%%(pyshortver)s.%s " % SHLIB_EXT +configopts += " -DPYTHON_INCLUDE_DIR=$EBROOTPYTHON/include/python%(pyshortver)s " +preinstallopts = "mkdir -p %(installdir)s/lib/python%(pyshortver)s/site-packages/ && " +preinstallopts += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && " + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/vtk%s-%%(version_major_minor)s' % x for x in ['EncodeString', 'HashSource', 'mkg3states']], + 'dirs': ['lib/python%(pyshortver)s/site-packages/', 'include/vtk-%(version_major_minor)s'], +} + +sanity_check_commands = [('python', "-c 'import %(namelower)s'")] + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/w/wcwidth/wcwidth-0.1.7-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/w/wcwidth/wcwidth-0.1.7-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..277bc0108a --- /dev/null +++ b/easybuild/easyconfigs/w/wcwidth/wcwidth-0.1.7-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'wcwidth' +version = '0.1.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jquast/wcwidth' +description = """wcwidth is a low-level Python library to simplify Terminal emulation.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/7e/9f/526a6947247599b084ee5232e4f9190a38f398d7300d866af3ab571a5bfe/'] +sources = ['%(name)s-%(version)s-py2.py3-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), +] +builddependencies = [ + ('pip', '8.1.2', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/wcwidth'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index bd962a1366..e778315048 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -1,62 +1,62 @@ -easyblock = 'CMakeMake' - -name = 'Yade' -version = '2016.06a' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://yade-dem.org/doc/' -description = """ Yade is an extensible open-source framework for discrete numerical models, - focused on Discrete Element Method. The computation parts are written in c++ using flexible object model, - allowing independent implementation of new alogrithms and interfaces. - Python is used for rapid and concise scene construction, simulation control, postprocessing and debugging. """ - -toolchain = {'name': foss'version': '2016b'} - -source_urls = ['https://launchpad.net/yade/trunk/yade-1.00.0/+download/'] -sources = [SOURCELOWER_TAR_GZ] -patches = ['Yade-%(version)s_include-signal.patch'] - -dependencies = [ - ('Boost', '1.61.0', versionsuffix), - ('CGAL', '4.8.1', versionsuffix), - ('GDB', '7.11.1', versionsuffix), - ('GL2PS', '1.3.9'), - ('GTS', '0.7.6'), - ('IPython', '5.1.0', versionsuffix), - ('libQGLViewer', '2.6.3'), - ('Loki', '0.1.7'), - ('matplotlib', '1.5.3', versionsuffix), - ('minieigen', '0.5.3', versionsuffix), - ('PyGTS', '0.3.1', versionsuffix), - ('Python', '2.7.12'), - ('Qt5', '5.7.0'), - ('SQLite', '3.13.0'), - ('VTK', '6.3.0', versionsuffix), - ('zlib', '1.2.8'), -] - -builddependencies = [ - ('CMake', '3.7.1'), - ('Eigen', '3.2.9'), -] - -separate_build_dir = True - -configopts = '-DENABLE_GUI=OFF -DENABLE_LINSOLV=OFF -DENABLE_PFVFLOW=OFF ' -configopts += '-DCGAL_INCLUDE_DIR=$EBROOTCGAL/include ' -configopts += '-DGMP_INCLUDE_DIR=$EBROOTGMP/include -DGMP_LIBRARIES=$EBROOTGMP/lib -DGMPXX_LIBRARIES=$EBROOTGMP/lib ' - -modextrapaths = { - 'LD_LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], - 'LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], - 'PYTHONPATH': ['lib/x86_64-linux-gnu/yade-%(version)s/py', 'lib64/yade-%(version)s/py'], -} - -sanity_check_paths = { - 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', - ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, - 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], - 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], -} - -moduleclass = 'devel' +easyblock = 'CMakeMake' + +name = 'Yade' +version = '2016.06a' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://yade-dem.org/doc/' +description = """ Yade is an extensible open-source framework for discrete numerical models, + focused on Discrete Element Method. The computation parts are written in c++ using flexible object model, + allowing independent implementation of new alogrithms and interfaces. + Python is used for rapid and concise scene construction, simulation control, postprocessing and debugging. """ + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://launchpad.net/yade/trunk/yade-1.00.0/+download/'] +sources = [SOURCELOWER_TAR_GZ] +patches = ['Yade-%(version)s_include-signal.patch'] + +dependencies = [ + ('Boost', '1.61.0', versionsuffix), + ('CGAL', '4.8.1', versionsuffix), + ('GDB', '7.11.1', versionsuffix), + ('GL2PS', '1.3.9'), + ('GTS', '0.7.6'), + ('IPython', '5.1.0', versionsuffix), + ('libQGLViewer', '2.6.3'), + ('Loki', '0.1.7'), + ('matplotlib', '1.5.3', versionsuffix), + ('minieigen', '0.5.3', versionsuffix), + ('PyGTS', '0.3.1', versionsuffix), + ('Python', '2.7.12'), + ('Qt5', '5.7.0'), + ('SQLite', '3.13.0'), + ('VTK', '7.0.0', versionsuffix), + ('zlib', '1.2.8'), +] + +builddependencies = [ + ('CMake', '3.7.1'), + ('Eigen', '3.2.9'), +] + +separate_build_dir = True + +configopts = '-DENABLE_GUI=OFF -DENABLE_LINSOLV=OFF -DENABLE_PFVFLOW=OFF ' +configopts += '-DCGAL_INCLUDE_DIR=$EBROOTCGAL/include ' +configopts += '-DGMP_INCLUDE_DIR=$EBROOTGMP/include -DGMP_LIBRARIES=$EBROOTGMP/lib -DGMPXX_LIBRARIES=$EBROOTGMP/lib ' + +modextrapaths = { + 'LD_LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'PYTHONPATH': ['lib/x86_64-linux-gnu/yade-%(version)s/py', 'lib64/yade-%(version)s/py'], +} + +sanity_check_paths = { + 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', + ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], + 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], +} + +moduleclass = 'devel' -- GitLab From 73ee23da5cdd17ffcb8d8a7a23b18d376ec8716d Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 11 Jan 2017 09:29:17 +0100 Subject: [PATCH 0249/1311] Update CP2K-4.1-foss-2016b-psmp.eb Let people turn off tests that require mpi tests themselves --- easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb index 85ce41dbb8..1cc39ce082 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb @@ -30,8 +30,6 @@ builddependencies = [ ('flex', '2.6.0'), ('Bison', '3.0.4'), ] -# Don't run tests, they use mpirun -runtest = False # don't use parallel make, results in compilation failure # because Fortran module files aren't created before they are needed -- GitLab From 59e9ec60a3bc7ef17e0870c2856b8957e6a9cc50 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 11 Jan 2017 09:30:46 +0100 Subject: [PATCH 0250/1311] Update CP2K-4.1-foss-2016b-psmp.eb Remove plumed setting, this is figured out by the easyblock. Remove the datadir copy, this is now handled by the easyblock. --- easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb | 9 --------- 1 file changed, 9 deletions(-) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb index 1cc39ce082..3d337a4c78 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb @@ -40,13 +40,4 @@ type = 'psmp' # regression test reports failures ignore_regtest_fails = True -plumed = True - -postinstallcmds = [ "cp -a %(builddir)s/%(namelower)s-%(version)s/data %(installdir)s" ] - -modextravars = { - 'CP2K_DATA_DIR': '%(installdir)s/data', -} - - moduleclass = 'chem' -- GitLab From 0ba514938abccb074e6f0c2f9a32e27ddef98ef7 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 11 Jan 2017 10:38:00 +0200 Subject: [PATCH 0251/1311] adding easyconfigs: libmatheval-1.1.11-foss-2015b.eb, libmatheval-1.1.11-intel-2015b.eb, libmatheval-1.1.11-intel-2016a.eb, libmatheval-1.1.11-intel-2016b.eb, libmatheval-1.1.8-goolf-1.4.10.eb, libmatheval-1.1.8-ictce-5.3.0.eb --- .../easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb | 1 - .../easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb | 1 - .../easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016a.eb | 1 - .../easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016b.eb | 1 - .../easyconfigs/l/libmatheval/libmatheval-1.1.8-goolf-1.4.10.eb | 1 - .../easyconfigs/l/libmatheval/libmatheval-1.1.8-ictce-5.3.0.eb | 1 - 6 files changed, 6 deletions(-) diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb index e1b1e8de36..87e0b67487 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2015b.eb @@ -16,7 +16,6 @@ source_urls = [GNU_SOURCE] dependencies = [ ('flex', '2.5.39'), ('Bison', '3.0.4'), - ('byacc', '20150711'), ('Guile', '1.8.8'), ] diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb index 61dae0d3d6..d95e44d0d5 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2015b.eb @@ -16,7 +16,6 @@ source_urls = [GNU_SOURCE] dependencies = [ ('flex', '2.5.39'), ('Bison', '3.0.4'), - ('byacc', '20150711'), ('Guile', '1.8.8'), ] diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016a.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016a.eb index e8c49e497e..5cd1c4de66 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016a.eb @@ -16,7 +16,6 @@ source_urls = [GNU_SOURCE] dependencies = [ ('flex', '2.6.0'), ('Bison', '3.0.4'), - ('byacc', '20160324'), ('Guile', '1.8.8'), ] diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016b.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016b.eb index 1e97665ea8..f3389388ae 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-intel-2016b.eb @@ -16,7 +16,6 @@ source_urls = [GNU_SOURCE] dependencies = [ ('flex', '2.6.0'), ('Bison', '3.0.4'), - ('byacc', '20160606'), ('Guile', '1.8.8'), ] diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-goolf-1.4.10.eb index 5c4d14cc82..30524efa14 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-goolf-1.4.10.eb @@ -16,7 +16,6 @@ toolchainopts = {'pic': True} dependencies = [ ('flex', '2.5.35'), ('Bison', '2.5'), - ('byacc', '20120526'), ('Guile', '1.8.8'), ] diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-ictce-5.3.0.eb index 69e1e6bced..5b8915269a 100644 --- a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.8-ictce-5.3.0.eb @@ -16,7 +16,6 @@ toolchainopts = {'pic': True} dependencies = [ ('flex', '2.5.35'), ('Bison', '2.5'), - ('byacc', '20120526'), ('Guile', '1.8.8'), ] -- GitLab From ae3203d68d2c61fe284f74f96ce50bd18aad61ad Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Jan 2017 10:09:36 +0100 Subject: [PATCH 0252/1311] adding easyconfigs: PLUMED-2.3.0-intel-2016b.eb, GSL-2.3-intel-2016b.eb --- .../easyconfigs/g/GSL/GSL-2.3-intel-2016b.eb | 19 +++++++++ .../p/PLUMED/PLUMED-2.3.0-intel-2016b.eb | 42 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2016b.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2016b.eb new file mode 100644 index 0000000000..40738004ba --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2016b.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = '2.3' + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions + and least-squares fitting.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'unroll': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-intel-2016b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-intel-2016b.eb new file mode 100644 index 0000000000..a7c0ddf0f6 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-intel-2016b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.3.0' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '2.3'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'env FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.%s' % SHLIB_EXT, 'lib/libplumed.%s' % SHLIB_EXT], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.%s' % SHLIB_EXT, + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From 21eadc4e0cd8674d535c54587e47accadae816bd Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 11 Jan 2017 11:21:05 +0200 Subject: [PATCH 0253/1311] Update dependencies --- .../c/CP2K/CP2K-4.1-foss-2016b-psmp.eb | 4 +- .../l/libxsmm/libxsmm-1.6.4-foss-2016b.eb | 26 ++++++++++++ .../p/PLUMED/PLUMED-2.3.0-foss-2016b.eb | 42 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb index 3d337a4c78..f8e72d71f0 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb @@ -22,8 +22,8 @@ patches = [ dependencies = [ ('Libint', '1.1.6'), ('libxc', '2.2.3'), - ('PLUMED', '2.2.3'), - ('libxsmm', '1.4.4'), + ('PLUMED', '2.3.0'), + ('libxsmm', '1.6.4'), ] builddependencies = [ diff --git a/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-foss-2016b.eb b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-foss-2016b.eb new file mode 100644 index 0000000000..5436a17dc9 --- /dev/null +++ b/easybuild/easyconfigs/l/libxsmm/libxsmm-1.6.4-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libxsmm' +version = '1.6.4' + +homepage = 'https://github.com/hfp/libxsmm' +description = """LIBXSMM is a library for small dense and small sparse matrix-matrix multiplications +targeting Intel Architecture (x86).""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['%(version)s.tar.gz'] +source_urls = ['https://github.com/hfp/libxsmm/archive/'] + +# install both static and dynamic version +installopts = ['PREFIX=%(installdir)s', 'PREFIX=%(installdir)s STATIC=0'] + +skipsteps = ['configure'] +maxparallel = 1 + +sanity_check_paths = { + 'files': ['bin/libxsmm_gemm_generator', 'include/libxsmm.h', 'lib/libxsmm.a', 'lib/libxsmm.%s' % SHLIB_EXT], + 'dirs': ['share'] +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2016b.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2016b.eb new file mode 100644 index 0000000000..a6e04e3481 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2016b.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.3.0' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '2.1'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'env FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.%s' % SHLIB_EXT, 'lib/libplumed.%s' % SHLIB_EXT], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.%s' % SHLIB_EXT, + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From 4a1c656498863c1b46595db3a79849c4dafeb431 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Jan 2017 10:35:19 +0100 Subject: [PATCH 0254/1311] adding easyconfigs: mahotas-1.4.3-intel-2016b-Python-2.7.12.eb --- ...mahotas-1.4.3-intel-2016b-Python-2.7.12.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/m/mahotas/mahotas-1.4.3-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/mahotas/mahotas-1.4.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/mahotas/mahotas-1.4.3-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..dd39e28312 --- /dev/null +++ b/easybuild/easyconfigs/m/mahotas/mahotas-1.4.3-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'mahotas' +version = '1.4.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://mahotas.readthedocs.io/' +description = "Mahotas is a computer vision and image processing library for Python" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'vis' -- GitLab From 06c0ce3e0f6d44a4e7447d371d4264835f8c9a1a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Jan 2017 12:52:07 +0100 Subject: [PATCH 0255/1311] adding easyconfigs: hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb --- ...hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..8ca6c83d64 --- /dev/null +++ b/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,72 @@ +easyblock = 'Bundle' + +name = 'hyperspy' +version = '1.1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '3.5.2'), # provides dateutil, numpy, requests, scipy + ('h5py', '2.6.0', versionsuffix + '-HDF5-1.8.18'), + ('IPython', '5.1.0', versionsuffix), # required for ipyparallel + ('matplotlib', '1.5.3', versionsuffix), +] + +exts_list = [ + ('dill', '0.2.5', { + 'source_urls': ['https://pypi.python.org/packages/source/d/dill'], + 'source_tmpl': 'dill-%(version)s.tgz', + }), + ('ipyparallel', '5.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipyparallel'], + }), + ('natsort', '5.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/natsort'], + }), + ('requests', '2.12.4', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests'], + }), + ('mpmath', '0.19', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mpmath'], + }), + ('sympy', '1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/sympy'], + }), + ('tqdm', '4.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/t/tqdm'], + }), + ('traits', '4.6.0', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traits'], + }), + ('pyface', '5.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyface/'], + }), + ('traitsui', '5.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traitsui'], + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/h/hyperspy'], + }), +] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'vis' -- GitLab From 9795462bf9146417962836bf17db58e2b59317ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 11 Jan 2017 13:18:10 +0100 Subject: [PATCH 0256/1311] added easyconfig for PEAR 0.9.8 starting from this version there is no -src suffix for the source files --- .../p/PEAR/PEAR-0.9.8-foss-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb new file mode 100644 index 0000000000..87f2bda1df --- /dev/null +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb @@ -0,0 +1,29 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'PEAR' +version = '0.9.8' + +homepage = 'http://sco.h-its.org/exelixis/web/software/pear/' +description = """PEAR is an ultrafast, memory-efficient and highly accurate pair-end read merger. + It is fully parallelized and can run with as low as just a few kilobytes of memory.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://sco.h-its.org/exelixis/web/software/pear/files/'] +sources = ['%(namelower)s-%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), +] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/pear'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From d39df7fde8fa4786fbb4dd986811b850cc5e1784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 11 Jan 2017 13:54:09 +0100 Subject: [PATCH 0257/1311] added md5 checksum --- easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb index 87f2bda1df..63d0944c28 100644 --- a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb @@ -14,6 +14,8 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://sco.h-its.org/exelixis/web/software/pear/files/'] sources = ['%(namelower)s-%(version)s.tar.gz'] +checksums = ['1ab079a2cea61aee816012966b7ccacd'] + dependencies = [ ('zlib', '1.2.8'), ('bzip2', '1.0.6'), -- GitLab From b921cea7a573e94801c912161599361abf5e58df Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Jan 2017 15:48:12 +0100 Subject: [PATCH 0258/1311] bump PLUMED to 2.3.0 --- easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb index 0ca8d21ab0..1d55051d0c 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-intel-2016b.eb @@ -20,7 +20,7 @@ patches = [ dependencies = [ ('Libint', '1.1.6'), ('libxc', '2.2.3'), - ('PLUMED', '2.2.3'), + ('PLUMED', '2.3.0'), ('libxsmm', '1.6.4'), ] -- GitLab From 6e72b8af1ceb125be61df23b2611847a2f553064 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Jan 2017 18:48:19 +0100 Subject: [PATCH 0259/1311] adding easyconfigs: GroIMP-1.5.eb --- easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb | 29 ++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb diff --git a/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb new file mode 100644 index 0000000000..3b5abf3832 --- /dev/null +++ b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb @@ -0,0 +1,29 @@ +easyblock = 'PackedBinary' + +name = 'GroIMP' +version = '1.5' + +homepage = 'http://www.grogra.de/software/groimp' +description = "GroIMP (Growth Grammar-related Interactive Modelling Platform) is a 3D-modelling platform." + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['GroIMP-%(version)s-src.zip'] + +dependencies = [ + ('Java', '1.8.0_112', '', True), +] + +builddependencies = [('ant', '1.10.0', '-Java-%(javaver)s', True)] + +install_cmd = 'cd %(name)s-%(version)s/Build && ant && cp -a ../app/* %(installdir)s/' + +sanity_check_paths = { + 'files': ['core.jar'], + 'dirs': ['plugins'], +} + +modloadmsg = "To use GroIMP: java -jar \\$EBROOTGROIMP/core.jar\n" + +moduleclass = 'vis' -- GitLab From a3d868e7ad26fddce79116ad0512c7cae5fb2623 Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Wed, 11 Jan 2017 15:30:52 -0500 Subject: [PATCH 0260/1311] Use VTK 6.3.0 and remove patch line for intel toolchain at Qt5 easyconfig with foss toolchain and include bzip2 as dependency in yade easyconfig --- easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 2 -- ...thon-2.7.12.eb => VTK-6.3.0-foss-2016b-Python-2.7.12.eb} | 6 ++++-- .../y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename easybuild/easyconfigs/v/VTK/{VTK-7.0.0-foss-2016b-Python-2.7.12.eb => VTK-6.3.0-foss-2016b-Python-2.7.12.eb} (93%) diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb index 9d87351ad2..91f50c61d8 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -14,8 +14,6 @@ source_urls = [ ] sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] -patches = ['%(name)s-%(version)s-workaround-icpc-bug.patch'] - builddependencies = [ ('pkg-config', '0.29.1'), ] diff --git a/easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/v/VTK/VTK-6.3.0-foss-2016b-Python-2.7.12.eb similarity index 93% rename from easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb rename to easybuild/easyconfigs/v/VTK/VTK-6.3.0-foss-2016b-Python-2.7.12.eb index 3054f25a62..71edba0d68 100644 --- a/easybuild/easyconfigs/v/VTK/VTK-7.0.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/v/VTK/VTK-6.3.0-foss-2016b-Python-2.7.12.eb @@ -13,7 +13,7 @@ easyblock = 'CMakeMake' name = 'VTK' -version = '7.0.0' +version = '6.3.0' versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.vtk.org' @@ -36,6 +36,7 @@ builddependencies = [('CMake', '3.6.1')] dependencies = [ ('Python', '2.7.12'), ('libGLU', '9.0.0'), + ('X11', '20160819'), ] configopts = "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT @@ -49,7 +50,8 @@ preinstallopts += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/sit modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} sanity_check_paths = { - 'files': ['bin/vtk%s-%%(version_major_minor)s' % x for x in ['EncodeString', 'HashSource', 'mkg3states']], + 'files': ['bin/vtk%s-%%(version_major_minor)s' % x for x in ['EncodeString', 'HashSource', + 'mkg3states', 'ParseOGLExt']], 'dirs': ['lib/python%(pyshortver)s/site-packages/', 'include/vtk-%(version_major_minor)s'], } diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index e778315048..4be110c095 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -31,7 +31,7 @@ dependencies = [ ('Python', '2.7.12'), ('Qt5', '5.7.0'), ('SQLite', '3.13.0'), - ('VTK', '7.0.0', versionsuffix), + ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), ] -- GitLab From bb2346a96ea6515fa57c0b3892de694e8addb848 Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Wed, 11 Jan 2017 16:33:56 -0500 Subject: [PATCH 0261/1311] Resolving dependency conflicts and include bzip2 as Yade dependency --- .../easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb | 2 +- easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb | 2 +- easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 2 +- .../y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb index e32190898d..9bee4db9aa 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b-Python-2.7.12.eb @@ -23,7 +23,7 @@ dependencies = [ ] builddependencies = [ - ('CMake', '3.7.1'), + ('CMake', '3.6.1'), ('Eigen', '3.2.9'), ] diff --git a/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb index 153b5aa920..2841749201 100644 --- a/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.3.9-foss-2016b.eb @@ -20,7 +20,7 @@ dependencies = [ ('Mesa', '12.0.2'), ('libGLU', '9.0.0'), ('freeglut', '3.0.0'), - ('libpng', '1.6.26'), + ('libpng', '1.6.24'), ('zlib', '1.2.8'), ] diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb index 91f50c61d8..aed1d16c64 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -23,7 +23,7 @@ configopts = '-skip qtgamepad' dependencies = [ ('GLib', '2.49.5'), - ('libpng', '1.6.26'), + ('libpng', '1.6.24'), ('X11', '20160819'), ('libGLU', '9.0.0'), ] diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index 4be110c095..edce22b9ab 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -18,6 +18,7 @@ patches = ['Yade-%(version)s_include-signal.patch'] dependencies = [ ('Boost', '1.61.0', versionsuffix), + ('bzip2', '1.0.6'), ('CGAL', '4.8.1', versionsuffix), ('GDB', '7.11.1', versionsuffix), ('GL2PS', '1.3.9'), @@ -36,7 +37,7 @@ dependencies = [ ] builddependencies = [ - ('CMake', '3.7.1'), + ('CMake', '3.6.1'), ('Eigen', '3.2.9'), ] -- GitLab From f5694ad450d1b9907b96a558f8411f35c4fe083e Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Wed, 11 Jan 2017 17:11:38 -0500 Subject: [PATCH 0262/1311] resolving dependency conflicts --- ...tplotlib-1.5.2-foss-2016b-Python-2.7.12.eb | 44 +++++++++++++++++++ .../Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..83276fb208 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '1.5.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.12'), + ('freetype', '2.6.5'), + ('libpng', '1.6.24'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index edce22b9ab..541a3b67c8 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -26,7 +26,7 @@ dependencies = [ ('IPython', '5.1.0', versionsuffix), ('libQGLViewer', '2.6.3'), ('Loki', '0.1.7'), - ('matplotlib', '1.5.3', versionsuffix), + ('matplotlib', '1.5.2', versionsuffix), ('minieigen', '0.5.3', versionsuffix), ('PyGTS', '0.3.1', versionsuffix), ('Python', '2.7.12'), -- GitLab From ee4039f7d271eb3e96fde428acdda83ed0005bec Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 08:52:55 +0100 Subject: [PATCH 0263/1311] fix homepage & description --- .../hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb index 8ca6c83d64..ba4de3d906 100644 --- a/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/h/hyperspy/hyperspy-1.1.1-intel-2016b-Python-3.5.2.eb @@ -4,11 +4,10 @@ name = 'hyperspy' version = '1.1.1' versionsuffix = '-Python-%(pyver)s' -homepage = 'http://scikit-learn.org/stable/index.html' -description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, -building upon numpy, scipy, and matplotlib. As a machine-learning module, -it provides versatile tools for data mining and analysis in any field of science and engineering. -It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" +homepage = 'http://hyperspy.org/' +description = """HyperSpy is an open source Python library which provides tools to facilitate the interactive + data analysis of multi-dimensional datasets that can be described as multi-dimensional arrays of a given signal + (e.g. a 2D array of spectra a.k.a spectrum image)""" toolchain = {'name': 'intel', 'version': '2016b'} -- GitLab From a10f803a7565b0b81ed6a64bfbe33cc43386f4a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 12 Jan 2017 09:17:48 +0100 Subject: [PATCH 0264/1311] added CD-HIT 4.6.6 changed source_url to archive subdirectory files there have no versionsuffix which prevents the use of --try-software-version --- .../c/CD-HIT/CD-HIT-4.6.6-foss-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/c/CD-HIT/CD-HIT-4.6.6-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/CD-HIT/CD-HIT-4.6.6-foss-2016b.eb b/easybuild/easyconfigs/c/CD-HIT/CD-HIT-4.6.6-foss-2016b.eb new file mode 100644 index 0000000000..741d95b545 --- /dev/null +++ b/easybuild/easyconfigs/c/CD-HIT/CD-HIT-4.6.6-foss-2016b.eb @@ -0,0 +1,34 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'MakeCp' + +name = "CD-HIT" +version = "4.6.6" + +homepage = 'http://weizhong-lab.ucsd.edu/cd-hit/' +description = """ CD-HIT is a very widely used program for clustering and + comparing protein or nucleotide sequences.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'openmp': True} + +source_urls = ['https://github.com/weizhongli/cdhit/archive/'] +sources = ['V%(version)s.tar.gz'] + +checksums = ['14f61c56b48a81edc8f1b6d9e012fe55'] + +# make sure compilation flags are passed down (e.g. to enable OpenMP) +buildopts = ' CC="$CXX" CCFLAGS="$CPPFLAGS $CXXFLAGS"' + +# put here the list of generated executables when compiling +list_of_executables = ["cd-hit", "cd-hit-est", "cd-hit-2d", "cd-hit-est-2d", "cd-hit-div", "cd-hit-454"] + +# this is the real EasyBuild line to copy all the executables and perl scripts to "bin" +files_to_copy = [(list_of_executables, "bin"), (["*.pl"], 'bin'), "README", "doc", "license.txt"] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in list_of_executables], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From b44d9f7bebbe03946ab434625c91e874a2d1f846 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 10:19:39 +0100 Subject: [PATCH 0265/1311] adding easyconfigs: matplotlib-1.4.3-intel-2016b-Python-2.7.12.eb --- ...plotlib-1.4.3-intel-2016b-Python-2.7.12.eb | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-1.4.3-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.4.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.4.3-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..94bb889523 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.4.3-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,45 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '1.4.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.12'), + ('freetype', '2.7'), + ('libpng', '1.6.26'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + 'patches': [('matplotlib-1.4.3_Qhull-intel-fix.patch')], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From 542c17346b7541ec1550dd4b48f5ec1da3138c23 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 12:19:14 +0100 Subject: [PATCH 0266/1311] add missing deps for GroIMP --- .../a/ant/ant-1.10.0-Java-1.8.0_112.eb | 25 +++++++++++++++++++ .../j/JUnit/JUnit-4.12-Java-1.8.0_112.eb | 22 ++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb create mode 100644 easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_112.eb diff --git a/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb new file mode 100644 index 0000000000..cf1f192a70 --- /dev/null +++ b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb @@ -0,0 +1,25 @@ +name = 'ant' +version = '1.10.0' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://ant.apache.org/' +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files + as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['apache-%(name)s-%(version)s-src.tar.gz'] +source_urls = ['http://archive.apache.org/dist/%(name)s/source/'] + +dependencies = [('Java', '1.8.0_112')] + +builddependencies = [('JUnit', '4.12', versionsuffix)] + +sanity_check_paths = { + 'files': ['bin/ant', 'lib/ant.jar', 'lib/ant.jar'], + 'dirs': [], +} + +modextravars = {'ANT_HOME': '%(installdir)s'} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_112.eb b/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_112.eb new file mode 100644 index 0000000000..363163f77e --- /dev/null +++ b/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_112.eb @@ -0,0 +1,22 @@ +easyblock = 'JAR' + +name = 'JUnit' +version = '4.12' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://sourceforge.net/projects/junit' +description = """A programmer-oriented testing framework for Java.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['%(namelower)s-%(version)s.jar'] +source_urls = ['http://search.maven.org/remotecontent?filepath=junit/junit/%(version)s/'] + +dependencies = [('Java', '1.8.0_112')] + +sanity_check_paths = { + 'files': sources, + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 71d7243f8782554dfd9f7bc94bbc067e4040422a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 12:31:08 +0100 Subject: [PATCH 0267/1311] adding easyconfigs: ELPA-2016.05.004-intel-2016b.eb --- .../e/ELPA/ELPA-2016.05.004-intel-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb new file mode 100644 index 0000000000..ffcf5b339a --- /dev/null +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Authors:: Inge Gutheil , Alan O'Cais +# License:: MIT/GPL +# $Id$ +# +## + +easyblock = 'ConfigureMake' + +name = 'ELPA' +version = '2016.05.004' + +homepage = 'http://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications .""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['http://elpa.mpcdf.mpg.de/html/Releases/%(version)s/'] +sources = ['elpa-%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +configopts = '--with-generic-simple --disable-shared ' +configopts += 'FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' +buildopts = ' V=1 LIBS="$LIBSCALAPACK"' + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libelpa.a'], + 'dirs': ['bin', 'include/elpa-%(version)s/elpa', 'include/elpa-%(version)s/modules', 'lib/pkgconfig'], +} + +moduleclass = 'math' -- GitLab From fef46171e0469a4939e761d6a829e49b9f629dbb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 14:22:37 +0100 Subject: [PATCH 0268/1311] adding easyconfigs: netCDF-4.4.1.1-intel-2016b.eb --- .../n/netCDF/netCDF-4.4.1.1-intel-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2016b.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2016b.eb new file mode 100644 index 0000000000..24dee36e77 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2016b.eb @@ -0,0 +1,34 @@ +name = 'netCDF' +version = '4.4.1.1' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = ['v%(version)s.tar.gz'] +source_urls = [ + 'https://github.com/Unidata/netcdf-c/archive/' +] + +dependencies = [ + ('HDF5', '1.8.18'), + ('cURL', '7.49.1'), + ('Szip', '2.1'), +] + +builddependencies = [ + ('CMake', '3.5.2'), + ('Doxygen', '1.8.11'), +] + +# make sure both static and shared libs are built +configopts = [ + "-DBUILD_SHARED_LIBS=OFF ", + "-DBUILD_SHARED_LIBS=ON ", +] + +moduleclass = 'data' -- GitLab From 0ad2664ece8f1fd2f3aeeeec763c0378fefa67e2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 14:41:59 +0100 Subject: [PATCH 0269/1311] {devel}[intel/2016b] Qt5 v5.7.1 --- .../q/Qt5/Qt5-5.7.1-intel-2016b.eb | 33 +++++++++++++++++++ .../q/Qt5/Qt5-5.7.1_fix-nan-inf.patch | 20 +++++++++++ 2 files changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.7.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1-intel-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1-intel-2016b.eb new file mode 100644 index 0000000000..1fd587b6e3 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1-intel-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'EB_Qt' + +name = 'Qt5' +version = '5.7.1' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/single/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/single/' +] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] + +patches = ['Qt5-%(version)s_fix-nan-inf.patch'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +# qtgamepad needs recent kernel/libevdev (fails on RHEL 6.x) +configopts = '-skip qtgamepad' + +dependencies = [ + ('GLib', '2.49.5'), + ('libpng', '1.6.24'), + ('X11', '20160819'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch new file mode 100644 index 0000000000..b9dfca8149 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch @@ -0,0 +1,20 @@ +fix compilation issue with Intel compilers: "error: more than one instance of overloaded function 'isnan'i matches the argument list" +author: Kenneth Hoste (HPC-UGent) +--- ./qtbase/src/corelib/global/qnumeric_p.h.orig 2017-01-12 14:07:25.154941190 +0100 ++++ ./qtbase/src/corelib/global/qnumeric_p.h 2017-01-12 14:08:03.841376056 +0100 +@@ -72,11 +72,11 @@ + QT_BEGIN_NAMESPACE + namespace qnumeric_std_wrapper { + // the 'using namespace std' below is cases where the stdlib already put the math.h functions in the std namespace and undefined the macros. +-static inline bool math_h_isnan(double d) { using namespace std; return isnan(d); } +-static inline bool math_h_isinf(double d) { using namespace std; return isinf(d); } ++static inline bool math_h_isnan(double d) { using namespace std; return std::isnan(d); } ++static inline bool math_h_isinf(double d) { using namespace std; return std::isinf(d); } + static inline bool math_h_isfinite(double d) { using namespace std; return isfinite(d); } +-static inline bool math_h_isnan(float f) { using namespace std; return isnan(f); } +-static inline bool math_h_isinf(float f) { using namespace std; return isinf(f); } ++static inline bool math_h_isnan(float f) { using namespace std; return std::isnan(f); } ++static inline bool math_h_isinf(float f) { using namespace std; return std::isinf(f); } + static inline bool math_h_isfinite(float f) { using namespace std; return isfinite(f); } + } + QT_END_NAMESPACE -- GitLab From 2367da192637b4ea2e9afe75f596b8d4494af0a4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 15:06:48 +0100 Subject: [PATCH 0270/1311] adding easyconfigs: libspatialite-4.3.0a-intel-2016b.eb, GEOS-3.6.1-intel-2016b-Python-2.7.12.eb --- .../f/FreeXL/FreeXL-1.0.2-intel-2016b.eb | 22 +++++++++++++ .../GEOS-3.6.1-intel-2016b-Python-2.7.12.eb | 28 ++++++++++++++++ .../libspatialite-4.3.0a-intel-2016b.eb | 32 +++++++++++++++++++ .../p/PROJ/PROJ-4.9.3-intel-2016b.eb | 30 +++++++++++++++++ .../SWIG-3.0.11-intel-2016b-Python-2.7.12.eb | 20 ++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb create mode 100644 easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-intel-2016b.eb create mode 100644 easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb new file mode 100644 index 0000000000..7b11ad3065 --- /dev/null +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'FreeXL' +version = '1.0.2' + +homepage = "https://www.gaia-gis.it/fossil/freexl/index" +description = "FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet." + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.gaia-gis.it/gaia-sins/freexl-sources/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('CMake', '3.7.1')] + +sanity_check_paths = { + 'files': ['lib/libfreexl.a'], + 'dirs': [] + } + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9997517749 --- /dev/null +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'GEOS' +version = '3.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://trac.osgeo.org/geos' +description = """GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS)""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://download.osgeo.org/geos/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [('Python', '2.7.12')] + +builddependencies = [('SWIG', '3.0.11', versionsuffix)] + +configopts = '--enable-python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['bin/geos-config', 'lib/libgeos.%s' % SHLIB_EXT, 'lib/libgeos.a', 'include/geos.h'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/geos'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-intel-2016b.eb b/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-intel-2016b.eb new file mode 100644 index 0000000000..69d644216e --- /dev/null +++ b/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-intel-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libspatialite' +version = '4.3.0a' + +homepage = "https://www.gaia-gis.it/fossil/libspatialite/home" +description = """SpatiaLite is an open source library intended to extend the SQLite core to support + fully fledged Spatial SQL capabilities.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.gaia-gis.it/gaia-sins/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('FreeXL', '1.0.2'), + ('GEOS', '3.6.1', '-Python-2.7.12'), + ('SQLite', '3.13.0'), + ('PROJ', '4.9.3'), +] + +builddependencies = [('CMake', '3.7.1')] + +configopts = '--disable-geosadvanced' + +sanity_check_paths = { + 'files': ['include/spatialite.h', 'lib/libspatialite.a', 'lib/libspatialite.%s' % SHLIB_EXT], + 'dirs': ['include/spatialite'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2016b.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2016b.eb new file mode 100644 index 0000000000..0bd9d6514d --- /dev/null +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2016b.eb @@ -0,0 +1,30 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2014-2015 The Cyprus Institute +# Authors:: Thekla Loizou +# License:: MIT/GPL +# +## +easyblock = 'ConfigureMake' + +name = 'PROJ' +version = '4.9.3' + +homepage = 'http://trac.osgeo.org/proj/' +description = """Program proj is a standard Unix filter function which converts +geographic longitude and latitude coordinates into cartesian coordinates""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['http://download.osgeo.org/proj/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', + 'bin/nad2bin', 'bin/proj'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..d986252036 --- /dev/null +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,20 @@ +name = 'SWIG' +version = '3.0.11' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.swig.org/' +description = """SWIG is a software development tool that connects programs written in C and C++ with + a variety of high-level programming languages.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('PCRE', '8.38'), +] + +moduleclass = 'devel' -- GitLab From 96439e0f308537296b6ee2433077c95754ae5924 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 16:43:31 +0100 Subject: [PATCH 0271/1311] fix permissions on SWASH binaries --- easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb | 2 ++ easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb | 2 ++ easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb | 2 ++ 3 files changed, 6 insertions(+) diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb index 59a30a98ae..767e04327d 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb @@ -21,6 +21,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb index dddde53b09..a9d434ebd1 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb @@ -21,6 +21,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb index c188883666..ad04f26f31 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb @@ -20,6 +20,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], -- GitLab From f99c2947bbf729e889e8bab045384248817dbe3c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 16:59:41 +0100 Subject: [PATCH 0272/1311] fix typo in Qt5 patch description --- easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch | 2 +- easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb | 2 ++ easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb | 2 ++ easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch index b9dfca8149..43f7c73fcc 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.1_fix-nan-inf.patch @@ -1,4 +1,4 @@ -fix compilation issue with Intel compilers: "error: more than one instance of overloaded function 'isnan'i matches the argument list" +fix compilation issue with Intel compilers: "error: more than one instance of overloaded function 'isnan' matches the argument list" author: Kenneth Hoste (HPC-UGent) --- ./qtbase/src/corelib/global/qnumeric_p.h.orig 2017-01-12 14:07:25.154941190 +0100 +++ ./qtbase/src/corelib/global/qnumeric_p.h 2017-01-12 14:08:03.841376056 +0100 diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb index 59a30a98ae..767e04327d 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb @@ -21,6 +21,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb index dddde53b09..a9d434ebd1 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb @@ -21,6 +21,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb index c188883666..ad04f26f31 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb @@ -20,6 +20,8 @@ parallel = 1 files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + sanity_check_paths = { 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], 'dirs': [], -- GitLab From 0d028c1ce536f4b73b87bda686f4e92f46f04621 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 20:28:48 +0100 Subject: [PATCH 0273/1311] adding easyconfigs: Anaconda2-4.2.0.eb, Anaconda3-4.2.0.eb --- .../a/Anaconda2/Anaconda2-4.2.0.eb | 19 +++++++++++++++++++ .../a/Anaconda3/Anaconda3-4.2.0.eb | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/a/Anaconda2/Anaconda2-4.2.0.eb create mode 100644 easybuild/easyconfigs/a/Anaconda3/Anaconda3-4.2.0.eb diff --git a/easybuild/easyconfigs/a/Anaconda2/Anaconda2-4.2.0.eb b/easybuild/easyconfigs/a/Anaconda2/Anaconda2-4.2.0.eb new file mode 100644 index 0000000000..3fe1b814e4 --- /dev/null +++ b/easybuild/easyconfigs/a/Anaconda2/Anaconda2-4.2.0.eb @@ -0,0 +1,19 @@ +# author: Jillian Rowe +easyblock = 'EB_Anaconda' + +name = 'Anaconda2' +version = '4.2.0' + +homepage = 'https://www.continuum.io/anaconda-overview' +description = """Built to complement the rich, open source Python community, +the Anaconda platform provides an enterprise-ready data analytics platform +that empowers companies to adopt a modern open data science analytics architecture. +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://repo.continuum.io/archive/'] +sources = ['%(name)s-%(version)s-Linux-x86_64.sh'] +checksums = ['a0d1fbe47014b71c6764d76fb403f217'] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/a/Anaconda3/Anaconda3-4.2.0.eb b/easybuild/easyconfigs/a/Anaconda3/Anaconda3-4.2.0.eb new file mode 100644 index 0000000000..9d27c79985 --- /dev/null +++ b/easybuild/easyconfigs/a/Anaconda3/Anaconda3-4.2.0.eb @@ -0,0 +1,19 @@ +# author: Jillian Rowe +easyblock = 'EB_Anaconda' + +name = 'Anaconda3' +version = '4.2.0' + +homepage = 'https://www.continuum.io/anaconda-overview' +description = """Built to complement the rich, open source Python community, +the Anaconda platform provides an enterprise-ready data analytics platform +that empowers companies to adopt a modern open data science analytics architecture. +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://repo.continuum.io/archive/'] +sources = ['%(name)s-%(version)s-Linux-x86_64.sh'] +checksums = ['4692f716c82deb9fa6b59d78f9f6e85c'] + +moduleclass = 'lang' -- GitLab From ddbe6019053f6234c01fd88eca5eb04e609c2d3f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 20:47:51 +0100 Subject: [PATCH 0274/1311] bump to Anaconda 4.2.0, extend sanity check, style fixes --- easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb index d51a7c6584..2158bb874d 100644 --- a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb +++ b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb @@ -5,23 +5,24 @@ easyblock = 'Conda' -name = "QIIME" -version = "1.9.1" -variant = "Linux-x86_64" +name = 'QIIME' +version = '1.9.1' +variant = 'Linux-x86_64' homepage = 'http://qiime.org/' -description = """QIIME is an open-source bioinformatics pipeline for performing microbiome analysis from raw DNA sequencing data.""" +description = """QIIME is an open-source bioinformatics pipeline for performing microbiome analysis + from raw DNA sequencing data.""" toolchain = {'name': 'dummy', 'version': ''} -requirements = "python=2.7 %(namelower)s=%(version)s matplotlib=1.4.3 mock nose" +requirements = "%(namelower)s=%(version)s matplotlib=1.4.3 mock nose" channels = ['bioconda'] -builddependencies = [('Anaconda2', '4.0.0')] +builddependencies = [('Anaconda2', '4.2.0')] sanity_check_paths = { 'files': ['bin/print_qiime_config.py'], - 'dirs': [] + 'dirs': ['lib/python2.7/site-packages/qiime'] } sanity_check_commands = ['print_qiime_config.py -t'] -- GitLab From ad2cf31f833bd76cc46ed319fe34c5fc7adf6493 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 20:53:46 +0100 Subject: [PATCH 0275/1311] remove unused 'variant' --- easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb index 2158bb874d..401987f750 100644 --- a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb +++ b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb @@ -7,7 +7,6 @@ easyblock = 'Conda' name = 'QIIME' version = '1.9.1' -variant = 'Linux-x86_64' homepage = 'http://qiime.org/' description = """QIIME is an open-source bioinformatics pipeline for performing microbiome analysis -- GitLab From d332250d90e6ed5f88cec41237206f495fdab34c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 12 Jan 2017 21:36:14 +0100 Subject: [PATCH 0276/1311] clean up dependency specs in GroIMP easyconfig --- easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb index 3b5abf3832..d86f8fea57 100644 --- a/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb +++ b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb @@ -12,10 +12,10 @@ source_urls = [SOURCEFORGE_SOURCE] sources = ['GroIMP-%(version)s-src.zip'] dependencies = [ - ('Java', '1.8.0_112', '', True), + ('Java', '1.8.0_112'), ] -builddependencies = [('ant', '1.10.0', '-Java-%(javaver)s', True)] +builddependencies = [('ant', '1.10.0', '-Java-%(javaver)s')] install_cmd = 'cd %(name)s-%(version)s/Build && ant && cp -a ../app/* %(installdir)s/' -- GitLab From 2a44ed6074b21315d39c1617b7fb511b91674c8a Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 13 Jan 2017 09:52:39 +1300 Subject: [PATCH 0277/1311] EasyConfigs for Perl 5.22.0 with the foss-2015a toolchain --- .../p/Perl/Perl-5.22.0-foss-2015a-mt.eb | 904 ++++++++++++++++++ .../p/Perl/Perl-5.22.0-foss-2015a.eb | 903 +++++++++++++++++ 2 files changed, 1807 insertions(+) create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb new file mode 100644 index 0000000000..43dbd48785 --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb @@ -0,0 +1,904 @@ +name = 'Perl' +version = '5.22.0' +use_perl_threads = True +versionsuffix = '-mt' + +homepage = 'http://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'optarch': True, 'pic': True} + +dependencies = [ + ('DB', '6.0.30'), # for DB_File module + ('SQLite', '3.8.9'), # for DBD::SQLite module + ('expat', '2.1.0'), # for XML::Parser I think + ('libxml2', '2.9.2'), # for XML::LibXML + ] + +#builddependencies = [('SAMtools', '0.1.20')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. + +source_urls = ['http://www.cpan.org/src/5.0'] +sources = [SOURCELOWER_TAR_GZ] +#runtest = 'test' + +exts_list = [ + ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason + 'source_tmpl': 'Module-Build-0.4210.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Module/LEONT/'], + }), + ('ExtUtils::MakeMaker', '7.04', { + 'source_tmpl': 'ExtUtils-MakeMaker-7.04.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], + }), + ('local::lib', '2.000011', { + 'source_tmpl': 'local-lib-2.000011.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('IO::String', '1.08', { + 'source_tmpl': 'IO-String-1.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Data::Stag', '0.14', { + 'source_tmpl': 'Data-Stag-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], + }), + ('DB_File', '1.835', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], + }), + ('DBI', '1.633', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], + }), + ('Sub::Uplevel', '0.25', { + 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], + }), + ('Tree::DAG_Node', '1.26', { + 'source_tmpl': 'Tree-DAG_Node-1.26.tgz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Tree/RSAVAGE/'], + }), + ('Try::Tiny', '0.22', { + 'source_tmpl': 'Try-Tiny-0.22.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + }), + ('Devel::StackTrace', '2.00', { + 'source_tmpl': 'Devel-StackTrace-2.00.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Data::Inheritable', '0.08', { + 'source_tmpl': 'Class-Data-Inheritable-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('Exception::Class', '1.39', { + 'source_tmpl': 'Exception-Class-1.39.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Test::Fatal', '0.014', { + 'source_tmpl': 'Test-Fatal-0.014.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], + }), + ('Test::NoWarnings', '1.04', { + 'source_tmpl': 'Test-NoWarnings-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Test::Deep', '0.117', { + 'source_tmpl': 'Test-Deep-0.117.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Algorithm::Diff', '1.15', { + 'source_tmpl': 'Algorithm-Diff-1.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/'], + }), + ('Text::Diff', '1.41', { + 'source_tmpl': 'Text-Diff-1.41.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Test::Differences', '0.61', { + 'source_tmpl': 'Test-Differences-0.61.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Test::Exception', '0.32', { + 'source_tmpl': 'Test-Exception-0.32.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADIE/'], + }), + ('Test::Warn', '0.30', { + 'source_tmpl': 'Test-Warn-0.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Test::Requires', '0.08', { + 'source_tmpl': 'Test-Requires-0.08.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], + }), + ('Test::Tester', '0.109', { + 'source_tmpl': 'Test-Tester-0.109.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/FDALY/'], + }), + ('File::Slurp::Tiny', '0.003', { + 'source_tmpl': 'File-Slurp-Tiny-0.003.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Params::Util', '1.07', { + 'source_tmpl': 'Params-Util-1.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Sub::Install', '0.928', { + 'source_tmpl': 'Sub-Install-0.928.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], + }), + ('Data::OptList', '0.109', { + 'source_tmpl': 'Data-OptList-0.109.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Sub::Exporter', '0.987', { + 'source_tmpl': 'Sub-Exporter-0.987.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Capture::Tiny', '0.30', { + 'source_tmpl': 'Capture-Tiny-0.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], + }), + ('Test::Output', '1.03', { + 'source_tmpl': 'Test-Output-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BD/BDFOY/'], + }), + ('Module::Runtime', '0.014', { + 'source_tmpl': 'Module-Runtime-0.014.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/'], + }), + ('Module::Implementation', '0.09', { + 'source_tmpl': 'Module-Implementation-0.09.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], + }), + ('List::MoreUtils', '0.413', { + 'source_tmpl': 'List-MoreUtils-0.413.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Package::DeprecationManager', '0.14', { + 'source_tmpl': 'Package-DeprecationManager-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Dist::CheckConflicts', '0.11', { + 'source_tmpl': 'Dist-CheckConflicts-0.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Package::Stash', '0.37', { + 'source_tmpl': 'Package-Stash-0.37.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], + }), + ('Class::Load', '0.23', { + 'source_tmpl': 'Class-Load-0.23.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('TAP::Harness::Env', '3.35', { + 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('ExtUtils::Helpers', '0.022', { + 'source_tmpl': 'ExtUtils-Helpers-0.022.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Config', '0.008', { + 'source_tmpl': 'ExtUtils-Config-0.008.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::InstallPaths', '0.011', { + 'source_tmpl': 'ExtUtils-InstallPaths-0.011.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Build::Tiny', '0.039', { + 'source_tmpl': 'Module-Build-Tiny-0.039.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('MRO::Compat', '0.12', { + 'source_tmpl': 'MRO-Compat-0.12.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BO/BOBTFISH/'], + }), + ('Sub::Name', '0.05', { + 'source_tmpl': 'Sub-Name-0.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FL/FLORA/'], + }), + ('Eval::Closure', '0.13', { + 'source_tmpl': 'Eval-Closure-0.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Sub::Exporter::Progressive', '0.001011', { + 'source_tmpl': 'Sub-Exporter-Progressive-0.001011.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], + }), + ('Devel::GlobalDestruction', '0.13', { + 'source_tmpl': 'Devel-GlobalDestruction-0.13.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('boolean', '0.45', { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('Tie::IxHash', '1.23', { + 'source_tmpl': 'Tie-IxHash-1.23.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Moose', '2.1405', { + 'source_urls': ['http://www.cpan.org/modules/by-module/MooseX/ETHER/'], + }), + ('Package::Stash::XS', '0.28', { + 'source_tmpl': 'Package-Stash-XS-0.28.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Params::Validate', '1.20', { + 'source_tmpl': 'Params-Validate-1.20.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], + }), + ('Class::Load::XS', '0.09', { + 'source_tmpl': 'Class-Load-XS-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + + # For uoa00001, Zendesk #9076 + ('Math::CDF', '0.1', { + 'source_tmpl': 'Math-CDF-0.1.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], + }), + + ('DateTime::Locale', '0.46', { + 'source_tmpl': 'DateTime-Locale-0.46.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Singleton', '1.4', { + 'source_tmpl': 'Class-Singleton-1.4.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('DateTime::TimeZone', '1.92', { + 'source_tmpl': 'DateTime-TimeZone-1.92.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('Test::Warnings', '0.021', { + 'source_tmpl': 'Test-Warnings-0.021.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('Data::Types', '0.09', { + 'source_tmpl': 'Data-Types-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], + }), + ('Exporter::Tiny', '0.042', { + 'source_tmpl': 'Exporter-Tiny-0.042.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], + }), + + ('List::AllUtils', '0.09', { + 'source_tmpl': 'List-AllUtils-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('DateTime', '1.20', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('DateTime::Tiny', '1.04', { + 'source_tmpl': 'DateTime-Tiny-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('File::Slurp', '9999.19', { + 'source_tmpl': 'File-Slurp-9999.19.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/U/UR/URI/'], + }), + ('HTTP::Date', '6.02', { + 'source_tmpl': 'HTTP-Date-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('IO::HTML', '1.001', { + 'source_tmpl': 'IO-HTML-1.001.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/IO/CJM/'], + }), + ('LWP::MediaTypes', '6.02', { + 'source_tmpl': 'LWP-MediaTypes-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('URI', '1.69', { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Encode::Locale', '1.05', { + 'source_tmpl': 'Encode-Locale-1.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Request', '6.06', { + 'source_tmpl': 'HTTP-Message-6.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTML::Tagset', '3.20', { + 'source_tmpl': 'HTML-Tagset-3.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PETDANCE/'], + }), + ('HTML::Entities', '3.71', { + 'source_tmpl': 'HTML-Parser-3.71.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('File::Listing', '6.04', { + 'source_tmpl': 'File-Listing-6.04.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('AnyEvent', '7.09', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/'], + }), + ('Devel::CheckCompiler', '0.06', { + 'source_tmpl': 'Devel-CheckCompiler-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('File::Copy::Recursive', '0.38', { + 'source_tmpl': 'File-Copy-Recursive-0.38.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DM/DMUEY/'], + }), + ('Cwd::Guard', '0.04', { + 'source_tmpl': 'Cwd-Guard-0.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], + }), + ('Module::Build::XSUtil', '0.16', { + 'source_tmpl': 'Module-Build-XSUtil-0.16.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO/'], + }), + ('LWP', '6.13', { + 'source_tmpl': 'libwww-perl-6.13.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Fennec::Lite', '0.004', { + 'source_tmpl': 'Fennec-Lite-0.004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('aliased', '0.31', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Meta::Builder', '0.003', { + 'source_tmpl': 'Meta-Builder-0.003.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Exporter::Declare', '0.114', { + 'source_tmpl': 'Exporter-Declare-0.114.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Mock::Quick', '1.108', { + 'source_tmpl': 'Mock-Quick-1.108.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Test::Exception::LessClever', '0.006', { + 'source_tmpl': 'Test-Exception-LessClever-0.006.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Test::LeakTrace', '0.15', { + 'source_tmpl': 'Test-LeakTrace-0.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], + }), + ('Mouse', '2.4.2', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], + }), + ('XML::NamespaceSupport', '1.11', { + 'source_tmpl': 'XML-NamespaceSupport-1.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::SAX::Base', '1.08', { + 'source_tmpl': 'XML-SAX-Base-1.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::SAX', '0.99', { + 'source_tmpl': 'XML-SAX-0.99.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::LibXML', '2.0121', { + 'source_tmpl': 'XML-LibXML-2.0121.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + }), + ('Clone', '0.38', { + 'source_tmpl': 'Clone-0.38.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GARU'], + }), + ('Config::General', '2.58', { + 'source_tmpl': 'Config-General-2.58.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], + }), + ('Test::Simple', '0.98', { + 'source_tmpl': 'Test-Simple-0.98_05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSCHWERN'], + }), + ('Font::TTF', '1.05', { + 'source_tmpl': 'Font-TTF-1.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHOSKEN'], + }), + ('IO::Tty', '1.12', { + 'source_tmpl': 'IO-Tty-1.12.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Math::Bezier', '0.01', { + 'source_tmpl': 'Math-Bezier-0.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('IPC::Run', '0.94', { + 'source_tmpl': 'IPC-Run-0.94.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Math::Round', '0.07', { + 'source_tmpl': 'Math-Round-0.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], + }), + ('B::LintSubs', '0.06', { + 'source_tmpl': 'B-LintSubs-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PEVANS'], + }), + ('Math::VecStat', '0.08', { + 'source_tmpl': 'Math-VecStat-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], + }), + ('Test::Most', '0.34', { + 'source_tmpl': 'Test-Most-0.34.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Readonly', '1.04', { + 'source_tmpl': 'Readonly-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SA/SANKO/'], + }), + ('Regexp::Common', '2013031301', { + 'source_tmpl': 'Regexp-Common-2013031301.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], + }), + ('Want', '0.26', { + 'source_tmpl': 'Want-0.26.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], + }), + ('DBD::SQLite', '1.48', { + 'source_tmpl': 'DBD-SQLite-1.48.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], + }), + ('Set::IntSpan', '1.19', { + 'source_tmpl': 'Set-IntSpan-1.19.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SW/SWMCD'], + }), + ('forks', '0.36', { + 'source_tmpl': 'forks-0.36.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], + }), + ('File::Which', '1.09', { + 'source_tmpl': 'File-Which-1.09.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + }), + ('Perl::Unsafe::Signals', '', { + 'source_tmpl': 'Perl-Unsafe-Signals-0.02.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], + }), + ('Bit::Vector', '7.4', { + 'source_tmpl': 'Bit-Vector-7.4.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], + }), + ('Parse::RecDescent', '1.967009', { + 'source_tmpl': 'Parse-RecDescent-1.967009.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], + }), + ('Inline', '0.80', { + 'source_tmpl': 'Inline-0.80.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('File::ShareDir::Install', '0.10', { + 'source_tmpl': 'File-ShareDir-Install-0.10.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GW/GWYN/'], + }), + ('Inline::C', '0.76', { + 'source_tmpl': 'Inline-C-0.76.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('IO::All', '0.85', { + 'source_tmpl': 'IO-All-0.85.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], + }), + ('IO::Prompt', '0.997002', { + 'source_tmpl': 'IO-Prompt-0.997002.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], + }), + ('Getopt::Long', '2.47', { + 'source_tmpl': 'Getopt-Long-2.47.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JV/JV/'], + }), + ('AppConfig', '1.66', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('Archive::Extract', '0.76', { + 'source_tmpl': 'Archive-Extract-0.76.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Tar', '2.08', { + 'source_tmpl': 'Archive-Tar-2.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Zip', '1.57', { + 'source_tmpl': 'Archive-Zip-1.57.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], + }), + ('Authen::SASL', '2.16', { + 'source_tmpl': 'Authen-SASL-2.16.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], + }), + ('B::Lint', '1.20', { + 'source_tmpl': 'B-Lint-1.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + # BioPerl bundle was here + ('Class::Accessor', '0.34', { + 'source_tmpl': 'Class-Accessor-0.34.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('Class::DBI', '3.0.17', { + 'source_tmpl': 'Class-DBI-v3.0.17.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('Class::Inspector', '1.28', { + 'source_tmpl': 'Class-Inspector-1.28.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Class::ISA', '0.36', { + 'source_tmpl': 'Class-ISA-0.36.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SM/SMUELLER/'], + }), + ('Class::Trigger', '0.14', { + 'source_tmpl': 'Class-Trigger-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], + }), + ('CPANPLUS', '0.9154', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Data::Grove', '0.08', { + 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], + }), + ('Data::UUID', '1.220', { + 'source_tmpl': 'Data-UUID-1.220.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Date::Language', '2.30', { + 'source_tmpl': 'TimeDate-2.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], + }), + ('Date::Handler', '1.2', { + 'source_tmpl': 'Date-Handler-1.2.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ/'], + }), + ('SQL::Statement', '1.407', { + 'source_tmpl': 'SQL-Statement-1.407.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Module::Pluggable', '5.1', { + 'source_tmpl': 'Module-Pluggable-5.1.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SI/SIMONW/'], + }), + ('Digest::HMAC', '1.03', { + 'source_tmpl': 'Digest-HMAC-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Digest::SHA1', '2.13', { + 'source_tmpl': 'Digest-SHA1-2.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Email::Date::Format', '1.005', { + 'source_tmpl': 'Email-Date-Format-1.005.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Error', '0.17024', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], + }), + ('Expect', '1.21', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGIERSIG/'], + }), + ('File::CheckTree', '4.42', { + 'source_tmpl': 'File-CheckTree-4.42.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('FreezeThaw', '0.5001', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules/'], + }), + ('Git', '0.41', { + 'source_tmpl': 'Git-0.41.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSOUTH/'], + }), + ('GO::Utils', '0.15', { + 'source_tmpl': 'go-perl-0.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], + }), + ('GO', '0.04', { + 'source_tmpl': 'go-db-perl-0.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SJ/SJCARBON/'], + }), + ('HTML::Form', '6.03', { + 'source_tmpl': 'HTML-Form-6.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Cookies', '6.01', { + 'source_tmpl': 'HTTP-Cookies-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Daemon', '6.01', { + 'source_tmpl': 'HTTP-Daemon-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Negotiate', '6.01', { + 'source_tmpl': 'HTTP-Negotiate-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('IO::Stringy', '2.111', { + 'source_tmpl': 'IO-stringy-2.111.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DS/DSKOLL/'], + }), + ('IO::Socket::SSL', '2.016', { + 'source_tmpl': 'IO-Socket-SSL-2.016.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SU/SULLR/'], + }), + ('JSON', '2.90', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA/'], + }), + ('Log::Message', '0.08', { + 'source_tmpl': 'Log-Message-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Log::Message::Simple', '0.10', { + 'source_tmpl': 'Log-Message-Simple-0.10.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Mail::Util', '2.14', { + 'source_tmpl': 'MailTools-2.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Types', '2.11', { + 'source_tmpl': 'MIME-Types-2.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Lite', '3.030', { + 'source_tmpl': 'MIME-Lite-3.030.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Net::HTTP', '6.06', { + 'source_tmpl': 'Net-HTTP-6.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Net::SMTP::SSL', '1.01', { + 'source_tmpl': 'Net-SMTP-SSL-1.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CW/CWEST/'], + }), + ('Object::Accessor', '0.48', { + 'source_tmpl': 'Object-Accessor-0.48.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Pod::LaTeX', '0.61', { + 'source_tmpl': 'Pod-LaTeX-0.61.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJENNESS/'], + }), + ('Pod::Plainer', '1.04', { + 'source_tmpl': 'Pod-Plainer-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RM/RMBARKER/'], + }), + ('Pod::POM', '0.29', { + 'source_tmpl': 'Pod-POM-0.29.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AN/ANDREWF/'], + }), + ('Shell', '0.72', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FE/FERREIRA/'], + }), + ('Statistics::Descriptive', '3.0609', { + 'source_tmpl': 'Statistics-Descriptive-3.0609.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], + }), + ('Switch', '2.17', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Template', '2.26', { + 'source_tmpl': 'Template-Toolkit-2.26.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('Term::UI', '0.46', { + 'source_tmpl': 'Term-UI-0.46.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Text::Iconv', '1.7', { + 'source_tmpl': 'Text-Iconv-1.7.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MP/MPIOTR/'], + }), + ('Text::Soundex', '3.04', { + 'source_tmpl': 'Text-Soundex-3.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Time::Piece', '1.30', { + 'source_tmpl': 'Time-Piece-1.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Time::Piece::MySQL', '0.06', { + 'source_tmpl': 'Time-Piece-MySQL-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('UNIVERSAL::moniker', '0.08', { + 'source_tmpl': 'UNIVERSAL-moniker-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('version', '0.9912', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JP/JPEACOCK/'], + }), + ('WWW::RobotRules', '6.02', { + 'source_tmpl': 'WWW-RobotRules-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('XML::SAX::Writer', '0.56', { + 'source_tmpl': 'XML-SAX-Writer-0.56.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::Simple', '2.20', { + 'source_tmpl': 'XML-Simple-2.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::XPath', '1.13', { + 'source_tmpl': 'XML-XPath-1.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSERGEANT/'], + }), + ('DBD::AnyData', '0.110', { + 'source_tmpl': 'DBD-AnyData-0.110.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Ima::DBI', '0.35', { + 'source_tmpl': 'Ima-DBI-0.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERRIN/'], + }), + ('DBIx::ContextualFetch', '1.03', { + 'source_tmpl': 'DBIx-ContextualFetch-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('DBIx::Simple', '1.35', { + 'source_tmpl': 'DBIx-Simple-1.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JU/JUERD/'], + }), + ('Term::ReadKey', '2.32', { + 'source_tmpl': 'TermReadKey-2.32.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JS/JSTOWE/'], + 'patches': ['TermReadKey-2.32.patch'], + }), + ('Moo', '2.000001', { + 'source_tmpl': 'Moo-2.000001.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], + }), + ('strictures', '2.000001', { + 'source_tmpl': 'strictures-2.000001.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], + }), + ('File::Find::Rule::Perl', '1.13', { + 'source_tmpl': 'File-Find-Rule-Perl-1.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Test::Version', '1.002004', { + 'source_tmpl': 'Test-Version-1.002004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/X/XE/XENO/'], + }), + ('Test::Harness', '3.35', { + 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('Import::Into', '1.002004', { + 'source_tmpl': 'Import-Into-1.002004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('File::Find::Rule', '0.33', { + 'source_tmpl': 'File-Find-Rule-0.33.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('Data::Section::Simple', '0.07', { + 'source_tmpl': 'Data-Section-Simple-0.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], + }), + ('Text::Glob', '0.09', { + 'source_tmpl': 'Text-Glob-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('Number::Compare', '0.03', { + 'source_tmpl': 'Number-Compare-0.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('IPC::Run3', '0.048', { + 'source_tmpl': 'IPC-Run3-0.048.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Set::Array', '0.30', { + 'source_tmpl': 'Set-Array-0.30.tgz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], + }), + ('Bundle::BioPerl', '2.1.9', { + 'source_tmpl': 'Bundle-BioPerl-2.1.9.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS/'], + }), + + ('Algorithm::Munkres', '0.08', { + 'source_tmpl': 'Algorithm-Munkres-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TP/TPEDERSE/'], + }), +# Lots of deps: Carp, Types::Standard etc. +# ('Array::Compare', '2.11', { +# 'source_tmpl': 'Array-Compare-2.11.tar.gz', +# 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVECROSS/'], +# }), + ('Graph', '0.96', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JH/JHI/'], + }), + ('Set::Scalar', '1.29', { + 'source_tmpl': 'Set-Scalar-1.29.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVIDO/'], + }), + + ('CGI', '4.21', { + 'source_tmpl': 'CGI-4.21.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEEJO/'], + }), + ('Bio::Phylo', '0.58', { + 'source_tmpl': 'Bio-Phylo-0.58.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RV/RVOSA/'], + }), +# ('GD', '2.56', { +# 'source_urls': 'http://cpan.metacpan.org/authors/id/L/LD/LDS/'], +# }), + ('SVG', '2.64', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SZ/SZABGAB/'], + }), + ('XML::DOM', '1.44', { + 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], + }), + ('XML::DOM::XPath', '0.14', { + 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('XML::Parser::PerlSAX', '0.08', { + 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], + }), + ('XML::Parser', '2.44', { + 'source_tmpl': 'XML-Parser-2.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR/'], + }), + ('XML::Twig', '3.49', { + 'source_tmpl': 'XML-Twig-3.49.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('XML::Writer', '0.625', { + 'source_tmpl': 'XML-Writer-0.625.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JO/JOSEPHW/'], + }), + ('XML::DOM', '1.44', { + 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], + }), + ('Spreadsheet::ParseExcel', '0.65', { + 'source_tmpl': 'Spreadsheet-ParseExcel-0.65.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOUGW/'], + }), + ('XML::DOM::XPath', '0.14', { + 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('Convert::Binary::C', '0.77', { + 'source_tmpl': 'Convert-Binary-C-0.77.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHX/'], + }), + ('Sys::SigAction.pm', '0.21', { + 'source_tmpl': 'Sys-SigAction-0.21.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], + }), + ('Acme::Damn', '0.06', { + 'source_tmpl': 'Acme-Damn-0.06.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], + }), + ('Set::IntervalTree', '0.10', { + 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], + }), + +# Trouble finding libbam.a and bam/bam.h - try Alien::Samtools next +# ('Bio::DB::Sam', '1.41', { +# 'source_tmpl': 'Bio-SamTools-1.41.tar.gz', +# 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LD/LDS/'], +# 'patches': ['Perl-Bio-SamTools.patch'], +# }), + ('HTML::TableExtract', '2.13', { + 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], + }), + + ('Bio::Perl', '1.6.924', { + 'source_tmpl': 'BioPerl-1.6.924.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], + }), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb new file mode 100644 index 0000000000..dc4e724075 --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb @@ -0,0 +1,903 @@ +name = 'Perl' +version = '5.22.0' +use_perl_threads = False + +homepage = 'http://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'optarch': True, 'pic': True} + +dependencies = [ + ('DB', '6.0.30'), # for DB_File module + ('SQLite', '3.8.9'), # for DBD::SQLite module + ('expat', '2.1.0'), # for XML::Parser I think + ('libxml2', '2.9.2'), # for XML::LibXML + ] + +#builddependencies = [('SAMtools', '0.1.20')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. + +source_urls = ['http://www.cpan.org/src/5.0'] +sources = [SOURCELOWER_TAR_GZ] +#runtest = 'test' + +exts_list = [ + ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason + 'source_tmpl': 'Module-Build-0.4210.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Module/LEONT/'], + }), + ('ExtUtils::MakeMaker', '7.04', { + 'source_tmpl': 'ExtUtils-MakeMaker-7.04.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], + }), + ('local::lib', '2.000011', { + 'source_tmpl': 'local-lib-2.000011.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('IO::String', '1.08', { + 'source_tmpl': 'IO-String-1.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Data::Stag', '0.14', { + 'source_tmpl': 'Data-Stag-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], + }), + ('DB_File', '1.835', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], + }), + ('DBI', '1.633', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], + }), + ('Sub::Uplevel', '0.25', { + 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], + }), + ('Tree::DAG_Node', '1.26', { + 'source_tmpl': 'Tree-DAG_Node-1.26.tgz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Tree/RSAVAGE/'], + }), + ('Try::Tiny', '0.22', { + 'source_tmpl': 'Try-Tiny-0.22.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + }), + ('Devel::StackTrace', '2.00', { + 'source_tmpl': 'Devel-StackTrace-2.00.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Data::Inheritable', '0.08', { + 'source_tmpl': 'Class-Data-Inheritable-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('Exception::Class', '1.39', { + 'source_tmpl': 'Exception-Class-1.39.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Test::Fatal', '0.014', { + 'source_tmpl': 'Test-Fatal-0.014.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], + }), + ('Test::NoWarnings', '1.04', { + 'source_tmpl': 'Test-NoWarnings-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Test::Deep', '0.117', { + 'source_tmpl': 'Test-Deep-0.117.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Algorithm::Diff', '1.15', { + 'source_tmpl': 'Algorithm-Diff-1.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/'], + }), + ('Text::Diff', '1.41', { + 'source_tmpl': 'Text-Diff-1.41.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Test::Differences', '0.61', { + 'source_tmpl': 'Test-Differences-0.61.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Test::Exception', '0.32', { + 'source_tmpl': 'Test-Exception-0.32.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADIE/'], + }), + ('Test::Warn', '0.30', { + 'source_tmpl': 'Test-Warn-0.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Test::Requires', '0.08', { + 'source_tmpl': 'Test-Requires-0.08.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], + }), + ('Test::Tester', '0.109', { + 'source_tmpl': 'Test-Tester-0.109.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/FDALY/'], + }), + ('File::Slurp::Tiny', '0.003', { + 'source_tmpl': 'File-Slurp-Tiny-0.003.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Params::Util', '1.07', { + 'source_tmpl': 'Params-Util-1.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Sub::Install', '0.928', { + 'source_tmpl': 'Sub-Install-0.928.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], + }), + ('Data::OptList', '0.109', { + 'source_tmpl': 'Data-OptList-0.109.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Sub::Exporter', '0.987', { + 'source_tmpl': 'Sub-Exporter-0.987.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Capture::Tiny', '0.30', { + 'source_tmpl': 'Capture-Tiny-0.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], + }), + ('Test::Output', '1.03', { + 'source_tmpl': 'Test-Output-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BD/BDFOY/'], + }), + ('Module::Runtime', '0.014', { + 'source_tmpl': 'Module-Runtime-0.014.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/'], + }), + ('Module::Implementation', '0.09', { + 'source_tmpl': 'Module-Implementation-0.09.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], + }), + ('List::MoreUtils', '0.413', { + 'source_tmpl': 'List-MoreUtils-0.413.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Package::DeprecationManager', '0.14', { + 'source_tmpl': 'Package-DeprecationManager-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Dist::CheckConflicts', '0.11', { + 'source_tmpl': 'Dist-CheckConflicts-0.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Package::Stash', '0.37', { + 'source_tmpl': 'Package-Stash-0.37.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], + }), + ('Class::Load', '0.23', { + 'source_tmpl': 'Class-Load-0.23.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('TAP::Harness::Env', '3.35', { + 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('ExtUtils::Helpers', '0.022', { + 'source_tmpl': 'ExtUtils-Helpers-0.022.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Config', '0.008', { + 'source_tmpl': 'ExtUtils-Config-0.008.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::InstallPaths', '0.011', { + 'source_tmpl': 'ExtUtils-InstallPaths-0.011.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Build::Tiny', '0.039', { + 'source_tmpl': 'Module-Build-Tiny-0.039.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('MRO::Compat', '0.12', { + 'source_tmpl': 'MRO-Compat-0.12.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BO/BOBTFISH/'], + }), + ('Sub::Name', '0.05', { + 'source_tmpl': 'Sub-Name-0.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FL/FLORA/'], + }), + ('Eval::Closure', '0.13', { + 'source_tmpl': 'Eval-Closure-0.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Sub::Exporter::Progressive', '0.001011', { + 'source_tmpl': 'Sub-Exporter-Progressive-0.001011.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], + }), + ('Devel::GlobalDestruction', '0.13', { + 'source_tmpl': 'Devel-GlobalDestruction-0.13.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('boolean', '0.45', { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('Tie::IxHash', '1.23', { + 'source_tmpl': 'Tie-IxHash-1.23.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Moose', '2.1405', { + 'source_urls': ['http://www.cpan.org/modules/by-module/MooseX/ETHER/'], + }), + ('Package::Stash::XS', '0.28', { + 'source_tmpl': 'Package-Stash-XS-0.28.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], + }), + ('Params::Validate', '1.20', { + 'source_tmpl': 'Params-Validate-1.20.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], + }), + ('Class::Load::XS', '0.09', { + 'source_tmpl': 'Class-Load-XS-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + + # For uoa00001, Zendesk #9076 + ('Math::CDF', '0.1', { + 'source_tmpl': 'Math-CDF-0.1.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], + }), + + ('DateTime::Locale', '0.46', { + 'source_tmpl': 'DateTime-Locale-0.46.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Singleton', '1.4', { + 'source_tmpl': 'Class-Singleton-1.4.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('DateTime::TimeZone', '1.92', { + 'source_tmpl': 'DateTime-TimeZone-1.92.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('Test::Warnings', '0.021', { + 'source_tmpl': 'Test-Warnings-0.021.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('Data::Types', '0.09', { + 'source_tmpl': 'Data-Types-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], + }), + ('Exporter::Tiny', '0.042', { + 'source_tmpl': 'Exporter-Tiny-0.042.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], + }), + + ('List::AllUtils', '0.09', { + 'source_tmpl': 'List-AllUtils-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], + }), + ('DateTime', '1.20', { + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('DateTime::Tiny', '1.04', { + 'source_tmpl': 'DateTime-Tiny-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('File::Slurp', '9999.19', { + 'source_tmpl': 'File-Slurp-9999.19.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/U/UR/URI/'], + }), + ('HTTP::Date', '6.02', { + 'source_tmpl': 'HTTP-Date-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('IO::HTML', '1.001', { + 'source_tmpl': 'IO-HTML-1.001.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/IO/CJM/'], + }), + ('LWP::MediaTypes', '6.02', { + 'source_tmpl': 'LWP-MediaTypes-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('URI', '1.69', { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Encode::Locale', '1.05', { + 'source_tmpl': 'Encode-Locale-1.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Request', '6.06', { + 'source_tmpl': 'HTTP-Message-6.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTML::Tagset', '3.20', { + 'source_tmpl': 'HTML-Tagset-3.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PETDANCE/'], + }), + ('HTML::Entities', '3.71', { + 'source_tmpl': 'HTML-Parser-3.71.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('File::Listing', '6.04', { + 'source_tmpl': 'File-Listing-6.04.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('AnyEvent', '7.09', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/'], + }), + ('Devel::CheckCompiler', '0.06', { + 'source_tmpl': 'Devel-CheckCompiler-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('File::Copy::Recursive', '0.38', { + 'source_tmpl': 'File-Copy-Recursive-0.38.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DM/DMUEY/'], + }), + ('Cwd::Guard', '0.04', { + 'source_tmpl': 'Cwd-Guard-0.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], + }), + ('Module::Build::XSUtil', '0.16', { + 'source_tmpl': 'Module-Build-XSUtil-0.16.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO/'], + }), + ('LWP', '6.13', { + 'source_tmpl': 'libwww-perl-6.13.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Fennec::Lite', '0.004', { + 'source_tmpl': 'Fennec-Lite-0.004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('aliased', '0.31', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Meta::Builder', '0.003', { + 'source_tmpl': 'Meta-Builder-0.003.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Exporter::Declare', '0.114', { + 'source_tmpl': 'Exporter-Declare-0.114.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Mock::Quick', '1.108', { + 'source_tmpl': 'Mock-Quick-1.108.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Test::Exception::LessClever', '0.006', { + 'source_tmpl': 'Test-Exception-LessClever-0.006.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], + }), + ('Test::LeakTrace', '0.15', { + 'source_tmpl': 'Test-LeakTrace-0.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], + }), + ('Mouse', '2.4.2', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], + }), + ('XML::NamespaceSupport', '1.11', { + 'source_tmpl': 'XML-NamespaceSupport-1.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::SAX::Base', '1.08', { + 'source_tmpl': 'XML-SAX-Base-1.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::SAX', '0.99', { + 'source_tmpl': 'XML-SAX-0.99.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::LibXML', '2.0121', { + 'source_tmpl': 'XML-LibXML-2.0121.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + }), + ('Clone', '0.38', { + 'source_tmpl': 'Clone-0.38.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GARU'], + }), + ('Config::General', '2.58', { + 'source_tmpl': 'Config-General-2.58.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], + }), + ('Test::Simple', '0.98', { + 'source_tmpl': 'Test-Simple-0.98_05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSCHWERN'], + }), + ('Font::TTF', '1.05', { + 'source_tmpl': 'Font-TTF-1.05.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHOSKEN'], + }), + ('IO::Tty', '1.12', { + 'source_tmpl': 'IO-Tty-1.12.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Math::Bezier', '0.01', { + 'source_tmpl': 'Math-Bezier-0.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('IPC::Run', '0.94', { + 'source_tmpl': 'IPC-Run-0.94.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Math::Round', '0.07', { + 'source_tmpl': 'Math-Round-0.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], + }), + ('B::LintSubs', '0.06', { + 'source_tmpl': 'B-LintSubs-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PEVANS'], + }), + ('Math::VecStat', '0.08', { + 'source_tmpl': 'Math-VecStat-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], + }), + ('Test::Most', '0.34', { + 'source_tmpl': 'Test-Most-0.34.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], + }), + ('Readonly', '1.04', { + 'source_tmpl': 'Readonly-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SA/SANKO/'], + }), + ('Regexp::Common', '2013031301', { + 'source_tmpl': 'Regexp-Common-2013031301.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], + }), + ('Want', '0.26', { + 'source_tmpl': 'Want-0.26.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], + }), + ('DBD::SQLite', '1.48', { + 'source_tmpl': 'DBD-SQLite-1.48.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], + }), + ('Set::IntSpan', '1.19', { + 'source_tmpl': 'Set-IntSpan-1.19.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SW/SWMCD'], + }), + ('forks', '0.36', { + 'source_tmpl': 'forks-0.36.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], + }), + ('File::Which', '1.09', { + 'source_tmpl': 'File-Which-1.09.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + }), + ('Perl::Unsafe::Signals', '', { + 'source_tmpl': 'Perl-Unsafe-Signals-0.02.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], + }), + ('Bit::Vector', '7.4', { + 'source_tmpl': 'Bit-Vector-7.4.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], + }), + ('Parse::RecDescent', '1.967009', { + 'source_tmpl': 'Parse-RecDescent-1.967009.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], + }), + ('Inline', '0.80', { + 'source_tmpl': 'Inline-0.80.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('File::ShareDir::Install', '0.10', { + 'source_tmpl': 'File-ShareDir-Install-0.10.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GW/GWYN/'], + }), + ('Inline::C', '0.76', { + 'source_tmpl': 'Inline-C-0.76.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('IO::All', '0.85', { + 'source_tmpl': 'IO-All-0.85.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], + }), + ('IO::Prompt', '0.997002', { + 'source_tmpl': 'IO-Prompt-0.997002.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], + }), + ('Getopt::Long', '2.47', { + 'source_tmpl': 'Getopt-Long-2.47.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JV/JV/'], + }), + ('AppConfig', '1.66', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('Archive::Extract', '0.76', { + 'source_tmpl': 'Archive-Extract-0.76.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Tar', '2.08', { + 'source_tmpl': 'Archive-Tar-2.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Zip', '1.57', { + 'source_tmpl': 'Archive-Zip-1.57.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], + }), + ('Authen::SASL', '2.16', { + 'source_tmpl': 'Authen-SASL-2.16.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], + }), + ('B::Lint', '1.20', { + 'source_tmpl': 'B-Lint-1.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + # BioPerl bundle was here + ('Class::Accessor', '0.34', { + 'source_tmpl': 'Class-Accessor-0.34.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('Class::DBI', '3.0.17', { + 'source_tmpl': 'Class-DBI-v3.0.17.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('Class::Inspector', '1.28', { + 'source_tmpl': 'Class-Inspector-1.28.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Class::ISA', '0.36', { + 'source_tmpl': 'Class-ISA-0.36.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SM/SMUELLER/'], + }), + ('Class::Trigger', '0.14', { + 'source_tmpl': 'Class-Trigger-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], + }), + ('CPANPLUS', '0.9154', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Data::Grove', '0.08', { + 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], + }), + ('Data::UUID', '1.220', { + 'source_tmpl': 'Data-UUID-1.220.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Date::Language', '2.30', { + 'source_tmpl': 'TimeDate-2.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], + }), + ('Date::Handler', '1.2', { + 'source_tmpl': 'Date-Handler-1.2.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ/'], + }), + ('SQL::Statement', '1.407', { + 'source_tmpl': 'SQL-Statement-1.407.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Module::Pluggable', '5.1', { + 'source_tmpl': 'Module-Pluggable-5.1.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SI/SIMONW/'], + }), + ('Digest::HMAC', '1.03', { + 'source_tmpl': 'Digest-HMAC-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Digest::SHA1', '2.13', { + 'source_tmpl': 'Digest-SHA1-2.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Email::Date::Format', '1.005', { + 'source_tmpl': 'Email-Date-Format-1.005.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Error', '0.17024', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], + }), + ('Expect', '1.21', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGIERSIG/'], + }), + ('File::CheckTree', '4.42', { + 'source_tmpl': 'File-CheckTree-4.42.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('FreezeThaw', '0.5001', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules/'], + }), + ('Git', '0.41', { + 'source_tmpl': 'Git-0.41.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSOUTH/'], + }), + ('GO::Utils', '0.15', { + 'source_tmpl': 'go-perl-0.15.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], + }), + ('GO', '0.04', { + 'source_tmpl': 'go-db-perl-0.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SJ/SJCARBON/'], + }), + ('HTML::Form', '6.03', { + 'source_tmpl': 'HTML-Form-6.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Cookies', '6.01', { + 'source_tmpl': 'HTTP-Cookies-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Daemon', '6.01', { + 'source_tmpl': 'HTTP-Daemon-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Negotiate', '6.01', { + 'source_tmpl': 'HTTP-Negotiate-6.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('IO::Stringy', '2.111', { + 'source_tmpl': 'IO-stringy-2.111.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DS/DSKOLL/'], + }), + ('IO::Socket::SSL', '2.016', { + 'source_tmpl': 'IO-Socket-SSL-2.016.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SU/SULLR/'], + }), + ('JSON', '2.90', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA/'], + }), + ('Log::Message', '0.08', { + 'source_tmpl': 'Log-Message-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Log::Message::Simple', '0.10', { + 'source_tmpl': 'Log-Message-Simple-0.10.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Mail::Util', '2.14', { + 'source_tmpl': 'MailTools-2.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Types', '2.11', { + 'source_tmpl': 'MIME-Types-2.11.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Lite', '3.030', { + 'source_tmpl': 'MIME-Lite-3.030.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Net::HTTP', '6.06', { + 'source_tmpl': 'Net-HTTP-6.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('Net::SMTP::SSL', '1.01', { + 'source_tmpl': 'Net-SMTP-SSL-1.01.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CW/CWEST/'], + }), + ('Object::Accessor', '0.48', { + 'source_tmpl': 'Object-Accessor-0.48.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Pod::LaTeX', '0.61', { + 'source_tmpl': 'Pod-LaTeX-0.61.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJENNESS/'], + }), + ('Pod::Plainer', '1.04', { + 'source_tmpl': 'Pod-Plainer-1.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RM/RMBARKER/'], + }), + ('Pod::POM', '0.29', { + 'source_tmpl': 'Pod-POM-0.29.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AN/ANDREWF/'], + }), + ('Shell', '0.72', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FE/FERREIRA/'], + }), + ('Statistics::Descriptive', '3.0609', { + 'source_tmpl': 'Statistics-Descriptive-3.0609.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], + }), + ('Switch', '2.17', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], + }), + ('Template', '2.26', { + 'source_tmpl': 'Template-Toolkit-2.26.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], + }), + ('Term::UI', '0.46', { + 'source_tmpl': 'Term-UI-0.46.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], + }), + ('Text::Iconv', '1.7', { + 'source_tmpl': 'Text-Iconv-1.7.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MP/MPIOTR/'], + }), + ('Text::Soundex', '3.04', { + 'source_tmpl': 'Text-Soundex-3.04.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Time::Piece', '1.30', { + 'source_tmpl': 'Time-Piece-1.30.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Time::Piece::MySQL', '0.06', { + 'source_tmpl': 'Time-Piece-MySQL-0.06.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('UNIVERSAL::moniker', '0.08', { + 'source_tmpl': 'UNIVERSAL-moniker-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], + }), + ('version', '0.9912', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JP/JPEACOCK/'], + }), + ('WWW::RobotRules', '6.02', { + 'source_tmpl': 'WWW-RobotRules-6.02.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], + }), + ('XML::SAX::Writer', '0.56', { + 'source_tmpl': 'XML-SAX-Writer-0.56.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::Simple', '2.20', { + 'source_tmpl': 'XML-Simple-2.20.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], + }), + ('XML::XPath', '1.13', { + 'source_tmpl': 'XML-XPath-1.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSERGEANT/'], + }), + ('DBD::AnyData', '0.110', { + 'source_tmpl': 'DBD-AnyData-0.110.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], + }), + ('Ima::DBI', '0.35', { + 'source_tmpl': 'Ima-DBI-0.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERRIN/'], + }), + ('DBIx::ContextualFetch', '1.03', { + 'source_tmpl': 'DBIx-ContextualFetch-1.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], + }), + ('DBIx::Simple', '1.35', { + 'source_tmpl': 'DBIx-Simple-1.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JU/JUERD/'], + }), + ('Term::ReadKey', '2.32', { + 'source_tmpl': 'TermReadKey-2.32.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JS/JSTOWE/'], + 'patches': ['TermReadKey-2.32.patch'], + }), + ('Moo', '2.000001', { + 'source_tmpl': 'Moo-2.000001.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], + }), + ('strictures', '2.000001', { + 'source_tmpl': 'strictures-2.000001.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], + }), + ('File::Find::Rule::Perl', '1.13', { + 'source_tmpl': 'File-Find-Rule-Perl-1.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], + }), + ('Test::Version', '1.002004', { + 'source_tmpl': 'Test-Version-1.002004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/X/XE/XENO/'], + }), + ('Test::Harness', '3.35', { + 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], + }), + ('Import::Into', '1.002004', { + 'source_tmpl': 'Import-Into-1.002004.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + }), + ('File::Find::Rule', '0.33', { + 'source_tmpl': 'File-Find-Rule-0.33.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('Data::Section::Simple', '0.07', { + 'source_tmpl': 'Data-Section-Simple-0.07.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], + }), + ('Text::Glob', '0.09', { + 'source_tmpl': 'Text-Glob-0.09.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('Number::Compare', '0.03', { + 'source_tmpl': 'Number-Compare-0.03.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], + }), + ('IPC::Run3', '0.048', { + 'source_tmpl': 'IPC-Run3-0.048.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], + }), + ('Set::Array', '0.30', { + 'source_tmpl': 'Set-Array-0.30.tgz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], + }), + ('Bundle::BioPerl', '2.1.9', { + 'source_tmpl': 'Bundle-BioPerl-2.1.9.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS/'], + }), + + ('Algorithm::Munkres', '0.08', { + 'source_tmpl': 'Algorithm-Munkres-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TP/TPEDERSE/'], + }), +# Lots of deps: Carp, Types::Standard etc. +# ('Array::Compare', '2.11', { +# 'source_tmpl': 'Array-Compare-2.11.tar.gz', +# 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVECROSS/'], +# }), + ('Graph', '0.96', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JH/JHI/'], + }), + ('Set::Scalar', '1.29', { + 'source_tmpl': 'Set-Scalar-1.29.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVIDO/'], + }), + + ('CGI', '4.21', { + 'source_tmpl': 'CGI-4.21.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEEJO/'], + }), + ('Bio::Phylo', '0.58', { + 'source_tmpl': 'Bio-Phylo-0.58.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RV/RVOSA/'], + }), +# ('GD', '2.56', { +# 'source_urls': 'http://cpan.metacpan.org/authors/id/L/LD/LDS/'], +# }), + ('SVG', '2.64', { + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SZ/SZABGAB/'], + }), + ('XML::DOM', '1.44', { + 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], + }), + ('XML::DOM::XPath', '0.14', { + 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('XML::Parser::PerlSAX', '0.08', { + 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], + }), + ('XML::Parser', '2.44', { + 'source_tmpl': 'XML-Parser-2.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR/'], + }), + ('XML::Twig', '3.49', { + 'source_tmpl': 'XML-Twig-3.49.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('XML::Writer', '0.625', { + 'source_tmpl': 'XML-Writer-0.625.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JO/JOSEPHW/'], + }), + ('XML::DOM', '1.44', { + 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], + }), + ('Spreadsheet::ParseExcel', '0.65', { + 'source_tmpl': 'Spreadsheet-ParseExcel-0.65.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOUGW/'], + }), + ('XML::DOM::XPath', '0.14', { + 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], + }), + ('Convert::Binary::C', '0.77', { + 'source_tmpl': 'Convert-Binary-C-0.77.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHX/'], + }), + ('Sys::SigAction.pm', '0.21', { + 'source_tmpl': 'Sys-SigAction-0.21.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], + }), + ('Acme::Damn', '0.06', { + 'source_tmpl': 'Acme-Damn-0.06.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], + }), + ('Set::IntervalTree', '0.10', { + 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], + }), + +# Trouble finding libbam.a and bam/bam.h - try Alien::Samtools next +# ('Bio::DB::Sam', '1.41', { +# 'source_tmpl': 'Bio-SamTools-1.41.tar.gz', +# 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LD/LDS/'], +# 'patches': ['Perl-Bio-SamTools.patch'], +# }), + ('HTML::TableExtract', '2.13', { + 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], + }), + + ('Bio::Perl', '1.6.924', { + 'source_tmpl': 'BioPerl-1.6.924.tar.gz', + 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], + }), +] + +moduleclass = 'lang' -- GitLab From 55fd84bf99acf667c597b349c1a45a55f15ece03 Mon Sep 17 00:00:00 2001 From: jerowe Date: Fri, 13 Jan 2017 08:23:46 +0400 Subject: [PATCH 0278/1311] adding channel to perl-app-cpanminus --- .../p/perl-app-cpanminus/perl-app-cpanminus-1.7039.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/perl-app-cpanminus/perl-app-cpanminus-1.7039.eb b/easybuild/easyconfigs/p/perl-app-cpanminus/perl-app-cpanminus-1.7039.eb index c89d3af9f2..cc1d205d40 100644 --- a/easybuild/easyconfigs/p/perl-app-cpanminus/perl-app-cpanminus-1.7039.eb +++ b/easybuild/easyconfigs/p/perl-app-cpanminus/perl-app-cpanminus-1.7039.eb @@ -22,7 +22,7 @@ description = """ cpanm - get, unpack build and install modules from CPAN """ toolchain = {'name': 'dummy', 'version': ''} requirements = "%(name)s=%(version)s" -channels = ['bioconda'] +channels = ['bioconda', 'conda-forge'] builddependencies = [('Anaconda2', '4.0.0')] -- GitLab From 15166547d968dd415bcd4ee7ff3afd3c4c87801b Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:34:02 +0100 Subject: [PATCH 0279/1311] Update Eigen-3.2.9-foss-2016b.eb --- easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb index 2e997dc434..ce9863f2a8 100644 --- a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2016b.eb @@ -10,4 +10,4 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] sources = ['%(version)s.tar.bz2'] -moduleclass = 'math' +moduleclass = 'math' -- GitLab From dc32386174c298a197a322b054861cc680465e9b Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:34:36 +0100 Subject: [PATCH 0280/1311] Update MPFR-3.1.4-foss-2016b.eb --- easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb index d0abf27110..d9a98da483 100644 --- a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb +++ b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.4-foss-2016b.eb @@ -23,4 +23,4 @@ sanity_check_paths = { 'dirs': [] } -moduleclass = 'math' +moduleclass = 'math' -- GitLab From 8f00294c539073d806560da454b5c50866c9bd0e Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:35:05 +0100 Subject: [PATCH 0281/1311] Update Qt5-5.7.0-foss-2016b.eb --- easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb index 66c30f53b8..22b14d640f 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -30,4 +30,4 @@ dependencies = [ ('libGLU', '9.0.0'), ] -moduleclass = 'devel' +moduleclass = 'devel' -- GitLab From 335d827a10dea245843c2417a102742267739caa Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:35:49 +0100 Subject: [PATCH 0282/1311] Update OpenFOAM-4.0-foss-2016b.eb --- easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb index bf8451bef3..4f9d282dad 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb @@ -1,7 +1,7 @@ name = 'OpenFOAM' version = '4.0' -homepage = 'http://www.openfoam.com/' +homepage = 'http://www.openfoam.org/' description = """OpenFOAM is a free, open source CFD software package. OpenFOAM has an extensive range of features to solve anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, @@ -24,7 +24,6 @@ dependencies = [ ('METIS', '5.1.0'), #('METIS', '5.1.0', '-32bitIDX'), ('SCOTCH', '6.0.4'), - #('Boost', '1.61.0'), ('CGAL', '4.8.1'), ('ParaView', '5.1.2', '-mpi'), ] -- GitLab From 9c776b363b36183ecb03badc02d0237d47b49bc0 Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:37:20 +0100 Subject: [PATCH 0283/1311] Update CGAL-4.8.1-foss-2016b.eb --- easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb index 20c45dda38..44d057e3a2 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2016b.eb @@ -17,7 +17,7 @@ dependencies = [ ('MPFR', '3.1.4'), ('GMP', '6.1.1'), ('libGLU', '9.0.0'), - ('Qt5', '5.7.0'), + ('Qt', '4.8.7'), ] builddependencies = [ -- GitLab From 4229c6053dfea2329c61f5e83c035753155de94d Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 13 Jan 2017 08:50:19 +0100 Subject: [PATCH 0284/1311] Update Qt5-5.7.0-foss-2016b.eb --- easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb index 22b14d640f..aed1d16c64 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.7.0-foss-2016b.eb @@ -14,8 +14,6 @@ source_urls = [ ] sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] -patches = ['%(name)s-%(version)s-workaround-icpc-bug.patch'] - builddependencies = [ ('pkg-config', '0.29.1'), ] -- GitLab From c03f555c6b2152db21cb50ad8389282a0c0c7d11 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Fri, 13 Jan 2017 09:05:20 +0100 Subject: [PATCH 0285/1311] Add alternate URL to avoid breaking with new upstream releases --- easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb index ad22d09979..0d6ccf3dc7 100644 --- a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb +++ b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-foss-2016b.eb @@ -18,7 +18,11 @@ description = """EMBOSS is 'The European Molecular Biology Open Software Suite'. toolchain = {'name': 'foss', 'version': '2016b'} -source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/'] +source_urls = [ + 'ftp://emboss.open-bio.org/pub/EMBOSS/', + 'ftp://emboss.open-bio.org/pub/EMBOSS/old/%(version_major_minor)s.0', +] + sources = [SOURCE_TAR_GZ] patches = ['EMBOSS_disable-embossupdate.patch'] -- GitLab From 20a9daa3f271ce1b150bd2349db87b90943c6b8a Mon Sep 17 00:00:00 2001 From: edmondac-admin Date: Fri, 13 Jan 2017 09:55:13 +0000 Subject: [PATCH 0286/1311] Adding tmux 2.3 and libevent 2.0.22 with toolchain (GCC-5.4.0-2.26) --- .../libevent-2.0.22-GCC-5.4.0-2.26.eb | 23 +++++++++++++++ .../t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb | 29 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb create mode 100644 easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..bde8a2eca6 --- /dev/null +++ b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb @@ -0,0 +1,23 @@ +# Automatically converted from libevent-2.0.22-GCCcore-5.4.0.eb +# by /gpfs/sysapps/bham/scripts/easybuild/recursive_build_with_new_toolchain.py +# Automatically converted from libevent-2.0.22-GCCcore-4.9.3.eb +# by /gpfs/sysapps/bham/scripts/easybuild/copy_to_toolchain.py +easyblock = 'ConfigureMake' + +name = 'libevent' +version = '2.0.22' + +homepage = 'http://libevent.org/' +description = """The libevent API provides a mechanism to execute a callback function when a specific + event occurs on a file descriptor or after a timeout has been reached. + Furthermore, libevent also support callbacks due to signals or regular timeouts.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} + +source_urls = [ + 'https://github.com/%(name)s/%(name)s/releases/download/release-%(version)s-stable/', +] + +sources = ['%(name)s-%(version)s-stable.tar.gz'] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..81ddd2f6b3 --- /dev/null +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb @@ -0,0 +1,29 @@ +# Automatically converted from tmux-2.3-GCCcore-5.4.0.eb +# by /gpfs/sysapps/bham/scripts/easybuild/recursive_build_with_new_toolchain.py +easyblock = 'ConfigureMake' + +name = 'tmux' +version = '2.3' + +homepage = 'http://tmux.sourceforge.net/' +description = """tmux is a terminal multiplexer. It lets you switch easily between +several programs in one terminal, detach them (they keep running in the background) +and reattach them to a different terminal.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} +toolchainopts = {'optarch': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] + +dependencies = [ + ('ncurses', '6.0'), + ('libevent', '2.0.22'), +] + +sanity_check_paths = { + 'files': ['bin/tmux'], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 64437d4118c1ba2c35902f01b3eaff24605f3f05 Mon Sep 17 00:00:00 2001 From: edmondac-admin Date: Fri, 13 Jan 2017 10:00:52 +0000 Subject: [PATCH 0287/1311] Tidying up UoB comments --- .../easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb | 4 ---- easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb | 2 -- 2 files changed, 6 deletions(-) diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb index bde8a2eca6..e069d2a221 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-5.4.0-2.26.eb @@ -1,7 +1,3 @@ -# Automatically converted from libevent-2.0.22-GCCcore-5.4.0.eb -# by /gpfs/sysapps/bham/scripts/easybuild/recursive_build_with_new_toolchain.py -# Automatically converted from libevent-2.0.22-GCCcore-4.9.3.eb -# by /gpfs/sysapps/bham/scripts/easybuild/copy_to_toolchain.py easyblock = 'ConfigureMake' name = 'libevent' diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb index 81ddd2f6b3..185b4711a6 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb @@ -1,5 +1,3 @@ -# Automatically converted from tmux-2.3-GCCcore-5.4.0.eb -# by /gpfs/sysapps/bham/scripts/easybuild/recursive_build_with_new_toolchain.py easyblock = 'ConfigureMake' name = 'tmux' -- GitLab From 5bebbc71a1bec819c4c0c92286c75e323c066810 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 11:47:39 +0100 Subject: [PATCH 0288/1311] {data}[intel/2016b] GDAL v2.1.2 --- .../GDAL-2.1.2-intel-2016b-Python-2.7.12.eb | 51 +++++++++++++++++++ .../g/GDAL/GDAL-2.1.2_fix-vrtsources.patch | 20 ++++++++ 2 files changed, 71 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.2_fix-vrtsources.patch diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9e5b8f7b62 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,51 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.1.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] + +patches = ['GDAL-%(version)s_fix-vrtsources.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.13.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.24'), + ('libjpeg-turbo', '1.5.0'), + ('JasPer', '1.900.1'), + ('LibTIFF', '4.0.6'), + ('zlib', '1.2.8'), + ('cURL', '7.49.1'), + ('PCRE', '8.39'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' +# there is a bug in the build system causing the build with libtool to fail for the moment +# (static library is also missing because of this) +configopts += ' --without-libtool' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2_fix-vrtsources.patch b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2_fix-vrtsources.patch new file mode 100644 index 0000000000..238de86030 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2_fix-vrtsources.patch @@ -0,0 +1,20 @@ +fix compilation issue, cfr. https://trac.osgeo.org/gdal/ticket/6748 +Index: /trunk/gdal/frmts/vrt/vrtsources.cpp +=================================================================== +--- /trunk/gdal/frmts/vrt/vrtsources.cpp (revision 36798) ++++ /trunk/gdal/frmts/vrt/vrtsources.cpp (revision 36799) +@@ -2592,4 +2592,14 @@ + } + ++// Explicitly instantiate template method, as it is used in another file. ++template ++CPLErr VRTComplexSource::RasterIOInternal( int nReqXOff, int nReqYOff, ++ int nReqXSize, int nReqYSize, ++ void *pData, int nOutXSize, int nOutYSize, ++ GDALDataType eBufType, ++ GSpacing nPixelSpace, GSpacing nLineSpace, ++ GDALRasterIOExtraArg* psExtraArg, ++ GDALDataType eWrkDataType ); ++ + /************************************************************************/ + /* GetMinimum() */ -- GitLab From bd835b55ce17a95ac3da380c62c48f84c923db22 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 14:23:39 +0100 Subject: [PATCH 0289/1311] adding easyconfigs: libspatialindex-1.8.5-intel-2016b.eb --- .../libspatialindex-1.8.5-intel-2016b.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-intel-2016b.eb b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-intel-2016b.eb new file mode 100644 index 0000000000..04f41e27d3 --- /dev/null +++ b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-intel-2016b.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'libspatialindex' +version = '1.8.5' + +homepage = 'http://libspatialindex.github.io' +description = "C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://download.osgeo.org/libspatialindex/'] +sources = ['spatialindex-src-%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['lib/libspatialindex.a', 'lib/libspatialindex.%s' % SHLIB_EXT], + 'dirs': ['include/spatialindex'], +} + +moduleclass = 'lib' -- GitLab From a7c7c49339783f240a01113c647f5d8215e2f817 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 14:32:03 +0100 Subject: [PATCH 0290/1311] adding easyconfigs: GATK-3.7-Java-1.8.0_112.eb --- .../g/GATK/GATK-3.7-Java-1.8.0_112.eb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb new file mode 100644 index 0000000000..a82a27cc92 --- /dev/null +++ b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb @@ -0,0 +1,42 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB +# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# Modified by: Adam Huffman +# The Francis Crick Institute +## + +easyblock = 'Tarball' + +name = 'GATK' +version = '3.7' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://www.broadinstitute.org/gatk/' +description = """The Genome Analysis Toolkit or GATK is a software package developed at the Broad Institute + to analyse next-generation resequencing data. The toolkit offers a wide variety of tools, + with a primary focus on variant discovery and genotyping as well as strong emphasis on + data quality assurance. Its robust architecture, powerful processing engine and + high-performance computing features make it capable of taking on projects of any size.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download manually from http://www.broadinstitute.org/gatk/download +sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] + +dependencies = [('Java', '1.8.0_112')] + +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n""" + +sanity_check_paths = { + 'files': ["GenomeAnalysisTK.jar"], + 'dirs': ["resources"], +} + +moduleclass = 'bio' -- GitLab From 5c005d5daae69dad56e1a79e98173a3ff6230d37 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 14:49:14 +0100 Subject: [PATCH 0291/1311] adding easyconfigs: PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb, PyQt-4.12-intel-2016b-Python-2.7.12.eb, SIP-4.19-intel-2016b-Python-2.7.12.eb --- .../PyQt-4.12-intel-2016b-Python-2.7.12.eb | 37 +++++++++++++++++++ .../PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb | 34 +++++++++++++++++ .../SIP/SIP-4.19-intel-2016b-Python-2.7.12.eb | 30 +++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/PyQt5/PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/SIP/SIP-4.19-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9ea42178d7 --- /dev/null +++ b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,37 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'PyQt' +version = '4.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.co.uk/software/pyqt' +description = """PyQt is a set of Python v2 and v3 bindings for Digia's Qt application framework.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-%(version)s'] +sources = ['PyQt4_gpl_x11-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('SIP', '4.19', versionsuffix), + ('Qt', '4.8.7'), +] + +configopts = "configure-ng.py --confirm-license" +configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " +configopts += " --no-sip-files" + +options = {'modulename': '%(name)s%(version_major)s'} + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s%(version_major)s'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PyQt5/PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyQt5/PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..81482a92b2 --- /dev/null +++ b/easybuild/easyconfigs/p/PyQt5/PyQt5-5.7.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMakePythonPackage' + +name = 'PyQt5' +version = '5.7.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.co.uk/software/pyqt' +description = """PyQt5 is a set of Python bindings for v5 of the Qt application framework from The Qt Company.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-%(version)s'] +sources = ['%(name)s_gpl-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('SIP', '4.19', versionsuffix), + ('Qt5', '5.7.1'), +] + +configopts = "configure.py --confirm-license" +configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " +configopts += " --no-sip-files" + +options = {'modulename': '%(name)s'} + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/SIP/SIP-4.19-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SIP/SIP-4.19-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9f5fa19c24 --- /dev/null +++ b/easybuild/easyconfigs/s/SIP/SIP-4.19-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'SIP' +version = '4.19' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.com/software/sip/' +description = """SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://sourceforge.net/projects/pyqt/files/sip/sip-%(version)s'] + +dependencies = [('Python', '2.7.12')] + +configopts = "configure.py --bindir %(installdir)s/bin --incdir %(installdir)s/include " +configopts += "--destdir %(installdir)s/lib/python%(pyshortver)s/site-packages" + +sanity_check_paths = { + 'files': ['bin/sip', 'include/sip.h'] + + ['lib/python%%(pyshortver)s/site-packages/%s' % x + for x in ['sip.%s' % SHLIB_EXT, 'sipconfig.py', 'sipdistutils.py']], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From 7e2223f80cf40ee2cf482eb646c61fb3c099c062 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 16:06:14 +0100 Subject: [PATCH 0292/1311] adding easyconfigs: QwtPolar-1.1.1-intel-2016b.eb, Qwt-6.1.3-intel-2016b.eb --- .../q/Qwt/Qwt-6.1.3-intel-2016b.eb | 29 +++++++++++++++++++ .../q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb | 29 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-intel-2016b.eb b/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-intel-2016b.eb new file mode 100644 index 0000000000..a477b16bef --- /dev/null +++ b/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'Qwt' +version = '6.1.3' + +homepage = 'http://qwt.sourceforge.net/' +description = """The Qwt library contains GUI Components and utility classes which are primarily useful for programs + with a technical background.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('Qt', '4.8.7'), +] + +skipsteps = ['configure'] + +prebuildopts = "sed -i 's@QWT_INSTALL_PREFIX[ ]*=.*@QWT_INSTALL_PREFIX = %(installdir)s@g' qwtconfig.pri && " +prebuildopts += "qmake qwt.pro && " + +sanity_check_paths = { + 'files': ['lib/libqwt.%s' % SHLIB_EXT], + 'dirs': ['doc', 'features', 'include', 'plugins'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb new file mode 100644 index 0000000000..8162f0b889 --- /dev/null +++ b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'QwtPolar' +version = '1.1.1' + +homepage = 'http://qwtpolar.sourceforge.net/' +description = "The QwtPolar library contains classes for displaying values on a polar coordinate system." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('Qwt', '6.1.3'), +] + +skipsteps = ['configure'] + +prebuildopts = "sed -i 's@\\(QWT_POLAR_INSTALL_PREFIX[ ]*=\\).*@\\1 %(installdir)s@g' qwtpolarconfig.pri && " +prebuildopts += "sed -i 's/QwtPolarExamples//g' qwtpolarconfig.pri && " +prebuildopts += "qmake qwtpolar.pro && " + +sanity_check_paths = { + 'files': ['lib/libqwtpolar.%s' % SHLIB_EXT], + 'dirs': ['doc', 'features', 'include', 'plugins'], +} + +moduleclass = 'lib' -- GitLab From 6f4d6570da5cbbb163ac8f58907ca9f92b2f4605 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 16:06:35 +0100 Subject: [PATCH 0293/1311] adding easyconfigs: QCA-2.1.0-intel-2016b.eb --- .../q/QCA/QCA-2.1.0-intel-2016b.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/q/QCA/QCA-2.1.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/q/QCA/QCA-2.1.0-intel-2016b.eb b/easybuild/easyconfigs/q/QCA/QCA-2.1.0-intel-2016b.eb new file mode 100644 index 0000000000..73895f04cb --- /dev/null +++ b/easybuild/easyconfigs/q/QCA/QCA-2.1.0-intel-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'CMakeMake' + +name = 'QCA' +version = '2.1.0' + +homepage = 'http://delta.affinix.com/qca/' +description = """Taking a hint from the similarly-named Java Cryptography Architecture, + QCA aims to provide a straightforward and cross-platform crypto API, using Qt datatypes + and conventions. QCA separates the API from the implementation, using plugins known as + Providers. The advantage of this model is to allow applications to avoid linking to or + explicitly depending on any particular cryptographic library. This allows one to easily + change or upgrade crypto implementations without even needing to recompile the + application! QCA should work everywhere Qt does, including Windows/Unix/MacOSX.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://delta.affinix.com/download/qca/2.0/'] +sources = ['%(namelower)s-%(version)s.tar.gz'] + +configopts = "-DQT4_BUILD=true" + +builddependencies = [ + ('CMake', '3.7.1') +] + +dependencies = [ + ('Qt', '4.8.7') +] + +moduleclass = 'devel' -- GitLab From 269ce401b0b9b52b1c3f850d6bb265509a6cc3cc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 16:27:25 +0100 Subject: [PATCH 0294/1311] fix prebuildopts in QwtPolar easyconfig --- easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb index 8162f0b889..0b5d5c5c98 100644 --- a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb @@ -17,7 +17,7 @@ dependencies = [ skipsteps = ['configure'] -prebuildopts = "sed -i 's@\\(QWT_POLAR_INSTALL_PREFIX[ ]*=\\).*@\\1 %(installdir)s@g' qwtpolarconfig.pri && " +prebuildopts = r"sed -i 's@\(QWT_POLAR_INSTALL_PREFIX[ ]*=\).*@\1 %(installdir)s@g' qwtpolarconfig.pri && " prebuildopts += "sed -i 's/QwtPolarExamples//g' qwtpolarconfig.pri && " prebuildopts += "qmake qwtpolar.pro && " -- GitLab From b743638d3ac4dafa60f75ffc3edc64d79e15a812 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 16:48:58 +0100 Subject: [PATCH 0295/1311] fix sed command in QwtPolar easyconfig --- easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb index 0b5d5c5c98..4b8e6389ed 100644 --- a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-intel-2016b.eb @@ -17,7 +17,7 @@ dependencies = [ skipsteps = ['configure'] -prebuildopts = r"sed -i 's@\(QWT_POLAR_INSTALL_PREFIX[ ]*=\).*@\1 %(installdir)s@g' qwtpolarconfig.pri && " +prebuildopts = "sed -i 's@INSTALL_PREFIX[ ]*=.*@INSTALL_PREFIX = %(installdir)s@g' qwtpolarconfig.pri && " prebuildopts += "sed -i 's/QwtPolarExamples//g' qwtpolarconfig.pri && " prebuildopts += "qmake qwtpolar.pro && " -- GitLab From 483b832f0732c96972684c1f804d3bf1d88b4f73 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Fri, 13 Jan 2017 17:03:47 +0100 Subject: [PATCH 0296/1311] easyconfig for ALPS 2.3 --- ...3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb | 43 +++++++++++++++++++ ....3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb | 43 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb new file mode 100644 index 0000000000..e9e9920e54 --- /dev/null +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb @@ -0,0 +1,43 @@ +easyblock = 'CMakeMake' +separate_build_dir = True + +name = 'ALPS' +version = '2.3.0' +cxxstd = 'c++03' + +homepage = "http://alps.comp-phys.org/" +description = "ALPS project" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'cstd': cxxstd} + + +sources = ['%(namelower)s-%(version)s-src.tar.gz'] +source_urls = ['http://alps.comp-phys.org/static/software/releases/'] + +patches = [ + #'ALPS-find-python.patch' +] + +boostver = '1.63.0' +pyver = '2.7.12' + +dependencies = [ + ('CMake', '3.6.2'), + ('Boost', boostver, '-Python-%s' % (pyver)), + ('HDF5', '1.8.17', '-threadsafe') +] +versionsuffix='-Python-%s' % (pyver,) + +modextravars = { + 'ALPS_ROOT': '$root', +} +modextrapaths = { + 'PYTHONPATH': ['lib/'] +} + +sanity_check_paths={ + 'files': ['lib/libalps.so'], + 'dirs': ['include/alps', 'bin/', 'share/'], +} + diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb new file mode 100644 index 0000000000..42ed52aa98 --- /dev/null +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb @@ -0,0 +1,43 @@ +easyblock = 'CMakeMake' +separate_build_dir = True + +name = 'ALPS' +version = '2.3.0' +cxxstd = 'c++03' + +homepage = "http://alps.comp-phys.org/" +description = "ALPS project" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'cstd': cxxstd} + + +sources = ['%(namelower)s-%(version)s-src.tar.gz'] +source_urls = ['http://alps.comp-phys.org/static/software/releases/'] + +patches = [ + #'ALPS-find-python.patch' +] + +boostver = '1.63.0' +pyver = '3.5.2' + +dependencies = [ + ('CMake', '3.6.2'), + ('Boost', boostver, '-Python-%s' % (pyver)), + ('HDF5', '1.8.17', '-threadsafe') +] +versionsuffix='-Python-%s' % (pyver,) + +modextravars = { + 'ALPS_ROOT': '$root', +} +modextrapaths = { + 'PYTHONPATH': ['lib/'] +} + +sanity_check_paths={ + 'files': ['lib/libalps.so'], + 'dirs': ['include/alps', 'bin/', 'share/'], +} + -- GitLab From 37ac3a952e49d5306d04df3bbf947c77685182ac Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 17:43:05 +0100 Subject: [PATCH 0297/1311] adding easyconfigs: buildenv-default-intel-2016b.eb --- .../b/buildenv/buildenv-default-intel-2016b.eb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2016b.eb b/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2016b.eb new file mode 100644 index 0000000000..4e742815d3 --- /dev/null +++ b/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2016b.eb @@ -0,0 +1,13 @@ +easyblock = 'BuildEnv' + +name = 'buildenv' +version = 'default' + +homepage = 'None' +description = """This module sets a group of environment variables for compilers, linkers, maths libraries, etc., that + you can use to easily transition between toolchains when building your software. To query the variables being set + please use: module show """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +moduleclass = 'devel' -- GitLab From f4d728d6baba47763b4036bda9c97e5534d80579 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Jan 2017 17:53:31 +0100 Subject: [PATCH 0298/1311] adding easyconfigs: ImageJ-1.5.1i.eb --- .../easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb diff --git a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb new file mode 100644 index 0000000000..1ae33a127b --- /dev/null +++ b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb @@ -0,0 +1,29 @@ +easyblock = 'PackedBinary' + +name = 'ImageJ' +version = '1.5.1i' + +homepage = 'https://imagej.nih.gov/ij' +description = "Image Processing and Analysis in Java" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = ['https://imagej.nih.gov/ij/download/src/'] +sources = ['ij%s-src.zip' % ''.join(version.split('.'))] + +dependencies = [ + ('Java', '1.8.0_112'), +] + +builddependencies = [('ant', '1.10.0', '-Java-%(javaver)s')] + +install_cmd = 'cd source && ant build && cp ij.jar %(installdir)s' + +sanity_check_paths = { + 'files': ['ij.jar'], + 'dirs': [], +} + +modloadmsg = "To use ImageJ, run 'java -jar $EBROOTIMAGEJ/ij.jar'\n" + +moduleclass = 'tools' -- GitLab From dd44316940189bfcc6e90b9112fc64d1c4990871 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 14 Jan 2017 14:18:16 +0100 Subject: [PATCH 0299/1311] fix remarks --- .../easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb index ffcf5b339a..b188df034a 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2016b.eb @@ -19,18 +19,16 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'usempi': True} source_urls = ['http://elpa.mpcdf.mpg.de/html/Releases/%(version)s/'] -sources = ['elpa-%(version)s.tar.gz'] +sources = [SOURCELOWER_TAR_GZ] builddependencies = [('Autotools', '20150215')] -configopts = '--with-generic-simple --disable-shared ' +configopts = '--with-generic-simple ' configopts += 'FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' buildopts = ' V=1 LIBS="$LIBSCALAPACK"' -parallel = 1 - sanity_check_paths = { - 'files': ['lib/libelpa.a'], + 'files': ['lib/libelpa.a', 'lib/libelpa.%s' % SHLIB_EXT], 'dirs': ['bin', 'include/elpa-%(version)s/elpa', 'include/elpa-%(version)s/modules', 'lib/pkgconfig'], } -- GitLab From 8c3c2005db08531cf1c762ed50fffc4cca9d3e5d Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 11:32:28 +0100 Subject: [PATCH 0300/1311] rely on standard hdf5 installation --- .../a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb | 2 +- .../a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb index e9e9920e54..afe31e914f 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb @@ -25,7 +25,7 @@ pyver = '2.7.12' dependencies = [ ('CMake', '3.6.2'), ('Boost', boostver, '-Python-%s' % (pyver)), - ('HDF5', '1.8.17', '-threadsafe') + ('HDF5', '1.8.17') ] versionsuffix='-Python-%s' % (pyver,) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb index 42ed52aa98..05b4d43414 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb @@ -25,7 +25,7 @@ pyver = '3.5.2' dependencies = [ ('CMake', '3.6.2'), ('Boost', boostver, '-Python-%s' % (pyver)), - ('HDF5', '1.8.17', '-threadsafe') + ('HDF5', '1.8.17') ] versionsuffix='-Python-%s' % (pyver,) -- GitLab From b65ec96a396442f073ebf31aed8d01b4d463e44d Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 11:38:07 +0100 Subject: [PATCH 0301/1311] rename .eb files --- ...63-Python-2.7.12.eb => ALPS-2.3.0-foss-2016b-Python-2.7.12.eb} | 0 ...1.63-Python-3.5.2.eb => ALPS-2.3.0-foss-2016b-Python-3.5.2.eb} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/a/ALPS/{ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb => ALPS-2.3.0-foss-2016b-Python-2.7.12.eb} (100%) rename easybuild/easyconfigs/a/ALPS/{ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb => ALPS-2.3.0-foss-2016b-Python-3.5.2.eb} (100%) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb similarity index 100% rename from easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-2.7.12.eb rename to easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb similarity index 100% rename from easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Boost-1.63-Python-3.5.2.eb rename to easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb -- GitLab From 1592e0443934d28d594c0daec093d6beaecb6d59 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 11:55:28 +0100 Subject: [PATCH 0302/1311] comments on easyconfig --- .../ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 17 ++++++----------- .../ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 17 ++++++----------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index afe31e914f..761e64b159 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -1,33 +1,28 @@ easyblock = 'CMakeMake' -separate_build_dir = True name = 'ALPS' version = '2.3.0' -cxxstd = 'c++03' +versionsuffix = '-Python-%(pyver)s' homepage = "http://alps.comp-phys.org/" description = "ALPS project" toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'cstd': cxxstd} - +toolchainopts = {'cstd': 'c++03'} sources = ['%(namelower)s-%(version)s-src.tar.gz'] source_urls = ['http://alps.comp-phys.org/static/software/releases/'] -patches = [ - #'ALPS-find-python.patch' -] - boostver = '1.63.0' pyver = '2.7.12' dependencies = [ ('CMake', '3.6.2'), - ('Boost', boostver, '-Python-%s' % (pyver)), + ('Boost', boostver, '-Python-%s' % pyver), ('HDF5', '1.8.17') ] -versionsuffix='-Python-%s' % (pyver,) + +separate_build_dir = True modextravars = { 'ALPS_ROOT': '$root', @@ -37,7 +32,7 @@ modextrapaths = { } sanity_check_paths={ - 'files': ['lib/libalps.so'], + 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index 05b4d43414..d0f392c12a 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -1,33 +1,28 @@ easyblock = 'CMakeMake' -separate_build_dir = True name = 'ALPS' version = '2.3.0' -cxxstd = 'c++03' +versionsuffix = '-Python-%(pyver)s' homepage = "http://alps.comp-phys.org/" description = "ALPS project" toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'cstd': cxxstd} - +toolchainopts = {'cstd': 'c++03'} sources = ['%(namelower)s-%(version)s-src.tar.gz'] source_urls = ['http://alps.comp-phys.org/static/software/releases/'] -patches = [ - #'ALPS-find-python.patch' -] - boostver = '1.63.0' pyver = '3.5.2' dependencies = [ ('CMake', '3.6.2'), - ('Boost', boostver, '-Python-%s' % (pyver)), + ('Boost', boostver, '-Python-%s' % pyver), ('HDF5', '1.8.17') ] -versionsuffix='-Python-%s' % (pyver,) + +separate_build_dir = True modextravars = { 'ALPS_ROOT': '$root', @@ -37,7 +32,7 @@ modextrapaths = { } sanity_check_paths={ - 'files': ['lib/libalps.so'], + 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } -- GitLab From 425715410423855576dddd41e53fcf9ed847fef0 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 13:13:59 +0100 Subject: [PATCH 0303/1311] fix pyver and cleanup boost version requirement --- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 6 ++---- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index 761e64b159..511a60b649 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -13,12 +13,10 @@ toolchainopts = {'cstd': 'c++03'} sources = ['%(namelower)s-%(version)s-src.tar.gz'] source_urls = ['http://alps.comp-phys.org/static/software/releases/'] -boostver = '1.63.0' -pyver = '2.7.12' - dependencies = [ ('CMake', '3.6.2'), - ('Boost', boostver, '-Python-%s' % pyver), + ('Python', '2.7.12'), + ('Boost', '1.63.0', versionsuffix), ('HDF5', '1.8.17') ] diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index d0f392c12a..3f4a6a13cc 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -13,12 +13,10 @@ toolchainopts = {'cstd': 'c++03'} sources = ['%(namelower)s-%(version)s-src.tar.gz'] source_urls = ['http://alps.comp-phys.org/static/software/releases/'] -boostver = '1.63.0' -pyver = '3.5.2' - dependencies = [ ('CMake', '3.6.2'), - ('Boost', boostver, '-Python-%s' % pyver), + ('Python', '3.5.2'), + ('Boost', '1.63.0', versionsuffix), ('HDF5', '1.8.17') ] -- GitLab From 8e6d07951faff6e957e304285452e62d9c0e6acd Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 16 Jan 2017 20:54:23 +0800 Subject: [PATCH 0304/1311] fix source_urls --- .../easyconfigs/b/bbcp/bbcp-12.01.30.00.0-amd64_linux26.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/bbcp/bbcp-12.01.30.00.0-amd64_linux26.eb b/easybuild/easyconfigs/b/bbcp/bbcp-12.01.30.00.0-amd64_linux26.eb index 17f6d6b14b..738e6ce0b1 100644 --- a/easybuild/easyconfigs/b/bbcp/bbcp-12.01.30.00.0-amd64_linux26.eb +++ b/easybuild/easyconfigs/b/bbcp/bbcp-12.01.30.00.0-amd64_linux26.eb @@ -27,7 +27,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # fi. http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_linux26/bbcp # VERY poor way of distributing software sources = [name] -source_urls = [homepage + 'bin/%s' % versionsuffix] +source_urls = [homepage + 'bin/%s' % versionsuffix[1:]] sanity_check_paths = { 'files': ['bbcp'], -- GitLab From 86510f0c8be606a7f49438c8cb2462d8ba0366f4 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 15:29:41 +0100 Subject: [PATCH 0305/1311] moduleclass --- .../easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 1 + .../easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 1 + 2 files changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index 511a60b649..352fbdaecb 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -34,3 +34,4 @@ sanity_check_paths={ 'dirs': ['include/alps', 'bin/', 'share/'], } +moduleclass = 'phys' diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index 3f4a6a13cc..36e392f1f5 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -34,3 +34,4 @@ sanity_check_paths={ 'dirs': ['include/alps', 'bin/', 'share/'], } +moduleclass = 'phys' -- GitLab From 4c721f56e5115cd3543ecba237d675d7465ae061 Mon Sep 17 00:00:00 2001 From: Michele Dolfi Date: Mon, 16 Jan 2017 15:32:35 +0100 Subject: [PATCH 0306/1311] description --- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 5 ++++- .../easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index 352fbdaecb..12d87fd3a6 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -5,7 +5,10 @@ version = '2.3.0' versionsuffix = '-Python-%(pyver)s' homepage = "http://alps.comp-phys.org/" -description = "ALPS project" +description = """The ALPS project (Algorithms and Libraries for Physics Simulations) is an open source effort + aiming at providing high-end simulation codes for strongly correlated quantum mechanical systems as well as + C++ libraries for simplifying the development of such code. +""" toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'cstd': 'c++03'} diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index 36e392f1f5..33dbe5c739 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -5,7 +5,10 @@ version = '2.3.0' versionsuffix = '-Python-%(pyver)s' homepage = "http://alps.comp-phys.org/" -description = "ALPS project" +description = """The ALPS project (Algorithms and Libraries for Physics Simulations) is an open source effort + aiming at providing high-end simulation codes for strongly correlated quantum mechanical systems as well as + C++ libraries for simplifying the development of such code. +""" toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'cstd': 'c++03'} -- GitLab From 7f1140260f630abf462ea7d2fd22f6581cd8240d Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 16 Jan 2017 23:12:24 +0800 Subject: [PATCH 0307/1311] fix source_urls --- easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/p/protobuf/protobuf-2.5.0.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.4.10.eb b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.4.10.eb index e9345ea16d..3c5b16c424 100644 --- a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.4.10.eb @@ -9,7 +9,7 @@ description = """Google Protocol Buffers""" toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = [SOURCE_TAR_GZ] -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://github.com/google/%(namelower)s/releases/download/v%(version)s/'] sanity_check_paths = { 'files': ['bin/protoc'], diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.7.20.eb b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.7.20.eb index 56627b2c07..3dff68438e 100644 --- a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0-goolf-1.7.20.eb @@ -9,7 +9,7 @@ description = """Google Protocol Buffers""" toolchain = {'name': 'goolf', 'version': '1.7.20'} sources = [SOURCE_TAR_GZ] -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://github.com/google/%(namelower)s/releases/download/v%(version)s/'] sanity_check_paths = { 'files': ['bin/protoc'], diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0.eb b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0.eb index 7a7091bb5e..03255276d8 100644 --- a/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0.eb +++ b/easybuild/easyconfigs/p/protobuf/protobuf-2.5.0.eb @@ -9,7 +9,7 @@ description = """Google Protocol Buffers""" toolchain = {'name': 'dummy', 'version': 'dummy'} sources = [SOURCE_TAR_GZ] -source_urls = [GOOGLECODE_SOURCE] +source_urls = ['https://github.com/google/%(namelower)s/releases/download/v%(version)s/'] sanity_check_paths = { 'files': ['bin/protoc'], -- GitLab From 357b8b4e33a3a6c1b6f6aa5a23c54cf650f4966a Mon Sep 17 00:00:00 2001 From: edmondac-admin Date: Mon, 16 Jan 2017 16:39:45 +0000 Subject: [PATCH 0308/1311] Updating source URL for tmux 1.9a --- easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb index 8b0f6b51a8..5cd890962a 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'GCC', 'version': '4.9.2'} toolchainopts = {'optarch': True} sources = [SOURCE_TAR_GZ] -source_urls = [SOURCEFORGE_SOURCE] +source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] dependencies = [ ('ncurses', '5.9'), -- GitLab From 19068af8a78935721b751058523e6406fcecff9d Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 17 Jan 2017 11:34:38 +0100 Subject: [PATCH 0309/1311] adding easyconfigs: libpthread-stubs-0.3-intel-2016b.eb --- .../libpthread-stubs-0.3-intel-2016b.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100755 easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb new file mode 100755 index 0000000000..132a89cd1e --- /dev/null +++ b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libpthread-stubs' +version = '0.3' + +homepage = 'http://xcb.freedesktop.org/' +description = """The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a small footprint, +latency hiding, direct access to the protocol, improved threading support, and extensibility.""" + +source_urls = ['http://xcb.freedesktop.org/dist/'] +sources = [SOURCELOWER_TAR_GZ] + +toolchain = {'name': 'intel', 'version': '2016b'} + +sanity_check_paths = { + 'files': ['lib/pkgconfig/pthread-stubs.pc'], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 3c0acff06c34ff6fd14a021dee6830baabe5202e Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 17 Jan 2017 11:49:50 +0100 Subject: [PATCH 0310/1311] adding easyconfigs: xorg-macros-1.19.0-foss-2016b.eb, xorg-macros-1.19.0-intel-2016b.eb --- .../xorg-macros-1.19.0-foss-2016b.eb | 24 +++++++++++++++++++ .../xorg-macros-1.19.0-intel-2016b.eb | 22 +++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100755 easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-foss-2016b.eb create mode 100755 easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-foss-2016b.eb b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-foss-2016b.eb new file mode 100755 index 0000000000..2e98d1a81e --- /dev/null +++ b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-foss-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'xorg-macros' +version = '1.19.0' + +homepage = 'http://cgit.freedesktop.org/xorg/util/macros' +description = """X.org macros utilities.""" +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://cgit.freedesktop.org/xorg/util/macros/snapshot'] # no slash ('/') at the end! +sources = ['util-macros-%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +osdependencies = [('perl-Thread-Queue', 'libthread-queue-any-perl')] + +preconfigopts = './autogen.sh && ' + +sanity_check_paths = { + 'files': ['share/pkgconfig/xorg-macros.pc'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-intel-2016b.eb b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-intel-2016b.eb new file mode 100755 index 0000000000..52e3d066e8 --- /dev/null +++ b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.0-intel-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'xorg-macros' +version = '1.19.0' + +homepage = 'http://cgit.freedesktop.org/xorg/util/macros' +description = """X.org macros utilities.""" +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://cgit.freedesktop.org/xorg/util/macros/snapshot'] # no slash ('/') at the end! +sources = ['util-macros-%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = './autogen.sh && ' + +sanity_check_paths = { + 'files': ['share/pkgconfig/xorg-macros.pc'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From de4c91b4da9ed4b5001afc5301ef059eacf38c6e Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 17 Jan 2017 11:58:01 +0100 Subject: [PATCH 0311/1311] adding easyconfigs: libpciaccess-0.13.4-foss-2016b.eb, libpciaccess-0.13.4-intel-2016b.eb --- .../libpciaccess-0.13.4-foss-2016b.eb | 26 +++++++++++++++++++ .../libpciaccess-0.13.4-intel-2016b.eb | 26 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb create mode 100755 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb new file mode 100755 index 0000000000..11ed8ea67d --- /dev/null +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libpciaccess' +version = '0.13.4' + +homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' +description = """Generic PCI access library.""" + +source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +sources = [SOURCE_TAR_GZ] + +toolchain = {'name': 'foss', 'version': '2016b'} + +builddependencies = [ + ('Autotools', '20150215'), + ('xorg-macros', '1.19.0'), +] + +preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " + +sanity_check_paths = { + 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb new file mode 100755 index 0000000000..9124b553ab --- /dev/null +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libpciaccess' +version = '0.13.4' + +homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' +description = """Generic PCI access library.""" + +source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +sources = [SOURCE_TAR_GZ] + +toolchain = {'name': 'intel', 'version': '2016b'} + +builddependencies = [ + ('Autotools', '20150215'), + ('xorg-macros', '1.19.0'), +] + +preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " + +sanity_check_paths = { + 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'system' -- GitLab From f62b9d2864692d797a1598c96270adaf63db0c16 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 17 Jan 2017 12:03:42 +0100 Subject: [PATCH 0312/1311] adding easyconfigs: libdrm-2.4.70-foss-2016b.eb, libdrm-2.4.70-intel-2016b.eb --- easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb | 2 ++ easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb index 5d9e8ac938..bd2875fe53 100644 --- a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb @@ -13,6 +13,8 @@ toolchain = {'name': 'foss', 'version': '2016b'} dependencies = [ ('X11', '20160819'), + ('libpthread-stubs', '0.3'), + ('libpciaccess', '0.13.4'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb index 9fb07a2954..1f6c3d5a42 100644 --- a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb @@ -13,6 +13,8 @@ toolchain = {'name': 'intel', 'version': '2016b'} dependencies = [ ('X11', '20160819'), + ('libpthread-stubs', '0.3'), + ('libpciaccess', '0.13.4'), ] sanity_check_paths = { -- GitLab From 23bd5e9481be54b792b52d6fd9f7ffa118a30740 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 17 Jan 2017 12:27:36 +0100 Subject: [PATCH 0313/1311] adding easyconfigs: libpthread-stubs-0.3-foss-2016b.eb --- .../libpthread-stubs-0.3-foss-2016b.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100755 easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb new file mode 100755 index 0000000000..3f5229b135 --- /dev/null +++ b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libpthread-stubs' +version = '0.3' + +homepage = 'http://xcb.freedesktop.org/' +description = """The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a small footprint, +latency hiding, direct access to the protocol, improved threading support, and extensibility.""" + +source_urls = ['http://xcb.freedesktop.org/dist/'] +sources = [SOURCELOWER_TAR_GZ] + +toolchain = {'name': 'foss', 'version': '2016b'} + +sanity_check_paths = { + 'files': ['lib/pkgconfig/pthread-stubs.pc'], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 7e8ab9e466ae87002b5783a7ce596100f7fabd1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Tue, 17 Jan 2017 12:47:40 +0100 Subject: [PATCH 0314/1311] removed unnecessary escaping of $ in modloadmsg --- .../c/cramtools/cramtools-2.0-Java-1.7.0_80.eb | 2 +- .../c/cramtools/cramtools-3.0-Java-1.7.0_80.eb | 2 +- .../DicomBrowser-1.7.0b5-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/f/findhap/findhap-4.eb | 12 ++++++------ easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb | 2 +- .../easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb | 2 +- .../easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb | 2 +- .../easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb | 2 +- .../easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb | 2 +- .../easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb | 2 +- easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb | 2 +- .../jModelTest-2.1.10r20160303-Java-1.8.0_92.eb | 2 +- ...Test-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- .../MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb | 2 +- .../m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb | 2 +- .../m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb | 2 +- .../m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb | 2 +- .../p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb | 4 ++-- .../p/picard/picard-2.0.1-Java-1.8.0_66.eb | 2 +- .../p/picard/picard-2.1.0-Java-1.8.0_74.eb | 2 +- .../p/picard/picard-2.1.1-Java-1.8.0_112.eb | 2 +- .../p/picard/picard-2.1.1-Java-1.8.0_74.eb | 2 +- .../p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb | 2 +- .../t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/t/texinfo/texinfo-4.13a.eb | 4 ++-- .../easyconfigs/t/texinfo/texinfo-5.2-GCC-4.8.2.eb | 4 ++-- .../easyconfigs/t/texinfo/texinfo-5.2-ictce-5.5.0.eb | 4 ++-- .../v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb | 2 +- .../v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb | 2 +- .../easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb | 2 +- .../easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb | 2 +- 37 files changed, 46 insertions(+), 46 deletions(-) diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb index d2027312f5..c4b4b9a935 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb @@ -19,7 +19,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute cramtools run: java -jar \\${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar ${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb index d00a912e71..12fc50e105 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb @@ -17,7 +17,7 @@ source_urls = ['https://github.com/enasequence/%(name)s/archive/'] dependencies = [('Java', '1.7.0_80')] -modloadmsg = "To execute cramtools run: java -jar \\${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar ${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb b/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb index 295844b8ba..0a71b94670 100644 --- a/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb @@ -26,6 +26,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """To execute run: java -jar \\$EBROOTDICOMBROWSER/%(name)s-%(version)s-bin-with-dependencies.jar""" +modloadmsg = """To execute run: java -jar $EBROOTDICOMBROWSER/%(name)s-%(version)s-bin-with-dependencies.jar""" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/f/findhap/findhap-4.eb b/easybuild/easyconfigs/f/findhap/findhap-4.eb index 06eb1f492a..7622374b66 100644 --- a/easybuild/easyconfigs/f/findhap/findhap-4.eb +++ b/easybuild/easyconfigs/f/findhap/findhap-4.eb @@ -20,14 +20,14 @@ modextrapaths = { modloadmsg = """ Copy the following file to the directory from which you will be running the executable: -\\$EBROOTFINDHAP/findhap.options +$EBROOTFINDHAP/findhap.options -Other files in the \\$EBROOTFINDHAP directory are: +Other files in the $EBROOTFINDHAP directory are: -\\$EBROOTFINDHAP/genotypes.txt -\\$EBROOTFINDHAP/chromosome.data -\\$EBROOTFINDHAP/pedigree.file -\\$EBROOTFINDHAP/sequences.readdepth +$EBROOTFINDHAP/genotypes.txt +$EBROOTFINDHAP/chromosome.data +$EBROOTFINDHAP/pedigree.file +$EBROOTFINDHAP/sequences.readdepth """ sanity_check_paths = { diff --git a/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb b/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb index dd2c25a627..8fd2e29e7b 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb @@ -16,7 +16,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.7.0_10')] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb index ee70681358..ee1fea2c11 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb index dde93eb10a..549fa91f1b 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb index a45cb4ec3b..a55a0d1b45 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb b/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb index 1bdef83c68..3ed2ad06c3 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb @@ -16,7 +16,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.7.0_10')] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb index 21448792b2..3af4b8acdd 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb index 38e7ae6db1..5b4401c174 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_21' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb index 689accfbd9..aa2cb8839c 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb index 520cb6b37a..65f9083180 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb @@ -32,7 +32,7 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb index adf96fa7cf..76a7aaf5f7 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb @@ -32,7 +32,7 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb index c52824dc92..098e5e229b 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb @@ -30,7 +30,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.8.0_74')] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb index 3bbed9824e..312f7889cf 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb @@ -32,7 +32,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.8.0_92')] -modloadmsg = """To execute GATK run: java -jar \\$EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb index d86f8fea57..aff38f5ddf 100644 --- a/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb +++ b/easybuild/easyconfigs/g/GroIMP/GroIMP-1.5.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['plugins'], } -modloadmsg = "To use GroIMP: java -jar \\$EBROOTGROIMP/core.jar\n" +modloadmsg = "To use GroIMP: java -jar $EBROOTGROIMP/core.jar\n" moduleclass = 'vis' diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb index 00bc8cb97d..48c4450932 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb @@ -26,7 +26,7 @@ dependencies = [ install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" -modloadmsg = """To execute jModelTest run: java -jar \\$EBROOTJMODELTEST/jModelTest.jar""" +modloadmsg = """To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar""" sanity_check_paths = { 'files': ['jModelTest.jar'], diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb index 91946b388e..334b79cc72 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb @@ -26,7 +26,7 @@ dependencies = [('MPJ-Express', '0.44', '%(versionsuffix)s')] install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" -modloadmsg = """To execute jModelTest run: java -jar \\$EBROOTJMODELTEST/jModelTest.jar""" +modloadmsg = """To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar""" sanity_check_paths = { 'files': ['jModelTest.jar'], diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb index 35b0a5d11b..e0545e68bf 100644 --- a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb @@ -24,7 +24,7 @@ sanity_check_paths = { modextrapaths = {'CLASSPATH': 'libs/*'} -modloadmsg = """To execute MATSim GUI: java -jar \\${EBROOTMATSIM}/%(namelower)s-%(version)s.jar +modloadmsg = """To execute MATSim GUI: java -jar ${EBROOTMATSIM}/%(namelower)s-%(version)s.jar To execute MATSim in batch mode: java org.matsim.run.Controller You might have to adjust the requested memory""" diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb index afe163b841..8df6938bda 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb @@ -30,7 +30,7 @@ sanity_check_paths = { } modloadmsg = """ -to execute: java -jar \\$EBROOTMUTECT/muTect-%(version)s.jar +to execute: java -jar $EBROOTMUTECT/muTect-%(version)s.jar """ moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb index 0d2d28d47b..9292c46b7d 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb @@ -31,7 +31,7 @@ sanity_check_paths = { } modloadmsg = """ -To start MuTect: java -jar \\$EBROOTMUTECT/muTect-%(version)s.jar +To start MuTect: java -jar $EBROOTMUTECT/muTect-%(version)s.jar """ moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb index 86bd5019e2..a2300aabe6 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb @@ -32,7 +32,7 @@ sanity_check_paths = { } modloadmsg = """ -To start MuTect: java -jar \\$EBROOTMUTECT/%(namelower)s-%(version)s.jar +To start MuTect: java -jar $EBROOTMUTECT/%(namelower)s-%(version)s.jar """ moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb index 4071bc769a..dd5eb01734 100644 --- a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb @@ -27,8 +27,8 @@ sanity_check_paths = { } modloadmsg = """ -To execute GUI run: java -Xmx1024m -Xms512m -jar \\$EBROOTPGDSPIDER/PGDSpider2.jar -To execute CLI run: java -Xmx1024m -Xms512m -jar \\$EBROOTPGDSPIDER/PGDSpider2-cli.jar +To execute GUI run: java -Xmx1024m -Xms512m -jar $EBROOTPGDSPIDER/PGDSpider2.jar +To execute CLI run: java -Xmx1024m -Xms512m -jar $EBROOTPGDSPIDER/PGDSpider2-cli.jar Adjust memory according to your requirements""" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb index 742c2507d1..7aa145e449 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar \\${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb index 88bda5b21f..d9b82dd722 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_74' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar \\${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb index 9ac8383024..67c7abf4fe 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_112')] -modloadmsg = "To execute picard run: java -jar \\${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb index b7bb2304d4..b570418566 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_74')] -modloadmsg = "To execute picard run: java -jar \\${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb b/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb index a9b5ed1e23..9487e24fd4 100644 --- a/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb +++ b/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb @@ -34,6 +34,6 @@ sanity_check_paths = { 'dirs': ['bin', 'binaries', 'db', 'db/cm', 'db/genus', 'db/hmm', 'db/kingdom', 'doc'], } -modloadmsg = "prokka scripts are located in \\$EBROOTPROKKA/bin; databases are located in \\$EBROOTPROKKA/db" +modloadmsg = "prokka scripts are located in $EBROOTPROKKA/bin; databases are located in $EBROOTPROKKA/db" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb index a89bd3216a..33547a587c 100644 --- a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb @@ -23,7 +23,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute Trimmomatic run: java -jar \\$EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar""" +modloadmsg = """To execute Trimmomatic run: java -jar $EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar""" sanity_check_paths = { 'files': ["trimmomatic-%(version)s.jar"], diff --git a/easybuild/easyconfigs/t/texinfo/texinfo-4.13a.eb b/easybuild/easyconfigs/t/texinfo/texinfo-4.13a.eb index 1f3105220a..02d5fea5de 100644 --- a/easybuild/easyconfigs/t/texinfo/texinfo-4.13a.eb +++ b/easybuild/easyconfigs/t/texinfo/texinfo-4.13a.eb @@ -17,9 +17,9 @@ preinstallopts = "make TEXMF=%(installdir)s/texmf install-tex && " # This will overwrite a users $TEXMFHOME so this module is best used as a build dependency modextravars = {'TEXMFHOME': '%(installdir)s/texmf'} -modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable \\$TEXMFHOME.\n" +modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable $TEXMFHOME.\n" modloadmsg += "If you use a custom texmf directory (such as ~/texmf) you should copy files found in the\n" -modloadmsg += "new \\$TEXMFHOME to your custom directory and reset the value of \\$TEXMFHOME to point to that space:\n" +modloadmsg += "new $TEXMFHOME to your custom directory and reset the value of $TEXMFHOME to point to that space:\n" modloadmsg += "\tcp -r $TEXMFHOME/* /path/to/your/texmf\n" modloadmsg += "\texport TEXMFHOME=/path/to/your/texmf\n\n" diff --git a/easybuild/easyconfigs/t/texinfo/texinfo-5.2-GCC-4.8.2.eb b/easybuild/easyconfigs/t/texinfo/texinfo-5.2-GCC-4.8.2.eb index e8a270b38c..c524f85857 100644 --- a/easybuild/easyconfigs/t/texinfo/texinfo-5.2-GCC-4.8.2.eb +++ b/easybuild/easyconfigs/t/texinfo/texinfo-5.2-GCC-4.8.2.eb @@ -17,9 +17,9 @@ preinstallopts = "make TEXMF=%(installdir)s/texmf install-tex && " # This will overwrite a users $TEXMFHOME so this module is best used as a build dependency modextravars = {'TEXMFHOME': '%(installdir)s/texmf'} -modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable \\$TEXMFHOME.\n" +modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable $TEXMFHOME.\n" modloadmsg += "If you use a custom texmf directory (such as ~/texmf) you should copy files found in the\n" -modloadmsg += "new \\$TEXMFHOME to your custom directory and reset the value of \\$TEXMFHOME to point to that space:\n" +modloadmsg += "new $TEXMFHOME to your custom directory and reset the value of $TEXMFHOME to point to that space:\n" modloadmsg += "\tcp -r $TEXMFHOME/* /path/to/your/texmf\n" modloadmsg += "\texport TEXMFHOME=/path/to/your/texmf\n\n" diff --git a/easybuild/easyconfigs/t/texinfo/texinfo-5.2-ictce-5.5.0.eb b/easybuild/easyconfigs/t/texinfo/texinfo-5.2-ictce-5.5.0.eb index 0eff73d3cc..a4b5f9fb26 100755 --- a/easybuild/easyconfigs/t/texinfo/texinfo-5.2-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/t/texinfo/texinfo-5.2-ictce-5.5.0.eb @@ -17,9 +17,9 @@ preinstallopts = "make TEXMF=%(installdir)s/texmf install-tex && " # This will overwrite a users $TEXMFHOME so this module is best used as a build dependency modextravars = {'TEXMFHOME': '%(installdir)s/texmf'} -modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable \\$TEXMFHOME.\n" +modloadmsg = "\n\nWARNING: This texinfo module has (re)defined the value for the environment variable $TEXMFHOME.\n" modloadmsg += "If you use a custom texmf directory (such as ~/texmf) you should copy files found in the\n" -modloadmsg += "new \\$TEXMFHOME to your custom directory and reset the value of \\$TEXMFHOME to point to that space:\n" +modloadmsg += "new $TEXMFHOME to your custom directory and reset the value of $TEXMFHOME to point to that space:\n" modloadmsg += "\tcp -r $TEXMFHOME/* /path/to/your/texmf\n" modloadmsg += "\texport TEXMFHOME=/path/to/your/texmf\n\n" diff --git a/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb b/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb index ba30d5877f..8ae2ef6c24 100644 --- a/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ sanity_check_paths = { } modloadmsg = """ -to execute: java -jar \\$EBROOTVARSCAN/VarScan.v%(version)s.jar +to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar """ moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb b/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb index 186dfc58cc..53aad96768 100644 --- a/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ sanity_check_paths = { } modloadmsg = """ -to execute: java -jar \\$EBROOTVARSCAN/VarScan.v%(version)s.jar +to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar """ moduleclass = 'bio' diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb index a65ca2295b..f5c3467ae4 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb @@ -35,6 +35,6 @@ modextravars = { 'WEKAINSTALL': '$root', } -modloadmsg = " execute WEKA: java -jar \\$EBROOTWEKA/weka.jar " +modloadmsg = " execute WEKA: java -jar $EBROOTWEKA/weka.jar " moduleclass = 'bio' diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb index 396230d2a7..579709769c 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb @@ -35,6 +35,6 @@ modextravars = { 'WEKAINSTALL': '$root', } -modloadmsg = " execute WEKA: java -jar \\$EBROOTWEKA/weka.jar " +modloadmsg = " execute WEKA: java -jar $EBROOTWEKA/weka.jar " moduleclass = 'bio' -- GitLab From b554480c60317bcba96cec42c7a71f1772ff339e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Tue, 17 Jan 2017 12:55:36 +0100 Subject: [PATCH 0315/1311] removed curly braces in modloadmsg they shouldn't be needed here --- .../easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb | 2 +- .../easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb | 2 +- .../m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb | 2 +- easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb | 2 +- easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb | 2 +- easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb | 2 +- easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb index c4b4b9a935..bcfd3d6103 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb @@ -19,7 +19,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute cramtools run: java -jar ${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb index 12fc50e105..f8e71d5dc1 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb @@ -17,7 +17,7 @@ source_urls = ['https://github.com/enasequence/%(name)s/archive/'] dependencies = [('Java', '1.7.0_80')] -modloadmsg = "To execute cramtools run: java -jar ${EBROOTCRAMTOOLS}/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb index e0545e68bf..421c8d4540 100644 --- a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb @@ -24,7 +24,7 @@ sanity_check_paths = { modextrapaths = {'CLASSPATH': 'libs/*'} -modloadmsg = """To execute MATSim GUI: java -jar ${EBROOTMATSIM}/%(namelower)s-%(version)s.jar +modloadmsg = """To execute MATSim GUI: java -jar $EBROOTMATSIM/%(namelower)s-%(version)s.jar To execute MATSim in batch mode: java org.matsim.run.Controller You might have to adjust the requested memory""" diff --git a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb index 7aa145e449..1e2e1290f3 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb index d9b82dd722..73072b689d 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_74' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb index 67c7abf4fe..a11a884ac1 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_112')] -modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb index b570418566..ad5c8d1dbb 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_74')] -modloadmsg = "To execute picard run: java -jar ${EBROOTPICARD}/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" moduleclass = 'bio' -- GitLab From 7ae3cbc903d9a35bb37c5217b892a11129a77149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Tue, 17 Jan 2017 13:55:38 +0100 Subject: [PATCH 0316/1311] unified string formatting changed mutliple modloadmsg to one multiline modloadmsg added new lines at the end of modloadmsg changed triple quotes to single quotes for single line strings --- easybuild/easyconfigs/a/ADF/ADF-2014.02.eb | 7 ++++--- .../easyconfigs/a/ADF/ADF-2014.11.r48287-intel-2016a.eb | 7 ++++--- easybuild/easyconfigs/a/ADF/ADF-2016.101.eb | 7 ++++--- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb | 3 +-- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb | 3 +-- .../b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb | 3 +-- .../CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb | 3 +-- .../CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 3 +-- .../easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb | 2 +- .../easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb | 2 +- .../easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb | 2 +- .../d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb | 2 +- easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb | 2 +- easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb | 2 +- .../jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb | 2 +- ...jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- .../m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb | 3 ++- .../easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb | 4 +--- .../easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb | 4 +--- .../easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb | 4 +--- .../p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb | 3 ++- .../easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb | 2 +- .../easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb | 2 +- .../easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb | 2 +- .../easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb | 2 +- .../p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb | 2 +- .../t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb | 2 +- .../u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb | 3 ++- .../easyconfigs/u/USEARCH/USEARCH-5.2.236-i86linux32.eb | 3 ++- .../easyconfigs/u/USEARCH/USEARCH-6.1.544-i86linux32.eb | 3 ++- .../easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb | 4 +--- .../easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb | 4 +--- easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb | 2 +- easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb | 2 +- 47 files changed, 61 insertions(+), 68 deletions(-) diff --git a/easybuild/easyconfigs/a/ADF/ADF-2014.02.eb b/easybuild/easyconfigs/a/ADF/ADF-2014.02.eb index 045e5244fd..f7098831f6 100644 --- a/easybuild/easyconfigs/a/ADF/ADF-2014.02.eb +++ b/easybuild/easyconfigs/a/ADF/ADF-2014.02.eb @@ -24,8 +24,9 @@ modextravars = { 'ADFRESOURCES': '%(installdir)s/atomicdata', } -modloadmsg = "These environment variables need to be defined before using ADF:\n" -modloadmsg += " * $SCMLICENSE: path to ADF license file\n" -modloadmsg += " * $SCM_TMPDIR: path to user scratch directory" +modloadmsg = """These environment variables need to be defined before using ADF: + * $SCMLICENSE: path to ADF license file + * $SCM_TMPDIR: path to user scratch directory +""" moduleclass = 'chem' diff --git a/easybuild/easyconfigs/a/ADF/ADF-2014.11.r48287-intel-2016a.eb b/easybuild/easyconfigs/a/ADF/ADF-2014.11.r48287-intel-2016a.eb index 21843552e8..a094b11d6d 100644 --- a/easybuild/easyconfigs/a/ADF/ADF-2014.11.r48287-intel-2016a.eb +++ b/easybuild/easyconfigs/a/ADF/ADF-2014.11.r48287-intel-2016a.eb @@ -15,8 +15,9 @@ sources = [ license_file = HOME + "/licenses/ADF/license.txt" -modloadmsg = "These environment variables need to be defined before using ADF:\n" -modloadmsg += " * $SCMLICENSE: path to ADF license file\n" -modloadmsg += " * $SCM_TMPDIR: path to user scratch directory" +modloadmsg = """These environment variables need to be defined before using ADF: + * $SCMLICENSE: path to ADF license file + * $SCM_TMPDIR: path to user scratch directory +""" moduleclass = 'chem' diff --git a/easybuild/easyconfigs/a/ADF/ADF-2016.101.eb b/easybuild/easyconfigs/a/ADF/ADF-2016.101.eb index 5fe5e14c14..6c3aae4360 100644 --- a/easybuild/easyconfigs/a/ADF/ADF-2016.101.eb +++ b/easybuild/easyconfigs/a/ADF/ADF-2016.101.eb @@ -24,8 +24,9 @@ modextravars = { 'ADFRESOURCES': '%(installdir)s/atomicdata', } -modloadmsg = "These environment variables need to be defined before using ADF:\n" -modloadmsg += " * $SCMLICENSE: path to ADF license file\n" -modloadmsg += " * $SCM_TMPDIR: path to user scratch directory" +modloadmsg = """These environment variables need to be defined before using ADF: + * $SCMLICENSE: path to ADF license file + * $SCM_TMPDIR: path to user scratch directory +""" moduleclass = 'chem' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb index cd21d99d6d..77fe6be1c2 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb @@ -30,7 +30,6 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = """For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the - compiled jni C code.""" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb index dff5ba78e2..1a60a0011d 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb @@ -30,7 +30,6 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = """For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the - compiled jni C code.""" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb index 539e3c2d20..014d3f2635 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb @@ -28,7 +28,6 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = """For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the - compiled jni C code.""" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb index f2ca68b5c1..961eb91738 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -37,7 +37,6 @@ installopts = '-override compiler' host_compilers = ["icpc", "g++"] # Be careful and have a message consistent with the generated wrappers -modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use" -modloadmsg += " nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created." +modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" moduleclass = 'system' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb index 8ed8a29bfc..5b078fe902 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -37,7 +37,6 @@ installopts = '-override compiler' host_compilers = ["icpc", "g++"] # Be careful and have a message consistent with the generated wrappers -modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use" -modloadmsg += " nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created." +modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" moduleclass = 'system' diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb index bcfd3d6103..5f652c0c86 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-2.0-Java-1.7.0_80.eb @@ -19,7 +19,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar\n" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb index f8e71d5dc1..a560b37abe 100644 --- a/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/c/cramtools/cramtools-3.0-Java-1.7.0_80.eb @@ -17,7 +17,7 @@ source_urls = ['https://github.com/enasequence/%(name)s/archive/'] dependencies = [('Java', '1.7.0_80')] -modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar" +modloadmsg = "To execute cramtools run: java -jar $EBROOTCRAMTOOLS/%(name)s-%(version)s.jar\n" sanity_check_paths = { 'files': ["%(name)s-%(version)s.jar"], diff --git a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb index c378da306a..7a15e698bd 100644 --- a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb +++ b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb @@ -33,6 +33,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """Define OMP_NUM_THREADS or use the command line option --omp-num-threads=N when using this application""" +modloadmsg = "Define OMP_NUM_THREADS or use the command line option --omp-num-threads=N when using this application\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb b/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb index 0a71b94670..5106c4165f 100644 --- a/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/d/DicomBrowser/DicomBrowser-1.7.0b5-Java-1.7.0_80.eb @@ -26,6 +26,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """To execute run: java -jar $EBROOTDICOMBROWSER/%(name)s-%(version)s-bin-with-dependencies.jar""" +modloadmsg = "To execute run: java -jar $EBROOTDICOMBROWSER/%(name)s-%(version)s-bin-with-dependencies.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb b/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb index 8fd2e29e7b..15da25496f 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-1.0.5083.eb @@ -16,7 +16,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.7.0_10')] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb index ee1fea2c11..6afbdb7b4c 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.5-2-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb index 549fa91f1b..921621187e 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.6-5-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb index a55a0d1b45..7e9f79abb8 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.7-4-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb b/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb index 3ed2ad06c3..272836da19 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.7-4.eb @@ -16,7 +16,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.7.0_10')] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb b/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb index 3af4b8acdd..959d6f681a 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-2.8-1-Java-1.7.0_10.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_10' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb index 5b4401c174..69dadef3c7 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_21' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb index aa2cb8839c..c8e83f1af6 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb @@ -32,7 +32,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb index 65f9083180..e60f317150 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb @@ -32,7 +32,7 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb index 76a7aaf5f7..47af207c6f 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb @@ -32,7 +32,7 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb index 098e5e229b..9faee44d8b 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb @@ -30,7 +30,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.8.0_74')] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb index 312f7889cf..fa068137af 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb @@ -32,7 +32,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.8.0_92')] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb index a82a27cc92..9d0b198d0f 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb @@ -32,7 +32,7 @@ sources = ['GenomeAnalysisTK-%(version)s.tar.bz2'] dependencies = [('Java', '1.8.0_112')] -modloadmsg = """To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n""" +modloadmsg = "To execute GATK run: java -jar $EBROOTGATK/GenomeAnalysisTK.jar\n" sanity_check_paths = { 'files': ["GenomeAnalysisTK.jar"], diff --git a/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb index faccbfa2f1..110b480923 100644 --- a/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb @@ -28,7 +28,7 @@ modextrapaths = { 'PATH': '', } -modloadmsg = """ To execute IGV run igv.sh """ +modloadmsg = "To execute IGV run igv.sh\n" sanity_check_paths = { 'files': ["igv.sh"], diff --git a/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb index 444b68f2e7..f8dd5d79f2 100644 --- a/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb @@ -28,7 +28,7 @@ modextrapaths = { 'PATH': '', } -modloadmsg = """ To execute IGV run igv.sh """ +modloadmsg = "To execute IGV run igv.sh\n" sanity_check_paths = { 'files': ["igv.sh"], diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb index 48c4450932..07eff74434 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb @@ -26,7 +26,7 @@ dependencies = [ install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" -modloadmsg = """To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar""" +modloadmsg = "To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar\n" sanity_check_paths = { 'files': ['jModelTest.jar'], diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb index 334b79cc72..ecf1089f64 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb @@ -26,7 +26,7 @@ dependencies = [('MPJ-Express', '0.44', '%(versionsuffix)s')] install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" -modloadmsg = """To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar""" +modloadmsg = "To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar\n" sanity_check_paths = { 'files': ['jModelTest.jar'], diff --git a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb index 421c8d4540..f41f912592 100644 --- a/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/m/MATSim/MATSim-0.8.1-intel-2016b-Java-1.8.0_112.eb @@ -26,6 +26,7 @@ modextrapaths = {'CLASSPATH': 'libs/*'} modloadmsg = """To execute MATSim GUI: java -jar $EBROOTMATSIM/%(namelower)s-%(version)s.jar To execute MATSim in batch mode: java org.matsim.run.Controller -You might have to adjust the requested memory""" +You might have to adjust the requested memory +""" moduleclass = 'cae' diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb index 8df6938bda..aa90066de8 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_76.eb @@ -29,8 +29,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """ -to execute: java -jar $EBROOTMUTECT/muTect-%(version)s.jar -""" +modloadmsg = "to execute: java -jar $EBROOTMUTECT/muTect-%(version)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb index 9292c46b7d..4774c63625 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.4-Java-1.7.0_80.eb @@ -30,8 +30,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """ -To start MuTect: java -jar $EBROOTMUTECT/muTect-%(version)s.jar -""" +modloadmsg = "to execute: java -jar $EBROOTMUTECT/muTect-%(version)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb index a2300aabe6..c8d608145e 100644 --- a/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/m/MuTect/MuTect-1.1.7-Java-1.7.0_80.eb @@ -31,8 +31,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """ -To start MuTect: java -jar $EBROOTMUTECT/%(namelower)s-%(version)s.jar -""" +modloadmsg = "to execute: java -jar $EBROOTMUTECT/muTect-%(version)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb index dd5eb01734..89ae4df712 100644 --- a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb @@ -29,6 +29,7 @@ sanity_check_paths = { modloadmsg = """ To execute GUI run: java -Xmx1024m -Xms512m -jar $EBROOTPGDSPIDER/PGDSpider2.jar To execute CLI run: java -Xmx1024m -Xms512m -jar $EBROOTPGDSPIDER/PGDSpider2-cli.jar -Adjust memory according to your requirements""" +Adjust memory according to your requirements +""" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb index 1e2e1290f3..1d6200df1a 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.0.1-Java-1.8.0_66.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_66' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb index 73072b689d..80d1371c6d 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.0-Java-1.8.0_74.eb @@ -15,6 +15,6 @@ javaver = '1.8.0_74' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb index a11a884ac1..c0f8364e0a 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_112.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_112')] -modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb index ad5c8d1dbb..0e3b399591 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.1.1-Java-1.8.0_74.eb @@ -13,6 +13,6 @@ sources = ['%(name)s-tools-%(version)s.zip'] dependencies = [('Java', '1.8.0_74')] -modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb b/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb index 9487e24fd4..e50c9d60b6 100644 --- a/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb +++ b/easybuild/easyconfigs/p/prokka/prokka-1.11-foss-2016b-BioPerl-1.7.0.eb @@ -34,6 +34,6 @@ sanity_check_paths = { 'dirs': ['bin', 'binaries', 'db', 'db/cm', 'db/genus', 'db/hmm', 'db/kingdom', 'doc'], } -modloadmsg = "prokka scripts are located in $EBROOTPROKKA/bin; databases are located in $EBROOTPROKKA/db" +modloadmsg = "prokka scripts are located in $EBROOTPROKKA/bin; databases are located in $EBROOTPROKKA/db\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb index 33547a587c..091f914cb3 100644 --- a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.32-Java-1.7.0_80.eb @@ -23,7 +23,7 @@ javaver = '1.7.0_80' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute Trimmomatic run: java -jar $EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar""" +modloadmsg = "To execute Trimmomatic run: java -jar $EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar\n" sanity_check_paths = { 'files': ["trimmomatic-%(version)s.jar"], diff --git a/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb index 52e9495873..cc2a64b9ff 100644 --- a/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb +++ b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-6.1.544-i86linux32.eb @@ -27,7 +27,8 @@ install_cmd += "chmod a+rx %(installdir)s/bin/*" modloadmsg = """USEARCH (32-bit) is licensed software but can be used for free by individuals when registered. A 64-bit version is - also available. For more information see http://www.drive5.com/usearch .""" + also available. For more information see http://www.drive5.com/usearch . +""" sanity_check_paths = { 'files': ['bin/%(namelower)s', 'bin/%(namelower)s61'], diff --git a/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-i86linux32.eb b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-i86linux32.eb index 961153d9b4..d2a22ed8a6 100644 --- a/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-i86linux32.eb +++ b/easybuild/easyconfigs/u/USEARCH/USEARCH-5.2.236-i86linux32.eb @@ -19,7 +19,8 @@ install_cmd += "chmod a+rx %(installdir)s/bin/%(namelower)s" modloadmsg = """USEARCH (32-bit) is licensed software but can be used for free by individuals when registered. A 64-bit version is - also available. For more information see http://www.drive5.com/usearch .""" + also available. For more information see http://www.drive5.com/usearch . +""" sanity_check_paths = { 'files': ['bin/%(namelower)s'], diff --git a/easybuild/easyconfigs/u/USEARCH/USEARCH-6.1.544-i86linux32.eb b/easybuild/easyconfigs/u/USEARCH/USEARCH-6.1.544-i86linux32.eb index 07e180dab5..c09d3e96a2 100644 --- a/easybuild/easyconfigs/u/USEARCH/USEARCH-6.1.544-i86linux32.eb +++ b/easybuild/easyconfigs/u/USEARCH/USEARCH-6.1.544-i86linux32.eb @@ -19,7 +19,8 @@ install_cmd += "chmod a+rx %(installdir)s/bin/%(namelower)s" modloadmsg = """USEARCH (32-bit) is licensed software but can be used for free by individuals when registered. A 64-bit version is - also available. For more information see http://www.drive5.com/usearch .""" + also available. For more information see http://www.drive5.com/usearch . +""" sanity_check_paths = { 'files': ['bin/%(namelower)s'], diff --git a/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb b/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb index 8ae2ef6c24..af1032ae7a 100644 --- a/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/v/VarScan/VarScan-2.3.6-Java-1.7.0_80.eb @@ -23,8 +23,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """ -to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar -""" +modloadmsg = "to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb b/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb index 53aad96768..dd6c6f31b0 100644 --- a/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/v/VarScan/VarScan-2.4.1-Java-1.7.0_80.eb @@ -23,8 +23,6 @@ sanity_check_paths = { 'dirs': [], } -modloadmsg = """ -to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar -""" +modloadmsg = "to execute: java -jar $EBROOTVARSCAN/VarScan.v%(version)s.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb index f5c3467ae4..77fe169073 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb @@ -35,6 +35,6 @@ modextravars = { 'WEKAINSTALL': '$root', } -modloadmsg = " execute WEKA: java -jar $EBROOTWEKA/weka.jar " +modloadmsg = "execute WEKA: java -jar $EBROOTWEKA/weka.jar\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb index 579709769c..70198200d8 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb @@ -35,6 +35,6 @@ modextravars = { 'WEKAINSTALL': '$root', } -modloadmsg = " execute WEKA: java -jar $EBROOTWEKA/weka.jar " +modloadmsg = "execute WEKA: java -jar $EBROOTWEKA/weka.jar\n" moduleclass = 'bio' -- GitLab From 5468931c3189bb93d121281e1ed91cb4d3f28a74 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 10:24:06 +0800 Subject: [PATCH 0317/1311] fix source_urls --- easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-4.9.2.eb | 4 ++-- .../easyconfigs/l/libevent/libevent-2.0.22-GCCcore-4.9.3.eb | 4 ++-- .../easyconfigs/l/libevent/libevent-2.0.22-GNU-4.9.3-2.25.eb | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-4.9.2.eb b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-4.9.2.eb index b12575ef89..ce89a700f0 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCC-4.9.2.eb @@ -11,8 +11,8 @@ description = """The libevent API provides a mechanism to execute a callback fun toolchain = {'name': 'GCC', 'version': '4.9.2'} source_urls = [ - 'https://github.com/downloads/%(name)s/%(name)s/', - 'https://sourceforge.net/projects/levent/files/%(name)s/%(name)s-%(version_major_minor)s/', + 'https://github.com/%(name)s/%(name)s/releases/download/release-%(version)s-stable/', + 'https://downloads.sourceforge.net/project/levent/release-%(version)s-stable/', ] sources = ['%(name)s-%(version)s-stable.tar.gz'] diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCCcore-4.9.3.eb b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCCcore-4.9.3.eb index 2de9d3663c..fe73b8ae70 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GCCcore-4.9.3.eb @@ -11,8 +11,8 @@ description = """The libevent API provides a mechanism to execute a callback fun toolchain = {'name': 'GCCcore', 'version': '4.9.3'} source_urls = [ - 'https://github.com/downloads/%(name)s/%(name)s/', - 'https://sourceforge.net/projects/levent/files/%(name)s/%(name)s-%(version_major_minor)s/', + 'https://github.com/%(name)s/%(name)s/releases/download/release-%(version)s-stable/', + 'https://downloads.sourceforge.net/project/levent/release-%(version)s-stable/', ] sources = ['%(name)s-%(version)s-stable.tar.gz'] diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GNU-4.9.3-2.25.eb index 3b555aa6f7..7f0cee0e30 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.0.22-GNU-4.9.3-2.25.eb @@ -11,8 +11,8 @@ description = """The libevent API provides a mechanism to execute a callback fun toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} source_urls = [ - 'https://github.com/downloads/%(name)s/%(name)s/', - 'https://sourceforge.net/projects/levent/files/%(name)s/%(name)s-%(version_major_minor)s/', + 'https://github.com/%(name)s/%(name)s/releases/download/release-%(version)s-stable/', + 'https://downloads.sourceforge.net/project/levent/release-%(version)s-stable/', ] sources = ['%(name)s-%(version)s-stable.tar.gz'] -- GitLab From 786a0c2936c353423311d1a437ef50dbae5a062d Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 15:01:59 +0800 Subject: [PATCH 0318/1311] fix source_urls --- easybuild/easyconfigs/m/Maven/Maven-3.2.3.eb | 2 +- easybuild/easyconfigs/m/Maven/Maven-3.3.3.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/Maven/Maven-3.2.3.eb b/easybuild/easyconfigs/m/Maven/Maven-3.2.3.eb index ae08a0b454..8f18c08a6e 100644 --- a/easybuild/easyconfigs/m/Maven/Maven-3.2.3.eb +++ b/easybuild/easyconfigs/m/Maven/Maven-3.2.3.eb @@ -12,7 +12,7 @@ central piece of information. toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['apache-maven-%(version)s-bin.tar.gz'] -source_urls = ['http://apache.org/dist/maven/maven-%(version_major)s/%(version)s/binaries/'] +source_urls = ['http://archive.apache.org/dist/maven/maven-%(version_major)s/%(version)s/binaries/'] sanity_check_paths = { 'files': ["bin/mvn"], diff --git a/easybuild/easyconfigs/m/Maven/Maven-3.3.3.eb b/easybuild/easyconfigs/m/Maven/Maven-3.3.3.eb index 642c9d91d2..e4b7cb5e43 100644 --- a/easybuild/easyconfigs/m/Maven/Maven-3.3.3.eb +++ b/easybuild/easyconfigs/m/Maven/Maven-3.3.3.eb @@ -12,7 +12,7 @@ central piece of information. toolchain = {'name': 'dummy', 'version': 'dummy'} sources = ['apache-maven-%(version)s-bin.tar.gz'] -source_urls = ['http://apache.org/dist/maven/maven-%(version_major)s/%(version)s/binaries/'] +source_urls = ['http://archive.apache.org/dist/maven/maven-%(version_major)s/%(version)s/binaries/'] sanity_check_paths = { 'files': ["bin/mvn"], -- GitLab From bad37d0fa9656f993d0be64e5e0e286eeb2a26ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 18 Jan 2017 08:05:26 +0100 Subject: [PATCH 0319/1311] broke long messages into multiple modloadmsg --- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb | 3 ++- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb | 3 ++- .../b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb | 3 ++- .../c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb | 3 ++- .../c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb index 77fe6be1c2..76e04042bc 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb @@ -30,6 +30,7 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the" +modloadmsg += " compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb index 1a60a0011d..d1646b7dbe 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb @@ -30,6 +30,7 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the" +modloadmsg += " compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb index 014d3f2635..7e9be8c9b6 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb @@ -28,6 +28,7 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the compiled jni C code.\n" +modloadmsg = "For improved speed, add 'usejni=t' to the command line of %(name)s tools which support the use of the" +modloadmsg += " compiled jni C code.\n" moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb index 961eb91738..50a365b60a 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -37,6 +37,7 @@ installopts = '-override compiler' host_compilers = ["icpc", "g++"] # Be careful and have a message consistent with the generated wrappers -modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" +modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use" +modloadmsg += " nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" moduleclass = 'system' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb index 5b078fe902..dc4d389baf 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -37,6 +37,7 @@ installopts = '-override compiler' host_compilers = ["icpc", "g++"] # Be careful and have a message consistent with the generated wrappers -modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" +modloadmsg = "nvcc uses g++ as the default host compiler. If you want to use icpc as a host compiler you can use" +modloadmsg += " nvcc_icpc, or nvcc -ccbin=icpc. Likewise, a g++ wrapper called nvcc_g++ has been also created.\n" moduleclass = 'system' -- GitLab From d1a28d92026de4d8ed478f71a4ecc82a22f96450 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 15:12:29 +0800 Subject: [PATCH 0320/1311] fix source_urls --- easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb b/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb index e2411ef3f5..585ebb9932 100644 --- a/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb +++ b/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb @@ -14,7 +14,7 @@ description = """ splitRef splits a reference haplotype file into smaller files toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = ['http://www.sph.umich.edu/csg/yli/splitRef/download/'] +source_urls = ['http://csg.sph.umich.edu/yli/splitRef/download/'] sources = ['%s.V%s.tgz' % (name, version.replace(".", ""))] altver = version.replace('.', '') -- GitLab From 35601749f68efba7c3694db62bbcb59500a52d62 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 15:19:09 +0800 Subject: [PATCH 0321/1311] fix source_urls --- easybuild/easyconfigs/s/Spark/Spark-1.3.0.eb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/s/Spark/Spark-1.3.0.eb b/easybuild/easyconfigs/s/Spark/Spark-1.3.0.eb index fae61083b0..41b36d91f6 100644 --- a/easybuild/easyconfigs/s/Spark/Spark-1.3.0.eb +++ b/easybuild/easyconfigs/s/Spark/Spark-1.3.0.eb @@ -9,11 +9,7 @@ description = """Spark is Hadoop MapReduce done in memory""" toolchain = {'name': 'dummy', 'version': ''} sources = ['%(namelower)s-%(version)s-bin-hadoop2.3.tgz'] -source_urls = [ - 'http://apache.belnet.be/%(namelower)s/%(namelower)s-%(version)s/', - 'http://www.eu.apache.org/dist/%(namelower)s/%(namelower)s-%(version)s/', - 'http://www.us.apache.org/dist/%(namelower)s/%(namelower)s-%(version)s/', -] +source_urls = ['http://archive.apache.org/dist/%(namelower)s/%(namelower)s-%(version)s/'] dependencies = [('Java', '1.7.0_76')] -- GitLab From c6d1107cdab9e83e40b94df158a9f94746b86efe Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 15:25:33 +0800 Subject: [PATCH 0322/1311] fix source_urls --- easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb index 02bb809a0b..df836d072b 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.10.eb @@ -11,7 +11,7 @@ description = """zlib is designed to be a free, general-purpose, legally unencum toolchain = {'name': 'dummy', 'version': 'dummy'} toolchainopts = {'pic': True} -source_urls = ['http://zlib.net/'] +source_urls = ['http://zlib.net/fossils/'] sources = [SOURCELOWER_TAR_GZ] # need to take care of $CFLAGS ourselves with dummy toolchain -- GitLab From 8cef19803d6cea774b78ead9a6f8baf1dac2c948 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 15:30:10 +0800 Subject: [PATCH 0323/1311] fix source_urls --- easybuild/easyconfigs/h/HBase/HBase-1.0.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/h/HBase/HBase-1.0.2.eb b/easybuild/easyconfigs/h/HBase/HBase-1.0.2.eb index ab9d5fd44f..84ff25e534 100644 --- a/easybuild/easyconfigs/h/HBase/HBase-1.0.2.eb +++ b/easybuild/easyconfigs/h/HBase/HBase-1.0.2.eb @@ -9,7 +9,7 @@ description = """Apache HBase. is the Hadoop database, a distributed, scalable, toolchain = {'name': 'dummy', 'version': ''} sources = ['%(namelower)s-%(version)s-bin.tar.gz'] -source_urls = ['http://www.us.apache.org/dist/hbase/hbase-%(version)s/'] +source_urls = ['http://archive.apache.org/dist/hbase/hbase-%(version)s/'] dependencies = [('Java', '1.7.0_80')] -- GitLab From 6dc37e464c7c71e44816da07d0aa770a1b8e7514 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 18 Jan 2017 09:05:53 +0100 Subject: [PATCH 0324/1311] Remove reference to unneeded patch --- easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb index f8e72d71f0..f487ac6f42 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-4.1-foss-2016b-psmp.eb @@ -15,7 +15,6 @@ sources = [SOURCELOWER_TAR_BZ2] source_urls = [SOURCEFORGE_SOURCE] patches = [ -# 'CP2K-2.6.0-ifort-compiler-bug-fix.patch', 'CP2K-2.4.0-fix_compile_date_lastsvn.patch', ] -- GitLab From 5b22dd06775c59cee7df92e51073ef4839d9379b Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 16:13:42 +0800 Subject: [PATCH 0325/1311] fix source_urls --- easybuild/easyconfigs/p/PCC/PCC-20131024.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/p/PCC/PCC-20131024.eb b/easybuild/easyconfigs/p/PCC/PCC-20131024.eb index c40392b771..4ba60f4784 100644 --- a/easybuild/easyconfigs/p/PCC/PCC-20131024.eb +++ b/easybuild/easyconfigs/p/PCC/PCC-20131024.eb @@ -18,9 +18,9 @@ description = """The compiler is based on the original Portable C Compiler by S. toolchain = {'name': 'dummy', 'version': ''} -# eg. http://pcc.ludd.ltu.se/ftp/pub/pcc/pcc-20131024.tgz +# eg. http://pcc.ludd.ltu.se/ftp/pub/pcc/2013/pcc-20131024.tgz sources = ['pcc-%(version)s.tgz'] -source_urls = ['http://pcc.ludd.ltu.se/ftp/pub/pcc/'] +source_urls = ['http://pcc.ludd.ltu.se/ftp/pub/pcc/2013/'] builddependencies = [ ('flex', '2.5.35'), -- GitLab From e84c91c96dd57762d945068d3102b887285914d7 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 16:49:00 +0800 Subject: [PATCH 0326/1311] fix source_urls --- easybuild/easyconfigs/s/S-Lang/S-Lang-2.3.0-GCC-4.9.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/S-Lang/S-Lang-2.3.0-GCC-4.9.2.eb b/easybuild/easyconfigs/s/S-Lang/S-Lang-2.3.0-GCC-4.9.2.eb index ec3e8a22d5..631b1a8562 100644 --- a/easybuild/easyconfigs/s/S-Lang/S-Lang-2.3.0-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/s/S-Lang/S-Lang-2.3.0-GCC-4.9.2.eb @@ -12,7 +12,7 @@ description = """S-Lang is a multi-platform programmer's library designed to all toolchain = {'name': 'GCC', 'version': '4.9.2'} sources = ['slang-%(version)s.tar.gz'] -source_urls = ['http://www.jedsoft.org/releases/slang/'] +source_urls = ['http://www.jedsoft.org/releases/slang/old/'] sanity_check_paths = { 'files': ['include/slang.h', 'bin/slsh', 'lib/libslang.%s' % SHLIB_EXT], -- GitLab From 7abb9d8725d2a66fba1f7be7c03d3d7a5027f051 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 18 Jan 2017 16:54:40 +0800 Subject: [PATCH 0327/1311] fix source_urls --- .../easyconfigs/l/libsodium/libsodium-1.0.3-intel-2015a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libsodium/libsodium-1.0.3-intel-2015a.eb b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.3-intel-2015a.eb index 7c1505061b..ad64b7cf37 100644 --- a/easybuild/easyconfigs/l/libsodium/libsodium-1.0.3-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.3-intel-2015a.eb @@ -9,7 +9,7 @@ description = """Sodium is a modern, easy-to-use software library for encryption toolchain = {'name': 'intel', 'version': '2015a'} -source_urls = ['https://download.libsodium.org/libsodium/releases/'] +source_urls = ['https://download.libsodium.org/libsodium/releases/old/'] sources = [SOURCE_TAR_GZ] sanity_check_paths = { -- GitLab From 67546ef1068e26713da475a69b4cbbca756b9b09 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Jan 2017 10:26:49 +0100 Subject: [PATCH 0328/1311] bump zlib to 1.2.11 --- .../easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb | 2 +- ...b-1.2.10-GCCcore-6.3.0.eb => zlib-1.2.11-GCCcore-6.3.0.eb} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/z/zlib/{zlib-1.2.10-GCCcore-6.3.0.eb => zlib-1.2.11-GCCcore-6.3.0.eb} (92%) diff --git a/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb b/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb index 27418ca0e7..9346ceba7e 100644 --- a/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/b/binutils/binutils-2.27-GCCcore-6.3.0.eb @@ -13,7 +13,7 @@ builddependencies = [ ('flex', '2.6.3'), ('Bison', '3.0.4'), # zlib required, but being linked in statically, so not a runtime dep - ('zlib', '1.2.10'), + ('zlib', '1.2.11'), # use same binutils version that was used when building GCC toolchain, to 'bootstrap' this binutils ('binutils', version, '', True) ] diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-6.3.0.eb similarity index 92% rename from easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb rename to easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-6.3.0.eb index 89be4a6599..a15fb20fe6 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.10-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-6.3.0.eb @@ -1,7 +1,7 @@ easyblock = 'ConfigureMake' name = 'zlib' -version = '1.2.10' +version = '1.2.11' homepage = 'http://www.zlib.net/' description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, @@ -11,7 +11,7 @@ description = """zlib is designed to be a free, general-purpose, legally unencum toolchain = {'name': 'GCCcore', 'version': '6.3.0'} toolchainopts = {'pic': True} -source_urls = ['http://zlib.net/'] +source_urls = ['http://zlib.net/fossils'] sources = [SOURCELOWER_TAR_GZ] # use same binutils version that was used when building GCC toolchain -- GitLab From 827747a42bec4b794eca184627410dfa3fbd9948 Mon Sep 17 00:00:00 2001 From: edmondac-admin Date: Wed, 18 Jan 2017 11:21:41 +0000 Subject: [PATCH 0329/1311] Generalising source URLs with %(name)s --- easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb | 2 +- easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb | 2 +- easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb index 5cd890962a..6125b3dd38 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-1.9a-GCC-4.9.2.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'GCC', 'version': '4.9.2'} toolchainopts = {'optarch': True} sources = [SOURCE_TAR_GZ] -source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] +source_urls = ['https://github.com/%(name)s/%(name)s/releases/download/%(version)s/'] dependencies = [ ('ncurses', '5.9'), diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb b/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb index 391b43238f..bb013b1619 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.2-GCCcore-4.9.3.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'GCCcore', 'version': '4.9.3'} toolchainopts = {'optarch': True} sources = [SOURCE_TAR_GZ] -source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] +source_urls = ['https://github.com/%(name)s/%(name)s/releases/download/%(version)s/'] builddependencies = [ # use same binutils version that was used when building GCCcore toolchain diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb index 185b4711a6..f419b0b85c 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3-GCC-5.4.0-2.26.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} toolchainopts = {'optarch': True} sources = [SOURCE_TAR_GZ] -source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] +source_urls = ['https://github.com/%(name)s/%(name)s/releases/download/%(version)s/'] dependencies = [ ('ncurses', '6.0'), -- GitLab From 8c148cc2e68d6f7e024de4824086ba29d1902745 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 18 Jan 2017 09:17:04 -0600 Subject: [PATCH 0330/1311] Added Perl 5.24.0 for GCC 5.4.0-2.26 toolchain --- .../p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb | 888 ++++++++++++++++++ 1 file changed, 888 insertions(+) create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..78af957181 --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb @@ -0,0 +1,888 @@ +name = 'Perl' +version = '5.24.0' + +homepage = 'http://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.cpan.org/src/%(version_major)s.0'] +sources = [SOURCELOWER_TAR_GZ] + +exts_list = [ + ('Config::General', '2.61', { + 'source_tmpl': 'Config-General-2.61.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], + }), + ('File::Listing', '6.04', { + 'source_tmpl': 'File-Listing-6.04.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('ExtUtils::InstallPaths', '0.011', { + 'source_tmpl': 'ExtUtils-InstallPaths-0.011.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Helpers', '0.022', { + 'source_tmpl': 'ExtUtils-Helpers-0.022.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Test::Harness', '3.36', { + 'source_tmpl': 'Test-Harness-3.36.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Config', '0.008', { + 'source_tmpl': 'ExtUtils-Config-0.008.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Build::Tiny', '0.039', { + 'source_tmpl': 'Module-Build-Tiny-0.039.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('aliased', '0.34', { + 'source_tmpl': 'aliased-0.34.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Text::Glob', '0.09', { + 'source_tmpl': 'Text-Glob-0.09.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('Regexp::Common', '2016060801', { + 'source_tmpl': 'Regexp-Common-2016060801.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], + }), + ('GO::Utils', '0.15', { + 'source_tmpl': 'go-perl-0.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CM/CMUNGALL'], + }), + ('Module::Pluggable', '5.2', { + 'source_tmpl': 'Module-Pluggable-5.2.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SI/SIMONW'], + }), + ('Test::Fatal', '0.014', { + 'source_tmpl': 'Test-Fatal-0.014.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Warnings', '0.026', { + 'source_tmpl': 'Test-Warnings-0.026.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('DateTime::Locale', '1.05', { + 'source_tmpl': 'DateTime-Locale-1.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('DateTime::TimeZone', '2.00', { + 'source_tmpl': 'DateTime-TimeZone-2.00.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Test::Requires', '0.10', { + 'source_tmpl': 'Test-Requires-0.10.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM'], + }), + ('Module::Implementation', '0.09', { + 'source_tmpl': 'Module-Implementation-0.09.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Module::Build', '0.4218', { + 'source_tmpl': 'Module-Build-0.4218.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Runtime', '0.014', { + 'source_tmpl': 'Module-Runtime-0.014.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM'], + }), + ('Try::Tiny', '0.24', { + 'source_tmpl': 'Try-Tiny-0.24.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Params::Validate', '1.24', { + 'source_tmpl': 'Params-Validate-1.24.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('List::MoreUtils', '0.416', { + 'source_tmpl': 'List-MoreUtils-0.416.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Exporter::Tiny', '0.042', { + 'source_tmpl': 'Exporter-Tiny-0.042.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOBYINK'], + }), + ('Class::Singleton', '1.5', { + 'source_tmpl': 'Class-Singleton-1.5.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHAY'], + }), + ('DateTime', '1.34', { + 'source_tmpl': 'DateTime-1.34.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('File::Find::Rule::Perl', '1.15', { + 'source_tmpl': 'File-Find-Rule-Perl-1.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Readonly', '2.05', { + 'source_tmpl': 'Readonly-2.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SA/SANKO'], + }), + ('Git', '0.41', { + 'source_tmpl': 'Git-0.41.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MS/MSOUTH'], + }), + ('Tree::DAG_Node', '1.29', { + 'source_tmpl': 'Tree-DAG_Node-1.29.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Template', '2.26', { + 'source_tmpl': 'Template-Toolkit-2.26.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('FreezeThaw', '0.5001', { + 'source_tmpl': 'FreezeThaw-0.5001.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules'], + }), + ('DBI', '1.636', { + 'source_tmpl': 'DBI-1.636.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TI/TIMB'], + }), + ('DBD::SQLite', '1.50', { + 'source_tmpl': 'DBD-SQLite-1.50.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI'], + }), + ('Math::Bezier', '0.01', { + 'source_tmpl': 'Math-Bezier-0.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('Archive::Extract', '0.76', { + 'source_tmpl': 'Archive-Extract-0.76.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('DBIx::Simple', '1.35', { + 'source_tmpl': 'DBIx-Simple-1.35.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JU/JUERD'], + }), + ('Shell', '0.73', { + 'source_tmpl': 'Shell-0.73.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FE/FERREIRA'], + }), + ('File::Spec', '3.62', { + 'source_tmpl': 'PathTools-3.62.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('ExtUtils::MakeMaker', '7.18', { + 'source_tmpl': 'ExtUtils-MakeMaker-7.18.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Test::Simple', '1.302037', { + 'source_tmpl': 'Test-Simple-1.302037.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Set::Scalar', '1.29', { + 'source_tmpl': 'Set-Scalar-1.29.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAVIDO'], + }), + ('IO::Stringy', '2.111', { + 'source_tmpl': 'IO-stringy-2.111.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DS/DSKOLL'], + }), + ('Encode::Locale', '1.05', { + 'source_tmpl': 'Encode-Locale-1.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('XML::SAX::Base', '1.08', { + 'source_tmpl': 'XML-SAX-Base-1.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('XML::NamespaceSupport', '1.11', { + 'source_tmpl': 'XML-NamespaceSupport-1.11.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN'], + }), + ('XML::SAX', '0.99', { + 'source_tmpl': 'XML-SAX-0.99.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('Test::LeakTrace', '0.15', { + 'source_tmpl': 'Test-LeakTrace-0.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GF/GFUJI'], + }), + ('Test::Exception', '0.43', { + 'source_tmpl': 'Test-Exception-0.43.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Text::Table', '1.130', { + 'source_tmpl': 'Text-Table-1.130.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('MIME::Types', '2.13', { + 'source_tmpl': 'MIME-Types-2.13.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], + }), + ('Module::Build::XSUtil', '0.16', { + 'source_tmpl': 'Module-Build-XSUtil-0.16.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO'], + }), + ('Tie::Function', '0.02', { + 'source_tmpl': 'Tie-Function-0.02.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAVIDNICO/handy_tied_functions'], + }), + ('Template::Plugin::Number::Format', '1.06', { + 'source_tmpl': 'Template-Plugin-Number-Format-1.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DARREN'], + }), + ('HTML::Parser', '3.72', { + 'source_tmpl': 'HTML-Parser-3.72.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Date::Handler', '1.2', { + 'source_tmpl': 'Date-Handler-1.2.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ'], + }), + ('Params::Util', '1.07', { + 'source_tmpl': 'Params-Util-1.07.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('IO::HTML', '1.001', { + 'source_tmpl': 'IO-HTML-1.001.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], + }), + ('Data::Grove', '0.08', { + 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KM/KMACLEOD'], + }), + ('Class::ISA', '0.36', { + 'source_tmpl': 'Class-ISA-0.36.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SM/SMUELLER'], + }), + ('URI', '1.71', { + 'source_tmpl': 'URI-1.71.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Ima::DBI', '0.35', { + 'source_tmpl': 'Ima-DBI-0.35.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERRIN'], + }), + ('Tie::IxHash', '1.23', { + 'source_tmpl': 'Tie-IxHash-1.23.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CH/CHORNY'], + }), + ('GO', '0.04', { + 'source_tmpl': 'go-db-perl-0.04.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SJ/SJCARBON'], + }), + ('Class::DBI::SQLite', '0.11', { + 'source_tmpl': 'Class-DBI-SQLite-0.11.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('Pod::POM', '2.01', { + 'source_tmpl': 'Pod-POM-2.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Math::Round', '0.07', { + 'source_tmpl': 'Math-Round-0.07.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], + }), + ('Text::Diff', '1.44', { + 'source_tmpl': 'Text-Diff-1.44.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Log::Message::Simple', '0.10', { + 'source_tmpl': 'Log-Message-Simple-0.10.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('IO::Socket::SSL', '2.029', { + 'source_tmpl': 'IO-Socket-SSL-2.029.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SU/SULLR'], + }), + ('Fennec::Lite', '0.004', { + 'source_tmpl': 'Fennec-Lite-0.004.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Sub::Uplevel', '0.25', { + 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('Meta::Builder', '0.003', { + 'source_tmpl': 'Meta-Builder-0.003.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Exporter::Declare', '0.114', { + 'source_tmpl': 'Exporter-Declare-0.114.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Getopt::Long', '2.48', { + 'source_tmpl': 'Getopt-Long-2.48.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV'], + }), + ('Log::Message', '0.08', { + 'source_tmpl': 'Log-Message-0.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Mouse', 'v2.4.5', { + 'source_tmpl': 'Mouse-v2.4.5.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('Test::Version', '2.04', { + 'source_tmpl': 'Test-Version-2.04.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PL/PLICEASE'], + }), + ('DBIx::Admin::TableInfo', '3.01', { + 'source_tmpl': 'DBIx-Admin-TableInfo-3.01.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Net::HTTP', '6.09', { + 'source_tmpl': 'Net-HTTP-6.09.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Test::Deep', '1.120', { + 'source_tmpl': 'Test-Deep-1.120.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Warn', '0.30', { + 'source_tmpl': 'Test-Warn-0.30.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CH/CHORNY'], + }), + ('MRO::Compat', '0.12', { + 'source_tmpl': 'MRO-Compat-0.12.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BO/BOBTFISH'], + }), + ('Moo', '2.002004', { + 'source_tmpl': 'Moo-2.002004.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('Hash::Merge', '0.200', { + 'source_tmpl': 'Hash-Merge-0.200.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('SQL::Abstract', '1.81', { + 'source_tmpl': 'SQL-Abstract-1.81.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RI/RIBASUSHI'], + }), + ('HTML::Form', '6.03', { + 'source_tmpl': 'HTML-Form-6.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('File::Copy::Recursive', '0.38', { + 'source_tmpl': 'File-Copy-Recursive-0.38.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DM/DMUEY'], + }), + ('Number::Compare', '0.03', { + 'source_tmpl': 'Number-Compare-0.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('IPC::Run', '0.94', { + 'source_tmpl': 'IPC-Run-0.94.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('HTML::Entities::Interpolate', '1.09', { + 'source_tmpl': 'HTML-Entities-Interpolate-1.09.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Test::ClassAPI', '1.06', { + 'source_tmpl': 'Test-ClassAPI-1.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Test::Most', '0.34', { + 'source_tmpl': 'Test-Most-0.34.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/O/OV/OVID'], + }), + ('Class::Accessor', '0.34', { + 'source_tmpl': 'Class-Accessor-0.34.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Test::Differences', '0.64', { + 'source_tmpl': 'Test-Differences-0.64.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DC/DCANTRELL'], + }), + ('HTTP::Tiny', '0.058', { + 'source_tmpl': 'HTTP-Tiny-0.058.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('Package::DeprecationManager', '0.17', { + 'source_tmpl': 'Package-DeprecationManager-0.17.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Digest::SHA1', '2.13', { + 'source_tmpl': 'Digest-SHA1-2.13.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Date::Language', '2.30', { + 'source_tmpl': 'TimeDate-2.30.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GB/GBARR'], + }), + ('version', '0.9917', { + 'source_tmpl': 'version-0.9917.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JP/JPEACOCK'], + }), + ('Sub::Uplevel', '0.25', { + 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('XML::Bare', '0.53', { + 'source_tmpl': 'XML-Bare-0.53.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CO/CODECHILD'], + }), + ('Dist::CheckConflicts', '0.11', { + 'source_tmpl': 'Dist-CheckConflicts-0.11.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('Sub::Name', '0.15', { + 'source_tmpl': 'Sub-Name-0.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Time::Piece', '1.31', { + 'source_tmpl': 'Time-Piece-1.31.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ES/ESAYM'], + }), + ('Digest::HMAC', '1.03', { + 'source_tmpl': 'Digest-HMAC-1.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('HTTP::Negotiate', '6.01', { + 'source_tmpl': 'HTTP-Negotiate-6.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('MIME::Lite', '3.030', { + 'source_tmpl': 'MIME-Lite-3.030.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Crypt::Rijndael', '1.13', { + 'source_tmpl': 'Crypt-Rijndael-1.13.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('B::Lint', '1.20', { + 'source_tmpl': 'B-Lint-1.20.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Canary::Stability', '2011', { + 'source_tmpl': 'Canary-Stability-2011.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN'], + }), + ('AnyEvent', '7.12', { + 'source_tmpl': 'AnyEvent-7.12.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN'], + }), + ('Object::Accessor', '0.48', { + 'source_tmpl': 'Object-Accessor-0.48.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Data::UUID', '1.221', { + 'source_tmpl': 'Data-UUID-1.221.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Pod', '1.51', { + 'source_tmpl': 'Test-Pod-1.51.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('AppConfig', '1.71', { + 'source_tmpl': 'AppConfig-1.71.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Net::SMTP::SSL', '1.03', { + 'source_tmpl': 'Net-SMTP-SSL-1.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('XML::Tiny', '2.06', { + 'source_tmpl': 'XML-Tiny-2.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DC/DCANTRELL'], + }), + ('HTML::Tagset', '3.20', { + 'source_tmpl': 'HTML-Tagset-3.20.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PETDANCE'], + }), + ('HTML::Tree', '5.03', { + 'source_tmpl': 'HTML-Tree-5.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], + }), + ('Devel::GlobalDestruction', '0.13', { + 'source_tmpl': 'Devel-GlobalDestruction-0.13.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('WWW::RobotRules', '6.02', { + 'source_tmpl': 'WWW-RobotRules-6.02.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Expect', '1.33', { + 'source_tmpl': 'Expect-1.33.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JA/JACOBY/'], + }), + ('Term::UI', '0.46', { + 'source_tmpl': 'Term-UI-0.46.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Net::SNMP', 'v6.0.1', { + 'source_tmpl': 'Net-SNMP-v6.0.1.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DT/DTOWN'], + }), + ('XML::SAX::Writer', '0.56', { + 'source_tmpl': 'XML-SAX-Writer-0.56.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN'], + }), + ('Statistics::Descriptive', '3.0612', { + 'source_tmpl': 'Statistics-Descriptive-3.0612.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Class::Load', '0.23', { + 'source_tmpl': 'Class-Load-0.23.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('LWP::Simple', '6.15', { + 'source_tmpl': 'libwww-perl-6.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Time::Piece::MySQL', '0.06', { + 'source_tmpl': 'Time-Piece-MySQL-0.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Package::Stash::XS', '0.28', { + 'source_tmpl': 'Package-Stash-XS-0.28.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('GD::Graph', '1.52', { + 'source_tmpl': 'GDGraph-1.52.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RU/RUZ'], + }), + ('Set::Array', '0.30', { + 'source_tmpl': 'Set-Array-0.30.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('boolean', '0.45', { + 'source_tmpl': 'boolean-0.45.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], + }), + ('Number::Format', '1.75', { + 'source_tmpl': 'Number-Format-1.75.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/W/WR/WRW'], + }), + ('Data::Stag', '0.14', { + 'source_tmpl': 'Data-Stag-0.14.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CM/CMUNGALL'], + }), + ('Test::NoWarnings', '1.04', { + 'source_tmpl': 'Test-NoWarnings-1.04.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Crypt::DES', '2.07', { + 'source_tmpl': 'Crypt-DES-2.07.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DP/DPARIS'], + }), + ('Exporter', '5.72', { + 'source_tmpl': 'Exporter-5.72.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Class::Inspector', '1.28', { + 'source_tmpl': 'Class-Inspector-1.28.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Parse::RecDescent', '1.967013', { + 'source_tmpl': 'Parse-RecDescent-1.967013.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JT/JTBRAUN'], + }), + ('Carp', '1.38', { + 'source_tmpl': 'Carp-1.38.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('XML::XPath', '1.37', { + 'source_tmpl': 'XML-XPath-1.37.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MANWAR'], + }), + ('Capture::Tiny', '0.42', { + 'source_tmpl': 'Capture-Tiny-0.42.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('JSON', '2.90', { + 'source_tmpl': 'JSON-2.90.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA'], + }), + ('Sub::Exporter', '0.987', { + 'source_tmpl': 'Sub-Exporter-0.987.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Class::Load::XS', '0.09', { + 'source_tmpl': 'Class-Load-XS-0.09.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Set::IntSpan::Fast', '1.15', { + 'source_tmpl': 'Set-IntSpan-Fast-1.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AN/ANDYA'], + }), + ('Sub::Exporter::Progressive', '0.001011', { + 'source_tmpl': 'Sub-Exporter-Progressive-0.001011.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FR/FREW'], + }), + ('Data::Dumper::Concise', '2.022', { + 'source_tmpl': 'Data-Dumper-Concise-2.022.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FR/FREW'], + }), + ('File::Slurp::Tiny', '0.004', { + 'source_tmpl': 'File-Slurp-Tiny-0.004.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Algorithm::Diff', '1.1903', { + 'source_tmpl': 'Algorithm-Diff-1.1903.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TY/TYEMQ'], + }), + ('AnyData', '0.12', { + 'source_tmpl': 'AnyData-0.12.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Text::Iconv', '1.7', { + 'source_tmpl': 'Text-Iconv-1.7.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MP/MPIOTR'], + }), + ('Class::Data::Inheritable', '0.08', { + 'source_tmpl': 'Class-Data-Inheritable-0.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('Text::Balanced', '2.03', { + 'source_tmpl': 'Text-Balanced-2.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHAY'], + }), + ('strictures', '2.000003', { + 'source_tmpl': 'strictures-2.000003.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('Switch', '2.17', { + 'source_tmpl': 'Switch-2.17.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CH/CHORNY'], + }), + ('File::Which', '1.21', { + 'source_tmpl': 'File-Which-1.21.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PL/PLICEASE'], + }), + ('Email::Date::Format', '1.005', { + 'source_tmpl': 'Email-Date-Format-1.005.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Error', '0.17024', { + 'source_tmpl': 'Error-0.17024.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Mock::Quick', '1.111', { + 'source_tmpl': 'Mock-Quick-1.111.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Text::CSV', '1.33', { + 'source_tmpl': 'Text-CSV-1.33.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA'], + }), + ('Test::Output', '1.03', { + 'source_tmpl': 'Test-Output-1.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BD/BDFOY'], + }), + ('Class::DBI', '3.0.17', { + 'source_tmpl': 'Class-DBI-v3.0.17.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('List::AllUtils', '0.11', { + 'source_tmpl': 'List-AllUtils-0.11.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('UNIVERSAL::moniker', '0.08', { + 'source_tmpl': 'UNIVERSAL-moniker-0.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Exception::Class', '1.40', { + 'source_tmpl': 'Exception-Class-1.40.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('File::CheckTree', '4.42', { + 'source_tmpl': 'File-CheckTree-4.42.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Math::VecStat', '0.08', { + 'source_tmpl': 'Math-VecStat-0.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], + }), + ('Pod::LaTeX', '0.61', { + 'source_tmpl': 'Pod-LaTeX-0.61.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TJ/TJENNESS'], + }), + ('Eval::Closure', '0.14', { + 'source_tmpl': 'Eval-Closure-0.14.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('HTTP::Request', '6.11', { + 'source_tmpl': 'HTTP-Message-6.11.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('XML::Twig', '3.49', { + 'source_tmpl': 'XML-Twig-3.49.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIROD'], + }), + ('IO::String', '1.08', { + 'source_tmpl': 'IO-String-1.08.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('XML::Simple', '2.22', { + 'source_tmpl': 'XML-Simple-2.22.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('Sub::Install', '0.928', { + 'source_tmpl': 'Sub-Install-0.928.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('HTTP::Cookies', '6.01', { + 'source_tmpl': 'HTTP-Cookies-6.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Pod::Plainer', '1.04', { + 'source_tmpl': 'Pod-Plainer-1.04.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RM/RMBARKER'], + }), + ('Test::Exception::LessClever', '0.007', { + 'source_tmpl': 'Test-Exception-LessClever-0.007.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('LWP::MediaTypes', '6.02', { + 'source_tmpl': 'LWP-MediaTypes-6.02.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Scalar::Util', '1.45', { + 'source_tmpl': 'Scalar-List-Utils-1.45.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PEVANS'], + }), + ('Data::Section::Simple', '0.07', { + 'source_tmpl': 'Data-Section-Simple-0.07.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('Class::Trigger', '0.14', { + 'source_tmpl': 'Class-Trigger-0.14.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('HTTP::Daemon', '6.01', { + 'source_tmpl': 'HTTP-Daemon-6.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('File::HomeDir', '1.00', { + 'source_tmpl': 'File-HomeDir-1.00.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('HTTP::Date', '6.02', { + 'source_tmpl': 'HTTP-Date-6.02.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Authen::SASL', '2.16', { + 'source_tmpl': 'Authen-SASL-2.16.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GB/GBARR'], + }), + ('Clone', '0.38', { + 'source_tmpl': 'Clone-0.38.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GARU'], + }), + ('Data::Types', '0.09', { + 'source_tmpl': 'Data-Types-0.09.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DW/DWHEELER'], + }), + ('Import::Into', '1.002005', { + 'source_tmpl': 'Import-Into-1.002005.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('DateTime::Tiny', '1.06', { + 'source_tmpl': 'DateTime-Tiny-1.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('DBD::AnyData', '0.110', { + 'source_tmpl': 'DBD-AnyData-0.110.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Text::Format', '0.59', { + 'source_tmpl': 'Text-Format-0.59.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Devel::CheckCompiler', '0.06', { + 'source_tmpl': 'Devel-CheckCompiler-0.06.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('Log::Handler', '0.84', { + 'source_tmpl': 'Log-Handler-0.84.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BL/BLOONIX'], + }), + ('DBIx::ContextualFetch', '1.03', { + 'source_tmpl': 'DBIx-ContextualFetch-1.03.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('Devel::StackTrace', '2.01', { + 'source_tmpl': 'Devel-StackTrace-2.01.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Term::ReadKey', '2.33', { + 'source_tmpl': 'TermReadKey-2.33.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JS/JSTOWE'], + }), + ('Set::IntSpan', '1.19', { + 'source_tmpl': 'Set-IntSpan-1.19.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SW/SWMCD'], + }), + ('Moose', '2.1804', { + 'source_tmpl': 'Moose-2.1804.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Algorithm::Dependency', '1.110', { + 'source_tmpl': 'Algorithm-Dependency-1.110.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Font::TTF', '1.05', { + 'source_tmpl': 'Font-TTF-1.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MH/MHOSKEN'], + }), + ('IPC::Run3', '0.048', { + 'source_tmpl': 'IPC-Run3-0.048.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('File::Find::Rule', '0.34', { + 'source_tmpl': 'File-Find-Rule-0.34.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('SQL::Statement', '1.410', { + 'source_tmpl': 'SQL-Statement-1.410.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('File::Slurp', '9999.19', { + 'source_tmpl': 'File-Slurp-9999.19.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/U/UR/URI'], + }), + ('Package::Stash', '0.37', { + 'source_tmpl': 'Package-Stash-0.37.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('Data::OptList', '0.110', { + 'source_tmpl': 'Data-OptList-0.110.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('CPANPLUS', '0.9160', { + 'source_tmpl': 'CPANPLUS-0.9160.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('IO::Tty', '1.12', { + 'source_tmpl': 'IO-Tty-1.12.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Text::Soundex', '3.05', { + 'source_tmpl': 'Text-Soundex-3.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Lingua::EN::PluralToSingular', '0.18', { + 'source_tmpl': 'Lingua-EN-PluralToSingular-0.18.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BK/BKB'], + }), + ('Want', '0.29', { + 'source_tmpl': 'Want-0.29.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RO/ROBIN'], + }), + ('Cwd::Guard', '0.05', { + 'source_tmpl': 'Cwd-Guard-0.05.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], + }), + ('Bundle::BioPerl', '2.1.9', { + 'source_tmpl': 'Bundle-BioPerl-2.1.9.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS'], + }), + ('Mail::Util', '2.18', { + 'source_tmpl': 'MailTools-2.18.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], + }), + ('Text::Template', '1.46', { + 'source_tmpl': 'Text-Template-1.46.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MJ/MJD'], + }), +] + +moduleclass = 'lang' -- GitLab From 93244e6d4678314f6290d3857914d6288bcff385 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 18 Jan 2017 09:17:40 -0600 Subject: [PATCH 0331/1311] Added OpenSSL 1.1.0c for GCC 5.4.0-2.26 toolchain --- .../OpenSSL/OpenSSL-1.1.0c-GCC-5.4.0-2.26.eb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0c-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0c-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0c-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..783abc638a --- /dev/null +++ b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0c-GCC-5.4.0-2.26.eb @@ -0,0 +1,21 @@ +name = 'OpenSSL' +version = '1.1.0c' + +homepage = 'http://www.openssl.org/' +description = """The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, + and Open Source toolchain implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) + protocols as well as a full-strength general purpose cryptography library. """ + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.openssl.org/source/'] + +dependencies = [('zlib', '1.2.8')] + +builddependencies = [('Perl', '5.24.0')] + +runtest = 'test' + +moduleclass = 'system' -- GitLab From 2088ed70e60a6c48422605f581430f03c8ce276f Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 19 Jan 2017 16:20:43 +0800 Subject: [PATCH 0332/1311] fix source_urls --- .../a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb | 4 ++-- .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb | 4 ++-- .../a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb | 4 ++-- .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb | 4 ++-- .../a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb | 4 ++-- .../easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb | 4 ++-- .../easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb | 2 +- .../easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb | 2 +- .../g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb | 7 ++++--- easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb | 7 ++++--- easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb | 7 ++++--- easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb | 7 ++++--- easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb | 4 ++-- easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb | 4 ++-- easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb | 6 +++--- easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb | 6 +++--- 17 files changed, 41 insertions(+), 37 deletions(-) diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb index 38638c65fb..0e77075c8a 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb @@ -10,8 +10,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] # do not change the order of the patches or things will break patches = [ diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb index e567606aa7..8d3a7eb7fe 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb @@ -9,8 +9,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] # do not change the order of the patches or things will break patches = [ diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb index 837fa583de..e75f54d2e1 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb @@ -10,8 +10,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] # do not change the order of the patches or things will break patches = [ diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb index 15e7a3b734..ce27a87097 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb @@ -9,8 +9,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] # do not change the order of the patches or things will break patches = [ diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb index 6388557ca2..0e9b24405d 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb @@ -10,8 +10,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = ['%(name)s_%(version)s.tar.gz'] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] configopts = '--with-pic --with-blas="$LIBBLAS_MT" --with-lapack="$LIBLAPACK_MT"' diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb index 15bec194be..6104f116d8 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb @@ -9,8 +9,8 @@ description = """ARPACK is a collection of Fortran77 subroutines designed to sol toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/'] -sources = ['%(name)s_%(version)s.tar.gz'] +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] configopts = '--with-pic --with-blas="$LIBBLAS_MT" --with-lapack="$LIBLAPACK_MT"' diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb index eb2d005b6f..582161abc9 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb @@ -15,7 +15,7 @@ description = """The ChIP-Seq software provides methods for the analysis of ChIP toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%(version)s/'] +source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/1.5.1/'] sources = ['%(namelower)s.%(version)s.tar.gz'] skipsteps = ['configure'] diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb index dcbe783b38..0bc8d276f9 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb @@ -15,7 +15,7 @@ description = """The ChIP-Seq software provides methods for the analysis of ChIP toolchain = {'name': 'goolf', 'version': '1.7.20'} -source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%(version)s/'] +source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/1.5.1/'] sources = ['%(namelower)s.%(version)s.tar.gz'] skipsteps = ['configure'] diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb index 8aa2e7719b..578d17b6ae 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb @@ -10,7 +10,7 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True} -source_urls = ["http://downloads.ghostscript.com/public/"] +source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] # expat, freetype and libpng are optional deps, diff --git a/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb index bba320bc05..3347248cd1 100644 --- a/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb @@ -21,9 +21,10 @@ to handle everything from small to very large projects with speed and efficiency toolchain = {'name': 'goolf', 'version': '1.4.10'} -# eg. http://git-core.googlecode.com/files/git-1.7.12.tar.gz -sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://git-core.googlecode.com/files'] +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/git/git/archive'] + +preconfigopts = "make configure && " dependencies = [('gettext', '0.18.2')] diff --git a/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb b/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb index 4c4de49303..ce913425b7 100644 --- a/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb @@ -21,9 +21,10 @@ description = """Git is a free and open source distributed version control syste toolchain = {'name': 'ictce', 'version': '5.3.0'} -# eg. http://git-core.googlecode.com/files/git-1.7.12.tar.gz -sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://git-core.googlecode.com/files'] +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/git/git/archive'] + +preconfigopts = "make configure && " dependencies = [('gettext', '0.18.2')] diff --git a/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb index a705caba43..c516d9d10a 100644 --- a/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb @@ -22,9 +22,10 @@ to handle everything from small to very large projects with speed and efficiency toolchain = {'name': 'goolf', 'version': '1.4.10'} -# eg. http://git-core.googlecode.com/files/git-1.8.2.tar.gz -sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://git-core.googlecode.com/files'] +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/git/git/archive'] + +preconfigopts = "make configure && " dependencies = [ ('cURL', '7.29.0'), diff --git a/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb index 6dfc4c5947..c9189d4325 100644 --- a/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb @@ -21,9 +21,10 @@ description = """Git is a free and open source distributed version control syste to handle everything from small to very large projects with speed and efficiency.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} -# eg. http://git-core.googlecode.com/files/git-1.8.2.tar.gz -sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://git-core.googlecode.com/files'] +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/git/git/archive'] + +preconfigopts = "make configure && " dependencies = [ ('cURL', '7.29.0'), diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb index e70401308c..37e2c7a024 100644 --- a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb @@ -8,8 +8,8 @@ homepage = 'http://lynx.isc.org/' toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://lynx.isc.org/release/'] -sources = ['%(name)s%(version)s.tar.bz2'] +source_urls = ['http://invisible-mirror.net/archives/lynx/tarballs/'] +sources = ['%(name)s%(version)srel.2.tar.bz2'] sanity_check_paths = { 'files': ['bin/lynx'], diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb index 2b02e64ab0..022bb67915 100644 --- a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb @@ -8,8 +8,8 @@ homepage = 'http://lynx.isc.org/' toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['http://lynx.isc.org/release/'] -sources = ['%(name)s%(version)s.tar.bz2'] +source_urls = ['http://invisible-mirror.net/archives/lynx/tarballs/'] +sources = ['%(name)s%(version)srel.2.tar.bz2'] sanity_check_paths = { 'files': ['bin/lynx'], diff --git a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb index c2f466b38e..ab727c8b4c 100644 --- a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'MEME' version = '4.8.0' -homepage = 'http://meme.nbcr.net/' +homepage = 'http://meme-suite.org/' description = """The MEME Suite allows you to: * discover motifs using MEME, DREME (DNA only) or GLAM2 on groups of related DNA or protein sequences, * search sequence databases with motifs using MAST, FIMO, MCAST or GLAM2SCAN, * compare a motif to all motifs in a database of motifs, * associate @@ -24,9 +24,9 @@ description = """The MEME Suite allows you to: * discover motifs using MEME, DRE toolchain = {'name': 'goolf', 'version': '1.4.10'} -# Download from eg. http://ebi.edu.au/ftp/software/MEME/4.8.0/meme_4.8.0.tar.gz +# Download from eg. http://meme-suite.org/meme-software/4.8.0/meme_4.8.0.tar.gz sources = ['meme_%(version)s.tar.gz'] -source_urls = ['http://ebi.edu.au/ftp/software/MEME/%(version)s'] +source_urls = ['http://meme-suite.org/meme-software/%(version)s/'] dependencies = [ ('libxml2', '2.9.1'), diff --git a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb index e039fb1fe5..c1658c0642 100644 --- a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'MEME' version = '4.8.0' -homepage = 'http://meme.nbcr.net/' +homepage = 'http://meme-suite.org' description = """The MEME Suite allows you to: * discover motifs using MEME, DREME (DNA only) or GLAM2 on groups of related DNA or protein sequences, * search sequence databases with motifs using MAST, FIMO, MCAST or GLAM2SCAN, * compare a motif to all motifs in a database of motifs, * associate @@ -25,9 +25,9 @@ description = """The MEME Suite allows you to: * discover motifs using MEME, DRE toolchain = {'name': 'ictce', 'version': '5.3.0'} -# Download from eg. http://ebi.edu.au/ftp/software/MEME/4.8.0/meme_4.8.0.tar.gz +# Download from eg. http://meme-suite.org/meme-software/4.8.0/meme_4.8.0.tar.gz sources = ['meme_%(version)s.tar.gz'] -source_urls = ['http://ebi.edu.au/ftp/software/MEME/%(version)s'] +source_urls = ['http://meme-suite.org/meme-software/%(version)s/'] dependencies = [ ('libxml2', '2.9.1'), -- GitLab From 764cddb8305556ed93969d90d2668708afb72fad Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Jan 2017 15:04:13 +0100 Subject: [PATCH 0333/1311] adding easyconfigs: libconfig-1.5-intel-2016b.eb --- .../l/libconfig/libconfig-1.5-intel-2016b.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/l/libconfig/libconfig-1.5-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/libconfig/libconfig-1.5-intel-2016b.eb b/easybuild/easyconfigs/l/libconfig/libconfig-1.5-intel-2016b.eb new file mode 100644 index 0000000000..8604d2ba03 --- /dev/null +++ b/easybuild/easyconfigs/l/libconfig/libconfig-1.5-intel-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libconfig' +version = '1.5' + +homepage = 'http://www.hyperrealm.com/libconfig/' +description = "Libconfig is a simple library for processing structured configuration files" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.hyperrealm.com/libconfig/'] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['include/libconfig.h', 'include/libconfig.h++', 'lib/libconfig.a', 'lib/libconfig++.a', + 'lib/libconfig.%s' % SHLIB_EXT, 'lib/libconfig++.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'lib' -- GitLab From 26711df0d50150f06add6886d63b9c6761590c77 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Fri, 20 Jan 2017 10:03:21 +0800 Subject: [PATCH 0334/1311] also fix source urls for ghostscript versions 9.14 and 9.16 --- .../easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb | 2 +- .../easyconfigs/g/Ghostscript/Ghostscript-9.16-goolf-1.7.20.eb | 2 +- .../easyconfigs/g/Ghostscript/Ghostscript-9.16-intel-2015a.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb index 97a129a9e5..907c72a138 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb @@ -10,7 +10,7 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'pic': True} -source_urls = ["http://downloads.ghostscript.com/public/"] +source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-goolf-1.7.20.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-goolf-1.7.20.eb index 4e828aad87..16ce3919c6 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-goolf-1.7.20.eb @@ -10,7 +10,7 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'pic': True} -source_urls = ["http://downloads.ghostscript.com/public/"] +source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] checksums = ['829319325bbdb83f5c81379a8f86f38f'] diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-intel-2015a.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-intel-2015a.eb index 691a90006b..16b62cc65d 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-intel-2015a.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.16-intel-2015a.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'intel', 'version': '2015a'} # lowopt (-O1) is used to avoid internal compiler error that is hit when -O2 is used toolchainopts = {'pic': True, 'lowopt': True} -source_urls = ["http://downloads.ghostscript.com/public/"] +source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] checksums = ['829319325bbdb83f5c81379a8f86f38f'] -- GitLab From fdbc7bb56e0eedfee2fac1d133bf1df997fbd4e9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 20 Jan 2017 11:27:03 +0100 Subject: [PATCH 0335/1311] adding easyconfigs: QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb, yaff-1.0.develop.2.15-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb, molmod-1.1-intel-2016b-Python-2.7.12.eb --- .../molmod-1.1-intel-2016b-Python-2.7.12.eb | 31 +++++++++++++++++++ ...QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb | 29 +++++++++++++++++ ...5-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb | 31 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/QuickFF/QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/y/yaff/yaff-1.0.develop.2.15-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..23fd809bd7 --- /dev/null +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,31 @@ +easyblock = 'PythonPackage' + +name = 'molmod' +version = '1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://molmod.github.io/molmod/' +description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/molmod/molmod/releases/download/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +runtest = "export MATPLOTLIBRC=$PWD; echo 'backend: agg' > $MATPLOTLIBRC/matplotlibrc;" +runtest += "python setup.py build_ext -i; nosetests -v" + +# fix permissions issue on files in share/molmod subdir +postinstallcmds = ['chmod -R o+r %(installdir)s/share/molmod'] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/molmod'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/q/QuickFF/QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QuickFF/QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..0de53d6790 --- /dev/null +++ b/easybuild/easyconfigs/q/QuickFF/QuickFF-2.1.4-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'QuickFF' +version = '2.1.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://molmod.github.io/QuickFF/' +description = """QuickFF is a Python package developed at the Center for +Molecular Modeling (CMM) to quickly derive accurate force fields from ab initio +calculations.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/molmod/QuickFF/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), + ('molmod', '1.1', versionsuffix), + ('yaff', '1.0.develop.2.15', '%s-HDF5-1.8.18' % versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(namelower)s'], +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/y/yaff/yaff-1.0.develop.2.15-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb b/easybuild/easyconfigs/y/yaff/yaff-1.0.develop.2.15-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb new file mode 100644 index 0000000000..9f5b1ed999 --- /dev/null +++ b/easybuild/easyconfigs/y/yaff/yaff-1.0.develop.2.15-intel-2016b-Python-2.7.12-HDF5-1.8.18.eb @@ -0,0 +1,31 @@ +easyblock = 'PythonPackage' + +name = 'yaff' +version = '1.0.develop.2.15' +hdf5ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5ver + +homepage = 'http://molmod.github.io/yaff/' +description = """Yaff stands for 'Yet another force field'. It is a pythonic force-field code.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/molmod/yaff/releases/download/%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('h5py', '2.6.0', versionsuffix), + ('molmod', '1.1', '-Python-%(pyver)s'), +] + +options = {'modulename': name} +runtest = "export MATPLOTLIBRC=$PWD; echo 'backend: agg' > $MATPLOTLIBRC/matplotlibrc; " +runtest += "python setup.py build_ext -i; nosetests -v" + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s'], +} + +moduleclass = 'chem' -- GitLab From 74790fa8571999bbbe337bc7bc288a52161afc75 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 23 Jan 2017 11:48:31 +0800 Subject: [PATCH 0336/1311] remove hardcoded version --- easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb index 582161abc9..95d35a2813 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb @@ -15,7 +15,7 @@ description = """The ChIP-Seq software provides methods for the analysis of ChIP toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/1.5.1/'] +source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%s/' % '.'.join(version.split('-'))] sources = ['%(namelower)s.%(version)s.tar.gz'] skipsteps = ['configure'] diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb index 0bc8d276f9..5a91c1c288 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb @@ -15,7 +15,7 @@ description = """The ChIP-Seq software provides methods for the analysis of ChIP toolchain = {'name': 'goolf', 'version': '1.7.20'} -source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/1.5.1/'] +source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%s/' % '.'.join(version.split('-'))] sources = ['%(namelower)s.%(version)s.tar.gz'] skipsteps = ['configure'] -- GitLab From 66eb83dcd0747ffd4790c59dd689a28c19abe5dc Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 23 Jan 2017 18:18:38 +0800 Subject: [PATCH 0337/1311] add checksums --- .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb | 2 ++ .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb | 2 ++ .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb | 2 ++ .../easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb | 2 ++ .../easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb | 2 ++ .../easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb | 2 ++ easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb | 2 ++ .../easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb | 2 ++ .../easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb | 2 ++ easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb | 2 ++ easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb | 2 ++ easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb | 2 ++ 18 files changed, 36 insertions(+) diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb index 0e77075c8a..4562fea8de 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0-mt.eb @@ -13,6 +13,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['ae659c8c6f8857f4850a5bcd4f97b23f'] + # do not change the order of the patches or things will break patches = [ 'arpack-ng-3.1.3-update-to-head.patch', diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb index 8d3a7eb7fe..36abbfba39 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.3.0.eb @@ -12,6 +12,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['ae659c8c6f8857f4850a5bcd4f97b23f'] + # do not change the order of the patches or things will break patches = [ 'arpack-ng-3.1.3-update-to-head.patch', diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb index e75f54d2e1..a63af2d197 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0-mt.eb @@ -13,6 +13,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['ae659c8c6f8857f4850a5bcd4f97b23f'] + # do not change the order of the patches or things will break patches = [ 'arpack-ng-3.1.3-update-to-head.patch', diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb index ce27a87097..e390bd7768 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.3-ictce-5.5.0.eb @@ -12,6 +12,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['ae659c8c6f8857f4850a5bcd4f97b23f'] + # do not change the order of the patches or things will break patches = [ 'arpack-ng-3.1.3-update-to-head.patch', diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb index 0e9b24405d..b22908df9d 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2-mt.eb @@ -13,6 +13,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': False} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['d84e1b6108d9ee67c0d21aba7099e953'] + configopts = '--with-pic --with-blas="$LIBBLAS_MT" --with-lapack="$LIBLAPACK_MT"' sanity_check_paths = { diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb index 6104f116d8..cdb3eae35c 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.1.5-ictce-7.1.2.eb @@ -12,6 +12,8 @@ toolchainopts = {'opt': True, 'optarch': True, 'pic': True, 'usempi': True} source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] sources = ['%(version)s.tar.gz'] +checksums = ['d84e1b6108d9ee67c0d21aba7099e953'] + configopts = '--with-pic --with-blas="$LIBBLAS_MT" --with-lapack="$LIBLAPACK_MT"' sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb index 95d35a2813..b0d7e2e41b 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.4.10.eb @@ -18,6 +18,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%s/' % '.'.join(version.split('-'))] sources = ['%(namelower)s.%(version)s.tar.gz'] +checksums = ['e36736c5151c872d9fc7afa54e3e8ccb'] + skipsteps = ['configure'] buildopts = ' CC=$CC' diff --git a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb index 5a91c1c288..54bfcde59b 100644 --- a/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/ChIP-Seq/ChIP-Seq-1.5-1-goolf-1.7.20.eb @@ -18,6 +18,8 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['http://downloads.sourceforge.net/project/chip-seq/chip-seq/%s/' % '.'.join(version.split('-'))] sources = ['%(namelower)s.%(version)s.tar.gz'] +checksums = ['e36736c5151c872d9fc7afa54e3e8ccb'] + skipsteps = ['configure'] buildopts = ' CC=$CC' diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb index 578d17b6ae..0e4a638848 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.10-goolf-1.4.10.eb @@ -13,6 +13,8 @@ toolchainopts = {'pic': True} source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] +checksums = ['5f0c0a2670b08466a4050ddbd1f3de63'] + # expat, freetype and libpng are optional deps, # these are actually patched and included in the sources, dependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb index 907c72a138..7d2dd7bf7c 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb @@ -13,6 +13,8 @@ toolchainopts = {'pic': True} source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] +checksums = ['024f040b1371348a2b7fc4d25b379d33'] + dependencies = [ ('freetype', '2.5.3'), ('fontconfig', '2.11.1'), diff --git a/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb index 3347248cd1..7f241b6884 100644 --- a/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.7.12-goolf-1.4.10.eb @@ -24,6 +24,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['v%(version)s.tar.gz'] source_urls = ['https://github.com/git/git/archive'] +checksums = ['8e58583b4c2e1a1c661d271b94067e36'] + preconfigopts = "make configure && " dependencies = [('gettext', '0.18.2')] diff --git a/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb b/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb index ce913425b7..316219216f 100644 --- a/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/g/git/git-1.7.12-ictce-5.3.0.eb @@ -24,6 +24,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = ['v%(version)s.tar.gz'] source_urls = ['https://github.com/git/git/archive'] +checksums = ['8e58583b4c2e1a1c661d271b94067e36'] + preconfigopts = "make configure && " dependencies = [('gettext', '0.18.2')] diff --git a/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb index c516d9d10a..12ddedc547 100644 --- a/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.8.2-goolf-1.4.10.eb @@ -25,6 +25,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['v%(version)s.tar.gz'] source_urls = ['https://github.com/git/git/archive'] +checksums = ['f44e7c6c689f58d1876634aafe9fe1f9'] + preconfigopts = "make configure && " dependencies = [ diff --git a/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb b/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb index c9189d4325..343da7e2bc 100644 --- a/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/git/git-1.8.3.1-goolf-1.4.10.eb @@ -24,6 +24,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['v%(version)s.tar.gz'] source_urls = ['https://github.com/git/git/archive'] +checksums = ['099c655ce47361850fa07252497f64e7'] + preconfigopts = "make configure && " dependencies = [ diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb index 37e2c7a024..6d16b1a8fe 100644 --- a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-goolf-1.4.10.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['http://invisible-mirror.net/archives/lynx/tarballs/'] sources = ['%(name)s%(version)srel.2.tar.bz2'] +checksums = ['cb936aef812e4e463ab86cbbe14d4db9'] + sanity_check_paths = { 'files': ['bin/lynx'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb index 022bb67915..00b6eda668 100644 --- a/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.7-ictce-5.3.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} source_urls = ['http://invisible-mirror.net/archives/lynx/tarballs/'] sources = ['%(name)s%(version)srel.2.tar.bz2'] +checksums = ['cb936aef812e4e463ab86cbbe14d4db9'] + sanity_check_paths = { 'files': ['bin/lynx'], 'dirs': [], diff --git a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb index ab727c8b4c..2b1ca4f4f3 100644 --- a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-goolf-1.4.10.eb @@ -28,6 +28,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['meme_%(version)s.tar.gz'] source_urls = ['http://meme-suite.org/meme-software/%(version)s/'] +checksums = ['e1747a8a47a61d97256884c676b46c09'] + dependencies = [ ('libxml2', '2.9.1'), ('libxslt', '1.1.28'), diff --git a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb index c1658c0642..8c5d271d61 100644 --- a/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/m/MEME/MEME-4.8.0-ictce-5.3.0.eb @@ -29,6 +29,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = ['meme_%(version)s.tar.gz'] source_urls = ['http://meme-suite.org/meme-software/%(version)s/'] +checksums = ['e1747a8a47a61d97256884c676b46c09'] + dependencies = [ ('libxml2', '2.9.1'), ('libxslt', '1.1.28'), -- GitLab From 5d5e297ac15a6802e7b6dfca44d2a5c3321f3275 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Mon, 23 Jan 2017 17:09:36 +0100 Subject: [PATCH 0338/1311] added conda-forge channel --- easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb index 401987f750..4b9209b380 100644 --- a/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb +++ b/easybuild/easyconfigs/q/QIIME/QIIME-1.9.1.eb @@ -15,7 +15,7 @@ description = """QIIME is an open-source bioinformatics pipeline for performing toolchain = {'name': 'dummy', 'version': ''} requirements = "%(namelower)s=%(version)s matplotlib=1.4.3 mock nose" -channels = ['bioconda'] +channels = ['bioconda', 'conda-forge'] builddependencies = [('Anaconda2', '4.2.0')] -- GitLab From 47623ed6c6f38360def694931573c1ee81abf14f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 24 Jan 2017 14:00:53 +0100 Subject: [PATCH 0339/1311] fix ImageJ version (1.51i rather than 1.5.1i) --- .../i/ImageJ/{ImageJ-1.5.1i.eb => ImageJ-1.51i.eb} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/i/ImageJ/{ImageJ-1.5.1i.eb => ImageJ-1.51i.eb} (88%) diff --git a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51i.eb similarity index 88% rename from easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb rename to easybuild/easyconfigs/i/ImageJ/ImageJ-1.51i.eb index 1ae33a127b..8963988c6f 100644 --- a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.5.1i.eb +++ b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51i.eb @@ -1,7 +1,7 @@ easyblock = 'PackedBinary' name = 'ImageJ' -version = '1.5.1i' +version = '1.51i' homepage = 'https://imagej.nih.gov/ij' description = "Image Processing and Analysis in Java" @@ -9,7 +9,7 @@ description = "Image Processing and Analysis in Java" toolchain = {'name': 'dummy', 'version': ''} source_urls = ['https://imagej.nih.gov/ij/download/src/'] -sources = ['ij%s-src.zip' % ''.join(version.split('.'))] +sources = ['ij%(version_major)s%(version_minor)s-src.zip'] dependencies = [ ('Java', '1.8.0_112'), -- GitLab From 48eb10498a6fb04c50eec0c2d4be9a3fe0d20595 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 24 Jan 2017 14:28:13 +0100 Subject: [PATCH 0340/1311] add FME extensions (+ deps) in R 3.3.1 easyconfigs --- easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb | 4 ++++ easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb | 4 ++++ easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb index 9e8837b860..7ed2007d87 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb @@ -466,6 +466,10 @@ exts_list = [ ('lubridate', '1.5.6', ext_options), ('biom', '0.3.12', ext_options), ('pim', '2.0.0.2', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb index ea4614f23d..e6d46c62ea 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb @@ -466,6 +466,10 @@ exts_list = [ ('lubridate', '1.5.6', ext_options), ('biom', '0.3.12', ext_options), ('pim', '2.0.0.2', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb b/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb index 21471e5985..09f5b0a4c6 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb @@ -466,6 +466,10 @@ exts_list = [ ('lubridate', '1.5.6', ext_options), ('biom', '0.3.12', ext_options), ('pim', '2.0.0.2', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), ] moduleclass = 'lang' -- GitLab From 4a5d666df621d194775fdd4e321152b2b4c37713 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Wed, 25 Jan 2017 15:11:04 +0100 Subject: [PATCH 0341/1311] Beast v1.8.4 --- .../b/Beast/Beast-1.8.4-foss-2016a.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb new file mode 100644 index 0000000000..cfdf71248e --- /dev/null +++ b/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel + +easyblock = "Tarball" + +name = 'Beast' +version = '1.8.4' + +homepage = 'http://beast.bio.ed.ac.uk/' +description = """ BEAST is a cross-platform program for Bayesian MCMC analysis of molecular + sequences. It is entirely orientated towards rooted, time-measured phylogenies inferred using + strict or relaxed molecular clock models. It can be used as a method of reconstructing phylogenies + but is also a framework for testing evolutionary hypotheses without conditioning on a single + tree topology. BEAST uses MCMC to average over tree space, so that each tree is weighted + proportional to its posterior probability. """ + +toolchain = {'name': 'foss', 'version': '2016a'} +source_urls= ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] +sources = ['BEASTv%(version)s.tgz'] + +dependencies = [ + ('Java', '1.8.0_74', '', ('dummy', '')), +] + +sanity_check_paths = { + 'files': ["bin/beast"], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 8de8facc59c1807a52f99264bcc24a4f8b5c1cf2 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Wed, 25 Jan 2017 15:25:16 +0100 Subject: [PATCH 0342/1311] toolchain for dependencies --- easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb index cfdf71248e..656a791b22 100644 --- a/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb @@ -21,7 +21,7 @@ source_urls= ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(vers sources = ['BEASTv%(version)s.tgz'] dependencies = [ - ('Java', '1.8.0_74', '', ('dummy', '')), + ('Java', '1.8.0_74', '', True), ] sanity_check_paths = { -- GitLab From 06f8e30bc932675f7091b408e87c41e0894f8255 Mon Sep 17 00:00:00 2001 From: Javier Antonio Ruiz Bosch Date: Wed, 25 Jan 2017 11:40:01 -0500 Subject: [PATCH 0343/1311] add cclib-1.5-foss-2016b-Python-3.2.5.eb easyconfig file --- .../cclib-1.5-foss-2016b-Python-3.5.2.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..78196b3b89 --- /dev/null +++ b/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'cclib' +version = '1.5' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://cclib.github.io/' +description = """cclib is a Python library that provides parsers for computational chemistry log files. + It alsoprovides a platform to implement algorithms in a package-independent manner. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/cclib/cclib/releases/download/v%(version)s/'] +sources = ['%(name)s-%(version)s.post1.tar.gz'] + +dependencies = [ + ('Python', '3.5.2'), # This contains numpy as extension needed for cclib +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s'], +} + +moduleclass = 'tools' -- GitLab From 26bbcc867391a668ebd7d50390425e995e7515c3 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 25 Jan 2017 23:54:33 +0100 Subject: [PATCH 0344/1311] adding easyconfigs: libgd-2.2.3-foss-2016b.eb --- .../l/libgd/libgd-2.2.3-foss-2016b.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb new file mode 100755 index 0000000000..bfe540d4e6 --- /dev/null +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libgd' +version = '2.2.3' + +homepage = 'http://libgd.bitbucket.org/' +description = "GD is an open source code library for the dynamic creation of images by programmers." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/libgd/libgd/releases/download/gd-%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('fontconfig', '2.12.1'), + ('libjpeg-turbo', '1.5.0'), + ('libpng', '1.6.26'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ["lib/libgd.a", "lib/libgd.%s" % SHLIB_EXT], + 'dirs': ["bin", "include"], +} + +moduleclass = 'lib' -- GitLab From e3dcefcedfd21f97c0c09f1a88990185258d4fa4 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 25 Jan 2017 23:58:41 +0100 Subject: [PATCH 0345/1311] adding easyconfigs: libcerf-1.4-foss-2016b.eb --- .../l/libcerf/libcerf-1.4-foss-2016b.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/l/libcerf/libcerf-1.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libcerf/libcerf-1.4-foss-2016b.eb b/easybuild/easyconfigs/l/libcerf/libcerf-1.4-foss-2016b.eb new file mode 100644 index 0000000000..dd70dd1034 --- /dev/null +++ b/easybuild/easyconfigs/l/libcerf/libcerf-1.4-foss-2016b.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'libcerf' +version = '1.4' + +homepage = 'http://gnuplot.sourceforge.net/' +description = """libcerf is a self-contained numeric library that provides an efficient and accurate + implementation of complex error functions, along with Dawson, Faddeeva, and Voigt functions.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TGZ] +source_urls = [ + 'http://apps.jcns.fz-juelich.de/src/libcerf/', + 'http://apps.jcns.fz-juelich.de/src/libcerf/old', +] + +builddependencies = [ + ('Autotools', '20150215'), + ('libtool', '2.4.6'), +] + +sanity_check_paths = { + 'files': ['lib/libcerf.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'math' -- GitLab From d693e82df07e1cc5750beb50a30e6f47d17bbcc6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 26 Jan 2017 00:02:29 +0100 Subject: [PATCH 0346/1311] adding easyconfigs: libcerf-1.5-foss-2016b.eb --- .../l/libcerf/libcerf-1.5-foss-2016b.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/l/libcerf/libcerf-1.5-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libcerf/libcerf-1.5-foss-2016b.eb b/easybuild/easyconfigs/l/libcerf/libcerf-1.5-foss-2016b.eb new file mode 100644 index 0000000000..6a1a6a3a08 --- /dev/null +++ b/easybuild/easyconfigs/l/libcerf/libcerf-1.5-foss-2016b.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'libcerf' +version = '1.5' + +homepage = 'http://gnuplot.sourceforge.net/' +description = """libcerf is a self-contained numeric library that provides an efficient and accurate + implementation of complex error functions, along with Dawson, Faddeeva, and Voigt functions.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TGZ] +source_urls = [ + 'http://apps.jcns.fz-juelich.de/src/libcerf/', + 'http://apps.jcns.fz-juelich.de/src/libcerf/old', +] + +builddependencies = [ + ('Autotools', '20150215'), + ('libtool', '2.4.6'), +] + +sanity_check_paths = { + 'files': ['lib/libcerf.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'math' -- GitLab From 5e09e2ff0a6328e93e2efd7a714a0386e7e19a10 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Thu, 26 Jan 2017 18:12:03 +0100 Subject: [PATCH 0347/1311] 0.36 --- .../Trimmomatic-0.36-Java-1.8.0_92.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb diff --git a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb new file mode 100644 index 0000000000..88a84647c6 --- /dev/null +++ b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb @@ -0,0 +1,28 @@ +easyblock = 'Tarball' + +name = 'Trimmomatic' +version = '0.36' + +homepage = 'http://www.usadellab.org/cms/?page=trimmomatic' +description = """Trimmomatic performs a variety of useful trimming tasks for illumina + paired-end and single ended data.The selection of trimming steps and their associated + parameters are supplied on the command line. """ + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = ['http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/'] +sources = [SOURCE_ZIP] + +java = 'Java' +javaver = '1.8.0_92' +versionsuffix = '-%s-%s' % (java, javaver) +dependencies = [(java, javaver)] + +modloadmsg = """To execute Trimmomatic run: java -jar \\$EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar""" + +sanity_check_paths = { + 'files': ["trimmomatic-%(version)s.jar"], + 'dirs': [""], +} + +moduleclass = 'bio' -- GitLab From c9a2df738aff5a3a6985b9c428ed02ecbb772975 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Fri, 27 Jan 2017 09:01:43 +0100 Subject: [PATCH 0348/1311] Revert to libpng-1.6.24 --- easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb index bfe540d4e6..af1365b912 100755 --- a/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.3-foss-2016b.eb @@ -14,7 +14,7 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('fontconfig', '2.12.1'), ('libjpeg-turbo', '1.5.0'), - ('libpng', '1.6.26'), + ('libpng', '1.6.24'), ('zlib', '1.2.8'), ] -- GitLab From f2b5b86663eb4c0b35fbc26a7b09777aadacdbe4 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 27 Jan 2017 11:39:18 +0100 Subject: [PATCH 0349/1311] changed msg --- .../easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb index 88a84647c6..4ddd5946b8 100644 --- a/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/t/Trimmomatic/Trimmomatic-0.36-Java-1.8.0_92.eb @@ -18,7 +18,7 @@ javaver = '1.8.0_92' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -modloadmsg = """To execute Trimmomatic run: java -jar \\$EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar""" +modloadmsg = """To execute Trimmomatic run: java -jar $EBROOTTRIMMOMATIC/trimmomatic-%(version)s.jar\n""" sanity_check_paths = { 'files': ["trimmomatic-%(version)s.jar"], -- GitLab From 6f4e932daa5902853c5fc3bb475bbe2d17d80099 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 27 Jan 2017 11:54:30 +0100 Subject: [PATCH 0350/1311] use dummy toolchain, rename eb --- .../b/Beast/{Beast-1.8.4-foss-2016a.eb => Beast-1.8.4.eb} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename easybuild/easyconfigs/b/Beast/{Beast-1.8.4-foss-2016a.eb => Beast-1.8.4.eb} (95%) diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb similarity index 95% rename from easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb rename to easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb index 656a791b22..972161d135 100644 --- a/easybuild/easyconfigs/b/Beast/Beast-1.8.4-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb @@ -16,7 +16,8 @@ description = """ BEAST is a cross-platform program for Bayesian MCMC analysis o tree topology. BEAST uses MCMC to average over tree space, so that each tree is weighted proportional to its posterior probability. """ -toolchain = {'name': 'foss', 'version': '2016a'} +toolchain = {'name': 'dummy', 'version': ''} + source_urls= ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] sources = ['BEASTv%(version)s.tgz'] -- GitLab From c41a28090f6bfb672ed832bdbfe58660e1372fe4 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 30 Jan 2017 16:31:50 +0100 Subject: [PATCH 0351/1311] adding easyconfigs: libxslt-1.1.29-foss-2016b.eb --- .../l/libxslt/libxslt-1.1.29-foss-2016b.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/l/libxslt/libxslt-1.1.29-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libxslt/libxslt-1.1.29-foss-2016b.eb b/easybuild/easyconfigs/l/libxslt/libxslt-1.1.29-foss-2016b.eb new file mode 100644 index 0000000000..42e7a06480 --- /dev/null +++ b/easybuild/easyconfigs/l/libxslt/libxslt-1.1.29-foss-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libxslt' +version = '1.1.29' + +homepage = 'http://xmlsoft.org/' +description = """Libxslt is the XSLT C library developed for the GNOME project + (but usable outside of the Gnome platform).""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://xmlsoft.org/sources/', + 'http://xmlsoft.org/sources/old/' +] + +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('libxml2', '2.9.4'), +] + +moduleclass = 'lib' -- GitLab From cda6e2019665e299eb669b7fca6cd4e5e0ee9b1e Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 30 Jan 2017 18:38:28 +0100 Subject: [PATCH 0352/1311] adding easyconfigs: Pindel-0.2.5b8-foss-2016b.eb --- .../p/Pindel/Pindel-0.2.5b8-foss-2016b.eb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/p/Pindel/Pindel-0.2.5b8-foss-2016b.eb diff --git a/easybuild/easyconfigs/p/Pindel/Pindel-0.2.5b8-foss-2016b.eb b/easybuild/easyconfigs/p/Pindel/Pindel-0.2.5b8-foss-2016b.eb new file mode 100644 index 0000000000..9f45199e95 --- /dev/null +++ b/easybuild/easyconfigs/p/Pindel/Pindel-0.2.5b8-foss-2016b.eb @@ -0,0 +1,50 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 0.2.5b8 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'CmdCp' + +name = 'Pindel' +version = '0.2.5b8' + +homepage = 'http://gmt.genome.wustl.edu/packages/pindel/' +description = """ Pindel can detect breakpoints of large deletions, medium sized + insertions, inversions, tandem duplications and other structural variants at single-based + resolution from next-gen sequence data. It uses a pattern growth approach to identify the + breakpoints of these variants from paired-end short reads. """ + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'openmp': True} + +source_urls = ['https://github.com/genome/pindel/archive/'] +sources = ['v%(version)s.tar.gz'] + +patches = ['pindel-perl-path.patch'] + +dependencies = [ + ('HTSlib', '1.3.1'), + ('zlib', '1.2.8') +] + +cmds_map = [('.*', "CPATH=$EBROOTHTSLIB/include/bam:$CPATH ./INSTALL $EBROOTHTSLIB")] + +files_to_copy = [ + (['pindel', 'sam2pindel', 'pindel2vcf', 'bam2pindel.pl', 'Adaptor.pm'], 'bin'), + "demo", + "gmt", + "gmt-web", + "test", + "README.md", + "RELEASE" +] + +sanity_check_paths = { + 'files': ['bin/pindel', 'bin/sam2pindel', 'bin/pindel2vcf', 'bin/bam2pindel.pl'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 37fb1386845e8df3ec15f2da48bb898d549d1e02 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 30 Jan 2017 19:16:15 +0100 Subject: [PATCH 0353/1311] adding easyconfigs: Inspector-2017_update1.eb --- .../i/Inspector/Inspector-2017_update1.eb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 easybuild/easyconfigs/i/Inspector/Inspector-2017_update1.eb diff --git a/easybuild/easyconfigs/i/Inspector/Inspector-2017_update1.eb b/easybuild/easyconfigs/i/Inspector/Inspector-2017_update1.eb new file mode 100644 index 0000000000..5e1233098f --- /dev/null +++ b/easybuild/easyconfigs/i/Inspector/Inspector-2017_update1.eb @@ -0,0 +1,16 @@ +name = 'Inspector' +version = '2017_update1' + +homepage = 'http://software.intel.com/en-us/intel-inspector-xe' +description = """Intel Inspector XE is an easy to use memory error checker and thread checker for serial + and parallel applications""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['inspector_%(version)s.tar.gz'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' -- GitLab From 994c8c8af07bed10290e1dfef70c44be553147e5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 30 Jan 2017 19:26:33 +0100 Subject: [PATCH 0354/1311] adding easyconfigs: NEURON-7.4-intel-2016b.eb --- .../n/NEURON/NEURON-7.4-intel-2016b.eb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 easybuild/easyconfigs/n/NEURON/NEURON-7.4-intel-2016b.eb diff --git a/easybuild/easyconfigs/n/NEURON/NEURON-7.4-intel-2016b.eb b/easybuild/easyconfigs/n/NEURON/NEURON-7.4-intel-2016b.eb new file mode 100644 index 0000000000..0a3e0085b0 --- /dev/null +++ b/easybuild/easyconfigs/n/NEURON/NEURON-7.4-intel-2016b.eb @@ -0,0 +1,18 @@ +name = 'NEURON' +version = '7.4' + +homepage = 'http://www.neuron.yale.edu/neuron' +description = """Empirically-based simulations of neurons and networks of neurons.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['nrn-%(version)s.tar.gz'] +source_urls = ['http://www.neuron.yale.edu/ftp/neuron/versions/v%(version)s/'] + +dependencies = [ + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('Python', '2.7.12') +] + +moduleclass = 'math' -- GitLab From 5cfe6a3c3c4afe184f697af9644c71e8356ff912 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 08:49:14 +0100 Subject: [PATCH 0355/1311] adding easyconfigs: Molden-5.7-intel-2016b.eb --- .../m/Molden/Molden-5.7-intel-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb diff --git a/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb b/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb new file mode 100644 index 0000000000..72b0830332 --- /dev/null +++ b/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'MakeCp' + +name = 'Molden' +version = '5.7' + +homepage = 'http://www.cmbi.ru.nl/molden/' +description = """Molden is a package for displaying Molecular Density from the + Ab Initio packages GAMESS-UK, GAMESS-US and GAUSSIAN and the Semi-Empirical + packages Mopac/Ampac""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(namelower)s%(version)s.tar.gz'] +source_urls = ['ftp://ftp.cmbi.ru.nl/pub/molgraph/molden'] + +buildopts = 'CC="$CC" FC="$F90" molden' + +files_to_copy = [(['molden'], 'bin'), 'CopyRight', 'README', 'REGISTER'] + +sanity_check_paths = { + 'files': ['bin/molden', 'README', 'REGISTER'], + 'dirs': [], +} + +moduleclass = 'chem' -- GitLab From cb17c3afce0ad722234cf1d460bac0e6f238e66c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 09:28:32 +0100 Subject: [PATCH 0356/1311] include X11 as dep for Molden --- easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb b/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb index 72b0830332..fe23519684 100644 --- a/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Molden/Molden-5.7-intel-2016b.eb @@ -13,6 +13,8 @@ toolchain = {'name': 'intel', 'version': '2016b'} sources = ['%(namelower)s%(version)s.tar.gz'] source_urls = ['ftp://ftp.cmbi.ru.nl/pub/molgraph/molden'] +dependencies = [('X11', '20160819')] + buildopts = 'CC="$CC" FC="$F90" molden' files_to_copy = [(['molden'], 'bin'), 'CopyRight', 'README', 'REGISTER'] -- GitLab From e80220d61a80333c467f1b8d7f6b96a7f73f1f94 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 09:51:45 +0100 Subject: [PATCH 0357/1311] remove incorrect definition for $ROSETTA_DB, now (correctly) defined via Rosetta easyblock --- .../r/Rosetta/Rosetta-2015.31.58019-intel-2015a.eb | 4 ---- .../easyconfigs/r/Rosetta/Rosetta-2016.13.58602-foss-2016a.eb | 4 ---- easybuild/easyconfigs/r/Rosetta/Rosetta-3.7-foss-2016b.eb | 4 ---- 3 files changed, 12 deletions(-) diff --git a/easybuild/easyconfigs/r/Rosetta/Rosetta-2015.31.58019-intel-2015a.eb b/easybuild/easyconfigs/r/Rosetta/Rosetta-2015.31.58019-intel-2015a.eb index 10b2a8fd9c..64d1ea29a2 100644 --- a/easybuild/easyconfigs/r/Rosetta/Rosetta-2015.31.58019-intel-2015a.eb +++ b/easybuild/easyconfigs/r/Rosetta/Rosetta-2015.31.58019-intel-2015a.eb @@ -13,8 +13,4 @@ sources = ['%(namelower)s_src_%(version)s_bundle.tgz'] builddependencies = [('SCons', '2.3.6', '-Python-2.7.9')] -modextravars = { - 'ROSETTA3_DB': '$root/database', -} - moduleclass = 'bio' diff --git a/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.13.58602-foss-2016a.eb b/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.13.58602-foss-2016a.eb index 86250d9275..d65a2614d9 100644 --- a/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.13.58602-foss-2016a.eb +++ b/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.13.58602-foss-2016a.eb @@ -13,8 +13,4 @@ sources = ['%(namelower)s_src_%(version)s_bundle.tgz'] builddependencies = [('SCons', '2.4.1', '-Python-2.7.11')] -modextravars = { - 'ROSETTA3_DB': '$root/database', -} - moduleclass = 'bio' diff --git a/easybuild/easyconfigs/r/Rosetta/Rosetta-3.7-foss-2016b.eb b/easybuild/easyconfigs/r/Rosetta/Rosetta-3.7-foss-2016b.eb index dc1928028e..00858b739e 100644 --- a/easybuild/easyconfigs/r/Rosetta/Rosetta-3.7-foss-2016b.eb +++ b/easybuild/easyconfigs/r/Rosetta/Rosetta-3.7-foss-2016b.eb @@ -13,8 +13,4 @@ sources = ['%(namelower)s_src_%(version)s_bundle.tgz'] builddependencies = [('SCons', '2.5.0', '-Python-2.7.12')] -modextravars = { - 'ROSETTA3_DB': '$root/database', -} - moduleclass = 'bio' -- GitLab From 83154d12a7f3621cb005097bfed152a0e9efb47f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 13:42:21 +0100 Subject: [PATCH 0358/1311] adding easyconfigs: Tensorflow-0.12.1-intel-2016b-Python-3.5.2.eb --- ...f-python-3.2.0-intel-2016b-Python-3.5.2.eb | 29 +++++++++++++++ .../p/protobuf/protobuf-3.2.0-intel-2016b.eb | 21 +++++++++++ ...sorflow-0.12.1-intel-2016b-Python-3.5.2.eb | 35 +++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb create mode 100644 easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb create mode 100644 easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..89a06c0e60 --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.2.0' +versionsuffix= '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf' } + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb new file mode 100644 index 0000000000..087e4b2fe4 --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'protobuf' +version = '3.2.0' + +homepage = 'https://github.com/google/protobuf/' +description = """Google Protocol Buffers""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s/'] +sources = [SOURCE_TAR_GZ] + +preconfigopts = "./autogen.sh &&" + +sanity_check_paths = { + 'files': ['bin/protoc','lib/libprotobuf.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..4898d79427 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '0.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2016b'} + +pymaj = '3' +pymin = '5' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/e5/5c/56e6522fdcd6f8739dcbc4de62e8b0040e141785bb42e5b53a83b0ba3e58/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)sm-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['c6e3ba8579754f37d37be26e863f9d95'] + +dependencies = [ + ('Python', '%s.%s.2' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From 9d56a6afba449a92eec678b117e30cd9eff5e28f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 14:01:30 +0100 Subject: [PATCH 0359/1311] adding easyconfigs: Rosetta-2016.46.59086-foss-2016b.eb --- .../Rosetta/Rosetta-2016.46.59086-foss-2016b.eb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 easybuild/easyconfigs/r/Rosetta/Rosetta-2016.46.59086-foss-2016b.eb diff --git a/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.46.59086-foss-2016b.eb b/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.46.59086-foss-2016b.eb new file mode 100644 index 0000000000..ccf154c6cb --- /dev/null +++ b/easybuild/easyconfigs/r/Rosetta/Rosetta-2016.46.59086-foss-2016b.eb @@ -0,0 +1,16 @@ +name = 'Rosetta' +version = '2016.46.59086' + +homepage = 'https://www.rosettacommons.org' +description = """Rosetta is the premier software suite for modeling macromolecular structures. As a flexible, +multi-purpose application, it includes tools for structure prediction, design, and remodeling of proteins and +nucleic acids.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +sources = ['%(namelower)s_src_%(version)s_bundle.tgz'] + +builddependencies = [('SCons', '2.5.0', '-Python-2.7.12')] + +moduleclass = 'bio' -- GitLab From 4c5c0258aecc0af48800143ea9f3d52d0155fb75 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 14:44:17 +0100 Subject: [PATCH 0360/1311] add Autotools build dep for protobuf --- .../easyconfigs/p/protobuf/protobuf-3.0.2-foss-2016a.eb | 6 ++++-- .../easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-3.0.2-foss-2016a.eb b/easybuild/easyconfigs/p/protobuf/protobuf-3.0.2-foss-2016a.eb index 14ba425f1f..d684c53f55 100644 --- a/easybuild/easyconfigs/p/protobuf/protobuf-3.0.2-foss-2016a.eb +++ b/easybuild/easyconfigs/p/protobuf/protobuf-3.0.2-foss-2016a.eb @@ -11,10 +11,12 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/google/protobuf/archive/v%(version)s/'] sources = [SOURCE_TAR_GZ] -preconfigopts = "./autogen.sh &&" +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "./autogen.sh && " sanity_check_paths = { - 'files': ['bin/protoc','lib/libprotobuf.%s' % SHLIB_EXT], + 'files': ['bin/protoc', 'lib/libprotobuf.%s' % SHLIB_EXT], 'dirs': [], } diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb index 087e4b2fe4..224169f86e 100644 --- a/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb +++ b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-intel-2016b.eb @@ -11,10 +11,12 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/google/protobuf/archive/v%(version)s/'] sources = [SOURCE_TAR_GZ] -preconfigopts = "./autogen.sh &&" +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "./autogen.sh && " sanity_check_paths = { - 'files': ['bin/protoc','lib/libprotobuf.%s' % SHLIB_EXT], + 'files': ['bin/protoc', 'lib/libprotobuf.%s' % SHLIB_EXT], 'dirs': [], } -- GitLab From 7fb56afbc203e5b3ed0f29102e87d27c4861df87 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 31 Jan 2017 14:46:10 +0100 Subject: [PATCH 0361/1311] adding easyconfigs: FLUENT-18.0.eb --- easybuild/easyconfigs/f/FLUENT/FLUENT-18.0.eb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 easybuild/easyconfigs/f/FLUENT/FLUENT-18.0.eb diff --git a/easybuild/easyconfigs/f/FLUENT/FLUENT-18.0.eb b/easybuild/easyconfigs/f/FLUENT/FLUENT-18.0.eb new file mode 100644 index 0000000000..7feeec83d4 --- /dev/null +++ b/easybuild/easyconfigs/f/FLUENT/FLUENT-18.0.eb @@ -0,0 +1,14 @@ +name = 'FLUENT' +version = '18.0' + +homepage = 'http://www.ansys.com/Products/Simulation+Technology/Fluid+Dynamics/Fluid+Dynamics+Products/ANSYS+Fluent' +description = """ANSYS FLUENT software contains the broad physical modeling capabilities needed +to model flow, turbulence, heat transfer, and reactions for industrial applications ranging from +air flow over an aircraft wing to combustion in a furnace, from bubble columns to oil platforms, +from blood flow to semiconductor manufacturing, and from clean room design to wastewater treatment plants.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['FLUIDSTRUCTURES_%(version_major)s%(version_minor)s_LINX64.tar'] + +moduleclass = 'cae' -- GitLab From a00bf1bd323e4043a72c4c33631adf178f2e42a1 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 31 Jan 2017 18:18:19 +0100 Subject: [PATCH 0362/1311] adding easyconfigs: matplotlib-1.5.3-foss-2016b-Python-3.5.2.eb --- ...atplotlib-1.5.3-foss-2016b-Python-3.5.2.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.3-foss-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.3-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.3-foss-2016b-Python-3.5.2.eb new file mode 100755 index 0000000000..fd17adf8c2 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-1.5.3-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '1.5.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '3.5.2'), + ('freetype', '2.7'), + ('libpng', '1.6.26'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From 853f93e9c355e468cd204c175292711ca6051aa4 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 31 Jan 2017 18:19:51 +0100 Subject: [PATCH 0363/1311] adding easyconfigs: scikit-learn-0.18.1-intel-2016b-Python-3.5.2.eb, scikit-learn-0.18.1-intel-2016b-Python-2.7.12.eb, scikit-learn-0.18.1-foss-2016b-Python-2.7.12.eb, scikit-learn-0.18.1-foss-2016b-Python-3.5.2.eb --- ...t-learn-0.18.1-foss-2016b-Python-2.7.12.eb | 30 +++++++++++++++++++ ...it-learn-0.18.1-foss-2016b-Python-3.5.2.eb | 30 +++++++++++++++++++ ...-learn-0.18.1-intel-2016b-Python-2.7.12.eb | 30 +++++++++++++++++++ ...t-learn-0.18.1-intel-2016b-Python-3.5.2.eb | 30 +++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-3.5.2.eb create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..9e8395819b --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-3.5.2.eb new file mode 100755 index 0000000000..dd9bbeb576 --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('matplotlib', '1.5.3', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..ad5177d70b --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-3.5.2.eb new file mode 100755 index 0000000000..8d85cb18f4 --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('matplotlib', '1.5.3', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' -- GitLab From 8481b1ae480bb16ac01b91bd53915f454c96c57c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Feb 2017 11:40:59 +0100 Subject: [PATCH 0364/1311] bumo to final OpenMPI 2.0.2 --- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb index 1676fb43ff..2e2eda32d4 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb @@ -10,7 +10,8 @@ toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] sources = [SOURCELOWER_TAR_GZ] -sources = ['openmpi-%(version)src2.tar.gz'] # FIXME +sources = ['openmpi-%(version)s.tar.gz'] +checksums = ['886698becc5bea8c151c0af2074b8392'] dependencies = [('hwloc', '1.11.5')] -- GitLab From 56782c46c4046221e6c09b9d73d91a592b3e6c72 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Feb 2017 11:47:19 +0100 Subject: [PATCH 0365/1311] bump to FFTW 3.3.6 --- .../{FFTW-3.3.5-gompi-2017a.eb => FFTW-3.3.6-gompi-2017a.eb} | 5 +++-- easybuild/easyconfigs/f/foss/foss-2017a.eb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/f/FFTW/{FFTW-3.3.5-gompi-2017a.eb => FFTW-3.3.6-gompi-2017a.eb} (78%) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb similarity index 78% rename from easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb rename to easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb index 66f9239e19..039c1bb824 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-gompi-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb @@ -1,5 +1,5 @@ name = 'FFTW' -version = '3.3.5' +version = '3.3.6' homepage = 'http://www.fftw.org' description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) @@ -8,8 +8,9 @@ description = """FFTW is a C subroutine library for computing the discrete Fouri toolchain = {'name': 'gompi', 'version': '2017a'} toolchainopts = {'pic': True} -sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] +sources = ['fftw-%(version)s-pl1.tar.gz'] +checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] runtest = 'check' diff --git a/easybuild/easyconfigs/f/foss/foss-2017a.eb b/easybuild/easyconfigs/f/foss/foss-2017a.eb index badece0d08..400c0029a9 100644 --- a/easybuild/easyconfigs/f/foss/foss-2017a.eb +++ b/easybuild/easyconfigs/f/foss/foss-2017a.eb @@ -28,7 +28,7 @@ dependencies = [ ('GCC', gccver), ('OpenMPI', '2.0.2', '', ('GCC', gccver)), (blaslib, blasver, blassuff, ('GCC', gccver)), - ('FFTW', '3.3.5', '', comp_mpi_tc), + ('FFTW', '3.3.6', '', comp_mpi_tc), ('ScaLAPACK', '2.0.2', '-%s%s' % (blas, blassuff), comp_mpi_tc), ] -- GitLab From ec7e97a48bbe83f3b1d777628bd0f1d4966dfb99 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Feb 2017 11:55:33 +0100 Subject: [PATCH 0366/1311] bump copyright to 2017 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3979a91f64..350d5c333c 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2016 Ghent University +# Copyright 2012-2017 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -- GitLab From a9e7d44acaa0d98b7ff80dcc16fc8aa596dbd6f0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Feb 2017 14:36:33 +0100 Subject: [PATCH 0367/1311] also install intel-gdb components in icc/ifort easyconfigs --- easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb | 2 +- .../easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb index 4b07bc6dde..39745a0399 100644 --- a/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/icc/icc-2017.1.132-GCC-6.3.0-2.27.eb @@ -24,7 +24,7 @@ dependencies = [ # list of regex for components to install # full list of components can be obtained from pset/mediaconfig.xml in unpacked sources # cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide -components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-ipsc?_'] +components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-ipsc?_', 'intel-gdb(?!.*mic)'] dontcreateinstalldir = 'True' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb index 4c71563eb3..746cfd78bf 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -27,7 +27,7 @@ dependencies = [ # list of regex for components to install # full list of components can be obtained from pset/mediaconfig.xml in unpacked sources # cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide -components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel-ipsf?_'] +components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel-ipsf?_', 'intel-gdb(?!.*mic)'] dontcreateinstalldir = 'True' -- GitLab From 4e1ad10fd35f1f4fb5d98d5f33e6c049e7959738 Mon Sep 17 00:00:00 2001 From: hpcswadm Date: Wed, 1 Feb 2017 11:25:15 -0500 Subject: [PATCH 0368/1311] adding easyconfigs: ipp-2017.1.132.eb --- easybuild/easyconfigs/i/ipp/ipp-2017.1.132.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/i/ipp/ipp-2017.1.132.eb diff --git a/easybuild/easyconfigs/i/ipp/ipp-2017.1.132.eb b/easybuild/easyconfigs/i/ipp/ipp-2017.1.132.eb new file mode 100644 index 0000000000..0e78bfb109 --- /dev/null +++ b/easybuild/easyconfigs/i/ipp/ipp-2017.1.132.eb @@ -0,0 +1,19 @@ +name = 'ipp' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/articles/intel-ipp/' +description = """Intel Integrated Performance Primitives (Intel IPP) is an extensive library + of multicore-ready, highly optimized software functions for multimedia, data processing, + and communications applications. Intel IPP offers thousands of optimized functions + covering frequently used fundamental algorithms.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['l_ipp_%(version)s.tgz'] + +dontcreateinstalldir = 'True' + +# license file +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'perf' -- GitLab From e5abb209ec4f358b6b75a80543c854d33207274c Mon Sep 17 00:00:00 2001 From: hpcswadm Date: Wed, 1 Feb 2017 11:33:28 -0500 Subject: [PATCH 0369/1311] adding easyconfigs: tbb-2017.2.132.eb --- easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb new file mode 100644 index 0000000000..c81d846fca --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb @@ -0,0 +1,22 @@ +name = 'tbb' +version = '2017.2.132' + +homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' +description = """Intel Threading Building Blocks 4.0 (Intel TBB) + is a widely used, award-winning C++ template library for creating reliable, + portable, and scalable parallel applications. + Use Intel TBB for a simple and rapid way of developing robust task-based + parallel applications that scale to available processor cores, are compatible + with multiple environments, and are easier to maintain. + Intel TBB is the most proficient way to implement future-proof parallel applications + that tap into the power and performance of multicore and manycore hardware platforms.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['l_%(name)s_%(version)s.tgz'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'lib' -- GitLab From 55b2a4d6c41f07d82a221aa26496acece19035b4 Mon Sep 17 00:00:00 2001 From: hpcswadm Date: Wed, 1 Feb 2017 11:36:26 -0500 Subject: [PATCH 0370/1311] adding easyconfigs: itac-2017.1.024.eb --- .../easyconfigs/i/itac/itac-2017.1.024.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/i/itac/itac-2017.1.024.eb diff --git a/easybuild/easyconfigs/i/itac/itac-2017.1.024.eb b/easybuild/easyconfigs/i/itac/itac-2017.1.024.eb new file mode 100644 index 0000000000..f4c7fa5a53 --- /dev/null +++ b/easybuild/easyconfigs/i/itac/itac-2017.1.024.eb @@ -0,0 +1,20 @@ +name = 'itac' +version = '2017.1.024' + +homepage = 'http://software.intel.com/en-us/intel-trace-analyzer/' +description = """The Intel Trace Collector is a low-overhead tracing library that performs + event-based tracing in applications. The Intel Trace Analyzer provides a convenient way to monitor application + activities gathered by the Intel Trace Collector through graphical displays. """ + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['l_itac_p_%(version)s.tgz'] + +dontcreateinstalldir = 'True' + +preferredmpi = 'impi5' + +# license file +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' -- GitLab From b96a076e60218148fe73b2beb89a2bd5bbf17eab Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 2 Feb 2017 11:34:38 +0800 Subject: [PATCH 0371/1311] fix checksum --- .../easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb index 7d2dd7bf7c..9bdfb72977 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.14-intel-2014b.eb @@ -13,7 +13,7 @@ toolchainopts = {'pic': True} source_urls = ["http://downloads.ghostscript.com/public/old-gs-releases/"] sources = [SOURCELOWER_TAR_GZ] -checksums = ['024f040b1371348a2b7fc4d25b379d33'] +checksums = ['586494befb443363338c1b6379f13973'] dependencies = [ ('freetype', '2.5.3'), -- GitLab From c505725c9c47e141934a0717c3172bcbae5df428 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Feb 2017 15:33:10 +0100 Subject: [PATCH 0372/1311] adding easyconfigs: statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb --- ...tsmodels-0.6.1-intel-2016b-Python-3.5.2.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..435f33a3bd --- /dev/null +++ b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,36 @@ +easyblock = 'Bundle' + +name = 'statsmodels' +version = '0.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://statsmodels.sourceforge.net/' +description = """Statsmodels is a Python module that allows users to explore data, estimate statistical models, +and perform statistical tests.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [('Python', '3.5.2')] + +exts_list = [ + ('patsy', '0.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/patsy'], + 'source_tmpl': 'patsy-%(version)s.zip', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/sources/statsmodels'], + 'source_tmpl': 'statsmodels-%(version)s.zip', + }), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'math' -- GitLab From 6f5b48e3b6be222884ce59fb87e880b594b3500f Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 2 Feb 2017 17:24:20 +0100 Subject: [PATCH 0373/1311] adding easyconfigs: PyTables-3.2.2-foss-2016b-Python-2.7.12.eb, numexpr-2.6.1-foss-2016b-Python-2.7.12.eb --- .../numexpr-2.6.1-foss-2016b-Python-2.7.12.eb | 27 +++++++++++++ ...PyTables-3.2.2-foss-2016b-Python-2.7.12.eb | 38 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 easybuild/easyconfigs/n/numexpr/numexpr-2.6.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/numexpr/numexpr-2.6.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numexpr/numexpr-2.6.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1cddd58e1d --- /dev/null +++ b/easybuild/easyconfigs/n/numexpr/numexpr-2.6.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'numexpr' +version = '2.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://code.google.com/p/numexpr/' +description = """The numexpr package evaluates multiple-operator array expressions many times faster than NumPy can. + It accepts the expression as a string, analyzes it, rewrites it more efficiently, and compiles it on the fly into + code for its internal virtual machine (VM). Due to its integrated just-in-time (JIT) compiler, it does not require a + compiler at runtime.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/pydata/numexpr/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..836640b941 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,38 @@ +easyblock = 'PythonPackage' + +name = 'PyTables' +version = '3.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.pytables.org' +description = """PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope + with extremely large amounts of data. PyTables is built on top of the HDF5 library, using the Python language and the + NumPy package. It features an object-oriented interface that, combined with C extensions for the performance-critical + parts of the code (generated using Cython), makes it a fast, yet extremely easy to use tool for interactively browse, + process and search very large amounts of data. One important feature of PyTables is that it optimizes memory and disk + resources so that data takes much less space (specially if on-flight compression is used) than other solutions such as + relational or object oriented databases.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/PyTables/PyTables/archive/'] +sources = ['v.%(version)s.tar.gz'] + +patches = ['pyTables-%(version)s-fix-libs.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('numpy', '1.11.1', versionsuffix), + ('numexpr', '2.6.1', versionsuffix), + ('HDF5', '1.8.17'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['pt2to3', 'ptdump', 'ptrepack']], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'tables'} + +moduleclass = 'data' -- GitLab From 0c636d19ee317d5fa00c83d351550ef292f91e44 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 2 Feb 2017 18:27:07 +0100 Subject: [PATCH 0374/1311] adding easyconfigs: Tensorflow-0.12.1-intel-2016b-Python-2.7.12.eb, protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb --- ...-python-3.2.0-intel-2016b-Python-2.7.12.eb | 29 +++++++++++++++ ...orflow-0.12.1-intel-2016b-Python-2.7.12.eb | 35 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100755 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..136b95fa55 --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.2.0' +versionsuffix= '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf' } + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..8ccd735bee --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '0.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2016b'} + +pymaj = '2' +pymin = '7' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/7e/c6/837f4e249aae5c86a632eaaa9779e601eca1487772f8ad75c347bf9e813f/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['c98fd26b79a97cc490c942bbafed5462'] + +dependencies = [ + ('Python', '%s.%s.12' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From f0732795647bda8bbd383479e74f6110f557a889 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Fri, 3 Feb 2017 17:07:14 +0800 Subject: [PATCH 0375/1311] prepare release notes for eb310 --- RELEASE_NOTES | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 3ed16807e4..c5b786547f 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,6 +6,44 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,225 easyconfig files, for 1,136 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.1.0 (February 3rd 2017) +-------------------------- + +feature release +- added example easyconfig files for 16 new software packages: + - ack (#3983), cclib (#4065), ConnectomeWorkbench (#3411), GroIMP (#3994), hyperspy (#3991), I-TASSER (#1216), ImageJ (#4023), + libconfig (#4051), libspatialindex (#4002), mahotas (#3990), Minia (#3949), muParser (#4007), NetLogo (#3941), QIIME (#3868), + QwtPolar (#4019), Tensorflow (#4084, #4095) +- added additional easyconfigs for various supported software packages: + - ALPS 2.3.0 (#4021), Anaconda2 and Anaconda3 4.2.0 (#4005), bbcp 12.01.30.00.0 (#4026), Beast 1.8.4 (#4064), + Boost 1.62.0 (#3650) and 1.63.0 (#3977), CD-HIT 4.6.6 (#3995), CP2K 4.1 (#3890), EIGENSORT 6.1.4 (#3962), ELPA 2016.05.004 (#3999), + EMBOSS 6.6.0 (#3980), FLUENT 18.0 (#4086), GATK 3.7 (#4017), GDAL 2.1.2 (#4015), GSL 2.3 (#3961), HPL 2.2 (#3968, #3969), Inspector 2017_update1 (#4079), + ipp 2017.1.132 (#4090), itac 2017.1.024 (#4092), Kraken 0.10.5-beta (#3963), libcerf 1.4 (#4067) and 1.5 (#4068), libevent 2.0.22 (#4014), + libgd 2.2.3 (#4066), libharu 2.3.0 (#3980), libpciaccess 0.13.4 (#4031), libpthread-stubs 0.3 (#4029, #4034), libspatialindex 1.8.5 (#4016), + libxslt 1.1.29 (#4077), libxsmm 1.6.4 (#3890), matplotlib 1.4.3 (#3998) and 1.5.3 (#4087), Molden 5.7 (#4081), molmod 1.1 (#4053), netCDF 4.4.1.1 (#4000), + NEURON 7.4 (#4080), OpenSSL 1.1.0c (#4047), PEAR 0.9.8 (#3992), Perl 5.24.0 (#4047), Pindel 0.2.5b8 (#4078), PLUMED 2.3.0 (#3989), protobuf 2.5.0 (#4027), + Python 3.5.1 (#3981), PyQt5 5.7.1 and PyQt 4.12 (#4018), QCA 2.1.0 (#4020), Qt5 5.7.1 (#4001), QuickFF 2.1.4 (#4053), rhdf5 2.18.0 (#3982), Rosetta 2016.46.59086 (#4085), + scikit-learn 0.18.1 (#4088), SIP 4.19 (#4018), statsmodels 0.6.1 (#4093), tbb 2017.2.132 (#4091), tmux 2.3 (#4014), Trimmomatic 0.36 (#4070), WPS 3.8 and WRF 3.8 (#3970), + X11 20160819 (#3981), Xerces-C++ 3.1.3 (#4008), xorg-macros 1.19.0 (#4030), yaff 1.0.develop.2.15 (#4053), Yase 2016.06a (#3987), zlib 1.2.10 (#3967) +- various enhancements, including: + - update FFTW 3.3.5 easyconfigs to use FFTW easyblock & enable running of tests (#3985) + - adding channel to perl-app-cpanminus (#4012) + - add FME extensions (+ deps) in R 3.3.1 easyconfigs (#4063) +- various bug fixes, including: + - add libxml2 dependency on HDF5 (#3759) + - remove unnecessary dependency in libmatheval (#3988) + - fix permissions on SWASH binaries (#4003) + - add missing deps (libpthread-stubs, libpciaccess) to libdrm 2.4.70 (#4032) + - modloadmsg style fixes in multiple easyconfigs (#4035) + - fix ImageJ version (1.51i rather than 1.5.1i) (#4062) + - include X11 as dep for Molden (#4082) + - remove incorrect definition for $ROSETTA3_DB, now (correctly) defined via Rosetta easyblock (#4083) +- fix source URLs for several easyconfigs, including: + - arpack-ng 3.1.3 and 3.1.5, ChIP-Seq 1.5-1, Ghostscript 9.10, 9.14 and 9.16, Git 1.7.12, 1.8.2 and 1.8.3.1, lynx 2.8.7 and MEME 4.8.0 (#4050), + HBase 1.0.2 (#4043), libevent 2.0.22 (#4037), libsodium 1.0.3 (#4046), Maven 3.2.2 and 3.3.3 (#4039), PCC 20131024 (#4044), S-Lang 2.3.0 (#4045), + Spark 1.3.0 (#4041), splitRef 0.0.2 (#4040), zlib 1.2.10 (#4042) + + v3.0.2 (December 22nd 2016) --------------------------- -- GitLab From 4be7ad85dfef8ab868ea0b4d8ba579d3bde5b267 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Feb 2017 10:54:45 +0100 Subject: [PATCH 0376/1311] complete easybuild-easyconfigs v3.1.0 release notes & bump version --- RELEASE_NOTES | 31 +++++++++++-------------------- setup.py | 2 +- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index c5b786547f..a293eb1659 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,7 +3,7 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,225 easyconfig files, for 1,136 different software packages, +The latest version of easybuild-easyconfig provides 6,488 easyconfig files, for 1,152 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. v3.1.0 (February 3rd 2017) @@ -11,37 +11,28 @@ v3.1.0 (February 3rd 2017) feature release - added example easyconfig files for 16 new software packages: - - ack (#3983), cclib (#4065), ConnectomeWorkbench (#3411), GroIMP (#3994), hyperspy (#3991), I-TASSER (#1216), ImageJ (#4023), - libconfig (#4051), libspatialindex (#4002), mahotas (#3990), Minia (#3949), muParser (#4007), NetLogo (#3941), QIIME (#3868), - QwtPolar (#4019), Tensorflow (#4084, #4095) -- added additional easyconfigs for various supported software packages: - - ALPS 2.3.0 (#4021), Anaconda2 and Anaconda3 4.2.0 (#4005), bbcp 12.01.30.00.0 (#4026), Beast 1.8.4 (#4064), - Boost 1.62.0 (#3650) and 1.63.0 (#3977), CD-HIT 4.6.6 (#3995), CP2K 4.1 (#3890), EIGENSORT 6.1.4 (#3962), ELPA 2016.05.004 (#3999), - EMBOSS 6.6.0 (#3980), FLUENT 18.0 (#4086), GATK 3.7 (#4017), GDAL 2.1.2 (#4015), GSL 2.3 (#3961), HPL 2.2 (#3968, #3969), Inspector 2017_update1 (#4079), - ipp 2017.1.132 (#4090), itac 2017.1.024 (#4092), Kraken 0.10.5-beta (#3963), libcerf 1.4 (#4067) and 1.5 (#4068), libevent 2.0.22 (#4014), - libgd 2.2.3 (#4066), libharu 2.3.0 (#3980), libpciaccess 0.13.4 (#4031), libpthread-stubs 0.3 (#4029, #4034), libspatialindex 1.8.5 (#4016), - libxslt 1.1.29 (#4077), libxsmm 1.6.4 (#3890), matplotlib 1.4.3 (#3998) and 1.5.3 (#4087), Molden 5.7 (#4081), molmod 1.1 (#4053), netCDF 4.4.1.1 (#4000), - NEURON 7.4 (#4080), OpenSSL 1.1.0c (#4047), PEAR 0.9.8 (#3992), Perl 5.24.0 (#4047), Pindel 0.2.5b8 (#4078), PLUMED 2.3.0 (#3989), protobuf 2.5.0 (#4027), - Python 3.5.1 (#3981), PyQt5 5.7.1 and PyQt 4.12 (#4018), QCA 2.1.0 (#4020), Qt5 5.7.1 (#4001), QuickFF 2.1.4 (#4053), rhdf5 2.18.0 (#3982), Rosetta 2016.46.59086 (#4085), - scikit-learn 0.18.1 (#4088), SIP 4.19 (#4018), statsmodels 0.6.1 (#4093), tbb 2017.2.132 (#4091), tmux 2.3 (#4014), Trimmomatic 0.36 (#4070), WPS 3.8 and WRF 3.8 (#3970), - X11 20160819 (#3981), Xerces-C++ 3.1.3 (#4008), xorg-macros 1.19.0 (#4030), yaff 1.0.develop.2.15 (#4053), Yase 2016.06a (#3987), zlib 1.2.10 (#3967) + - ack (#3983), cclib (#4065), ConnectomeWorkbench (#3411), GroIMP (#3994), hyperspy (#3991), I-TASSER (#1216), + ImageJ (#4023, #4062), libconfig (#4051), libspatialindex (#4002), mahotas (#3990), Minia (#3949), muParser (#4007), + NetLogo (#3941), QIIME (#3868), QwtPolar (#4019), Tensorflow (#4084, #4095) +- added additional easyconfigs for various supported software packages, including: + - Boost 1.62.0 + 1.63.0, CP2K 4.1, GSL 2.3, PLUMED 2.3.0, Qt5 5.7.1, WRF 3.8, WPS 3.8, Yade 2016.06a, zlib 1.2.11 - various enhancements, including: - update FFTW 3.3.5 easyconfigs to use FFTW easyblock & enable running of tests (#3985) - - adding channel to perl-app-cpanminus (#4012) - add FME extensions (+ deps) in R 3.3.1 easyconfigs (#4063) - various bug fixes, including: - add libxml2 dependency on HDF5 (#3759) - remove unnecessary dependency in libmatheval (#3988) - fix permissions on SWASH binaries (#4003) + - add conda-forge channel to perl-app-cpanminus (#4012) - add missing deps (libpthread-stubs, libpciaccess) to libdrm 2.4.70 (#4032) - modloadmsg style fixes in multiple easyconfigs (#4035) - - fix ImageJ version (1.51i rather than 1.5.1i) (#4062) - include X11 as dep for Molden (#4082) - remove incorrect definition for $ROSETTA3_DB, now (correctly) defined via Rosetta easyblock (#4083) - fix source URLs for several easyconfigs, including: - - arpack-ng 3.1.3 and 3.1.5, ChIP-Seq 1.5-1, Ghostscript 9.10, 9.14 and 9.16, Git 1.7.12, 1.8.2 and 1.8.3.1, lynx 2.8.7 and MEME 4.8.0 (#4050), - HBase 1.0.2 (#4043), libevent 2.0.22 (#4037), libsodium 1.0.3 (#4046), Maven 3.2.2 and 3.3.3 (#4039), PCC 20131024 (#4044), S-Lang 2.3.0 (#4045), - Spark 1.3.0 (#4041), splitRef 0.0.2 (#4040), zlib 1.2.10 (#4042) + - arpack-ng 3.1.3 + 3.1.5 (#4050), ChIP-Seq 1.5-1 (#4050), Ghostscript 9.10, 9.14 + 9.16 (#4050), + Git 1.7.12, 1.8.2 + 1.8.3.1 (#4050), HBase 1.0.2 (#4043), libevent 2.0.22 (#4037), libsodium 1.0.3 (#4046), + lynx 2.8.7 (#4050), Maven 3.2.2 and 3.3.3 (#4039), MEME 4.8.0 (#4050), PCC 20131024 (#4044), S-Lang 2.3.0 (#4045), + Spark 1.3.0 (#4041), splitRef 0.0.2 (#4040) v3.0.2 (December 22nd 2016) diff --git a/setup.py b/setup.py index 350d5c333c..a3f5efb8ac 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.0.2' +VERSION = '3.1.0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 56d9163978843a201930d0e1feeca6b337013a14 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Feb 2017 11:16:30 +0100 Subject: [PATCH 0377/1311] also mention foss/2017a and intel/2017a in EB v3.1.0 release notes --- RELEASE_NOTES | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index a293eb1659..a240d6d9d8 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -10,6 +10,7 @@ v3.1.0 (February 3rd 2017) -------------------------- feature release +- added easyconfigs for foss/2017a and intel/2017a common toolchains (#3968, #3969) - added example easyconfig files for 16 new software packages: - ack (#3983), cclib (#4065), ConnectomeWorkbench (#3411), GroIMP (#3994), hyperspy (#3991), I-TASSER (#1216), ImageJ (#4023, #4062), libconfig (#4051), libspatialindex (#4002), mahotas (#3990), Minia (#3949), muParser (#4007), -- GitLab From 5fcb829872dfb476fdd3c7fc0a2ef897b43a65bc Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Thu, 2 Feb 2017 14:53:34 +0000 Subject: [PATCH 0378/1311] Added MCR 2013b, 2014b, 2015b, 2016b with Java 1.8.0_121 as dependency --- easybuild/easyconfigs/m/MCR/MCR-R2013b.eb | 18 ++++++++++++++++++ easybuild/easyconfigs/m/MCR/MCR-R2014b.eb | 18 ++++++++++++++++++ easybuild/easyconfigs/m/MCR/MCR-R2015b.eb | 18 ++++++++++++++++++ easybuild/easyconfigs/m/MCR/MCR-R2016b.eb | 18 ++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 easybuild/easyconfigs/m/MCR/MCR-R2013b.eb create mode 100644 easybuild/easyconfigs/m/MCR/MCR-R2014b.eb create mode 100644 easybuild/easyconfigs/m/MCR/MCR-R2015b.eb create mode 100644 easybuild/easyconfigs/m/MCR/MCR-R2016b.eb diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb b/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb new file mode 100644 index 0000000000..ea139590d9 --- /dev/null +++ b/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb @@ -0,0 +1,18 @@ +name = 'MCR' +version = 'R2013b' + +homepage = 'http://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [ + 'http://www.mathworks.com/supportfiles/MCR_Runtime/%(version)s/', +] +sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] + +dependencies = [('Java', '1.8.0_121')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2014b.eb b/easybuild/easyconfigs/m/MCR/MCR-R2014b.eb new file mode 100644 index 0000000000..1aaf919350 --- /dev/null +++ b/easybuild/easyconfigs/m/MCR/MCR-R2014b.eb @@ -0,0 +1,18 @@ +name = 'MCR' +version = 'R2014b' + +homepage = 'http://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [ + 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', +] +sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] + +dependencies = [('Java', '1.8.0_121')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2015b.eb b/easybuild/easyconfigs/m/MCR/MCR-R2015b.eb new file mode 100644 index 0000000000..02cf05532e --- /dev/null +++ b/easybuild/easyconfigs/m/MCR/MCR-R2015b.eb @@ -0,0 +1,18 @@ +name = 'MCR' +version = 'R2015b' + +homepage = 'http://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [ + 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', +] +sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] + +dependencies = [('Java', '1.8.0_121')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2016b.eb b/easybuild/easyconfigs/m/MCR/MCR-R2016b.eb new file mode 100644 index 0000000000..78ab492fb8 --- /dev/null +++ b/easybuild/easyconfigs/m/MCR/MCR-R2016b.eb @@ -0,0 +1,18 @@ +name = 'MCR' +version = 'R2016b' + +homepage = 'http://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [ + 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', +] +sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] + +dependencies = [('Java', '1.8.0_121')] + +moduleclass = 'math' -- GitLab From 2247e3141717a397e142124699e715c75eb94f4d Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Thu, 2 Feb 2017 14:16:51 +0000 Subject: [PATCH 0379/1311] Added Java 1.8.0_121, which is the latest version --- easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb diff --git a/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb b/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb new file mode 100644 index 0000000000..f95da7cf07 --- /dev/null +++ b/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb @@ -0,0 +1,15 @@ +name = 'Java' +version = '1.8.0_121' + +homepage = 'http://java.com/' +description = """Java Platform, Standard Edition (Java SE) lets you develop and deploy + Java applications on desktops and servers.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download the tar.gz directly from http://www.oracle.com/technetwork/java/javase/downloads/index.html +(vp, vs) = version.split('_') +altver = '%su%s' % (vp.split('.')[1], vs) +sources = ['jdk-%s-linux-x64.tar.gz' % altver] + +moduleclass = 'lang' -- GitLab From 4fedf3d3a72e444fc495475e8902d5fce325e111 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Feb 2017 15:29:18 +0100 Subject: [PATCH 0380/1311] adding easyconfigs: EasyBuild-3.1.0.eb --- .../e/EasyBuild/EasyBuild-3.1.0.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.0.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.0.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.0.eb new file mode 100644 index 0000000000..606f9a318d --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.0.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.1.0' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/94/54/611cb71c61aae9833ee87e7d86768e9a86b411afe9f608c15e267fe7a986', + # vsc-base + 'https://pypi.python.org/packages/da/90/ee40b1a6a5bfed24139042c737500a9b45db0373a6735e76481fc860fe37', + # easybuild-framework + 'https://pypi.python.org/packages/fd/dd/83d8ef6a981c9e953f523328d5fba23b1be84fb7640a2c1d8b8e66b07102', + # easybuild-easyblocks + 'https://pypi.python.org/packages/73/0f/4681ae27ac06deac1225efc807f02c2305259e6b60e6037716a3f2f327d3', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/fa/4c/a83e7d70564c883e6a23cfcb4e0e4fea94da0947cc970652eda63f9f9765', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.22.tar.gz', + 'vsc-base-2.5.7.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From bfecb9916c49d2f19d942dcb4d5a9d6153fac0ba Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Fri, 3 Feb 2017 16:40:02 +0000 Subject: [PATCH 0381/1311] Allow intel 2017 to compile --- .../b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb | 20 +++++++++++++++++++ easybuild/easyconfigs/b/Bowtie/void2int.patch | 13 ++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb create mode 100644 easybuild/easyconfigs/b/Bowtie/void2int.patch diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb new file mode 100644 index 0000000000..500679eb6f --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb @@ -0,0 +1,20 @@ +# Modified from existing version by: +# Robert Schmidt +# Ottawa Hospital Research Institute - Bioinformatics Team +name = 'Bowtie' +version = '1.1.2' + +homepage = 'http://bowtie-bio.sourceforge.net/index.shtml' +description = """Bowtie is an ultrafast, memory-efficient short read aligner. +It aligns short DNA sequences (reads) to the human genome. +""" + +toolchain = {'name': 'iimkl', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = ['%(namelower)s-%(version)s-src.zip'] +source_urls = ['http://download.sourceforge.net/bowtie-bio/'] + +patches = ['int64typedef.patch','void2int.patch'] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie/void2int.patch b/easybuild/easyconfigs/b/Bowtie/void2int.patch new file mode 100644 index 0000000000..80b76591d4 --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie/void2int.patch @@ -0,0 +1,13 @@ +--- processor_support.h.orig 2017-02-02 21:48:42.436432756 +0000 ++++ processor_support.h 2017-02-02 21:48:54.419309743 +0000 +@@ -44,8 +44,8 @@ + + try { + #if ( defined(USING_INTEL_COMPILER) || defined(USING_MSC_COMPILER) ) +- __cpuid((void *) ®s,0); // test if __cpuid() works, if not catch the exception +- __cpuid((void *) ®s,0x1); // POPCNT bit is bit 23 in ECX ++ __cpuid((int *) ®s,0); // test if __cpuid() works, if not catch the exception ++ __cpuid((int *) ®s,0x1); // POPCNT bit is bit 23 in ECX + #elif defined(USING_GCC_COMPILER) + __get_cpuid(0x1, ®s.EAX, ®s.EBX, ®s.ECX, ®s.EDX); + #else -- GitLab From cfcada98291a92ba8989119892999eb990644080 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sun, 5 Feb 2017 23:04:31 +0100 Subject: [PATCH 0382/1311] adding easyconfigs: Armadillo-7.600.2-foss-2016b-Python-2.7.12.eb, arpack-ng-3.4.0-foss-2016b.eb --- ...adillo-7.600.2-foss-2016b-Python-2.7.12.eb | 23 +++++++++++++++++ .../a/arpack-ng/arpack-ng-3.4.0-foss-2016b.eb | 25 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/a/Armadillo/Armadillo-7.600.2-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/a/Armadillo/Armadillo-7.600.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/Armadillo/Armadillo-7.600.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..8f548fef7d --- /dev/null +++ b/easybuild/easyconfigs/a/Armadillo/Armadillo-7.600.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'Armadillo' +version = '7.600.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://arma.sourceforge.net/' +description = """Armadillo is an open-source C++ linear algebra library (matrix maths) aiming towards + a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, + as well as a subset of trigonometric and statistics functions.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = ['http://sourceforge.net/projects/arma/files'] + +dependencies = [ + ('Boost', '1.61.0', versionsuffix), + ('arpack-ng', '3.4.0'), + ('Python', '2.7.12'), +] + +builddependencies = [('CMake', '3.6.2')] + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2016b.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2016b.eb new file mode 100644 index 0000000000..9320f188ec --- /dev/null +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'arpack-ng' +version = '3.4.0' + +homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/' +description = """ARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "sh bootstrap && " +configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' + +sanity_check_paths = { + 'files': ["lib/libarpack.a", "lib/libarpack.so"], + 'dirs': [] +} + +moduleclass = 'numlib' -- GitLab From eddb755218b40bd824e560f71a8579c0316a8fc7 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sun, 5 Feb 2017 23:46:40 +0100 Subject: [PATCH 0383/1311] adding easyconfigs: protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb, protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb, protobuf-3.2.0-foss-2016b.eb, Tensorflow-0.12.1-foss-2016b-Python-2.7.12.eb, Tensorflow-0.12.1-foss-2016b-Python-3.5.2.eb --- ...f-python-3.2.0-foss-2016b-Python-2.7.12.eb | 29 +++++++++++++++ ...uf-python-3.2.0-foss-2016b-Python-3.5.2.eb | 29 +++++++++++++++ .../p/protobuf/protobuf-3.2.0-foss-2016b.eb | 23 ++++++++++++ ...sorflow-0.12.1-foss-2016b-Python-2.7.12.eb | 35 +++++++++++++++++++ ...nsorflow-0.12.1-foss-2016b-Python-3.5.2.eb | 35 +++++++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb create mode 100755 easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-foss-2016b.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..25a3d48ede --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.2.0' +versionsuffix= '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf' } + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..a88f02f65a --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.2.0' +versionsuffix= '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf' } + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-foss-2016b.eb b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-foss-2016b.eb new file mode 100755 index 0000000000..f6b756484f --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf/protobuf-3.2.0-foss-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'protobuf' +version = '3.2.0' + +homepage = 'https://github.com/google/protobuf/' +description = """Google Protocol Buffers""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s/'] +sources = [SOURCE_TAR_GZ] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "./autogen.sh && " + +sanity_check_paths = { + 'files': ['bin/protoc', 'lib/libprotobuf.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..b94ca618c9 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '0.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'foss', 'version': '2016b'} + +pymaj = '2' +pymin = '7' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/7e/c6/837f4e249aae5c86a632eaaa9779e601eca1487772f8ad75c347bf9e813f/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['c98fd26b79a97cc490c942bbafed5462'] + +dependencies = [ + ('Python', '%s.%s.12' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-3.5.2.eb new file mode 100755 index 0000000000..d8b2947422 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-0.12.1-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '0.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'foss', 'version': '2016b'} + +pymaj = '3' +pymin = '5' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/e5/5c/56e6522fdcd6f8739dcbc4de62e8b0040e141785bb42e5b53a83b0ba3e58/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)sm-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['c6e3ba8579754f37d37be26e863f9d95'] + +dependencies = [ + ('Python', '%s.%s.2' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From 92797f67325c275d17e41b0927a882b744761024 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Mon, 6 Feb 2017 10:29:09 +0100 Subject: [PATCH 0384/1311] adding easyconfigs: DIAMOND-0.8.35-goolf-1.7.20.eb --- .../d/DIAMOND/DIAMOND-0.8.35-goolf-1.7.20.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.8.35-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.8.35-goolf-1.7.20.eb b/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.8.35-goolf-1.7.20.eb new file mode 100644 index 0000000000..19f96d592f --- /dev/null +++ b/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.8.35-goolf-1.7.20.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "CMakeMake" + +name = 'DIAMOND' +version = '0.8.35' + +homepage = 'https://github.com/bbuchfink/diamond' +description = """Accelerated BLAST compatible local sequence aligner""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/bbuchfink/diamond/archive/'] +sources = ['v%(version)s.tar.gz'] + +separate_build_dir = True + +builddependencies = [('CMake', '3.4.3')] + +dependencies = [ + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['bin/diamond'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 511de25f91be78fdd24e8e7fe913e3b4dce1c4c6 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Wed, 8 Feb 2017 13:41:32 +0100 Subject: [PATCH 0385/1311] Add patch to work around build failures with GCC 6 --- .../pkg-config-0.29.1-foss-2017a.eb | 30 +++++++++++++++++++ .../pkg-config/pkg-config-0.29.1_gcc-6.patch | 22 ++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2017a.eb create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1_gcc-6.patch diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2017a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2017a.eb new file mode 100644 index 0000000000..b3ddd790cb --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-foss-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] +patches = [ + 'pkg-config-%(version)s_gcc-6.patch', +] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1_gcc-6.patch b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1_gcc-6.patch new file mode 100644 index 0000000000..a83002f30d --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1_gcc-6.patch @@ -0,0 +1,22 @@ +Work around for build failures with GCC 6 backported from upstream glib. +See https://bugzilla.gnome.org/761550 for details. + +diff -Nrup pkg-config-0.29.1.orig/glib/glib/gdate.c pkg-config-0.29.1/glib/glib/gdate.c +--- pkg-config-0.29.1.orig/glib/glib/gdate.c 2016-01-24 22:51:38.000000000 +0100 ++++ pkg-config-0.29.1/glib/glib/gdate.c 2017-02-07 17:34:54.372617599 +0100 +@@ -2439,6 +2439,9 @@ win32_strftime_helper (const GDate * + * + * Returns: number of characters written to the buffer, or 0 the buffer was too small + */ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ + gsize + g_date_strftime (gchar *s, + gsize slen, +@@ -2549,3 +2552,5 @@ g_date_strftime (gchar *s, + return retval; + #endif + } ++ ++#pragma GCC diagnostic pop -- GitLab From c3def62161b75ed733478aadd83675e4bfbcf79b Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Wed, 8 Feb 2017 14:27:48 +0100 Subject: [PATCH 0386/1311] smoldyn --- .../s/Smoldyn/Smoldyn-2.48-foss-2016a.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb diff --git a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb new file mode 100644 index 0000000000..71310f26f2 --- /dev/null +++ b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb @@ -0,0 +1,39 @@ +easyblock = 'CMakeMake' + +name = 'Smoldyn' +version = '2.48' + +homepage = 'http://www.smoldyn.org/' +description = """ +Smoldyn is a computer program for cell-scale biochemical simulations. It simulates each molecule of interest individually to capture natural stochasticity and to yield nanometer-scale spatial resolution. It treats other molecules implicitly, enabling it to simulate hundreds of thousands of molecules over several minutes of real time. Simulated molecules diffuse, react, are confined by surfaces, and bind to membranes much as they would in a real biological system. +""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['http://www.smoldyn.org/'] +sources = ['smoldyn-%(version)s.tgz'] + +builddependencies = [ + ('CMake', '3.4.3'), + ('LibTIFF','4.0.6'), + ('zlib', '1.2.8'), + ('freeglut', '3.0.0'), + ('libXmu', '1.1.2'), + ('libXi', '1.7.6') +] + +dependencies = [ + ('LibTIFF','4.0.6'), + ('zlib', '1.2.8'), + ('freeglut', '3.0.0'), + ('libXmu', '1.1.2'), + ('libXi', '1.7.6') +] + + +sanity_check_paths = { + 'files': ["bin/smoldyn"], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 9943419d1751374d5dce9fb3c799dbc0b17b59ab Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 9 Feb 2017 10:17:10 +0100 Subject: [PATCH 0387/1311] Add Bison and gettext as build dependencies --- easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb | 2 ++ easybuild/easyconfigs/x/X11/X11-20160819-foss-2016b.eb | 2 ++ easybuild/easyconfigs/x/X11/X11-20160819-intel-2016b.eb | 2 ++ 3 files changed, 6 insertions(+) diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb index ca30f6a696..94c5bfdb69 100644 --- a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb +++ b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2015a.eb @@ -18,6 +18,8 @@ source_urls = [ builddependencies = [ ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.4'), ('pkg-config', '0.29.1'), ] dependencies = [ diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2016b.eb b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2016b.eb index c44e65c206..fbaa5cf2db 100644 --- a/easybuild/easyconfigs/x/X11/X11-20160819-foss-2016b.eb +++ b/easybuild/easyconfigs/x/X11/X11-20160819-foss-2016b.eb @@ -18,6 +18,8 @@ source_urls = [ builddependencies = [ ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8'), ('pkg-config', '0.29.1'), ] dependencies = [ diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-intel-2016b.eb b/easybuild/easyconfigs/x/X11/X11-20160819-intel-2016b.eb index 556bda9f6e..586cdcf5d6 100644 --- a/easybuild/easyconfigs/x/X11/X11-20160819-intel-2016b.eb +++ b/easybuild/easyconfigs/x/X11/X11-20160819-intel-2016b.eb @@ -18,6 +18,8 @@ source_urls = [ builddependencies = [ ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8'), ('pkg-config', '0.29.1'), ] dependencies = [ -- GitLab From 1e581b8020df5f7d38333ea148b710d93f38d61f Mon Sep 17 00:00:00 2001 From: RvDijk Date: Thu, 9 Feb 2017 11:38:22 +0100 Subject: [PATCH 0388/1311] Emacs with foss2016a --- .../e/Emacs/Emacs-25.1-foss-2016a.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb diff --git a/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb b/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb new file mode 100644 index 0000000000..3b50903d7f --- /dev/null +++ b/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'Emacs' +version = '25.1' + +homepage = 'http://www.gnu.org/software/emacs/' +description = """GNU Emacs is an extensible, customizable text editor—and more. + At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language + with extensions to support text editing.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +osdependencies = [ + ('ncurses'), +] + +dependencies = [ + ('zlib', '1.2.8'), + ('libpng', '1.6.23'), + ('libjpeg-turbo', '1.5.0'), + ('ncurses', '6.0'), +] + +configopts = '--with-gif=no --with-tiff=no --with-x-toolkit=no --with-xpm=no ' + +sanity_check_paths = { + 'files': ["bin/emacs", "bin/emacs-%(version)s", "bin/emacsclient", "bin/etags"], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 97c566f492c41b47976aedb88f1ffe5ad77c38d3 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Thu, 9 Feb 2017 12:51:50 +0100 Subject: [PATCH 0389/1311] rm builddep --- easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb b/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb index 3b50903d7f..bc3043a68b 100644 --- a/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb +++ b/easybuild/easyconfigs/e/Emacs/Emacs-25.1-foss-2016a.eb @@ -13,10 +13,6 @@ toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] source_urls = [GNU_SOURCE] -osdependencies = [ - ('ncurses'), -] - dependencies = [ ('zlib', '1.2.8'), ('libpng', '1.6.23'), -- GitLab From 3b9db641f233dbf157d15c2aa51f79d20846ca0b Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 9 Feb 2017 13:29:58 +0100 Subject: [PATCH 0390/1311] libdrm: clean up dependencies --- easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb | 2 -- easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb | 2 -- 2 files changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb index bd2875fe53..5d9e8ac938 100644 --- a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-foss-2016b.eb @@ -13,8 +13,6 @@ toolchain = {'name': 'foss', 'version': '2016b'} dependencies = [ ('X11', '20160819'), - ('libpthread-stubs', '0.3'), - ('libpciaccess', '0.13.4'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb index 1f6c3d5a42..9fb07a2954 100644 --- a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.70-intel-2016b.eb @@ -13,8 +13,6 @@ toolchain = {'name': 'intel', 'version': '2016b'} dependencies = [ ('X11', '20160819'), - ('libpthread-stubs', '0.3'), - ('libpciaccess', '0.13.4'), ] sanity_check_paths = { -- GitLab From bcfcb50c38b30a3cb613d1d3c97cc061d8a5db29 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 9 Feb 2017 12:52:18 +0000 Subject: [PATCH 0391/1311] update for non cray --- easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb | 30 +++++++++++++++++++ .../easyconfigs/j/Java/Java-1.8.0_121.eb | 15 ++++++++++ 2 files changed, 45 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb create mode 100644 easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb diff --git a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb new file mode 100644 index 0000000000..81fd376a8e --- /dev/null +++ b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb @@ -0,0 +1,30 @@ +# @author: Robert Schmidt (OHRI) +# @author: Guilherme Peretti-Pezzi (CSCS) + +easyblock = "CmdCp" + +name = 'Bazel' +version = '0.4.4' + +homepage = 'http://bazel.io/' +description = """Bazel is a build tool that builds code quickly and reliably. +It is used to build the majority of Google's software.""" + +toolchain = {'name': 'dummy', 'version': ''} + +dependencies = [ + ('Java', '1.8.0_121'), +] + +sources = ['%(namelower)s-%(version)s-dist.zip'] +source_urls = ['https://github.com/bazelbuild/bazel/releases/download/%(version)s'] +cmds_map = [('.*', "JAVA_VERSION=1.8 CC=gcc CXX=g++ ./compile.sh")] + +files_to_copy = [(['output/bazel'], 'bin')] + +sanity_check_paths={ + 'files': ['bin/bazel'], + 'dirs': ['bin'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb b/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb new file mode 100644 index 0000000000..2782d792e8 --- /dev/null +++ b/easybuild/easyconfigs/j/Java/Java-1.8.0_121.eb @@ -0,0 +1,15 @@ +name = 'Java' +version = "1.8.0_121" + +homepage = 'http://java.com/' +description = """Java Platform, Standard Edition (Java SE) lets you develop and deploy + Java applications on desktops and servers.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download the tar.gz directly from http://www.oracle.com/technetwork/java/javase/downloads/index.html +(vp, vs) = version.split('_') +altver = '%su%s' % (vp.split('.')[1], vs) +sources = ['jdk-%s-linux-x64.tar.gz' % altver] + +moduleclass = 'lang' -- GitLab From 3f6c9e9493b7048cc08631e07b673f8686efdf62 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 9 Feb 2017 14:43:37 +0100 Subject: [PATCH 0392/1311] adding easyconfigs: GMP-6.1.2-foss-2016b.eb --- .../easyconfigs/g/GMP/GMP-6.1.2-foss-2016b.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/g/GMP/GMP-6.1.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.1.2-foss-2016b.eb b/easybuild/easyconfigs/g/GMP/GMP-6.1.2-foss-2016b.eb new file mode 100644 index 0000000000..8f949a1a92 --- /dev/null +++ b/easybuild/easyconfigs/g/GMP/GMP-6.1.2-foss-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'GMP' +version = '6.1.2' + +homepage = 'http://gmplib.org/' +description = """GMP is a free library for arbitrary precision arithmetic, +operating on signed integers, rational numbers, and floating point numbers. """ + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'precise': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ftp.gnu.org/gnu/gmp'] + +builddependencies = [ + ('Autotools', '20150215'), +] + +# enable C++ interface +configopts = '--enable-cxx' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libgmp.%s' % SHLIB_EXT, 'include/gmp.h'], + 'dirs': [], +} + +moduleclass = 'math' -- GitLab From a7ea9016be0d7c6c077f075513fbd31f27e4835d Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Fri, 10 Feb 2017 11:09:29 +0100 Subject: [PATCH 0393/1311] {vis}[intel/2016b] Ghostscript 9.20 use external freetype, libpng, jpeg, and zlib (REVIEW) --- .../easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb index 2238d98b96..d3f76e106a 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb @@ -24,6 +24,9 @@ dependencies = [ ('LibTIFF', '4.0.6'), ] +#Do not use local copies of zlib, jpeg, freetype, and png +preconfigopts = "mv zlib zlib.no && mv jpeg jpeg.no && mv freetype freetype.no && mv libpng libpng.no &&" + configopts = "--with-system-libtiff --enable-dynamic" moduleclass = 'tools' -- GitLab From ee0a56a7b7adb71c4e776ea17e9a17446e6fa064 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Fri, 10 Feb 2017 11:38:17 +0100 Subject: [PATCH 0394/1311] {vis}[foss/2016b] graphviz 0.5.1 w/ Python 2.7.12 (REVIEW) --- .../c/Clang/Clang-3.8.1-foss-2016b.eb | 49 ++++++++++++++ .../c/cairo/cairo-1.14.6-foss-2016b.eb | 40 +++++++++++ ...GObject-Introspection-1.49.1-foss-2016b.eb | 47 +++++++++++++ .../Ghostscript-9.20-foss-2016b.eb | 32 +++++++++ .../g/Graphviz/Graphviz-2.38.0-foss-2016b.eb | 67 +++++++++++++++++++ ...graphviz-0.5.1-foss-2016b-Python-2.7.12.eb | 25 +++++++ .../h/HarfBuzz/HarfBuzz-1.3.1-foss-2016b.eb | 34 ++++++++++ .../p/Pango/Pango-1.40.3-foss-2016b.eb | 31 +++++++++ .../p/pixman/pixman-0.34.0-foss-2016b.eb | 20 ++++++ 9 files changed, 345 insertions(+) create mode 100644 easybuild/easyconfigs/c/Clang/Clang-3.8.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/c/cairo/cairo-1.14.6-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.49.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/graphviz/graphviz-0.5.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/p/Pango/Pango-1.40.3-foss-2016b.eb create mode 100644 easybuild/easyconfigs/p/pixman/pixman-0.34.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/Clang/Clang-3.8.1-foss-2016b.eb b/easybuild/easyconfigs/c/Clang/Clang-3.8.1-foss-2016b.eb new file mode 100644 index 0000000000..bc4ee73735 --- /dev/null +++ b/easybuild/easyconfigs/c/Clang/Clang-3.8.1-foss-2016b.eb @@ -0,0 +1,49 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2013-2015 Dmitri Gribenko, Ward Poelmans +# Authors:: Dmitri Gribenko +# Authors:: Ward Poelmans +# License:: GPLv2 or later, MIT, three-clause BSD. +# $Id$ +## + +name = "Clang" +version = "3.8.1" + +homepage = "http://clang.llvm.org/" +description = """C, C++, Objective-C compiler, based on LLVM. Does not + include C++ standard library -- use libstdc++ from GCC.""" + +# Clang also depends on libstdc++ during runtime, but this dependency is +# already specified as the toolchain. +toolchain = {'name': 'foss', 'version': '2016b'} +# Do not set optarch to True: it will cause the build to fail +toolchainopts = {'optarch': False} + +source_urls = ["http://llvm.org/releases/%(version)s"] +sources = [ + "llvm-%(version)s.src.tar.xz", + "cfe-%(version)s.src.tar.xz", + "compiler-rt-%(version)s.src.tar.xz", + "polly-%(version)s.src.tar.xz", + "openmp-%(version)s.src.tar.xz", +] + +dependencies = [ + ('GMP', '6.1.1'), +] + +builddependencies = [ + ('CMake', '3.6.1'), + ('Python', '2.7.12'), + ('libxml2', '2.9.4'), +] + +assertions = True + +usepolly = True + +build_targets = ['X86'] + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/c/cairo/cairo-1.14.6-foss-2016b.eb b/easybuild/easyconfigs/c/cairo/cairo-1.14.6-foss-2016b.eb new file mode 100644 index 0000000000..39aaca6d60 --- /dev/null +++ b/easybuild/easyconfigs/c/cairo/cairo-1.14.6-foss-2016b.eb @@ -0,0 +1,40 @@ +easyblock = 'ConfigureMake' + +name = 'cairo' +version = '1.14.6' + +homepage = 'http://cairographics.org' +description = """Cairo is a 2D graphics library with support for multiple output devices. + Currently supported output targets include the X Window System (via both Xlib and XCB), Quartz, Win32, image buffers, + PostScript, PDF, and SVG file output. Experimental backends include OpenGL, BeOS, OS/2, and DirectFB""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://cairographics.org/releases/'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libpng', '1.6.24'), + ('freetype', '2.6.5'), + ('pixman', '0.34.0'), + ('expat', '2.2.0'), + ('GLib', '2.49.5'), + ('X11', '20160819'), +] + +# disable symbol lookup, which requires -lbfd, to avoid link issues with (non-PIC) libiberty.a provided by GCC +configopts = "--enable-symbol-lookup=no --enable-gobject=yes --enable-svg=yes --enable-tee=yes --enable-xlib-xcb " + +sanity_check_paths = { + 'files': ['bin/cairo-trace', 'lib/cairo/libcairo-trace.so', 'lib/cairo/libcairo-trace.a', + 'lib/libcairo.a', 'lib/libcairo-gobject.a', 'lib/libcairo-script-interpreter.a', + 'lib/libcairo-gobject.so', 'lib/libcairo-script-interpreter.so', 'lib/libcairo.so'] + + ['include/cairo/cairo%s.h' % x for x in ['', '-deprecated', '-features', '-ft', '-gobject', '-pdf', '-ps', + '-script', '-script-interpreter', '-svg', '-version', '-xcb', + '-xlib', '-xlib-xrender']], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.49.1-foss-2016b.eb b/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.49.1-foss-2016b.eb new file mode 100644 index 0000000000..76281fb06e --- /dev/null +++ b/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.49.1-foss-2016b.eb @@ -0,0 +1,47 @@ +easyblock = 'ConfigureMake' + +name = 'GObject-Introspection' +version = '1.49.1' + +homepage = 'https://wiki.gnome.org/GObjectIntrospection/' +description = """GObject introspection is a middleware layer between C libraries + (using GObject) and language bindings. The C library can be scanned at + compile time and generate a metadata file, in addition to the actual + native C library. Then at runtime, language bindings can read this + metadata and automatically provide bindings to call into the C library.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('Python', '2.7.12'), + ('GLib', '2.49.5'), + ('libffi', '3.2.1'), +] + +builddependencies = [ + ('Autotools', '20150215'), + ('flex', '2.6.0'), + ('Bison', '3.0.4'), + ('cairo', '1.14.6'), +] + +preconfigopts = "env GI_SCANNER_DISABLE_CACHE=true " + +# avoid using hard-coded path to 'python' in shebang of scripts +buildopts = "PYTHON=python" + +modextrapaths = { + 'GI_TYPELIB_PATH': 'share', + 'XDG_DATA_DIRS': 'share', +} + +sanity_check_paths = { + 'files': ['bin/g-ir-%s' % x for x in ['annotation-tool', 'compiler', 'generate', 'scanner']] + + ['lib/libgirepository-1.0.%s' % x for x in ['so', 'a']], + 'dirs': ['include', 'share'] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb new file mode 100644 index 0000000000..7305497c37 --- /dev/null +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Ghostscript' +version = '9.20' + +homepage = 'http://ghostscript.com' +description = """Ghostscript is a versatile processor for PostScript data with the ability to render PostScript to + different targets. It used to be part of the cups printing stack, but is no longer used for that.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/"] +sources = ['ghostscript-%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('libpng', '1.6.24'), + ('freetype', '2.6.5'), + ('libjpeg-turbo', '1.5.0'), + ('expat', '2.2.0'), + ('GLib', '2.49.5'), + ('cairo', '1.14.6'), + ('LibTIFF', '4.0.6'), +] + +#Do not use local copies of zlib, jpeg, freetype, and png +preconfigopts = "mv zlib zlib.no && mv jpeg jpeg.no && mv freetype freetype.no && mv libpng libpng.no &&" + +configopts = "--with-system-libtiff --enable-dynamic" + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb b/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb new file mode 100644 index 0000000000..0454227509 --- /dev/null +++ b/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb @@ -0,0 +1,67 @@ +easyblock = 'ConfigureMake' + +name = 'Graphviz' +version = '2.38.0' + +homepage = 'http://www.graphviz.org/' +description = """Graphviz is open source graph visualization software. Graph visualization + is a way of representing structural information as diagrams of + abstract graphs and networks. It has important applications in networking, + bioinformatics, software engineering, database and web design, machine learning, + and in visual interfaces for other technical domains.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.graphviz.org/pub/graphviz/stable/SOURCES/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('cairo', '1.14.6'), + ('expat', '2.2.0'), + ('freetype', '2.6.5'), + ('Ghostscript', '9.20'), + ('GTS', '0.7.6'), + ('Java', '1.8.0_92', '', True), + ('libpng', '1.6.24'), + ('Pango', '1.40.3'), + ('Perl', '5.24.0'), + ('Qt', '4.8.7'), + ('Tcl', '8.6.5'), + ('zlib', '1.2.8'), +] + +builddependencies = [ + ('M4', '1.4.17'), + ('SWIG', '3.0.10', '-Python-2.7.12'), +] + +#patches = [ +# 'Graphviz-2.38.0_icc_vmalloc.patch', +# 'Graphviz-2.38.0_icc_sfio.patch', +#] + +preconfigopts = "sed -i 's/install-data-hook$//g' tclpkg/Makefile.in && " +configopts = '--enable-guile=no --enable-lua=no --enable-ocaml=no ' +configopts += '--enable-r=no --enable-ruby=no ' + +prebuildopts = 'qmake -o cmd/gvedit/qMakefile cmd/gvedit/gvedit.pro && ' + +sanity_check_paths = { + 'files': ['bin/cluster', 'bin/dot', 'bin/gvmap', + 'lib/libcdt.%s' % SHLIB_EXT, 'lib/libgvc.%s' % SHLIB_EXT, 'lib/libxdot.%s' % SHLIB_EXT], + 'dirs': ['include', 'lib/graphviz'] +} + +sanity_check_commands = [ + ("test ! -d $EBROOTTCL/lib/*/graphviz", ''), + ("test ! -d $EBROOTTCL/lib64/*/graphviz", ''), +] + +modextrapaths = { + 'PYTHONPATH': 'lib/graphviz/python', + 'CLASSPATH': 'lib/graphviz/java/org/graphviz', + 'LD_LIBRARY_PATH': 'lib/graphviz/java', + 'TCLLIBPATH': 'lib/graphviz/tcl', +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/graphviz/graphviz-0.5.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/graphviz/graphviz-0.5.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..7290bfdd17 --- /dev/null +++ b/easybuild/easyconfigs/g/graphviz/graphviz-0.5.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'graphviz' +version = '0.5.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/graphviz' +description = """Simple Python interface for Graphviz""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_ZIP] + +dependencies = [ + ('Python', '2.7.12'), + ('Graphviz', '2.38.0'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-foss-2016b.eb b/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-foss-2016b.eb new file mode 100644 index 0000000000..28916e2a3a --- /dev/null +++ b/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'HarfBuzz' +version = '1.3.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/HarfBuzz' +description = """HarfBuzz is an OpenType text shaping engine.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.freedesktop.org/software/harfbuzz/release/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('GLib', '2.49.5'), + ('cairo', '1.14.6'), + ('freetype', '2.6.5'), +] + +builddependencies = [('GObject-Introspection', '1.49.1')] + +configopts = "--enable-introspection=yes --with-gobject=yes --enable-static --enable-shared --with-cairo " + +modextrapaths = { + 'GI_TYPELIB_PATH': 'share', + 'XDG_DATA_DIRS': 'share', +} + +sanity_check_paths = { + 'files': ['lib/libharfbuzz.%s' % SHLIB_EXT, 'bin/hb-view'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/Pango/Pango-1.40.3-foss-2016b.eb b/easybuild/easyconfigs/p/Pango/Pango-1.40.3-foss-2016b.eb new file mode 100644 index 0000000000..d9bd112b39 --- /dev/null +++ b/easybuild/easyconfigs/p/Pango/Pango-1.40.3-foss-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'Pango' +version = '1.40.3' + +homepage = 'http://www.pango.org/' +description = """Pango is a library for laying out and rendering of text, with an emphasis on internationalization. +Pango can be used anywhere that text layout is needed, though most of the work on Pango so far has been done in the +context of the GTK+ widget toolkit. Pango forms the core of text and font handling for GTK+-2.x.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('X11', '20160819'), + ('GLib', '2.49.5'), + ('cairo', '1.14.6'), + ('HarfBuzz', '1.3.1'), +] + +builddependencies = [('GObject-Introspection', '1.49.1')] + +configopts = "--disable-silent-rules --enable-introspection=yes --enable-static --enable-shared " + +modextrapaths = { + 'XDG_DATA_DIRS': 'share', +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/pixman/pixman-0.34.0-foss-2016b.eb b/easybuild/easyconfigs/p/pixman/pixman-0.34.0-foss-2016b.eb new file mode 100644 index 0000000000..9306c63805 --- /dev/null +++ b/easybuild/easyconfigs/p/pixman/pixman-0.34.0-foss-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = "pixman" +version = '0.34.0' + +homepage = 'http://www.pixman.org/' +description = """Pixman is a low-level software library for pixel manipulation, providing features such as image +compositing and trapezoid rasterization. Important users of pixman are the cairo graphics library and the X server.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://cairographics.org/releases/'] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['lib/libpixman-1.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'vis' -- GitLab From 9c3f6772c903d996b6589cfc3c8f24e6c5022af2 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Fri, 10 Feb 2017 12:52:48 +0100 Subject: [PATCH 0395/1311] {vis}[foss/2016b] OpenCV 3.1.0 (REVIEW) --- .../a/ATK/ATK-2.22.0-foss-2016b.eb | 34 ++++++++++ .../f/FFmpeg/FFmpeg-3.1.3-foss-2016b.eb | 32 +++++++++ .../g/GTK+/GTK+-2.24.31-foss-2016b.eb | 25 +++++++ .../Gdk-Pixbuf-2.36.0-foss-2016b.eb | 34 ++++++++++ .../j/JasPer/JasPer-1.900.1-foss-2016b.eb | 21 ++++++ .../o/OpenCV/OpenCV-3.1.0-foss-2016b.eb | 65 +++++++++++++++++++ .../x/x264/x264-20160614-foss-2016b.eb | 27 ++++++++ .../y/Yasm/Yasm-1.3.0-foss-2016b.eb | 31 +++++++++ 8 files changed, 269 insertions(+) create mode 100644 easybuild/easyconfigs/a/ATK/ATK-2.22.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.1.3-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/GTK+/GTK+-2.24.31-foss-2016b.eb create mode 100644 easybuild/easyconfigs/g/Gdk-Pixbuf/Gdk-Pixbuf-2.36.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb create mode 100644 easybuild/easyconfigs/x/x264/x264-20160614-foss-2016b.eb create mode 100644 easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/a/ATK/ATK-2.22.0-foss-2016b.eb b/easybuild/easyconfigs/a/ATK/ATK-2.22.0-foss-2016b.eb new file mode 100644 index 0000000000..357880d140 --- /dev/null +++ b/easybuild/easyconfigs/a/ATK/ATK-2.22.0-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'ATK' +version = '2.22.0' + +homepage = 'https://developer.gnome.org/ATK/stable/' +description = """ + ATK provides the set of accessibility interfaces that are implemented by other + toolkits and applications. Using the ATK interfaces, accessibility tools have + full access to view and control running applications. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('GLib', '2.49.5'), + ('GObject-Introspection', '1.49.1') +] + +configopts = "--enable-introspection=yes" + +modextrapaths = { + 'XDG_DATA_DIRS': 'share', +} + +sanity_check_paths = { + 'files': ['lib/libatk-1.0.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.1.3-foss-2016b.eb b/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.1.3-foss-2016b.eb new file mode 100644 index 0000000000..235a728b8c --- /dev/null +++ b/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.1.3-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'FFmpeg' +version = '3.1.3' + +homepage = 'https://www.ffmpeg.org/' +description = """A complete, cross-platform solution to record, convert and stream audio and video.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ffmpeg.org/releases/'] + +dependencies = [ + ('NASM', '2.12.02'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('x264', '20160614'), + ('X11', '20160819'), +] + +configopts = '--enable-pic --enable-shared --enable-gpl --enable-version3 --enable-nonfree --cc="$CC" --cxx="$CXX" ' +configopts += '--enable-libx264' + +sanity_check_paths = { + 'files': ['bin/ff%s' % x for x in ['mpeg', 'probe', 'server']] + + ['lib/lib%s.%s' % (x, y) for x in ['avdevice', 'avfilter', 'avformat', 'avcodec', 'postproc', + 'swresample', 'swscale', 'avutil'] for y in [SHLIB_EXT, 'a']], + 'dirs': ['include'] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/GTK+/GTK+-2.24.31-foss-2016b.eb b/easybuild/easyconfigs/g/GTK+/GTK+-2.24.31-foss-2016b.eb new file mode 100644 index 0000000000..c33f283106 --- /dev/null +++ b/easybuild/easyconfigs/g/GTK+/GTK+-2.24.31-foss-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'GTK+' +version = '2.24.31' + +homepage = 'https://developer.gnome.org/gtk+/stable/' +description = """ + The GTK+ 2 package contains libraries used for creating graphical user interfaces for applications. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('ATK', '2.22.0'), + ('Gdk-Pixbuf', '2.36.0'), + ('Pango', '1.40.3'), + ('GObject-Introspection', '1.49.1'), +] + +configopts = "--disable-silent-rules --disable-glibtest --enable-introspection=yes --disable-visibility " + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/Gdk-Pixbuf/Gdk-Pixbuf-2.36.0-foss-2016b.eb b/easybuild/easyconfigs/g/Gdk-Pixbuf/Gdk-Pixbuf-2.36.0-foss-2016b.eb new file mode 100644 index 0000000000..0ffa31b3f4 --- /dev/null +++ b/easybuild/easyconfigs/g/Gdk-Pixbuf/Gdk-Pixbuf-2.36.0-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'Gdk-Pixbuf' +version = '2.36.0' + +homepage = 'https://developer.gnome.org/gdk-pixbuf/stable/' +description = """ + The Gdk Pixbuf is a toolkit for image loading and pixel buffer manipulation. + It is used by GTK+ 2 and GTK+ 3 to load and manipulate images. In the past it + was distributed as part of GTK+ 2 but it was split off into a separate package + in preparation for the change to GTK+ 3. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('GLib', '2.49.5'), + ('libjpeg-turbo', '1.5.0'), + ('libpng', '1.6.24'), + ('LibTIFF', '4.0.6'), + ('GObject-Introspection', '1.49.1') +] + +configopts = "--disable-maintainer-mode --enable-debug=no --enable-introspection=yes " +configopts += "--disable-Bsymbolic --without-gdiplus --enable-shared --enable-static" + +modextrapaths = { + 'XDG_DATA_DIRS': 'share', +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2016b.eb b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2016b.eb new file mode 100644 index 0000000000..57b073f549 --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2016b.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'JasPer' +version = '1.900.1' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_ZIP] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +sanity_check_paths = { + 'files': ["bin/jasper", "lib/libjasper.a"], + 'dirs': ["include"], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb new file mode 100644 index 0000000000..df0dfae353 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb @@ -0,0 +1,65 @@ +easyblock = 'CMakeMake' + +name = 'OpenCV' +version = '3.1.0' + +homepage = 'http://opencv.org/' +description = """OpenCV (Open Source Computer Vision Library) is an open source computer vision + and machine learning software library. OpenCV was built to provide + a common infrastructure for computer vision applications and to accelerate + the use of machine perception in the commercial products.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/Itseez/opencv/archive/'] +sources = ['%(version)s.zip'] + +builddependencies = [ + ('CMake', '3.5.2'), +] + +dependencies = [ + ('Python', '2.7.12'), + ('zlib', '1.2.8'), + ('FFmpeg', '3.1.3'), + ('libjpeg-turbo', '1.5.0'), + ('libpng', '1.6.24'), + ('LibTIFF', '4.0.6'), + ('JasPer', '1.900.1'), + ('Java', '1.8.0_92', '', True), + ('ant', '1.9.7', '-Java-%(javaver)s', True), + ('GLib', '2.49.5'), + ('GTK+', '2.24.31'), +] + +configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' +configopts += '-DBUILD_PYTHON_SUPPORT=ON ' +configopts += '-DPYTHON_PACKAGES_PATH=%(installdir)s/lib/python%(pyshortver)s/site-packages ' +configopts += '-DBUILD_NEW_PYTHON_SUPPORT=ON ' +configopts += '-DZLIB_LIBRARY=$EBROOTZLIB/lib/libz.%s ' % SHLIB_EXT +configopts += '-DZLIB_INCLUDE_DIR=$EBROOTZLIB/include ' +configopts += '-DTIFF_LIBRARY=$EBROOTLIBTIFF/lib/libtiff.%s ' % SHLIB_EXT +configopts += '-DTIFF_INCLUDE_DIR=$EBROOTLIBTIFF/include ' +configopts += '-DPNG_LIBRARY=$EBROOTLIBPNG/lib/libpng.%s ' % SHLIB_EXT +configopts += '-DPNG_INCLUDE_DIR=$EBROOTLIBPNG/include ' +configopts += '-DJPEG_LIBRARY=$EBROOTLIBJPEGMINTURBO/lib/libjpeg.%s ' % SHLIB_EXT +configopts += '-DJPEG_INCLUDE_DIR=$EBROOTLIBJPEGMINTURBO/include ' +configopts += '-DJASPER_LIBRARY=$EBROOTJASPER/lib/libjasper.a ' +configopts += '-DJASPER_INCLUDE_DIR=$EBROOTJASPER/include ' +configopts += '-DWITH_IPP=ON ' +configopts += '-DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON ' +configopts += '-DWITH_CUDA=OFF ' + +sanity_check_paths = { + 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], + 'dirs': ['include'] +} + +modextrapaths = { + 'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages', + 'CLASSPATH': 'share/OpenCV/java', +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/x/x264/x264-20160614-foss-2016b.eb b/easybuild/easyconfigs/x/x264/x264-20160614-foss-2016b.eb new file mode 100644 index 0000000000..b44af67ba6 --- /dev/null +++ b/easybuild/easyconfigs/x/x264/x264-20160614-foss-2016b.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'x264' +version = '20160614' + +homepage = 'http://www.videolan.org/developers/x264.html' +description = """x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 + AVC compression format, and is released under the terms of the GNU GPL.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'https://download.videolan.org/pub/videolan/x264/snapshots/', + 'ftp://ftp.videolan.org/pub/videolan/x264/snapshots/', +] +sources = ['x264-snapshot-%(version)s-2245-stable.tar.bz2'] + +dependencies = [('Yasm', '1.3.0')] + +configopts = " --enable-shared --enable-static " + +sanity_check_paths = { + 'files': ['bin/x264', 'include/x264_config.h', 'include/x264.h', 'lib/libx264.a', 'lib/libx264.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2016b.eb b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2016b.eb new file mode 100644 index 0000000000..d40e39150a --- /dev/null +++ b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2016b.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-90.html +## + +easyblock = 'ConfigureMake' + +name = 'Yasm' +version = '1.3.0' + +homepage = 'http://www.tortall.net/projects/yasm/' +description = """Yasm: Complete rewrite of the NASM assembler with BSD license""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.tortall.net/projects/yasm/releases/'] + +sanity_check_paths = { + 'files': ['bin/yasm'], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From 8b9c836ff987d76b17964b7001ece60d513c98f9 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Fri, 10 Feb 2017 17:11:57 +0100 Subject: [PATCH 0396/1311] Add missing numpy dep --- .../numpy-1.11.1-foss-2016b-Python-2.7.12.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..23d10a78e7 --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +name = 'numpy' +version = '1.11.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.numpy.org' +description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: + a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran + code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, + NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be + defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = [ + 'numpy-1.8.0-mkl.patch', +] + +dependencies = [ + ('Python', '2.7.12'), +] + +moduleclass = 'math' -- GitLab From 1932c3467cfc0b1758decc73685ce2643f69ce3c Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Mon, 13 Feb 2017 13:42:55 +0100 Subject: [PATCH 0397/1311] adding easyconfigs: disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb --- ...iguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb new file mode 100644 index 0000000000..08032c986d --- /dev/null +++ b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb @@ -0,0 +1,40 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "PythonPackage" + +name = 'disambiguate' +version = '1.0.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://github.com/AstraZeneca-NGS/disambiguate" +description = "Disambiguation algorithm for reads aligned to human and mouse genomes using Tophat or BWA mem" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ["https://github.com/AstraZeneca-NGS/disambiguate/archive/"] +sources = ["v%(version)s.tar.gz"] + +dependencies = [ + ('Python', '2.7.11'), + ('BamTools', '2.4.0'), + ('zlib', '1.2.8'), + ('Pysam', '0.9.0', versionsuffix), +] + +# this application provides a python implementation and a C++ implementation +# in the postinstallcmds we compile the C++ version +postinstallcmds = ['$CXX -I$EBROOTBAMTOOLS/include -I./ -L$EBROOTBAMTOOLS/lib -o disambiguate dismain.cpp -lz -lbamtools', + 'cp disambiguate %(installdir)s/bin/'] + +# workaround to avoid the import sanity check +options = {'modulename': 'os'} + +sanity_check_paths = { + 'files': ['bin/disambiguate.py', 'bin/disambiguate'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 042334c87be6f297150acc7507478ba63cfa9967 Mon Sep 17 00:00:00 2001 From: Fokke Dijkstra Date: Mon, 13 Feb 2017 14:44:03 +0100 Subject: [PATCH 0398/1311] Small formatting change. --- .../c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb index 9a164bb75c..184119ac43 100644 --- a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb @@ -12,6 +12,7 @@ Caffe is a deep learning framework made with expression, speed, and modularity in mind. It is developed by the Berkeley Vision and Learning Center (BVLC) and community contributors. """ + toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': False, 'pic': True} -- GitLab From 1c7a87a90015a6afb50d6e963021d0888f8661eb Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Mon, 13 Feb 2017 14:49:40 +0100 Subject: [PATCH 0399/1311] added bamtools dependency --- .../b/BamTools/BamTools-2.4.0-goolf-1.7.20.eb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 easybuild/easyconfigs/b/BamTools/BamTools-2.4.0-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/b/BamTools/BamTools-2.4.0-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BamTools/BamTools-2.4.0-goolf-1.7.20.eb new file mode 100644 index 0000000000..d0e6af59d8 --- /dev/null +++ b/easybuild/easyconfigs/b/BamTools/BamTools-2.4.0-goolf-1.7.20.eb @@ -0,0 +1,16 @@ +name = 'BamTools' +version = '2.4.0' + +homepage = 'https://github.com/pezmaster31/bamtools' +description = """BamTools provides both a programmer's API and an end-user's toolkit for handling BAM files.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/pezmaster31/bamtools/archive'] + +builddependencies = [('CMake', '2.8.12')] + +files_to_copy = ["bin", "lib", "include", "docs", "LICENSE", "README"] + +moduleclass = 'bio' -- GitLab From 694507e94d1d49292f1bf6e584f90a7a81952e37 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 13 Feb 2017 16:08:55 +0100 Subject: [PATCH 0400/1311] {vis}[mixed] OpenCV 3.1.0 fix ippicv source download and library install (REVIEW) --- .../o/OpenCV/OpenCV-3.1.0-foss-2016a.eb | 17 +++++++++++++++-- .../o/OpenCV/OpenCV-3.1.0-intel-2016a.eb | 16 ++++++++++++++-- .../o/OpenCV/OpenCV-3.1.0-intel-2016b.eb | 17 +++++++++++++++-- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb index f835d278f9..c3490d5f5f 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb @@ -11,8 +11,16 @@ description = """OpenCV (Open Source Computer Vision Library) is an open source toolchain = {'name': 'foss', 'version': '2016a'} -source_urls = ['https://github.com/Itseez/opencv/archive/'] -sources = ['%(version)s.zip'] +source_urls = [ + 'https://github.com/Itseez/opencv/archive/', + #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', +] + +sources = [ + '%(version)s.zip', + ('ippicv_linux_20151201.tgz', 'cp %s %(builddir)s'), +] builddependencies = [ ('CMake', '3.5.2'), @@ -34,6 +42,9 @@ dependencies = [ ('GST-plugins-base', '1.6.4'), ] +#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +preconfigopts = 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") + configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' configopts += '-DPYTHON_PACKAGES_PATH=%(installdir)s/lib/python%(pyshortver)s/site-packages ' @@ -52,6 +63,8 @@ configopts += '-DWITH_IPP=ON ' configopts += '-DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON ' configopts += '-DWITH_CUDA=OFF ' +postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] + sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb index b12504dd19..f247b850d9 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb @@ -11,8 +11,16 @@ description = """OpenCV (Open Source Computer Vision Library) is an open source toolchain = {'name': 'intel', 'version': '2016a'} -source_urls = ['https://github.com/Itseez/opencv/archive/'] -sources = ['%(version)s.zip'] +source_urls = [ + 'https://github.com/Itseez/opencv/archive/', + #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', +] + +sources = [ + '%(version)s.zip', + ('ippicv_linux_20151201.tgz', 'cp %s %(builddir)s'), +] patches = ['OpenCV-%(version)s_with_IPP.patch'] @@ -35,6 +43,8 @@ dependencies = [ ] preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' +#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +preconfigopts += 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' @@ -54,6 +64,8 @@ configopts += '-DWITH_IPP=ON ' configopts += '-DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON ' configopts += '-DWITH_CUDA=OFF ' +postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] + sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb index 896ae67a98..b38d822003 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb @@ -11,8 +11,16 @@ description = """OpenCV (Open Source Computer Vision Library) is an open source toolchain = {'name': 'intel', 'version': '2016b'} -source_urls = ['https://github.com/Itseez/opencv/archive/'] -sources = ['%(version)s.zip'] +source_urls = [ + 'https://github.com/Itseez/opencv/archive/', + #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', +] + +sources = [ + '%(version)s.zip', + ('ippicv_linux_20151201.tgz', 'cp %s %(builddir)s'), +] patches = ['OpenCV-%(version)s_with_IPP.patch'] @@ -36,6 +44,9 @@ dependencies = [ preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' +#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +preconfigopts += 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") + configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' configopts += '-DPYTHON_PACKAGES_PATH=%(installdir)s/lib/python%(pyshortver)s/site-packages ' @@ -54,6 +65,8 @@ configopts += '-DWITH_IPP=ON ' configopts += '-DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON ' configopts += '-DWITH_CUDA=OFF ' +postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] + sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + -- GitLab From 161806e5c689355cdf17dc83f6dcf795800943e1 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 13 Feb 2017 16:12:52 +0100 Subject: [PATCH 0401/1311] fix ippicv source download and library installation --- .../o/OpenCV/OpenCV-3.1.0-foss-2016b.eb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb index df0dfae353..261f39024d 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb @@ -11,8 +11,16 @@ description = """OpenCV (Open Source Computer Vision Library) is an open source toolchain = {'name': 'foss', 'version': '2016b'} -source_urls = ['https://github.com/Itseez/opencv/archive/'] -sources = ['%(version)s.zip'] +source_urls = [ + 'https://github.com/Itseez/opencv/archive/', + #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', +] + +sources = [ + '%(version)s.zip', + ('ippicv_linux_20151201.tgz', 'cp %s %(builddir)s'), +] builddependencies = [ ('CMake', '3.5.2'), @@ -32,6 +40,9 @@ dependencies = [ ('GTK+', '2.24.31'), ] +#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +preconfigopts = 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") + configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' configopts += '-DPYTHON_PACKAGES_PATH=%(installdir)s/lib/python%(pyshortver)s/site-packages ' @@ -50,6 +61,8 @@ configopts += '-DWITH_IPP=ON ' configopts += '-DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON ' configopts += '-DWITH_CUDA=OFF ' +postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] + sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + -- GitLab From 9c14d4917e06d1fa78aaab60791e75378faf7b94 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 14 Feb 2017 12:40:41 +0200 Subject: [PATCH 0402/1311] adding easyconfigs: likwid-4.2.0-GCCcore-6.3.0.eb --- .../l/likwid/likwid-4.2.0-GCCcore-6.3.0.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/l/likwid/likwid-4.2.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/l/likwid/likwid-4.2.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/likwid/likwid-4.2.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..a5b92f3bfe --- /dev/null +++ b/easybuild/easyconfigs/l/likwid/likwid-4.2.0-GCCcore-6.3.0.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'likwid' +version = '4.2.0' + +homepage = 'http://code.google.com/p/likwid/' +description = """Likwid stands for Like I knew what I am doing. This project contributes easy to use + command line tools for Linux to support programmers in developing high performance multi threaded programs.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/RRZE-HPC/likwid/archive/'] +sources = ['%(version)s.tar.gz'] + +patches = ['likwid-%(version)s-config-mk.patch'] + +builddependencies = [('binutils', '2.27')] + +skipsteps = ['configure'] +buildopts = 'CC="$CC" CFLAGS="$CFLAGS -std=c99" PREFIX=%(installdir)s' +installopts = 'PREFIX=%(installdir)s' + +sanity_check_paths = { + 'files': ["bin/likwid-memsweeper", "bin/likwid-mpirun", "bin/likwid-perfctr", + "bin/likwid-perfscope", "bin/likwid-pin", "bin/likwid-powermeter", "bin/likwid-topology", + "lib/liblikwidpin.%s" % SHLIB_EXT, "lib/liblikwid.%s" % SHLIB_EXT], + 'dirs': ["man/man1"] +} + +maxparallel = 1 + +moduleclass = 'devel' -- GitLab From 17ab69aa0e6c3c836826fed76a7c0e13a93224b1 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 14 Feb 2017 13:40:56 +0200 Subject: [PATCH 0403/1311] Adding the missing patch file --- .../l/likwid/likwid-4.2.0-config-mk.patch | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/l/likwid/likwid-4.2.0-config-mk.patch diff --git a/easybuild/easyconfigs/l/likwid/likwid-4.2.0-config-mk.patch b/easybuild/easyconfigs/l/likwid/likwid-4.2.0-config-mk.patch new file mode 100644 index 0000000000..735ec88bea --- /dev/null +++ b/easybuild/easyconfigs/l/likwid/likwid-4.2.0-config-mk.patch @@ -0,0 +1,43 @@ +# Patches the build system +# Ward Poelmans +diff -ur likwid-likwid-4.1.0.orig/config.mk likwid-likwid-4.1.0/config.mk +--- likwid-likwid-4.1.0.orig/config.mk 2016-05-19 13:16:28.000000000 +0200 ++++ likwid-likwid-4.1.0/config.mk 2016-05-19 13:46:33.345284562 +0200 +@@ -9,7 +9,7 @@ + COLOR = BLUE#NO SPACE + + # Path were to install likwid +-PREFIX = /usr/local#NO SPACE ++#PREFIX = /usr/local#NO SPACE + + ################################################################# + # Common users do not need to change values below this comment! # +@@ -33,7 +33,7 @@ + # chown installed tools to this user/group + # if you change anything here, make sure that the user/group can access + # the MSR devices and (on Intel) the PCI devices. +-INSTALL_CHOWN = -g root -o root ++INSTALL_CHOWN = + + # For the daemon based secure msr/pci access configure + # the absolute path to the msr daemon executable. +@@ -44,7 +44,7 @@ + # Build the accessDaemon. Have a look in the WIKI for details. + BUILDDAEMON = true#NO SPACE + #Build the setFrequencies tool +-BUILDFREQ = true#NO SPACE ++BUILDFREQ = false#NO SPACE + + # Set the default mode for MSR access. + # This can usually be overriden on the commandline. +@@ -71,8 +71,8 @@ + # a proper config file at CFG_FILE_PATH) + MAX_NUM_THREADS = 263 + MAX_NUM_NODES = 64 +-CFG_FILE_PATH = /etc/likwid.cfg +-TOPO_FILE_PATH = /etc/likwid_topo.cfg ++CFG_FILE_PATH = $(PREFIX)/etc/likwid.cfg ++TOPO_FILE_PATH = $(PREFIX)/etc/likwid_topo.cfg + + # Versioning Information + VERSION = 4 -- GitLab From c11448fa5948bdbe33f329150e586676daf7e97e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:00:30 +0100 Subject: [PATCH 0404/1311] adding easyconfigs: Eigen-3.2.10-intel-2016b.eb, Eigen-3.3.2-intel-2016b.eb --- .../easyconfigs/e/Eigen/Eigen-3.2.10-intel-2016b.eb | 13 +++++++++++++ .../easyconfigs/e/Eigen/Eigen-3.3.2-intel-2016b.eb | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.2.10-intel-2016b.eb create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.10-intel-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.10-intel-2016b.eb new file mode 100644 index 0000000000..9ec07e22e9 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.10-intel-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.2.10' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-intel-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-intel-2016b.eb new file mode 100644 index 0000000000..6cf3aabc3c --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-intel-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.3.2' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' -- GitLab From c79d04f26a0cff111e13016230adf736eb2b3b0c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:07:35 +0100 Subject: [PATCH 0405/1311] adding easyconfigs: fmt-3.0.1-intel-2016b.eb --- .../f/fmt/fmt-3.0.1-intel-2016b.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb new file mode 100644 index 0000000000..e2f4a919bb --- /dev/null +++ b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'CMakeMake' + +name = 'fmt' +version = '3.0.1' + +homepage = 'http://fmtlib.net/' +description = "fmt (formerly cppformat) is an open-source formatting library." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/fmtlib/fmt/releases/download/%(version)s/'] +sources = ['fmt-%(version)s.zip'] + +builddependencies = [('CMake', '3.7.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libfmt.a'], + 'dirs': ['include/fmt', 'lib/cmake'], +} + +moduleclass = 'lib' -- GitLab From a45cef8fddf3f1c0b643bc5823f8e0395192da21 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:08:01 +0100 Subject: [PATCH 0406/1311] adding easyconfigs: googletest-1.8.0-intel-2016b.eb --- .../googletest-1.8.0-intel-2016b.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2016b.eb b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2016b.eb new file mode 100644 index 0000000000..95b77139af --- /dev/null +++ b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'CMakeMake' + +name = 'googletest' +version = '1.8.0' + +homepage = 'https://github.com/google/googletest' +description = "Google's C++ test framework" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/google/googletest/archive/'] +sources = ['release-%(version)s.tar.gz'] + +builddependencies = [('CMake', '3.7.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libgmock.a', 'lib/libgmock_main.a', 'lib/libgtest.a', 'lib/libgtest_main.a'], + 'dirs': ['include/gmock', 'include/gtest'], +} + +moduleclass = 'tools' -- GitLab From d4ca88d5d12880c6f4efce64141d1df222854385 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:24:11 +0100 Subject: [PATCH 0407/1311] adding easyconfigs: Cantera-2.3.0-intel-2016b-Python-2.7.12.eb --- ...Cantera-2.3.0-intel-2016b-Python-2.7.12.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1347cddcd9 --- /dev/null +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,44 @@ +easyblock = 'SCons' + +name = 'Cantera' +version = '2.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/Cantera/cantera' +description = """Chemical kinetics, thermodynamics, and transport tool suite""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/Cantera/cantera/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('Boost', '1.63.0', versionsuffix), + ('SUNDIALS', '2.7.0'), + ('Eigen', '3.3.2'), + ('fmt', '3.0.1'), + ('googletest', '1.8.0'), +] +builddependencies = [ + ('SCons', '2.5.1', versionsuffix), + ('3to2', '1.1.1', versionsuffix), +] + +common_opts = 'env_vars=all CC="$CC" CXX="$CXX" blas_lapack_libs=mkl_rt blas_lapack_dir=$BLAS_LAPACK_LIB_DIR' +common_opts += ' sundials_include=$EBROOTSUNDIALS/include sundials_libdir=$EBROOTSUNDIALS/lib' +buildopts = 'build ' + common_opts +runtest = 'test ' + common_opts +buildopts = 'install ' + common_opts +prefix_arg = 'prefix=' + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/mixmaster'], + 'dirs': ['include/cantera', 'lib/pkgconfig', 'lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = [('python', "-c 'import cantera'")] + +moduleclass = 'chem' -- GitLab From 2d323b10300b35261d5c2492b3e83d9d2123f01c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:25:24 +0100 Subject: [PATCH 0408/1311] adding easyconfigs: OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb --- .../m/MCL/MCL-14.137-intel-2016b.eb | 21 +++++++++++ .../OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb | 36 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/m/MCL/MCL-14.137-intel-2016b.eb create mode 100644 easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb diff --git a/easybuild/easyconfigs/m/MCL/MCL-14.137-intel-2016b.eb b/easybuild/easyconfigs/m/MCL/MCL-14.137-intel-2016b.eb new file mode 100644 index 0000000000..11b922bce7 --- /dev/null +++ b/easybuild/easyconfigs/m/MCL/MCL-14.137-intel-2016b.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'MCL' +version = '14.137' + +homepage = 'http://micans.org/mcl/' +description = """The MCL algorithm is short for the Markov Cluster Algorithm, a fast +and scalable unsupervised cluster algorithm for graphs (also known as networks) based +on simulation of (stochastic) flow in graphs. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://micans.org/%(namelower)s/src/'] +sources = ['%(namelower)s-%(version_major)s-%(version_minor)s.tar.gz'] + +sanity_check_paths = { + 'files': ['bin/mcl'], + 'dirs': ['share'] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..c6b49af363 --- /dev/null +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb @@ -0,0 +1,36 @@ +easyblock = 'Tarball' + +name = 'OrthoMCL' +version = '2.0.9' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://orthomcl.org/' +description = """OrthoMCL is a genome-scale algorithm for grouping orthologous protein sequences.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(name)sSoftware-v%(version)s.tar.gz'] +source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] + +patches = ['orthomcl_fix-perl-hashbang.patch'] + +dependencies = [ + # a Perl installation providing the DBI module is required + ('Perl', '5.24.0'), + ('MCL', '14.137'), +] + +sanity_check_paths = { + 'files': ['bin/orthomcl%s' % bin for bin in ['AdjustFasta', 'BlastParser', 'DropSchema', 'DumpPairsFiles', + 'ExtractProteinIdsFromGroupsFile', 'ExtractProteinPairsFromGroupsFile', + 'FilterFasta', 'InstallSchema', 'LoadBlast', 'MclToGroups', 'Pairs', + 'ReduceFasta', 'ReduceGroups', 'RemoveIdenticalGroups', 'Singletons', + 'SortGroupMembersByScore', 'SortGroupsFile']], + 'dirs': ['lib/perl/OrthoMCLEngine'], +} + +modextrapaths = {'PERL5LIB': 'lib/perl'} + +sanity_check_commands = [('perl', '-e "use OrthoMCLEngine::Main::Base"')] + +moduleclass = 'bio' -- GitLab From 79058145b43f9220323e5a2a9f4284b478d94e27 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:28:20 +0100 Subject: [PATCH 0409/1311] fix software name for OrthomCL --- .../OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb} | 14 ++++++-------- .../OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb} | 14 ++++++-------- .../orthomcl_fix-perl-hashbang.patch | 0 3 files changed, 12 insertions(+), 16 deletions(-) rename easybuild/easyconfigs/o/{orthomcl/orthomcl-2.0.8-goolf-1.4.10-Perl-5.16.3.eb => OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb} (83%) rename easybuild/easyconfigs/o/{orthomcl/orthomcl-2.0.8-ictce-5.3.0-Perl-5.16.3.eb => OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb} (83%) rename easybuild/easyconfigs/o/{orthomcl => OrthoMCL}/orthomcl_fix-perl-hashbang.patch (100%) diff --git a/easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb similarity index 83% rename from easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-goolf-1.4.10-Perl-5.16.3.eb rename to easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb index 2cbfe2886f..5b8fd1b338 100644 --- a/easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb @@ -1,7 +1,8 @@ -easyblock = "Tarball" +easyblock = 'Tarball' -name = 'orthomcl' +name = 'OrthoMCL' version = '2.0.8' +versionsuffix = '-Perl-%(perlver)s' homepage = 'http://orthomcl.org/' description = """OrthoMCL is a genome-scale algorithm for grouping orthologous protein sequences.""" @@ -9,16 +10,13 @@ description = """OrthoMCL is a genome-scale algorithm for grouping orthologous p toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['%(name)sSoftware-v%(version)s.tar.gz'] -source_urls = ['http://orthomcl.org/common/downloads/software/v%s/' % '.'.join(version.split('.')[:2])] +source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] patches = ['orthomcl_fix-perl-hashbang.patch'] -# a Perl installation providing the DBI module is required -perl = 'Perl' -perlver = '5.16.3' -versionsuffix = '-%s-%s' % (perl, perlver) dependencies = [ - (perl, perlver), + # a Perl installation providing the DBI module is required + ('Perl', '5.16.3'), ('MCL', '12.135'), ] diff --git a/easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-ictce-5.3.0-Perl-5.16.3.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb similarity index 83% rename from easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-ictce-5.3.0-Perl-5.16.3.eb rename to easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb index 2fe0311606..238ebe881b 100644 --- a/easybuild/easyconfigs/o/orthomcl/orthomcl-2.0.8-ictce-5.3.0-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb @@ -1,7 +1,8 @@ -easyblock = "Tarball" +easyblock = 'Tarball' -name = 'orthomcl' +name = 'OrthoMCL' version = '2.0.8' +versionsuffix = '-Perl-%(perlver)s' homepage = 'http://orthomcl.org/' description = """OrthoMCL is a genome-scale algorithm for grouping orthologous protein sequences.""" @@ -9,16 +10,13 @@ description = """OrthoMCL is a genome-scale algorithm for grouping orthologous p toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = ['%(name)sSoftware-v%(version)s.tar.gz'] -source_urls = ['http://orthomcl.org/common/downloads/software/v%s/' % '.'.join(version.split('.')[:2])] +source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] patches = ['orthomcl_fix-perl-hashbang.patch'] -# a Perl installation providing the DBI module is required -perl = 'Perl' -perlver = '5.16.3' -versionsuffix = '-%s-%s' % (perl, perlver) dependencies = [ - (perl, perlver), + # a Perl installation providing the DBI module is required + ('Perl', '5.16.3'), ('MCL', '12.135'), ] diff --git a/easybuild/easyconfigs/o/orthomcl/orthomcl_fix-perl-hashbang.patch b/easybuild/easyconfigs/o/OrthoMCL/orthomcl_fix-perl-hashbang.patch similarity index 100% rename from easybuild/easyconfigs/o/orthomcl/orthomcl_fix-perl-hashbang.patch rename to easybuild/easyconfigs/o/OrthoMCL/orthomcl_fix-perl-hashbang.patch -- GitLab From 062cef1bbf0eaa24b4cfb9fc2d031dad4b0b0f8a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 15:29:15 +0100 Subject: [PATCH 0410/1311] enable -fPIC --- easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb index e2f4a919bb..38241af81f 100644 --- a/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb +++ b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-intel-2016b.eb @@ -7,6 +7,7 @@ homepage = 'http://fmtlib.net/' description = "fmt (formerly cppformat) is an open-source formatting library." toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} source_urls = ['https://github.com/fmtlib/fmt/releases/download/%(version)s/'] sources = ['fmt-%(version)s.zip'] -- GitLab From e657761ef99ebeb760d351404dd867448cba4a11 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 19:10:59 +0100 Subject: [PATCH 0411/1311] fix sources spec --- .../o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb | 2 +- .../o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb index 5b8fd1b338..b0f832c53a 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-goolf-1.4.10-Perl-5.16.3.eb @@ -9,7 +9,7 @@ description = """OrthoMCL is a genome-scale algorithm for grouping orthologous p toolchain = {'name': 'goolf', 'version': '1.4.10'} -sources = ['%(name)sSoftware-v%(version)s.tar.gz'] +sources = ['%(namelower)sSoftware-v%(version)s.tar.gz'] source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] patches = ['orthomcl_fix-perl-hashbang.patch'] diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb index 238ebe881b..2f54ba6ec5 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.8-ictce-5.3.0-Perl-5.16.3.eb @@ -9,7 +9,7 @@ description = """OrthoMCL is a genome-scale algorithm for grouping orthologous p toolchain = {'name': 'ictce', 'version': '5.3.0'} -sources = ['%(name)sSoftware-v%(version)s.tar.gz'] +sources = ['%(namelower)sSoftware-v%(version)s.tar.gz'] source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] patches = ['orthomcl_fix-perl-hashbang.patch'] -- GitLab From f410c5f9d8a9506ea039409a066d860ec5cb8e7f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Feb 2017 19:11:57 +0100 Subject: [PATCH 0412/1311] fix sources spec in OrthoMCL easyconfig --- .../o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb index c6b49af363..31aa43dbba 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-2.0.9-intel-2016b-Perl-5.24.0.eb @@ -9,7 +9,7 @@ description = """OrthoMCL is a genome-scale algorithm for grouping orthologous p toolchain = {'name': 'intel', 'version': '2016b'} -sources = ['%(name)sSoftware-v%(version)s.tar.gz'] +sources = ['%(namelower)sSoftware-v%(version)s.tar.gz'] source_urls = ['http://orthomcl.org/common/downloads/software/v%(version_major_minor)s/'] patches = ['orthomcl_fix-perl-hashbang.patch'] -- GitLab From 867434e5a6957fcc9685beaa3b4f59ed60d3733a Mon Sep 17 00:00:00 2001 From: RvDijk Date: Wed, 15 Feb 2017 11:01:55 +0100 Subject: [PATCH 0413/1311] DMTCP 2.5.0 with foss 2016a --- .../d/DMTCP/DMTCP-2.5.0-foss-2016a.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb diff --git a/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb new file mode 100644 index 0000000000..3f64420e2e --- /dev/null +++ b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb @@ -0,0 +1,27 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Ravi Tripathi +# Email: ravi89@uab.edu + +easyblock = 'ConfigureMake' + +name = 'DMTCP' +version = '2.5.0' + +homepage = "http://dmtcp.sourceforge.net/index.html" +description = """DMTCP (Distributed MultiThreaded Checkpointing) +transparently checkpoints a single-host or distributed computation +in user-space -- with no modifications to user code or to the O/S.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['https://github.com/dmtcp/dmtcp/archive/'] +sources = ['%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['bin/dmtcp_command', 'bin/dmtcp_discover_rm', 'bin/dmtcp_nocheckpoint', 'bin/dmtcp_srun_helper', + 'bin/dmtcp_sshd', 'bin/dmtcp_coordinator', 'bin/dmtcp_launch', 'bin/dmtcp_restart', 'bin/dmtcp_ssh'], + 'dirs': [], +} + +moduleclass = 'tools' + -- GitLab From b1f42dea4affc87dda18850e35a79f63dca4d1dc Mon Sep 17 00:00:00 2001 From: RvDijk Date: Wed, 15 Feb 2017 11:09:29 +0100 Subject: [PATCH 0414/1311] Stacks 1.44 with foss-2016a --- .../s/Stacks/Stacks-1.44-foss-2016a.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb new file mode 100644 index 0000000000..6ef7429937 --- /dev/null +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'Stacks' +version = '1.44' + +homepage = 'http://creskolab.uoregon.edu/stacks/' +description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose + of building genetic maps and conducting population genomics and phylogeography. +""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), + ('sparsehash', '2.0.2'), +] + +sanity_check_paths = { + 'files': [ + 'bin/%s' % binfile for binfile in [ + 'clone_filter', 'denovo_map.pl', 'exec_velvet.pl', 'genotypes', 'index_radtags.pl', 'load_radtags.pl', + 'populations', 'process_shortreads', 'ref_map.pl', 'sstacks', 'ustacks', 'cstacks', 'estacks', + 'export_sql.pl', 'hstacks', 'kmer_filter', 'load_sequences.pl', 'process_radtags', 'pstacks', + 'sort_read_pairs.pl', 'stacks_export_notify.pl', + ] + ], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 873bad384198bf5bd300d11b4297db759e803b03 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Wed, 15 Feb 2017 11:11:02 +0100 Subject: [PATCH 0415/1311] Vim 8.0 with foss 2016a --- .../v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb new file mode 100644 index 0000000000..1caa37ba7a --- /dev/null +++ b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb @@ -0,0 +1,35 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel + +easyblock = 'ConfigureMake' + +name = 'Vim' +version = '8.0' + +homepage = 'http://www.vim.org' +description = """ Vim is an advanced text editor that seeks to provide the power + of the de-facto Unix editor 'Vi', with a more complete feature set. """ + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['http://ftp.vim.org/pub/vim/unix/'] +sources = [SOURCELOWER_TAR_BZ2] + +# this dependencies are required for --enable-pythoninterp=yes and --enable-perlinterp=yes to work +# check enabled features running "vim --version" after compilation +dependencies = [ + ('Python', '2.7.11'), + ('Perl', '5.22.1', '-bare') + ] +#osdependencies = ['python','perl-devel'] + +configopts = '--with-features=huge --enable-pythoninterp=yes --enable-perlinterp=yes' + +sanity_check_paths = { + 'files': ['bin/vim','bin/vimdiff'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From a1c0fe373c8123e1474daef7a0857ba72818617d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 15 Feb 2017 13:08:30 +0100 Subject: [PATCH 0416/1311] adding easyconfigs: PEAR-0.9.8-intel-2016b.eb --- .../p/PEAR/PEAR-0.9.8-intel-2016b.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb new file mode 100644 index 0000000000..33e09a2ad6 --- /dev/null +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb @@ -0,0 +1,31 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'PEAR' +version = '0.9.8' + +homepage = 'http://sco.h-its.org/exelixis/web/software/pear/' +description = """PEAR is an ultrafast, memory-efficient and highly accurate pair-end read merger. + It is fully parallelized and can run with as low as just a few kilobytes of memory.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://sco.h-its.org/exelixis/web/software/pear/files/'] +sources = ['%(namelower)s-%(version)s.tar.gz'] + +checksums = ['1ab079a2cea61aee816012966b7ccacd'] + +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), +] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/pear'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From bac77786fe50b626ed263a3adcaa8734bdda36a4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 15 Feb 2017 14:26:36 +0100 Subject: [PATCH 0417/1311] add easyconfigs for Boost & SCons (build) deps of Cantera --- .../Boost-1.63.0-intel-2016b-Python-2.7.12.eb | 23 ++++++++++++++++++ .../SCons-2.5.1-intel-2016b-Python-2.7.12.eb | 24 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..b110a50dba --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('Python', '2.7.12'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..6df761e722 --- /dev/null +++ b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'SCons' +version = '2.5.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.scons.org/' +description = "SCons is a software construction tool." + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': ['bin/scons', 'bin/scons-time', 'bin/sconsign'], + 'dirs': ['lib/%(namelower)s-%(version)s/%(name)s'], +} + +options = {'modulename': False} + +moduleclass = 'devel' -- GitLab From b90a1547abec7a46929257ad7197cd48d11497cd Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Wed, 15 Feb 2017 15:50:27 +0100 Subject: [PATCH 0418/1311] platanus-1.2.4-foss-2017a --- .../p/Platanus/Platanus-1.2.4-foss-2017a.eb | 25 +++++++++++++++++++ .../p/Platanus/Platanus_new_gcc.patch | 9 +++++++ 2 files changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb create mode 100644 easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb new file mode 100644 index 0000000000..d09524d53c --- /dev/null +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'MakeCp' + +name = 'Platanus' +version = '1.2.4' + +homepage = 'http://platanus.bio.titech.ac.jp/' +description = """PLATform for Assembling NUcleotide Sequences""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'openmp': True} + +source_urls = ['http://platanus.bio.titech.ac.jp/?ddownload=150'] +sources = ['%(name)s_v%(version)s.tar.gz'] + +# fix Makefile to support newer gcc version +patches = ['Platanus_new_gcc.patch'] + +files_to_copy = [(["platanus"],'bin'), "README", "LICENSE"] + +sanity_check_paths = { + 'files': ["bin/platanus"], + 'dirs': [""], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch b/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch new file mode 100644 index 0000000000..531c797148 --- /dev/null +++ b/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch @@ -0,0 +1,9 @@ +--- Makefile.o 2015-06-03 07:39:00.000000000 +0200 ++++ Makefile 2017-02-15 15:33:18.000000000 +0100 +@@ -1,5 +1,5 @@ + CXX = g++ +-CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0 ++CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0 -fpermissive + + + PRG = platanus -- GitLab From c261e36bb0a467bd6d270faf48f9304f729b568a Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 15 Feb 2017 16:23:29 +0000 Subject: [PATCH 0419/1311] updating with review feedback --- easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb index 81fd376a8e..2c824e618b 100644 --- a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb +++ b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb @@ -12,19 +12,20 @@ It is used to build the majority of Google's software.""" toolchain = {'name': 'dummy', 'version': ''} +sources = ['%(namelower)s-%(version)s-dist.zip'] +source_urls = ['https://github.com/bazelbuild/bazel/releases/download/%(version)s'] + dependencies = [ ('Java', '1.8.0_121'), ] -sources = ['%(namelower)s-%(version)s-dist.zip'] -source_urls = ['https://github.com/bazelbuild/bazel/releases/download/%(version)s'] -cmds_map = [('.*', "JAVA_VERSION=1.8 CC=gcc CXX=g++ ./compile.sh")] +cmds_map = [('.*', "JAVA_VERSION=%(javashortver)s CC=gcc CXX=g++ ./compile.sh")] files_to_copy = [(['output/bazel'], 'bin')] sanity_check_paths={ - 'files': ['bin/bazel'], - 'dirs': ['bin'], + 'dirs': ['bin'], + 'files': ['bin/bazel'] } moduleclass = 'devel' -- GitLab From e076db3cc515038c54c49ecd3dc4a6543c4783f6 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 15 Feb 2017 19:11:34 +0000 Subject: [PATCH 0420/1311] update per review --- easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb index 2c824e618b..dd70600323 100644 --- a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb +++ b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb @@ -19,13 +19,13 @@ dependencies = [ ('Java', '1.8.0_121'), ] -cmds_map = [('.*', "JAVA_VERSION=%(javashortver)s CC=gcc CXX=g++ ./compile.sh")] +cmds_map = [('.*', "./compile.sh")] files_to_copy = [(['output/bazel'], 'bin')] sanity_check_paths={ - 'dirs': ['bin'], - 'files': ['bin/bazel'] + 'files': ['bin/bazel'], + 'dirs': [], } moduleclass = 'devel' -- GitLab From 1331efc4299668ef27b7ebbb87bbd217b7b39825 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 15 Feb 2017 21:44:17 +0000 Subject: [PATCH 0421/1311] modified source url for MCR R2013a and b --- easybuild/easyconfigs/m/MCR/MCR-R2013a.eb | 2 +- easybuild/easyconfigs/m/MCR/MCR-R2013b.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb b/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb index caffaedaa3..2df01756bc 100644 --- a/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb +++ b/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb @@ -9,7 +9,7 @@ description = """The MATLAB Runtime is a standalone set of shared libraries toolchain = {'name': 'dummy', 'version': ''} source_urls = [ - 'http://www.mathworks.com/supportfiles/MCR_Runtime/%(version)s/', + 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', ] sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb b/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb index ea139590d9..4d025dab9a 100644 --- a/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb +++ b/easybuild/easyconfigs/m/MCR/MCR-R2013b.eb @@ -9,7 +9,7 @@ description = """The MATLAB Runtime is a standalone set of shared libraries toolchain = {'name': 'dummy', 'version': ''} source_urls = [ - 'http://www.mathworks.com/supportfiles/MCR_Runtime/%(version)s/', + 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', ] sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] -- GitLab From d30b6d06cff6eef14665c45a9c14229aa1cd7b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 16 Feb 2017 08:28:51 +0100 Subject: [PATCH 0422/1311] added RNAz for GCC 5 and above GCC changed the default C standard from gnu89 to gnu11, RNAz needs gnu89 --- .../easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb b/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb new file mode 100644 index 0000000000..bdf32dd367 --- /dev/null +++ b/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb @@ -0,0 +1,25 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'RNAz' +version = '2.1' + +homepage = 'http://www.tbi.univie.ac.at/~wash/RNAz/' +description = """RNAz is a program for predicting structurally conserved and +thermodynamically stable RNA secondary structures in multiple sequence alignments.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'optarch': True, 'pic': True} + +buildopts = 'CFLAGS="-std=gnu89 $CFLAGS"' + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tbi.univie.ac.at/~wash/%s' % name] + +sanity_check_paths = { + 'files': ['bin/RNAz'], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 972efb3ff93db5861f76d3ff71e79e7cc73143f6 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 16 Feb 2017 09:34:36 +0100 Subject: [PATCH 0423/1311] Add configurations for GCCcore-6.3.0 and intel-2017a --- .../pkg-config-0.29.1-GCCcore-6.3.0.eb | 30 +++++++++++++++++++ .../pkg-config-0.29.1-intel-2017a.eb | 27 +++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..5cd807b0de --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] +patches = [ + 'pkg-config-%(version)s_gcc-6.patch', +] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2017a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2017a.eb new file mode 100644 index 0000000000..25371013eb --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-intel-2017a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 201cc133fb10dfb11c9d5b7e6877535c8d8180dd Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 16 Feb 2017 09:48:32 +0100 Subject: [PATCH 0424/1311] Add missing builddep on binutils --- .../p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb index 5cd807b0de..dadba07804 100644 --- a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-6.3.0.eb @@ -17,6 +17,11 @@ patches = [ 'pkg-config-%(version)s_gcc-6.patch', ] +builddependencies = [ + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + # don't use PAX, it might break. tar_config_opts = True -- GitLab From a9ec4e655b47953fbb7bc916dfebca9d120361e5 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 16 Feb 2017 10:55:29 +0100 Subject: [PATCH 0425/1311] Updated X11 bundle and dependencies for GCCcore-6.3.0: - Bumped components to the latest available versions - Added libXfont2 --- .../a/Autoconf/Autoconf-2.69-GCCcore-6.3.0.eb | 29 ++++ .../a/Automake/Automake-1.15-GCCcore-6.3.0.eb | 36 +++++ .../Autotools-20150215-GCCcore-6.3.0.eb | 18 +++ .../b/bzip2/bzip2-1.0.6-GCCcore-6.3.0.eb | 18 +++ .../e/expat/expat-2.2.0-GCCcore-6.3.0.eb | 19 +++ .../fontconfig-2.12.1-GCCcore-6.3.0.eb | 25 ++++ .../freetype/freetype-2.7.1-GCCcore-6.3.0.eb | 29 ++++ .../gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb | 26 ++++ .../easyconfigs/g/gettext/gettext-0.19.8.1.eb | 25 ++++ .../l/libpng/libpng-1.6.28-GCCcore-6.3.0.eb | 29 ++++ .../l/libtool/libtool-2.4.6-GCCcore-6.3.0.eb | 20 +++ .../l/libxml2/libxml2-2.9.4-GCCcore-6.3.0.eb | 26 ++++ .../n/ncurses/ncurses-6.0-GCCcore-6.3.0.eb | 39 +++++ .../x/X11/X11-20170129-GCCcore-6.3.0.eb | 136 ++++++++++++++++++ .../x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb | 28 ++++ 15 files changed, 503 insertions(+) create mode 100644 easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/x/X11/X11-20170129-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-6.3.0.eb b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..84aebc0f8f --- /dev/null +++ b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'Autoconf' +version = '2.69' + +homepage = 'http://www.gnu.org/software/autoconf/' +description = """Autoconf is an extensible package of M4 macros that produce shell scripts + to automatically configure software source code packages. These scripts can adapt the + packages to many kinds of UNIX-like systems without manual user intervention. Autoconf + creates a configuration script for a package from a template file that lists the + operating system features that the package can use, in the form of M4 macro calls.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('M4', '1.4.18')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["autoconf", "autoheader", "autom4te", "autoreconf", "autoscan", + "autoupdate", "ifnames"]], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-6.3.0.eb b/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..304170650f --- /dev/null +++ b/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-6.3.0.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'Automake' +version = "1.15" + +homepage = 'http://www.gnu.org/software/automake/automake.html' +description = "Automake: GNU Standards-compliant Makefile generator" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Autoconf', '2.69')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['bin/automake', 'bin/aclocal'], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-6.3.0.eb b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..9e2d66a8e2 --- /dev/null +++ b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-6.3.0.eb @@ -0,0 +1,18 @@ +easyblock = 'Bundle' + +name = 'Autotools' +version = '20150215' # date of the most recent change + +homepage = 'http://autotools.io' +description = """This bundle collect the standard GNU build tools: Autoconf, Automake and libtool""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +dependencies = [ + ('Autoconf', '2.69'), # 20120424 + ('Automake', '1.15'), # 20150105 + ('libtool', '2.4.6'), # 20150215 +] +# Pure bundle -- no need to specify 'binutils' used when building GCCcore toolchain as build dependency + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-6.3.0.eb b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..5ec3bbe0cb --- /dev/null +++ b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-6.3.0.eb @@ -0,0 +1,18 @@ +name = 'bzip2' +version = '1.0.6' + +homepage = 'http://www.bzip.org/' +description = """bzip2 is a freely available, patent free, high-quality data compressor. It typically + compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical + compressors), whilst being around twice as fast at compression and six times faster at decompression.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.bzip.org/%(version)s'] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..a67bb4fc20 --- /dev/null +++ b/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-6.3.0.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'expat' +version = '2.2.0' + +homepage = 'http://expat.sourceforge.net/' +description = """Expat is an XML parser library written in C. It is a stream-oriented parser in which an application + registers handlers for things the parser might find in the XML document (like start tags)""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [SOURCEFORGE_SOURCE] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..2cdc8b58de --- /dev/null +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'fontconfig' +version = '2.12.1' + +homepage = 'http://www.freedesktop.org/software/fontconfig' +description = """Fontconfig is a library designed to provide system-wide font configuration, customization and +application access.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.freedesktop.org/software/fontconfig/release/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('expat', '2.2.0'), + ('freetype', '2.7.1'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +configopts = '--disable-docs ' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..2892f7ffb0 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +name = 'freetype' +version = '2.7.1' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('libpng', '1.6.28'), + ('zlib', '1.2.11'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..6e2d7b23a6 --- /dev/null +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'gettext' +version = '0.19.8.1' + +homepage = 'http://www.gnu.org/software/gettext/' +description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools +and documentation""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libxml2', '2.9.4'), + ('ncurses', '6.0'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +configopts = '--without-emacs --with-libxml2-prefix=$EBROOTLIBXML2' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb new file mode 100644 index 0000000000..f1e80cfb3b --- /dev/null +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'gettext' +version = '0.19.8.1' + +homepage = 'http://www.gnu.org/software/gettext/' +description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools +and documentation""" + +# This is a basic stripped down version of gettext without any +# dependencies on other packages used as initial builddep for XZ +# It is the first step in the cyclic dependency chain of +# XZ -> libxml2 -> gettext -> XZ + +toolchain = {'name': 'dummy', 'version': ''} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [('ncurses', '6.0')] + +configopts = '--without-emacs --with-included-libxml --without-xz --without-bzip2' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..7aca3fe451 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.28' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.11')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..9e72961b6b --- /dev/null +++ b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-6.3.0.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libtool' +version = '2.4.6' + +homepage = 'http://www.gnu.org/software/libtool' +description = """GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries + behind a consistent, portable interface.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [('M4', '1.4.18')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..b71554c4df --- /dev/null +++ b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-6.3.0.eb @@ -0,0 +1,26 @@ +name = 'libxml2' +version = '2.9.4' + +homepage = 'http://xmlsoft.org/' +description = """Libxml2 is the XML C parser and +toolchain developed for the Gnome project + (but usable outside of the Gnome platform).""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'http://xmlsoft.org/sources/', + 'http://xmlsoft.org/sources/old/' +] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.11'), + ('XZ', '5.2.3'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..097f0bd4af --- /dev/null +++ b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-GCCcore-6.3.0.eb @@ -0,0 +1,39 @@ +easyblock = 'ConfigureMake' + +name = 'ncurses' +version = '6.0' + +homepage = 'http://www.gnu.org/software/ncurses/' +description = """The Ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, + and more. It uses Terminfo format, supports pads and color and multiple highlights and forms characters and + function-key mapping, and has all the other SYSV-curses enhancements over BSD Curses.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['ncurses-%(version)s_gcc-5.patch'] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27')] + +configopts = [ + # default build + '--with-shared --enable-overwrite', + # the UTF-8 enabled version (ncursesw) + '--with-shared --enable-overwrite --enable-ext-colors --enable-widec --includedir=%(installdir)s/include/ncursesw/' +] + +libs = ["form", "menu", "ncurses", "panel"] +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["captoinfo", "clear", "infocmp", "infotocap", "ncurses%(version_major)s-config", + "reset", "tabs", "tic", "toe", "tput", "tset"]] + + ['lib/lib%s%s.a' % (x, y) for x in libs for y in ['', '_g', 'w', 'w_g']] + + ['lib/lib%s%s.%s' % (x, y, SHLIB_EXT) for x in libs for y in ['', 'w']] + + ['lib/libncurses++%s.a' % x for x in ['', 'w']], + 'dirs': ['include', 'include/ncursesw'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/x/X11/X11-20170129-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/X11/X11-20170129-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..2e89d51b91 --- /dev/null +++ b/easybuild/easyconfigs/x/X11/X11-20170129-GCCcore-6.3.0.eb @@ -0,0 +1,136 @@ +easyblock = 'Bundle' + +name = 'X11' +version = '20170129' + +homepage = 'https://www.x.org' +description = "The X Window System (X11) is a windowing system for bitmap displays" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [ + XORG_LIB_SOURCE, + XORG_PROTO_SOURCE, + 'http://xcb.freedesktop.org/dist/', + 'http://xkbcommon.org/download/', + 'http://cgit.freedesktop.org/xorg/util/macros/snapshot', +] + +dependencies = [ + ('bzip2', '1.0.6'), + ('fontconfig', '2.12.1'), + ('freetype', '2.7.1'), + ('zlib', '1.2.11'), +] +builddependencies = [ + ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8.1'), + ('pkg-config', '0.29.1'), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + +default_easyblock = 'ConfigureMake' + +common_specs = { + 'sources': [SOURCE_TAR_GZ], + 'start_dir': '%(name)s-%(version)s', +} +components = [ + ('xorg-macros', '1.19.1', { # 2017-01-29 + 'sources': ['util-macros-%(version)s.tar.gz'], + 'start_dir': 'util-macros-%(version)s', + }), + ('libpthread-stubs', '0.3', common_specs), # 2009-10-14 + ('bigreqsproto', '1.1.2', common_specs), # 2012-03-23 + ('compositeproto', '0.4.2', common_specs), # 2010-10-30 + ('damageproto', '1.2.1', common_specs), # 2010-10-30 + ('dmxproto', '2.3.1', common_specs), # 2011-01-06 + ('dri2proto', '2.8', common_specs), # 2012-07-11 + ('dri3proto', '1.0', common_specs), # 2013-11-01 + ('fixesproto', '5.0', common_specs), # 2011-03-08 + ('fontsproto', '2.1.3', common_specs), # 2014-04-14 + ('glproto', '1.4.17', common_specs), # 2013-12-10 + ('inputproto', '2.3.2', common_specs), # 2016-04-04 + ('kbproto', '1.0.7', common_specs), # 2015-05-01 + ('presentproto', '1.1', common_specs), # 2017-01-26 + ('randrproto', '1.5.0', common_specs), # 2015-05-17 + ('recordproto', '1.14.2', common_specs), # 2012-03-23 + ('renderproto', '0.11.1', common_specs), # 2010-08-10 + ('resourceproto', '1.2.0', common_specs), # 2011-05-28 + ('scrnsaverproto', '1.2.2', common_specs), # 2012-03-23 + ('videoproto', '2.3.3', common_specs), # 2016-03-11 + ('xcmiscproto', '1.2.2', common_specs), # 2012-03-23 + ('xextproto', '7.3.0', common_specs), # 2013-12-27 + ('xf86bigfontproto', '1.2.0', common_specs), # 2009-08-27 + ('xf86dgaproto', '2.1', common_specs), # 2009-10-01 + ('xf86driproto', '2.1.1', common_specs), # 2011-01-06 + ('xf86vidmodeproto', '2.3.1', common_specs), # 2011-01-06 + ('xineramaproto', '1.2.1', common_specs), # 2011-01-06 + ('xproto', '7.0.31', common_specs), # 2016-09-23 + ('libXau', '1.0.8', common_specs), # 2013-05-24 + ('libXdmcp', '1.1.2', common_specs), # 2015-03-21 + ('xcb-proto', '1.12', common_specs), # 2016-05-18 + ('libxcb', '1.12', common_specs), # 2016-05-18 + ('xtrans', '1.3.5', common_specs), # 2014-09-22 + ('libxkbcommon', '0.7.1', { # 2017-01-18 + 'sources': ['libxkbcommon-%(version)s.tar.xz'], + 'start_dir': 'libxkbcommon-%(version)s', + }), + ('libX11', '1.6.4', common_specs), # 2016-10-04 + ('libXext', '1.3.3', common_specs), # 2014-07-24 + ('libFS', '1.0.7', common_specs), # 2015-05-01 + ('libICE', '1.0.9', common_specs), # 2014-06-07 + ('libSM', '1.2.2', common_specs), # 2013-09-08 + ('libXScrnSaver', '1.2.2', common_specs), # 2012-03-08 + ('libXt', '1.1.5', common_specs), # 2015-05-01 + ('libXmu', '1.1.2', common_specs), # 2013-09-08 + ('libXpm', '3.5.12', common_specs), # 2016-12-15 + ('libXaw', '1.0.13', common_specs), # 2015-05-01 + ('libXfixes', '5.0.3', common_specs), # 2016-10-04 + ('libXcomposite', '0.4.4', common_specs), # 2013-01-03 + ('libXrender', '0.9.10', common_specs), # 2016-10-04 + ('libXcursor', '1.1.14', common_specs), # 2013-05-30 + ('libXdamage', '1.1.4', common_specs), # 2013-01-03 + ('libfontenc', '1.1.3', common_specs), # 2015-05-01 + ('libXfont', '1.5.2', common_specs), # 2016-08-31 + ('libXfont2', '2.0.1', common_specs), # 2015-12-11 + ('libXft', '2.3.2', common_specs), # 2014-06-06 + ('libXi', '1.7.9', common_specs), # 2017-01-23 + ('libXinerama', '1.1.3', common_specs), # 2013-05-31 + ('libXrandr', '1.5.1', common_specs), # 2016-10-04 + ('libXres', '1.0.7', common_specs), # 2013-05-31 + ('libXtst', '1.2.3', common_specs), # 2016-10-04 + ('libXv', '1.0.11', common_specs), # 2016-10-04 + ('libXvMC', '1.0.10', common_specs), # 2016-10-04 + ('libXxf86dga', '1.1.4', common_specs), # 2013-05-31 + ('libXxf86vm', '1.1.4', common_specs), # 2015-02-24 + ('libdmx', '1.1.3', common_specs), # 2013-05-28 + ('libpciaccess', '0.13.4', common_specs), # 2015-05-01 + ('libxkbfile', '1.0.9', common_specs), # 2015-05-01 + ('libxshmfence', '1.2', common_specs), # 2015-01-02 + ('xcb-util', '0.4.0', common_specs), # 2014-10-15 + ('xcb-util-image', '0.4.0', common_specs), # 2014-10-15 + ('xcb-util-keysyms', '0.4.0', common_specs), # 2014-10-01 + ('xcb-util-renderutil', '0.3.9', common_specs), # 2014-06-13 + ('xcb-util-wm', '0.4.1', common_specs), # 2014-02-19 + ('xcb-util-cursor', '0.1.3', common_specs), # 2016-05-12 +] + +# Python is required for xcb-proto +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[0:2]) + +preconfigopts = "if [ ! -f configure ]; then ./autogen.sh; fi && " + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['include/X11/Xlib.h', 'include/X11/Xutil.h'], + 'dirs': ['include/GL', 'include/X11', 'include/X11/extensions', 'lib', + 'lib/python%s/site-packages/xcbgen' % pyshortver, 'lib/pkgconfig', 'share/pkgconfig'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..0e517cfb0f --- /dev/null +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'XZ' +version = '5.2.3' + +homepage = 'http://tukaani.org/xz/' +description = "xz: XZ utilities" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://tukaani.org/xz/'] + +builddependencies = [ + ('gettext', '0.19.8.1', '', True), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + +# may become useful in non-x86 archs +# configopts = ' --disable-assembler ' + +sanity_check_paths = { + 'files': ["bin/xz", "bin/lzmainfo"], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From ee6c56245332a6367a33663e56f3f6eae904d981 Mon Sep 17 00:00:00 2001 From: Basil Neff Date: Thu, 16 Feb 2017 11:10:05 +0100 Subject: [PATCH 0426/1311] Change backticks in the gettext description to build RPM Packages with fpm. EasyBuild fails to create RPM packages with backticks in the description. The backticks are not escaped by EasyBuild or fpm. --- easybuild/easyconfigs/g/gettext/gettext-0.18.2-foss-2015b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.2.0.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.18.2.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014.06.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.4-GCC-4.9.2.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.4-foss-2015a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.4-intel-2015a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.4.eb | 2 +- .../easyconfigs/g/gettext/gettext-0.19.6-GNU-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.6-foss-2016a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.6-gimkl-2.11.5.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2015b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2016a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.6.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2015b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2016a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.7-intel-2016a.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.7.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-4.9.3.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016.04.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8-intel-2016b.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8.eb | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-foss-2015b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-foss-2015b.eb index e7d30bfac7..400996e08a 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-foss-2015b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-foss-2015b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.4.10.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.4.10.eb index 686c6f9d40..645bdc29be 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.4.10.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.5.14.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.5.14.eb index adf041c9d3..ccaa5c1d29 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-goolf-1.5.14.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.2.0.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.2.0.eb index 5479e98f23..b9f046449c 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.2.0.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.2.0.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.3.0.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.3.0.eb index 21f6d06397..54b916db8e 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2-ictce-5.3.0.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.18.2.eb b/easybuild/easyconfigs/g/gettext/gettext-0.18.2.eb index 68b4d25ce9..000ef4aa2d 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.18.2.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.18.2.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.18.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.5.14.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.5.14.eb index a1a642076c..eeeccb35d4 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.5.14.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.7.20.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.7.20.eb index b9b28dda44..827716cf97 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-goolf-1.7.20.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014.06.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014.06.eb index 238843b206..450a973ebb 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014.06.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014.06.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014b.eb index a0c6e92339..43c9195057 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2014b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015a.eb index c49302820d..57381cdd38 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015b.eb index 2d3d1e0547..1a7da10440 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.2-intel-2015b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.2' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-GCC-4.9.2.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-GCC-4.9.2.eb index 7e8ff4e184..27ab692a93 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-GCC-4.9.2.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.4' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-foss-2015a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-foss-2015a.eb index 51c244d3ef..e435d00102 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-foss-2015a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-foss-2015a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.4' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-intel-2015a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-intel-2015a.eb index 0dbf6fce3a..246fbea3c6 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.4-intel-2015a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.4-intel-2015a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.4' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.4.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.4.eb index ed81b95755..11ed30961c 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.4.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.4.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.4' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-GNU-4.9.3-2.25.eb index 90c8e2d47d..4ff92c775d 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-GNU-4.9.3-2.25.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-foss-2016a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-foss-2016a.eb index 1fdb744032..ac6519ed4a 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-foss-2016a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-foss-2016a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-gimkl-2.11.5.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-gimkl-2.11.5.eb index 4aed92d350..859ba0f08f 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-gimkl-2.11.5.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2015b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2015b.eb index a9b8c4c455..802790cb29 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2015b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2015b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2016a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2016a.eb index d58aad1970..220b284a16 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2016a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6-intel-2016a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.6.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.6.eb index ce355420b2..902bd2a236 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.6.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.6.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.6' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2015b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2015b.eb index 690872c686..79d7c0db22 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2015b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2015b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.7' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2016a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2016a.eb index 4580e48c6a..a61ec3269b 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2016a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-foss-2016a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.7' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-intel-2016a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-intel-2016a.eb index 4f86721ed0..57cdaad01b 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.7-intel-2016a.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.7-intel-2016a.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.7' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.7.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.7.eb index 578b07b38d..8e1eda7fc9 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.7.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.7.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.7' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-4.9.3.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-4.9.3.eb index 8e1b03ad2a..13b1f6601b 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-4.9.3.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016.04.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016.04.eb index 47b250264e..8f8b64bb6f 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016.04.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016.04.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016b.eb index 91c8cacd60..bcee20f66b 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2016b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-intel-2016b.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-intel-2016b.eb index 6df1b22caa..8671de264d 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-intel-2016b.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-intel-2016b.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.eb index 45caa1fde8..dd9bbb81e0 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" -- GitLab From e1553722814b3068881671e50a3d0ae2dd4a5227 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 16 Feb 2017 11:14:19 +0100 Subject: [PATCH 0427/1311] stick to old source URL for MCR R2013a --- easybuild/easyconfigs/m/MCR/MCR-R2013a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb b/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb index 2df01756bc..caffaedaa3 100644 --- a/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb +++ b/easybuild/easyconfigs/m/MCR/MCR-R2013a.eb @@ -9,7 +9,7 @@ description = """The MATLAB Runtime is a standalone set of shared libraries toolchain = {'name': 'dummy', 'version': ''} source_urls = [ - 'http://www.mathworks.com/supportfiles/downloads/%(version)s/deployment_files/%(version)s/installers/glnxa64/', + 'http://www.mathworks.com/supportfiles/MCR_Runtime/%(version)s/', ] sources = ['%(name)s_%(version)s_glnxa64_installer.zip'] -- GitLab From e8a9ba660567279d75ccf08f1be320d6663e12a2 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 16 Feb 2017 11:26:35 +0100 Subject: [PATCH 0428/1311] removed patch, controlling CXXFLAGS in the eb file --- .../easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb | 7 +++---- easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch | 9 --------- 2 files changed, 3 insertions(+), 13 deletions(-) delete mode 100644 easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb index d09524d53c..47debc3391 100644 --- a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb @@ -7,14 +7,13 @@ homepage = 'http://platanus.bio.titech.ac.jp/' description = """PLATform for Assembling NUcleotide Sequences""" toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'openmp': True} +toolchainopts = {'openmp': True, 'cstd': 'c++0x'} + +buildopts = 'CXXFLAGS="$CXXFLAGS -Dnullptr=0 -lm -fpermissive"' source_urls = ['http://platanus.bio.titech.ac.jp/?ddownload=150'] sources = ['%(name)s_v%(version)s.tar.gz'] -# fix Makefile to support newer gcc version -patches = ['Platanus_new_gcc.patch'] - files_to_copy = [(["platanus"],'bin'), "README", "LICENSE"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch b/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch deleted file mode 100644 index 531c797148..0000000000 --- a/easybuild/easyconfigs/p/Platanus/Platanus_new_gcc.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- Makefile.o 2015-06-03 07:39:00.000000000 +0200 -+++ Makefile 2017-02-15 15:33:18.000000000 +0100 -@@ -1,5 +1,5 @@ - CXX = g++ --CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0 -+CXXFLAGS = -std=c++0x -O3 -funroll-loops -Wall -fopenmp -finline-limit-50000 -lm -Dnullptr=0 -fpermissive - - - PRG = platanus -- GitLab From 1e74088992605614a2b9dbf4a745c4776e6fac39 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 16 Feb 2017 11:37:08 +0100 Subject: [PATCH 0429/1311] sickle 1.33 foss 2017a --- .../s/sickle/sickle-1.33-foss-2017a.eb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/s/sickle/sickle-1.33-foss-2017a.eb diff --git a/easybuild/easyconfigs/s/sickle/sickle-1.33-foss-2017a.eb b/easybuild/easyconfigs/s/sickle/sickle-1.33-foss-2017a.eb new file mode 100644 index 0000000000..aad6c785a5 --- /dev/null +++ b/easybuild/easyconfigs/s/sickle/sickle-1.33-foss-2017a.eb @@ -0,0 +1,21 @@ +easyblock = 'MakeCp' + +name = "sickle" +version = "1.33" + +homepage = 'https://github.com/najoshi/sickle' +description = """ Windowed Adaptive Trimming for fastq files using quality """ + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ['https://github.com/najoshi/sickle/archive/'] +sources = ['v%(version)s.tar.gz'] + +files_to_copy = [(['sickle'], 'bin'), "README.md", "test"] + +sanity_check_paths = { + 'files': ['bin/sickle'], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 949f36606ae1a3b5566b26e45041854c23f17bd3 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 16 Feb 2017 11:45:30 +0100 Subject: [PATCH 0430/1311] removed buildependencies --- .../easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb | 9 --------- 1 file changed, 9 deletions(-) diff --git a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb index 71310f26f2..7f6179784c 100644 --- a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb @@ -13,15 +13,6 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://www.smoldyn.org/'] sources = ['smoldyn-%(version)s.tgz'] -builddependencies = [ - ('CMake', '3.4.3'), - ('LibTIFF','4.0.6'), - ('zlib', '1.2.8'), - ('freeglut', '3.0.0'), - ('libXmu', '1.1.2'), - ('libXi', '1.7.6') -] - dependencies = [ ('LibTIFF','4.0.6'), ('zlib', '1.2.8'), -- GitLab From 51343da1acd9adf8c70f11d3f93c03b86c4b62d4 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 16 Feb 2017 13:30:33 +0200 Subject: [PATCH 0431/1311] Adding patch to install libelpatest. --- .../e/ELPA/ELPA-2016.05.004-intel-2017a.eb | 63 +++++++++++++++++++ .../e/ELPA/install_libelpatest.patch | 11 ++++ 2 files changed, 74 insertions(+) create mode 100644 easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb create mode 100644 easybuild/easyconfigs/e/ELPA/install_libelpatest.patch diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb new file mode 100644 index 0000000000..fe3eecd918 --- /dev/null +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb @@ -0,0 +1,63 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Authors:: Inge Gutheil , Alan O'Cais +# License:: MIT/GPL +# $Id$ +# +## + +easyblock = 'ConfigureMake' + +name = 'ELPA' +version = '2016.05.004' + +homepage = 'http://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications .""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://elpa.mpcdf.mpg.de/html/Releases/%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +patches = [ + 'install_libelpatest.patch', +] + +builddependencies = [ + ('Autotools', '20150215'), +] + +preconfigopts = 'autoreconf && ' + +common_configopts = 'FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" ' +common_configopts += 'LIBS="$LIBSCALAPACK" ' + +configopts = [ + common_configopts + '--enable-openmp ', + common_configopts, # Default version last, so we can get the normal config.h/config-f90.h installed afterwards. +] + +buildopts = ' V=1 ' + +postinstallcmds = [ + 'cp config.h config-f90.h %(installdir)s/share/doc/elpa/examples', +] + +sanity_check_paths = { + 'files': [ + 'lib/libelpa.a', 'lib/libelpa.%s' % SHLIB_EXT, + 'lib/libelpa_openmp.a', 'lib/libelpa_openmp.%s' % SHLIB_EXT, + 'lib/libelpatest.a', 'lib/libelpatest.%s' % SHLIB_EXT, + 'lib/libelpatest_openmp.a', 'lib/libelpatest_openmp.%s' % SHLIB_EXT, + 'share/doc/elpa/examples/config.h', + 'share/doc/elpa/examples/config-f90.h', + ], + 'dirs': [ + 'bin', 'include/elpa-%(version)s/elpa', + 'include/elpa-%(version)s/modules', 'lib/pkgconfig', + ], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch b/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch new file mode 100644 index 0000000000..2c8f6390ed --- /dev/null +++ b/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch @@ -0,0 +1,11 @@ +--- Makefile.am.orig 2017-02-16 10:32:55.789545672 +0100 ++++ Makefile.am 2017-02-16 10:33:15.213234461 +0100 +@@ -255,7 +255,7 @@ + build_lib = libelpatest@SUFFIX@.la libelpa@SUFFIX@.la + + # library with shared sources for the test files +-noinst_LTLIBRARIES += libelpatest@SUFFIX@.la ++lib_LTLIBRARIES += libelpatest@SUFFIX@.la + libelpatest@SUFFIX@_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@private_modules @FC_MODINC@private_modules + libelpatest@SUFFIX@_la_SOURCES = \ + test/shared/util.F90 \ -- GitLab From 59be6a908dfd1ba7cd0778e5096573de5ba8472c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 16 Feb 2017 13:34:40 +0100 Subject: [PATCH 0432/1311] added requested changes used toolchain option cstd instead of buildopts removed toolchain option optarch changed name template --- easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb b/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb index bdf32dd367..4ff67a0efb 100644 --- a/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb +++ b/easybuild/easyconfigs/r/RNAz/RNAz-2.1-foss-2016b.eb @@ -10,12 +10,10 @@ description = """RNAz is a program for predicting structurally conserved and thermodynamically stable RNA secondary structures in multiple sequence alignments.""" toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'optarch': True, 'pic': True} - -buildopts = 'CFLAGS="-std=gnu89 $CFLAGS"' +toolchainopts = {'cstd': 'gnu89', 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/~wash/%s' % name] +source_urls = ['http://www.tbi.univie.ac.at/~wash/%(name)s'] sanity_check_paths = { 'files': ['bin/RNAz'], -- GitLab From 055afec64649e52a63df8d499f1d82e7ab720789 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 16 Feb 2017 14:29:53 +0100 Subject: [PATCH 0433/1311] requested changes --- .../s/Smoldyn/Smoldyn-2.48-foss-2016a.eb | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb index 7f6179784c..fc06a65970 100644 --- a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb @@ -4,8 +4,11 @@ name = 'Smoldyn' version = '2.48' homepage = 'http://www.smoldyn.org/' -description = """ -Smoldyn is a computer program for cell-scale biochemical simulations. It simulates each molecule of interest individually to capture natural stochasticity and to yield nanometer-scale spatial resolution. It treats other molecules implicitly, enabling it to simulate hundreds of thousands of molecules over several minutes of real time. Simulated molecules diffuse, react, are confined by surfaces, and bind to membranes much as they would in a real biological system. +description = """Smoldyn is a computer program for cell-scale biochemical simulations. It simulates each molecule of +interest individually to capture natural stochasticity and to yield nanometer-scale spatial resolution. It treats +other molecules implicitly, enabling it to simulate hundreds of thousands of molecules over several minutes of real +time. Simulated molecules diffuse, react, are confined by surfaces, and bind to membranes much as they would in a real +biological system. """ toolchain = {'name': 'foss', 'version': '2016a'} @@ -13,12 +16,16 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://www.smoldyn.org/'] sources = ['smoldyn-%(version)s.tgz'] +builddependencies = [ + ('CMake', '3.4.3') +] + dependencies = [ - ('LibTIFF','4.0.6'), - ('zlib', '1.2.8'), - ('freeglut', '3.0.0'), - ('libXmu', '1.1.2'), - ('libXi', '1.7.6') + ('LibTIFF','4.0.6'), + ('zlib', '1.2.8'), + ('freeglut', '3.0.0'), + ('libXmu', '1.1.2'), + ('libXi', '1.7.6') ] -- GitLab From e81eab07bf42f6f4cdab2184e9625c49ff01d264 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 16 Feb 2017 14:32:30 +0100 Subject: [PATCH 0434/1311] Removed backticks in gettest description --- .../easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb | 2 +- easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb index 6e2d7b23a6..c366761771 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1-GCCcore-6.3.0.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8.1' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb index f1e80cfb3b..ee5718ec11 100644 --- a/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8.1.eb @@ -4,7 +4,7 @@ name = 'gettext' version = '0.19.8.1' homepage = 'http://www.gnu.org/software/gettext/' -description = """GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools and documentation""" -- GitLab From c247db112687dc657a726cce723e2f43ae70377a Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 16 Feb 2017 17:11:38 +0200 Subject: [PATCH 0435/1311] Rename the patchfile to match the version of ELPA. --- .../e/ELPA/ELPA-2016.05.004-intel-2017a.eb | 2 +- .../ELPA-2016.05.004_install-libelpatest.patch | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004_install-libelpatest.patch diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb index fe3eecd918..2c6c725788 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb @@ -22,7 +22,7 @@ source_urls = ['http://elpa.mpcdf.mpg.de/html/Releases/%(version)s/'] sources = [SOURCELOWER_TAR_GZ] patches = [ - 'install_libelpatest.patch', + '%(name)s-%(version)s_install-libelpatest.patch', ] builddependencies = [ diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004_install-libelpatest.patch b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004_install-libelpatest.patch new file mode 100644 index 0000000000..61ac356266 --- /dev/null +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004_install-libelpatest.patch @@ -0,0 +1,16 @@ +Change the Makefile.am so that libelpatest gets installed too. +This makes it easier to build the examples. + +Åke Sandgren, HPC2N +diff -ru elpa-2016.05.004.orig/Makefile.am elpa-2016.05.004/Makefile.am +--- elpa-2016.05.004.orig/Makefile.am 2016-10-25 07:13:46.000000000 +0200 ++++ elpa-2016.05.004/Makefile.am 2017-02-16 16:04:40.976781413 +0100 +@@ -255,7 +255,7 @@ + build_lib = libelpatest@SUFFIX@.la libelpa@SUFFIX@.la + + # library with shared sources for the test files +-noinst_LTLIBRARIES += libelpatest@SUFFIX@.la ++lib_LTLIBRARIES += libelpatest@SUFFIX@.la + libelpatest@SUFFIX@_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@private_modules @FC_MODINC@private_modules + libelpatest@SUFFIX@_la_SOURCES = \ + test/shared/util.F90 \ -- GitLab From 0bd80f7045b1aad79ff905593f5f452c4ea7e417 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 16 Feb 2017 16:13:21 +0100 Subject: [PATCH 0436/1311] Delete the old non-version specific patch file. --- .../easyconfigs/e/ELPA/install_libelpatest.patch | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 easybuild/easyconfigs/e/ELPA/install_libelpatest.patch diff --git a/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch b/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch deleted file mode 100644 index 2c8f6390ed..0000000000 --- a/easybuild/easyconfigs/e/ELPA/install_libelpatest.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Makefile.am.orig 2017-02-16 10:32:55.789545672 +0100 -+++ Makefile.am 2017-02-16 10:33:15.213234461 +0100 -@@ -255,7 +255,7 @@ - build_lib = libelpatest@SUFFIX@.la libelpa@SUFFIX@.la - - # library with shared sources for the test files --noinst_LTLIBRARIES += libelpatest@SUFFIX@.la -+lib_LTLIBRARIES += libelpatest@SUFFIX@.la - libelpatest@SUFFIX@_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@private_modules @FC_MODINC@private_modules - libelpatest@SUFFIX@_la_SOURCES = \ - test/shared/util.F90 \ -- GitLab From 485e058298063893104af9fe5c873cee6628fb14 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 16 Feb 2017 20:06:01 +0100 Subject: [PATCH 0437/1311] Remove duplicate sources specification --- easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb index 2e2eda32d4..c13ef6b657 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] sources = [SOURCELOWER_TAR_GZ] -sources = ['openmpi-%(version)s.tar.gz'] + checksums = ['886698becc5bea8c151c0af2074b8392'] dependencies = [('hwloc', '1.11.5')] -- GitLab From e3d01adc1cf95181b1c90f62d8b6f1395ee7686f Mon Sep 17 00:00:00 2001 From: RvDijk Date: Fri, 17 Feb 2017 11:00:39 +0100 Subject: [PATCH 0438/1311] Make Travis happy --- .../easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb index 1caa37ba7a..69dae180f9 100644 --- a/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb @@ -7,6 +7,7 @@ easyblock = 'ConfigureMake' name = 'Vim' version = '8.0' +versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.vim.org' description = """ Vim is an advanced text editor that seeks to provide the power @@ -22,7 +23,7 @@ sources = [SOURCELOWER_TAR_BZ2] dependencies = [ ('Python', '2.7.11'), ('Perl', '5.22.1', '-bare') - ] +] #osdependencies = ['python','perl-devel'] configopts = '--with-features=huge --enable-pythoninterp=yes --enable-perlinterp=yes' -- GitLab From bab557a4492ce1cc551b85cc34f879ee4e4ad37f Mon Sep 17 00:00:00 2001 From: RvDijk Date: Sun, 19 Feb 2017 19:13:22 +0100 Subject: [PATCH 0439/1311] no comments, space behind ',' --- .../easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb index 69dae180f9..674a6d44d5 100644 --- a/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/v/Vim/Vim-8.0-foss-2016a-Python-2.7.11.eb @@ -24,12 +24,11 @@ dependencies = [ ('Python', '2.7.11'), ('Perl', '5.22.1', '-bare') ] -#osdependencies = ['python','perl-devel'] configopts = '--with-features=huge --enable-pythoninterp=yes --enable-perlinterp=yes' sanity_check_paths = { - 'files': ['bin/vim','bin/vimdiff'], + 'files': ['bin/vim', 'bin/vimdiff'], 'dirs': [], } -- GitLab From 970453d4200d390d1cc7c4eed4d2f3edb7d09c34 Mon Sep 17 00:00:00 2001 From: Sergey Paramonov Date: Sun, 19 Feb 2017 23:37:56 -0500 Subject: [PATCH 0440/1311] Create Lmod-7.3.eb Lmod 7.3 --- easybuild/easyconfigs/l/Lmod/Lmod-7.3.eb | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/l/Lmod/Lmod-7.3.eb diff --git a/easybuild/easyconfigs/l/Lmod/Lmod-7.3.eb b/easybuild/easyconfigs/l/Lmod/Lmod-7.3.eb new file mode 100644 index 0000000000..d56882eb94 --- /dev/null +++ b/easybuild/easyconfigs/l/Lmod/Lmod-7.3.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = "Lmod" +version = "7.3" + +homepage = "http://sourceforge.net/projects/lmod/" +description = """Lmod is a Lua based module system. Modules allow for dynamic modification + of a user's environment under Unix systems. See www.tacc.utexas.edu/tacc-projects/lmod + for a complete description. Lmod is a new implementation that easily handles the MODULEPATH + Hierarchical problem. It is drop-in replacement for TCL/C modules and reads TCL modulefiles directly.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['%(version)s.tar.gz'] +source_urls = [ + 'https://github.com/TACC/Lmod/archive', + 'http://sourceforge.net/projects/lmod/files/', + 'http://sourceforge.net/projects/lmod/files/Testing' +] + +dependencies = [("Lua", "5.1.4-8")] + +sanity_check_paths = { + 'files': ["lmod/%(version)s/libexec/lmod", "lmod/%(version)s/init/profile"], + 'dirs': [] +} + +moduleclass = "tools" -- GitLab From 1b5f840316fa864453146d2b77c726f7bf58c097 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 12:02:29 +0100 Subject: [PATCH 0441/1311] adding easyconfigs: StringTie-1.3.3-intel-2017a.eb --- .../StringTie/StringTie-1.3.3-intel-2017a.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb new file mode 100644 index 0000000000..aa49a6e1bd --- /dev/null +++ b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb @@ -0,0 +1,26 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'MakeCp' + +name = 'StringTie' +version = '1.3.3' + +homepage = 'http://ccb.jhu.edu/software/stringtie/' +description = """StringTie is a fast and highly efficient assembler of RNA-Seq alignments into potential transcripts.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://ccb.jhu.edu/software/stringtie/dl/'] +sources = [SOURCELOWER_TAR_GZ] + +files_to_copy = [(['stringtie'], 'bin'), 'README', 'LICENSE'] + +sanity_check_paths = { + 'files': ['bin/stringtie'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 58a3f10c6d41e8f7a233c700f03ad81ed5c901fa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 13:03:50 +0100 Subject: [PATCH 0442/1311] adding easyconfigs: OpenSSL-1.1.0e-intel-2016a.eb --- .../o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb diff --git a/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb new file mode 100644 index 0000000000..297ae5a79e --- /dev/null +++ b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb @@ -0,0 +1,19 @@ +name = 'OpenSSL' +version = '1.1.0e' + +homepage = 'http://www.openssl.org/' +description = """The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, + and Open Source toolchain implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) + protocols as well as a full-strength general purpose cryptography library. """ + +toolchain = {'name': 'intel', 'version': '2016a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.openssl.org/source/'] + +dependencies = [('zlib', '1.2.8')] + +runtest = 'test' + +moduleclass = 'system' -- GitLab From fecb6bc94694e55a96bba372d9c7dd0c6635f76e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 13:08:42 +0100 Subject: [PATCH 0443/1311] adding easyconfigs: Pysam-0.10.0-intel-2016b-Python-2.7.12.eb --- .../c/cURL/cURL-7.52.1-intel-2016b.eb | 31 ++++++++++++++++ .../Pysam-0.10.0-intel-2016b-Python-2.7.12.eb | 36 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/c/cURL/cURL-7.52.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/p/Pysam/Pysam-0.10.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/cURL/cURL-7.52.1-intel-2016b.eb b/easybuild/easyconfigs/c/cURL/cURL-7.52.1-intel-2016b.eb new file mode 100644 index 0000000000..669ee4f2be --- /dev/null +++ b/easybuild/easyconfigs/c/cURL/cURL-7.52.1-intel-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'cURL' +version = '7.52.1' + +homepage = 'http://curl.haxx.se' +description = """libcurl is a free and easy-to-use client-side URL transfer library, + supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports + SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, + proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, + Kerberos), file transfer resume, http proxy tunneling and more.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://curl.haxx.se/download/'] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# dependencies = [('OpenSSL', '1.1.0e')] +# configopts = "--with-ssl=$EBROOTOPENSSL" + +modextravars = {'CURL_INCLUDES': '%(installdir)s/include'} + +sanity_check_paths = { + 'files': ['bin/curl', 'lib/libcurl.a', 'lib/libcurl.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.10.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.10.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..624f14ed18 --- /dev/null +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.10.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,36 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# 0.9.1.4: +# Modified by: Adam Huffman +# The Francis Crick Institute + +easyblock = 'PythonPackage' + +name = 'Pysam' +version = '0.10.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pysam-developers/pysam' +description = """Pysam is a python module for reading and manipulating Samfiles. + It's a lightweight wrapper of the samtools C-API. Pysam also includes an interface for tabix.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/pysam-developers/pysam/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('ncurses', '6.0'), + ('zlib', '1.2.8'), + ('cURL', '7.52.1'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'bio' -- GitLab From 1a94fbc1ae2bcdf0846d3770f45a6040a26bac32 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 13:13:13 +0100 Subject: [PATCH 0444/1311] fix toolchain spec to intel/2016b for OpenSSL 1.1.0e easyconfig --- ...nSSL-1.1.0e-intel-2016a.eb => OpenSSL-1.1.0e-intel-2016b.eb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/o/OpenSSL/{OpenSSL-1.1.0e-intel-2016a.eb => OpenSSL-1.1.0e-intel-2016b.eb} (92%) diff --git a/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016b.eb similarity index 92% rename from easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb rename to easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016b.eb index 297ae5a79e..81a9ed4ca3 100644 --- a/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenSSL/OpenSSL-1.1.0e-intel-2016b.eb @@ -6,7 +6,7 @@ description = """The OpenSSL Project is a collaborative effort to develop a robu and Open Source toolchain implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. """ -toolchain = {'name': 'intel', 'version': '2016a'} +toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -- GitLab From 0058215568b776b205473bae2b5e26fc2a10790a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 14:52:44 +0100 Subject: [PATCH 0445/1311] remove numpy 1.11.1 easyconfig using Python 2.7.12 since Python installation already includes numpy 1.11.1 --- .../numpy-1.11.1-foss-2016b-Python-2.7.12.eb | 25 ------------------- ...PyTables-3.2.2-foss-2016b-Python-2.7.12.eb | 1 - 2 files changed, 26 deletions(-) delete mode 100755 easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb deleted file mode 100755 index 23d10a78e7..0000000000 --- a/easybuild/easyconfigs/n/numpy/numpy-1.11.1-foss-2016b-Python-2.7.12.eb +++ /dev/null @@ -1,25 +0,0 @@ -name = 'numpy' -version = '1.11.1' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://www.numpy.org' -description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: - a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran - code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, - NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be - defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" - -toolchain = {'name': 'foss', 'version': '2016b'} - -source_urls = [SOURCEFORGE_SOURCE] -sources = [SOURCE_TAR_GZ] - -patches = [ - 'numpy-1.8.0-mkl.patch', -] - -dependencies = [ - ('Python', '2.7.12'), -] - -moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb index 836640b941..fbfabfe34d 100644 --- a/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.2-foss-2016b-Python-2.7.12.eb @@ -23,7 +23,6 @@ patches = ['pyTables-%(version)s-fix-libs.patch'] dependencies = [ ('Python', '2.7.12'), - ('numpy', '1.11.1', versionsuffix), ('numexpr', '2.6.1', versionsuffix), ('HDF5', '1.8.17'), ] -- GitLab From 9c423e6dcf5e01b5d218859ad432f6fa9d037a33 Mon Sep 17 00:00:00 2001 From: Fokke Dijkstra Date: Mon, 20 Feb 2017 15:13:35 +0100 Subject: [PATCH 0446/1311] Removed setting of optarch to disabled, which was used during debugging. --- .../c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb index 184119ac43..ef1b4dd449 100644 --- a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb @@ -14,7 +14,7 @@ and Learning Center (BVLC) and community contributors. """ toolchain = {'name': 'foss', 'version': '2016a'} -toolchainopts = {'optarch': False, 'pic': True} +toolchainopts = {'optarch': True, 'pic': True} sources = ['%(version)s.tar.gz'] source_urls = ['https://github.com/BVLC/caffe/archive/'] -- GitLab From 0c61800c9ea6bef57ee64a528744990e2e1163b9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 16:14:32 +0100 Subject: [PATCH 0447/1311] fix definition of buildopts/installopts in Cantera easyconfig --- .../c/Cantera/Cantera-2.2.1-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.2.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/Cantera/Cantera-2.2.1-intel-2016b-Python-2.7.12.eb index df2115bf2e..6ba32558a2 100644 --- a/easybuild/easyconfigs/c/Cantera/Cantera-2.2.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.2.1-intel-2016b-Python-2.7.12.eb @@ -26,7 +26,7 @@ common_opts = 'env_vars=all CC="$CC" CXX="$CXX" blas_lapack_libs=mkl_rt blas_lap common_opts += ' sundials_include=$EBROOTSUNDIALS/include sundials_libdir=$EBROOTSUNDIALS/lib' buildopts = 'build ' + common_opts runtest = 'test ' + common_opts -buildopts = 'install ' + common_opts +installopts = 'install ' + common_opts prefix_arg = 'prefix=' modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} -- GitLab From b6b0b3109f6ad009ea0a387602461e56a0f3e348 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 16:16:24 +0100 Subject: [PATCH 0448/1311] fix buildopts/installopts in Cantera easyconfig + add patches to fix/skip broken tests --- ...Cantera-2.3.0-intel-2016b-Python-2.7.12.eb | 8 +- .../c/Cantera/Cantera-2.3.0_fix-bug-416.patch | 138 ++++++++++++++++++ .../Cantera-2.3.0_skip-broken-tests.patch | 25 ++++ 3 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-bug-416.patch create mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb index 1347cddcd9..594203f790 100644 --- a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb @@ -8,10 +8,16 @@ homepage = 'https://github.com/Cantera/cantera' description = """Chemical kinetics, thermodynamics, and transport tool suite""" toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'strict': True} source_urls = ['https://github.com/Cantera/cantera/archive/'] sources = ['v%(version)s.tar.gz'] +patches = [ + 'Cantera-%(version)s_fix-bug-416.patch', + 'Cantera-%(version)s_skip-broken-tests.patch', +] + dependencies = [ ('Python', '2.7.12'), ('Boost', '1.63.0', versionsuffix), @@ -29,7 +35,7 @@ common_opts = 'env_vars=all CC="$CC" CXX="$CXX" blas_lapack_libs=mkl_rt blas_lap common_opts += ' sundials_include=$EBROOTSUNDIALS/include sundials_libdir=$EBROOTSUNDIALS/lib' buildopts = 'build ' + common_opts runtest = 'test ' + common_opts -buildopts = 'install ' + common_opts +installopts = 'install ' + common_opts prefix_arg = 'prefix=' modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-bug-416.patch b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-bug-416.patch new file mode 100644 index 0000000000..74efe309f7 --- /dev/null +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-bug-416.patch @@ -0,0 +1,138 @@ +backport of fix for broken tests, see https://github.com/Cantera/cantera/issues/416 and https://github.com/Cantera/cantera/pull/430 + +From 0a1257daed71fdd621ac25bcdeea911d84036bfd Mon Sep 17 00:00:00 2001 +From: Ray Speth +Date: Mon, 13 Feb 2017 17:35:35 -0500 +Subject: [PATCH] Stream input to ctml_writer to avoid command line length + limits + +Resolves #416. +--- + src/base/ct2ctml.cpp | 84 ++++++++++------------------------------------------ + 1 file changed, 15 insertions(+), 69 deletions(-) + +diff --git a/src/base/ct2ctml.cpp b/src/base/ct2ctml.cpp +index f04e58f..687fcba 100644 +--- a/src/base/ct2ctml.cpp ++++ b/src/base/ct2ctml.cpp +@@ -18,8 +18,6 @@ + + #ifdef _WIN32 + #include +-#else +-#include + #endif + + using namespace std; +@@ -82,14 +80,6 @@ void ct2ctml(const char* file, const int debug) + static std::string call_ctml_writer(const std::string& text, bool isfile) + { + std::string file, arg; +- bool temp_file_created = false; +- std::string temp_cti_file_name = std::tmpnam(nullptr); +- +- if (temp_cti_file_name.find('\\') == 0) { +- // Some versions of MinGW give paths in the root directory. Using the +- // current directory is more likely to succeed. +- temp_cti_file_name = "." + temp_cti_file_name; +- } + + if (isfile) { + file = text; +@@ -99,44 +89,6 @@ static std::string call_ctml_writer(const std::string& text, bool isfile) + arg = "text=r'''" + text + "'''"; + } + +- // If the user wants to convert a mechanism using a text passed via the +- // source="""...""" +- // argument in python, then we have to make sure that it is short enough +- // to fit in the command line when routed to python as: +- // python -c ... +- // statement downstream in the code +- +- // So, check the max size of a string that can be passed on the command line +- // This is OS Specific. *nix systems have the sysconf() function that tells +- // us the largest argument we can pass. Since such a function does not exist +- // for Windows, we set a safe limit of 32 kB +- +-#ifdef _WIN32 +- long int max_argv_size = 32768; +-#else +- long int max_argv_size = sysconf(_SC_ARG_MAX); +-#endif +- +- if (text.size() > static_cast(max_argv_size) - 500) { +- // If the file is too big to be passed as a command line argument later +- // in the file, then create a temporary file and execute this function +- // as though an input file was specified as the source. +- // We assume the text passed + 500 chars = total size of argv +- +- ofstream temp_cti_file(temp_cti_file_name); +- +- if (temp_cti_file) { +- temp_cti_file << text; +- file = temp_cti_file_name; +- arg = "r'" + file + "'"; +- temp_file_created = true; +- } else { +- // If we are here, then a temp file could not be created +- throw CanteraError("call_ctml_writer", "Very long source argument. " +- "Error creating temporary file '{}'", temp_cti_file_name); +- } +- } +- + #ifdef HAS_NO_PYTHON + //! Section to bomb out if python is not present in the computation + //! environment. +@@ -151,21 +103,23 @@ static std::string call_ctml_writer(const std::string& text, bool isfile) + exec_stream_t python; + python.set_wait_timeout(exec_stream_t::s_all, 1800000); // 30 minutes + stringstream output_stream, error_stream; +- std::vector args; +- args.push_back("-c"); ++ python.start(pypath(), ""); ++ ostream& pyin = python.in(); + +- args.push_back( +- "from __future__ import print_function\n" +- "import sys\n" +- "try:\n" +- " from cantera import ctml_writer\n" +- "except ImportError:\n" +- " print('sys.path: ' + repr(sys.path) + '\\n', file=sys.stderr)\n" +- " raise\n" +- "ctml_writer.convert(" + arg + ", outName='STDOUT')\n" +- "sys.exit(0)\n"); ++ pyin << "from __future__ import print_function\n" ++ "if True:\n" ++ " import sys\n" ++ " try:\n" ++ " from cantera import ctml_writer\n" ++ " except ImportError:\n" ++ " print('sys.path: ' + repr(sys.path) + '\\n', file=sys.stderr)\n" ++ " raise\n" ++ " ctml_writer.convert("; ++ pyin << arg << ", outName='STDOUT')\n"; ++ pyin << " sys.exit(0)\n\n"; ++ pyin << "sys.exit(7)\n"; + +- python.start(pypath(), args.begin(), args.end()); ++ python.close_in(); + std::string line; + + while (python.out().good()) { +@@ -221,14 +175,6 @@ static std::string call_ctml_writer(const std::string& text, bool isfile) + writelog(message.str()); + } + +- if (temp_file_created) { +- // A temp file was created and has to be removed +- bool status = std::remove(temp_cti_file_name.c_str()); +- if (status) { +- writelog("WARNING: Error removing tmp file {}\n", temp_cti_file_name); +- } +- } +- + return python_output; + } + diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch new file mode 100644 index 0000000000..d3b26cf18f --- /dev/null +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch @@ -0,0 +1,25 @@ +skip broken test, fails due to strict floating-point value comparison +see https://github.com/Cantera/cantera/issues/433 + +author: Kenneth Hoste (HPC-UGent) + +--- test/kinetics/kineticsFromScratch.cpp.orig 2017-02-15 16:32:24.518921570 +0100 ++++ test/kinetics/kineticsFromScratch.cpp 2017-02-15 16:32:38.509147212 +0100 +@@ -453,7 +453,7 @@ + } + }; + +-TEST_F(KineticsAddSpecies, add_species_sequential) ++/*TEST_F(KineticsAddSpecies, add_species_sequential) + { + ASSERT_EQ((size_t) 0, kin.nReactions()); + +@@ -480,7 +480,7 @@ + p.addSpecies(species["HO2"]); + kin.addReaction(reactions[4]); + check_rates(5, "O:0.01, H2:0.1, H:0.02, OH:0.03, O2:0.4, AR:0.3, H2O2:0.03, HO2:0.01"); +-} ++}*/ + + TEST_F(KineticsAddSpecies, add_species_err_first) + { -- GitLab From a7cb22ec88506b3657bbd7301146e86f3da462ef Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 20 Feb 2017 16:24:46 +0100 Subject: [PATCH 0449/1311] comment removed --- .../easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb b/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb index 0454227509..ef9c393d1a 100644 --- a/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb +++ b/easybuild/easyconfigs/g/Graphviz/Graphviz-2.38.0-foss-2016b.eb @@ -35,11 +35,6 @@ builddependencies = [ ('SWIG', '3.0.10', '-Python-2.7.12'), ] -#patches = [ -# 'Graphviz-2.38.0_icc_vmalloc.patch', -# 'Graphviz-2.38.0_icc_sfio.patch', -#] - preconfigopts = "sed -i 's/install-data-hook$//g' tclpkg/Makefile.in && " configopts = '--enable-guile=no --enable-lua=no --enable-ocaml=no ' configopts += '--enable-r=no --enable-ruby=no ' -- GitLab From 488878acc274064fc674e9c66a166982e19ace76 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 16:38:31 +0100 Subject: [PATCH 0450/1311] adding easyconfigs: CMake-3.7.2-intel-2016b.eb --- .../c/CMake/CMake-3.7.2-intel-2016b.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb new file mode 100644 index 0000000000..2c33988a54 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.0.2j'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 9c059fcd9caf2012c038c6ff4a5ed575e02762a0 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 20 Feb 2017 16:43:53 +0100 Subject: [PATCH 0451/1311] style changes and sanity check added --- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb | 4 +++- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb | 4 +++- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb index c3490d5f5f..5b1245248a 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb @@ -43,7 +43,8 @@ dependencies = [ ] #The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake -preconfigopts = 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") +ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' +preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' @@ -68,6 +69,7 @@ postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] } diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb index f247b850d9..bd5181fa1c 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb @@ -44,7 +44,8 @@ dependencies = [ preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' #The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake -preconfigopts += 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") +ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' +preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' @@ -69,6 +70,7 @@ postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] } diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb index b38d822003..e7f6df5043 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb @@ -45,7 +45,8 @@ dependencies = [ preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' #The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake -preconfigopts += 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") +ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' +preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' @@ -70,6 +71,7 @@ postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] } -- GitLab From 3f4f319516313cd0929d18752d148e428851a0c8 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 20 Feb 2017 16:47:12 +0100 Subject: [PATCH 0452/1311] style changes and sanity check added --- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb index 261f39024d..7d801b065b 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb @@ -41,7 +41,8 @@ dependencies = [ ] #The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake -preconfigopts = 'mkdir -p {0} && cp -a ../*.tgz {0}. &&'.format("3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/") +ppicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' +preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' configopts += '-DBUILD_PYTHON_SUPPORT=ON ' @@ -66,6 +67,7 @@ postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* sanity_check_paths = { 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] } -- GitLab From e5f70be0bf3385ce2a84f2d4f81460c2ea6a856a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 16:58:51 +0100 Subject: [PATCH 0453/1311] adding easyconfigs: Armadillo-7.800.0-intel-2016b-Python-2.7.12.eb --- ...dillo-7.800.0-intel-2016b-Python-2.7.12.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/a/Armadillo/Armadillo-7.800.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/a/Armadillo/Armadillo-7.800.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/Armadillo/Armadillo-7.800.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..509aa4c19a --- /dev/null +++ b/easybuild/easyconfigs/a/Armadillo/Armadillo-7.800.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'Armadillo' +version = '7.800.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://arma.sourceforge.net/' +description = """Armadillo is an open-source C++ linear algebra library (matrix maths) aiming towards + a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, + as well as a subset of trigonometric and statistics functions.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = ['http://sourceforge.net/projects/arma/files'] + +dependencies = [ + ('Boost', '1.63.0', versionsuffix), + ('arpack-ng', '3.4.0'), + ('Python', '2.7.12'), +] + +builddependencies = [('CMake', '3.7.2')] + +moduleclass = 'numlib' -- GitLab From e883359e8f8a008c4a46f0347a9b7c44b2a825cb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 17:02:22 +0100 Subject: [PATCH 0454/1311] use http rather than ftp source URLs in CFITSIO easyconfigs --- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.300-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.350-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.37-intel-2015a.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb | 2 +- easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-intel-2016a.eb | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.300-ictce-5.5.0.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.300-ictce-5.5.0.eb index 8c90ec640b..df0d72298b 100755 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.300-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.300-ictce-5.5.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'pic': True} srcversion = version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-goolf-1.4.10.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-goolf-1.4.10.eb index 9a156bffea..79b1be118d 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-goolf-1.4.10.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.3.0.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.3.0.eb index bf8fb571c8..a6a8529f92 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.3.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.5.0.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.5.0.eb index acdf7bfb8d..b205f7fd1f 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.34-ictce-5.5.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.350-ictce-5.5.0.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.350-ictce-5.5.0.eb index 177bb20dcc..32bbb18488 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.350-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.350-ictce-5.5.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.37-intel-2015a.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.37-intel-2015a.eb index 08e0bf1795..32720c1e1c 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.37-intel-2015a.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.37-intel-2015a.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb index 654a6284e8..4ea772d549 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-foss-2016a.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-intel-2016a.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-intel-2016a.eb index 6291c97147..d7830dc633 100644 --- a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.38-intel-2016a.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True} srcversion = '%s0' % version.replace('.', '') -source_urls = ['ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/'] +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] sources = ['%%(namelower)s%s.tar.gz' % srcversion] sanity_check_paths = { -- GitLab From f3d0f859cfb5f742029a92697b56d5a930d5d58f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 17:46:00 +0100 Subject: [PATCH 0455/1311] adding easyconfigs: ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb, PCRE-8.40-intel-2016b.eb, CFITSIO-3.41-intel-2016b.eb --- .../c/CFITSIO/CFITSIO-3.41-intel-2016b.eb | 22 ++++++++ .../p/PCRE/PCRE-8.40-intel-2016b.eb | 20 +++++++ ...ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb | 55 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.41-intel-2016b.eb create mode 100644 easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2016b.eb create mode 100644 easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.41-intel-2016b.eb b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.41-intel-2016b.eb new file mode 100644 index 0000000000..382c9e2061 --- /dev/null +++ b/easybuild/easyconfigs/c/CFITSIO/CFITSIO-3.41-intel-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'CFITSIO' +version = '3.41' + +homepage = 'http://heasarc.gsfc.nasa.gov/fitsio/' +description = """CFITSIO is a library of C and Fortran subroutines for reading and writing data files in +FITS (Flexible Image Transport System) data format.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +srcversion = '%s0' % version.replace('.', '') +source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/'] +sources = ['%%(namelower)s%s.tar.gz' % srcversion] + +sanity_check_paths = { + 'files': ['lib/libcfitsio.a'], + 'dirs': ['include'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2016b.eb b/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2016b.eb new file mode 100644 index 0000000000..136a1027bb --- /dev/null +++ b/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2016b.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'PCRE' +version = '8.40' + +homepage = 'http://www.pcre.org/' +description = """ + The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax + and semantics as Perl 5. +""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic --disable-cpp --enable-utf --enable-unicode-properties" + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..2ddf7531c8 --- /dev/null +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,55 @@ +name = 'ROOT' +version = 'v6.06.02' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://root.cern.ch/drupal/' +description = """The ROOT system provides a set of OO frameworks with all the functionality + needed to handle and analyze large amounts of data in a very efficient way.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = ['%(namelower)s_%(version)s.source.tar.gz'] +source_urls = ['ftp://root.cern.ch/root/'] +patches = [ + 'configure_FftwFromMkl_28.patch', + 'ROOT-v5_recent-ifort.patch', + 'ROOT-v5.34.26_libX.patch', +] + +dependencies = [ + ('GSL', '2.3'), + ('libxml2', '2.9.4'), + ('PCRE', '8.40'), + ('CFITSIO', '3.41'), + ('freetype', '2.6.5'), + ('Python', '2.7.12'), + ('zlib', '1.2.8'), + ('X11', '20160819'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('GL2PS', '1.3.9'), +] + +# use external ZLIB +preconfigopts = 'env ZLIB=$EBROOTZLIB ' + +# architecture +arch = 'linuxx8664icc' + +# disable features +configopts = ' --disable-xrootd --disable-mysql --disable-krb5 --disable-odbc ' +configopts += ' --disable-oracle --disable-pgsql --disable-qt --disable-sqlite' +# enable features +configopts += ' --enable-unuran --enable-table --enable-explicitlink --enable-minuit2 --enable-roofit' +configopts += ' --with-gsl-incdir=$EBROOTGSL/include/gsl --with-gsl-libdir=$EBROOTGSL/lib' +configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdir=$MKLROOT/mkl/lib/intel64' +configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' +configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +configopts += ' --with-cfitsio-incdir=$EBROOTCFITSIO/include --with-cfitsio-libdir=$EBROOTCFITSIO/lib' +configopts += ' --with-opengl-incdir=$EBROOTMESA/include --with-opengl-libdir=$EBROOTMESA/lib' +configopts += ' --with-x11-libdir=$EBROOTX11/lib --with-xext-libdir=$EBROOTLIBX11/lib' +configopts += ' --with-xft-libdir=$EBROOTX11/lib' +configopts += ' --with-xpm-incdir=$EBROOTX11/include --with-xpm-libdir=$EBROOTX11/lib' + +moduleclass = 'data' -- GitLab From 42b679976f9cfacadddedc7fe079b4674ed701b5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Feb 2017 18:21:08 +0100 Subject: [PATCH 0456/1311] adding easyconfigs: OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb --- .../BioPerl-1.7.1-intel-2016b-Perl-5.24.0.eb | 28 +++++++++++++++ .../m/MCL/MCL-02.063-intel-2016b.eb | 23 ++++++++++++ .../OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb | 35 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2016b-Perl-5.24.0.eb create mode 100644 easybuild/easyconfigs/m/MCL/MCL-02.063-intel-2016b.eb create mode 100644 easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb diff --git a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..d5d219aba4 --- /dev/null +++ b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2016b-Perl-5.24.0.eb @@ -0,0 +1,28 @@ +# easybuild easyconfig +# +# John Dey jfdey@fredhutch.org +# +# Fred Hutchinson Cancer Research Center + +easyblock = 'PerlModule' + +name = 'BioPerl' +version = '1.7.1' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://www.bioperl.org/' +description = """Bioperl is the product of a community effort to produce Perl code which is useful in biology. + Examples include Sequence objects, Alignment objects and database searching objects.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/bioperl/bioperl-live/archive/'] +sources = ['release-%s.zip' % version.replace('.', '-')] + +dependencies = [ + ('Perl', '5.24.0'), +] + +options = {'modulename': 'Bio::Perl'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MCL/MCL-02.063-intel-2016b.eb b/easybuild/easyconfigs/m/MCL/MCL-02.063-intel-2016b.eb new file mode 100644 index 0000000000..7cdcdee529 --- /dev/null +++ b/easybuild/easyconfigs/m/MCL/MCL-02.063-intel-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'MCL' +version = '02.063' + +homepage = 'http://micans.org/mcl/' +description = """The MCL algorithm is short for the Markov Cluster Algorithm, a fast +and scalable unsupervised cluster algorithm for graphs (also known as networks) based +on simulation of (stochastic) flow in graphs. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://orthomcl.org/common/downloads/software/unsupported/v1.4/'] +sources = ['%(namelower)s-%(version_major)s-%(version_minor)s.tar.gz'] + +preconfigopts = "rm config.cache && " + +sanity_check_paths = { + 'files': ['bin/mcl'], + 'dirs': ['share'] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..6820502e94 --- /dev/null +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb @@ -0,0 +1,35 @@ +easyblock = 'Tarball' + +name = 'OrthoMCL' +version = '1.4' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://orthomcl.org/' +description = """OrthoMCL is a genome-scale algorithm for grouping orthologous protein sequences.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +mcl_majver = '02' +mcl_minver = '063' +sources = ['ORTHOMCL_V%%(version)s_mcl-%s-%s.tar' % (mcl_majver, mcl_minver)] +source_urls = ['http://orthomcl.org/common/downloads/software/unsupported/v%(version)s'] + +dependencies = [ + # a Perl installation providing the DBI module is required + ('Perl', '5.24.0'), + ('MCL', '%s.%s' % (mcl_majver, mcl_minver)), + ('BioPerl', '1.7.1', versionsuffix), +] + +start_dir = 'ORTHOMCLV%(version)s' + +sanity_check_paths = { + 'files': ['orthomcl_module.pm', 'orthomcl.pl', 'README'], + 'dirs': ['sample_data'], +} + +modextrapaths = {'PERL5LIB': ''} + +sanity_check_commands = [('perl', '-e "use orthomcl_module;"')] + +moduleclass = 'bio' -- GitLab From 63f002eaf7b16555acb0b4f49c61c148850393ea Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 21 Feb 2017 15:22:14 +0000 Subject: [PATCH 0457/1311] added eb recipe for igraph --- .../igraph-0.7.1-fix-aclocal-version.patch | 43 +++ .../i/igraph/igraph-0.7.1-intel-2016a.eb | 31 +++ .../igraph-0.7.1-no-lapack-no-blas.patch | 259 ++++++++++++++++++ 3 files changed, 333 insertions(+) create mode 100644 easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch create mode 100644 easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb create mode 100644 easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch new file mode 100644 index 0000000000..fc7ded594f --- /dev/null +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch @@ -0,0 +1,43 @@ +diff -ru igraph-0.7.1.orig/aclocal.m4 igraph-0.7.1/aclocal.m4 +--- igraph-0.7.1.orig/aclocal.m4 2014-04-22 17:54:54.000000000 +0000 ++++ igraph-0.7.1/aclocal.m4 2017-02-21 15:10:50.062279982 +0000 +@@ -1,4 +1,4 @@ +-# generated automatically by aclocal 1.14 -*- Autoconf -*- ++# generated automatically by aclocal 1.15 -*- Autoconf -*- + + # Copyright (C) 1996-2013 Free Software Foundation, Inc. + +@@ -8619,10 +8619,10 @@ + # generated from the m4 files accompanying Automake X.Y. + # (This private macro should not be called outside this file.) + AC_DEFUN([AM_AUTOMAKE_VERSION], +-[am__api_version='1.14' ++[am__api_version='1.15' + dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to + dnl require some minimum version. Point them to the right macro. +-m4_if([$1], [1.14], [], ++m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl + ]) + +@@ -8638,7 +8638,7 @@ + # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. + # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. + AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +-[AM_AUTOMAKE_VERSION([1.14])dnl ++[AM_AUTOMAKE_VERSION([1.15])dnl + m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl + _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +diff -ru igraph-0.7.1.orig/configure igraph-0.7.1/configure +--- igraph-0.7.1.orig/configure 2014-04-22 17:55:00.000000000 +0000 ++++ igraph-0.7.1/configure 2017-02-21 15:10:50.082279777 +0000 +@@ -2532,7 +2532,7 @@ + + + +-am__api_version='1.14' ++am__api_version='1.15' + + ac_aux_dir= + for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb new file mode 100644 index 0000000000..53b27e3fc2 --- /dev/null +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'igraph' +version = '0.7.1' + +homepage = 'http://igraph.org' +description = """igraph is a collection of network analysis tools with the emphasis on +efficiency, portability and ease of use. igraph is open source and free. igraph can be +programmed in R, Python and C/C++.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = ['igraph-%(version)s.tar.gz'] +source_urls = ['https://github.com/igraph/igraph/releases/download/%(version)s'] + +# Fix llapack and llblas when compiling with MKL +# Fix aclocal which is hard-coded to version 1.14 +patches = ['igraph-0.7.1-no-lapack-no-blas.patch', 'igraph-0.7.1-fix-aclocal-version.patch'] + +# link against MKL rather than blas/lapack +preconfigopts = "env LDFLAGS='-lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm'" +configopts = "--with-external-blas=yes --with-external-lapack=yes" + +sanity_check_paths = { + 'files': ['lib/libigraph.so', 'lib/libigraph.la', 'lib/pkgconfig/igraph.pc'] + + ['include/igraph/%s' % x for x in ['igraph_version.h', 'igraph_types.h', 'igraph_constants.h']], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch new file mode 100644 index 0000000000..70635982cf --- /dev/null +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch @@ -0,0 +1,259 @@ +diff -ru igraph-0.7.1.orig/configure igraph-0.7.1/configure +--- igraph-0.7.1.orig/configure 2014-04-22 17:55:00.000000000 +0000 ++++ igraph-0.7.1/configure 2017-02-21 15:00:00.398921297 +0000 +@@ -17266,13 +17266,13 @@ + fi + + if test "$internal_blas" = "no"; then +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for daxpy_ in -lblas" >&5 +-$as_echo_n "checking for daxpy_ in -lblas... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for daxpy_ in " >&5 ++$as_echo_n "checking for daxpy_ in ... " >&6; } + if ${ac_cv_lib_blas_daxpy_+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lblas $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17307,16 +17307,16 @@ + #define HAVE_LIBBLAS 1 + _ACEOF + +- LIBS="-lblas $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for daxpy in -lblas" >&5 +-$as_echo_n "checking for daxpy in -lblas... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for daxpy in " >&5 ++$as_echo_n "checking for daxpy in ... " >&6; } + if ${ac_cv_lib_blas_daxpy+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lblas $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17351,16 +17351,16 @@ + #define HAVE_LIBBLAS 1 + _ACEOF + +- LIBS="-lblas $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DAXPY_ in -lblas" >&5 +-$as_echo_n "checking for DAXPY_ in -lblas... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DAXPY_ in " >&5 ++$as_echo_n "checking for DAXPY_ in ... " >&6; } + if ${ac_cv_lib_blas_DAXPY_+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lblas $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17395,16 +17395,16 @@ + #define HAVE_LIBBLAS 1 + _ACEOF + +- LIBS="-lblas $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DAXPY in -lblas" >&5 +-$as_echo_n "checking for DAXPY in -lblas... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DAXPY in " >&5 ++$as_echo_n "checking for DAXPY in ... " >&6; } + if ${ac_cv_lib_blas_DAXPY+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lblas $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17439,7 +17439,7 @@ + #define HAVE_LIBBLAS 1 + _ACEOF + +- LIBS="-lblas $LIBS" ++ LIBS=" $LIBS" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +@@ -17452,8 +17452,8 @@ + + fi + +- LDFLAGS="${LDFLAGS} -lblas" +- PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} -lblas" ++ LDFLAGS="${LDFLAGS} " ++ PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} " + else + + $as_echo "#define INTERNAL_BLAS 1" >>confdefs.h +@@ -17461,13 +17461,13 @@ + fi + + if test "$internal_lapack" = "no"; then +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlarnv_ in -llapack" >&5 +-$as_echo_n "checking for dlarnv_ in -llapack... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlarnv_ in " >&5 ++$as_echo_n "checking for dlarnv_ in ... " >&6; } + if ${ac_cv_lib_lapack_dlarnv_+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-llapack $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17502,16 +17502,16 @@ + #define HAVE_LIBLAPACK 1 + _ACEOF + +- LIBS="-llapack $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlarnv in -llapack" >&5 +-$as_echo_n "checking for dlarnv in -llapack... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlarnv in " >&5 ++$as_echo_n "checking for dlarnv in ... " >&6; } + if ${ac_cv_lib_lapack_dlarnv+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-llapack $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17546,16 +17546,16 @@ + #define HAVE_LIBLAPACK 1 + _ACEOF + +- LIBS="-llapack $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DLARNV_ in -llapack" >&5 +-$as_echo_n "checking for DLARNV_ in -llapack... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DLARNV_ in " >&5 ++$as_echo_n "checking for DLARNV_ in ... " >&6; } + if ${ac_cv_lib_lapack_DLARNV_+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-llapack $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17590,16 +17590,16 @@ + #define HAVE_LIBLAPACK 1 + _ACEOF + +- LIBS="-llapack $LIBS" ++ LIBS=" $LIBS" + + else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DLARNV in -llapack" >&5 +-$as_echo_n "checking for DLARNV in -llapack... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DLARNV in " >&5 ++$as_echo_n "checking for DLARNV in ... " >&6; } + if ${ac_cv_lib_lapack_DLARNV+:} false; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-llapack $LIBS" ++LIBS=" $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -17634,7 +17634,7 @@ + #define HAVE_LIBLAPACK 1 + _ACEOF + +- LIBS="-llapack $LIBS" ++ LIBS=" $LIBS" + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +@@ -17647,8 +17647,8 @@ + + fi + +- LDFLAGS="${LDFLAGS} -llapack" +- PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} -llapack" ++ LDFLAGS="${LDFLAGS} " ++ PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} " + else + + $as_echo "#define INTERNAL_LAPACK 1" >>confdefs.h +diff -ru igraph-0.7.1.orig/configure.ac igraph-0.7.1/configure.ac +--- igraph-0.7.1.orig/configure.ac 2014-04-22 13:01:17.000000000 +0000 ++++ igraph-0.7.1/configure.ac 2017-02-21 15:00:00.398921297 +0000 +@@ -235,9 +235,9 @@ + AC_CHECK_LIB([blas], [daxpy], [], + AC_CHECK_LIB([blas], [DAXPY_], [], + AC_CHECK_LIB([blas], [DAXPY], [], +- [AC_MSG_RESULT(not found, trying to use -lblas anyway.)])))) +- LDFLAGS="${LDFLAGS} -lblas" +- PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} -lblas" ++ [AC_MSG_RESULT(not found, trying to use anyway.)])))) ++ LDFLAGS="${LDFLAGS} " ++ PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} " + else + AC_DEFINE([INTERNAL_BLAS], [1], [Define to 1 if you use the internal BLAS library]) + fi +@@ -247,9 +247,9 @@ + AC_CHECK_LIB([lapack], [dlarnv], [], + AC_CHECK_LIB([lapack], [DLARNV_], [], + AC_CHECK_LIB([lapack], [DLARNV], [], +- [AC_MSG_RESULT(not found, trying to use -llapack anyway.)])))) +- LDFLAGS="${LDFLAGS} -llapack" +- PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} -llapack" ++ [AC_MSG_RESULT(not found, trying to use anyway.)])))) ++ LDFLAGS="${LDFLAGS} " ++ PKGCONFIG_LIBS_PRIVATE="${PKGCONFIG_LIBS_PRIVATE} " + else + AC_DEFINE([INTERNAL_LAPACK], [1], [Define to 1 if you use the internal LAPACK library]) + fi +diff -ru igraph-0.7.1.orig/tests/testsuite igraph-0.7.1/tests/testsuite +--- igraph-0.7.1.orig/tests/testsuite 2014-04-22 17:55:15.000000000 +0000 ++++ igraph-0.7.1/tests/testsuite 2017-02-21 15:00:00.417921103 +0000 +@@ -3793,9 +3793,9 @@ + + + { set +x +-$as_echo "$at_srcdir/types.at:136: \$CC \${abs_top_srcdir}/examples/simple/igraph_sparsemat2.c -I\${abs_top_srcdir}/include -I\${abs_top_srcdir}/src -I\${abs_top_builddir}/include -I\${abs_top_builddir} -L\${abs_top_builddir}/src/.libs -ligraph -lm -lblas -o itest" ++$as_echo "$at_srcdir/types.at:136: \$CC \${abs_top_srcdir}/examples/simple/igraph_sparsemat2.c -I\${abs_top_srcdir}/include -I\${abs_top_srcdir}/src -I\${abs_top_builddir}/include -I\${abs_top_builddir} -L\${abs_top_builddir}/src/.libs -ligraph -lm -o itest" + at_fn_check_prepare_notrace 'a ${...} parameter expansion' "types.at:136" +-( $at_check_trace; $CC ${abs_top_srcdir}/examples/simple/igraph_sparsemat2.c -I${abs_top_srcdir}/include -I${abs_top_srcdir}/src -I${abs_top_builddir}/include -I${abs_top_builddir} -L${abs_top_builddir}/src/.libs -ligraph -lm -lblas -o itest ++( $at_check_trace; $CC ${abs_top_srcdir}/examples/simple/igraph_sparsemat2.c -I${abs_top_srcdir}/include -I${abs_top_srcdir}/src -I${abs_top_builddir}/include -I${abs_top_builddir} -L${abs_top_builddir}/src/.libs -ligraph -lm -o itest + ) >>"$at_stdout" 2>>"$at_stderr" 5>&- + at_status=$? at_failed=false + $at_check_filter +diff -ru igraph-0.7.1.orig/tests/types.at igraph-0.7.1/tests/types.at +--- igraph-0.7.1.orig/tests/types.at 2014-04-15 13:00:46.000000000 +0000 ++++ igraph-0.7.1/tests/types.at 2017-02-21 15:00:00.417921103 +0000 +@@ -133,7 +133,7 @@ + AT_SETUP([Sparse matrix, multiplications (igraph_sparsemat_t): ]) + AT_KEYWORDS([sparse matrix igraph_sparsemat_t]) + AT_COMPILE_CHECK([simple/igraph_sparsemat2.c], [simple/igraph_sparsemat2.out], +- [], [INTERNAL], [-lblas]) ++ [], [INTERNAL], []) + AT_CLEANUP + + AT_SETUP([Sparse matrix, indexing (igraph_sparsemat_t): ]) -- GitLab From 0731bdbd8e8fee86ea385140bf383a8c52e238e8 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 21 Feb 2017 16:10:35 +0000 Subject: [PATCH 0458/1311] fixed naming convention of the easyconfig file --- .../{igraph-0.7.1-intel-2016a.eb => igraph-0.7.1-intel-2016b.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/i/igraph/{igraph-0.7.1-intel-2016a.eb => igraph-0.7.1-intel-2016b.eb} (100%) diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb similarity index 100% rename from easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016a.eb rename to easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb -- GitLab From 5d951ce558039bed7e9cb0b4f74c29aaf268492b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Feb 2017 20:23:57 +0100 Subject: [PATCH 0459/1311] more style fixes in easyconfigs --- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 2 +- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 2 +- .../b/BayesAss/BayesAss-3.0.4-foss-2016a.eb | 4 ++-- .../b/Bazel/Bazel-0.3.0-CrayGNU-2016.03.eb | 2 +- easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb | 2 +- .../Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb | 2 +- ...fe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb | 2 +- .../Commet-20150415-foss-2016a-Python-2.7.11.eb | 2 +- .../c/CrossTalkZ/CrossTalkZ-1.4-foss-2016a.eb | 2 +- .../easyconfigs/g/GSL/GSL-2.1-CrayGNU-2015.11.eb | 2 +- .../g/gtest/gtest-1.7.0-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb | 2 +- .../i/IOzone/IOzone-3.434-foss-2016a.eb | 8 ++++---- .../Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb | 2 +- .../Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb | 2 +- .../l/LevelDB/LevelDB-1.18-foss-2016a.eb | 2 +- .../l/Libint/Libint-1.1.4-CrayGNU-2015.06.eb | 2 +- .../l/Libint/Libint-1.1.4-CrayGNU-2015.11.eb | 2 +- .../easyconfigs/l/Loki/Loki-0.1.7-foss-2016a.eb | 2 +- .../easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb | 2 +- .../easyconfigs/l/Loki/Loki-0.1.7-intel-2016a.eb | 2 +- .../easyconfigs/l/Loki/Loki-0.1.7-intel-2016b.eb | 2 +- .../l/libpsortb/libpsortb-1.0-foss-2016a.eb | 4 ++-- ...0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb | 2 +- ....67-goolf-1.5.16-Java-1.7.0_79-Python-2.7.9.eb | 2 +- .../m/MIGRATE-N/MIGRATE-N-4.2.8-foss-2016a.eb | 2 +- .../MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb | 2 +- ...MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- .../m/MaCH/MaCH-1.0.18.c-goolf-1.4.10.eb | 2 +- .../m/MaCH/MaCH-1.0.18.c-ictce-6.2.5.eb | 2 +- .../easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb | 4 ++-- .../m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb | 4 ++-- .../easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb | 4 ++-- .../easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb | 4 ++-- .../easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb | 4 ++-- .../easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb | 2 +- .../easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb | 2 +- .../m/Metal/Metal-2011-03-25-foss-2016a.eb | 4 ++-- .../m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb | 2 +- .../m/magma/magma-2.0.0-CrayGNU-2015.11.eb | 2 +- .../numpy-1.9.2-intel-2016b-Python-2.7.12.eb | 2 +- .../OBITools-1.2.9-foss-2016a-Python-2.7.11.eb | 4 ++-- .../p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb | 7 +++---- .../PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb | 2 +- .../PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb | 4 ++-- .../PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb | 8 ++++---- .../p/Paraver/Paraver-4.4.5-GCC-4.7.3.eb | 2 +- .../p/Paraver/Paraver-4.5.6-foss-2015a.eb | 2 +- ...2.0-foss-2016a-Python-2.7.11-freetype-2.6.3.eb | 2 +- .../p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb | 6 +++--- .../easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb | 2 +- .../PyGTS/PyGTS-0.3.1-foss-2016a-Python-2.7.11.eb | 4 ++-- .../PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb | 4 ++-- .../PyGTS-0.3.1-intel-2016a-Python-2.7.11.eb | 4 ++-- .../PyGTS-0.3.1-intel-2016b-Python-2.7.12.eb | 4 ++-- .../p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb | 2 +- .../p/pftoolsV3/pftoolsV3-20160324-foss-2016a.eb | 2 +- ...tobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb | 2 +- ...otobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb | 2 +- ...tobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb | 2 +- ...otobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb | 2 +- ...obuf-python-3.2.0-intel-2016b-Python-2.7.12.eb | 2 +- ...tobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb | 2 +- .../pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb | 2 +- .../easyconfigs/r/Rust/Rust-1.12.0-foss-2016b.eb | 2 +- .../easyconfigs/r/Rust/Rust-1.12.1-foss-2016b.eb | 2 +- .../easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb | 6 +++--- .../s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb | 4 ++-- .../s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb | 4 ++-- .../s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb | 2 +- .../s/Smoldyn/Smoldyn-2.48-foss-2016a.eb | 2 +- .../s/SortMeRNA/SortMeRNA-2.1-foss-2016a.eb | 15 ++++++--------- .../Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb | 2 +- .../Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb | 2 +- .../s/Stacks/Stacks-1.03-goolf-1.4.10.eb | 4 ++-- .../s/Stacks/Stacks-1.03-ictce-5.3.0.eb | 4 ++-- .../s/Stacks/Stacks-1.40-foss-2016a.eb | 4 ++-- .../s/Stacks/Stacks-1.42-foss-2016a.eb | 4 ++-- .../s/Stacks/Stacks-1.44-foss-2016a.eb | 4 ++-- .../s/StringTie/StringTie-1.2.2-goolf-1.4.10.eb | 2 +- .../s/StringTie/StringTie-1.3.0-intel-2016b.eb | 2 +- .../s/StringTie/StringTie-1.3.3-intel-2017a.eb | 2 +- .../easyconfigs/s/Szip/Szip-2.1-iomkl-2016.07.eb | 2 +- .../scipy-0.16.0-intel-2016b-Python-2.7.12.eb | 2 +- .../s/segemehl/segemehl-0.2.0-goolf-1.4.10.eb | 12 ++++++------ .../stemming-1.0-ictce-5.5.0-Python-2.7.6.eb | 2 +- .../s/sympy/sympy-1.0-foss-2016a-Python-2.7.11.eb | 2 +- .../sympy/sympy-1.0-intel-2016a-Python-2.7.11.eb | 2 +- .../easyconfigs/t/TAU/TAU-2.22.2-goolf-1.5.14.eb | 4 ++-- .../t/Trinity/Trinity-2.1.1-intel-2015b.eb | 2 +- .../t/Trinity/Trinity-2.2.0-foss-2016a.eb | 2 +- .../USPEX-9.4.4-intel-2016b-Python-2.7.12.eb | 3 +-- .../xcb-util-image-0.4.0-intel-2015b.eb | 2 +- .../z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb | 2 +- .../z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb | 2 +- 95 files changed, 139 insertions(+), 144 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index 12d87fd3a6..56456bbd62 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -32,7 +32,7 @@ modextrapaths = { 'PYTHONPATH': ['lib/'] } -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index 33dbe5c739..f21285e25b 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -32,7 +32,7 @@ modextrapaths = { 'PYTHONPATH': ['lib/'] } -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } diff --git a/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb b/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb index 0dc4a540af..20f57806c7 100644 --- a/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb +++ b/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb @@ -8,13 +8,13 @@ description = """ BayesAss: Bayesian Inference of Recent Migration Using Multilocus Genotypes """ -toolchain = {'name': 'foss','version': '2016a'} +toolchain = {'name': 'foss', 'version': '2016a'} sources = ['BA3-%(version)s.tar.gz'] source_urls = ['http://downloads.sourceforge.net/project/bayesass/BA3/%(version)s/src/'] dependencies = [ - ('GSL','2.1') + ('GSL', '2.1') ] runtest = 'check' diff --git a/easybuild/easyconfigs/b/Bazel/Bazel-0.3.0-CrayGNU-2016.03.eb b/easybuild/easyconfigs/b/Bazel/Bazel-0.3.0-CrayGNU-2016.03.eb index 2490a42529..b13a4f1946 100644 --- a/easybuild/easyconfigs/b/Bazel/Bazel-0.3.0-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/b/Bazel/Bazel-0.3.0-CrayGNU-2016.03.eb @@ -22,7 +22,7 @@ cmds_map = [('.*', "JAVA_VERSION=1.8 CC=gcc CXX=g++ ./compile.sh")] files_to_copy = [(['output/bazel'], 'bin')] -sanity_check_paths={ +sanity_check_paths = { 'files': ['bin/bazel'], 'dirs': ['bin'], } diff --git a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb index dd70600323..5bfa2535aa 100644 --- a/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb +++ b/easybuild/easyconfigs/b/Bazel/Bazel-0.4.4.eb @@ -23,7 +23,7 @@ cmds_map = [('.*', "./compile.sh")] files_to_copy = [(['output/bazel'], 'bin')] -sanity_check_paths={ +sanity_check_paths = { 'files': ['bin/bazel'], 'dirs': [], } diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb b/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb index 18a7a4b744..b906f81abf 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb @@ -25,6 +25,6 @@ dependencies = [ # also build boost_mpi boost_mpi = True -osdependencies = [('zlib-devel','zlib1g-dev')] +osdependencies = [('zlib-devel', 'zlib1g-dev')] moduleclass = 'devel' diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb index ef1b4dd449..e1484d4027 100644 --- a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb @@ -48,7 +48,7 @@ modextrapaths = {'PYTHONPATH': ['python'] } sanity_check_paths = { 'files': ['bin/caffe'] + - ['lib/%s' % x for x in ['libcaffe.so','libproto.a']] + + ['lib/%s' % x for x in ['libcaffe.so', 'libproto.a']] + ['python/caffe/_caffe.so'] + ['include/caffe/proto/caffe.pb.h'], 'dirs': [], diff --git a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb index 549296f08e..a2bd44831e 100644 --- a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb @@ -21,7 +21,7 @@ dependencies = [ ('Python', '2.7.11'), ] -files_to_copy = ["bin","doc","include","ABCDE_bench",(["Commet.py"],'bin')] +files_to_copy = ['bin', 'doc', 'include', 'ABCDE_bench', (['Commet.py'], 'bin')] sanity_check_paths = { 'files': ['bin/%s' % binfile for binfile in ['Commet.py', 'bvop', 'compare_reads', diff --git a/easybuild/easyconfigs/c/CrossTalkZ/CrossTalkZ-1.4-foss-2016a.eb b/easybuild/easyconfigs/c/CrossTalkZ/CrossTalkZ-1.4-foss-2016a.eb index 2facea57d9..e56c03bf3f 100644 --- a/easybuild/easyconfigs/c/CrossTalkZ/CrossTalkZ-1.4-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CrossTalkZ/CrossTalkZ-1.4-foss-2016a.eb @@ -19,7 +19,7 @@ sources = ['%(name)s_%(version)s.tgz'] dependencies = [('Boost', '1.60.0')] -builddependencies = [('CMake', '3.4.3',)] +builddependencies = [('CMake', '3.4.3')] start_dir = 'src' diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.1-CrayGNU-2015.11.eb b/easybuild/easyconfigs/g/GSL/GSL-2.1-CrayGNU-2015.11.eb index 378ea5f63e..634f2c0cf8 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-2.1-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-2.1-CrayGNU-2015.11.eb @@ -16,7 +16,7 @@ sources = [SOURCELOWER_TAR_GZ] configopts = "--with-pic" -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libgsl.so', 'lib/libgsl.a'], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/g/gtest/gtest-1.7.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/g/gtest/gtest-1.7.0-CrayGNU-2015.11.eb index 3ebc1003fc..0d6323dcef 100644 --- a/easybuild/easyconfigs/g/gtest/gtest-1.7.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/g/gtest/gtest-1.7.0-CrayGNU-2015.11.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'CrayGNU', 'version': '2015.11'} sources = [SOURCE_ZIP] source_urls = ['https://googletest.googlecode.com/files'] -sanity_check_paths={ +sanity_check_paths = { 'files': ['CMakeLists.txt', ], 'dirs': ['include', 'src'], } diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb index 09fb675534..f6d0b1f028 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb @@ -24,7 +24,7 @@ files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] sanity_check_paths = { 'files': ['bin/%s' % binfile for binfile in ['IMB-RMA', 'IMB-EXT', 'IMB-NBC', 'IMB-MPI1']], - 'dirs': ['bin','doc'] + 'dirs': ['bin', 'doc'] } moduleclass = 'perf' diff --git a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb index 8bd48f9c2e..9e03233c20 100644 --- a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb @@ -19,17 +19,17 @@ buildopts = 'linux-AMD64' files_to_copy = [ (['src/current/iozone'], 'bin'), - (['src/current/%s' % docfile for docfile in ['gengnuplot.sh','report.pl','Changes.txt']],'share/doc'), - (['src/current/%s' % docfile for docfile in ['gengnuplot.sh','Generate_Graphs','gnu3d.dem']],'share'), + (['src/current/%s' % docfile for docfile in ['gengnuplot.sh', 'report.pl', 'Changes.txt']], 'share/doc'), + (['src/current/%s' % docfile for docfile in ['gengnuplot.sh', 'Generate_Graphs', 'gnu3d.dem']], 'share'), (['docs/iozone.1'], 'share/man/man1'), - (['docs/%s' % docfile for docfile in ['IOzone_msword_98.doc','IOzone_msword_98.pdf','Iozone_ps.gz','Run_rules.doc']], + (['docs/%s' % docfile for docfile in ['IOzone_msword_98.doc', 'IOzone_msword_98.pdf', 'Iozone_ps.gz', 'Run_rules.doc']], 'share/doc'), ] sanity_check_paths = { 'files': ['bin/iozone'], - 'dirs': ['bin','share/doc','share/man'] + 'dirs': ['bin', 'share/doc', 'share/man'] } moduleclass = 'tools' diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb index 4bb09cbfe2..9a8c7fce6d 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb @@ -2,7 +2,7 @@ easyblock = 'PackedBinary' name = 'Kraken' version = '0.10.5-beta' -versionsuffix='-Perl-%(perlver)s' +versionsuffix ='-Perl-%(perlver)s' homepage = 'http://ccb.jhu.edu/software/kraken/' description = """Kraken is a system for assigning taxonomic labels to short DNA sequences, diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb index 8814a7c92c..fc353606af 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb @@ -2,7 +2,7 @@ easyblock = 'PackedBinary' name = 'Kraken' version = '0.10.5-beta' -versionsuffix='-Perl-%(perlver)s' +versionsuffix ='-Perl-%(perlver)s' homepage = 'http://ccb.jhu.edu/software/kraken/' description = """Kraken is a system for assigning taxonomic labels to short DNA sequences, diff --git a/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb b/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb index f3fb0f0115..c5eee2ec3d 100644 --- a/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb @@ -26,7 +26,7 @@ postinstallcmds=[ sanity_check_paths = { - 'files': ['include/leveldb/cache.h','include/leveldb/table.h', + 'files': ['include/leveldb/cache.h', 'include/leveldb/table.h', 'lib/libleveldb.a', 'lib/libleveldb.%s' % SHLIB_EXT], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.06.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.06.eb index 173c7dbd1e..534b88561a 100644 --- a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.06.eb @@ -18,7 +18,7 @@ sanity_check_paths = { ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + ['lib/lib%s.a' % x for x in ['deriv', 'int', 'r12']] + ['lib/lib%s.so' % x for x in ['deriv', 'int', 'r12']], - 'dirs':[], + 'dirs': [], } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.11.eb index ef47d32bbf..deb2164941 100644 --- a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-CrayGNU-2015.11.eb @@ -18,7 +18,7 @@ sanity_check_paths = { ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + ['lib/lib%s.a' % x for x in ['deriv', 'int', 'r12']] + ['lib/lib%s.so' % x for x in ['deriv', 'int', 'r12']], - 'dirs':[], + 'dirs': [], } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016a.eb b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016a.eb index 07ee053893..9297cefc7a 100644 --- a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016a.eb +++ b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016a.eb @@ -16,7 +16,7 @@ skipsteps = ['configure'] installopts = "prefix=%(installdir)s" -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libloki.a', 'lib/libloki.%s' % SHLIB_EXT, 'lib/libloki.%s.%%(version)s' % SHLIB_EXT], 'dirs': ['include/loki'], } diff --git a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb index 63a5c28598..9301b8c32d 100644 --- a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb +++ b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-foss-2016b.eb @@ -16,7 +16,7 @@ skipsteps = ['configure'] installopts = "prefix=%(installdir)s" -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libloki.a', 'lib/libloki.%s' % SHLIB_EXT, 'lib/libloki.%s.%%(version)s' % SHLIB_EXT], 'dirs': ['include/loki'], } diff --git a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016a.eb b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016a.eb index 353bbfd940..fb4f7b4645 100644 --- a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016a.eb +++ b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016a.eb @@ -16,7 +16,7 @@ skipsteps = ['configure'] installopts = "prefix=%(installdir)s" -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libloki.a', 'lib/libloki.%s' % SHLIB_EXT, 'lib/libloki.%s.%%(version)s' % SHLIB_EXT], 'dirs': ['include/loki'], } diff --git a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016b.eb b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016b.eb index a25e47aac4..a61396897c 100644 --- a/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016b.eb +++ b/easybuild/easyconfigs/l/Loki/Loki-0.1.7-intel-2016b.eb @@ -16,7 +16,7 @@ skipsteps = ['configure'] installopts = "prefix=%(installdir)s" -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libloki.a', 'lib/libloki.%s' % SHLIB_EXT, 'lib/libloki.%s.%%(version)s' % SHLIB_EXT], 'dirs': ['include/loki'], } diff --git a/easybuild/easyconfigs/l/libpsortb/libpsortb-1.0-foss-2016a.eb b/easybuild/easyconfigs/l/libpsortb/libpsortb-1.0-foss-2016a.eb index 41eb85171a..49ee159605 100644 --- a/easybuild/easyconfigs/l/libpsortb/libpsortb-1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libpsortb/libpsortb-1.0-foss-2016a.eb @@ -13,8 +13,8 @@ source_urls = ['http://www.psort.org/download/'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['lib64/libhmmer.so','lib64/libsvmloc.so'], + 'files': ['lib64/libhmmer.so', 'lib64/libsvmloc.so'], 'dirs': [], } -moduleclass = 'bio' \ No newline at end of file +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb index de510f4adc..9b8ad14bb5 100644 --- a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-foss-2016a-Java-1.7.0_79-Python-2.7.11.eb @@ -11,7 +11,7 @@ description = """MDSplus is a set of software tools for data acquisition and sto toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/%(name)s/%(namelower)s/archive'] -sources = ['stable_release-%s.zip' % version.replace('.','-')] +sources = ['stable_release-%s.zip' % version.replace('.', '-')] dependencies = [ ('Java', '1.7.0_79', '', True), diff --git a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-goolf-1.5.16-Java-1.7.0_79-Python-2.7.9.eb b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-goolf-1.5.16-Java-1.7.0_79-Python-2.7.9.eb index 25d836f8e5..9296449814 100644 --- a/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-goolf-1.5.16-Java-1.7.0_79-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/MDSplus/MDSplus-7.0.67-goolf-1.5.16-Java-1.7.0_79-Python-2.7.9.eb @@ -11,7 +11,7 @@ description = """MDSplus is a set of software tools for data acquisition and sto toolchain = {'name': 'goolf', 'version': '1.5.16'} source_urls = ['https://github.com/%(name)s/%(namelower)s/archive'] -sources = ['stable_release-%s.zip' % version.replace('.','-')] +sources = ['stable_release-%s.zip' % version.replace('.', '-')] dependencies = [ ('Java', '1.7.0_79', '', True), diff --git a/easybuild/easyconfigs/m/MIGRATE-N/MIGRATE-N-4.2.8-foss-2016a.eb b/easybuild/easyconfigs/m/MIGRATE-N/MIGRATE-N-4.2.8-foss-2016a.eb index b6f05aeb5d..25e6d72da5 100644 --- a/easybuild/easyconfigs/m/MIGRATE-N/MIGRATE-N-4.2.8-foss-2016a.eb +++ b/easybuild/easyconfigs/m/MIGRATE-N/MIGRATE-N-4.2.8-foss-2016a.eb @@ -35,7 +35,7 @@ prebuildopts = 'make mpis && make clean && ' start_dir = 'src' sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['migrate-n','migrate-n-mpi']], + 'files': ['bin/%s' % x for x in ['migrate-n', 'migrate-n-mpi']], 'dirs': ['man'], } diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb index c8deee658d..3bb9c9fb71 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb @@ -16,7 +16,7 @@ description = """MPJ Express is an open source Java message passing library that toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://sourceforge.net/projects/mpjexpress/files/releases/'] -sources = ['mpj-v%s.tar.gz' % (version.replace('.','_'))] +sources = ['mpj-v%s.tar.gz' % (version.replace('.', '_'))] builddependencies = [('CMake', '3.5.2')] diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb index 273c10ebde..8c2cfb12b9 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb @@ -15,7 +15,7 @@ description = """MPJ Express is an open source Java message passing library that toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['https://sourceforge.net/projects/mpjexpress/files/releases/'] -sources = ['mpj-v%s.tar.gz' % (version.replace('.','_'))] +sources = ['mpj-v%s.tar.gz' % (version.replace('.', '_'))] java = 'Java' javaver = '1.7.0_75' diff --git a/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-goolf-1.4.10.eb b/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-goolf-1.4.10.eb index 3c30407be2..b454981b04 100644 --- a/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-goolf-1.4.10.eb @@ -16,7 +16,7 @@ description = """ MaCH 1.0 is a Markov Chain based haplotyper. It can resolve lo toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['http://www.sph.umich.edu/csg/abecasis/MaCH/download/'] -sources = ['%s.%s.source.tgz' % (name.lower(), version.replace(".c",""))] +sources = ['%s.%s.source.tgz' % (name.lower(), version.replace('.c', ''))] dependencies = [('zlib', '1.2.8')] diff --git a/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-ictce-6.2.5.eb b/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-ictce-6.2.5.eb index 250398115a..e008b133f5 100644 --- a/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/m/MaCH/MaCH-1.0.18.c-ictce-6.2.5.eb @@ -16,7 +16,7 @@ description = """ MaCH 1.0 is a Markov Chain based haplotyper. It can resolve lo toolchain = {'name': 'ictce', 'version': '6.2.5'} source_urls = ['http://www.sph.umich.edu/csg/abecasis/MaCH/download/'] -sources = ['%s.%s.source.tgz' % (name.lower(), version.replace(".c",""))] +sources = ['%s.%s.source.tgz' % (name.lower(), version.replace('.c', ''))] dependencies = [('zlib', '1.2.8')] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb index fb2151e5df..231d3ed99e 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.3'), ('libdrm', '2.4.67'), - ('libX11', '1.6.3',), + ('libX11', '1.6.3'), ('libXext', '1.3.3'), ('libXfixes', '5.0.1'), ('libXdamage', '1.1.4'), @@ -57,7 +57,7 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb index 171b47710c..7b54c5a0b7 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.3'), ('libdrm', '2.4.67'), - ('libX11', '1.6.3',), + ('libX11', '1.6.3'), ('libXext', '1.3.3'), ('libXfixes', '5.0.1'), ('libXdamage', '1.1.4'), @@ -57,7 +57,7 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb index 3282ad740c..ecd0aaeeb3 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.3'), ('libdrm', '2.4.67'), - ('libX11', '1.6.3',), + ('libX11', '1.6.3'), ('libXext', '1.3.3'), ('libXfixes', '5.0.1'), ('libXdamage', '1.1.4'), @@ -57,7 +57,7 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb index a919f2eab9..18bebf34fd 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.3'), ('libdrm', '2.4.68'), - ('libX11', '1.6.3',), + ('libX11', '1.6.3'), ('libXext', '1.3.3'), ('libXfixes', '5.0.1'), ('libXdamage', '1.1.4'), @@ -57,7 +57,7 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb index 54f7d8a513..09f90b3879 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.3'), ('libdrm', '2.4.68'), - ('libX11', '1.6.3',), + ('libX11', '1.6.3'), ('libXext', '1.3.3'), ('libXfixes', '5.0.1'), ('libXdamage', '1.1.4'), @@ -57,7 +57,7 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb index 8152b5bb38..b8a0ae2d3f 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb @@ -50,7 +50,7 @@ configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-share sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb index 90fd4b0810..d9578ef42b 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb @@ -50,7 +50,7 @@ configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-share sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' %SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', + 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] diff --git a/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb b/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb index 6f7d234353..04f7962ec3 100644 --- a/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb @@ -16,11 +16,11 @@ source_urls = ['http://csg.sph.umich.edu/abecasis/Metal/download/'] toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True} -patches=['Metal-%(version)s_Makefile.patch'] +patches = ['Metal-%(version)s_Makefile.patch'] skipsteps=['configure'] -buildopts='all' +buildopts = 'all' installopts = 'INSTALLDIR=%(installdir)s/bin' diff --git a/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb b/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb index 79a432c81f..50e766c0ce 100644 --- a/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb @@ -3,7 +3,7 @@ # sciCORE - University of Basel # SIB Swiss Institute of Bioinformatics -easyblock='MakeCp' +easyblock = 'MakeCp' name = 'Minimac2' version = '2014.9.15' diff --git a/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb index fdd34a04e1..ba77602cd4 100644 --- a/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb @@ -21,7 +21,7 @@ skipsteps = ['configure'] preinstallopts = "export EBINSTALLPREFIX=%(installdir)s && " -sanity_check_paths={ +sanity_check_paths = { 'files': ['lib/libmagma.so', 'lib/libmagma.a'], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb index b0f7a1aaf1..4cb1525158 100644 --- a/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/n/numpy/numpy-1.9.2-intel-2016b-Python-2.7.12.eb @@ -20,7 +20,7 @@ dependencies = [ ('Python', '2.7.12'), ] -# need to use pip rather than regular 'setup.py install,' +# need to use pip rather than regular 'setup.py install' # to ensure that this numpy wins over the one in the Python installation; # using easy_install does not work... use_pip = True diff --git a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb index d30d6266ab..fbe8f5cfab 100644 --- a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb @@ -27,8 +27,8 @@ dependencies = [ options = {'modulename': 'obitools'} sanity_check_paths = { - 'files': ["bin/%s" % binfile for binfile in ['ali2consensus','ecotag','obiaddtaxids','obicount','obistat']], - 'dirs': ['bin','lib/python%(pyshortver)s/site-packages/obitools'], + 'files': ['bin/%s' % binfile for binfile in ['ali2consensus', 'ecotag', 'obiaddtaxids', 'obicount', 'obistat']], + 'dirs': ['bin', 'lib/python%(pyshortver)s/site-packages/obitools'], } moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb b/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb index b46c6bff0d..c67cbf7de9 100644 --- a/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb +++ b/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb @@ -25,10 +25,9 @@ dependencies = [ ] sanity_check_paths = { - 'files': - ["bin/%s" % binfile for binfile in ['gp','gp-2.7','gphelp','tex2mail']] + - [ "include/pari/%s" % incfile for incfile in ['pari.h','genpari.h']], - 'dirs': ["bin","include"] + 'files': ['bin/%s' % binfile for binfile in ['gp', 'gp-2.7', 'gphelp', 'tex2mail']] + + ['include/pari/%s' % incfile for incfile in ['pari.h', 'genpari.h']], + 'dirs': ['bin', 'include'] } moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb index 89ae4df712..32e6adc9b7 100644 --- a/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/p/PGDSpider/PGDSpider-2.1.0.3-Java-1.7.0_80.eb @@ -3,7 +3,7 @@ # sciCORE - University of Basel # SIB Swiss Institute of Bioinformatics -easyblock='Tarball' +easyblock = 'Tarball' name = "PGDSpider" version = "2.1.0.3" diff --git a/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb index bb22d3db40..61cae6188e 100644 --- a/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb @@ -10,7 +10,7 @@ description = """PLAST is a parallel alignment search tool for comparing large p toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/PLAST-software/plast-library/releases/download/v%(version)s/'] -sources=['%(namelower)s_source_v%(version)s.tar.gz'] +sources = ['%(namelower)s_source_v%(version)s.tar.gz'] builddependencies = [ ('CMake', '3.5.2'), @@ -26,4 +26,4 @@ sanity_check_paths = { 'dirs': ['include', 'include/algo', 'include/alignment', 'include/misc'], } -moduleclass = 'bio' \ No newline at end of file +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb index 79449c632c..b5baf3a55c 100644 --- a/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb @@ -18,10 +18,10 @@ patches = [ dependencies = [ ('Perl', '5.22.1'), - ('libpsortb','1.0'), - ('BioPerl','1.6.924','-Perl-5.22.1'), - ('BLAST','2.2.26', '-Linux_x86_64', True), - ('pftoolsV3','20160324'), + ('libpsortb', '1.0'), + ('BioPerl', '1.6.924', '-Perl-5.22.1'), + ('BLAST', '2.2.26', '-Linux_x86_64', True), + ('pftoolsV3', '20160324'), ] options = {'modulename': 'Bio::Tools::PSort'} diff --git a/easybuild/easyconfigs/p/Paraver/Paraver-4.4.5-GCC-4.7.3.eb b/easybuild/easyconfigs/p/Paraver/Paraver-4.4.5-GCC-4.7.3.eb index 298d4bf94a..aabbb0dc24 100644 --- a/easybuild/easyconfigs/p/Paraver/Paraver-4.4.5-GCC-4.7.3.eb +++ b/easybuild/easyconfigs/p/Paraver/Paraver-4.4.5-GCC-4.7.3.eb @@ -24,6 +24,6 @@ dependencies = [ # http://www.bsc.es/computer-sciences/performance-tools/downloads # Requires input of email address for download -sources = ['%(namelower)s-' + "sources" +'-%(version)s.tar.bz2'] +sources = ['%(namelower)s-' + "sources" + '-%(version)s.tar.bz2'] moduleclass = 'perf' diff --git a/easybuild/easyconfigs/p/Paraver/Paraver-4.5.6-foss-2015a.eb b/easybuild/easyconfigs/p/Paraver/Paraver-4.5.6-foss-2015a.eb index 646562570d..f5a5940d0d 100644 --- a/easybuild/easyconfigs/p/Paraver/Paraver-4.5.6-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Paraver/Paraver-4.5.6-foss-2015a.eb @@ -27,6 +27,6 @@ dependencies = [ # http://www.bsc.es/computer-sciences/performance-tools/downloads # Requires input of email address for download -sources = ['%(namelower)s-' + "sources" +'-%(version)s.tar.gz'] +sources = ['%(namelower)s-' + "sources" + '-%(version)s.tar.gz'] moduleclass = 'perf' diff --git a/easybuild/easyconfigs/p/Pillow/Pillow-3.2.0-foss-2016a-Python-2.7.11-freetype-2.6.3.eb b/easybuild/easyconfigs/p/Pillow/Pillow-3.2.0-foss-2016a-Python-2.7.11-freetype-2.6.3.eb index 16cea8d33b..c3b096e84c 100644 --- a/easybuild/easyconfigs/p/Pillow/Pillow-3.2.0-foss-2016a-Python-2.7.11-freetype-2.6.3.eb +++ b/easybuild/easyconfigs/p/Pillow/Pillow-3.2.0-foss-2016a-Python-2.7.11-freetype-2.6.3.eb @@ -18,7 +18,7 @@ versionsuffix += '-freetype-%s' % freetype_ver dependencies = [ ('Python', '2.7.11'), - ('libjpeg-turbo', '1.4.2','-NASM-2.12.01'), + ('libjpeg-turbo', '1.4.2', '-NASM-2.12.01'), ('libpng', '1.6.21'), ('zlib', '1.2.8'), ('LibTIFF', '4.0.6'), diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb index 9f312bdd69..7dffcdb458 100644 --- a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb @@ -20,11 +20,11 @@ sources = ['%(name)s_v%(version)s.tar.gz'] buildopts = 'CXX="$CXX"' -files_to_copy = [(["platanus"],'bin'), "README", "LICENSE"] +files_to_copy = [(['platanus'], 'bin'), 'README', 'LICENSE'] sanity_check_paths = { - 'files': ["bin/platanus"], - 'dirs': [""], + 'files': ['bin/platanus'], + 'dirs': [], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb b/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb index 379bdbc80d..4c23222ada 100644 --- a/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb +++ b/easybuild/easyconfigs/p/ProbABEL/ProbABEL-0.5.0.eb @@ -21,7 +21,7 @@ configopts = '--disable-latex-doc' postinstallcmds = ["mv %(installdir)s/etc/probabel_config.cfg.example %(installdir)s/etc/probabel_config.cfg"] sanity_check_paths = { - 'files': ['bin/probabel', 'bin/pacoxph', 'bin/palinear', 'bin/palogist','etc/probabel_config.cfg'], + 'files': ['bin/probabel', 'bin/pacoxph', 'bin/palinear', 'bin/palogist', 'etc/probabel_config.cfg'], 'dirs': ['share'], } diff --git a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016a-Python-2.7.11.eb index 1438b0e86a..13ffa9e09b 100644 --- a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016a-Python-2.7.11.eb @@ -17,14 +17,14 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Python', '2.7.11'), ('GLib', '2.48.0'), - ('GTS' ,'0.7.6'), + ('GTS', '0.7.6'), ] options = {'modulename': 'gts'} sanity_check_paths = { 'files': ['lib/python%%(pyshortver)s/site-packages/gts/_gts.%s' % SHLIB_EXT], - 'dirs':[], + 'dirs': [], } moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb index 372e050018..57753b92f3 100644 --- a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-foss-2016b-Python-2.7.12.eb @@ -17,14 +17,14 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Python', '2.7.12'), ('GLib', '2.49.5'), - ('GTS' ,'0.7.6'), + ('GTS', '0.7.6'), ] options = {'modulename': 'gts'} sanity_check_paths = { 'files': ['lib/python%%(pyshortver)s/site-packages/gts/_gts.%s' % SHLIB_EXT], - 'dirs':[], + 'dirs': [], } moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016a-Python-2.7.11.eb index 7383e08e64..4f0ee83679 100644 --- a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016a-Python-2.7.11.eb @@ -17,14 +17,14 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Python', '2.7.11'), ('GLib', '2.48.0'), - ('GTS' ,'0.7.6'), + ('GTS', '0.7.6'), ] options = {'modulename': 'gts'} sanity_check_paths = { 'files': ['lib/python%%(pyshortver)s/site-packages/gts/_gts.%s' % SHLIB_EXT], - 'dirs':[], + 'dirs': [], } moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016b-Python-2.7.12.eb index b961fbd0a4..56f61040cd 100644 --- a/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyGTS/PyGTS-0.3.1-intel-2016b-Python-2.7.12.eb @@ -17,14 +17,14 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Python', '2.7.12'), ('GLib', '2.49.5'), - ('GTS' ,'0.7.6'), + ('GTS', '0.7.6'), ] options = {'modulename': 'gts'} sanity_check_paths = { 'files': ['lib/python%%(pyshortver)s/site-packages/gts/_gts.%s' % SHLIB_EXT], - 'dirs':[], + 'dirs': [], } moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb index 62cd674cc5..dcac389893 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb @@ -32,6 +32,6 @@ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] #hidden = True # bare installation: only known module deps for GCCcore tools included -exts_list =[] +exts_list = [] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/pftoolsV3/pftoolsV3-20160324-foss-2016a.eb b/easybuild/easyconfigs/p/pftoolsV3/pftoolsV3-20160324-foss-2016a.eb index 8d5302dd6c..f72f7b4c0e 100644 --- a/easybuild/easyconfigs/p/pftoolsV3/pftoolsV3-20160324-foss-2016a.eb +++ b/easybuild/easyconfigs/p/pftoolsV3/pftoolsV3-20160324-foss-2016a.eb @@ -1,4 +1,4 @@ -easyblock='ConfigureMake' +easyblock = 'ConfigureMake' name = 'pftoolsV3' version = '20160324' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb index 3deb45334a..986362ad06 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.0.2' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb index 64b04ec53c..fbb897d434 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.0.2' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb index 25a3d48ede..8512c8ff8b 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.2.0' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb index a88f02f65a..c25cad0fae 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.2.0' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb index 136b95fa55..2dd5db9c4e 100755 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.2.0' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb index 89a06c0e60..fa54b7dce0 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'protobuf-python' version = '3.2.0' -versionsuffix= '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/google/protobuf/' description = """Python Protocol Buffers runtime library.""" diff --git a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb index bf649cda81..3b3bd56fa2 100644 --- a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb @@ -58,7 +58,7 @@ installopts += '&& cp ../easybuild_obj/bin/* %(installdir)s/bin' sanity_check_paths = { 'files': ['bin/%s' % x for x in ['bms2vtk', 'dc1dinv', 'dc1dsmooth', 'fdem1dinv', 'fdem1dsmooth', 'harmfit', 'invlinearmat', 'mrs1dblock', 'mrs1dsmooth', - 'mt1dinv', 'mt1dsmooth', 'polyfit', 'ttinv', 'ttmod']]+ + 'mt1dinv', 'mt1dsmooth', 'polyfit', 'ttinv', 'ttmod']] + ['lib/libgimli.%s' % SHLIB_EXT, 'lib/python%(pyshortver)s/site-packages/pygimli.h'], 'dirs': ['lib/python%(pyshortver)s/site-packages/%(namelower)s'], } diff --git a/easybuild/easyconfigs/r/Rust/Rust-1.12.0-foss-2016b.eb b/easybuild/easyconfigs/r/Rust/Rust-1.12.0-foss-2016b.eb index de615e7620..04ee893a0e 100644 --- a/easybuild/easyconfigs/r/Rust/Rust-1.12.0-foss-2016b.eb +++ b/easybuild/easyconfigs/r/Rust/Rust-1.12.0-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['https://static.rust-lang.org/dist/'] sources = ['rustc-%(version)s-src.tar.gz'] -builddependencies = [('Python', '2.7.12'), ('CMake','3.6.2')] +builddependencies = [('Python', '2.7.12'), ('CMake', '3.6.2')] sanity_check_paths = { 'files': ['bin/rustc', 'bin/rustdoc'], diff --git a/easybuild/easyconfigs/r/Rust/Rust-1.12.1-foss-2016b.eb b/easybuild/easyconfigs/r/Rust/Rust-1.12.1-foss-2016b.eb index a06ae54597..ed54478e03 100644 --- a/easybuild/easyconfigs/r/Rust/Rust-1.12.1-foss-2016b.eb +++ b/easybuild/easyconfigs/r/Rust/Rust-1.12.1-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['https://static.rust-lang.org/dist/'] sources = ['rustc-%(version)s-src.tar.gz'] -builddependencies = [('Python', '2.7.12'), ('CMake','3.6.2')] +builddependencies = [('Python', '2.7.12'), ('CMake', '3.6.2')] sanity_check_paths = { 'files': ['bin/rustc', 'bin/rustdoc'], diff --git a/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb b/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb index 756efd9115..189d1b413d 100644 --- a/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb @@ -15,9 +15,9 @@ sources = [SOURCELOWER_TAR_GZ] configopts = '--with-mpi' dependencies = [ - ('XZ','5.2.2'), - ('zlib','1.2.8'), - ('GSL','1.16'), # GSL 2.1 does not work. + ('XZ', '5.2.2'), + ('zlib', '1.2.8'), + ('GSL', '1.16'), # GSL 2.1 does not work. ('Boost', '1.61.0'), ] diff --git a/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb b/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb index 15d6744935..a2a47d4c1e 100644 --- a/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb @@ -13,11 +13,11 @@ description = """SUMATRA and SUMACLUST: fast and exact comparison and clustering toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://git.metabarcoding.org/obitools/sumaclust/uploads/69f757c42f2cd45212c587e87c75a00f/'] -sources=['%(namelower)s_v%(version)s.tar.gz'] +sources = ['%(namelower)s_v%(version)s.tar.gz'] prebuildopts = 'make clean &&' -files_to_copy = [(['sumaclust'],'bin'),'sumaclust_user_manual.pdf'] +files_to_copy = [(['sumaclust'], 'bin'), 'sumaclust_user_manual.pdf'] sanity_check_paths = { 'files': ['bin/sumaclust', 'sumaclust_user_manual.pdf'], diff --git a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb index 6ad5e46d49..b96f631d9c 100644 --- a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb @@ -13,11 +13,11 @@ description = """SUMATRA and SUMACLUST: fast and exact comparison and clustering toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://git.metabarcoding.org/obitools/sumatra/uploads/251020bbbd6c6595cb9fce6077e29952/'] -sources=['%(namelower)s_v%(version)s.tar.gz'] +sources = ['%(namelower)s_v%(version)s.tar.gz'] prebuildopts = 'make clean &&' -files_to_copy = [(['sumatra'],'bin'),'sumatra_user_manual.pdf'] +files_to_copy = [(['sumatra'], 'bin'), 'sumatra_user_manual.pdf'] sanity_check_paths = { 'files': ['bin/sumatra', 'sumatra_user_manual.pdf'], diff --git a/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb b/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb index d38576ab53..031be8f553 100644 --- a/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb +++ b/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb @@ -9,7 +9,7 @@ description = """Open Source SAXON XSLT processor developed by Saxonica Limited. toolchain = {'name': 'dummy', 'version': ''} -sources = ['SaxonHE%sJ.zip' % version.replace(".","-")] +sources = ['SaxonHE%sJ.zip' % version.replace('.', '-')] source_urls = ['https://sourceforge.net/projects/saxon/files/Saxon-HE/%(version_major_minor)s' , 'download'] dependencies = [('Java', '1.7.0_79')] diff --git a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb index fc06a65970..0d3233c817 100644 --- a/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Smoldyn/Smoldyn-2.48-foss-2016a.eb @@ -21,7 +21,7 @@ builddependencies = [ ] dependencies = [ - ('LibTIFF','4.0.6'), + ('LibTIFF', '4.0.6'), ('zlib', '1.2.8'), ('freeglut', '3.0.0'), ('libXmu', '1.1.2'), diff --git a/easybuild/easyconfigs/s/SortMeRNA/SortMeRNA-2.1-foss-2016a.eb b/easybuild/easyconfigs/s/SortMeRNA/SortMeRNA-2.1-foss-2016a.eb index f15b6559ac..6af29bdb8b 100644 --- a/easybuild/easyconfigs/s/SortMeRNA/SortMeRNA-2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SortMeRNA/SortMeRNA-2.1-foss-2016a.eb @@ -14,10 +14,8 @@ easyblock = 'ConfigureMake' name = 'SortMeRNA' version = '2.1' -homepage = 'http://bioinfo.lifl.fr/RNA/sortmerna/' -description = """ -SortMeRNA is a biological sequence analysis tool for filtering, mapping and OTU-picking NGS reads. -""" +homepage = 'http://bioinfo.lifl.fr/RNA/sortmerna/' +description = "SortMeRNA is a biological sequence analysis tool for filtering, mapping and OTU-picking NGS reads." toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True} @@ -26,12 +24,11 @@ source_urls = ['https://github.com/biocore/sortmerna/archive/'] sources = ['%(version)s.tar.gz'] # Patch for double includes of header files in Makefile.in -patches=['SortMeRNA-%(version)s_Makefile.in.patch'] - -sanity_check_paths={ - 'files': ['bin/indexdb_rna','bin/sortmerna'], - 'dirs': ['include','sortmerna'] +patches = ['SortMeRNA-%(version)s_Makefile.in.patch'] +sanity_check_paths = { + 'files': ['bin/indexdb_rna', 'bin/sortmerna'], + 'dirs': ['include', 'sortmerna'] } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb index e8b9b26666..656bb0f55e 100644 --- a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-2.7.11.eb @@ -47,7 +47,7 @@ exts_list = [ }), (name, version, { 'source_urls': ['https://pypi.python.org/packages/source/S/Sphinx/'], - 'patches': ['Sphinx-%s-pdflatex_failing_tests.patch' %version], + 'patches': ['Sphinx-%s-pdflatex_failing_tests.patch' % version], }), # sphinx_rtd_theme depends on Sphinx, and should be there to make the tests work ('sphinx_rtd_theme', '0.1.10a0', { diff --git a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb index a58b6b19e0..26cda8da07 100644 --- a/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/s/Sphinx/Sphinx-1.4.8-foss-2016a-Python-3.5.1.eb @@ -47,7 +47,7 @@ exts_list = [ }), (name, version, { 'source_urls': ['https://pypi.python.org/packages/source/S/Sphinx/'], - 'patches': ['Sphinx-%s-pdflatex_failing_tests.patch' %version], + 'patches': ['Sphinx-%s-pdflatex_failing_tests.patch' % version], }), # sphinx_rtd_theme depends on Sphinx, and should be there to make the tests work ('sphinx_rtd_theme', '0.1.10a0', { diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.03-goolf-1.4.10.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.03-goolf-1.4.10.eb index a99ef374cd..5590d0a6b0 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.03-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.03-goolf-1.4.10.eb @@ -5,8 +5,8 @@ version = '1.03' homepage = 'http://creskolab.uoregon.edu/stacks/' description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on - the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose - of building genetic maps and conducting population genomics and phylogeography. + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. """ toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.03-ictce-5.3.0.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.03-ictce-5.3.0.eb index a9bfd6bbb4..005b7b2b57 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.03-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.03-ictce-5.3.0.eb @@ -5,8 +5,8 @@ version = '1.03' homepage = 'http://creskolab.uoregon.edu/stacks/' description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on - the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose - of building genetic maps and conducting population genomics and phylogeography. + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. """ toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb index 189d7f6db0..197e799318 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb @@ -5,8 +5,8 @@ version = '1.40' homepage = 'http://creskolab.uoregon.edu/stacks/' description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on - the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose - of building genetic maps and conducting population genomics and phylogeography. + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. """ toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb index 6d5d6358c8..e042becab7 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb @@ -5,8 +5,8 @@ version = '1.42' homepage = 'http://creskolab.uoregon.edu/stacks/' description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on - the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose - of building genetic maps and conducting population genomics and phylogeography. + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. """ toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb index 6ef7429937..1df7d789c0 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb @@ -5,8 +5,8 @@ version = '1.44' homepage = 'http://creskolab.uoregon.edu/stacks/' description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on - the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, for the purpose - of building genetic maps and conducting population genomics and phylogeography. + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. """ toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/s/StringTie/StringTie-1.2.2-goolf-1.4.10.eb b/easybuild/easyconfigs/s/StringTie/StringTie-1.2.2-goolf-1.4.10.eb index 70ca06ed76..f2c6a5db74 100644 --- a/easybuild/easyconfigs/s/StringTie/StringTie-1.2.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/StringTie/StringTie-1.2.2-goolf-1.4.10.eb @@ -17,7 +17,7 @@ source_urls = ['http://ccb.jhu.edu/software/stringtie/dl/'] sources = [SOURCELOWER_TAR_GZ] files_to_copy = [(['stringtie'], 'bin'), 'README', 'LICENSE'] - + sanity_check_paths = { 'files': ['bin/stringtie'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.0-intel-2016b.eb b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.0-intel-2016b.eb index 424d2b7aeb..69634c30e6 100644 --- a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.0-intel-2016b.eb +++ b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.0-intel-2016b.eb @@ -17,7 +17,7 @@ source_urls = ['http://ccb.jhu.edu/software/stringtie/dl/'] sources = [SOURCELOWER_TAR_GZ] files_to_copy = [(['stringtie'], 'bin'), 'README', 'LICENSE'] - + sanity_check_paths = { 'files': ['bin/stringtie'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb index aa49a6e1bd..2476496f2d 100644 --- a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb +++ b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3-intel-2017a.eb @@ -17,7 +17,7 @@ source_urls = ['http://ccb.jhu.edu/software/stringtie/dl/'] sources = [SOURCELOWER_TAR_GZ] files_to_copy = [(['stringtie'], 'bin'), 'README', 'LICENSE'] - + sanity_check_paths = { 'files': ['bin/stringtie'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-iomkl-2016.07.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-iomkl-2016.07.eb index 512dbbe733..6f12c299b1 100644 --- a/easybuild/easyconfigs/s/Szip/Szip-2.1-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-iomkl-2016.07.eb @@ -15,7 +15,7 @@ sources = [SOURCELOWER_TAR_GZ] configopts = "--with-pic" sanity_check_paths = { - 'files': ["lib/libsz.a", "lib/libsz.%s" %SHLIB_EXT] + + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], 'dirs': [], } diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb index a6ab83c9a7..1d1ef64120 100644 --- a/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/scipy/scipy-0.16.0-intel-2016b-Python-2.7.12.eb @@ -21,7 +21,7 @@ dependencies = [ # recompile patch Cython source file prebuildopts = "cython scipy/linalg/_decomp_update.pyx && " -# need to use pip rather than regular 'setup.py install,' +# need to use pip rather than regular 'setup.py install' # to ensure that this scipy wins over the one in the Python installation; # using easy_install does not work... use_pip = True diff --git a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-goolf-1.4.10.eb b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-goolf-1.4.10.eb index 39c950b357..a9245a0b76 100644 --- a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-goolf-1.4.10.eb @@ -5,8 +5,8 @@ easyblock = 'MakeCp' -name = "segemehl" -version = "0.2.0" +name = 'segemehl' +version = '0.2.0' homepage = 'http://www.bioinf.uni-leipzig.de/Software/segemehl/' description = """ segemehl is a software to map short sequencer reads to reference genomes. @@ -20,7 +20,7 @@ description = """ segemehl is a software to map short sequencer reads to referen toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['http://www.bioinf.uni-leipzig.de/Software/segemehl/'] -sources = ['%s_%s.tar.gz' % (name, version.replace('.','_'))] +sources = ['%s_%s.tar.gz' % (name, version.replace('.', '_'))] parallel = 1 @@ -29,11 +29,11 @@ dependencies = [ ('zlib', '1.2.8'), ] -files_to_copy = [(["lack.x", "segemehl.x", "testrealign.x"], "bin")] +files_to_copy = [(['lack.x', 'segemehl.x', 'testrealign.x'], 'bin')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["lack.x" , "segemehl.x", "testrealign.x"]], - 'dirs': ["."] + 'files': ['bin/%s' % x for x in ['lack.x', 'segemehl.x', 'testrealign.x']], + 'dirs': [] } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/stemming/stemming-1.0-ictce-5.5.0-Python-2.7.6.eb b/easybuild/easyconfigs/s/stemming/stemming-1.0-ictce-5.5.0-Python-2.7.6.eb index 241a1d5fbf..7c1426364f 100644 --- a/easybuild/easyconfigs/s/stemming/stemming-1.0-ictce-5.5.0-Python-2.7.6.eb +++ b/easybuild/easyconfigs/s/stemming/stemming-1.0-ictce-5.5.0-Python-2.7.6.eb @@ -4,7 +4,7 @@ name = "stemming" version = "1.0" homepage = "https://pypi.python.org/pypi/stemming/" -description = """Python implementations of the Porter, Porter2, Paice-Husk, and Lovins stemming algorithms for English.""" +description = "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins stemming algorithms for English." toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/sympy/sympy-1.0-foss-2016a-Python-2.7.11.eb index 6ab91f87e3..1ee4a4a0bc 100644 --- a/easybuild/easyconfigs/s/sympy/sympy-1.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/sympy/sympy-1.0-foss-2016a-Python-2.7.11.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = [PYPI_SOURCE] sources = [SOURCE_TAR_GZ] -#Patch to fix tests +# patch to fix tests patches = ['sympy-1.0_tests-unicode.patch'] dependencies = [ diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2016a-Python-2.7.11.eb index 09140f6d09..1c13652bc7 100644 --- a/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2016a-Python-2.7.11.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = [PYPI_SOURCE] sources = [SOURCE_TAR_GZ] -#Patch to fix tests +# patch to fix tests patches = ['sympy-1.0_tests-unicode.patch'] dependencies = [ diff --git a/easybuild/easyconfigs/t/TAU/TAU-2.22.2-goolf-1.5.14.eb b/easybuild/easyconfigs/t/TAU/TAU-2.22.2-goolf-1.5.14.eb index 2f2888a832..72a246892c 100644 --- a/easybuild/easyconfigs/t/TAU/TAU-2.22.2-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/t/TAU/TAU-2.22.2-goolf-1.5.14.eb @@ -25,8 +25,8 @@ dependencies = [ ('PDT', '3.19'), ('Score-P', '1.2.1'), # obsolete backends, use Score-P instead - #('Scalasca', '1.4.3'), - #('VampirTrace', '5.14.4'), + # ('Scalasca', '1.4.3'), + # ('VampirTrace', '5.14.4'), ] # scalasca and vampirtrace backends are deprecated diff --git a/easybuild/easyconfigs/t/Trinity/Trinity-2.1.1-intel-2015b.eb b/easybuild/easyconfigs/t/Trinity/Trinity-2.1.1-intel-2015b.eb index 5f116c4b08..71643e32bd 100644 --- a/easybuild/easyconfigs/t/Trinity/Trinity-2.1.1-intel-2015b.eb +++ b/easybuild/easyconfigs/t/Trinity/Trinity-2.1.1-intel-2015b.eb @@ -29,7 +29,7 @@ dependencies = [ ('ant', '1.9.6', '-%s-%s' % (java, javaver), True), ('Bowtie', '1.1.2'), ('Bowtie2', '2.2.6'), - ('ncurses', '5.9',), + ('ncurses', '5.9'), ('zlib', '1.2.8'), ('Perl', '5.20.3'), ] diff --git a/easybuild/easyconfigs/t/Trinity/Trinity-2.2.0-foss-2016a.eb b/easybuild/easyconfigs/t/Trinity/Trinity-2.2.0-foss-2016a.eb index 58018d9335..181142b3db 100644 --- a/easybuild/easyconfigs/t/Trinity/Trinity-2.2.0-foss-2016a.eb +++ b/easybuild/easyconfigs/t/Trinity/Trinity-2.2.0-foss-2016a.eb @@ -30,7 +30,7 @@ dependencies = [ ('ant', '1.9.7', '-Java-%(javaver)s', True), ('Bowtie', '1.1.2'), ('Bowtie2', '2.2.8'), - ('ncurses', '6.0',), + ('ncurses', '6.0'), ('zlib', '1.2.8'), ('Perl', '5.22.1'), ] diff --git a/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb index ae04827ae1..ce865ad5b9 100644 --- a/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/u/USPEX/USPEX-9.4.4-intel-2016b-Python-2.7.12.eb @@ -22,9 +22,8 @@ USPEX can also be used for finding low-energy metastable phases, as well as stab toolchain = {'name': 'intel', 'version': '2016b'} +# you have to register before download via http://uspex-team.org/uspex/downloads sources = ['%(name)s-%(version)s.tar.gz'] -#You have to register before download -#source_urls = ['http://uspex-team.org/uspex/downloads'] dependencies = [ ('Python', '2.7.12'), diff --git a/easybuild/easyconfigs/x/xcb-util-image/xcb-util-image-0.4.0-intel-2015b.eb b/easybuild/easyconfigs/x/xcb-util-image/xcb-util-image-0.4.0-intel-2015b.eb index 933c8b66d8..3b7e3d4f5d 100644 --- a/easybuild/easyconfigs/x/xcb-util-image/xcb-util-image-0.4.0-intel-2015b.eb +++ b/easybuild/easyconfigs/x/xcb-util-image/xcb-util-image-0.4.0-intel-2015b.eb @@ -12,7 +12,7 @@ source_urls = ['http://xcb.freedesktop.org/dist/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('xcb-util', '0.4.0',), + ('xcb-util', '0.4.0'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb index 2e2077d599..f85c7f00dd 100644 --- a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-foss-2016b.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] sources = [SOURCELOWER_TAR_GZ] -checksums=['1fb2595d2a905a9e820c976a1d8348bc'] +checksums = ['1fb2595d2a905a9e820c976a1d8348bc'] # --with-pgm will use shipped OpenPGM (in foreign subdir) configopts = '--with-pic --with-system-pgm ' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb index b5d9aa81e3..4c59674a12 100644 --- a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.0-intel-2016b.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] sources = [SOURCELOWER_TAR_GZ] -checksums=['1fb2595d2a905a9e820c976a1d8348bc'] +checksums = ['1fb2595d2a905a9e820c976a1d8348bc'] # --with-pgm will use shipped OpenPGM (in foreign subdir) configopts = '--with-pic --with-system-pgm ' -- GitLab From 87b347871ec03bfdb8474f406965cb522ebf9dfa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Feb 2017 21:08:32 +0100 Subject: [PATCH 0460/1311] more style fixes in easyconfigs --- .../s/SHORE/SHORE-0.9.3-foss-2016a.eb | 8 +++---- .../SLEPc-3.3-p1-goolf-1.4.10-Python-2.7.3.eb | 8 +++---- .../SLEPc-3.3-p1-ictce-5.3.0-Python-2.7.3.eb | 9 ++++---- .../SLEPc-3.5.3-intel-2015a-Python-2.7.9.eb | 8 +++---- .../SLEPc-3.6.2-intel-2015b-Python-2.7.11.eb | 8 +++---- .../s/SPRNG/SPRNG-2.0a-goolf-1.4.10.eb | 3 ++- .../s/SPRNG/SPRNG-2.0a-ictce-5.3.0.eb | 3 ++- .../s/SPRNG/SPRNG-2.0a-ictce-5.5.0.eb | 3 ++- .../s/SPRNG/SPRNG-2.0b-foss-2016a.eb | 3 ++- .../s/SPRNG/SPRNG-2.0b-goolf-1.4.10.eb | 3 ++- .../s/SPRNG/SPRNG-2.0b-ictce-5.3.0.eb | 3 ++- .../s/SPRNG/SPRNG-2.0b-ictce-5.5.0.eb | 3 ++- .../s/SQLite/SQLite-3.14.1-GCCcore-4.9.3.eb | 3 ++- .../SQLite/SQLite-3.8.10.2-GCC-4.9.3-2.25.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-foss-2015a.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-foss-2015b.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-gimkl-2.11.5.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-goolf-1.4.10.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-goolf-1.7.20.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-intel-2015a.eb | 3 ++- .../s/SQLite/SQLite-3.8.10.2-intel-2015b.eb | 3 ++- .../s/SQLite/SQLite-3.8.4.1-goolf-1.4.10.eb | 2 +- .../s/SQLite/SQLite-3.9.2-CrayGNU-2015.11.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-CrayGNU-2016.03.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-foss-2016a.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-gimkl-2.11.5.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-goolf-1.7.20.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-intel-2015b.eb | 3 ++- .../SQLite-3.9.2-intel-2016.02-GCC-4.9.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-intel-2016a.eb | 3 ++- .../s/SQLite/SQLite-3.9.2-iomkl-2016.07.eb | 3 ++- ...Lite-3.9.2-iomkl-2016.09-GCC-4.9.3-2.25.eb | 3 ++- ...R-Fusion-0.6.0-goolf-1.4.10-Perl-5.16.3.eb | 10 ++++----- .../s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb | 7 +++---- .../s/STAR/STAR-2.5.0a-goolf-1.4.10.eb | 7 +++---- .../s/STAR/STAR-2.5.1b-foss-2015b.eb | 9 ++++---- .../s/STAR/STAR-2.5.1b-goolf-1.4.10.eb | 9 ++++---- .../s/STAR/STAR-2.5.2a-foss-2016a.eb | 21 +++++++++---------- .../s/STAR/STAR-2.5.2a-goolf-1.7.20.eb | 21 +++++++++---------- .../s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb | 2 +- .../Saxon-HE-9.7.0.4-Java-1.7.0_79.eb | 2 +- .../s/SeqPrep/SeqPrep-1.2-goolf-1.7.20.eb | 2 +- .../s/Serf/Serf-1.3.8-foss-2015a.eb | 4 ++-- 43 files changed, 117 insertions(+), 98 deletions(-) diff --git a/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb b/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb index 189d1b413d..4078e01a54 100644 --- a/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SHORE/SHORE-0.9.3-foss-2016a.eb @@ -15,10 +15,10 @@ sources = [SOURCELOWER_TAR_GZ] configopts = '--with-mpi' dependencies = [ - ('XZ', '5.2.2'), - ('zlib', '1.2.8'), - ('GSL', '1.16'), # GSL 2.1 does not work. - ('Boost', '1.61.0'), + ('XZ', '5.2.2'), + ('zlib', '1.2.8'), + ('GSL', '1.16'), # GSL 2.1 does not work. + ('Boost', '1.61.0'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-goolf-1.4.10-Python-2.7.3.eb index 3c14ae7d6c..e137f85d4d 100644 --- a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-goolf-1.4.10-Python-2.7.3.eb @@ -3,10 +3,10 @@ version = "3.3-p1" versionsuffix = '-Python-2.7.3' homepage = 'http://www.grycap.upv.es/slepc/' -description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution of -large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for either standard or -generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a partial SVD of a large, sparse, -rectangular matrix, and to solve quadratic eigenvalue problems.""" +description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution + of large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for + either standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a + partial SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-ictce-5.3.0-Python-2.7.3.eb index 1b4c48aa91..e3ec9ea769 100644 --- a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.3-p1-ictce-5.3.0-Python-2.7.3.eb @@ -3,11 +3,10 @@ version = "3.3-p1" versionsuffix = '-Python-2.7.3' homepage = 'http://www.grycap.upv.es/slepc/' -description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution of - large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for either standard or - generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a partial SVD of a large, sparse, - rectangular matrix, and to solve quadratic eigenvalue problems.""" - +description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution + of large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for + either standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a + partial SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.5.3-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.5.3-intel-2015a-Python-2.7.9.eb index 0f01678e28..fd3e7c3888 100644 --- a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.5.3-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.5.3-intel-2015a-Python-2.7.9.eb @@ -3,10 +3,10 @@ version = '3.5.3' versionsuffix = '-Python-2.7.9' homepage = 'http://www.grycap.upv.es/slepc/' -description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution of - large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for either - standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a partial - SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" +description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution + of large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for + either standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a + partial SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.6.2-intel-2015b-Python-2.7.11.eb b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.6.2-intel-2015b-Python-2.7.11.eb index 775feb3837..351ac62d2c 100644 --- a/easybuild/easyconfigs/s/SLEPc/SLEPc-3.6.2-intel-2015b-Python-2.7.11.eb +++ b/easybuild/easyconfigs/s/SLEPc/SLEPc-3.6.2-intel-2015b-Python-2.7.11.eb @@ -3,10 +3,10 @@ version = '3.6.2' versionsuffix = '-Python-2.7.11' homepage = 'http://www.grycap.upv.es/slepc/' -description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution of - large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for either - standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a partial - SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" +description = """SLEPc (Scalable Library for Eigenvalue Problem Computations) is a software library for the solution + of large scale sparse eigenvalue problems on parallel computers. It is an extension of PETSc and can be used for + either standard or generalized eigenproblems, with real or complex arithmetic. It can also be used for computing a + partial SVD of a large, sparse, rectangular matrix, and to solve quadratic eigenvalue problems.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-goolf-1.4.10.eb index 762b8d9995..4a20471e6d 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-goolf-1.4.10.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.3.0.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.3.0.eb index 3d66a9ad8c..9464d99616 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.3.0.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.5.0.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.5.0.eb index 0b67d316a2..380060ff3b 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0a-ictce-5.5.0.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-foss-2016a.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-foss-2016a.eb index 59be5269fa..59c5938c90 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-foss-2016a.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '6.1.0')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-goolf-1.4.10.eb index 4df722877b..36cdd512d2 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-goolf-1.4.10.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.3.0.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.3.0.eb index ba3405a6f5..44b9de5758 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.3.0.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.5.0.eb b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.5.0.eb index 435de49323..def70b5b62 100644 --- a/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/s/SPRNG/SPRNG-2.0b-ictce-5.5.0.eb @@ -16,7 +16,8 @@ patches = ['SPRNG-2.0_fix-metropolis-test.patch'] dependencies = [('GMP', '5.1.3')] -buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' +buildopts = 'PLAT=INTEL MPIDEF="-DSPRNG_MPI" CC="$CC" F77="$F77" PMLCGDEF="-DUSE_PMLCG" ' +buildopts += 'GMPLIB="-L$EBROOTGMP/lib -lgmp" FFXN="-DAdd_"' # does not support parallel build parallel = 1 diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.14.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.14.1-GCCcore-4.9.3.eb index d38cf61101..cb84023340 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.14.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.14.1-GCCcore-4.9.3.eb @@ -37,7 +37,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-GCC-4.9.3-2.25.eb index 62c6f7b8b2..15a228e4cf 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-GCC-4.9.3-2.25.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015a.eb index 06b2583e36..0e3d5b0943 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015a.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015a.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015b.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015b.eb index 5708afcd84..3cdb5e9a31 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015b.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-foss-2015b.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-gimkl-2.11.5.eb index 11fc55a1b6..c9bee3d1d5 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-gimkl-2.11.5.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.4.10.eb index 6a41f5863c..2b1f98a6ac 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.4.10.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.7.20.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.7.20.eb index e06537d494..86716967ff 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-goolf-1.7.20.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015a.eb index 17d369e530..70270519d3 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015a.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015a.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015b.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015b.eb index 26439e2d65..5c38e72b1a 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015b.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.10.2-intel-2015b.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.4.1-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.4.1-goolf-1.4.10.eb index 5d1c89464a..0a07713fbb 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.4.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.4.1-goolf-1.4.10.eb @@ -19,7 +19,7 @@ description = "SQLite: SQL Database Engine in a C Library" # eg. http://www.hwaci.com/sw/sqlite/2013/sqlite-autoconf-3080100.tar.gz source_urls = ['http://www.hwaci.com/sw/sqlite/2014'] -sources = ['sqlite-autoconf-%s0%s0%s0%s.tar.gz' % tuple(version.split('.'))] # very weird way to calculate your filename +sources = ['sqlite-autoconf-%s0%s0%s0%s.tar.gz' % tuple(version.split('.'))] toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2015.11.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2015.11.eb index 429cfc37d8..408f74829a 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2015.11.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2016.03.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2016.03.eb index 51941069b6..5c92bc8136 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-CrayGNU-2016.03.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-foss-2016a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-foss-2016a.eb index 47bee4f624..8902612f46 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-foss-2016a.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-gimkl-2.11.5.eb index 8d257ce664..4b9cea2422 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-gimkl-2.11.5.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-goolf-1.7.20.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-goolf-1.7.20.eb index c1e564bfd6..d75861cbb6 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-goolf-1.7.20.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2015b.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2015b.eb index 79c1231084..177a74a0fb 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2015b.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2015b.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016.02-GCC-4.9.eb index 3555a7ac4c..885ab346a9 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016.02-GCC-4.9.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016a.eb index a35ea6d281..46583c5246 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016a.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-intel-2016a.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.07.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.07.eb index 4eb223b17f..c1a72bbbe4 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.07.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.09-GCC-4.9.3-2.25.eb index e099c4dd67..68f9f01974 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.9.2-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -33,7 +33,8 @@ dependencies = [ parallel = 1 sanity_check_paths = { - 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', 'lib/libsqlite3.%s' % SHLIB_EXT], + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/s/STAR-Fusion/STAR-Fusion-0.6.0-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/s/STAR-Fusion/STAR-Fusion-0.6.0-goolf-1.4.10-Perl-5.16.3.eb index 58fcb58c2d..c87beb9409 100644 --- a/easybuild/easyconfigs/s/STAR-Fusion/STAR-Fusion-0.6.0-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/s/STAR-Fusion/STAR-Fusion-0.6.0-goolf-1.4.10-Perl-5.16.3.eb @@ -30,17 +30,17 @@ exts_filter = ("perldoc -lm %(ext_name)s ", "") exts_list = [ ('Set::IntervalTree', '0.10', { - 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BE/BENBOOTH/'], + 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BE/BENBOOTH/'], }), ('DB_File', '1.835', { - 'source_tmpl': 'DB_File-1.835.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PM/PMQS/'], + 'source_tmpl': 'DB_File-1.835.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PM/PMQS/'], }), ] modextrapaths = { - 'PATH': "", # add installation dir to PATH + 'PATH': "", # add installation dir to PATH 'PERL5LIB': 'lib/perl5/site_perl/%(perlver)s/' } diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb index b6190397ee..bc379c42eb 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb @@ -9,8 +9,7 @@ name = 'STAR' version = '2.5.0a' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} toolchainopts = {'openmp': True} @@ -19,7 +18,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(name)s_%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -29,7 +28,7 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb index ee25be84dd..9bf855263a 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb @@ -9,8 +9,7 @@ name = 'STAR' version = '2.5.0a' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'openmp': True} @@ -19,7 +18,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(name)s_%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -29,7 +28,7 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb index 406fea6072..947c48d129 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb @@ -8,11 +8,10 @@ easyblock = 'MakeCp' name = 'STAR' -version = '2.5.1b' +version = '2.5.1b' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'foss', 'version': '2015b'} toolchainopts = {'openmp': True} @@ -21,7 +20,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -31,7 +30,7 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb index b04986c691..c67472aaa1 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb @@ -6,11 +6,10 @@ easyblock = 'MakeCp' name = 'STAR' -version = '2.5.1b' +version = '2.5.1b' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'openmp': True} @@ -19,7 +18,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -29,7 +28,7 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb index 769bc0a35c..b5f453b8c8 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb @@ -9,11 +9,10 @@ easyblock = 'MakeCp' name = 'STAR' -version = '2.5.2a' +version = '2.5.2a' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'openmp': True} @@ -22,7 +21,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -32,15 +31,15 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [ - (["source/STAR", "source/STARlong"], "bin"), - "CHANGES.md", - "doc", - "extras", - "LICENSE", - "README.md", + (["source/STAR", "source/STARlong"], "bin"), + "CHANGES.md", + "doc", + "extras", + "LICENSE", + "README.md", "RELEASEnotes.md" ] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb index fd35161f48..545af822d8 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb @@ -6,11 +6,10 @@ easyblock = 'MakeCp' name = 'STAR' -version = '2.5.2a' +version = '2.5.2a' homepage = 'https://github.com/alexdobin/STAR' -description = """ STAR aligns RNA-seq reads to a reference genome using - uncompressed suffix arrays. """ +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'openmp': True} @@ -19,7 +18,7 @@ source_urls = ['https://github.com/alexdobin/STAR/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] start_dir = 'source' @@ -29,15 +28,15 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [ - (["source/STAR", "source/STARlong"], "bin"), - "CHANGES.md", - "doc", - "extras", - "LICENSE", - "README.md", + (["source/STAR", "source/STARlong"], "bin"), + "CHANGES.md", + "doc", + "extras", + "LICENSE", + "README.md", "RELEASEnotes.md" ] - + sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], 'dirs': [], diff --git a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb index b96f631d9c..352f9013ea 100644 --- a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb @@ -7,7 +7,7 @@ easyblock = 'MakeCp' name = 'SUMATRA' version = '1.0.20' -homepage = "http://metabarcoding.org/sumatra" +homepage = 'http://metabarcoding.org/sumatra' description = """SUMATRA and SUMACLUST: fast and exact comparison and clustering of sequences.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb b/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb index 031be8f553..2de8d75b11 100644 --- a/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb +++ b/easybuild/easyconfigs/s/Saxon-HE/Saxon-HE-9.7.0.4-Java-1.7.0_79.eb @@ -10,7 +10,7 @@ description = """Open Source SAXON XSLT processor developed by Saxonica Limited. toolchain = {'name': 'dummy', 'version': ''} sources = ['SaxonHE%sJ.zip' % version.replace('.', '-')] -source_urls = ['https://sourceforge.net/projects/saxon/files/Saxon-HE/%(version_major_minor)s' , 'download'] +source_urls = ['https://sourceforge.net/projects/saxon/files/Saxon-HE/%(version_major_minor)s', 'download'] dependencies = [('Java', '1.7.0_79')] diff --git a/easybuild/easyconfigs/s/SeqPrep/SeqPrep-1.2-goolf-1.7.20.eb b/easybuild/easyconfigs/s/SeqPrep/SeqPrep-1.2-goolf-1.7.20.eb index 29459a5481..86ba1ed78f 100644 --- a/easybuild/easyconfigs/s/SeqPrep/SeqPrep-1.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/SeqPrep/SeqPrep-1.2-goolf-1.7.20.eb @@ -23,7 +23,7 @@ dependencies = [ files_to_copy = [(['SeqPrep'], 'bin'), ] parallel = 1 - + sanity_check_paths = { 'files': ['bin/SeqPrep'], 'dirs': [], diff --git a/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb b/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb index 987ce669c8..dd4add0a50 100644 --- a/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb +++ b/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb @@ -21,8 +21,8 @@ builddependencies = [('SCons', '2.3.6', '-Python-2.7.9')] dependencies = [ ('APR', '1.5.2'), ('APR-util', '1.5.4'), - # ('OpenSSL', '1.0.1p'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1p'), # OS dependency should be preferred if the os version is more recent then this version, it's + # nice to have an up to date openssl for security reasons ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -- GitLab From c49c34991d67d6c086933324d4c1533ae7063f73 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 22 Feb 2017 11:09:07 +1030 Subject: [PATCH 0461/1311] meRanTK-1.1.1b added --- .../easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb diff --git a/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb new file mode 100644 index 0000000000..25c303ad85 --- /dev/null +++ b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb @@ -0,0 +1,37 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exequiel Manuel Sepulveda Escobedo +# License:: +# +# Notes:: +## + +name = 'meRanTK' +version = '1.1.1b' + +easyblock = 'BinariesTarball' +homepage = 'http://www.icbi.at/index.html' +description = """meRanTK is a versatile high performance toolkit for complete analysis of methylated RNA data.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://www.icbi.at/software/meRanTK/downloads'] +sources = ['%s/meRanTK-%s.zip' %(version,version,)] + +dependencies = [ +] + +sanity_check_paths = { + 'files':['bin/meRanAnnotate'], + 'files':['bin/meRanCall'], + 'files':['bin/meRanCompare'], + 'files':['bin/meRanGs'], + 'files':['bin/meRanGt'], + 'files':['bin/meRanT'], + 'dirs':[], +} + +moduleclass = 'bio' -- GitLab From 3403881a052f5c7f80732205b069295dae319e9e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 09:44:06 +0100 Subject: [PATCH 0462/1311] fix broken test in Cantera 2.3.0 rather than skipping it --- ...Cantera-2.3.0-intel-2016b-Python-2.7.12.eb | 2 +- .../Cantera-2.3.0_fix-test-reprod.patch | 31 +++++++++++++++++++ .../Cantera-2.3.0_skip-broken-tests.patch | 25 --------------- 3 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-test-reprod.patch delete mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb index 594203f790..62c745b353 100644 --- a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-intel-2016b-Python-2.7.12.eb @@ -15,7 +15,7 @@ sources = ['v%(version)s.tar.gz'] patches = [ 'Cantera-%(version)s_fix-bug-416.patch', - 'Cantera-%(version)s_skip-broken-tests.patch', + 'Cantera-%(version)s_fix-test-reprod.patch', ] dependencies = [ diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-test-reprod.patch b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-test-reprod.patch new file mode 100644 index 0000000000..83dde312f8 --- /dev/null +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_fix-test-reprod.patch @@ -0,0 +1,31 @@ +see https://github.com/Cantera/cantera/issues/433 and https://github.com/Cantera/cantera/commit/11a0727d5ca6172fcb3596dbc11e7f7b1cc2e806 + +From 11a0727d5ca6172fcb3596dbc11e7f7b1cc2e806 Mon Sep 17 00:00:00 2001 +From: Ray Speth +Date: Tue, 21 Feb 2017 20:29:37 -0500 +Subject: [PATCH] [Test] Fix reproducibility of values used in + add_species_sequential test + +Exact floating point equality can be assured only in the case where the species +are added in the same order, since this affects summations involved in +calculating the mixture molecular weight. This resulted in test failures with +certain versions of the Intel compiler. + +Resolves #433. +--- + test/data/kineticsfromscratch.cti | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/data/kineticsfromscratch.cti b/test/data/kineticsfromscratch.cti +index eaba17b..25983cf 100644 +--- a/test/data/kineticsfromscratch.cti ++++ b/test/data/kineticsfromscratch.cti +@@ -2,7 +2,7 @@ units(length='m', time='s', quantity='kmol', act_energy='cal/mol') + + ideal_gas(name = "ohmech", + elements = " O H Ar ", +- species = """ h2o2: H2 H O O2 OH H2O HO2 H2O2 AR""", ++ species = """ h2o2: AR O H2 H OH O2 H2O H2O2 HO2""", + reactions = "all", + transport = "None", + initial_state = state(temperature = 300.0, diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch deleted file mode 100644 index d3b26cf18f..0000000000 --- a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0_skip-broken-tests.patch +++ /dev/null @@ -1,25 +0,0 @@ -skip broken test, fails due to strict floating-point value comparison -see https://github.com/Cantera/cantera/issues/433 - -author: Kenneth Hoste (HPC-UGent) - ---- test/kinetics/kineticsFromScratch.cpp.orig 2017-02-15 16:32:24.518921570 +0100 -+++ test/kinetics/kineticsFromScratch.cpp 2017-02-15 16:32:38.509147212 +0100 -@@ -453,7 +453,7 @@ - } - }; - --TEST_F(KineticsAddSpecies, add_species_sequential) -+/*TEST_F(KineticsAddSpecies, add_species_sequential) - { - ASSERT_EQ((size_t) 0, kin.nReactions()); - -@@ -480,7 +480,7 @@ - p.addSpecies(species["HO2"]); - kin.addReaction(reactions[4]); - check_rates(5, "O:0.01, H2:0.1, H:0.02, OH:0.03, O2:0.4, AR:0.3, H2O2:0.03, HO2:0.01"); --} -+}*/ - - TEST_F(KineticsAddSpecies, add_species_err_first) - { -- GitLab From c37616e94582207c44ea75ea166b7e4f96b664ae Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 10:34:28 +0100 Subject: [PATCH 0463/1311] adding easyconfigs: meshio-1.7.1-intel-2016b-Python-2.7.12.eb --- .../meshio-1.7.1-intel-2016b-Python-2.7.12.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..d41f8720e8 --- /dev/null +++ b/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,39 @@ +easyblock = 'PythonPackage' + +name = 'meshio' +version = '1.7.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/nschloe/meshio' +description = "meshio is a tool for reading/writing various mesh formats representing unstructured meshes" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), # includes numpy + ('h5py', '2.6.0', versionsuffix + '-HDF5-1.8.18'), + ('VTK', '6.3.0', versionsuffix), +] + +exts_defaultclass = 'PythonPackage' +exts_list = [ + ('appdirs', '1.4.0', { + 'source_urls': ['https://pypi.python.org/packages/source/a/appdirs'], + }), + ('requests', '2.13.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], + }), + ('pipdated', '0.1.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pipdated'], + }), +] + +sanity_check_paths = { + 'files': ['bin/meshio-convert'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'cae' -- GitLab From f1d9415b25a98b2b6668a260f91f83978a1a38fc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 11:17:47 +0100 Subject: [PATCH 0464/1311] add patch for XZ 5.2.2 to include 5.1.2alpha symbols required by 'rpm' command on CentOS 7.x --- .../x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb | 2 ++ .../x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb | 2 ++ .../XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb | 2 ++ .../XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb | 2 ++ .../easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb | 2 ++ .../x/XZ/XZ-5.2.2_compat-libs.patch | 27 +++++++++++++++++++ 13 files changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/x/XZ/XZ-5.2.2_compat-libs.patch diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb index 96695c9d5c..6c49a4458b 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-5.4.0-2.26.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.8', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb index f08ddf7da4..001a737c6e 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-4.9.3.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'GCCcore', 'version': '4.9.3'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.8', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb index d4f3584da4..f5d80fe9e5 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2015a.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'foss', 'version': '2015a'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.4', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb index 90393732b9..08aad5d870 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016.04.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'foss', 'version': '2016.04'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.8', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb index 52273a7c6b..deb8d13a10 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a-gettext-0.19.7.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + gettext_ver = '0.19.7' versionsuffix = '-gettext-%s' % gettext_ver diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb index 8985ebbf18..a0c7f313e0 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016a.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.6', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb index aaea1f659f..e891d5536a 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-foss-2016b.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'foss', 'version': '2016b'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.8', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb index 1b63e65341..4c118e934f 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-goolf-1.4.10.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215', '', ('GCC', '4.7.2')), ('gettext', '0.18.2', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb index 2cb7040caf..43117900f6 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-ictce-5.3.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.18.2', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb index 9822949071..0e6f109230 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a-gettext-0.19.7.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + gettext_ver = '0.19.7' versionsuffix = '-gettext-%s' % gettext_ver diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb index bcd46743d2..fdf1453ac4 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016a.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.6', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb index 95304a848d..85431b3d6e 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-intel-2016b.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('Autotools', '20150215'), ('gettext', '0.19.8', '', True), diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2_compat-libs.patch b/easybuild/easyconfigs/x/XZ/XZ-5.2.2_compat-libs.patch new file mode 100644 index 0000000000..3090e4e0ea --- /dev/null +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2_compat-libs.patch @@ -0,0 +1,27 @@ +include two 5.1.2aplha symbols that were included in XZ 5.1.2alpha which are required by the 'rpm' command on CentOS 7.x +see also https://github.com/hpcugent/easybuild-easyconfigs/issues/4036 +original patch: xz-5.2.2-compat-libs.patch, cfr. https://git.centos.org/patch/rpms!xz.git/3f035cee1da9f864609885e5ef2a1be77cd37eee + +--- src/liblzma/liblzma.map.orig 2015-09-29 12:57:36.000000000 +0200 ++++ src/liblzma/liblzma.map 2017-02-22 11:10:33.432868185 +0100 +@@ -95,7 +95,13 @@ + lzma_vli_size; + }; + +-XZ_5.2 { ++XZ_5.1.2alpha { ++global: ++ lzma_stream_encoder_mt; ++ lzma_stream_encoder_mt_memusage; ++} XZ_5.0; ++ ++XZ_5.2.2 { + global: + lzma_block_uncomp_encode; + lzma_cputhreads; +@@ -105,4 +111,4 @@ + + local: + *; +-} XZ_5.0; ++} XZ_5.1.2alpha; -- GitLab From 20aeb9694bf980ddff62a92f4dee8e4c83abec20 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 22 Feb 2017 12:46:14 +0100 Subject: [PATCH 0465/1311] adding easyconfigs: stress-1.0.4-goolf-1.7.20.eb --- .../s/stress/stress-1.0.4-goolf-1.7.20.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/s/stress/stress-1.0.4-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/s/stress/stress-1.0.4-goolf-1.7.20.eb b/easybuild/easyconfigs/s/stress/stress-1.0.4-goolf-1.7.20.eb new file mode 100644 index 0000000000..e91ebd2437 --- /dev/null +++ b/easybuild/easyconfigs/s/stress/stress-1.0.4-goolf-1.7.20.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'ConfigureMake' + +name = 'stress' +version = '1.0.4' + +homepage = 'http://people.seas.harvard.edu/~apw/stress/' +description = """stress is a deliberately simple workload generator for POSIX systems. + It imposes a configurable amount of CPU, memory, I/O, and disk stress on the system. + It is written in C, and is free software licensed under the GPLv2.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['http://people.seas.harvard.edu/~apw/stress/'] +sources = [SOURCELOWER_TAR_GZ] + +parallel = 1 + +runtest = "check" + +sanity_check_paths = { + 'files': ['bin/stress'], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 21638aa97e214095a6737e9ce6bad388d60d7c99 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 22 Feb 2017 13:44:49 +0000 Subject: [PATCH 0466/1311] fixed patch descriptions, added EB autotools --- .../i/igraph/igraph-0.7.1-intel-2016b.eb | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb index 53b27e3fc2..68c14b0bae 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb @@ -14,9 +14,17 @@ toolchainopts = {'pic': True} sources = ['igraph-%(version)s.tar.gz'] source_urls = ['https://github.com/igraph/igraph/releases/download/%(version)s'] -# Fix llapack and llblas when compiling with MKL -# Fix aclocal which is hard-coded to version 1.14 -patches = ['igraph-0.7.1-no-lapack-no-blas.patch', 'igraph-0.7.1-fix-aclocal-version.patch'] +builddependencies = [('Autotools', '20150215')] + +patches = [ + # Author: Maxime Boissonneault + # Remove explicit linking on -llapack and -llblas, which are not found when linking against MKL + 'igraph-%(version)s-no-lapack-no-blas.patch', + + # Author: Maxime Boissonneault + # Fix explicit version of aclocal (specified 1.14). Replaced with version 1.15 which corresponds to the 20150215 Autotools + 'igraph-%(version)s-fix-aclocal-version.patch' + ] # link against MKL rather than blas/lapack preconfigopts = "env LDFLAGS='-lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm'" -- GitLab From fd948a94153527552aaf7a620f48b6b3b7606de7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 15:06:26 +0100 Subject: [PATCH 0467/1311] adding easyconfigs: CGAL-4.9-intel-2016b-Python-2.7.12.eb, Qt5-5.8.0-intel-2016b.eb, Eigen-3.3.3-intel-2016b.eb --- .../CGAL-4.9-intel-2016b-Python-2.7.12.eb | 36 +++++++++++++++++++ .../e/Eigen/Eigen-3.3.3-intel-2016b.eb | 13 +++++++ .../q/Qt5/Qt5-5.8.0-intel-2016b.eb | 33 +++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1e392edbad --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,36 @@ +name = 'CGAL' +version = '4.9' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-%(version)s'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('Python', '2.7.12'), + ('Boost', '1.63.0', versionsuffix), + ('MPFR', '3.1.4'), + ('GMP', '6.1.1'), + ('libGLU', '9.0.0'), + ('Qt5', '5.8.0'), +] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Eigen', '3.3.3'), +] + +configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DWITH_ZLIB=ON -DWITH_MPFR=ON -DWITH_OpenGL=ON -DWITH_Eigen3=ON " +configopts += "-DWITH_GMPXX=ON -DWITH_LAPACK=ON -DWITH_BLAS=ON " + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-intel-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-intel-2016b.eb new file mode 100644 index 0000000000..fdeb038ac8 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-intel-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.3.3' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2016b.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2016b.eb new file mode 100644 index 0000000000..a05afd5096 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'EB_Qt' + +name = 'Qt5' +version = '5.8.0' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/single/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/single/' +] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] + +patches = ['Qt5-5.7.1_fix-nan-inf.patch'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +# qtgamepad needs recent kernel/libevdev (fails on RHEL 6.x) +configopts = '-skip qtgamepad' + +dependencies = [ + ('GLib', '2.49.5'), + ('libpng', '1.6.24'), + ('X11', '20160819'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' -- GitLab From 025436aa2f38dd73c5b65a23d304108a04699be6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 15:38:04 +0100 Subject: [PATCH 0468/1311] also update $PATH in OrthoMCL 1.4 easyconfig --- .../o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb index 6820502e94..55f6dee9e2 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb @@ -28,8 +28,14 @@ sanity_check_paths = { 'dirs': ['sample_data'], } -modextrapaths = {'PERL5LIB': ''} +modextrapaths = { + 'PATH': '', + 'PERL5LIB': '', +} -sanity_check_commands = [('perl', '-e "use orthomcl_module;"')] +sanity_check_commands = [ + "orthomcl.pl --help 2>&1 | grep Usage", + "perl -e 'use orthomcl_module;'", +] moduleclass = 'bio' -- GitLab From 8eb3821e5f0dd65e74a6bdb6d9d8db6d4b28ea71 Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 16:27:20 +0000 Subject: [PATCH 0469/1311] Changed to intel,2017a toolchain --- .../b/Bowtie/Bowtie-1.1.2-intel-2017a.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb new file mode 100644 index 0000000000..e573ab735a --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb @@ -0,0 +1,20 @@ +# Modified from existing version by: +# Robert Schmidt +# Ottawa Hospital Research Institute - Bioinformatics Team +name = 'Bowtie' +version = '1.1.2' + +homepage = 'http://bowtie-bio.sourceforge.net/index.shtml' +description = """Bowtie is an ultrafast, memory-efficient short read aligner. +It aligns short DNA sequences (reads) to the human genome. +""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = ['%(namelower)s-%(version)s-src.zip'] +source_urls = ['http://download.sourceforge.net/bowtie-bio/'] + +patches = ['int64typedef.patch','void2int.patch'] + +moduleclass = 'bio' -- GitLab From 29d274f5ae6614213f1f0fb1db0d873782922e78 Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 17:07:17 +0000 Subject: [PATCH 0470/1311] delete Bowtie-1.1.2-iimkl-2017a.eb --- .../b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb deleted file mode 100644 index 500679eb6f..0000000000 --- a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-iimkl-2017a.eb +++ /dev/null @@ -1,20 +0,0 @@ -# Modified from existing version by: -# Robert Schmidt -# Ottawa Hospital Research Institute - Bioinformatics Team -name = 'Bowtie' -version = '1.1.2' - -homepage = 'http://bowtie-bio.sourceforge.net/index.shtml' -description = """Bowtie is an ultrafast, memory-efficient short read aligner. -It aligns short DNA sequences (reads) to the human genome. -""" - -toolchain = {'name': 'iimkl', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} - -sources = ['%(namelower)s-%(version)s-src.zip'] -source_urls = ['http://download.sourceforge.net/bowtie-bio/'] - -patches = ['int64typedef.patch','void2int.patch'] - -moduleclass = 'bio' -- GitLab From 8566fc7e05fb81386d3b2684d19ee4d523197b3f Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 17:22:28 +0000 Subject: [PATCH 0471/1311] Added comments to void2int.patch --- easybuild/easyconfigs/b/Bowtie/void2int.patch | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/b/Bowtie/void2int.patch b/easybuild/easyconfigs/b/Bowtie/void2int.patch index 80b76591d4..b2b7d467a3 100644 --- a/easybuild/easyconfigs/b/Bowtie/void2int.patch +++ b/easybuild/easyconfigs/b/Bowtie/void2int.patch @@ -1,3 +1,6 @@ +#The latest Intel compiler (2016,2017) complains about the incompatibility of "void *" argument +#being incompatible with parameter of type "int *" +#M. Fujinaga (fujinaga@ualberta.ca) --- processor_support.h.orig 2017-02-02 21:48:42.436432756 +0000 +++ processor_support.h 2017-02-02 21:48:54.419309743 +0000 @@ -44,8 +44,8 @@ -- GitLab From 646b59d0a5b6ad6be3619c1b2c8f519a7f7cff7f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 18:51:23 +0100 Subject: [PATCH 0472/1311] fix hardcoded paths in OrthoMCL 1.4 installation --- .../OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb index 55f6dee9e2..8cdb56fbdb 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb @@ -19,20 +19,30 @@ dependencies = [ ('Perl', '5.24.0'), ('MCL', '%s.%s' % (mcl_majver, mcl_minver)), ('BioPerl', '1.7.1', versionsuffix), + ('BLAST', '2.2.26', '-Linux_x86_64', True), ] start_dir = 'ORTHOMCLV%(version)s' -sanity_check_paths = { - 'files': ['orthomcl_module.pm', 'orthomcl.pl', 'README'], - 'dirs': ['sample_data'], -} +# fix hardcoded paths +postinstallcmds = [ + 'sed -i"" "s@/usr/bin/perl@$EBROOTPERL/bin/perl@g" %(installdir)s/orthomcl.pl', + 'sed -i"" "s@\\"/.*blastall\\";@\\"$EBROOTBLAST/bin/blastall\\";@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@\\"/.*formatdb\\";@\\"$EBROOTBLAST/bin/formatdb\\";@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@\\"/.*mcl\\";@\\"$EBROOTMCL/bin/mcl\\";@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@\\"/.*ORTHOMCL.*%(version)s/\\";@\\"\\$ENV{\'PWD\'}/\\";@g" %(installdir)s/orthomcl_module.pm', +] modextrapaths = { 'PATH': '', 'PERL5LIB': '', } +sanity_check_paths = { + 'files': ['orthomcl_module.pm', 'orthomcl.pl', 'README'], + 'dirs': ['sample_data'], +} + sanity_check_commands = [ "orthomcl.pl --help 2>&1 | grep Usage", "perl -e 'use orthomcl_module;'", -- GitLab From 45166cf524156762318bcb5e1742c503bc032662 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 19:07:17 +0100 Subject: [PATCH 0473/1311] adding easyconfigs: matplotlib-2.0.0-intel-2016b-Python-2.7.12.eb --- .../f/freetype/freetype-2.7.1-intel-2016b.eb | 26 +++++++++++ .../l/libpng/libpng-1.6.27-intel-2016b.eb | 26 +++++++++++ ...plotlib-2.0.0-intel-2016b-Python-2.7.12.eb | 44 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.27-intel-2016b.eb create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb new file mode 100644 index 0000000000..d3a160563e --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb @@ -0,0 +1,26 @@ +name = 'freetype' +version = '2.7.1' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('libpng', '1.6.27'), + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.27-intel-2016b.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.27-intel-2016b.eb new file mode 100644 index 0000000000..e0204f6881 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.27-intel-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.27' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.8')] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..def79919ce --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.12'), + ('freetype', '2.7.1'), + ('libpng', '1.6.27'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From e068d3f6eef6a902f63a06ec7485472d1b1347e4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 19:12:06 +0100 Subject: [PATCH 0474/1311] adding easyconfigs: IPython-5.2.2-intel-2016b-Python-2.7.12.eb --- ...IPython-5.2.2-intel-2016b-Python-2.7.12.eb | 151 ++++++++++++++++++ .../path.py-10.1-intel-2016b-Python-2.7.12.eb | 30 ++++ ...oolkit-1.0.13-intel-2016b-Python-2.7.12.eb | 30 ++++ 3 files changed, 211 insertions(+) create mode 100644 easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/path.py/path.py-10.1-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bc8f42751d --- /dev/null +++ b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,151 @@ +easyblock = 'Bundle' + +name = 'IPython' +version = '5.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://ipython.org/index.html' +description = """IPython provides a rich architecture for interactive computing with: + Powerful interactive shells (terminal and Qt-based). + A browser-based notebook with support for code, text, mathematical expressions, inline plots and other rich media. + Support for interactive data visualization and use of GUI toolkits. + Flexible, embeddable interpreters to load into your own projects. + Easy to use, high performance tools for parallel computing.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +dependencies = [ + ('Python', '2.7.12'), + ('PyZMQ', '16.0.2', '%s-zmq4' % versionsuffix), + ('testpath', '0.3', versionsuffix), + # required by 'nbconvert', but causes problems w.r.t. 'backports' module... + # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 + #('entrypoints', '0.2.2', versionsuffix), + ('path.py', '10.1', versionsuffix), + ('prompt-toolkit', '1.0.13', versionsuffix), +] + +# this is a bundle of Python packages +# XXX: the wheel packages (testpath, entrypoints, path.py, prompt-toolkit) have +# to be included as dependencies because bundling wheels does not work +exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') + +exts_list = [ + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('requests', '2.13.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], + }), + ('nbformat', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbformat/'], + }), + ('Pygments', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/P/Pygments/'], + 'modulename': 'pygments', + }), + ('singledispatch', '3.4.0.3', { + 'source_urls': ['https://pypi.python.org/packages/source/s/singledispatch/'], + }), + ('certifi', '2017.1.23', { + 'source_urls': ['https://pypi.python.org/packages/source/c/certifi/'], + }), + ('backports_abc', '0.5', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports_abc/'], + }), + ('tornado', '4.4.2', { + 'source_urls': ['https://pypi.python.org/packages/source/t/tornado/'], + }), + ('MarkupSafe', '0.23', { + 'source_urls': ['https://pypi.python.org/packages/source/M/MarkupSafe/'], + 'modulename': 'markupsafe', + }), + ('Jinja2', '2.9.5', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + 'modulename': 'jinja2', + }), + ('jupyter_client', '5.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_client/'], + }), + ('functools32', '3.2.3-2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/functools32/'], + }), + ('jsonschema', '2.6.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jsonschema/'], + }), + ('mistune', '0.7.3', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mistune/'], + }), + ('ptyprocess', '0.5.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/ptyprocess/'], + }), + ('terminado', '0.6', { + 'source_urls': ['https://pypi.python.org/packages/source/t/terminado/'], + }), + ('simplegeneric', '0.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/simplegeneric/'], + 'source_tmpl': 'simplegeneric-%(version)s.zip', + }), + ('ipython_genutils', '0.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython_genutils/'], + }), + ('pathlib2', '2.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pathlib2/'], + }), + ('pickleshare', '0.7.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pickleshare/'], + }), + ('traitlets', '4.3.1', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traitlets/'], + }), + ('notebook', '4.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/notebook/'], + }), + ('jupyter_core', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_core/'], + }), + ('ipykernel', '4.5.2', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipykernel/'], + }), + ('pexpect', '4.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], + }), + # disabled because entrypoints on which this depends pull in configparser, which causes problems + # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 + #('nbconvert', '5.1.1', { + # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + #}), + ('backports.shutil_get_terminal_size', '1.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('ipython', version, { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython/'], + 'modulename': 'IPython', + }), + ('ipywidgets', '5.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipywidgets/'], + }), + ('widgetsnbextension', '1.2.6', { + 'source_urls': ['https://pypi.python.org/packages/source/w/widgetsnbextension/'], + }), +] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/ipython'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/IPython'], +} + +sanity_check_commands = [ + ('ipython -h', ''), + ('ipython notebook --help', ''), + ('iptest', ''), + ('iptest2', ''), +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/path.py/path.py-10.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/path.py/path.py-10.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..d128f00a07 --- /dev/null +++ b/easybuild/easyconfigs/p/path.py/path.py-10.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'path.py' +version = '10.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jaraco/path.py' +description = """path.py is a Python library implementing path objects as first-class entities, + allowing common operations on files to be invoked on those path objects directly.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = ['path.py-%(version)s-py2.py3-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['lib/python%(pyshortver)s/site-packages/path.py'], + 'dirs': [], +} + +options = {'modulename': 'path'} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..0dc0fbea27 --- /dev/null +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'prompt-toolkit' +version = '1.0.13' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' +description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = ['prompt_toolkit-%(version)s-py2-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), + ('wcwidth', '0.1.7', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/prompt_toolkit'], +} + +options = {'modulename': 'prompt_toolkit'} + +moduleclass = 'lib' -- GitLab From 7ab0d656dd4fd3170d0b197481127c1d36f2c4a2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 19:13:07 +0100 Subject: [PATCH 0475/1311] adding easyconfigs: VTK-7.1.0-intel-2016b-Python-2.7.12.eb --- .../VTK-7.1.0-intel-2016b-Python-2.7.12.eb | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/v/VTK/VTK-7.1.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/v/VTK/VTK-7.1.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/v/VTK/VTK-7.1.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..ff2f4a0f63 --- /dev/null +++ b/easybuild/easyconfigs/v/VTK/VTK-7.1.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,58 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## + +easyblock = 'CMakeMake' + +name = 'VTK' +version = '7.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.vtk.org' +description = """The Visualization Toolkit (VTK) is an open-source, freely available software system for + 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several + interpreted interface layers including Tcl/Tk, Java, and Python. VTK supports a wide variety of visualization + algorithms including: scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques + such as: implicit modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.vtk.org/files/release/%(version_major_minor)s'] +sources = [ + SOURCE_TAR_GZ, + '%(name)sData-%(version)s.tar.gz', +] + +builddependencies = [('CMake', '3.7.2')] + +dependencies = [ + ('Python', '2.7.12'), + ('libGLU', '9.0.0'), +] + +configopts = "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DVTK_WRAP_PYTHON=ON " +configopts += "-DPYTHON_LIBRARY=$EBROOTPYTHON/lib/libpython%%(pyshortver)s.%s " % SHLIB_EXT +configopts += " -DPYTHON_INCLUDE_DIR=$EBROOTPYTHON/include/python%(pyshortver)s " +preinstallopts = "mkdir -p %(installdir)s/lib/python%(pyshortver)s/site-packages/ && " +preinstallopts += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && " + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/vtk%s-%%(version_major_minor)s' % x for x in ['EncodeString', 'HashSource']], + 'dirs': ['lib/python%(pyshortver)s/site-packages/', 'include/vtk-%(version_major_minor)s'], +} + +sanity_check_commands = [('python', "-c 'import %(namelower)s'")] + +moduleclass = 'vis' -- GitLab From 4b9994f8d76853810b7b36a486c27c2dd76704e1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 19:15:10 +0100 Subject: [PATCH 0476/1311] adding easyconfigs: Yade-2017.01a-intel-2016b-Python-2.7.12.eb, libQGLViewer-2.6.4-intel-2016b.eb, minieigen-0.5.3-intel-2016b-Python-2.7.12-Boost-1.63.0.eb --- .../libQGLViewer-2.6.4-intel-2016b.eb | 20 ++++++ ...-intel-2016b-Python-2.7.12-Boost-1.63.0.eb | 27 ++++++++ ...Yade-2017.01a-intel-2016b-Python-2.7.12.eb | 61 +++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.4-intel-2016b.eb create mode 100644 easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-intel-2016b-Python-2.7.12-Boost-1.63.0.eb create mode 100644 easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.4-intel-2016b.eb b/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.4-intel-2016b.eb new file mode 100644 index 0000000000..b66d7bd768 --- /dev/null +++ b/easybuild/easyconfigs/l/libQGLViewer/libQGLViewer-2.6.4-intel-2016b.eb @@ -0,0 +1,20 @@ +name = 'libQGLViewer' +version = '2.6.4' + +homepage = 'http://libqglviewer.com/' +description = "libQGLViewer is a C++ library based on Qt that eases the creation of OpenGL 3D viewers." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.libqglviewer.com/src/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('libGLU', '9.0.0'), +] + +builddependencies = [('Qt', '4.8.7')] + +start_dir = '%(builddir)s/libQGLViewer-%(version)s/QGLViewer' + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-intel-2016b-Python-2.7.12-Boost-1.63.0.eb b/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-intel-2016b-Python-2.7.12-Boost-1.63.0.eb new file mode 100644 index 0000000000..4226d4a6e1 --- /dev/null +++ b/easybuild/easyconfigs/m/minieigen/minieigen-0.5.3-intel-2016b-Python-2.7.12-Boost-1.63.0.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'minieigen' +version = '0.5.3' +boostver = '1.63.0' +versionsuffix = '-Python-%%(pyver)s-Boost-%s' % boostver + +homepage = 'https://launchpad.net/minieigen/' +description = """A small wrapper for core parts of EIgen, c++ library for linear algebra.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] + +dependencies = [ + ('Boost', boostver, '-Python-%(pyver)s'), + ('Eigen', '3.3.3'), + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': ['lib/python%%(pyshortver)s/site-packages/minieigen.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..5f79b0294c --- /dev/null +++ b/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,61 @@ +easyblock = 'CMakeMake' + +name = 'Yade' +version = '2017.01a' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://yade-dem.org/doc/' +description = """ Yade is an extensible open-source framework for discrete numerical models, + focused on Discrete Element Method. The computation parts are written in c++ using flexible object model, + allowing independent implementation of new alogrithms and interfaces. + Python is used for rapid and concise scene construction, simulation control, postprocessing and debugging. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://launchpad.net/yade/trunk/yade-1.00.0/+download/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Boost', '1.63.0', versionsuffix), + ('CGAL', '4.9', versionsuffix), + ('GDB', '7.11.1', versionsuffix), + ('GL2PS', '1.3.9'), + ('GTS', '0.7.6'), + ('IPython', '5.2.2', versionsuffix), + ('libQGLViewer', '2.6.4'), + ('Loki', '0.1.7'), + ('matplotlib', '1.5.2', versionsuffix), + ('minieigen', '0.5.3', versionsuffix + '-Boost-1.63.0'), + ('PyGTS', '0.3.1', versionsuffix), + ('Python', '2.7.12'), + ('Qt5', '5.8.0'), + ('SQLite', '3.13.0'), + ('VTK', '7.1.0', versionsuffix), + ('zlib', '1.2.8'), +] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Eigen', '3.3.3'), +] + +separate_build_dir = True + +configopts = '-DENABLE_GUI=OFF -DENABLE_LINSOLV=OFF -DENABLE_PFVFLOW=OFF ' +configopts += '-DCGAL_INCLUDE_DIR=$EBROOTCGAL/include ' +configopts += '-DGMP_INCLUDE_DIR=$EBROOTGMP/include -DGMP_LIBRARIES=$EBROOTGMP/lib -DGMPXX_LIBRARIES=$EBROOTGMP/lib ' + +modextrapaths = { + 'LD_LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'LIBRARY_PATH': ['lib64/lib64/yade-%(version)s', 'lib/x86_64-linux-gnu/yade-%(version)s'], + 'PYTHONPATH': ['lib/x86_64-linux-gnu/yade-%(version)s/py', 'lib64/yade-%(version)s/py'], +} + +sanity_check_paths = { + 'files': ['bin/yade-%(version)s', 'bin/yade-%(version)s-batch', + ('lib/x86_64-linux-gnu/yade-%%(version)s/libyade.%s' % SHLIB_EXT, + 'lib64/yade-%%(version)s/libyade.%s' % SHLIB_EXT)], + 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], +} + +moduleclass = 'devel' -- GitLab From dfe6c82f37987b616023f96006e0daec02f9aa83 Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 18:41:24 +0000 Subject: [PATCH 0477/1311] Stylistic changes --- easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb | 7 +++++-- .../Bowtie/{void2int.patch => Bowtie-1.1.2_void2int.patch} | 0 2 files changed, 5 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/b/Bowtie/{void2int.patch => Bowtie-1.1.2_void2int.patch} (100%) diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb index e573ab735a..db4bf02c9f 100644 --- a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb @@ -10,11 +10,14 @@ It aligns short DNA sequences (reads) to the human genome. """ toolchain = {'name': 'intel', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-src.zip'] source_urls = ['http://download.sourceforge.net/bowtie-bio/'] -patches = ['int64typedef.patch','void2int.patch'] +patches = [ + 'int64typedef.patch', + 'void2int.patch' +] moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie/void2int.patch b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2_void2int.patch similarity index 100% rename from easybuild/easyconfigs/b/Bowtie/void2int.patch rename to easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2_void2int.patch -- GitLab From 1a3cdba55d30d08a8a83ffbc4c2c28af55589525 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 19:43:12 +0100 Subject: [PATCH 0478/1311] bump VTK to 7.1.0 in meshio easyconfig for compatibility with Yade 2017.01a --- .../m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb index d41f8720e8..cda151feb8 100644 --- a/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/m/meshio/meshio-1.7.1-intel-2016b-Python-2.7.12.eb @@ -15,7 +15,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.12'), # includes numpy ('h5py', '2.6.0', versionsuffix + '-HDF5-1.8.18'), - ('VTK', '6.3.0', versionsuffix), + ('VTK', '7.1.0', versionsuffix), ] exts_defaultclass = 'PythonPackage' -- GitLab From 4ac20d4004c8e89e3659ce635ac7a8275231c4e9 Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 19:01:17 +0000 Subject: [PATCH 0479/1311] Correct patch file name in easyconfig --- easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb index db4bf02c9f..2f5b9aef33 100644 --- a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb @@ -17,7 +17,7 @@ source_urls = ['http://download.sourceforge.net/bowtie-bio/'] patches = [ 'int64typedef.patch', - 'void2int.patch' + 'Bowtie-%(version)_void2int.patch' ] moduleclass = 'bio' -- GitLab From 764c127d8474caf90fd492d65653aed6b910fe94 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 20:02:33 +0100 Subject: [PATCH 0480/1311] fix remarks --- .../easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb | 5 ++++- easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb | 5 ++++- easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb | 5 ++++- easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb | 5 ++++- easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb | 9 ++------- easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb | 9 ++------- easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb | 5 +++-- 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb index bc379c42eb..04188b3f1a 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-GNU-4.9.3-2.25.eb @@ -27,7 +27,10 @@ buildopts = ' STAR && make STARlong' parallel = 1 -files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb index 9bf855263a..457ab933f7 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.0a-goolf-1.4.10.eb @@ -27,7 +27,10 @@ buildopts = ' STAR && make STARlong' parallel = 1 -files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb index 947c48d129..b4f28e006e 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-foss-2015b.eb @@ -29,7 +29,10 @@ buildopts = ' STAR && make STARlong' parallel = 1 -files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb index c67472aaa1..acf5436cbe 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.1b-goolf-1.4.10.eb @@ -27,7 +27,10 @@ buildopts = ' STAR && make STARlong' parallel = 1 -files_to_copy = [(["source/STAR", "source/STARlong"], "bin"), "CHANGES.md", "doc", "extras", "LICENSE", "README.md", "RELEASEnotes.md"] +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] sanity_check_paths = { 'files': ["bin/STAR", "bin/STARlong"], diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb index b5f453b8c8..43cc47b2aa 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-foss-2016a.eb @@ -31,13 +31,8 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [ - (["source/STAR", "source/STARlong"], "bin"), - "CHANGES.md", - "doc", - "extras", - "LICENSE", - "README.md", - "RELEASEnotes.md" + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb index 545af822d8..d8c6f0be04 100644 --- a/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.2a-goolf-1.7.20.eb @@ -28,13 +28,8 @@ buildopts = ' STAR && make STARlong' parallel = 1 files_to_copy = [ - (["source/STAR", "source/STARlong"], "bin"), - "CHANGES.md", - "doc", - "extras", - "LICENSE", - "README.md", - "RELEASEnotes.md" + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb b/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb index dd4add0a50..2852bb52f5 100644 --- a/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb +++ b/easybuild/easyconfigs/s/Serf/Serf-1.3.8-foss-2015a.eb @@ -21,8 +21,9 @@ builddependencies = [('SCons', '2.3.6', '-Python-2.7.9')] dependencies = [ ('APR', '1.5.2'), ('APR-util', '1.5.4'), - # ('OpenSSL', '1.0.1p'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it is nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -- GitLab From 11f27f266a4522fccc531926731e2b381ac4f235 Mon Sep 17 00:00:00 2001 From: Masao Fujinaga Date: Wed, 22 Feb 2017 19:07:01 +0000 Subject: [PATCH 0481/1311] second correction of easyconfig --- easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb index 2f5b9aef33..a59e6f69ac 100644 --- a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2017a.eb @@ -17,7 +17,7 @@ source_urls = ['http://download.sourceforge.net/bowtie-bio/'] patches = [ 'int64typedef.patch', - 'Bowtie-%(version)_void2int.patch' + 'Bowtie-%(version)s_void2int.patch' ] moduleclass = 'bio' -- GitLab From 7800a4e5451a7ebaed4e93fa4dd64415f2ea7142 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 22 Feb 2017 20:03:38 +0000 Subject: [PATCH 0482/1311] Added comments in the patch --- .../i/igraph/igraph-0.7.1-fix-aclocal-version.patch | 6 ++++++ .../i/igraph/igraph-0.7.1-no-lapack-no-blas.patch | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch index fc7ded594f..81b9d69187 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-fix-aclocal-version.patch @@ -1,3 +1,9 @@ +Change the version of autoconf which is required to configure from 1.14 to 1.15 + +From: Maxime Boissonneault +Date: Wed, 22 Feb 2017 + + diff -ru igraph-0.7.1.orig/aclocal.m4 igraph-0.7.1/aclocal.m4 --- igraph-0.7.1.orig/aclocal.m4 2014-04-22 17:54:54.000000000 +0000 +++ igraph-0.7.1/aclocal.m4 2017-02-21 15:10:50.062279982 +0000 diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch index 70635982cf..339e68cee3 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-no-lapack-no-blas.patch @@ -1,3 +1,8 @@ +Removes explicit linking of libblas and liblapack for when linking with MKL + +From: Maxime Boissonneault +Date: Wed, 22 Feb 2017 + diff -ru igraph-0.7.1.orig/configure igraph-0.7.1/configure --- igraph-0.7.1.orig/configure 2014-04-22 17:55:00.000000000 +0000 +++ igraph-0.7.1/configure 2017-02-21 15:00:00.398921297 +0000 -- GitLab From eb544d54e03bef5fc962f1c76c127517e7765a00 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 21:29:48 +0100 Subject: [PATCH 0483/1311] clean up trailing whitespace --- .../a/ant/ant-1.10.0-Java-1.8.0_112.eb | 2 +- .../a/ant/ant-1.9.7-Java-1.8.0_92.eb | 2 +- ...ommet-20150415-foss-2016a-Python-2.7.11.eb | 22 +++++----- ...cutadapt-1.9.1-foss-2016a-Python-2.7.11.eb | 2 +- .../GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb | 2 +- .../GMAP-GSNAP-2016-05-01-foss-2016a.eb | 2 +- .../GMAP-GSNAP-2016-11-07-foss-2016b.eb | 2 +- .../g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb | 4 +- .../easyconfigs/g/gompi/gompi-2016.09.eb | 36 +++++++-------- .../g/grabix/grabix-0.1.6-goolf-1.7.20.eb | 6 +-- .../h/hwloc/hwloc-1.11.4-GCC-6.2.0-2.27.eb | 44 +++++++++---------- .../h/hwloc/hwloc-1.11.4-gcccuda-2016.10.eb | 44 +++++++++---------- .../h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb | 44 +++++++++---------- .../i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb | 8 ++-- .../Mawk/Mawk-1.3.4-goolf-1.4.10-20150503.eb | 4 +- .../m/Mono/Mono-2.10.6-intel-2016b.eb | 2 +- .../m/Mono/Mono-4.6.2.7-intel-2016b.eb | 2 +- easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb | 2 +- .../networkx-1.11-foss-2016a-Python-2.7.11.eb | 2 +- .../networkx-1.11-foss-2016a-Python-3.5.1.eb | 2 +- .../numactl/numactl-2.0.11-GCC-6.2.0-2.27.eb | 40 ++++++++--------- .../numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb | 40 ++++++++--------- .../p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb | 2 +- .../PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb | 2 +- .../p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb | 2 +- .../SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb | 6 +-- 26 files changed, 163 insertions(+), 163 deletions(-) diff --git a/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb index cf1f192a70..2d88d28b75 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb @@ -1,6 +1,6 @@ name = 'ant' version = '1.10.0' -versionsuffix = '-Java-%(javaver)s' +versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb b/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb index 186bcfb543..175bb2628a 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb @@ -1,6 +1,6 @@ name = 'ant' version = '1.9.7' -versionsuffix = '-Java-%(javaver)s' +versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files diff --git a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb index a2bd44831e..3abe5c93c9 100644 --- a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb @@ -1,27 +1,27 @@ -easyblock = 'MakeCp' +easyblock = 'MakeCp' -name = 'Commet' -version = '20150415' +name = 'Commet' +version = '20150415' commit = '4ef0705' -versionsuffix = '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' -homepage = 'https://colibread.inria.fr/software/commet/' +homepage = 'https://colibread.inria.fr/software/commet/' description = """ COMMET ("COmpare Multiple METagenomes") provides a global similarity overview between all datasets of - a large metagenomic project. -""" + a large metagenomic project. +""" toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/pierrepeterlongo/commet/archive'] sources = ['%s.tar.gz' % commit] -checksums = ['19cba09ca7a92eaed75ed6af820d9451'] +checksums = ['19cba09ca7a92eaed75ed6af820d9451'] dependencies = [ - ('Python', '2.7.11'), -] + ('Python', '2.7.11'), +] -files_to_copy = ['bin', 'doc', 'include', 'ABCDE_bench', (['Commet.py'], 'bin')] +files_to_copy = ['bin', 'doc', 'include', 'ABCDE_bench', (['Commet.py'], 'bin')] sanity_check_paths = { 'files': ['bin/%s' % binfile for binfile in ['Commet.py', 'bvop', 'compare_reads', diff --git a/easybuild/easyconfigs/c/cutadapt/cutadapt-1.9.1-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/cutadapt/cutadapt-1.9.1-foss-2016a-Python-2.7.11.eb index 5c57e5846c..99d5dfa45c 100644 --- a/easybuild/easyconfigs/c/cutadapt/cutadapt-1.9.1-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/cutadapt/cutadapt-1.9.1-foss-2016a-Python-2.7.11.eb @@ -9,7 +9,7 @@ easyblock = "PythonPackage" name = 'cutadapt' version = '1.9.1' -versionsuffix = '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'http://opensource.scilifelab.se/projects/cutadapt/' description = """ Cutadapt finds and removes adapter sequences, primers, poly-A tails and diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb index db19b2803a..5440f25394 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb @@ -3,7 +3,7 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'ConfigureMake' +easyblock = 'ConfigureMake' name = 'GMAP-GSNAP' version = "2015-12-31.v2" diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb index 84e054bf9c..5e9cfedc47 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb @@ -3,7 +3,7 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'ConfigureMake' +easyblock = 'ConfigureMake' name = 'GMAP-GSNAP' version = '2016-05-01' diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb index a8ca27958e..00035603e7 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb @@ -6,7 +6,7 @@ # Adam Huffman # The Francis Crick Institute -easyblock = 'ConfigureMake' +easyblock = 'ConfigureMake' name = 'GMAP-GSNAP' version = '2016-11-07' diff --git a/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb b/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb index e78f2ba765..f302d9f398 100644 --- a/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb @@ -3,7 +3,7 @@ easyblock = 'ConfigureMake' name = 'GP2C' version = '0.0.9pl5' -homepage = 'http://pari.math.u-bordeaux.fr/pub/pari/manuals/gp2c/gp2c.html' +homepage = 'http://pari.math.u-bordeaux.fr/pub/pari/manuals/gp2c/gp2c.html' description = """The gp2c compiler is a package for translating GP routines into the C programming language, so that they can be compiled and used with the PARI system or the GP calculator. """ @@ -17,7 +17,7 @@ dependencies = [ ('PARI-GP', '2.7.6'), ] -configopts = '--with-paricfg=$EBROOTPARIMINGP/lib/pari/pari.cfg' +configopts = '--with-paricfg=$EBROOTPARIMINGP/lib/pari/pari.cfg' runtest = 'check' diff --git a/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb b/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb index b4350de73a..d4b83fb9a0 100644 --- a/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb +++ b/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb @@ -1,20 +1,20 @@ -easyblock = "Toolchain" +easyblock = "Toolchain" + +name = 'gompi' +version = '2016.09' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain, +including OpenMPI for MPI support.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +gccver = '6.2.0-2.27' + +# compiler toolchain dependencies +dependencies = [ + ('GCC', gccver), # includes both GCC and binutils + ('OpenMPI', '2.0.1', '', ('GCC', gccver)), +] -name = 'gompi' -version = '2016.09' - -homepage = '(none)' -description = """GNU Compiler Collection (GCC) based compiler toolchain, -including OpenMPI for MPI support.""" - -toolchain = {'name': 'dummy', 'version': 'dummy'} - -gccver = '6.2.0-2.27' - -# compiler toolchain dependencies -dependencies = [ - ('GCC', gccver), # includes both GCC and binutils - ('OpenMPI', '2.0.1', '', ('GCC', gccver)), -] - moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/g/grabix/grabix-0.1.6-goolf-1.7.20.eb b/easybuild/easyconfigs/g/grabix/grabix-0.1.6-goolf-1.7.20.eb index fc1bd33358..1bf0222ad3 100644 --- a/easybuild/easyconfigs/g/grabix/grabix-0.1.6-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/grabix/grabix-0.1.6-goolf-1.7.20.eb @@ -6,7 +6,7 @@ easyblock = 'MakeCp' name = 'grabix' -version = '0.1.6' +version = '0.1.6' homepage = 'https://github.com/arq5x/grabix' description = """a wee tool for random access into BGZF files""" @@ -17,13 +17,13 @@ source_urls = ['https://github.com/arq5x/grabix/archive/'] sources = ['%(version)s.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ] parallel = 1 files_to_copy = [(["grabix"], "bin"), "README.md", "tests", "test.sh"] - + sanity_check_paths = { 'files': ["bin/grabix"], 'dirs': [], diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-GCC-6.2.0-2.27.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-GCC-6.2.0-2.27.eb index 35ced3699b..071326cd0d 100644 --- a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-GCC-6.2.0-2.27.eb +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-GCC-6.2.0-2.27.eb @@ -1,23 +1,23 @@ -easyblock = 'ConfigureMake' - -name = 'hwloc' -version = '1.11.4' - -homepage = 'http://www.open-mpi.org/projects/hwloc/' -description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction -(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including -NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various -system attributes such as cache and memory information as well as the locality of I/O devices such as -network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering -information about modern computing hardware so as to exploit it accordingly and efficiently.""" - -toolchain = {'name': 'GCC', 'version': '6.2.0-2.27'} - -source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] -sources = [SOURCE_TAR_GZ] - -dependencies = [('numactl', '2.0.11')] - -configopts = "--enable-libnuma=$EBROOTNUMACTL" - +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.4' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'GCC', 'version': '6.2.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + moduleclass = 'system' diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-gcccuda-2016.10.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-gcccuda-2016.10.eb index a83862d853..ed51d67326 100644 --- a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-gcccuda-2016.10.eb +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.4-gcccuda-2016.10.eb @@ -1,23 +1,23 @@ -easyblock = 'ConfigureMake' - -name = 'hwloc' -version = '1.11.4' - -homepage = 'http://www.open-mpi.org/projects/hwloc/' -description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction -(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including -NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various -system attributes such as cache and memory information as well as the locality of I/O devices such as -network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering -information about modern computing hardware so as to exploit it accordingly and efficiently.""" - -toolchain = {'name': 'gcccuda', 'version': '2016.10'} - -source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] -sources = [SOURCE_TAR_GZ] - -dependencies = [('numactl', '2.0.11')] - -configopts = "--enable-libnuma=$EBROOTNUMACTL" - +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.4' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'gcccuda', 'version': '2016.10'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + moduleclass = 'system' diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb index b130fe6456..1aeec6a116 100644 --- a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-6.3.0-2.27.eb @@ -1,23 +1,23 @@ -easyblock = 'ConfigureMake' - -name = 'hwloc' -version = '1.11.5' - -homepage = 'http://www.open-mpi.org/projects/hwloc/' -description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction -(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including -NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various -system attributes such as cache and memory information as well as the locality of I/O devices such as -network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering -information about modern computing hardware so as to exploit it accordingly and efficiently.""" - -toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} - -source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] -sources = [SOURCE_TAR_GZ] - -dependencies = [('numactl', '2.0.11')] - -configopts = "--enable-libnuma=$EBROOTNUMACTL" - +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.5' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + moduleclass = 'system' diff --git a/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb b/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb index 521eb6e805..1c64db33bd 100644 --- a/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb +++ b/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb @@ -6,10 +6,10 @@ easyblock = 'ConfigureMake' name = "IOR" -version = "3.0.1" +version = "3.0.1" versionsuffix = "-mpiio" -homepage = 'https://github.com/chaos/ior' +homepage = 'https://github.com/chaos/ior' description = """ The IOR software is used for benchmarking parallel file systems using POSIX, MPIIO, or HDF5 interfaces. """ @@ -18,7 +18,7 @@ toolchain = {'name': 'foss', 'version': '2016a' } source_urls = [('https://github.com/chaos/ior/archive/')] sources = ['%(version)s.tar.gz'] -# configure opts listed below +# configure opts listed below # --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] # --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) # --with-lustre support configurable Lustre striping values [default=check] @@ -26,7 +26,7 @@ sources = ['%(version)s.tar.gz'] # --with-mpiio support IO with MPI-IO backend [default=yes] # --with-hdf5 support IO with HDF5 backend [default=no] # --with-ncmpi support IO with NCMPI backend [default=no] -preconfigopts = "./bootstrap &&" +preconfigopts = "./bootstrap &&" sanity_check_paths = { 'files': ["bin/ior"], diff --git a/easybuild/easyconfigs/m/Mawk/Mawk-1.3.4-goolf-1.4.10-20150503.eb b/easybuild/easyconfigs/m/Mawk/Mawk-1.3.4-goolf-1.4.10-20150503.eb index 7235621e5d..5b5a91c678 100644 --- a/easybuild/easyconfigs/m/Mawk/Mawk-1.3.4-goolf-1.4.10-20150503.eb +++ b/easybuild/easyconfigs/m/Mawk/Mawk-1.3.4-goolf-1.4.10-20150503.eb @@ -1,13 +1,13 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'ConfigureMake' name = 'Mawk' version = '1.3.4' -versionsuffix = '-20150503' +versionsuffix = '-20150503' homepage = 'http://invisible-island.net/mawk/' description = """mawk is an interpreter for the AWK Programming Language.""" diff --git a/easybuild/easyconfigs/m/Mono/Mono-2.10.6-intel-2016b.eb b/easybuild/easyconfigs/m/Mono/Mono-2.10.6-intel-2016b.eb index 365455df1b..e8b59e1494 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-2.10.6-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-2.10.6-intel-2016b.eb @@ -1,7 +1,7 @@ name = 'Mono' version = '2.10.6' -homepage = 'http://mono-framework.com' +homepage = 'http://mono-framework.com' description = """An open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft.NET.""" diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb index 4b58a5cd71..11e5afa9ee 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7-intel-2016b.eb @@ -1,7 +1,7 @@ name = 'Mono' version = '4.6.2.7' -homepage = 'http://mono-framework.com' +homepage = 'http://mono-framework.com' description = """An open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft.NET.""" diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb index ea1fdc2813..5d4a7d1a7d 100644 --- a/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb +++ b/easybuild/easyconfigs/m/Mono/Mono-4.6.2.7.eb @@ -1,7 +1,7 @@ name = 'Mono' version = '4.6.2.7' -homepage = 'http://mono-framework.com' +homepage = 'http://mono-framework.com' description = """An open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft.NET.""" diff --git a/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-2.7.11.eb index 8dde76eb25..afc809e585 100644 --- a/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-2.7.11.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'networkx' version = '1.11' -versionsuffix = '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://pypi.python.org/pypi/networkx' description = """NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, diff --git a/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-3.5.1.eb index 488dd6f650..162c58702c 100644 --- a/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/n/networkx/networkx-1.11-foss-2016a-Python-3.5.1.eb @@ -2,7 +2,7 @@ easyblock = 'PythonPackage' name = 'networkx' version = '1.11' -versionsuffix = '-Python-%(pyver)s' +versionsuffix = '-Python-%(pyver)s' homepage = 'https://pypi.python.org/pypi/networkx' description = """NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, diff --git a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.2.0-2.27.eb b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.2.0-2.27.eb index 7d6ccf3999..01a8bfdf0f 100644 --- a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.2.0-2.27.eb +++ b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.2.0-2.27.eb @@ -1,23 +1,23 @@ -easyblock = 'ConfigureMake' - -name = 'numactl' -version = '2.0.11' - -homepage = 'http://oss.sgi.com/projects/libnuma/' -description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. -It does this by supplying a NUMA memory policy to the operating system before running your program. -The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" - +easyblock = 'ConfigureMake' + +name = 'numactl' +version = '2.0.11' + +homepage = 'http://oss.sgi.com/projects/libnuma/' +description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. +It does this by supplying a NUMA memory policy to the operating system before running your program. +The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" + toolchain = {'name': 'GCC', 'version': '6.2.0-2.27'} -source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] -sources = [SOURCE_TAR_GZ] - -checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] - -sanity_check_paths = { - 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], - 'dirs': ['share/man', 'include'] -} - +source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] + +sanity_check_paths = { + 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], + 'dirs': ['share/man', 'include'] +} + moduleclass = 'tools' diff --git a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb index ee922f3337..7fe4d082b3 100644 --- a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCC-6.3.0-2.27.eb @@ -1,23 +1,23 @@ -easyblock = 'ConfigureMake' - -name = 'numactl' -version = '2.0.11' - -homepage = 'http://oss.sgi.com/projects/libnuma/' -description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. -It does this by supplying a NUMA memory policy to the operating system before running your program. -The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" - +easyblock = 'ConfigureMake' + +name = 'numactl' +version = '2.0.11' + +homepage = 'http://oss.sgi.com/projects/libnuma/' +description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. +It does this by supplying a NUMA memory policy to the operating system before running your program. +The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" + toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} -source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] -sources = [SOURCE_TAR_GZ] - -checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] - -sanity_check_paths = { - 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], - 'dirs': ['share/man', 'include'] -} - +source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] + +sanity_check_paths = { + 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], + 'dirs': ['share/man', 'include'] +} + moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb b/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb index c67cbf7de9..807e673a1f 100644 --- a/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb +++ b/easybuild/easyconfigs/p/PARI-GP/PARI-GP-2.7.6-foss-2016a.eb @@ -3,7 +3,7 @@ easyblock = 'ConfigureMake' name = 'PARI-GP' version = '2.7.6' -homepage = 'http://pari.math.u-bordeaux.fr' +homepage = 'http://pari.math.u-bordeaux.fr' description = """PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves...), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers etc., diff --git a/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb index 61cae6188e..6d4327f5c0 100644 --- a/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/p/PLAST/PLAST-2.3.1-foss-2016a-Java-1.8.0_92.eb @@ -4,7 +4,7 @@ name = 'PLAST' version = '2.3.1' versionsuffix = '-Java-%(javaver)s' -homepage = "http://www.irisa.fr/symbiose/projects/plast/" +homepage = "http://www.irisa.fr/symbiose/projects/plast/" description = """PLAST is a parallel alignment search tool for comparing large protein banks""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb index 7dffcdb458..fb465f5c89 100644 --- a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-goolf-1.7.20.eb @@ -6,7 +6,7 @@ easyblock = 'MakeCp' name = 'Platanus' -version = '1.2.4' +version = '1.2.4' homepage = 'http://platanus.bio.titech.ac.jp/' description = """PLATform for Assembling NUcleotide Sequences""" diff --git a/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb b/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb index a2a47d4c1e..bbf5a698d9 100644 --- a/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SUMACLUST/SUMACLUST-1.0.20-foss-2016a.eb @@ -1,13 +1,13 @@ # Author: Pablo Escobar Lopez; Wiktor Jurkowski # Swiss Institute of Bioinformatics (SIB), Biozentrum - University of Basel -# Babraham Institute, UK +# Babraham Institute, UK easyblock = 'MakeCp' name = 'SUMACLUST' version = '1.0.20' -homepage = "http://metabarcoding.org/sumatra" +homepage = "http://metabarcoding.org/sumatra" description = """SUMATRA and SUMACLUST: fast and exact comparison and clustering of sequences.""" toolchain = {'name': 'foss', 'version': '2016a'} @@ -15,7 +15,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://git.metabarcoding.org/obitools/sumaclust/uploads/69f757c42f2cd45212c587e87c75a00f/'] sources = ['%(namelower)s_v%(version)s.tar.gz'] -prebuildopts = 'make clean &&' +prebuildopts = 'make clean &&' files_to_copy = [(['sumaclust'], 'bin'), 'sumaclust_user_manual.pdf'] -- GitLab From 5e41c7e7ff395d5f331dfcfda505bc47d13f8df8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 21:35:28 +0100 Subject: [PATCH 0484/1311] remove whitespace from blank lines --- easybuild/easyconfigs/a/angsd/angsd-0.910-foss-2016a.eb | 2 +- .../easyconfigs/b/BayeScEnv/BayeScEnv-1.1-foss-2016a.eb | 4 ++-- .../easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb | 4 ++-- .../easyconfigs/b/BayeScan/BayeScan-2.1-foss-2016a.eb | 6 +++--- .../easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb | 8 ++++---- .../easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb | 4 ++-- ...fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb | 8 ++++---- .../g/GEOS/GEOS-3.5.0-foss-2015a-Python-2.7.11.eb | 2 +- .../MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb | 6 +++--- .../m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb | 6 +++--- easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb | 4 ++-- .../QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb | 8 ++++---- .../easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb | 6 +++--- 13 files changed, 34 insertions(+), 34 deletions(-) diff --git a/easybuild/easyconfigs/a/angsd/angsd-0.910-foss-2016a.eb b/easybuild/easyconfigs/a/angsd/angsd-0.910-foss-2016a.eb index c9d9db6e85..39352e91cb 100644 --- a/easybuild/easyconfigs/a/angsd/angsd-0.910-foss-2016a.eb +++ b/easybuild/easyconfigs/a/angsd/angsd-0.910-foss-2016a.eb @@ -5,7 +5,7 @@ version = '0.910' homepage = 'http://www.popgen.dk/angsd' description = """Program for analysing NGS data.""" - + toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/ANGSD/angsd/archive/'] diff --git a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-foss-2016a.eb b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-foss-2016a.eb index cd1dd2595a..25707a1810 100644 --- a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-foss-2016a.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -23,7 +23,7 @@ start_dir = 'source' files_to_copy = [(['source/bayescenv'], 'bin'), 'test', 'COPYING', 'README.md', 'ChangeLog'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/bayescenv'], 'dirs': [], diff --git a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb index 7a976185d2..25b2cd8bb7 100644 --- a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -22,7 +22,7 @@ start_dir = 'source' files_to_copy = [(['source/bayescenv'], 'bin'), 'test', 'COPYING', 'README.md', 'ChangeLog'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/bayescenv'], 'dirs': [], diff --git a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-foss-2016a.eb b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-foss-2016a.eb index c4932d3953..ebd814c54e 100644 --- a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-foss-2016a.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -9,7 +9,7 @@ name = 'BayeScan' version = '2.1' homepage = 'http://cmpg.unibe.ch/software/BayeScan/' -description = """BayeScan aims at identifying candidate loci under natural selection from genetic data, +description = """BayeScan aims at identifying candidate loci under natural selection from genetic data, using differences in allele frequencies between populations.""" toolchain = {'name': 'foss', 'version': '2016a'} @@ -30,7 +30,7 @@ files_to_copy = [ ] parallel = 1 - + sanity_check_paths = { 'files': ['bin/bayescan_%(version)s'], 'dirs': [], diff --git a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb index 3745f65f5f..de8bcce297 100644 --- a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -9,10 +9,10 @@ name = 'BayeScan' version = '2.1' homepage = 'http://cmpg.unibe.ch/software/BayeScan/' -description = """BayeScan aims at identifying candidate loci under natural selection from genetic data, +description = """BayeScan aims at identifying candidate loci under natural selection from genetic data, using differences in allele frequencies between populations.""" -# BayeScan makefile is hardcoded to use g++. In case you want to use a non-gcc toolchain you will need to patch the makefile +# BayeScan makefile is hardcoded to use g++. In case you want to use a non-gcc toolchain you will need to patch the makefile toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'openmp': True} @@ -31,7 +31,7 @@ files_to_copy = [ 'R functions'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/bayescan_%(version)s'], 'dirs': [], diff --git a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb index 7a15e698bd..8c2ecba76b 100644 --- a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb +++ b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -27,7 +27,7 @@ prebuildopts += ' ../configure --enable-static --disable-debug --enable-optimisa files_to_copy = [(['build/ctffind'], 'bin'), 'doc', 'scripts'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/ctffind'], 'dirs': [], diff --git a/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb b/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb index 7eeaa4c1a4..f9d3b4a7b5 100644 --- a/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb +++ b/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -20,12 +20,12 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} # using latest release tags doesn't work # https://github.com/statgen/fastQValidator/issues/9 source_urls = [ - 'https://github.com/statgen/fastQValidator/archive/', + 'https://github.com/statgen/fastQValidator/archive/', 'https://github.com/statgen/libStatGen/archive/' ] sources = [ - '%s.tar.gz' % fastqvalidator_git_commit, + '%s.tar.gz' % fastqvalidator_git_commit, '%s.tar.gz' % libstatgen_git_commit ] @@ -46,7 +46,7 @@ buildopts = ' LIB_PATH_GENERAL=../libStatGen ' files_to_copy = [(['bin/fastQValidator'], 'bin')] parallel = 1 - + sanity_check_paths = { 'files': ['bin/fastQValidator'], 'dirs': [], diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.5.0-foss-2015a-Python-2.7.11.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.5.0-foss-2015a-Python-2.7.11.eb index 3053b75ee0..acdde9dd04 100644 --- a/easybuild/easyconfigs/g/GEOS/GEOS-3.5.0-foss-2015a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.5.0-foss-2015a-Python-2.7.11.eb @@ -18,7 +18,7 @@ versionsuffix = '-Python-%s' % pyver dependencies = [('Python', pyver)] builddependencies = [('SWIG', '3.0.8', versionsuffix)] - + configopts = '--enable-python' modextrapaths = {'PYTHONPATH': 'lib/python%s/site-packages' % pyshortver} diff --git a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb index 5b23296323..4a0d2c666a 100644 --- a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb +++ b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -11,7 +11,7 @@ git_commit_id = '24cf06' #first six digits of the commit id we will download fro versionsuffix = '-20140425-%s' % git_commit_id homepage = 'https://code.google.com/p/mosaik-aligner/' -description = """ MOSAIK is a reference-guided aligner for next-generation +description = """ MOSAIK is a reference-guided aligner for next-generation sequencing technologies """ toolchain = {'name': 'goolf', 'version': '1.4.10'} @@ -28,7 +28,7 @@ start_dir = "src" buildopts = ' BIN_DIR="./bin" OBJ_DIR="./obj"' files_to_copy = ["bin", "../README", "demo"] - + sanity_check_paths = { 'files': ["bin/%s" % x for x in ["MosaikAligner", "MosaikBuild", "MosaikJump", "MosaikText"]], 'dirs': [], diff --git a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb index 77047640bf..06031fc9f0 100644 --- a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb +++ b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -11,7 +11,7 @@ git_commit_id = '24cf06' #first six digits of the commit id we will download fro versionsuffix = '-20140425-%s' % git_commit_id homepage = 'https://code.google.com/p/mosaik-aligner/' -description = """ MOSAIK is a reference-guided aligner for next-generation +description = """ MOSAIK is a reference-guided aligner for next-generation sequencing technologies """ toolchain = {'name': 'ictce', 'version': '6.2.5'} @@ -28,7 +28,7 @@ start_dir = "src" buildopts = ' BIN_DIR="./bin" OBJ_DIR="./obj"' files_to_copy = ["bin", "../README", "demo"] - + sanity_check_paths = { 'files': ["bin/%s" % x for x in ["MosaikAligner", "MosaikBuild", "MosaikJump", "MosaikText"]], 'dirs': [], diff --git a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb index 59517cb978..86cd994610 100644 --- a/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb +++ b/easybuild/easyconfigs/p/psmc/psmc-0.6.5-foss-2016a.eb @@ -6,7 +6,7 @@ version = '0.6.5' homepage = 'https://github.com/lh3/psmc' description = """This software package infers population size history from a diploid sequence using the Pairwise Sequentially Markovian Coalescent (PSMC) model.""" - + toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://github.com/lh3/psmc/archive/'] @@ -16,7 +16,7 @@ buildopts = '&& cd utils && make' utils = [ 'avg.pl', 'calD', 'cntcpg', 'ctime_plot.pl', 'dec2ctime.pl', 'decode2bed.pl', 'fq2psmcfa', 'history2ms.pl', - 'ms2psmcfa.pl', 'mutDiff', 'pcnt_bezier.lua', 'psmc2history.pl', 'psmc_plot.pl', 'psmc_trunc.pl', 'splitfa', + 'ms2psmcfa.pl', 'mutDiff', 'pcnt_bezier.lua', 'psmc2history.pl', 'psmc_plot.pl', 'psmc_trunc.pl', 'splitfa', ] files_to_copy = [ diff --git a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb index 57849d2efa..b1b7c57728 100644 --- a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb +++ b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb @@ -11,7 +11,7 @@ description = """Quantum ESPRESSO is an integrated suite of computer codes toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'usempi': True, 'openmp': True} -# this list was determined from QE 5.4.0 version release +# this list was determined from QE 5.4.0 version release sources = [ # Common source 'espresso-%(version)s.tar.gz', @@ -32,7 +32,7 @@ source_urls = [ 'http://www.qe-forge.org/gf/download/frsrelease/211/968/', # espresso-5.4.0.tar.gz # These will not be used because of the 404 signal not found from the previous link. 'http://www.qe-forge.org/gf/download/frsrelease/211/961/', # PWgui-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/956/', # tddfpt-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/956/', # tddfpt-5.4.0.tar.gz 'http://www.qe-forge.org/gf/download/frsrelease/211/954/', # atomic-5.4.0.tar.gz 'http://www.qe-forge.org/gf/download/frsrelease/211/959/', # neb-5.4.0.tar.gz 'http://www.qe-forge.org/gf/download/frsrelease/211/962/', # PHonon-5.4.0.tar.gz @@ -46,8 +46,8 @@ source_urls = [ # Hybrid option exists only for backward compatibility, use toolchain option openmp instead. hybrid = True # Patch file to avoid the CPP problem generated by different OSes -patches = ['QuantumESPRESSO-5.4.0_fix-f90rule-gfortran.patch'] - +patches = ['QuantumESPRESSO-5.4.0_fix-f90rule-gfortran.patch'] + # packages included in 5.4.0 version of QE. We met errors when try to include gipaw, yambo and someother packages. buildopts = 'all tddfpt neb xspectra ph ' diff --git a/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb b/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb index e5d10e8061..ebe8bfa5d5 100644 --- a/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/rainbow/rainbow-2.0.4-goolf-1.4.10.eb @@ -1,7 +1,7 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Author: Pablo Escobar Lopez # sciCORE - University of Basel -# SIB Swiss Institute of Bioinformatics +# SIB Swiss Institute of Bioinformatics easyblock = 'MakeCp' @@ -18,11 +18,11 @@ sources = ['%(name)s_%(version)s.tar.gz'] buildopts = ' CC=$CC' -files_to_copy = [(['rainbow', 'ezmsim', 'rbasm', 'select_sec_rbcontig.pl', +files_to_copy = [(['rainbow', 'ezmsim', 'rbasm', 'select_sec_rbcontig.pl', 'select_best_rbcontig_plus_read1.pl', 'select_sec_rbcontig.pl', 'select_all_rbcontig.pl'], 'bin')] parallel = 1 - + sanity_check_paths = { 'files': ['bin/rainbow', 'bin/ezmsim', 'bin/rbasm'], 'dirs': [], -- GitLab From c69a2ada4ad62775620a7eee897e439ae28e0954 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Feb 2017 21:45:13 +0100 Subject: [PATCH 0485/1311] include two spaces before inline comment --- .../cclib-1.5-foss-2016b-Python-3.5.2.eb | 2 +- .../e/ELPA/ELPA-2016.05.004-intel-2017a.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb | 2 +- .../g/GCC/GCC-4.8.2-CLooG-multilib.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb | 2 +- .../g/GCC/GCC-4.8.3-CLooG-multilib.eb | 2 +- .../g/GCC/GCC-4.8.4-CLooG-multilib.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb | 2 +- .../g/GCC/GCC-4.9.0-CLooG-multilib.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb | 2 +- .../g/GCC/GCC-4.9.1-CLooG-multilib.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb | 2 +- .../g/GCC/GCC-4.9.2-CLooG-multilib.eb | 2 +- .../easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb | 2 +- .../g/GCC/GCC-5.1.0-binutils-2.25.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb | 2 +- .../easyconfigs/g/GCCcore/GCCcore-5.3.0.eb | 2 +- .../easyconfigs/g/GCCcore/GCCcore-5.4.0.eb | 2 +- .../easyconfigs/g/GCCcore/GCCcore-6.1.0.eb | 2 +- .../easyconfigs/g/GCCcore/GCCcore-6.2.0.eb | 2 +- .../easyconfigs/g/GCCcore/GCCcore-6.3.0.eb | 2 +- .../i/intelcuda/intelcuda-2016.10.eb | 2 +- ...AIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb | 2 +- ...SAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb | 2 +- ...J-Express-0.44-foss-2016a-Java-1.8.0_92.eb | 2 +- ...Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- .../OpenMPI-1.10.2-PGI-16.3-GCC-4.9.3-2.25.eb | 2 +- .../OpenMPI-1.10.2-PGI-16.4-GCC-5.3.0-2.26.eb | 2 +- .../OpenMPI-1.10.4-PGI-16.7-GCC-5.4.0-2.26.eb | 2 +- .../PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb | 6 ++--- ...PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb | 6 ++--- .../PostgreSQL-9.3.5-intel-2014b.eb | 2 +- ...tgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb | 2 +- ...tgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb | 2 +- ...tgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb | 2 +- ...gres-XL-9.5r1-intel-2016a-Python-2.7.11.eb | 2 +- .../p/Python/Python-2.7.9-CrayGNU-2015.06.eb | 2 +- .../p/Python/Python-2.7.9-CrayGNU-2015.11.eb | 2 +- ...QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb | 22 +++++++++---------- .../easyconfigs/r/R/R-3.2.3-foss-2015b.eb | 2 +- .../easyconfigs/r/R/R-3.2.3-foss-2016a.eb | 2 +- .../easyconfigs/r/R/R-3.2.3-foss-2016b.eb | 2 +- .../r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb | 6 ++--- .../easyconfigs/r/R/R-3.2.3-intel-2016a.eb | 2 +- .../easyconfigs/r/R/R-3.3.1-foss-2016a.eb | 2 +- .../easyconfigs/r/R/R-3.3.1-foss-2016b.eb | 2 +- .../easyconfigs/r/R/R-3.3.1-intel-2016b.eb | 2 +- .../easyconfigs/r/Reads2snp/Reads2snp-2.0.eb | 2 +- 50 files changed, 66 insertions(+), 66 deletions(-) diff --git a/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb index 78196b3b89..fe63f8a29c 100644 --- a/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/c/cclib/cclib-1.5-foss-2016b-Python-3.5.2.eb @@ -15,7 +15,7 @@ source_urls = ['https://github.com/cclib/cclib/releases/download/v%(version)s/'] sources = ['%(name)s-%(version)s.post1.tar.gz'] dependencies = [ - ('Python', '3.5.2'), # This contains numpy as extension needed for cclib + ('Python', '3.5.2'), # This contains numpy as extension needed for cclib ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb index 2c6c725788..4851fc5541 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb @@ -36,7 +36,7 @@ common_configopts += 'LIBS="$LIBSCALAPACK" ' configopts = [ common_configopts + '--enable-openmp ', - common_configopts, # Default version last, so we can get the normal config.h/config-f90.h installed afterwards. + common_configopts, # Default version last, so we can get the normal config.h/config-f90.h installed afterwards. ] buildopts = ' V=1 ' diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb index 041898fae9..618d553031 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb index 91e4497eaa..6d29040095 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb index d6ce9a89a0..9a60bde46d 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb index a5d4cd082d..54f482d906 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb index 1d2159779b..89f13931a3 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb index bcc4336300..1fee24d2ad 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_GZ, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb index 1293532d23..c0cd444cef 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb index 82341a9a29..7a4b755a4c 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb index 7f03450a91..bd08517bfa 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb index 163de21ca1..5cb7dc788a 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb index 323622921d..4b52dcc343 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb index b5769a1078..1ec5100100 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ SOURCELOWER_TAR_BZ2, diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb b/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb index 4820fd1026..897ca9088c 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb @@ -19,7 +19,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb index f182579664..88c83fce42 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb index 47b8d2c23b..4052ab789b 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb index 3aa9d513bb..30c9cc61c0 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb @@ -16,7 +16,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb index 4998bcfaba..508f91d3f8 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb index 2a3fe7ab85..1a5cf8b884 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb index 603dbd6cc5..a645d60588 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb @@ -19,7 +19,7 @@ source_urls = [ 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror 'https://ftp.gnu.org/gnu/gcc/gcc-%(version)s/', # Alternative GCC - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb index 5b1200a09b..a460408c19 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb index 725e558810..a581540c04 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb @@ -18,7 +18,7 @@ source_urls = [ 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://isl.gforge.inria.fr/', # original HTTP source for ISL + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] sources = [ diff --git a/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb b/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb index ac6a734e6e..82121910a8 100644 --- a/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb +++ b/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb @@ -16,7 +16,7 @@ gccsuff = '-GCC-%s-%s' % (gccver, binutilsver) comp = (comp_name, '%s%s' % (comp_ver, gccsuff)) dependencies = [ - comp, # part of iimpic + comp, # part of iimpic ('CUDA', '8.0.44', '', comp), ('icc', comp_ver, gccsuff), ('ifort', comp_ver, gccsuff), diff --git a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb index 4a0d2c666a..a98288f900 100644 --- a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb +++ b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-goolf-1.4.10-20140425-24cf06.eb @@ -7,7 +7,7 @@ easyblock = 'MakeCp' name = 'MOSAIK' version = '2.2.28' -git_commit_id = '24cf06' #first six digits of the commit id we will download from github +git_commit_id = '24cf06' # first six digits of the commit id we will download from github versionsuffix = '-20140425-%s' % git_commit_id homepage = 'https://code.google.com/p/mosaik-aligner/' diff --git a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb index 06031fc9f0..3ce4130b75 100644 --- a/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb +++ b/easybuild/easyconfigs/m/MOSAIK/MOSAIK-2.2.28-ictce-6.2.5-20140425-24cf06.eb @@ -7,7 +7,7 @@ easyblock = 'MakeCp' name = 'MOSAIK' version = '2.2.28' -git_commit_id = '24cf06' #first six digits of the commit id we will download from github +git_commit_id = '24cf06' # first six digits of the commit id we will download from github versionsuffix = '-20140425-%s' % git_commit_id homepage = 'https://code.google.com/p/mosaik-aligner/' diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb index 3bb9c9fb71..21ae128381 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb @@ -36,7 +36,7 @@ modextrapaths = { } modextravars = { - 'MPJ_HOME': '$root', # MPJ_HOME points to install directory + 'MPJ_HOME': '$root', # MPJ_HOME points to install directory } sanity_check_paths = { diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb index 8c2cfb12b9..41195e5042 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb @@ -39,7 +39,7 @@ modextrapaths = { } modextravars = { - 'MPJ_HOME': '$root', # MPJ_HOME points to install directory + 'MPJ_HOME': '$root', # MPJ_HOME points to install directory } sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.3-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.3-GCC-4.9.3-2.25.eb index 3dfb0c023b..26ff9690ec 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.3-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.3-GCC-4.9.3-2.25.eb @@ -15,7 +15,7 @@ configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify +configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify dependencies = [('hwloc', '1.11.3')] diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.4-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.4-GCC-5.3.0-2.26.eb index 274fb15e1f..64e4eca3c7 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.4-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-PGI-16.4-GCC-5.3.0-2.26.eb @@ -15,7 +15,7 @@ configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify +configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify dependencies = [('hwloc', '1.11.3')] diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.4-PGI-16.7-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.4-PGI-16.7-GCC-5.4.0-2.26.eb index fd6bb36c38..f7b06dcb04 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.4-PGI-16.7-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.4-PGI-16.7-GCC-5.4.0-2.26.eb @@ -17,7 +17,7 @@ configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify +configopts += '--with-cxxrtlib="-lgcc_s -lstdc++"' # for vt-mpi-unify dependencies = [('hwloc', '1.11.4')] diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb index 1d36878e90..c76887ac30 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb @@ -101,13 +101,13 @@ exts_list = [ sanity_check_commands = [('perl', '%(installdir)s/prinseq-graphs.pl')] modextrapaths = { - 'PATH': "", # add installation dir to PATH + 'PATH': "", # add installation dir to PATH 'PERL5LIB': 'lib/perl5/site_perl/%s/' % (perlver) } postinstallcmds = [ - "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line - "chmod +x %(installdir)s/*.pl" # add execution permission + "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line + "chmod +x %(installdir)s/*.pl" # add execution permission ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb index fc0341658f..4dc47a8df2 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb @@ -99,13 +99,13 @@ exts_list = [ sanity_check_commands = [('perl', '%(installdir)s/prinseq-graphs.pl')] modextrapaths = { - 'PATH': "", # add installation dir to PATH + 'PATH': "", # add installation dir to PATH 'PERL5LIB': 'lib/perl5/site_perl/%s/' % (perlver) } postinstallcmds = [ - "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line - "chmod +x %(installdir)s/*.pl" # add execution permission + "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line + "chmod +x %(installdir)s/*.pl" # add execution permission ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb index 815c947eac..b694510474 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb @@ -27,7 +27,7 @@ dependencies = [ (java, javaver, '', True), ('libreadline', '6.3'), ('zlib', '1.2.8'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb index 9afa456cae..a7d2b6c4a0 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb @@ -25,7 +25,7 @@ dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.11'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb index fca7dea11c..46e78c9224 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb @@ -25,7 +25,7 @@ dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.11'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb index a1b0d0ba13..8f8750717c 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb @@ -25,7 +25,7 @@ dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.12'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/Postgres-XL/Postgres-XL-9.5r1-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/Postgres-XL/Postgres-XL-9.5r1-intel-2016a-Python-2.7.11.eb index 01c5da8a48..8261dc989e 100644 --- a/easybuild/easyconfigs/p/Postgres-XL/Postgres-XL-9.5r1-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/Postgres-XL/Postgres-XL-9.5r1-intel-2016a-Python-2.7.11.eb @@ -19,7 +19,7 @@ dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.11'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb index 2c98486b92..a0d5fb01e5 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb @@ -42,7 +42,7 @@ exts_list = [ ('numpy', numpyversion, { 'source_urls': [('http://sourceforge.net/projects/numpy/files/NumPy/%s' % numpyversion, 'download')], 'patches': [ - 'numpy-1.8.0-mkl.patch', # % numpyversion, + 'numpy-1.8.0-mkl.patch', ], }), ('scipy', scipyversion, { diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb index 23449c0834..eb90e5f158 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb @@ -42,7 +42,7 @@ exts_list = [ ('numpy', numpyversion, { 'source_urls': [('http://sourceforge.net/projects/numpy/files/NumPy/%s' % numpyversion, 'download')], 'patches': [ - 'numpy-1.8.0-mkl.patch', # % numpyversion, + 'numpy-1.8.0-mkl.patch', ], }), ('scipy', scipyversion, { diff --git a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb index b1b7c57728..09b026a284 100644 --- a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb +++ b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb @@ -29,18 +29,18 @@ sources = [ ] source_urls = [ 'http://files.qe-forge.org/index.php?file=', # Almost all - 'http://www.qe-forge.org/gf/download/frsrelease/211/968/', # espresso-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/968/', # espresso-5.4.0.tar.gz # These will not be used because of the 404 signal not found from the previous link. - 'http://www.qe-forge.org/gf/download/frsrelease/211/961/', # PWgui-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/956/', # tddfpt-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/954/', # atomic-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/959/', # neb-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/962/', # PHonon-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/960/', # pwcond-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/958/', # xspectra-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/969/', # EPW-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/963/', # test-suite-5.4.0.tar.gz - 'http://www.qe-forge.org/gf/download/frsrelease/211/957/', # GWW-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/961/', # PWgui-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/956/', # tddfpt-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/954/', # atomic-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/959/', # neb-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/962/', # PHonon-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/960/', # pwcond-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/958/', # xspectra-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/969/', # EPW-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/963/', # test-suite-5.4.0.tar.gz + 'http://www.qe-forge.org/gf/download/frsrelease/211/957/', # GWW-5.4.0.tar.gz ] # Hybrid option exists only for backward compatibility, use toolchain option openmp instead. diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb index b54b0f68e9..95846046fc 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb @@ -25,7 +25,7 @@ dependencies = [ ('cURL', '7.45.0'), # for RCurl ('libxml2', '2.9.2'), # for XML ('GDAL', '2.0.1'), # for rgdal - ('PROJ', '4.8.0'), # for rgdal + ('PROJ', '4.8.0'), # for rgdal ('GMP', '6.0.0a', '', ('GNU', '4.9.3-2.25')), # for igraph ] diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb index 580f74438d..1389b272dd 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb @@ -25,7 +25,7 @@ dependencies = [ ('cURL', '7.47.0'), # for RCurl ('libxml2', '2.9.3'), # for XML ('GDAL', '2.0.2'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.0'), # for igraph ] diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb index 004c178582..0acfcbd0b3 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb @@ -25,7 +25,7 @@ dependencies = [ ('cURL', '7.49.1'), # for RCurl ('libxml2', '2.9.4'), # for XML ('GDAL', '2.1.0'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.1'), # for igraph ] diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb index 1a886a00c9..39a19900bb 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb @@ -28,15 +28,15 @@ dependencies = [ ('ncurses', '6.0'), ('libpng', '1.6.21'), # for plotting in R ('libjpeg-turbo', '1.4.2'), # for plottting in R - ('LibTIFF', '4.0.6'), # for plotting in R - ('cairo', '1.14.6'), # for plotting in R + ('LibTIFF', '4.0.6'), # for plotting in R + ('cairo', '1.14.6'), # for plotting in R ('Java', '1.8.0_72', '', True), # Java bindings are built if Java is found, might as well provide it ('Tcl', '8.6.4'), # for tcltk ('Tk', '8.6.4', versionsuffix), # for tcltk ('cURL', '7.47.0'), # for RCurl ('libxml2', '2.9.3'), # for XML ('GDAL', '2.0.2'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.0'), # for igraph ] diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb index 7baa761be0..ad907eaa04 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb @@ -25,7 +25,7 @@ dependencies = [ ('cURL', '7.47.0'), # for RCurl ('libxml2', '2.9.3'), # for XML ('GDAL', '2.0.2'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.0'), # for igraph ] diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb index 7ed2007d87..7c7e501aad 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016a.eb @@ -31,7 +31,7 @@ dependencies = [ ('cURL', '7.49.1'), # for RCurl ('libxml2', '2.9.4'), # for XML ('GDAL', '2.1.0'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.1'), # for igraph # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb index e6d46c62ea..9380aadc9b 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-foss-2016b.eb @@ -31,7 +31,7 @@ dependencies = [ ('cURL', '7.49.1'), # for RCurl ('libxml2', '2.9.4'), # for XML ('GDAL', '2.1.0'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.1'), # for igraph # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons diff --git a/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb b/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb index 09f5b0a4c6..88223934d1 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.1-intel-2016b.eb @@ -31,7 +31,7 @@ dependencies = [ ('cURL', '7.49.1'), # for RCurl ('libxml2', '2.9.4'), # for XML ('GDAL', '2.1.0'), # for rgdal - ('PROJ', '4.9.2'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal ('GMP', '6.1.1'), # for igraph # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons diff --git a/easybuild/easyconfigs/r/Reads2snp/Reads2snp-2.0.eb b/easybuild/easyconfigs/r/Reads2snp/Reads2snp-2.0.eb index 506890dce2..462568a58d 100644 --- a/easybuild/easyconfigs/r/Reads2snp/Reads2snp-2.0.eb +++ b/easybuild/easyconfigs/r/Reads2snp/Reads2snp-2.0.eb @@ -25,7 +25,7 @@ sanity_check_paths = { } modextrapaths = { - 'PATH': "", # add the installation dir to PATH + 'PATH': "", # add the installation dir to PATH } moduleclass = 'bio' -- GitLab From 465017c088b49dcbf976764f7fe42a80326b9149 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 22 Feb 2017 21:34:48 +0000 Subject: [PATCH 0486/1311] removed comments from the recipe --- easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb index 68c14b0bae..ddf779e0e0 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb @@ -17,12 +17,7 @@ source_urls = ['https://github.com/igraph/igraph/releases/download/%(version)s'] builddependencies = [('Autotools', '20150215')] patches = [ - # Author: Maxime Boissonneault - # Remove explicit linking on -llapack and -llblas, which are not found when linking against MKL 'igraph-%(version)s-no-lapack-no-blas.patch', - - # Author: Maxime Boissonneault - # Fix explicit version of aclocal (specified 1.14). Replaced with version 1.15 which corresponds to the 20150215 Autotools 'igraph-%(version)s-fix-aclocal-version.patch' ] -- GitLab From f134c4ca7dcb46bb0eedae01d0fe4c05115e013e Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Thu, 23 Feb 2017 10:06:10 +1030 Subject: [PATCH 0487/1311] error corrected --- .../easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb index 25c303ad85..2075adf0b4 100644 --- a/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb +++ b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb @@ -3,35 +3,27 @@ # Homepage: https://www.adelaide.edu.au/phoenix/ # # Copyright:: adelaide.edu.au/phoenix -# Authors:: Robert Qiao , Exequiel Manuel Sepulveda Escobedo +# Authors:: Robert Qiao , Exe Escobedo # License:: # # Notes:: ## +easyblock = 'BinariesTarball' + name = 'meRanTK' version = '1.1.1b' -easyblock = 'BinariesTarball' homepage = 'http://www.icbi.at/index.html' description = """meRanTK is a versatile high performance toolkit for complete analysis of methylated RNA data.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = ['http://www.icbi.at/software/meRanTK/downloads'] -sources = ['%s/meRanTK-%s.zip' %(version,version,)] - -dependencies = [ -] +source_urls = ['http://www.icbi.at/software/meRanTK/downloads/%(version)s/'] +sources = ['meRanTK-%(version)s.zip'] sanity_check_paths = { - 'files':['bin/meRanAnnotate'], - 'files':['bin/meRanCall'], - 'files':['bin/meRanCompare'], - 'files':['bin/meRanGs'], - 'files':['bin/meRanGt'], - 'files':['bin/meRanT'], - 'dirs':[], + 'files': ['bin/meRan%s' % x for x in ['Annotate', 'Call', 'Compare', 'Gs', 'Gt', 'T']], } moduleclass = 'bio' -- GitLab From 1b573a83426da3b37a07896b9bbdbdc5cdcea9dc Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 23 Feb 2017 14:58:00 +1030 Subject: [PATCH 0488/1311] Style fixed --- easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb index 2075adf0b4..0d549f7977 100644 --- a/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb +++ b/easybuild/easyconfigs/m/meRanTK/meRanTK-1.1.1b.eb @@ -23,7 +23,8 @@ source_urls = ['http://www.icbi.at/software/meRanTK/downloads/%(version)s/'] sources = ['meRanTK-%(version)s.zip'] sanity_check_paths = { - 'files': ['bin/meRan%s' % x for x in ['Annotate', 'Call', 'Compare', 'Gs', 'Gt', 'T']], + 'files': ['bin/meRan%s' % x for x in ['Annotate', 'Call', 'Compare', 'Gs', 'Gt', 'T']], + 'dirs': [], } moduleclass = 'bio' -- GitLab From 637f19f50c5b6cf5e59b6e83d016a7634c60e52e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 09:14:15 +0100 Subject: [PATCH 0489/1311] prefer OpenSSL as OS dep in easyconfig for Python 2.7.11 w/ iomkl/2016.07 --- .../easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb index c445811709..ceffc4847a 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb @@ -23,14 +23,14 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '6.0'), ('SQLite', '3.9.2'), - #('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('Tk', '8.6.4'), # this requires a full X11 stack ('GMP', '6.1.0'), - ('OpenSSL', '1.0.2h'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), ] -#osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! # package versions updated May 28th 2015 -- GitLab From 5b23bc5e4ac2d1e0c0fcfef2211f17e4b3e846d2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 09:20:47 +0100 Subject: [PATCH 0490/1311] comments should start with '# ' --- easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb | 4 ++-- .../a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb | 6 +++--- .../easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb | 2 +- .../easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.2.3-foss-2015a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.2.3-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.3.1-intel-2015a.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.3.2-GNU-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.3.2-gimkl-2.11.5.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.3.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb | 2 +- .../c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb | 2 +- .../c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb | 2 +- .../easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb | 2 +- easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb | 2 +- .../c/CP2K/CP2K-3.0-CrayGNU-2015.11-cuda-7.0.eb | 2 +- easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11.eb | 2 +- .../CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb | 2 -- .../CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 2 -- .../DBD-mysql/DBD-mysql-4.032-intel-2016a-Perl-5.22.2.eb | 2 +- .../DBD-mysql/DBD-mysql-4.033-intel-2016b-Perl-5.24.0.eb | 2 +- ...-library-20130406-045632_pre-release-3_Linux-x86_64.eb | 2 +- .../g/GMAP-GSNAP/GMAP-GSNAP-2014-01-21-goolf-1.4.10.eb | 2 +- .../g/GMAP-GSNAP/GMAP-GSNAP-2014-06-10-goolf-1.4.10.eb | 2 +- .../g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb | 2 +- .../g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb | 2 +- .../g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb | 2 +- .../g/Ghostscript/Ghostscript-9.20-foss-2016b.eb | 2 +- .../g/Ghostscript/Ghostscript-9.20-intel-2016b.eb | 2 +- .../gencore_variant_detection-1.0.eb | 2 +- .../h/hanythingondemand/hanythingondemand-3.0.0-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.0.1-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.0.2-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.0.3-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.0.4-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.1.0-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.1.1-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.1.2-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.1.3-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.1.4-cli.eb | 8 ++++---- .../h/hanythingondemand/hanythingondemand-3.2.0-cli.eb | 8 ++++---- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- .../i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb | 6 +++--- .../i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb | 6 +++--- .../k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb | 2 +- .../k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb | 2 +- easybuild/easyconfigs/l/LeadIT/LeadIT-2.1.9.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb | 2 +- .../easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb | 2 +- .../easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb | 2 +- .../easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb | 2 +- .../l/libxcb/libxcb-1.10-foss-2014b-Python-2.7.8.eb | 2 -- .../m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb | 4 ++-- .../m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb | 4 ++-- .../m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb | 4 ++-- .../m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb | 4 ++-- easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb | 4 ++-- easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb | 4 ++-- .../m/Molpro/Molpro-mpp-2010.1.23.Linux_x86_64.eb | 2 +- .../m/Molpro/Molpro-mpp-2015.1.0.linux_x86_64_intel.eb | 2 +- .../m/Molpro/Molpro-mpp-2015.1.10.linux_x86_64_openmp.eb | 2 +- .../m/Molpro/Molpro-mpp-2015.1.3.linux_x86_64_openmp.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.12-GCC-4.9.2-LAPACK-3.5.0.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.8.4-LAPACK-3.5.0.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.9.2-LAPACK-3.5.0.eb | 2 +- .../OpenBLAS/OpenBLAS-0.2.13-gompi-1.5.16-LAPACK-3.5.0.eb | 2 +- .../OpenBLAS-0.2.14-GNU-4.9.2-2.25-LAPACK-3.5.0.eb | 2 +- .../OpenBLAS-0.2.14-GNU-4.9.3-2.25-LAPACK-3.5.0.eb | 2 +- .../OpenBLAS-0.2.15-GCC-4.9.3-2.25-LAPACK-3.6.0.eb | 2 +- .../OpenBLAS-0.2.18-GCC-4.9.4-2.25-LAPACK-3.6.0.eb | 2 +- .../OpenBLAS-0.2.18-GCC-5.3.0-2.26-LAPACK-3.6.0.eb | 2 +- .../OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.0.eb | 2 +- .../OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1.eb | 2 +- .../OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb | 2 +- .../OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.6-ictce-5.3.0-LAPACK-3.4.2.eb | 2 +- .../OpenBLAS/OpenBLAS-0.2.8-gompi-1.5.14-LAPACK-3.5.0.eb | 2 +- .../OpenBLAS/OpenBLAS-0.2.8-gompi-1.6.10-LAPACK-3.4.2.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.8-ictce-5.3.0-LAPACK-3.4.2.eb | 2 +- .../o/OpenBLAS/OpenBLAS-0.2.9-GCC-4.8.3-LAPACK-3.5.0.eb | 2 +- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb | 4 ++-- .../easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb | 4 ++-- .../easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb | 4 ++-- .../p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb | 4 ++-- .../ParaView-4.3.1-intel-2015a-Python-2.7.10-mpi.eb | 2 +- .../ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10.eb | 2 +- .../easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb | 1 - .../Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb | 3 +-- .../p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb | 2 +- .../easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb | 5 +++-- .../easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb | 2 +- .../pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb | 4 ++-- .../p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb | 4 ++-- easybuild/easyconfigs/r/R/R-3.2.0-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb | 2 +- 160 files changed, 215 insertions(+), 221 deletions(-) diff --git a/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb b/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb index 1e7fda13a1..bfa52a0b28 100644 --- a/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb +++ b/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb @@ -12,8 +12,8 @@ description = """ Automatic Segmentation of Hippocampal Subfields (ASHS) """ toolchain = {'name': 'dummy', 'version': 'dummy'} -#You need to create an account to download the source -#from https://www.nitrc.org/frs/?group_id=370 +# You need to create an account to download the source +# from https://www.nitrc.org/frs/?group_id=370 sources = ['ashs_Linux64_%(version)s.tgz'] checksums= ["07fea2883b856af8797b200212b72e71"] diff --git a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb index 9a71b607be..5f9521e1fe 100644 --- a/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb +++ b/easybuild/easyconfigs/a/Allinea/Allinea-6.1.1-Ubuntu-14.04-x86_64.eb @@ -11,13 +11,13 @@ source_urls = ['http://content.allinea.com/downloads/'] sources = ['%(namelower)s-forge-%(version)s.tar'] # Example of templates usage -#templates = [ +# templates = [ # 'kebnekaise.qtf', # 'kebnekaise-gpu.qtf', -#] +# ] # Example of sysconfig usage -#sysconfig = 'system.config.hpc2n' +# sysconfig = 'system.config.hpc2n' # license file license_file = HOME + '/licenses/allinea/license.lic' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb index 361932b89c..9469af37f5 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb @@ -30,6 +30,6 @@ sanity_check_paths = { } # to add scripts folder to $PATH just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb index 02e855be5b..264b5296c0 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb @@ -30,6 +30,6 @@ sanity_check_paths = { } # to add scripts folder to $PATH just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb index 2877853840..f3e4ae2e16 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb @@ -30,6 +30,6 @@ sanity_check_paths = { } # to add scripts folder to $PATH just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb index 58e8cf38d8..3ccec7b3ec 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb @@ -31,6 +31,6 @@ sanity_check_paths = { } # to add scripts folder to $PATH just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb index da15149173..37790b2b2b 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb @@ -31,6 +31,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb index d2d24de2f8..48fab89b05 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb @@ -33,6 +33,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb index 3f05bda0e8..3f2240e2f4 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb @@ -33,6 +33,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb index d7856c8fa2..0bb8d3c531 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb @@ -33,6 +33,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb index a342fa3e4d..ab7844bff7 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb @@ -33,6 +33,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb index 3901df0ef7..9167bcb56a 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb @@ -33,6 +33,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb index f74362241f..063d865aaf 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb @@ -35,6 +35,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb index 29bf068b6a..7309705748 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb @@ -35,6 +35,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb index e48888855e..4a280ff234 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb @@ -35,6 +35,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb index 63080d8ef9..7f469a05ee 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb @@ -35,6 +35,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb index ab9ee385d7..c03250720b 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb @@ -35,6 +35,6 @@ sanity_check_paths = { } # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-foss-2015a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-foss-2015a.eb index e6f905f409..b5f1d052ce 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-foss-2015a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-foss-2015a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1k'), + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-goolf-1.4.10.eb b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-goolf-1.4.10.eb index 130d3553bd..bbe947dc70 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-goolf-1.4.10.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1k'), + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015a.eb index 5e1447f0f0..e4ebb6e711 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1k'), + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015b.eb index 135315981b..c20cd926c3 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.2.3-intel-2015b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1k'), + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.3.1-intel-2015a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.3.1-intel-2015a.eb index b8e7064fcc..86657cbc54 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.3.1-intel-2015a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.3.1-intel-2015a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-GNU-4.9.3-2.25.eb index 86f4ad5681..b454e2d862 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-GNU-4.9.3-2.25.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-gimkl-2.11.5.eb index 635df8455b..a7b9c8e81a 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-gimkl-2.11.5.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-intel-2015b.eb index ba3ca2e1aa..4e830d782c 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.3.2-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.3.2-intel-2015b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb index 21bbc29383..d1f1daadea 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb index 1a599467bd..48abe1a308 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb @@ -20,7 +20,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb index 5702e9976d..0302fdf415 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb index 87dc8ebec4..d1277a5a59 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb index 638514df1f..e56455fcc7 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb index df5823de42..fe1b6c58f6 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb index db841bbaef..1b59bc2fe5 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb index 0204c038c7..3888217474 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb index 36a239c230..d031a47e1d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb index e6beb92bee..1b238fe9f8 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb index cfb29da8c6..f96062a9f5 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb index f5527c16d6..19d8dce097 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb index 383be7ac07..3b0f2cdbc8 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb index 7deb175b91..591130db85 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1k'), + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb index 31b70f1b8a..a1da8e92c6 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb index a70441375c..b649d19572 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb index 619aaa3ab8..d09d0de5fa 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0', '', ('GCCcore', '4.9.3')), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb index 9075c094fb..46fe821879 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb index 42e9b3b3bd..1c577d44b5 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb index 1f3daa3224..4634580e57 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '5.9'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb index 6d07f31ebd..7df8000a04 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb index b68274e5b4..b3ea9ff87e 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb index 97b2282312..0fcaa0288c 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb index d5ca429e05..8955a08ffe 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb @@ -22,7 +22,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1p'), + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb index c1386c78f8..bdffe9630d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb index 40d915d152..f6bb9a5e3d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb @@ -20,7 +20,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1s'), + # ('OpenSSL', '1.0.1s'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb index aa63de70da..476a5bdd98 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb @@ -23,7 +23,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.1.0c'), + # ('OpenSSL', '1.1.0c'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb index adb0724437..31ce4be00a 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2j'), + # ('OpenSSL', '1.0.2j'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb index b6e496837c..6f2f602755 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2j'), + # ('OpenSSL', '1.0.2j'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb index 5b3221d0bf..bb9e39dab2 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb @@ -23,7 +23,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.1.0c'), + # ('OpenSSL', '1.1.0c'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb index b364332ea0..e5028321c6 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb @@ -22,7 +22,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.1.0c'), + # ('OpenSSL', '1.1.0c'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb index e459f784ef..b93ad04bc3 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2j'), + # ('OpenSSL', '1.0.2j'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb index 0464c9024d..dec6da7b0d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2j'), + # ('OpenSSL', '1.0.2j'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb index 2c33988a54..f118a4b2fb 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb @@ -18,7 +18,7 @@ dependencies = [ ('ncurses', '6.0'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2j'), + # ('OpenSSL', '1.0.2j'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11-cuda-7.0.eb b/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11-cuda-7.0.eb index d34361f252..bf60245a75 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11-cuda-7.0.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11-cuda-7.0.eb @@ -40,7 +40,7 @@ parallel = 1 # regression test runtest = False # regression test reports failures -#ignore_regtest_fails = True +# ignore_regtest_fails = True # build type type = 'psmp' diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11.eb index e7bf9550c7..20bfca4976 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-3.0-CrayGNU-2015.11.eb @@ -37,7 +37,7 @@ parallel = 1 # regression test runtest = False # regression test reports failures -#ignore_regtest_fails = True +# ignore_regtest_fails = True # build type type = 'psmp' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb index 50a365b60a..45b63f0380 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -12,8 +12,6 @@ # http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-99.html ## -#easyblock = 'ConfigureMake' - name = 'CUDA' version = '7.5.18' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb index dc4d389baf..72651d5b54 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-7.5.18-iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -12,8 +12,6 @@ # http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-99.html ## -#easyblock = 'ConfigureMake' - name = 'CUDA' version = '7.5.18' diff --git a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.032-intel-2016a-Perl-5.22.2.eb b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.032-intel-2016a-Perl-5.22.2.eb index 6491ebe755..81827042d8 100644 --- a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.032-intel-2016a-Perl-5.22.2.eb +++ b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.032-intel-2016a-Perl-5.22.2.eb @@ -18,7 +18,7 @@ dependencies = [ ('zlib', '1.2.8'), # OS dependency should be preferred if the os version is more recent then this version # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1q'), + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.033-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.033-intel-2016b-Perl-5.24.0.eb index 0a65c07d0f..d5862a7c5a 100644 --- a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.033-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.033-intel-2016b-Perl-5.24.0.eb @@ -18,7 +18,7 @@ dependencies = [ ('zlib', '1.2.8'), # OS dependency should be preferred if the os version is more recent then this version # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.1q'), + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/g/GEM-library/GEM-library-20130406-045632_pre-release-3_Linux-x86_64.eb b/easybuild/easyconfigs/g/GEM-library/GEM-library-20130406-045632_pre-release-3_Linux-x86_64.eb index 009df93cd7..b7ffec63fe 100644 --- a/easybuild/easyconfigs/g/GEM-library/GEM-library-20130406-045632_pre-release-3_Linux-x86_64.eb +++ b/easybuild/easyconfigs/g/GEM-library/GEM-library-20130406-045632_pre-release-3_Linux-x86_64.eb @@ -26,7 +26,7 @@ source_urls = [('http://sourceforge.net/projects/gemlibrary/files/gem-library/Bi # core_i3 is the recommended version by developers. Better performance sources = ['GEM-binaries-Linux-x86_64-core_i3-20130406-045632.tbz2'] # if core_i3 version doesn't work for you, try core_2 version below -#sources = ['GEM-binaries-Linux-x86_64-core_2-20130406-045632.tbz2'] +# sources = ['GEM-binaries-Linux-x86_64-core_2-20130406-045632.tbz2'] # only Linux_x86-64 binaries are provided so we skip build_step. # We just use the MakeCp block to copy each file to the right destination folder (mainly the man files) diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-01-21-goolf-1.4.10.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-01-21-goolf-1.4.10.eb index 5fbe4acc9a..d00a71f2d8 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-01-21-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-01-21-goolf-1.4.10.eb @@ -27,7 +27,7 @@ sources = [SOURCELOWER_TAR_GZ] # you can change the MAX_READLENGTH for GSNAP with something like this. # details in the README http://research-pub.gene.com/gmap/src/README -#configopts = 'MAX_READLENGTH=250' +# configopts = 'MAX_READLENGTH=250' sanity_check_paths = { 'files': ['bin/gmap', 'bin/gsnap'], diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-06-10-goolf-1.4.10.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-06-10-goolf-1.4.10.eb index 6189b95fa0..3994be6bc4 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-06-10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2014-06-10-goolf-1.4.10.eb @@ -27,7 +27,7 @@ sources = [SOURCELOWER_TAR_GZ] # you can change the MAX_READLENGTH for GSNAP with something like this. # details in the README http://research-pub.gene.com/gmap/src/README -#configopts = 'MAX_READLENGTH=250' +# configopts = 'MAX_READLENGTH=250' sanity_check_paths = { 'files': ['bin/gmap', 'bin/gsnap'], diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb index 5440f25394..abea13b1ce 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2015-12-31.v2-foss-2015b.eb @@ -27,7 +27,7 @@ dependencies = [ # you can change the MAX_READLENGTH for GSNAP with something like this. # details in the README http://research-pub.gene.com/gmap/src/README -#configopts = 'MAX_READLENGTH=250' +# configopts = 'MAX_READLENGTH=250' sanity_check_paths = { 'files': ['bin/gmap', 'bin/gsnap'], diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb index 5e9cfedc47..f2525337c6 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-05-01-foss-2016a.eb @@ -27,7 +27,7 @@ dependencies = [ # you can change the MAX_READLENGTH for GSNAP with something like this. # details in the README http://research-pub.gene.com/gmap/src/README -#configopts = 'MAX_READLENGTH=250' +# configopts = 'MAX_READLENGTH=250' sanity_check_paths = { 'files': ['bin/gmap', 'bin/gsnap'], diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb index 00035603e7..6b8d559ccc 100644 --- a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2016-11-07-foss-2016b.eb @@ -30,7 +30,7 @@ dependencies = [ # you can change the MAX_READLENGTH for GSNAP with something like this. # details in the README http://research-pub.gene.com/gmap/src/README -#configopts = 'MAX_READLENGTH=250' +# configopts = 'MAX_READLENGTH=250' sanity_check_paths = { 'files': ['bin/gmap', 'bin/gsnap'], diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb index 7305497c37..c65da40120 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb @@ -24,7 +24,7 @@ dependencies = [ ('LibTIFF', '4.0.6'), ] -#Do not use local copies of zlib, jpeg, freetype, and png +# Do not use local copies of zlib, jpeg, freetype, and png preconfigopts = "mv zlib zlib.no && mv jpeg jpeg.no && mv freetype freetype.no && mv libpng libpng.no &&" configopts = "--with-system-libtiff --enable-dynamic" diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb index d3f76e106a..b89382f6a1 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb @@ -24,7 +24,7 @@ dependencies = [ ('LibTIFF', '4.0.6'), ] -#Do not use local copies of zlib, jpeg, freetype, and png +# Do not use local copies of zlib, jpeg, freetype, and png preconfigopts = "mv zlib zlib.no && mv jpeg jpeg.no && mv freetype freetype.no && mv libpng libpng.no &&" configopts = "--with-system-libtiff --enable-dynamic" diff --git a/easybuild/easyconfigs/g/gencore_variant_detection/gencore_variant_detection-1.0.eb b/easybuild/easyconfigs/g/gencore_variant_detection/gencore_variant_detection-1.0.eb index b799146d37..f4f2214acc 100644 --- a/easybuild/easyconfigs/g/gencore_variant_detection/gencore_variant_detection-1.0.eb +++ b/easybuild/easyconfigs/g/gencore_variant_detection/gencore_variant_detection-1.0.eb @@ -24,7 +24,7 @@ toolchain = {'name': 'dummy', 'version': ''} builddependencies = [('Anaconda3', '4.0.0')] # Use one of the following - either an environment.yml file or a remote environment definition -#environment_file = '/path/to/conda-environment.yml' +# environment_file = '/path/to/conda-environment.yml' remote_environment = "nyuad-cgsb/%(name)s_%(version)s" sanity_check_paths = { diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.0-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.0-cli.eb index 3c591a65e9..f18772cba0 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.0-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.0-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.1-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.1-cli.eb index c6c633599b..7d698aa331 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.1-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.1-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.2-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.2-cli.eb index a6a417a8dc..79d83ae249 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.2-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.2-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.3-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.3-cli.eb index 996a654cea..be5a34157b 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.3-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.3-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.4-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.4-cli.eb index 754319d620..e614c725c0 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.4-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.0.4-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2015b-Python-2.7.10', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.0-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.0-cli.eb index 2c68b1bfaa..82c6cbe980 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.0-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.0-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.1-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.1-cli.eb index 3f8a48b472..e91b71bb90 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.1-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.1-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.2-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.2-cli.eb index cb9ae64332..4862029e81 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.2-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.2-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016a-Python-2.7.11', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.3-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.3-cli.eb index 4846e39a8e..9e46040159 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.3-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.3-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.4-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.4-cli.eb index 275b2940c7..882a63bafc 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.4-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.1.4-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.0-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.0-cli.eb index 7e255dbc21..da0110ba9d 100644 --- a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.0-cli.eb +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.0-cli.eb @@ -30,11 +30,11 @@ options = {'modulename': 'hod'} modextravars = { # site-specific settings, hence commented out # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) - #'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', - #'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', # specify location on shared 'scratch' filesystem for HOD working directories - #'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', - #'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', } sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 88b4f2e32e..52f0e797fd 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -25,6 +25,6 @@ sanity_check_paths = { # You may find it desirable to put this variable in the module file. # The command to do so has been put here (commented out) as a convenience. -#modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } +# modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index fccdce2d50..681a2da8cf 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -25,6 +25,6 @@ sanity_check_paths = { # You may find it desirable to put this variable in the module file. # The command to do so has been put here (commented out) as a convenience. -#modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } +# modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb index df95bd6282..15948e83d4 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb @@ -20,7 +20,7 @@ dependencies = [ ('testpath', '0.3', versionsuffix), # required by 'nbconvert', but causes problems w.r.t. 'backports' module... # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('entrypoints', '0.2.2', versionsuffix), + # ('entrypoints', '0.2.2', versionsuffix), ('path.py', '8.2.1', versionsuffix), ('prompt-toolkit', '1.0.6', versionsuffix), ] @@ -116,9 +116,9 @@ exts_list = [ }), # disabled because entrypoints on which this depends pull in configparser, which causes problems # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('nbconvert', '4.2.0', { + # ('nbconvert', '4.2.0', { # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - #}), + # }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb index d3bbfe47b7..73b84816cd 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb @@ -20,7 +20,7 @@ dependencies = [ ('testpath', '0.3', versionsuffix), # required by 'nbconvert', but causes problems w.r.t. 'backports' module... # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('entrypoints', '0.2.2', versionsuffix), + # ('entrypoints', '0.2.2', versionsuffix), ('path.py', '8.2.1', versionsuffix), ('prompt-toolkit', '1.0.6', versionsuffix), ] @@ -116,9 +116,9 @@ exts_list = [ }), # disabled because entrypoints on which this depends pull in configparser, which causes problems # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('nbconvert', '4.2.0', { + # ('nbconvert', '4.2.0', { # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - #}), + # }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb index 9a8c7fce6d..bbfde4273f 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb @@ -13,7 +13,7 @@ description = """Kraken is a system for assigning taxonomic labels to short DNA programs. Kraken aims to achieve high sensitivity and high speed by utilizing exact alignments of k-mers and a novel classification algorithm.""" -#Part is compiled with CXX, the rest is in Perl +# Part is compiled with CXX, the rest is in Perl toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'openmp': True} diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb index fc353606af..a1be8e5709 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb @@ -13,7 +13,7 @@ description = """Kraken is a system for assigning taxonomic labels to short DNA programs. Kraken aims to achieve high sensitivity and high speed by utilizing exact alignments of k-mers and a novel classification algorithm.""" -#Part is compiled with CXX, the rest is in Perl +# Part is compiled with CXX, the rest is in Perl toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'openmp': True} diff --git a/easybuild/easyconfigs/l/LeadIT/LeadIT-2.1.9.eb b/easybuild/easyconfigs/l/LeadIT/LeadIT-2.1.9.eb index 128c5bbc07..27a91f92c0 100644 --- a/easybuild/easyconfigs/l/LeadIT/LeadIT-2.1.9.eb +++ b/easybuild/easyconfigs/l/LeadIT/LeadIT-2.1.9.eb @@ -12,7 +12,7 @@ description = """Visually Informed LeadOpt""" toolchain = {'name': 'dummy', 'version': 'dummy'} -#You need to get the software manually from http://www.biosolveit.de/LeadIT/index.html +# You need to get the software manually from http://www.biosolveit.de/LeadIT/index.html sources = ['leadit-%(version)s-Linux-x64.tar.gz'] checksums = ['363fa557861c4d109fd595ab895df3fd'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb index bd766f2e39..aaf083cf04 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' patches = ['libxc-%(version)s-fix-initialization.patch'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb index f86e8ff9fb..0d7ebaf5fb 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' patches = ['libxc-%(version)s-fix-initialization.patch'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb index 4c45b545b5..635c9b4d96 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="$F77 -E" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb index 8276d5a07e..dc228fe31b 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="$F77 -E" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb index 0bf711caf0..f440f02af5 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="/lib/cpp -ansi" --enable-shared # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb index e6561d3ed6..df5b0a2ac4 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb index c631b87e66..674453ff55 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="/lib/cpp -ansi" --enable-shared # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb index 3bee3b3d9c..2ce787f05e 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb index d9d2ff8c6b..d3176a0e56 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS"' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a'], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb index 254367cee7..f3870dc3fb 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS"' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a'], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb index 13f7f941b6..80de4c9f97 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb index ae74d150b0..7a2ba48de6 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb @@ -21,7 +21,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.so'], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb index b029d7950c..8e7a6d0b88 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb index 7590c8664b..42d53d0949 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb index 96aab1d178..2d6dda37b8 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb @@ -20,7 +20,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc.a', 'lib/libxc.%s' % SHLIB_EXT], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb index 969028930d..8733225f52 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb @@ -19,7 +19,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index 4f8d72a634..40280eac70 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -19,7 +19,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index a8378f3087..ef6bdb3052 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -19,7 +19,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb index fd83352b30..b63d48a898 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb @@ -19,7 +19,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb index 951b7f0605..67f7a66326 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb @@ -19,7 +19,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # a fully working testsuite soon (unless someone wants to volunteer to do # it, of course ) In the meantime, unless the majority of the tests # fail, your build should be fine. -#runtest = 'check' +# runtest = 'check' sanity_check_paths = { 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], diff --git a/easybuild/easyconfigs/l/libxcb/libxcb-1.10-foss-2014b-Python-2.7.8.eb b/easybuild/easyconfigs/l/libxcb/libxcb-1.10-foss-2014b-Python-2.7.8.eb index 6921c06b50..58524fdeb0 100644 --- a/easybuild/easyconfigs/l/libxcb/libxcb-1.10-foss-2014b-Python-2.7.8.eb +++ b/easybuild/easyconfigs/l/libxcb/libxcb-1.10-foss-2014b-Python-2.7.8.eb @@ -23,8 +23,6 @@ dependencies = [ ('libpthread-stubs', '0.3'), ] -#preconfigopts = "rm -r aclocal.m4 configure Makefile.in ltmain.sh && ./autogen.sh && " - sanity_check_paths = { 'files': ['lib/libxcb%s.a' % x for x in ['', '-composite', '-damage', '-dpms', '-dri2', '-glx', '-randr', '-record', '-render', '-res', '-screensaver', diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb index 3f895315b2..93b02acda8 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb @@ -50,14 +50,14 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --disable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" configopts += " --disable-driglx-direct --with-gallium-drivers='' --disable-egl""" # package-config files for os dependencies are in an os specific place -#preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb index 592c4a1182..3ebe66dd51 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb @@ -47,14 +47,14 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb index 2bd0ff0f94..2631598232 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb @@ -46,14 +46,14 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb index a22cf02d69..244c4f1427 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb @@ -46,14 +46,14 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb index 231d3ed99e..81337fce92 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb @@ -42,7 +42,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" @@ -50,7 +50,7 @@ configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb index 7b54c5a0b7..84db881b8b 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb @@ -42,7 +42,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" @@ -50,7 +50,7 @@ configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb index ecd0aaeeb3..9a2892bda4 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb @@ -42,7 +42,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" @@ -50,7 +50,7 @@ configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb index 18bebf34fd..8fe85b43fb 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb @@ -42,7 +42,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" @@ -50,7 +50,7 @@ configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb index 09f90b3879..c0ae4f1fc2 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb @@ -42,7 +42,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" @@ -50,7 +50,7 @@ configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place -#preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' diff --git a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2010.1.23.Linux_x86_64.eb b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2010.1.23.Linux_x86_64.eb index c80d4d1ee1..51f747c203 100644 --- a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2010.1.23.Linux_x86_64.eb +++ b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2010.1.23.Linux_x86_64.eb @@ -15,6 +15,6 @@ precompiled_binaries = True # license file - uncomment if a licence file is supplied by your site and # is valid for all users - the value of license_file may have to be changed -#license_file = HOME + '/licenses/%(name)s/license.lic' +# license_file = HOME + '/licenses/%(name)s/license.lic' moduleclass = 'chem' diff --git a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.0.linux_x86_64_intel.eb b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.0.linux_x86_64_intel.eb index 251958da52..678309eb8a 100644 --- a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.0.linux_x86_64_intel.eb +++ b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.0.linux_x86_64_intel.eb @@ -15,6 +15,6 @@ precompiled_binaries = True # license file - uncomment if a licence file is supplied by your site and # is valid for all users - the value of license_file may have to be changed -#license_file = HOME + '/licenses/%(name)s/license.lic' +# license_file = HOME + '/licenses/%(name)s/license.lic' moduleclass = 'chem' diff --git a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.10.linux_x86_64_openmp.eb b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.10.linux_x86_64_openmp.eb index 22912ecf4a..b2738fff57 100644 --- a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.10.linux_x86_64_openmp.eb +++ b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.10.linux_x86_64_openmp.eb @@ -15,6 +15,6 @@ precompiled_binaries = True # license file - uncomment if a licence file is supplied by your site and # is valid for all users - the value of license_file may have to be changed -#license_file = HOME + '/licenses/%(name)s/license.lic' +# license_file = HOME + '/licenses/%(name)s/license.lic' moduleclass = 'chem' diff --git a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.3.linux_x86_64_openmp.eb b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.3.linux_x86_64_openmp.eb index 47852f7b9a..3639fc72f4 100644 --- a/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.3.linux_x86_64_openmp.eb +++ b/easybuild/easyconfigs/m/Molpro/Molpro-mpp-2015.1.3.linux_x86_64_openmp.eb @@ -15,6 +15,6 @@ precompiled_binaries = True # license file - uncomment if a licence file is supplied by your site and # is valid for all users - the value of license_file may have to be changed -#license_file = HOME + '/licenses/%(name)s/license.lic' +# license_file = HOME + '/licenses/%(name)s/license.lic' moduleclass = 'chem' diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.12-GCC-4.9.2-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.12-GCC-4.9.2-LAPACK-3.5.0.eb index 3a54e8b3b2..8e7a8e3488 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.12-GCC-4.9.2-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.12-GCC-4.9.2-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.8.4-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.8.4-LAPACK-3.5.0.eb index 870b4ca0ec..1aae2d7107 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.8.4-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.8.4-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.9.2-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.9.2-LAPACK-3.5.0.eb index 1291a991d1..1474c30ba6 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.9.2-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-GCC-4.9.2-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-gompi-1.5.16-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-gompi-1.5.16-LAPACK-3.5.0.eb index fe4211f53c..e83941b54c 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-gompi-1.5.16-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.13-gompi-1.5.16-LAPACK-3.5.0.eb @@ -40,7 +40,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.2-2.25-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.2-2.25-LAPACK-3.5.0.eb index 23704a985e..9be631f2d3 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.2-2.25-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.2-2.25-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.3-2.25-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.3-2.25-LAPACK-3.5.0.eb index b11768a150..d1b44dfae9 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.3-2.25-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.14-GNU-4.9.3-2.25-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.15-GCC-4.9.3-2.25-LAPACK-3.6.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.15-GCC-4.9.3-2.25-LAPACK-3.6.0.eb index 32dd146e23..1c0d99523c 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.15-GCC-4.9.3-2.25-LAPACK-3.6.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.15-GCC-4.9.3-2.25-LAPACK-3.6.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-4.9.4-2.25-LAPACK-3.6.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-4.9.4-2.25-LAPACK-3.6.0.eb index abbe566e01..28a8a8d5c5 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-4.9.4-2.25-LAPACK-3.6.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-4.9.4-2.25-LAPACK-3.6.0.eb @@ -43,7 +43,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.3.0-2.26-LAPACK-3.6.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.3.0-2.26-LAPACK-3.6.0.eb index 9dd493110f..92f08781e2 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.3.0-2.26-LAPACK-3.6.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.3.0-2.26-LAPACK-3.6.0.eb @@ -43,7 +43,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.0.eb index 3879abb7bd..0b62a315f7 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.0.eb @@ -43,7 +43,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1.eb index 21a2a7c815..85f10c536a 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1.eb @@ -43,7 +43,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb index ba23eaadbf..143c9edae7 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-6.3.0-2.27-LAPACK-3.7.0.eb @@ -44,7 +44,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb index bd9785f7cc..1e915a802f 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb @@ -41,7 +41,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-ictce-5.3.0-LAPACK-3.4.2.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-ictce-5.3.0-LAPACK-3.4.2.eb index 16af9a1249..30835b6878 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-ictce-5.3.0-LAPACK-3.4.2.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-ictce-5.3.0-LAPACK-3.4.2.eb @@ -41,7 +41,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.5.14-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.5.14-LAPACK-3.5.0.eb index c183debe56..b1e3b0dad6 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.5.14-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.5.14-LAPACK-3.5.0.eb @@ -40,7 +40,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.6.10-LAPACK-3.4.2.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.6.10-LAPACK-3.4.2.eb index ba2f665b5b..19c2176d82 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.6.10-LAPACK-3.4.2.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-gompi-1.6.10-LAPACK-3.4.2.eb @@ -40,7 +40,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-ictce-5.3.0-LAPACK-3.4.2.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-ictce-5.3.0-LAPACK-3.4.2.eb index dbc806f461..d346fc16be 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-ictce-5.3.0-LAPACK-3.4.2.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.8-ictce-5.3.0-LAPACK-3.4.2.eb @@ -40,7 +40,7 @@ buildopts = 'BINARY=64 ' + threading + ' CC="$CC" FC="$F77"' installopts = threading + " PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.9-GCC-4.8.3-LAPACK-3.5.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.9-GCC-4.8.3-LAPACK-3.5.0.eb index d0e54d0995..4cb827eecc 100644 --- a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.9-GCC-4.8.3-LAPACK-3.5.0.eb +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.9-GCC-4.8.3-LAPACK-3.5.0.eb @@ -39,7 +39,7 @@ buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' installopts = "USE_THREAD=1 PREFIX=%(installdir)s" # extensive testing can be enabled by uncommenting the line below -#runtest = 'PATH=.:$PATH lapack-timing' +# runtest = 'PATH=.:$PATH lapack-timing' sanity_check_paths = { 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb index 5b1245248a..fb9d354480 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = [ 'https://github.com/Itseez/opencv/archive/', - #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + # The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', ] @@ -42,7 +42,7 @@ dependencies = [ ('GST-plugins-base', '1.6.4'), ] -#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +# The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb index bd5181fa1c..52aa30e629 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = [ 'https://github.com/Itseez/opencv/archive/', - #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + # The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', ] @@ -43,7 +43,7 @@ dependencies = [ ] preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' -#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +# The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb index e7f6df5043..fc8dc13e40 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = [ 'https://github.com/Itseez/opencv/archive/', - #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + # The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', ] @@ -44,7 +44,7 @@ dependencies = [ preconfigopts = 'export IPPROOT=$EBROOTICC/ipp && ' -#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +# The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) diff --git a/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb index ed0569f101..249aec45bf 100644 --- a/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb @@ -35,10 +35,10 @@ builddependencies = [ configopts = '-DENABLE_MPI=ON -DENABLE_OMP=ON -DENABLE_UNIT_TESTS=ON -DENABLE_CHEMPS2=ON -DENABLE_PLUGINS=ON' # CMake will pick mpiexec by default and this fails with intel MPI -#configopts += ' -DMPIEXEC=$EBROOTIMPI/bin64/mpirun' +# configopts += ' -DMPIEXEC=$EBROOTIMPI/bin64/mpirun' # The tests don't work with MPI (most of them hang or fail) -# ref: https://github.com/psi4/psi4/pull/436#issuecomment-230519769 +# ref: https://github.com/psi4/psi4/pull/436# issuecomment-230519769 runtest = False moduleclass = 'chem' diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10-mpi.eb index c8116fe14f..4a341a8548 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10-mpi.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10-mpi.eb @@ -39,7 +39,7 @@ configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.so ' configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.so ' # Without internet connection turn off testing (uncomment the following line) -#configopts += '-DBUILD_TESTING=OFF ' +# configopts += '-DBUILD_TESTING=OFF ' # Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md # and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly # Without internet connection, comment the following two lines (configopts and prebuildopts) diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10.eb index 2e184fd801..c862a27b0b 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-4.3.1-intel-2015a-Python-2.7.10.eb @@ -38,7 +38,7 @@ configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.so ' configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.so ' # Without internet connection turn off testing (uncomment the following line) -#configopts += '-DBUILD_TESTING=OFF ' +# configopts += '-DBUILD_TESTING=OFF ' # Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md # and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly # Without internet connection, comment the following two lines (configopts and prebuildopts) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb index 974e57d87c..d205929d06 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb @@ -21,7 +21,6 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '5.9'), ('SQLite', '3.9.2'), - #('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('Tk', '8.6.4'), # this requires a full X11 stack ('GMP', '6.1.0'), # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb index ed40bed006..4127452393 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -21,14 +21,13 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '6.0'), ('SQLite', '3.9.2'), - #('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('Tk', '8.6.4'), # this requires a full X11 stack ('GMP', '6.1.0'), ('OpenSSL', '1.0.2h'), # OS dependency should be preferred if the os version is more recent then this version, it's # nice to have an up to date openssl for security reasons ] -#osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] +# osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! # package versions updated May 28th 2015 diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb index dcac389893..571dd12dc1 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb @@ -29,7 +29,7 @@ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # We hide this by default since users should not use it in production, high-performance Python should be delivered at # compiler level with a default extension set -#hidden = True +# hidden = True # bare installation: only known module deps for GCCcore tools included exts_list = [] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb index c83dff187b..6f474dc2c1 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb @@ -19,8 +19,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - #('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - #nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb index 7bdd55756a..b91c6a4a7d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb @@ -21,8 +21,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - #('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb index f49b2ff085..3034157afb 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb @@ -24,7 +24,7 @@ dependencies = [ ('libffi', '3.2.1'), # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.0.2h'), + # ('OpenSSL', '1.0.2h'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb index 908370bc3a..098af10b8c 100644 --- a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb @@ -18,8 +18,8 @@ sources = ['%s.tar.gz' % commit_id] patches = ['%(name)s-%(version)s_openblas.patch'] -#pyGIMLi is picky about the version of CastXML/pygccxml/pyplusplus -#Check scripts/buildThirdParty.sh +# pyGIMLi is picky about the version of CastXML/pygccxml/pyplusplus +# Check scripts/buildThirdParty.sh builddependencies = [ ('CMake', '3.4.3'), ('CastXML', '20160617'), diff --git a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb index 3b3bd56fa2..8ab67d6ce0 100644 --- a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-3.5.1.eb @@ -18,8 +18,8 @@ sources = ['%s.tar.gz' % commit_id] patches = ['%(name)s-%(version)s_openblas.patch'] -#pyGIMLi is picky about the version of CastXML/pygccxml/pyplusplus -#Check scripts/buildThirdParty.sh +# pyGIMLi is picky about the version of CastXML/pygccxml/pyplusplus +# Check scripts/buildThirdParty.sh builddependencies = [ ('CMake', '3.4.3'), ('CastXML', '20160617'), diff --git a/easybuild/easyconfigs/r/R/R-3.2.0-goolf-1.7.20.eb b/easybuild/easyconfigs/r/R/R-3.2.0-goolf-1.7.20.eb index 499d383ce4..ab47b2f132 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.0-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.0-goolf-1.7.20.eb @@ -54,7 +54,7 @@ exts_list = [ 'utils', # non-standard libraries, should be specified with fixed versions! # Rmpi segfaults (on some systems) when built with goolf/1.7.20? - #('Rmpi', '0.6-5', dict(ext_options.items() + [('patches', ['Rmpi-0.6-5_impi5.patch'])])), + # ('Rmpi', '0.6-5', dict(ext_options.items() + [('patches', ['Rmpi-0.6-5_impi5.patch'])])), ('abind', '1.4-3', ext_options), ('magic', '1.5-6', ext_options), ('geometry', '0.3-5', ext_options), diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb index cc50539ec7..f0e1274759 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb @@ -24,7 +24,7 @@ dependencies = [ ('libxml2', '2.9.1', '-%s-%s' % (python, pyver)), ('PCRE', '8.12'), ('CFITSIO', '3.34'), - #('graphviz', '2.34.0'), Graphviz is optional, not in EB yet. + # ('graphviz', '2.34.0'), Graphviz is optional, not in EB yet. (python, pyver), ] -- GitLab From 65ef33d28f518a9d63262dc73483420b111e3e31 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 09:46:11 +0100 Subject: [PATCH 0491/1311] fix long lines and space issues --- .../easyconfigs/a/ASHS/ASHS-rev103_20140612.eb | 10 +++++----- .../a/ant/ant-1.10.0-Java-1.8.0_112.eb | 5 +++-- .../a/ant/ant-1.9.7-Java-1.8.0_92.eb | 5 +++-- .../b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb | 3 ++- .../b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb | 1 - .../Commet-20150415-foss-2016a-Python-2.7.11.eb | 2 +- .../c/ctffind/ctffind-4.0.17-intel-2015b.eb | 3 ++- .../e/ELPA/ELPA-2016.05.004-intel-2017a.eb | 17 +++++------------ ...ator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb | 5 +++-- .../g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb | 2 +- .../Ghostscript/Ghostscript-9.20-foss-2016b.eb | 4 +++- .../Ghostscript/Ghostscript-9.20-intel-2016b.eb | 4 +++- easybuild/easyconfigs/g/gompi/gompi-2016.09.eb | 4 ++-- .../i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb | 2 +- .../i/intelcuda/intelcuda-2016.10.eb | 3 ++- ...Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb | 2 +- ...Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb | 2 +- .../l/libxc/libxc-2.2.3-foss-2016b.eb | 2 +- .../l/libxc/libxc-2.2.3-intel-2016a.eb | 2 +- .../l/libxc/libxc-2.2.3-intel-2016b.eb | 2 +- .../l/libxc/libxc-3.0.0-intel-2016a.eb | 2 +- .../l/libxc/libxc-3.0.0-intel-2016b.eb | 2 +- .../Mesa-10.4.5-intel-2015a-Python-2.7.9.eb | 2 +- .../Mesa-10.5.5-intel-2015a-Python-2.7.10.eb | 5 +++-- .../Mesa-11.0.2-intel-2015b-Python-2.7.10.eb | 5 +++-- .../Mesa-11.0.8-intel-2015b-Python-2.7.11.eb | 5 +++-- .../o/OpenCV/OpenCV-3.1.0-foss-2016a.eb | 4 ++-- .../o/OpenCV/OpenCV-3.1.0-intel-2016a.eb | 4 ++-- .../o/OpenCV/OpenCV-3.1.0-intel-2016b.eb | 4 ++-- .../PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb | 12 ++++++------ .../PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb | 12 ++++++------ .../PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb | 2 +- .../p/Python/Python-2.5.6-goolf-1.4.10-bare.eb | 3 ++- .../p/Python/Python-2.5.6-ictce-5.2.0-bare.eb | 3 ++- .../p/Python/Python-2.5.6-ictce-5.3.0-bare.eb | 3 ++- .../Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb | 3 ++- .../Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb | 3 ++- .../p/Python/Python-2.7.11-CrayGNU-2015.11.eb | 3 ++- .../p/Python/Python-2.7.11-CrayGNU-2016.03.eb | 3 ++- .../p/Python/Python-2.7.11-goolf-1.7.20.eb | 5 +++-- ...ython-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb | 7 ++++--- .../Python/Python-2.7.12-GCCcore-4.9.3-bare.eb | 8 +++++--- .../p/Python/Python-2.7.3-foss-2015b.eb | 3 ++- .../p/Python/Python-2.7.3-goolf-1.4.10.eb | 3 ++- .../p/Python/Python-2.7.3-goolf-1.5.14.eb | 3 ++- .../p/Python/Python-2.7.3-ictce-5.2.0.eb | 3 ++- .../p/Python/Python-2.7.3-ictce-5.3.0.eb | 3 ++- .../p/Python/Python-2.7.3-intel-2015a.eb | 3 ++- .../p/Python/Python-2.7.5-goolf-1.4.10.eb | 3 ++- .../p/Python/Python-2.7.5-ictce-5.3.0.eb | 3 ++- .../p/Python/Python-2.7.5-ictce-5.5.0.eb | 3 ++- .../p/Python/Python-2.7.6-goolf-1.4.10.eb | 3 ++- .../p/Python/Python-2.7.6-ictce-5.5.0.eb | 3 ++- .../p/Python/Python-2.7.8-foss-2014b.eb | 3 ++- .../p/Python/Python-2.7.8-goolf-1.5.14.eb | 3 ++- .../p/Python/Python-2.7.8-ictce-7.1.2.eb | 3 ++- .../p/Python/Python-2.7.8-intel-2014.06.eb | 3 ++- .../p/Python/Python-2.7.8-intel-2014b.eb | 3 ++- .../p/Python/Python-2.7.8-intel-2015a.eb | 3 ++- .../Python/Python-2.7.9-CrayGNU-2015.06-bare.eb | 3 ++- .../p/Python/Python-2.7.9-CrayGNU-2015.06.eb | 8 +++++--- .../Python/Python-2.7.9-CrayGNU-2015.11-bare.eb | 3 ++- .../p/Python/Python-2.7.9-CrayGNU-2015.11.eb | 8 +++++--- .../p/Python/Python-2.7.9-GCC-4.8.4-bare.eb | 3 ++- .../p/Python/Python-2.7.9-GCC-4.9.2-bare.eb | 3 ++- .../p/Python/Python-2.7.9-foss-2015.05.eb | 3 ++- .../p/Python/Python-2.7.9-foss-2015a-bare.eb | 3 ++- .../p/Python/Python-2.7.9-foss-2015a.eb | 3 ++- .../p/Python/Python-2.7.9-foss-2015b.eb | 3 ++- .../p/Python/Python-2.7.9-gompi-1.5.16-bare.eb | 3 ++- .../p/Python/Python-2.7.9-goolf-1.5.14.eb | 3 ++- .../p/Python/Python-2.7.9-goolf-1.5.16.eb | 3 ++- .../p/Python/Python-2.7.9-goolf-1.7.20.eb | 3 ++- .../p/Python/Python-2.7.9-intel-2015a-bare.eb | 3 ++- .../p/Python/Python-2.7.9-intel-2015a.eb | 3 ++- .../p/Python/Python-3.2.3-goolf-1.4.10.eb | 3 ++- .../p/Python/Python-3.2.3-ictce-5.3.0.eb | 3 ++- .../p/Python/Python-3.3.2-goolf-1.4.10.eb | 3 ++- .../p/Python/Python-3.3.2-ictce-5.3.0.eb | 3 ++- .../p/Python/Python-3.4.1-intel-2014b.eb | 3 ++- .../p/Python/Python-3.4.1-intel-2015a.eb | 3 ++- .../p/Python/Python-3.4.3-intel-2015a.eb | 3 ++- .../p/Python/Python-3.5.0-intel-2015b.eb | 3 ++- .../p/Python/Python-3.5.1-foss-2015a.eb | 3 ++- .../p/Python/Python-3.5.1-foss-2016a.eb | 3 ++- .../p/Python/Python-3.5.1-intel-2016a.eb | 3 ++- ...pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb | 2 +- .../QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb | 11 +++++------ 88 files changed, 198 insertions(+), 137 deletions(-) diff --git a/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb b/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb index bfa52a0b28..a251f6e6b4 100644 --- a/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb +++ b/easybuild/easyconfigs/a/ASHS/ASHS-rev103_20140612.eb @@ -2,7 +2,7 @@ # Author: Ravi Tripathi # Email: ravi89@uab.edu -easyblock = "Tarball" +easyblock = 'Tarball' name = 'ASHS' version = 'rev103_20140612' @@ -16,14 +16,14 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # from https://www.nitrc.org/frs/?group_id=370 sources = ['ashs_Linux64_%(version)s.tgz'] -checksums= ["07fea2883b856af8797b200212b72e71"] +checksums = ['07fea2883b856af8797b200212b72e71'] modextravars = {'ASHS_ROOT': '%(installdir)s'} sanity_check_paths = { - 'files': ["bin/ashs_main.sh", "bin/ashs_template_qsub.sh", "bin/ashs_train.sh", - "bin/ashs_util_makepdf.sh"], - 'dirs': ["ext"] + 'files': ['bin/ashs_main.sh', 'bin/ashs_template_qsub.sh', 'bin/ashs_train.sh', + 'bin/ashs_util_makepdf.sh'], + 'dirs': ['ext'], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb index 2d88d28b75..d2ebd37189 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.10.0-Java-1.8.0_112.eb @@ -3,8 +3,9 @@ version = '1.10.0' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb b/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb index 175bb2628a..4c6e292088 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.7-Java-1.8.0_92.eb @@ -3,8 +3,9 @@ version = '1.9.7' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb index 25b2cd8bb7..a0b996743d 100644 --- a/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BayeScEnv/BayeScEnv-1.1-goolf-1.4.10.eb @@ -9,7 +9,8 @@ name = 'BayeScEnv' version = '1.1' homepage = 'https://github.com/devillemereuil/bayescenv' -description = """BayeScEnv is a Fst-based, genome-scan method that uses environmental variables to detect local adaptation.""" +description = """BayeScEnv is a Fst-based, genome-scan method that uses environmental variables + to detect local adaptation.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'openmp': True} diff --git a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb index de8bcce297..2902acfde6 100644 --- a/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BayeScan/BayeScan-2.1-goolf-1.4.10.eb @@ -12,7 +12,6 @@ homepage = 'http://cmpg.unibe.ch/software/BayeScan/' description = """BayeScan aims at identifying candidate loci under natural selection from genetic data, using differences in allele frequencies between populations.""" -# BayeScan makefile is hardcoded to use g++. In case you want to use a non-gcc toolchain you will need to patch the makefile toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'openmp': True} diff --git a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb index 3abe5c93c9..4000cc8571 100644 --- a/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Commet/Commet-20150415-foss-2016a-Python-2.7.11.eb @@ -26,7 +26,7 @@ files_to_copy = ['bin', 'doc', 'include', 'ABCDE_bench', (['Commet.py'], 'bin')] sanity_check_paths = { 'files': ['bin/%s' % binfile for binfile in ['Commet.py', 'bvop', 'compare_reads', 'extract_reads', 'filter_reads', 'index_and_search']], - 'dirs' : ['doc', 'include'] + 'dirs': ['doc', 'include'], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb index 8c2ecba76b..60152e7602 100644 --- a/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb +++ b/easybuild/easyconfigs/c/ctffind/ctffind-4.0.17-intel-2015b.eb @@ -22,7 +22,8 @@ dependencies = [('GSL', '1.16')] # when running ./configure in the root folder it fails. # application doesn't provide a 'make install' prebuildopts = 'mkdir build && cd build && ' -prebuildopts += ' ../configure --enable-static --disable-debug --enable-optimisations --enable-openmp FC=${FC} F77=${F77} && ' +prebuildopts += " ../configure --enable-static --disable-debug --enable-optimisations --enable-openmp " +prebuildopts += "FC=${FC} F77=${F77} && " files_to_copy = [(['build/ctffind'], 'bin'), 'doc', 'scripts'] diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb index 4851fc5541..75d318f670 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2016.05.004-intel-2017a.eb @@ -46,18 +46,11 @@ postinstallcmds = [ ] sanity_check_paths = { - 'files': [ - 'lib/libelpa.a', 'lib/libelpa.%s' % SHLIB_EXT, - 'lib/libelpa_openmp.a', 'lib/libelpa_openmp.%s' % SHLIB_EXT, - 'lib/libelpatest.a', 'lib/libelpatest.%s' % SHLIB_EXT, - 'lib/libelpatest_openmp.a', 'lib/libelpatest_openmp.%s' % SHLIB_EXT, - 'share/doc/elpa/examples/config.h', - 'share/doc/elpa/examples/config-f90.h', - ], - 'dirs': [ - 'bin', 'include/elpa-%(version)s/elpa', - 'include/elpa-%(version)s/modules', 'lib/pkgconfig', - ], + 'files': ['lib/libelpa.a', 'lib/libelpa.%s' % SHLIB_EXT, 'lib/libelpa_openmp.a', + 'lib/libelpa_openmp.%s' % SHLIB_EXT, 'lib/libelpatest.a', 'lib/libelpatest.%s' % SHLIB_EXT, + 'lib/libelpatest_openmp.a', 'lib/libelpatest_openmp.%s' % SHLIB_EXT, 'share/doc/elpa/examples/config.h', + 'share/doc/elpa/examples/config-f90.h'], + 'dirs': ['bin', 'include/elpa-%(version)s/elpa', 'include/elpa-%(version)s/modules', 'lib/pkgconfig'], } moduleclass = 'math' diff --git a/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb b/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb index f9d3b4a7b5..5e8c01ab2d 100644 --- a/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb +++ b/easybuild/easyconfigs/f/fastQValidator/fastQValidator-0.1.1a-20151214-goolf-1.7.20-aadc6f9.eb @@ -31,8 +31,9 @@ sources = [ dependencies = [ ('zlib', '1.2.8'), -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] # openssl required by libStatgen diff --git a/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb b/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb index f302d9f398..238da5f765 100644 --- a/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GP2C/GP2C-0.0.9pl5-foss-2016a.eb @@ -22,7 +22,7 @@ configopts = '--with-paricfg=$EBROOTPARIMINGP/lib/pari/pari.cfg' runtest = 'check' sanity_check_paths = { - 'files': ['bin/%s' % binfile for binfile in ['gp2c', 'gp2c-run',]], + 'files': ['bin/%s' % binfile for binfile in ['gp2c', 'gp2c-run']], 'dirs': ['bin'] } diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb index c65da40120..d7b08e9fef 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-foss-2016b.eb @@ -10,7 +10,9 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True} -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/"] +source_urls = [ + 'https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/', +] sources = ['ghostscript-%(version)s.tar.gz'] dependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb index b89382f6a1..eed125d9f6 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.20-intel-2016b.eb @@ -10,7 +10,9 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/"] +source_urls = [ + 'https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/', +] sources = ['ghostscript-%(version)s.tar.gz'] dependencies = [ diff --git a/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb b/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb index d4b83fb9a0..7e7b36e603 100644 --- a/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb +++ b/easybuild/easyconfigs/g/gompi/gompi-2016.09.eb @@ -13,8 +13,8 @@ gccver = '6.2.0-2.27' # compiler toolchain dependencies dependencies = [ - ('GCC', gccver), # includes both GCC and binutils - ('OpenMPI', '2.0.1', '', ('GCC', gccver)), + ('GCC', gccver), # includes both GCC and binutils + ('OpenMPI', '2.0.1', '', ('GCC', gccver)), ] moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb b/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb index 1c64db33bd..66d029ece5 100644 --- a/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb +++ b/easybuild/easyconfigs/i/IOR/IOR-3.0.1-foss-2016a-mpiio.eb @@ -13,7 +13,7 @@ homepage = 'https://github.com/chaos/ior' description = """ The IOR software is used for benchmarking parallel file systems using POSIX, MPIIO, or HDF5 interfaces. """ -toolchain = {'name': 'foss', 'version': '2016a' } +toolchain = {'name': 'foss', 'version': '2016a'} source_urls = [('https://github.com/chaos/ior/archive/')] sources = ['%(version)s.tar.gz'] diff --git a/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb b/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb index 82121910a8..14c19568ad 100644 --- a/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb +++ b/easybuild/easyconfigs/i/intelcuda/intelcuda-2016.10.eb @@ -4,7 +4,8 @@ name = 'intelcuda' version = '2016.10' homepage = '(none)' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL, with CUDA toolkit""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, + Intel MPI & Intel MKL, with CUDA toolkit""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb index bbfde4273f..02cc25cfec 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016a-Perl-5.22.1.eb @@ -2,7 +2,7 @@ easyblock = 'PackedBinary' name = 'Kraken' version = '0.10.5-beta' -versionsuffix ='-Perl-%(perlver)s' +versionsuffix = '-Perl-%(perlver)s' homepage = 'http://ccb.jhu.edu/software/kraken/' description = """Kraken is a system for assigning taxonomic labels to short DNA sequences, diff --git a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb index a1be8e5709..af61c387aa 100644 --- a/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/k/Kraken/Kraken-0.10.5-beta-foss-2016b-Perl-5.24.0.eb @@ -2,7 +2,7 @@ easyblock = 'PackedBinary' name = 'Kraken' version = '0.10.5-beta' -versionsuffix ='-Perl-%(perlver)s' +versionsuffix = '-Perl-%(perlver)s' homepage = 'http://ccb.jhu.edu/software/kraken/' description = """Kraken is a system for assigning taxonomic labels to short DNA sequences, diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb index 8733225f52..2ef9de2a2d 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb @@ -22,7 +22,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # runtest = 'check' sanity_check_paths = { - 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index 40280eac70..80e9889a84 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -22,7 +22,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # runtest = 'check' sanity_check_paths = { - 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index ef6bdb3052..bd3cb81b7c 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -22,7 +22,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # runtest = 'check' sanity_check_paths = { - 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb index b63d48a898..9417deb550 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb @@ -22,7 +22,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # runtest = 'check' sanity_check_paths = { - 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb index 67f7a66326..a251dac24c 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb @@ -22,7 +22,7 @@ configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' # runtest = 'check' sanity_check_paths = { - 'files': ['lib/libxc%s.%s' % (x,y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], 'dirs': ['include'], } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb index 93b02acda8..41d6a64d37 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb @@ -54,7 +54,7 @@ dependencies = [ # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --disable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" -configopts += " --disable-driglx-direct --with-gallium-drivers='' --disable-egl""" +configopts += " --disable-driglx-direct --with-gallium-drivers='' --disable-egl" # package-config files for os dependencies are in an os specific place # preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb index 3ebe66dd51..8b03ae9140 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb @@ -50,8 +50,9 @@ dependencies = [ # osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! -configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" -configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " +configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" +configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl" +configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place # preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb index 2631598232..5224023e11 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb @@ -49,8 +49,9 @@ dependencies = [ # osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! -configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" -configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " +configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" +configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl" +configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place # preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb index 244c4f1427..ec21cce29c 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb @@ -49,8 +49,9 @@ dependencies = [ # osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! -configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri --enable-xlib-glx" -configopts += " --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl --with-osmesa-bits=32 --enable-texture-float " +configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" +configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl" +configopts += " --with-osmesa-bits=32 --enable-texture-float " # package-config files for os dependencies are in an os specific place # preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb index fb9d354480..141e1f7cdd 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016a.eb @@ -67,8 +67,8 @@ configopts += '-DWITH_CUDA=OFF ' postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] sanity_check_paths = { - 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + - ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + 'files': ['lib/libopencv_core.%s' % SHLIB_EXT] + + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT] + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb index 52aa30e629..23de8de267 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016a.eb @@ -68,8 +68,8 @@ configopts += '-DWITH_CUDA=OFF ' postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] sanity_check_paths = { - 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + - ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + 'files': ['lib/libopencv_core.%s' % SHLIB_EXT] + + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT] + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb index fc8dc13e40..0b6f2141a7 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-intel-2016b.eb @@ -69,8 +69,8 @@ configopts += '-DWITH_CUDA=OFF ' postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] sanity_check_paths = { - 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + - ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + 'files': ['lib/libopencv_core.%s' % SHLIB_EXT] + + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT] + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb index c76887ac30..261f83dd09 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb @@ -32,16 +32,16 @@ exts_filter = ("perldoc -lm %(ext_name)s ", "") exts_list = [ ('ExtUtils::Depends', '0.405', { - 'source_tmpl': 'ExtUtils-Depends-0.405.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], + 'source_tmpl': 'ExtUtils-Depends-0.405.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], }), ('ExtUtils::PkgConfig', '1.15', { - 'source_tmpl': 'ExtUtils-PkgConfig-1.15.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], + 'source_tmpl': 'ExtUtils-PkgConfig-1.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], }), ('Getopt::Long', '2.48', { - 'source_tmpl': 'Getopt-Long-2.48.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV/'], + 'source_tmpl': 'Getopt-Long-2.48.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV/'], }), ('Pod::Usage', '1.68', { 'source_tmpl': 'Pod-Usage-1.68.tar.gz', diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb index 4dc47a8df2..f2db549906 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb @@ -30,16 +30,16 @@ exts_filter = ("perldoc -lm %(ext_name)s ", "") exts_list = [ ('ExtUtils::Depends', '0.405', { - 'source_tmpl': 'ExtUtils-Depends-0.405.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], + 'source_tmpl': 'ExtUtils-Depends-0.405.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], }), ('ExtUtils::PkgConfig', '1.15', { - 'source_tmpl': 'ExtUtils-PkgConfig-1.15.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], + 'source_tmpl': 'ExtUtils-PkgConfig-1.15.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/X/XA/XAOC/'], }), ('Getopt::Long', '2.48', { - 'source_tmpl': 'Getopt-Long-2.48.tar.gz', - 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV/'], + 'source_tmpl': 'Getopt-Long-2.48.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV/'], }), ('Pod::Usage', '1.68', { 'source_tmpl': 'Pod-Usage-1.68.tar.gz', diff --git a/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb index 249aec45bf..57e1bb653a 100644 --- a/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PSI4/PSI4-1.0-intel-2016a-Python-2.7.11.eb @@ -29,7 +29,7 @@ dependencies = [ builddependencies = [ ('CMake', '3.5.2'), -# ('Perl', '5.22.1', '-bare'), # for the test suite + # ('Perl', '5.22.1', '-bare'), # for the test suite ] configopts = '-DENABLE_MPI=ON -DENABLE_OMP=ON -DENABLE_UNIT_TESTS=ON -DENABLE_CHEMPS2=ON -DENABLE_PLUGINS=ON' diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb index e815cc69b5..ace4711442 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb @@ -3,7 +3,8 @@ version = '2.5.6' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb index 809068de30..b1bdb4f782 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb @@ -3,7 +3,8 @@ version = '2.5.6' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.2.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb index c781bfe8b7..cc84b14111 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb @@ -3,7 +3,8 @@ version = '2.5.6' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb index fd80fddc40..edaa0f4fa5 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb @@ -3,7 +3,8 @@ version = '2.7.10' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb index 6e9aa1f7c4..ac622805c5 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb @@ -3,7 +3,8 @@ version = '2.7.10' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb index d69b594b08..4289f275f3 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb @@ -5,7 +5,8 @@ name = 'Python' version = "2.7.11" homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb index ab13993dcf..f16c276300 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb @@ -5,7 +5,8 @@ name = 'Python' version = "2.7.11" homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2016.03'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb index d205929d06..500c945db9 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4'), # this requires a full X11 stack ('GMP', '6.1.0'), -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb index 4127452393..42a08985d0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -23,11 +23,12 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4'), # this requires a full X11 stack ('GMP', '6.1.0'), - ('OpenSSL', '1.0.2h'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), ] -# osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! # package versions updated May 28th 2015 diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb index 571dd12dc1..01b2892c87 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-GCCcore-4.9.3-bare.eb @@ -3,7 +3,8 @@ version = '2.7.12' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'GCCcore', 'version': '4.9.3'} toolchainopts = {'pic': True} @@ -21,8 +22,9 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '6.0'), ('SQLite', '3.14.1'), - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb index c93dab2804..bb77d83c1d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb index 53cdae92ab..0cda45ec7d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb index 4cd83e24d0..4ef1bfeaeb 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb index 2608210a17..12a347ef6d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.2.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb index 4ffdd56f78..6265b2329d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb index 35bbb97553..a22416f124 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb index d2f51e3f22..d9a96be894 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.5' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb index c0ac0d38b1..48e0894d30 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.5' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb index 513384d5b5..e6e366e13c 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.5' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb index 95ff34f3f9..384ccabeee 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.6' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb index 055543dc24..91008ef87d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.6' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb index 0409f54975..9f687fe594 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2014b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb index 2a90fee410..5f8e6aeeb0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb index d975d85c2d..95e0f82630 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb index dca27371ed..18384a6b3c 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2014.06'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb index a7d56bba16..dc5adffe37 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb index 6b2fccea28..c914576c6c 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.8' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb index 92748077e8..ceb75f485b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} toolchainopts = {'pic': True, 'opt': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb index a0d5fb01e5..c42116cc9a 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} @@ -19,8 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'tk-devel'] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb index f7679002a1..46d5881734 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} toolchainopts = {'pic': True, 'opt': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb index eb90e5f158..e020765a41 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} @@ -19,8 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'tk-devel'] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb index 6f474dc2c1..7040f073ac 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.8.4-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'GCC', 'version': '4.8.4'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb index a2e4addace..bfaa856129 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'GCC', 'version': '4.9.2'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb index 5ca1dda84e..6bb38e7647 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'https://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015.05'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb index e9063410df..a0543f97f8 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb index b636f6b2ef..04c7ab534f 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb index 82282d02d9..47705d9de9 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb index c78274679f..e7e8e929a0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'gompi', 'version': '1.5.16'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb index 987f0852f6..568e58c6d4 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb index 37abf12093..3e3d722c5f 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.5.16'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb index b91c6a4a7d..39c33c3855 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'https://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb index c672a429fd..0a241766ab 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb @@ -3,7 +3,8 @@ version = '2.7.9' versionsuffix = '-bare' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb index 24081c5cf8..bb506a20b0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '2.7.9' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb index fc5033662d..e164d75eb8 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.2.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb index 1fe945390a..7fc679ddfb 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.2.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb index 0dc65b97ca..5b5ea68742 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.3.2' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb index 97e6c04ce7..8ba5022eb1 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.3.2' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb index ba9c2f40b2..948d875463 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.4.1' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb index 910cb21e5c..db1c3e7576 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.4.1' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb index 8f08cf73e4..3ff51e790b 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.4.3' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb index 825c8e6b10..f46cf60244 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.5.0' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index 68a366030d..a4f85640e5 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.5.1' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb index edc992932d..8d085679d5 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.5.1' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb index 395e40515b..8187598200 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb @@ -2,7 +2,8 @@ name = 'Python' version = '3.5.1' homepage = 'http://python.org/' -description = "Python is a programming language that lets you work more quickly and integrate your systems more effectively." +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True, 'opt': True, 'optarch': True} diff --git a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb index 098af10b8c..3e9cb1c1a3 100644 --- a/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/pyGIMLi/pyGIMLi-20160803-foss-2016a-Python-2.7.11.eb @@ -58,7 +58,7 @@ installopts += '&& cp ../easybuild_obj/bin/* %(installdir)s/bin' sanity_check_paths = { 'files': ['bin/%s' % x for x in ['bms2vtk', 'dc1dinv', 'dc1dsmooth', 'fdem1dinv', 'fdem1dsmooth', 'harmfit', 'invlinearmat', 'mrs1dblock', 'mrs1dsmooth', - 'mt1dinv', 'mt1dsmooth', 'polyfit', 'ttinv', 'ttmod']]+ + 'mt1dinv', 'mt1dsmooth', 'polyfit', 'ttinv', 'ttmod']] + ['lib/libgimli.%s' % SHLIB_EXT, 'lib/python%(pyshortver)s/site-packages/pygimli.h'], 'dirs': ['lib/python%(pyshortver)s/site-packages/%(namelower)s'], } diff --git a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb index 09b026a284..f15e4b6ae5 100644 --- a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb +++ b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-5.4.0-foss-2016b-hybrid.eb @@ -21,11 +21,11 @@ sources = [ 'neb-%(version)s.tar.gz', 'PHonon-%(version)s.tar.gz', 'pwcond-%(version)s.tar.gz', - 'xspectra-%(version)s.tar.gz' , - 'PWgui-%(version)s.tar.gz' , - 'EPW-%(version)s.tar.gz' , - 'test-suite-%(version)s.tar.gz' , - 'GWW-%(version)s.tar.gz' , + 'xspectra-%(version)s.tar.gz', + 'PWgui-%(version)s.tar.gz', + 'EPW-%(version)s.tar.gz', + 'test-suite-%(version)s.tar.gz', + 'GWW-%(version)s.tar.gz', ] source_urls = [ 'http://files.qe-forge.org/index.php?file=', # Almost all @@ -55,4 +55,3 @@ buildopts = 'all tddfpt neb xspectra ph ' parallel = 1 moduleclass = 'chem' - -- GitLab From 09eafdcf59c57495cab20f9adf6d8205bc256d6d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 09:52:52 +0100 Subject: [PATCH 0492/1311] fix more minor style issues in Python easyconfigs --- .../p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb | 5 +++-- .../p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb | 5 +++-- .../p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb | 5 +++-- .../p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb | 5 +++-- .../easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb | 7 ++++--- easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb | 7 ++++--- 20 files changed, 62 insertions(+), 42 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb index edaa0f4fa5..492d137f68 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-GCC-4.9.3-2.25-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '6.0', '', ('GCCcore', '4.9.3')), ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb index ac622805c5..02428a8c5e 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-GNU-4.9.3-2.25-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb index c914576c6c..a19c3193df 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb @@ -23,8 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] # order is important! diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb index ceb75f485b..b60dac8832 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06-bare.eb @@ -18,8 +18,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'tk-devel'] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb index 46d5881734..8249b3b9b9 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11-bare.eb @@ -18,8 +18,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'tk-devel'] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb index bfaa856129..4492ecb9d7 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-GCC-4.9.2-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb index 6bb38e7647..0e5c8bdaf5 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb index a0543f97f8..ed68c4c304 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb index 04c7ab534f..50b5d85a22 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb index 47705d9de9..954cb1d6c9 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb index e7e8e929a0..1ef84a7f5f 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-gompi-1.5.16-bare.eb @@ -19,8 +19,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb index 568e58c6d4..2117038315 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb index 3e3d722c5f..de0245d75a 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack -# ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb index 0a241766ab..ca9022ba60 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb index bb506a20b0..dfd615f248 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.8.1'), ('Tk', '8.6.3', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1k'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1k'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb index 3ff51e790b..fa4d5db712 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb @@ -20,8 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb index f46cf60244..7f32b2fbd5 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1p'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1p'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index a4f85640e5..34b680443b 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -24,8 +24,9 @@ dependencies = [ ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), ('XZ', '5.2.2'), -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb index 8d085679d5..f17ad6e258 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb @@ -24,8 +24,9 @@ dependencies = [ ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), ('XZ', '5.2.2'), -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev')] @@ -99,7 +100,7 @@ exts_list = [ }), ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], - }), + }), ('pyparsing', '2.1.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb index 8187598200..bba87219ba 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb @@ -24,8 +24,9 @@ dependencies = [ ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), ('XZ', '5.2.2'), -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev')] @@ -103,7 +104,7 @@ exts_list = [ }), ('paramiko', '1.16.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], - }), + }), ('pyparsing', '2.1.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), -- GitLab From a87550736263fa0a6f625be0b4dae3f18f9c018c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 11:03:18 +0100 Subject: [PATCH 0493/1311] add sanity check command to Yade easyconfig to make sure that 'import yade' works, include bzip2 as dep --- .../y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb index 5f79b0294c..e82ea4a1ae 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2017.01a-intel-2016b-Python-2.7.12.eb @@ -32,6 +32,7 @@ dependencies = [ ('SQLite', '3.13.0'), ('VTK', '7.1.0', versionsuffix), ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), ] builddependencies = [ @@ -58,4 +59,6 @@ sanity_check_paths = { 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } +sanity_check_commands = ["python -c 'import yade'"] + moduleclass = 'devel' -- GitLab From e1923aef1159c638469a084388ff46a67801f6ef Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 11:06:43 +0100 Subject: [PATCH 0494/1311] add sanity check command to Yade easyconfig to make sure that 'import yade' works, include bzip2 as dep --- .../easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb | 3 +++ .../y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb | 3 +++ .../y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 3 +++ .../y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb | 3 +++ 4 files changed, 12 insertions(+) diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb index a6e0dada54..eeebc684bc 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb @@ -34,6 +34,7 @@ dependencies = [ ('SQLite', '3.9.2'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), ] builddependencies = [('CMake', '3.5.2')] @@ -57,4 +58,6 @@ sanity_check_paths = { 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } +sanity_check_commands = ["python -c 'import yade'"] + moduleclass = 'devel' diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb index 4d7005749a..4610fe64fd 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb @@ -34,6 +34,7 @@ dependencies = [ ('SQLite', '3.9.2'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), ] builddependencies = [('CMake', '3.5.2')] @@ -57,4 +58,6 @@ sanity_check_paths = { 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } +sanity_check_commands = ["python -c 'import yade'"] + moduleclass = 'devel' diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index 541a3b67c8..64230623c1 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -34,6 +34,7 @@ dependencies = [ ('SQLite', '3.13.0'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), ] builddependencies = [ @@ -60,4 +61,6 @@ sanity_check_paths = { 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } +sanity_check_commands = ["python -c 'import yade'"] + moduleclass = 'devel' diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb index 1c86ea984c..5623f2e81c 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-intel-2016b-Python-2.7.12.eb @@ -33,6 +33,7 @@ dependencies = [ ('SQLite', '3.13.0'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), ] builddependencies = [ @@ -59,4 +60,6 @@ sanity_check_paths = { 'dirs': [('lib/x86_64-linux-gnu/yade-%(version)s/py/yade', 'lib64/yade-%(version)s/py/yade')], } +sanity_check_commands = ["python -c 'import yade'"] + moduleclass = 'devel' -- GitLab From 00c1bb2312d09860ab51e112128e7193bc8a4c38 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 11:33:55 +0100 Subject: [PATCH 0495/1311] add patch for Boost v1.61-1.63 to fix problem with make_array/array_wrapper in boost serialization library --- .../Boost-1.61.0-intel-2016a-Python-2.7.11.eb | 2 ++ .../b/Boost/Boost-1.61.0-intel-2016a.eb | 2 ++ .../Boost-1.61.0-intel-2016b-Python-2.7.12.eb | 2 ++ .../b/Boost/Boost-1.61.0-intel-2016b.eb | 2 ++ .../b/Boost/Boost-1.61_fix-make_array-icpc.patch | 14 ++++++++++++++ .../Boost-1.62.0-intel-2016b-Python-2.7.12.eb | 2 ++ .../Boost-1.63.0-intel-2016b-Python-2.7.12.eb | 2 ++ 7 files changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.61_fix-make_array-icpc.patch diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a-Python-2.7.11.eb index 822d74b107..0ac767fef8 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a-Python-2.7.11.eb @@ -11,6 +11,8 @@ toolchainopts = {'pic': True, 'usempi': True} source_urls = [SOURCEFORGE_SOURCE] sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a.eb b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a.eb index 7840698ed4..526e2b54e1 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016a.eb @@ -10,6 +10,8 @@ toolchainopts = {'pic': True, 'usempi': True} source_urls = [SOURCEFORGE_SOURCE] sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b-Python-2.7.12.eb index 015aad2716..918d0a5af6 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b-Python-2.7.12.eb @@ -11,6 +11,8 @@ toolchainopts = {'pic': True, 'usempi': True} source_urls = [SOURCEFORGE_SOURCE] sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b.eb b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b.eb index 67f6199614..d76c8ae2bc 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.61.0-intel-2016b.eb @@ -10,6 +10,8 @@ toolchainopts = {'pic': True, 'usempi': True} source_urls = [SOURCEFORGE_SOURCE] sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.61_fix-make_array-icpc.patch b/easybuild/easyconfigs/b/Boost/Boost-1.61_fix-make_array-icpc.patch new file mode 100644 index 0000000000..f7ffa6aa0d --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.61_fix-make_array-icpc.patch @@ -0,0 +1,14 @@ +fix bug with make_array/array_wrapper introduced in Boost v1.61; cfr.: +* https://svn.boost.org/trac/boost/ticket/12516 +* https://github.com/boostorg/serialization/pull/46 (source of this patch) +--- boost_1_63_0/boost/serialization/array.hpp.orig 2017-02-23 10:38:00.487842679 +0100 ++++ boost_1_63_0/boost/serialization/array.hpp 2017-02-23 10:38:13.918969000 +0100 +@@ -44,7 +44,7 @@ + // note: I would like to make the copy constructor private but this breaks + // make_array. So I try to make make_array a friend - but that doesn't + // build. Need a C++ guru to explain this! +- template ++ template + friend const boost::serialization::array_wrapper make_array( T* t, S s); + + array_wrapper(const array_wrapper & rhs) : diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb index 8f21675328..f0e124ea49 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.62.0-intel-2016b-Python-2.7.12.eb @@ -11,6 +11,8 @@ toolchainopts = {'pic': True, 'usempi': True} source_urls = [SOURCEFORGE_SOURCE] sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb index b110a50dba..faed7a8d9c 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2016b-Python-2.7.12.eb @@ -11,6 +11,8 @@ toolchainopts = {'usempi': True, 'pic': True} sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.8'), -- GitLab From 71e87c695ad1339b3080fed65744883cd89a37c7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 11:57:19 +0100 Subject: [PATCH 0496/1311] trim spaces --- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb index 52f0e797fd..56a8573d69 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.0.eb @@ -25,6 +25,6 @@ sanity_check_paths = { # You may find it desirable to put this variable in the module file. # The command to do so has been put here (commented out) as a convenience. -# modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } +# modextravars = {'IMINTASSERDB': '/path/to/databases/I-TASSER/%(version)s'} moduleclass = 'bio' -- GitLab From 5e3d994a87ba141c104fef69e57673d596fd18fb Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 23 Feb 2017 17:19:38 +0100 Subject: [PATCH 0497/1311] Set CMAKE_PREFIX_PATH to ncurses install directory Include ccmake in sanity check --- easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb | 4 ++-- .../easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb | 4 ++-- .../c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2016.03.eb | 4 +++- easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb | 4 ++-- 28 files changed, 57 insertions(+), 55 deletions(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb index 1a599467bd..3b95ac0d58 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCCcore-4.9.3.eb @@ -14,7 +14,7 @@ sources = [SOURCELOWER_TAR_GZ] builddependencies = [('binutils', '2.25')] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -26,7 +26,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb index 87dc8ebec4..81d2e3eac3 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb index df5823de42..7b3c226f7d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016.02-GCC-4.9'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake, 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb index db841bbaef..4e67d84e5a 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb index 0204c038c7..fe4cdb5cff 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.07.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'iomkl', 'version': '2016.07'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb index 36a239c230..5737de5e86 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'iomkl', 'version': '2016.09-GCC-4.9.3-2.25'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb index e6beb92bee..6714702dbc 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb index cfb29da8c6..a7d7d549c8 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb index 31b70f1b8a..de56aab05c 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-intel-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2016.03.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2016.03.eb index f9e868c77a..38d4964aee 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2016.03.eb @@ -13,10 +13,12 @@ toolchain = {'name': 'CrayGNU', 'version': '2016.03'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] +configopts = '-- -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + dependencies = [('ncurses', '6.0')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb index a70441375c..fe0671660a 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.1-intel-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb index 619aaa3ab8..1477d6c586 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-GCC-4.9.3-2.25.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0', '', ('GCCcore', '4.9.3')), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb index 9075c094fb..3c398a1b9c 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb index 42e9b3b3bd..d9e89130f0 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb index 6d07f31ebd..be6f338d1f 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb index b68274e5b4..24f53c01f5 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-intel-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb index 97b2282312..d495dc07af 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCC-5.4.0-2.26.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb index d5ca429e05..26041d2bbc 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-GCCcore-4.9.3.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCCcore', 'version': '4.9.3'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' builddependencies = [ ('binutils', '2.25'), @@ -28,7 +28,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb index c1386c78f8..520b0309fd 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb index 40d915d152..fff0b921eb 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1-intel-2016b.eb @@ -14,7 +14,7 @@ sources = [SOURCELOWER_TAR_GZ] patches = ['%(name)s-%(version)s-use-gnu11.patch'] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -26,7 +26,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb index aa63de70da..1933c5b5eb 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-5.4.0.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' builddependencies = [ ('binutils', '2.26'), @@ -29,7 +29,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb index adb0724437..4bce1497a6 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb index b6e496837c..48141f4592 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-intel-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb index 5b3221d0bf..f932156e58 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-5.4.0.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' builddependencies = [ ('binutils', '2.26'), @@ -29,7 +29,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb index b364332ea0..6c1810956d 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-GCCcore-6.2.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'GCCcore', 'version': '6.2.0'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' builddependencies = [ ('binutils', '2.27'), @@ -28,7 +28,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb index e459f784ef..db38350c22 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-foss-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb index 0464c9024d..7b760d0e31 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.1-intel-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb index 2c33988a54..1dc781b04a 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2016b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '6.0'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } -- GitLab From 1f87bce8231854d3f77defafd5c9b76e51af0cc6 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Thu, 23 Feb 2017 16:32:27 +0000 Subject: [PATCH 0498/1311] Added an easyconfig with PETSc 3.7.5 and download options rather than relying on existing modules. --- .../PETSc/PETSc-3.7.5-intel-2016a-download.eb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb new file mode 100644 index 0000000000..a59522d52f --- /dev/null +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb @@ -0,0 +1,41 @@ +name = 'PETSc' +version = '3.7.5' + +homepage = 'http://www.mcs.anl.gov/petsc' +description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the + scalable (parallel) solution of scientific applications modeled by partial differential equations.""" + +toolchain = {'name': 'intel', 'version': '2016a'} +toolchainopts = {'usempi': True, 'pic': True} + +source_urls = ['http://ftp.mcs.anl.gov/pub/petsc/release-snapshots'] +sources = [SOURCELOWER_TAR_GZ] + +shared_libs = 1 +pic = 1 + +downloadinstall = True + +dependencies = [('HDF5','1.8.18')] + +configopts = "" +# compiles PETSc shared +configopts += "--with-mkl_pardiso=1 --with-mkl_pardiso-dir=$MKLROOT " +configopts += "--with-hdf5=1 --with-hdf5-dir=$EBROOTHDF5" + +# external packages that are downloaded +external_packages = ['mumps', 'ptscotch', 'superlu', 'superlu_dist', 'parmetis', 'metis', 'ml', 'suitesparse', 'hypre', 'prometheus'] +# compiles the external dependencies non-shared +external_packages_shared = "no" +for p in external_packages: + configopts += "--download-%s=yes --download-%s-shared=%s " % (p,p,external_packages_shared) +configopts += "--download-triangle=yes" # download-triangle-shared is not supported + +builddependencies = [('CMake', '3.5.2')] + +moduleclass = 'numlib' + +modluafooter = """ +family("petsc") +""" + -- GitLab From 1eef7612f698db9570682e01fa845c88a92ec513 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Thu, 23 Feb 2017 19:04:49 +0100 Subject: [PATCH 0499/1311] Fix typo --- .../easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb index 7b3c226f7d..85d36d3bbd 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2016.02-GCC-4.9.eb @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['ccmake, 'cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } -- GitLab From 154ccb596730abc6c47f479ce150f1721e6d4dfb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Feb 2017 20:37:54 +0100 Subject: [PATCH 0500/1311] remove duplicate bzip2 in Yade easyconfig --- .../easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb index 64230623c1..bfb9412cfc 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-2016.06a-foss-2016b-Python-2.7.12.eb @@ -18,7 +18,6 @@ patches = ['Yade-%(version)s_include-signal.patch'] dependencies = [ ('Boost', '1.61.0', versionsuffix), - ('bzip2', '1.0.6'), ('CGAL', '4.8.1', versionsuffix), ('GDB', '7.11.1', versionsuffix), ('GL2PS', '1.3.9'), -- GitLab From 533f365f73661c4fcf0f53d56118556f94b316e3 Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Fri, 24 Feb 2017 04:32:04 +0100 Subject: [PATCH 0501/1311] Switch to lowopt=True for libxc-2.2.* with intel compilers I've noticed that some functionals in LibXC give significantly different results with too much compiler optimization. For example, the energy of a water molecule computed with the TPSS functional changes by 6.5 kJ/mol with lowopt=False. (The problem is in the TPSS correlation functional, somewhere in mgga_c_pkzb.c. I've ruled out numerical integration issues. Similar relative errors appear on every grid point of the tpss_c energy density.) I can only test with libx-2.2.* and intel compilers at the moment. I'll make similar changes for other versions and compilers when the opportunity arises. --- easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb | 1 + 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb index 2ce787f05e..0617eecddd 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2014b'} -toolchainopts = {'opt': True} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb index 80de4c9f97..954c4b2503 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} -toolchainopts = {'opt': True} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb index 42d53d0949..c266e8d3fa 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} -toolchainopts = {'opt': True} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb index 2d6dda37b8..9d234313e3 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015b'} -toolchainopts = {'opt': True} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index 80e9889a84..e4360c8222 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016a'} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index bd3cb81b7c..c15059fd00 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] -- GitLab From 0d488e49be4e453e794e5c4636dc9739f884b874 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Feb 2017 09:26:59 +0100 Subject: [PATCH 0502/1311] remove custom sanity_check_paths, since it's identical to that used by the R easyblock --- .../easyconfigs/r/R/R-2.15.2-goolf-1.4.10-bare.eb | 10 ---------- easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10.eb | 10 ---------- easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0-bare.eb | 10 ---------- easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0.eb | 10 ---------- easybuild/easyconfigs/r/R/R-2.15.3-goolf-1.4.10.eb | 10 ---------- easybuild/easyconfigs/r/R/R-2.15.3-ictce-5.3.0.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.1-goolf-1.4.10-bare.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.1-ictce-5.3.0-bare.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.2-goolf-1.4.10.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0-bare.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0.eb | 10 ---------- easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.5.0.eb | 10 ---------- .../easyconfigs/r/R/R-3.1.1-ictce-6.2.5-bare-mt.eb | 10 ---------- .../easyconfigs/r/R/R-3.1.1-ictce-6.2.5-default-mt.eb | 10 ---------- 14 files changed, 140 deletions(-) diff --git a/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10-bare.eb b/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10-bare.eb index b12bc8e75d..fddd66f795 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10-bare.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10-bare.eb @@ -24,14 +24,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'math' diff --git a/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10.eb b/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10.eb index 561a883aa5..41c4f5301f 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.2-goolf-1.4.10.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_10', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0-bare.eb b/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0-bare.eb index d58882331f..69f1781b69 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0-bare.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0-bare.eb @@ -24,14 +24,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'math' diff --git a/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0.eb b/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0.eb index 8ba729ce15..69437c1b5a 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.2-ictce-5.3.0.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_10', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-2.15.3-goolf-1.4.10.eb b/easybuild/easyconfigs/r/R/R-2.15.3-goolf-1.4.10.eb index e96756b81d..99f0a85afd 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.3-goolf-1.4.10.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_15', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-2.15.3-ictce-5.3.0.eb b/easybuild/easyconfigs/r/R/R-2.15.3-ictce-5.3.0.eb index 86f63c2452..b6f9488dc0 100644 --- a/easybuild/easyconfigs/r/R/R-2.15.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/r/R/R-2.15.3-ictce-5.3.0.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_15', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-3.0.1-goolf-1.4.10-bare.eb b/easybuild/easyconfigs/r/R/R-3.0.1-goolf-1.4.10-bare.eb index a7f037b0a7..6da04393a8 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.1-goolf-1.4.10-bare.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.1-goolf-1.4.10-bare.eb @@ -24,14 +24,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.0.1-ictce-5.3.0-bare.eb b/easybuild/easyconfigs/r/R/R-3.0.1-ictce-5.3.0-bare.eb index c79a8bd4e8..25ba222aa6 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.1-ictce-5.3.0-bare.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.1-ictce-5.3.0-bare.eb @@ -24,14 +24,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.0.2-goolf-1.4.10.eb b/easybuild/easyconfigs/r/R/R-3.0.2-goolf-1.4.10.eb index 3c069b9b81..8abe6d999a 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.2-goolf-1.4.10.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_21', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0-bare.eb b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0-bare.eb index 8d427ebb5d..d3eaca313f 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0-bare.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0-bare.eb @@ -23,14 +23,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0.eb b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0.eb index b2aa058997..f34e0f18e6 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.3.0.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_15', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.5.0.eb b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.5.0.eb index ee87a80c86..1572f6e35f 100644 --- a/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/R/R-3.0.2-ictce-5.5.0.eb @@ -21,16 +21,6 @@ dependencies = [ ('Java', '1.7.0_15', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - name_tmpl = '%(name)s_%(version)s.tar.gz' ext_options = { 'source_urls': [ diff --git a/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-bare-mt.eb b/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-bare-mt.eb index 31222cc1f7..b0d2830c75 100644 --- a/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-bare-mt.eb +++ b/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-bare-mt.eb @@ -26,14 +26,4 @@ dependencies = [ exts_list = [] # just to make it explicit this module doesn't include any extensions -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-default-mt.eb b/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-default-mt.eb index 866b40ba81..a2eabbbdcd 100644 --- a/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-default-mt.eb +++ b/easybuild/easyconfigs/r/R/R-3.1.1-ictce-6.2.5-default-mt.eb @@ -23,16 +23,6 @@ dependencies = [ ('Java', '1.7.0_60', '', True), # Java bindings are built if Java is found, might as well provide it ] -sanity_check_paths = { - 'files': ['bin/%s' % x for x in ['R', 'Rscript']] + - ['lib64/R/include/%s' % x for x in ['Rconfig.h', 'Rdefines.h', 'Rembedded.h', - 'R.h', 'Rinterface.h', 'Rinternals.h', - 'Rmath.h', 'Rversion.h', 'S.h']] + - ['lib64/R/modules/%s' % x for x in ['internet.%s' % SHLIB_EXT, 'lapack.%s' % SHLIB_EXT, 'vfonts.%s' % SHLIB_EXT]] + - ['lib64/R/lib/libR.%s' % SHLIB_EXT], - 'dirs': [] -} - exts_list = [ # default libraries, only here to sanity check their presence 'base', -- GitLab From 4f3fba3ae7d8c413468784e10b38767e18553240 Mon Sep 17 00:00:00 2001 From: Markus Geimer Date: Fri, 24 Feb 2017 11:40:55 +0100 Subject: [PATCH 0503/1311] Apply CMAKE_PREFIX_PATH/ncurses and ccmake tweak to CMake 3.4.0 and up --- easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCC-4.9.2.eb | 4 +++- easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015a.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2015.11.eb | 4 +++- easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb | 4 ++-- easybuild/easyconfigs/c/CMake/CMake-3.5.2.eb | 4 +++- 11 files changed, 25 insertions(+), 19 deletions(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb index 21bbc29383..53143ba0a0 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.0-intel-2015b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2015b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCC-4.9.2.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCC-4.9.2.eb index cb117db322..8b223712cc 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-GCC-4.9.2.eb @@ -12,10 +12,12 @@ toolchain = {'name': 'GCC', 'version': '4.9.2'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] +configopts = '-- -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + dependencies = [('ncurses', '5.9')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015a.eb index 4f9c1dcfa2..f268f237cd 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015a.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015a.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2015a'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -21,7 +21,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb index 5702e9976d..0faaa6fe56 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-foss-2015b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'foss', 'version': '2015b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb index 638514df1f..1b0e29c51f 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.1-intel-2015b.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'intel', 'version': '2015b'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb index f5527c16d6..db51b497b9 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-gimkl-2.11.5.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'gimkl', 'version': '2.11.5'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb index 383be7ac07..4095a8cf13 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-goolf-1.7.20.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb index 7deb175b91..9ae7cc86bf 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.4.3-ictce-7.3.5.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'ictce', 'version': '7.3.5'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2015.11.eb index c7cd4a579a..9ffba8c3eb 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.0-CrayGNU-2015.11.eb @@ -13,10 +13,12 @@ toolchain = {'name': 'CrayGNU', 'version': '2015.11'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] +configopts = '-- -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + dependencies = [('ncurses', '5.9')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb index 1f3daa3224..535e3995e0 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2-goolf-1.7.20.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' dependencies = [ ('ncurses', '5.9'), @@ -24,7 +24,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.5.2.eb b/easybuild/easyconfigs/c/CMake/CMake-3.5.2.eb index 412e055df6..701830e871 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.5.2.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.5.2.eb @@ -12,10 +12,12 @@ toolchain = {'name': 'dummy', 'version': ''} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] +configopts = '-- -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + dependencies = [('ncurses', '6.0')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } -- GitLab From 05485fb12247fce13d584bb7c41aaa7ff8e325ba Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Fri, 24 Feb 2017 14:34:17 +0100 Subject: [PATCH 0504/1311] Add comment to EBs to explain low optimization settings --- easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb | 1 + easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb | 1 + 6 files changed, 6 insertions(+) diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb index 0617eecddd..f971a65f6f 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2014b'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb index 954c4b2503..6cdc9b59df 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb index c266e8d3fa..c926977f8e 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb index 9d234313e3..9eb91c2953 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015b'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index e4360c8222..203ac28517 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016a'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index c15059fd00..f83e57a0da 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -8,6 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016b'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. toolchainopts = {'opt': False, 'lowopt': True} sources = [SOURCE_TAR_GZ] -- GitLab From 99c191768ac31d851c3a2d75d68c3bad9366d2d7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Feb 2017 17:58:17 +0100 Subject: [PATCH 0505/1311] adding easyconfigs: MEGA-7.0.20-1.eb --- easybuild/easyconfigs/m/MEGA/MEGA-7.0.20-1.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/m/MEGA/MEGA-7.0.20-1.eb diff --git a/easybuild/easyconfigs/m/MEGA/MEGA-7.0.20-1.eb b/easybuild/easyconfigs/m/MEGA/MEGA-7.0.20-1.eb new file mode 100644 index 0000000000..4513c7f7b6 --- /dev/null +++ b/easybuild/easyconfigs/m/MEGA/MEGA-7.0.20-1.eb @@ -0,0 +1,24 @@ +easyblock = 'Tarball' + +name = 'MEGA' +version = '7.0.20-1' + +homepage = 'http://www.megasoftware.net/' +description = """MEGA-CC (Molecular Evolutionary Genetics Analysis Computational Core) is an integrated suite of tools + for statistics-based comparative analysis of molecular sequence data based on evolutionary principles.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download requires agreeing with license & filling out a form, see http://www.megasoftware.net/ +sources = ['megacc-%(version)s.x86_64.tar.gz'] + +modextrapaths = { + 'PATH': '', +} + +sanity_check_paths = { + 'files': ['megacc', 'megaproto'], + 'dirs': ['Examples'], +} + +moduleclass = 'bio' -- GitLab From 9161535b5ebb7766dbb2be4122a1790bd8c64c03 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Feb 2017 18:57:57 +0100 Subject: [PATCH 0506/1311] adding easyconfigs: PyTables-3.2.3.1-intel-2016b-Python-2.7.12.eb --- ...ables-3.2.3.1-intel-2016b-Python-2.7.12.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyTables/PyTables-3.2.3.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PyTables/PyTables-3.2.3.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.3.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..904febe2a2 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTables/PyTables-3.2.3.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,39 @@ +easyblock = 'PythonPackage' + +name = 'PyTables' +version = '3.2.3.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.pytables.org' +description = """PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope + with extremely large amounts of data. PyTables is built on top of the HDF5 library, using the Python language and the + NumPy package. It features an object-oriented interface that, combined with C extensions for the performance-critical + parts of the code (generated using Cython), makes it a fast, yet extremely easy to use tool for interactively browse, + process and search very large amounts of data. One important feature of PyTables is that it optimizes memory and disk + resources so that data takes much less space (specially if on-flight compression is used) than other solutions such as + relational or object oriented databases.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/PyTables/PyTables/archive/'] +sources = ['v.%(version)s.tar.gz'] + +patches = ['pyTables-3.2.2-fix-libs.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('numexpr', '2.6.1', versionsuffix), + ('HDF5', '1.8.17'), + ('LZO', '2.09'), + ('Blosc', '1.11.1'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['pt2to3', 'ptdump', 'ptrepack']], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'tables'} + +moduleclass = 'data' -- GitLab From 7e533b72c6d1af1130a16882b38e62ba2bc71ace Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Feb 2017 19:47:32 +0100 Subject: [PATCH 0507/1311] adding easyconfigs: ea-utils-1.04.807-intel-2016b.eb --- .../ea-utils/ea-utils-1.04.807-intel-2016b.eb | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb new file mode 100644 index 0000000000..79eae70f31 --- /dev/null +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb @@ -0,0 +1,46 @@ +easyblock = 'MakeCp' + +name = 'ea-utils' +version = '1.04.807' + +homepage = 'http://expressionanalysis.github.io/ea-utils/' +description = """Command-line tools for processing biological sequencing data. +Barcode demultiplexing, adapter trimming, etc. + +Primarily written to support an Illumina based pipeline - +but should work with any FASTQs.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/ExpressionAnalysis/ea-utils/archive/'] +sources = ['%(version)s.tar.gz'] + +checksums = ['5972b9f712920603b7527f46c0063a09'] + +start_dir = 'clipper' + +prebuildopts = "sed -i 's/$(CFLAGS)/$(CFLAGS) $(LDFLAGS) -I./' Makefile && PREFIX=%(installdir)s " +buildopts = 'fastq-mcf fastq-multx fastq-join fastq-stats fastq-clipper sam-stats varcall' + +builddependencies = [ + ('Perl', '5.24.0'), +] + +dependencies = [ + ('GSL', '2.3'), +] + +files_to_copy = [([ + 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', + 'sam-stats', 'varcall', 'randomFQ', 'alc', 'determine-phred'], 'bin' +)] + + +sanity_check_paths = { + 'files': ['bin/fastq-mcf', 'bin/fastq-multx', 'bin/fastq-join', 'bin/fastq-stats', + 'bin/fastq-clipper', 'bin/sam-stats', 'bin/varcall'], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 71a4609f70236b90dea63d66161409d7b2dd314d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Feb 2017 08:47:58 +0100 Subject: [PATCH 0508/1311] fix version (& homepage) in ea-utils easyconfigs --- ...16a.eb => ea-utils-1.04.807-foss-2016a.eb} | 20 +++++++++---------- ...16b.eb => ea-utils-1.04.807-foss-2016b.eb} | 18 ++++++++--------- 2 files changed, 17 insertions(+), 21 deletions(-) rename easybuild/easyconfigs/e/ea-utils/{ea-utils-27a4809-foss-2016a.eb => ea-utils-1.04.807-foss-2016a.eb} (64%) rename easybuild/easyconfigs/e/ea-utils/{ea-utils-27a4809-foss-2016b.eb => ea-utils-1.04.807-foss-2016b.eb} (66%) diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016a.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb similarity index 64% rename from easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016a.eb rename to easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb index 7cf3821ef3..498218ede9 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016a.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb @@ -1,9 +1,9 @@ easyblock = 'MakeCp' name = 'ea-utils' -version = '27a4809' +version = '1.04.807' -homepage = 'https://code.google.com/p/ea-utils/' +homepage = 'http://expressionanalysis.github.io/ea-utils/' description = """Command-line tools for processing biological sequencing data. Barcode demultiplexing, adapter trimming, etc. @@ -11,12 +11,12 @@ Primarily written to support an Illumina based pipeline - but should work with any FASTQs.""" toolchain = {'name': 'foss', 'version': '2016a'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} -source_urls = ['https://github.com/ExpressionAnalysis/%(name)s/tarball/master'] -sources = [SOURCE_TGZ] +source_urls = ['https://github.com/ExpressionAnalysis/ea-utils/archive/'] +sources = ['%(version)s.tar.gz'] -checksums = ['45eef4b040f83abe2c9f51d4a7d18271'] +checksums = ['5972b9f712920603b7527f46c0063a09'] start_dir = 'clipper' @@ -38,11 +38,9 @@ files_to_copy = [([ sanity_check_paths = { - 'files': [ - 'bin/fastq-mcf', 'bin/fastq-multx', 'bin/fastq-join', 'bin/fastq-stats', - 'bin/fastq-clipper', 'bin/sam-stats', 'bin/varcall' - ], + 'files': ['bin/fastq-mcf', 'bin/fastq-multx', 'bin/fastq-join', 'bin/fastq-stats', + 'bin/fastq-clipper', 'bin/sam-stats', 'bin/varcall'], 'dirs': [] } -moduleclass = 'bio' \ No newline at end of file +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016b.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb similarity index 66% rename from easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016b.eb rename to easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb index e8447b7c64..5bd575648e 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-27a4809-foss-2016b.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb @@ -1,9 +1,9 @@ easyblock = 'MakeCp' name = 'ea-utils' -version = '27a4809' +version = '1.04.807' -homepage = 'https://code.google.com/p/ea-utils/' +homepage = 'http://expressionanalysis.github.io/ea-utils/' description = """Command-line tools for processing biological sequencing data. Barcode demultiplexing, adapter trimming, etc. @@ -11,12 +11,12 @@ Primarily written to support an Illumina based pipeline - but should work with any FASTQs.""" toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} -source_urls = ['https://github.com/ExpressionAnalysis/%(name)s/tarball/master'] -sources = [SOURCE_TGZ] +source_urls = ['https://github.com/ExpressionAnalysis/ea-utils/archive/'] +sources = ['%(version)s.tar.gz'] -checksums = ['45eef4b040f83abe2c9f51d4a7d18271'] +checksums = ['5972b9f712920603b7527f46c0063a09'] start_dir = 'clipper' @@ -38,10 +38,8 @@ files_to_copy = [([ sanity_check_paths = { - 'files': [ - 'bin/fastq-mcf', 'bin/fastq-multx', 'bin/fastq-join', 'bin/fastq-stats', - 'bin/fastq-clipper', 'bin/sam-stats', 'bin/varcall' - ], + 'files': ['bin/fastq-mcf', 'bin/fastq-multx', 'bin/fastq-join', 'bin/fastq-stats', + 'bin/fastq-clipper', 'bin/sam-stats', 'bin/varcall'], 'dirs': [] } -- GitLab From a9f5681fae6e765adb1851e8b1414e6d5f8aecf0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Feb 2017 09:05:26 +0100 Subject: [PATCH 0509/1311] avoid escape double quotes to make tests happy --- .../o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb index 8cdb56fbdb..3f9e8e96b8 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb @@ -27,10 +27,10 @@ start_dir = 'ORTHOMCLV%(version)s' # fix hardcoded paths postinstallcmds = [ 'sed -i"" "s@/usr/bin/perl@$EBROOTPERL/bin/perl@g" %(installdir)s/orthomcl.pl', - 'sed -i"" "s@\\"/.*blastall\\";@\\"$EBROOTBLAST/bin/blastall\\";@g" %(installdir)s/orthomcl_module.pm', - 'sed -i"" "s@\\"/.*formatdb\\";@\\"$EBROOTBLAST/bin/formatdb\\";@g" %(installdir)s/orthomcl_module.pm', - 'sed -i"" "s@\\"/.*mcl\\";@\\"$EBROOTMCL/bin/mcl\\";@g" %(installdir)s/orthomcl_module.pm', - 'sed -i"" "s@\\"/.*ORTHOMCL.*%(version)s/\\";@\\"\\$ENV{\'PWD\'}/\\";@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@/.*blastall@$EBROOTBLAST/bin/blastall@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@/.*formatdb@$EBROOTBLAST/bin/formatdb@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@/.*\(mcl.;\)@$EBROOTMCL/bin/\\1@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@/.*ORTHOMCL.*%(version)s/@\\$ENV{\'PWD\'}/@g" %(installdir)s/orthomcl_module.pm', ] modextrapaths = { -- GitLab From e040c832a322df495cd07b6ead1e677372f96d66 Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Sat, 25 Feb 2017 12:53:16 +0100 Subject: [PATCH 0510/1311] Remove redundant toolchainopts (libxc) --- easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb index f971a65f6f..8c8a06232c 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2014b'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb index 6cdc9b59df..386fc2d5ba 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2015a'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb index c926977f8e..eef2248b2a 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2015a'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb index 9eb91c2953..658c339764 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2015b'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index 203ac28517..4cb658a639 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2016a'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index f83e57a0da..41bfb6c123 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -9,7 +9,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens toolchain = {'name': 'intel', 'version': '2016b'} # Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. -toolchainopts = {'opt': False, 'lowopt': True} +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] -- GitLab From 3be2942c3f45d3c59b3a320d691b89724f22021d Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Sat, 25 Feb 2017 12:53:43 +0100 Subject: [PATCH 0511/1311] Also use lowopt=True for libxc-3.0.0 --- easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb | 2 ++ easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb index 9417deb550..e89a3a0020 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb @@ -8,6 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016a'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb index a251dac24c..812bf5438b 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb @@ -8,6 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016b'} +# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] -- GitLab From 9588d0ae3e84fedafce93186a6970e13bacfec07 Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Sat, 25 Feb 2017 13:52:20 +0100 Subject: [PATCH 0512/1311] Apply lowopt=True to all libxc versions + fix typo in comment Consistency across all eb files reduces the risk that this problem gets reintroduced. --- easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb | 3 ++- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb | 2 ++ easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb | 2 +- 20 files changed, 32 insertions(+), 19 deletions(-) diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb index aaf083cf04..547b2c04e0 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-goolf-1.4.10.eb @@ -11,7 +11,8 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] toolchain = {'name': 'goolf', 'version': '1.4.10'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb index 0d7ebaf5fb..ba87bd535c 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.3.0.eb @@ -11,7 +11,8 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] toolchain = {'name': 'ictce', 'version': '5.3.0'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb index 635c9b4d96..e944b72c18 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-ictce-5.5.0.eb @@ -8,7 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb index dc228fe31b..b9e8982671 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.1-intel-2014b.eb @@ -8,7 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2014b'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb index f440f02af5..8bd05d53ad 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-goolf-1.4.10.eb @@ -11,7 +11,8 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] toolchain = {'name': 'goolf', 'version': '1.4.10'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="/lib/cpp -ansi" --enable-shared' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb index df5b0a2ac4..22e411e0a3 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.2-ictce-5.3.0.eb @@ -11,7 +11,8 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] toolchain = {'name': 'ictce', 'version': '5.3.0'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb index 674453ff55..51c0a0a535 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.0.3-goolf-1.4.10.eb @@ -11,7 +11,8 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] toolchain = {'name': 'goolf', 'version': '1.4.10'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} configopts = 'FC="$F77" FCFLAGS="$FFLAGS" FCCPP="/lib/cpp -ansi" --enable-shared' diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb index 8c8a06232c..45bb52f70b 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.0-intel-2014b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2014b'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb index d3176a0e56..39dc38965a 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.06.eb @@ -8,7 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb index f3870dc3fb..3ce46b5609 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-CrayGNU-2015.11.eb @@ -8,7 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb index 386fc2d5ba..3958efb9f5 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.1-intel-2015a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb index 7a2ba48de6..3d0a5a1ed8 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-CrayGNU-2015.11.eb @@ -9,7 +9,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb index 8e7a6d0b88..5df850f999 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-foss-2015b.eb @@ -8,7 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'foss', 'version': '2015b'} -toolchainopts = {'opt': True} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb index eef2248b2a..a3e00b811a 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015a'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb index 658c339764..3dc273ca2e 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.2-intel-2015b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2015b'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb index 2ef9de2a2d..37456a8225 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-foss-2016b.eb @@ -8,6 +8,8 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'foss', 'version': '2016b'} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb index 4cb658a639..56fa742d7d 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016a'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb index 41bfb6c123..0fb5faa09c 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-2.2.3-intel-2016b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016b'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb index e89a3a0020..e96102336e 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016a.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016a'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb index 812bf5438b..df3c9b9484 100644 --- a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-intel-2016b.eb @@ -8,7 +8,7 @@ description = """Libxc is a library of exchange-correlation functionals for dens The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" toolchain = {'name': 'intel', 'version': '2016b'} -# Results for some functions (e.g. mgga_c_tpss) change with too aggressive optimization settings. +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. toolchainopts = {'lowopt': True} sources = [SOURCE_TAR_GZ] -- GitLab From f73bd7e2decc3596222e59328b8e7738384ab2eb Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 27 Feb 2017 16:00:51 +0100 Subject: [PATCH 0513/1311] ppicv->ippicv --- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb index 7d801b065b..0292e9d416 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb @@ -41,7 +41,7 @@ dependencies = [ ] #The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake -ppicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' +ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) configopts = '-DCMAKE_BUILD_TYPE=RELEASE ' -- GitLab From 5ff58b2b990847489c0d7a8d41b7ff2d22680053 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Feb 2017 20:34:03 +0100 Subject: [PATCH 0514/1311] add patch required to make building ea-utils with Intel compilers work --- .../ea-utils/ea-utils-1.04.807-intel-2016b.eb | 4 ++- .../ea-utils-1.04.807_include-unistd.patch | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807_include-unistd.patch diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb index 79eae70f31..a1c32a3e34 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb @@ -18,10 +18,12 @@ sources = ['%(version)s.tar.gz'] checksums = ['5972b9f712920603b7527f46c0063a09'] +patches = ['ea-utils-%(version)s_include-unistd.patch'] + start_dir = 'clipper' prebuildopts = "sed -i 's/$(CFLAGS)/$(CFLAGS) $(LDFLAGS) -I./' Makefile && PREFIX=%(installdir)s " -buildopts = 'fastq-mcf fastq-multx fastq-join fastq-stats fastq-clipper sam-stats varcall' +buildopts = 'CC="$CC" fastq-mcf fastq-multx fastq-join fastq-stats fastq-clipper sam-stats varcall' builddependencies = [ ('Perl', '5.24.0'), diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807_include-unistd.patch b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807_include-unistd.patch new file mode 100644 index 0000000000..3fb5b110e0 --- /dev/null +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807_include-unistd.patch @@ -0,0 +1,35 @@ +fix for 'identifier "unlink" is undefined' and other similar errors + +author: Kenneth Hoste (HPC-UGent) +--- clipper/sparsehash-2.0.2/src/sparsetable_unittest.cc.orig 2017-02-27 19:11:30.059750601 +0100 ++++ clipper/sparsehash-2.0.2/src/sparsetable_unittest.cc 2017-02-27 19:13:28.438628098 +0100 +@@ -32,7 +32,7 @@ + // Since sparsetable is templatized, it's important that we test every + // function in every class in this file -- not just to see if it + // works, but even if it compiles. +- ++#include + #include + #include + #include +--- clipper/sparsehash-2.0.2/src/hashtable_test.cc.orig 2017-02-27 19:49:55.087723317 +0100 ++++ clipper/sparsehash-2.0.2/src/hashtable_test.cc 2017-02-27 19:50:14.027542195 +0100 +@@ -43,7 +43,7 @@ + // Note that since all these classes are templatized, it's important + // to call every public method on the class: not just to make sure + // they work, but to make sure they even compile. +- ++#include + #include + #include + #include +--- clipper/sparsehash-2.0.2/src/time_hash_map.cc.orig 2017-02-27 20:00:27.821672176 +0100 ++++ clipper/sparsehash-2.0.2/src/time_hash_map.cc 2017-02-27 20:00:57.411387012 +0100 +@@ -54,6 +54,7 @@ + // + // See PERFORMANCE for the output of one example run. + ++#include + #include + #include + #ifdef HAVE_INTTYPES_H -- GitLab From 6ac0bc393ce7afcbd1ea2270c0b8c105f885696f Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 28 Feb 2017 12:37:06 +0100 Subject: [PATCH 0515/1311] adding easyconfigs: cuDNN-5.1-CUDA-8.0.44.eb --- easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb b/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb index 0cbdeea8a4..08976a1f68 100644 --- a/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb +++ b/easybuild/easyconfigs/c/cuDNN/cuDNN-5.1-CUDA-8.0.44.eb @@ -24,7 +24,7 @@ sources = ['%(namelower)s-8.0-linux-x64-v%(version)s.tgz'] dependencies = [('CUDA', cuda_version)] checksums = [ - '099ca6a9b21b35e32f3408eff2a1c06d', # cudnn-8.0-linux-x64-v5.1.tgz + '406f4ac7f7ee8aa9e41304c143461a69', # cudnn-8.0-linux-x64-v5.1.tgz, Jan 20 2017 download ] sanity_check_paths = { -- GitLab From 1afbb4489053f466b98d4b4e1e424c14c37eb946 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 13:28:29 +0100 Subject: [PATCH 0516/1311] adding easyconfigs: OOMPA-3.1.2-intel-2016b-R-3.3.1.eb --- .../OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb diff --git a/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb new file mode 100644 index 0000000000..1f054c18b4 --- /dev/null +++ b/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'OOMPA' +version = '3.1.2' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://r-forge.r-project.org/projects/oompa' +description = """OOMPA is a suite of R packages for the analysis of gene expression (RNA), proteomics profiling, + and other high throughput molecular biology data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +dependencies = [ + ('R', '3.3.1'), + ('R-bundle-Bioconductor', '3.3', versionsuffix), +] + +ext_options = { + 'source_urls': ['http://download.r-forge.r-project.org/src/contrib/'], + 'source_tmpl': '%(name)s_%(version)s.tar.gz', +} + +exts_defaultclass = 'RPackage' +exts_filter = ("R -q --no-save", "library(%(ext_name)s)") + +# !! order of packages is important !! +exts_list = [ + ('oompaBase', '3.1.3', ext_options), + ('oompaData', '3.1.0', ext_options), + ('ClassComparison', '3.1.3', ext_options), + ('ClassDiscovery', '3.3.3', ext_options), + ('Polychrome', '0.8.1', ext_options), + ('PreProcess', '3.1.2', ext_options), + ('TailRank', '3.1.2', ext_options), +] + +modextrapaths = {'R_LIBS': ''} + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'lib' -- GitLab From dc8c67ec4f25cbd7821767e0f8392935824a5e4b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 13:38:48 +0100 Subject: [PATCH 0517/1311] fix sanity_check_paths for OOMPA bundle --- .../easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb index 1f054c18b4..ddc58b8eb3 100644 --- a/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb +++ b/easybuild/easyconfigs/o/OOMPA/OOMPA-3.1.2-intel-2016b-R-3.3.1.eb @@ -38,7 +38,7 @@ modextrapaths = {'R_LIBS': ''} sanity_check_paths = { 'files': [], - 'dirs': [name], + 'dirs': ['ClassComparison', 'ClassDiscovery', 'oompaBase', 'oompaData', 'Polychrome', 'PreProcess', 'TailRank'], } moduleclass = 'lib' -- GitLab From 66f753fe7a49f041fb043f7a10a5ca9c601c119d Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Tue, 28 Feb 2017 07:43:35 -0500 Subject: [PATCH 0518/1311] OpenMPI-2.*: remove --with-threads configure option. OpenMPI builds now warn they don't know --with-threads. See OpenMPI commit at https://github.com/open-mpi/ompi/commit/7a55d49ca78bcc157749c04027515f12b026ec33 sed -i 's/--with-threads=posix //' OpenMPI-2*.eb --- easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb | 2 +- easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb | 2 +- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb | 2 +- .../OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb | 2 +- easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb index 23deffc8f4..e0524fac95 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb @@ -14,7 +14,7 @@ source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/d dependencies = [('hwloc', '1.11.3')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb index aeb2a52e4c..fe84bc7c6d 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb @@ -14,7 +14,7 @@ source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/d dependencies = [('hwloc', '1.11.4')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb index 3d626a7c80..109e8a754d 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb @@ -14,7 +14,7 @@ source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/d dependencies = [('hwloc', '1.11.4')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--with-cuda=$CUDA_HOME ' # CUDA-aware build; N.B. --disable-dlopen is incompatible diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb index 7d74bf0639..d395a7e376 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb @@ -14,7 +14,7 @@ source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/d dependencies = [('hwloc', '1.11.4')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb index c13ef6b657..171f894a0d 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb @@ -15,7 +15,7 @@ checksums = ['886698becc5bea8c151c0af2074b8392'] dependencies = [('hwloc', '1.11.5')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -- GitLab From 78346f0a9a063f7adbdb3361c1eb85017d8514cf Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 14:28:18 +0100 Subject: [PATCH 0519/1311] adding easyconfigs: SpiecEasi-20160830-intel-2016b-R-3.3.1.eb --- .../SpiecEasi-20160830-intel-2016b-R-3.3.1.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/s/SpiecEasi/SpiecEasi-20160830-intel-2016b-R-3.3.1.eb diff --git a/easybuild/easyconfigs/s/SpiecEasi/SpiecEasi-20160830-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/s/SpiecEasi/SpiecEasi-20160830-intel-2016b-R-3.3.1.eb new file mode 100644 index 0000000000..4b5fa1bf48 --- /dev/null +++ b/easybuild/easyconfigs/s/SpiecEasi/SpiecEasi-20160830-intel-2016b-R-3.3.1.eb @@ -0,0 +1,26 @@ +easyblock = 'RPackage' + +name = 'SpiecEasi' +version = '20160830' +commit = 'd705428' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://github.com/zdk123/SpiecEasi' +description = "Sparse InversE Covariance estimation for Ecological Association and Statistical Inference" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/zdk123/SpiecEasi/archive/'] +sources = ['%s.tar.gz' % commit] + +dependencies = [ + ('R', '3.3.1'), + ('R-bundle-Bioconductor', '3.3', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'lib' -- GitLab From 91d00909e037c6bfb00ce16fe3a5547e2b750b94 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 15:41:57 +0200 Subject: [PATCH 0520/1311] adding easyconfigs: iomkl-2017a.eb --- ...11.5-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 27 +++++++++++++ .../i/imkl/imkl-2017.1.132-iompi-2017a.eb | 38 +++++++++++++++++++ easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb | 24 ++++++++++++ easybuild/easyconfigs/i/iompi/iompi-2017a.eb | 21 ++++++++++ .../n/numactl/numactl-2.0.11-GCCcore-6.3.0.eb | 25 ++++++++++++ ....0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 33 ++++++++++++++++ 6 files changed, 168 insertions(+) create mode 100644 easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-iccifort-2017.1.132-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iompi-2017a.eb create mode 100644 easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb create mode 100644 easybuild/easyconfigs/i/iompi/iompi-2017a.eb create mode 100644 easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-iccifort-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..51bcdefbaf --- /dev/null +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.5' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction + (across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including + NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various + system attributes such as cache and memory information as well as the locality of I/O devices such as + network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering + information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['8f5fe6a9be2eb478409ad5e640b2d3ba'] + +dependencies = [ + ('numactl', '2.0.11'), +] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iompi-2017a.eb b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iompi-2017a.eb new file mode 100644 index 0000000000..38909739c9 --- /dev/null +++ b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-iompi-2017a.eb @@ -0,0 +1,38 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'imkl' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-mkl/' +description = """Intel Math Kernel Library is a library of highly optimized, + extensively threaded math routines for science, engineering, and financial + applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + +toolchain = {'name': 'iompi', 'version': '2017a'} + +sources = ['l_mkl_%(version)s.tgz'] +checksums = ['7911c0f777c4cb04225bf4518088939e'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +interfaces = True + +postinstallcmds = [ + # extract the examples + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_f95.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_f.tgz -C %(installdir)s/mkl/examples/' +] + +modextravars = { + 'MKL_EXAMPLES': '%(installdir)s/mkl/examples/', +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb new file mode 100644 index 0000000000..442a8f32cc --- /dev/null +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb @@ -0,0 +1,24 @@ +easyblock = "Toolchain" + +name = 'iomkl' +version = '2017a' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +compver = '2017.1.132' +gcc_maj_min = '6.3' +gccver = '%s.0' % gcc_maj_min +binutilsver = '2.27' +gccsuff = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('icc', compver, gccsuff), + ('ifort', compver, gccsuff), + ('OpenMPI', '2.0.2', '', ('iccifort', '%s%s' % (compver, gccsuff))), + ('imkl', '2017.1.132', '', ('iompi', version)), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/iompi/iompi-2017a.eb b/easybuild/easyconfigs/i/iompi/iompi-2017a.eb new file mode 100644 index 0000000000..6daa72b832 --- /dev/null +++ b/easybuild/easyconfigs/i/iompi/iompi-2017a.eb @@ -0,0 +1,21 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild +easyblock = "Toolchain" + +name = 'iompi' +version = '2017a' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel C/C++ and Fortran compilers, alongside Intel MPI.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +compver = '2017.1.132' +compversuff = '-GCC-6.3.0-2.27' + +dependencies = [ + ('icc', compver, compversuff), + ('ifort', compver, compversuff), + ('OpenMPI', '2.0.2', '', ('iccifort', '%s%s' % (compver, compversuff))), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCCcore-6.3.0.eb b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..c6e873dfe1 --- /dev/null +++ b/easybuild/easyconfigs/n/numactl/numactl-2.0.11-GCCcore-6.3.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'numactl' +version = '2.0.11' + +homepage = 'http://oss.sgi.com/projects/libnuma/' +description = """The numactl program allows you to run your application program on specific cpu's and memory nodes. + It does this by supplying a NUMA memory policy to the operating system before running your program. + The libnuma library provides convenient ways for you to add NUMA memory policies into your own program.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['ftp://oss.sgi.com/www/projects/libnuma/download/'] +sources = [SOURCE_TAR_GZ] + +checksums = ['d3bc88b7ddb9f06d60898f4816ae9127'] + +builddependencies = [('binutils', '2.27')] + +sanity_check_paths = { + 'files': ['bin/numactl', 'bin/numastat', 'lib/libnuma.%s' % SHLIB_EXT, 'lib/libnuma.a'], + 'dirs': ['share/man', 'include'] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..7af5556760 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '2.0.2' + +homepage = 'http://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-2 implementation.""" + +toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} + +sources = [SOURCELOWER_TAR_GZ] + +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] + +dependencies = [('hwloc', '1.11.5')] + +configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading + +# needed for --with-verbs +osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] + +libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % binfile for binfile in ["ompi_info", "opal_wrapper", "orterun"]] + + ["lib/lib%s.%s" % (libfile, SHLIB_EXT) for libfile in libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' -- GitLab From 42ce0387a380bb6e4dee94c7c46b4ed089f45097 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 14:51:56 +0100 Subject: [PATCH 0521/1311] adding easyconfigs: randfold-2.0.1-intel-2016b.eb --- .../r/randfold/randfold-2.0.1-intel-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb b/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb new file mode 100644 index 0000000000..e126b5aaec --- /dev/null +++ b/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'MakeCp' + +name = 'randfold' +version = '2.0.1' + +homepage = 'http://bioinformatics.psb.ugent.be/software/details/Randfold' +description = "Minimum free energy of folding randomization test software" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://bioinformatics.psb.ugent.be/supplementary_data/erbon/nov2003/downloads/'] +sources = [SOURCE_TAR_GZ] + +cleanupoldinstall = False + +prebuildopts = "tar xfvz squid.tar.gz && cd squid-*/ && mkdir -p %(installdir)s && " +prebuildopts += "./configure --prefix=%(installdir)s && make && make install && cd .. && " +prebuildopts += "export CPATH=%(installdir)s/include:$CPATH && export LIBRARY_PATH=%(installdir)s/lib:$LIBRARY_PATH && " + +buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' + +files_to_copy = [(['randfold'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/randfold'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 3267d3b1cff1437f05ae5f5452d4f4342a5419e3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 14:56:09 +0100 Subject: [PATCH 0522/1311] clarify installing of included SQUID with comment --- easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb b/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb index e126b5aaec..9858d48447 100644 --- a/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb +++ b/easybuild/easyconfigs/r/randfold/randfold-2.0.1-intel-2016b.eb @@ -13,6 +13,7 @@ sources = [SOURCE_TAR_GZ] cleanupoldinstall = False +# also install included SQUID dependency, since it can't be found online anymore... prebuildopts = "tar xfvz squid.tar.gz && cd squid-*/ && mkdir -p %(installdir)s && " prebuildopts += "./configure --prefix=%(installdir)s && make && make install && cd .. && " prebuildopts += "export CPATH=%(installdir)s/include:$CPATH && export LIBRARY_PATH=%(installdir)s/lib:$LIBRARY_PATH && " -- GitLab From 411e66ce8fc8e34be3373f12198d99c0b84f5660 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 16:02:11 +0200 Subject: [PATCH 0523/1311] iompi uses OpenMPI not Intel MPI. Fix description --- easybuild/easyconfigs/i/iompi/iompi-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/i/iompi/iompi-2017a.eb b/easybuild/easyconfigs/i/iompi/iompi-2017a.eb index 6daa72b832..571b319a14 100644 --- a/easybuild/easyconfigs/i/iompi/iompi-2017a.eb +++ b/easybuild/easyconfigs/i/iompi/iompi-2017a.eb @@ -5,7 +5,7 @@ name = 'iompi' version = '2017a' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel C/C++ and Fortran compilers, alongside Intel MPI.""" +description = """Intel C/C++ and Fortran compilers, alongside Open MPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -- GitLab From 63337dd37a65dc82da76f9ed4748b058e6bcd7bf Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 16:03:43 +0200 Subject: [PATCH 0524/1311] OpenMPI droped --with-threads configure option. See PR 4213 --- .../OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb index 7af5556760..0a89a8a816 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -14,7 +14,7 @@ source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/d dependencies = [('hwloc', '1.11.5')] -configopts = '--with-threads=posix --enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -- GitLab From 09869c2c5c361e4900492a81a806d38b9922ea5e Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 16:04:55 +0200 Subject: [PATCH 0525/1311] Reduce variable setting to a minimum --- easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb index 442a8f32cc..032f6eb6a2 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb @@ -9,10 +9,7 @@ description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ a toolchain = {'name': 'dummy', 'version': 'dummy'} compver = '2017.1.132' -gcc_maj_min = '6.3' -gccver = '%s.0' % gcc_maj_min -binutilsver = '2.27' -gccsuff = '-GCC-%s-%s' % (gccver, binutilsver) +gccsuff = '-GCC-6.3.0-2.27' dependencies = [ ('icc', compver, gccsuff), -- GitLab From 9285c4116f98be71004dd3f06d564e09df489b43 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 16:07:47 +0200 Subject: [PATCH 0526/1311] Add checksum to OpenMPI config and fix style. --- .../OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb index 0a89a8a816..66e6aa8b1b 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -8,9 +8,9 @@ description = """The Open MPI Project is an open source MPI-2 implementation.""" toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} -sources = [SOURCELOWER_TAR_GZ] - source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['886698becc5bea8c151c0af2074b8392'] dependencies = [('hwloc', '1.11.5')] -- GitLab From 0a5a3aec3cba223f4c5efe9b5200784f8f682cf8 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 28 Feb 2017 16:10:13 +0200 Subject: [PATCH 0527/1311] Add HPL 2.2 as test case. --- .../easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb new file mode 100644 index 0000000000..77dc4ed21f --- /dev/null +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb @@ -0,0 +1,18 @@ +name = 'HPL' +version = '2.2' + +homepage = 'http://www.netlib.org/benchmark/hpl/' +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic + on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the + High Performance Computing Linpack Benchmark.""" + +toolchain = {'name': 'iomkl', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.netlib.org/benchmark/%(namelower)s'] + +# fix Make dependencies, so parallel build also works +patches = ['HPL_parallel-make.patch'] + +moduleclass = 'tools' -- GitLab From 8ff202b1373c6545541888371edd6c877c92514b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 15:10:40 +0100 Subject: [PATCH 0528/1311] {bio}[intel/2016b] ViennaRNA v2.2.3 --- .../ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb | 48 +++++++++++++++++++ .../ViennaRNA-2.2.3_fix-pragma.patch | 41 ++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3_fix-pragma.patch diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb new file mode 100644 index 0000000000..039ce2f3b3 --- /dev/null +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb @@ -0,0 +1,48 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +easyblock = 'ConfigureMake' + +name = 'ViennaRNA' +version = '2.2.3' + +homepage = 'http://www.tbi.univie.ac.at/~ronny/RNA/vrna2.html' +description = """The Vienna RNA Package consists of a C code library and several +stand-alone programs for the prediction and comparison of RNA secondary structures.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'openmp': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA/packages/source'] + +patches = ['ViennaRNA-%(version)s_fix-pragma.patch'] + +# Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. +configopts = '--without-perl' +# Alternatively, you may want to use the following to copy the perl-module to a "local" directory +# Code NOT yet tested, therefor left here for future recycling +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' + +buildopts = 'VERBOSE=1 V=1' + +sanity_check_paths = { + 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', + 'inverse', 'plot', 'subopt', 'Lfold', 'cofold', + 'paln', 'duplex', 'alifold', 'plfold', 'up', + 'aliduplex', 'Lalifold', '2Dfold', 'parconv', + 'PKplex', 'plex', 'snoop', 'forester']] + + ['bin/Kinfold'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3_fix-pragma.patch b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3_fix-pragma.patch new file mode 100644 index 0000000000..b53cab1fff --- /dev/null +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3_fix-pragma.patch @@ -0,0 +1,41 @@ +fix #pragma statements for building with Intel compilers + +author: Kenneth Hoste (HPC-UGent) + +--- ViennaRNA-2.2.3/src/ViennaRNA/plex.c.orig 2017-02-28 14:02:21.733634118 +0100 ++++ ViennaRNA-2.2.3/src/ViennaRNA/plex.c 2017-02-28 14:02:31.303877232 +0100 +@@ -410,7 +410,7 @@ + by = (int**) vrna_alloc(sizeof(int *) * (n3+1)); + inx= (int**) vrna_alloc(sizeof(int *) * (n3+1)); + iny= (int**) vrna_alloc(sizeof(int *) * (n3+1)); +- #pragma omp ++ #pragma omp parallel for + for (i=0; i<=n3; i++){ + c[i] = (int *) vrna_alloc(sizeof(int) * (n4+1)); + in[i] = (int *) vrna_alloc(sizeof(int) * (n4+1)); +--- ViennaRNA-2.2.3/src/Kinfold/cache.c.orig 2017-02-28 14:16:36.074432301 +0100 ++++ ViennaRNA-2.2.3/src/Kinfold/cache.c 2017-02-28 14:16:38.544493318 +0100 +@@ -56,7 +56,6 @@ + 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1}; + + /* key must not be longer than 128 */ +-#pragma inline (cache_f) + unsigned cache_f(char *x) { + register char *s; + register int i; +@@ -80,6 +79,7 @@ + int cacheval; + cache_entry *c; + ++ #pragma inline (cache_f) + cacheval=cache_f(x); + if ((c=cachetab[cacheval])) + if (strcmp(c->structure,x)==0) return c; +@@ -92,6 +92,7 @@ + int cacheval; + cache_entry *c; + ++ #pragma inline (cache_f) + cacheval=cache_f(x->structure); + if ((c=cachetab[cacheval])) { + free(c->structure); -- GitLab From 7b0ef57b38446a7307e6ee02a0bc3944954327b4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 15:13:00 +0100 Subject: [PATCH 0529/1311] adding easyconfigs: Bowtie-1.1.2-intel-2016b.eb --- .../b/Bowtie/Bowtie-1.1.2-intel-2016b.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2016b.eb new file mode 100644 index 0000000000..eeada6c5ac --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.1.2-intel-2016b.eb @@ -0,0 +1,23 @@ +# Modified from existing version by: +# Robert Schmidt +# Ottawa Hospital Research Institute - Bioinformatics Team +name = 'Bowtie' +version = '1.1.2' + +homepage = 'http://bowtie-bio.sourceforge.net/index.shtml' +description = """Bowtie is an ultrafast, memory-efficient short read aligner. +It aligns short DNA sequences (reads) to the human genome. +""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = ['%(namelower)s-%(version)s-src.zip'] +source_urls = ['http://download.sourceforge.net/bowtie-bio/'] + +patches = [ + 'int64typedef.patch', + 'Bowtie-%(version)s_void2int.patch' +] + +moduleclass = 'bio' -- GitLab From f6ba9f30dd604bf161eb9bc3b28c9a772ecd7092 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 28 Feb 2017 15:16:06 +0000 Subject: [PATCH 0530/1311] Added recipe for JasPer 2.0.10. Recent versions use CMake rather than Configure --- .../j/JasPer/JasPer-2.0.10-intel-2016b.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb new file mode 100644 index 0000000000..bf07f73dff --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb @@ -0,0 +1,22 @@ +easyblock = 'CMakeMake' + +name = 'JasPer' +version = '2.0.10' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +separate_build_dir = True +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +sanity_check_paths = { + 'files': ["bin/jasper", "lib64/libjasper.so"], + 'dirs': ["include"], +} + +moduleclass = 'vis' -- GitLab From c0f7edae47fa7f32c4aef11f36d23b35296b57b8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 17:38:29 +0100 Subject: [PATCH 0531/1311] remove verbose buildopts --- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb index 039ce2f3b3..714f3edc9e 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb @@ -33,8 +33,6 @@ configopts = '--without-perl' # Code NOT yet tested, therefor left here for future recycling # preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' -buildopts = 'VERBOSE=1 V=1' - sanity_check_paths = { 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', 'inverse', 'plot', 'subopt', 'Lfold', 'cofold', -- GitLab From c4e9582b13a794b284ae9ffeccbbd3e486bab85c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 18:08:41 +0100 Subject: [PATCH 0532/1311] add PDF::API2 extension to Perl 5.24.0 easyconfigs + sync exts_list --- .../easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb | 4 ++++ easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCCcore-4.9.3.eb | 8 ++++++++ easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b.eb | 8 ++++++++ easybuild/easyconfigs/p/Perl/Perl-5.24.0-intel-2016b.eb | 8 ++++++++ 4 files changed, 28 insertions(+) diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb index 78af957181..f39c5f51b0 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCC-5.4.0-2.26.eb @@ -883,6 +883,10 @@ exts_list = [ 'source_tmpl': 'Text-Template-1.46.tar.gz', 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MJ/MJD'], }), + ('PDF::API2', '2.031', { + 'source_tmpl': 'PDF-API2-2.031.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SS/SSIMMS/'], + }), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCCcore-4.9.3.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCCcore-4.9.3.eb index dc1a3cef69..47164262e3 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-GCCcore-4.9.3.eb @@ -881,6 +881,14 @@ exts_list = [ 'source_tmpl': 'MailTools-2.18.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], }), + ('Text::Template', '1.46', { + 'source_tmpl': 'Text-Template-1.46.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MJ/MJD'], + }), + ('PDF::API2', '2.031', { + 'source_tmpl': 'PDF-API2-2.031.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SS/SSIMMS/'], + }), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b.eb index 77e0aab0f1..3f4c7638c7 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-foss-2016b.eb @@ -879,6 +879,14 @@ exts_list = [ 'source_tmpl': 'MailTools-2.18.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], }), + ('Text::Template', '1.46', { + 'source_tmpl': 'Text-Template-1.46.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MJ/MJD'], + }), + ('PDF::API2', '2.031', { + 'source_tmpl': 'PDF-API2-2.031.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SS/SSIMMS/'], + }), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-intel-2016b.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-intel-2016b.eb index 087478fa1f..8fd86e040f 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.0-intel-2016b.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.0-intel-2016b.eb @@ -880,6 +880,14 @@ exts_list = [ 'source_tmpl': 'MailTools-2.18.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], }), + ('Text::Template', '1.46', { + 'source_tmpl': 'Text-Template-1.46.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MJ/MJD'], + }), + ('PDF::API2', '2.031', { + 'source_tmpl': 'PDF-API2-2.031.tar.gz', + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SS/SSIMMS/'], + }), ] moduleclass = 'lang' -- GitLab From ce9b46c84cf474d3e1c8af7c31a84cf881731cde Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 18:11:47 +0100 Subject: [PATCH 0533/1311] adding easyconfigs: BLASR-2.2-intel-2016b.eb --- .../b/BLASR/BLASR-2.2-intel-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb b/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb new file mode 100644 index 0000000000..ea4423904f --- /dev/null +++ b/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb @@ -0,0 +1,37 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel + +easyblock = 'ConfigureMake' + +name = 'BLASR' +version = '2.2' + +homepage = 'https://github.com/PacificBiosciences/blasr' +description = """ BLASR (Basic Local Alignment with Successive Refinement) rapidly maps + reads to genomes by finding the highest scoring local alignment or set of local alignments + between the read and the genome. Optimized for PacBio's extraordinarily long reads and + taking advantage of rich quality values, BLASR maps reads rapidly with high accuracy. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/PacificBiosciences/blasr/archive/'] +sources = ['smrtanalysis-%(version)s.tar.gz'] + +dependencies = [('HDF5', '1.8.18')] + +skipsteps = ['configure'] + +# the STATIC= option is a workaround. Check details here: +# https://github.com/PacificBiosciences/blasr/issues/4#issuecomment-44142749 +buildopts = ' STATIC= ' + +installopts = ' INSTALL_BIN_DIR=%(installdir)s/bin' + +sanity_check_paths = { + 'files': ["bin/blasr"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 907f6bd2d2ff68a363db89ae9888a3f5dd190c34 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 18:13:23 +0100 Subject: [PATCH 0534/1311] adding easyconfigs: networkx-1.1-intel-2016b-Python-2.7.12.eb --- .../networkx-1.1-intel-2016b-Python-2.7.12.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/n/networkx/networkx-1.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/networkx/networkx-1.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/n/networkx/networkx-1.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..00b1f15044 --- /dev/null +++ b/easybuild/easyconfigs/n/networkx/networkx-1.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'networkx' +version = '1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/networkx' +description = """NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, + and functions of complex networks.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From 131240ae80a3bad7327bd8aa9d3288e31d182c87 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 18:14:08 +0100 Subject: [PATCH 0535/1311] adding easyconfigs: PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb --- ...Suite-15.8.24-intel-2016b-Python-2.7.12.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..8626be9af4 --- /dev/null +++ b/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'Tarball' + +name = 'PBSuite' +version = '15.8.24' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://sourceforge.net/p/pb-jelly/wiki/Home/' +description = """PBJelly is a highly automated pipeline that aligns long sequencing reads (such as PacBio RS reads or + long 454 reads in fasta format) to high-confidence draft assembles.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://sourceforge.net/projects/pb-jelly/files/latest/download'] +sources = ['%(name)s_%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('networkx', '1.1', versionsuffix), + ('BLASR', '2.2'), +] + +modextrapaths = { + 'PATH': 'bin', + 'PYTHONPATH': '', +} +modextravars = {'SWEETPATH': '%(installdir)s'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'pbsuite'], +} + +sanity_check_commands = ["python -c 'import pbsuite'"] + +moduleclass = 'bio' -- GitLab From c859967dea863d871094e07fb7c7f2ba539675c4 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 28 Feb 2017 18:19:18 +0100 Subject: [PATCH 0536/1311] adding easyconfigs: Python-2.7.13-foss-2016b-bare.eb, Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb --- .../p/Python/Python-2.7.13-foss-2016b-bare.eb | 147 ++++++++++++++++++ ...er-2.7.13-foss-2016b-Python-2.7.13-bare.eb | 30 ++++ 2 files changed, 177 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb create mode 100755 easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb new file mode 100644 index 0000000000..4c330ffc74 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb @@ -0,0 +1,147 @@ +name = 'Python' +version = '2.7.13' +versionsuffix = '-bare' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively. + + This is a version without Tk or X11.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('GMP', '6.1.2'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated 9th February 2017 +# using easy_update +# the commented out extensions were added by easy_update but broke the build +exts_list = [ + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + #('packaging', '16.8', { + # 'source_urls': ['https://pypi.python.org/packages/source/p/packaging/'], + #}), + #('pyparsing', '2.1.10', { + # 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + #}), + #('appdirs', '1.4.0', { + # 'source_urls': ['https://pypi.python.org/packages/source/a/appdirs/'], + #}), + ('setuptools', '32.3.1', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + }), + ('pip', '9.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.12.0', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + }), + ('scipy', '0.18.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + }), + ('pbr', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('lockfile', '0.12.2', { + 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], + }), + ('Cython', '0.25.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('dateutil', '2.5.3', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.7.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('pyasn1', '0.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyasn1/'], + }), + ('paramiko', '2.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('netifaces', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.19', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('funcsigs', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], + }), + ('mock', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], + }), + ('pytz', '2016.10', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('pandas', '0.19.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('enum34', '1.1.6', { + 'modulename': 'enum', + 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], + }), + ('bitstring', '3.1.5', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb new file mode 100755 index 0000000000..4f9e88dceb --- /dev/null +++ b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb @@ -0,0 +1,30 @@ +easyblock = 'EB_TkinterPython' +# TODO: +# only build the Tkinter parts we want +# using further easyblock customisation + +name = 'Tkinter' +version = '2.7.13' +versionsuffix = '-Python-%(version)s-bare' + +homepage = 'http://python.org/' +description = """Tkinter module, built with the Python buildsystem""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/python/%(version)s/'] +sources = ['Python-%(version)s.tgz'] + +postinstallcmds = [ ' mv %(installdir)s/lib/python%(pyshortver)s/lib-tk %(installdir)s/lib/ && mv %(installdir)s/lib/python%(pyshortver)s/lib-dynload/_tkinter.so %(installdir)s/lib/ && rm -rf %(installdir)s/lib/python%(pyshortver)s/* && mv %(installdir)s/lib/lib-tk %(installdir)s/lib/python%(pyshortver)s/ && mkdir %(installdir)s/lib/python%(pyshortver)s/lib-dynload && mv %(installdir)s/lib/_tkinter.so %(installdir)s/lib/python%(pyshortver)s/lib-dynload && rm %(installdir)s/bin/python ' ] + +dependencies = [ + ('Python', '2.7.13', '-bare'), + ('Tcl', '8.6.5'), + ('Tk', '8.6.5', '-libX11-1.6.3'), + ('xproto', '7.0.28'), +] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/lib-dynload:lib/python%(pyshortver)s/lib-tk']} + +moduleclass = 'lang' -- GitLab From 650c707845c54ac8843d0a0b62ef80e2f24976a6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Feb 2017 18:43:33 +0100 Subject: [PATCH 0537/1311] fix check for Szip library in configure script for netCDF 4.1.3 --- .../n/netCDF/netCDF-4.1.3-goolf-1.4.10.eb | 3 +++ .../n/netCDF/netCDF-4.1.3-ictce-5.3.0.eb | 2 ++ .../netCDF-4.1.3_fix-Szip-link-check.patch | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/n/netCDF/netCDF-4.1.3_fix-Szip-link-check.patch diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-goolf-1.4.10.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-goolf-1.4.10.eb index 6aa937d650..55b91cb833 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-goolf-1.4.10.eb @@ -5,6 +5,7 @@ homepage = 'http://www.unidata.ucar.edu/software/netcdf/' description = """NetCDF (network Common Data Form) is a set of software libraries and machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data.""" + toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True} @@ -14,6 +15,8 @@ source_urls = [ 'ftp://ftp.unidata.ucar.edu/pub/netcdf/old', ] +patches = ['netCDF-%(version)s_fix-Szip-link-check.patch'] + dependencies = [('HDF5', '1.8.7')] moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-ictce-5.3.0.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-ictce-5.3.0.eb index 36ab674b3d..d130575666 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3-ictce-5.3.0.eb @@ -15,6 +15,8 @@ source_urls = [ 'ftp://ftp.unidata.ucar.edu/pub/netcdf/old', ] +patches = ['netCDF-%(version)s_fix-Szip-link-check.patch'] + dependencies = [ ('HDF5', '1.8.9'), ('Doxygen', '1.8.1.1'), diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3_fix-Szip-link-check.patch b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3_fix-Szip-link-check.patch new file mode 100644 index 0000000000..2e44c10cb4 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.1.3_fix-Szip-link-check.patch @@ -0,0 +1,16 @@ +make configure script look for correct Szip library +see also https://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg10433.html + +author: Kenneth Hoste (HPC-UGent) + +--- netcdf-4.1.3/configure.orig 2017-02-28 17:55:46.681729087 +0100 ++++ netcdf-4.1.3/configure 2017-02-28 17:55:52.391876458 +0100 +@@ -27142,7 +27142,7 @@ + return 0; + } + _ACEOF +-for ac_lib in '' szip; do ++for ac_lib in '' sz; do + if test -z "$ac_lib"; then + ac_res="none required" + else -- GitLab From 04873c91d34c1c9971889e9505afcfa323c2ea83 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 28 Feb 2017 18:52:19 +0000 Subject: [PATCH 0538/1311] cosmetic change --- easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb index bf07f73dff..5bc0738e10 100644 --- a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb +++ b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb @@ -7,13 +7,14 @@ homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' description = """The JasPer Project is an open-source initiative to provide a free software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" -separate_build_dir = True toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] +separate_build_dir = True + sanity_check_paths = { 'files': ["bin/jasper", "lib64/libjasper.so"], 'dirs': ["include"], -- GitLab From 98456570308e7a91e4109d0bb18bb26c05bbdf08 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 28 Feb 2017 19:11:27 +0000 Subject: [PATCH 0539/1311] added cmake build dependency --- easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb index 5bc0738e10..23bfbfb00d 100644 --- a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb +++ b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.10-intel-2016b.eb @@ -13,6 +13,8 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] +builddependencies = [('CMake', '3.6.1')] + separate_build_dir = True sanity_check_paths = { -- GitLab From c341b8bbe3fe8a14a7e181d806548ca1f4b3113b Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 1 Mar 2017 10:15:45 +0800 Subject: [PATCH 0540/1311] fix source_urls --- easybuild/easyconfigs/b/bsoft/bsoft-1.8.8-goolf-1.5.14.eb | 3 ++- .../c/cutadapt/cutadapt-1.5-goolf-1.4.10-Python-2.7.10.eb | 3 ++- easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/g/GnuTLS/GnuTLS-3.1.8-goolf-1.4.10.eb | 3 ++- .../i/ImageMagick/ImageMagick-6.9.4-8-intel-2016a.eb | 5 +++-- .../i/ImageMagick/ImageMagick-7.0.1-6-intel-2016a.eb | 5 +++-- .../i/ImageMagick/ImageMagick-7.0.1-9-intel-2016a.eb | 5 +++-- .../i/ImageMagick/ImageMagick-7.0.2-9-intel-2016a.eb | 5 +++-- .../i/ImageMagick/ImageMagick-7.0.3-1-intel-2016b.eb | 5 +++-- .../easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb | 6 +++++- .../easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb | 6 +++++- .../Mercurial/Mercurial-2.3.2-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../m/Mercurial/Mercurial-2.3.2-ictce-5.3.0-Python-2.7.3.eb | 3 ++- .../Mercurial/Mercurial-2.5.2-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../m/Mercurial/Mercurial-2.5.2-ictce-5.3.0-Python-2.7.3.eb | 3 ++- .../m/Mercurial/Mercurial-3.2.4-foss-2015a-Python-2.7.9.eb | 3 ++- .../n/netCDF-Fortran/netCDF-Fortran-4.2-ictce-6.1.5.eb | 6 +++++- easybuild/easyconfigs/n/netCDF/netCDF-4.2-ictce-5.4.0.eb | 6 +++++- easybuild/easyconfigs/n/netCDF/netCDF-4.2-intel-2014b.eb | 6 +++++- .../easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-5.4.0.eb | 6 +++++- .../easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-6.1.5.eb | 6 +++++- easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb | 5 +++-- easybuild/easyconfigs/p/pigz/pigz-2.3.1-ictce-6.2.5.eb | 5 +++-- easybuild/easyconfigs/p/pigz/pigz-2.3.3-foss-2015b.eb | 5 +++-- easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb | 4 +++- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb | 4 +++- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb | 4 +++- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb | 4 +++- .../r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb | 4 +++- .../r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb | 4 +++- .../r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb | 4 +++- .../s/Subversion/Subversion-1.8.14-foss-2015a.eb | 2 ++ 35 files changed, 106 insertions(+), 42 deletions(-) mode change 100755 => 100644 easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb diff --git a/easybuild/easyconfigs/b/bsoft/bsoft-1.8.8-goolf-1.5.14.eb b/easybuild/easyconfigs/b/bsoft/bsoft-1.8.8-goolf-1.5.14.eb index 5bba690060..85e23a5ed9 100644 --- a/easybuild/easyconfigs/b/bsoft/bsoft-1.8.8-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/b/bsoft/bsoft-1.8.8-goolf-1.5.14.eb @@ -13,8 +13,9 @@ a resource that can be and has been used in other packages.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} toolchainopts = {'openmp': True} -source_urls = ['http://lsbr.niams.nih.gov/bsoft/'] +source_urls = ['http://lsbr.niams.nih.gov/bsoft/old/'] sources = ['%%(name)s%s.tar' % '_'.join(version.split('.'))] +checksums = ['e97f1fecba89efb5cd35741ce8c6396f'] cmds_map = [('.*', "./bmake omp fftw=$EBROOTFFTW")] files_to_copy = ['bin'] diff --git a/easybuild/easyconfigs/c/cutadapt/cutadapt-1.5-goolf-1.4.10-Python-2.7.10.eb b/easybuild/easyconfigs/c/cutadapt/cutadapt-1.5-goolf-1.4.10-Python-2.7.10.eb index 141aedc7d3..2793fdd390 100644 --- a/easybuild/easyconfigs/c/cutadapt/cutadapt-1.5-goolf-1.4.10-Python-2.7.10.eb +++ b/easybuild/easyconfigs/c/cutadapt/cutadapt-1.5-goolf-1.4.10-Python-2.7.10.eb @@ -12,8 +12,9 @@ description = """ cutadapt removes adapter sequences toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://cutadapt.googlecode.com/files/'] +source_urls = [PYPI_SOURCE] sources = [SOURCELOWER_TAR_GZ] +checksums = ['639b86826778c14c8b1fe512f074b939'] python = 'Python' pyver = '2.7.10' diff --git a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-goolf-1.4.10.eb b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-goolf-1.4.10.eb index c8367acc34..573a00a185 100644 --- a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-goolf-1.4.10.eb @@ -15,8 +15,9 @@ description = """EMBOSS is 'The European Molecular Biology Open Software Suite'. toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/'] +source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/old/%(version_major_minor)s.0/'] sources = [SOURCE_TAR_GZ] +checksums = ['6a2cb3f93d5e9415c74ab0f6b1ede5f0'] patches = ['EMBOSS_disable-embossupdate.patch'] diff --git a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-ictce-5.3.0.eb b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-ictce-5.3.0.eb index 88380bcbab..cfcf1c4b41 100644 --- a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.5.7-ictce-5.3.0.eb @@ -15,8 +15,9 @@ description = """EMBOSS is 'The European Molecular Biology Open Software Suite'. toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/'] +source_urls = ['ftp://emboss.open-bio.org/pub/EMBOSS/old/%(version_major_minor)s.0/'] sources = [SOURCE_TAR_GZ] +checksums = ['6a2cb3f93d5e9415c74ab0f6b1ede5f0'] patches = ['EMBOSS_disable-embossupdate.patch'] diff --git a/easybuild/easyconfigs/g/GnuTLS/GnuTLS-3.1.8-goolf-1.4.10.eb b/easybuild/easyconfigs/g/GnuTLS/GnuTLS-3.1.8-goolf-1.4.10.eb index 80b639f6e3..72a8492f83 100644 --- a/easybuild/easyconfigs/g/GnuTLS/GnuTLS-3.1.8-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/GnuTLS/GnuTLS-3.1.8-goolf-1.4.10.eb @@ -7,8 +7,9 @@ homepage = 'http://www.gnutls.org/' description = "gnutls-3.0.22: GNU Transport Layer Security library" toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['ftp://ftp.gnutls.org/pub/gnutls/'] +source_urls = ['ftp://ftp.gnutls.org/gcrypt/gnutls/v%(version_major_minor)s/'] sources = [SOURCELOWER_TAR_XZ] +checksums = ['ffac9e22aba66057d5155ad0e3b62485'] dependencies = [ ('GMP', '5.0.5'), diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-6.9.4-8-intel-2016a.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-6.9.4-8-intel-2016a.eb index bcbe21baac..9914e312e1 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-6.9.4-8-intel-2016a.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-6.9.4-8-intel-2016a.eb @@ -8,8 +8,9 @@ description = """ImageMagick is a software suite to create, edit, compose, or co toolchain = {'name': 'intel', 'version': '2016a'} -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.imagemagick.org/download'] +sources = [SOURCE_TAR_GZ] +source_urls = ['https://launchpad.net/imagemagick/main/%(version)s/+download/'] +checksums = ['a347a9d0f9593cf32e7555a51834f340'] dependencies = [ ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-6-intel-2016a.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-6-intel-2016a.eb index cc86162eda..ca7cdda8cd 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-6-intel-2016a.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-6-intel-2016a.eb @@ -8,8 +8,9 @@ description = """ImageMagick is a software suite to create, edit, compose, or co toolchain = {'name': 'intel', 'version': '2016a'} -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.imagemagick.org/download'] +sources = [SOURCE_TAR_GZ] +source_urls = ['https://launchpad.net/imagemagick/main/%(version)s/+download/'] +checksums = ['e4ad9237f9e04e4d75e06854c55a7944'] dependencies = [ ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-9-intel-2016a.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-9-intel-2016a.eb index 7765318123..346c8ee58b 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-9-intel-2016a.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.1-9-intel-2016a.eb @@ -8,8 +8,9 @@ description = """ImageMagick is a software suite to create, edit, compose, or co toolchain = {'name': 'intel', 'version': '2016a'} -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.imagemagick.org/download'] +sources = [SOURCE_TAR_GZ] +source_urls = ['https://launchpad.net/imagemagick/main/%(version)s/+download/'] +checksums = ['b111b2bd932c77217ad97ac8c77009fb'] dependencies = [ ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.2-9-intel-2016a.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.2-9-intel-2016a.eb index d83125eb93..17c246342c 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.2-9-intel-2016a.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.2-9-intel-2016a.eb @@ -12,8 +12,9 @@ description = """ImageMagick is a software suite to create, edit, compose, or co toolchain = {'name': 'intel', 'version': '2016a'} -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.imagemagick.org/download'] +sources = [SOURCE_TAR_GZ] +source_urls = ['https://launchpad.net/imagemagick/main/%(version)s/+download/'] +checksums = ['f6a27b7996220a006720bdd82bf131be'] dependencies = [ ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.3-1-intel-2016b.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.3-1-intel-2016b.eb index f3c4211e84..7e4fd1539e 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.3-1-intel-2016b.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.3-1-intel-2016b.eb @@ -12,8 +12,9 @@ description = """ImageMagick is a software suite to create, edit, compose, or co toolchain = {'name': 'intel', 'version': '2016b'} -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.imagemagick.org/download'] +sources = [SOURCE_TAR_GZ] +source_urls = ['https://launchpad.net/imagemagick/main/%(version)s/+download/'] +checksums = ['95db9b86ed542cae20634358b4924e10'] dependencies = [ ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb index 5b2c252b76..36759b619b 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb @@ -17,8 +17,12 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" -source_urls = ['ftp://ftp.remotesensing.org/pub/libtiff/'] +source_urls = [ + 'http://download.osgeo.org/libtiff/', + 'ftp://ftp.remotesensing.org/pub/libtiff/', +] sources = ['tiff-%(version)s.tar.gz'] +checksums = ['051c1068e6a0627f461948c365290410'] toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb index d18fddfba6..245af77e27 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb @@ -17,8 +17,12 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" -source_urls = ['ftp://ftp.remotesensing.org/pub/libtiff/'] +source_urls = [ + 'http://download.osgeo.org/libtiff/', + 'ftp://ftp.remotesensing.org/pub/libtiff/', +] sources = ['tiff-%(version)s.tar.gz'] +checksums = ['051c1068e6a0627f461948c365290410'] toolchain = {'name': 'intel', 'version': '2015b'} diff --git a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-goolf-1.4.10-Python-2.7.3.eb index 8175c4c179..e59823b508 100644 --- a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-goolf-1.4.10-Python-2.7.3.eb @@ -10,7 +10,8 @@ of any size and offers an easy and intuitive interface. toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://mercurial.selenic.com/release/'] +source_urls = ['https://www.mercurial-scm.org/release/'] +checksums = ['6e90450ab3886bc650031e0d9aef367a'] python = "Python" pythonversion = '2.7.3' diff --git a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-ictce-5.3.0-Python-2.7.3.eb index f2baa1d123..c992ae6699 100644 --- a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.3.2-ictce-5.3.0-Python-2.7.3.eb @@ -10,8 +10,9 @@ description = """Mercurial is a free, distributed source control management tool toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['http://mercurial.selenic.com/release/'] +source_urls = ['https://www.mercurial-scm.org/release/'] sources = [SOURCELOWER_TAR_GZ] +checksums = ['6e90450ab3886bc650031e0d9aef367a'] python = "Python" pythonversion = '2.7.3' diff --git a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-goolf-1.4.10-Python-2.7.3.eb index 43c0bceadf..4021c0012d 100644 --- a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-goolf-1.4.10-Python-2.7.3.eb @@ -9,8 +9,9 @@ of any size and offers an easy and intuitive interface. """ toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://mercurial.selenic.com/release/'] +source_urls = ['https://www.mercurial-scm.org/release/'] sources = [SOURCELOWER_TAR_GZ] +checksums = ['6b467f41a262e2537cf927ed42d0fdda'] python = "Python" pythonversion = '2.7.3' diff --git a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-ictce-5.3.0-Python-2.7.3.eb index 47ecebdf53..1db1af42c1 100644 --- a/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mercurial/Mercurial-2.5.2-ictce-5.3.0-Python-2.7.3.eb @@ -9,8 +9,9 @@ description = """Mercurial is a free, distributed source control management tool toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['http://mercurial.selenic.com/release/'] +source_urls = ['https://www.mercurial-scm.org/release/'] sources = [SOURCELOWER_TAR_GZ] +checksums = ['6b467f41a262e2537cf927ed42d0fdda'] python = "Python" pythonversion = '2.7.3' diff --git a/easybuild/easyconfigs/m/Mercurial/Mercurial-3.2.4-foss-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/Mercurial/Mercurial-3.2.4-foss-2015a-Python-2.7.9.eb index 047324c714..af89a7e145 100644 --- a/easybuild/easyconfigs/m/Mercurial/Mercurial-3.2.4-foss-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/Mercurial/Mercurial-3.2.4-foss-2015a-Python-2.7.9.eb @@ -10,8 +10,9 @@ of any size and offers an easy and intuitive interface. toolchain = {'name': 'foss', 'version': '2015a'} -source_urls = ['http://mercurial.selenic.com/release/'] +source_urls = ['https://www.mercurial-scm.org/release/'] sources = [SOURCELOWER_TAR_GZ] +checksums = ['4e9447b538a101138e257d5d774bcbfb'] python = "Python" pythonversion = '2.7.9' diff --git a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.2-ictce-6.1.5.eb b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.2-ictce-6.1.5.eb index 87478cf832..8696b556c2 100644 --- a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.2-ictce-6.1.5.eb +++ b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.2-ictce-6.1.5.eb @@ -11,7 +11,11 @@ toolchain = {'name': 'ictce', 'version': '6.1.5'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.unidata.ucar.edu/downloads/netcdf/ftp/'] +source_urls = [ + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/', + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/old/', +] +checksums = ['cc3bf530223e8f4aff93793b9f197bf3'] dependencies = [('netCDF', '4.2.1.1')] diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.2-ictce-5.4.0.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.2-ictce-5.4.0.eb index a0f0b6f197..878ccb62cc 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.2-ictce-5.4.0.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.2-ictce-5.4.0.eb @@ -10,7 +10,11 @@ toolchain = {'name': 'ictce', 'version': '5.4.0'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.unidata.ucar.edu/downloads/netcdf/ftp/'] +source_urls = [ + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/', + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/old/', +] +checksums = ['e7790bb23d8bc23689f19f5cec81d71e'] configopts = ['--disable-doxygen'] diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.2-intel-2014b.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.2-intel-2014b.eb index fc24bdb27f..72e540c932 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.2-intel-2014b.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.2-intel-2014b.eb @@ -10,7 +10,11 @@ toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.unidata.ucar.edu/downloads/netcdf/ftp/'] +source_urls = [ + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/', + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/old/', +] +checksums = ['e7790bb23d8bc23689f19f5cec81d71e'] configopts = ['--disable-doxygen'] diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-5.4.0.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-5.4.0.eb index 49f253f65d..f945f15bca 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-5.4.0.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-5.4.0.eb @@ -10,7 +10,11 @@ toolchain = {'name': 'ictce', 'version': '5.4.0'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.unidata.ucar.edu/downloads/netcdf/ftp/'] +source_urls = [ + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/', + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/old/', +] +checksums = ['5eebcf19e6ac78a61c73464713cbfafc'] dependencies = [('HDF5', '1.8.10', '-gpfs')] diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-6.1.5.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-6.1.5.eb index 262ebc70b9..b162d589eb 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-6.1.5.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.2.1.1-ictce-6.1.5.eb @@ -10,7 +10,11 @@ toolchain = {'name': 'ictce', 'version': '6.1.5'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.unidata.ucar.edu/downloads/netcdf/ftp/'] +source_urls = [ + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/', + 'http://www.unidata.ucar.edu/downloads/netcdf/ftp/old/', +] +checksums = ['5eebcf19e6ac78a61c73464713cbfafc'] dependencies = [('HDF5', '1.8.10', '-gpfs')] diff --git a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb index 292fb226d3..b6ccc91bd2 100644 --- a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb @@ -16,8 +16,9 @@ description = """ pigz, which stands for parallel implementation of gzip, is a f toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://zlib.net/pigz/'] -sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/madler/pigz/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['3a41409da23ff093b61e414d602c5650'] # README recommends zlib 1.2.6 or higher dependencies = [('zlib', '1.2.8')] diff --git a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-ictce-6.2.5.eb b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-ictce-6.2.5.eb index 770c70dd5f..e3e7f189b1 100644 --- a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-ictce-6.2.5.eb @@ -16,8 +16,9 @@ description = """ pigz, which stands for parallel implementation of gzip, is a f toolchain = {'name': 'ictce', 'version': '6.2.5'} -source_urls = ['http://zlib.net/pigz/'] -sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/madler/pigz/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['3a41409da23ff093b61e414d602c5650'] # README recommends zlib 1.2.6 or higher dependencies = [('zlib', '1.2.8')] diff --git a/easybuild/easyconfigs/p/pigz/pigz-2.3.3-foss-2015b.eb b/easybuild/easyconfigs/p/pigz/pigz-2.3.3-foss-2015b.eb index e95cb85cb9..a50f50774e 100644 --- a/easybuild/easyconfigs/p/pigz/pigz-2.3.3-foss-2015b.eb +++ b/easybuild/easyconfigs/p/pigz/pigz-2.3.3-foss-2015b.eb @@ -16,8 +16,9 @@ description = """ pigz, which stands for parallel implementation of gzip, is a f toolchain = {'name': 'foss', 'version': '2015b'} -source_urls = ['http://zlib.net/pigz/'] -sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/madler/pigz/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['fb80e8d31498226c99fe8c8b3d19364d'] # Patch Makefile so zlib provided by EasyBuild is picked up patches = ['pigz-2.3.3_Makefile.patch'] diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb old mode 100755 new mode 100644 index 9a78780f34..a2bf4ab035 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb @@ -9,7 +9,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['e60d1a896299d000b6a34f032debc9aa'] python = 'Python' pyver = '2.7.5' diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb index 4e14ff0190..f56b457e0d 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb @@ -9,7 +9,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'pic': True} sources = ['%s_%s.source.tar.gz' % (name.lower(), version)] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['114ea7f18b48ed0b3bb0287f5a6d593f'] python = 'Python' pyver = '2.7.3' diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb index a65a733278..a263fbc4af 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True} sources = ['%s_%s.source.tar.gz' % (name.lower(), version)] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['114ea7f18b48ed0b3bb0287f5a6d593f'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-%(version)s_recent-ifort.patch', diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb index e025c77b02..4f55d64d72 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['3124168ce6b4574b471d6cda4aa40184'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-v5_recent-ifort.patch', diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb index f0e1274759..a8ab1f540d 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['2a9ef6a342833cb461020fa0832e78fe'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-v5_recent-ifort.patch', diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb index 05baffbd16..5801dbe265 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['aa90309fa75ab69816dc819f5edd73f5'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-v5_recent-ifort.patch', diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb index eb76e73818..81b811dc89 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['fd9ee9cfc85cdad3d7c2c41a28796c24'] + patches = [ 'configure_FftwFromMkl_28.patch', ] diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb index fc6f18713c..9dd615415d 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb @@ -10,7 +10,9 @@ toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['fd9ee9cfc85cdad3d7c2c41a28796c24'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-v5_recent-ifort.patch', diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb index 7d1106317b..b51c955db4 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb @@ -10,7 +10,9 @@ toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} sources = ['%(namelower)s_%(version)s.source.tar.gz'] -source_urls = ['ftp://root.cern.ch/root/'] +source_urls = ['https://root.cern.ch/download/'] +checksums = ['6a1ad549b3b79b10bbb1f116b49067ee'] + patches = [ 'configure_FftwFromMkl_28.patch', 'ROOT-v5_recent-ifort.patch', diff --git a/easybuild/easyconfigs/s/Subversion/Subversion-1.8.14-foss-2015a.eb b/easybuild/easyconfigs/s/Subversion/Subversion-1.8.14-foss-2015a.eb index be6f1332e2..cf172a3cf0 100644 --- a/easybuild/easyconfigs/s/Subversion/Subversion-1.8.14-foss-2015a.eb +++ b/easybuild/easyconfigs/s/Subversion/Subversion-1.8.14-foss-2015a.eb @@ -12,8 +12,10 @@ source_urls = [ 'http://apache.belnet.be/%(namelower)s', 'http://www.eu.apache.org/dist/%(namelower)s', 'http://www.us.apache.org/dist/%(namelower)s', + 'http://archive.apache.org/dist/%(namelower)s', ] sources = [SOURCELOWER_TAR_BZ2] +checksums = ['fe476ba26d6835eba4393780ea907361'] dependencies = [ ('APR', '1.5.2'), -- GitLab From 17ebe626b0f62265d4275423bddaad96c00bbfb7 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Wed, 1 Mar 2017 09:27:13 +0200 Subject: [PATCH 0541/1311] adding easyconfigs: Python-2.7.12-iomkl-2017a.eb --- .../g/GMP/GMP-6.1.1-GCCcore-6.3.0.eb | 31 ++++ .../l/libffi/libffi-3.2.1-GCCcore-6.3.0.eb | 27 ++++ .../libreadline-6.3-GCCcore-6.3.0.eb | 33 +++++ .../p/Python/Python-2.7.12-iomkl-2017a.eb | 133 ++++++++++++++++++ .../s/SQLite/SQLite-3.13.0-GCCcore-6.3.0.eb | 44 ++++++ .../t/Tcl/Tcl-8.6.5-GCCcore-6.3.0.eb | 30 ++++ .../t/Tk/Tk-8.6.5-GCCcore-6.3.0.eb | 30 ++++ .../z/zlib/zlib-1.2.8-GCCcore-6.3.0.eb | 27 ++++ 8 files changed, 355 insertions(+) create mode 100644 easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb create mode 100644 easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/t/Tk/Tk-8.6.5-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.8-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..2d442cdea2 --- /dev/null +++ b/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-6.3.0.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'GMP' +version = '6.1.1' + +homepage = 'http://gmplib.org/' +description = """GMP is a free library for arbitrary precision arithmetic, +operating on signed integers, rational numbers, and floating point numbers. """ + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True, 'precise': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ftp.gnu.org/gnu/gmp'] + +builddependencies = [ + ('binutils', '2.27'), + ('Autotools', '20150215'), +] + +# enable C++ interface +configopts = '--enable-cxx' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libgmp.%s' % SHLIB_EXT, 'include/gmp.h'], + 'dirs': [], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..ab5a66564f --- /dev/null +++ b/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-6.3.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'libffi' +version = '3.2.1' + +homepage = 'http://sourceware.org/libffi/' +description = """The libffi library provides a portable, high level programming interface to various calling +conventions. This allows a programmer to call any function specified by a call interface description at run-time.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [ + 'ftp://sourceware.org/pub/libffi/', + 'http://www.mirrorservice.org/sites/sourceware.org/pub/libffi/', +] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('binutils', '2.27'), +] + +sanity_check_paths = { + 'files': [('lib/libffi.%s' % SHLIB_EXT, 'lib64/libffi.%s' % SHLIB_EXT), ('lib/libffi.a', 'lib64/libffi.a')], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..f4f4e99acd --- /dev/null +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-6.3.0.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libreadline' +version = '6.3' + +homepage = 'http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html' +description = """The GNU Readline library provides a set of functions for use by applications that + allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. + The Readline library includes additional functions to maintain a list of previously-entered command lines, + to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = ['readline-%(version)s.tar.gz'] +source_urls = ['http://ftp.gnu.org/gnu/readline'] + +patches = ['libreadline-%(version)s-bugfix.patch'] + +builddependencies = [('binutils', '2.27')] +dependencies = [('ncurses', '6.0')] + +# for the termcap symbols, use EB ncurses +preconfigopts = "env LDFLAGS='-lncurses'" + +sanity_check_paths = { + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb new file mode 100644 index 0000000000..47c4558b9f --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb @@ -0,0 +1,133 @@ +name = 'Python' +version = '2.7.12' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'iomkl', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('Tk', '8.6.5'), # this requires a full X11 stack + ('GMP', '6.1.1'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated May 28th 2015 +exts_list = [ + ('setuptools', '23.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + }), + ('pip', '8.1.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.11.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + 'patches': ['numpy-1.8.0-mkl.patch'], + }), + ('scipy', '0.17.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '1.3.1', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + }), + ('pbr', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('lockfile', '0.12.2', { + 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], + }), + ('Cython', '0.24', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.5.3', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + }), + ('decorator', '4.0.10', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.4', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('paramiko', '2.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.1.5', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.4', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.18', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('funcsigs', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], + }), + ('mock', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], + }), + ('pytz', '2016.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('pandas', '0.18.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('enum34', '1.1.6', { + 'modulename': 'enum', + 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], + }), + ('bitstring', '3.1.5', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..f7ba78e654 --- /dev/null +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-GCCcore-6.3.0.eb @@ -0,0 +1,44 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'SQLite' +version = '3.13.0' + +homepage = 'http://www.sqlite.org/' +description = 'SQLite: SQL Database Engine in a C Library' + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.sqlite.org/2016/'] +version_minor_etc = version.split('.')[1:] +version_minor_etc += '0' * (3 - len(version_minor_etc)) +version_str = '%(version_major)s' + ''.join('%02d' % int(x) for x in version_minor_etc) +sources = ['sqlite-autoconf-%s.tar.gz' % version_str] + +builddependencies = [ + ('binutils', '2.27'), +] + +dependencies = [ + ('libreadline', '6.3'), + ('Tcl', '8.6.5'), +] + +sanity_check_paths = { + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCCcore-6.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..3d473ebedb --- /dev/null +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-GCCcore-6.3.0.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'Tcl' +version = '8.6.5' + +homepage = 'http://www.tcl.tk/' +description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +builddependencies = [ + ('binutils', '2.27'), +] + +dependencies = [ + ('zlib', '1.2.8'), +] + +configopts = '--enable-threads EXTRA_INSTALL="install-private-headers"' + +runtest = 'test' + +start_dir = 'unix' + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/Tk/Tk-8.6.5-GCCcore-6.3.0.eb b/easybuild/easyconfigs/t/Tk/Tk-8.6.5-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..0c78137460 --- /dev/null +++ b/easybuild/easyconfigs/t/Tk/Tk-8.6.5-GCCcore-6.3.0.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'Tk' +version = '8.6.5' + +homepage = 'http://www.tcl.tk/' +description = """Tk is an open source, cross-platform widget toolchain that provides a library of basic elements for + building a graphical user interface (GUI) in many different programming languages.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +patches = ['Tk-8.6.4_different-prefix-with-tcl.patch'] + +builddependencies = [ + ('binutils', '2.27'), +] + +dependencies = [ + ('Tcl', version), + ('zlib', '1.2.8'), +] + +configopts = '--enable-threads --with-tcl=$EBROOTTCL/lib CFLAGS="-I$EBROOTTCL/include"' + +start_dir = 'unix' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-GCCcore-6.3.0.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..5c5b309e90 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-GCCcore-6.3.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.8' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [ + ('binutils', '2.27', '', True) +] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From a9ee6588e0281da234489af8df025bc1ad605b3e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 09:13:45 +0100 Subject: [PATCH 0542/1311] adding easyconfigs: miRDeep2-2.0.0.8-intel-2016b.eb --- .../miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb new file mode 100644 index 0000000000..1a5f00c298 --- /dev/null +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'PackedBinary' + +name = 'miRDeep2' +version = '2.0.0.8' +altver = '_'.join(version.split('.')) + +homepage = 'https://www.mdc-berlin.de/8551903/en/' +description = "miRDeep2 is a completely overhauled tool which discovers microRNA genes by analyzing sequenced RNAs" + +source_urls = ['https://www.mdc-berlin.de/45995549/en/research/research_teams/systems_biology_of_gene_regulatory_elements/projects/miRDeep/'] +sources = ['mirdeep%s.zip' % altver] + +toolchain = {'name': 'intel', 'version': '2016b'} + +dependencies = [ + ('Perl', '5.24.0'), # provides PDF::API2 + ('Bowtie', '1.1.2'), + ('ViennaRNA', '2.2.3'), + ('randfold', '2.0.1'), # also provides SQUID +] + +install_cmd = "cp -a mirdeep%s/src %%(installdir)s/bin" % altver + +sanity_check_paths = { + 'files': ['bin/make_html.pl'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From b61226296efcb1e72e351e595841a25d4a066632 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 09:56:15 +0100 Subject: [PATCH 0543/1311] fix style remarks in miRDeep2 easyconfig --- .../easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index 1a5f00c298..583f9a91f7 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -7,11 +7,12 @@ altver = '_'.join(version.split('.')) homepage = 'https://www.mdc-berlin.de/8551903/en/' description = "miRDeep2 is a completely overhauled tool which discovers microRNA genes by analyzing sequenced RNAs" -source_urls = ['https://www.mdc-berlin.de/45995549/en/research/research_teams/systems_biology_of_gene_regulatory_elements/projects/miRDeep/'] -sources = ['mirdeep%s.zip' % altver] - toolchain = {'name': 'intel', 'version': '2016b'} +source_url_subdir = 'research/research_teams/systems_biology_of_gene_regulatory_elements/projects/miRDeep/' +source_urls = ['https://www.mdc-berlin.de/45995549/en/' + source_url_subdir] +sources = ['mirdeep%s.zip' % altver] + dependencies = [ ('Perl', '5.24.0'), # provides PDF::API2 ('Bowtie', '1.1.2'), -- GitLab From cbaba10168bd2b27c854f848df7fbcbe1d628e88 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 10:18:54 +0100 Subject: [PATCH 0544/1311] fix source spec in PBSuite easyconfig --- .../p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb index 8626be9af4..c6a303fc3e 100644 --- a/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PBSuite/PBSuite-15.8.24-intel-2016b-Python-2.7.12.eb @@ -11,7 +11,7 @@ description = """PBJelly is a highly automated pipeline that aligns long sequenc toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://sourceforge.net/projects/pb-jelly/files/latest/download'] -sources = ['%(name)s_%(version)s.tar.gz'] +sources = ['%(name)s_%(version)s.tgz'] dependencies = [ ('Python', '2.7.12'), -- GitLab From 0713ba2281954b4626ad750a98c0a6183a14093e Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Wed, 1 Mar 2017 13:21:20 +0200 Subject: [PATCH 0545/1311] adding easyconfigs: NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb --- ...46-iomkl-2017a-2015-10-20-Python-2.7.12.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb new file mode 100644 index 0000000000..f693ccc152 --- /dev/null +++ b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb @@ -0,0 +1,38 @@ +name = 'NWChem' +version = '6.6.revision27746' + +homepage = 'http://www.nwchem-sw.org' +description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in + their ability to treat large scientific computational chemistry problems efficiently, and in their use of available + parallel computing resources from high-performance parallel supercomputers to conventional workstation clusters. + NWChem software can handle: biomolecules, nanostructures, and solid-state; from quantum to classical, and all + combinations; Gaussian basis functions or plane-waves; scaling from one to thousands of processors; properties + and relativity.""" + +toolchain = {'name': 'iomkl', 'version': '2017a'} +toolchainopts = {'i8': True} + +source_urls = ['http://www.nwchem-sw.org/download.php?f='] +verdate = '2015-10-20' +sources = ['Nwchem-%s-src.%s.tar.bz2' % (version, verdate)] + +patches = [ + 'NWChem_fix-date.patch', + 'NWChem-%(version)s-parallelbuild.patch', +] + +python = 'Python' +pyver = '2.7.12' +versionsuffix = '-%s-%s-%s' % (verdate, python, pyver) +dependencies = [(python, pyver)] + +# This easyconfig is using the default for armci_network (OPENIB) and +# thus needs infiniband libraries. +osdependencies = [ + ('libibverbs-dev', 'libibverbs-devel'), + ('libibumad-dev', 'libibumad-devel'), +] + +modules = 'all python' + +moduleclass = 'chem' -- GitLab From 26a826ec08b3b3769ff03ae5179c0c71739a7b39 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Wed, 1 Mar 2017 17:54:11 +0200 Subject: [PATCH 0546/1311] Add missing patch file. --- ...Chem-6.6.revision27746-parallelbuild.patch | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch diff --git a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch new file mode 100644 index 0000000000..635f15ee4c --- /dev/null +++ b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch @@ -0,0 +1,80 @@ +diff -ru nwchem-6.6.orig/src/config/makefile.h nwchem-6.6/src/config/makefile.h +--- nwchem-6.6.orig/src/config/makefile.h 2015-10-16 02:12:50.000000000 +0200 ++++ nwchem-6.6/src/config/makefile.h 2017-01-12 10:43:00.000000000 +0100 +@@ -958,7 +958,7 @@ + _FC=ifort + #ifort 9.1 + # LINK.f = ifort $(LDFLAGS) +- FOPTIONS += -align -mp1 -w -g -vec-report1 ++ FOPTIONS += -align -mp1 -w -g + ifdef USE_GPROF + FOPTIONS += -qp + endif +@@ -1163,7 +1163,7 @@ + CORE_SUBDIRS_EXTRA = blas lapack + CC = gcc + RANLIB = ranlib +- MAKEFLAGS = -j 1 --no-print-directory ++ MAKEFLAGS = -j 8 --no-print-directory + INSTALL = @echo $@ is built + CPP = gcc -E -nostdinc -undef -P + FCONVERT = (/bin/cp $< /tmp/$$$$.c; \ +@@ -1310,7 +1310,7 @@ + _FC=ifc + endif + ifeq ($(_FC),ifc) +- FOPTIONS = -align -mp1 -w -g -vec-report1 ++ FOPTIONS = -align -mp1 -w -g + ifdef USE_GPROF + FOPTIONS += -qp + endif +@@ -1372,7 +1372,7 @@ + endif + + ifeq ($(CC),icc) +- COPTIONS = -mp1 -w -g -vec-report1 ++ COPTIONS = -mp1 -w -g + COPTIMIZE = -O3 -unroll + ifeq ($(_CPU),i586) + COPTIMIZE += -tpp5 -xi # this are for PentiumII +@@ -1740,7 +1740,7 @@ + # only use EXPLICITF for offload because otherwise we want debugging to be easy + # FOPTIONS += -Qoption,fpp,-P -Qoption,fpp,-c_com=no -allow nofpp_comments + ifdef USE_OPTREPORT +- FOPTIONS += -qopt-report=1 -qopt-report-phase=vec ++ FOPTIONS += -qopt-report=0 -qopt-report-phase=vec + endif + #to avoid compiler crashes on simd directive. e.g .Version 15.0.2.164 Build 20150121 + ifdef USE_NOSIMD +@@ -1748,7 +1748,6 @@ + endif + ifdef USE_OPENMP + FOPTIONS += -qopenmp +- FOPTIONS += -qopt-report-phase=openmp + COPTIONS += -qopenmp + DEFINES+= -DUSE_OPENMP + else +@@ -1759,10 +1758,9 @@ + endif + endif + else +- FOPTIONS += -vec-report6 ++ FOPTIONS += -vec-report0 + ifdef USE_OPENMP + FOPTIONS += -openmp +- FOPTIONS += -openmp-report2 + COPTIONS += -openmp + DEFINES+= -DUSE_OPENMP + endif +@@ -1885,10 +1883,9 @@ + COPTIONS += -qopt-report-phase:openmp + endif + else +- COPTIONS += -vec-report=1 + ifdef USE_OPENMP + COPTIONS += -openmp +- COPTIONS += -openmp-report=2 ++ COPTIONS += -openmp-report=0 + endif + endif + COPTIMIZE = -O3 -- GitLab From 1401b818611d041a21eae310aa329bc03e1b0788 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 20:31:11 +0100 Subject: [PATCH 0547/1311] fx style issues in pscom easyconfigs --- easybuild/easyconfigs/p/pscom/pscom-5.0.43-GCC-4.8.2.eb | 4 ++-- easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-GCC-4.9.2.eb | 4 +++- .../p/pscom/pscom-5.0.44-1-iccifort-2015.1.133.eb | 6 ++++-- easybuild/easyconfigs/p/pscom/pscom-5.0.48-1.eb | 6 ++++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/p/pscom/pscom-5.0.43-GCC-4.8.2.eb b/easybuild/easyconfigs/p/pscom/pscom-5.0.43-GCC-4.8.2.eb index 65a73afe7d..147a4add74 100644 --- a/easybuild/easyconfigs/p/pscom/pscom-5.0.43-GCC-4.8.2.eb +++ b/easybuild/easyconfigs/p/pscom/pscom-5.0.43-GCC-4.8.2.eb @@ -4,8 +4,8 @@ name = 'pscom' version = '5.0.43' homepage = 'http://www.par-tec.com' -description = """ParaStation is a robust and efficient cluster middleware, consisting -of a high-performance communication layer (MPI) and a sophisticated management layer.""" +description = """ParaStation is a robust and efficient cluster middleware, consisting + of a high-performance communication layer (MPI) and a sophisticated management layer.""" toolchain = {'name': 'GCC', 'version': '4.8.2'} diff --git a/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-GCC-4.9.2.eb b/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-GCC-4.9.2.eb index b69d0d92dd..0b3259fa6d 100644 --- a/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-GCC-4.9.2.eb @@ -3,7 +3,9 @@ easyblock = 'ConfigureMake' name = 'pscom' version = '5.0.44-1' homepage = 'http://www.par-tec.com' -description = """ParaStation is a robust and efficient cluster middleware, consisting of a high-performance communication layer (MPI) and a sophisticated management layer.""" +description = """ParaStation is a robust and efficient cluster middleware, consisting + of a high-performance communication layer (MPI) and a sophisticated management layer.""" + toolchain = {'name': 'GCC', 'version': '4.9.2'} source_urls = ['https://github.com/ParaStation/%(name)s/archive/'] diff --git a/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-iccifort-2015.1.133.eb b/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-iccifort-2015.1.133.eb index 7da1e4a7f7..af331b28c2 100644 --- a/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-iccifort-2015.1.133.eb +++ b/easybuild/easyconfigs/p/pscom/pscom-5.0.44-1-iccifort-2015.1.133.eb @@ -2,10 +2,12 @@ easyblock = 'ConfigureMake' name = 'pscom' version = '5.0.44-1' + homepage = 'http://www.par-tec.com' -description = """ParaStation is a robust and efficient cluster middleware, consisting of a high-performance communication layer (MPI) and a sophisticated management layer.""" -toolchain = {'name': 'iccifort', 'version': '2015.1.133'} +description = """ParaStation is a robust and efficient cluster middleware, consisting + of a high-performance communication layer (MPI) and a sophisticated management layer.""" +toolchain = {'name': 'iccifort', 'version': '2015.1.133'} source_urls = ['https://github.com/ParaStation/%(name)s/archive/'] sources = ['%(version)s.zip'] diff --git a/easybuild/easyconfigs/p/pscom/pscom-5.0.48-1.eb b/easybuild/easyconfigs/p/pscom/pscom-5.0.48-1.eb index 13b9a47c54..fc283ffce3 100644 --- a/easybuild/easyconfigs/p/pscom/pscom-5.0.48-1.eb +++ b/easybuild/easyconfigs/p/pscom/pscom-5.0.48-1.eb @@ -4,7 +4,8 @@ name = 'pscom' version = '5.0.48-1' homepage = 'http://www.par-tec.com' -description = "ParaStation is a robust and efficient cluster middleware, consisting of a high-performance communication layer (MPI) and a sophisticated management layer." +description = """ParaStation is a robust and efficient cluster middleware, consisting + of a high-performance communication layer (MPI) and a sophisticated management layer.""" toolchain = {'version': '', 'name': 'dummy'} @@ -16,7 +17,8 @@ builddependencies = [ ] sanity_check_paths = { - 'files': ['include/%(name)s.h', ('lib/libpscom.so', 'lib64/libpscom.so'), ('lib/libpscom4mxm.so', 'lib64/libpscom4mxm.so')], + 'files': ['include/pscom.h', ('lib/libpscom.%s' % SHLIB_EXT, 'lib64/libpscom.%s' % SHLIB_EXT), + ('lib/libpscom4mxm.%s' % SHLIB_EXT, 'lib64/libpscom4mxm.%s' % SHLIB_EXT)], 'dirs': [], } -- GitLab From 5357919d46ac26b8e6d0cfe0025c6502725bb75a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 20:32:41 +0100 Subject: [PATCH 0548/1311] fix whitespace issues & long lines --- .../pyplusplus-20160707-foss-2016a-Python-2.7.11.eb | 1 - .../pyplusplus-20160707-foss-2016a-Python-3.5.1.eb | 1 - .../python-dateutil-2.1-goolf-1.4.10-Python-2.7.3.eb | 3 ++- easybuild/easyconfigs/q/Qt/Qt-4.8.6.eb | 8 ++++---- easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb | 4 ++-- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-2.7.11.eb index 695617390c..8ebd6c8d2e 100644 --- a/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-2.7.11.eb @@ -32,4 +32,3 @@ sanity_check_paths = { options = {'modulename': '%(name)s'} moduleclass = 'tools' - diff --git a/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-3.5.1.eb index 98760a6c19..b72f894f40 100644 --- a/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/pyplusplus/pyplusplus-20160707-foss-2016a-Python-3.5.1.eb @@ -30,4 +30,3 @@ sanity_check_paths = { options = {'modulename': '%(name)s'} moduleclass = 'tools' - diff --git a/easybuild/easyconfigs/p/python-dateutil/python-dateutil-2.1-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/p/python-dateutil/python-dateutil-2.1-goolf-1.4.10-Python-2.7.3.eb index 9f1bdc61f3..1f3dfbd69d 100644 --- a/easybuild/easyconfigs/p/python-dateutil/python-dateutil-2.1-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/python-dateutil/python-dateutil-2.1-goolf-1.4.10-Python-2.7.3.eb @@ -4,7 +4,8 @@ name = "python-dateutil" version = "2.1" homepage = "https://pypi.python.org/pypi/python-dateutil" -description = """The dateutil module provides powerful extensions to the datetime module available in the Python standard library.""" +description = """The dateutil module provides powerful extensions to the datetime module available + in the Python standard library.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.6.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.6.eb index eacf9a8384..48881e75e8 100644 --- a/easybuild/easyconfigs/q/Qt/Qt-4.8.6.eb +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.6.eb @@ -6,11 +6,11 @@ description = "Qt is a comprehensive cross-platform C++ application framework." toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = [ 'http://download.qt.io/official_releases/qt/4.8/%(version)s' ] -sources = [ 'qt-everywhere-opensource-src-%(version)s.tar.gz' ] +source_urls = ['http://download.qt.io/official_releases/qt/4.8/%(version)s'] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.gz'] -configopts = ' -opensource -nomake tests -nomake examples -confirm-license -release' -configopts += ' -shared -no-accessibility -no-sql-mysql -no-sql-sqlite -no-webkit' +configopts = ' -opensource -nomake tests -nomake examples -confirm-license -release' +configopts += ' -shared -no-accessibility -no-sql-mysql -no-sql-sqlite -no-webkit' platform = 'linux-g++-64' moduleclass = 'devel' diff --git a/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-foss-2016a.eb b/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-foss-2016a.eb index e773ad310a..f091886679 100644 --- a/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-foss-2016a.eb +++ b/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-foss-2016a.eb @@ -22,8 +22,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', 'bin/rsem-bam2wig', - 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], + 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', + 'bin/rsem-bam2wig', 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], 'dirs': ['bin/samtools-1.3'], } diff --git a/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-intel-2016b.eb b/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-intel-2016b.eb index 5420a22996..85267f0972 100644 --- a/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-intel-2016b.eb +++ b/easybuild/easyconfigs/r/RSEM/RSEM-1.2.30-intel-2016b.eb @@ -22,8 +22,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', 'bin/rsem-bam2wig', - 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], + 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', + 'bin/rsem-bam2wig', 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], 'dirs': ['bin/samtools-1.3'], } diff --git a/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb index d01f2f9089..e70842c9f5 100644 --- a/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb +++ b/easybuild/easyconfigs/r/RSEM/RSEM-1.3.0-foss-2016b.eb @@ -24,8 +24,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', 'bin/rsem-bam2wig', - 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], + 'files': ['bin/rsem-calculate-expression', 'bin/rsem-plot-model', 'bin/rsem-plot-transcript-wiggles', + 'bin/rsem-bam2wig', 'bin/rsem-generate-data-matrix', 'bin/rsem-run-em', 'bin/convert-sam-for-rsem'], 'dirs': ['bin/samtools-1.3'], } -- GitLab From 623dbaebd8e171c358eb6d245bc48c317ce82d3a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 20:35:19 +0100 Subject: [PATCH 0549/1311] fix long lines in RAxML easyconfigs --- .../r/RAxML/RAxML-7.2.6-goolf-1.4.10-hybrid-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mpi-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mt-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-seq-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-hybrid-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mpi-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mt-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-seq-sse3.eb | 3 ++- .../r/RAxML/RAxML-7.7.5-goolf-1.4.10-hybrid-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mpi-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mt-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-seq-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-hybrid-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mpi-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mt-sse3.eb | 3 ++- .../easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-seq-sse3.eb | 3 ++- 16 files changed, 32 insertions(+), 16 deletions(-) diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-hybrid-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-hybrid-sse3.eb index 985c883441..1eb4b3b846 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-hybrid-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-hybrid-sse3.eb @@ -15,7 +15,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-HYBRID-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mpi-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mpi-sse3.eb index e09f71abf5..7004dce41e 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mpi-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mpi-sse3.eb @@ -15,7 +15,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-MPI-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mt-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mt-sse3.eb index 0fe0530f3a..d7300ce6e9 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mt-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-mt-sse3.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-PTHREADS-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-seq-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-seq-sse3.eb index af08c5c5e5..ee4a21ba93 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-seq-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-goolf-1.4.10-seq-sse3.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-hybrid-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-hybrid-sse3.eb index 0868a2b38e..fe4066ef14 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-hybrid-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-hybrid-sse3.eb @@ -15,7 +15,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-HYBRID-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mpi-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mpi-sse3.eb index 3a1597463c..fbae2547b2 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mpi-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mpi-sse3.eb @@ -15,7 +15,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-MPI-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mt-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mt-sse3.eb index 153acb7424..c9087e258f 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mt-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-mt-sse3.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-PTHREADS-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-seq-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-seq-sse3.eb index e7ee2daf46..fdc9f97544 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-seq-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.2.6-ictce-5.3.0-seq-sse3.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_BZ2] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-hybrid-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-hybrid-sse3.eb index d053b3dc21..1c1435652c 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-hybrid-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-hybrid-sse3.eb @@ -16,7 +16,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-HYBRID-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mpi-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mpi-sse3.eb index 575001db8d..0ccbb936e8 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mpi-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mpi-sse3.eb @@ -16,7 +16,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-MPI-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mt-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mt-sse3.eb index a1fec5b741..dc772a459b 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mt-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-mt-sse3.eb @@ -15,7 +15,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-PTHREADS-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-seq-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-seq-sse3.eb index f253cc9c29..caffbdd4c7 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-seq-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-goolf-1.4.10-seq-sse3.eb @@ -15,7 +15,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-hybrid-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-hybrid-sse3.eb index 7eb0b37f64..05f29e6aa6 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-hybrid-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-hybrid-sse3.eb @@ -16,7 +16,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.HYBRID.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-HYBRID-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-HYBRID-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mpi-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mpi-sse3.eb index 0058765fc5..25dd91ac1d 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mpi-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mpi-sse3.eb @@ -16,7 +16,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.MPI.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-MPI-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-MPI-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mt-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mt-sse3.eb index 86dab359ac..eef4968327 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mt-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-mt-sse3.eb @@ -15,7 +15,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.PTHREADS.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-PTHREADS-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-PTHREADS-SSE3"], diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-seq-sse3.eb b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-seq-sse3.eb index b107d2a11a..89cf1e0f0b 100644 --- a/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-seq-sse3.eb +++ b/easybuild/easyconfigs/r/RAxML/RAxML-7.7.5-ictce-5.3.0-seq-sse3.eb @@ -15,7 +15,8 @@ source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] skipsteps = ['configure', 'install'] -buildopts = '-f Makefile.SSE3.gcc CC="$CC" && mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin' +buildopts = '-f Makefile.SSE3.gcc CC="$CC" && ' +buildopts += "mkdir -p %(installdir)s/bin && cp raxmlHPC-SSE3 %(installdir)s/bin" sanity_check_paths = { 'files': ["bin/raxmlHPC-SSE3"], -- GitLab From 611c237d3dc0b2e4cce6aeee05b9647b156792fe Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 20:57:08 +0100 Subject: [PATCH 0550/1311] trivial whitespace fixes --- easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb | 2 +- .../c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb | 2 +- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.0g-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.1-intel-2015a.eb | 2 +- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2015a.eb | 2 +- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb | 2 +- easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb | 2 +- .../protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb | 2 +- .../protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb | 2 +- .../protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb | 2 +- .../protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb | 2 +- .../protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb | 2 +- .../protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb | 2 +- easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.06.eb | 2 +- easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.06.eb | 2 +- easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2016.03.eb | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb index 9407a6399e..8a34ad1f5e 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.44.eb @@ -13,6 +13,6 @@ source_urls = ['https://developer.nvidia.com/compute/cuda/%(version_major_minor) sources = ['%(namelower)s_%(version)s_linux-run'] -modextravars = { 'CUDA_HOME': '%(installdir)s' } +modextravars = {'CUDA_HOME': '%(installdir)s'} moduleclass = 'system' diff --git a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb index e1484d4027..4a545a7291 100644 --- a/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Caffe/Caffe-rc3-foss-2016a-CUDA-7.5.18-Python-2.7.11.eb @@ -44,7 +44,7 @@ dependencies = [ configopts = '-DBLAS=open' -modextrapaths = {'PYTHONPATH': ['python'] } +modextrapaths = {'PYTHONPATH': ['python']} sanity_check_paths = { 'files': ['bin/caffe'] + diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.0g-goolf-1.5.14.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.0g-goolf-1.5.14.eb index 69c610cd3f..94b4d8c173 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.0g-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.0g-goolf-1.5.14.eb @@ -17,6 +17,6 @@ builddependencies = [('CMake', '2.8.10.2')] sanity_check_paths = { 'files': ["lib/libfreexl.la"], 'dirs': ["lib"] - } +} moduleclass = 'lib' diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.1-intel-2015a.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.1-intel-2015a.eb index 0401395acc..e2833c7203 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.1-intel-2015a.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.1-intel-2015a.eb @@ -17,6 +17,6 @@ builddependencies = [('CMake', '3.2.2')] sanity_check_paths = { 'files': ["lib/libfreexl.la"], 'dirs': ["lib"] - } +} moduleclass = 'lib' diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2015a.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2015a.eb index c38933ad4f..40bff9f910 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2015a.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2015a.eb @@ -17,6 +17,6 @@ builddependencies = [('CMake', '3.4.1')] sanity_check_paths = { 'files': ["lib/libfreexl.la"], 'dirs': ["lib"] - } +} moduleclass = 'lib' diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb index 7b11ad3065..2e9b594a70 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-intel-2016b.eb @@ -17,6 +17,6 @@ builddependencies = [('CMake', '3.7.1')] sanity_check_paths = { 'files': ['lib/libfreexl.a'], 'dirs': [] - } +} moduleclass = 'lib' diff --git a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb index 681a2da8cf..66efa1aea5 100644 --- a/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb +++ b/easybuild/easyconfigs/i/I-TASSER/I-TASSER-4.2.eb @@ -25,6 +25,6 @@ sanity_check_paths = { # You may find it desirable to put this variable in the module file. # The command to do so has been put here (commented out) as a convenience. -# modextravars = { 'IMINTASSERDB' : '/path/to/databases/I-TASSER/%(version)s' } +# modextravars = {'IMINTASSERDB': '/path/to/databases/I-TASSER/%(version)s'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb index 986362ad06..3027748d68 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-2.7.11.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb index fbb897d434..fb8104961b 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.0.2-foss-2016a-Python-3.5.1.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb index 8512c8ff8b..1f800a9ecb 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-2.7.12.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb index c25cad0fae..14ca314505 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-foss-2016b-Python-3.5.2.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb index 2dd5db9c4e..fd34141ef9 100755 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-2.7.12.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb index fa54b7dce0..51988758fd 100644 --- a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.2.0-intel-2016b-Python-3.5.2.eb @@ -24,6 +24,6 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -options = {'modulename': 'google.protobuf' } +options = {'modulename': 'google.protobuf'} moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.06.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.06.eb index de900f73b2..01689413cc 100644 --- a/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.06.eb @@ -7,7 +7,7 @@ homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' description = "Szip compression software, providing lossless compression of scientific data" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} -toolchainopts = {'pic': True, } +toolchainopts = {'pic': True} source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.11.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.11.eb index 58f5db7a33..2c00792f81 100644 --- a/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-CrayGNU-2015.11.eb @@ -7,7 +7,7 @@ homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' description = "Szip compression software, providing lossless compression of scientific data" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} -toolchainopts = {'pic': True, } +toolchainopts = {'pic': True} source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.06.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.06.eb index 9daa7bba81..ab2a54c1b6 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.06.eb @@ -9,7 +9,7 @@ description = """zlib is designed to be a free, general-purpose, legally unencum computer hardware and operating system.""" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} -toolchainopts = {'pic': True, } +toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.11.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.11.eb index ec75812a65..8b079f0d60 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2015.11.eb @@ -9,7 +9,7 @@ description = """zlib is designed to be a free, general-purpose, legally unencum computer hardware and operating system.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} -toolchainopts = {'pic': True, } +toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2016.03.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2016.03.eb index 20e9ee0821..8986e89a6d 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.8-CrayGNU-2016.03.eb @@ -9,7 +9,7 @@ description = """zlib is designed to be a free, general-purpose, legally unencum computer hardware and operating system.""" toolchain = {'name': 'CrayGNU', 'version': '2016.03'} -toolchainopts = {'pic': True, } +toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] -- GitLab From 6382f6cedc8f53da4f823ca5ed5e545ac5967c0b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 21:06:40 +0100 Subject: [PATCH 0551/1311] sync commented out OpenSSL specs in Python easyconfigs --- .../easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb | 4 +++- .../easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb | 4 +++- .../easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb | 5 +++-- .../p/Python/Python-2.7.11-GCC-4.9.3-2.25-bare.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb | 5 +++-- .../p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb | 5 +++-- .../p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb | 5 +++-- easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb | 4 +++- easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb | 4 +++- 40 files changed, 120 insertions(+), 55 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb index ace4711442..bbbadf3e32 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-goolf-1.4.10-bare.eb @@ -19,7 +19,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb index b1bdb4f782..c5675d8144 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.2.0-bare.eb @@ -19,7 +19,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb index cc84b14111..9cb0c165c6 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.5.6-ictce-5.3.0-bare.eb @@ -19,7 +19,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb index f325e4238c..0cacb5b908 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.0.0a', '', ('GCC', '4.9.2')), # required for pycrypto - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb index 1ba18083e7..c4b91910db 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.0.0a', '', ('GNU', '4.9.3-2.25')), # required for pycrypto - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb index e615c89354..6cb74160de 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb index 7d445cd6ba..2bf2b3c0c7 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.0.0a', '', ('GCC', '4.7.2')), # required for pycrypto - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb index 55f10df08f..d616f3a678 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.0.0a', '', ('GCC', '4.8.4')), # required for pycrypto - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb index 017e1ecaae..3bba96e78d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.0.0a', '', ('GCC', '4.9.2')), # required for pycrypto - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb index 276aa8a0f3..5578abe094 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb @@ -22,8 +22,9 @@ dependencies = [ ('ncurses', '5.9'), ('SQLite', '3.8.10.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1m'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1m'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-GCC-4.9.3-2.25-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-GCC-4.9.3-2.25-bare.eb index 78953148b0..7248257795 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-GCC-4.9.3-2.25-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-GCC-4.9.3-2.25-bare.eb @@ -20,8 +20,9 @@ dependencies = [ ('ncurses', '6.0', '', ('GCCcore', '4.9.3')), ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index c5fe86070e..7ca3e0d30a 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.10.0'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), # required for pycrypto - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb index cd19e3b902..90aff56172 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb index 917a362739..540888954b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb index fa2f05cdb9..66287172c5 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb index 914f184b70..49ed840807 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb index 8b707bfd80..4fa82a32c1 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb @@ -25,8 +25,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', versionsuffix), ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb index 711240b058..36a33282cc 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb @@ -23,8 +23,9 @@ dependencies = [ ('SQLite', '3.9.2'), ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), - # ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's - # nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb index bb77d83c1d..9cf2d30627 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb index 0cda45ec7d..0d7187668b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb index 4ef1bfeaeb..1f04581f6c 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb index 12a347ef6d..d6acb56cd0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb index 6265b2329d..0a6a82b9fe 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb index a22416f124..78b8331206 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb index d9a96be894..8bc486f394 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb @@ -21,7 +21,9 @@ dependencies = [ ('libreadline', '6.2'), ('ncurses', '5.9'), ('SQLite', '3.8.5'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb index 48e0894d30..f91d5d9be1 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb index e6e366e13c..1589ad3044 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb index 384ccabeee..cc438001ba 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb index 91008ef87d..8a3b97a885 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb index 9f687fe594..ff8c4dd1f7 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb index 5f8e6aeeb0..400936afa7 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb index 95e0f82630..535df5f445 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb @@ -26,7 +26,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb index 18384a6b3c..15167c0da9 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb index dc5adffe37..5da8fad6cd 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb index e164d75eb8..530b345146 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb index 7fc679ddfb..1f4aa039b5 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.7'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb index 5b5ea68742..d79d72ab00 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.3.2-goolf-1.4.10.eb @@ -20,7 +20,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb index 8ba5022eb1..cacde6a179 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.3.2-ictce-5.3.0.eb @@ -22,7 +22,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.2'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1f'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1f'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb index 948d875463..85a061b4b2 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb index db1c3e7576..43f98bbf39 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb @@ -23,7 +23,9 @@ dependencies = [ ('zlib', '1.2.8'), ('libreadline', '6.3'), ('ncurses', '5.9'), - # ('OpenSSL', '1.0.1g'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1g'), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -- GitLab From 9177dc08613b45e38b6ae052fd1f0ff3cf3d493c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 21:07:08 +0100 Subject: [PATCH 0552/1311] fix more long lines --- .../p/paycheck/paycheck-1.0.2-goolf-1.4.10-Python-2.7.3.eb | 4 +++- .../p/paycheck/paycheck-1.0.2-ictce-5.3.0-Python-2.7.3.eb | 5 +++-- .../p/petsc4py/petsc4py-3.3-goolf-1.4.10-Python-2.7.3.eb | 2 +- .../p/petsc4py/petsc4py-3.3-ictce-5.3.0-Python-2.7.3.eb | 3 +-- .../prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb | 3 ++- .../prompt-toolkit-1.0.3-foss-2016a-Python-2.7.11.eb | 3 ++- .../prompt-toolkit-1.0.3-foss-2016a-Python-3.5.1.eb | 3 ++- .../prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb | 3 ++- .../prompt-toolkit-1.0.6-intel-2016b-Python-2.7.12.eb | 3 ++- .../prompt-toolkit-1.0.6-intel-2016b-Python-3.5.2.eb | 3 ++- 10 files changed, 20 insertions(+), 12 deletions(-) diff --git a/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-goolf-1.4.10-Python-2.7.3.eb index 67abbe4783..ba44c00e4e 100644 --- a/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-goolf-1.4.10-Python-2.7.3.eb @@ -4,7 +4,9 @@ name = 'paycheck' version = '1.0.2' homepage = 'https://pypi.python.org/pypi/paycheck/' -description = """PayCheck is a half-baked implementation of ScalaCheck, which itself is an implementation of QuickCheck for Haskell. PayCheck is useful for defining a specification of what a function should do, rather than testing its results for a given input.""" +description = """PayCheck is a half-baked implementation of ScalaCheck, which itself is an implementation of + QuickCheck for Haskell. PayCheck is useful for defining a specification of what a function should do, + rather than testing its results for a given input.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-ictce-5.3.0-Python-2.7.3.eb index 9fdde70731..bead17f746 100644 --- a/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/paycheck/paycheck-1.0.2-ictce-5.3.0-Python-2.7.3.eb @@ -4,8 +4,9 @@ name = 'paycheck' version = '1.0.2' homepage = 'https://pypi.python.org/pypi/paycheck/' -description = """PayCheck is a half-baked implementation of ScalaCheck, which itself is an implementation of QuickCheck for Haskell. - PayCheck is useful for defining a specification of what a function should do, rather than testing its results for a given input.""" +description = """PayCheck is a half-baked implementation of ScalaCheck, which itself is an implementation of + QuickCheck for Haskell. PayCheck is useful for defining a specification of what a function should do, + rather than testing its results for a given input.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-goolf-1.4.10-Python-2.7.3.eb index 0387cd385f..f2d716e0cd 100644 --- a/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-goolf-1.4.10-Python-2.7.3.eb @@ -4,7 +4,7 @@ name = "petsc4py" version = "3.3" homepage = 'https://code.google.com/p/petsc4py/' -description = """petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation.""" +description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation." toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-ictce-5.3.0-Python-2.7.3.eb index 50d6cb2145..d31fcf86b6 100644 --- a/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/petsc4py/petsc4py-3.3-ictce-5.3.0-Python-2.7.3.eb @@ -4,8 +4,7 @@ name = "petsc4py" version = "3.3" homepage = 'https://code.google.com/p/petsc4py/' -description = """petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation.""" - +description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation." toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb index 0dc0fbea27..035c739fdd 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.13-intel-2016b-Python-2.7.12.eb @@ -5,7 +5,8 @@ version = '1.0.13' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'intel', 'version': '2016b'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-2.7.11.eb index fe4231de3b..4c956fc8b1 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-2.7.11.eb @@ -5,7 +5,8 @@ version = '1.0.3' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-3.5.1.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-3.5.1.eb index 4b1aefd0e6..83eb4807ee 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-3.5.1.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.3-foss-2016a-Python-3.5.1.eb @@ -5,7 +5,8 @@ version = '1.0.3' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb index e6261f564a..7ba652badd 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-foss-2016b-Python-2.7.12.eb @@ -5,7 +5,8 @@ version = '1.0.6' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'foss', 'version': '2016b'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-2.7.12.eb index a4fd060e9c..dc44707f0f 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-2.7.12.eb @@ -5,7 +5,8 @@ version = '1.0.6' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'intel', 'version': '2016b'} diff --git a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-3.5.2.eb index 6c89475fe0..1e7549ab87 100644 --- a/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/p/prompt-toolkit/prompt-toolkit-1.0.6-intel-2016b-Python-3.5.2.eb @@ -5,7 +5,8 @@ version = '1.0.6' versionsuffix = '-Python-%(pyver)s' homepage = 'https://github.com/jonathanslenders/python-prompt-toolkit' -description = """prompt_toolkit is a Python library for building powerful interactive command lines and terminal applications.""" +description = """prompt_toolkit is a Python library for building powerful interactive command lines and + terminal applications.""" toolchain = {'name': 'intel', 'version': '2016b'} -- GitLab From d0561aeac63524671642b317cfbe1135932606d7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 21:16:17 +0100 Subject: [PATCH 0553/1311] fix long lines in ParMETIS easyconfigs --- .../p/ParMETIS/ParMETIS-3.1.1-goolf-1.4.10.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-3.1.1-ictce-5.3.0.eb | 11 +++++------ .../p/ParMETIS/ParMETIS-3.2.0-goolf-1.4.10.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-3.2.0-ictce-6.2.5.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.2-goolf-1.4.10.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.2-ictce-5.3.0.eb | 11 +++++------ .../p/ParMETIS/ParMETIS-4.0.3-foss-2016a.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-gimkl-2.11.5.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-goolf-1.4.10.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-ictce-5.5.0.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-intel-2014b.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-intel-2015a.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-intel-2015b.eb | 10 +++++----- .../p/ParMETIS/ParMETIS-4.0.3-intel-2016a.eb | 10 +++++----- 14 files changed, 70 insertions(+), 72 deletions(-) diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-goolf-1.4.10.eb index 8183de649d..c1a6599161 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-goolf-1.4.10.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '3.1.1' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-ictce-5.3.0.eb index 11db9fe038..f11fa30bf5 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.1.1-ictce-5.3.0.eb @@ -2,12 +2,11 @@ name = 'ParMETIS' version = '3.1.1' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" - +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-goolf-1.4.10.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-goolf-1.4.10.eb index 5223c55c4b..da4fa31fda 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-goolf-1.4.10.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '3.2.0' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-ictce-6.2.5.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-ictce-6.2.5.eb index d331f06b60..0becabf505 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-3.2.0-ictce-6.2.5.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '3.2.0' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'ictce', 'version': '6.2.5'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goolf-1.4.10.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goolf-1.4.10.eb index f4413be294..36ec81e338 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goolf-1.4.10.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.2' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-ictce-5.3.0.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-ictce-5.3.0.eb index a32790b7f1..e92565e46a 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-ictce-5.3.0.eb @@ -2,12 +2,11 @@ name = 'ParMETIS' version = '4.0.2' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" - +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2016a.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2016a.eb index 6134d068c9..cbbcc0a04a 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2016a.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2016a.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-gimkl-2.11.5.eb index c7f412f769..6ed756b305 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-gimkl-2.11.5.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'gimkl', 'version': '2.11.5'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-goolf-1.4.10.eb index ebbc3db5a2..18b94b4475 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-goolf-1.4.10.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-ictce-5.5.0.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-ictce-5.5.0.eb index db08a4e643..07bf0cde29 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-ictce-5.5.0.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2014b.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2014b.eb index 1521fb5934..f8d63fb067 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2014b.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2014b.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015a.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015a.eb index 9212c66919..c2177256c3 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015a.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015b.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015b.eb index 3487dd6842..b323ea3886 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015b.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2015b.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2016a.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2016a.eb index d1d34fb057..ddb7b34451 100644 --- a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2016a.eb +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2016a.eb @@ -2,11 +2,11 @@ name = 'ParMETIS' version = '4.0.3' homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' -description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, - meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes - routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in - ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning - schemes.""" +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'usempi': True, 'pic': True} -- GitLab From 99a05b9a1f4f368a50b3f7e054a57b733283f151 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 21:35:09 +0100 Subject: [PATCH 0554/1311] fix long lines in PSI easyconfigs --- easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0-mt.eb | 3 ++- easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0-mt.eb | 3 ++- easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0-mt.eb | 3 ++- easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0.eb | 3 ++- .../p/PSI/PSI-4.0b5-intel-2015a-mt-maxam7-Python-2.7.10.eb | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0-mt.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0-mt.eb index 528a6728be..33bdd4e669 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0-mt.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0-mt.eb @@ -17,7 +17,8 @@ sources = ['%(namelower)s%(version)s.tar.gz'] patches = [ 'PSI-4.0b4-mpi.patch', 'PSI-4.0b4-thread-pool.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0.eb index 674a15f04b..300abe34c8 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b4-ictce-5.3.0.eb @@ -15,7 +15,8 @@ sources = ['%(namelower)s%(version)s.tar.gz'] patches = [ 'PSI-4.0b4-mpi.patch', 'PSI-4.0b4-thread-pool.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0-mt.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0-mt.eb index c680330c40..a35b218f7d 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0-mt.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0-mt.eb @@ -18,7 +18,8 @@ patches = [ 'PSI-4.0b5-failed-test.patch', # the test works but it segfaults on exit 'PSI-4.0b5-thread-pool.patch', 'PSI-4.0b5-new-plugin.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0.eb index 288d0bd7ab..6444ef03e0 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.3.0.eb @@ -17,7 +17,8 @@ patches = [ 'PSI-4.0b5-failed-test.patch', # the test works but it segfaults on exit 'PSI-4.0b5-thread-pool.patch', 'PSI-4.0b5-new-plugin.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0-mt.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0-mt.eb index e65fbf7805..d50c1e4431 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0-mt.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0-mt.eb @@ -18,7 +18,8 @@ patches = [ 'PSI-4.0b5-failed-test.patch', # the test works but it segfaults on exit 'PSI-4.0b5-thread-pool.patch', 'PSI-4.0b5-new-plugin.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0.eb index 7be55fa034..d969aa2c91 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-ictce-5.5.0.eb @@ -17,7 +17,8 @@ patches = [ 'PSI-4.0b5-failed-test.patch', # the test works but it segfaults on exit 'PSI-4.0b5-thread-pool.patch', 'PSI-4.0b5-new-plugin.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-intel-2015a-mt-maxam7-Python-2.7.10.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-intel-2015a-mt-maxam7-Python-2.7.10.eb index e299f3c676..c3469f5c4d 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b5-intel-2015a-mt-maxam7-Python-2.7.10.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b5-intel-2015a-mt-maxam7-Python-2.7.10.eb @@ -19,7 +19,8 @@ patches = [ 'PSI-4.0b5-failed-test.patch', # the test works but it segfaults on exit 'PSI-4.0b5-thread-pool.patch', 'PSI-4.0b5-new-plugin.patch', - 'PSI-%(version)s_python-config.patch', # workaround for broken python-config due to full path to bin/python being used + # workaround for broken python-config due to full path to bin/python being used + 'PSI-%(version)s_python-config.patch', ] python = 'Python' -- GitLab From f4d0a3ef2d2040908622d886f7ed6b717caae073 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 21:35:26 +0100 Subject: [PATCH 0555/1311] minor style fixes in PSORTb and Pasha easyconfigs --- .../p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb | 2 +- easybuild/easyconfigs/p/Pasha/Pasha-1.0.5-ictce-5.3.0.eb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb index b5baf3a55c..99940a8a08 100644 --- a/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/p/PSORTb/PSORTb-3.0.4-foss-2016a-Perl-5.22.1.eb @@ -31,7 +31,7 @@ preconfigopts = "export PSORTROOT=%(installdir)s && " prebuildopts = 'sed -i "s/CC = cc/CC ?= gcc/" bio-tools-psort-modhmm/Makefile && ' postinstallcmds = [ - "cp -r psort/* %(installdir)s/.", + "cp -r psort/* %(installdir)s/.", ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/Pasha/Pasha-1.0.5-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Pasha/Pasha-1.0.5-ictce-5.3.0.eb index a72485e97d..161ca2d383 100644 --- a/easybuild/easyconfigs/p/Pasha/Pasha-1.0.5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Pasha/Pasha-1.0.5-ictce-5.3.0.eb @@ -15,8 +15,8 @@ sources = [SOURCE_TAR_GZ] patches = [ 'intelmpi.patch', - # needed since this still relies on gnu specific includes from libstdc++ which changed in latest version of libstdc++ - # since 1.0.5 pasha tries to use 'backward/' instead of 'ext/' but this might fail on some systems. + # needed since this still relies on gnu specific includes from libstdc++ which changed in latest version + # of libstdc++ since 1.0.5 pasha tries to use 'backward/' instead of 'ext/' but this might fail on some systems. 'old-libstdc++-hash_fun-map-set_pasha-1.0.5.patch', ] -- GitLab From 51157b17a08bfb23ba488cf7144eb84bd73e3146 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 22:21:15 +0100 Subject: [PATCH 0556/1311] moar style fixes in various easyconfigs --- .../c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb | 2 +- .../m/MVAPICH2/MVAPICH2-1.7-GCC-4.6.3-hwloc-chkpt.eb | 2 +- .../easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.06.eb | 2 +- .../easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb | 2 +- .../easyconfigs/n/netCDF/netCDF-4.3.2-intel-2015b.eb | 5 +++-- .../o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb | 8 +++----- easybuild/easyconfigs/o/ORCA/ORCA-2_9_1-linux_x86-64.eb | 4 ++-- .../o/ORCA/ORCA-3_0_0-linux_x86-64_openmpi_165.eb | 4 ++-- easybuild/easyconfigs/o/ORCA/ORCA-3_0_2-linux_x86-64.eb | 4 ++-- easybuild/easyconfigs/o/ORCA/ORCA-3_0_3-linux_x86-64.eb | 4 ++-- .../o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb | 2 +- easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb | 8 ++++---- .../o/OpenMPI/OpenMPI-1.10.2-GCC-6.1.0-2.27.eb | 4 ++-- .../o/OpenMPI/OpenMPI-1.10.3-GCC-6.1.0-2.27.eb | 4 ++-- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb | 4 ++-- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb | 4 ++-- .../o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb | 4 ++-- .../OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb | 4 ++-- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb | 2 +- .../OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 4 ++-- .../PCMSolver-20160205-intel-2016a-Python-2.7.11.eb | 3 ++- easybuild/easyconfigs/p/PCRE2/PCRE2-10.21-foss-2016a.eb | 2 +- .../p/PETSc/PETSc-3.3-p2-goolf-1.4.10-Python-2.7.3.eb | 4 ++-- .../p/PETSc/PETSc-3.3-p2-ictce-5.3.0-Python-2.7.3.eb | 5 ++--- .../p/PETSc/PETSc-3.5.1-intel-2014b-Python-2.7.8.eb | 4 ++-- easybuild/easyconfigs/p/PGI/PGI-15.10-GCC-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.2-2.25.eb | 3 +-- easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-foss-2016a.eb | 4 ++-- .../easyconfigs/p/PHYLIP/PHYLIP-3.696-intel-2016a.eb | 4 ++-- .../PSI-4.0b6-20160201-intel-2016a-mt-Python-2.7.11.eb | 2 -- 31 files changed, 54 insertions(+), 60 deletions(-) diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb index edd7b1aa5d..2db5248504 100644 --- a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -28,7 +28,7 @@ modextrapaths = { sanity_check_paths = { 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", - "bin_rh_linux64/wb_view",], + "bin_rh_linux64/wb_view"], 'dirs': ["resources"] } diff --git a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.7-GCC-4.6.3-hwloc-chkpt.eb b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.7-GCC-4.6.3-hwloc-chkpt.eb index 0d8dbcbf47..6706bb83e5 100644 --- a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.7-GCC-4.6.3-hwloc-chkpt.eb +++ b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.7-GCC-4.6.3-hwloc-chkpt.eb @@ -21,7 +21,7 @@ dependencies = [ builddependencies = [('Bison', '2.5')] -osdependencies = [('libcr-dev', 'blcr-devel'),] +osdependencies = [('libcr-dev', 'blcr-devel')] # enable building of MPE routines withmpe = True diff --git a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.06.eb b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.06.eb index a33090c4b6..81fb2b9ec4 100644 --- a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.06.eb @@ -14,7 +14,7 @@ source_urls = ['https://www-user.tu-chemnitz.de/~potts/nfft/download/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('fftw/3.3.4.3', EXTERNAL_MODULE), + ('fftw/3.3.4.3', EXTERNAL_MODULE), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb index c9ebfcb9f5..127aea160a 100644 --- a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb @@ -14,7 +14,7 @@ source_urls = ['https://www-user.tu-chemnitz.de/~potts/nfft/download/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('fftw/3.3.4.5', EXTERNAL_MODULE), + ('fftw/3.3.4.3', EXTERNAL_MODULE), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.3.2-intel-2015b.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.3.2-intel-2015b.eb index 52365b33f3..126cbec2e8 100644 --- a/easybuild/easyconfigs/n/netCDF/netCDF-4.3.2-intel-2015b.eb +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.3.2-intel-2015b.eb @@ -26,9 +26,10 @@ builddependencies = [ ] # make sure both static and shared libs are built +common_configopts = "-DCURL_LIBRARY=$EBROOTCURL/lib/libcurl.%s -DCURL_INCLUDE_DIR=$EBROOTCURL/include" % SHLIB_EXT configopts = [ - "-DCURL_LIBRARY=$EBROOTCURL/lib/libcurl.%s -DCURL_INCLUDE_DIR=$EBROOTCURL/include -DBUILD_SHARED_LIBS=ON" % SHLIB_EXT, - "-DCURL_LIBRARY=$EBROOTCURL/lib/libcurl.%s -DCURL_INCLUDE_DIR=$EBROOTCURL/include -DBUILD_SHARED_LIBS=OFF" % SHLIB_EXT, + common_configopts + " -DBUILD_SHARED_LIBS=ON", + common_configopts + " -DBUILD_SHARED_LIBS=OFF", ] moduleclass = 'data' diff --git a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb index fbe8f5cfab..84d9f1db9a 100644 --- a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb @@ -5,17 +5,15 @@ version = '1.2.9' versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.grenoble.prabi.fr/trac/OBITools' -description = """ The OBITools programs aims to help you to manipulate various data and sequence files in a convenient way using - the Unix command line interface. They follow the standard Unix interface for command line program, allowing to chain a set of - commands using the pipe mecanism. -""" +description = """The OBITools programs aims to help you to manipulate various data and sequence files in a + convenient way using the Unix command line interface. They follow the standard Unix interface for command line + program, allowing to chain a set of commands using the pipe mecanism. """ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = [PYPI_SOURCE] sources = [SOURCE_TAR_GZ] - dependencies = [ ('Python', '2.7.11'), ('Cython', '0.24.1', versionsuffix), diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-2_9_1-linux_x86-64.eb b/easybuild/easyconfigs/o/ORCA/ORCA-2_9_1-linux_x86-64.eb index a85c46d3f0..95182fb7f6 100644 --- a/easybuild/easyconfigs/o/ORCA/ORCA-2_9_1-linux_x86-64.eb +++ b/easybuild/easyconfigs/o/ORCA/ORCA-2_9_1-linux_x86-64.eb @@ -30,8 +30,8 @@ sanity_check_paths = { } modextravars = { - "SLURM_CPU_BIND" : "none", - "RSH_COMMAND" : "ssh -x", + "SLURM_CPU_BIND": "none", + "RSH_COMMAND": "ssh -x", } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_0-linux_x86-64_openmpi_165.eb b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_0-linux_x86-64_openmpi_165.eb index 685a061dbd..a2fb635e48 100644 --- a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_0-linux_x86-64_openmpi_165.eb +++ b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_0-linux_x86-64_openmpi_165.eb @@ -32,8 +32,8 @@ sanity_check_paths = { } modextravars = { - "SLURM_CPU_BIND" : "none", - "RSH_COMMAND" : "ssh -x", + "SLURM_CPU_BIND": "none", + "RSH_COMMAND": "ssh -x", } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_2-linux_x86-64.eb b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_2-linux_x86-64.eb index 7d27755495..9cd49048ac 100644 --- a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_2-linux_x86-64.eb +++ b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_2-linux_x86-64.eb @@ -31,8 +31,8 @@ sanity_check_paths = { } modextravars = { - "SLURM_CPU_BIND" : "none", - "RSH_COMMAND" : "ssh -x", + "SLURM_CPU_BIND": "none", + "RSH_COMMAND": "ssh -x", } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_3-linux_x86-64.eb b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_3-linux_x86-64.eb index 6a633a98ef..82c2d0b54b 100644 --- a/easybuild/easyconfigs/o/ORCA/ORCA-3_0_3-linux_x86-64.eb +++ b/easybuild/easyconfigs/o/ORCA/ORCA-3_0_3-linux_x86-64.eb @@ -31,8 +31,8 @@ sanity_check_paths = { } modextravars = { - "SLURM_CPU_BIND" : "none", - "RSH_COMMAND" : "ssh -x", + "SLURM_CPU_BIND": "none", + "RSH_COMMAND": "ssh -x", } moduleclass = 'chem' diff --git a/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb b/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb index e3cd54d745..26fbd9394a 100644 --- a/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb +++ b/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'usempi': True, 'opt': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=%(version)s/' ] +source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=%(version)s/'] builddependencies = [ ('Bison', '3.0.4'), diff --git a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb index 0292e9d416..1495f695f6 100644 --- a/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenCV/OpenCV-3.1.0-foss-2016b.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = [ 'https://github.com/Itseez/opencv/archive/', - #The Hash is version dependent! see 3rdparty/ippicv/downloader.cmake + # the hash is version dependent! see 3rdparty/ippicv/downloader.cmake 'https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv', ] @@ -40,7 +40,7 @@ dependencies = [ ('GTK+', '2.24.31'), ] -#The destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake +# the destination directory is "linux-" see 3rdparty/ippicv/downloader.cmake ippicv_dir = '3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/' preconfigopts = "mkdir -p %s && cp -a ../*.tgz %s && " % (ippicv_dir, ippicv_dir) @@ -65,8 +65,8 @@ configopts += '-DWITH_CUDA=OFF ' postinstallcmds = ["cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.* %(installdir)s/lib"] sanity_check_paths = { - 'files': ['lib/libopencv_core.%s' % SHLIB_EXT ] + - ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT ] + + 'files': ['lib/libopencv_core.%s' % SHLIB_EXT] + + ['lib/python%%(pyshortver)s/site-packages/cv2.%s' % SHLIB_EXT] + ['lib/libippicv.a'] + ['bin/opencv_%s' % x for x in ['annotation', 'createsamples', 'traincascade']], 'dirs': ['include'] diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-GCC-6.1.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-GCC-6.1.0-2.27.eb index ac26d4212f..422607a28b 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-GCC-6.1.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.2-GCC-6.1.0-2.27.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'GCC', 'version': '6.1.0-2.27'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.3')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_cxx", "mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte", "vt", "vt-hyb", "vt-mpi", "vt-mpi-unify"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.3-GCC-6.1.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.3-GCC-6.1.0-2.27.eb index af22c5f516..ded2f408ed 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.3-GCC-6.1.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.10.3-GCC-6.1.0-2.27.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'GCC', 'version': '6.1.0-2.27'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.3')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_cxx", "mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte", "vt", "vt-hyb", "vt-mpi", "vt-mpi-unify"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb index e0524fac95..ced6423707 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.0-GCC-5.2.0.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'GCC', 'version': '5.2.0'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.3')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] # VampirTrace is no longer used : https://www.open-mpi.org/community/lists/announce/2016/07/0085.php libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb index fe84bc7c6d..dccf9a16b7 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-GCC-6.2.0-2.27.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'GCC', 'version': '6.2.0-2.27'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.4')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb index 109e8a754d..bc5a7af11f 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-gcccuda-2016.10.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'gcccuda', 'version': '2016.10'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.4')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--with-cuda=$CUDA_HOME ' # CUDA-aware build; N.B. --disable-dlopen is incompatible # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb index d395a7e376..79bff619c0 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.1-iccifort-2017.1.132-GCC-5.4.0-2.26.eb @@ -10,7 +10,7 @@ toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-5.4.0-2.26'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] dependencies = [('hwloc', '1.11.4')] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb index 171f894a0d..3e05777f37 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27.eb @@ -21,7 +21,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb index 66e6aa8b1b..b2aa187ae0 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -8,7 +8,7 @@ description = """The Open MPI Project is an open source MPI-2 implementation.""" toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} -source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads',] +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] sources = [SOURCELOWER_TAR_GZ] checksums = ['886698becc5bea8c151c0af2074b8392'] @@ -20,7 +20,7 @@ configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading # needed for --with-verbs -osdependencies = [('libibverbs-dev', 'libibverbs-devel'),] +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/PCMSolver/PCMSolver-20160205-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PCMSolver/PCMSolver-20160205-intel-2016a-Python-2.7.11.eb index 861cd9d963..945b858a59 100644 --- a/easybuild/easyconfigs/p/PCMSolver/PCMSolver-20160205-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PCMSolver/PCMSolver-20160205-intel-2016a-Python-2.7.11.eb @@ -27,7 +27,8 @@ builddependencies = [ ('Eigen', '3.2.7'), ] -configopts = '-DCMAKE_BUILD_TYPE=Release -DEIGEN3_ROOT=$EBROOTEIGEN -DCMAKE_CXX_FLAGS="$LIBLAPACK_MT -DEIGEN_USE_MKL_ALL"' +configopts = "-DCMAKE_BUILD_TYPE=Release -DEIGEN3_ROOT=$EBROOTEIGEN " +configopts += '-DCMAKE_CXX_FLAGS="$LIBLAPACK_MT -DEIGEN_USE_MKL_ALL"' separate_build_dir = True diff --git a/easybuild/easyconfigs/p/PCRE2/PCRE2-10.21-foss-2016a.eb b/easybuild/easyconfigs/p/PCRE2/PCRE2-10.21-foss-2016a.eb index 03cdf3c1c3..12016d01cb 100644 --- a/easybuild/easyconfigs/p/PCRE2/PCRE2-10.21-foss-2016a.eb +++ b/easybuild/easyconfigs/p/PCRE2/PCRE2-10.21-foss-2016a.eb @@ -22,4 +22,4 @@ sanity_check_paths = { 'dirs': [], } -moduleclass = 'devel' \ No newline at end of file +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-goolf-1.4.10-Python-2.7.3.eb index 56139c42c1..f00e26a484 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-goolf-1.4.10-Python-2.7.3.eb @@ -3,8 +3,8 @@ version = "3.3-p2" versionsuffix = '-Python-2.7.3' homepage = 'http://www.mcs.anl.gov/petsc' -description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution -of scientific applications modeled by partial differential equations.""" +description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the + scalable (parallel) solution of scientific applications modeled by partial differential equations.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-ictce-5.3.0-Python-2.7.3.eb index 193d113315..deb2a22bc2 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.3-p2-ictce-5.3.0-Python-2.7.3.eb @@ -3,9 +3,8 @@ version = "3.3-p2" versionsuffix = '-Python-2.7.3' homepage = 'http://www.mcs.anl.gov/petsc' -description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution - of scientific applications modeled by partial differential equations.""" - +description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the + scalable (parallel) solution of scientific applications modeled by partial differential equations.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.5.1-intel-2014b-Python-2.7.8.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.5.1-intel-2014b-Python-2.7.8.eb index 72b0ef23a9..15e5de651c 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.5.1-intel-2014b-Python-2.7.8.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.5.1-intel-2014b-Python-2.7.8.eb @@ -3,8 +3,8 @@ version = "3.5.1" versionsuffix = '-Python-2.7.8' homepage = 'http://www.mcs.anl.gov/petsc' -description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution - of scientific applications modeled by partial differential equations.""" +description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the + scalable (parallel) solution of scientific applications modeled by partial differential equations.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'usempi': True, 'pic': True} diff --git a/easybuild/easyconfigs/p/PGI/PGI-15.10-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-15.10-GCC-4.9.3-2.25.eb index 49864adcd3..099d8a684a 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-15.10-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-15.10-GCC-4.9.3-2.25.eb @@ -19,7 +19,6 @@ dependencies = [ ] # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "pgi", "license.dat") +license_file = HOME + '/licenses/pgi/license.dat' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.2-2.25.eb index d3260f31f8..4414621a52 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.2-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.2-2.25.eb @@ -15,7 +15,6 @@ versionsuffix = '-%s-%s' % (gnu, gnuver) dependencies = [(gnu, gnuver)] # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "pgi", "license.dat") +license_file = HOME + '/licenses/pgi/license.dat' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.3-2.25.eb index 6589eba972..f9744db69b 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-15.7-GNU-4.9.3-2.25.eb @@ -15,7 +15,6 @@ versionsuffix = '-%s-%s' % (gnu, gnuver) dependencies = [(gnu, gnuver)] # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "pgi", "license.dat") +license_file = HOME + '/licenses/pgi/license.dat' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-foss-2016a.eb b/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-foss-2016a.eb index 90aea78df7..6ded928e61 100644 --- a/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-foss-2016a.eb +++ b/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-foss-2016a.eb @@ -16,8 +16,8 @@ buildopts = '-Csrc -fMakefile.unx all && make -Csrc -fMakefile.unx install' files_to_copy = [(['exe/*'], 'bin'), (['src/libdrawgram.so', 'src/libdrawtree.so'], 'lib')] sanity_check_paths = { - 'files': ['lib/libdrawgram.so', 'lib/libdrawtree.so'], - 'dirs': ['bin'], + 'files': ['lib/libdrawgram.so', 'lib/libdrawtree.so'], + 'dirs': ['bin'], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-intel-2016a.eb b/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-intel-2016a.eb index 312062d04f..8fca37e015 100644 --- a/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-intel-2016a.eb +++ b/easybuild/easyconfigs/p/PHYLIP/PHYLIP-3.696-intel-2016a.eb @@ -16,8 +16,8 @@ buildopts = '-Csrc -fMakefile.unx all && make -Csrc -fMakefile.unx install' files_to_copy = [(['exe/*'], 'bin'), (['src/libdrawgram.so', 'src/libdrawtree.so'], 'lib')] sanity_check_paths = { - 'files': ['lib/libdrawgram.so', 'lib/libdrawtree.so'], - 'dirs': ['bin'], + 'files': ['lib/libdrawgram.so', 'lib/libdrawtree.so'], + 'dirs': ['bin'], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/PSI/PSI-4.0b6-20160201-intel-2016a-mt-Python-2.7.11.eb b/easybuild/easyconfigs/p/PSI/PSI-4.0b6-20160201-intel-2016a-mt-Python-2.7.11.eb index 3f257ab0c1..ffd93ce336 100644 --- a/easybuild/easyconfigs/p/PSI/PSI-4.0b6-20160201-intel-2016a-mt-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PSI/PSI-4.0b6-20160201-intel-2016a-mt-Python-2.7.11.eb @@ -42,6 +42,4 @@ configopts += ' -DENABLE_PCMSOLVER=ON -DPCMSOLVER_ROOT=$EBROOTPCMSOLVER' # Execute 4 tests in parallel runtest = 'ARGS="-V -E \'opt10|pubchem1|pubchem2|pywrap-opt-sowreap|sapt4\' -j 4" test' - - moduleclass = 'chem' -- GitLab From 8f5214c969da42a82a783c5782dc13432600647c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 1 Mar 2017 22:27:24 +0100 Subject: [PATCH 0557/1311] fix style fixes in ConnectomeWorkbench easyconfig --- .../c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb index 2db5248504..fce250c7cf 100644 --- a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -21,9 +21,9 @@ source_urls = ['https://ftp.humanconnectome.org/workbench/'] sources = ['workbench-rh_linux64-v%(version)s.zip'] modextrapaths = { - 'PATH': 'bin_rh_linux64', - 'LIBRARY_PATH': 'libs_rh_linux64', - 'LD_LIBRARY_PATH': 'libs_rh_linux64', + 'PATH': 'bin_rh_linux64', + 'LIBRARY_PATH': 'libs_rh_linux64', + 'LD_LIBRARY_PATH': 'libs_rh_linux64', } sanity_check_paths = { @@ -33,4 +33,3 @@ sanity_check_paths = { } moduleclass = 'bio' - -- GitLab From 32a7e256f1753eb22ef21a3eebe466a03106e429 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 2 Mar 2017 14:04:48 +0800 Subject: [PATCH 0558/1311] prepare release notes for eb311 --- RELEASE_NOTES | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index a240d6d9d8..aa222f795f 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,6 +6,55 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,488 easyconfig files, for 1,152 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.1.1 (March 3rd 2017) +----------------------- + +bugfix release +- added example easyconfig files for 15 new software packages: + - Caffe (#3667), DIAMOND (#4107), fmt (#4131), googletest (#4132), igraph (#4172), MEGA (#4202), meRanTK (#4175), + meshio (#4178), miRDeep2 (#4229), OOMPA (#4211), PBSuite (#4230), randfold (#4217), Smoldyn (#4110), + SpiecEasi (#4215), stress (#4180) +- added additional easyconfigs for various supported software packages, including: + - ATK 2.22.0, Armadillo 7.600.2 + 7.800.0, arpack-ng 3.4.0, BLASR 2.2, Bazel 0.4.4, BioPerl 1.7.1, CFITSIO 3.41, + CGAL 4.9, CMake 3.7.2, Cantera 2.3.0, cURL 7.52.1, DMTCP 2.5.0, Eigen 3.2.10 + 3.3.2 + 3.3.3, Emacs 25.1, + ea-utils 1.04.807, freetype 2.7.1, GMP 6.1.2, Graphviz 2.38.0, gettext 0.19.8.1, IPython 5.2.2, JasPer 2.0.10, + Java 1.8.0_121, Lmod 7.3, libQGLViewer 2.6.4, libpng 1.6.27 + 1.6.28, likwid 4.2.0, MCL 02.063 + 14.137, + MCR R2013b + 2014b + R2015b + R2016b, matplotlib 2.0.0, networkx 1.1, OpenSSL 1.1.0e, OrthoMCL 1.4 + 2.0.9, + PCRE 8.40, PyTables 3.2.3.1, Pysam 0.10.0, path.py 10.1, prompt-toolkit 1.0.13, Qt5 5.8.0, ROOT 6.06.02, + SCons 2.5.1, Stacks 1.44, StringTie 1.3.3, sickle 1.33, VTK 7.1.0, ViennaRNA 2.2.3, Vim 8.0, XZ 5.2.3, + Yade 2017.01a +- added easyconfigs for new 'iomkl/2017a' and 'iompi/2017a' toolchains (#4216) +- various enhancements, including: + - clean up dependencies in libdrm (#4113) + - update X11 bundle and dependencies for GCCcore-6.3.0 (#4147) + - fix style in several easyconfigs (#4174, #4176, #4190) +- various bug fixes, including: + - allow intel 2017 to compile (#4102) + - work around build failure with GCC 6 in pkg-config (#4109) + - add Bison and gettext as build deps for X11 (#4111) + - fix ippicv source download and library install in OpenCV (#4126) + - fix software name for OrthoMCL + modernise OrthoMCL easyconfigs (#4135) + - get rid of backticks in gettext descriptions, causes problems when packaging with FPM (#4146) + - remove duplicate sources specification in OpenMPI (#4150) + - fix definition of buildopts/installopts in Cantera easyconfig (#4164) + - use http rather than ftp source URLs in CFITSIO easyconfigs (#4167) + - fix broken test in Cantera 2.3.0 rather than skipping it (#4177) + - add patch for XZ 5.2.2 to include 5.1.2alpha symbols required by 'rpm' command on CentOS 7.x (#4179) + - update $PATH in OrthoMCL 1.4 easyconfig (#4182) + - bump VTK to 7.1.0 in meshio easyconfig for compatibility with Yade 2017.01a (#4188) + - add patch for Boost v1.61-1.63 to fix problem with make_array/array_wrapper in boost serialization library (#4192) + - add sanity check command to Yade easyconfig to make sure that 'import yade' works, include bzip2 as dep (#4193) + - set CMAKE_PREFIX_PATH to ncurses install directory (#4196) + - switch to lowopt=True for libxc v2.2.* and v3.* (#4199) + - remove custom sanity_check_paths, since it's identical to that used by the R easyblock (#4200) + - fix version (& homepage) in ea-utils easyconfigs (#4205) + - remove --with-threads configure option in OpenMPI-2.* (#4213) + - add PDF::API2 extension to Perl 5.24.0 easyconfigs + sync exts_list (#4221) + - fix check for Szip library in configure script for netCDF 4.1.3 (#4226) +- fix source_urls in several easyconfigs, including: + - bsoft, cutadapt, EMBOSS, GnuTLS, ImageMagick, LibTIFF, Mercurial, netCDF, netCDF-Fortran, pigz, ROOT and Subversion (#4227) + + v3.1.0 (February 3rd 2017) -------------------------- -- GitLab From d6b4285dafcac0f505cfaf93a50910dbe5fe9d54 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 2 Mar 2017 08:45:24 +0200 Subject: [PATCH 0559/1311] Add comment to patch file with author and purpose. --- .../n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch index 635f15ee4c..5d07c595e7 100644 --- a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch +++ b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-parallelbuild.patch @@ -1,3 +1,5 @@ +# corrected parallel builds, no debug info and no vec reports +# B. Hajgato Nov 13 2014 diff -ru nwchem-6.6.orig/src/config/makefile.h nwchem-6.6/src/config/makefile.h --- nwchem-6.6.orig/src/config/makefile.h 2015-10-16 02:12:50.000000000 +0200 +++ nwchem-6.6/src/config/makefile.h 2017-01-12 10:43:00.000000000 +0100 -- GitLab From 8a3f307ee6250f5d70eca2788292014cb1f2c0c9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Mar 2017 09:08:52 +0100 Subject: [PATCH 0560/1311] restore original fftw version in NFFT dep spec --- easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb index 127aea160a..4df5eead7f 100644 --- a/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/n/NFFT/NFFT-3.3.0-CrayGNU-2015.11.eb @@ -14,7 +14,7 @@ source_urls = ['https://www-user.tu-chemnitz.de/~potts/nfft/download/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('fftw/3.3.4.3', EXTERNAL_MODULE), + ('fftw/3.3.4.5', EXTERNAL_MODULE), ] sanity_check_paths = { -- GitLab From b5944e17d62f4cb5a45938768639b2138c9b0f52 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Mar 2017 09:46:45 +0100 Subject: [PATCH 0561/1311] remove single space at the end of OBITools description to make @wpoely86 happy --- .../o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb index 84d9f1db9a..82a7c41aa7 100644 --- a/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/o/OBITools/OBITools-1.2.9-foss-2016a-Python-2.7.11.eb @@ -7,7 +7,7 @@ versionsuffix = '-Python-%(pyver)s' homepage = 'http://www.grenoble.prabi.fr/trac/OBITools' description = """The OBITools programs aims to help you to manipulate various data and sequence files in a convenient way using the Unix command line interface. They follow the standard Unix interface for command line - program, allowing to chain a set of commands using the pipe mecanism. """ + program, allowing to chain a set of commands using the pipe mecanism.""" toolchain = {'name': 'foss', 'version': '2016a'} -- GitLab From 05ffcaa5c995fd346fa6b373b604412834c14637 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 2 Mar 2017 11:47:37 +0100 Subject: [PATCH 0562/1311] fix missing PYTHONPATH --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 81755cd856..6bb0455477 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -42,4 +42,6 @@ configopts += '-Doracle=OFF -Dpgsql=OFF -Dqt=OFF -Dsqlite=OFF ' configopts += '-Dcxx14=ON ' configopts += '-Dunuran=ON -Dtable=ON -Dexplicitlink=ON -Dminuit2=ON ' +modextrapaths = {'PYTHONPATH': 'lib/'} + moduleclass = 'data' -- GitLab From 97c578af87d9a9e16dd112cb980d70451d127f0a Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 2 Mar 2017 13:35:05 +0100 Subject: [PATCH 0563/1311] rootpy-foss-2016a-python-2.7.11 --- .../rootpy-0.8.0-foss-2016a-Python-2.7.11.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb new file mode 100644 index 0000000000..a81bc6e8ba --- /dev/null +++ b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb @@ -0,0 +1,34 @@ +easyblock = 'PythonPackage' + +name = 'rootpy' +version = '0.8.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.rootpy.org/' + +description = """The rootpy project is a community-driven initiative aiming to provide a more pythonic interface with +ROOT on top of the existing PyROOT bindings. Given Python’s reflective and dynamic nature, rootpy also aims to +improve ROOT design flaws and supplement existing ROOT functionality. The scientific Python community also offers a +multitude of powerful packages such as SciPy, NumPy, matplotlib, scikit-learn, and PyTables, but a suitable interface +between them and ROOT has been lacking. rootpy provides the interfaces and conversion mechanisms required to liberate +your data and to take advantage of these alternatives if needed.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['https://github.com/rootpy/%(namelower)s/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.11'), + ('ROOT','v6.08.02','-Python-%(pyver)s'), + ('matplotlib', '1.5.1', '-Python-%(pyver)s') +] + +options = {'modulename': 'os'} + +#sanity_check_paths = { +# 'files': ['bin/quast.py'], +# 'dirs': [''], +#} + +moduleclass = 'bio' -- GitLab From 0853a413d724c2ae3d24353a42abaf97d635f6f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Thu, 2 Mar 2017 16:30:31 +0100 Subject: [PATCH 0564/1311] add tmux-2.3 --- easybuild/easyconfigs/t/tmux/tmux-2.3.eb | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/t/tmux/tmux-2.3.eb diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb new file mode 100644 index 0000000000..d9aa356199 --- /dev/null +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'tmux' +version = '2.3' + +homepage = 'http://tmux.sourceforge.net/' +description = """tmux is a terminal multiplexer. It lets you switch easily +between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} +toolchainopts = {'optarch': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://github.com/tmux/tmux/releases/download/%(version)s/'] + +dependencies = [ + ('ncurses', '6.0'), + ('libevent', '2.1.8'), +] + +sanity_check_paths = { + 'files': ['bin/tmux'], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 66e53395be9c6c3a6e823fa9066ae6f810fff67c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Thu, 2 Mar 2017 16:40:48 +0100 Subject: [PATCH 0565/1311] add libevent-2.1.8.eb --- .../easyconfigs/l/libevent/libevent-2.1.8.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb new file mode 100644 index 0000000000..964ec6943d --- /dev/null +++ b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'libevent' +version = '2.1.8' + +homepage = 'http://libevent.org/' +description = """The libevent API provides a mechanism to execute a callback function when a specific + event occurs on a file descriptor or after a timeout has been reached. + Furthermore, libevent also support callbacks due to signals or regular timeouts.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + 'https://github.com/downloads/%(name)s/%(name)s/', + 'https://sourceforge.net/projects/levent/files/%(name)s/%(name)s-%(version_major_minor)s/', +] +sources = ['%(name)s-%(version)s-stable.tar.gz'] + +moduleclass = 'lib' -- GitLab From e61539844a7930b15d93f805c7e1cbd08a8ac3d2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Mar 2017 19:13:20 +0100 Subject: [PATCH 0566/1311] adding easyconfigs: evmix-2.6-intel-2016b-R-3.3.1.eb --- .../e/evmix/evmix-2.6-intel-2016b-R-3.3.1.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/e/evmix/evmix-2.6-intel-2016b-R-3.3.1.eb diff --git a/easybuild/easyconfigs/e/evmix/evmix-2.6-intel-2016b-R-3.3.1.eb b/easybuild/easyconfigs/e/evmix/evmix-2.6-intel-2016b-R-3.3.1.eb new file mode 100644 index 0000000000..9999a81cbc --- /dev/null +++ b/easybuild/easyconfigs/e/evmix/evmix-2.6-intel-2016b-R-3.3.1.eb @@ -0,0 +1,40 @@ +easyblock = 'Bundle' + +name = 'evmix' +version = '2.6' +versionsuffix = '-R-%(rver)s' + +homepage = 'http://cran.r-project.org/web/packages/evmix' +description = """evmix: Extreme Value Mixture Modelling, + Threshold Estimation and Boundary Corrected Kernel Density Estimation""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +dependencies = [ + ('R', '3.3.1'), + ('GSL', '2.3'), +] + +exts_defaultclass = 'RPackage' +exts_list = [ + ('gsl', '1.9-10.3', { + 'source_urls': ['http://cran.r-project.org/src/contrib/'], + 'source_tmpl': '%(name)s_%(version)s.tar.gz', + }), + ('evmix', '2.6', { + 'source_urls': ['http://cran.r-project.org/src/contrib/'], + 'source_tmpl': '%(name)s_%(version)s.tar.gz', + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['evmix', 'gsl'], +} + +modextrapaths = {'R_LIBS': ['']} + +moduleclass = 'math' -- GitLab From 49d9583a535d924354c98f91e191e05181f49f65 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Mar 2017 19:18:23 +0100 Subject: [PATCH 0567/1311] adding easyconfigs: skewer-0.2.2-intel-2016b.eb --- .../s/skewer/skewer-0.2.2-intel-2016b.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/s/skewer/skewer-0.2.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/s/skewer/skewer-0.2.2-intel-2016b.eb b/easybuild/easyconfigs/s/skewer/skewer-0.2.2-intel-2016b.eb new file mode 100644 index 0000000000..c70dfa11d6 --- /dev/null +++ b/easybuild/easyconfigs/s/skewer/skewer-0.2.2-intel-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'MakeCp' + +name = 'skewer' +version = '0.2.2' + +homepage = 'https://github.com/relipmoc/skewer' +description = """skewer implements the bit-masked k-difference matching algorithm dedicated to the task of adapter + trimming and it is specially designed for processing next-generation sequencing (NGS) paired-end sequences.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/relipmoc/skewer/archive'] +sources = ['%(version)s.tar.gz'] + +buildopts = 'CXX="$CXX" CXXFLAGS="-c $CXXFLAGS" LDFLAGS="$CXXFLAGS -pthread"' + +files_to_copy = [(['skewer'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/skewer'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 6df11f2f4600f8c84f81590c50c447963b08eae5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 09:54:17 +0100 Subject: [PATCH 0568/1311] adding easyconfigs: HPL-2.2-intel-2017.02.eb --- .../h/HPL/HPL-2.2-intel-2017.02.eb | 18 +++++++++ .../i/icc/icc-2017.2.174-GCC-6.3.0-2.27.eb | 33 ++++++++++++++++ .../iccifort-2017.2.174-GCC-6.3.0-2.27.eb | 18 +++++++++ .../ifort/ifort-2017.2.174-GCC-6.3.0-2.27.eb | 36 ++++++++++++++++++ .../i/iimpi/iimpi-2017.02-GCC-6.3.0-2.27.eb | 20 ++++++++++ ...2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb | 38 +++++++++++++++++++ ....174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb | 35 +++++++++++++++++ .../easyconfigs/i/intel/intel-2017.02.eb | 24 ++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb create mode 100644 easybuild/easyconfigs/i/icc/icc-2017.2.174-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/ifort/ifort-2017.2.174-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/iimpi/iimpi-2017.02-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb create mode 100644 easybuild/easyconfigs/i/intel/intel-2017.02.eb diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb new file mode 100644 index 0000000000..976ad59fb7 --- /dev/null +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb @@ -0,0 +1,18 @@ +name = 'HPL' +version = '2.2' + +homepage = 'http://www.netlib.org/benchmark/hpl/' +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic + on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the + High Performance Computing Linpack Benchmark.""" + +toolchain = {'name': 'intel', 'version': '2017.02'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.netlib.org/benchmark/%(namelower)s'] + +# fix Make dependencies, so parallel build also works +patches = ['HPL_parallel-make.patch'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/icc/icc-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/icc/icc-2017.2.174-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..cd7f8184fe --- /dev/null +++ b/easybuild/easyconfigs/i/icc/icc-2017.2.174-GCC-6.3.0-2.27.eb @@ -0,0 +1,33 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'icc' +version = '2017.2.174' + +homepage = 'http://software.intel.com/en-us/intel-compilers/' +description = "C and C++ compiler from Intel" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['parallel_studio_xe_%(version_major)s_update%(version_minor)s_composer_edition_for_cpp.tgz'] + +checksums = ['1ed9e5176b30ed0f0917a7ea698021ee'] + +gccver = '6.3.0' +binutilsver = '2.27' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), +] + +# list of regex for components to install +# full list of components can be obtained from pset/mediaconfig.xml in unpacked sources +# cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide +components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-ipsc?_', 'intel-gdb(?!.*mic)'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..a3141d5631 --- /dev/null +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -0,0 +1,18 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild +easyblock = 'Toolchain' + +name = 'iccifort' +version = '2017.2.174' +versionsuffix = '-GCC-6.3.0-2.27' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +dependencies = [ + ('icc', version, versionsuffix), + ('ifort', version, versionsuffix), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/ifort/ifort-2017.2.174-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..c4b671b697 --- /dev/null +++ b/easybuild/easyconfigs/i/ifort/ifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -0,0 +1,36 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'ifort' +version = '2017.2.174' + +homepage = 'http://software.intel.com/en-us/intel-compilers/' +description = "Fortran compiler from Intel" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['parallel_studio_xe_%(version_major)s_update%(version_minor)s_composer_edition_for_fortran.tgz'] + +checksums = ['9d5dfa36a36b7c9e877745f3e379248b'] + +# remove dependency on intel-mpi-rt-mic +patches = ['ifort_2017_no_mpi_mic_dependency.patch'] + +gccver = '6.3.0' +binutilsver = '2.27' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), +] + +# list of regex for components to install +# full list of components can be obtained from pset/mediaconfig.xml in unpacked sources +# cfr. https://software.intel.com/en-us/articles/intel-composer-xe-2015-silent-installation-guide +components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel-ipsf?_', 'intel-gdb(?!.*mic)'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/iimpi/iimpi-2017.02-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/iimpi/iimpi-2017.02-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..b0f86b1096 --- /dev/null +++ b/easybuild/easyconfigs/i/iimpi/iimpi-2017.02-GCC-6.3.0-2.27.eb @@ -0,0 +1,20 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild +easyblock = "Toolchain" + +name = 'iimpi' +version = '2017.02' +versionsuffix = '-GCC-6.3.0-2.27' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel C/C++ and Fortran compilers, alongside Intel MPI.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +compver = '2017.2.174' +dependencies = [ + ('icc', compver, versionsuffix), + ('ifort', compver, versionsuffix), + ('impi', compver, '', ('iccifort', '%s%s' % (compver, versionsuffix))), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..c8801dee34 --- /dev/null +++ b/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb @@ -0,0 +1,38 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'imkl' +version = '2017.2.174' + +homepage = 'http://software.intel.com/en-us/intel-mkl/' +description = """Intel Math Kernel Library is a library of highly optimized, + extensively threaded math routines for science, engineering, and financial + applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + +toolchain = {'name': 'iimpi', 'version': '2017.02-GCC-6.3.0-2.27'} + +sources = ['l_mkl_%(version)s.tgz'] +checksums = ['ef39a12dcbffe5f4a0ef141b8759208c'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +interfaces = True + +postinstallcmds = [ + # extract the examples + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_f95.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_c.tgz -C %(installdir)s/mkl/examples/', +] + +modextravars = { + 'MKL_EXAMPLES': '%(installdir)s/mkl/examples/', +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..c2e9a1817a --- /dev/null +++ b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -0,0 +1,35 @@ +# This is an easyconfig file for EasyBuild, see http://hpcugent.github.io/easybuild + +name = 'impi' +version = '2017.2.174' + +homepage = 'http://software.intel.com/en-us/intel-mpi-library/' +description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message + passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for + Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + +toolchain = {'name': 'iccifort', 'version': '2017.2.174-GCC-6.3.0-2.27'} + +sources = ['l_mpi_%(version)s.tgz'] + +checksums = ['b6c2e62c3fb9b1558ede72ccf72cf1d6'] + +dontcreateinstalldir = 'True' + +components = ['intel-mpi', 'intel-psxe', 'intel-imb'] + +license_file = HOME + '/licenses/intel/license.lic' + +# set up all the mpi commands to default to intel compilers +# set_mpi_wrappers_all = 'True' + +postinstallcmds = [ + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpich.so', + 'ln -s %(installdir)s/lib64/libmpigc4.so %(installdir)s/lib64/libmpichcxx.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libfmpich.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libmpichf90.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpl.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libopa.so' +] + +moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/i/intel/intel-2017.02.eb b/easybuild/easyconfigs/i/intel/intel-2017.02.eb new file mode 100644 index 0000000000..941245b3e6 --- /dev/null +++ b/easybuild/easyconfigs/i/intel/intel-2017.02.eb @@ -0,0 +1,24 @@ +easyblock = 'Toolchain' + +name = 'intel' +version = '2017.02' + +homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +compver = '2017.2.174' +gccver = '6.3.0' +binutilsver = '2.27' +gccsuff = '-GCC-%s-%s' % (gccver, binutilsver) +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '-GCCcore-%s' % gccver), + ('icc', compver, gccsuff), + ('ifort', compver, gccsuff), + ('impi', compver, '', ('iccifort', '%s%s' % (compver, gccsuff))), + ('imkl', compver, '', ('iimpi', version + gccsuff)), +] + +moduleclass = 'toolchain' -- GitLab From 6cf55b6fb7840d9db16dc9885bcef520ccd906a2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 10:18:10 +0100 Subject: [PATCH 0569/1311] remove license_file specs in impi/imkl 2017.2.174 easyconfigs --- .../i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb | 2 -- .../impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb | 2 -- 2 files changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb index c8801dee34..62ed829038 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-2017.2.174-iimpi-2017.02-GCC-6.3.0-2.27.eb @@ -16,8 +16,6 @@ checksums = ['ef39a12dcbffe5f4a0ef141b8759208c'] dontcreateinstalldir = 'True' -license_file = HOME + '/licenses/intel/license.lic' - interfaces = True postinstallcmds = [ diff --git a/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb index c2e9a1817a..9375fca351 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -18,8 +18,6 @@ dontcreateinstalldir = 'True' components = ['intel-mpi', 'intel-psxe', 'intel-imb'] -license_file = HOME + '/licenses/intel/license.lic' - # set up all the mpi commands to default to intel compilers # set_mpi_wrappers_all = 'True' -- GitLab From 051a170864a0a07b45d308ce35ef14a1dcb31137 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 3 Mar 2017 11:00:50 +0100 Subject: [PATCH 0570/1311] sanity check fix --- .../r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb index a81bc6e8ba..d40917cf4c 100644 --- a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb @@ -24,11 +24,9 @@ dependencies = [ ('matplotlib', '1.5.1', '-Python-%(pyver)s') ] -options = {'modulename': 'os'} - -#sanity_check_paths = { -# 'files': ['bin/quast.py'], -# 'dirs': [''], -#} +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} moduleclass = 'bio' -- GitLab From ce387d60825aa0b2ff37fe5c1b7e1a110a0a9a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Fri, 3 Mar 2017 11:40:22 +0100 Subject: [PATCH 0571/1311] @boegel change too long line into tmux, fix sources libevent and added sanity_check_paths to libevent --- easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb | 13 +++++++++++-- easybuild/easyconfigs/t/tmux/tmux-2.3.eb | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb index 964ec6943d..369e68366a 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb @@ -11,9 +11,18 @@ description = """The libevent API provides a mechanism to execute a callback fun toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'https://github.com/downloads/%(name)s/%(name)s/', - 'https://sourceforge.net/projects/levent/files/%(name)s/%(name)s-%(version_major_minor)s/', + 'https://github.com/%(name)s/%(name)s/releases/download/release-%(version)s-stable/', + 'https://downloads.sourceforge.net/project/levent/release-%(version)s-stable/', ] + sources = ['%(name)s-%(version)s-stable.tar.gz'] +checksums = ['f3eeaed018542963b7d2416ef1135ecc'] + +sanity_check_paths = { + 'files': ["bin/event_rpcgen.py"] + + ['include/%s' % x for x in ["evdns.h", "event.h", "evhttp.h", "evrpc.h", "evutil.h"]] + + ['include/event2/%s' % x for x in ['buffer_compat.h', 'bufferevent.h', 'bufferevent_struct.h', 'dns_compat.h', 'dns_struct.h', 'event-config.h', 'event_struct.h', 'http.h', 'keyvalq_struct.h', 'rpc_compat.h', 'rpc_struct.h', 'tag.h', 'util.h', 'bufferevent_compat.h', 'bufferevent_ssl.h', 'buffer.h', 'dns.h', 'event_compat.h', 'event.h', 'http_compat.h', 'http_struct.h', 'listener.h', 'rpc.h', 'tag_compat.h', 'thread.h', 'visibility.h']], + 'dirs': ["lib"] + moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb index d9aa356199..d8ea21b236 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.3.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb @@ -5,7 +5,8 @@ version = '2.3' homepage = 'http://tmux.sourceforge.net/' description = """tmux is a terminal multiplexer. It lets you switch easily -between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.""" +between several programs in one terminal, detach them (they keep +running in the background) and reattach them to a different terminal.""" toolchain = {'name': 'dummy', 'version': 'dummy'} toolchainopts = {'optarch': True} -- GitLab From 1ad34056480aec11dbfb1667b72b1e37fc15e4dc Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 3 Mar 2017 12:40:44 +0200 Subject: [PATCH 0572/1311] adding easyconfigs: GROMACS-2016.2-foss-2017a.eb --- .../g/GROMACS/GROMACS-2016.2-foss-2017a.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb new file mode 100644 index 0000000000..5a3fc10eef --- /dev/null +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2016 University of Luxembourg / LCSB, Cyprus Institute / CaSToRC, +# Ghent University / The Francis Crick Institute +# Authors:: +# * Wiktor Jurkowski +# * Fotis Georgatos +# * George Tsouloupas +# * Kenneth Hoste +# * Adam Huffman +# License:: MIT/GPL +## + +name = 'GROMACS' +version = '2016.2' + +homepage = 'http://www.gromacs.org' +description = """ +GROMACS is a versatile package to perform molecular dynamics, + i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. + +This is CPU only build, containing both MPI and threadMPI builds. +""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['ftp://ftp.gromacs.org/pub/gromacs/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('CMake', '3.6.2'), +] + +moduleclass = 'bio' -- GitLab From ccda71acf21a6996fdc6d7b5ccc1aafc84614bc1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 11:49:47 +0100 Subject: [PATCH 0573/1311] minor style fixes in NWChem 6.6 easyconfig --- ...vision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb index f693ccc152..27d258eaee 100644 --- a/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb +++ b/easybuild/easyconfigs/n/NWChem/NWChem-6.6.revision27746-iomkl-2017a-2015-10-20-Python-2.7.12.eb @@ -1,5 +1,7 @@ name = 'NWChem' version = '6.6.revision27746' +verdate = '2015-10-20' +versionsuffix = '-%s-Python-%%(pyver)s' % verdate homepage = 'http://www.nwchem-sw.org' description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in @@ -13,18 +15,14 @@ toolchain = {'name': 'iomkl', 'version': '2017a'} toolchainopts = {'i8': True} source_urls = ['http://www.nwchem-sw.org/download.php?f='] -verdate = '2015-10-20' -sources = ['Nwchem-%s-src.%s.tar.bz2' % (version, verdate)] +sources = ['Nwchem-%%(version)s-src.%s.tar.bz2' % verdate] patches = [ 'NWChem_fix-date.patch', 'NWChem-%(version)s-parallelbuild.patch', ] -python = 'Python' -pyver = '2.7.12' -versionsuffix = '-%s-%s-%s' % (verdate, python, pyver) -dependencies = [(python, pyver)] +dependencies = [('Python', '2.7.12')] # This easyconfig is using the default for armci_network (OPENIB) and # thus needs infiniband libraries. -- GitLab From 3fb14327fb696d1717d7cde894e720db5dbd2de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Fri, 3 Mar 2017 12:28:54 +0100 Subject: [PATCH 0574/1311] add eb Singularity-2.2.1-GCC-6.3.0-2.27.eb next step chown root:root /apps/all/Singularity/*/etc/singularity/singularity.conf chown root:root /apps/all/Singularity/*/libexec/singularity/sexec-suid chmod +s /apps/all/Singularity/*/libexec/singularity/sexec-suid --- .../Singularity-2.2.1-GCC-6.3.0-2.27.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..e11fd1f16c --- /dev/null +++ b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'Singularity' +version = '2.2.1' + +homepage = 'http://gmkurtzer.github.io/singularity' +description = """Singularity is a portable application stack packaging and runtime utility.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['https://github.com/gmkurtzer/singularity/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = './autogen.sh && ' + +sanity_check_paths = { + 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', 'libexec/singularity/sexec-suid'], + 'dirs': ['etc', '', 'libexec/singularity'], +} + +moduleclass = 'tools' -- GitLab From 68865c34f791fa80abd0ba566daed7de531c3761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Fri, 3 Mar 2017 12:35:36 +0100 Subject: [PATCH 0575/1311] move sanity_check_paths - files -> dirs ... libevents --- easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb index 369e68366a..41eaa5ab15 100644 --- a/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb +++ b/easybuild/easyconfigs/l/libevent/libevent-2.1.8.eb @@ -21,8 +21,8 @@ checksums = ['f3eeaed018542963b7d2416ef1135ecc'] sanity_check_paths = { 'files': ["bin/event_rpcgen.py"] + - ['include/%s' % x for x in ["evdns.h", "event.h", "evhttp.h", "evrpc.h", "evutil.h"]] + - ['include/event2/%s' % x for x in ['buffer_compat.h', 'bufferevent.h', 'bufferevent_struct.h', 'dns_compat.h', 'dns_struct.h', 'event-config.h', 'event_struct.h', 'http.h', 'keyvalq_struct.h', 'rpc_compat.h', 'rpc_struct.h', 'tag.h', 'util.h', 'bufferevent_compat.h', 'bufferevent_ssl.h', 'buffer.h', 'dns.h', 'event_compat.h', 'event.h', 'http_compat.h', 'http_struct.h', 'listener.h', 'rpc.h', 'tag_compat.h', 'thread.h', 'visibility.h']], - 'dirs': ["lib"] + ['include/%s' % x for x in ["evdns.h", "event.h", "evhttp.h", "evrpc.h", "evutil.h"]], + 'dirs': ["lib", "include/event2"] +} moduleclass = 'lib' -- GitLab From 2d1a8eba2da61b56a08904c302d3279ddeeb3408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Fri, 3 Mar 2017 12:55:21 +0100 Subject: [PATCH 0576/1311] remove '', --- .../s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb index e11fd1f16c..e1e43de48b 100644 --- a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb @@ -17,7 +17,7 @@ preconfigopts = './autogen.sh && ' sanity_check_paths = { 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', 'libexec/singularity/sexec-suid'], - 'dirs': ['etc', '', 'libexec/singularity'], + 'dirs': ['etc', 'libexec/singularity'], } moduleclass = 'tools' -- GitLab From 2e04f6c75933547906dadd119c731c43aa3ea456 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 3 Mar 2017 14:04:49 +0200 Subject: [PATCH 0577/1311] adding easyconfigs: PLUMED-2.3.0-foss-2017a.eb --- .../easyconfigs/g/GSL/GSL-2.3-foss-2017a.eb | 25 +++++++++++ .../g/Guile/Guile-1.8.8-foss-2017a.eb | 32 ++++++++++++++ .../libmatheval-1.1.11-foss-2017a.eb | 32 ++++++++++++++ .../libunistring-0.9.6-foss-2017a.eb | 24 +++++++++++ .../p/PLUMED/PLUMED-2.3.0-foss-2017a.eb | 42 +++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2017a.eb create mode 100644 easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2017a.eb create mode 100644 easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2017a.eb create mode 100644 easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2017a.eb create mode 100644 easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2017a.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2017a.eb new file mode 100644 index 0000000000..66df054b65 --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-foss-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = '2.3' + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions + and least-squares fitting.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'unroll': True, 'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +configopts = '--with-pic' + +sanity_check_paths = { + 'files': ['bin/gsl-config', 'lib/libgsl.a', 'lib/libgsl.%s' % SHLIB_EXT, + 'lib/libgslcblas.a', 'lib/libgslcblas.%s' % SHLIB_EXT], + 'dirs': ['include/gsl', 'lib/pkgconfig', 'share'], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2017a.eb b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2017a.eb new file mode 100644 index 0000000000..318524cbae --- /dev/null +++ b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-foss-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Guile' +version = '1.8.8' + +homepage = 'http://www.gnu.org/software/guile' +description = """Guile is the GNU Ubiquitous Intelligent Language for Extensions, + the official extension language for the GNU operating system.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libtool', '2.4.6'), + ('GMP', '6.1.1'), + ('libunistring', '0.9.6'), + ('pkg-config', '0.29.1'), + ('libffi', '3.2.1'), + ('libreadline', '6.3'), +] + +configopts = " --enable-error-on-warning=no" + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["guile", 'guile-config', 'guile-snarf', 'guile-tools']] + + ["lib/libguile.a", "include/libguile.h"], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2017a.eb b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2017a.eb new file mode 100644 index 0000000000..1d721e0ee3 --- /dev/null +++ b/easybuild/easyconfigs/l/libmatheval/libmatheval-1.1.11-foss-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libmatheval' +version = '1.1.11' + +homepage = 'http://www.gnu.org/software/libmatheval/' +description = """GNU libmatheval is a library (callable from C and Fortran) to parse + and evaluate symbolic expressions input as text.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + ('Guile', '1.8.8'), +] + +configopts = '--with-pic ' + +# fix for guile-config being broken because shebang line contains full path to bin/guile +configopts += 'GUILE_CONFIG="$EBROOTGUILE/bin/guile -e main -s $EBROOTGUILE/bin/guile-config"' + +sanity_check_paths = { + 'files': ['lib/libmatheval.a', 'include/matheval.h'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2017a.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2017a.eb new file mode 100644 index 0000000000..fdee6f5768 --- /dev/null +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-foss-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libunistring' +version = '0.9.6' + +homepage = 'http://www.gnu.org/software/libunistring/' +description = """This library provides functions for manipulating Unicode strings and for manipulating C strings + according to the Unicode standard.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = [GNU_SOURCE] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2017a.eb b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2017a.eb new file mode 100644 index 0000000000..1ed42c4139 --- /dev/null +++ b/easybuild/easyconfigs/p/PLUMED/PLUMED-2.3.0-foss-2017a.eb @@ -0,0 +1,42 @@ +# by Ward Poelmans + +easyblock = 'ConfigureMake' + +name = 'PLUMED' +version = '2.3.0' + +homepage = 'http://www.plumed-code.org' +description = """PLUMED is an open source library for free energy calculations in molecular systems which + works together with some of the most popular molecular dynamics engines. Free energy calculations can be + performed as a function of many order parameters with a particular focus on biological problems, using + state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. + The software, written in C++, can be easily interfaced with both fortran and C/C++ codes. +""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': 'True'} + +source_urls = ['https://github.com/plumed/plumed2/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('GSL', '2.3'), + ('libmatheval', '1.1.11'), +] + +preconfigopts = 'env FC=$MPIF90 LIBS="$LIBLAPACK $LIBS" ' +configopts = ' --exec-prefix=%(installdir)s --enable-gsl' +prebuildopts = 'source sourceme.sh && ' + +sanity_check_paths = { + 'files': ['bin/plumed', 'lib/libplumedKernel.%s' % SHLIB_EXT, 'lib/libplumed.%s' % SHLIB_EXT], + 'dirs': ['lib/plumed'] +} + +modextrapaths = { + 'PLUMED_KERNEL': 'lib/libplumedKernel.%s' % SHLIB_EXT, + 'PLUMED_ROOT': 'lib/plumed', +} + +moduleclass = 'chem' -- GitLab From b025dbb557c46605389c3ff16f68b965d5ec6c79 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 3 Mar 2017 14:18:57 +0200 Subject: [PATCH 0578/1311] Forgot to add dependency, CMake 3.6.2. --- .../c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..f496787852 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.6.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + #('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 5f471ba1e433fcd3a4e8aa6872b4aabd65e5621e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 14:24:00 +0100 Subject: [PATCH 0579/1311] fix failing tests due to use of \1 in sed expression in OrthoMCL easyconfig --- .../o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb index 3f9e8e96b8..489da9288a 100644 --- a/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/o/OrthoMCL/OrthoMCL-1.4-intel-2016b-Perl-5.24.0.eb @@ -29,7 +29,7 @@ postinstallcmds = [ 'sed -i"" "s@/usr/bin/perl@$EBROOTPERL/bin/perl@g" %(installdir)s/orthomcl.pl', 'sed -i"" "s@/.*blastall@$EBROOTBLAST/bin/blastall@g" %(installdir)s/orthomcl_module.pm', 'sed -i"" "s@/.*formatdb@$EBROOTBLAST/bin/formatdb@g" %(installdir)s/orthomcl_module.pm', - 'sed -i"" "s@/.*\(mcl.;\)@$EBROOTMCL/bin/\\1@g" %(installdir)s/orthomcl_module.pm', + 'sed -i"" "s@/.*/mcl@$EBROOTMCL/bin/mcl@g" %(installdir)s/orthomcl_module.pm', 'sed -i"" "s@/.*ORTHOMCL.*%(version)s/@\\$ENV{\'PWD\'}/@g" %(installdir)s/orthomcl_module.pm', ] -- GitLab From 71a84aa705659ffaee36fb39b5b0e66b2c29b855 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 14:45:45 +0100 Subject: [PATCH 0580/1311] adding easyconfigs: CMake-3.7.2-GCCcore-6.3.0.eb --- .../c/CMake/CMake-3.7.2-GCCcore-6.3.0.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.2-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..29e1e466f9 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-GCCcore-6.3.0.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.2' +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 5852aae17824c13929dbee276eda96b084bd1fa2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 14:58:57 +0100 Subject: [PATCH 0581/1311] adding easyconfigs: binutils-2.28.eb --- .../easyconfigs/b/binutils/binutils-2.28.eb | 19 +++++++++++++ easybuild/easyconfigs/f/flex/flex-2.6.3.eb | 19 +++++++++++++ easybuild/easyconfigs/m/M4/M4-1.4.18.eb | 27 +++++++++++++++++++ easybuild/easyconfigs/z/zlib/zlib-1.2.11.eb | 26 ++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 easybuild/easyconfigs/b/binutils/binutils-2.28.eb create mode 100644 easybuild/easyconfigs/f/flex/flex-2.6.3.eb create mode 100644 easybuild/easyconfigs/m/M4/M4-1.4.18.eb create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.11.eb diff --git a/easybuild/easyconfigs/b/binutils/binutils-2.28.eb b/easybuild/easyconfigs/b/binutils/binutils-2.28.eb new file mode 100644 index 0000000000..7681d5cc1f --- /dev/null +++ b/easybuild/easyconfigs/b/binutils/binutils-2.28.eb @@ -0,0 +1,19 @@ +name = 'binutils' +version = '2.28' + +homepage = 'http://directory.fsf.org/project/binutils/' +description = "binutils: GNU binary utilities" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + # zlib required, but being linked in statically, so not a runtime dep + ('zlib', '1.2.11'), +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3.eb new file mode 100644 index 0000000000..de26a2cd74 --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3.eb @@ -0,0 +1,19 @@ +name = 'flex' +version = '2.6.3' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'dummy', 'version': ''} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] + +dependencies = [('M4', '1.4.18')] +builddependencies = [('Bison', '3.0.4')] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.18.eb b/easybuild/easyconfigs/m/M4/M4-1.4.18.eb new file mode 100644 index 0000000000..f186b0ad85 --- /dev/null +++ b/easybuild/easyconfigs/m/M4/M4-1.4.18.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'M4' +version = '1.4.18' + +homepage = 'http://www.gnu.org/software/m4/m4.html' +description = """GNU M4 is an implementation of the traditional Unix macro processor. + It is mostly SVR4 compatible although it has some extensions + (for example, handling more than 9 positional parameters to macros). + GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc. +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +# '-fgnu89-inline' is required to avoid linking errors with older glibc's, +# see https://github.com/hpcugent/easybuild-easyconfigs/issues/529 +configopts = "--enable-cxx CPPFLAGS=-fgnu89-inline" + +sanity_check_paths = { + 'files': ["bin/m4"], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.11.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11.eb new file mode 100644 index 0000000000..b74939ef09 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.11' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} +toolchainopts = {'pic': True} + +source_urls = ['http://zlib.net/fossils/'] +sources = [SOURCELOWER_TAR_GZ] + +# need to take care of $CFLAGS ourselves with dummy toolchain +# we need to add -fPIC, but should also include -O* option to avoid compiling with -O0 (default for GCC) +buildopts = 'CFLAGS="-O2 -fPIC"' + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 813f5d5f48f966ad2d6304f140cae7dc9d616350 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 15:29:03 +0100 Subject: [PATCH 0582/1311] adding easyconfigs: binutils-2.28-GCCcore-6.3.0.eb --- .../b/binutils/binutils-2.28-GCCcore-6.3.0.eb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-6.3.0.eb b/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..de910489db --- /dev/null +++ b/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-6.3.0.eb @@ -0,0 +1,21 @@ +name = 'binutils' +version = '2.28' + +homepage = 'http://directory.fsf.org/project/binutils/' +description = "binutils: GNU binary utilities" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + # zlib required, but being linked in statically, so not a runtime dep + ('zlib', '1.2.11'), + # use same binutils version that was used when building GCC toolchain, to 'bootstrap' this binutils + ('binutils', version, '', True) +] + +moduleclass = 'tools' -- GitLab From 033702853174a9f5f55f0dc776f6d17d269d4730 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 15:33:41 +0100 Subject: [PATCH 0583/1311] enable execution permissions on all Perl scripts in /bin for miRDeep2 --- .../easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index 583f9a91f7..8a8e1422a7 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -20,7 +20,7 @@ dependencies = [ ('randfold', '2.0.1'), # also provides SQUID ] -install_cmd = "cp -a mirdeep%s/src %%(installdir)s/bin" % altver +install_cmd = "chmod a+x mirdeep*/src/*.pl && cp -a mirdeep*/src %(installdir)s/bin" sanity_check_paths = { 'files': ['bin/make_html.pl'], -- GitLab From 4a2d28b655a93c55643153f035b98d982b1ba9f5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 3 Mar 2017 15:57:06 +0100 Subject: [PATCH 0584/1311] fix source_urls for flex, incl. help2man as build dep --- easybuild/easyconfigs/f/flex/flex-2.6.3.eb | 7 +++++-- .../easyconfigs/h/help2man/help2man-1.47.4.eb | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 easybuild/easyconfigs/h/help2man/help2man-1.47.4.eb diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3.eb index de26a2cd74..568be27f41 100644 --- a/easybuild/easyconfigs/f/flex/flex-2.6.3.eb +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3.eb @@ -9,11 +9,14 @@ toolchain = {'name': 'dummy', 'version': ''} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] +source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/'] checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] dependencies = [('M4', '1.4.18')] -builddependencies = [('Bison', '3.0.4')] +builddependencies = [ + ('Bison', '3.0.4'), + ('help2man', '1.47.4'), +] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/h/help2man/help2man-1.47.4.eb b/easybuild/easyconfigs/h/help2man/help2man-1.47.4.eb new file mode 100644 index 0000000000..292de661e9 --- /dev/null +++ b/easybuild/easyconfigs/h/help2man/help2man-1.47.4.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'help2man' +version = '1.47.4' + +homepage = 'https://www.gnu.org/software/help2man/' +description = """help2man produces simple manual pages from the '--help' and '--version' output of other commands.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_XZ] + +sanity_check_paths = { + 'files': ['bin/help2man'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From c5582a708e0fdffca7f963810101a93be63047f4 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 3 Mar 2017 17:31:17 +0200 Subject: [PATCH 0585/1311] Updated dependency for Gromacs to CMake 3.7.2. Fixed missing parts in CMake 3.6.2 config. --- easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb | 4 ++-- easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb index f496787852..50e2df64aa 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'GCCcore', 'version': '6.3.0'} source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] sources = [SOURCELOWER_TAR_GZ] -configopts = '-- -DCMAKE_USE_OPENSSL=1' +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' builddependencies = [ ('binutils', '2.27'), @@ -29,7 +29,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb index 5a3fc10eef..8ad8f765c7 100644 --- a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.2-foss-2017a.eb @@ -30,7 +30,7 @@ source_urls = ['ftp://ftp.gromacs.org/pub/gromacs/'] sources = [SOURCELOWER_TAR_GZ] builddependencies = [ - ('CMake', '3.6.2'), + ('CMake', '3.7.2'), ] moduleclass = 'bio' -- GitLab From ee8d9018a1381e77be204e32195d29de9268fc3a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 4 Mar 2017 11:40:34 +0100 Subject: [PATCH 0586/1311] complete release notes for v3.1.1 & bump version --- RELEASE_NOTES | 46 ++++++++++++++++++---------------------------- setup.py | 2 +- 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index aa222f795f..060a0725f1 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,53 +3,43 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,488 easyconfig files, for 1,152 different software packages, +The latest version of easybuild-easyconfig provides 6,643 easyconfig files, for 1,168 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. -v3.1.1 (March 3rd 2017) +v3.1.1 (March 6th 2017) ----------------------- bugfix release -- added example easyconfig files for 15 new software packages: +- added example easyconfig files for 16 new software packages: - Caffe (#3667), DIAMOND (#4107), fmt (#4131), googletest (#4132), igraph (#4172), MEGA (#4202), meRanTK (#4175), - meshio (#4178), miRDeep2 (#4229), OOMPA (#4211), PBSuite (#4230), randfold (#4217), Smoldyn (#4110), - SpiecEasi (#4215), stress (#4180) + meshio (#4178), miRDeep2 (#4229, #4255), OOMPA (#4211), PBSuite (#4224, #4230), randfold (#4217), skewer (#4246), + Smoldyn (#4110), SpiecEasi (#4215), stress (#4180) - added additional easyconfigs for various supported software packages, including: - - ATK 2.22.0, Armadillo 7.600.2 + 7.800.0, arpack-ng 3.4.0, BLASR 2.2, Bazel 0.4.4, BioPerl 1.7.1, CFITSIO 3.41, - CGAL 4.9, CMake 3.7.2, Cantera 2.3.0, cURL 7.52.1, DMTCP 2.5.0, Eigen 3.2.10 + 3.3.2 + 3.3.3, Emacs 25.1, - ea-utils 1.04.807, freetype 2.7.1, GMP 6.1.2, Graphviz 2.38.0, gettext 0.19.8.1, IPython 5.2.2, JasPer 2.0.10, - Java 1.8.0_121, Lmod 7.3, libQGLViewer 2.6.4, libpng 1.6.27 + 1.6.28, likwid 4.2.0, MCL 02.063 + 14.137, - MCR R2013b + 2014b + R2015b + R2016b, matplotlib 2.0.0, networkx 1.1, OpenSSL 1.1.0e, OrthoMCL 1.4 + 2.0.9, - PCRE 8.40, PyTables 3.2.3.1, Pysam 0.10.0, path.py 10.1, prompt-toolkit 1.0.13, Qt5 5.8.0, ROOT 6.06.02, - SCons 2.5.1, Stacks 1.44, StringTie 1.3.3, sickle 1.33, VTK 7.1.0, ViennaRNA 2.2.3, Vim 8.0, XZ 5.2.3, - Yade 2017.01a -- added easyconfigs for new 'iomkl/2017a' and 'iompi/2017a' toolchains (#4216) + - binutils 2.28, Cantera 2.3.0, CGAL 4.9, GMP 6.1.2, IPython 5.2.2, JasPer 2.0.10, NWChem 6.6, matplotlib 2.0.0, + PCRE 8.40, Qt5 5.8.0, Vim 8.0, X11 bundle v20170129, VTK 7.1.0, Yade 2017.01a +- added new easyconfigs for existing toolchains: + - iomkl/2017a (#4216), intel/2017.02 (#4248) - various enhancements, including: - - clean up dependencies in libdrm (#4113) - - update X11 bundle and dependencies for GCCcore-6.3.0 (#4147) - - fix style in several easyconfigs (#4174, #4176, #4190) + - fix style in several easyconfigs (#4174, #4176, #4190, #4233) + - add sanity check command to Yade easyconfig to make sure that 'import yade' works, include bzip2 as dep (#4193) + - add PDF::API2 extension to Perl 5.24.0 easyconfigs + sync exts_list (#4221) - various bug fixes, including: - - allow intel 2017 to compile (#4102) - - work around build failure with GCC 6 in pkg-config (#4109) - add Bison and gettext as build deps for X11 (#4111) - - fix ippicv source download and library install in OpenCV (#4126) - - fix software name for OrthoMCL + modernise OrthoMCL easyconfigs (#4135) + - clean up dependencies in libdrm (#4113) + - make sure Ghostscript picks up external libraries (#4118) + - fix ippicv source download and library install for OpenCV v3.1.0 (#4126) + - fix software name for OrthoMCL + modernise OrthoMCL easyconfigs (#4134, #4135) - get rid of backticks in gettext descriptions, causes problems when packaging with FPM (#4146) - remove duplicate sources specification in OpenMPI (#4150) - - fix definition of buildopts/installopts in Cantera easyconfig (#4164) + - fix definition of buildopts/installopts in Cantera easyconfig (#4133, #4164, #4177) - use http rather than ftp source URLs in CFITSIO easyconfigs (#4167) - - fix broken test in Cantera 2.3.0 rather than skipping it (#4177) - add patch for XZ 5.2.2 to include 5.1.2alpha symbols required by 'rpm' command on CentOS 7.x (#4179) - - update $PATH in OrthoMCL 1.4 easyconfig (#4182) - - bump VTK to 7.1.0 in meshio easyconfig for compatibility with Yade 2017.01a (#4188) - add patch for Boost v1.61-1.63 to fix problem with make_array/array_wrapper in boost serialization library (#4192) - - add sanity check command to Yade easyconfig to make sure that 'import yade' works, include bzip2 as dep (#4193) - - set CMAKE_PREFIX_PATH to ncurses install directory (#4196) + - set CMAKE_PREFIX_PATH to ncurses install directory in CMake easyconfigs (#4196) - switch to lowopt=True for libxc v2.2.* and v3.* (#4199) - remove custom sanity_check_paths, since it's identical to that used by the R easyblock (#4200) - fix version (& homepage) in ea-utils easyconfigs (#4205) - remove --with-threads configure option in OpenMPI-2.* (#4213) - - add PDF::API2 extension to Perl 5.24.0 easyconfigs + sync exts_list (#4221) - fix check for Szip library in configure script for netCDF 4.1.3 (#4226) - fix source_urls in several easyconfigs, including: - bsoft, cutadapt, EMBOSS, GnuTLS, ImageMagick, LibTIFF, Mercurial, netCDF, netCDF-Fortran, pigz, ROOT and Subversion (#4227) diff --git a/setup.py b/setup.py index a3f5efb8ac..2cd1801e1b 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.1.0' +VERSION = '3.1.1' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 3fd0930568babad34af20192ac18bc32d340de68 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 6 Mar 2017 16:53:13 +1300 Subject: [PATCH 0587/1311] EasyConfig for ne, the nice editor, with the gimkl 2017a toolchain --- .../easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb new file mode 100644 index 0000000000..36fd965e66 --- /dev/null +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'ne' +version = '3.0.1' + +homepage = 'http://ne.di.unimi.it/' +description = """ne is a free (GPL'd) text editor based on the POSIX standard +that runs (we hope) on almost any UN*X machine. ne is easy to use for the +beginner, but powerful and fully configurable for the wizard, and most sparing +in its resource usage.""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} + +source_urls = ['http://ne.di.unimi.it/'] +sources = [SOURCELOWER_TAR_GZ] + +skipsteps = ['configure'] +installopts = "PREFIX=%(installdir)s" + +sanity_check_paths = { + 'files': ['bin/ne'], + 'dirs': ['share'], +} + +moduleclass = 'tools' -- GitLab From 5addb445e5dc856d4ebe4970d0ab2488db52ec2f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 6 Mar 2017 17:41:10 +1300 Subject: [PATCH 0588/1311] Add explicit ncurses dependency --- easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb index 36fd965e66..f6ca385967 100644 --- a/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb @@ -14,6 +14,10 @@ toolchain = {'name': 'gimkl', 'version': '2017a'} source_urls = ['http://ne.di.unimi.it/'] sources = [SOURCELOWER_TAR_GZ] +dependencies = [ + ('ncurses', '6.0'), +] + skipsteps = ['configure'] installopts = "PREFIX=%(installdir)s" -- GitLab From 7b15ed20fa7b321bb2ef12657e381d1a1c57bc8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 6 Mar 2017 08:00:12 +0100 Subject: [PATCH 0589/1311] 'dummy' -> '' --- easybuild/easyconfigs/t/tmux/tmux-2.3.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/t/tmux/tmux-2.3.eb b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb index d8ea21b236..0423702965 100644 --- a/easybuild/easyconfigs/t/tmux/tmux-2.3.eb +++ b/easybuild/easyconfigs/t/tmux/tmux-2.3.eb @@ -8,7 +8,7 @@ description = """tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.""" -toolchain = {'name': 'dummy', 'version': 'dummy'} +toolchain = {'name': 'dummy', 'version': ''} toolchainopts = {'optarch': True} sources = [SOURCE_TAR_GZ] -- GitLab From bb62863e09d4935fe68e96b4055e023014bd2e5f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 6 Mar 2017 11:39:09 +0100 Subject: [PATCH 0590/1311] adding easyconfigs: SPAdes-3.10.1-foss-2016b.eb --- .../s/SPAdes/SPAdes-3.10.1-foss-2016b.eb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb b/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb new file mode 100644 index 0000000000..c4ecdeaede --- /dev/null +++ b/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb @@ -0,0 +1,47 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# 3.9.0: +# Modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = "CMakeMake" + +name = 'SPAdes' +version = '3.10.1' + +homepage = 'http://cab.spbu.ru/software/spades/' +description = """Genome assembler for single-cell and isolates data sets""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://cab.spbu.ru/files/release%(version)s'] +sources = [SOURCE_TAR_GZ] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Boost', '1.63.0', '-Python-2.7.12'), +] + +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), +] + +start_dir = 'src' + +separate_build_dir = True + +configopts = ' -DBoost_NO_BOOST_CMAKE=ON' + +sanity_check_commands = [('spades.py', '--test')] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['bwa-spades', 'dipspades', 'dipspades.py', + 'hammer', 'ionhammer', 'spades', 'spades.py']], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 08689b0d378055ebfe07de920e6a08974761792f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 6 Mar 2017 13:25:09 +0100 Subject: [PATCH 0591/1311] add easyconfig for missing CMake dep --- .../c/CMake/CMake-3.7.2-foss-2016b.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-foss-2016b.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-foss-2016b.eb new file mode 100644 index 0000000000..1d41f93b9b --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-foss-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2j'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From ff49dc26d982489ed1ade8b1e5fd821c2dc239d6 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Mon, 6 Mar 2017 14:28:40 +0100 Subject: [PATCH 0592/1311] add sanity check python module --- .../r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb index 6bb0455477..902a9ecafd 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.08.02-foss-2016a-Python-2.7.11.eb @@ -42,6 +42,8 @@ configopts += '-Doracle=OFF -Dpgsql=OFF -Dqt=OFF -Dsqlite=OFF ' configopts += '-Dcxx14=ON ' configopts += '-Dunuran=ON -Dtable=ON -Dexplicitlink=ON -Dminuit2=ON ' +sanity_check_commands = ["python -c 'import ROOT'"] + modextrapaths = {'PYTHONPATH': 'lib/'} moduleclass = 'data' -- GitLab From de7e657c88579abd4e19329524edce969ff8dce6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 6 Mar 2017 18:47:52 +0100 Subject: [PATCH 0593/1311] adding easyconfigs: awscli-1.11.56-foss-2016b-Python-2.7.12.eb --- ...awscli-1.11.56-foss-2016b-Python-2.7.12.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/a/awscli/awscli-1.11.56-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/a/awscli/awscli-1.11.56-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/awscli/awscli-1.11.56-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..729a10008f --- /dev/null +++ b/easybuild/easyconfigs/a/awscli/awscli-1.11.56-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'awscli' +version = '1.11.56' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/awscli' +description = 'Universal Command Line Environment for AWS' + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': ['bin/aws'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'tools' -- GitLab From adfd421614f445e8fb39495272de39760de504d2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 6 Mar 2017 18:57:47 +0100 Subject: [PATCH 0594/1311] {lang}[intel/2017a] Python v2.7.13 --- .../g/GMP/GMP-6.1.2-GCCcore-6.3.0.eb | 31 ++++ .../libreadline-7.0-GCCcore-6.3.0.eb | 33 +++++ .../p/Python/Python-2.7.13-intel-2017a.eb | 133 ++++++++++++++++++ .../p/Python/numpy-1.12.0-mkl.patch | 55 ++++++++ .../t/Tcl/Tcl-8.6.6-GCCcore-6.3.0.eb | 30 ++++ 5 files changed, 282 insertions(+) create mode 100644 easybuild/easyconfigs/g/GMP/GMP-6.1.2-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/Python/numpy-1.12.0-mkl.patch create mode 100644 easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.1.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/GMP/GMP-6.1.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..046f2d1718 --- /dev/null +++ b/easybuild/easyconfigs/g/GMP/GMP-6.1.2-GCCcore-6.3.0.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'GMP' +version = '6.1.2' + +homepage = 'http://gmplib.org/' +description = """GMP is a free library for arbitrary precision arithmetic, +operating on signed integers, rational numbers, and floating point numbers. """ + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True, 'precise': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ftp.gnu.org/gnu/gmp'] + +builddependencies = [ + ('binutils', '2.27'), + ('Autotools', '20150215'), +] + +# enable C++ interface +configopts = '--enable-cxx' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libgmp.%s' % SHLIB_EXT, 'include/gmp.h'], + 'dirs': [], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..a64400af8e --- /dev/null +++ b/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libreadline' +version = '7.0' + +homepage = 'http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html' +description = """The GNU Readline library provides a set of functions for use by applications that + allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. + The Readline library includes additional functions to maintain a list of previously-entered command lines, + to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = ['readline-%(version)s.tar.gz'] +source_urls = ['http://ftp.gnu.org/gnu/readline'] + +patches = ['libreadline-%(version)s-bugfix.patch'] + +builddependencies = [('binutils', '2.27')] +dependencies = [('ncurses', '6.0')] + +# for the termcap symbols, use EB ncurses +preconfigopts = "env LDFLAGS='-lncurses'" + +sanity_check_paths = { + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb new file mode 100644 index 0000000000..31e0d3d932 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb @@ -0,0 +1,133 @@ +name = 'Python' +version = '2.7.13' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('libreadline', '7.0'), + ('ncurses', '6.0'), + ('SQLite', '3.17.0'), + ('GMP', '6.1.2'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2k'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated March 6th 2017 +exts_list = [ + # note: more recent versions of setuptools (v34.x) can not be installed from source anymore, + # see https://github.com/pypa/setuptools/issues/980 + ('setuptools', '33.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('pip', '9.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.12.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + 'source_tmpl': '%(name)s-%(version)s.zip', + 'patches': ['numpy-1.12.0-mkl.patch'], + }), + ('scipy', '0.18.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + }), + ('pbr', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('Cython', '0.25.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.6.0', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.7.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('paramiko', '2.1.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.19', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('funcsigs', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], + }), + ('mock', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], + }), + ('pytz', '2016.10', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('pandas', '0.19.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('enum34', '1.1.6', { + 'modulename': 'enum', + 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], + }), + ('bitstring', '3.1.5', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/Python/numpy-1.12.0-mkl.patch b/easybuild/easyconfigs/p/Python/numpy-1.12.0-mkl.patch new file mode 100644 index 0000000000..3d09924f96 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/numpy-1.12.0-mkl.patch @@ -0,0 +1,55 @@ +fix issues in numpy distutils pkg w.r.t. detecting BLAS/LAPACK libraries +by Kenneth Hoste (HPC-UGent) +diff -ru numpy-1.12.0.orig/numpy/distutils/fcompiler/__init__.py numpy-1.12.0/numpy/distutils/fcompiler/__init__.py +--- numpy-1.12.0.orig/numpy/distutils/fcompiler/__init__.py 2017-01-15 11:39:18.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/fcompiler/__init__.py 2017-03-06 17:19:07.262810683 +0100 +@@ -628,7 +628,10 @@ + return options + + def library_option(self, lib): +- return "-l" + lib ++ if lib[0]=='-': ++ return lib ++ else: ++ return "-l" + lib + def library_dir_option(self, dir): + return "-L" + dir + +diff -ru numpy-1.12.0.orig/numpy/distutils/system_info.py numpy-1.12.0/numpy/distutils/system_info.py +--- numpy-1.12.0.orig/numpy/distutils/system_info.py 2017-01-15 11:39:18.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/system_info.py 2017-03-06 17:25:38.778143748 +0100 +@@ -675,7 +675,7 @@ + if is_string(default): + return [default] + return default +- return [b for b in [a.strip() for a in libs.split(',')] if b] ++ return [b for b in [a.strip().replace(':',',') for a in libs.split(',')] if b] + + def get_libraries(self, key='libraries'): + if hasattr(self, '_lib_names'): +@@ -756,6 +756,9 @@ + # make sure we preserve the order of libs, as it can be important + found_dirs, found_libs = [], [] + for lib in libs: ++ if lib[0] == '-': ++ found_libs.append(lib) ++ continue + for lib_dir in lib_dirs: + found_lib = self._find_lib(lib_dir, lib, exts) + if found_lib: +diff -ru numpy-1.12.0.orig/numpy/distutils/unixccompiler.py numpy-1.12.0/numpy/distutils/unixccompiler.py +--- numpy-1.12.0.orig/numpy/distutils/unixccompiler.py 2016-12-21 16:46:24.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/unixccompiler.py 2017-03-06 17:19:07.262810683 +0100 +@@ -123,3 +123,12 @@ + + replace_method(UnixCCompiler, 'create_static_lib', + UnixCCompiler_create_static_lib) ++ ++def UnixCCompiler_library_option(self, lib): ++ if lib[0]=='-': ++ return lib ++ else: ++ return "-l" + lib ++ ++replace_method(UnixCCompiler, 'library_option', ++ UnixCCompiler_library_option) diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-6.3.0.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..9dca9f6e5c --- /dev/null +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.6-GCCcore-6.3.0.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'Tcl' +version = '8.6.6' + +homepage = 'http://www.tcl.tk/' +description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +builddependencies = [ + ('binutils', '2.27'), +] + +dependencies = [ + ('zlib', '1.2.11'), +] + +configopts = '--enable-threads EXTRA_INSTALL="install-private-headers"' + +runtest = 'test' + +start_dir = 'unix' + +moduleclass = 'lang' -- GitLab From cf160c44110226e8f37de1d8e3e235af08a0a369 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 7 Mar 2017 08:55:17 +0100 Subject: [PATCH 0595/1311] bump easyconfig files count in release notes --- RELEASE_NOTES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 060a0725f1..1c930d74fe 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,7 +3,7 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,643 easyconfig files, for 1,168 different software packages, +The latest version of easybuild-easyconfig provides 6,647 easyconfig files, for 1,168 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. v3.1.1 (March 6th 2017) -- GitLab From 36877ded32473a03edb33e9d27e99a7f498fc7e0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 7 Mar 2017 08:57:52 +0100 Subject: [PATCH 0596/1311] fix release date for EasyBuild v3.1.1 --- RELEASE_NOTES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 1c930d74fe..96a76caa5a 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,7 +6,7 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,647 easyconfig files, for 1,168 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. -v3.1.1 (March 6th 2017) +v3.1.1 (March 7th 2017) ----------------------- bugfix release -- GitLab From 533a573a1c8455697a72bd8883503a86c13bf7c0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 7 Mar 2017 15:21:30 +0100 Subject: [PATCH 0597/1311] bump version to 3.2.0.dev0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 2cd1801e1b..0683e432c9 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.1.1' +VERSION = '3.2.0.dev0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From fde809e0021a1eb648084501f5b8c547cdd255f4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 7 Mar 2017 16:24:48 +0100 Subject: [PATCH 0598/1311] adding easyconfigs: EasyBuild-3.1.1.eb --- .../e/EasyBuild/EasyBuild-3.1.1.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.1.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.1.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.1.eb new file mode 100644 index 0000000000..2dbc7fa9ba --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.1.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.1.1' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/ef/c7/640c6d791ba452321c0d1371b6626486bb495e0645bb896d33c78a09f810', + # vsc-base + 'https://pypi.python.org/packages/da/90/ee40b1a6a5bfed24139042c737500a9b45db0373a6735e76481fc860fe37', + # easybuild-framework + 'https://pypi.python.org/packages/f2/19/1c79b1ad24f0004e9507f12d4222367611f42ac479abd6315a50a23c52f5', + # easybuild-easyblocks + 'https://pypi.python.org/packages/87/aa/2a19f05c78dd2550f7bd42ef0964b9c51c5626c1e715c2ee0a4f778780b8', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/e6/68/5e977f549bf04b8cd87cdc5179d8b36c1eb971cfe3c43f98053f2dbe9c64', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.25.tar.gz', + 'vsc-base-2.5.7.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From 65002095722c407e0105a5f67bb6950a788793c4 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 11:08:55 +0800 Subject: [PATCH 0599/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.12.1-linux-x86_64.eb | 3 ++- easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.13.5-linux-x86_64.eb | 3 ++- easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.14.1-linux-x86_64.eb | 3 ++- .../a/ALLPATHS-LG/ALLPATHS-LG-46968-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/a/Advisor/Advisor-2016_update2.eb | 3 +-- easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb | 3 +-- ...-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14-serial.eb | 2 +- .../Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14.eb | 2 +- ...6.09-GCC-4.9.3-2.25-AmberTools-16-patchlevel-5-14-CUDA.eb | 2 +- easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCC-4.7.2.eb | 5 ++++- .../easyconfigs/a/Autoconf/Autoconf-2.69-goolf-1.4.10.eb | 5 ++++- easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_10.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_21.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_15.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_21.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_60.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_79.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_75.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_79.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_80.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_66.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_72.eb | 5 +++-- easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_77.eb | 5 +++-- 23 files changed, 57 insertions(+), 37 deletions(-) diff --git a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.12.1-linux-x86_64.eb b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.12.1-linux-x86_64.eb index 094f648512..1b2933e3ca 100644 --- a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.12.1-linux-x86_64.eb +++ b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.12.1-linux-x86_64.eb @@ -3,7 +3,8 @@ version = '6.12.1' versionsuffix = '-linux-x86_64' homepage = 'http://www.simulia.com/products/abaqus_fea.html' -description = "Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit dynamics FEA." +description = """Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit + dynamics FEA.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.13.5-linux-x86_64.eb b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.13.5-linux-x86_64.eb index f899ce8f01..e7d7f8108e 100644 --- a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.13.5-linux-x86_64.eb +++ b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.13.5-linux-x86_64.eb @@ -3,7 +3,8 @@ version = '6.13.5' versionsuffix = '-linux-x86_64' homepage = 'http://www.simulia.com/products/abaqus_fea.html' -description = "Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit dynamics FEA." +description = """Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit + dynamics FEA.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.14.1-linux-x86_64.eb b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.14.1-linux-x86_64.eb index 2063066a88..77fcbc5c08 100644 --- a/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.14.1-linux-x86_64.eb +++ b/easybuild/easyconfigs/a/ABAQUS/ABAQUS-6.14.1-linux-x86_64.eb @@ -3,7 +3,8 @@ version = '6.14.1' versionsuffix = '-linux-x86_64' homepage = 'http://www.simulia.com/products/abaqus_fea.html' -description = "Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit dynamics FEA." +description = """Finite Element Analysis software for modeling, visualization and best-in-class implicit and explicit + dynamics FEA.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-46968-goolf-1.4.10.eb b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-46968-goolf-1.4.10.eb index bde2863301..6fb42921f6 100644 --- a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-46968-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-46968-goolf-1.4.10.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/a/Advisor/Advisor-2016_update2.eb b/easybuild/easyconfigs/a/Advisor/Advisor-2016_update2.eb index 0e9c615ba9..70205ebf3a 100644 --- a/easybuild/easyconfigs/a/Advisor/Advisor-2016_update2.eb +++ b/easybuild/easyconfigs/a/Advisor/Advisor-2016_update2.eb @@ -15,7 +15,6 @@ sources = ['advisor_xe_%(version)s.tar.gz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'perf' diff --git a/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb b/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb index 22d5bebaad..6e2edca0dc 100644 --- a/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb +++ b/easybuild/easyconfigs/a/Advisor/Advisor-2017_update1.eb @@ -17,7 +17,6 @@ checksums = ['af87b381394be3100507827a3461b3bc'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'perf' diff --git a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14-serial.eb b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14-serial.eb index 4e451954c3..4e75833d6e 100644 --- a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14-serial.eb +++ b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14-serial.eb @@ -3,7 +3,7 @@ version = '16' ambertools_ver = '16' # Patch levels from http://ambermd.org/bugfixes16.html and http://ambermd.org/bugfixesat.html patchlevels = (5, 14) # (AmberTools, Amber) -versionsuffix = '-AmberTools-%s-patchlevel-%s-%s-serial' %(ambertools_ver, patchlevels[0], patchlevels[1]) +versionsuffix = '-AmberTools-%s-patchlevel-%s-%s-serial' % (ambertools_ver, patchlevels[0], patchlevels[1]) homepage = 'http://ambermd.org/amber.html' description = """Amber (originally Assisted Model Building with Energy diff --git a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14.eb b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14.eb index f910ba5400..b2fcc5fada 100644 --- a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14.eb +++ b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.07-AmberTools-16-patchlevel-5-14.eb @@ -3,7 +3,7 @@ version = '16' ambertools_ver = '16' # Patch levels from http://ambermd.org/bugfixes16.html and http://ambermd.org/bugfixesat.html patchlevels = (5, 14) # (AmberTools, Amber) -versionsuffix = '-AmberTools-%s-patchlevel-%s-%s' %(ambertools_ver, patchlevels[0], patchlevels[1]) +versionsuffix = '-AmberTools-%s-patchlevel-%s-%s' % (ambertools_ver, patchlevels[0], patchlevels[1]) homepage = 'http://ambermd.org/amber.html' description = """Amber (originally Assisted Model Building with Energy diff --git a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.09-GCC-4.9.3-2.25-AmberTools-16-patchlevel-5-14-CUDA.eb b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.09-GCC-4.9.3-2.25-AmberTools-16-patchlevel-5-14-CUDA.eb index 1b29f57d52..8895c479d8 100644 --- a/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.09-GCC-4.9.3-2.25-AmberTools-16-patchlevel-5-14-CUDA.eb +++ b/easybuild/easyconfigs/a/Amber/Amber-16-iomkl-2016.09-GCC-4.9.3-2.25-AmberTools-16-patchlevel-5-14-CUDA.eb @@ -3,7 +3,7 @@ version = '16' ambertools_ver = '16' # Patch levels from http://ambermd.org/bugfixes16.html and http://ambermd.org/bugfixesat.html patchlevels = (5, 14) # (AmberTools, Amber) -versionsuffix = '-AmberTools-%s-patchlevel-%s-%s-CUDA' %(ambertools_ver, patchlevels[0], patchlevels[1]) +versionsuffix = '-AmberTools-%s-patchlevel-%s-%s-CUDA' % (ambertools_ver, patchlevels[0], patchlevels[1]) homepage = 'http://ambermd.org/amber.html' description = """Amber (originally Assisted Model Building with Energy diff --git a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCC-4.7.2.eb b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCC-4.7.2.eb index 3d86e53a57..552c3eb907 100644 --- a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCC-4.7.2.eb +++ b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCC-4.7.2.eb @@ -4,7 +4,10 @@ name = 'Autoconf' version = '2.69' homepage = 'http://www.gnu.org/software/autoconf/' -description = """Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of M4 macro calls.""" +description = """Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure + software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual + user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating + system features that the package can use, in the form of M4 macro calls.""" toolchain = {'name': 'GCC', 'version': '4.7.2'} diff --git a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-goolf-1.4.10.eb b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-goolf-1.4.10.eb index 1e344106ca..612bf18994 100644 --- a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-goolf-1.4.10.eb @@ -4,7 +4,10 @@ name = 'Autoconf' version = '2.69' homepage = 'http://www.gnu.org/software/autoconf/' -description = """Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of M4 macro calls.""" +description = """Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure + software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual + user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating + system features that the package can use, in the form of M4 macro calls.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_10.eb b/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_10.eb index 69f6af4aa8..ffe0aa3aaf 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_10.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_10.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.8.4' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_21.eb b/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_21.eb index ed48c65191..f37d535fe6 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_21.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.8.4-Java-1.7.0_21.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.8.4' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_15.eb b/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_15.eb index 4e4944c69e..7a79bafbc3 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_15.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_15.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.0' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_21.eb b/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_21.eb index b01a6297fc..ab777254e9 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_21.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.0-Java-1.7.0_21.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.0' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_60.eb b/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_60.eb index ad986bd576..03ba48168e 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_60.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_60.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.3' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_79.eb b/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_79.eb index e1662e8bf2..986e3e5a6f 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_79.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.3-Java-1.7.0_79.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.3' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_75.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_75.eb index 7da7aa32db..6036bb0be8 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_75.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.6' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_79.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_79.eb index 3ee7c5b406..d51a118fba 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_79.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_79.eb @@ -3,8 +3,9 @@ version = '1.9.6' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_80.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_80.eb index d93ecdb14e..0e7df6fdf1 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.7.0_80.eb @@ -3,8 +3,9 @@ version = '1.9.6' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_66.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_66.eb index b048fcd097..33aa30131b 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_66.eb @@ -2,8 +2,9 @@ name = 'ant' version = '1.9.6' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_72.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_72.eb index 407fa7e1c0..0f10c1689b 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_72.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_72.eb @@ -3,8 +3,9 @@ version = '1.9.6' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_77.eb b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_77.eb index 08bcaf86cf..f22f0e01b7 100644 --- a/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_77.eb +++ b/easybuild/easyconfigs/a/ant/ant-1.9.6-Java-1.8.0_77.eb @@ -3,8 +3,9 @@ version = '1.9.6' versionsuffix = '-Java-%(javaver)s' homepage = 'http://ant.apache.org/' -description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files - as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications.""" +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" toolchain = {'name': 'dummy', 'version': ''} -- GitLab From 645b2a7dc2bad09463a04674595d23417da5a78c Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 11:30:46 +0800 Subject: [PATCH 0600/1311] yet another batch of minor style fixes --- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb | 2 +- .../b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb | 2 +- .../b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb | 2 +- .../easyconfigs/b/BCFtools/BCFtools-1.2-foss-2015a.eb | 5 +++-- .../b/BCFtools/BCFtools-1.2-intel-2015a.eb | 3 ++- .../easyconfigs/b/BCFtools/BCFtools-1.3-foss-2016a.eb | 3 ++- .../b/BCFtools/BCFtools-1.3-intel-2016a.eb | 3 ++- .../easyconfigs/b/BEDOPS/BEDOPS-2.4.1-GCC-4.8.4.eb | 6 +++--- easybuild/easyconfigs/b/BLAT/BLAT-3.5-goolf-1.4.10.eb | 3 ++- .../b/BLAT/BLAT-3.5-ictce-5.5.0-libpng-1.6.9.eb | 3 ++- easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0.eb | 3 ++- .../easyconfigs/b/BWA/BWA-0.7.13-goolf-1.4.10.eb | 3 ++- .../b/BXH_XCEDE_TOOLS/BXH_XCEDE_TOOLS-1.11.1.eb | 1 - .../easyconfigs/b/BayPass/BayPass-2.1-goolf-1.7.20.eb | 11 +++++------ .../b/BayesAss/BayesAss-3.0.4-foss-2016a.eb | 6 ++---- easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb | 2 +- .../BerkeleyGW-1.0.6-intel-2016.02-GCC-4.9.eb | 2 +- .../BerkeleyGW-1.1-beta2-intel-2016.02-GCC-4.9.eb | 2 +- .../BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb | 1 - .../Biopython-1.61-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../Biopython-1.61-ictce-5.3.0-Python-2.7.3.eb | 3 ++- .../Biopython-1.65-foss-2016a-Python-2.7.11.eb | 3 ++- .../Biopython-1.68-foss-2016b-Python-2.7.12.eb | 3 ++- .../Biopython-1.68-intel-2016b-Python-2.7.12.eb | 3 ++- .../Biopython-1.68-intel-2016b-Python-3.5.2.eb | 3 ++- .../Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb | 2 +- .../easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb | 4 ++-- .../easyconfigs/b/Bullet/Bullet-2.83.7-intel-2016a.eb | 4 ++-- .../b/beagle-lib/beagle-lib-2.1.2-foss-2016a.eb | 9 +++------ .../b/beagle-lib/beagle-lib-2.1.2-goolf-1.7.20.eb | 9 +++------ 30 files changed, 56 insertions(+), 53 deletions(-) diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb index 76e04042bc..938cb4bc7e 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_66.eb @@ -9,7 +9,7 @@ description = """BBMap short read aligner, and other bioinformatic tools.""" toolchain = {'name': 'foss', 'version': '2015b'} source_urls = [SOURCEFORGE_SOURCE] -sources = ['%(name)s_%(version)s.tar.gz' ] +sources = ['%(name)s_%(version)s.tar.gz'] java = 'Java' javaver = '1.8.0_66' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb index d1646b7dbe..83c91ab617 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-35.82-foss-2015b-Java-1.8.0_74.eb @@ -9,7 +9,7 @@ description = """BBMap short read aligner, and other bioinformatic tools.""" toolchain = {'name': 'foss', 'version': '2015b'} source_urls = [SOURCEFORGE_SOURCE] -sources = ['%(name)s_%(version)s.tar.gz' ] +sources = ['%(name)s_%(version)s.tar.gz'] java = 'Java' javaver = '1.8.0_74' diff --git a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb index 7e9be8c9b6..52eabb1bfe 100644 --- a/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/b/BBMap/BBMap-36.62-intel-2016b-Java-1.8.0_112.eb @@ -10,7 +10,7 @@ description = """BBMap short read aligner, and other bioinformatic tools.""" toolchain = {'name': 'intel', 'version': '2016b'} source_urls = [SOURCEFORGE_SOURCE] -sources = ['%(name)s_%(version)s.tar.gz' ] +sources = ['%(name)s_%(version)s.tar.gz'] dependencies = [('Java', '1.8.0_112', '', True)] diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-foss-2015a.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-foss-2015a.eb index 2ee4f62216..3ef62f1ae2 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-foss-2015a.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-foss-2015a.eb @@ -4,8 +4,9 @@ name = 'BCFtools' version = '1.2' homepage = 'http://www.htslib.org/' -description = """Samtools is a suite of programs for interacting with high-throughput sequencing data. - BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence variants""" +description = """Samtools is a suite of programs for interacting with high-throughput sequencing data. + BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence + variants""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True} diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-intel-2015a.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-intel-2015a.eb index f9319eca14..41baab6d42 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-intel-2015a.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.2-intel-2015a.eb @@ -5,7 +5,8 @@ version = '1.2' homepage = 'http://www.htslib.org/' description = """Samtools is a suite of programs for interacting with high-throughput sequencing data. - BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence variants""" + BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence + variants""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True} diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-foss-2016a.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-foss-2016a.eb index 6d469bdd3b..a0b589e82c 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-foss-2016a.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-foss-2016a.eb @@ -5,7 +5,8 @@ version = '1.3' homepage = 'http://www.htslib.org/' description = """Samtools is a suite of programs for interacting with high-throughput sequencing data. - BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence variants""" + BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence + variants""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True} diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-intel-2016a.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-intel-2016a.eb index bd1b04228a..af2dc1fef7 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-intel-2016a.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3-intel-2016a.eb @@ -5,7 +5,8 @@ version = '1.3' homepage = 'http://www.htslib.org/' description = """Samtools is a suite of programs for interacting with high-throughput sequencing data. - BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence variants""" + BCFtools - Reading/writing BCF2/VCF/gVCF files and calling/filtering/summarising SNP and short indel sequence + variants""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True} diff --git a/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.1-GCC-4.8.4.eb b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.1-GCC-4.8.4.eb index 47aaf73fa3..4ed43caefd 100644 --- a/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.1-GCC-4.8.4.eb +++ b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.1-GCC-4.8.4.eb @@ -27,9 +27,9 @@ parallel = 1 files_to_copy = ["bin"] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["bedmap", "bam2bed" , "sort-bed", - "starchcat", "vcf2bed", "wig2bed", - "gtf2bed", "bedops", "wig2bed"]], + 'files': ["bin/%s" % x for x in ["bedmap", "bam2bed", "sort-bed", + "starchcat", "vcf2bed", "wig2bed", + "gtf2bed", "bedops", "wig2bed"]], 'dirs': [] } diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-goolf-1.4.10.eb index afbf2938b8..eb88b061dd 100644 --- a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-goolf-1.4.10.eb @@ -11,7 +11,8 @@ name = 'BLAT' version = '3.5' homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' -description = "BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or more." +description = """BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or + more.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0-libpng-1.6.9.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0-libpng-1.6.9.eb index e2d58bafb6..0222da1546 100644 --- a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0-libpng-1.6.9.eb +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0-libpng-1.6.9.eb @@ -11,7 +11,8 @@ name = 'BLAT' version = '3.5' homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' -description = "BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or more." +description = """BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or + more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0.eb index 5f6044dcec..955ee61e30 100644 --- a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-ictce-5.5.0.eb @@ -11,7 +11,8 @@ name = 'BLAT' version = '3.5' homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' -description = "BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or more." +description = """BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or + more.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/b/BWA/BWA-0.7.13-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BWA/BWA-0.7.13-goolf-1.4.10.eb index 9cbb01f191..2dbdeeb980 100644 --- a/easybuild/easyconfigs/b/BWA/BWA-0.7.13-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BWA/BWA-0.7.13-goolf-1.4.10.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA -# Authors:: George Tsouloupas , Fotis Georgatos , Daniel Navarro +# Authors:: George Tsouloupas , Fotis Georgatos , +# Daniel Navarro # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/b/BXH_XCEDE_TOOLS/BXH_XCEDE_TOOLS-1.11.1.eb b/easybuild/easyconfigs/b/BXH_XCEDE_TOOLS/BXH_XCEDE_TOOLS-1.11.1.eb index 9cd875e7c6..c0802f9ddd 100644 --- a/easybuild/easyconfigs/b/BXH_XCEDE_TOOLS/BXH_XCEDE_TOOLS-1.11.1.eb +++ b/easybuild/easyconfigs/b/BXH_XCEDE_TOOLS/BXH_XCEDE_TOOLS-1.11.1.eb @@ -25,4 +25,3 @@ sanity_check_paths = { } moduleclass = 'bio' - diff --git a/easybuild/easyconfigs/b/BayPass/BayPass-2.1-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BayPass/BayPass-2.1-goolf-1.7.20.eb index e948c06e11..65f14b74d8 100644 --- a/easybuild/easyconfigs/b/BayPass/BayPass-2.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/BayPass/BayPass-2.1-goolf-1.7.20.eb @@ -25,12 +25,11 @@ start_dir = 'sources' parallel = 1 -files_to_copy = [(['sources/g_baypass'], 'bin/'), - 'BayPass_manual_2.1.pdf', - 'examples', - 'Licence_CeCILL-B_V1-en.txt', - 'utils' -] +files_to_copy = [(['sources/g_baypass'], 'bin/'), + 'BayPass_manual_2.1.pdf', + 'examples', + 'Licence_CeCILL-B_V1-en.txt', + 'utils'] sanity_check_paths = { 'files': ['bin/g_baypass'], diff --git a/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb b/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb index 20f57806c7..0d36886635 100644 --- a/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb +++ b/easybuild/easyconfigs/b/BayesAss/BayesAss-3.0.4-foss-2016a.eb @@ -4,9 +4,7 @@ name = 'BayesAss' version = '3.0.4' homepage = 'http://www.rannala.org/?page_id=245' -description = """ -BayesAss: Bayesian Inference of Recent Migration Using Multilocus Genotypes -""" +description = "BayesAss: Bayesian Inference of Recent Migration Using Multilocus Genotypes" toolchain = {'name': 'foss', 'version': '2016a'} sources = ['BA3-%(version)s.tar.gz'] @@ -21,7 +19,7 @@ runtest = 'check' sanity_check_paths = { 'files': ['bin/BA3'], - 'dirs' : ['bin', 'include'] + 'dirs': ['bin', 'include'] } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb b/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb index 972161d135..283940594d 100644 --- a/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb +++ b/easybuild/easyconfigs/b/Beast/Beast-1.8.4.eb @@ -18,7 +18,7 @@ description = """ BEAST is a cross-platform program for Bayesian MCMC analysis o toolchain = {'name': 'dummy', 'version': ''} -source_urls= ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] +source_urls = ['https://github.com/beast-dev/beast-mcmc/releases/download/v%(version)s/'] sources = ['BEASTv%(version)s.tgz'] dependencies = [ diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.0.6-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.0.6-intel-2016.02-GCC-4.9.eb index 5afb842c80..ff35b3fe93 100644 --- a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.0.6-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.0.6-intel-2016.02-GCC-4.9.eb @@ -28,7 +28,7 @@ buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2 installopts = 'INSTDIR=%(installdir)s' sanity_check_paths = { - 'files': ['bin/'+prog+'.'+flavor+'.x' + 'files': ['bin/' + prog + '.' + flavor + '.x' for prog in ['epsilon', 'sigma', 'kernel', 'absorption'] for flavor in ['real', 'cplx']], 'dirs': [] diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.1-beta2-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.1-beta2-intel-2016.02-GCC-4.9.eb index 9d064dae20..0f2dfc0807 100644 --- a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.1-beta2-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.1-beta2-intel-2016.02-GCC-4.9.eb @@ -28,7 +28,7 @@ buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2 installopts = 'INSTDIR=%(installdir)s' sanity_check_paths = { - 'files': ['bin/'+prog+'.'+flavor+'.x' + 'files': ['bin/' + prog + '.' + flavor + '.x' for prog in ['epsilon', 'sigma', 'kernel', 'absorption'] for flavor in ['real', 'cplx']], 'dirs': [] diff --git a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb index 2661f0fe38..c32f54aa1d 100644 --- a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.6.924-foss-2016a-Perl-5.22.1.eb @@ -37,4 +37,3 @@ modextrapaths = { } moduleclass = 'bio' - diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.61-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.61-goolf-1.4.10-Python-2.7.3.eb index a3dca17749..26ff0e4f6a 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.61-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.61-goolf-1.4.10-Python-2.7.3.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.61-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.61-ictce-5.3.0-Python-2.7.3.eb index 5efa64f0e0..462ab92f17 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.61-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.61-ictce-5.3.0-Python-2.7.3.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.65-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.65-foss-2016a-Python-2.7.11.eb index a42f248efe..c5aa94f58c 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.65-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.65-foss-2016a-Python-2.7.11.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-foss-2016b-Python-2.7.12.eb index 1c5fd3f356..f5a410bf23 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-foss-2016b-Python-2.7.12.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-2.7.12.eb index 953304846e..762f84f558 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-2.7.12.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-3.5.2.eb index b22f51705c..36d03b946c 100644 --- a/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/b/Biopython/Biopython-1.68-intel-2016b-Python-3.5.2.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb b/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb index b906f81abf..24c748d95f 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.60.0-CrayGNU-2016.03-Python-2.7.11.eb @@ -18,7 +18,7 @@ pythonversion = '2.7.11' versionsuffix = '-Python-%s' % pythonversion dependencies = [ - ('bzip2', '1.0.6' ), + ('bzip2', '1.0.6'), ('Python', pythonversion), ] diff --git a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb index 95d2b2fb64..bcb89c1b4e 100644 --- a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb @@ -19,8 +19,8 @@ builddependencies = [('CMake', '3.5.2')] configopts = "-DBUILD_SHARED_LIBS=ON" sanity_check_paths = { - 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] - + ['lib/libBullet%s.%s' % (x,SHLIB_EXT) for x in ['Collision', 'Dynamics']], + 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] + + ['lib/libBullet%s.%s' % (x, SHLIB_EXT) for x in ['Collision', 'Dynamics']], 'dirs': [], } diff --git a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-intel-2016a.eb b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-intel-2016a.eb index d23fa88f57..dce0112a41 100644 --- a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-intel-2016a.eb +++ b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-intel-2016a.eb @@ -19,8 +19,8 @@ builddependencies = [('CMake', '3.5.2')] configopts = "-DBUILD_SHARED_LIBS=ON" sanity_check_paths = { - 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] - + ['lib/libBullet%s.%s' % (x,SHLIB_EXT) for x in ['Collision', 'Dynamics']], + 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] + + ['lib/libBullet%s.%s' % (x, SHLIB_EXT) for x in ['Collision', 'Dynamics']], 'dirs': [], } diff --git a/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-foss-2016a.eb b/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-foss-2016a.eb index 29785ed5e6..49900e2203 100644 --- a/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-foss-2016a.eb +++ b/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-foss-2016a.eb @@ -2,12 +2,9 @@ easyblock = 'ConfigureMake' name = 'beagle-lib' version = '2.1.2' -homepage= 'https://github.com/beagle-dev/beagle-lib' -description = """ -beagle-lib is a high-performance library that can perform the core -calculations at the heart of most Bayesian and Maximum Likelihood -phylogenetics packages. -""" +homepage = 'https://github.com/beagle-dev/beagle-lib' +description = """beagle-lib is a high-performance library that can perform the core calculations at the heart of most + Bayesian and Maximum Likelihood phylogenetics packages.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-goolf-1.7.20.eb b/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-goolf-1.7.20.eb index ba27dc855d..eb31afb551 100644 --- a/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/beagle-lib/beagle-lib-2.1.2-goolf-1.7.20.eb @@ -3,12 +3,9 @@ easyblock = 'ConfigureMake' name = 'beagle-lib' version = '2.1.2' -homepage= 'https://github.com/beagle-dev/beagle-lib' -description = """ -beagle-lib is a high-performance library that can perform the core -calculations at the heart of most Bayesian and Maximum Likelihood -phylogenetics packages. -""" +homepage = 'https://github.com/beagle-dev/beagle-lib' +description = """beagle-lib is a high-performance library that can perform the core calculations at the heart of most + Bayesian and Maximum Likelihood phylogenetics packages.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} -- GitLab From cb34f841946cc8f5be8a95031e763e7c2ddc4c9d Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 14:41:26 +0800 Subject: [PATCH 0601/1311] yet another batch of minor style fixes --- .../easyconfigs/c/CLooG/CLooG-0.18.1-GCC-4.8.2.eb | 14 +++++++------- easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-1.eb | 3 ++- .../easyconfigs/c/CUDA/CUDA-5.0.35-GCC-4.6.4-1.eb | 3 ++- .../CVXOPT-1.1.5-goolf-1.4.10-Python-2.7.3.eb | 5 +++-- .../CVXOPT-1.1.5-ictce-5.3.0-Python-2.7.3.eb | 5 +++-- easybuild/easyconfigs/c/CrayPGI/CrayPGI-2016.04.eb | 9 ++++----- .../Cython-0.16-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../Cython/Cython-0.16-ictce-5.3.0-Python-2.7.3.eb | 3 ++- .../Cython-0.19.1-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../Cython-0.19.1-ictce-5.3.0-Python-2.7.3.eb | 3 ++- .../Cython-0.19.2-ictce-5.5.0-Python-2.7.6.eb | 3 ++- .../Cython-0.22-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../Cython-0.23.4-gimkl-2.11.5-Python-2.7.10.eb | 3 ++- .../Cython-0.24.1-foss-2016a-Python-2.7.11.eb | 3 ++- 14 files changed, 37 insertions(+), 26 deletions(-) diff --git a/easybuild/easyconfigs/c/CLooG/CLooG-0.18.1-GCC-4.8.2.eb b/easybuild/easyconfigs/c/CLooG/CLooG-0.18.1-GCC-4.8.2.eb index fbd1e0f85d..137bbb1603 100644 --- a/easybuild/easyconfigs/c/CLooG/CLooG-0.18.1-GCC-4.8.2.eb +++ b/easybuild/easyconfigs/c/CLooG/CLooG-0.18.1-GCC-4.8.2.eb @@ -4,13 +4,13 @@ name = 'CLooG' version = '0.18.1' homepage = 'http://www.bastoul.net/cloog/index.php' -description = """CLooG is a free software and library to generate code for scanning Z-polyhedra. -That is, it finds a code (e.g. in C, FORTRAN...) that reaches each integral point of one or more parameterized polyhedra. -CLooG has been originally written to solve the code generation problem for optimizing compilers based on the polytope model. -Nevertheless it is used now in various area e.g. to build control automata for high-level synthesis or to find the best -polynomial approximation of a function. CLooG may help in any situation where scanning polyhedra matters. While the user -has full control on generated code quality, CLooG is designed to avoid control overhead and to produce a very effective code. -""" +description = """CLooG is a free software and library to generate code for scanning Z-polyhedra. That is, it finds a + code (e.g. in C, FORTRAN...) that reaches each integral point of one or more parameterized polyhedra. CLooG has been + originally written to solve the code generation problem for optimizing compilers based on the polytope model. + Nevertheless it is used now in various area e.g. to build control automata for high-level synthesis or to find the + best polynomial approximation of a function. CLooG may help in any situation where scanning polyhedra matters. While + the user has full control on generated code quality, CLooG is designed to avoid control overhead and to produce a + very effective code.""" toolchain = {'name': 'GCC', 'version': '4.8.2'} diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-1.eb b/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-1.eb index 299410b70c..8997152413 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-1.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-1.eb @@ -36,7 +36,8 @@ elif OS_NAME in ['debian', 'ubuntu']: if OS_VERSION in ['11.10', '10.04']: system = 'ubuntu%s' % OS_VERSION else: - print "Falling back to ubuntu11.10 as default for OS_NAME=%s, OS_VERSION=%s; kindly amend this easyconfig" % (OS_NAME, OS_VERSION) + OS = (OS_NAME, OS_VERSION) + print "Falling back to ubuntu11.10 as default for OS_NAME=%s, OS_VERSION=%s; kindly amend this easyconfig" % OS system = 'ubuntu11.10' elif OS_NAME == "opensuse": system = 'suse12.1' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-GCC-4.6.4-1.eb b/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-GCC-4.6.4-1.eb index 9b2a072f8b..194a2991a9 100644 --- a/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-GCC-4.6.4-1.eb +++ b/easybuild/easyconfigs/c/CUDA/CUDA-5.0.35-GCC-4.6.4-1.eb @@ -36,7 +36,8 @@ elif OS_NAME in ['debian', 'ubuntu']: if OS_VERSION in ['11.10', '10.04']: system = 'ubuntu%s' % OS_VERSION else: - print "Falling back to ubuntu11.10 as default for OS_NAME=%s, OS_VERSION=%s; kindly amend this easyconfig" % (OS_NAME, OS_VERSION) + OS = (OS_NAME, OS_VERSION) + print "Falling back to ubuntu11.10 as default for OS_NAME=%s, OS_VERSION=%s; kindly amend this easyconfig" % OS system = 'ubuntu11.10' elif OS_NAME == "opensuse": system = 'suse12.1' diff --git a/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-goolf-1.4.10-Python-2.7.3.eb index 071eb0169f..e06141ece5 100644 --- a/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-goolf-1.4.10-Python-2.7.3.eb @@ -5,8 +5,9 @@ version = '1.1.5' homepage = 'http://abel.ee.ucla.edu/cvxopt/' description = """CVXOPT is a free software package for convex optimization based on the Python programming language. -Its main purpose is to make the development of software for convex optimization applications straightforward -by building on Python's extensive standard library and on the strengths of Python as a high-level programming language.""" + Its main purpose is to make the development of software for convex optimization applications straightforward by + building on Python's extensive standard library and on the strengths of Python as a high-level programming language. +""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-ictce-5.3.0-Python-2.7.3.eb index 3e32468f92..795f2f0360 100644 --- a/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/CVXOPT/CVXOPT-1.1.5-ictce-5.3.0-Python-2.7.3.eb @@ -5,8 +5,9 @@ version = '1.1.5' homepage = 'http://abel.ee.ucla.edu/cvxopt/' description = """CVXOPT is a free software package for convex optimization based on the Python programming language. - Its main purpose is to make the development of software for convex optimization applications straightforward - by building on Python's extensive standard library and on the strengths of Python as a high-level programming language.""" + Its main purpose is to make the development of software for convex optimization applications straightforward by + building on Python's extensive standard library and on the strengths of Python as a high-level programming language. +""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/c/CrayPGI/CrayPGI-2016.04.eb b/easybuild/easyconfigs/c/CrayPGI/CrayPGI-2016.04.eb index 112a9312bc..8f554a1eb2 100644 --- a/easybuild/easyconfigs/c/CrayPGI/CrayPGI-2016.04.eb +++ b/easybuild/easyconfigs/c/CrayPGI/CrayPGI-2016.04.eb @@ -9,11 +9,10 @@ description = """Toolchain using Cray compiler wrapper, using PrgEnv-pgi module. toolchain = {'name': 'dummy', 'version': 'dummy'} dependencies = [ - # PrgEnv version is not pinned, as Cray recommends to use the latest (default) version - ('PrgEnv-pgi', EXTERNAL_MODULE), - ('pgi/16.3.0' , EXTERNAL_MODULE), - ('cray-mpich/7.3.2', EXTERNAL_MODULE), + # PrgEnv version is not pinned, as Cray recommends to use the latest (default) version + ('PrgEnv-pgi', EXTERNAL_MODULE), + ('pgi/16.3.0', EXTERNAL_MODULE), + ('cray-mpich/7.3.2', EXTERNAL_MODULE), ] moduleclass = 'toolchain' - diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.16-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/c/Cython/Cython-0.16-goolf-1.4.10-Python-2.7.3.eb index fa53744e7c..e22250c990 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.16-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.16-goolf-1.4.10-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '0.16' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. - Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.16-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/c/Cython/Cython-0.16-ictce-5.3.0-Python-2.7.3.eb index f2fb277465..33b4c1bc5b 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.16-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.16-ictce-5.3.0-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '0.16' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. - Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.19.1-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/c/Cython/Cython-0.19.1-goolf-1.4.10-Python-2.7.3.eb index 0e8ac631d0..ec51d696a0 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.19.1-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.19.1-goolf-1.4.10-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '0.19.1' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. - Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.19.1-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/c/Cython/Cython-0.19.1-ictce-5.3.0-Python-2.7.3.eb index 6ba8ee3375..1cdbf2c1fc 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.19.1-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.19.1-ictce-5.3.0-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '0.19.1' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. - Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.19.2-ictce-5.5.0-Python-2.7.6.eb b/easybuild/easyconfigs/c/Cython/Cython-0.19.2-ictce-5.5.0-Python-2.7.6.eb index 80955e4cc6..8494b353e5 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.19.2-ictce-5.5.0-Python-2.7.6.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.19.2-ictce-5.5.0-Python-2.7.6.eb @@ -5,7 +5,8 @@ version = '0.19.2' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. - Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.22-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/c/Cython/Cython-0.22-goolf-1.4.10-Python-2.7.3.eb index 1a87b1c99c..769f55ce72 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.22-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.22-goolf-1.4.10-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '0.22' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. -Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" +Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.23.4-gimkl-2.11.5-Python-2.7.10.eb b/easybuild/easyconfigs/c/Cython/Cython-0.23.4-gimkl-2.11.5-Python-2.7.10.eb index 426fedf887..dd9fc1ad56 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.23.4-gimkl-2.11.5-Python-2.7.10.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.23.4-gimkl-2.11.5-Python-2.7.10.eb @@ -6,7 +6,8 @@ versionsuffix = '-Python-%(pyver)s' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. -Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" +Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'gimkl', 'version': '2.11.5'} diff --git a/easybuild/easyconfigs/c/Cython/Cython-0.24.1-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/Cython/Cython-0.24.1-foss-2016a-Python-2.7.11.eb index a2db0bddbe..0dfcb1056b 100644 --- a/easybuild/easyconfigs/c/Cython/Cython-0.24.1-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Cython/Cython-0.24.1-foss-2016a-Python-2.7.11.eb @@ -6,7 +6,8 @@ versionsuffix = '-Python-%(pyver)s' homepage = 'https://pypi.python.org/pypi/Cython/' description = """The Cython language makes writing C extensions for the Python language as easy as Python itself. -Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.""" + Cython is a source code translator based on the well-known Pyrex, but supports more cutting edge functionality and + optimizations.""" toolchain = {'name': 'foss', 'version': '2016a'} -- GitLab From b2c06bc2d82e3c1e666cff29ade846e11e5eade3 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 14:59:09 +0800 Subject: [PATCH 0602/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/d/DB/DB-6.2.23-foss-2016a.eb | 2 +- .../d/DB_File/DB_File-1.835-foss-2016a-Perl-5.22.1.eb | 1 - easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb | 3 ++- easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb | 3 ++- easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb | 3 ++- easybuild/easyconfigs/d/DFT-D3/DFT-D3-3.1.1-intel-2015a.eb | 3 ++- easybuild/easyconfigs/d/DMTCP/DMTCP-2.4.5.eb | 1 - easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb | 1 - easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-ictce-6.2.5.eb | 2 +- 10 files changed, 11 insertions(+), 10 deletions(-) diff --git a/easybuild/easyconfigs/d/DB/DB-6.2.23-foss-2016a.eb b/easybuild/easyconfigs/d/DB/DB-6.2.23-foss-2016a.eb index fcf1bd7696..b1a5625761 100644 --- a/easybuild/easyconfigs/d/DB/DB-6.2.23-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DB/DB-6.2.23-foss-2016a.eb @@ -15,4 +15,4 @@ sanity_check_paths = { 'dirs': [], } -moduleclass = 'tools' \ No newline at end of file +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/d/DB_File/DB_File-1.835-foss-2016a-Perl-5.22.1.eb b/easybuild/easyconfigs/d/DB_File/DB_File-1.835-foss-2016a-Perl-5.22.1.eb index 8c069fec94..03f4831ace 100644 --- a/easybuild/easyconfigs/d/DB_File/DB_File-1.835-foss-2016a-Perl-5.22.1.eb +++ b/easybuild/easyconfigs/d/DB_File/DB_File-1.835-foss-2016a-Perl-5.22.1.eb @@ -25,4 +25,3 @@ sanity_check_paths = { } moduleclass = 'data' - diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb index 7071afdb2c..c041d6e2aa 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb @@ -16,7 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', + 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb index 0940c66fb5..e933c1af39 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb @@ -16,7 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', + 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb index f322881382..74d90eb777 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb @@ -16,7 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', + 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } diff --git a/easybuild/easyconfigs/d/DFT-D3/DFT-D3-3.1.1-intel-2015a.eb b/easybuild/easyconfigs/d/DFT-D3/DFT-D3-3.1.1-intel-2015a.eb index 99e680c26d..389f7d8425 100644 --- a/easybuild/easyconfigs/d/DFT-D3/DFT-D3-3.1.1-intel-2015a.eb +++ b/easybuild/easyconfigs/d/DFT-D3/DFT-D3-3.1.1-intel-2015a.eb @@ -4,7 +4,8 @@ name = 'DFT-D3' version = '3.1.1' homepage = 'http://www.thch.uni-bonn.de/tc/index.php?section=downloads&subsection=DFT-D3&lang=english' -description = """DFT-D3 implements a dispersion correction for density functionals, Hartree-Fock and semi-empirical quantum chemical methods.""" +description = """DFT-D3 implements a dispersion correction for density functionals, Hartree-Fock and semi-empirical + quantum chemical methods.""" toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/d/DMTCP/DMTCP-2.4.5.eb b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.4.5.eb index 597de0792e..04e4fd7a51 100644 --- a/easybuild/easyconfigs/d/DMTCP/DMTCP-2.4.5.eb +++ b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.4.5.eb @@ -24,4 +24,3 @@ sanity_check_paths = { } moduleclass = 'tools' - diff --git a/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb index 3f64420e2e..1687e9b44d 100644 --- a/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DMTCP/DMTCP-2.5.0-foss-2016a.eb @@ -24,4 +24,3 @@ sanity_check_paths = { } moduleclass = 'tools' - diff --git a/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-goolf-1.4.10.eb b/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-goolf-1.4.10.eb index ed4f3f692d..3d7e8e50d6 100644 --- a/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-goolf-1.4.10.eb @@ -23,7 +23,7 @@ buildopts = ' CC="$CC"' parallel = 1 -files_to_copy = [ (['drfast'], 'bin'), "README.txt" ] +files_to_copy = [(['drfast'], 'bin'), "README.txt"] sanity_check_paths = { 'files': ["bin/drfast", "README.txt"], diff --git a/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-ictce-6.2.5.eb b/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-ictce-6.2.5.eb index 3f01a8dfb9..33794a918d 100644 --- a/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/d/drFAST/drFAST-1.0.0.0-ictce-6.2.5.eb @@ -23,7 +23,7 @@ buildopts = ' CC="$CC"' parallel = 1 -files_to_copy = [ (['drfast'], 'bin'), "README.txt" ] +files_to_copy = [(['drfast'], 'bin'), "README.txt"] sanity_check_paths = { 'files': ["bin/drfast", "README.txt"], -- GitLab From 7573dd7036cbb7fd602b4a4c786a4b6c924b0413 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 15:06:39 +0800 Subject: [PATCH 0603/1311] yet another batch of minor style fixes --- .../e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb | 12 ++++++------ .../easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb | 3 ++- .../easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb index 6b962c6687..a429626ec5 100644 --- a/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/e/EIGENSOFT/EIGENSOFT-6.1.1-goolf-1.7.20.eb @@ -11,12 +11,12 @@ name = 'EIGENSOFT' version = '6.1.1' homepage = 'http://www.hsph.harvard.edu/alkes-price/software/' -description = """The EIGENSOFT package combines functionality from our population genetics methods (Patterson et al. 2006) - and our EIGENSTRAT stratification correction method (Price et al. 2006). The EIGENSTRAT method uses principal components - analysis to explicitly model ancestry differences between cases and controls along continuous axes of variation; - the resulting correction is specific to a candidate marker’s variation in frequency across ancestral populations, - minimizing spurious associations while maximizing power to detect true associations. The EIGENSOFT package has a built-in - plotting script and supports multiple file formats and quantitative phenotypes.""" +description = """The EIGENSOFT package combines functionality from our population genetics methods (Patterson et al. + 2006) and our EIGENSTRAT stratification correction method (Price et al. 2006). The EIGENSTRAT method uses principal + components analysis to explicitly model ancestry differences between cases and controls along continuous axes of + variation; the resulting correction is specific to a candidate marker’s variation in frequency across ancestral + populations, minimizing spurious associations while maximizing power to detect true associations. The EIGENSOFT + package has a built-in plotting script and supports multiple file formats and quantitative phenotypes.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb index 89cd537fc7..5d29ad3201 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb @@ -23,7 +23,8 @@ sources = ['%(name)s_%(version)s.006_20140312.tar.gz'] patches = ['ELPA_fix-tests.patch'] -configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' +configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" ' +configopts += 'LIBS="$LIBSCALAPACK"' buildopts = ' V=1 LIBS="$LIBSCALAPACK"' start_dir = '%(name)s_%(version)s' diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb index bbbc8c56b4..b5d3e358e9 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb @@ -23,7 +23,8 @@ sources = ['%(name)s_%(version)s.006_20140312.tar.gz'] patches = ['ELPA_fix-tests.patch'] -configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' +configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" ' +configopts += 'LIBS="$LIBSCALAPACK"' buildopts = ' V=1 LIBS="$LIBSCALAPACK"' start_dir = '%(name)s_%(version)s' -- GitLab From b9e4dd100da43895e59db82f464b1e4c11a84ce8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 08:43:10 +0100 Subject: [PATCH 0604/1311] adding easyconfigs: PGI-17.1-GCC-6.3.0-2.27.eb --- .../p/PGI/PGI-17.1-GCC-6.3.0-2.27.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/p/PGI/PGI-17.1-GCC-6.3.0-2.27.eb diff --git a/easybuild/easyconfigs/p/PGI/PGI-17.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/p/PGI/PGI-17.1-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..6502b349fb --- /dev/null +++ b/easybuild/easyconfigs/p/PGI/PGI-17.1-GCC-6.3.0-2.27.eb @@ -0,0 +1,25 @@ +name = 'PGI' +version = '17.1' + +homepage = 'http://www.pgroup.com/' +description = "C, C++ and Fortran compilers from The Portland Group - PGI" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['pgilinux-20%(version_major)s-%(version_major)s%(version_minor)s-x86_64.tar.gz'] +checksums = ['836f536ad8b0aac0234f7528fbd56b62'] + +gccver = '6.3.0' +binutilsver = '2.27' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), + ('numactl', '2.0.11', '', ('GCCcore', gccver)), +] + +# license file +license_file = HOME + '/licenses/pgi/license.dat' + +moduleclass = 'compiler' -- GitLab From ebd527a224dce1fa117b30a94a8f5fd5ab75a0fc Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 16:15:51 +0800 Subject: [PATCH 0605/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/f/FLEUR/FLEUR-0.26e-intel-2016a.eb | 2 +- easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb | 6 +++--- .../easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb | 3 ++- easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb | 3 ++- .../f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb | 3 ++- .../easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb | 3 ++- 25 files changed, 50 insertions(+), 27 deletions(-) diff --git a/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-goolf-1.4.10.eb b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-goolf-1.4.10.eb index c1501d5c82..cb997fa593 100644 --- a/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-goolf-1.4.10.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-ictce-5.3.0.eb b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-ictce-5.3.0.eb index 6b9a39e112..31a89c0085 100644 --- a/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-ictce-5.3.0.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 The Cyprus Institute -# Authors:: Andreas Panteli , Thekla Loizou , George Tsouloupas +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas # License:: MIT/GPL # ## diff --git a/easybuild/easyconfigs/f/FLEUR/FLEUR-0.26e-intel-2016a.eb b/easybuild/easyconfigs/f/FLEUR/FLEUR-0.26e-intel-2016a.eb index d7d711211d..aee9c310da 100644 --- a/easybuild/easyconfigs/f/FLEUR/FLEUR-0.26e-intel-2016a.eb +++ b/easybuild/easyconfigs/f/FLEUR/FLEUR-0.26e-intel-2016a.eb @@ -19,7 +19,7 @@ dependencies = [ ('zlib', '1.2.8'), ('Szip', '2.1'), ('HDF5', '1.8.16'), -# ('Wannier90', '2.0.1'), # only needed if '#define wann' is added to Imakefile + # ('Wannier90', '2.0.1'), # only needed if '#define wann' is added to Imakefile ] # define hardware platform to be 'parallel intel compiler, 64 bit, use scalapack') diff --git a/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb b/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb index 59de3272db..1788c8a21a 100644 --- a/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb +++ b/easybuild/easyconfigs/f/Firefox/Firefox-44.0.2.eb @@ -9,9 +9,9 @@ name = 'Firefox' version = '44.0.2' homepage = 'https://www.mozilla.org/en-US/firefox/new/' -description = """Firefox is a free, open source Web browser for Windows, Linux and Mac OS X. It is based on the Mozilla code - base and offers customization options and features such as its capability to block pop-up windows, tabbed browsing, privacy - and security measures, smart searching, and RSS live bookmarks.""" +description = """Firefox is a free, open source Web browser for Windows, Linux and Mac OS X. It is based on the + Mozilla code base and offers customization options and features such as its capability to block pop-up windows, + tabbed browsing, privacy and security measures, smart searching, and RSS live bookmarks.""" toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb index 09e345ac68..7e51dd88f4 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb @@ -13,7 +13,8 @@ source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb index f0c8e977f8..bcf6608413 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb @@ -12,7 +12,8 @@ source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb index dafae024b0..916f1302f2 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb @@ -13,7 +13,8 @@ source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb index 93ed64ef31..26eaffc5f6 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb @@ -12,7 +12,8 @@ source_urls = ['http://download.savannah.gnu.org/releases/freetype/'] sources = [SOURCE_TAR_GZ] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb index c7a87aa9ac..cbbe1daafc 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb index 5fa7fbc89e..a5e70027fa 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb index 6af71f85ba..8fa382b0ca 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb index 7424371c29..0571a145ad 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.9')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb index 1840f18b99..cea107f292 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb index cf4ca6186c..9b0aae30b7 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb index 68312d108d..45d6dc8e93 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb index e9f0fd7c95..c9b6e770b4 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb index 5eb7f91b58..07f4f8160c 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb index ca24a618dc..44080cb0f8 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb index 8978812458..7cfa18b2f4 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb index af7228f4f5..78c7fb98d6 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb index 316e040e08..4cf88e23a7 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb index 32b12425a8..8405a0ec93 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb @@ -16,7 +16,8 @@ versionsuffix = '-libpng-%s' % libpngver dependencies = [('libpng', libpngver)] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb index 0913227caf..9c9d2b2e08 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.18')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb index 32c4b9ab5c..bbfd2a2508 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.20')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb index 54449d2405..912f826139 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb @@ -14,7 +14,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.21')] sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } -- GitLab From 16127fff4d6a6db5774b196d529850bdf34fc427 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 09:21:20 +0100 Subject: [PATCH 0606/1311] revert back to using shipped Boost for SPAdes 3.10.1, since Boost version difference is too big --- easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb b/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb index c4ecdeaede..6e5c9aeb32 100644 --- a/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb +++ b/easybuild/easyconfigs/s/SPAdes/SPAdes-3.10.1-foss-2016b.eb @@ -20,10 +20,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://cab.spbu.ru/files/release%(version)s'] sources = [SOURCE_TAR_GZ] -builddependencies = [ - ('CMake', '3.7.2'), - ('Boost', '1.63.0', '-Python-2.7.12'), -] +builddependencies = [('CMake', '3.7.2')] dependencies = [ ('zlib', '1.2.8'), -- GitLab From fc7300777ea6b8d9938c626e0f3642a3f7e4119b Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 16:45:11 +0800 Subject: [PATCH 0607/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb | 3 ++- easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb | 3 ++- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb | 3 ++- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb | 3 ++- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb | 3 ++- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb | 3 ++- easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb | 3 ++- easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb | 3 ++- easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb | 3 ++- easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb | 3 ++- easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb | 1 - .../g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.06-mpi.eb | 4 ++-- .../g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.11-mpi.eb | 4 ++-- .../g/GROMACS/GROMACS-4.6.7-CrayIntel-2015.11-mpi.eb | 4 ++-- .../easyconfigs/g/GROMACS/GROMACS-5.1.2-goolf-1.7.20-mt.eb | 4 ++-- .../easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb | 3 ++- .../easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb | 3 ++- easybuild/easyconfigs/g/Grep/Grep-2.21-GCC-4.9.2.eb | 3 ++- .../g/gensim/gensim-0.13.2-foss-2016a-Python-2.7.11.eb | 2 +- easybuild/easyconfigs/g/git-lfs/git-lfs-1.1.1.eb | 4 ++-- easybuild/easyconfigs/g/gompi/gompi-2016.07.eb | 4 ++-- .../easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb | 3 ++- 27 files changed, 51 insertions(+), 33 deletions(-) diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb index 69dadef3c7..bae4a90d91 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_21.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb index c8e83f1af6..88a772e2f8 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.7.0_80.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb index e60f317150..d0d5a239b6 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.3-0-Java-1.8.0_66.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb index 47af207c6f..b6d45b10ea 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_66.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb index 9faee44d8b..935f73ec90 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.5-Java-1.8.0_74.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb index fa068137af..6ed0f40863 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.6-Java-1.8.0_92.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb index 9d0b198d0f..afc148cb14 100644 --- a/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb +++ b/easybuild/easyconfigs/g/GATK/GATK-3.7-Java-1.8.0_112.eb @@ -2,7 +2,8 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB -# Authors:: George Tsouloupas , Fotis Georgatos , Kenneth Hoste (UGent) +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) # License:: MIT/GPL # $Id$ # diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb index 4cfb618383..e5810437c4 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb @@ -103,7 +103,8 @@ full_sanity_check = True eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), 'lib64/python%s/site-packages/%s' % (pyver, eggname))], + ('lib/python%s/site-packages/%s' % (pyver, eggname), + 'lib64/python%s/site-packages/%s' % (pyver, eggname))], 'dirs': [], } diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb index 70eb5b0a10..0a33e2b925 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb @@ -103,7 +103,8 @@ full_sanity_check = True eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), 'lib64/python%s/site-packages/%s' % (pyver, eggname))], + ('lib/python%s/site-packages/%s' % (pyver, eggname), + 'lib64/python%s/site-packages/%s' % (pyver, eggname))], 'dirs': [], } diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb index 477760c3c0..49772e1a73 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb @@ -103,7 +103,8 @@ full_sanity_check = True eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), 'lib64/python%s/site-packages/%s' % (pyver, eggname))], + ('lib/python%s/site-packages/%s' % (pyver, eggname), + 'lib64/python%s/site-packages/%s' % (pyver, eggname))], 'dirs': [], } diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb index d952c14671..98f0d96369 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb @@ -103,7 +103,8 @@ full_sanity_check = True eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), 'lib64/python%s/site-packages/%s' % (pyver, eggname))], + ('lib/python%s/site-packages/%s' % (pyver, eggname), + 'lib64/python%s/site-packages/%s' % (pyver, eggname))], 'dirs': [], } diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb index 73ce1be6d6..fecad61365 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb @@ -21,7 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.11')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " +configopts += "--disable-systemtap" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb index 918c5aec06..b29b2e7ddf 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb @@ -21,7 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.11')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " +configopts += "--disable-systemtap" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb index 3e8dd8b2df..ffe44a8cda 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb @@ -21,7 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.12')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " +configopts += "--disable-systemtap" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb index cabfe78d32..ba98f92742 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb @@ -21,7 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.12')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " +configopts += "--disable-systemtap" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb b/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb index ab0d6b9ba8..e822e11f35 100644 --- a/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb +++ b/easybuild/easyconfigs/g/GMP/GMP-6.0.0a-foss-2015b.eb @@ -24,4 +24,3 @@ sanity_check_paths = { } moduleclass = 'math' - diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.06-mpi.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.06-mpi.eb index 7fae7e2b3f..adf36de398 100644 --- a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.06-mpi.eb +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.06-mpi.eb @@ -31,11 +31,11 @@ sources = [ 'regressiontests-%(version)s.tar.gz', ] -preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:${EBROOTFFTW}/lib && " +preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:${EBROOTFFTW}/lib && " preconfigopts += "export CMAKE_INCLUDE_PATH=$CMAKE_INCLUDE_PATH:${EBROOTFFTW}/include && " dependencies = [ - ('fftw/3.3.4.3', EXTERNAL_MODULE), + ('fftw/3.3.4.3', EXTERNAL_MODULE), ] builddependencies = [('CMake', '3.2.2')] diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.11-mpi.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.11-mpi.eb index 83b2732fb5..f52ab6e342 100644 --- a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.11-mpi.eb +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayGNU-2015.11-mpi.eb @@ -31,11 +31,11 @@ sources = [ 'regressiontests-%(version)s.tar.gz', ] -preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:$EBROOTFFTW/lib && " +preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:$EBROOTFFTW/lib && " preconfigopts += "export CMAKE_INCLUDE_PATH=$CMAKE_INCLUDE_PATH:$EBROOTFFTW/include && " dependencies = [ - ('fftw/3.3.4.5', EXTERNAL_MODULE), + ('fftw/3.3.4.5', EXTERNAL_MODULE), ] builddependencies = [('CMake', '3.2.2')] diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayIntel-2015.11-mpi.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayIntel-2015.11-mpi.eb index 350a3d6cfa..3f046b2129 100644 --- a/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayIntel-2015.11-mpi.eb +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-4.6.7-CrayIntel-2015.11-mpi.eb @@ -31,11 +31,11 @@ sources = [ 'regressiontests-%(version)s.tar.gz', ] -preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:$EBROOTFFTW/lib && " +preconfigopts = "export CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH:$EBROOTFFTW/lib && " preconfigopts += "export CMAKE_INCLUDE_PATH=$CMAKE_INCLUDE_PATH:$EBROOTFFTW/include && " dependencies = [ - ('fftw/3.3.4.5', EXTERNAL_MODULE), + ('fftw/3.3.4.5', EXTERNAL_MODULE), ] builddependencies = [('CMake', '3.2.2')] diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-5.1.2-goolf-1.7.20-mt.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-5.1.2-goolf-1.7.20-mt.eb index f8d1e53e32..5f20cd92b4 100644 --- a/easybuild/easyconfigs/g/GROMACS/GROMACS-5.1.2-goolf-1.7.20-mt.eb +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-5.1.2-goolf-1.7.20-mt.eb @@ -28,8 +28,8 @@ source_urls = [ sources = [ SOURCELOWER_TAR_GZ, -# seems to have disappeared? -# 'regressiontests-5.0.2.tar.gz', + # seems to have disappeared? + # 'regressiontests-5.0.2.tar.gz', ] builddependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb index fa06ee75b2..dd5cd622b8 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb @@ -10,7 +10,8 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/"] +source_subdir = 'gs%(version_major)s%(version_minor)s' +source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/%s/" % source_subdir] sources = ["ghostpdl-%(version)s.tar.bz2"] dependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb index 8612f2848b..59430c9acb 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb @@ -10,7 +10,8 @@ description = """Ghostscript is a versatile processor for PostScript data with t toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/"] +source_subdir = 'gs%(version_major)s%(version_minor)s' +source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/%s/" % source_subdir] sources = ["ghostpdl-%(version)s.tar.bz2"] dependencies = [ diff --git a/easybuild/easyconfigs/g/Grep/Grep-2.21-GCC-4.9.2.eb b/easybuild/easyconfigs/g/Grep/Grep-2.21-GCC-4.9.2.eb index 43c5a459fa..af08c394ee 100644 --- a/easybuild/easyconfigs/g/Grep/Grep-2.21-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/g/Grep/Grep-2.21-GCC-4.9.2.eb @@ -4,7 +4,8 @@ name = 'Grep' version = '2.21' homepage = 'http://www.gnu.org/software/grep/' -description = """The grep command searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines.""" +description = """The grep command searches one or more input files for lines containing a match to a specified pattern. + By default, grep prints the matching lines.""" toolchain = {'name': 'GCC', 'version': '4.9.2'} diff --git a/easybuild/easyconfigs/g/gensim/gensim-0.13.2-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/g/gensim/gensim-0.13.2-foss-2016a-Python-2.7.11.eb index 991e6da6fa..fe0e24229f 100644 --- a/easybuild/easyconfigs/g/gensim/gensim-0.13.2-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/g/gensim/gensim-0.13.2-foss-2016a-Python-2.7.11.eb @@ -46,4 +46,4 @@ sanity_check_paths = { modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} -moduleclass = 'lib' \ No newline at end of file +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/g/git-lfs/git-lfs-1.1.1.eb b/easybuild/easyconfigs/g/git-lfs/git-lfs-1.1.1.eb index bd4f6deeb9..c16d2b51eb 100755 --- a/easybuild/easyconfigs/g/git-lfs/git-lfs-1.1.1.eb +++ b/easybuild/easyconfigs/g/git-lfs/git-lfs-1.1.1.eb @@ -25,8 +25,8 @@ sanity_check_paths = { # add the installation dir to PATH modextrapaths = { - 'PATH': '', - } + 'PATH': '', +} # remove exec permission for the provided installation script postinstallcmds = ["chmod og-x %(installdir)s/install.sh"] diff --git a/easybuild/easyconfigs/g/gompi/gompi-2016.07.eb b/easybuild/easyconfigs/g/gompi/gompi-2016.07.eb index 5eca4152c8..eec2b277ee 100644 --- a/easybuild/easyconfigs/g/gompi/gompi-2016.07.eb +++ b/easybuild/easyconfigs/g/gompi/gompi-2016.07.eb @@ -15,8 +15,8 @@ gccbinver = '%s-%s' % (gccver, binutilsver) # compiler toolchain dependencies dependencies = [ - ('GCC', gccbinver), # includes both GCC and binutils - ('OpenMPI', '1.10.3', '', ('GCC', gccbinver)), + ('GCC', gccbinver), # includes both GCC and binutils + ('OpenMPI', '1.10.3', '', ('GCC', gccbinver)), ] moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb index a0f2ba3078..2f14396e13 100644 --- a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb +++ b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb @@ -21,7 +21,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', 'lib/libgdkglext-x11-1.0.a', 'lib/libgdkglext-x11-1.0.%s' % SHLIB_EXT, + 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', 'lib/libgdkglext-x11-1.0.a', + 'lib/libgdkglext-x11-1.0.%s' % SHLIB_EXT, 'lib/libgtkglext-x11-1.0.a', 'lib/libgtkglext-x11-1.0.%s' % SHLIB_EXT], 'dirs': ['include/gtkglext-1.0/gdk', 'include/gtkglext-1.0/gtk', 'lib/pkgconfig'], } -- GitLab From 068f2709b301b502210412079179f44b4f9865b5 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:02:26 +0800 Subject: [PATCH 0608/1311] yet another style fix --- easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb index c041d6e2aa..2a15cb846c 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb @@ -16,8 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', - 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', + 'send', 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } -- GitLab From c3c6264ef9172d1aab091bb2ba6c0bd42b16ac07 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:12:07 +0800 Subject: [PATCH 0609/1311] yet another style fix --- easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb | 4 ++-- easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb index 5d29ad3201..c9a900612f 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.3.0.eb @@ -23,8 +23,8 @@ sources = ['%(name)s_%(version)s.006_20140312.tar.gz'] patches = ['ELPA_fix-tests.patch'] -configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" ' -configopts += 'LIBS="$LIBSCALAPACK"' +configopts = '--with-generic-simple --disable-shared ' +configopts += 'FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' buildopts = ' V=1 LIBS="$LIBSCALAPACK"' start_dir = '%(name)s_%(version)s' diff --git a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb index b5d3e358e9..9783862078 100644 --- a/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/e/ELPA/ELPA-2013.11-ictce-5.5.0.eb @@ -23,8 +23,8 @@ sources = ['%(name)s_%(version)s.006_20140312.tar.gz'] patches = ['ELPA_fix-tests.patch'] -configopts = '--with-generic-simple --disable-shared FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" ' -configopts += 'LIBS="$LIBSCALAPACK"' +configopts = '--with-generic-simple --disable-shared ' +configopts += 'FCFLAGS="-I$EBROOTIMKL/mkl/include/intel64/lp64 $FCFLAGS" LIBS="$LIBSCALAPACK"' buildopts = ' V=1 LIBS="$LIBSCALAPACK"' start_dir = '%(name)s_%(version)s' -- GitLab From f0ad795a7ccf37af9a466968552f3feee9e98dcb Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Wed, 8 Mar 2017 10:26:58 +0100 Subject: [PATCH 0610/1311] Correction: EBROOTLIGJPEGTURBO -> EBROOTLIBJPEGMINTURBO --- .../easyconfigs/g/GDAL/GDAL-1.10.1-intel-2015b-Python-2.7.10.eb | 2 +- .../easyconfigs/g/GDAL/GDAL-2.1.1-intel-2016b-Python-2.7.12.eb | 2 +- .../easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-1.10.1-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/g/GDAL/GDAL-1.10.1-intel-2015b-Python-2.7.10.eb index 63e63419b2..5eee841793 100644 --- a/easybuild/easyconfigs/g/GDAL/GDAL-1.10.1-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/g/GDAL/GDAL-1.10.1-intel-2015b-Python-2.7.10.eb @@ -37,7 +37,7 @@ dependencies = [ ] configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' -configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGTURBO' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' # there is a bug in the build system causing the build with libtool to fail for the moment diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.1-intel-2016b-Python-2.7.12.eb index 6355e7d5d7..6e30f9da8c 100644 --- a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.1-intel-2016b-Python-2.7.12.eb @@ -32,7 +32,7 @@ dependencies = [ ] configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' -configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGTURBO' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' # there is a bug in the build system causing the build with libtool to fail for the moment diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb index 9e5b8f7b62..d2c01232d3 100644 --- a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.2-intel-2016b-Python-2.7.12.eb @@ -34,7 +34,7 @@ dependencies = [ ] configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' -configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGTURBO' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' # there is a bug in the build system causing the build with libtool to fail for the moment -- GitLab From f2188cf1ad91631353221a858924aae5cbf26719 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:32:58 +0800 Subject: [PATCH 0611/1311] yet another style fix --- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb | 7 ++----- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb | 7 ++----- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb | 7 ++----- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb | 7 ++----- easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb | 4 ++-- .../g/Ghostscript/Ghostscript-9.19-intel-2016a.eb | 2 +- .../g/Ghostscript/Ghostscript-9.19-intel-2016b.eb | 2 +- .../easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb | 4 ++-- 11 files changed, 20 insertions(+), 32 deletions(-) diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb index e5810437c4..a4b668c8cb 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb @@ -100,12 +100,9 @@ modextrapaths = {'PYTHONPATH': ['lib/python%s/site-packages' % pyver, 'lib64/pyt # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module full_sanity_check = True -eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { - 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), - 'lib64/python%s/site-packages/%s' % (pyver, eggname))], - 'dirs': [], + 'files': ['bin/gc3utils'], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb index 0a33e2b925..ec6e1d4b8c 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb @@ -100,12 +100,9 @@ modextrapaths = {'PYTHONPATH': ['lib/python%s/site-packages' % pyver, 'lib64/pyt # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module full_sanity_check = True -eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { - 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), - 'lib64/python%s/site-packages/%s' % (pyver, eggname))], - 'dirs': [], + 'files': ['bin/gc3utils'], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb index 49772e1a73..33b05c7f1c 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb @@ -100,12 +100,9 @@ modextrapaths = {'PYTHONPATH': ['lib/python%s/site-packages' % pyver, 'lib64/pyt # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module full_sanity_check = True -eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { - 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), - 'lib64/python%s/site-packages/%s' % (pyver, eggname))], - 'dirs': [], + 'files': ['bin/gc3utils'], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb index 98f0d96369..3d36571118 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb @@ -100,12 +100,9 @@ modextrapaths = {'PYTHONPATH': ['lib/python%s/site-packages' % pyver, 'lib64/pyt # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module full_sanity_check = True -eggname = 'gc3pie-%%(version)s-py%s.egg' % pyver sanity_check_paths = { - 'files': ['bin/gc3utils', - ('lib/python%s/site-packages/%s' % (pyver, eggname), - 'lib64/python%s/site-packages/%s' % (pyver, eggname))], - 'dirs': [], + 'files': ['bin/gc3utils'], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb index fecad61365..02f569f33b 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-foss-2016a.eb @@ -21,8 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.11')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " -configopts += "--disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --disable-systemtap " +configopts += "--enable-static --enable-shared" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb index b29b2e7ddf..08fc164519 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.0-intel-2016a.eb @@ -21,8 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.11')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " -configopts += "--disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --disable-systemtap " +configopts += "--enable-static --enable-shared" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb index ffe44a8cda..8ed215628a 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-foss-2016b.eb @@ -21,8 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.12')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " -configopts += "--disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --disable-systemtap " +configopts += "--enable-static --enable-shared" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb index ba98f92742..0cfae7ee91 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.49.5-intel-2016b.eb @@ -21,8 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.12')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " -configopts += "--disable-systemtap" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --disable-systemtap " +configopts += "--enable-static --enable-shared" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb index dd5cd622b8..9a3a3ea548 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016a.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} source_subdir = 'gs%(version_major)s%(version_minor)s' -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/%s/" % source_subdir] +source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/" + source_subdir] sources = ["ghostpdl-%(version)s.tar.bz2"] dependencies = [ diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb index 59430c9acb..0d5843bdd6 100644 --- a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.19-intel-2016b.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} source_subdir = 'gs%(version_major)s%(version_minor)s' -source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/%s/" % source_subdir] +source_urls = ["https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/" + source_subdir] sources = ["ghostpdl-%(version)s.tar.bz2"] dependencies = [ diff --git a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb index 2f14396e13..8dc32d3aad 100644 --- a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb +++ b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb @@ -21,8 +21,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', 'lib/libgdkglext-x11-1.0.a', - 'lib/libgdkglext-x11-1.0.%s' % SHLIB_EXT, + 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', + 'lib/libgdkglext-x11-1.0.a', 'lib/libgdkglext-x11-1.0.%s' % SHLIB_EXT, 'lib/libgtkglext-x11-1.0.a', 'lib/libgtkglext-x11-1.0.%s' % SHLIB_EXT], 'dirs': ['include/gtkglext-1.0/gdk', 'include/gtkglext-1.0/gtk', 'lib/pkgconfig'], } -- GitLab From 52d921264b76ac2563135e32a93f5df07a4b0be6 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:37:23 +0800 Subject: [PATCH 0612/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/h/HDF/HDF-4.2.11-intel-2016a.eb | 3 ++- easybuild/easyconfigs/h/HDF/HDF-4.2.8-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb | 2 +- .../HPCBIOS_Debuggers-20130829-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/h/HPL/HPL-2.0-foss-2014b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.4.10.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.5.16.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-5.3.0.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-6.1.5.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.11.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.11.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.03.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.04.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.11.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2016.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015.05.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.04.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-gimkl-2.11.5.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-gmpolf-2016a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-1.7.20.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-2016a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-goolf-1.7.20.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.1.2.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.3.5.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.06.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.10.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.11.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.02.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.08.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.00.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.01.eb | 6 +++--- .../easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-4.9.eb | 6 +++--- .../easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-5.3.eb | 6 +++--- .../easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-4.9.eb | 6 +++--- .../easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.3.eb | 6 +++--- .../easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.4.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016b.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.01.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.02.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.03.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2016.07.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.03.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.04.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.09.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.07.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.09.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.08.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.10.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.00.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.01.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-intelcuda-2016.10.eb | 6 +++--- .../h/HPL/HPL-2.2-iomkl-2016.09-GCC-4.9.3-2.25.eb | 6 +++--- .../h/HPL/HPL-2.2-iomkl-2016.09-GCC-5.4.0-2.26.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017.01.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb | 6 +++--- easybuild/easyconfigs/h/HPL/HPL-2.2-pomkl-2016.09.eb | 6 +++--- .../easyconfigs/h/Harminv/Harminv-1.3.1-goolf-1.4.10.eb | 7 ++++--- .../easyconfigs/h/Harminv/Harminv-1.3.1-ictce-5.3.0.eb | 7 ++++--- .../easyconfigs/h/Harminv/Harminv-1.4-foss-2016a.eb | 9 +++++---- .../easyconfigs/h/Harminv/Harminv-1.4-intel-2015a.eb | 7 ++++--- easybuild/easyconfigs/h/Hoard/Hoard-3.10-intel-2015a.eb | 2 +- .../h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb | 5 +++-- .../h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb | 2 +- .../easyconfigs/h/h5utils/h5utils-1.12.1-ictce-5.3.0.eb | 7 ++++--- .../h/horton/horton-1.0.2-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../h/horton/horton-1.1.0-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../h/horton/horton-1.2.0-goolf-1.4.10-Python-2.7.3.eb | 3 ++- .../h/horton/horton-1.2.1-goolf-1.4.10-Python-2.7.3.eb | 3 ++- 84 files changed, 245 insertions(+), 232 deletions(-) diff --git a/easybuild/easyconfigs/h/HDF/HDF-4.2.11-intel-2016a.eb b/easybuild/easyconfigs/h/HDF/HDF-4.2.11-intel-2016a.eb index 28e5e6ad36..e115932f8e 100644 --- a/easybuild/easyconfigs/h/HDF/HDF-4.2.11-intel-2016a.eb +++ b/easybuild/easyconfigs/h/HDF/HDF-4.2.11-intel-2016a.eb @@ -4,7 +4,8 @@ name = 'HDF' version = '4.2.11' homepage = 'http://www.hdfgroup.org/products/hdf4/' -description = """HDF (also known as HDF4) is a library and multi-object file format for storing and managing data between machines.""" +description = """HDF (also known as HDF4) is a library and multi-object file format for storing and managing data + between machines.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/h/HDF/HDF-4.2.8-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HDF/HDF-4.2.8-ictce-5.3.0.eb index fa2a08d015..16556a59b7 100644 --- a/easybuild/easyconfigs/h/HDF/HDF-4.2.8-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HDF/HDF-4.2.8-ictce-5.3.0.eb @@ -4,7 +4,8 @@ name = 'HDF' version = '4.2.8' homepage = 'http://www.hdfgroup.org/products/hdf4/' -description = """HDF (also known as HDF4) is a library and multi-object file format for storing and managing data between machines.""" +description = """HDF (also known as HDF4) is a library and multi-object file format for storing and managing data + between machines.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'opt': True, 'pic': True} diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb index b1098f85e1..7250d32fe5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb @@ -24,4 +24,4 @@ dependencies = [ ('libxml2', '2.9.3') ] -moduleclass = 'data' \ No newline at end of file +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HPCBIOS_Debuggers/HPCBIOS_Debuggers-20130829-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HPCBIOS_Debuggers/HPCBIOS_Debuggers-20130829-goolf-1.4.10.eb index 76836f3aed..259d3f70b6 100644 --- a/easybuild/easyconfigs/h/HPCBIOS_Debuggers/HPCBIOS_Debuggers-20130829-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HPCBIOS_Debuggers/HPCBIOS_Debuggers-20130829-goolf-1.4.10.eb @@ -16,7 +16,8 @@ name = 'HPCBIOS_Debuggers' version = '20130829' homepage = 'http://hpcbios.readthedocs.org/en/latest/HPCBIOS_06-05.html' -description = """Common Set of Debuggers includes a set of debuggers that can assist HPC users for managing parallel codes.""" +description = """Common Set of Debuggers includes a set of debuggers that can assist HPC users for managing parallel + codes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.0-foss-2014b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.0-foss-2014b.eb index 576cc9a699..5feb085a79 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.0-foss-2014b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.0-foss-2014b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.0' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic -on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the -High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2014b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.4.10.eb index cf3bd5fd41..0715af27f9 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.4.10.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.0' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic -on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the -High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.5.16.eb b/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.5.16.eb index d327bfbbab..cd888a1b77 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.0-goolf-1.5.16.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.0' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic -on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the -High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'goolf', 'version': '1.5.16'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-5.3.0.eb index fa3e730343..96f1d5781a 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-5.3.0.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.0' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-6.1.5.eb b/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-6.1.5.eb index 91a1cadef9..e3f05fd328 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-6.1.5.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.0-ictce-6.1.5.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.0' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'ictce', 'version': '6.1.5'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.06.eb index 934cc8d3eb..4edf03da45 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayCCE', 'version': '2015.06'} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.11.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.11.eb index 7a8e5a0800..76ee40d652 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.11.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayCCE-2015.11.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayCCE', 'version': '2015.11'} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.06.eb index 4f4dbfc813..2c9f0ea5ba 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayGNU', 'version': '2015.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.11.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.11.eb index 455f495e6e..bff436a5d6 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2015.11.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.03.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.03.eb index f64bec348b..b1fe7ccd3c 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.03.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayGNU', 'version': '2016.03'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.04.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.04.eb index 57414cfc79..c7a116c4f3 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.04.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.04.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayGNU', 'version': '2016.04'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.06.eb index b59f7317b1..b9880180b4 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayGNU-2016.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayGNU', 'version': '2016.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.06.eb index 00ee4facc9..4749294d9f 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayIntel', 'version': '2015.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.11.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.11.eb index 651ae824ba..32ea90665e 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.11.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2015.11.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayIntel', 'version': '2015.11'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2016.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2016.06.eb index 9ab9de3734..ab2e745599 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2016.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-CrayIntel-2016.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'CrayIntel', 'version': '2016.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015.05.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015.05.eb index 6e7b16eb21..c750f970fb 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015.05.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015.05.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2015.05'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015a.eb index 225cb3be6a..97e132a043 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015b.eb index 728ad9cf2e..fe7bda0c23 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2015b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2015b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.04.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.04.eb index e65fa73eda..6c486063ce 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.04.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.04.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016.04'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.06.eb index e44a4ac54d..416d5bc913 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016a.eb index e43e4270dd..df93eaf60f 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016b.eb index 5634e6bd4f..c40112704f 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-foss-2016b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-gimkl-2.11.5.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-gimkl-2.11.5.eb index 50fef4fac6..5d0475520c 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-gimkl-2.11.5.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'gimkl', 'version': '2.11.5'} toolchainopts = {'optarch': True, 'usempi': True, 'openmp': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmpolf-2016a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmpolf-2016a.eb index ae8a971cbf..7513b5c69c 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmpolf-2016a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmpolf-2016a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'gmpolf', 'version': '2016a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-1.7.20.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-1.7.20.eb index dda08f35b9..7a3660c3cf 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-1.7.20.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-1.7.20.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'gmvolf', 'version': '1.7.20'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-2016a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-2016a.eb index d581afc6f7..b99e6ef61e 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-2016a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-gmvolf-2016a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'gmvolf', 'version': '2016a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-goolf-1.7.20.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-goolf-1.7.20.eb index fd109a8fed..51de797385 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-goolf-1.7.20.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.1.2.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.1.2.eb index 92f6036e1c..036b47fd97 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.1.2.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.3.5.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.3.5.eb index 55ab924d7d..7fd7fc7bf8 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.3.5.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-ictce-7.3.5.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'ictce', 'version': '7.3.5'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.06.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.06.eb index 38c3e337e3..595430c600 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.06.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.06.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2014.06'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.10.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.10.eb index 4c3646267b..095ac318fe 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.10.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.10.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2014.10'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.11.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.11.eb index 4e8b437981..271e44e3ae 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.11.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014.11.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2014.11'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014b.eb index 07ff11637e..1740a95776 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2014b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.02.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.02.eb index 7597cf43f8..bfca06cd24 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.02.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.02.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2015.02'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.08.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.08.eb index 4e727e3fcd..0be6dec3cf 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.08.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015.08.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2015.08'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015a.eb index 97b6ceedd3..774ed3383d 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015b.eb index fa34ec665e..ecdaa77a80 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2015b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.00.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.00.eb index 406d3ae039..3f8d9be6d0 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.00.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.00.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.00'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.01.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.01.eb index 27b235374a..7fa2f28990 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.01.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.01.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.01'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-4.9.eb index 977c7d487d..21af879c00 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-4.9.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.02-GCC-4.9'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-5.3.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-5.3.eb index ffa453cdb4..d6bd01277c 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-5.3.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.02-GCC-5.3.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.02-GCC-5.3'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-4.9.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-4.9.eb index f2d54cf671..2c8b3ccfcc 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-4.9.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-4.9.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.03-GCC-4.9'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.3.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.3.eb index 7eaca67c16..eb86100453 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.3.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.3.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.03-GCC-5.3'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.4.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.4.eb index 660c68898c..3aa6c8de88 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.4.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016.03-GCC-5.4.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016.03-GCC-5.4'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016a.eb index a3af786ca9..2349780aef 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016b.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016b.eb index 226f45477c..f4cc398833 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-intel-2016b.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.01.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.01.eb index e2c8df3cc6..8cc92060d3 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.01.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.01.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2015.01'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.02.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.02.eb index 28511646d6..645f1e333c 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.02.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.02.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2015.02'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.03.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.03.eb index 59e1705669..2247657f83 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.03.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2015.03.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2015.03'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2016.07.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2016.07.eb index 42249afb29..ac09c4d824 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-iomkl-2016.07.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2016.07'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.03.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.03.eb index 9552b4d653..2f6f29630a 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.03.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.03.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'pomkl', 'version': '2016.03'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.04.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.04.eb index 4d48990b54..9b006fcd88 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.04.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.04.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'pomkl', 'version': '2016.04'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.09.eb b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.09.eb index 112d6aa634..23e9cfc7a8 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.09.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.1-pomkl-2016.09.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.1' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'pomkl', 'version': '2016.09'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.07.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.07.eb index c44018425b..09db015192 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.07.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.07.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016.07'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.09.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.09.eb index be4db4593e..0766c10887 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.09.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2016.09.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2016.09'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb index e59ac471b9..95e36ebf95 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-foss-2017a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'foss', 'version': '2017a'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.08.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.08.eb index d1430d0e3a..c13e143bbf 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.08.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.08.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic -on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the -High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'goolfc', 'version': '2016.08'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.10.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.10.eb index fff961832d..069cc730f1 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.10.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-goolfc-2016.10.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'goolfc', 'version': '2016.10'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.00.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.00.eb index 48447ddb28..d09d150a57 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.00.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.00.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2017.00'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.01.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.01.eb index 64700f3b27..0db9bffabb 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.01.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2017.01'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb index 976ad59fb7..f53793fe5b 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017.02.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2017.02'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb index 80e701d1a6..6caac90930 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intel-2017a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-intelcuda-2016.10.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-intelcuda-2016.10.eb index 05f316bde4..b6258c055e 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-intelcuda-2016.10.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-intelcuda-2016.10.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'intelcuda', 'version': '2016.10'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-4.9.3-2.25.eb index 22cd32989a..579a293142 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2016.09-GCC-4.9.3-2.25'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-5.4.0-2.26.eb index efda5a282c..ed855cdf2a 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2016.09-GCC-5.4.0-2.26.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2016.09-GCC-5.4.0-2.26'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017.01.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017.01.eb index d890354a7b..37c0a37f5d 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017.01.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017.01.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2017.01'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb index 77dc4ed21f..77467edaf2 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-iomkl-2017a.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'iomkl', 'version': '2017a'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/HPL/HPL-2.2-pomkl-2016.09.eb b/easybuild/easyconfigs/h/HPL/HPL-2.2-pomkl-2016.09.eb index 005a57564c..3ef2663a61 100644 --- a/easybuild/easyconfigs/h/HPL/HPL-2.2-pomkl-2016.09.eb +++ b/easybuild/easyconfigs/h/HPL/HPL-2.2-pomkl-2016.09.eb @@ -2,9 +2,9 @@ name = 'HPL' version = '2.2' homepage = 'http://www.netlib.org/benchmark/hpl/' -description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic - on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the - High Performance Computing Linpack Benchmark.""" +description = """HPL is a software package that solves a (random) dense linear system in double precision (64 bits) + arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available + implementation of the High Performance Computing Linpack Benchmark.""" toolchain = {'name': 'pomkl', 'version': '2016.09'} toolchainopts = {'optarch': True, 'usempi': True} diff --git a/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-goolf-1.4.10.eb b/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-goolf-1.4.10.eb index d46bdf7367..3b8e366300 100644 --- a/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-goolf-1.4.10.eb @@ -4,9 +4,10 @@ name = 'Harminv' version = '1.3.1' homepage = 'http://ab-initio.mit.edu/wiki/index.php/Harminv' -description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - given -a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially decaying) -in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.""" +description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - + given a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially + decaying) in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those + sinusoids.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'opt': True, 'unroll': True, 'optarch': True, 'pic': True, 'cstd': 'c99'} diff --git a/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-ictce-5.3.0.eb b/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-ictce-5.3.0.eb index 44e47d185b..c2eb89d992 100644 --- a/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/Harminv/Harminv-1.3.1-ictce-5.3.0.eb @@ -4,9 +4,10 @@ name = 'Harminv' version = '1.3.1' homepage = 'http://ab-initio.mit.edu/wiki/index.php/Harminv' -description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - given - a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially decaying) - in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.""" +description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - + given a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially + decaying) in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those + sinusoids.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/h/Harminv/Harminv-1.4-foss-2016a.eb b/easybuild/easyconfigs/h/Harminv/Harminv-1.4-foss-2016a.eb index 783b534519..f62ed07a47 100644 --- a/easybuild/easyconfigs/h/Harminv/Harminv-1.4-foss-2016a.eb +++ b/easybuild/easyconfigs/h/Harminv/Harminv-1.4-foss-2016a.eb @@ -4,9 +4,10 @@ name = 'Harminv' version = '1.4' homepage = 'http://ab-initio.mit.edu/wiki/index.php/Harminv' -description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - given - a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially decaying) - in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.""" +description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - + given a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially + decaying) in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those + sinusoids.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'opt': True, 'unroll': True, 'pic': True, 'cstd': 'c99'} @@ -16,4 +17,4 @@ sources = [SOURCELOWER_TAR_GZ] configopts = "--with-pic --with-blas=openblas --with-lapack=openblas --enable-shared" -moduleclass = 'math' \ No newline at end of file +moduleclass = 'math' diff --git a/easybuild/easyconfigs/h/Harminv/Harminv-1.4-intel-2015a.eb b/easybuild/easyconfigs/h/Harminv/Harminv-1.4-intel-2015a.eb index 8b0afc7b1f..cf92cc3c69 100644 --- a/easybuild/easyconfigs/h/Harminv/Harminv-1.4-intel-2015a.eb +++ b/easybuild/easyconfigs/h/Harminv/Harminv-1.4-intel-2015a.eb @@ -4,9 +4,10 @@ name = 'Harminv' version = '1.4' homepage = 'http://ab-initio.mit.edu/wiki/index.php/Harminv' -description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - given - a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially decaying) - in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.""" +description = """Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - + given a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially + decaying) in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those + sinusoids.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'opt': True, 'unroll': True, 'optarch': True, 'pic': True, 'cstd': 'c99'} diff --git a/easybuild/easyconfigs/h/Hoard/Hoard-3.10-intel-2015a.eb b/easybuild/easyconfigs/h/Hoard/Hoard-3.10-intel-2015a.eb index 80e0503ba7..5ab80c6f39 100644 --- a/easybuild/easyconfigs/h/Hoard/Hoard-3.10-intel-2015a.eb +++ b/easybuild/easyconfigs/h/Hoard/Hoard-3.10-intel-2015a.eb @@ -4,7 +4,7 @@ name = 'Hoard' version = '3.10' homepage = 'http://www.hoard.org/' -description = """Hoard is a fast, scalable, and memory-efficient memory allocator that can speed up your applications.""" +description = "Hoard is a fast, scalable, and memory-efficient memory allocator that can speed up your applications." toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb index 17626346c5..1807b63953 100644 --- a/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb @@ -4,8 +4,9 @@ name = 'h5py' version = '2.0.1' homepage = 'http://code.google.com/p/h5py/' -description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, version 5. - HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous amounts of data.""" +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of + enormous amounts of data.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'usempi': True} diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb b/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb index 12d6705dfa..d7449726a8 100644 --- a/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb +++ b/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb @@ -29,7 +29,7 @@ dependencies = [ builddependencies = [('pkgconfig', '1.1.0', '-Python-%(pyver)s')] sanity_check_paths = { - 'files': ['lib/python%s/site-packages/%%(name)s-%%(version)s-py%s-linux-x86_64.egg' % (pythonshortver, pythonshortver)], + 'files': ['lib/python%s/site-packages/%%(name)s-%%(version)s-py%s-linux-x86_64.egg' % (2 * (pythonshortver, ))], 'dirs': [], } diff --git a/easybuild/easyconfigs/h/h5utils/h5utils-1.12.1-ictce-5.3.0.eb b/easybuild/easyconfigs/h/h5utils/h5utils-1.12.1-ictce-5.3.0.eb index 09424f6b1b..b789858736 100644 --- a/easybuild/easyconfigs/h/h5utils/h5utils-1.12.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/h5utils/h5utils-1.12.1-ictce-5.3.0.eb @@ -4,9 +4,10 @@ name = 'h5utils' version = '1.12.1' homepage = 'http://ab-initio.mit.edu/wiki/index.php/H5utils' -description = """h5utils is a set of utilities for visualization and conversion of scientific data in the free, portable - HDF5 format. Besides providing a simple tool for batch visualization as PNG images, h5utils also includes programs to - convert HDF5 datasets into the formats required by other free visualization software (e.g. plain text, Vis5d, and VTK).""" +description = """h5utils is a set of utilities for visualization and conversion of scientific data in the free, + portable HDF5 format. Besides providing a simple tool for batch visualization as PNG images, h5utils also includes + programs to convert HDF5 datasets into the formats required by other free visualization software (e.g. plain text, + Vis5d, and VTK).""" source_urls = ['http://ab-initio.mit.edu/h5utils/'] sources = [SOURCELOWER_TAR_GZ] diff --git a/easybuild/easyconfigs/h/horton/horton-1.0.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/h/horton/horton-1.0.2-goolf-1.4.10-Python-2.7.3.eb index 944bc27a5e..4ab8e8fc9a 100644 --- a/easybuild/easyconfigs/h/horton/horton-1.0.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/horton/horton-1.0.2-goolf-1.4.10-Python-2.7.3.eb @@ -28,7 +28,8 @@ dependencies = [ ] # disable tests that require X11 by specifying "backend: agg" in matplotlibrc -runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; python setup.py build_ext -i; nosetests -v' +runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; ' +runtest += 'python setup.py build_ext -i; nosetests -v' sanity_check_paths = { 'files': [], diff --git a/easybuild/easyconfigs/h/horton/horton-1.1.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/h/horton/horton-1.1.0-goolf-1.4.10-Python-2.7.3.eb index 778a209cab..401ada28ea 100644 --- a/easybuild/easyconfigs/h/horton/horton-1.1.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/horton/horton-1.1.0-goolf-1.4.10-Python-2.7.3.eb @@ -28,7 +28,8 @@ dependencies = [ ] # disable tests that require X11 by specifying "backend: agg" in matplotlibrc -runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; python setup.py build_ext -i; nosetests -v' +runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; ' +runtest += 'python setup.py build_ext -i; nosetests -v' sanity_check_paths = { 'files': [], diff --git a/easybuild/easyconfigs/h/horton/horton-1.2.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/h/horton/horton-1.2.0-goolf-1.4.10-Python-2.7.3.eb index 3f0df333bf..067d4ce450 100644 --- a/easybuild/easyconfigs/h/horton/horton-1.2.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/horton/horton-1.2.0-goolf-1.4.10-Python-2.7.3.eb @@ -28,7 +28,8 @@ dependencies = [ ] # disable tests that require X11 by specifying "backend: agg" in matplotlibrc -runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; python setup.py build_ext -i; nosetests -v' +runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; ' +runtest += 'python setup.py build_ext -i; nosetests -v' sanity_check_paths = { 'files': [], diff --git a/easybuild/easyconfigs/h/horton/horton-1.2.1-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/h/horton/horton-1.2.1-goolf-1.4.10-Python-2.7.3.eb index d1f6974e2a..786bdb4f54 100644 --- a/easybuild/easyconfigs/h/horton/horton-1.2.1-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/horton/horton-1.2.1-goolf-1.4.10-Python-2.7.3.eb @@ -28,7 +28,8 @@ dependencies = [ ] # disable tests that require X11 by specifying "backend: agg" in matplotlibrc -runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; python setup.py build_ext -i; nosetests -v' +runtest = 'export MATPLOTLIBRC=$PWD; echo "backend: agg" > $MATPLOTLIBRC/matplotlibrc; ' +runtest += 'python setup.py build_ext -i; nosetests -v' sanity_check_paths = { 'files': [], -- GitLab From 8dba00cbe75ceb7740ef6134c488fba62efc5b7c Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:45:35 +0800 Subject: [PATCH 0613/1311] yet another style fix --- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb | 2 +- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb | 2 +- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb | 2 +- easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb index a4b668c8cb..8e387e8194 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.3.eb @@ -102,7 +102,7 @@ full_sanity_check = True sanity_check_paths = { 'files': ['bin/gc3utils'], - 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages' % pyver)], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb index ec6e1d4b8c..3a8e68733e 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.0.eb @@ -102,7 +102,7 @@ full_sanity_check = True sanity_check_paths = { 'files': ['bin/gc3utils'], - 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages' % pyver)], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb index 33b05c7f1c..b9b142b82c 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.1.eb @@ -102,7 +102,7 @@ full_sanity_check = True sanity_check_paths = { 'files': ['bin/gc3utils'], - 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages' % pyver)], } sanity_check_commands = [('gc3utils', 'info --version')] diff --git a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb index 3d36571118..12435392e5 100644 --- a/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb +++ b/easybuild/easyconfigs/g/GC3Pie/GC3Pie-2.4.2.eb @@ -102,7 +102,7 @@ full_sanity_check = True sanity_check_paths = { 'files': ['bin/gc3utils'], - 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages')], + 'dirs': [('lib/python%s/site-packages' % pyver, 'lib64/python%s/site-packages' % pyver)], } sanity_check_commands = [('gc3utils', 'info --version')] -- GitLab From e67ec58c9ff764e522fd00ff67a5fcecfb2ca8e9 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 17:51:04 +0800 Subject: [PATCH 0614/1311] yet another style fix --- easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb index e933c1af39..7dab289eff 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-foss-2016a.eb @@ -16,8 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', - 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', + 'send', 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb index 74d90eb777..e221d7bbc5 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.8-intel-2016a.eb @@ -16,8 +16,8 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', - 'uuidgen']] + + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', + 'send', 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] } -- GitLab From 64e7a3722e4418e57d89348f065681af55ab9f9b Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 8 Mar 2017 11:00:24 +0100 Subject: [PATCH 0615/1311] fix to be sure the HDF5 provided by easybuild is used --- easybuild/easyconfigs/b/BLASR/BLASR-2.1-goolf-1.4.10.eb | 3 +++ easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb | 3 +++ 2 files changed, 6 insertions(+) diff --git a/easybuild/easyconfigs/b/BLASR/BLASR-2.1-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BLASR/BLASR-2.1-goolf-1.4.10.eb index 7b47764f47..1461dc4f22 100644 --- a/easybuild/easyconfigs/b/BLASR/BLASR-2.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BLASR/BLASR-2.1-goolf-1.4.10.eb @@ -23,6 +23,9 @@ dependencies = [('HDF5', '1.8.11')] skipsteps = ['configure'] +prebuildopts = 'export HDF5LIBDIR=$EBROOTHDF5/lib &&' +prebuildopts += 'export HDF5INCLUDEDIR=$EBROOTHDF5/include &&' + # the STATIC= option is a workaround. Check details here: # https://github.com/PacificBiosciences/blasr/issues/4#issuecomment-44142749 buildopts = ' STATIC= ' diff --git a/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb b/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb index ea4423904f..d31c4ec289 100644 --- a/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb +++ b/easybuild/easyconfigs/b/BLASR/BLASR-2.2-intel-2016b.eb @@ -23,6 +23,9 @@ dependencies = [('HDF5', '1.8.18')] skipsteps = ['configure'] +prebuildopts = 'export HDF5LIBDIR=$EBROOTHDF5/lib &&' +prebuildopts += 'export HDF5INCLUDEDIR=$EBROOTHDF5/include &&' + # the STATIC= option is a workaround. Check details here: # https://github.com/PacificBiosciences/blasr/issues/4#issuecomment-44142749 buildopts = ' STATIC= ' -- GitLab From 515b3bd20aba2f214e9f33d37475e64c53b907ef Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 18:24:06 +0800 Subject: [PATCH 0616/1311] yet another style fix --- .../h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb | 3 +-- .../h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb index 1807b63953..72344ad38b 100644 --- a/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/h/h5py/h5py-2.0.1-ictce-5.3.0-Python-2.7.3.eb @@ -16,7 +16,6 @@ sources = [SOURCE_TAR_GZ] python = 'Python' pythonver = '2.7.3' -pythonshortver = '.'.join(pythonver.split('.')[0:2]) versionsuffix = '-%s-%s' % (python, pythonver) dependencies = [ @@ -27,7 +26,7 @@ dependencies = [ sanity_check_paths = { 'files': [], - 'dirs': ['lib/python%s/site-packages/%%(name)s' % pythonshortver], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], } moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb b/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb index d7449726a8..56c251d6fa 100644 --- a/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb +++ b/easybuild/easyconfigs/h/h5py/h5py-2.4.0-intel-2015a-Python-2.7.9-serial.eb @@ -16,7 +16,6 @@ sources = [SOURCE_TAR_GZ] python = 'Python' pythonver = '2.7.9' -pythonshortver = '.'.join(pythonver.split('.')[0:2]) versionsuffix = '-%s-%s-serial' % (python, pythonver) prebuildopts = ' python setup.py configure --hdf5=$EBROOTHDF5 && ' @@ -29,8 +28,8 @@ dependencies = [ builddependencies = [('pkgconfig', '1.1.0', '-Python-%(pyver)s')] sanity_check_paths = { - 'files': ['lib/python%s/site-packages/%%(name)s-%%(version)s-py%s-linux-x86_64.egg' % (2 * (pythonshortver, ))], - 'dirs': [], + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], } moduleclass = 'data' -- GitLab From 2968917cdbfbd864ae1b92aed11f2321f3e049b3 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 8 Mar 2017 18:26:07 +0800 Subject: [PATCH 0617/1311] yet another batch of minor style fixes --- .../easyconfigs/i/IMa2p/IMa2p-20151123-foss-2016a.eb | 2 +- .../easyconfigs/i/IMa2p/IMa2p-20160804-intel-2016b.eb | 2 +- .../easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb | 11 +++++------ .../IPython-5.2.2-intel-2016b-Python-2.7.12.eb | 6 +++--- easybuild/easyconfigs/i/ISL/ISL-0.14-GCC-4.9.2.eb | 2 +- .../easyconfigs/i/ISL/ISL-0.15-GCC-4.9.3-2.25.eb | 2 +- .../easyconfigs/i/ISL/ISL-0.15-GNU-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/i/ISL/ISL-0.15-foss-2016a.eb | 2 +- .../easyconfigs/i/ISL/ISL-0.16-GCC-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/i/ISL/ISL-0.17-foss-2016a.eb | 2 +- .../easyconfigs/i/Inspector/Inspector-2013_update6.eb | 3 ++- .../Instant-1.0.0-goolf-1.4.10-Python-2.7.3.eb | 4 +++- .../Instant/Instant-1.0.0-ictce-5.3.0-Python-2.7.3.eb | 5 +++-- .../i-PI-1.0-20160213-intel-2016a-Python-2.7.11.eb | 2 +- .../i-cisTarget-20160602-intel-2016a-Python-2.7.11.eb | 2 +- easybuild/easyconfigs/i/icc/icc-11.1.073-32bit.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-11.1.073.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-11.1.075.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2011.10.319.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2011.13.367.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2011.3.174.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2011.6.233.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013.1.117.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013.2.146.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013.3.163.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013.4.183.eb | 3 +-- .../easyconfigs/i/icc/icc-2013.5.192-GCC-4.8.3.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013.5.192.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013_sp1.0.080.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013_sp1.1.106.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013_sp1.2.144.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013_sp1.3.174.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2013_sp1.4.211.eb | 3 +-- .../easyconfigs/i/icc/icc-2015.0.090-GCC-4.9.2.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2015.0.090.eb | 3 +-- .../easyconfigs/i/icc/icc-2015.1.133-GCC-4.9.2.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2015.1.133.eb | 3 +-- .../easyconfigs/i/icc/icc-2015.2.164-GCC-4.9.2.eb | 3 +-- .../i/icc/icc-2015.3.187-GNU-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2015.3.187.eb | 3 +-- .../i/icc/icc-2015.5.223-GCC-4.9.3-2.25.eb | 3 +-- .../i/icc/icc-2016.0.109-GCC-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/icc/icc-2016.0.109.eb | 3 +-- .../i/icc/icc-2016.1.150-GCC-4.9.3-2.25.eb | 3 +-- .../easyconfigs/i/iccifort/iccifort-2015.0.090.eb | 3 ++- .../easyconfigs/i/iccifort/iccifort-2015.1.133.eb | 3 ++- .../easyconfigs/i/iccifort/iccifort-2015.3.187.eb | 3 ++- .../i/iccifort/iccifort-2016.0.109-GCC-4.9.3-2.25.eb | 3 ++- .../easyconfigs/i/iccifort/iccifort-2016.0.109.eb | 3 ++- .../i/iccifort/iccifort-2016.1.150-GCC-4.9.3-2.25.eb | 3 ++- .../i/iccifort/iccifort-2016.2.181-GCC-4.9.3-2.25.eb | 3 ++- .../i/iccifort/iccifort-2016.2.181-GCC-5.3.0-2.26.eb | 3 ++- .../i/iccifort/iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 3 ++- .../i/iccifort/iccifort-2016.3.210-GCC-5.3.0-2.26.eb | 3 ++- .../i/iccifort/iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 3 ++- .../i/iccifort/iccifort-2017.0.098-GCC-5.4.0-2.26.eb | 3 ++- .../i/iccifort/iccifort-2017.1.132-GCC-5.4.0-2.26.eb | 3 ++- .../i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 3 ++- .../i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb | 3 ++- .../i/iccifortcuda/iccifortcuda-2016.10.eb | 3 ++- .../easyconfigs/i/icmake/icmake-7.23.02-foss-2016a.eb | 8 ++++---- easybuild/easyconfigs/i/ictce/ictce-5.2.0.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-5.4.0.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-5.5.0.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-6.1.5.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-6.2.5.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-7.1.2.eb | 3 ++- easybuild/easyconfigs/i/ictce/ictce-7.3.5.eb | 3 ++- easybuild/easyconfigs/i/ifort/ifort-11.1.073-32bit.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-11.1.073.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-11.1.075.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2011.10.319.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2011.13.367.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2011.3.174.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2011.6.233.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013.1.117.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013.2.146.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013.3.163.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013.4.183.eb | 3 +-- .../easyconfigs/i/ifort/ifort-2013.5.192-GCC-4.8.3.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013.5.192.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013_sp1.0.080.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013_sp1.1.106.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013_sp1.2.144.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013_sp1.3.174.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2013_sp1.4.211.eb | 3 +-- .../easyconfigs/i/ifort/ifort-2015.0.090-GCC-4.9.2.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2015.0.090.eb | 3 +-- .../easyconfigs/i/ifort/ifort-2015.1.133-GCC-4.9.2.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2015.1.133.eb | 3 +-- .../easyconfigs/i/ifort/ifort-2015.2.164-GCC-4.9.2.eb | 3 +-- .../i/ifort/ifort-2015.3.187-GNU-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2015.3.187.eb | 3 +-- .../i/ifort/ifort-2015.5.223-GCC-4.9.3-2.25.eb | 3 +-- .../i/ifort/ifort-2016.0.109-GCC-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/ifort/ifort-2016.0.109.eb | 3 +-- .../i/ifort/ifort-2016.1.150-GCC-4.9.3-2.25.eb | 3 +-- .../easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb | 6 +++--- easybuild/easyconfigs/i/iimpi/iimpi-7.1.2.eb | 3 ++- easybuild/easyconfigs/i/iimpi/iimpi-7.3.5.eb | 3 ++- easybuild/easyconfigs/i/imkl/imkl-10.2.6.038-32bit.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-10.2.6.038.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-10.3.10.319.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-10.3.12.361.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-10.3.6.233.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.0.1.117.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.0.2.146-iimpi-5.2.0.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.0.2.146.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.0.3.163-iimpi-5.3.0.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.0.3.163.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.0.4.183-iimpi-5.4.0.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.0.4.183.eb | 3 +-- .../i/imkl/imkl-11.0.5.192-iimpi-5.5.0-GCC-4.8.3.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.0.5.192.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.1.0.080.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.1.1.106-iimpi-6.1.5.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.1.1.106.eb | 3 +-- .../i/imkl/imkl-11.1.2.144-2013.5.192-GCC-4.8.3.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.1.2.144-GCC-4.8.3.eb | 3 +-- .../i/imkl/imkl-11.1.2.144-OpenMPI-1.6.5.eb | 7 +++---- .../i/imkl/imkl-11.1.2.144-iimpi-5.5.3-GCC-4.8.3.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-6.2.5.eb | 3 +-- .../i/imkl/imkl-11.1.2.144-iompi-2015.01.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.1.2.144.eb | 3 +-- easybuild/easyconfigs/i/imkl/imkl-11.1.3.174.eb | 3 +-- .../i/imkl/imkl-11.2.0.090-iimpi-7.1.2-GCC-4.9.2.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2.eb | 3 +-- .../i/imkl/imkl-11.2.1.133-iimpi-7.2.3-GCC-4.9.2.eb | 3 +-- .../i/imkl/imkl-11.2.2.164-iimpi-7.2.5-GCC-4.9.2.eb | 3 +-- .../i/imkl/imkl-11.2.2.164-iompi-2015.02.eb | 3 +-- .../i/imkl/imkl-11.2.3.187-gimpi-2.11.5.eb | 3 +-- .../imkl-11.2.3.187-iimpi-7.3.5-GNU-4.9.3-2.25.eb | 3 +-- .../easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5.eb | 3 +-- .../i/imkl/imkl-11.2.3.187-iompi-2015.03.eb | 7 +++---- .../imkl-11.3.0.109-iimpi-2016.00-GCC-4.9.3-2.25.eb | 3 +-- .../imkl-11.3.1.150-iimpi-2016.01-GCC-4.9.3-2.25.eb | 3 +-- .../imkl-11.3.1.150-iimpi-7.5.5-GCC-4.9.3-2.25.eb | 3 +-- .../imkl-11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-3.2.2.006.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.0.0.028-32bit.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.0.0.028.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.0.2.003.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb | 3 +-- .../i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb | 3 +-- .../i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb | 3 +-- .../i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb | 3 +-- .../impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb | 3 +-- .../i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb | 3 +-- .../i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb | 3 +-- .../easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb | 3 +-- .../impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb | 3 +-- .../i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb | 3 +-- easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb | 3 +-- .../impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb | 3 +-- .../i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb | 3 +-- .../impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb | 3 +-- .../easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb | 3 +-- .../impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb | 3 +-- ...pi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb | 3 +-- .../i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb | 3 +-- .../i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb | 3 +-- ...pi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb | 3 +-- ...pi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb | 3 +-- ...pi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb | 3 +-- easybuild/easyconfigs/i/intel/intel-2014.06.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2014.10.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2014.11.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2014b.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2015.02.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2015.08.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2015a.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2015b.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2016.00.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2016.01.eb | 3 ++- .../easyconfigs/i/intel/intel-2016.02-GCC-4.9.eb | 3 ++- .../easyconfigs/i/intel/intel-2016.02-GCC-5.3.eb | 3 ++- .../easyconfigs/i/intel/intel-2016.03-GCC-4.9.eb | 3 ++- .../easyconfigs/i/intel/intel-2016.03-GCC-5.3.eb | 3 ++- .../easyconfigs/i/intel/intel-2016.03-GCC-5.4.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2016a.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2016b.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2017.00.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2017.01.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2017.02.eb | 3 ++- easybuild/easyconfigs/i/intel/intel-2017a.eb | 3 ++- .../intltool-0.51.0-GCCcore-4.9.3-Perl-5.24.0.eb | 2 +- .../intltool-0.51.0-intel-2016a-Perl-5.20.3.eb | 2 +- .../easyconfigs/i/io_lib/io_lib-1.14.8-foss-2016a.eb | 8 ++++---- easybuild/easyconfigs/i/iomkl/iomkl-2015.01.eb | 3 ++- easybuild/easyconfigs/i/iomkl/iomkl-2015.02.eb | 3 ++- easybuild/easyconfigs/i/iomkl/iomkl-2015.03.eb | 3 ++- easybuild/easyconfigs/i/iomkl/iomkl-2016.07.eb | 3 ++- .../i/iomkl/iomkl-2016.09-GCC-4.9.3-2.25.eb | 3 ++- .../i/iomkl/iomkl-2016.09-GCC-5.4.0-2.26.eb | 3 ++- easybuild/easyconfigs/i/iomkl/iomkl-2017.01.eb | 3 ++- easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb | 3 ++- .../i/iompi/iompi-2016.09-GCC-4.9.3-2.25.eb | 1 - .../i/iompi/iompi-2016.09-GCC-5.4.0-2.26.eb | 1 - easybuild/easyconfigs/i/ipp/ipp-7.0.5.233.eb | 3 +-- easybuild/easyconfigs/i/ipp/ipp-8.1.0.144.eb | 3 +-- easybuild/easyconfigs/i/ipp/ipp-9.0.1.150.eb | 3 +-- easybuild/easyconfigs/i/itac/itac-8.0.0.011.eb | 3 +-- easybuild/easyconfigs/i/itac/itac-8.1.4.045.eb | 3 +-- easybuild/easyconfigs/i/itac/itac-9.0.3.051.eb | 3 +-- 210 files changed, 286 insertions(+), 363 deletions(-) diff --git a/easybuild/easyconfigs/i/IMa2p/IMa2p-20151123-foss-2016a.eb b/easybuild/easyconfigs/i/IMa2p/IMa2p-20151123-foss-2016a.eb index 54799f31a3..bfcfa298dc 100644 --- a/easybuild/easyconfigs/i/IMa2p/IMa2p-20151123-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IMa2p/IMa2p-20151123-foss-2016a.eb @@ -1,6 +1,6 @@ easyblock = 'ConfigureMake' -name ='IMa2p' +name = 'IMa2p' version = '20151123' commit = '66e7ac7bc5e4c5bbadbd7de943465afeb4641770' diff --git a/easybuild/easyconfigs/i/IMa2p/IMa2p-20160804-intel-2016b.eb b/easybuild/easyconfigs/i/IMa2p/IMa2p-20160804-intel-2016b.eb index 28cdb8a360..6621f7655d 100644 --- a/easybuild/easyconfigs/i/IMa2p/IMa2p-20160804-intel-2016b.eb +++ b/easybuild/easyconfigs/i/IMa2p/IMa2p-20160804-intel-2016b.eb @@ -1,6 +1,6 @@ easyblock = 'ConfigureMake' -name ='IMa2p' +name = 'IMa2p' version = '20160804' commit = '1ebe5777ed96b878cc81109bede84dc3f7bb5e3b' diff --git a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb index 9e03233c20..6af67462a3 100644 --- a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb @@ -4,10 +4,8 @@ name = 'IOzone' version = '3.434' homepage = 'http://www.iozone.org/' -description = """ -IOzone is a filesystem benchmark tool. The benchmark generates and measures a variety of file operations. Iozone has been ported - to many machines and runs under many operating systems. -""" +description = """IOzone is a filesystem benchmark tool. The benchmark generates and measures a variety of file + operations. Iozone has been ported to many machines and runs under many operating systems.""" toolchain = {'name': 'foss', 'version': '2016a'} @@ -22,8 +20,9 @@ files_to_copy = [ (['src/current/%s' % docfile for docfile in ['gengnuplot.sh', 'report.pl', 'Changes.txt']], 'share/doc'), (['src/current/%s' % docfile for docfile in ['gengnuplot.sh', 'Generate_Graphs', 'gnu3d.dem']], 'share'), (['docs/iozone.1'], 'share/man/man1'), - (['docs/%s' % docfile for docfile in ['IOzone_msword_98.doc', 'IOzone_msword_98.pdf', 'Iozone_ps.gz', 'Run_rules.doc']], - 'share/doc'), + (['docs/%s' % docfile for docfile in ['IOzone_msword_98.doc', 'IOzone_msword_98.pdf', 'Iozone_ps.gz', + 'Run_rules.doc']], + 'share/doc'), ] diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb index bc8f42751d..89001fc17a 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb @@ -20,7 +20,7 @@ dependencies = [ ('testpath', '0.3', versionsuffix), # required by 'nbconvert', but causes problems w.r.t. 'backports' module... # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('entrypoints', '0.2.2', versionsuffix), + # ('entrypoints', '0.2.2', versionsuffix), ('path.py', '10.1', versionsuffix), ('prompt-toolkit', '1.0.13', versionsuffix), ] @@ -113,9 +113,9 @@ exts_list = [ }), # disabled because entrypoints on which this depends pull in configparser, which causes problems # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - #('nbconvert', '5.1.1', { + # ('nbconvert', '5.1.1', { # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - #}), + # }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.14-GCC-4.9.2.eb b/easybuild/easyconfigs/i/ISL/ISL-0.14-GCC-4.9.2.eb index a303238f9b..6e5acb74b1 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.14-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.14-GCC-4.9.2.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.14' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'GCC', 'version': '4.9.2'} diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.15-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ISL/ISL-0.15-GCC-4.9.3-2.25.eb index e711a7699f..00012d332d 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.15-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.15-GCC-4.9.3-2.25.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.15' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.15-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ISL/ISL-0.15-GNU-4.9.3-2.25.eb index 5ae9fcabbc..a5f0f5cc5f 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.15-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.15-GNU-4.9.3-2.25.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.15' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'GNU', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.15-foss-2016a.eb b/easybuild/easyconfigs/i/ISL/ISL-0.15-foss-2016a.eb index bd7c2f7f2a..6fbb191c8b 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.15-foss-2016a.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.15-foss-2016a.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.15' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.16-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ISL/ISL-0.16-GCC-4.9.3-2.25.eb index 6b38a91f39..e6211fab28 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.16-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.16-GCC-4.9.3-2.25.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.16' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'GCC', 'version': '4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/ISL/ISL-0.17-foss-2016a.eb b/easybuild/easyconfigs/i/ISL/ISL-0.17-foss-2016a.eb index a7b67d3ddf..23ff5b76f6 100644 --- a/easybuild/easyconfigs/i/ISL/ISL-0.17-foss-2016a.eb +++ b/easybuild/easyconfigs/i/ISL/ISL-0.17-foss-2016a.eb @@ -4,7 +4,7 @@ name = 'ISL' version = '0.17' homepage = 'http://isl.gforge.inria.fr/' -description = """isl is a library for manipulating sets and relations of integer points bounded by linear constraints.""" +description = "isl is a library for manipulating sets and relations of integer points bounded by linear constraints." toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/i/Inspector/Inspector-2013_update6.eb b/easybuild/easyconfigs/i/Inspector/Inspector-2013_update6.eb index 59aa3e7414..ab3458b6cb 100644 --- a/easybuild/easyconfigs/i/Inspector/Inspector-2013_update6.eb +++ b/easybuild/easyconfigs/i/Inspector/Inspector-2013_update6.eb @@ -2,7 +2,8 @@ name = 'Inspector' version = '2013_update6' homepage = 'http://software.intel.com/en-us/intel-inspector-xe' -description = "Intel Inspector XE 2013 is an easy to use memory error checker and thread checker for serial and parallel applications" +description = """Intel Inspector XE 2013 is an easy to use memory error checker and thread checker for serial and + parallel applications""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goolf-1.4.10-Python-2.7.3.eb index 6966353326..5ec986a817 100644 --- a/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goolf-1.4.10-Python-2.7.3.eb @@ -5,7 +5,9 @@ version = '1.0.0' homepage = 'https://launchpad.net/instant' description = """Instant is a Python module that allows for instant inlining of C and C++ code in Python. -It is a small Python module built on top of SWIG and Distutils. It is part of the FEniCS Project (http://fenicsproject.org).""" + It is a small Python module built on top of SWIG and Distutils. It is part of the FEniCS Project + (http://fenicsproject.org).""" + toolchain = {'name': 'goolf', 'version': '1.4.10'} majorversion = "%s.x" % ".".join(version.split('.')[:-1]) diff --git a/easybuild/easyconfigs/i/Instant/Instant-1.0.0-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-ictce-5.3.0-Python-2.7.3.eb index 4e88df4047..06af631540 100644 --- a/easybuild/easyconfigs/i/Instant/Instant-1.0.0-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-ictce-5.3.0-Python-2.7.3.eb @@ -4,8 +4,9 @@ name = 'Instant' version = '1.0.0' homepage = 'https://launchpad.net/instant' -description = """Instant is a Python module that allows for instant inlining of C and C++ code in Python. - It is a small Python module built on top of SWIG and Distutils. It is part of the FEniCS Project (http://fenicsproject.org).""" +description = """Instant is a Python module that allows for instant inlining of C and C++ code in Python. + It is a small Python module built on top of SWIG and Distutils. It is part of the FEniCS Project + (http://fenicsproject.org).""" toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/i/i-PI/i-PI-1.0-20160213-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/i/i-PI/i-PI-1.0-20160213-intel-2016a-Python-2.7.11.eb index a0ac2c0885..6b3017a194 100644 --- a/easybuild/easyconfigs/i/i-PI/i-PI-1.0-20160213-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/i/i-PI/i-PI-1.0-20160213-intel-2016a-Python-2.7.11.eb @@ -1,6 +1,6 @@ easyblock = 'PythonPackage' -name ='i-PI' +name = 'i-PI' version = '1.0-20160213' commit = '2a09a6d' versionsuffix = '-Python-%(pyver)s' diff --git a/easybuild/easyconfigs/i/i-cisTarget/i-cisTarget-20160602-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/i/i-cisTarget/i-cisTarget-20160602-intel-2016a-Python-2.7.11.eb index efeb188af2..e0c5f7e40e 100644 --- a/easybuild/easyconfigs/i/i-cisTarget/i-cisTarget-20160602-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/i/i-cisTarget/i-cisTarget-20160602-intel-2016a-Python-2.7.11.eb @@ -14,7 +14,7 @@ toolchain = {'name': 'intel', 'version': '2016a'} exts_defaultclass = 'PythonPackage' exts_list = [ - # airspeed requires this specific version of cachetools + # airspeed requires this specific version of cachetools ('cachetools', '0.8.0', { 'source_urls': ['https://pypi.python.org/packages/source/c/cachetools/'], }), diff --git a/easybuild/easyconfigs/i/icc/icc-11.1.073-32bit.eb b/easybuild/easyconfigs/i/icc/icc-11.1.073-32bit.eb index 25d906e87f..6db65c8a2e 100644 --- a/easybuild/easyconfigs/i/icc/icc-11.1.073-32bit.eb +++ b/easybuild/easyconfigs/i/icc/icc-11.1.073-32bit.eb @@ -15,8 +15,7 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' m32 = True diff --git a/easybuild/easyconfigs/i/icc/icc-11.1.073.eb b/easybuild/easyconfigs/i/icc/icc-11.1.073.eb index 270e177a0c..426c8d4726 100644 --- a/easybuild/easyconfigs/i/icc/icc-11.1.073.eb +++ b/easybuild/easyconfigs/i/icc/icc-11.1.073.eb @@ -14,7 +14,6 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-11.1.075.eb b/easybuild/easyconfigs/i/icc/icc-11.1.075.eb index 005adc34f3..367d02cc42 100644 --- a/easybuild/easyconfigs/i/icc/icc-11.1.075.eb +++ b/easybuild/easyconfigs/i/icc/icc-11.1.075.eb @@ -14,7 +14,6 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2011.10.319.eb b/easybuild/easyconfigs/i/icc/icc-2011.10.319.eb index e8019bf5f8..df976c997d 100644 --- a/easybuild/easyconfigs/i/icc/icc-2011.10.319.eb +++ b/easybuild/easyconfigs/i/icc/icc-2011.10.319.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2011.13.367.eb b/easybuild/easyconfigs/i/icc/icc-2011.13.367.eb index 17d0cd2bbe..0e9f729010 100644 --- a/easybuild/easyconfigs/i/icc/icc-2011.13.367.eb +++ b/easybuild/easyconfigs/i/icc/icc-2011.13.367.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2011.3.174.eb b/easybuild/easyconfigs/i/icc/icc-2011.3.174.eb index cf51e4e41b..69a166ec56 100644 --- a/easybuild/easyconfigs/i/icc/icc-2011.3.174.eb +++ b/easybuild/easyconfigs/i/icc/icc-2011.3.174.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2011.6.233.eb b/easybuild/easyconfigs/i/icc/icc-2011.6.233.eb index 4079daa6ca..5c240e5c11 100644 --- a/easybuild/easyconfigs/i/icc/icc-2011.6.233.eb +++ b/easybuild/easyconfigs/i/icc/icc-2011.6.233.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.1.117.eb b/easybuild/easyconfigs/i/icc/icc-2013.1.117.eb index 818ade63f2..f259138a7e 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.1.117.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.1.117.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.2.146.eb b/easybuild/easyconfigs/i/icc/icc-2013.2.146.eb index 086b7132e2..c135115579 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.2.146.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.2.146.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.3.163.eb b/easybuild/easyconfigs/i/icc/icc-2013.3.163.eb index 08d3496656..b9b8d9d6de 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.3.163.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.3.163.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.4.183.eb b/easybuild/easyconfigs/i/icc/icc-2013.4.183.eb index 8c5cfaeab5..db58351c1b 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.4.183.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.4.183.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/icc/icc-2013.5.192-GCC-4.8.3.eb index 446396ee03..a1fab236a7 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.5.192-GCC-4.8.3.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013.5.192.eb b/easybuild/easyconfigs/i/icc/icc-2013.5.192.eb index 3be64f6a79..e42dd9678e 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013.5.192.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013.5.192.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013_sp1.0.080.eb b/easybuild/easyconfigs/i/icc/icc-2013_sp1.0.080.eb index be5072e46d..ace7d02238 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013_sp1.0.080.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013_sp1.0.080.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2013_sp1.1.106.eb b/easybuild/easyconfigs/i/icc/icc-2013_sp1.1.106.eb index 2e5244fe91..b62448cecd 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013_sp1.1.106.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013_sp1.1.106.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/icc/icc-2013_sp1.2.144.eb b/easybuild/easyconfigs/i/icc/icc-2013_sp1.2.144.eb index b742c2c7e4..939c072363 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013_sp1.2.144.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013_sp1.2.144.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/icc/icc-2013_sp1.3.174.eb b/easybuild/easyconfigs/i/icc/icc-2013_sp1.3.174.eb index e4c5184bc0..3ebed03a03 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013_sp1.3.174.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013_sp1.3.174.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/icc/icc-2013_sp1.4.211.eb b/easybuild/easyconfigs/i/icc/icc-2013_sp1.4.211.eb index 5850a5593b..26892de20b 100644 --- a/easybuild/easyconfigs/i/icc/icc-2013_sp1.4.211.eb +++ b/easybuild/easyconfigs/i/icc/icc-2013_sp1.4.211.eb @@ -15,5 +15,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.0.090-GCC-4.9.2.eb b/easybuild/easyconfigs/i/icc/icc-2015.0.090-GCC-4.9.2.eb index d02dca7d22..e290c96aa6 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.0.090-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.0.090-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.0.090.eb b/easybuild/easyconfigs/i/icc/icc-2015.0.090.eb index dba6123fdb..352973960c 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.0.090.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.0.090.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.1.133-GCC-4.9.2.eb b/easybuild/easyconfigs/i/icc/icc-2015.1.133-GCC-4.9.2.eb index 368b594177..13ebafc260 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.1.133-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.1.133-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.1.133.eb b/easybuild/easyconfigs/i/icc/icc-2015.1.133.eb index 08a6748331..326875c307 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.1.133.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.1.133.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.2.164-GCC-4.9.2.eb b/easybuild/easyconfigs/i/icc/icc-2015.2.164-GCC-4.9.2.eb index 8439c044f4..dbb4b84039 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.2.164-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.2.164-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/icc/icc-2015.3.187-GNU-4.9.3-2.25.eb index 37331a1488..ae1d56e8a6 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.3.187-GNU-4.9.3-2.25.eb @@ -17,7 +17,6 @@ dependencies = [(gnu, gnuver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.3.187.eb b/easybuild/easyconfigs/i/icc/icc-2015.3.187.eb index 55dec91be5..833da3c0c7 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.3.187.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.3.187.eb @@ -11,7 +11,6 @@ sources = ['l_ccompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2015.5.223-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/icc/icc-2015.5.223-GCC-4.9.3-2.25.eb index 1ca6568cb7..b9a332e3a0 100644 --- a/easybuild/easyconfigs/i/icc/icc-2015.5.223-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/icc/icc-2015.5.223-GCC-4.9.3-2.25.eb @@ -20,7 +20,6 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2016.0.109-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/icc/icc-2016.0.109-GCC-4.9.3-2.25.eb index 32978c0fbe..f15a97cd30 100644 --- a/easybuild/easyconfigs/i/icc/icc-2016.0.109-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/icc/icc-2016.0.109-GCC-4.9.3-2.25.eb @@ -29,7 +29,6 @@ components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-i dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2016.0.109.eb b/easybuild/easyconfigs/i/icc/icc-2016.0.109.eb index e56edba4db..18895dbe61 100644 --- a/easybuild/easyconfigs/i/icc/icc-2016.0.109.eb +++ b/easybuild/easyconfigs/i/icc/icc-2016.0.109.eb @@ -20,7 +20,6 @@ components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-i dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/icc/icc-2016.1.150-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/icc/icc-2016.1.150-GCC-4.9.3-2.25.eb index 9d56289dfc..d375c69cbb 100644 --- a/easybuild/easyconfigs/i/icc/icc-2016.1.150-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/icc/icc-2016.1.150-GCC-4.9.3-2.25.eb @@ -29,7 +29,6 @@ components = ['intel-comp', 'intel-ccomp', 'intel-icc', 'intel-openmp', 'intel-i dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2015.0.090.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2015.0.090.eb index 51b0376b09..ebdf9f10ca 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2015.0.090.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2015.0.090.eb @@ -4,7 +4,8 @@ name = 'iccifort' version = '2015.0.090' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2015.1.133.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2015.1.133.eb index cb21cd2b6c..06b3d4cc94 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2015.1.133.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2015.1.133.eb @@ -4,7 +4,8 @@ name = 'iccifort' version = '2015.1.133' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2015.3.187.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2015.3.187.eb index 8387432380..7029a01c14 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2015.3.187.eb @@ -4,7 +4,8 @@ name = 'iccifort' version = '2015.3.187' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109-GCC-4.9.3-2.25.eb index f1a5e6d54b..d51e11b541 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109-GCC-4.9.3-2.25.eb @@ -6,7 +6,8 @@ version = '2016.0.109' versionsuffix = '-GCC-4.9.3-2.25' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109.eb index a66481f29c..f03bb37944 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.0.109.eb @@ -5,7 +5,8 @@ name = 'iccifort' version = '2016.0.109' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.1.150-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.1.150-GCC-4.9.3-2.25.eb index 618d381f6e..8bf45db5e6 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.1.150-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.1.150-GCC-4.9.3-2.25.eb @@ -6,7 +6,8 @@ version = '2016.1.150' versionsuffix = '-GCC-4.9.3-2.25' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-4.9.3-2.25.eb index 871fae395a..7fc5fd1e8f 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-4.9.3-2.25.eb @@ -6,7 +6,8 @@ version = '2016.2.181' versionsuffix = '-GCC-4.9.3-2.25' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-5.3.0-2.26.eb index e07e4371a2..0b2036c9e0 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.2.181-GCC-5.3.0-2.26.eb @@ -6,7 +6,8 @@ version = '2016.2.181' versionsuffix = '-GCC-5.3.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-4.9.3-2.25.eb index 73f4eda01f..f961d74a1f 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -6,7 +6,8 @@ version = '2016.3.210' versionsuffix = '-GCC-4.9.3-2.25' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.3.0-2.26.eb index a1f40c75ae..f89991b41e 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.3.0-2.26.eb @@ -6,7 +6,8 @@ version = '2016.3.210' versionsuffix = '-GCC-5.3.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.4.0-2.26.eb index 944d7a23b2..52e91145c6 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -6,7 +6,8 @@ version = '2016.3.210' versionsuffix = '-GCC-5.4.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.0.098-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.0.098-GCC-5.4.0-2.26.eb index 3ed3f947b9..e2ed764a7b 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2017.0.098-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.0.098-GCC-5.4.0-2.26.eb @@ -6,7 +6,8 @@ version = '2017.0.098' versionsuffix = '-GCC-5.4.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-5.4.0-2.26.eb index 8034a2a1e1..6e347be3a2 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-5.4.0-2.26.eb @@ -6,7 +6,8 @@ version = '2017.1.132' versionsuffix = '-GCC-5.4.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb index 11f7aab8ea..ea60f74334 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -6,7 +6,8 @@ version = '2017.1.132' versionsuffix = '-GCC-6.3.0-2.27' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb index a3141d5631..d622580adc 100644 --- a/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/iccifort/iccifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -6,7 +6,8 @@ version = '2017.2.174' versionsuffix = '-GCC-6.3.0-2.27' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and Intel MKL""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C,C++ and fortran compilers, Intel MPI and + Intel MKL""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iccifortcuda/iccifortcuda-2016.10.eb b/easybuild/easyconfigs/i/iccifortcuda/iccifortcuda-2016.10.eb index 1eeb749c6e..2e8347c1be 100644 --- a/easybuild/easyconfigs/i/iccifortcuda/iccifortcuda-2016.10.eb +++ b/easybuild/easyconfigs/i/iccifortcuda/iccifortcuda-2016.10.eb @@ -4,7 +4,8 @@ name = 'iccifortcuda' version = '2016.10' homepage = '(none)' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL, with CUDA toolkit""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL, with CUDA toolkit""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/icmake/icmake-7.23.02-foss-2016a.eb b/easybuild/easyconfigs/i/icmake/icmake-7.23.02-foss-2016a.eb index ed01c4e744..ecd5b0b755 100644 --- a/easybuild/easyconfigs/i/icmake/icmake-7.23.02-foss-2016a.eb +++ b/easybuild/easyconfigs/i/icmake/icmake-7.23.02-foss-2016a.eb @@ -4,8 +4,8 @@ name = 'icmake' version = '7.23.02' homepage = 'http://icmake.sourceforge.net/' -description = """Icmake is a hybrid between a 'make' utility and a 'shell script' language. Originally, it was written to - provide a useful tool for automatic program maintenance and system administrative tasks on old MS-DOS platforms.""" +description = """Icmake is a hybrid between a 'make' utility and a 'shell script' language. Originally, it was written + to provide a useful tool for automatic program maintenance and system administrative tasks on old MS-DOS platforms.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True} @@ -18,8 +18,8 @@ install_cmd += './icm_bootstrap %(installdir)s && ./icm_install strip all /' sanity_check_paths = { 'files': [ - 'bin/icmake', 'bin/icmbuild', 'bin/icmstart', 'bin/icmun', - 'lib/icmake/icm-comp', 'lib/icmake/icm-exec', 'lib/icmake/icm-pp' + 'bin/icmake', 'bin/icmbuild', 'bin/icmstart', 'bin/icmun', + 'lib/icmake/icm-comp', 'lib/icmake/icm-exec', 'lib/icmake/icm-pp' ], 'dirs': [] } diff --git a/easybuild/easyconfigs/i/ictce/ictce-5.2.0.eb b/easybuild/easyconfigs/i/ictce/ictce-5.2.0.eb index fc33afb1ef..7f60c5dadb 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-5.2.0.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-5.2.0.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '5.2.0' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-5.3.0.eb b/easybuild/easyconfigs/i/ictce/ictce-5.3.0.eb index a6b070f713..0cd535b843 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-5.3.0.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-5.3.0.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '5.3.0' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-5.4.0.eb b/easybuild/easyconfigs/i/ictce/ictce-5.4.0.eb index aeb15217ff..feae6d3047 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-5.4.0.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-5.4.0.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '5.4.0' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-5.5.0.eb b/easybuild/easyconfigs/i/ictce/ictce-5.5.0.eb index 55b4f558df..7d3a7fe132 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-5.5.0.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-5.5.0.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '5.5.0' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-6.1.5.eb b/easybuild/easyconfigs/i/ictce/ictce-6.1.5.eb index e5194b8648..72271c8f07 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-6.1.5.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-6.1.5.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '6.1.5' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-6.2.5.eb b/easybuild/easyconfigs/i/ictce/ictce-6.2.5.eb index 41d6ceb53e..fca7778a45 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-6.2.5.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-6.2.5.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '6.2.5' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-7.1.2.eb b/easybuild/easyconfigs/i/ictce/ictce-7.1.2.eb index b3dda3d539..d54f7d5724 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-7.1.2.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-7.1.2.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '7.1.2' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ictce/ictce-7.3.5.eb b/easybuild/easyconfigs/i/ictce/ictce-7.3.5.eb index 6190ed2906..e482585790 100644 --- a/easybuild/easyconfigs/i/ictce/ictce-7.3.5.eb +++ b/easybuild/easyconfigs/i/ictce/ictce-7.3.5.eb @@ -4,7 +4,8 @@ name = 'ictce' version = '7.3.5' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/ifort/ifort-11.1.073-32bit.eb b/easybuild/easyconfigs/i/ifort/ifort-11.1.073-32bit.eb index c4b7144887..640705e6d0 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-11.1.073-32bit.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-11.1.073-32bit.eb @@ -15,8 +15,7 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' m32 = True diff --git a/easybuild/easyconfigs/i/ifort/ifort-11.1.073.eb b/easybuild/easyconfigs/i/ifort/ifort-11.1.073.eb index da0e19e8a7..ee69dc8e33 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-11.1.073.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-11.1.073.eb @@ -14,7 +14,6 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-11.1.075.eb b/easybuild/easyconfigs/i/ifort/ifort-11.1.075.eb index f8534d1717..1372125c7c 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-11.1.075.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-11.1.075.eb @@ -14,7 +14,6 @@ patches = ['specified-paths.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2011.10.319.eb b/easybuild/easyconfigs/i/ifort/ifort-2011.10.319.eb index c0ab005da2..222eeaca4e 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2011.10.319.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2011.10.319.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2011.13.367.eb b/easybuild/easyconfigs/i/ifort/ifort-2011.13.367.eb index 8d6eeaafb4..ef3f60866f 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2011.13.367.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2011.13.367.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2011.3.174.eb b/easybuild/easyconfigs/i/ifort/ifort-2011.3.174.eb index 65ff75aa5c..5b08216822 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2011.3.174.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2011.3.174.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2011.6.233.eb b/easybuild/easyconfigs/i/ifort/ifort-2011.6.233.eb index 0749ed0e0c..ad4923d074 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2011.6.233.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2011.6.233.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_intel64_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.1.117.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.1.117.eb index 99bf3863c6..43b7969dc4 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.1.117.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.1.117.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.2.146.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.2.146.eb index 54b49ddcaf..018ac9b87d 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.2.146.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.2.146.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.3.163.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.3.163.eb index 4efd890d23..d84bb054d0 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.3.163.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.3.163.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%s.tgz' % version] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.4.183.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.4.183.eb index 05c638d451..e1ae8632f1 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.4.183.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.4.183.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.5.192-GCC-4.8.3.eb index 901fc019cc..0b6f0c22ab 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.5.192-GCC-4.8.3.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013.5.192.eb b/easybuild/easyconfigs/i/ifort/ifort-2013.5.192.eb index 32705da10f..7b9de4dea5 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013.5.192.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013.5.192.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.0.080.eb b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.0.080.eb index dc69a4da5e..6402e2f9ac 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.0.080.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.0.080.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.1.106.eb b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.1.106.eb index 8d50c3c460..c762cdb26a 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.1.106.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.1.106.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.2.144.eb b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.2.144.eb index 058b29e416..f987a0ac44 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.2.144.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.2.144.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.3.174.eb b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.3.174.eb index 6a206056e1..a605451b28 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.3.174.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.3.174.eb @@ -14,5 +14,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.4.211.eb b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.4.211.eb index 4e061aba7c..104d8f2770 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.4.211.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2013_sp1.4.211.eb @@ -15,5 +15,4 @@ moduleclass = 'compiler' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.0.090-GCC-4.9.2.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.0.090-GCC-4.9.2.eb index a94df9884b..420984ed94 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.0.090-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.0.090-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.0.090.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.0.090.eb index 62bde3a68e..b312c804d8 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.0.090.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.0.090.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.1.133-GCC-4.9.2.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.1.133-GCC-4.9.2.eb index 419e0257c0..a775af60a0 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.1.133-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.1.133-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.1.133.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.1.133.eb index 02137b7498..c2c4c3e7d1 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.1.133.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.1.133.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.2.164-GCC-4.9.2.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.2.164-GCC-4.9.2.eb index 5767d1400f..6478030728 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.2.164-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.2.164-GCC-4.9.2.eb @@ -17,7 +17,6 @@ dependencies = [(gcc, gccver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.3.187-GNU-4.9.3-2.25.eb index 0f54df3a82..4a9762b2d0 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -17,7 +17,6 @@ dependencies = [(gnu, gnuver)] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.3.187.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.3.187.eb index 8253a3390b..6e0324f9b5 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.3.187.eb @@ -11,7 +11,6 @@ sources = ['l_fcompxe_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2015.5.223-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ifort/ifort-2015.5.223-GCC-4.9.3-2.25.eb index 2fd9b5a946..446656fb7a 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2015.5.223-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2015.5.223-GCC-4.9.3-2.25.eb @@ -20,7 +20,6 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2016.0.109-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ifort/ifort-2016.0.109-GCC-4.9.3-2.25.eb index 9599d68348..a32fd8278a 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2016.0.109-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2016.0.109-GCC-4.9.3-2.25.eb @@ -32,7 +32,6 @@ components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2016.0.109.eb b/easybuild/easyconfigs/i/ifort/ifort-2016.0.109.eb index 657a607db3..b40428eab7 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2016.0.109.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2016.0.109.eb @@ -23,7 +23,6 @@ components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/ifort/ifort-2016.1.150-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/ifort/ifort-2016.1.150-GCC-4.9.3-2.25.eb index 9afeb8bcc9..fdfcf853b6 100644 --- a/easybuild/easyconfigs/i/ifort/ifort-2016.1.150-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/ifort/ifort-2016.1.150-GCC-4.9.3-2.25.eb @@ -32,7 +32,6 @@ components = ['intel-comp', 'intel-fcomp', 'intel-ifort', 'intel-openmp', 'intel dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb index ddf779e0e0..b0f9d10dbb 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb @@ -17,9 +17,9 @@ source_urls = ['https://github.com/igraph/igraph/releases/download/%(version)s'] builddependencies = [('Autotools', '20150215')] patches = [ - 'igraph-%(version)s-no-lapack-no-blas.patch', - 'igraph-%(version)s-fix-aclocal-version.patch' - ] + 'igraph-%(version)s-no-lapack-no-blas.patch', + 'igraph-%(version)s-fix-aclocal-version.patch' +] # link against MKL rather than blas/lapack preconfigopts = "env LDFLAGS='-lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm'" diff --git a/easybuild/easyconfigs/i/iimpi/iimpi-7.1.2.eb b/easybuild/easyconfigs/i/iimpi/iimpi-7.1.2.eb index d62bc1e82f..8ea51a816a 100644 --- a/easybuild/easyconfigs/i/iimpi/iimpi-7.1.2.eb +++ b/easybuild/easyconfigs/i/iimpi/iimpi-7.1.2.eb @@ -4,7 +4,8 @@ name = 'iimpi' version = '7.1.2' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iimpi/iimpi-7.3.5.eb b/easybuild/easyconfigs/i/iimpi/iimpi-7.3.5.eb index b0fe67cb26..7f36db9539 100644 --- a/easybuild/easyconfigs/i/iimpi/iimpi-7.3.5.eb +++ b/easybuild/easyconfigs/i/iimpi/iimpi-7.3.5.eb @@ -4,7 +4,8 @@ name = 'iimpi' version = '7.3.5' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038-32bit.eb b/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038-32bit.eb index 39b3d7cf7b..f12c8b0a4a 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038-32bit.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038-32bit.eb @@ -29,7 +29,6 @@ interfaces = True m32 = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038.eb b/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038.eb index b1eb6ee6e3..16e7150410 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-10.2.6.038.eb @@ -24,7 +24,6 @@ dependencies = [ interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-10.3.10.319.eb b/easybuild/easyconfigs/i/imkl/imkl-10.3.10.319.eb index 91c64cfa0d..c3482af83f 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-10.3.10.319.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-10.3.10.319.eb @@ -24,7 +24,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-10.3.12.361.eb b/easybuild/easyconfigs/i/imkl/imkl-10.3.12.361.eb index b8769ef805..b9464f9703 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-10.3.12.361.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-10.3.12.361.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-10.3.6.233.eb b/easybuild/easyconfigs/i/imkl/imkl-10.3.6.233.eb index b5b58cc188..23c4595c45 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-10.3.6.233.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-10.3.6.233.eb @@ -23,7 +23,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.1.117.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.1.117.eb index 8adf971a63..11b669be47 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.1.117.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.1.117.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146-iimpi-5.2.0.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146-iimpi-5.2.0.eb index c1e7124884..cf9de7a5fc 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146-iimpi-5.2.0.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146-iimpi-5.2.0.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146.eb index ccd95b2a7a..beeabe2d96 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.2.146.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163-iimpi-5.3.0.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163-iimpi-5.3.0.eb index 74e9065d7c..36091633a7 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163-iimpi-5.3.0.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163-iimpi-5.3.0.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163.eb index 8b97b3ff26..cfa4fa1e11 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.3.163.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183-iimpi-5.4.0.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183-iimpi-5.4.0.eb index 471f7e9aa6..ce891766f7 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183-iimpi-5.4.0.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183-iimpi-5.4.0.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183.eb index 98e5ffd25f..d8ef766bc1 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.4.183.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0-GCC-4.8.3.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0-GCC-4.8.3.eb index e04b151136..5c4db1885b 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0-GCC-4.8.3.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0.eb index 0d09ac1d4b..dbddd3cc86 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192-iimpi-5.5.0.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192.eb b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192.eb index 0fe1b14e46..66e98d5997 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.0.5.192.eb @@ -25,7 +25,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.0.080.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.0.080.eb index 7b7f159547..3c52f96be0 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.0.080.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.0.080.eb @@ -22,8 +22,7 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106-iimpi-6.1.5.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106-iimpi-6.1.5.eb index e37a375b7a..5ffe362a58 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106-iimpi-6.1.5.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106-iimpi-6.1.5.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106.eb index cc9f1d89b5..581df89fa9 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.1.106.eb @@ -22,8 +22,7 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-2013.5.192-GCC-4.8.3.eb index 3b9cb14613..1381ccc44e 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-2013.5.192-GCC-4.8.3.eb @@ -27,7 +27,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-GCC-4.8.3.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-GCC-4.8.3.eb index 4843fd2442..b0b43aa3b0 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-GCC-4.8.3.eb @@ -26,7 +26,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-OpenMPI-1.6.5.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-OpenMPI-1.6.5.eb index 3ad520461a..7a0a1e5352 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-OpenMPI-1.6.5.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-OpenMPI-1.6.5.eb @@ -3,8 +3,8 @@ version = '11.1.2.144' homepage = 'http://software.intel.com/en-us/intel-mkl/' description = """Intel Math Kernel Library is a library of highly optimized, extensively threaded math routines -for science, engineering, and financial applications that require maximum performance. Core math functions include -BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + for science, engineering, and financial applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" toolchain = {'name': 'dummy', 'version': ''} @@ -29,7 +29,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-5.5.3-GCC-4.8.3.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-5.5.3-GCC-4.8.3.eb index 2114374474..846edaec6c 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-5.5.3-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-5.5.3-GCC-4.8.3.eb @@ -16,7 +16,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-6.2.5.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-6.2.5.eb index 8854a89598..82e9db5fed 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-6.2.5.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iimpi-6.2.5.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iompi-2015.01.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iompi-2015.01.eb index 2559891bcc..6bbcefb5d7 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iompi-2015.01.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144-iompi-2015.01.eb @@ -15,7 +15,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144.eb index 47e59ba9fc..ddbbf90fd9 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.2.144.eb @@ -22,8 +22,7 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.1.3.174.eb b/easybuild/easyconfigs/i/imkl/imkl-11.1.3.174.eb index bd599cfe0d..4b1c8e4141 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.1.3.174.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.1.3.174.eb @@ -22,8 +22,7 @@ dependencies = [ dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2-GCC-4.9.2.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2-GCC-4.9.2.eb index dcb2085bf3..7028d56135 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2-GCC-4.9.2.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2.eb index 3ce046efac..c0c59f1570 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.0.090-iimpi-7.1.2.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.1.133-iimpi-7.2.3-GCC-4.9.2.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.1.133-iimpi-7.2.3-GCC-4.9.2.eb index a249ac518b..2ee043da29 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.1.133-iimpi-7.2.3-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.1.133-iimpi-7.2.3-GCC-4.9.2.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iimpi-7.2.5-GCC-4.9.2.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iimpi-7.2.5-GCC-4.9.2.eb index aadf66c552..490c88a422 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iimpi-7.2.5-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iimpi-7.2.5-GCC-4.9.2.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iompi-2015.02.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iompi-2015.02.eb index 82eec3eecb..e1fa90b6ca 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iompi-2015.02.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.2.164-iompi-2015.02.eb @@ -15,7 +15,6 @@ dontcreateinstalldir = 'True' interfaces = True # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-gimpi-2.11.5.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-gimpi-2.11.5.eb index ccc021a957..4573f18614 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-gimpi-2.11.5.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-gimpi-2.11.5.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5-GNU-4.9.3-2.25.eb index b76de536ee..8c6606cc65 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5-GNU-4.9.3-2.25.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5.eb index 807b5f2004..1b7dda307a 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iimpi-7.3.5.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iompi-2015.03.eb b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iompi-2015.03.eb index 0772c5ff65..5af833e7d6 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iompi-2015.03.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.2.3.187-iompi-2015.03.eb @@ -3,8 +3,8 @@ version = '11.2.3.187' homepage = 'http://software.intel.com/en-us/intel-mkl/' description = """Intel Math Kernel Library is a library of highly optimized, extensively threaded math routines -for science, engineering, and financial applications that require maximum performance. Core math functions include -BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + for science, engineering, and financial applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" toolchain = {'name': 'iompi', 'version': '2015.03'} @@ -13,7 +13,6 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.3.0.109-iimpi-2016.00-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/imkl/imkl-11.3.0.109-iimpi-2016.00-GCC-4.9.3-2.25.eb index f295b50925..a928de1ca4 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.3.0.109-iimpi-2016.00-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.3.0.109-iimpi-2016.00-GCC-4.9.3-2.25.eb @@ -17,8 +17,7 @@ checksums = ['47567e38801efe273b36b5250c759af7'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-2016.01-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-2016.01-GCC-4.9.3-2.25.eb index e40fb8448a..49c3e5d75b 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-2016.01-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-2016.01-GCC-4.9.3-2.25.eb @@ -17,8 +17,7 @@ checksums = ['b57ff502b5f97f2f783e4bbda7ce42b3'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-7.5.5-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-7.5.5-GCC-4.9.3-2.25.eb index 53b6037e3f..a1225d2d74 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-7.5.5-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-7.5.5-GCC-4.9.3-2.25.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25.eb index de96c38b15..c807d796b6 100644 --- a/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/imkl/imkl-11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25.eb @@ -14,8 +14,7 @@ sources = ['l_mkl_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' interfaces = True diff --git a/easybuild/easyconfigs/i/impi/impi-3.2.2.006.eb b/easybuild/easyconfigs/i/impi/impi-3.2.2.006.eb index 6a204cb330..f95dd72e44 100644 --- a/easybuild/easyconfigs/i/impi/impi-3.2.2.006.eb +++ b/easybuild/easyconfigs/i/impi/impi-3.2.2.006.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.0.0.028-32bit.eb b/easybuild/easyconfigs/i/impi/impi-4.0.0.028-32bit.eb index 4c78a146fe..028fa649be 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.0.0.028-32bit.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.0.0.028-32bit.eb @@ -14,8 +14,7 @@ sources = ['l_mpi_pu_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' m32 = True diff --git a/easybuild/easyconfigs/i/impi/impi-4.0.0.028.eb b/easybuild/easyconfigs/i/impi/impi-4.0.0.028.eb index c44ccfe556..e460a1a60c 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.0.0.028.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.0.0.028.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_pu_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.0.2.003.eb b/easybuild/easyconfigs/i/impi/impi-4.0.2.003.eb index 001ee2403f..7828e8ee3d 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.0.2.003.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.0.2.003.eb @@ -15,8 +15,7 @@ patches = ['impi_4.x_productsdb.patch'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb index 6178aa2f65..209842e727 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb index 99cabee972..c4e43d9fa9 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb index c4adbe0ae3..9b5a71ce36 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb index 2121a1a6d9..36a86386a0 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb index 92c9a61b43..3f28cb9676 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb index 3cd6a18055..ee1796488d 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb index 22f0699649..97573c0075 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb index 922aa79344..5524846083 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb b/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb index b7639d24d1..5301684735 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb index 21ed19633f..3eef4c39b6 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb index da5a2ab9be..de266ab029 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb index 9e61812d8f..81b707143d 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb index 9a3879ee53..91e7ec80d3 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb index 5e4968df60..3b51024f12 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb index 43cd007ba4..7b345a78e7 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb index 28ece27457..154d705ccf 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb index 6f2bcda1cb..952a3f2313 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb index a9d198b99f..62a9caf2ee 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb index 25f7950bae..46722880e7 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb index df72fa53c0..452ab3ddd5 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb index 4b32c5dbb2..7de5ce16aa 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb index c247bd8cc6..51baff5e35 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb b/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb index 362bb90b08..51936e972d 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb @@ -14,8 +14,7 @@ sources = ['l_mpi_p_5.1.0.038.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb index aafd77aff0..8d146fd342 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb @@ -16,7 +16,6 @@ checksums = ['aa4aaec41526aa5b244e531811877b01'] dontcreateinstalldir = 'True' -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb index 9e343efe2e..af79fd7190 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb @@ -13,8 +13,7 @@ sources = ['l_mpi_p_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi wrappers to work as expected with intel compilers (e.g. mpicc wraps icc not the default gcc) # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb index da4a993780..6042d117f6 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb @@ -16,8 +16,7 @@ checksums = ['ec4db8f718c34f09fccf9d1c89454f0a'] dontcreateinstalldir = 'True' -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' # set up all the mpi commands to default to intel compilers # set_mpi_wrappers_all = 'True' diff --git a/easybuild/easyconfigs/i/intel/intel-2014.06.eb b/easybuild/easyconfigs/i/intel/intel-2014.06.eb index 57c2903c57..37318d6737 100644 --- a/easybuild/easyconfigs/i/intel/intel-2014.06.eb +++ b/easybuild/easyconfigs/i/intel/intel-2014.06.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2014.06' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2014.10.eb b/easybuild/easyconfigs/i/intel/intel-2014.10.eb index d89452f540..42ecc0b6a8 100644 --- a/easybuild/easyconfigs/i/intel/intel-2014.10.eb +++ b/easybuild/easyconfigs/i/intel/intel-2014.10.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2014.10' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2014.11.eb b/easybuild/easyconfigs/i/intel/intel-2014.11.eb index 1bdbdfe846..82213850c0 100644 --- a/easybuild/easyconfigs/i/intel/intel-2014.11.eb +++ b/easybuild/easyconfigs/i/intel/intel-2014.11.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2014.11' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2014b.eb b/easybuild/easyconfigs/i/intel/intel-2014b.eb index 9d433db3c4..2cc20c2772 100644 --- a/easybuild/easyconfigs/i/intel/intel-2014b.eb +++ b/easybuild/easyconfigs/i/intel/intel-2014b.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2014b' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2015.02.eb b/easybuild/easyconfigs/i/intel/intel-2015.02.eb index ab8507944b..a5c22d20a4 100644 --- a/easybuild/easyconfigs/i/intel/intel-2015.02.eb +++ b/easybuild/easyconfigs/i/intel/intel-2015.02.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2015.02' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2015.08.eb b/easybuild/easyconfigs/i/intel/intel-2015.08.eb index f154fb6c65..fc731e26ee 100644 --- a/easybuild/easyconfigs/i/intel/intel-2015.08.eb +++ b/easybuild/easyconfigs/i/intel/intel-2015.08.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2015.08' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2015a.eb b/easybuild/easyconfigs/i/intel/intel-2015a.eb index 2cb7f99ce4..702e767c23 100644 --- a/easybuild/easyconfigs/i/intel/intel-2015a.eb +++ b/easybuild/easyconfigs/i/intel/intel-2015a.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2015a' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2015b.eb b/easybuild/easyconfigs/i/intel/intel-2015b.eb index e0b4b71ab1..dcc37ce659 100644 --- a/easybuild/easyconfigs/i/intel/intel-2015b.eb +++ b/easybuild/easyconfigs/i/intel/intel-2015b.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2015b' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.00.eb b/easybuild/easyconfigs/i/intel/intel-2016.00.eb index 241463337a..2f03a7cc46 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.00.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.00.eb @@ -5,7 +5,8 @@ name = 'intel' version = '2016.00' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.01.eb b/easybuild/easyconfigs/i/intel/intel-2016.01.eb index 37f96fa014..7c51ee2938 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.01.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.01.eb @@ -5,7 +5,8 @@ name = 'intel' version = '2016.01' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-4.9.eb index 41552f25a9..535ba2e732 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-4.9.eb @@ -6,7 +6,8 @@ gcc_maj_min = '4.9' versionsuffix = '-GCC-%s' % gcc_maj_min homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-5.3.eb b/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-5.3.eb index 4d1e0dddac..904f548c97 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-5.3.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.02-GCC-5.3.eb @@ -6,7 +6,8 @@ gcc_maj_min = '5.3' versionsuffix = '-GCC-%s' % gcc_maj_min homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-4.9.eb b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-4.9.eb index aa6be8f54d..c7bc45badd 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-4.9.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-4.9.eb @@ -6,7 +6,8 @@ gcc_maj_min = '4.9' versionsuffix = '-GCC-%s' % gcc_maj_min homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.3.eb b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.3.eb index 3de185ca63..04c3682224 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.3.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.3.eb @@ -6,7 +6,8 @@ gcc_maj_min = '5.3' versionsuffix = '-GCC-%s' % gcc_maj_min homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.4.eb b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.4.eb index 1de4297cce..fd9c783f53 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.4.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016.03-GCC-5.4.eb @@ -6,7 +6,8 @@ gcc_maj_min = '5.4' versionsuffix = '-GCC-%s' % gcc_maj_min homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016a.eb b/easybuild/easyconfigs/i/intel/intel-2016a.eb index c858c20f53..5b6fecfd23 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016a.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016a.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2016a' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2016b.eb b/easybuild/easyconfigs/i/intel/intel-2016b.eb index 92aacd886c..5866da643e 100644 --- a/easybuild/easyconfigs/i/intel/intel-2016b.eb +++ b/easybuild/easyconfigs/i/intel/intel-2016b.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2016b' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2017.00.eb b/easybuild/easyconfigs/i/intel/intel-2017.00.eb index ad8be63148..a3c48fa4ca 100644 --- a/easybuild/easyconfigs/i/intel/intel-2017.00.eb +++ b/easybuild/easyconfigs/i/intel/intel-2017.00.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2017.00' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2017.01.eb b/easybuild/easyconfigs/i/intel/intel-2017.01.eb index 9993bc8e47..10392160f1 100644 --- a/easybuild/easyconfigs/i/intel/intel-2017.01.eb +++ b/easybuild/easyconfigs/i/intel/intel-2017.01.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2017.01' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2017.02.eb b/easybuild/easyconfigs/i/intel/intel-2017.02.eb index 941245b3e6..e39d8da948 100644 --- a/easybuild/easyconfigs/i/intel/intel-2017.02.eb +++ b/easybuild/easyconfigs/i/intel/intel-2017.02.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2017.02' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intel/intel-2017a.eb b/easybuild/easyconfigs/i/intel/intel-2017a.eb index 4e98f5a7f2..f1760e4271 100644 --- a/easybuild/easyconfigs/i/intel/intel-2017a.eb +++ b/easybuild/easyconfigs/i/intel/intel-2017a.eb @@ -4,7 +4,8 @@ name = 'intel' version = '2017a' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & Intel MKL.""" +description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MPI & + Intel MKL.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/intltool/intltool-0.51.0-GCCcore-4.9.3-Perl-5.24.0.eb b/easybuild/easyconfigs/i/intltool/intltool-0.51.0-GCCcore-4.9.3-Perl-5.24.0.eb index 0acb163cda..4d7b443901 100644 --- a/easybuild/easyconfigs/i/intltool/intltool-0.51.0-GCCcore-4.9.3-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/i/intltool/intltool-0.51.0-GCCcore-4.9.3-Perl-5.24.0.eb @@ -10,7 +10,7 @@ description = """intltool is a set of tools to centralize translation of toolchain = {'name': 'GCCcore', 'version': '4.9.3'} -source_urls = ['http://launchpad.net/intltool/trunk/%(version)s/+download/'] +source_urls = ['http://launchpad.net/intltool/trunk/%(version)s/+download/'] sources = [SOURCE_TAR_GZ] builddependencies = [ diff --git a/easybuild/easyconfigs/i/intltool/intltool-0.51.0-intel-2016a-Perl-5.20.3.eb b/easybuild/easyconfigs/i/intltool/intltool-0.51.0-intel-2016a-Perl-5.20.3.eb index 8fd4cb48f8..4d3f41da10 100644 --- a/easybuild/easyconfigs/i/intltool/intltool-0.51.0-intel-2016a-Perl-5.20.3.eb +++ b/easybuild/easyconfigs/i/intltool/intltool-0.51.0-intel-2016a-Perl-5.20.3.eb @@ -10,7 +10,7 @@ description = """intltool is a set of tools to centralize translation of toolchain = {'name': 'intel', 'version': '2016a'} -source_urls = ['http://launchpad.net/intltool/trunk/%(version)s/+download/'] +source_urls = ['http://launchpad.net/intltool/trunk/%(version)s/+download/'] sources = [SOURCE_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/i/io_lib/io_lib-1.14.8-foss-2016a.eb b/easybuild/easyconfigs/i/io_lib/io_lib-1.14.8-foss-2016a.eb index 9d67e52066..74d4ba917e 100644 --- a/easybuild/easyconfigs/i/io_lib/io_lib-1.14.8-foss-2016a.eb +++ b/easybuild/easyconfigs/i/io_lib/io_lib-1.14.8-foss-2016a.eb @@ -4,10 +4,10 @@ name = 'io_lib' version = '1.14.8' homepage = 'http://sourceforge.net/projects/staden/files/io_lib/' -description = """Io_lib is a library of file reading and writing code to provide a general purpose trace file (and Experiment - File) reading interface. The programmer simply calls the (eg) read_reading to create a "Read" C structure with the data loaded - into memory. It has been compiled and tested on a variety of unix systems, MacOS X and MS Windows. -""" +description = """Io_lib is a library of file reading and writing code to provide a general purpose trace file (and + Experiment File) reading interface. The programmer simply calls the (eg) read_reading to create a "Read" C structure + with the data loaded into memory. It has been compiled and tested on a variety of unix systems, MacOS X and MS + Windows.""" toolchain = {'name': 'foss', 'version': '2016a'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2015.01.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2015.01.eb index aa85e82a98..a9a545eec7 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2015.01.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2015.01.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2015.01' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2015.02.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2015.02.eb index 544ad6da2e..e17fa43dd2 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2015.02.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2015.02.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2015.02' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2015.03.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2015.03.eb index f9059cff3e..93dbfc98f8 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2015.03.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2015.03.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2015.03' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2016.07.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2016.07.eb index 54ed73649a..5d1d743242 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2016.07.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2016.07.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2016.07' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-4.9.3-2.25.eb index cf9954cf88..ced0e87585 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2016.09-GCC-4.9.3-2.25' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-5.4.0-2.26.eb index 6b0377e8e3..f0219ff350 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2016.09-GCC-5.4.0-2.26.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2016.09-GCC-5.4.0-2.26' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2017.01.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2017.01.eb index 6039ebaad3..9d9e8846e6 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2017.01.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2017.01.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2017.01' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb index 032f6eb6a2..4d75373f4f 100644 --- a/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb +++ b/easybuild/easyconfigs/i/iomkl/iomkl-2017a.eb @@ -4,7 +4,8 @@ name = 'iomkl' version = '2017a' homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/' -description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & OpenMPI.""" +description = """Intel Cluster Toolchain Compiler Edition provides Intel C/C++ and Fortran compilers, Intel MKL & + OpenMPI.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-4.9.3-2.25.eb index 3c9854b3e1..9580ff5296 100644 --- a/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-4.9.3-2.25.eb @@ -17,4 +17,3 @@ dependencies = [ ] moduleclass = 'toolchain' - diff --git a/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-5.4.0-2.26.eb index 6ab1a7b7d5..db8c7fb2af 100644 --- a/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/iompi/iompi-2016.09-GCC-5.4.0-2.26.eb @@ -17,4 +17,3 @@ dependencies = [ ] moduleclass = 'toolchain' - diff --git a/easybuild/easyconfigs/i/ipp/ipp-7.0.5.233.eb b/easybuild/easyconfigs/i/ipp/ipp-7.0.5.233.eb index 1497f12bc7..af01ee3ccc 100644 --- a/easybuild/easyconfigs/i/ipp/ipp-7.0.5.233.eb +++ b/easybuild/easyconfigs/i/ipp/ipp-7.0.5.233.eb @@ -18,5 +18,4 @@ moduleclass = 'perf' dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' diff --git a/easybuild/easyconfigs/i/ipp/ipp-8.1.0.144.eb b/easybuild/easyconfigs/i/ipp/ipp-8.1.0.144.eb index dce7087021..2df68edb57 100644 --- a/easybuild/easyconfigs/i/ipp/ipp-8.1.0.144.eb +++ b/easybuild/easyconfigs/i/ipp/ipp-8.1.0.144.eb @@ -14,7 +14,6 @@ sources = ['l_ipp_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'perf' diff --git a/easybuild/easyconfigs/i/ipp/ipp-9.0.1.150.eb b/easybuild/easyconfigs/i/ipp/ipp-9.0.1.150.eb index c5381d564c..c7f19f61c1 100644 --- a/easybuild/easyconfigs/i/ipp/ipp-9.0.1.150.eb +++ b/easybuild/easyconfigs/i/ipp/ipp-9.0.1.150.eb @@ -14,7 +14,6 @@ sources = ['l_ipp_%(version)s.tgz'] dontcreateinstalldir = 'True' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'perf' diff --git a/easybuild/easyconfigs/i/itac/itac-8.0.0.011.eb b/easybuild/easyconfigs/i/itac/itac-8.0.0.011.eb index b8febc89fc..5e7c707582 100644 --- a/easybuild/easyconfigs/i/itac/itac-8.0.0.011.eb +++ b/easybuild/easyconfigs/i/itac/itac-8.0.0.011.eb @@ -15,7 +15,6 @@ dontcreateinstalldir = 'True' preferredmpi = 'impi4' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/itac/itac-8.1.4.045.eb b/easybuild/easyconfigs/i/itac/itac-8.1.4.045.eb index 67482320a6..546ec40361 100644 --- a/easybuild/easyconfigs/i/itac/itac-8.1.4.045.eb +++ b/easybuild/easyconfigs/i/itac/itac-8.1.4.045.eb @@ -15,7 +15,6 @@ dontcreateinstalldir = 'True' preferredmpi = 'impi4' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/itac/itac-9.0.3.051.eb b/easybuild/easyconfigs/i/itac/itac-9.0.3.051.eb index 42551d67c6..8922806632 100644 --- a/easybuild/easyconfigs/i/itac/itac-9.0.3.051.eb +++ b/easybuild/easyconfigs/i/itac/itac-9.0.3.051.eb @@ -15,7 +15,6 @@ dontcreateinstalldir = 'True' preferredmpi = 'impi5' # license file -import os -license_file = os.path.join(os.getenv('HOME'), "licenses", "intel", "license.lic") +license_file = HOME + '/licenses/intel/license.lic' moduleclass = 'tools' -- GitLab From 30861069b7bb9df66f8c347f7ec1010ddcbbf8fe Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 14:26:59 +0100 Subject: [PATCH 0618/1311] adding easyconfigs: fqtrim-0.9.4-intel-2016b.eb --- .../f/fqtrim/fqtrim-0.9.4-intel-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb diff --git a/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb new file mode 100644 index 0000000000..f57e94703f --- /dev/null +++ b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'MakeCp' + +name = 'fqtrim' +version = '0.9.4' + +homepage = 'http://ccb.jhu.edu/software/fqtrim/' +description = """fqtrim is a versatile stand-alone utility that can be used to trim adapters, poly-A tails, + terminal unknown bases (Ns) and low quality 3' regions in reads from high-throughput next-generation sequencing + machines.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://ccb.jhu.edu/software/fqtrim/dl/'] +sources = [SOURCE_TAR_GZ] + +buildopts = 'release CC="$CXX" LINKER="$CXX" LDFLAGS="$LDFLAGS $CXXFLAGS"' + +files_to_copy = [(['fqtrim'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/fqtrim'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From ff7cd40c2f0a8da36dee04fb0661c1a3deb211b7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 15:17:27 +0100 Subject: [PATCH 0619/1311] no need to include $CXXFLAGS into LDFLAGS, thanks @wpoely86 --- easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb index f57e94703f..4e2183f308 100644 --- a/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb +++ b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.4-intel-2016b.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['http://ccb.jhu.edu/software/fqtrim/dl/'] sources = [SOURCE_TAR_GZ] -buildopts = 'release CC="$CXX" LINKER="$CXX" LDFLAGS="$LDFLAGS $CXXFLAGS"' +buildopts = 'release CC="$CXX" LINKER="$CXX"' files_to_copy = [(['fqtrim'], 'bin')] -- GitLab From 2fa39e0e47203bebce534d5f36f30a5298d5e0f6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 15:18:18 +0100 Subject: [PATCH 0620/1311] adding easyconfigs: DBG2OLC-20170208-intel-2016b.eb --- .../d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb diff --git a/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb new file mode 100644 index 0000000000..0f90c41b2a --- /dev/null +++ b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'CmdCp' + +name = 'DBG2OLC' +version = '20170208' +commit = 'b452286' + +homepage = 'https://github.com/yechengxi/DBG2OLC' +description = """DBG2OLC:Efficient Assembly of Large Genomes Using Long Erroneous Reads of the Third Generation + Sequencing Technologies""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/yechengxi/DBG2OLC/archive/'] +sources = ['%s.tar.gz' % commit] + +cmds_map = [('.*', "$CXX $CXXFLAGS -o DBG2OLC *.cpp")] + +files_to_copy = [(['DBG2OLC'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/DBG2OLC'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From a3c162e9306d788f99d59fd3cfe93c4fee0a4929 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 15:40:56 +0100 Subject: [PATCH 0621/1311] adding easyconfigs: L_RNA_scaffolder-20141124-intel-2016b-Perl-5.24.0.eb --- ...folder-20141124-intel-2016b-Perl-5.24.0.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/l/L_RNA_scaffolder/L_RNA_scaffolder-20141124-intel-2016b-Perl-5.24.0.eb diff --git a/easybuild/easyconfigs/l/L_RNA_scaffolder/L_RNA_scaffolder-20141124-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/l/L_RNA_scaffolder/L_RNA_scaffolder-20141124-intel-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..dd21d5b9af --- /dev/null +++ b/easybuild/easyconfigs/l/L_RNA_scaffolder/L_RNA_scaffolder-20141124-intel-2016b-Perl-5.24.0.eb @@ -0,0 +1,29 @@ +easyblock = 'Tarball' + +name = 'L_RNA_scaffolder' +version = '20141124' +versionsuffix = '-Perl-5.24.0' + +homepage = 'http://www.fishbrowser.org/software/L_RNA_scaffolder/' +description = "L_RNA_scaffolder is a novel scaffolding tool using long trancriptome reads to scaffold genome fragments" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.fishbrowser.org/software/L_RNA_scaffolder/downloads/'] +sources = ['L_RNA_scaffolder.tar.gz'] +checksums = ['3cc401886c452b1000d434dea776970e'] + +dependencies = [('BioPerl', '1.7.1', versionsuffix)] + +modextrapaths = {'PATH': ''} + +sanity_check_paths = { + 'files': ['calculate-lc', 'calculate-pid', 'convert', 'convert_linker', 'count_connection_frequency', + 'delete_block', 'delete_linker', 'delete_same_fragment', 'exon_length', 'filter_scaffold.pl', + 'find_end_node', 'find_reliable_connection', 'find_start_node', 'form_block', 'form_initial_path.pl', + 'form_path.pl', 'generate_scaffold.pl', 'generate_unscaffold.pl', 'L_RNA_scaffolder.sh', 'link_block', + 'order', 'overlap', 'route.pl', 'search_guider', 'select', 'select_nodes'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From d789421eeaf1847ca641fdd45ae509c85c2a4b82 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 15:49:35 +0100 Subject: [PATCH 0622/1311] also include $LDFLAGS in compilation command --- easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb index 0f90c41b2a..82d644aaff 100644 --- a/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb +++ b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2016b.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://github.com/yechengxi/DBG2OLC/archive/'] sources = ['%s.tar.gz' % commit] -cmds_map = [('.*', "$CXX $CXXFLAGS -o DBG2OLC *.cpp")] +cmds_map = [('.*', "$CXX $CXXFLAGS $LDFLAGS -o DBG2OLC *.cpp")] files_to_copy = [(['DBG2OLC'], 'bin')] -- GitLab From a9d2e2ae16a0f109e81838f40bc98e395798b2a1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 16:02:14 +0100 Subject: [PATCH 0623/1311] adding easyconfigs: BLAT-3.5-intel-2016b.eb --- .../b/BLAT/BLAT-3.5-intel-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb new file mode 100644 index 0000000000..48a47daaa1 --- /dev/null +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb @@ -0,0 +1,33 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 The Cyprus Institute +# Authors:: Andreas Panteli , Thekla Loizou +# License:: MIT/GPL +# +## + +name = 'BLAT' +version = '3.5' + +homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' +description = "BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or more." + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%%(namelower)sSrc%s.zip' % ''.join(version.split('.'))] +source_urls = ['http://users.soe.ucsc.edu/~kent/src'] + +dependencies = [('libpng', '1.6.23')] + +buildopts = 'CC="$CC" COPT= L="$LIBS"' + +files_to_copy = ["bin", "blat", "gfClient", "gfServer", "hg", "inc", "jkOwnLib", "lib", "utils", "webBlat"] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['blat', 'faToNib', 'faToTwoBit', 'gfClient', 'gfServer', 'nibFrag', + 'pslPretty', 'pslReps', 'pslSort', 'twoBitInfo', 'twoBitToFa']], + 'dirs': files_to_copy, +} + +moduleclass = 'bio' -- GitLab From 2f20fd4e1aa1e702281a703d7bc114752e1d9b4f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 8 Mar 2017 18:07:11 +0100 Subject: [PATCH 0624/1311] adding easyconfigs: STAR-2.5.2b-intel-2016b.eb --- .../s/STAR/STAR-2.5.2b-intel-2016b.eb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/s/STAR/STAR-2.5.2b-intel-2016b.eb diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.2b-intel-2016b.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.2b-intel-2016b.eb new file mode 100644 index 0000000000..05c3e56c2f --- /dev/null +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.2b-intel-2016b.eb @@ -0,0 +1,43 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# Modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'MakeCp' + +name = 'STAR' +version = '2.5.2b' + +homepage = 'https://github.com/alexdobin/STAR' +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'openmp': True} + +source_urls = ['https://github.com/alexdobin/STAR/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), +] + +start_dir = 'source' + +buildopts = ' STAR && make STARlong' + +parallel = 1 + +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] + +sanity_check_paths = { + 'files': ["bin/STAR", "bin/STARlong"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 1dbcd246623116c0cde17cb04e85f87b6cba548d Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 9 Mar 2017 12:07:23 +0800 Subject: [PATCH 0625/1311] yet another batch of minor style fixes --- .../j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb | 2 +- .../jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb index 07eff74434..4dba96087d 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb @@ -10,7 +10,7 @@ version = '2.1.10r20160303' versionsuffix = '-Java-%(javaver)s' homepage = 'https://github.com/ddarriba/jmodeltest2' -description="""jModelTest is a tool to carry out statistical selection of best-fit models of nucleotide substitution.""" +description = "jModelTest is a tool to carry out statistical selection of best-fit models of nucleotide substitution." toolchain = {'name': 'dummy', 'version': ''} diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb index ecf1089f64..37a4b9dd9a 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb @@ -9,7 +9,7 @@ name = 'jModelTest' version = '2.1.9r20160115' homepage = 'https://github.com/ddarriba/jmodeltest2' -description="""jModelTest is a tool to carry out statistical selection of best-fit models of nucleotide substitution.""" +description = "jModelTest is a tool to carry out statistical selection of best-fit models of nucleotide substitution." toolchain = {'name': 'goolf', 'version': '1.4.10'} -- GitLab From 86c6bb0e2a0d992ba77efcc6a0577127d18a7b11 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 9 Mar 2017 12:25:41 +0800 Subject: [PATCH 0626/1311] yet another batch of minor style fixes --- easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2016a.eb | 4 ++-- .../easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb | 8 +++----- .../easyconfigs/l/Libint/Libint-1.1.4-intel-2016a.eb | 2 +- easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb | 2 +- .../easyconfigs/l/Libint/Libint-1.1.6-intel-2016b.eb | 2 +- easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/l/libXi/libXi-1.7.2-ictce-5.3.0.eb | 3 ++- easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015a.eb | 3 ++- easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb | 3 ++- .../l/libXxf86vm/libXxf86vm-1.1.4-foss-2016a.eb | 2 +- .../l/libXxf86vm/libXxf86vm-1.1.4-intel-2016a.eb | 2 +- .../easyconfigs/l/libpng/libpng-1.6.21-intel-2015b.eb | 2 +- .../l/libreadline/libreadline-6.2-goolf-1.7.20.eb | 8 ++++---- .../l/libreadline/libreadline-6.2-ictce-5.4.0.eb | 8 ++++---- .../l/libreadline/libreadline-6.3-CrayGNU-2015.06.eb | 8 ++++---- .../l/libreadline/libreadline-6.3-CrayGNU-2015.11.eb | 8 ++++---- .../l/libreadline/libreadline-6.3-CrayGNU-2016.03.eb | 8 ++++---- .../easyconfigs/l/libsmm/libsmm-20111205-goolf-1.4.10.eb | 5 +++-- .../l/libunistring/libunistring-0.9.3-GCC-4.9.3-2.25.eb | 8 ++++---- .../l/libunistring/libunistring-0.9.3-foss-2015b.eb | 8 ++++---- .../l/libunistring/libunistring-0.9.3-foss-2016a.eb | 8 ++++---- .../l/libunistring/libunistring-0.9.3-intel-2015b.eb | 8 ++++---- 22 files changed, 58 insertions(+), 55 deletions(-) diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2016a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2016a.eb index 4228c8e824..59f694676c 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2016a.eb @@ -29,8 +29,8 @@ dependencies = [ configopts = '-DBUILD_SHARED_LIBS=ON' sanity_check_paths = { - 'files' : ['bin/llvm-ar'], - 'dirs' : ['include/llvm', 'include/llvm-c'], + 'files': ['bin/llvm-ar'], + 'dirs': ['include/llvm', 'include/llvm-c'], } separate_build_dir = True diff --git a/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb b/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb index c5eee2ec3d..daaaa15ecd 100644 --- a/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LevelDB/LevelDB-1.18-foss-2016a.eb @@ -4,10 +4,8 @@ name = 'LevelDB' version = '1.18' homepage = 'https://github.com/google/leveldb' -description = """ -LevelDB is a fast key-value storage library written at Google that provides an -ordered mapping from string keys to string values. -""" +description = """LevelDB is a fast key-value storage library written at Google that provides an + ordered mapping from string keys to string values.""" toolchain = {'name': 'foss', 'version': '2016a'} @@ -19,7 +17,7 @@ files_to_copy = [ (['include/leveldb/*.h'], 'include/leveldb') ] -postinstallcmds=[ +postinstallcmds = [ 'cd %(installdir)s/lib; ln -s libleveldb.so.%(version)s libleveldb.so.%(version_major)s', 'cd %%(installdir)s/lib; ln -s libleveldb.so.%%(version)s libleveldb.%s' % SHLIB_EXT, ] diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-intel-2016a.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-intel-2016a.eb index 56cf148c48..593afa9ec4 100644 --- a/easybuild/easyconfigs/l/Libint/Libint-1.1.4-intel-2016a.eb +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.4-intel-2016a.eb @@ -16,7 +16,7 @@ configopts = "--enable-deriv --enable-r12" sanity_check_paths = { 'files': ['include/lib%(x)s/lib%(x)s.h' % {'x': x} for x in ['deriv', 'int', 'r12']] + ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + - ['lib/lib%s.%s' % (x,y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], + ['lib/lib%s.%s' % (x, y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb index 08a7cf496f..928179dc39 100644 --- a/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-foss-2016b.eb @@ -20,7 +20,7 @@ configopts = "--enable-deriv --enable-r12" sanity_check_paths = { 'files': ['include/lib%(x)s/lib%(x)s.h' % {'x': x} for x in ['deriv', 'int', 'r12']] + ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + - ['lib/lib%s.%s' % (x,y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], + ['lib/lib%s.%s' % (x, y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/Libint/Libint-1.1.6-intel-2016b.eb b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-intel-2016b.eb index accf89b9e8..785074f0f9 100644 --- a/easybuild/easyconfigs/l/Libint/Libint-1.1.6-intel-2016b.eb +++ b/easybuild/easyconfigs/l/Libint/Libint-1.1.6-intel-2016b.eb @@ -20,7 +20,7 @@ configopts = "--enable-deriv --enable-r12" sanity_check_paths = { 'files': ['include/lib%(x)s/lib%(x)s.h' % {'x': x} for x in ['deriv', 'int', 'r12']] + ['include/libint/hrr_header.h', 'include/libint/vrr_header.h'] + - ['lib/lib%s.%s' % (x,y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], + ['lib/lib%s.%s' % (x, y) for x in ['deriv', 'int', 'r12'] for y in ['a', SHLIB_EXT]], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb index 8b0e336093..b4b7228f14 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb @@ -20,7 +20,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-ictce-5.3.0.eb index 0f71868663..bc42f60686 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-ictce-5.3.0.eb @@ -20,7 +20,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015a.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015a.eb index 68589245d1..0e45004907 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015a.eb @@ -20,7 +20,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb index 60cd626d31..2316d70175 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb @@ -20,7 +20,8 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-foss-2016a.eb b/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-foss-2016a.eb index ea33d4f180..e34d4affc3 100644 --- a/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-foss-2016a.eb @@ -22,7 +22,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/xf86vmode.h']+ + 'files': ['include/X11/extensions/xf86vmode.h'] + ['lib/libXxf86vm.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-intel-2016a.eb b/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-intel-2016a.eb index 873ae3da80..1fb8f730cc 100644 --- a/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libXxf86vm/libXxf86vm-1.1.4-intel-2016a.eb @@ -22,7 +22,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/xf86vmode.h']+ + 'files': ['include/X11/extensions/xf86vmode.h'] + ['lib/libXxf86vm.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.21-intel-2015b.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-intel-2015b.eb index b76c98f402..7caa32f2db 100644 --- a/easybuild/easyconfigs/l/libpng/libpng-1.6.21-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-intel-2015b.eb @@ -19,7 +19,7 @@ configopts = "--with-pic" majminver = ''.join(version.split('.')[:2]) sanity_check_paths = { 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', - 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' %(majminver, SHLIB_EXT)], + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], } diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-goolf-1.7.20.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-goolf-1.7.20.eb index be707f2f9d..6d2b145e5d 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-goolf-1.7.20.eb @@ -21,10 +21,10 @@ dependencies = [('ncurses', '5.9')] preconfigopts = "LDFLAGS='-lncurses'" sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-ictce-5.4.0.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-ictce-5.4.0.eb index 12e011a8ed..ade9c01fee 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-ictce-5.4.0.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-ictce-5.4.0.eb @@ -21,10 +21,10 @@ dependencies = [('ncurses', '5.9')] preconfigopts = "env LDFLAGS='-lncurses'" sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.06.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.06.eb index 1710b5c8bc..8708402541 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.06.eb @@ -23,10 +23,10 @@ dependencies = [('ncurses', '5.9')] preconfigopts = "env LDFLAGS='-lncurses'" sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.11.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.11.eb index a4fb8619cb..7bfc1d634c 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2015.11.eb @@ -23,10 +23,10 @@ dependencies = [('ncurses', '5.9')] preconfigopts = "env LDFLAGS='-lncurses'" sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2016.03.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2016.03.eb index c434630db4..33e6e24615 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-CrayGNU-2016.03.eb @@ -23,10 +23,10 @@ dependencies = [('ncurses', '6.0')] preconfigopts = "env LDFLAGS='-lncurses'" sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libsmm/libsmm-20111205-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libsmm/libsmm-20111205-goolf-1.4.10.eb index d7907d8655..ca93b0d47a 100644 --- a/easybuild/easyconfigs/l/libsmm/libsmm-20111205-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libsmm/libsmm-20111205-goolf-1.4.10.eb @@ -2,8 +2,9 @@ name = 'libsmm' version = '20111205' homepage = 'http://cp2k.berlios.de/index.html' -description = """libsmm is part of CP2K. It is a library tuned for small size matrix multiplication, - an area where regular BLAS is not so well-tuned. The source can be found in the tools/build_libssm directory of CP2K code.""" +description = """libsmm is part of CP2K. It is a library tuned for small size matrix multiplication, an area where + regular BLAS is not so well-tuned. The source can be found in the tools/build_libssm directory of CP2K code.""" + toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = ['CP2K-%s.tar.gz' % version] diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-GCC-4.9.3-2.25.eb index 6d7bea7d3d..5c7a628aaf 100644 --- a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-GCC-4.9.3-2.25.eb @@ -15,10 +15,10 @@ source_urls = [GNU_SOURCE] parallel = 1 sanity_check_paths = { - 'files' : ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + - ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', - 'stdio', 'str', 'types', 'wbrk', 'width']], - 'dirs' : ['include/unistring'], + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb index 3c6b226b5a..57b9a33b63 100644 --- a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2015b.eb @@ -15,10 +15,10 @@ source_urls = [GNU_SOURCE] parallel = 1 sanity_check_paths = { - 'files' : ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + - ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', - 'stdio', 'str', 'types', 'wbrk', 'width']], - 'dirs' : ['include/unistring'], + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2016a.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2016a.eb index 052063704a..25d25c5148 100644 --- a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-foss-2016a.eb @@ -15,10 +15,10 @@ source_urls = [GNU_SOURCE] parallel = 1 sanity_check_paths = { - 'files' : ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + - ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', - 'stdio', 'str', 'types', 'wbrk', 'width']], - 'dirs' : ['include/unistring'], + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb index 19e0b26c92..bf35428b39 100644 --- a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.3-intel-2015b.eb @@ -17,10 +17,10 @@ patches = ['libunistring_icc_builtin_nan-inf.patch'] parallel = 1 sanity_check_paths = { - 'files' : ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + - ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', - 'stdio', 'str', 'types', 'wbrk', 'width']], - 'dirs' : ['include/unistring'], + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], } moduleclass = 'lib' -- GitLab From 204a49a722c80e724b395046c744d92ea1076f6b Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 9 Mar 2017 12:27:35 +0800 Subject: [PATCH 0627/1311] yet another batch of minor style fixes --- .../easyconfigs/m/MVAPICH2/MVAPICH2-1.8.1-GCC-4.7.2.eb | 3 ++- .../easyconfigs/m/MVAPICH2/MVAPICH2-1.9a2-GCC-4.7.2.eb | 3 ++- easybuild/easyconfigs/m/Maq/Maq-0.7.0.eb | 7 +++---- .../m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb | 7 ++++--- .../m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb | 4 ++-- .../m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb | 4 ++-- .../easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb | 9 +++------ .../easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb | 1 - .../m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb | 6 ++++-- .../easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb | 4 ++-- .../m/molmod/molmod-1.0-goolf-1.4.10-Python-2.7.3.eb | 2 +- .../m/molmod/molmod-1.0-ictce-5.3.0-Python-2.7.3.eb | 2 +- .../m/molmod/molmod-1.0-intel-2015a-Python-2.7.10.eb | 2 +- .../m/molmod/molmod-1.0-intel-2015a-Python-2.7.9.eb | 2 +- .../m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb | 2 +- .../m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb | 2 +- .../m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb | 2 +- easybuild/easyconfigs/m/motif/motif-2.3.5-foss-2016a.eb | 8 ++++---- .../easyconfigs/m/mrFAST/mrFAST-2.6.0.1-goolf-1.4.10.eb | 2 +- .../easyconfigs/m/mrFAST/mrFAST-2.6.0.1-ictce-6.2.5.eb | 2 +- .../m/mrsFAST/mrsFAST-2.6.0.4-goolf-1.4.10.eb | 2 +- .../easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-ictce-6.2.5.eb | 2 +- 22 files changed, 39 insertions(+), 39 deletions(-) diff --git a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.8.1-GCC-4.7.2.eb b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.8.1-GCC-4.7.2.eb index f289c8d654..c29dfc7a1a 100644 --- a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.8.1-GCC-4.7.2.eb +++ b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.8.1-GCC-4.7.2.eb @@ -2,7 +2,8 @@ name = 'MVAPICH2' version = '1.8.1' homepage = 'http://mvapich.cse.ohio-state.edu/overview/mvapich2/' -description = "This is an MPI-2 implementation (conforming to MPI 2.1 standard) which includes all MPI-1 features. It is based on MPICH2 and MVICH." +description = """This is an MPI-2 implementation (conforming to MPI 2.1 standard) which includes all MPI-1 features. + It is based on MPICH2 and MVICH.""" toolchain = {'name': 'GCC', 'version': '4.7.2'} diff --git a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.9a2-GCC-4.7.2.eb b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.9a2-GCC-4.7.2.eb index 372dd0b722..777e5a69e1 100644 --- a/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.9a2-GCC-4.7.2.eb +++ b/easybuild/easyconfigs/m/MVAPICH2/MVAPICH2-1.9a2-GCC-4.7.2.eb @@ -2,7 +2,8 @@ name = 'MVAPICH2' version = '1.9a2' homepage = 'http://mvapich.cse.ohio-state.edu/overview/mvapich2/' -description = "This is an MPI-2 implementation (conforming to MPI 2.1 standard) which includes all MPI-1 features. It is based on MPICH2 and MVICH." +description = """This is an MPI-2 implementation (conforming to MPI 2.1 standard) which includes all MPI-1 features. + It is based on MPICH2 and MVICH.""" toolchain = {'name': 'GCC', 'version': '4.7.2'} diff --git a/easybuild/easyconfigs/m/Maq/Maq-0.7.0.eb b/easybuild/easyconfigs/m/Maq/Maq-0.7.0.eb index b78da99d83..8357cd6199 100644 --- a/easybuild/easyconfigs/m/Maq/Maq-0.7.0.eb +++ b/easybuild/easyconfigs/m/Maq/Maq-0.7.0.eb @@ -8,16 +8,15 @@ name = 'Maq' version = '0.7.0' homepage = 'http://maq.sourceforge.net/maq-man.shtml' -description = """ Maq is a software that builds mapping -assemblies from short reads generated by the -next-generation sequencing machines. """ +description = """Maq is a software that builds mapping assemblies from short reads generated by the next-generation sequencing + machines.""" toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['https://sourceforge.net/projects/maq/files/maq/%(version)s/'] sources = ['maq-%(version)s_x86_64-linux.tar.bz2'] -checksums= ["65edff1529c84783d0a4b9208a91efa9"] +checksums = ["65edff1529c84783d0a4b9208a91efa9"] modextrapaths = {'PATH': ''} diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb index 57483e1d4f..ea99e518c2 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb @@ -5,7 +5,8 @@ version = '7.11.2' homepage = 'http://www.mesa3d.org/' description = """Mesa is an open-source implementation of the OpenGL specification - -a system for rendering interactive 3D graphics.""" + a system for rendering interactive 3D graphics.""" + toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True} @@ -37,8 +38,8 @@ osdependencies = [ 'libXfixes-devel', ] -configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx --with-driver=xlib" -configopts += " --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl""" +configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx " +configopts += " --with-driver=xlib --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl" # package-config files for os dependencies are in an os specific place preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb index ac83c1243a..55c990890f 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb @@ -39,8 +39,8 @@ osdependencies = [ 'libXfixes-devel', ] -configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx --with-driver=xlib" -configopts += " --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl""" +configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx " +configopts += " --with-driver=xlib --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl" # package-config files for os dependencies are in an os specific place preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb index 810e10d3bb..4b5ad07db8 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb @@ -39,8 +39,8 @@ osdependencies = [ 'libXfixes-devel', ] -configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx --with-driver=xlib" -configopts += " --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl""" +configopts = " --disable-osmesa --enable-glu --disable-gallium-llvm --disable-gallium-gbm --enable-glx " +configopts += " --with-driver=xlib --disable-driglx-direct --with-gallium-drivers='' --without-demos --disable-egl" # package-config files for os dependencies are in an os specific place preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' diff --git a/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb b/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb index 04f7962ec3..8c234a753f 100644 --- a/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Metal/Metal-2011-03-25-foss-2016a.eb @@ -4,11 +4,8 @@ name = 'Metal' version = '2011-03-25' homepage = 'http://csg.sph.umich.edu/abecasis/Metal/' -description = """ -Metal - Meta Analysis Helper -The METAL software is designed to facilitate meta-analysis of large datasets (such as several whole genome scans) in a - convenient, rapid and memory efficient manner. -""" +description = """Metal - Meta Analysis Helper. The METAL software is designed to facilitate meta-analysis of large + datasets (such as several whole genome scans) in a convenient, rapid and memory efficient manner.""" sources = ['generic-%(namelower)s-%(version)s.tar.gz'] source_urls = ['http://csg.sph.umich.edu/abecasis/Metal/download/'] @@ -18,7 +15,7 @@ toolchainopts = {'pic': True} patches = ['Metal-%(version)s_Makefile.patch'] -skipsteps=['configure'] +skipsteps = ['configure'] buildopts = 'all' diff --git a/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb b/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb index 8523144221..947de950b4 100644 --- a/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/Minia/Minia-2.0.7-goolf-1.7.20.eb @@ -28,4 +28,3 @@ sanity_check_paths = { } moduleclass = 'bio' - diff --git a/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb b/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb index 50e766c0ce..c6a015a815 100644 --- a/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/m/Minimac2/Minimac2-2014.9.15-goolf-1.7.20.eb @@ -24,8 +24,10 @@ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] dependencies = [ ('zlib', '1.2.8'), # This app also depends in openblas -# ('OpenSSL', '1.0.1q'), # OS dependency should be preferred if the os version is more recent then this version, it's -# nice to have an up to date openssl for security reasons + # OS dependency should be preferred if the os version is more recent then this version, it's + # nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), + ] # firt move to folder libStatGen to run make clean && make diff --git a/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb b/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb index ba77602cd4..4c07b64293 100644 --- a/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/m/magma/magma-2.0.0-CrayGNU-2015.11.eb @@ -5,7 +5,7 @@ version = '2.0.0' homepage = 'http://icl.cs.utk.edu/magma/' description = """The MAGMA project aims to develop a dense linear algebra library similar to -LAPACK but for heterogeneous/hybrid architectures, starting with current Multicore+GPU systems.""" + LAPACK but for heterogeneous/hybrid architectures, starting with current Multicore+GPU systems.""" toolchain = {'name': 'CrayGNU', 'version': '2015.11'} toolchainopts = {'pic': True} @@ -15,7 +15,7 @@ source_urls = ['http://icl.cs.utk.edu/projectsfiles/magma/downloads/'] patches = [('magma-2.0.0.patch')] -builddependencies = [ ('cudatoolkit/7.0.28-1.0502.10742.5.1', EXTERNAL_MODULE) ] +builddependencies = [('cudatoolkit/7.0.28-1.0502.10742.5.1', EXTERNAL_MODULE)] skipsteps = ['configure'] diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.0-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/m/molmod/molmod-1.0-goolf-1.4.10-Python-2.7.3.eb index 08d2e9759c..73545656c9 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.0-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.0-goolf-1.4.10-Python-2.7.3.eb @@ -4,7 +4,7 @@ name = 'molmod' version = '1.0' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'goolf', 'version': '1.4.10'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.0-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/m/molmod/molmod-1.0-ictce-5.3.0-Python-2.7.3.eb index 221229e3a6..763ccba836 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.0-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.0-ictce-5.3.0-Python-2.7.3.eb @@ -4,7 +4,7 @@ name = 'molmod' version = '1.0' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'ictce', 'version': '5.3.0'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.10.eb index 5d19338ab3..dab01e8798 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.10.eb @@ -4,7 +4,7 @@ name = 'molmod' version = '1.0' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.9.eb index b6703cee30..4aa55f0033 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.0-intel-2015a-Python-2.7.9.eb @@ -4,7 +4,7 @@ name = 'molmod' version = '1.0' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'intel', 'version': '2015a'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb index ee1c589750..eb46a80abe 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb @@ -5,7 +5,7 @@ version = '1.1' versionsuffix = '-Python-%(pyver)s' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'intel', 'version': '2015b'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb index 1673c64e60..62f71cc876 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb @@ -5,7 +5,7 @@ version = '1.1' versionsuffix = '-Python-%(pyver)s' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'intel', 'version': '2016a'} diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb index 23fd809bd7..1b74bd9124 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb @@ -5,7 +5,7 @@ version = '1.1' versionsuffix = '-Python-%(pyver)s' homepage = 'http://molmod.github.io/molmod/' -description = """MolMod is a Python library with many compoments that are useful to write molecular modeling programs.""" +description = "MolMod is a Python library with many compoments that are useful to write molecular modeling programs." toolchain = {'name': 'intel', 'version': '2016b'} diff --git a/easybuild/easyconfigs/m/motif/motif-2.3.5-foss-2016a.eb b/easybuild/easyconfigs/m/motif/motif-2.3.5-foss-2016a.eb index 3a9a7c7e64..91ed160613 100644 --- a/easybuild/easyconfigs/m/motif/motif-2.3.5-foss-2016a.eb +++ b/easybuild/easyconfigs/m/motif/motif-2.3.5-foss-2016a.eb @@ -4,9 +4,9 @@ name = 'motif' version = '2.3.5' homepage = 'http://motif.ics.com/' -description = """Motif refers to both a graphical user interface (GUI) specification and the widget toolkit for building - applications that follow that specification under the X Window System on Unix and other POSIX-compliant systems. - It was the standard toolkit for the Common Desktop Environment and thus for Unix.""" +description = """Motif refers to both a graphical user interface (GUI) specification and the widget toolkit for + building applications that follow that specification under the X Window System on Unix and other POSIX-compliant + systems. It was the standard toolkit for the Common Desktop Environment and thus for Unix.""" toolchain = {'name': 'foss', 'version': '2016a'} # use -O1 to dance around icc segfaulting @@ -42,4 +42,4 @@ sanity_check_paths = { 'dirs': ['include/Mrm', 'include/uil', 'include/X11', 'include/Xm'], } -moduleclass = 'vis' \ No newline at end of file +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-goolf-1.4.10.eb b/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-goolf-1.4.10.eb index 2b7c9b71bd..fb05915a84 100644 --- a/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-goolf-1.4.10.eb @@ -21,7 +21,7 @@ parallel = 1 buildopts = ' CC="$CC"' -files_to_copy = [ (['mrfast'], 'bin'), "LICENSE" ] +files_to_copy = [(['mrfast'], 'bin'), "LICENSE"] sanity_check_paths = { 'files': ["bin/mrfast"], diff --git a/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-ictce-6.2.5.eb b/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-ictce-6.2.5.eb index 086efed6cd..1bc0838af6 100644 --- a/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/m/mrFAST/mrFAST-2.6.0.1-ictce-6.2.5.eb @@ -21,7 +21,7 @@ parallel = 1 buildopts = ' CC="$CC"' -files_to_copy = [ (['mrfast'], 'bin'), "LICENSE" ] +files_to_copy = [(['mrfast'], 'bin'), "LICENSE"] sanity_check_paths = { 'files': ["bin/mrfast"], diff --git a/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-goolf-1.4.10.eb b/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-goolf-1.4.10.eb index 7da0c48dde..e58c648eee 100644 --- a/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-goolf-1.4.10.eb @@ -24,7 +24,7 @@ patches = ['mrsFAST-%(version)s-intel-compiler.patch'] parallel = 1 -files_to_copy = [ (['mrsfast'], 'bin'), "Changelog" ] +files_to_copy = [(['mrsfast'], 'bin'), "Changelog"] sanity_check_paths = { 'files': ["bin/mrsfast"], diff --git a/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-ictce-6.2.5.eb b/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-ictce-6.2.5.eb index fda1eaa51f..933177a5af 100644 --- a/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/m/mrsFAST/mrsFAST-2.6.0.4-ictce-6.2.5.eb @@ -24,7 +24,7 @@ patches = ['mrsFAST-%(version)s-intel-compiler.patch'] parallel = 1 -files_to_copy = [ (['mrsfast'], 'bin'), "Changelog" ] +files_to_copy = [(['mrsfast'], 'bin'), "Changelog"] sanity_check_paths = { 'files': ["bin/mrsfast"], -- GitLab From 78a9d5a38696a3871b1c9a30cc838f5a3a6a2274 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 9 Mar 2017 17:42:47 +1030 Subject: [PATCH 0628/1311] PileOMeth added --- .../p/PileOMeth/PileOMeth-0.1.11.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb diff --git a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb new file mode 100644 index 0000000000..af4dcdba98 --- /dev/null +++ b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb @@ -0,0 +1,40 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: +# +# Notes:: +### + +easyblock = 'MakeCp' + +name = 'PileOMeth' +version = '0.1.11' + +homepage = 'https://github.com/dpryan79/PileOMeth' +description = """PileOMeth processes a coordinate-sorted and indexed BAM or CRAM file containing some form of BS-seq alignments. +PileOMeth extracts per-base methylation metrics from them. +PileOMeth requires an indexed fasta file containing the reference genome as well. +""" +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['%(version)s.zip'] +source_urls = ['https://github.com/dpryan79/PileOMeth/archive/'] + +dependencies = [ + ('HTSlib', '1.2.1', '', ('foss', '2017a')) +] + +files_to_copy = [ + (["PileOMeth"], "bin"), "*.c", "*.h" +] + +sanity_check_paths = { + 'files': ["bin/PileOMeth"], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From e1b83120c8d9ac9a9753f21956a8e66d731a0242 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 09:40:33 +0100 Subject: [PATCH 0629/1311] miRDeep2 scripts do a hard check for an (empty) file named 'install_successful' in the install dir... --- .../easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index 8a8e1422a7..7f489ba651 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -20,10 +20,13 @@ dependencies = [ ('randfold', '2.0.1'), # also provides SQUID ] -install_cmd = "chmod a+x mirdeep*/src/*.pl && cp -a mirdeep*/src %(installdir)s/bin" +install_cmd = "cp -a mirdeep*/src %(installdir)s/bin && chmod a+x %(installdir)s/bin/*.pl && " + +# scripts include a hard check for a file called 'install_successful' in the install directory... +install_cmd += "touch %(installdir)s/install_successful" sanity_check_paths = { - 'files': ['bin/make_html.pl'], + 'files': ['bin/mapper.pl', 'bin/miRDeep2.pl'], 'dirs': [], } -- GitLab From a2c62538a6049740584c8c668082799db24e404f Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Thu, 9 Mar 2017 10:45:09 +0100 Subject: [PATCH 0630/1311] added GFOLD easyconfig for goolf and intel --- .../g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb | 34 +++++++++++++++++++ .../g/GFOLD/GFOLD-1.1.4-intel-2016a.eb | 34 +++++++++++++++++++ .../g/GFOLD/gfold-1.1.4-makefile.patch | 18 ++++++++++ 3 files changed, 86 insertions(+) create mode 100644 easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb create mode 100644 easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb create mode 100644 easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch diff --git a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb new file mode 100644 index 0000000000..8d11408e6b --- /dev/null +++ b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb @@ -0,0 +1,34 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'MakeCp' + +name = 'GFOLD' +version = '1.1.4' + +homepage = 'http://www.tongji.edu.cn/~zhanglab/GFOLD/index.html' +description = 'Generalized fold change for ranking differentially expressed genes from RNA-seq data' + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://bitbucket.org/feeldead/gfold/downloads/'] +sources = ['%(namelower)s.V%(version)s.tar.gz'] + +patches = ['gfold-%(version)s-makefile.patch'] + +dependencies = [ + ('GSL', '1.16'), +] + +files_to_copy = [(['gfold'], 'bin'), 'README', 'doc'] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/gfold'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb new file mode 100644 index 0000000000..3b289b47ea --- /dev/null +++ b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb @@ -0,0 +1,34 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'MakeCp' + +name = 'GFOLD' +version = '1.1.4' + +homepage = 'http://www.tongji.edu.cn/~zhanglab/GFOLD/index.html' +description = 'Generalized fold change for ranking differentially expressed genes from RNA-seq data' + +toolchain = {'name': 'intel', 'version': '2016a'} + +source_urls = ['https://bitbucket.org/feeldead/gfold/downloads/'] +sources = ['%(namelower)s.V%(version)s.tar.gz'] + +patches = ['gfold-%(version)s-makefile.patch'] + +dependencies = [ + ('GSL', '1.16'), +] + +files_to_copy = [(['gfold'], 'bin'), 'README', 'doc'] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/gfold'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch new file mode 100644 index 0000000000..15699d96ba --- /dev/null +++ b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch @@ -0,0 +1,18 @@ +fix the hardcoded compiler + +diff -ru gfold.V1.1.4.orig/Makefile gfold.V1.1.4/Makefile +--- gfold.V1.1.4.orig/Makefile 2015-05-24 01:47:13.000000000 +0200 ++++ gfold.V1.1.4/Makefile 2017-03-09 10:32:23.919031000 +0100 +@@ -5,10 +5,10 @@ + all: program + + debug: DataProcessor.hpp GFOLD.hpp Utility.hpp GeneInfo.hpp main.cc +- g++ -Wall -g main.cc -o gfold -lgsl -lgslcblas ++ ${CXX} -Wall -g main.cc -o gfold -lgsl -lgslcblas + + program: DataProcessor.hpp GFOLD.hpp Utility.hpp GeneInfo.hpp main.cc +- g++ -O3 -Wall -g main.cc -o gfold -lgsl -lgslcblas ++ ${CXX} -O3 -Wall -g main.cc -o gfold -lgsl -lgslcblas + + docu: doc/gfold.pod + pod2man doc/gfold.pod > doc/gfold.man -- GitLab From 4f92b9fa68fb297f350a600d382f67e09cb723f5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:04:34 +0100 Subject: [PATCH 0631/1311] adding easyconfigs: GDAL-2.1.3-foss-2016b-Python-2.7.12.eb --- .../GDAL-2.1.3-foss-2016b-Python-2.7.12.eb | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..0f954c1b05 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,54 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.1.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] + +#patches = ['GDAL-2.1.2_fix-vrtsources.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.13.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.24'), + ('libjpeg-turbo', '1.5.0'), + ('JasPer', '1.900.1'), + ('LibTIFF', '4.0.6'), + ('zlib', '1.2.8'), + ('cURL', '7.49.1'), + ('PCRE', '8.39'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' +# there is a bug in the build system causing the build with libtool to fail for the moment +# (static library is also missing because of this) +#configopts += ' --without-libtool' + +#buildopts = 'CXXFLAGS="$CXXFLAGS -fpermissive"' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' -- GitLab From b7eee70912a1b3dc6722c933b62449e870a44ffa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:04:52 +0100 Subject: [PATCH 0632/1311] adding easyconfigs: PROJ-4.9.3-foss-2016b.eb --- .../p/PROJ/PROJ-4.9.3-foss-2016b.eb | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb new file mode 100644 index 0000000000..7c6ed61f58 --- /dev/null +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb @@ -0,0 +1,57 @@ +# Built with EasyBuild version 3.1.0 on 2017-03-07_13-55-44 +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2014-2015 The Cyprus Institute +# Authors:: Thekla Loizou +# License:: MIT/GPL +# +## +easyblock = 'ConfigureMake' + +name = 'PROJ' +version = '4.9.3' + +homepage = 'http://trac.osgeo.org/proj/' +description = """Program proj is a standard Unix filter function which converts +geographic longitude and latitude coordinates into cartesian coordinates""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['http://download.osgeo.org/proj/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', + 'bin/nad2bin', 'bin/proj'], + 'dirs': [], +} + +moduleclass = 'lib' + +# Build statistics +buildstats = [{ + "build_time": 94.84, + "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", + "cpu_speed": 2500.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.0", + "easybuild-framework_version": "3.1.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "node2471.golett.os", + "install_size": 4259625, + "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/tmp/eb-RUaDzP/tmpNuI7H2/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1488891344, + "total_memory": 64303, +}] -- GitLab From 6e355d309317b055b0623b27a22b1a1ff72f6f2f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:07:54 +0100 Subject: [PATCH 0633/1311] adding easyconfigs: GEOS-3.6.1-foss-2016b-Python-2.7.12.eb, SWIG-3.0.11-foss-2016b-Python-2.7.12.eb --- .../GEOS-3.6.1-foss-2016b-Python-2.7.12.eb | 55 +++++++++++++++++++ .../SWIG-3.0.11-foss-2016b-Python-2.7.12.eb | 47 ++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..ff17f25dff --- /dev/null +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,55 @@ +# Built with EasyBuild version 3.1.0 on 2017-03-07_14-08-23 +easyblock = 'ConfigureMake' + +name = 'GEOS' +version = '3.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://trac.osgeo.org/geos' +description = """GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS)""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://download.osgeo.org/geos/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [('Python', '2.7.12')] + +builddependencies = [('SWIG', '3.0.11', versionsuffix)] + +configopts = '--enable-python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['bin/geos-config', 'lib/libgeos.%s' % SHLIB_EXT, 'lib/libgeos.a', 'include/geos.h'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/geos'], +} + +moduleclass = 'math' + +# Build statistics +buildstats = [{ + "build_time": 431.44, + "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", + "cpu_speed": 2500.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.0", + "easybuild-framework_version": "3.1.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "node2471.golett.os", + "install_size": 13415865, + "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/tmp/eb-RUaDzP/tmpb49pQv/gcc", + "system_python_path": "/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/Python/2.7.12-foss-2016b/bin/python", + "timestamp": 1488892103, + "total_memory": 64303, +}] diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bd7c62c123 --- /dev/null +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,47 @@ +# Built with EasyBuild version 3.1.0 on 2017-03-07_14-01-11 +name = 'SWIG' +version = '3.0.11' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.swig.org/' +description = """SWIG is a software development tool that connects programs written in C and C++ with + a variety of high-level programming languages.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('PCRE', '8.38'), +] + +moduleclass = 'devel' + +# Build statistics +buildstats = [{ + "build_time": 62.35, + "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", + "cpu_speed": 2500.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.0", + "easybuild-framework_version": "3.1.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "node2471.golett.os", + "install_size": 5103738, + "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/tmp/eb-RUaDzP/tmpn3FMec/gcc", + "system_python_path": "/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/Python/2.7.12-foss-2016b/bin/python", + "timestamp": 1488891671, + "total_memory": 64303, +}] -- GitLab From 222de2e3bcc8228b30cb935fa60a8e9e27fa2b9f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:08:12 +0100 Subject: [PATCH 0634/1311] adding easyconfigs: libspatialindex-1.8.5-foss-2016b.eb --- .../libspatialindex-1.8.5-foss-2016b.eb | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb new file mode 100644 index 0000000000..33443350fb --- /dev/null +++ b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb @@ -0,0 +1,46 @@ +# Built with EasyBuild version 3.1.0 on 2017-03-07_13-58-08 +easyblock = 'ConfigureMake' + +name = 'libspatialindex' +version = '1.8.5' + +homepage = 'http://libspatialindex.github.io' +description = "C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://download.osgeo.org/libspatialindex/'] +sources = ['spatialindex-src-%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['lib/libspatialindex.a', 'lib/libspatialindex.%s' % SHLIB_EXT], + 'dirs': ['include/spatialindex'], +} + +moduleclass = 'lib' + +# Build statistics +buildstats = [{ + "build_time": 143.61, + "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", + "cpu_speed": 2500.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.0", + "easybuild-framework_version": "3.1.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "node2471.golett.os", + "install_size": 5693279, + "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/tmp/eb-RUaDzP/tmp07Ujmt/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1488891488, + "total_memory": 64303, +}] -- GitLab From 6191d257e6b77b205173a2ef627a9a8f8b81a01d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:08:50 +0100 Subject: [PATCH 0635/1311] adding easyconfigs: FreeXL-1.0.2-foss-2016b.eb --- .../f/FreeXL/FreeXL-1.0.2-foss-2016b.eb | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb new file mode 100644 index 0000000000..1e91b6e6f0 --- /dev/null +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb @@ -0,0 +1,49 @@ +# Built with EasyBuild version 3.1.0 on 2017-03-07_13-59-03 +easyblock = 'ConfigureMake' + +name = 'FreeXL' +version = '1.0.2' + +homepage = "https://www.gaia-gis.it/fossil/freexl/index" +description = "FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.gaia-gis.it/gaia-sins/freexl-sources/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('CMake', '3.7.1')] + +sanity_check_paths = { + 'files': ['lib/libfreexl.a'], + 'dirs': [] + } + +moduleclass = 'lib' + +# Build statistics +buildstats = [{ + "build_time": 55.18, + "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], + "core_count": 24, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", + "cpu_speed": 2500.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.0", + "easybuild-framework_version": "3.1.0", + "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "node2471.golett.os", + "install_size": 205319, + "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/tmp/eb-RUaDzP/tmp6qSQU6/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1488891543, + "total_memory": 64303, +}] -- GitLab From 67d6b752d1bfb4e6abe3a7596f966e6a62de5e45 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:12:37 +0100 Subject: [PATCH 0636/1311] remove buildstats --- .../p/PROJ/PROJ-4.9.3-foss-2016b.eb | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb index 7c6ed61f58..bd62ff7fdd 100644 --- a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb @@ -29,29 +29,3 @@ sanity_check_paths = { } moduleclass = 'lib' - -# Build statistics -buildstats = [{ - "build_time": 94.84, - "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", - "cpu_speed": 2500.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.0", - "easybuild-framework_version": "3.1.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "node2471.golett.os", - "install_size": 4259625, - "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/tmp/eb-RUaDzP/tmpNuI7H2/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1488891344, - "total_memory": 64303, -}] -- GitLab From 8367087c08ef9ae7372e516dc3c7952708051cfa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:13:40 +0100 Subject: [PATCH 0637/1311] remove buildstats --- .../GEOS-3.6.1-foss-2016b-Python-2.7.12.eb | 26 ------------------- .../SWIG-3.0.11-foss-2016b-Python-2.7.12.eb | 26 ------------------- 2 files changed, 52 deletions(-) diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb index ff17f25dff..95a33702aa 100644 --- a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb @@ -27,29 +27,3 @@ sanity_check_paths = { } moduleclass = 'math' - -# Build statistics -buildstats = [{ - "build_time": 431.44, - "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", - "cpu_speed": 2500.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.0", - "easybuild-framework_version": "3.1.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "node2471.golett.os", - "install_size": 13415865, - "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/tmp/eb-RUaDzP/tmpb49pQv/gcc", - "system_python_path": "/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/Python/2.7.12-foss-2016b/bin/python", - "timestamp": 1488892103, - "total_memory": 64303, -}] diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb index bd7c62c123..ef67967e6e 100644 --- a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb @@ -19,29 +19,3 @@ dependencies = [ ] moduleclass = 'devel' - -# Build statistics -buildstats = [{ - "build_time": 62.35, - "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", - "cpu_speed": 2500.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.0", - "easybuild-framework_version": "3.1.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "node2471.golett.os", - "install_size": 5103738, - "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/tmp/eb-RUaDzP/tmpn3FMec/gcc", - "system_python_path": "/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/Python/2.7.12-foss-2016b/bin/python", - "timestamp": 1488891671, - "total_memory": 64303, -}] -- GitLab From b5c23e38fc28cceee226e97635e52133ab9ecc3b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:13:40 +0100 Subject: [PATCH 0638/1311] remove buildstats --- .../libspatialindex-1.8.5-foss-2016b.eb | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb index 33443350fb..6393dbd967 100644 --- a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb @@ -18,29 +18,3 @@ sanity_check_paths = { } moduleclass = 'lib' - -# Build statistics -buildstats = [{ - "build_time": 143.61, - "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", - "cpu_speed": 2500.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.0", - "easybuild-framework_version": "3.1.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "node2471.golett.os", - "install_size": 5693279, - "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/tmp/eb-RUaDzP/tmp07Ujmt/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1488891488, - "total_memory": 64303, -}] -- GitLab From 1cf8d4ec36e74b4eedd969376ccce569e18fd13f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:14:58 +0100 Subject: [PATCH 0639/1311] remove buildstats --- .../f/FreeXL/FreeXL-1.0.2-foss-2016b.eb | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb index 1e91b6e6f0..f20ffb2db6 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb @@ -21,29 +21,3 @@ sanity_check_paths = { } moduleclass = 'lib' - -# Build statistics -buildstats = [{ - "build_time": 55.18, - "command_line": ["--buildpath='/tmp/vsc40023/easybuild_build'", '--debug', "--github-user='boegel'", "--installpath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--job-backend='PbsPython'", "--packagepath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/packages'", "--prefix='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib'", "--repositorypath='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/ebfiles_repo'", "--robot='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:/user/data/gent/vsc400/vsc40023/easybuild_easy_installed/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.0-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/vscmnt/gent_vulpix/_/user/data/gent/gvo000/gvo00002/vsc40023:'", "--sourcepath='/user/data/gent/vsc400/vsc40023/EasyBuild/sources:/apps/gent/source:/nfsmuk/apps/gent/source/'", "--try-toolchain='foss,2016b'", "--use-ccache='/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/ccache/CO7/haswell-ib'", 'QGIS.eb'], - "core_count": 24, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz", - "cpu_speed": 2500.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.0", - "easybuild-framework_version": "3.1.0", - "gcc_version": "Using built-in specs.; COLLECT_GCC=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0/bin/gcc; COLLECT_LTO_WRAPPER=/user/scratchphanpy/gent/gvo000/gvo00002/vsc40023/easybuild_REGTEST/CO7/haswell-ib/software/GCCcore/5.4.0/bin/../libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper; Target: x86_64-unknown-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --with-local-prefix=/user/home/gent/vsc400/vsc40023/eb_phanpyscratch/CO7/haswell-ib/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/tmp/vsc40023/easybuild_build/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff; Thread model: posix; gcc version 5.4.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "node2471.golett.os", - "install_size": 205319, - "modules_tool": ('Lmod', '/usr/share/lmod/lmod/libexec/lmod', '6.6'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/tmp/eb-RUaDzP/tmp6qSQU6/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1488891543, - "total_memory": 64303, -}] -- GitLab From eb3e66959e2ab315db0c3819b436b186463b65a0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 11:22:06 +0100 Subject: [PATCH 0640/1311] remove commented out lines --- .../g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb | 7 ------- 1 file changed, 7 deletions(-) diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb index 0f954c1b05..bc2162b8fb 100644 --- a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-foss-2016b-Python-2.7.12.eb @@ -16,8 +16,6 @@ toolchainopts = {'usempi': True} source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] sources = [SOURCELOWER_TAR_XZ] -#patches = ['GDAL-2.1.2_fix-vrtsources.patch'] - dependencies = [ ('Python', '2.7.12'), ('netCDF', '4.4.1.1'), @@ -38,11 +36,6 @@ configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBR configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' -# there is a bug in the build system causing the build with libtool to fail for the moment -# (static library is also missing because of this) -#configopts += ' --without-libtool' - -#buildopts = 'CXXFLAGS="$CXXFLAGS -fpermissive"' modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} -- GitLab From 9795a9c4c7c3d4ba24cbd1f0ace84bb7b426f937 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 13:00:51 +0100 Subject: [PATCH 0641/1311] remove 'Built with' comments --- .../easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb | 1 - easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb | 1 - .../easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb | 1 - 3 files changed, 3 deletions(-) diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb index 95a33702aa..02e7eb0e40 100644 --- a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-foss-2016b-Python-2.7.12.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.0 on 2017-03-07_14-08-23 easyblock = 'ConfigureMake' name = 'GEOS' diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb index bd62ff7fdd..7b1bb021f3 100644 --- a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-foss-2016b.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.0 on 2017-03-07_13-55-44 ## # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb index ef67967e6e..645b771837 100644 --- a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.11-foss-2016b-Python-2.7.12.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.0 on 2017-03-07_14-01-11 name = 'SWIG' version = '3.0.11' versionsuffix = '-Python-%(pyver)s' -- GitLab From 85ee43bb91417d48bb753d3e85f0427c50f03069 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 13:01:56 +0100 Subject: [PATCH 0642/1311] remove 'Built with' comment --- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb index f20ffb2db6..2775a19a49 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.0 on 2017-03-07_13-59-03 easyblock = 'ConfigureMake' name = 'FreeXL' -- GitLab From 62fc9ea965433cb32529fb9b5e058a6fe5805367 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 13:03:24 +0100 Subject: [PATCH 0643/1311] remove 'Built with' comment --- .../l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb index 6393dbd967..5ff79fa5a7 100644 --- a/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libspatialindex/libspatialindex-1.8.5-foss-2016b.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.0 on 2017-03-07_13-58-08 easyblock = 'ConfigureMake' name = 'libspatialindex' -- GitLab From 7206a55c12c3eb2b748b83b94957030601c762b5 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Thu, 9 Mar 2017 13:22:27 +0100 Subject: [PATCH 0644/1311] add ${CXXFLAGS} to the patch file --- easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch index 15699d96ba..08f6097072 100644 --- a/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch +++ b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch @@ -8,11 +8,11 @@ diff -ru gfold.V1.1.4.orig/Makefile gfold.V1.1.4/Makefile debug: DataProcessor.hpp GFOLD.hpp Utility.hpp GeneInfo.hpp main.cc - g++ -Wall -g main.cc -o gfold -lgsl -lgslcblas -+ ${CXX} -Wall -g main.cc -o gfold -lgsl -lgslcblas ++ ${CXX} ${CXXFLAGS} -Wall -g main.cc -o gfold -lgsl -lgslcblas program: DataProcessor.hpp GFOLD.hpp Utility.hpp GeneInfo.hpp main.cc - g++ -O3 -Wall -g main.cc -o gfold -lgsl -lgslcblas -+ ${CXX} -O3 -Wall -g main.cc -o gfold -lgsl -lgslcblas ++ ${CXX} ${CXXFLAGS} -Wall -g main.cc -o gfold -lgsl -lgslcblas docu: doc/gfold.pod pod2man doc/gfold.pod > doc/gfold.man -- GitLab From 6efe46cb2ad1f6a29fb5a8268ff27a9fb7dd9c5e Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Thu, 9 Mar 2017 13:22:50 +0100 Subject: [PATCH 0645/1311] update the patch comment --- easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch index 08f6097072..23ba52ac63 100644 --- a/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch +++ b/easybuild/easyconfigs/g/GFOLD/gfold-1.1.4-makefile.patch @@ -1,4 +1,4 @@ -fix the hardcoded compiler +fix the hardcoded compiler and use ${CXXFLAGS} diff -ru gfold.V1.1.4.orig/Makefile gfold.V1.1.4/Makefile --- gfold.V1.1.4.orig/Makefile 2015-05-24 01:47:13.000000000 +0200 -- GitLab From ff1bba6485cfb033f60e7a58f5442b49ff854d0c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 13:49:40 +0100 Subject: [PATCH 0646/1311] fix minor style issue --- easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb index 2775a19a49..b7981e18c5 100644 --- a/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb +++ b/easybuild/easyconfigs/f/FreeXL/FreeXL-1.0.2-foss-2016b.eb @@ -17,6 +17,6 @@ builddependencies = [('CMake', '3.7.1')] sanity_check_paths = { 'files': ['lib/libfreexl.a'], 'dirs': [] - } +} moduleclass = 'lib' -- GitLab From 76eec10c26deba272148df8e3229eab11166444c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:09:46 +0100 Subject: [PATCH 0647/1311] fix shebang in miRDeep2 Perl scripts --- easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index 7f489ba651..de73467658 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -21,6 +21,7 @@ dependencies = [ ] install_cmd = "cp -a mirdeep*/src %(installdir)s/bin && chmod a+x %(installdir)s/bin/*.pl && " +install_cmd += 'sed -i "s@#!/usr/bin/perl@#!$EBROOTPERL/bin/perl@" %(installdir)s/bin/*.pl && ' # scripts include a hard check for a file called 'install_successful' in the install directory... install_cmd += "touch %(installdir)s/install_successful" -- GitLab From 31b0580e2f82fe48ac5901484363f8d60bcf4fdc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:34:50 +0100 Subject: [PATCH 0648/1311] adding easyconfigs: flex-2.6.3-GCCcore-5.4.0.eb, M4-1.4.18-GCCcore-5.4.0.eb, help2man-1.47.4-GCCcore-5.4.0.eb --- .../f/flex/flex-2.6.3-GCCcore-5.4.0.eb | 23 +++++++++++++++++ .../help2man/help2man-1.47.4-GCCcore-5.4.0.eb | 19 ++++++++++++++ .../m/M4/M4-1.4.18-GCCcore-5.4.0.eb | 25 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..5044907def --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb @@ -0,0 +1,23 @@ +name = 'flex' +version = '2.6.3' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/'] + +checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] + +dependencies = [('M4', '1.4.18')] +builddependencies = [ + ('binutils', '2.26'), + ('Bison', '3.0.4'), + ('help2man', '1.47.4'), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..7b53bd8797 --- /dev/null +++ b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'help2man' +version = '1.47.4' + +homepage = 'https://www.gnu.org/software/help2man/' +description = """help2man produces simple manual pages from the '--help' and '--version' output of other commands.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_XZ] + +sanity_check_paths = { + 'files': ['bin/help2man'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..345402c605 --- /dev/null +++ b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'M4' +version = '1.4.18' + +homepage = 'http://www.gnu.org/software/m4/m4.html' +description = """GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible + although it has some extensions (for example, handling more than 9 positional parameters to macros). + GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +# '-fgnu89-inline' is required to avoid linking errors with older glibc's, +# see https://github.com/hpcugent/easybuild-easyconfigs/issues/529 +configopts = "--enable-cxx CPPFLAGS=-fgnu89-inline" + +sanity_check_paths = { + 'files': ["bin/m4"], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From b35c28b493af2a252f41971c1d3b492a7000460c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:36:09 +0100 Subject: [PATCH 0649/1311] adding easyconfigs: GDAL-2.1.3-intel-2016b-Python-2.7.12.eb --- .../GDAL-2.1.3-intel-2016b-Python-2.7.12.eb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..015f10d595 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,47 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.1.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('Python', '2.7.12'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.13.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.24'), + ('libjpeg-turbo', '1.5.0'), + ('JasPer', '1.900.1'), + ('LibTIFF', '4.0.6'), + ('zlib', '1.2.8'), + ('cURL', '7.49.1'), + ('PCRE', '8.39'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' -- GitLab From 59df1b140f4267a1b1abfac49143a39edf87063c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:38:46 +0100 Subject: [PATCH 0650/1311] adding easyconfigs: QCA-2.1.3-intel-2016b.eb --- .../q/QCA/QCA-2.1.3-intel-2016b.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/q/QCA/QCA-2.1.3-intel-2016b.eb diff --git a/easybuild/easyconfigs/q/QCA/QCA-2.1.3-intel-2016b.eb b/easybuild/easyconfigs/q/QCA/QCA-2.1.3-intel-2016b.eb new file mode 100644 index 0000000000..2b7816fd3c --- /dev/null +++ b/easybuild/easyconfigs/q/QCA/QCA-2.1.3-intel-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'CMakeMake' + +name = 'QCA' +version = '2.1.3' + +homepage = 'http://delta.affinix.com/qca/' +description = """Taking a hint from the similarly-named Java Cryptography Architecture, + QCA aims to provide a straightforward and cross-platform crypto API, using Qt datatypes + and conventions. QCA separates the API from the implementation, using plugins known as + Providers. The advantage of this model is to allow applications to avoid linking to or + explicitly depending on any particular cryptographic library. This allows one to easily + change or upgrade crypto implementations without even needing to recompile the + application! QCA should work everywhere Qt does, including Windows/Unix/MacOSX.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://download.kde.org/stable/qca/%(version)s/src/'] +sources = ['%(namelower)s-%(version)s.tar.xz'] + +configopts = "-DQT4_BUILD=true" + +builddependencies = [ + ('CMake', '3.7.2') +] + +dependencies = [ + ('Qt', '4.8.7') +] + +moduleclass = 'devel' -- GitLab From f4c13b9569fe8b33ab8a8ebb5a38f51846cad3a5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:39:12 +0100 Subject: [PATCH 0651/1311] adding easyconfigs: QJson-0.9.0-intel-2016b.eb --- .../q/QJson/QJson-0.9.0-intel-2016b.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/q/QJson/QJson-0.9.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/q/QJson/QJson-0.9.0-intel-2016b.eb b/easybuild/easyconfigs/q/QJson/QJson-0.9.0-intel-2016b.eb new file mode 100644 index 0000000000..44efa4db59 --- /dev/null +++ b/easybuild/easyconfigs/q/QJson/QJson-0.9.0-intel-2016b.eb @@ -0,0 +1,28 @@ +easyblock = 'CMakeMake' + +name = 'QJson' +version = '0.9.0' + +homepage = 'http://qjson.sourceforge.net/' +description = "QJson is a Qt-based library that maps JSON data to QVariant objects and vice versa." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/flavio/qjson/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Qt', '4.8.7'), +] +builddependencies = [ + ('CMake', '3.7.1'), +] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libqjson.%s' % SHLIB_EXT], + 'dirs': ['include/qjson', 'lib/cmake', 'lib/pkgconfig'], +} + +moduleclass = 'tools' -- GitLab From 8c335a1b251205d9c90948cbdff9deca9386b26a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:39:36 +0100 Subject: [PATCH 0652/1311] adding easyconfigs: QScintilla2-2.10-intel-2016b-Python-2.7.12.eb --- ...intilla2-2.10-intel-2016b-Python-2.7.12.eb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..be392c7b0b --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,52 @@ +easyblock = 'ConfigureMake' + +name = 'QScintilla2' +version = '2.10' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.riverbankcomputing.com/software/qscintilla' +description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s/QScintilla-%(version)s/'] +sources = ['QScintilla_gpl-%(version)s.tar.gz'] + +patches = ['QScintilla2-%(version)s_fix-link-python-bindings.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyQt', '4.12', versionsuffix), +] + +start_dir = 'Qt4Qt5' + +skipsteps = ['configure'] + +prebuildopts = "sed -i 's@\$\$\[QT_INSTALL_LIBS\]@%(installdir)s/lib@g' qscintilla.pro && " +prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_HEADERS\]@%(installdir)s/include@g' qscintilla.pro && " +prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_TRANSLATIONS\]@%(installdir)s/trans@g' qscintilla.pro && " +prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_DATA\]@%(installdir)s/data@g' qscintilla.pro && " +prebuildopts += "sed -i 's@\$\$\[QT_HOST_DATA\]@%(installdir)s/data@g' qscintilla.pro && " +prebuildopts += "qmake qscintilla.pro && " + +buildopts = 'CXXFLAGS="$CXXFLAGS \$(DEFINES)"' + +python_bindings_install_cmd = "cd ../Python && mkdir -p %(installdir)s/share/sip/PyQt4 && " +python_bindings_install_cmd += "python configure.py --destdir %(installdir)s/lib/python%(pyshortver)s/site-packages/PyQt4 --qsci-sipdir %(installdir)s/share/sip/PyQt4 --qsci-incdir %(installdir)s/include --qsci-libdir %(installdir)s/lib --pyqt-sipdir $EBROOTPYQT/share/sip/PyQt4 --apidir %(installdir)s/qsci/api/python --no-stubs && " +python_bindings_install_cmd += "make && make install && cd %(installdir)s/lib/python%(pyshortver)s/site-packages/PyQt4 && " +python_bindings_install_cmd += "for x in $(ls $EBROOTPYQT/lib/python2.7/site-packages/PyQt4); do ln -s $EBROOTPYQT/lib/python2.7/site-packages/PyQt4/$x; done && " +python_bindings_install_cmd += "rm __init__.py* && touch __init__.py" +postinstallcmds = [python_bindings_install_cmd] + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libqscintilla2_qt4.so'], + 'dirs': ['include/Qsci', 'lib/python%(pyshortver)s/site-packages/PyQt4', 'qsci/api/python', 'share/sip/PyQt4', 'trans'], +} + +sanity_check_commands = ["python -c 'import PyQt4.Qsci'"] + +moduleclass = 'vis' -- GitLab From 8a542052a3ba44588900ab6efbc20a18a457e8a1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 14:42:02 +0100 Subject: [PATCH 0653/1311] adding easyconfigs: QGIS-2.14.12-intel-2016b-Python-2.7.12.eb --- .../QGIS-2.14.12-intel-2016b-Python-2.7.12.eb | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..abd1b36a0c --- /dev/null +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,53 @@ +easyblock = 'CMakeMake' + +name = 'QGIS' +version = '2.14.12' +versionsuffix = '-Python-2.7.12' + +homepage = 'http://www.qgis.org/' +description = "QGIS is a user friendly Open Source Geographic Information System (GIS)" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'gnu++11'} + +source_urls = ['http://qgis.org/downloads/'] +sources = [SOURCELOWER_TAR_BZ2] + +patches = ['QGIS-2.14.12.patch'] + +dependencies = [ + ('Qt', '4.8.7'), + ('PROJ', '4.9.3'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.13.0'), # stick to this version for compatibility with Python 2.7.12 + ('libspatialite', '4.3.0a'), + ('libspatialindex', '1.8.5'), + ('GDAL', '2.1.3', versionsuffix), + ('Qwt', '6.1.3'), + ('QwtPolar', '1.1.1'), + ('expat', '2.2.0'), + ('QCA', '2.1.3'), + ('PyQt', '4.12', versionsuffix), + # QScintilla2 must be listed after PyQt4 due to Python bindings 'overriding' those of PyQt4 + ('QScintilla2', '2.10', versionsuffix), + ('GSL', '2.3'), + ('QJson', '0.9.0'), +] +builddependencies = [ + ('CMake', '3.7.2'), + ('flex', '2.6.3'), + ('Bison', '3.0.4'), +] + +separate_build_dir = True + +configopts = '-DQJSON_DIR=$EBROOTQJSON/lib/cmake/qjson -DCMAKE_PREFIX_PATH=$EBROOTQT -DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA2/lib/libqscintilla2_qt4.so -DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA2/share/sip/PyQt4' + +buildopts = "VERBOSE=1 V=1" + +sanity_check_paths = { + 'files': ['bin/qgis'], + 'dirs': [], +} + +moduleclass = 'geo' -- GitLab From bb02a546f8c3ed7ac96345ed57cb7ccf8cdfc9d5 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Thu, 9 Mar 2017 14:52:18 +0100 Subject: [PATCH 0654/1311] style fixes --- .../disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb index 08032c986d..816f774c49 100644 --- a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb @@ -26,8 +26,10 @@ dependencies = [ # this application provides a python implementation and a C++ implementation # in the postinstallcmds we compile the C++ version -postinstallcmds = ['$CXX -I$EBROOTBAMTOOLS/include -I./ -L$EBROOTBAMTOOLS/lib -o disambiguate dismain.cpp -lz -lbamtools', - 'cp disambiguate %(installdir)s/bin/'] +postinstallcmds = [ + '$CXX -I$EBROOTBAMTOOLS/include -I./ -L$EBROOTBAMTOOLS/lib -o disambiguate dismain.cpp -lz -lbamtools', + 'cp disambiguate %(installdir)s/bin/' +] # workaround to avoid the import sanity check options = {'modulename': 'os'} -- GitLab From 7101d3a09bda45ed7591d2231f16a6e72148ec07 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 16:42:59 +0100 Subject: [PATCH 0655/1311] update QScintilla easyconfig to use QScintilla easyblock, add easyconfig for QScintilla 2.9.4 --- ...cintilla-2.10-intel-2016b-Python-2.7.12.eb | 21 ++++++++ ...ntilla-2.10_fix-link-python-bindings.patch | 14 +++++ ...intilla-2.9.4-intel-2016b-Python-2.7.12.eb | 21 ++++++++ ...tilla-2.9.4_fix-link-python-bindings.patch | 14 +++++ ...intilla2-2.10-intel-2016b-Python-2.7.12.eb | 52 ------------------- 5 files changed, 70 insertions(+), 52 deletions(-) create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.10_fix-link-python-bindings.patch create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4_fix-link-python-bindings.patch delete mode 100644 easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..a974a1c6ac --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,21 @@ +name = 'QScintilla' +version = '2.10' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.riverbankcomputing.com/software/qscintilla' +description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s%(version_major)s/QScintilla-%(version)s/'] +sources = ['QScintilla_gpl-%(version)s.tar.gz'] + +patches = ['QScintilla-%(version)s_fix-link-python-bindings.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyQt', '4.12', versionsuffix), +] + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10_fix-link-python-bindings.patch b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10_fix-link-python-bindings.patch new file mode 100644 index 0000000000..cca6cde624 --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10_fix-link-python-bindings.patch @@ -0,0 +1,14 @@ +add missing link to QScintilla library to correctly build Python bindings + +author: Kenneth Hoste (HPC-UGent) +--- QScintilla_gpl-2.10/Python/configure.py.orig 2017-03-08 14:29:36.344465661 +0100 ++++ QScintilla_gpl-2.10/Python/configure.py 2017-03-08 14:36:00.439001287 +0100 +@@ -1510,7 +1510,7 @@ + + libs = qmake_config.get('LIBS') + if libs: +- pro.write('LIBS += %s\n' % libs) ++ pro.write('LIBS += %s -lqscintilla2_qt4\n' % libs) + + if not opts.static: + pro.write(''' diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..e3f0cde600 --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,21 @@ +name = 'QScintilla' +version = '2.9.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.riverbankcomputing.com/software/qscintilla' +description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s%(version_major)s/QScintilla-%(version)s/'] +sources = ['QScintilla_gpl-%(version)s.tar.gz'] + +patches = ['QScintilla-%(version)s_fix-link-python-bindings.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyQt', '4.12', versionsuffix), +] + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4_fix-link-python-bindings.patch b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4_fix-link-python-bindings.patch new file mode 100644 index 0000000000..3abd6f5965 --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4_fix-link-python-bindings.patch @@ -0,0 +1,14 @@ +add missing link to QScintilla library to correctly build Python bindings + +author: Kenneth Hoste (HPC-UGent) +--- QScintilla_gpl-2.9.4/Python/configure.py.orig 2017-03-08 14:29:36.344465661 +0100 ++++ QScintilla_gpl-2.9.4/Python/configure.py 2017-03-08 14:36:00.439001287 +0100 +@@ -1510,7 +1510,7 @@ + + libs = qmake_config.get('LIBS') + if libs: +- pro.write('LIBS += %s\n' % libs) ++ pro.write('LIBS += %s -lqscintilla2\n' % libs) + + if not opts.static: + pro.write(''' diff --git a/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb deleted file mode 100644 index be392c7b0b..0000000000 --- a/easybuild/easyconfigs/q/QScintilla2/QScintilla2-2.10-intel-2016b-Python-2.7.12.eb +++ /dev/null @@ -1,52 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'QScintilla2' -version = '2.10' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://www.riverbankcomputing.com/software/qscintilla' -description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" - -toolchain = {'name': 'intel', 'version': '2016b'} -toolchainopts = {'pic': True, 'cstd': 'c++11'} - -source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s/QScintilla-%(version)s/'] -sources = ['QScintilla_gpl-%(version)s.tar.gz'] - -patches = ['QScintilla2-%(version)s_fix-link-python-bindings.patch'] - -dependencies = [ - ('Python', '2.7.12'), - ('PyQt', '4.12', versionsuffix), -] - -start_dir = 'Qt4Qt5' - -skipsteps = ['configure'] - -prebuildopts = "sed -i 's@\$\$\[QT_INSTALL_LIBS\]@%(installdir)s/lib@g' qscintilla.pro && " -prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_HEADERS\]@%(installdir)s/include@g' qscintilla.pro && " -prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_TRANSLATIONS\]@%(installdir)s/trans@g' qscintilla.pro && " -prebuildopts += "sed -i 's@\$\$\[QT_INSTALL_DATA\]@%(installdir)s/data@g' qscintilla.pro && " -prebuildopts += "sed -i 's@\$\$\[QT_HOST_DATA\]@%(installdir)s/data@g' qscintilla.pro && " -prebuildopts += "qmake qscintilla.pro && " - -buildopts = 'CXXFLAGS="$CXXFLAGS \$(DEFINES)"' - -python_bindings_install_cmd = "cd ../Python && mkdir -p %(installdir)s/share/sip/PyQt4 && " -python_bindings_install_cmd += "python configure.py --destdir %(installdir)s/lib/python%(pyshortver)s/site-packages/PyQt4 --qsci-sipdir %(installdir)s/share/sip/PyQt4 --qsci-incdir %(installdir)s/include --qsci-libdir %(installdir)s/lib --pyqt-sipdir $EBROOTPYQT/share/sip/PyQt4 --apidir %(installdir)s/qsci/api/python --no-stubs && " -python_bindings_install_cmd += "make && make install && cd %(installdir)s/lib/python%(pyshortver)s/site-packages/PyQt4 && " -python_bindings_install_cmd += "for x in $(ls $EBROOTPYQT/lib/python2.7/site-packages/PyQt4); do ln -s $EBROOTPYQT/lib/python2.7/site-packages/PyQt4/$x; done && " -python_bindings_install_cmd += "rm __init__.py* && touch __init__.py" -postinstallcmds = [python_bindings_install_cmd] - -modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} - -sanity_check_paths = { - 'files': ['lib/libqscintilla2_qt4.so'], - 'dirs': ['include/Qsci', 'lib/python%(pyshortver)s/site-packages/PyQt4', 'qsci/api/python', 'share/sip/PyQt4', 'trans'], -} - -sanity_check_commands = ["python -c 'import PyQt4.Qsci'"] - -moduleclass = 'vis' -- GitLab From 058dd65ade21434c77d9b72656ae5863f2eaf3c7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 16:53:26 +0100 Subject: [PATCH 0656/1311] QScintilla2 -> QScintilla, clean up configopts, enhance sanity check for QGIS --- .../QGIS-2.14.12-intel-2016b-Python-2.7.12.eb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb index abd1b36a0c..d97a872052 100644 --- a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb @@ -28,8 +28,8 @@ dependencies = [ ('expat', '2.2.0'), ('QCA', '2.1.3'), ('PyQt', '4.12', versionsuffix), - # QScintilla2 must be listed after PyQt4 due to Python bindings 'overriding' those of PyQt4 - ('QScintilla2', '2.10', versionsuffix), + # QScintilla must be listed after PyQt4 due to Python bindings 'overriding' those of PyQt4 + ('QScintilla', '2.10', versionsuffix), ('GSL', '2.3'), ('QJson', '0.9.0'), ] @@ -41,13 +41,16 @@ builddependencies = [ separate_build_dir = True -configopts = '-DQJSON_DIR=$EBROOTQJSON/lib/cmake/qjson -DCMAKE_PREFIX_PATH=$EBROOTQT -DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA2/lib/libqscintilla2_qt4.so -DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA2/share/sip/PyQt4' - -buildopts = "VERBOSE=1 V=1" +# specify locations that CMake can't figure out correctly +configopts = "-DCMAKE_PREFIX_PATH=$EBROOTQT -DQJSON_DIR=$EBROOTQJSON/lib/cmake/qjson " +configopts += "-DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA2/lib/libqscintilla2_qt4.so " +configopts += "-DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA2/share/sip/PyQt4" sanity_check_paths = { - 'files': ['bin/qgis'], - 'dirs': [], + 'files': ['bin/qbrowser', 'bin/qgis', 'bin/qgis_bench', 'lib/libqgis_analysis.%s' % SHLIB_EXT, + 'lib/libqgis_app.%s' % SHLIB_EXT, 'lib/libqgis_core.%s' % SHLIB_EXT, 'lib/libqgis_gui.%s' % SHLIB_EXT, + 'lib/libqgis_networkanalysis.%s' % SHLIB_EXT, 'lib/libqgispython.%s' % SHLIB_EXT], + 'dirs': ['include/qgis', 'man', 'share/qgis'], } moduleclass = 'geo' -- GitLab From 358985ef2ee5d86074951462c0d8a6c3a3533eb9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 17:00:42 +0100 Subject: [PATCH 0657/1311] add patch for QGIS 2.14.12 --- .../QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb | 2 +- .../q/QGIS/QGIS-2.14.12_fix-SIP-macro.patch | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/q/QGIS/QGIS-2.14.12_fix-SIP-macro.patch diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb index d97a872052..9b31165cdc 100644 --- a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb @@ -13,7 +13,7 @@ toolchainopts = {'pic': True, 'cstd': 'gnu++11'} source_urls = ['http://qgis.org/downloads/'] sources = [SOURCELOWER_TAR_BZ2] -patches = ['QGIS-2.14.12.patch'] +patches = ['QGIS-%(version)s_fix-SIP-macro.patch'] dependencies = [ ('Qt', '4.8.7'), diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12_fix-SIP-macro.patch b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12_fix-SIP-macro.patch new file mode 100644 index 0000000000..2eb3299a7d --- /dev/null +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12_fix-SIP-macro.patch @@ -0,0 +1,14 @@ +include location of PyQt .sip files in SIPCMD macro + +author: Kenneth Hoste (HPC-UGent) +--- qgis-2.14.12/cmake/SIPMacros.cmake.orig 2017-03-09 12:57:14.037320233 +0100 ++++ qgis-2.14.12/cmake/SIPMacros.cmake 2017-03-09 13:05:55.739057294 +0100 +@@ -102,7 +102,7 @@ + ENDIF(PEDANTIC) + + +- SET(SIPCMD ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip}) ++ SET(SIPCMD ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} -I$ENV{EBROOTPYQT}/share/sip/PyQt4 ${_abs_module_sip}) + SET(SUPPRESS_SIP_WARNINGS FALSE CACHE BOOL "Hide SIP warnings") + MARK_AS_ADVANCED(SUPPRESS_SIP_WARNINGS) + IF(SUPPRESS_SIP_WARNINGS) -- GitLab From 616fe782803b18052ff11d6a1fc6eba545cb57e4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 17:37:13 +0100 Subject: [PATCH 0658/1311] fix $EBROOT for QScintilla --- .../q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb index 9b31165cdc..43245eb873 100644 --- a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb @@ -43,8 +43,8 @@ separate_build_dir = True # specify locations that CMake can't figure out correctly configopts = "-DCMAKE_PREFIX_PATH=$EBROOTQT -DQJSON_DIR=$EBROOTQJSON/lib/cmake/qjson " -configopts += "-DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA2/lib/libqscintilla2_qt4.so " -configopts += "-DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA2/share/sip/PyQt4" +configopts += "-DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA/lib/libqscintilla2_qt4.so " +configopts += "-DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA/share/sip/PyQt4" sanity_check_paths = { 'files': ['bin/qbrowser', 'bin/qgis', 'bin/qgis_bench', 'lib/libqgis_analysis.%s' % SHLIB_EXT, -- GitLab From c326a3be445d0ad2f149747707daf4addd88ff7e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 19:41:37 +0100 Subject: [PATCH 0659/1311] adding easyconfigs: libspatialite-4.3.0a-foss-2016b.eb --- .../libspatialite-4.3.0a-foss-2016b.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-foss-2016b.eb b/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-foss-2016b.eb new file mode 100644 index 0000000000..c87d185cc1 --- /dev/null +++ b/easybuild/easyconfigs/l/libspatialite/libspatialite-4.3.0a-foss-2016b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libspatialite' +version = '4.3.0a' + +homepage = "https://www.gaia-gis.it/fossil/libspatialite/home" +description = """SpatiaLite is an open source library intended to extend the SQLite core to support + fully fledged Spatial SQL capabilities.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.gaia-gis.it/gaia-sins/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('FreeXL', '1.0.2'), + ('GEOS', '3.6.1', '-Python-2.7.12'), + ('SQLite', '3.13.0'), + ('PROJ', '4.9.3'), +] + +builddependencies = [('CMake', '3.7.1')] + +configopts = '--disable-geosadvanced' + +sanity_check_paths = { + 'files': ['include/spatialite.h', 'lib/libspatialite.a', 'lib/libspatialite.%s' % SHLIB_EXT], + 'dirs': ['include/spatialite'], +} + +moduleclass = 'lib' -- GitLab From de1032dfcb6d247eb98e23a8f63146c82dc6f57d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 19:56:54 +0100 Subject: [PATCH 0660/1311] adding easyconfigs: PyQt-4.12-foss-2016b-Python-2.7.12.eb, SIP-4.19-foss-2016b-Python-2.7.12.eb --- .../PyQt-4.12-foss-2016b-Python-2.7.12.eb | 37 +++++++++++++++++++ .../SIP/SIP-4.19-foss-2016b-Python-2.7.12.eb | 30 +++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyQt/PyQt-4.12-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/SIP/SIP-4.19-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PyQt/PyQt-4.12-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..f8e50daad2 --- /dev/null +++ b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,37 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'PyQt' +version = '4.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.co.uk/software/pyqt' +description = """PyQt is a set of Python v2 and v3 bindings for Digia's Qt application framework.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-%(version)s'] +sources = ['PyQt4_gpl_x11-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.12'), + ('SIP', '4.19', versionsuffix), + ('Qt', '4.8.7'), +] + +configopts = "configure-ng.py --confirm-license" +configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " +configopts += " --sipdir=%(installdir)s/share/sip/PyQt%(version_major)s" + +options = {'modulename': '%(name)s%(version_major)s'} + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s%(version_major)s'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/SIP/SIP-4.19-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SIP/SIP-4.19-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..be020214d2 --- /dev/null +++ b/easybuild/easyconfigs/s/SIP/SIP-4.19-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'SIP' +version = '4.19' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.com/software/sip/' +description = """SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://sourceforge.net/projects/pyqt/files/sip/sip-%(version)s'] + +dependencies = [('Python', '2.7.12')] + +configopts = "configure.py --bindir %(installdir)s/bin --incdir %(installdir)s/include " +configopts += "--destdir %(installdir)s/lib/python%(pyshortver)s/site-packages" + +sanity_check_paths = { + 'files': ['bin/sip', 'include/sip.h'] + + ['lib/python%%(pyshortver)s/site-packages/%s' % x + for x in ['sip.%s' % SHLIB_EXT, 'sipconfig.py', 'sipdistutils.py']], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From fccbb78c76415fc8bafa07811b51c091e3bcf9a4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 19:57:53 +0100 Subject: [PATCH 0661/1311] also enable installation of SIP files in PyQt 4.12 easyconfig used intel/2016b --- .../easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb index 9ea42178d7..8afd4b1225 100644 --- a/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2016b-Python-2.7.12.eb @@ -23,7 +23,7 @@ dependencies = [ configopts = "configure-ng.py --confirm-license" configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " -configopts += " --no-sip-files" +configopts += " --sipdir=%(installdir)s/share/sip/PyQt%(version_major)s" options = {'modulename': '%(name)s%(version_major)s'} -- GitLab From f1dba5919c4d1a1081412e33b37fa8d863b53904 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 20:00:15 +0100 Subject: [PATCH 0662/1311] include binutils as build dep in flex/help2man/M4 easyconfigs using GCCcore/5.4.0 --- easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb | 3 ++- .../easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb | 5 +++++ easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb index 5044907def..fea2687908 100644 --- a/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-5.4.0.eb @@ -15,9 +15,10 @@ checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] dependencies = [('M4', '1.4.18')] builddependencies = [ - ('binutils', '2.26'), ('Bison', '3.0.4'), ('help2man', '1.47.4'), + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.26', '', True), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb index 7b53bd8797..0d730043fb 100644 --- a/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-5.4.0.eb @@ -11,6 +11,11 @@ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_XZ] +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.26', '', True), +] + sanity_check_paths = { 'files': ['bin/help2man'], 'dirs': [], diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb index 345402c605..c1c1439bf3 100644 --- a/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-5.4.0.eb @@ -13,6 +13,9 @@ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} sources = [SOURCELOWER_TAR_GZ] source_urls = [GNU_SOURCE] +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.26', '', True)] + # '-fgnu89-inline' is required to avoid linking errors with older glibc's, # see https://github.com/hpcugent/easybuild-easyconfigs/issues/529 configopts = "--enable-cxx CPPFLAGS=-fgnu89-inline" -- GitLab From dfb169134cb268f9ae36f937ba2e650e605ef173 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 20:05:28 +0100 Subject: [PATCH 0663/1311] adding easyconfigs: QwtPolar-1.1.1-foss-2016b.eb, Qwt-6.1.3-foss-2016b.eb --- .../easyconfigs/q/Qwt/Qwt-6.1.3-foss-2016b.eb | 29 +++++++++++++++++++ .../q/QwtPolar/QwtPolar-1.1.1-foss-2016b.eb | 29 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-foss-2016b.eb create mode 100644 easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-foss-2016b.eb b/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-foss-2016b.eb new file mode 100644 index 0000000000..f2b00bf192 --- /dev/null +++ b/easybuild/easyconfigs/q/Qwt/Qwt-6.1.3-foss-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'Qwt' +version = '6.1.3' + +homepage = 'http://qwt.sourceforge.net/' +description = """The Qwt library contains GUI Components and utility classes which are primarily useful for programs + with a technical background.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('Qt', '4.8.7'), +] + +skipsteps = ['configure'] + +prebuildopts = "sed -i 's@QWT_INSTALL_PREFIX[ ]*=.*@QWT_INSTALL_PREFIX = %(installdir)s@g' qwtconfig.pri && " +prebuildopts += "qmake qwt.pro && " + +sanity_check_paths = { + 'files': ['lib/libqwt.%s' % SHLIB_EXT], + 'dirs': ['doc', 'features', 'include', 'plugins'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-foss-2016b.eb b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-foss-2016b.eb new file mode 100644 index 0000000000..bf12b1ad5e --- /dev/null +++ b/easybuild/easyconfigs/q/QwtPolar/QwtPolar-1.1.1-foss-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'QwtPolar' +version = '1.1.1' + +homepage = 'http://qwtpolar.sourceforge.net/' +description = "The QwtPolar library contains classes for displaying values on a polar coordinate system." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('Qwt', '6.1.3'), +] + +skipsteps = ['configure'] + +prebuildopts = "sed -i 's@INSTALL_PREFIX[ ]*=.*@INSTALL_PREFIX = %(installdir)s@g' qwtpolarconfig.pri && " +prebuildopts += "sed -i 's/QwtPolarExamples//g' qwtpolarconfig.pri && " +prebuildopts += "qmake qwtpolar.pro && " + +sanity_check_paths = { + 'files': ['lib/libqwtpolar.%s' % SHLIB_EXT], + 'dirs': ['doc', 'features', 'include', 'plugins'], +} + +moduleclass = 'lib' -- GitLab From cf4446f582499934c66770414128fd17c3b1f804 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 20:17:17 +0100 Subject: [PATCH 0664/1311] adding easyconfigs: QJson-0.9.0-foss-2016b.eb --- .../q/QJson/QJson-0.9.0-foss-2016b.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/q/QJson/QJson-0.9.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/q/QJson/QJson-0.9.0-foss-2016b.eb b/easybuild/easyconfigs/q/QJson/QJson-0.9.0-foss-2016b.eb new file mode 100644 index 0000000000..32b2329111 --- /dev/null +++ b/easybuild/easyconfigs/q/QJson/QJson-0.9.0-foss-2016b.eb @@ -0,0 +1,28 @@ +easyblock = 'CMakeMake' + +name = 'QJson' +version = '0.9.0' + +homepage = 'http://qjson.sourceforge.net/' +description = "QJson is a Qt-based library that maps JSON data to QVariant objects and vice versa." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/flavio/qjson/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('Qt', '4.8.7'), +] +builddependencies = [ + ('CMake', '3.7.1'), +] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libqjson.%s' % SHLIB_EXT], + 'dirs': ['include/qjson', 'lib/cmake', 'lib/pkgconfig'], +} + +moduleclass = 'tools' -- GitLab From b280b34714182becf501f1b79cb4f7c83d335a63 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 20:17:47 +0100 Subject: [PATCH 0665/1311] adding easyconfigs: QCA-2.1.3-foss-2016b.eb --- .../easyconfigs/q/QCA/QCA-2.1.3-foss-2016b.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/q/QCA/QCA-2.1.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/q/QCA/QCA-2.1.3-foss-2016b.eb b/easybuild/easyconfigs/q/QCA/QCA-2.1.3-foss-2016b.eb new file mode 100644 index 0000000000..4a94646890 --- /dev/null +++ b/easybuild/easyconfigs/q/QCA/QCA-2.1.3-foss-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'CMakeMake' + +name = 'QCA' +version = '2.1.3' + +homepage = 'http://delta.affinix.com/qca/' +description = """Taking a hint from the similarly-named Java Cryptography Architecture, + QCA aims to provide a straightforward and cross-platform crypto API, using Qt datatypes + and conventions. QCA separates the API from the implementation, using plugins known as + Providers. The advantage of this model is to allow applications to avoid linking to or + explicitly depending on any particular cryptographic library. This allows one to easily + change or upgrade crypto implementations without even needing to recompile the + application! QCA should work everywhere Qt does, including Windows/Unix/MacOSX.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://download.kde.org/stable/qca/%(version)s/src/'] +sources = ['%(namelower)s-%(version)s.tar.xz'] + +configopts = "-DQT4_BUILD=true" + +builddependencies = [ + ('CMake', '3.7.2') +] + +dependencies = [ + ('Qt', '4.8.7') +] + +moduleclass = 'devel' -- GitLab From c21818052a0b1ca09202778fa7b6cb5361cb15aa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 22:13:51 +0100 Subject: [PATCH 0666/1311] adding easyconfigs: QScintilla-2.10-foss-2016b-Python-2.7.12.eb, QScintilla-2.9.4-foss-2016b-Python-2.7.12.eb --- ...Scintilla-2.10-foss-2016b-Python-2.7.12.eb | 21 +++++++++++++++++++ ...cintilla-2.9.4-foss-2016b-Python-2.7.12.eb | 21 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..13dd45e489 --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.10-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,21 @@ +name = 'QScintilla' +version = '2.10' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.riverbankcomputing.com/software/qscintilla' +description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s%(version_major)s/QScintilla-%(version)s/'] +sources = ['QScintilla_gpl-%(version)s.tar.gz'] + +patches = ['QScintilla-%(version)s_fix-link-python-bindings.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyQt', '4.12', versionsuffix), +] + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..f6edee2ee2 --- /dev/null +++ b/easybuild/easyconfigs/q/QScintilla/QScintilla-2.9.4-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,21 @@ +name = 'QScintilla' +version = '2.9.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.riverbankcomputing.com/software/qscintilla' +description = "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++ editor control" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = ['https://sourceforge.net/projects/pyqt/files/%(name)s%(version_major)s/QScintilla-%(version)s/'] +sources = ['QScintilla_gpl-%(version)s.tar.gz'] + +patches = ['QScintilla-%(version)s_fix-link-python-bindings.patch'] + +dependencies = [ + ('Python', '2.7.12'), + ('PyQt', '4.12', versionsuffix), +] + +moduleclass = 'vis' -- GitLab From 6b206c39bf1a05d066bf894be6ff0838dbe84ee8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 22:19:58 +0100 Subject: [PATCH 0667/1311] {geo}[foss/2016b] QGIS v2.18.4 --- .../QGIS-2.18.4-foss-2016b-Python-2.7.12.eb | 56 +++++++++++++++++++ .../q/QGIS/QGIS-2.18.4_fix-SIP-macro.patch | 14 +++++ 2 files changed, 70 insertions(+) create mode 100644 easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/q/QGIS/QGIS-2.18.4_fix-SIP-macro.patch diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..f6d58e7bf7 --- /dev/null +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,56 @@ +easyblock = 'CMakeMake' + +name = 'QGIS' +version = '2.18.4' +versionsuffix = '-Python-2.7.12' + +homepage = 'http://www.qgis.org/' +description = "QGIS is a user friendly Open Source Geographic Information System (GIS)" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'gnu++11'} + +source_urls = ['http://qgis.org/downloads/'] +sources = [SOURCELOWER_TAR_BZ2] + +patches = ['QGIS-%(version)s_fix-SIP-macro.patch'] + +dependencies = [ + ('Qt', '4.8.7'), + ('PROJ', '4.9.3'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.13.0'), # stick to this version for compatibility with Python 2.7.12 + ('libspatialite', '4.3.0a'), + ('libspatialindex', '1.8.5'), + ('GDAL', '2.1.3', versionsuffix), + ('Qwt', '6.1.3'), + ('QwtPolar', '1.1.1'), + ('expat', '2.2.0'), + ('QCA', '2.1.3'), + ('PyQt', '4.12', versionsuffix), + # QScintilla must be listed after PyQt4 due to Python bindings 'overriding' those of PyQt4 + ('QScintilla', '2.10', versionsuffix), + ('GSL', '2.3'), + ('QJson', '0.9.0'), +] +builddependencies = [ + ('CMake', '3.7.2'), + ('flex', '2.6.3'), + ('Bison', '3.0.4'), +] + +separate_build_dir = True + +# specify locations that CMake can't figure out correctly +configopts = "-DCMAKE_PREFIX_PATH=$EBROOTQT -DQJSON_DIR=$EBROOTQJSON/lib/cmake/qjson " +configopts += "-DQSCINTILLA_LIBRARY=$EBROOTQSCINTILLA/lib/libqscintilla2_qt4.so " +configopts += "-DPYQT4_SIP_DIR=$EBROOTPYQT/share/sip/PyQt4 -DQSCI_SIP_DIR=$EBROOTQSCINTILLA/share/sip/PyQt4" + +sanity_check_paths = { + 'files': ['bin/qbrowser', 'bin/qgis', 'bin/qgis_bench', 'lib/libqgis_analysis.%s' % SHLIB_EXT, + 'lib/libqgis_app.%s' % SHLIB_EXT, 'lib/libqgis_core.%s' % SHLIB_EXT, 'lib/libqgis_gui.%s' % SHLIB_EXT, + 'lib/libqgis_networkanalysis.%s' % SHLIB_EXT, 'lib/libqgispython.%s' % SHLIB_EXT], + 'dirs': ['include/qgis', 'man', 'share/qgis'], +} + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4_fix-SIP-macro.patch b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4_fix-SIP-macro.patch new file mode 100644 index 0000000000..5d04066fb1 --- /dev/null +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4_fix-SIP-macro.patch @@ -0,0 +1,14 @@ +include location of PyQt .sip files in SIPCMD macro + +author: Kenneth Hoste (HPC-UGent) +--- qgis-2.18.4/cmake/SIPMacros.cmake.orig 2017-03-08 17:44:20.698576501 +0100 ++++ qgis-2.18.4/cmake/SIPMacros.cmake 2017-03-08 17:46:39.110172584 +0100 +@@ -96,7 +96,7 @@ + ADD_DEFINITIONS( /bigobj ) + ENDIF(MSVC) + +- SET(SIPCMD ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip}) ++ SET(SIPCMD ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} -I$ENV{EBROOTPYQT}/share/sip/PyQt4 ${_abs_module_sip}) + SET(SUPPRESS_SIP_WARNINGS FALSE CACHE BOOL "Hide SIP warnings") + MARK_AS_ADVANCED(SUPPRESS_SIP_WARNINGS) + IF(SUPPRESS_SIP_WARNINGS) -- GitLab From ad89278bbc144ca83fef7955ceb5580c69721100 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Mar 2017 22:37:17 +0100 Subject: [PATCH 0668/1311] also check with Tcl module syntax, Lua is the default in EasyBuild v3.x --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 13ca5c0612..07cebed738 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,11 +4,11 @@ env: matrix: - ENV_MOD_VERSION=3.2.10 EASYBUILD_MODULES_TOOL=EnvironmentModulesC EASYBUILD_MODULE_SYNTAX=Tcl - LMOD_VERSION=5.8 - - LMOD_VERSION=5.8 EASYBUILD_MODULE_SYNTAX=Lua + - LMOD_VERSION=5.8 EASYBUILD_MODULE_SYNTAX=Tcl - LMOD_VERSION=6.6.3 - - LMOD_VERSION=6.6.3 EASYBUILD_MODULE_SYNTAX=Lua + - LMOD_VERSION=6.6.3 EASYBUILD_MODULE_SYNTAX=Tcl - LMOD_VERSION=7.0 - - LMOD_VERSION=7.0 EASYBUILD_MODULE_SYNTAX=Lua + - LMOD_VERSION=7.0 EASYBUILD_MODULE_SYNTAX=Tcl matrix: # mark build as finished as soon as job has failed fast_finish: true -- GitLab From 3d6abb181ca977ede9e7f108aefa5306de1729c1 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 10 Mar 2017 13:09:41 +1300 Subject: [PATCH 0669/1311] Dependencies for Perl --- .../easyconfigs/d/DB/DB-6.0.30-foss-2015a.eb | 18 ++++++++++ .../s/SQLite/SQLite-3.8.9-foss-2015a.eb | 36 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/d/DB/DB-6.0.30-foss-2015a.eb create mode 100644 easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb diff --git a/easybuild/easyconfigs/d/DB/DB-6.0.30-foss-2015a.eb b/easybuild/easyconfigs/d/DB/DB-6.0.30-foss-2015a.eb new file mode 100644 index 0000000000..32a7842e44 --- /dev/null +++ b/easybuild/easyconfigs/d/DB/DB-6.0.30-foss-2015a.eb @@ -0,0 +1,18 @@ +name = 'DB' +version = '6.0.30' + +homepage = 'http://www.oracle.com/technetwork/products/berkeleydb' +description = """Berkeley DB enables the development of custom data management solutions, + without the overhead traditionally associated with such custom projects.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +# download via http://www.oracle.com/technetwork/products/berkeleydb/downloads/, requires registration +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ["include/db.h"], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb new file mode 100644 index 0000000000..45f98b9cdb --- /dev/null +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 University of Luxembourg/Luxembourg Centre for Systems Biomedicine +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +name = 'SQLite' +version = '3.8.9' + +easyblock = 'ConfigureMake' + +homepage = 'http://www.hwaci.com/sw/sqlite/' +description = "SQLite: SQL Database Engine in a C Library" + +# eg. http://www.hwaci.com/sw/sqlite/2013/sqlite-autoconf-3080100.tar.gz +source_urls = ['http://www.hwaci.com/sw/sqlite/2013'] +sources = ['sqlite-autoconf-%s0%s0%s00.tar.gz' % tuple(version.split('.'))] # very weird way to calculate your filename + +toolchain = {'name': 'foss', 'version': '2015a'} + +dependencies = [ + ('libreadline', '6.2'), +] + +sanity_check_paths = { + 'files': ['bin/sqlite3'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 54f70e4c1d48ee5844f94817091e0cd3b343bc9c Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 10 Mar 2017 13:13:00 +1300 Subject: [PATCH 0670/1311] Perl and two dependencies for the gimkl-2017a toolchain; includes version updates of Perl extensions --- .../easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb | 18 + .../p/Perl/Perl-5.24.1-gimkl-2017a.eb | 1194 +++++++++++++++++ .../s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb | 21 + 3 files changed, 1233 insertions(+) create mode 100644 easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb b/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb new file mode 100644 index 0000000000..f6a2ef8db6 --- /dev/null +++ b/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb @@ -0,0 +1,18 @@ +name = 'DB' +version = '6.2.23' + +homepage = 'http://www.oracle.com/technetwork/products/berkeleydb' +description = """Berkeley DB enables the development of custom data management solutions, + without the overhead traditionally associated with such custom projects.""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} + +# download via http://www.oracle.com/technetwork/products/berkeleydb/downloads/, requires registration +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ["include/db.h"], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb new file mode 100644 index 0000000000..d4719d425a --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb @@ -0,0 +1,1194 @@ +name = 'Perl' +version = '5.24.1' +use_perl_threads = False + +homepage = 'http://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +dependencies = [ + ('DB', '6.2.23'), # for DB_File module + ('SQLite', '3.16.2'), # for DBD::SQLite module + ('expat', '2.2.0'), # for XML::Parser I think + ('libxml2', '2.9.4'), # for XML::LibXML +] +# Also zlib / readline via the other dependencies + +builddependencies = [('SAMtools', '0.1.19')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. + +source_urls = ['http://www.cpan.org/src/5.0'] +sources = [SOURCELOWER_TAR_GZ] + +# We must compile in serial so that Convert::Binary::C is installed +# in a sane manner. +maxparallel = 1 + +#runtest = 'test' # Several modules have extra dependencies for testing + +# Extension versions +acme_damn_version = '0.08' +algorithm_diff_version = '1.1903' +algorithm_munkres_version = '0.08' +aliased_version = '0.34' +anyevent_version = '7.13' +appconfig_version = '1.71' +archive_extract_version = '0.80' +archive_tar_version = '2.24' +archive_zip_version = '1.59' +array_compare_version = '3.0.0' +authen_sasl_version = '2.16' +bioperl_version = '1.007001' +bio_phylo_version = '0.58' +bio_samtools_version = '1.43' +bit_vector_version = '7.4' +boolean_version = '0.46' +bundle_bioperl_version = '2.1.9' +b_lintsubs_version = '0.06' +b_lint_version = '1.20' +capture_tiny_version = '0.46' +carp_version = '1.38' +cgi_version = '4.35' +class_accessor_version = '0.34' +class_data_inheritable_version = '0.08' +class_dbi_version = '3.0.17' +class_inspector_version = '1.31' +class_isa_version = '0.36' +class_load_version = '0.23' +class_load_xs_version = '0.09' +class_singleton_version = '1.5' +class_trigger_version = '0.14' +clone_version = '0.38' +config_general_version = '2.63' +convert_binary_c_version = '0.78' +cpanplus_version = '0.9164' +cwd_guard_version = '0.05' +data_dumper_version = '2.161' +data_optlist_version = '0.110' +data_section_simple_version = '0.07' +data_stag_version = '0.14' +data_types_version = '0.09' +data_uuid_version = '1.221' +datetime_locale_version = '1.14' +datetime_timezone_version = '2.10' +datetime_tiny_version = '1.06' +datetime_version = '1.42' +date_handler_version = '1.2' +dbd_anydata_version = '0.110' +dbd_sqlite_version = '1.54' +dbix_contextualfetch_version = '1.03' +dbix_simple_version = '1.35' +dbi_version = '1.636' +db_file_version = '1.840' +devel_checkcompiler_version = '0.07' +devel_globaldestruction_version = '0.14' +devel_stacktrace_version = '2.02' +digest_hmac_version = '1.03' +digest_sha1_version = '2.13' +dist_checkconflicts_version = '0.11' +email_date_format_version = '1.005' +encode_locale_version = '1.05' +error_version = '0.17024' +eval_closure_version = '0.14' +exception_class_version = '1.42' +expect_pm_version = '1.21' +exporter_declare_version = '0.114' +exporter_tiny_version = '0.044' +extutils_config_version = '0.008' +extutils_helpers_version = '0.026' +extutils_installpaths_version = '0.011' +extutils_makemaker_version = '7.24' +fennec_lite_version = '0.004' +file_checktree_version = '4.42' +file_copy_recursive_version = '0.38' +file_find_rule_perl_version = '1.15' +file_find_rule_version = '0.34' +file_listing_version = '6.04' +file_path_version = '2.12' +file_sharedir_install_version = '0.11' +file_slurp_tiny_version = '0.004' +file_slurp_version = '9999.19' +file_temp_version = '0.2304' +file_which_version = '1.21' +font_ttf_version = '1.06' +forks_version = '0.36' +freezethaw_version = '0.5001' +getopt_long_version = '2.49.1' +git_version = '0.41' +go_db_perl_version = '0.04' +go_perl_version = '0.15' +graph_version = '0.9704' +hash_merge_version = '0.200' +html_form_version = '6.03' +html_parser_version = '3.72' +html_tableextract_version = '2.13' +html_tagset_version = '3.20' +http_cookies_version = '6.01' +http_daemon_version = '6.01' +http_date_version = '6.02' +http_message_version = '6.11' +http_negotiate_version = '6.01' +ima_dbi_version = '0.35' +import_into_version = '1.002005' +inline_c_version = '0.76' +inline_version = '0.80' +io_all_version = '0.86' +io_html_version = '1.001' +io_prompt_version = '0.997004' +io_socket_ssl_version = '2.047' +io_stringy_version = '2.111' +io_string_version = '1.08' +io_tty_version = '1.12' +ipc_run3_version = '0.048' +ipc_run_version = '0.94' +json_version = '2.90' +libxml_perl_version = '0.08' +list_allutils_version = '0.14' +list_moreutils_version = '0.416' +local_lib_version = '2.000019' +logger_simple_version = '2.0' +log_message_simple_version = '0.10' +log_message_version = '0.08' +lwp_mediatypes_version = '6.02' +lwp_version = '6.23' +mailtools_version = '2.18' +math_bezier_version = '0.01' +math_cdf_version = '0.1' +math_round_version = '0.07' +math_vecstat_version = '0.08' +meta_builder_version = '0.003' +mime_lite_version = '3.030' +mime_types_version = '2.13' +mock_quick_version = '1.111' +module_build_tiny_version = '0.039' +module_build_version = '0.4220' +module_build_xsutil_version = '0.16' +module_implementation_version = '0.09' +module_load_conditional_version = '0.68' +module_pluggable_version = '5.2' +module_runtime_version = '0.014' +moose_version = '2.2004' +moo_version = '2.003001' +mouse_version = '2.4.9' +mro_compat_version = '0.12' +net_http_version = '6.13' +net_smtp_ssl_version = '1.04' +number_compare_version = '0.03' +number_compare_version = '0.03' +object_accessor_version = '0.48' +object_insideout_version = '4.04' +package_deprecationmanager_version = '0.17' +package_stash_version = '0.37' +package_stash_xs_version = '0.28' +parallel_forkmanager_version = '1.19' +params_util_version = '1.07' +params_validate_version = '1.26' +parse_recdescent_version = '1.967013' +pathtools_version = '3.62' +perl_unsafe_signals_version = '0.03' +pod_latex_version = '0.61' +pod_plainer_version = '1.04' +pod_pom_version = '2.01' +readonly_version = '2.05' +regexp_common_version = '2016060801' +scalar_list_utils_version = '1.47' +scalar_util_numeric_version = '0.40' +set_array_version = '0.30' +set_intervaltree_version = '0.10' +set_intspan_version = '1.19' +set_scalar_version = '1.29' +shell_version = '0.73' +spreadsheet_parseexcel_version = '0.65' +sql_statement_version = '1.410' +statistics_descriptive_version = '3.0612' +storable_version = '2.51' +strictures_version = '2.000003' +sub_exporter_progressive_version = '0.001013' +sub_exporter_version = '0.987' +sub_install_version = '0.928' +sub_name_version = '0.21' +sub_uplevel_version = '0.2600' +svg_version ='2.64' +switch_version = '2.17' +sys_sigaction_version = '0.23' +template_toolkit_version = '2.26' +term_readkey_version = '2.37' +term_ui_version = '0.46' +test_deep_version = '1.126' +test_differences_version = '0.64' +test_exception_lessclever_version = '0.009' +test_exception_version = '0.43' +test_fatal_version = '0.014' +test_harness_version = '3.36' +test_harness_version = '3.36' +test_leaktrace_version = '0.15' +test_most_version = '0.35' +test_nowarnings_version = '1.04' +test_output_version = '1.03' +test_requires_version = '0.10' +test_simple_version = '1.302078' +test_version_version = '2.05' +test_warnings_version = '0.026' +test_warn_version = '0.32' +text_diff_version = '1.44' +text_glob_version = '0.11' +text_iconv_version = '1.7' +text_soundex_version = '3.05' +tie_ixhash_version = '1.23' +timedate_version = '2.30' +time_piece_mysql_version = '0.06' +time_piece_version = '1.31' +tree_dag_node_version = '1.29' +try_tiny_version = '0.28' +universal_moniker_version = '0.08' +uri_version = '1.71' +version_version = '0.9917' +want_version = '0.29' +www_robotrules_version = '6.02' +xml_dom_version = '1.46' +xml_dom_xpath_version = '0.14' +xml_libxml_version = '2.0128' +xml_namespacesupport_version = '1.11' +xml_parser_version = '2.44' +xml_sax_base_version = '1.08' +xml_sax_version = '0.99' +xml_sax_writer_version = '0.56' +xml_simple_version = '2.22' +xml_twig_version = '3.52' +xml_writer_version = '0.625' +xml_xpath_version = '1.40' +xsloader_version = '0.24' +yaml_version = '1.23' + +exts_list = [ + ('Module::Build', module_build_version, { # std module but recent BioPerl needs a recent version for some reason + 'source_tmpl': 'Module-Build-%s.tar.gz' % module_build_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], + }), + ('ExtUtils::MakeMaker', extutils_makemaker_version, { + 'source_tmpl': 'ExtUtils-MakeMaker-%s.tar.gz' % extutils_makemaker_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], + }), + ('local::lib', local_lib_version, { + 'source_tmpl': 'local-lib-%s.tar.gz' % local_lib_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('IO::String', io_string_version, { + 'source_tmpl': 'IO-String-%s.tar.gz' % io_string_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('Data::Stag', data_stag_version, { + 'source_tmpl': 'Data-Stag-%s.tar.gz' % data_stag_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CM/CMUNGALL/'], + }), + ('DB_File', db_file_version, { + 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], + }), + ('DBI', dbi_version, { + 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], + }), + ('Sub::Uplevel', sub_uplevel_version, { + 'source_tmpl': 'Sub-Uplevel-%s.tar.gz' % sub_uplevel_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], + }), + ('Tree::DAG_Node', tree_dag_node_version, { + 'source_tmpl': 'Tree-DAG_Node-%s.tgz' % tree_dag_node_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/'], + }), + ('Try::Tiny', try_tiny_version, { + 'source_tmpl': 'Try-Tiny-%s.tar.gz' % try_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Devel::StackTrace', devel_stacktrace_version, { + 'source_tmpl': 'Devel-StackTrace-%s.tar.gz' % devel_stacktrace_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Data::Inheritable', class_data_inheritable_version, { + 'source_tmpl': 'Class-Data-Inheritable-%s.tar.gz' % class_data_inheritable_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], + }), + ('Exception::Class', exception_class_version, { + 'source_tmpl': 'Exception-Class-%s.tar.gz' % exception_class_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], + }), + ('Test::Fatal', test_fatal_version, { + 'source_tmpl': 'Test-Fatal-%s.tar.gz' % test_fatal_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], + }), + ('Test::NoWarnings', test_nowarnings_version, { + 'source_tmpl': 'Test-NoWarnings-%s.tar.gz' % test_nowarnings_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + }), + ('Test::Deep', test_deep_version, { + 'source_tmpl': 'Test-Deep-%s.tar.gz' % test_deep_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Algorithm::Diff', algorithm_diff_version, { + 'source_tmpl': 'Algorithm-Diff-%s.tar.gz' % algorithm_diff_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TY/TYEMQ/'], + }), + ('Text::Diff', text_diff_version, { + 'source_tmpl': 'Text-Diff-%s.tar.gz' % text_diff_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], + }), + ('Test::Differences', test_differences_version, { + 'source_tmpl': 'Test-Differences-%s.tar.gz' % test_differences_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCANTRELL/'], + }), + ('Test::Exception', test_exception_version, { + 'source_tmpl': 'Test-Exception-%s.tar.gz' % test_exception_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('Test::Warn', test_warn_version, { + 'source_tmpl': 'Test-Warn-%s.tar.gz' % test_warn_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BIGJ/'], + }), + ('Test::Requires', test_requires_version, { + 'source_tmpl': 'Test-Requires-%s.tar.gz' % test_requires_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], + }), + ('Test::Tester', test_simple_version, { + 'source_tmpl': 'Test-Simple-%s.tar.gz' % test_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('File::Slurp::Tiny', file_slurp_tiny_version, { + 'source_tmpl': 'File-Slurp-Tiny-%s.tar.gz' % file_slurp_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], + }), + ('Params::Util', params_util_version, { + 'source_tmpl': 'Params-Util-%s.tar.gz' % params_util_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + }), + ('Sub::Install', sub_install_version, { + 'source_tmpl': 'Sub-Install-%s.tar.gz' % sub_install_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], + }), + ('Data::OptList', data_optlist_version, { + 'source_tmpl': 'Data-OptList-%s.tar.gz' % data_optlist_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Sub::Exporter', sub_exporter_version, { + 'source_tmpl': 'Sub-Exporter-%s.tar.gz' % sub_exporter_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Capture::Tiny', capture_tiny_version, { + 'source_tmpl': 'Capture-Tiny-%s.tar.gz' % capture_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], + }), + ('Test::Output', test_output_version, { + 'source_tmpl': 'Test-Output-%s.tar.gz' % test_output_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BD/BDFOY/'], + }), + ('Module::Runtime', module_runtime_version, { + 'source_tmpl': 'Module-Runtime-%s.tar.gz' % module_runtime_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/'], + }), + ('Module::Implementation', module_implementation_version, { + 'source_tmpl': 'Module-Implementation-%s.tar.gz' % module_implementation_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], + }), + ('List::MoreUtils', list_moreutils_version, { + 'source_tmpl': 'List-MoreUtils-%s.tar.gz' % list_moreutils_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], + }), + ('Package::DeprecationManager', package_deprecationmanager_version, { + 'source_tmpl': 'Package-DeprecationManager-%s.tar.gz' % package_deprecationmanager_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], + }), + ('Dist::CheckConflicts', dist_checkconflicts_version, { + 'source_tmpl': 'Dist-CheckConflicts-%s.tar.gz' % dist_checkconflicts_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + }), + ('Package::Stash', package_stash_version, { + 'source_tmpl': 'Package-Stash-%s.tar.gz' % package_stash_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], + }), + ('Class::Load', class_load_version, { + 'source_tmpl': 'Class-Load-%s.tar.gz' % class_load_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('TAP::Harness::Env', test_harness_version, { + 'source_tmpl': 'Test-Harness-%s.tar.gz' % test_harness_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], + }), + ('ExtUtils::Helpers', extutils_helpers_version, { + 'source_tmpl': 'ExtUtils-Helpers-%s.tar.gz' % extutils_helpers_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Config', extutils_config_version, { + 'source_tmpl': 'ExtUtils-Config-%s.tar.gz' % extutils_config_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::InstallPaths', extutils_installpaths_version, { + 'source_tmpl': 'ExtUtils-InstallPaths-%s.tar.gz' % extutils_installpaths_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], + }), + ('Module::Build::Tiny', module_build_tiny_version, { + 'source_tmpl': 'Module-Build-Tiny-%s.tar.gz' % module_build_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], + }), + ('MRO::Compat', mro_compat_version, { + 'source_tmpl': 'MRO-Compat-%s.tar.gz' % mro_compat_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/'], + }), + ('Sub::Name', sub_name_version, { + 'source_tmpl': 'Sub-Name-%s.tar.gz' % sub_name_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Eval::Closure', eval_closure_version, { + 'source_tmpl': 'Eval-Closure-%s.tar.gz' % eval_closure_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + }), + ('Sub::Exporter::Progressive', sub_exporter_progressive_version, { + 'source_tmpl': 'Sub-Exporter-Progressive-%s.tar.gz' % sub_exporter_progressive_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], + }), + ('Devel::GlobalDestruction', devel_globaldestruction_version, { + 'source_tmpl': 'Devel-GlobalDestruction-%s.tar.gz' % devel_globaldestruction_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('boolean', boolean_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('Tie::IxHash', tie_ixhash_version, { + 'source_tmpl': 'Tie-IxHash-%s.tar.gz' % tie_ixhash_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/'], + }), + ('Moose', moose_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Package::Stash::XS', package_stash_xs_version, { + 'source_tmpl': 'Package-Stash-XS-%s.tar.gz' % package_stash_xs_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + }), + ('Params::Validate', params_validate_version, { + 'source_tmpl': 'Params-Validate-%s.tar.gz' % params_validate_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], + }), + ('Class::Load::XS', class_load_xs_version, { + 'source_tmpl': 'Class-Load-XS-%s.tar.gz' % class_load_xs_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + # For uoa00001, Zendesk #9076 + ('Math::CDF', math_cdf_version, { + 'source_tmpl': 'Math-CDF-%s.tar.gz' % math_cdf_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], + }), + ('DateTime::Locale', datetime_locale_version, { + 'source_tmpl': 'DateTime-Locale-%s.tar.gz' % datetime_locale_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], + }), + ('Class::Singleton', class_singleton_version, { + 'source_tmpl': 'Class-Singleton-%s.tar.gz' % class_singleton_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHAY/'], + }), + ('DateTime::TimeZone', datetime_timezone_version, { + 'source_tmpl': 'DateTime-TimeZone-%s.tar.gz' % datetime_timezone_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('Test::Warnings', test_warnings_version, { + 'source_tmpl': 'Test-Warnings-%s.tar.gz' % test_warnings_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Data::Types', data_types_version, { + 'source_tmpl': 'Data-Types-%s.tar.gz' % data_types_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/'], + }), + ('Exporter::Tiny', exporter_tiny_version, { + 'source_tmpl': 'Exporter-Tiny-%s.tar.gz' % exporter_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TOBYINK/'], + }), + ('List::AllUtils', list_allutils_version, { + 'source_tmpl': 'List-AllUtils-%s.tar.gz' % list_allutils_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], + }), + ('DateTime', datetime_version, { + 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + }), + ('DateTime::Tiny', datetime_tiny_version, { + 'source_tmpl': 'DateTime-Tiny-%s.tar.gz' % datetime_tiny_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], + }), + ('File::Slurp', file_slurp_version, { + 'source_tmpl': 'File-Slurp-%s.tar.gz' % file_slurp_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/U/UR/URI/'], + }), + ('HTTP::Date', http_date_version, { + 'source_tmpl': 'HTTP-Date-%s.tar.gz' % http_date_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('IO::HTML', io_html_version, { + 'source_tmpl': 'IO-HTML-%s.tar.gz' % io_html_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CJ/CJM/'], + }), + ('LWP::MediaTypes', lwp_mediatypes_version, { + 'source_tmpl': 'LWP-MediaTypes-%s.tar.gz' % lwp_mediatypes_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('URI', uri_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Encode::Locale', encode_locale_version, { + 'source_tmpl': 'Encode-Locale-%s.tar.gz' % encode_locale_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Request', http_message_version, { + 'source_tmpl': 'HTTP-Message-%s.tar.gz' % http_message_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('HTML::Tagset', html_tagset_version, { + 'source_tmpl': 'HTML-Tagset-%s.tar.gz' % html_tagset_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/'], + }), + ('HTML::Entities', html_parser_version, { + 'source_tmpl': 'HTML-Parser-%s.tar.gz' % html_parser_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('File::Listing', file_listing_version, { + 'source_tmpl': 'File-Listing-%s.tar.gz' % file_listing_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('AnyEvent', anyevent_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/'], + }), + ('Devel::CheckCompiler', devel_checkcompiler_version, { + 'source_tmpl': 'Devel-CheckCompiler-%s.tar.gz' % devel_checkcompiler_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SY/SYOHEX'], + }), + ('File::Copy::Recursive', file_copy_recursive_version, { + 'source_tmpl': 'File-Copy-Recursive-%s.tar.gz' % file_copy_recursive_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DM/DMUEY/'], + }), + ('Cwd::Guard', cwd_guard_version, { + 'source_tmpl': 'Cwd-Guard-%s.tar.gz' % cwd_guard_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KAZEBURO'], + }), + ('Module::Build::XSUtil', module_build_xsutil_version, { + 'source_tmpl': 'Module-Build-XSUtil-%s.tar.gz' % module_build_xsutil_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HI/HIDEAKIO/'], + }), + ('LWP', lwp_version, { + 'source_tmpl': 'libwww-perl-%s.tar.gz' % lwp_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/'], + }), + ('Fennec::Lite', fennec_lite_version, { + 'source_tmpl': 'Fennec-Lite-%s.tar.gz' % fennec_lite_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('aliased', aliased_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Meta::Builder', meta_builder_version, { + 'source_tmpl': 'Meta-Builder-%s.tar.gz' % meta_builder_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('Exporter::Declare', exporter_declare_version, { + 'source_tmpl': 'Exporter-Declare-%s.tar.gz' % exporter_declare_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('Mock::Quick', mock_quick_version, { + 'source_tmpl': 'Mock-Quick-%s.tar.gz' % mock_quick_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + ('Test::Exception::LessClever', test_exception_lessclever_version, { + 'source_tmpl': 'Test-Exception-LessClever-%s.tar.gz' % test_exception_lessclever_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Test::LeakTrace', test_leaktrace_version, { + 'source_tmpl': 'Test-LeakTrace-%s.tar.gz' % test_leaktrace_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GF/GFUJI/'], + }), + ('Mouse', mouse_version, { + 'source_tmpl': 'Mouse-v%s.tar.gz' % mouse_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SY/SYOHEX/'], + }), + ('XML::NamespaceSupport', xml_namespacesupport_version, { + 'source_tmpl': 'XML-NamespaceSupport-%s.tar.gz' % xml_namespacesupport_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::SAX::Base', xml_sax_base_version, { + 'source_tmpl': 'XML-SAX-Base-%s.tar.gz' % xml_sax_base_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], + }), + ('XML::SAX', xml_sax_version, { + 'source_tmpl': 'XML-SAX-%s.tar.gz' % xml_sax_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], + }), + ('XML::LibXML', xml_libxml_version, { + 'source_tmpl': 'XML-LibXML-%s.tar.gz' % xml_libxml_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + }), + ('Clone', clone_version, { + 'source_tmpl': 'Clone-%s.tar.gz' % clone_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GARU'], + }), + ('Parallel::ForkManager', parallel_forkmanager_version, { + 'source_tmpl': 'Parallel-ForkManager-%s.tar.gz' % parallel_forkmanager_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/Y/YA/YANICK/'], + }), + + ('Config::General', config_general_version, { + 'source_tmpl': 'Config-General-%s.tar.gz' % config_general_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TL/TLINDEN/'], + }), + ('Test::Simple', test_simple_version, { + 'source_tmpl': 'Test-Simple-%s.tar.gz' % test_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], + }), + + # For Genemark + ('YAML', yaml_version, { + 'source_tmpl': 'YAML-%s.tar.gz' % yaml_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('Hash::Merge', hash_merge_version, { + 'source_tmpl': 'Hash-Merge-%s.tar.gz' % hash_merge_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], + }), + ('Data::Dumper', data_dumper_version, { + 'source_tmpl': 'Data-Dumper-%s.tar.gz' % data_dumper_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/'], + }), + ('Object::InsideOut', object_insideout_version, { + 'source_tmpl': 'Object-InsideOut-%s.tar.gz' % object_insideout_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JD/JDHEDDEN/'], + }), + ('Logger::Simple', logger_simple_version, { + 'source_tmpl': 'Logger-Simple-%s.tar.gz' % logger_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TS/TSTANLEY/'], + }), + ('File::Path', file_path_version, { + 'source_tmpl': 'File-Path-%s.tar.gz' % file_path_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RI/RICHE/'], + }), + ('File::Spec', pathtools_version, { + 'source_tmpl': 'PathTools-%s.tar.gz' % pathtools_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('File::Temp', file_temp_version, { + 'source_tmpl': 'File-Temp-%s.tar.gz' % file_temp_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], + }), + ('XSLoader', xsloader_version, { + 'source_tmpl': 'XSLoader-%s.tar.gz' % xsloader_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/'], + }), + ('Carp', carp_version, { + 'source_tmpl': 'Carp-%s.tar.gz' % carp_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Storable', storable_version, { + 'source_tmpl': 'Storable-%s.tar.gz' % storable_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AM/AMS/'], + }), + + ('Font::TTF', font_ttf_version, { + 'source_tmpl': 'Font-TTF-%s.tar.gz' % font_ttf_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BH/BHALLISSY'], + }), + ('IO::Tty', io_tty_version, { + 'source_tmpl': 'IO-Tty-%s.tar.gz' % io_tty_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], + }), + ('Math::Bezier', math_bezier_version, { + 'source_tmpl': 'Math-Bezier-%s.tar.gz' % math_bezier_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABW'], + }), + ('IPC::Run', ipc_run_version, { + 'source_tmpl': 'IPC-Run-%s.tar.gz' % ipc_run_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], + }), + ('Math::Round', math_round_version, { + 'source_tmpl': 'Math-Round-%s.tar.gz' % math_round_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GROMMEL'], + }), + ('B::LintSubs', b_lintsubs_version, { + 'source_tmpl': 'B-LintSubs-%s.tar.gz' % b_lintsubs_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS'], + }), + ('Math::VecStat', math_vecstat_version, { + 'source_tmpl': 'Math-VecStat-%s.tar.gz' % math_vecstat_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AS/ASPINELLI'], + }), + ('Test::Most', test_most_version, { + 'source_tmpl': 'Test-Most-%s.tar.gz' % test_most_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OV/OVID/'], + }), + ('Readonly', readonly_version, { + 'source_tmpl': 'Readonly-%s.tar.gz' % readonly_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SA/SANKO/'], + }), + ('Regexp::Common', regexp_common_version, { + 'source_tmpl': 'Regexp-Common-%s.tar.gz' % regexp_common_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABIGAIL'], + }), + ('Want', want_version, { + 'source_tmpl': 'Want-%s.tar.gz' % want_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], + }), + ('DBD::SQLite', dbd_sqlite_version, { + 'source_tmpl': 'DBD-SQLite-%s.tar.gz' % dbd_sqlite_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], + }), + ('Set::IntSpan', set_intspan_version, { + 'source_tmpl': 'Set-IntSpan-%s.tar.gz' % set_intspan_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SW/SWMCD'], + }), + ('forks', forks_version, { + 'source_tmpl': 'forks-%s.tar.gz' % forks_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], + }), + ('File::Which', file_which_version, { + 'source_tmpl': 'File-Which-%s.tar.gz' % file_which_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], + }), + ('Perl::Unsafe::Signals', perl_unsafe_signals_version, { + 'source_tmpl': 'Perl-Unsafe-Signals-%s.tar.gz' % perl_unsafe_signals_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], + }), + ('Bit::Vector', bit_vector_version, { + 'source_tmpl': 'Bit-Vector-%s.tar.gz' % bit_vector_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], + }), + ('Parse::RecDescent', parse_recdescent_version, { + 'source_tmpl': 'Parse-RecDescent-%s.tar.gz' % parse_recdescent_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], + }), + ('Inline', inline_version, { + 'source_tmpl': 'Inline-%s.tar.gz' % inline_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('File::ShareDir::Install', file_sharedir_install_version, { + 'source_tmpl': 'File-ShareDir-Install-%s.tar.gz' % file_sharedir_install_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Inline::C', inline_c_version, { + 'source_tmpl': 'Inline-C-%s.tar.gz' % inline_c_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('IO::All', io_all_version, { + 'source_tmpl': 'IO-All-%s.tar.gz' % io_all_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + }), + ('IO::Prompt', io_prompt_version, { + 'source_tmpl': 'IO-Prompt-%s.tar.gz' % io_prompt_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], + }), + ('Getopt::Long', getopt_long_version, { + 'source_tmpl': 'Getopt-Long-%s.tar.gz' % getopt_long_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JV/JV/'], + }), + ('AppConfig', appconfig_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], + }), + ('Archive::Extract', archive_extract_version, { + 'source_tmpl': 'Archive-Extract-%s.tar.gz' % archive_extract_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Tar', archive_tar_version, { + 'source_tmpl': 'Archive-Tar-%s.tar.gz' % archive_tar_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Archive::Zip', archive_zip_version, { + 'source_tmpl': 'Archive-Zip-%s.tar.gz' % archive_zip_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], + }), + ('Authen::SASL', authen_sasl_version, { + 'source_tmpl': 'Authen-SASL-%s.tar.gz' % authen_sasl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/'], + }), + ('B::Lint', b_lint_version, { + 'source_tmpl': 'B-Lint-%s.tar.gz' % b_lint_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Class::Accessor', class_accessor_version, { + 'source_tmpl': 'Class-Accessor-%s.tar.gz' % class_accessor_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], + }), + ('Class::DBI', class_dbi_version, { + 'source_tmpl': 'Class-DBI-v%s.tar.gz' % class_dbi_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], + }), + ('Class::Inspector', class_inspector_version, { + 'source_tmpl': 'Class-Inspector-%s.tar.gz' % class_inspector_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], + }), + ('Class::ISA', class_isa_version, { + 'source_tmpl': 'Class-ISA-%s.tar.gz' % class_isa_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/'], + }), + ('Class::Trigger', class_trigger_version, { + 'source_tmpl': 'Class-Trigger-%s.tar.gz' % class_trigger_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/'], + }), + ('CPANPLUS', cpanplus_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Data::Grove', libxml_perl_version, { + 'source_tmpl': 'libxml-perl-%s.tar.gz' % libxml_perl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KM/KMACLEOD/'], + }), + ('Data::UUID', data_uuid_version, { + 'source_tmpl': 'Data-UUID-%s.tar.gz' % data_uuid_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Date::Language', timedate_version, { + 'source_tmpl': 'TimeDate-%s.tar.gz' % timedate_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/'], + }), + ('Date::Handler', date_handler_version, { + 'source_tmpl': 'Date-Handler-%s.tar.gz' % date_handler_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BB/BBEAUSEJ/'], + }), + ('SQL::Statement', sql_statement_version, { + 'source_tmpl': 'SQL-Statement-%s.tar.gz' % sql_statement_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], + }), + ('Module::Pluggable', module_pluggable_version, { + 'source_tmpl': 'Module-Pluggable-%s.tar.gz' % module_pluggable_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SI/SIMONW/'], + }), + ('Digest::HMAC', digest_hmac_version, { + 'source_tmpl': 'Digest-HMAC-%s.tar.gz' % digest_hmac_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('Digest::SHA1', digest_sha1_version, { + 'source_tmpl': 'Digest-SHA1-%s.tar.gz' % digest_sha1_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('Email::Date::Format', email_date_format_version, { + 'source_tmpl': 'Email-Date-Format-%s.tar.gz' % email_date_format_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Error', error_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + }), + ('Expect', expect_pm_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGIERSIG/'], + }), + ('File::CheckTree', file_checktree_version, { + 'source_tmpl': 'File-CheckTree-%s.tar.gz' % file_checktree_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('FreezeThaw', freezethaw_version, { + 'source_tmpl': 'FreezeThaw-%s.tar.gz' % freezethaw_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IL/ILYAZ/modules/'], + }), + ('Git', git_version, { + 'source_tmpl': 'Git-%s.tar.gz' % git_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MS/MSOUTH/'], + }), + ('GO::Utils', go_perl_version, { + 'source_tmpl': 'go-perl-%s.tar.gz' % go_perl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CM/CMUNGALL/'], + }), + ('GO', go_db_perl_version, { + 'source_tmpl': 'go-db-perl-%s.tar.gz' % go_db_perl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SJ/SJCARBON/'], + }), + + ('HTML::Form', html_form_version, { + 'source_tmpl': 'HTML-Form-%s.tar.gz' % html_form_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Cookies', http_cookies_version, { + 'source_tmpl': 'HTTP-Cookies-%s.tar.gz' % http_cookies_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Daemon', http_daemon_version, { + 'source_tmpl': 'HTTP-Daemon-%s.tar.gz' % http_daemon_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('HTTP::Negotiate', http_negotiate_version, { + 'source_tmpl': 'HTTP-Negotiate-%s.tar.gz' % http_negotiate_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('IO::Stringy', io_stringy_version, { + 'source_tmpl': 'IO-stringy-%s.tar.gz' % io_stringy_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DS/DSKOLL/'], + }), + ('IO::Socket::SSL', io_socket_ssl_version, { + 'source_tmpl': 'IO-Socket-SSL-%s.tar.gz' % io_socket_ssl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/'], + }), + ('JSON', json_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/'], + }), + ('Log::Message', log_message_version, { + 'source_tmpl': 'Log-Message-%s.tar.gz' % log_message_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Log::Message::Simple', log_message_simple_version, { + 'source_tmpl': 'Log-Message-Simple-%s.tar.gz' % log_message_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Mail::Util', mailtools_version, { + 'source_tmpl': 'MailTools-%s.tar.gz' % mailtools_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Types', mime_types_version, { + 'source_tmpl': 'MIME-Types-%s.tar.gz' % mime_types_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/'], + }), + ('MIME::Lite', mime_lite_version, { + 'source_tmpl': 'MIME-Lite-%s.tar.gz' % mime_lite_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Net::HTTP', net_http_version, { + 'source_tmpl': 'Net-HTTP-%s.tar.gz' % net_http_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/'], + }), + ('Net::SMTP::SSL', net_smtp_ssl_version, { + 'source_tmpl': 'Net-SMTP-SSL-%s.tar.gz' % net_smtp_ssl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Object::Accessor', object_accessor_version, { + 'source_tmpl': 'Object-Accessor-%s.tar.gz' % object_accessor_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Pod::LaTeX', pod_latex_version, { + 'source_tmpl': 'Pod-LaTeX-%s.tar.gz' % pod_latex_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TJ/TJENNESS/'], + }), + ('Pod::Plainer', pod_plainer_version, { + 'source_tmpl': 'Pod-Plainer-%s.tar.gz' % pod_plainer_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RM/RMBARKER/'], + }), + ('Pod::POM', pod_pom_version, { + 'source_tmpl': 'Pod-POM-%s.tar.gz' % pod_pom_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], + }), + ('Shell', shell_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FE/FERREIRA/'], + }), + ('Statistics::Descriptive', statistics_descriptive_version, { + 'source_tmpl': 'Statistics-Descriptive-%s.tar.gz' % statistics_descriptive_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + }), + ('Switch', switch_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/'], + }), + ('Template', template_toolkit_version, { + 'source_tmpl': 'Template-Toolkit-%s.tar.gz' % template_toolkit_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABW/'], + }), + ('Term::UI', term_ui_version, { + 'source_tmpl': 'Term-UI-%s.tar.gz' % term_ui_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Text::Iconv', text_iconv_version, { + 'source_tmpl': 'Text-Iconv-%s.tar.gz' % text_iconv_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/'], + }), + ('Text::Soundex', text_soundex_version, { + 'source_tmpl': 'Text-Soundex-%s.tar.gz' % text_soundex_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Time::Piece', time_piece_version, { + 'source_tmpl': 'Time-Piece-%s.tar.gz' % time_piece_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ES/ESAYM/'], + }), + ('Time::Piece::MySQL', time_piece_mysql_version, { + 'source_tmpl': 'Time-Piece-MySQL-%s.tar.gz' % time_piece_mysql_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], + }), + ('UNIVERSAL::moniker', universal_moniker_version, { + 'source_tmpl': 'UNIVERSAL-moniker-%s.tar.gz' % universal_moniker_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], + }), + ('version', version_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JP/JPEACOCK/'], + }), + ('WWW::RobotRules', www_robotrules_version, { + 'source_tmpl': 'WWW-RobotRules-%s.tar.gz' % www_robotrules_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + }), + ('XML::SAX::Writer', xml_sax_writer_version, { + 'source_tmpl': 'XML-SAX-Writer-%s.tar.gz' % xml_sax_writer_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERIGRIN/'], + }), + ('XML::Simple', xml_simple_version, { + 'source_tmpl': 'XML-Simple-%s.tar.gz' % xml_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], + }), + ('XML::XPath', xml_xpath_version, { + 'source_tmpl': 'XML-XPath-%s.tar.gz' % xml_xpath_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MANWAR/'], + }), + ('DBD::AnyData', dbd_anydata_version, { + 'source_tmpl': 'DBD-AnyData-%s.tar.gz' % dbd_anydata_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], + }), + ('Ima::DBI', ima_dbi_version, { + 'source_tmpl': 'Ima-DBI-%s.tar.gz' % ima_dbi_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERRIN/'], + }), + ('DBIx::ContextualFetch', dbix_contextualfetch_version, { + 'source_tmpl': 'DBIx-ContextualFetch-%s.tar.gz' % dbix_contextualfetch_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], + }), + ('DBIx::Simple', dbix_simple_version, { + 'source_tmpl': 'DBIx-Simple-%s.tar.gz' % dbix_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JU/JUERD/'], + }), + ('Term::ReadKey', term_readkey_version, { + 'source_tmpl': 'TermReadKey-%s.tar.gz' % term_readkey_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/'], +# 'patches': ['TermReadKey-2.32.patch'], + }), + ('Moo', moo_version, { + 'source_tmpl': 'Moo-%s.tar.gz' % moo_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('strictures', strictures_version, { + 'source_tmpl': 'strictures-%s.tar.gz' % strictures_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('File::Find::Rule::Perl', file_find_rule_perl_version, { + 'source_tmpl': 'File-Find-Rule-Perl-%s.tar.gz' % file_find_rule_perl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + }), + ('Test::Version', test_version_version, { + 'source_tmpl': 'Test-Version-%s.tar.gz' % test_version_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], + }), + ('Test::Harness', test_harness_version, { + 'source_tmpl': 'Test-Harness-%s.tar.gz' % test_harness_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], + }), + ('Import::Into', import_into_version, { + 'source_tmpl': 'Import-Into-%s.tar.gz' % import_into_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + }), + ('File::Find::Rule', file_find_rule_version, { + 'source_tmpl': 'File-Find-Rule-%s.tar.gz' % file_find_rule_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], + }), + ('Data::Section::Simple', data_section_simple_version, { + 'source_tmpl': 'Data-Section-Simple-%s.tar.gz' % data_section_simple_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/'], + }), + ('Text::Glob', text_glob_version, { + 'source_tmpl': 'Text-Glob-%s.tar.gz' % text_glob_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], + }), + ('Number::Compare', number_compare_version, { + 'source_tmpl': 'Number-Compare-%s.tar.gz' % number_compare_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], + }), + ('IPC::Run3', ipc_run3_version, { + 'source_tmpl': 'IPC-Run3-%s.tar.gz' % ipc_run3_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('Set::Array', set_array_version, { + 'source_tmpl': 'Set-Array-%s.tgz' % set_array_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/'], + }), + ('Bundle::BioPerl', bundle_bioperl_version, { + 'source_tmpl': 'Bundle-BioPerl-%s.tar.gz' % bundle_bioperl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CJ/CJFIELDS/'], + }), + ('Algorithm::Munkres', algorithm_munkres_version, { + 'source_tmpl': 'Algorithm-Munkres-%s.tar.gz' % algorithm_munkres_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TP/TPEDERSE/'], + }), +# Lots of deps: Types::Standard etc. +# ('Array::Compare', array_compare_version, { +# 'source_tmpl': 'Array-Compare-v%s.tar.gz' % array_compare_version, +# 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAVECROSS/'], +# }), + ('Graph', graph_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JH/JHI/'], + }), + ('Set::Scalar', set_scalar_version, { + 'source_tmpl': 'Set-Scalar-%s.tar.gz' % set_scalar_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAVIDO/'], + }), + ('CGI', cgi_version, { + 'source_tmpl': 'CGI-%s.tar.gz' % cgi_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEEJO/'], + }), + ('Bio::Phylo', bio_phylo_version, { + 'source_tmpl': 'Bio-Phylo-%s.tar.gz' % bio_phylo_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RV/RVOSA/'], + }), + ('SVG', svg_version, { + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/'], + }), + ('XML::DOM', xml_dom_version, { + 'source_tmpl': 'XML-DOM-%s.tar.gz' % xml_dom_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/'], + }), + ('XML::DOM::XPath', xml_dom_xpath_version, { + 'source_tmpl': 'XML-DOM-XPath-%s.tar.gz' % xml_dom_xpath_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/'], + }), + ('XML::Parser::PerlSAX', libxml_perl_version, { + 'source_tmpl': 'libxml-perl-%s.tar.gz' % libxml_perl_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KM/KMACLEOD/'], + }), + ('XML::Parser', xml_parser_version, { + 'source_tmpl': 'XML-Parser-%s.tar.gz' % xml_parser_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], + }), + ('XML::Twig', xml_twig_version, { + 'source_tmpl': 'XML-Twig-%s.tar.gz' % xml_twig_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/'], + }), + ('XML::Writer', xml_writer_version, { + 'source_tmpl': 'XML-Writer-%s.tar.gz' % xml_writer_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JO/JOSEPHW/'], + }), + ('Spreadsheet::ParseExcel', spreadsheet_parseexcel_version, { + 'source_tmpl': 'Spreadsheet-ParseExcel-%s.tar.gz' % spreadsheet_parseexcel_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOUGW/'], + }), + ('Convert::Binary::C', convert_binary_c_version, { + 'source_tmpl': 'Convert-Binary-C-%s.tar.gz' % convert_binary_c_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MH/MHX/'], + }), + ('Sys::SigAction.pm', sys_sigaction_version, { + 'source_tmpl': 'Sys-SigAction-%s.tar.gz' % sys_sigaction_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], + }), + ('Acme::Damn', acme_damn_version, { + 'source_tmpl': 'Acme-Damn-%s.tar.gz' % acme_damn_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], + }), + ('Set::IntervalTree', set_intervaltree_version, { + 'source_tmpl': 'Set-IntervalTree-%s.tar.gz' % set_intervaltree_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], + }), + ('HTML::TableExtract', html_tableextract_version, { + 'source_tmpl': 'HTML-TableExtract-%s.tar.gz' % html_tableextract_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MS/MSISK/'], + }), + ('Bio::Perl', bioperl_version, { + 'source_tmpl': 'BioPerl-%s.tar.gz' % bioperl_version, + 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], + }), + ('Bio::DB::Sam', bio_samtools_version, { + 'source_tmpl': 'Bio-SamTools-%s.tar.gz' % bio_samtools_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LD/LDS/'], + 'patches': ['Perl_SamTools_include.patch'], + }), + ('File::Spec::Functions', pathtools_version, { + 'source_tmpl': 'PathTools-%s.tar.gz' % pathtools_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], + }), + ('List::Util', scalar_list_utils_version, { + 'source_tmpl': 'Scalar-List-Utils-%s.tar.gz' % scalar_list_utils_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/'], + }), + ('Module::Load::Conditional', module_load_conditional_version, { + 'source_tmpl': 'Module-Load-Conditional-%s.tar.gz' % module_load_conditional_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], + }), + ('Scalar::Util::Numeric', scalar_util_numeric_version, { + 'source_tmpl': 'Scalar-Util-Numeric-%s.tar.gz' % scalar_util_numeric_version, + 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHOCOLATE/'], + }), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb new file mode 100644 index 0000000000..877294f204 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb @@ -0,0 +1,21 @@ +name = 'SAMtools' +version = '0.1.19' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [('http://sourceforge.net/projects/samtools/files/%(namelower)s/%(version)s', 'download')] + +patches = ['SAMtools-%(version)s_Makefile-ncurses.patch'] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' -- GitLab From 64f3c1865cccb676751b50727b46261ffe3b92e5 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 10 Mar 2017 12:25:14 +1030 Subject: [PATCH 0671/1311] Style fixed --- .../{PileOMeth-0.1.11.eb => PileOMeth-0.1.11-foss-2016b.eb} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename easybuild/easyconfigs/p/PileOMeth/{PileOMeth-0.1.11.eb => PileOMeth-0.1.11-foss-2016b.eb} (87%) diff --git a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb similarity index 87% rename from easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb rename to easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb index af4dcdba98..edf4ca1f37 100644 --- a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11.eb +++ b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb @@ -19,17 +19,17 @@ description = """PileOMeth processes a coordinate-sorted and indexed BAM or CRAM PileOMeth extracts per-base methylation metrics from them. PileOMeth requires an indexed fasta file containing the reference genome as well. """ -toolchain = {'name': 'dummy', 'version': 'dummy'} +toolchain = {'name': 'foss', 'version': '2016b'} sources = ['%(version)s.zip'] source_urls = ['https://github.com/dpryan79/PileOMeth/archive/'] dependencies = [ - ('HTSlib', '1.2.1', '', ('foss', '2017a')) + ('HTSlib', '1.2.1') ] files_to_copy = [ - (["PileOMeth"], "bin"), "*.c", "*.h" + (["PileOMeth"], "bin"), ] sanity_check_paths = { -- GitLab From c0d6c2c7a08c93059ce58bcb0970daac4738744d Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 10 Mar 2017 12:27:59 +1030 Subject: [PATCH 0672/1311] HTSlib added --- .../h/HTSlib/HTSlib-1.2.1-foss-2016b.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb new file mode 100644 index 0000000000..66babc415c --- /dev/null +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb @@ -0,0 +1,39 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: +# +# Acknowledgement:: +# Original Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +## + +easyblock = 'ConfigureMake' + +name = 'HTSlib' +version = '1.2.1' + +homepage = "http://www.htslib.org/" +description = """ A C library for reading/writing high-throughput sequencing data. + This package includes the utilities bgzip and tabix +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.so"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 94d3b3ff4ea86240bfbb2b4a06361d80410076f5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 10:27:41 +0100 Subject: [PATCH 0673/1311] also copy Rfam_for_miRDeep.fa to mirDeep2 bin directory --- easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index de73467658..466cd04f4d 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -22,6 +22,7 @@ dependencies = [ install_cmd = "cp -a mirdeep*/src %(installdir)s/bin && chmod a+x %(installdir)s/bin/*.pl && " install_cmd += 'sed -i "s@#!/usr/bin/perl@#!$EBROOTPERL/bin/perl@" %(installdir)s/bin/*.pl && ' +install_cmd += "cp -a mirdeep*/Rfam_for_miRDeep.fa %(installdir)s/bin/ && " # scripts include a hard check for a file called 'install_successful' in the install directory... install_cmd += "touch %(installdir)s/install_successful" -- GitLab From e5f020956911d15e337bfa2f7a0fd140843d84f4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 10:36:31 +0100 Subject: [PATCH 0674/1311] adding easyconfigs: requests-2.13.0-foss-2016b-Python-2.7.12.eb, requests-2.13.0-intel-2016b-Python-2.7.12.eb --- ...equests-2.13.0-foss-2016b-Python-2.7.12.eb | 24 +++++++++++++++++++ ...quests-2.13.0-intel-2016b-Python-2.7.12.eb | 24 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/r/requests/requests-2.13.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/r/requests/requests-2.13.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/requests/requests-2.13.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..2546a92787 --- /dev/null +++ b/easybuild/easyconfigs/r/requests/requests-2.13.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'requests' +version = '2.13.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/requests' +description = """Python http for humans""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..3d08d7d724 --- /dev/null +++ b/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'requests' +version = '2.13.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/requests' +description = """Python http for humans""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' -- GitLab From bdee396c0c108c92a0ea57f8540ed45571e7aa4f Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:46:42 +0100 Subject: [PATCH 0675/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb index a2bf4ab035..b3d257608f 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.30.06-goolf-1.4.10.eb @@ -33,4 +33,8 @@ configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_ configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From 398343a8cdb5277b46ab50061bb26bf009c7126e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 10:47:44 +0100 Subject: [PATCH 0676/1311] fix PostgreSQL homepage + minor style fixes --- .../p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb | 15 +++++++-------- .../PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb | 10 ++++++---- .../PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb | 10 ++++++---- .../PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb | 8 ++++---- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb index b694510474..8b0668a68f 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.3.5-intel-2014b.eb @@ -3,7 +3,7 @@ easyblock = 'ConfigureMake' name = 'PostgreSQL' version = '9.3.5' -homepage = 'http://www.mysql.com/' +homepage = 'https://www.postgresql.org/' description = """PostgreSQL is a powerful, open source object-relational database system. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). @@ -18,18 +18,17 @@ sources = [SOURCELOWER_TAR_GZ] toolchain = {'name': 'intel', 'version': '2014b'} -osdependencies = [('openssl-devel', 'libssl-dev')] - -java = 'Java' -javaver = '1.7.0_60' - dependencies = [ - (java, javaver, '', True), + ('Java', '1.7.0_60', '', True), ('libreadline', '6.3'), ('zlib', '1.2.8'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1i'), ] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + builddependencies = [ ('Bison', '3.0.2'), ('flex', '2.5.39'), diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb index a7d2b6c4a0..6302a94b89 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.4.7-intel-2016a-Python-2.7.11.eb @@ -4,7 +4,7 @@ name = 'PostgreSQL' version = '9.4.7' versionsuffix = '-Python-%(pyver)s' -homepage = 'http://www.mysql.com/' +homepage = 'https://www.postgresql.org/' description = """PostgreSQL is a powerful, open source object-relational database system. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). @@ -19,15 +19,17 @@ sources = [SOURCELOWER_TAR_GZ] toolchain = {'name': 'intel', 'version': '2016a'} -osdependencies = [('openssl-devel', 'libssl-dev')] - dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.11'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1i'), ] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + builddependencies = [ ('Bison', '3.0.4'), ('flex', '2.6.0'), diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb index 46e78c9224..c49c4abba6 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.5.2-intel-2016a-Python-2.7.11.eb @@ -4,7 +4,7 @@ name = 'PostgreSQL' version = '9.5.2' versionsuffix = '-Python-%(pyver)s' -homepage = 'http://www.mysql.com/' +homepage = 'https://www.postgresql.org/' description = """PostgreSQL is a powerful, open source object-relational database system. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). @@ -19,15 +19,17 @@ sources = [SOURCELOWER_TAR_GZ] toolchain = {'name': 'intel', 'version': '2016a'} -osdependencies = [('openssl-devel', 'libssl-dev')] - dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.11'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1i'), ] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + builddependencies = [ ('Bison', '3.0.4'), ('flex', '2.6.0'), diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb index 8f8750717c..67556bd516 100644 --- a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.0-intel-2016b-Python-2.7.12.eb @@ -4,7 +4,7 @@ name = 'PostgreSQL' version = '9.6.0' versionsuffix = '-Python-%(pyver)s' -homepage = 'http://www.mysql.com/' +homepage = 'https://www.postgresql.org/' description = """PostgreSQL is a powerful, open source object-relational database system. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). @@ -19,13 +19,13 @@ sources = [SOURCELOWER_TAR_GZ] toolchain = {'name': 'intel', 'version': '2016b'} -osdependencies = [('openssl-devel', 'libssl-dev')] - dependencies = [ ('libreadline', '6.3'), ('zlib', '1.2.8'), ('Python', '2.7.12'), - # ('OpenSSL', '1.0.1i'), # OS dependency should be preferred for security reasons + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1i'), ] builddependencies = [ -- GitLab From 51bbcc9046b2b2825a455be134d694e4bb7ba615 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:48:03 +0100 Subject: [PATCH 0677/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb index f56b457e0d..99a4b3d8d6 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-goolf-1.4.10.eb @@ -33,4 +33,8 @@ configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-x configopts += ' --with-fftw3-incdir=$FFTW_INC_DIR --with-fftw3-libdir=$FFTW_LIB_DIR' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From 526cbfca04174161d69fd149e9e407c9e313cc56 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:50:15 +0100 Subject: [PATCH 0678/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb index a263fbc4af..c111bdfea0 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.01-intel-2015a.eb @@ -38,4 +38,8 @@ configopts += ' --with-fftw3-incdir=$EBROOTIMKL/mkl/include/fftw --with-fftw3-li configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From 7c1a1484d29b05d06349acaa11a8829e87a1caf0 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:51:16 +0100 Subject: [PATCH 0679/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb index 4f55d64d72..a90994c1ab 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.13-ictce-5.5.0.eb @@ -38,4 +38,8 @@ configopts += ' --with-fftw3-incdir=$MKLROOT/mkl/include/fftw --with-fftw3-libdi configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From eaa6b52cb1d25ecd15bb5ac553cbc3771b02b9fc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 10:53:30 +0100 Subject: [PATCH 0680/1311] adding easyconfigs: psycopg2-2.7-intel-2016b-Python-2.7.12.eb, psycopg2-2.7-foss-2016b-Python-2.7.12.eb, PostgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb, PostgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb --- ...stgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb | 46 +++++++++++++++++++ ...tgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb | 46 +++++++++++++++++++ .../psycopg2-2.7-foss-2016b-Python-2.7.12.eb | 25 ++++++++++ .../psycopg2-2.7-intel-2016b-Python-2.7.12.eb | 25 ++++++++++ 4 files changed, 142 insertions(+) create mode 100644 easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..537ebb2758 --- /dev/null +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,46 @@ +easyblock = 'ConfigureMake' + +name = 'PostgreSQL' +version = '9.6.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.postgresql.org/' +description = """PostgreSQL is a powerful, open source object-relational database system. + It is fully ACID compliant, has full support for foreign keys, + joins, views, triggers, and stored procedures (in multiple languages). + It includes most SQL:2008 data types, including INTEGER, + NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. + It also supports storage of binary large objects, including pictures, + sounds, or video. It has native programming interfaces for C/C++, Java, + .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and exceptional documentation.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://ftp.postgresql.org/pub/source/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('libreadline', '6.3'), + ('zlib', '1.2.8'), + ('Python', '2.7.12'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.0'), + ('Perl', '5.24.0'), +] + +configopts = '--with-python --with-openssl' + +sanity_check_paths = { + 'files': ['bin/psql', 'bin/pg_config', 'lib/libpq.a', 'lib/libpq.%s' % SHLIB_EXT], + 'dirs': ['share/postgresql'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9d98aaa673 --- /dev/null +++ b/easybuild/easyconfigs/p/PostgreSQL/PostgreSQL-9.6.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,46 @@ +easyblock = 'ConfigureMake' + +name = 'PostgreSQL' +version = '9.6.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.postgresql.org/' +description = """PostgreSQL is a powerful, open source object-relational database system. + It is fully ACID compliant, has full support for foreign keys, + joins, views, triggers, and stored procedures (in multiple languages). + It includes most SQL:2008 data types, including INTEGER, + NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. + It also supports storage of binary large objects, including pictures, + sounds, or video. It has native programming interfaces for C/C++, Java, + .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and exceptional documentation.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://ftp.postgresql.org/pub/source/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('libreadline', '6.3'), + ('zlib', '1.2.8'), + ('Python', '2.7.12'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.0'), + ('Perl', '5.24.0'), +] + +configopts = '--with-python --with-openssl' + +sanity_check_paths = { + 'files': ['bin/psql', 'bin/pg_config', 'lib/libpq.a', 'lib/libpq.%s' % SHLIB_EXT], + 'dirs': ['share/postgresql'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..948a2bd8f6 --- /dev/null +++ b/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'psycopg2' +version = '2.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://initd.org/psycopg/' +description = "Psycopg is the most popular PostgreSQL adapter for the Python programming language." + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('PostgreSQL', '9.6.2', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..3ac0511ce1 --- /dev/null +++ b/easybuild/easyconfigs/p/psycopg2/psycopg2-2.7-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'psycopg2' +version = '2.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://initd.org/psycopg/' +description = "Psycopg is the most popular PostgreSQL adapter for the Python programming language." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('PostgreSQL', '9.6.2', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From ba956899575eb5c51c8ef37229213151fdcafad1 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:54:43 +0100 Subject: [PATCH 0681/1311] fix PYTHONPATH #4239 --- .../r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb index 81b811dc89..80a084ac4d 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2015b-Python-2.7.10.eb @@ -36,4 +36,8 @@ configopts += ' --with-fftw3-incdir=$EBROOTIMKL/mkl/include/fftw --with-fftw3-li configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From 412ba617c5167ddb3593007a38cb0820f7c1702a Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:56:02 +0100 Subject: [PATCH 0682/1311] fix PYTHONPATH #4239 --- .../r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb index 9dd615415d..718fb2f36d 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.34-intel-2016a-Python-2.7.11.eb @@ -54,4 +54,8 @@ configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLI configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From 83e7f94a3fea698444e22140da2fc3b7eb97f119 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:56:58 +0100 Subject: [PATCH 0683/1311] fix PYTHONPATH #4239 --- .../r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb index b51c955db4..d8466b4858 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.36-intel-2016a-Python-2.7.11.eb @@ -54,4 +54,8 @@ configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLI configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From e80f2a6d6aa67ace904af25a62af8efe2646b08a Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 10:57:41 +0100 Subject: [PATCH 0684/1311] fix PYTHONPATH #4239 --- .../r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb index 2ddf7531c8..6d3d2000b8 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v6.06.02-intel-2016b-Python-2.7.12.eb @@ -52,4 +52,8 @@ configopts += ' --with-x11-libdir=$EBROOTX11/lib --with-xext-libdir=$EBROOTLIBX1 configopts += ' --with-xft-libdir=$EBROOTX11/lib' configopts += ' --with-xpm-incdir=$EBROOTX11/include --with-xpm-libdir=$EBROOTX11/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/'} + moduleclass = 'data' -- GitLab From 17e252c4b0b1c3fcb5830d97cb42bcd636e394f8 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 11:09:37 +0100 Subject: [PATCH 0685/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb index a8ab1f540d..f662b0deda 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.18-ictce-5.5.0.eb @@ -42,4 +42,8 @@ configopts += ' --with-fftw3-incdir=$EBROOTIMKL/mkl/include/fftw --with-fftw3-li configopts += ' --with-xml-incdir=$EBROOTLIBXML2/include/libxml2/libxml --with-xml-libdir=$EBROOTLIBXML2/lib' configopts += ' --with-python-libdir=$EBROOTPYTHON/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/root/'} + moduleclass = 'data' -- GitLab From e0b7bd52bbfda4bec6fca382313bd6b7825276ef Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 11:11:42 +0100 Subject: [PATCH 0686/1311] fix location for Rfam_for_miRDeep.fa --- .../easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb index 466cd04f4d..83e5129dff 100644 --- a/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb +++ b/easybuild/easyconfigs/m/miRDeep2/miRDeep2-2.0.0.8-intel-2016b.eb @@ -22,7 +22,7 @@ dependencies = [ install_cmd = "cp -a mirdeep*/src %(installdir)s/bin && chmod a+x %(installdir)s/bin/*.pl && " install_cmd += 'sed -i "s@#!/usr/bin/perl@#!$EBROOTPERL/bin/perl@" %(installdir)s/bin/*.pl && ' -install_cmd += "cp -a mirdeep*/Rfam_for_miRDeep.fa %(installdir)s/bin/ && " +install_cmd += "cp -a mirdeep*/Rfam_for_miRDeep.fa %(installdir)s && " # scripts include a hard check for a file called 'install_successful' in the install directory... install_cmd += "touch %(installdir)s/install_successful" -- GitLab From f2326dc17da8f931f34c89935d2c5572dd788645 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Fri, 10 Mar 2017 11:16:20 +0100 Subject: [PATCH 0687/1311] fix PYTHONPATH #4239 --- easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb index 5801dbe265..6073d0e56c 100644 --- a/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb +++ b/easybuild/easyconfigs/r/ROOT/ROOT-v5.34.26-intel-2015a.eb @@ -56,4 +56,8 @@ configopts += ' --with-x11-libdir=$EBROOTLIBX11/lib --with-xext-libdir=$EBROOTLI configopts += ' --with-xft-libdir=$EBROOTLIBXFT/lib' configopts += ' --with-xpm-incdir=$EBROOTLIBXPM/include --with-xpm-libdir=$EBROOTLIBXPM/lib' +sanity_check_commands = ["python -c 'import ROOT'"] + +modextrapaths = {'PYTHONPATH': 'lib/'} + moduleclass = 'data' -- GitLab From 7487ef4bd7ec0e279be25ab423ec2b9be38f1e38 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 11:21:12 +0100 Subject: [PATCH 0688/1311] detect use of '$root', which is not compatible with module files in Lua syntax --- test/easyconfigs/easyconfigs.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/easyconfigs/easyconfigs.py b/test/easyconfigs/easyconfigs.py index 551695c259..993e9395ba 100644 --- a/test/easyconfigs/easyconfigs.py +++ b/test/easyconfigs/easyconfigs.py @@ -235,6 +235,11 @@ def template_easyconfig_test(self, spec): self.assertTrue(name, app.name) self.assertTrue(ec['version'], app.version) + # make sure that $root is not used, since it is not compatible with module files in Lua syntax + res = re.findall('.*\$root.*', ec.rawtxt, re.M) + error_msg = "Found use of '$root', not compatible with modules in Lua syntax, use '%%(installdir)s' instead: %s" + self.assertFalse(res, error_msg % res) + # make sure all patch files are available specdir = os.path.dirname(spec) specfn = os.path.basename(spec) -- GitLab From 667725596613b792b086d6356b7e6cdc7c22326a Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Fri, 10 Mar 2017 11:57:26 +0100 Subject: [PATCH 0689/1311] added $CXXFLAGS --- .../disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb index 816f774c49..7de0a8ea92 100644 --- a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb @@ -27,7 +27,7 @@ dependencies = [ # this application provides a python implementation and a C++ implementation # in the postinstallcmds we compile the C++ version postinstallcmds = [ - '$CXX -I$EBROOTBAMTOOLS/include -I./ -L$EBROOTBAMTOOLS/lib -o disambiguate dismain.cpp -lz -lbamtools', + '$CXX $CXXFLAGS -I$EBROOTBAMTOOLS/include -I./ -L$EBROOTBAMTOOLS/lib -o disambiguate dismain.cpp -lz -lbamtools', 'cp disambiguate %(installdir)s/bin/' ] -- GitLab From 75998c8fd4ad81ef8b43d41152800e059a3adc88 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 10 Mar 2017 21:55:20 +1030 Subject: [PATCH 0690/1311] style fixed --- easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb index 66babc415c..a58dae978a 100644 --- a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb @@ -32,7 +32,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.so"], + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.%s" % SHLIB_EXT], 'dirs': [], } -- GitLab From d1132ead52ea73d356501e39a3b9b603dffb4c0b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 13:12:07 +0100 Subject: [PATCH 0691/1311] add requests and psycopg2 as dependencies for QGIS --- .../q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb index 43245eb873..4878b7d629 100644 --- a/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.14.12-intel-2016b-Python-2.7.12.eb @@ -32,6 +32,8 @@ dependencies = [ ('QScintilla', '2.10', versionsuffix), ('GSL', '2.3'), ('QJson', '0.9.0'), + ('requests', '2.13.0', versionsuffix), + ('psycopg2', '2.7', versionsuffix), ] builddependencies = [ ('CMake', '3.7.2'), -- GitLab From 3d0c4aa8ab68e2d7fed93ce83b3f9652a7ad03f7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 13:47:15 +0100 Subject: [PATCH 0692/1311] add requests and psycopg2 as dependencies for QGIS --- .../easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb index f6d58e7bf7..837899aa93 100644 --- a/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/q/QGIS/QGIS-2.18.4-foss-2016b-Python-2.7.12.eb @@ -32,6 +32,8 @@ dependencies = [ ('QScintilla', '2.10', versionsuffix), ('GSL', '2.3'), ('QJson', '0.9.0'), + ('requests', '2.13.0', versionsuffix), + ('psycopg2', '2.7', versionsuffix), ] builddependencies = [ ('CMake', '3.7.2'), -- GitLab From 674ce7782bb9b25ee3721dbe0017218df74cd31b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 10 Mar 2017 14:01:42 +0100 Subject: [PATCH 0693/1311] avoid use of '$root', replace with '%(installdir)s' --- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb | 10 +++------- .../a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb | 10 +++------- .../MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb | 11 +++-------- .../MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb | 11 +++-------- .../m/MView/MView-1.57-goolf-1.4.10-Perl-5.16.3.eb | 4 +--- .../easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb | 4 +--- .../easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb | 4 +--- 7 files changed, 15 insertions(+), 39 deletions(-) diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb index 56456bbd62..4c41ac6ece 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-2.7.12.eb @@ -25,16 +25,12 @@ dependencies = [ separate_build_dir = True -modextravars = { - 'ALPS_ROOT': '$root', -} -modextrapaths = { - 'PYTHONPATH': ['lib/'] -} - sanity_check_paths = { 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } +modextravars = {'ALPS_ROOT': '%(installdir)s'} +modextrapaths = {'PYTHONPATH': ['lib/']} + moduleclass = 'phys' diff --git a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb index f21285e25b..3d3e67389f 100644 --- a/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/a/ALPS/ALPS-2.3.0-foss-2016b-Python-3.5.2.eb @@ -25,16 +25,12 @@ dependencies = [ separate_build_dir = True -modextravars = { - 'ALPS_ROOT': '$root', -} -modextrapaths = { - 'PYTHONPATH': ['lib/'] -} - sanity_check_paths = { 'files': ['lib/libalps.%s' % SHLIB_EXT], 'dirs': ['include/alps', 'bin/', 'share/'], } +modextravars = {'ALPS_ROOT': '%(installdir)s'} +modextrapaths = {'PYTHONPATH': ['lib']} + moduleclass = 'phys' diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb index 21ae128381..6e3b23ba3c 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-foss-2016a-Java-1.8.0_92.eb @@ -31,17 +31,12 @@ postinstallcmds = [ "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s", ] -modextrapaths = { - 'CLASSPATH': 'lib', -} - -modextravars = { - 'MPJ_HOME': '$root', # MPJ_HOME points to install directory -} - sanity_check_paths = { 'files': ['lib/libnativempjdev.so', 'bin/mpjrun.sh'], 'dirs': [] } +modextravars = {'MPJ_HOME': '%(installdir)s'} +modextrapaths = {'CLASSPATH': 'lib'} + moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb index 41195e5042..8577e3deb4 100644 --- a/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/m/MPJ-Express/MPJ-Express-0.44-goolf-1.4.10-Java-1.7.0_75.eb @@ -34,17 +34,12 @@ postinstallcmds = [ "cd %(installdir)s/src/mpjdev/natmpjdev/lib/build && cmake .. && make && make install DESTDIR=%(installdir)s", ] -modextrapaths = { - 'CLASSPATH': 'lib', -} - -modextravars = { - 'MPJ_HOME': '$root', # MPJ_HOME points to install directory -} - sanity_check_paths = { 'files': ['lib/libnativempjdev.so', 'bin/mpjrun.sh'], 'dirs': [] } +modextravars = {'MPJ_HOME': '%(installdir)s'} +modextrapaths = {'CLASSPATH': 'lib'} + moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/MView/MView-1.57-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/m/MView/MView-1.57-goolf-1.4.10-Perl-5.16.3.eb index 44efa704ef..973e13d894 100644 --- a/easybuild/easyconfigs/m/MView/MView-1.57-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/m/MView/MView-1.57-goolf-1.4.10-Perl-5.16.3.eb @@ -25,8 +25,6 @@ sanity_check_paths = { 'dirs': ["lib"], } -modextravars = { - 'PERL5LIB': '$root/lib' -} +modextrapaths = {'PERL5LIB': 'lib'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb index 77fe169073..c6a5e3fa14 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.6.12-Java-1.7.0_80.eb @@ -31,9 +31,7 @@ sanity_check_paths = { 'dirs': [] } -modextravars = { - 'WEKAINSTALL': '$root', -} +modextravars = {'WEKAINSTALL': '%(installdir)s'} modloadmsg = "execute WEKA: java -jar $EBROOTWEKA/weka.jar\n" diff --git a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb index 70198200d8..96ac9d6530 100644 --- a/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/w/WEKA/WEKA-3.7.0-Java-1.7.0_80.eb @@ -31,9 +31,7 @@ sanity_check_paths = { 'dirs': [] } -modextravars = { - 'WEKAINSTALL': '$root', -} +modextravars = {'WEKAINSTALL': '%(installdir)s'} modloadmsg = "execute WEKA: java -jar $EBROOTWEKA/weka.jar\n" -- GitLab From 7b5bab1965fb311d42f87d63078aa80dad41820f Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 10 Mar 2017 15:25:56 +0200 Subject: [PATCH 0694/1311] adding easyconfigs: Yasm-1.3.0-foss-2017a.eb, Yasm-1.3.0-intel-2017a.eb --- .../y/Yasm/Yasm-1.3.0-foss-2017a.eb | 31 +++++++++++++++++++ .../y/Yasm/Yasm-1.3.0-intel-2017a.eb | 31 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2017a.eb create mode 100644 easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2017a.eb b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2017a.eb new file mode 100644 index 0000000000..bae739cbfa --- /dev/null +++ b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-foss-2017a.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-90.html +## + +easyblock = 'ConfigureMake' + +name = 'Yasm' +version = '1.3.0' + +homepage = 'http://www.tortall.net/projects/yasm/' +description = """Yasm: Complete rewrite of the NASM assembler with BSD license""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.tortall.net/projects/yasm/releases/'] + +sanity_check_paths = { + 'files': ['bin/yasm'], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-intel-2017a.eb b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-intel-2017a.eb new file mode 100644 index 0000000000..f0db7e8256 --- /dev/null +++ b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-intel-2017a.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-90.html +## + +easyblock = 'ConfigureMake' + +name = 'Yasm' +version = '1.3.0' + +homepage = 'http://www.tortall.net/projects/yasm/' +description = """Yasm: Complete rewrite of the NASM assembler with BSD license""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.tortall.net/projects/yasm/releases/'] + +sanity_check_paths = { + 'files': ['bin/yasm'], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From 7ab680ea704aa1db04f7db38635b33a760437b9a Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Fri, 10 Mar 2017 16:56:47 +0200 Subject: [PATCH 0695/1311] The patch is the result of applying the upstream patch and running the maintainer scripts to regenerate the interface files. --- .../f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch | 1527 +++++++++++++++++ .../f/FFTW/FFTW-3.3.6-gompi-2017a.eb | 4 + .../f/FFTW/FFTW-3.3.6-intel-2017a.eb | 29 + 3 files changed, 1560 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch new file mode 100644 index 0000000000..70d5168fbf --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch @@ -0,0 +1,1527 @@ +# The scrips that generate the MPI F03 interface was broken in 3.3.6-pl1 +# The scripts were using fftw3.h from /usr/include, not ../api, and were +# failing silently if fftw3.h was not installed. This bug led to a +# fftw-3.3.6pl1 release with incomplete mpi/f03 header files. +# See commit 83092f8efbf872aefe7cfc6ee8fa43412f8e167a in FFTW upstream +# git. +# +# This patch is the result of applying that commit and running the +# maintainer mode scripts. +# +# Åke Sandgrem 2017-03-07 +diff -ru fftw-3.3.6-pl1.orig/mpi/f03api.sh fftw-3.3.6-pl1/mpi/f03api.sh +--- fftw-3.3.6-pl1.orig/mpi/f03api.sh 2017-01-15 13:03:24.000000002 +0100 ++++ fftw-3.3.6-pl1/mpi/f03api.sh 2017-03-08 15:46:56.000000002 +0100 +@@ -37,7 +37,7 @@ + + echo + echo " interface" +- grep -v 'mpi.h' fftw3-mpi.h | gcc -D__GNUC__=5 -D__i386__ -E - |grep "fftw${p}_mpi_init" |tr ';' '\n' | perl ../api/genf03.pl ++ grep -v 'mpi.h' fftw3-mpi.h | gcc -I../api -D__GNUC__=5 -D__i386__ -E - |grep "fftw${p}_mpi_init" |tr ';' '\n' | perl ../api/genf03.pl + echo " end interface" + + done +diff -ru fftw-3.3.6-pl1.orig/mpi/f03-wrap.c fftw-3.3.6-pl1/mpi/f03-wrap.c +--- fftw-3.3.6-pl1.orig/mpi/f03-wrap.c 2017-01-16 15:12:37.000000002 +0100 ++++ fftw-3.3.6-pl1/mpi/f03-wrap.c 2017-03-08 16:20:11.000000002 +0100 +@@ -3,3 +3,282 @@ + #include "fftw3-mpi.h" + #include "ifftw-mpi.h" + ++FFTW_EXTERN ptrdiff_t XM(local_size_many_transposed_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block0, ptrdiff_t block1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_many_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block0, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_transposed_f03)(int rnk, const ptrdiff_t * n, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_f03)(int rnk, const ptrdiff_t * n, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_many_1d_f03)(ptrdiff_t n0, ptrdiff_t howmany, MPI_Fint f_comm, int sign, unsigned flags, ptrdiff_t * local_ni, ptrdiff_t * local_i_start, ptrdiff_t * local_no, ptrdiff_t * local_o_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_1d_f03)(ptrdiff_t n0, MPI_Fint f_comm, int sign, unsigned flags, ptrdiff_t * local_ni, ptrdiff_t * local_i_start, ptrdiff_t * local_no, ptrdiff_t * local_o_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_2d_transposed_f03)(ptrdiff_t n0, ptrdiff_t n1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start); ++FFTW_EXTERN ptrdiff_t XM(local_size_3d_transposed_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start); ++FFTW_EXTERN X(plan) XM(plan_many_transpose_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t howmany, ptrdiff_t block0, ptrdiff_t block1, R * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_transpose_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_many_dft_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block, ptrdiff_t tblock, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_f03)(int rnk, const ptrdiff_t * n, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_1d_f03)(ptrdiff_t n0, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_many_r2r_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, R * in, R * out, MPI_Fint f_comm, const X(r2r_kind) * kind, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_r2r_f03)(int rnk, const ptrdiff_t * n, R * in, R * out, MPI_Fint f_comm, const X(r2r_kind) * kind, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_r2r_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, R * out, MPI_Fint f_comm, X(r2r_kind) kind0, X(r2r_kind) kind1, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_r2r_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, R * in, R * out, MPI_Fint f_comm, X(r2r_kind) kind0, X(r2r_kind) kind1, X(r2r_kind) kind2, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_many_dft_r2c_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_r2c_f03)(int rnk, const ptrdiff_t * n, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_r2c_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_r2c_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_many_dft_c2r_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_c2r_f03)(int rnk, const ptrdiff_t * n, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_c2r_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN X(plan) XM(plan_dft_c2r_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags); ++FFTW_EXTERN void XM(gather_wisdom_f03)(MPI_Fint f_comm_); ++FFTW_EXTERN void XM(broadcast_wisdom_f03)(MPI_Fint f_comm_); ++ ++ptrdiff_t XM(local_size_many_transposed_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block0, ptrdiff_t block1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_many_transposed)(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start,local_n1,local_1_start); ++} ++ ++ptrdiff_t XM(local_size_many_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block0, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_many)(rnk,n,howmany,block0,comm,local_n0,local_0_start); ++} ++ ++ptrdiff_t XM(local_size_transposed_f03)(int rnk, const ptrdiff_t * n, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_transposed)(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start); ++} ++ ++ptrdiff_t XM(local_size_f03)(int rnk, const ptrdiff_t * n, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size)(rnk,n,comm,local_n0,local_0_start); ++} ++ ++ptrdiff_t XM(local_size_many_1d_f03)(ptrdiff_t n0, ptrdiff_t howmany, MPI_Fint f_comm, int sign, unsigned flags, ptrdiff_t * local_ni, ptrdiff_t * local_i_start, ptrdiff_t * local_no, ptrdiff_t * local_o_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_many_1d)(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start); ++} ++ ++ptrdiff_t XM(local_size_1d_f03)(ptrdiff_t n0, MPI_Fint f_comm, int sign, unsigned flags, ptrdiff_t * local_ni, ptrdiff_t * local_i_start, ptrdiff_t * local_no, ptrdiff_t * local_o_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_1d)(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start); ++} ++ ++ptrdiff_t XM(local_size_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_2d)(n0,n1,comm,local_n0,local_0_start); ++} ++ ++ptrdiff_t XM(local_size_2d_transposed_f03)(ptrdiff_t n0, ptrdiff_t n1, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_2d_transposed)(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start); ++} ++ ++ptrdiff_t XM(local_size_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_3d)(n0,n1,n2,comm,local_n0,local_0_start); ++} ++ ++ptrdiff_t XM(local_size_3d_transposed_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, MPI_Fint f_comm, ptrdiff_t * local_n0, ptrdiff_t * local_0_start, ptrdiff_t * local_n1, ptrdiff_t * local_1_start) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(local_size_3d_transposed)(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start); ++} ++ ++X(plan) XM(plan_many_transpose_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t howmany, ptrdiff_t block0, ptrdiff_t block1, R * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_many_transpose)(n0,n1,howmany,block0,block1,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_transpose_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_transpose)(n0,n1,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_many_dft_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t block, ptrdiff_t tblock, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_many_dft)(rnk,n,howmany,block,tblock,in,out,comm,sign,flags); ++} ++ ++X(plan) XM(plan_dft_f03)(int rnk, const ptrdiff_t * n, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft)(rnk,n,in,out,comm,sign,flags); ++} ++ ++X(plan) XM(plan_dft_1d_f03)(ptrdiff_t n0, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_1d)(n0,in,out,comm,sign,flags); ++} ++ ++X(plan) XM(plan_dft_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_2d)(n0,n1,in,out,comm,sign,flags); ++} ++ ++X(plan) XM(plan_dft_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, X(complex) * in, X(complex) * out, MPI_Fint f_comm, int sign, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_3d)(n0,n1,n2,in,out,comm,sign,flags); ++} ++ ++X(plan) XM(plan_many_r2r_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, R * in, R * out, MPI_Fint f_comm, const X(r2r_kind) * kind, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_many_r2r)(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags); ++} ++ ++X(plan) XM(plan_r2r_f03)(int rnk, const ptrdiff_t * n, R * in, R * out, MPI_Fint f_comm, const X(r2r_kind) * kind, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_r2r)(rnk,n,in,out,comm,kind,flags); ++} ++ ++X(plan) XM(plan_r2r_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, R * out, MPI_Fint f_comm, X(r2r_kind) kind0, X(r2r_kind) kind1, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_r2r_2d)(n0,n1,in,out,comm,kind0,kind1,flags); ++} ++ ++X(plan) XM(plan_r2r_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, R * in, R * out, MPI_Fint f_comm, X(r2r_kind) kind0, X(r2r_kind) kind1, X(r2r_kind) kind2, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_r2r_3d)(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags); ++} ++ ++X(plan) XM(plan_many_dft_r2c_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_many_dft_r2c)(rnk,n,howmany,iblock,oblock,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_r2c_f03)(int rnk, const ptrdiff_t * n, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_r2c)(rnk,n,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_r2c_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_r2c_2d)(n0,n1,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_r2c_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, R * in, X(complex) * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_r2c_3d)(n0,n1,n2,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_many_dft_c2r_f03)(int rnk, const ptrdiff_t * n, ptrdiff_t howmany, ptrdiff_t iblock, ptrdiff_t oblock, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_many_dft_c2r)(rnk,n,howmany,iblock,oblock,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_c2r_f03)(int rnk, const ptrdiff_t * n, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_c2r)(rnk,n,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_c2r_2d_f03)(ptrdiff_t n0, ptrdiff_t n1, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_c2r_2d)(n0,n1,in,out,comm,flags); ++} ++ ++X(plan) XM(plan_dft_c2r_3d_f03)(ptrdiff_t n0, ptrdiff_t n1, ptrdiff_t n2, X(complex) * in, R * out, MPI_Fint f_comm, unsigned flags) ++{ ++ MPI_Comm comm; ++ ++ comm = MPI_Comm_f2c(f_comm); ++ return XM(plan_dft_c2r_3d)(n0,n1,n2,in,out,comm,flags); ++} ++ ++void XM(gather_wisdom_f03)(MPI_Fint f_comm_) ++{ ++ MPI_Comm comm_; ++ ++ comm_ = MPI_Comm_f2c(f_comm_); ++ XM(gather_wisdom)(comm_); ++} ++ ++void XM(broadcast_wisdom_f03)(MPI_Fint f_comm_) ++{ ++ MPI_Comm comm_; ++ ++ comm_ = MPI_Comm_f2c(f_comm_); ++ XM(broadcast_wisdom)(comm_); ++} +diff -ru fftw-3.3.6-pl1.orig/mpi/f03-wrap.sh fftw-3.3.6-pl1/mpi/f03-wrap.sh +--- fftw-3.3.6-pl1.orig/mpi/f03-wrap.sh 2017-01-15 13:03:24.000000002 +0100 ++++ fftw-3.3.6-pl1/mpi/f03-wrap.sh 2017-03-08 15:46:56.000000002 +0100 +@@ -15,8 +15,8 @@ + echo + + # Declare prototypes using FFTW_EXTERN, important for Windows DLLs +-grep -v 'mpi.h' fftw3-mpi.h | gcc -E - |grep "fftw_mpi_init" |tr ';' '\n' | grep "MPI_Comm" | perl genf03-wrap.pl | grep "MPI_Fint" | sed 's/^/FFTW_EXTERN /;s/$/;/' ++grep -v 'mpi.h' fftw3-mpi.h | gcc -E -I../api - |grep "fftw_mpi_init" |tr ';' '\n' | grep "MPI_Comm" | perl genf03-wrap.pl | grep "MPI_Fint" | sed 's/^/FFTW_EXTERN /;s/$/;/' + +-grep -v 'mpi.h' fftw3-mpi.h | gcc -E - |grep "fftw_mpi_init" |tr ';' '\n' | grep "MPI_Comm" | perl genf03-wrap.pl ++grep -v 'mpi.h' fftw3-mpi.h | gcc -E -I../api - |grep "fftw_mpi_init" |tr ';' '\n' | grep "MPI_Comm" | perl genf03-wrap.pl + + +diff -ru fftw-3.3.6-pl1.orig/mpi/fftw3l-mpi.f03.in fftw-3.3.6-pl1/mpi/fftw3l-mpi.f03.in +--- fftw-3.3.6-pl1.orig/mpi/fftw3l-mpi.f03.in 2017-01-16 15:12:37.000000002 +0100 ++++ fftw-3.3.6-pl1/mpi/fftw3l-mpi.f03.in 2017-03-08 16:20:11.000000002 +0100 +@@ -8,4 +8,398 @@ + end type fftwl_mpi_ddim + + interface ++ subroutine fftwl_mpi_init() bind(C, name='fftwl_mpi_init') ++ import ++ end subroutine fftwl_mpi_init ++ ++ subroutine fftwl_mpi_cleanup() bind(C, name='fftwl_mpi_cleanup') ++ import ++ end subroutine fftwl_mpi_cleanup ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_many_transposed(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start, & ++ local_n1,local_1_start) & ++ bind(C, name='fftwl_mpi_local_size_many_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwl_mpi_local_size_many_transposed ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_many(rnk,n,howmany,block0,comm,local_n0,local_0_start) & ++ bind(C, name='fftwl_mpi_local_size_many_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwl_mpi_local_size_many ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_transposed(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwl_mpi_local_size_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwl_mpi_local_size_transposed ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size(rnk,n,comm,local_n0,local_0_start) bind(C, name='fftwl_mpi_local_size_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwl_mpi_local_size ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_many_1d(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no, & ++ local_o_start) bind(C, name='fftwl_mpi_local_size_many_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftwl_mpi_local_size_many_1d ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_1d(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start) & ++ bind(C, name='fftwl_mpi_local_size_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftwl_mpi_local_size_1d ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_2d(n0,n1,comm,local_n0,local_0_start) & ++ bind(C, name='fftwl_mpi_local_size_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwl_mpi_local_size_2d ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_2d_transposed(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwl_mpi_local_size_2d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwl_mpi_local_size_2d_transposed ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_3d(n0,n1,n2,comm,local_n0,local_0_start) & ++ bind(C, name='fftwl_mpi_local_size_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwl_mpi_local_size_3d ++ ++ integer(C_INTPTR_T) function fftwl_mpi_local_size_3d_transposed(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwl_mpi_local_size_3d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwl_mpi_local_size_3d_transposed ++ ++ type(C_PTR) function fftwl_mpi_plan_many_transpose(n0,n1,howmany,block0,block1,in,out,comm,flags) & ++ bind(C, name='fftwl_mpi_plan_many_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_many_transpose ++ ++ type(C_PTR) function fftwl_mpi_plan_transpose(n0,n1,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_transpose ++ ++ type(C_PTR) function fftwl_mpi_plan_many_dft(rnk,n,howmany,block,tblock,in,out,comm,sign,flags) & ++ bind(C, name='fftwl_mpi_plan_many_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block ++ integer(C_INTPTR_T), value :: tblock ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_many_dft ++ ++ type(C_PTR) function fftwl_mpi_plan_dft(rnk,n,in,out,comm,sign,flags) bind(C, name='fftwl_mpi_plan_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_1d(n0,in,out,comm,sign,flags) bind(C, name='fftwl_mpi_plan_dft_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_1d ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_2d(n0,n1,in,out,comm,sign,flags) bind(C, name='fftwl_mpi_plan_dft_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_2d ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_3d(n0,n1,n2,in,out,comm,sign,flags) bind(C, name='fftwl_mpi_plan_dft_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_3d ++ ++ type(C_PTR) function fftwl_mpi_plan_many_r2r(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags) & ++ bind(C, name='fftwl_mpi_plan_many_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_many_r2r ++ ++ type(C_PTR) function fftwl_mpi_plan_r2r(rnk,n,in,out,comm,kind,flags) bind(C, name='fftwl_mpi_plan_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_r2r ++ ++ type(C_PTR) function fftwl_mpi_plan_r2r_2d(n0,n1,in,out,comm,kind0,kind1,flags) bind(C, name='fftwl_mpi_plan_r2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_r2r_2d ++ ++ type(C_PTR) function fftwl_mpi_plan_r2r_3d(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags) & ++ bind(C, name='fftwl_mpi_plan_r2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_FFTW_R2R_KIND), value :: kind2 ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_r2r_3d ++ ++ type(C_PTR) function fftwl_mpi_plan_many_dft_r2c(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftwl_mpi_plan_many_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_many_dft_r2c ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_r2c(rnk,n,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_r2c ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_r2c_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_r2c_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_r2c_2d ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_r2c_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_r2c_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_r2c_3d ++ ++ type(C_PTR) function fftwl_mpi_plan_many_dft_c2r(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftwl_mpi_plan_many_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_many_dft_c2r ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_c2r(rnk,n,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_c2r ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_c2r_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_c2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_c2r_2d ++ ++ type(C_PTR) function fftwl_mpi_plan_dft_c2r_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwl_mpi_plan_dft_c2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwl_mpi_plan_dft_c2r_3d ++ ++ subroutine fftwl_mpi_gather_wisdom(comm_) bind(C, name='fftwl_mpi_gather_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftwl_mpi_gather_wisdom ++ ++ subroutine fftwl_mpi_broadcast_wisdom(comm_) bind(C, name='fftwl_mpi_broadcast_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftwl_mpi_broadcast_wisdom ++ ++ subroutine fftwl_mpi_execute_dft(p,in,out) bind(C, name='fftwl_mpi_execute_dft') ++ import ++ type(C_PTR), value :: p ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftwl_mpi_execute_dft ++ ++ subroutine fftwl_mpi_execute_dft_r2c(p,in,out) bind(C, name='fftwl_mpi_execute_dft_r2c') ++ import ++ type(C_PTR), value :: p ++ real(C_LONG_DOUBLE), dimension(*), intent(inout) :: in ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftwl_mpi_execute_dft_r2c ++ ++ subroutine fftwl_mpi_execute_dft_c2r(p,in,out) bind(C, name='fftwl_mpi_execute_dft_c2r') ++ import ++ type(C_PTR), value :: p ++ complex(C_LONG_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ end subroutine fftwl_mpi_execute_dft_c2r ++ ++ subroutine fftwl_mpi_execute_r2r(p,in,out) bind(C, name='fftwl_mpi_execute_r2r') ++ import ++ type(C_PTR), value :: p ++ real(C_LONG_DOUBLE), dimension(*), intent(inout) :: in ++ real(C_LONG_DOUBLE), dimension(*), intent(out) :: out ++ end subroutine fftwl_mpi_execute_r2r ++ + end interface +diff -ru fftw-3.3.6-pl1.orig/mpi/fftw3-mpi.f03.in fftw-3.3.6-pl1/mpi/fftw3-mpi.f03.in +--- fftw-3.3.6-pl1.orig/mpi/fftw3-mpi.f03.in 2017-01-16 15:12:37.000000002 +0100 ++++ fftw-3.3.6-pl1/mpi/fftw3-mpi.f03.in 2017-03-08 16:20:11.000000002 +0100 +@@ -13,6 +13,399 @@ + end type fftw_mpi_ddim + + interface ++ subroutine fftw_mpi_init() bind(C, name='fftw_mpi_init') ++ import ++ end subroutine fftw_mpi_init ++ ++ subroutine fftw_mpi_cleanup() bind(C, name='fftw_mpi_cleanup') ++ import ++ end subroutine fftw_mpi_cleanup ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_many_transposed(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start, & ++ local_n1,local_1_start) & ++ bind(C, name='fftw_mpi_local_size_many_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftw_mpi_local_size_many_transposed ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_many(rnk,n,howmany,block0,comm,local_n0,local_0_start) & ++ bind(C, name='fftw_mpi_local_size_many_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftw_mpi_local_size_many ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_transposed(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftw_mpi_local_size_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftw_mpi_local_size_transposed ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size(rnk,n,comm,local_n0,local_0_start) bind(C, name='fftw_mpi_local_size_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftw_mpi_local_size ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_many_1d(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no, & ++ local_o_start) bind(C, name='fftw_mpi_local_size_many_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftw_mpi_local_size_many_1d ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_1d(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start) & ++ bind(C, name='fftw_mpi_local_size_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftw_mpi_local_size_1d ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_2d(n0,n1,comm,local_n0,local_0_start) & ++ bind(C, name='fftw_mpi_local_size_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftw_mpi_local_size_2d ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_2d_transposed(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftw_mpi_local_size_2d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftw_mpi_local_size_2d_transposed ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_3d(n0,n1,n2,comm,local_n0,local_0_start) & ++ bind(C, name='fftw_mpi_local_size_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftw_mpi_local_size_3d ++ ++ integer(C_INTPTR_T) function fftw_mpi_local_size_3d_transposed(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftw_mpi_local_size_3d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftw_mpi_local_size_3d_transposed ++ ++ type(C_PTR) function fftw_mpi_plan_many_transpose(n0,n1,howmany,block0,block1,in,out,comm,flags) & ++ bind(C, name='fftw_mpi_plan_many_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_many_transpose ++ ++ type(C_PTR) function fftw_mpi_plan_transpose(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_transpose ++ ++ type(C_PTR) function fftw_mpi_plan_many_dft(rnk,n,howmany,block,tblock,in,out,comm,sign,flags) & ++ bind(C, name='fftw_mpi_plan_many_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block ++ integer(C_INTPTR_T), value :: tblock ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_many_dft ++ ++ type(C_PTR) function fftw_mpi_plan_dft(rnk,n,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft ++ ++ type(C_PTR) function fftw_mpi_plan_dft_1d(n0,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_1d ++ ++ type(C_PTR) function fftw_mpi_plan_dft_2d(n0,n1,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_2d ++ ++ type(C_PTR) function fftw_mpi_plan_dft_3d(n0,n1,n2,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_3d ++ ++ type(C_PTR) function fftw_mpi_plan_many_r2r(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags) & ++ bind(C, name='fftw_mpi_plan_many_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_many_r2r ++ ++ type(C_PTR) function fftw_mpi_plan_r2r(rnk,n,in,out,comm,kind,flags) bind(C, name='fftw_mpi_plan_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_r2r ++ ++ type(C_PTR) function fftw_mpi_plan_r2r_2d(n0,n1,in,out,comm,kind0,kind1,flags) bind(C, name='fftw_mpi_plan_r2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_r2r_2d ++ ++ type(C_PTR) function fftw_mpi_plan_r2r_3d(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags) bind(C, name='fftw_mpi_plan_r2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_FFTW_R2R_KIND), value :: kind2 ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_r2r_3d ++ ++ type(C_PTR) function fftw_mpi_plan_many_dft_r2c(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftw_mpi_plan_many_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_many_dft_r2c ++ ++ type(C_PTR) function fftw_mpi_plan_dft_r2c(rnk,n,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_r2c ++ ++ type(C_PTR) function fftw_mpi_plan_dft_r2c_2d(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_r2c_2d ++ ++ type(C_PTR) function fftw_mpi_plan_dft_r2c_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_DOUBLE), dimension(*), intent(out) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_r2c_3d ++ ++ type(C_PTR) function fftw_mpi_plan_many_dft_c2r(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftw_mpi_plan_many_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_many_dft_c2r ++ ++ type(C_PTR) function fftw_mpi_plan_dft_c2r(rnk,n,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_c2r ++ ++ type(C_PTR) function fftw_mpi_plan_dft_c2r_2d(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_c2r_2d ++ ++ type(C_PTR) function fftw_mpi_plan_dft_c2r_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftw_mpi_plan_dft_c2r_3d ++ ++ subroutine fftw_mpi_gather_wisdom(comm_) bind(C, name='fftw_mpi_gather_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftw_mpi_gather_wisdom ++ ++ subroutine fftw_mpi_broadcast_wisdom(comm_) bind(C, name='fftw_mpi_broadcast_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftw_mpi_broadcast_wisdom ++ ++ subroutine fftw_mpi_execute_dft(p,in,out) bind(C, name='fftw_mpi_execute_dft') ++ import ++ type(C_PTR), value :: p ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftw_mpi_execute_dft ++ ++ subroutine fftw_mpi_execute_dft_r2c(p,in,out) bind(C, name='fftw_mpi_execute_dft_r2c') ++ import ++ type(C_PTR), value :: p ++ real(C_DOUBLE), dimension(*), intent(inout) :: in ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftw_mpi_execute_dft_r2c ++ ++ subroutine fftw_mpi_execute_dft_c2r(p,in,out) bind(C, name='fftw_mpi_execute_dft_c2r') ++ import ++ type(C_PTR), value :: p ++ complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ end subroutine fftw_mpi_execute_dft_c2r ++ ++ subroutine fftw_mpi_execute_r2r(p,in,out) bind(C, name='fftw_mpi_execute_r2r') ++ import ++ type(C_PTR), value :: p ++ real(C_DOUBLE), dimension(*), intent(inout) :: in ++ real(C_DOUBLE), dimension(*), intent(out) :: out ++ end subroutine fftw_mpi_execute_r2r ++ + end interface + + type, bind(C) :: fftwf_mpi_ddim +@@ -20,4 +413,398 @@ + end type fftwf_mpi_ddim + + interface ++ subroutine fftwf_mpi_init() bind(C, name='fftwf_mpi_init') ++ import ++ end subroutine fftwf_mpi_init ++ ++ subroutine fftwf_mpi_cleanup() bind(C, name='fftwf_mpi_cleanup') ++ import ++ end subroutine fftwf_mpi_cleanup ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_many_transposed(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start, & ++ local_n1,local_1_start) & ++ bind(C, name='fftwf_mpi_local_size_many_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwf_mpi_local_size_many_transposed ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_many(rnk,n,howmany,block0,comm,local_n0,local_0_start) & ++ bind(C, name='fftwf_mpi_local_size_many_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwf_mpi_local_size_many ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_transposed(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwf_mpi_local_size_transposed_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwf_mpi_local_size_transposed ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size(rnk,n,comm,local_n0,local_0_start) bind(C, name='fftwf_mpi_local_size_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwf_mpi_local_size ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_many_1d(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no, & ++ local_o_start) bind(C, name='fftwf_mpi_local_size_many_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftwf_mpi_local_size_many_1d ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_1d(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start) & ++ bind(C, name='fftwf_mpi_local_size_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ integer(C_INTPTR_T), intent(out) :: local_ni ++ integer(C_INTPTR_T), intent(out) :: local_i_start ++ integer(C_INTPTR_T), intent(out) :: local_no ++ integer(C_INTPTR_T), intent(out) :: local_o_start ++ end function fftwf_mpi_local_size_1d ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_2d(n0,n1,comm,local_n0,local_0_start) & ++ bind(C, name='fftwf_mpi_local_size_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwf_mpi_local_size_2d ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_2d_transposed(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwf_mpi_local_size_2d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwf_mpi_local_size_2d_transposed ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_3d(n0,n1,n2,comm,local_n0,local_0_start) & ++ bind(C, name='fftwf_mpi_local_size_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ end function fftwf_mpi_local_size_3d ++ ++ integer(C_INTPTR_T) function fftwf_mpi_local_size_3d_transposed(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start) & ++ bind(C, name='fftwf_mpi_local_size_3d_transposed_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INTPTR_T), intent(out) :: local_n0 ++ integer(C_INTPTR_T), intent(out) :: local_0_start ++ integer(C_INTPTR_T), intent(out) :: local_n1 ++ integer(C_INTPTR_T), intent(out) :: local_1_start ++ end function fftwf_mpi_local_size_3d_transposed ++ ++ type(C_PTR) function fftwf_mpi_plan_many_transpose(n0,n1,howmany,block0,block1,in,out,comm,flags) & ++ bind(C, name='fftwf_mpi_plan_many_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block0 ++ integer(C_INTPTR_T), value :: block1 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_many_transpose ++ ++ type(C_PTR) function fftwf_mpi_plan_transpose(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_transpose_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_transpose ++ ++ type(C_PTR) function fftwf_mpi_plan_many_dft(rnk,n,howmany,block,tblock,in,out,comm,sign,flags) & ++ bind(C, name='fftwf_mpi_plan_many_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: block ++ integer(C_INTPTR_T), value :: tblock ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_many_dft ++ ++ type(C_PTR) function fftwf_mpi_plan_dft(rnk,n,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_1d(n0,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_1d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_1d ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_2d(n0,n1,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_2d ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_3d(n0,n1,n2,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: sign ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_3d ++ ++ type(C_PTR) function fftwf_mpi_plan_many_r2r(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags) & ++ bind(C, name='fftwf_mpi_plan_many_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_many_r2r ++ ++ type(C_PTR) function fftwf_mpi_plan_r2r(rnk,n,in,out,comm,kind,flags) bind(C, name='fftwf_mpi_plan_r2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_r2r ++ ++ type(C_PTR) function fftwf_mpi_plan_r2r_2d(n0,n1,in,out,comm,kind0,kind1,flags) bind(C, name='fftwf_mpi_plan_r2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_r2r_2d ++ ++ type(C_PTR) function fftwf_mpi_plan_r2r_3d(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags) & ++ bind(C, name='fftwf_mpi_plan_r2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_FFTW_R2R_KIND), value :: kind0 ++ integer(C_FFTW_R2R_KIND), value :: kind1 ++ integer(C_FFTW_R2R_KIND), value :: kind2 ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_r2r_3d ++ ++ type(C_PTR) function fftwf_mpi_plan_many_dft_r2c(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftwf_mpi_plan_many_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_many_dft_r2c ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_r2c(rnk,n,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_r2c ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_r2c_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_r2c_2d ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_r2c_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ real(C_FLOAT), dimension(*), intent(out) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_r2c_3d ++ ++ type(C_PTR) function fftwf_mpi_plan_many_dft_c2r(rnk,n,howmany,iblock,oblock,in,out,comm,flags) & ++ bind(C, name='fftwf_mpi_plan_many_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ integer(C_INTPTR_T), value :: howmany ++ integer(C_INTPTR_T), value :: iblock ++ integer(C_INTPTR_T), value :: oblock ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_many_dft_c2r ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_c2r(rnk,n,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_f03') ++ import ++ integer(C_INT), value :: rnk ++ integer(C_INTPTR_T), dimension(*), intent(in) :: n ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_c2r ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_c2r_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_2d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_c2r_2d ++ ++ type(C_PTR) function fftwf_mpi_plan_dft_c2r_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_3d_f03') ++ import ++ integer(C_INTPTR_T), value :: n0 ++ integer(C_INTPTR_T), value :: n1 ++ integer(C_INTPTR_T), value :: n2 ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ integer(C_MPI_FINT), value :: comm ++ integer(C_INT), value :: flags ++ end function fftwf_mpi_plan_dft_c2r_3d ++ ++ subroutine fftwf_mpi_gather_wisdom(comm_) bind(C, name='fftwf_mpi_gather_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftwf_mpi_gather_wisdom ++ ++ subroutine fftwf_mpi_broadcast_wisdom(comm_) bind(C, name='fftwf_mpi_broadcast_wisdom_f03') ++ import ++ integer(C_MPI_FINT), value :: comm_ ++ end subroutine fftwf_mpi_broadcast_wisdom ++ ++ subroutine fftwf_mpi_execute_dft(p,in,out) bind(C, name='fftwf_mpi_execute_dft') ++ import ++ type(C_PTR), value :: p ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftwf_mpi_execute_dft ++ ++ subroutine fftwf_mpi_execute_dft_r2c(p,in,out) bind(C, name='fftwf_mpi_execute_dft_r2c') ++ import ++ type(C_PTR), value :: p ++ real(C_FLOAT), dimension(*), intent(inout) :: in ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out ++ end subroutine fftwf_mpi_execute_dft_r2c ++ ++ subroutine fftwf_mpi_execute_dft_c2r(p,in,out) bind(C, name='fftwf_mpi_execute_dft_c2r') ++ import ++ type(C_PTR), value :: p ++ complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ end subroutine fftwf_mpi_execute_dft_c2r ++ ++ subroutine fftwf_mpi_execute_r2r(p,in,out) bind(C, name='fftwf_mpi_execute_r2r') ++ import ++ type(C_PTR), value :: p ++ real(C_FLOAT), dimension(*), intent(inout) :: in ++ real(C_FLOAT), dimension(*), intent(out) :: out ++ end subroutine fftwf_mpi_execute_r2r ++ + end interface diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb index 039c1bb824..4325e0c729 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb @@ -12,6 +12,10 @@ source_urls = [homepage] sources = ['fftw-%(version)s-pl1.tar.gz'] checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] +patches = [ + 'FFTW-3.3.6-F03_interface_pl2.patch', +] + runtest = 'check' moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb new file mode 100644 index 0000000000..07c5fa9224 --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb @@ -0,0 +1,29 @@ +name = 'FFTW' +version = '3.3.6' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [homepage] +sources = ['fftw-%(version)s-pl1.tar.gz'] +checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] + +patches = [ + 'FFTW-3.3.6-F03_interface_pl2.patch', +] + +# no quad precision, requires GCC v4.6 or higher +# see also +# http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html +with_quad_prec = False + +# compilation fails when configuring with --enable-avx-128-fma +use_fma = False + +runtest = 'check' + +moduleclass = 'numlib' -- GitLab From 4c1ce458d807fa27d47c7f301c47abd4c02fdf9d Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Sun, 12 Mar 2017 11:59:46 +1030 Subject: [PATCH 0696/1311] style --- easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb index 66babc415c..a58dae978a 100644 --- a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.2.1-foss-2016b.eb @@ -32,7 +32,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.so"], + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.%s" % SHLIB_EXT], 'dirs': [], } -- GitLab From fa1ffbce7c441662925f5042a6a427907f0f6285 Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Sun, 12 Mar 2017 13:14:35 +1030 Subject: [PATCH 0697/1311] Testing --- .../easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb index edf4ca1f37..1a66bb0381 100644 --- a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb @@ -6,7 +6,7 @@ # Authors:: Robert Qiao , Exe Escobedo # License:: # -# Notes:: +# Notes:: Testing ### easyblock = 'MakeCp' -- GitLab From 6f719a74f5ac27d67427c5cc6a1063745ced50ff Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Mon, 13 Mar 2017 09:08:33 +0200 Subject: [PATCH 0698/1311] Updated the patch with the URL to the upstream commit from fftw git. --- .../easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch index 70d5168fbf..f09a971da7 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-F03_interface_pl2.patch @@ -2,13 +2,15 @@ # The scripts were using fftw3.h from /usr/include, not ../api, and were # failing silently if fftw3.h was not installed. This bug led to a # fftw-3.3.6pl1 release with incomplete mpi/f03 header files. -# See commit 83092f8efbf872aefe7cfc6ee8fa43412f8e167a in FFTW upstream -# git. +# +# See commit +# https://github.com/FFTW/fftw3/commit/83092f8efbf872aefe7cfc6ee8fa43412f8e167a +# in FFTW upstream git. # # This patch is the result of applying that commit and running the # maintainer mode scripts. # -# Åke Sandgrem 2017-03-07 +# Åke Sandgren, 2017-03-07 diff -ru fftw-3.3.6-pl1.orig/mpi/f03api.sh fftw-3.3.6-pl1/mpi/f03api.sh --- fftw-3.3.6-pl1.orig/mpi/f03api.sh 2017-01-15 13:03:24.000000002 +0100 +++ fftw-3.3.6-pl1/mpi/f03api.sh 2017-03-08 15:46:56.000000002 +0100 -- GitLab From 4a0b7275c165adf41ab75b4d3fc1082f51388bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 09:05:20 +0100 Subject: [PATCH 0699/1311] {tools}LSMS-3_rev237 --- easybuild/easyconfigs/l/LSMS-3_rev237.eb | 31 ++++++ easybuild/easyconfigs/l/LSMS-Makefiles.patch | 106 +++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 easybuild/easyconfigs/l/LSMS-3_rev237.eb create mode 100644 easybuild/easyconfigs/l/LSMS-Makefiles.patch diff --git a/easybuild/easyconfigs/l/LSMS-3_rev237.eb b/easybuild/easyconfigs/l/LSMS-3_rev237.eb new file mode 100644 index 0000000000..014f9beea4 --- /dev/null +++ b/easybuild/easyconfigs/l/LSMS-3_rev237.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'LSMS' +version = '3_rev237' + +homepage = 'https://asc.llnl.gov/CORAL-benchmarks/#lsms' +description = "LSMS benchmark, part of CORAL suite" + +toolchain = {'name': 'foss', 'version': '2015g' } + +source_urls = ['https://asc.llnl.gov/CORAL-benchmarks/Science/'] +sources = ['%(name)s_%(version)s.tar.bz2'] + +checksums = ['8c864c9223b93488663815557e61cd0b'] + +patches = ['LSMS-Makefiles.patch'] + +files_to_copy = ['bin/lsms', 'bin/wl-lsms'] + +buildopts = '-j 1' + +dependencies = [ + ('HDF5', '1.8.16'), +] + +sanity_check_paths = { + 'files': ['lsms', 'wl-lsms'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/l/LSMS-Makefiles.patch b/easybuild/easyconfigs/l/LSMS-Makefiles.patch new file mode 100644 index 0000000000..5c1f5e5908 --- /dev/null +++ b/easybuild/easyconfigs/l/LSMS-Makefiles.patch @@ -0,0 +1,106 @@ +--- LSMS_3_rev237/CBLAS/Makefile 2012-02-09 20:17:00.000000000 +0100 ++++ LSMS_3_rev237_working/CBLAS/Makefile 2017-03-09 15:44:39.524649760 +0100 +@@ -1,6 +1,29 @@ + dlvl = ./. + include $(dlvl)/Makefile.in +-include ../architecture.h ++ ++# export USE_GPTL=1 ++export USE_OPENMP=1 ++ ++export ADD_LIBS += -L$(TOP_DIR)/lua/lib -L$(TOP_DIR)/CBLAS/lib/ -lcblas_LINUX -lmpi -lmpi_cxx -lhdf5 -lgfortran -lopenblas $(FPMPI_POST_LINK_OPTS) ++ ++export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(TOP_DIR)/lua/include ++ ++export ADDITIONAL_TARGETS = CBLAS_target ++ ++export BOOST_ROOT=$(TOP_DIR) ++ ++ ++ifdef USE_OPENMP ++ export CXX += -g -std=c++11 -I$(BOOST_ROOT) -fopenmp ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI -fopenmp ++ #export F77=ftn -fopenmp ++ export F77 += -fopenmp ++else ++ export CXX += -std=c++11 -I$(BOOST_ROOT) ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI ++ #export F77=ftn ++endif ++export LUACXX = $(CXX) + + all: alllib alltst + +--- LSMS_3_rev237/src/Test/buildKKRMatrixTest/Makefile 2012-02-15 19:41:17.000000000 +0100 ++++ LSMS_3_rev237_working/src/Test/buildKKRMatrixTest/Makefile 2017-03-09 15:47:04.088863802 +0100 +@@ -3,7 +3,29 @@ + export INC_PATH = + export LIBS := + +-include $(TOP_DIR)/architecture.h ++# export USE_GPTL=1 ++export USE_OPENMP=1 ++ ++export ADD_LIBS += -L$(TOP_DIR)/lua/lib -L$(TOP_DIR)/CBLAS/lib/ -lcblas_LINUX -lmpi -lmpi_cxx -lhdf5 -lgfortran -lopenblas $(FPMPI_POST_LINK_OPTS) ++ ++export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(TOP_DIR)/lua/include ++ ++export ADDITIONAL_TARGETS = CBLAS_target ++ ++export BOOST_ROOT=$(TOP_DIR) ++ ++ ++ifdef USE_OPENMP ++ export CXX += -g -std=c++11 -I$(BOOST_ROOT) -fopenmp ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI -fopenmp ++ #export F77=ftn -fopenmp ++ export F77 += -fopenmp ++else ++ export CXX += -std=c++11 -I$(BOOST_ROOT) ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI ++ #export F77=ftn ++endif ++export LUACXX = $(CXX) + + export INC_PATH += -I $(TOP_DIR)/include -I $(TOP_DIR)/src + export MISC = $(TOP_DIR)/src/Misc +--- LSMS_3_rev237/Makefile 2017-03-09 15:47:50.699882415 +0100 ++++ LSMS_3_rev237_working/Makefile 2017-03-09 14:58:44.845436772 +0100 +@@ -1,10 +1,35 @@ + + export TOP_DIR = $(shell pwd) +-export INC_PATH = + # export LIBS := -L$(TOP_DIR)/lua/lib -llua $(TOP_DIR)/mjson/mjson.a + export LIBS := $(TOP_DIR)/lua/lib/liblua.a $(TOP_DIR)/mjson/mjson.a + +-include architecture.h ++export CC = gcc ++export CXX = g++ ++export F77 = gfortran ++ ++# export USE_GPTL=1 ++export USE_OPENMP=1 ++ ++export ADD_LIBS += -L$(TOP_DIR)/lua/lib -L$(TOP_DIR)/CBLAS/lib/ -lcblas_LINUX -lmpi -lmpi_cxx -lhdf5 -lgfortran -lopenblas $(FPMPI_POST_LINK_OPTS) ++ ++export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(TOP_DIR)/lua/include ++ ++export ADDITIONAL_TARGETS = CBLAS_target ++ ++export BOOST_ROOT=$(TOP_DIR) ++ ++ ++ifdef USE_OPENMP ++ export CXX += -g -std=c++11 -I$(BOOST_ROOT) -fopenmp ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI -fopenmp ++ #export F77=ftn -fopenmp ++ export F77 += -fopenmp ++else ++ export CXX += -std=c++11 -I$(BOOST_ROOT) ++ #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI ++ #export F77=ftn ++endif ++export LUACXX = $(CXX) + + + all: liblua $(ADDITIONAL_TARGETS) libmjson LSMS -- GitLab From bc135bc82da4d927fa86526d64fac52b273fd338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 09:15:58 +0100 Subject: [PATCH 0700/1311] change directory and added toolchain to name --- .../l/{LSMS-3_rev237.eb => LSMS/LSMS-3_rev237-foss-2015g.eb} | 0 easybuild/easyconfigs/l/{ => LSMS}/LSMS-Makefiles.patch | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/l/{LSMS-3_rev237.eb => LSMS/LSMS-3_rev237-foss-2015g.eb} (100%) rename easybuild/easyconfigs/l/{ => LSMS}/LSMS-Makefiles.patch (100%) diff --git a/easybuild/easyconfigs/l/LSMS-3_rev237.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb similarity index 100% rename from easybuild/easyconfigs/l/LSMS-3_rev237.eb rename to easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb diff --git a/easybuild/easyconfigs/l/LSMS-Makefiles.patch b/easybuild/easyconfigs/l/LSMS/LSMS-Makefiles.patch similarity index 100% rename from easybuild/easyconfigs/l/LSMS-Makefiles.patch rename to easybuild/easyconfigs/l/LSMS/LSMS-Makefiles.patch -- GitLab From 12a958880fea5a3840959fada778f82ab132238f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 09:33:54 +0100 Subject: [PATCH 0701/1311] change $root to $root/bin --- .../easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb index 014f9beea4..c708bb19a4 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb @@ -15,17 +15,18 @@ checksums = ['8c864c9223b93488663815557e61cd0b'] patches = ['LSMS-Makefiles.patch'] -files_to_copy = ['bin/lsms', 'bin/wl-lsms'] +#files_to_copy = ['bin/lsms', 'bin/wl-lsms'] +files_to_copy = ['bin'] buildopts = '-j 1' -dependencies = [ - ('HDF5', '1.8.16'), +dependencies = [ + ('HDF5', '1.8.16'), ] sanity_check_paths = { - 'files': ['lsms', 'wl-lsms'], + 'files': ['bin/lsms', 'bin/wl-lsms'], 'dirs': [], } - + moduleclass = 'tools' -- GitLab From 8fe97272f49beba4d341c2b087eac159294f9606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 09:45:25 +0100 Subject: [PATCH 0702/1311] remove singularity --- .../Singularity-2.2.1-GCC-6.3.0-2.27.eb | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb deleted file mode 100644 index e1e43de48b..0000000000 --- a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb +++ /dev/null @@ -1,23 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'Singularity' -version = '2.2.1' - -homepage = 'http://gmkurtzer.github.io/singularity' -description = """Singularity is a portable application stack packaging and runtime utility.""" - -toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} - -source_urls = ['https://github.com/gmkurtzer/singularity/archive/'] -sources = ['%(version)s.tar.gz'] - -builddependencies = [('Autotools', '20150215')] - -preconfigopts = './autogen.sh && ' - -sanity_check_paths = { - 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', 'libexec/singularity/sexec-suid'], - 'dirs': ['etc', 'libexec/singularity'], -} - -moduleclass = 'tools' -- GitLab From c4732f5b681ee9ec959c2bf50470ff9c6b24704a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 10:09:46 +0100 Subject: [PATCH 0703/1311] add LSMS-3_rev237-foss-2016a --- .../l/LSMS/LSMS-3_rev237-foss-2016a.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb new file mode 100644 index 0000000000..ff6c8b7de3 --- /dev/null +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -0,0 +1,32 @@ +easyblock = 'MakeCp' + +name = 'LSMS' +version = '3_rev237' + +homepage = 'https://asc.llnl.gov/CORAL-benchmarks/#lsms' +description = "LSMS benchmark, part of CORAL suite" + +toolchain = {'name': 'foss', 'version': '2016a' } + +source_urls = ['https://asc.llnl.gov/CORAL-benchmarks/Science/'] +sources = ['%(name)s_%(version)s.tar.bz2'] + +checksums = ['8c864c9223b93488663815557e61cd0b'] + +patches = ['LSMS-Makefiles.patch'] + +#files_to_copy = ['bin/lsms', 'bin/wl-lsms'] +files_to_copy = ['bin'] + +buildopts = '-j 1' + +dependencies = [ + ('HDF5', '1.8.16'), +] + +sanity_check_paths = { + 'files': ['bin/lsms', 'bin/wl-lsms'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From a05f85ff643946fe8058d7a839a979093f2b7239 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Mon, 13 Mar 2017 11:31:59 +0200 Subject: [PATCH 0704/1311] adding easyconfigs: arpack-ng-3.4.0-foss-2017a.eb, arpack-ng-3.4.0-intel-2017a.eb --- .../a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb | 25 +++++++++++++++++++ .../arpack-ng/arpack-ng-3.4.0-intel-2017a.eb | 25 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb create mode 100644 easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb new file mode 100644 index 0000000000..12081625ca --- /dev/null +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'arpack-ng' +version = '3.4.0' + +homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/' +description = """ARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "sh bootstrap && " +configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' + +sanity_check_paths = { + 'files': ["lib/libarpack.a", "lib/libarpack.so"], + 'dirs': [] +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb new file mode 100644 index 0000000000..f92abdeafa --- /dev/null +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'arpack-ng' +version = '3.4.0' + +homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/' +description = """ARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "sh bootstrap && " +configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' + +sanity_check_paths = { + 'files': ["lib/libarpack.a", "lib/libarpack.so"], + 'dirs': [] +} + +moduleclass = 'numlib' -- GitLab From 587c000e0c2e3dfc7f6e6c6f03713a725841813f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 10:35:36 +0100 Subject: [PATCH 0705/1311] remove #... comment --- easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb | 1 - easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb | 1 - 2 files changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb index c708bb19a4..34bdeac5c9 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb @@ -15,7 +15,6 @@ checksums = ['8c864c9223b93488663815557e61cd0b'] patches = ['LSMS-Makefiles.patch'] -#files_to_copy = ['bin/lsms', 'bin/wl-lsms'] files_to_copy = ['bin'] buildopts = '-j 1' diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb index ff6c8b7de3..fa65d19eb5 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -15,7 +15,6 @@ checksums = ['8c864c9223b93488663815557e61cd0b'] patches = ['LSMS-Makefiles.patch'] -#files_to_copy = ['bin/lsms', 'bin/wl-lsms'] files_to_copy = ['bin'] buildopts = '-j 1' -- GitLab From 91015b03a8a9dd192e46e16e20c22a47a8d55c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 10:46:11 +0100 Subject: [PATCH 0706/1311] remove eb for LSMS-3_rev237-foss-2015g.eb --- .../l/LSMS/LSMS-3_rev237-foss-2015g.eb | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb deleted file mode 100644 index 34bdeac5c9..0000000000 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2015g.eb +++ /dev/null @@ -1,31 +0,0 @@ -easyblock = 'MakeCp' - -name = 'LSMS' -version = '3_rev237' - -homepage = 'https://asc.llnl.gov/CORAL-benchmarks/#lsms' -description = "LSMS benchmark, part of CORAL suite" - -toolchain = {'name': 'foss', 'version': '2015g' } - -source_urls = ['https://asc.llnl.gov/CORAL-benchmarks/Science/'] -sources = ['%(name)s_%(version)s.tar.bz2'] - -checksums = ['8c864c9223b93488663815557e61cd0b'] - -patches = ['LSMS-Makefiles.patch'] - -files_to_copy = ['bin'] - -buildopts = '-j 1' - -dependencies = [ - ('HDF5', '1.8.16'), -] - -sanity_check_paths = { - 'files': ['bin/lsms', 'bin/wl-lsms'], - 'dirs': [], -} - -moduleclass = 'tools' -- GitLab From 8b8979ea29dd134984613cb79ebbb6e54216e1f7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 10:50:16 +0100 Subject: [PATCH 0707/1311] adding easyconfigs: SWASH-4.01-intel-2017a-mpi.eb --- .../s/SWASH/SWASH-4.01-intel-2017a-mpi.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb new file mode 100644 index 0000000000..57c47cdddd --- /dev/null +++ b/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'SWASH' +version = '4.01' +versionsuffix = '-mpi' + +homepage = 'http://swash.sourceforge.net/' +description = """SWASH is a general-purpose numerical tool for simulating unsteady, non-hydrostatic, free-surface, + rotational flow and transport phenomena in coastal waters as driven by waves, tides, buoyancy and wind forces.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://swash.sourceforge.net/download/zip/'] +sources = [SOURCELOWER_TAR_GZ] + +prebuildopts = "unset FC && make config && " +buildopts = 'mpi' + +parallel = 1 + +files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] + +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + +sanity_check_paths = { + 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], + 'dirs': [], +} + +moduleclass = 'cae' -- GitLab From 5129611740578748995df814108c604e645b9f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 13 Mar 2017 10:56:56 +0100 Subject: [PATCH 0708/1311] fixed homepage and source_urls --- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb | 4 ++-- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb | 4 ++-- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb | 4 ++-- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb index 759ecb7840..3da591ce62 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'ViennaRNA' version = '2.0.7' -homepage = 'http://www.tbi.univie.ac.at/~ronny/RNA/vrna2.html' +homepage = 'http://www.tbi.univie.ac.at/RNA/' description = """The Vienna RNA Package consists of a C code library and several stand-alone programs for the prediction and comparison of RNA secondary structures.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_0_x/'] # Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. configopts = '--without-perl' diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb index f0b4020253..d13e7d8912 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'ViennaRNA' version = '2.0.7' -homepage = 'http://www.tbi.univie.ac.at/~ronny/RNA/vrna2.html' +homepage = 'http://www.tbi.univie.ac.at/RNA/' description = """The Vienna RNA Package consists of a C code library and several stand-alone programs for the prediction and comparison of RNA secondary structures.""" @@ -24,7 +24,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_0_x/'] patches = ['ViennaRNA_ictce-pragma.patch'] diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb index 106d2f71e3..3e54d3ed83 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'ViennaRNA' version = '2.1.6' -homepage = 'http://www.tbi.univie.ac.at/~ronny/RNA/vrna2.html' +homepage = 'http://www.tbi.univie.ac.at/RNA/' description = """The Vienna RNA Package consists of a C code library and several stand-alone programs for the prediction and comparison of RNA secondary structures.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA/packages/source'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_1_x/'] patches = ['ViennaRNA-2.1.6_ictce.patch'] diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb index 714f3edc9e..1988a82b1e 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb @@ -15,7 +15,7 @@ easyblock = 'ConfigureMake' name = 'ViennaRNA' version = '2.2.3' -homepage = 'http://www.tbi.univie.ac.at/~ronny/RNA/vrna2.html' +homepage = 'http://www.tbi.univie.ac.at/RNA/' description = """The Vienna RNA Package consists of a C code library and several stand-alone programs for the prediction and comparison of RNA secondary structures.""" @@ -23,7 +23,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'openmp': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/~ronny/RNA/packages/source'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_2_x/'] patches = ['ViennaRNA-%(version)s_fix-pragma.patch'] -- GitLab From 773a85389fae914ab1520ec122b738c621bc8cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 13 Mar 2017 10:57:22 +0100 Subject: [PATCH 0709/1311] added ViennaRNA-2.3.4-foss-2016b --- .../v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb new file mode 100644 index 0000000000..5b2bac1762 --- /dev/null +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb @@ -0,0 +1,36 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'ViennaRNA' +version = '2.3.4' + +homepage = 'http://www.tbi.univie.ac.at/RNA/' +description = """The Vienna RNA Package consists of a C code library and several +stand-alone programs for the prediction and comparison of RNA secondary structures.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_3_x/'] + +checksums = ['c77bff267606d22557a4f867df635822'] + +# Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. +configopts = '--without-perl' +# Alternatively, you may want to use the following to copy the perl-module to a "local" directory +# Code NOT yet tested, therefor left here for future recycling +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' + +sanity_check_paths = { + 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', + 'inverse', 'plot', 'subopt', 'Lfold', 'cofold', + 'paln', 'duplex', 'alifold', 'plfold', 'up', + 'aliduplex', 'Lalifold', '2Dfold', 'parconv', + 'PKplex', 'plex', 'snoop', 'forester']] + + ['bin/Kinfold'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From a3afeb3f7dcda784d5a8e79ebb8a7365edf912f9 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Mon, 13 Mar 2017 12:22:05 +0200 Subject: [PATCH 0710/1311] Use SHLIB_EXT instead of hardcoded ".so" --- easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb | 2 +- .../easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb index 12081625ca..f7c3095a50 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-foss-2017a.eb @@ -18,7 +18,7 @@ preconfigopts = "sh bootstrap && " configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' sanity_check_paths = { - 'files': ["lib/libarpack.a", "lib/libarpack.so"], + 'files': ["lib/libarpack.a", "lib/libarpack.%s" % SHLIB_EXT], 'dirs': [] } diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb index f92abdeafa..17c7254907 100644 --- a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.4.0-intel-2017a.eb @@ -18,7 +18,7 @@ preconfigopts = "sh bootstrap && " configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' sanity_check_paths = { - 'files': ["lib/libarpack.a", "lib/libarpack.so"], + 'files': ["lib/libarpack.a", "lib/libarpack.%s" % SHLIB_EXT], 'dirs': [] } -- GitLab From 6760a85f0f6e38d783af94b074b4c2d684bf579b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 11:22:55 +0100 Subject: [PATCH 0711/1311] pass $FFLAGS to $FLAGS_OPT for SWASH --- easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb index 57c47cdddd..58632f03e4 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-4.01-intel-2017a-mpi.eb @@ -15,7 +15,7 @@ source_urls = ['http://swash.sourceforge.net/download/zip/'] sources = [SOURCELOWER_TAR_GZ] prebuildopts = "unset FC && make config && " -buildopts = 'mpi' +buildopts = 'mpi FLAGS_OPT="$FFLAGS"' parallel = 1 -- GitLab From 7ed9150a0c5b3a194039f14ba74a46484abe55dd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 11:57:00 +0100 Subject: [PATCH 0712/1311] {lib}[intel/2016b] Tensorflow v1.0.1 w/ Python 2.7.12 + 3.5.2 --- ...sorflow-1.0.1-intel-2016b-Python-2.7.12.eb | 35 +++++++++++++++++++ ...nsorflow-1.0.1-intel-2016b-Python-3.5.2.eb | 35 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-2.7.12.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-2.7.12.eb new file mode 100755 index 0000000000..f1c3f15e89 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '1.0.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2016b'} + +pymaj = '2' +pymin = '7' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/7e/7c/f398393beab1647be0a5e6974b8a34e4ea2d3cb7bd9e38bd43a657ed27d1/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['5c88e656fcd34cd89d4cf48d3ec7dd67'] + +dependencies = [ + ('Python', '%s.%s.12' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb new file mode 100755 index 0000000000..2d9a2afe66 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '1.0.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2016b'} + +pymaj = '3' +pymin = '5' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/1f/38/c255432f18005362dd2459e3bff2b2411eb7d02ca09fa20ee1dd1311f69f/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['bccff4d9b87331d4dcecafa43c970b89'] + +dependencies = [ + ('Python', '%s.%s.2' % (pymaj, pymin)), + ('protobuf-python', '3.2.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From fe7e8ddf7a2583411547d522ce9b297a07bc9cb1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 11:59:35 +0100 Subject: [PATCH 0713/1311] fix sources spec for Tensorflow 1.0.1 w/ Python 3.5.2 --- .../t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb index 2d9a2afe66..42b703619c 100755 --- a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.0.1-intel-2016b-Python-3.5.2.eb @@ -15,7 +15,7 @@ pymajmin = pymaj + pymin source_urls = ['https://pypi.python.org/packages/1f/38/c255432f18005362dd2459e3bff2b2411eb7d02ca09fa20ee1dd1311f69f/'] sources = [ - 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)sm-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, ] checksums = ['bccff4d9b87331d4dcecafa43c970b89'] -- GitLab From 689d70e53f565ae1b0a6a5917182b633f72be48a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 13:24:33 +0100 Subject: [PATCH 0714/1311] pass down $FFLAGS via FLAGS_OPT in SWASH easyconfigs --- easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb | 2 +- easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb | 2 +- easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb index 767e04327d..c01885134c 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mpi.eb @@ -15,7 +15,7 @@ source_urls = ['http://swash.sourceforge.net/download/zip/'] sources = [SOURCELOWER_TAR_GZ] prebuildopts = "unset FC && make config && " -buildopts = 'mpi' +buildopts = 'mpi FLAGS_OPT="$FFLAGS"' parallel = 1 diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb index a9d434ebd1..b19bb39b27 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-mt.eb @@ -15,7 +15,7 @@ source_urls = ['http://swash.sourceforge.net/download/zip/'] sources = [SOURCELOWER_TAR_GZ] prebuildopts = "make config && " -buildopts = 'omp' +buildopts = 'omp FLAGS_OPT="$FFLAGS"' parallel = 1 diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb index ad04f26f31..1ff3f68105 100644 --- a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2015b-serial.eb @@ -14,7 +14,7 @@ source_urls = ['http://swash.sourceforge.net/download/zip/'] sources = [SOURCELOWER_TAR_GZ] prebuildopts = "make config && " -buildopts = 'ser' +buildopts = 'ser FLAGS_OPT="$FFLAGS"' parallel = 1 -- GitLab From d12d27667f6a522666539d2d5a0e44993c18b7d0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 13:47:47 +0100 Subject: [PATCH 0715/1311] adding easyconfigs: ImageJ-1.51k.eb --- .../easyconfigs/i/ImageJ/ImageJ-1.51k.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb diff --git a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb new file mode 100644 index 0000000000..ec975dfc22 --- /dev/null +++ b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb @@ -0,0 +1,40 @@ +easyblock = 'PackedBinary' + +name = 'ImageJ' +version = '1.51k' + +homepage = 'https://imagej.nih.gov/ij' +description = "Image Processing and Analysis in Java" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [ + 'https://imagej.nih.gov/ij/download/src/', + 'http://www.mecourse.com/landinig/software/', +] +sources = [ + 'ij%(version_major)s%(version_minor)s-src.zip', + 'morphology.zip', +] +checksums = [ + 'e7b634bd1d46cec7694a6990180c5cd9', # ij151k-src.zip + '21491b55bbef5cc50ebff495a4d2b420', # morphology.zip +] + +dependencies = [ + ('Java', '1.8.0_121'), +] + +builddependencies = [('ant', '1.10.1', '-Java-%(javaver)s')] + +install_cmd = "cd source && ant build && cp ij.jar %(installdir)s && " +install_cmd += "mkdir -p %(installdir)s/plugins && cp -a %(builddir)s/Morphology/* %(installdir)s/plugins/" + +sanity_check_paths = { + 'files': ['ij.jar'], + 'dirs': ['plugins'], +} + +modloadmsg = "To use ImageJ, run 'java -jar $EBROOTIMAGEJ/ij.jar -Dplugins.dir=$EBROOTIMAGE/plugins'\n" + +moduleclass = 'tools' -- GitLab From a57f5ac9fda2e860342fcd32051027934120b5a9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 14:04:35 +0100 Subject: [PATCH 0716/1311] correctly specify location of plugins for ImageJ --- easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb index ec975dfc22..9875b136f1 100644 --- a/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb +++ b/easybuild/easyconfigs/i/ImageJ/ImageJ-1.51k.eb @@ -35,6 +35,6 @@ sanity_check_paths = { 'dirs': ['plugins'], } -modloadmsg = "To use ImageJ, run 'java -jar $EBROOTIMAGEJ/ij.jar -Dplugins.dir=$EBROOTIMAGE/plugins'\n" +modloadmsg = "To use ImageJ, run 'java -jar $EBROOTIMAGEJ/ij.jar -Dij1.plugins.dir=$EBROOTIMAGE/plugins'\n" moduleclass = 'tools' -- GitLab From 50d330cc3ae39f3ef14a287c0e92ffa9d7782cd6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 13 Mar 2017 14:09:10 +0100 Subject: [PATCH 0717/1311] add easyconfigs for ant/JUnit build deps for ImageJ 1.51k --- .../a/ant/ant-1.10.1-Java-1.8.0_121.eb | 26 +++++++++++++++++++ .../j/JUnit/JUnit-4.12-Java-1.8.0_121.eb | 22 ++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/a/ant/ant-1.10.1-Java-1.8.0_121.eb create mode 100644 easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_121.eb diff --git a/easybuild/easyconfigs/a/ant/ant-1.10.1-Java-1.8.0_121.eb b/easybuild/easyconfigs/a/ant/ant-1.10.1-Java-1.8.0_121.eb new file mode 100644 index 0000000000..42ed3e6196 --- /dev/null +++ b/easybuild/easyconfigs/a/ant/ant-1.10.1-Java-1.8.0_121.eb @@ -0,0 +1,26 @@ +name = 'ant' +version = '1.10.1' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://ant.apache.org/' +description = """Apache Ant is a Java library and command-line tool whose mission is to drive processes described in + build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of + Java applications.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['apache-%(name)s-%(version)s-src.tar.gz'] +source_urls = ['http://archive.apache.org/dist/%(name)s/source/'] + +dependencies = [('Java', '1.8.0_121')] + +builddependencies = [('JUnit', '4.12', versionsuffix)] + +sanity_check_paths = { + 'files': ['bin/ant', 'lib/ant.jar', 'lib/ant.jar'], + 'dirs': [], +} + +modextravars = {'ANT_HOME': '%(installdir)s'} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_121.eb b/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_121.eb new file mode 100644 index 0000000000..43aa70ed7b --- /dev/null +++ b/easybuild/easyconfigs/j/JUnit/JUnit-4.12-Java-1.8.0_121.eb @@ -0,0 +1,22 @@ +easyblock = 'JAR' + +name = 'JUnit' +version = '4.12' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'http://sourceforge.net/projects/junit' +description = """A programmer-oriented testing framework for Java.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['%(namelower)s-%(version)s.jar'] +source_urls = ['http://search.maven.org/remotecontent?filepath=junit/junit/%(version)s/'] + +dependencies = [('Java', '1.8.0_121')] + +sanity_check_paths = { + 'files': sources, + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From a22fd2b0ff22c524c032bbe7974ef910699cb6bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 15:02:55 +0100 Subject: [PATCH 0718/1311] @boegel LSMS-3_rev237-foss-2016a.eb - buildopts = '-j 1' -> parallel = 1 && move dependencies, below patches --- .../easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb index fa65d19eb5..3ca77887d0 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -15,13 +15,13 @@ checksums = ['8c864c9223b93488663815557e61cd0b'] patches = ['LSMS-Makefiles.patch'] -files_to_copy = ['bin'] +dependencies = [ + ('HDF5', '1.8.16'), +] -buildopts = '-j 1' +files_to_copy = ['bin'] -dependencies = [ - ('HDF5', '1.8.16'), -] +parallel = 1 sanity_check_paths = { 'files': ['bin/lsms', 'bin/wl-lsms'], -- GitLab From 9c29e8517e77273ba61625703c06025da2dcb73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 15:06:38 +0100 Subject: [PATCH 0719/1311] {tools}LSMS-3_rev237 renamed LSMS-Makefiles.patch -> LSMS-3_rev237_fix-Makefiles.patch --- easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb | 2 +- .../{LSMS-Makefiles.patch => LSMS-3_rev237_fix-Makefiles.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/l/LSMS/{LSMS-Makefiles.patch => LSMS-3_rev237_fix-Makefiles.patch} (100%) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb index 3ca77887d0..198945fde4 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -13,7 +13,7 @@ sources = ['%(name)s_%(version)s.tar.bz2'] checksums = ['8c864c9223b93488663815557e61cd0b'] -patches = ['LSMS-Makefiles.patch'] +patches = ['LSMS-3_rev237_fix-Makefiles.patch'] dependencies = [ ('HDF5', '1.8.16'), diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-Makefiles.patch b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch similarity index 100% rename from easybuild/easyconfigs/l/LSMS/LSMS-Makefiles.patch rename to easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch -- GitLab From d3026219c7e50a7fa5e18488b33dd77711ffb30f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 15:18:43 +0100 Subject: [PATCH 0720/1311] {tools}LSMS-3_rev237 add head LSMS-3_rev237_fix-Makefiles.patch --- easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch index 5c1f5e5908..e650269d91 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch @@ -1,3 +1,5 @@ +#change PATH and exports +#Golasowski Martin, martin.golasowski@vsb.cz, 2016 IT4Innovations --- LSMS_3_rev237/CBLAS/Makefile 2012-02-09 20:17:00.000000000 +0100 +++ LSMS_3_rev237_working/CBLAS/Makefile 2017-03-09 15:44:39.524649760 +0100 @@ -1,6 +1,29 @@ -- GitLab From 31b9523262215334f596cde4ac75aae9242e2798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Mon, 13 Mar 2017 15:25:21 +0100 Subject: [PATCH 0721/1311] {tools}LSMS-3_rev237 2016 -> 2017 --- easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch index e650269d91..191092dc63 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237_fix-Makefiles.patch @@ -1,5 +1,5 @@ #change PATH and exports -#Golasowski Martin, martin.golasowski@vsb.cz, 2016 IT4Innovations +#Golasowski Martin, martin.golasowski@vsb.cz, 2017 IT4Innovations --- LSMS_3_rev237/CBLAS/Makefile 2012-02-09 20:17:00.000000000 +0100 +++ LSMS_3_rev237_working/CBLAS/Makefile 2017-03-09 15:44:39.524649760 +0100 @@ -1,6 +1,29 @@ -- GitLab From a1bc03948dde0ab43e356d72a91f8d543f6c4202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Mon, 13 Mar 2017 15:32:02 +0100 Subject: [PATCH 0722/1311] changed source_urls to use templates --- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb | 2 +- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb | 2 +- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb | 2 +- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb | 2 +- easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb index 3da591ce62..45a8cbb1a5 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-goolf-1.4.10.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_0_x/'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] # Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. configopts = '--without-perl' diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb index d13e7d8912..fafae9335e 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.0.7-ictce-5.3.0.eb @@ -24,7 +24,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_0_x/'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] patches = ['ViennaRNA_ictce-pragma.patch'] diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb index 3e54d3ed83..29c51c1030 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.1.6-ictce-5.5.0.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_1_x/'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] patches = ['ViennaRNA-2.1.6_ictce.patch'] diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb index 1988a82b1e..3214395e25 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.2.3-intel-2016b.eb @@ -23,7 +23,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'openmp': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_2_x/'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] patches = ['ViennaRNA-%(version)s_fix-pragma.patch'] diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb index 5b2bac1762..ec625ff6c6 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.4-foss-2016b.eb @@ -13,7 +13,7 @@ toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True} sources = [SOURCE_TAR_GZ] -source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/2_3_x/'] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] checksums = ['c77bff267606d22557a4f867df635822'] -- GitLab From 7a01868d8490d06d2ef9786713232c44550a0cb6 Mon Sep 17 00:00:00 2001 From: Joachim Hein Date: Mon, 13 Mar 2017 17:19:43 +0100 Subject: [PATCH 0723/1311] HDF5 1.10.0 patch1 for golfs incl. dependencies This is a simple port from foss/2016b - same gcc compiler --- .../HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb | 22 ++++++++++++++++++ .../s/Szip/Szip-2.1-goolfc-2016.10.eb | 23 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb create mode 100644 easybuild/easyconfigs/s/Szip/Szip-2.1-goolfc-2016.10.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb new file mode 100644 index 0000000000..a728a33f56 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.10.0-patch1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'goolfc', 'version': '2016.10'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.8'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-goolfc-2016.10.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-goolfc-2016.10.eb new file mode 100644 index 0000000000..c2c5a38e56 --- /dev/null +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-goolfc-2016.10.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'Szip' +version = '2.1' + +homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' +description = "Szip compression software, providing lossless compression of scientific data" + +toolchain = {'name': 'goolfc', 'version': '2016.10'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +sanity_check_paths = { + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From 22f34275ebd33b371a33756d06860e01290f056e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 14 Mar 2017 12:10:16 +1300 Subject: [PATCH 0724/1311] libreadline dependency for Perl --- .../libreadline/libreadline-6.2-foss-2015a.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb new file mode 100644 index 0000000000..45a556ffec --- /dev/null +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'libreadline' +version = '6.2' + +homepage = 'http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html' +description = """The GNU Readline library provides a set of functions for use by applications that + allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. + The Readline library includes additional functions to maintain a list of previously-entered command lines, + to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'pic': True} + +sources = ['readline-%(version)s.tar.gz'] +source_urls = ['http://ftp.gnu.org/gnu/readline'] + +dependencies = [('ncurses', '5.9')] + +sanity_check_paths = { + 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs' : [], +} + +moduleclass = 'lib' -- GitLab From 774f17a8c7232229bdf1d3520a30a1608c94fda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Tue, 14 Mar 2017 07:33:04 +0100 Subject: [PATCH 0725/1311] {tools}LSMS-3_rev237 change LSMS-3_rev237_fix-Makefiles.patch -> LSMS-%(version)s_fix-Makefiles.patch --- easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb index 198945fde4..b39dd8a48b 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -13,7 +13,7 @@ sources = ['%(name)s_%(version)s.tar.bz2'] checksums = ['8c864c9223b93488663815557e61cd0b'] -patches = ['LSMS-3_rev237_fix-Makefiles.patch'] +patches = ['LSMS-%(version)s_fix-Makefiles.patch'] dependencies = [ ('HDF5', '1.8.16'), -- GitLab From addeb7730bc97daee66649abeea0fa38e18c01e9 Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Tue, 14 Mar 2017 19:17:30 +1030 Subject: [PATCH 0726/1311] Revert "Testing" This reverts commit fa1ffbce7c441662925f5042a6a427907f0f6285. --- .../easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb index 1a66bb0381..edf4ca1f37 100644 --- a/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PileOMeth/PileOMeth-0.1.11-foss-2016b.eb @@ -6,7 +6,7 @@ # Authors:: Robert Qiao , Exe Escobedo # License:: # -# Notes:: Testing +# Notes:: ### easyblock = 'MakeCp' -- GitLab From 152c3f7593cef4db3a1197f42adef4734a8c12a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Mar 2017 15:20:50 +0100 Subject: [PATCH 0727/1311] remove unneeded CMake easyconfig --- .../c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb deleted file mode 100644 index 50e2df64aa..0000000000 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.2-GCCcore-6.3.0.eb +++ /dev/null @@ -1,36 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'CMake' -version = '3.6.2' - -homepage = 'http://www.cmake.org' -description = """CMake, the cross-platform, open-source build system. - CMake is a family of tools designed to build, test and package software.""" - -toolchain = {'name': 'GCCcore', 'version': '6.3.0'} - -source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] -sources = [SOURCELOWER_TAR_GZ] - -configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' - -builddependencies = [ - ('binutils', '2.27'), -] - - -dependencies = [ - ('ncurses', '6.0'), - # OS dependency should be preferred if the os version is more recent then this version, - # it's nice to have an up to date openssl for security reasons - #('OpenSSL', '1.1.0c'), -] - -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] - -sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], - 'dirs': [], -} - -moduleclass = 'devel' -- GitLab From 40f76e4b2f7d9e80850d6b94f5dfdec20bf15c99 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 14 Mar 2017 16:21:25 +0200 Subject: [PATCH 0728/1311] adding easyconfigs: GROMACS-2016.3-foss-2017a.eb --- .../g/GROMACS/GROMACS-2016.3-foss-2017a.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-foss-2017a.eb diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-foss-2017a.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-foss-2017a.eb new file mode 100644 index 0000000000..c3f26a2915 --- /dev/null +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-foss-2017a.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2016 University of Luxembourg / LCSB, Cyprus Institute / CaSToRC, +# Ghent University / The Francis Crick Institute +# Authors:: +# * Wiktor Jurkowski +# * Fotis Georgatos +# * George Tsouloupas +# * Kenneth Hoste +# * Adam Huffman +# License:: MIT/GPL +## + +name = 'GROMACS' +version = '2016.3' + +homepage = 'http://www.gromacs.org' +description = """ +GROMACS is a versatile package to perform molecular dynamics, + i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. + +This is CPU only build, containing both MPI and threadMPI builds. +""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['ftp://ftp.gromacs.org/pub/gromacs/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('CMake', '3.7.2'), +] + +moduleclass = 'bio' -- GitLab From 3d561c8d11759dda93628cbd5ddea9f294e1537c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 14 Mar 2017 16:30:25 +0100 Subject: [PATCH 0729/1311] adding easyconfigs: GROMACS-2016.3-intel-2017a.eb --- .../g/GROMACS/GROMACS-2016.3-intel-2017a.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-intel-2017a.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-intel-2017a.eb new file mode 100644 index 0000000000..edcd456df0 --- /dev/null +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.3-intel-2017a.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2016 University of Luxembourg / LCSB, Cyprus Institute / CaSToRC, +# Ghent University / The Francis Crick Institute +# Authors:: +# * Wiktor Jurkowski +# * Fotis Georgatos +# * George Tsouloupas +# * Kenneth Hoste +# * Adam Huffman +# License:: MIT/GPL +## + +name = 'GROMACS' +version = '2016.3' + +homepage = 'http://www.gromacs.org' +description = """ +GROMACS is a versatile package to perform molecular dynamics, + i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. + +This is CPU only build, containing both MPI and threadMPI builds. +""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['ftp://ftp.gromacs.org/pub/gromacs/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('CMake', '3.7.2'), +] + +moduleclass = 'bio' -- GitLab From 13d0854b39af72736c182706b19fb7ee83ddcec8 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 14 Mar 2017 18:32:41 +0000 Subject: [PATCH 0730/1311] Updated PETSc recipe to the modified version of the download install feature. --- .../PETSc/PETSc-3.7.5-intel-2016a-download.eb | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb index a59522d52f..111a8d2edd 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb @@ -1,5 +1,6 @@ name = 'PETSc' version = '3.7.5' +versionsuffix = '-downloaded_deps' homepage = 'http://www.mcs.anl.gov/petsc' description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the @@ -11,31 +12,32 @@ toolchainopts = {'usempi': True, 'pic': True} source_urls = ['http://ftp.mcs.anl.gov/pub/petsc/release-snapshots'] sources = [SOURCELOWER_TAR_GZ] +builddependencies = [('CMake', '3.5.2')] shared_libs = 1 pic = 1 downloadinstall = True +# For these dependencies, we do not download them dependencies = [('HDF5','1.8.18')] - configopts = "" -# compiles PETSc shared configopts += "--with-mkl_pardiso=1 --with-mkl_pardiso-dir=$MKLROOT " configopts += "--with-hdf5=1 --with-hdf5-dir=$EBROOTHDF5" -# external packages that are downloaded -external_packages = ['mumps', 'ptscotch', 'superlu', 'superlu_dist', 'parmetis', 'metis', 'ml', 'suitesparse', 'hypre', 'prometheus'] -# compiles the external dependencies non-shared -external_packages_shared = "no" -for p in external_packages: - configopts += "--download-%s=yes --download-%s-shared=%s " % (p,p,external_packages_shared) -configopts += "--download-triangle=yes" # download-triangle-shared is not supported - -builddependencies = [('CMake', '3.5.2')] +# external packages that are downloaded with --download-=1 and --download--static=1 +download_deps_static = [ + 'hypre', + 'metis', + 'ml', + 'mumps', + 'parmetis', + 'prometheus', + 'ptscotch', + 'suitesparse', + 'superlu', + 'superlu_dist' +] +# triangle cannot be downloaded with --download-triangle-static because it fails +download_deps = ['triangle'] moduleclass = 'numlib' - -modluafooter = """ -family("petsc") -""" - -- GitLab From 1b637c106ee87738d65c9d15d33774d5e618c237 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 15 Mar 2017 09:46:39 +1300 Subject: [PATCH 0731/1311] Remove files related to new gimkl-2017a Perl build --- .../easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb | 18 - .../p/Perl/Perl-5.24.1-gimkl-2017a.eb | 1194 ----------------- .../s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb | 21 - 3 files changed, 1233 deletions(-) delete mode 100644 easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb delete mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb delete mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb b/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb deleted file mode 100644 index f6a2ef8db6..0000000000 --- a/easybuild/easyconfigs/d/DB/DB-6.2.23-gimkl-2017a.eb +++ /dev/null @@ -1,18 +0,0 @@ -name = 'DB' -version = '6.2.23' - -homepage = 'http://www.oracle.com/technetwork/products/berkeleydb' -description = """Berkeley DB enables the development of custom data management solutions, - without the overhead traditionally associated with such custom projects.""" - -toolchain = {'name': 'gimkl', 'version': '2017a'} - -# download via http://www.oracle.com/technetwork/products/berkeleydb/downloads/, requires registration -sources = [SOURCELOWER_TAR_GZ] - -sanity_check_paths = { - 'files': ["include/db.h"], - 'dirs': [], -} - -moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb deleted file mode 100644 index d4719d425a..0000000000 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-gimkl-2017a.eb +++ /dev/null @@ -1,1194 +0,0 @@ -name = 'Perl' -version = '5.24.1' -use_perl_threads = False - -homepage = 'http://www.perl.org/' -description = """Larry Wall's Practical Extraction and Report Language""" - -toolchain = {'name': 'gimkl', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} - -dependencies = [ - ('DB', '6.2.23'), # for DB_File module - ('SQLite', '3.16.2'), # for DBD::SQLite module - ('expat', '2.2.0'), # for XML::Parser I think - ('libxml2', '2.9.4'), # for XML::LibXML -] -# Also zlib / readline via the other dependencies - -builddependencies = [('SAMtools', '0.1.19')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. - -source_urls = ['http://www.cpan.org/src/5.0'] -sources = [SOURCELOWER_TAR_GZ] - -# We must compile in serial so that Convert::Binary::C is installed -# in a sane manner. -maxparallel = 1 - -#runtest = 'test' # Several modules have extra dependencies for testing - -# Extension versions -acme_damn_version = '0.08' -algorithm_diff_version = '1.1903' -algorithm_munkres_version = '0.08' -aliased_version = '0.34' -anyevent_version = '7.13' -appconfig_version = '1.71' -archive_extract_version = '0.80' -archive_tar_version = '2.24' -archive_zip_version = '1.59' -array_compare_version = '3.0.0' -authen_sasl_version = '2.16' -bioperl_version = '1.007001' -bio_phylo_version = '0.58' -bio_samtools_version = '1.43' -bit_vector_version = '7.4' -boolean_version = '0.46' -bundle_bioperl_version = '2.1.9' -b_lintsubs_version = '0.06' -b_lint_version = '1.20' -capture_tiny_version = '0.46' -carp_version = '1.38' -cgi_version = '4.35' -class_accessor_version = '0.34' -class_data_inheritable_version = '0.08' -class_dbi_version = '3.0.17' -class_inspector_version = '1.31' -class_isa_version = '0.36' -class_load_version = '0.23' -class_load_xs_version = '0.09' -class_singleton_version = '1.5' -class_trigger_version = '0.14' -clone_version = '0.38' -config_general_version = '2.63' -convert_binary_c_version = '0.78' -cpanplus_version = '0.9164' -cwd_guard_version = '0.05' -data_dumper_version = '2.161' -data_optlist_version = '0.110' -data_section_simple_version = '0.07' -data_stag_version = '0.14' -data_types_version = '0.09' -data_uuid_version = '1.221' -datetime_locale_version = '1.14' -datetime_timezone_version = '2.10' -datetime_tiny_version = '1.06' -datetime_version = '1.42' -date_handler_version = '1.2' -dbd_anydata_version = '0.110' -dbd_sqlite_version = '1.54' -dbix_contextualfetch_version = '1.03' -dbix_simple_version = '1.35' -dbi_version = '1.636' -db_file_version = '1.840' -devel_checkcompiler_version = '0.07' -devel_globaldestruction_version = '0.14' -devel_stacktrace_version = '2.02' -digest_hmac_version = '1.03' -digest_sha1_version = '2.13' -dist_checkconflicts_version = '0.11' -email_date_format_version = '1.005' -encode_locale_version = '1.05' -error_version = '0.17024' -eval_closure_version = '0.14' -exception_class_version = '1.42' -expect_pm_version = '1.21' -exporter_declare_version = '0.114' -exporter_tiny_version = '0.044' -extutils_config_version = '0.008' -extutils_helpers_version = '0.026' -extutils_installpaths_version = '0.011' -extutils_makemaker_version = '7.24' -fennec_lite_version = '0.004' -file_checktree_version = '4.42' -file_copy_recursive_version = '0.38' -file_find_rule_perl_version = '1.15' -file_find_rule_version = '0.34' -file_listing_version = '6.04' -file_path_version = '2.12' -file_sharedir_install_version = '0.11' -file_slurp_tiny_version = '0.004' -file_slurp_version = '9999.19' -file_temp_version = '0.2304' -file_which_version = '1.21' -font_ttf_version = '1.06' -forks_version = '0.36' -freezethaw_version = '0.5001' -getopt_long_version = '2.49.1' -git_version = '0.41' -go_db_perl_version = '0.04' -go_perl_version = '0.15' -graph_version = '0.9704' -hash_merge_version = '0.200' -html_form_version = '6.03' -html_parser_version = '3.72' -html_tableextract_version = '2.13' -html_tagset_version = '3.20' -http_cookies_version = '6.01' -http_daemon_version = '6.01' -http_date_version = '6.02' -http_message_version = '6.11' -http_negotiate_version = '6.01' -ima_dbi_version = '0.35' -import_into_version = '1.002005' -inline_c_version = '0.76' -inline_version = '0.80' -io_all_version = '0.86' -io_html_version = '1.001' -io_prompt_version = '0.997004' -io_socket_ssl_version = '2.047' -io_stringy_version = '2.111' -io_string_version = '1.08' -io_tty_version = '1.12' -ipc_run3_version = '0.048' -ipc_run_version = '0.94' -json_version = '2.90' -libxml_perl_version = '0.08' -list_allutils_version = '0.14' -list_moreutils_version = '0.416' -local_lib_version = '2.000019' -logger_simple_version = '2.0' -log_message_simple_version = '0.10' -log_message_version = '0.08' -lwp_mediatypes_version = '6.02' -lwp_version = '6.23' -mailtools_version = '2.18' -math_bezier_version = '0.01' -math_cdf_version = '0.1' -math_round_version = '0.07' -math_vecstat_version = '0.08' -meta_builder_version = '0.003' -mime_lite_version = '3.030' -mime_types_version = '2.13' -mock_quick_version = '1.111' -module_build_tiny_version = '0.039' -module_build_version = '0.4220' -module_build_xsutil_version = '0.16' -module_implementation_version = '0.09' -module_load_conditional_version = '0.68' -module_pluggable_version = '5.2' -module_runtime_version = '0.014' -moose_version = '2.2004' -moo_version = '2.003001' -mouse_version = '2.4.9' -mro_compat_version = '0.12' -net_http_version = '6.13' -net_smtp_ssl_version = '1.04' -number_compare_version = '0.03' -number_compare_version = '0.03' -object_accessor_version = '0.48' -object_insideout_version = '4.04' -package_deprecationmanager_version = '0.17' -package_stash_version = '0.37' -package_stash_xs_version = '0.28' -parallel_forkmanager_version = '1.19' -params_util_version = '1.07' -params_validate_version = '1.26' -parse_recdescent_version = '1.967013' -pathtools_version = '3.62' -perl_unsafe_signals_version = '0.03' -pod_latex_version = '0.61' -pod_plainer_version = '1.04' -pod_pom_version = '2.01' -readonly_version = '2.05' -regexp_common_version = '2016060801' -scalar_list_utils_version = '1.47' -scalar_util_numeric_version = '0.40' -set_array_version = '0.30' -set_intervaltree_version = '0.10' -set_intspan_version = '1.19' -set_scalar_version = '1.29' -shell_version = '0.73' -spreadsheet_parseexcel_version = '0.65' -sql_statement_version = '1.410' -statistics_descriptive_version = '3.0612' -storable_version = '2.51' -strictures_version = '2.000003' -sub_exporter_progressive_version = '0.001013' -sub_exporter_version = '0.987' -sub_install_version = '0.928' -sub_name_version = '0.21' -sub_uplevel_version = '0.2600' -svg_version ='2.64' -switch_version = '2.17' -sys_sigaction_version = '0.23' -template_toolkit_version = '2.26' -term_readkey_version = '2.37' -term_ui_version = '0.46' -test_deep_version = '1.126' -test_differences_version = '0.64' -test_exception_lessclever_version = '0.009' -test_exception_version = '0.43' -test_fatal_version = '0.014' -test_harness_version = '3.36' -test_harness_version = '3.36' -test_leaktrace_version = '0.15' -test_most_version = '0.35' -test_nowarnings_version = '1.04' -test_output_version = '1.03' -test_requires_version = '0.10' -test_simple_version = '1.302078' -test_version_version = '2.05' -test_warnings_version = '0.026' -test_warn_version = '0.32' -text_diff_version = '1.44' -text_glob_version = '0.11' -text_iconv_version = '1.7' -text_soundex_version = '3.05' -tie_ixhash_version = '1.23' -timedate_version = '2.30' -time_piece_mysql_version = '0.06' -time_piece_version = '1.31' -tree_dag_node_version = '1.29' -try_tiny_version = '0.28' -universal_moniker_version = '0.08' -uri_version = '1.71' -version_version = '0.9917' -want_version = '0.29' -www_robotrules_version = '6.02' -xml_dom_version = '1.46' -xml_dom_xpath_version = '0.14' -xml_libxml_version = '2.0128' -xml_namespacesupport_version = '1.11' -xml_parser_version = '2.44' -xml_sax_base_version = '1.08' -xml_sax_version = '0.99' -xml_sax_writer_version = '0.56' -xml_simple_version = '2.22' -xml_twig_version = '3.52' -xml_writer_version = '0.625' -xml_xpath_version = '1.40' -xsloader_version = '0.24' -yaml_version = '1.23' - -exts_list = [ - ('Module::Build', module_build_version, { # std module but recent BioPerl needs a recent version for some reason - 'source_tmpl': 'Module-Build-%s.tar.gz' % module_build_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], - }), - ('ExtUtils::MakeMaker', extutils_makemaker_version, { - 'source_tmpl': 'ExtUtils-MakeMaker-%s.tar.gz' % extutils_makemaker_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], - }), - ('local::lib', local_lib_version, { - 'source_tmpl': 'local-lib-%s.tar.gz' % local_lib_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], - }), - ('IO::String', io_string_version, { - 'source_tmpl': 'IO-String-%s.tar.gz' % io_string_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('Data::Stag', data_stag_version, { - 'source_tmpl': 'Data-Stag-%s.tar.gz' % data_stag_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CM/CMUNGALL/'], - }), - ('DB_File', db_file_version, { - 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], - }), - ('DBI', dbi_version, { - 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], - }), - ('Sub::Uplevel', sub_uplevel_version, { - 'source_tmpl': 'Sub-Uplevel-%s.tar.gz' % sub_uplevel_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], - }), - ('Tree::DAG_Node', tree_dag_node_version, { - 'source_tmpl': 'Tree-DAG_Node-%s.tgz' % tree_dag_node_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/'], - }), - ('Try::Tiny', try_tiny_version, { - 'source_tmpl': 'Try-Tiny-%s.tar.gz' % try_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Devel::StackTrace', devel_stacktrace_version, { - 'source_tmpl': 'Devel-StackTrace-%s.tar.gz' % devel_stacktrace_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], - }), - ('Class::Data::Inheritable', class_data_inheritable_version, { - 'source_tmpl': 'Class-Data-Inheritable-%s.tar.gz' % class_data_inheritable_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], - }), - ('Exception::Class', exception_class_version, { - 'source_tmpl': 'Exception-Class-%s.tar.gz' % exception_class_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], - }), - ('Test::Fatal', test_fatal_version, { - 'source_tmpl': 'Test-Fatal-%s.tar.gz' % test_fatal_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], - }), - ('Test::NoWarnings', test_nowarnings_version, { - 'source_tmpl': 'Test-NoWarnings-%s.tar.gz' % test_nowarnings_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], - }), - ('Test::Deep', test_deep_version, { - 'source_tmpl': 'Test-Deep-%s.tar.gz' % test_deep_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Algorithm::Diff', algorithm_diff_version, { - 'source_tmpl': 'Algorithm-Diff-%s.tar.gz' % algorithm_diff_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TY/TYEMQ/'], - }), - ('Text::Diff', text_diff_version, { - 'source_tmpl': 'Text-Diff-%s.tar.gz' % text_diff_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], - }), - ('Test::Differences', test_differences_version, { - 'source_tmpl': 'Test-Differences-%s.tar.gz' % test_differences_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCANTRELL/'], - }), - ('Test::Exception', test_exception_version, { - 'source_tmpl': 'Test-Exception-%s.tar.gz' % test_exception_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('Test::Warn', test_warn_version, { - 'source_tmpl': 'Test-Warn-%s.tar.gz' % test_warn_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BIGJ/'], - }), - ('Test::Requires', test_requires_version, { - 'source_tmpl': 'Test-Requires-%s.tar.gz' % test_requires_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], - }), - ('Test::Tester', test_simple_version, { - 'source_tmpl': 'Test-Simple-%s.tar.gz' % test_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('File::Slurp::Tiny', file_slurp_tiny_version, { - 'source_tmpl': 'File-Slurp-Tiny-%s.tar.gz' % file_slurp_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], - }), - ('Params::Util', params_util_version, { - 'source_tmpl': 'Params-Util-%s.tar.gz' % params_util_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], - }), - ('Sub::Install', sub_install_version, { - 'source_tmpl': 'Sub-Install-%s.tar.gz' % sub_install_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], - }), - ('Data::OptList', data_optlist_version, { - 'source_tmpl': 'Data-OptList-%s.tar.gz' % data_optlist_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Sub::Exporter', sub_exporter_version, { - 'source_tmpl': 'Sub-Exporter-%s.tar.gz' % sub_exporter_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Capture::Tiny', capture_tiny_version, { - 'source_tmpl': 'Capture-Tiny-%s.tar.gz' % capture_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], - }), - ('Test::Output', test_output_version, { - 'source_tmpl': 'Test-Output-%s.tar.gz' % test_output_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BD/BDFOY/'], - }), - ('Module::Runtime', module_runtime_version, { - 'source_tmpl': 'Module-Runtime-%s.tar.gz' % module_runtime_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/'], - }), - ('Module::Implementation', module_implementation_version, { - 'source_tmpl': 'Module-Implementation-%s.tar.gz' % module_implementation_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], - }), - ('List::MoreUtils', list_moreutils_version, { - 'source_tmpl': 'List-MoreUtils-%s.tar.gz' % list_moreutils_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], - }), - ('Package::DeprecationManager', package_deprecationmanager_version, { - 'source_tmpl': 'Package-DeprecationManager-%s.tar.gz' % package_deprecationmanager_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], - }), - ('Dist::CheckConflicts', dist_checkconflicts_version, { - 'source_tmpl': 'Dist-CheckConflicts-%s.tar.gz' % dist_checkconflicts_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], - }), - ('Package::Stash', package_stash_version, { - 'source_tmpl': 'Package-Stash-%s.tar.gz' % package_stash_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], - }), - ('Class::Load', class_load_version, { - 'source_tmpl': 'Class-Load-%s.tar.gz' % class_load_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('TAP::Harness::Env', test_harness_version, { - 'source_tmpl': 'Test-Harness-%s.tar.gz' % test_harness_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], - }), - ('ExtUtils::Helpers', extutils_helpers_version, { - 'source_tmpl': 'ExtUtils-Helpers-%s.tar.gz' % extutils_helpers_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], - }), - ('ExtUtils::Config', extutils_config_version, { - 'source_tmpl': 'ExtUtils-Config-%s.tar.gz' % extutils_config_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], - }), - ('ExtUtils::InstallPaths', extutils_installpaths_version, { - 'source_tmpl': 'ExtUtils-InstallPaths-%s.tar.gz' % extutils_installpaths_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT'], - }), - ('Module::Build::Tiny', module_build_tiny_version, { - 'source_tmpl': 'Module-Build-Tiny-%s.tar.gz' % module_build_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], - }), - ('MRO::Compat', mro_compat_version, { - 'source_tmpl': 'MRO-Compat-%s.tar.gz' % mro_compat_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/'], - }), - ('Sub::Name', sub_name_version, { - 'source_tmpl': 'Sub-Name-%s.tar.gz' % sub_name_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Eval::Closure', eval_closure_version, { - 'source_tmpl': 'Eval-Closure-%s.tar.gz' % eval_closure_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], - }), - ('Sub::Exporter::Progressive', sub_exporter_progressive_version, { - 'source_tmpl': 'Sub-Exporter-Progressive-%s.tar.gz' % sub_exporter_progressive_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], - }), - ('Devel::GlobalDestruction', devel_globaldestruction_version, { - 'source_tmpl': 'Devel-GlobalDestruction-%s.tar.gz' % devel_globaldestruction_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], - }), - ('boolean', boolean_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], - }), - ('Tie::IxHash', tie_ixhash_version, { - 'source_tmpl': 'Tie-IxHash-%s.tar.gz' % tie_ixhash_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/'], - }), - ('Moose', moose_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Package::Stash::XS', package_stash_xs_version, { - 'source_tmpl': 'Package-Stash-XS-%s.tar.gz' % package_stash_xs_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], - }), - ('Params::Validate', params_validate_version, { - 'source_tmpl': 'Params-Validate-%s.tar.gz' % params_validate_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], - }), - ('Class::Load::XS', class_load_xs_version, { - 'source_tmpl': 'Class-Load-XS-%s.tar.gz' % class_load_xs_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - # For uoa00001, Zendesk #9076 - ('Math::CDF', math_cdf_version, { - 'source_tmpl': 'Math-CDF-%s.tar.gz' % math_cdf_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], - }), - ('DateTime::Locale', datetime_locale_version, { - 'source_tmpl': 'DateTime-Locale-%s.tar.gz' % datetime_locale_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], - }), - ('Class::Singleton', class_singleton_version, { - 'source_tmpl': 'Class-Singleton-%s.tar.gz' % class_singleton_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHAY/'], - }), - ('DateTime::TimeZone', datetime_timezone_version, { - 'source_tmpl': 'DateTime-TimeZone-%s.tar.gz' % datetime_timezone_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], - }), - ('Test::Warnings', test_warnings_version, { - 'source_tmpl': 'Test-Warnings-%s.tar.gz' % test_warnings_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Data::Types', data_types_version, { - 'source_tmpl': 'Data-Types-%s.tar.gz' % data_types_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/'], - }), - ('Exporter::Tiny', exporter_tiny_version, { - 'source_tmpl': 'Exporter-Tiny-%s.tar.gz' % exporter_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TOBYINK/'], - }), - ('List::AllUtils', list_allutils_version, { - 'source_tmpl': 'List-AllUtils-%s.tar.gz' % list_allutils_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/'], - }), - ('DateTime', datetime_version, { - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], - }), - ('DateTime::Tiny', datetime_tiny_version, { - 'source_tmpl': 'DateTime-Tiny-%s.tar.gz' % datetime_tiny_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], - }), - ('File::Slurp', file_slurp_version, { - 'source_tmpl': 'File-Slurp-%s.tar.gz' % file_slurp_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/U/UR/URI/'], - }), - ('HTTP::Date', http_date_version, { - 'source_tmpl': 'HTTP-Date-%s.tar.gz' % http_date_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('IO::HTML', io_html_version, { - 'source_tmpl': 'IO-HTML-%s.tar.gz' % io_html_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CJ/CJM/'], - }), - ('LWP::MediaTypes', lwp_mediatypes_version, { - 'source_tmpl': 'LWP-MediaTypes-%s.tar.gz' % lwp_mediatypes_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('URI', uri_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Encode::Locale', encode_locale_version, { - 'source_tmpl': 'Encode-Locale-%s.tar.gz' % encode_locale_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('HTTP::Request', http_message_version, { - 'source_tmpl': 'HTTP-Message-%s.tar.gz' % http_message_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('HTML::Tagset', html_tagset_version, { - 'source_tmpl': 'HTML-Tagset-%s.tar.gz' % html_tagset_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/'], - }), - ('HTML::Entities', html_parser_version, { - 'source_tmpl': 'HTML-Parser-%s.tar.gz' % html_parser_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('File::Listing', file_listing_version, { - 'source_tmpl': 'File-Listing-%s.tar.gz' % file_listing_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('AnyEvent', anyevent_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/'], - }), - ('Devel::CheckCompiler', devel_checkcompiler_version, { - 'source_tmpl': 'Devel-CheckCompiler-%s.tar.gz' % devel_checkcompiler_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SY/SYOHEX'], - }), - ('File::Copy::Recursive', file_copy_recursive_version, { - 'source_tmpl': 'File-Copy-Recursive-%s.tar.gz' % file_copy_recursive_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DM/DMUEY/'], - }), - ('Cwd::Guard', cwd_guard_version, { - 'source_tmpl': 'Cwd-Guard-%s.tar.gz' % cwd_guard_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KAZEBURO'], - }), - ('Module::Build::XSUtil', module_build_xsutil_version, { - 'source_tmpl': 'Module-Build-XSUtil-%s.tar.gz' % module_build_xsutil_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HI/HIDEAKIO/'], - }), - ('LWP', lwp_version, { - 'source_tmpl': 'libwww-perl-%s.tar.gz' % lwp_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/'], - }), - ('Fennec::Lite', fennec_lite_version, { - 'source_tmpl': 'Fennec-Lite-%s.tar.gz' % fennec_lite_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('aliased', aliased_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Meta::Builder', meta_builder_version, { - 'source_tmpl': 'Meta-Builder-%s.tar.gz' % meta_builder_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('Exporter::Declare', exporter_declare_version, { - 'source_tmpl': 'Exporter-Declare-%s.tar.gz' % exporter_declare_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('Mock::Quick', mock_quick_version, { - 'source_tmpl': 'Mock-Quick-%s.tar.gz' % mock_quick_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - ('Test::Exception::LessClever', test_exception_lessclever_version, { - 'source_tmpl': 'Test-Exception-LessClever-%s.tar.gz' % test_exception_lessclever_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Test::LeakTrace', test_leaktrace_version, { - 'source_tmpl': 'Test-LeakTrace-%s.tar.gz' % test_leaktrace_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GF/GFUJI/'], - }), - ('Mouse', mouse_version, { - 'source_tmpl': 'Mouse-v%s.tar.gz' % mouse_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SY/SYOHEX/'], - }), - ('XML::NamespaceSupport', xml_namespacesupport_version, { - 'source_tmpl': 'XML-NamespaceSupport-%s.tar.gz' % xml_namespacesupport_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERIGRIN/'], - }), - ('XML::SAX::Base', xml_sax_base_version, { - 'source_tmpl': 'XML-SAX-Base-%s.tar.gz' % xml_sax_base_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], - }), - ('XML::SAX', xml_sax_version, { - 'source_tmpl': 'XML-SAX-%s.tar.gz' % xml_sax_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], - }), - ('XML::LibXML', xml_libxml_version, { - 'source_tmpl': 'XML-LibXML-%s.tar.gz' % xml_libxml_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], - }), - ('Clone', clone_version, { - 'source_tmpl': 'Clone-%s.tar.gz' % clone_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GARU'], - }), - ('Parallel::ForkManager', parallel_forkmanager_version, { - 'source_tmpl': 'Parallel-ForkManager-%s.tar.gz' % parallel_forkmanager_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/Y/YA/YANICK/'], - }), - - ('Config::General', config_general_version, { - 'source_tmpl': 'Config-General-%s.tar.gz' % config_general_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TL/TLINDEN/'], - }), - ('Test::Simple', test_simple_version, { - 'source_tmpl': 'Test-Simple-%s.tar.gz' % test_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/'], - }), - - # For Genemark - ('YAML', yaml_version, { - 'source_tmpl': 'YAML-%s.tar.gz' % yaml_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], - }), - ('Hash::Merge', hash_merge_version, { - 'source_tmpl': 'Hash-Merge-%s.tar.gz' % hash_merge_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], - }), - ('Data::Dumper', data_dumper_version, { - 'source_tmpl': 'Data-Dumper-%s.tar.gz' % data_dumper_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/'], - }), - ('Object::InsideOut', object_insideout_version, { - 'source_tmpl': 'Object-InsideOut-%s.tar.gz' % object_insideout_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JD/JDHEDDEN/'], - }), - ('Logger::Simple', logger_simple_version, { - 'source_tmpl': 'Logger-Simple-%s.tar.gz' % logger_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TS/TSTANLEY/'], - }), - ('File::Path', file_path_version, { - 'source_tmpl': 'File-Path-%s.tar.gz' % file_path_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RI/RICHE/'], - }), - ('File::Spec', pathtools_version, { - 'source_tmpl': 'PathTools-%s.tar.gz' % pathtools_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('File::Temp', file_temp_version, { - 'source_tmpl': 'File-Temp-%s.tar.gz' % file_temp_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/'], - }), - ('XSLoader', xsloader_version, { - 'source_tmpl': 'XSLoader-%s.tar.gz' % xsloader_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/'], - }), - ('Carp', carp_version, { - 'source_tmpl': 'Carp-%s.tar.gz' % carp_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Storable', storable_version, { - 'source_tmpl': 'Storable-%s.tar.gz' % storable_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AM/AMS/'], - }), - - ('Font::TTF', font_ttf_version, { - 'source_tmpl': 'Font-TTF-%s.tar.gz' % font_ttf_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BH/BHALLISSY'], - }), - ('IO::Tty', io_tty_version, { - 'source_tmpl': 'IO-Tty-%s.tar.gz' % io_tty_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], - }), - ('Math::Bezier', math_bezier_version, { - 'source_tmpl': 'Math-Bezier-%s.tar.gz' % math_bezier_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABW'], - }), - ('IPC::Run', ipc_run_version, { - 'source_tmpl': 'IPC-Run-%s.tar.gz' % ipc_run_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], - }), - ('Math::Round', math_round_version, { - 'source_tmpl': 'Math-Round-%s.tar.gz' % math_round_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GROMMEL'], - }), - ('B::LintSubs', b_lintsubs_version, { - 'source_tmpl': 'B-LintSubs-%s.tar.gz' % b_lintsubs_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS'], - }), - ('Math::VecStat', math_vecstat_version, { - 'source_tmpl': 'Math-VecStat-%s.tar.gz' % math_vecstat_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AS/ASPINELLI'], - }), - ('Test::Most', test_most_version, { - 'source_tmpl': 'Test-Most-%s.tar.gz' % test_most_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OV/OVID/'], - }), - ('Readonly', readonly_version, { - 'source_tmpl': 'Readonly-%s.tar.gz' % readonly_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SA/SANKO/'], - }), - ('Regexp::Common', regexp_common_version, { - 'source_tmpl': 'Regexp-Common-%s.tar.gz' % regexp_common_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABIGAIL'], - }), - ('Want', want_version, { - 'source_tmpl': 'Want-%s.tar.gz' % want_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], - }), - ('DBD::SQLite', dbd_sqlite_version, { - 'source_tmpl': 'DBD-SQLite-%s.tar.gz' % dbd_sqlite_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], - }), - ('Set::IntSpan', set_intspan_version, { - 'source_tmpl': 'Set-IntSpan-%s.tar.gz' % set_intspan_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SW/SWMCD'], - }), - ('forks', forks_version, { - 'source_tmpl': 'forks-%s.tar.gz' % forks_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], - }), - ('File::Which', file_which_version, { - 'source_tmpl': 'File-Which-%s.tar.gz' % file_which_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], - }), - ('Perl::Unsafe::Signals', perl_unsafe_signals_version, { - 'source_tmpl': 'Perl-Unsafe-Signals-%s.tar.gz' % perl_unsafe_signals_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], - }), - ('Bit::Vector', bit_vector_version, { - 'source_tmpl': 'Bit-Vector-%s.tar.gz' % bit_vector_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], - }), - ('Parse::RecDescent', parse_recdescent_version, { - 'source_tmpl': 'Parse-RecDescent-%s.tar.gz' % parse_recdescent_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], - }), - ('Inline', inline_version, { - 'source_tmpl': 'Inline-%s.tar.gz' % inline_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], - }), - ('File::ShareDir::Install', file_sharedir_install_version, { - 'source_tmpl': 'File-ShareDir-Install-%s.tar.gz' % file_sharedir_install_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Inline::C', inline_c_version, { - 'source_tmpl': 'Inline-C-%s.tar.gz' % inline_c_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], - }), - ('IO::All', io_all_version, { - 'source_tmpl': 'IO-All-%s.tar.gz' % io_all_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], - }), - ('IO::Prompt', io_prompt_version, { - 'source_tmpl': 'IO-Prompt-%s.tar.gz' % io_prompt_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], - }), - ('Getopt::Long', getopt_long_version, { - 'source_tmpl': 'Getopt-Long-%s.tar.gz' % getopt_long_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JV/JV/'], - }), - ('AppConfig', appconfig_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], - }), - ('Archive::Extract', archive_extract_version, { - 'source_tmpl': 'Archive-Extract-%s.tar.gz' % archive_extract_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Archive::Tar', archive_tar_version, { - 'source_tmpl': 'Archive-Tar-%s.tar.gz' % archive_tar_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Archive::Zip', archive_zip_version, { - 'source_tmpl': 'Archive-Zip-%s.tar.gz' % archive_zip_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], - }), - ('Authen::SASL', authen_sasl_version, { - 'source_tmpl': 'Authen-SASL-%s.tar.gz' % authen_sasl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/'], - }), - ('B::Lint', b_lint_version, { - 'source_tmpl': 'B-Lint-%s.tar.gz' % b_lint_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Class::Accessor', class_accessor_version, { - 'source_tmpl': 'Class-Accessor-%s.tar.gz' % class_accessor_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], - }), - ('Class::DBI', class_dbi_version, { - 'source_tmpl': 'Class-DBI-v%s.tar.gz' % class_dbi_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], - }), - ('Class::Inspector', class_inspector_version, { - 'source_tmpl': 'Class-Inspector-%s.tar.gz' % class_inspector_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], - }), - ('Class::ISA', class_isa_version, { - 'source_tmpl': 'Class-ISA-%s.tar.gz' % class_isa_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/'], - }), - ('Class::Trigger', class_trigger_version, { - 'source_tmpl': 'Class-Trigger-%s.tar.gz' % class_trigger_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/'], - }), - ('CPANPLUS', cpanplus_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Data::Grove', libxml_perl_version, { - 'source_tmpl': 'libxml-perl-%s.tar.gz' % libxml_perl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KM/KMACLEOD/'], - }), - ('Data::UUID', data_uuid_version, { - 'source_tmpl': 'Data-UUID-%s.tar.gz' % data_uuid_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Date::Language', timedate_version, { - 'source_tmpl': 'TimeDate-%s.tar.gz' % timedate_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/'], - }), - ('Date::Handler', date_handler_version, { - 'source_tmpl': 'Date-Handler-%s.tar.gz' % date_handler_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BB/BBEAUSEJ/'], - }), - ('SQL::Statement', sql_statement_version, { - 'source_tmpl': 'SQL-Statement-%s.tar.gz' % sql_statement_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], - }), - ('Module::Pluggable', module_pluggable_version, { - 'source_tmpl': 'Module-Pluggable-%s.tar.gz' % module_pluggable_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SI/SIMONW/'], - }), - ('Digest::HMAC', digest_hmac_version, { - 'source_tmpl': 'Digest-HMAC-%s.tar.gz' % digest_hmac_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('Digest::SHA1', digest_sha1_version, { - 'source_tmpl': 'Digest-SHA1-%s.tar.gz' % digest_sha1_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('Email::Date::Format', email_date_format_version, { - 'source_tmpl': 'Email-Date-Format-%s.tar.gz' % email_date_format_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Error', error_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], - }), - ('Expect', expect_pm_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGIERSIG/'], - }), - ('File::CheckTree', file_checktree_version, { - 'source_tmpl': 'File-CheckTree-%s.tar.gz' % file_checktree_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('FreezeThaw', freezethaw_version, { - 'source_tmpl': 'FreezeThaw-%s.tar.gz' % freezethaw_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IL/ILYAZ/modules/'], - }), - ('Git', git_version, { - 'source_tmpl': 'Git-%s.tar.gz' % git_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MS/MSOUTH/'], - }), - ('GO::Utils', go_perl_version, { - 'source_tmpl': 'go-perl-%s.tar.gz' % go_perl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CM/CMUNGALL/'], - }), - ('GO', go_db_perl_version, { - 'source_tmpl': 'go-db-perl-%s.tar.gz' % go_db_perl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SJ/SJCARBON/'], - }), - - ('HTML::Form', html_form_version, { - 'source_tmpl': 'HTML-Form-%s.tar.gz' % html_form_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('HTTP::Cookies', http_cookies_version, { - 'source_tmpl': 'HTTP-Cookies-%s.tar.gz' % http_cookies_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('HTTP::Daemon', http_daemon_version, { - 'source_tmpl': 'HTTP-Daemon-%s.tar.gz' % http_daemon_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('HTTP::Negotiate', http_negotiate_version, { - 'source_tmpl': 'HTTP-Negotiate-%s.tar.gz' % http_negotiate_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('IO::Stringy', io_stringy_version, { - 'source_tmpl': 'IO-stringy-%s.tar.gz' % io_stringy_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DS/DSKOLL/'], - }), - ('IO::Socket::SSL', io_socket_ssl_version, { - 'source_tmpl': 'IO-Socket-SSL-%s.tar.gz' % io_socket_ssl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/'], - }), - ('JSON', json_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/'], - }), - ('Log::Message', log_message_version, { - 'source_tmpl': 'Log-Message-%s.tar.gz' % log_message_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Log::Message::Simple', log_message_simple_version, { - 'source_tmpl': 'Log-Message-Simple-%s.tar.gz' % log_message_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Mail::Util', mailtools_version, { - 'source_tmpl': 'MailTools-%s.tar.gz' % mailtools_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/'], - }), - ('MIME::Types', mime_types_version, { - 'source_tmpl': 'MIME-Types-%s.tar.gz' % mime_types_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/'], - }), - ('MIME::Lite', mime_lite_version, { - 'source_tmpl': 'MIME-Lite-%s.tar.gz' % mime_lite_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Net::HTTP', net_http_version, { - 'source_tmpl': 'Net-HTTP-%s.tar.gz' % net_http_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/'], - }), - ('Net::SMTP::SSL', net_smtp_ssl_version, { - 'source_tmpl': 'Net-SMTP-SSL-%s.tar.gz' % net_smtp_ssl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Object::Accessor', object_accessor_version, { - 'source_tmpl': 'Object-Accessor-%s.tar.gz' % object_accessor_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Pod::LaTeX', pod_latex_version, { - 'source_tmpl': 'Pod-LaTeX-%s.tar.gz' % pod_latex_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TJ/TJENNESS/'], - }), - ('Pod::Plainer', pod_plainer_version, { - 'source_tmpl': 'Pod-Plainer-%s.tar.gz' % pod_plainer_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RM/RMBARKER/'], - }), - ('Pod::POM', pod_pom_version, { - 'source_tmpl': 'Pod-POM-%s.tar.gz' % pod_pom_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/'], - }), - ('Shell', shell_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FE/FERREIRA/'], - }), - ('Statistics::Descriptive', statistics_descriptive_version, { - 'source_tmpl': 'Statistics-Descriptive-%s.tar.gz' % statistics_descriptive_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], - }), - ('Switch', switch_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/'], - }), - ('Template', template_toolkit_version, { - 'source_tmpl': 'Template-Toolkit-%s.tar.gz' % template_toolkit_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AB/ABW/'], - }), - ('Term::UI', term_ui_version, { - 'source_tmpl': 'Term-UI-%s.tar.gz' % term_ui_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Text::Iconv', text_iconv_version, { - 'source_tmpl': 'Text-Iconv-%s.tar.gz' % text_iconv_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/'], - }), - ('Text::Soundex', text_soundex_version, { - 'source_tmpl': 'Text-Soundex-%s.tar.gz' % text_soundex_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Time::Piece', time_piece_version, { - 'source_tmpl': 'Time-Piece-%s.tar.gz' % time_piece_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ES/ESAYM/'], - }), - ('Time::Piece::MySQL', time_piece_mysql_version, { - 'source_tmpl': 'Time-Piece-MySQL-%s.tar.gz' % time_piece_mysql_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], - }), - ('UNIVERSAL::moniker', universal_moniker_version, { - 'source_tmpl': 'UNIVERSAL-moniker-%s.tar.gz' % universal_moniker_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KA/KASEI/'], - }), - ('version', version_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JP/JPEACOCK/'], - }), - ('WWW::RobotRules', www_robotrules_version, { - 'source_tmpl': 'WWW-RobotRules-%s.tar.gz' % www_robotrules_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], - }), - ('XML::SAX::Writer', xml_sax_writer_version, { - 'source_tmpl': 'XML-SAX-Writer-%s.tar.gz' % xml_sax_writer_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERIGRIN/'], - }), - ('XML::Simple', xml_simple_version, { - 'source_tmpl': 'XML-Simple-%s.tar.gz' % xml_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/'], - }), - ('XML::XPath', xml_xpath_version, { - 'source_tmpl': 'XML-XPath-%s.tar.gz' % xml_xpath_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MA/MANWAR/'], - }), - ('DBD::AnyData', dbd_anydata_version, { - 'source_tmpl': 'DBD-AnyData-%s.tar.gz' % dbd_anydata_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/'], - }), - ('Ima::DBI', ima_dbi_version, { - 'source_tmpl': 'Ima-DBI-%s.tar.gz' % ima_dbi_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PERRIN/'], - }), - ('DBIx::ContextualFetch', dbix_contextualfetch_version, { - 'source_tmpl': 'DBIx-ContextualFetch-%s.tar.gz' % dbix_contextualfetch_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/'], - }), - ('DBIx::Simple', dbix_simple_version, { - 'source_tmpl': 'DBIx-Simple-%s.tar.gz' % dbix_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JU/JUERD/'], - }), - ('Term::ReadKey', term_readkey_version, { - 'source_tmpl': 'TermReadKey-%s.tar.gz' % term_readkey_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/'], -# 'patches': ['TermReadKey-2.32.patch'], - }), - ('Moo', moo_version, { - 'source_tmpl': 'Moo-%s.tar.gz' % moo_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], - }), - ('strictures', strictures_version, { - 'source_tmpl': 'strictures-%s.tar.gz' % strictures_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], - }), - ('File::Find::Rule::Perl', file_find_rule_perl_version, { - 'source_tmpl': 'File-Find-Rule-Perl-%s.tar.gz' % file_find_rule_perl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), - ('Test::Version', test_version_version, { - 'source_tmpl': 'Test-Version-%s.tar.gz' % test_version_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/'], - }), - ('Test::Harness', test_harness_version, { - 'source_tmpl': 'Test-Harness-%s.tar.gz' % test_harness_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/'], - }), - ('Import::Into', import_into_version, { - 'source_tmpl': 'Import-Into-%s.tar.gz' % import_into_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], - }), - ('File::Find::Rule', file_find_rule_version, { - 'source_tmpl': 'File-Find-Rule-%s.tar.gz' % file_find_rule_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], - }), - ('Data::Section::Simple', data_section_simple_version, { - 'source_tmpl': 'Data-Section-Simple-%s.tar.gz' % data_section_simple_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/'], - }), - ('Text::Glob', text_glob_version, { - 'source_tmpl': 'Text-Glob-%s.tar.gz' % text_glob_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], - }), - ('Number::Compare', number_compare_version, { - 'source_tmpl': 'Number-Compare-%s.tar.gz' % number_compare_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RC/RCLAMP/'], - }), - ('IPC::Run3', ipc_run3_version, { - 'source_tmpl': 'IPC-Run3-%s.tar.gz' % ipc_run3_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('Set::Array', set_array_version, { - 'source_tmpl': 'Set-Array-%s.tgz' % set_array_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/'], - }), - ('Bundle::BioPerl', bundle_bioperl_version, { - 'source_tmpl': 'Bundle-BioPerl-%s.tar.gz' % bundle_bioperl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CJ/CJFIELDS/'], - }), - ('Algorithm::Munkres', algorithm_munkres_version, { - 'source_tmpl': 'Algorithm-Munkres-%s.tar.gz' % algorithm_munkres_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TP/TPEDERSE/'], - }), -# Lots of deps: Types::Standard etc. -# ('Array::Compare', array_compare_version, { -# 'source_tmpl': 'Array-Compare-v%s.tar.gz' % array_compare_version, -# 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAVECROSS/'], -# }), - ('Graph', graph_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JH/JHI/'], - }), - ('Set::Scalar', set_scalar_version, { - 'source_tmpl': 'Set-Scalar-%s.tar.gz' % set_scalar_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DA/DAVIDO/'], - }), - ('CGI', cgi_version, { - 'source_tmpl': 'CGI-%s.tar.gz' % cgi_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LE/LEEJO/'], - }), - ('Bio::Phylo', bio_phylo_version, { - 'source_tmpl': 'Bio-Phylo-%s.tar.gz' % bio_phylo_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RV/RVOSA/'], - }), - ('SVG', svg_version, { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/'], - }), - ('XML::DOM', xml_dom_version, { - 'source_tmpl': 'XML-DOM-%s.tar.gz' % xml_dom_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/'], - }), - ('XML::DOM::XPath', xml_dom_xpath_version, { - 'source_tmpl': 'XML-DOM-XPath-%s.tar.gz' % xml_dom_xpath_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/'], - }), - ('XML::Parser::PerlSAX', libxml_perl_version, { - 'source_tmpl': 'libxml-perl-%s.tar.gz' % libxml_perl_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/K/KM/KMACLEOD/'], - }), - ('XML::Parser', xml_parser_version, { - 'source_tmpl': 'XML-Parser-%s.tar.gz' % xml_parser_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/'], - }), - ('XML::Twig', xml_twig_version, { - 'source_tmpl': 'XML-Twig-%s.tar.gz' % xml_twig_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MI/MIROD/'], - }), - ('XML::Writer', xml_writer_version, { - 'source_tmpl': 'XML-Writer-%s.tar.gz' % xml_writer_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JO/JOSEPHW/'], - }), - ('Spreadsheet::ParseExcel', spreadsheet_parseexcel_version, { - 'source_tmpl': 'Spreadsheet-ParseExcel-%s.tar.gz' % spreadsheet_parseexcel_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOUGW/'], - }), - ('Convert::Binary::C', convert_binary_c_version, { - 'source_tmpl': 'Convert-Binary-C-%s.tar.gz' % convert_binary_c_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MH/MHX/'], - }), - ('Sys::SigAction.pm', sys_sigaction_version, { - 'source_tmpl': 'Sys-SigAction-%s.tar.gz' % sys_sigaction_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], - }), - ('Acme::Damn', acme_damn_version, { - 'source_tmpl': 'Acme-Damn-%s.tar.gz' % acme_damn_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], - }), - ('Set::IntervalTree', set_intervaltree_version, { - 'source_tmpl': 'Set-IntervalTree-%s.tar.gz' % set_intervaltree_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], - }), - ('HTML::TableExtract', html_tableextract_version, { - 'source_tmpl': 'HTML-TableExtract-%s.tar.gz' % html_tableextract_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/M/MS/MSISK/'], - }), - ('Bio::Perl', bioperl_version, { - 'source_tmpl': 'BioPerl-%s.tar.gz' % bioperl_version, - 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], - }), - ('Bio::DB::Sam', bio_samtools_version, { - 'source_tmpl': 'Bio-SamTools-%s.tar.gz' % bio_samtools_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LD/LDS/'], - 'patches': ['Perl_SamTools_include.patch'], - }), - ('File::Spec::Functions', pathtools_version, { - 'source_tmpl': 'PathTools-%s.tar.gz' % pathtools_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/'], - }), - ('List::Util', scalar_list_utils_version, { - 'source_tmpl': 'Scalar-List-Utils-%s.tar.gz' % scalar_list_utils_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/'], - }), - ('Module::Load::Conditional', module_load_conditional_version, { - 'source_tmpl': 'Module-Load-Conditional-%s.tar.gz' % module_load_conditional_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/'], - }), - ('Scalar::Util::Numeric', scalar_util_numeric_version, { - 'source_tmpl': 'Scalar-Util-Numeric-%s.tar.gz' % scalar_util_numeric_version, - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CH/CHOCOLATE/'], - }), -] - -moduleclass = 'lang' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb deleted file mode 100644 index 877294f204..0000000000 --- a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.19-gimkl-2017a.eb +++ /dev/null @@ -1,21 +0,0 @@ -name = 'SAMtools' -version = '0.1.19' - -homepage = 'http://www.htslib.org/' -description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, - including sorting, merging, indexing and generating alignments in a per-position format.""" - -toolchain = {'name': 'gimkl', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} - -sources = [SOURCELOWER_TAR_BZ2] -source_urls = [('http://sourceforge.net/projects/samtools/files/%(namelower)s/%(version)s', 'download')] - -patches = ['SAMtools-%(version)s_Makefile-ncurses.patch'] - -dependencies = [ - ('ncurses', '6.0'), - ('zlib', '1.2.11'), -] - -moduleclass = 'bio' -- GitLab From 11c424082a6f064552f34bc0e74a766cebbbd695 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 15 Mar 2017 11:25:33 +0100 Subject: [PATCH 0732/1311] Add kaiju/1.5.0 --- .../k/Kaiju/kaiju-1.5.0-intel-2016b.eb | 27 ++++++++++++++++ .../k/Kaiju/kaiju-1.5.0-makefile.patch | 31 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb create mode 100644 easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch diff --git a/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb b/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb new file mode 100644 index 0000000000..1a3e1acaed --- /dev/null +++ b/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb @@ -0,0 +1,27 @@ +easyblock = 'MakeCp' + +name = 'Kaiju' +version = '1.5.0' + +homepage = 'http://kaiju.binf.ku.dk/' +description = """Kaiju is a program for sensitive taxonomic classification of high-throughput +sequencing reads from metagenomic whole genome sequencing experiments""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'cstd': 'c++11'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/bioinformatics-centre/kaiju/archive/'] + +patches = ['kaiju-%(version)s-makefile.patch'] + +start_dir = 'src' + +files_to_copy = ['bin'] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['kaiju', 'kaiju2krona', 'kaijup', 'kaijuReport', 'kaijux']], + 'dirs': [] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch b/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch new file mode 100644 index 0000000000..3ae20a25b6 --- /dev/null +++ b/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch @@ -0,0 +1,31 @@ +diff -ur kaiju-1.5.0.orig/src/bwt/Makefile kaiju-1.5.0/src/bwt/Makefile +--- kaiju-1.5.0.orig/src/bwt/Makefile 2017-02-20 16:22:04.000000000 +0100 ++++ kaiju-1.5.0/src/bwt/Makefile 2017-03-15 11:20:22.174636137 +0100 +@@ -1,7 +1,7 @@ +-CC = gcc ++CC ?= gcc + #CFLAGS = -g +-CFLAGS = -O3 -g -Wno-unused-result +-LDLIBS = -lpthread -lm ++CFLAGS ?= -O3 -g -Wno-unused-result ++LDLIBS ?= -lpthread -lm + + all: mkbwt mkfmi Makefile + +diff -ur kaiju-1.5.0.orig/src/makefile kaiju-1.5.0/src/makefile +--- kaiju-1.5.0.orig/src/makefile 2017-02-20 16:22:04.000000000 +0100 ++++ kaiju-1.5.0/src/makefile 2017-03-15 11:20:10.710515853 +0100 +@@ -1,8 +1,8 @@ +-CC = gcc +-CXX = g++ +-CFLAGS = -g -O3 -DNDEBUG -Wall -Wno-uninitialized +-CXXFLAGS = -ansi -pedantic -O3 -pthread -std=c++11 -g -DNDEBUG -Wall -Wconversion -Wno-unused-function +-LDLIBS = -lpthread ++CC ?= gcc ++CXX ?= g++ ++CFLAGS ?= -g -O3 -DNDEBUG -Wall -Wno-uninitialized ++CXXFLAGS ?= -ansi -pedantic -O3 -pthread -std=c++11 -g -DNDEBUG -Wall -Wconversion -Wno-unused-function ++LDLIBS ?= -lpthread + INCLUDES = -I./include/ProducerConsumerQueue/src -I./include/ncbi-blast+ + + BLASTOBJS = include/ncbi-blast+/algo/blast/core/pattern.o \ -- GitLab From 1042b8e7ef4cf2bd8866e1ab43a2d8b3ecd918f4 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 15 Mar 2017 11:35:58 +0100 Subject: [PATCH 0733/1311] Use capitals for easyconfig file --- .../{kaiju-1.5.0-intel-2016b.eb => Kaiju-1.5.0-intel-2016b.eb} | 0 .../{kaiju-1.5.0-makefile.patch => Kaiju-1.5.0-makefile.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/k/Kaiju/{kaiju-1.5.0-intel-2016b.eb => Kaiju-1.5.0-intel-2016b.eb} (100%) rename easybuild/easyconfigs/k/Kaiju/{kaiju-1.5.0-makefile.patch => Kaiju-1.5.0-makefile.patch} (100%) diff --git a/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb similarity index 100% rename from easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-intel-2016b.eb rename to easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb diff --git a/easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch similarity index 100% rename from easybuild/easyconfigs/k/Kaiju/kaiju-1.5.0-makefile.patch rename to easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch -- GitLab From 868ea7d2d5d5be6bdef3d33e8a91b89e1c230127 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 15 Mar 2017 11:45:23 +0100 Subject: [PATCH 0734/1311] Fix name of patch --- easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb index 1a3e1acaed..7f4e002400 100644 --- a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb +++ b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-intel-2016b.eb @@ -13,7 +13,7 @@ toolchainopts = {'cstd': 'c++11'} sources = ['v%(version)s.tar.gz'] source_urls = ['https://github.com/bioinformatics-centre/kaiju/archive/'] -patches = ['kaiju-%(version)s-makefile.patch'] +patches = ['%(name)s-%(version)s-makefile.patch'] start_dir = 'src' -- GitLab From fd9d12a31ff48581a75fe834c0c6bff21e99f62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Wed, 15 Mar 2017 15:14:09 +0100 Subject: [PATCH 0735/1311] {tools}Singularity-2.2.1-GCC-6.3.0 added --- .../Singularity-2.2.1-GCC-6.3.0-2.27.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb new file mode 100644 index 0000000000..e1e43de48b --- /dev/null +++ b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'Singularity' +version = '2.2.1' + +homepage = 'http://gmkurtzer.github.io/singularity' +description = """Singularity is a portable application stack packaging and runtime utility.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['https://github.com/gmkurtzer/singularity/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = './autogen.sh && ' + +sanity_check_paths = { + 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', 'libexec/singularity/sexec-suid'], + 'dirs': ['etc', 'libexec/singularity'], +} + +moduleclass = 'tools' -- GitLab From d388e8264a2f10668639379434435e81beb41709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= Date: Wed, 15 Mar 2017 15:20:01 +0100 Subject: [PATCH 0736/1311] {tools}Singularity-2.2.1-GCC-6.3.0 added comment `next steps after instalations` --- .../s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb index e1e43de48b..8c36b33253 100644 --- a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb @@ -20,4 +20,10 @@ sanity_check_paths = { 'dirs': ['etc', 'libexec/singularity'], } +# next steps after instalations +# INSTALATION_PATH=your_instalation_path +# chown root:root $INSTALATION_PATH/Singularity/*/etc/singularity/singularity.conf +# chown root:root $INSTALATION_PATH/Singularity/*/libexec/singularity/sexec-suid +# chmod +s $INSTALATION_PATH/Singularity/*/libexec/singularity/sexec-suid + moduleclass = 'tools' -- GitLab From 765acc339dc67081c2630070b3f5c726609a375f Mon Sep 17 00:00:00 2001 From: Damian Alvarez Date: Thu, 16 Mar 2017 09:32:27 +0100 Subject: [PATCH 0737/1311] Fixed wrong sanity check in Mesa --- .../m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb | 5 ++--- .../m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb | 5 ++--- .../m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb | 7 +++---- .../m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb | 7 +++---- .../easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb | 11 +++++++---- .../easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb | 11 +++++++---- .../m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb | 11 +++++++---- .../m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb | 11 +++++++---- .../m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb | 10 ++++++---- 14 files changed, 79 insertions(+), 54 deletions(-) diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb index 41d6a64d37..d8ac10c171 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb @@ -64,9 +64,8 @@ prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', - 'include/GL/wglext.h', 'include/GL/gl.h', - 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GL/wmesa.h'], + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', ^'include/GL/wmesa.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb index 8b03ae9140..d3f8230305 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb @@ -64,9 +64,8 @@ sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', - 'include/GL/wglext.h', 'include/GL/gl.h', - 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GL/wmesa.h'], + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', ^'include/GL/wmesa.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb index 5224023e11..7d75f18d6f 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.2-intel-2015b-Python-2.7.10.eb @@ -64,10 +64,9 @@ sanity_check_paths = { 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', - 'include/GL/wglext.h', 'include/GL/gl.h', - 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GLES/gl.h', 'include/GLES2/gl2.h', - 'include/GLES3/gl3.h'], + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb index ec21cce29c..346166fe00 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.0.8-intel-2015b-Python-2.7.11.eb @@ -64,10 +64,9 @@ sanity_check_paths = { 'lib/libGLESv1_CM.so', 'lib/libGLESv2.so', 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', - 'include/GL/wglext.h', 'include/GL/gl.h', - 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GLES/gl.h', 'include/GLES2/gl2.h', - 'include/GLES3/gl3.h'], + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb index 81337fce92..9b02d2b02b 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-foss-2016a.eb @@ -56,10 +56,13 @@ preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb index 84db881b8b..45545e7c83 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-gimkl-2.11.5.eb @@ -56,10 +56,13 @@ preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb index 9a2892bda4..92703769fd 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.1.2-intel-2016a.eb @@ -56,10 +56,13 @@ preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb index 8fe85b43fb..61b180d1ef 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2016a.eb @@ -56,10 +56,13 @@ preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb index c0ae4f1fc2..6660454e4c 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-intel-2016a.eb @@ -56,10 +56,13 @@ preconfigopts = ' libtoolize && ' prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb index b8a0ae2d3f..8376070490 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-foss-2016b.eb @@ -49,10 +49,13 @@ configopts += " --disable-driglx-direct --with-gallium-drivers='swrast,swr' --di configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-shared-libs " sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb index d9578ef42b..2ac60cb5d0 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-12.0.2-intel-2016b.eb @@ -49,10 +49,13 @@ configopts += " --disable-driglx-direct --with-gallium-drivers='swrast,swr' --di configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-shared-libs " sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, - 'lib/libGLESv2.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', - 'include/GL/osmesa.h', 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', 'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb index ea99e518c2..a2555dbfc0 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-goolf-1.4.10-Python-2.7.3.eb @@ -47,10 +47,13 @@ preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/s prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', - 'include/GL/glu_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', - 'include/GL/gl.h', 'include/GL/glu.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GL/vms_x_fix.h', 'include/GL/wmesa.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glu_mangle.h', 'include/GL/glx.h', + 'include/GL/osmesa.h', 'include/GL/gl.h', + 'include/GL/glu.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GL/vms_x_fix.h', + 'include/GL/wmesa.h'], 'dirs': [], } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb index 55c990890f..1ef5829725 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.3.0-Python-2.7.3.eb @@ -48,10 +48,13 @@ preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/s prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', - 'include/GL/glu_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/wglext.h', - 'include/GL/gl.h', 'include/GL/glu.h', 'include/GL/glxext.h', 'include/GL/glx_mangle.h', - 'include/GL/vms_x_fix.h', 'include/GL/wmesa.h'], + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glu_mangle.h', 'include/GL/glx.h', + 'include/GL/osmesa.h', 'include/GL/gl.h', + 'include/GL/glu.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GL/vms_x_fix.h', + 'include/GL/wmesa.h'], 'dirs': [], } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb index 4b5ad07db8..6f68f37b53 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-7.11.2-ictce-5.5.0-Python-2.7.6.eb @@ -48,10 +48,12 @@ preconfigopts = ' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/s prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' sanity_check_paths = { - 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', - 'include/GL/glu_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', - 'include/GL/wglext.h', 'include/GL/gl.h', 'include/GL/glu.h', - 'include/GL/glxext.h', 'include/GL/glx_mangle.h', 'include/GL/vms_x_fix.h', + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libGLU.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glu_mangle.h', 'include/GL/glx.h', + 'include/GL/osmesa.h', 'include/GL/gl.h', + 'include/GL/glu.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GL/vms_x_fix.h', 'include/GL/wmesa.h'], 'dirs': [] } -- GitLab From 2234ef0dd76e1809483f978a790f39731dc593c7 Mon Sep 17 00:00:00 2001 From: Damian Alvarez Date: Thu, 16 Mar 2017 10:02:28 +0100 Subject: [PATCH 0738/1311] Fixed a character introduced by mistake --- .../easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb | 2 +- .../easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb index d8ac10c171..8757076334 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.4.5-intel-2015a-Python-2.7.9.eb @@ -65,7 +65,7 @@ sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', ^'include/GL/wmesa.h'], + 'include/GL/glx_mangle.h', 'include/GL/wmesa.h'], 'dirs': [] } diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb index d3f8230305..ffc67154d8 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-10.5.5-intel-2015a-Python-2.7.10.eb @@ -65,7 +65,7 @@ sanity_check_paths = { 'include/GL/glext.h', 'include/GL/gl_mangle.h', 'include/GL/glx.h', 'include/GL/osmesa.h', 'include/GL/gl.h', 'include/GL/glxext.h', - 'include/GL/glx_mangle.h', ^'include/GL/wmesa.h'], + 'include/GL/glx_mangle.h', 'include/GL/wmesa.h'], 'dirs': [] } -- GitLab From e782dc8c1ec30ea348a225a9fa1dc9ce8d7651f5 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Thu, 16 Mar 2017 11:35:45 +0100 Subject: [PATCH 0739/1311] Explain what patch does --- easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch index 3ae20a25b6..94fd3d70c6 100644 --- a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch +++ b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch @@ -1,3 +1,5 @@ +# Let the makefiles use EB provides values if they are set +# wpoely86@gmail.com diff -ur kaiju-1.5.0.orig/src/bwt/Makefile kaiju-1.5.0/src/bwt/Makefile --- kaiju-1.5.0.orig/src/bwt/Makefile 2017-02-20 16:22:04.000000000 +0100 +++ kaiju-1.5.0/src/bwt/Makefile 2017-03-15 11:20:22.174636137 +0100 @@ -9,9 +11,9 @@ diff -ur kaiju-1.5.0.orig/src/bwt/Makefile kaiju-1.5.0/src/bwt/Makefile -LDLIBS = -lpthread -lm +CFLAGS ?= -O3 -g -Wno-unused-result +LDLIBS ?= -lpthread -lm - + all: mkbwt mkfmi Makefile - + diff -ur kaiju-1.5.0.orig/src/makefile kaiju-1.5.0/src/makefile --- kaiju-1.5.0.orig/src/makefile 2017-02-20 16:22:04.000000000 +0100 +++ kaiju-1.5.0/src/makefile 2017-03-15 11:20:10.710515853 +0100 @@ -27,5 +29,5 @@ diff -ur kaiju-1.5.0.orig/src/makefile kaiju-1.5.0/src/makefile +CXXFLAGS ?= -ansi -pedantic -O3 -pthread -std=c++11 -g -DNDEBUG -Wall -Wconversion -Wno-unused-function +LDLIBS ?= -lpthread INCLUDES = -I./include/ProducerConsumerQueue/src -I./include/ncbi-blast+ - + BLASTOBJS = include/ncbi-blast+/algo/blast/core/pattern.o \ -- GitLab From aa621c0d62036c47acd1ef0843033cc6e8f532f6 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Thu, 16 Mar 2017 11:44:38 +0100 Subject: [PATCH 0740/1311] Fix patch again (dropped whitespace) --- easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch index 94fd3d70c6..3ae20a25b6 100644 --- a/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch +++ b/easybuild/easyconfigs/k/Kaiju/Kaiju-1.5.0-makefile.patch @@ -1,5 +1,3 @@ -# Let the makefiles use EB provides values if they are set -# wpoely86@gmail.com diff -ur kaiju-1.5.0.orig/src/bwt/Makefile kaiju-1.5.0/src/bwt/Makefile --- kaiju-1.5.0.orig/src/bwt/Makefile 2017-02-20 16:22:04.000000000 +0100 +++ kaiju-1.5.0/src/bwt/Makefile 2017-03-15 11:20:22.174636137 +0100 @@ -11,9 +9,9 @@ diff -ur kaiju-1.5.0.orig/src/bwt/Makefile kaiju-1.5.0/src/bwt/Makefile -LDLIBS = -lpthread -lm +CFLAGS ?= -O3 -g -Wno-unused-result +LDLIBS ?= -lpthread -lm - + all: mkbwt mkfmi Makefile - + diff -ur kaiju-1.5.0.orig/src/makefile kaiju-1.5.0/src/makefile --- kaiju-1.5.0.orig/src/makefile 2017-02-20 16:22:04.000000000 +0100 +++ kaiju-1.5.0/src/makefile 2017-03-15 11:20:10.710515853 +0100 @@ -29,5 +27,5 @@ diff -ur kaiju-1.5.0.orig/src/makefile kaiju-1.5.0/src/makefile +CXXFLAGS ?= -ansi -pedantic -O3 -pthread -std=c++11 -g -DNDEBUG -Wall -Wconversion -Wno-unused-function +LDLIBS ?= -lpthread INCLUDES = -I./include/ProducerConsumerQueue/src -I./include/ncbi-blast+ - + BLASTOBJS = include/ncbi-blast+/algo/blast/core/pattern.o \ -- GitLab From 7db1bd4556ffbe3ed7aa2e128be29cb1016da9b6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 16 Mar 2017 12:26:50 +0100 Subject: [PATCH 0741/1311] adding easyconfigs: MyMediaLite-3.12-intel-2017a.eb, Mono-4.8.0.495-intel-2017a.eb --- .../m/Mono/Mono-4.8.0.495-intel-2017a.eb | 21 +++++++++++++++++++ .../MyMediaLite-3.12-intel-2017a.eb | 14 +++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/m/Mono/Mono-4.8.0.495-intel-2017a.eb create mode 100644 easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.12-intel-2017a.eb diff --git a/easybuild/easyconfigs/m/Mono/Mono-4.8.0.495-intel-2017a.eb b/easybuild/easyconfigs/m/Mono/Mono-4.8.0.495-intel-2017a.eb new file mode 100644 index 0000000000..7b8956bcd6 --- /dev/null +++ b/easybuild/easyconfigs/m/Mono/Mono-4.8.0.495-intel-2017a.eb @@ -0,0 +1,21 @@ +name = 'Mono' +version = '4.8.0.495' + +homepage = 'http://www.mono-project.com/' +description = """An open source, cross-platform, implementation of C# and the CLR that is + binary compatible with Microsoft.NET.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://download.mono-project.com/sources/mono/'] +sources = [SOURCELOWER_TAR_BZ2] + +builddependencies = [ + ('Autotools', '20150215'), + ('CMake', '3.7.2'), + ('gettext', '0.19.8.1'), +] + +configopts = "--with-large-heap=yes --without-x" + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.12-intel-2017a.eb b/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.12-intel-2017a.eb new file mode 100644 index 0000000000..63966d2c9c --- /dev/null +++ b/easybuild/easyconfigs/m/MyMediaLite/MyMediaLite-3.12-intel-2017a.eb @@ -0,0 +1,14 @@ +name = 'MyMediaLite' +version = '3.12' + +homepage = 'http://www.ismll.uni-hildesheim.de/mymedialite/' +description = """MyMediaLite is a lightweight, multi-purpose library of recommender system algorithms.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/zenogantner/MyMediaLite/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('Mono', '4.8.0.495')] + +moduleclass = 'lib' -- GitLab From 1c713b31d319cec1b07ac27b14befb58054f2b04 Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Thu, 16 Mar 2017 16:39:42 +0100 Subject: [PATCH 0742/1311] SAMtools 1.4 - 2 additional dependencies (additional compression algorithms), but also needs a modified easyblock as errmod.h and kprobaln.h are no loger provided nor needed. --- .../s/SAMtools/SAMtools-1.4-intel-2016b.eb | 40 +++++++++++++++++++ .../s/SAMtools/SAMtools-1.4_Makefile.patch | 21 ++++++++++ 2 files changed, 61 insertions(+) create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb new file mode 100644 index 0000000000..28fabf7d41 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb @@ -0,0 +1,40 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +## +name = 'SAMtools' +version = '1.4' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# Patch Makefile to link against zlib provided by EB +patches = ['SAMtools-%(version)s_Makefile.patch'] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch new file mode 100644 index 0000000000..321f1c822c --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch @@ -0,0 +1,21 @@ +# Use EB modules for zlib and ncurses +# Author: Kurt Lust, UAntwerpen +# Developed from the 1.3.1 patch by Adam Huffman of The Francis Crick Institute +--- samtools-1.4-orig/Makefile 2017-03-16 15:11:35.236460000 +0100 ++++ samtools-1.4/Makefile 2017-03-16 15:14:45.964895969 +0100 +@@ -86,13 +86,13 @@ + + ALL_CPPFLAGS = -I. $(HTSLIB_CPPFLAGS) $(CPPFLAGS) + ALL_LDFLAGS = $(HTSLIB_LDFLAGS) $(LDFLAGS) +-ALL_LIBS = -lz $(LIBS) ++ALL_LIBS = -L$(EBROOTZLIB) -lz $(LIBS) + + # Usually config.mk and config.h are generated by running configure + # or config.status, but if those aren't used create defaults here. + + config.mk: +- @sed -e '/^prefix/,/^LIBS/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#htslib-1.4#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;s/@CURSES_LIB@/-lcurses/g' config.mk.in > $@ ++ @sed -e '/^prefix/,/^LIBS/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#htslib-1.4#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;s/@CURSES_LIB@/-L$$(EBROOTNCURSES)\/lib -lcurses/g' config.mk.in > $@ + + config.h: + echo '/* Basic config.h generated by Makefile */' > $@ -- GitLab From bb9402e3934ef52a1cfa253c9eddae1cbff90600 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Fri, 17 Mar 2017 08:41:47 +0100 Subject: [PATCH 0743/1311] {lang}[foss/2016b] R/3.3.3 w/ X11-20160819 (REVIEW) --- easybuild/easyconfigs/r/R/Cairo-1.5-9.patch | 33 ++ .../r/R/R-3.3.3-foss-2016b-X11-20160819.eb | 509 ++++++++++++++++++ 2 files changed, 542 insertions(+) create mode 100644 easybuild/easyconfigs/r/R/Cairo-1.5-9.patch create mode 100644 easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb diff --git a/easybuild/easyconfigs/r/R/Cairo-1.5-9.patch b/easybuild/easyconfigs/r/R/Cairo-1.5-9.patch new file mode 100644 index 0000000000..e88f9455e6 --- /dev/null +++ b/easybuild/easyconfigs/r/R/Cairo-1.5-9.patch @@ -0,0 +1,33 @@ +# pkg-config --libs cairo-pdf +# and +# pkg-config --libs cairo-ps +# should return zlib library location, otherwise configure would use system zlib for cairo compilation tests +# (but not for the builds) +# in the cairo-{ps,pdf} +# Requires: cairo +# sould be +# Reuires: cairo zlib +# So It might be a cairo/pkg-config issue +# March 16th 2017 by B. Hajgato (Free Univeristy Brussels - VUB) +--- Cairo/MD5.org 2015-09-26 09:05:40.000000000 +0200 ++++ Cairo/MD5 2017-03-16 20:28:51.181957519 +0100 +@@ -4,7 +4,7 @@ + 652a130cdb89035bd21add505f09ff6c *R/Cairo.R + 45f780dde83799bfd5ec2d67659fded4 *R/imgtools.R + a9008f9a9abd726e834484d834008b47 *R/zzz.R +-c5196eb2ad5615b9198965124fbbc2f7 *configure ++0eb0d0ae1f7558f449dc797d3e37677d *configure + 938f465e81a73126bac6eabfdfce8ea0 *configure.ac + 9ab259fe324885b6524858aa98ab51ef *configure.win + 9b9c0bd04bd4f6444182d8a4b8e209b5 *man/Cairo.Rd +--- Cairo/configure.org 2015-09-25 19:49:11.000000000 +0200 ++++ Cairo/configure 2017-03-16 20:25:42.687704125 +0100 +@@ -3479,7 +3479,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${modlist}" >&5 + $as_echo "${modlist}" >&6; } + CAIRO_CFLAGS=`"${PKGCONF}" --cflags ${modlist}` +- CAIRO_LIBS=`"${PKGCONF}" --libs ${modlist}` ++ CAIRO_LIBS="-L$EBROOTZLIB/lib `"${PKGCONF}" --libs ${modlist}`" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb new file mode 100644 index 0000000000..2584758870 --- /dev/null +++ b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb @@ -0,0 +1,509 @@ +name = 'R' +version = '3.3.3' +x11ver = '20160819' +versionsuffix = '-X11-%s' % x11ver + +homepage = 'http://www.r-project.org/' +description = """R is a free software environment for statistical computing and graphics.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] + +preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +#Actually use Tcl/Tk +configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' +# Enable graphics capabilities for plotting. +configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" +# some recommended packages may fail in a parallel build (e.g. Matrix), and we're installing them anyway below +configopts += " --with-recommended-packages=no" + +dependencies = [ + ('X11', x11ver), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('cairo', '1.14.6'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), + ('zlib', '1.2.8'), + ('SQLite', '3.13.0'), + ('PCRE', '8.39'), + ('libpng', '1.6.24'), # for plotting in R + ('libjpeg-turbo', '1.5.0'), # for plottting in R + ('LibTIFF', '4.0.6'), + ('Java', '1.8.0_92', '', True), # Java bindings are built if Java is found, might as well provide it + ('Tcl', '8.6.5'), # for tcltk + ('Tk', '8.6.5'), # for tcltk + ('cURL', '7.49.1'), # for RCurl + ('libxml2', '2.9.4'), # for XML + ('GDAL', '2.1.0'), # for rgdal + ('PROJ', '4.9.2'), # for rgdal + ('GMP', '6.1.1'), # for igraph + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +name_tmpl = '%(name)s_%(version)s.tar.gz' +ext_options = { + 'source_urls': [ + 'http://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'http://cran.r-project.org/src/contrib/', # current version of packages + 'http://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': name_tmpl, +} + +# !! order of packages is important !! +# packages updated on March 7th 2017 +exts_list = [ + # default libraries, only here to sanity check their presence + 'base', + 'datasets', + 'graphics', + 'grDevices', + 'grid', + 'methods', + 'splines', + 'stats', + 'stats4', + 'tools', + 'utils', + # non-standard libraries, should be specified with fixed versions! + ('Rmpi', '0.6-6', ext_options), + ('abind', '1.4-5', ext_options), + ('magic', '1.5-6', ext_options), + ('geometry', '0.3-6', ext_options), + ('bit', '1.1-12', ext_options), + ('filehash', '2.3', ext_options), + ('ff', '2.2-13', ext_options), + ('bnlearn', '4.1', ext_options), + ('bootstrap', '2017.2', ext_options), + ('combinat', '0.0-8', ext_options), + ('deal', '1.2-37', ext_options), + ('fdrtool', '1.2.15', ext_options), + ('formatR', '1.4', ext_options), + ('gtools', '3.5.0', ext_options), + ('gdata', '2.17.0', ext_options), + ('GSA', '1.03', ext_options), + ('highr', '0.6', ext_options), + ('infotheo', '1.2.0', ext_options), + ('lars', '1.2', ext_options), + ('lazy', '1.2-15', ext_options), + ('kernlab', '0.9-25', ext_options), + ('mime', '0.5', ext_options), + ('markdown', '0.7.7', ext_options), + ('mlbench', '2.1-1', ext_options), + ('NLP', '0.1-10', ext_options), + ('mclust', '5.2.2', ext_options), + ('RANN', '2.5', ext_options), + ('rmeta', '2.16', ext_options), + ('segmented', '0.5-1.4', ext_options), + ('som', '0.3-5.1', ext_options), + ('SuppDists', '1.1-9.4', ext_options), + ('stabledist', '0.7-1', ext_options), + ('survivalROC', '1.0.3', ext_options), + ('pspline', '1.0-17', ext_options), + ('timeDate', '3012.100', ext_options), + ('longmemo', '1.0-0', ext_options), + ('ADGofTest', '0.3', ext_options), + ('ade4', '1.7-5', ext_options), + ('AlgDesign', '1.1-7.3', ext_options), + ('base64enc', '0.1-3', ext_options), + ('BH', '1.62.0-1', ext_options), + ('brew', '1.0-6', ext_options), + ('Brobdingnag', '1.2-4', ext_options), + ('corpcor', '1.6.8', ext_options), + ('longitudinal', '1.1.12', ext_options), + ('backports', '1.0.5', ext_options), + ('checkmate', '1.8.2', ext_options), + ('Rcpp', '0.12.9', ext_options), + ('cubature', '1.3-6', ext_options), + ('DEoptimR', '1.0-8', ext_options), + ('digest', '0.6.12', ext_options), + ('fastmatch', '1.1-0', ext_options), + ('ffbase', '0.12.3', ext_options), + ('iterators', '1.0.8', ext_options), + ('maps', '3.1.1', ext_options), + ('nnls', '1.4', ext_options), + ('sendmailR', '1.2-1', ext_options), + ('spam', '1.4-0', ext_options), + ('subplex', '1.2-2', ext_options), + ('stringi', '1.1.2', ext_options), + ('magrittr', '1.5', ext_options), + ('stringr', '1.2.0', ext_options), + ('evaluate', '0.10', ext_options), + ('logspline', '2.1.9', ext_options), + ('ncbit', '2013.03.29', ext_options), + ('permute', '0.9-4', ext_options), + ('plotrix', '3.6-4', ext_options), + ('randomForest', '4.6-12', ext_options), + ('scatterplot3d', '0.3-38', ext_options), + ('SparseM', '1.76', ext_options), + ('tripack', '1.3-8', ext_options), + ('irace', '2.1', ext_options), + ('rJava', '0.9-8', ext_options), + ('lattice', '0.20-34', ext_options), + ('RColorBrewer', '1.1-2', ext_options), + ('latticeExtra', '0.6-28', ext_options), + ('Matrix', '1.2-8', ext_options), + ('png', '0.1-7', ext_options), + ('RcppArmadillo', '0.7.700.0.0', ext_options), + ('plyr', '1.8.4', ext_options), + ('pROC', '1.9.1', ext_options), + ('quadprog', '1.5-5', ext_options), + ('BB', '2014.10-1', ext_options), + ('BBmisc', '1.11', ext_options), + ('fail', '1.3', ext_options), + ('rlecuyer', '0.3-4', ext_options), + ('snow', '0.4-2', ext_options), + ('MASS', '7.3-45', ext_options), + ('tree', '1.0-37', ext_options), + ('pls', '2.6-0', ext_options), + ('class', '7.3-14', ext_options), + ('e1071', '1.6-8', ext_options), + ('nnet', '7.3-12', ext_options), + ('nlme', '3.1-131', ext_options), + ('minqa', '1.2.4', ext_options), + ('RcppEigen', '0.3.2.9.0', ext_options), + ('MatrixModels', '0.4-1', ext_options), + ('quantreg', '5.29', ext_options), + ('mgcv', '1.8-17', ext_options), + ('colorspace', '1.3-2', ext_options), + ('robustbase', '0.92-7', ext_options), + ('sp', '1.2-4', ext_options), + ('zoo', '1.7-14', ext_options), + ('lmtest', '0.9-35', ext_options), + ('vcd', '1.4-3', ext_options), + ('snowfall', '1.84-6.1', ext_options), + ('rpart', '4.1-10', ext_options), + ('survival', '2.40-1', ext_options), + ('mice', '2.30', ext_options), + ('urca', '1.3-0', ext_options), + ('fracdiff', '1.4-2', ext_options), + ('logistf', '1.22', ext_options), + ('akima', '0.6-2', ext_options), + ('bitops', '1.0-6', ext_options), + ('boot', '1.3-18', ext_options), + ('mixtools', '1.1.0', ext_options), + ('cluster', '2.0.5', ext_options), + ('gclus', '1.3.1', ext_options), + ('coda', '0.19-1', ext_options), + ('codetools', '0.2-15', ext_options), + ('foreach', '1.4.3', ext_options), + ('doMC', '1.3.4', ext_options), + ('DBI', '0.6', ext_options), + ('foreign', '0.8-67', ext_options), + ('gam', '1.14', ext_options), + ('gamlss.data', '5.0-0', ext_options), + ('gamlss.dist', '5.0-0', ext_options), + ('hwriter', '1.3.2', ext_options), + ('KernSmooth', '2.23-15', ext_options), + ('xts', '0.9-7', ext_options), + ('TTR', '0.23-1', ext_options), + ('quantmod', '0.4-7', ext_options), + ('mnormt', '1.5-5', ext_options), + ('mvtnorm', '1.0-6', ext_options), + ('pcaPP', '1.9-61', ext_options), + ('numDeriv', '2016.8-1', ext_options), + ('lava', '1.4.7', ext_options), + ('prodlim', '1.6.1', ext_options), + ('pscl', '1.4.9', ext_options), + ('memoise', '1.0.0', ext_options), + ('plogr', '0.1-1', ext_options), + ('RSQLite', '1.1-2', ext_options), + ('BatchJobs', '1.6', ext_options), + ('sandwich', '2.3-4', ext_options), + ('sfsmisc', '1.1-0', ext_options), + ('spatial', '7.3-11', ext_options), + ('VGAM', '1.0-3', ext_options), + ('waveslim', '1.7.5', ext_options), + ('xtable', '1.8-2', ext_options), + ('profileModel', '0.5-9', ext_options), + ('brglm', '0.5-9', ext_options), + ('deSolve', '1.14', ext_options), + ('tseriesChaos', '0.1-13', ext_options), + ('tseries', '0.10-38', ext_options), + ('fastICA', '1.2-0', ext_options), + ('R.methodsS3', '1.7.1', ext_options), + ('R.oo', '1.21.0', ext_options), + ('cgdsr', '1.2.5', ext_options), + ('R.utils', '2.5.0', ext_options), + ('R.matlab', '3.6.1', ext_options), + ('gbm', '2.1.1', ext_options), + ('dichromat', '2.0-0', ext_options), + ('Formula', '1.2-1', ext_options), + ('acepack', '1.4.1', ext_options), + ('reshape2', '1.4.2', ext_options), + ('gtable', '0.2.0', ext_options), + ('munsell', '0.4.3', ext_options), + ('labeling', '0.3', ext_options), + ('scales', '0.4.1', ext_options), + ('proto', '1.0.0', ext_options), + ('lazyeval', '0.2.0', ext_options), + ('assertthat', '0.1', ext_options), + ('tibble', '1.2', ext_options), + ('ggplot2', '2.2.1', ext_options), + ('gridExtra', '2.2.1', ext_options), + ('chron', '2.3-50', ext_options), + ('data.table', '1.10.4', ext_options), + ('viridis', '0.3.4', ext_options), + ('yaml', '2.1.14', ext_options), + ('jsonlite', '1.3', ext_options), + ('htmltools', '0.3.5', ext_options), + ('htmlwidgets', '0.8', ext_options), + ('knitr', '1.15.1', ext_options), + ('htmlTable', '1.9', ext_options), + ('Hmisc', '4.0-2', ext_options), + ('fastcluster', '1.1.22', ext_options), + ('registry', '0.3', ext_options), + ('pkgmaker', '0.22', ext_options), + ('rngtools', '1.2.4', ext_options), + ('doParallel', '1.0.10', ext_options), + ('gridBase', '0.4-7', ext_options), + ('NMF', '0.20.6', ext_options), + ('irlba', '2.1.2', ext_options), + ('igraph', '1.0.1', ext_options), + ('GeneNet', '1.2.13', ext_options), + ('ape', '4.1', ext_options), + ('RJSONIO', '1.3-0', ext_options), + ('caTools', '1.17.1', ext_options), + ('gplots', '3.0.1', ext_options), + ('ROCR', '1.0-7', ext_options), + ('httpuv', '1.3.3', ext_options), + ('R6', '2.2.0', ext_options), + ('rjson', '0.2.15', ext_options), + ('sourcetools', '0.1.5', ext_options), + ('shiny', '1.0.0', ext_options), + ('seqinr', '3.3-3', ext_options), + ('LearnBayes', '2.15', ext_options), + ('deldir', '0.1-12', ext_options), + ('gmodels', '2.16.2', ext_options), + ('expm', '0.999-1', ext_options), + ('spdep', '0.6-11', ext_options), + ('dplyr', '0.5.0', ext_options), + ('vegan', '2.4-2', ext_options), + ('adegenet', '2.0.1', ext_options), + ('prettyunits', '1.0.2', ext_options), + ('progress', '1.1.2', ext_options), + ('rncl', '0.8.2', ext_options), + ('XML', '3.98-1.5', ext_options), + ('crayon', '1.3.2', ext_options), + ('praise', '1.0.0', ext_options), + ('testthat', '1.0.2', ext_options), + ('rprojroot', '1.2', ext_options), + ('rmarkdown', '1.3', ext_options), + ('curl', '2.3', ext_options), + ('openssl', '0.9.6', ext_options), + ('httr', '1.2.1', ext_options), + ('reshape', '0.8.6', ext_options), + ('xml2', '1.1.1', ext_options), + ('bold', '0.4.0', ext_options), + ('triebeard', '0.3.0', ext_options), + ('urltools', '1.6.0', ext_options), + ('httpcode', '0.2.0', ext_options), + ('crul', '0.3.0', ext_options), + ('rredlist', '0.3.0', ext_options), + ('rentrez', '1.0.4', ext_options), + ('rotl', '3.0.3', ext_options), + ('solrium', '0.4.0', ext_options), + ('ritis', '0.5.4', ext_options), + ('worrms', '0.1.0', ext_options), + ('natserv', '0.1.4', ext_options), + ('taxize', '0.8.4', ext_options), + ('tidyr', '0.6.1', ext_options), + ('uuid', '0.1-2', ext_options), + ('RNeXML', '2.0.7', ext_options), + ('phylobase', '0.8.2', ext_options), + ('adephylo', '1.1-10', ext_options), + ('animation', '2.4', ext_options), + ('bigmemory.sri', '0.1.3', ext_options), + ('bigmemory', '4.5.19', ext_options), + ('calibrate', '1.7.2', ext_options), + ('clusterGeneration', '1.3.4', ext_options), + ('raster', '2.5-8', ext_options), + ('dismo', '1.1-4', ext_options), + ('extrafontdb', '1.0', ext_options), + ('Rttf2pt1', '1.3.4', ext_options), + ('extrafont', '0.17', ext_options), + ('fields', '8.10', ext_options), + ('shapefiles', '0.7', ext_options), + ('fossil', '0.3.7', ext_options), + ('geiger', '2.0.6', ext_options), + ('glmnet', '2.0-5', ext_options), + ('rgl', '0.98.1', ext_options), + ('labdsv', '1.8-0', ext_options), + ('stabs', '0.6-2', ext_options), + ('modeltools', '0.2-21', ext_options), + ('strucchange', '1.5-1', ext_options), + ('TH.data', '1.0-8', ext_options), + ('multcomp', '1.4-6', ext_options), + ('coin', '1.1-3', ext_options), + ('party', '1.2-2', ext_options), + ('mboost', '2.7-0', ext_options), + ('msm', '1.6.4', ext_options), + ('nor1mix', '1.2-2', ext_options), + ('np', '0.60-2', ext_options), + ('polynom', '1.3-9', ext_options), + ('polspline', '1.1.12', ext_options), + ('rms', '5.1-0', ext_options), + ('RWekajars', '3.9.1-1', ext_options), + ('RWeka', '0.4-31', ext_options), + ('slam', '0.1-40', ext_options), + ('tm', '0.7-1', ext_options), + ('TraMineR', '1.8-13', ext_options), + ('chemometrics', '1.4.1', ext_options), + ('FNN', '1.1', ext_options), + ('ipred', '0.9-6', ext_options), + ('statmod', '1.4.29', ext_options), + ('miscTools', '0.6-22', ext_options), + ('maxLik', '1.3-4', ext_options), + ('mlogit', '0.2-4', ext_options), + ('getopt', '1.20.0', ext_options), + ('gsalib', '2.1', ext_options), + ('optparse', '1.3.2', ext_options), + ('klaR', '0.6-12', ext_options), + ('neuRosim', '0.2-12', ext_options), + ('locfit', '1.5-9.1', ext_options), + ('GGally', '1.3.0', ext_options), + ('beanplot', '1.2', ext_options), + ('clValid', '0.6-6', ext_options), + ('matrixStats', '0.51.0', ext_options), + ('DiscriMiner', '0.1-29', ext_options), + ('ellipse', '0.3-8', ext_options), + ('leaps', '3.0', ext_options), + ('nloptr', '1.0.4', ext_options), + ('lme4', '1.1-12', ext_options), + ('pbkrtest', '0.4-6', ext_options), + ('car', '2.1-4', ext_options), + ('flashClust', '1.01-2', ext_options), + ('FactoMineR', '1.35', ext_options), + ('flexclust', '1.3-4', ext_options), + ('flexmix', '2.3-13', ext_options), + ('prabclus', '2.2-6', ext_options), + ('diptest', '0.75-7', ext_options), + ('trimcluster', '0.1-2', ext_options), + ('fpc', '2.1-10', ext_options), + ('BiasedUrn', '1.07', ext_options), + ('TeachingDemos', '2.10', ext_options), + ('kohonen', '2.0.19', ext_options), + ('base64', '2.0', ext_options), + ('doRNG', '1.6', ext_options), + ('nleqslv', '3.2', ext_options), + ('RGCCA', '2.1', ext_options), + ('pheatmap', '1.0.8', ext_options), + ('openxlsx', '4.0.0', ext_options), + ('pvclust', '2.0-0', ext_options), + ('RCircos', '1.2.0', ext_options), + ('lambda.r', '1.1.9', ext_options), + ('futile.options', '1.0.0', ext_options), + ('futile.logger', '1.4.3', ext_options), + ('VennDiagram', '1.6.17', ext_options), + ('xlsxjars', '0.6.1', ext_options), + ('xlsx', '0.5.7', ext_options), + ('forecast', '8.0', ext_options), + ('fma', '2.3', ext_options), + ('expsmooth', '2.3', ext_options), + ('fpp', '0.5', ext_options), + ('maptools', '0.9-1', ext_options), + ('tensor', '1.5', ext_options), + ('polyclip', '1.5-6', ext_options), + ('goftest', '1.0-4', ext_options), + ('spatstat', '1.49-0', ext_options), + ('rgdal', '1.2-5', ext_options), + ('gdalUtils', '2.0.1.7', ext_options), + ('pracma', '1.9.9', ext_options), + ('RCurl', '1.95-4.8', ext_options), + ('bio3d', '2.3-1', ext_options), + ('AUC', '0.3.0', ext_options), + ('interpretR', '0.2.4', ext_options), + ('cvAUC', '1.1.0', ext_options), + ('SuperLearner', '2.0-21', ext_options), + ('lpSolve', '5.6.13', ext_options), + ('mediation', '4.4.5', ext_options), + ('ModelMetrics', '1.1.0', ext_options), + ('caret', '6.0-73', ext_options), + ('adabag', '4.1', ext_options), + ('parallelMap', '1.3', ext_options), + ('ParamHelpers', '1.10', ext_options), + ('ggvis', '0.4.3', ext_options), + ('mlr', '2.10', ext_options), + ('unbalanced', '2.0', ext_options), + ('RSNNS', '0.4-9', ext_options), + ('abc.data', '1.0', ext_options), + ('abc', '2.1', ext_options), + ('lhs', '0.14', ext_options), + ('tensorA', '0.36', ext_options), + ('EasyABC', '1.5', ext_options), + ('shape', '1.4.2', ext_options), + ('whisker', '0.3-2', ext_options), + ('rstudioapi', '0.6', ext_options), + ('commonmark', '1.2', ext_options), + ('desc', '1.1.0', ext_options), + ('roxygen2', '6.0.1', ext_options), + ('git2r', '0.18.0', ext_options), + ('rversions', '1.0.3', ext_options), + ('withr', '1.0.2', ext_options), + ('devtools', '1.12.0', ext_options), + ('Rook', '1.1-1', ext_options), + ('Cairo', '1.5-9', dict(ext_options.items() + [('patches', ['Cairo-1.5-9.patch'])])), + ('RMTstat', '0.3', ext_options), + ('Lmoments', '1.2-3', ext_options), + ('distillery', '1.0-2', ext_options), + ('extRemes', '2.0-8', ext_options), + ('pixmap', '0.4-11', ext_options), + ('tkrplot', '0.0-23', ext_options), + ('misc3d', '0.8-4', ext_options), + ('multicool', '0.1-10', ext_options), + ('ks', '1.10.5', ext_options), + ('logcondens', '2.1.5', ext_options), + ('Iso', '0.0-17', ext_options), + ('penalized', '0.9-50', ext_options), + ('clusterRepro', '0.5-1.1', ext_options), + ('randomForestSRC', '2.4.2', ext_options), + ('sm', '2.2-5.4', ext_options), + ('psych', '1.6.12', ext_options), + ('pbivnorm', '0.6.0', ext_options), + ('lavaan', '0.5-23.1097', ext_options), + ('matrixcalc', '1.0-3', ext_options), + ('arm', '1.9-3', ext_options), + ('mi', '1.0', ext_options), + ('visNetwork', '1.0.3', ext_options), + ('rgexf', '0.15.3', ext_options), + ('influenceR', '0.1.0', ext_options), + ('DiagrammeR', '0.9.0', ext_options), + ('sem', '3.1-8', ext_options), + ('jpeg', '0.1-8', ext_options), + ('network', '1.13.0', ext_options), + ('statnet.common', '3.3.0', ext_options), + ('sna', '2.4', ext_options), + ('glasso', '1.8', ext_options), + ('huge', '1.2.7', ext_options), + ('d3Network', '0.5.2.1', ext_options), + ('ggm', '2.3', ext_options), + ('qgraph', '1.4.2', ext_options), + ('diveRsity', '1.9.89', ext_options), + ('doSNOW', '1.0.14', ext_options), + ('phangorn', '2.1.1', ext_options), + ('geepack', '1.2-1', ext_options), + ('lubridate', '1.6.0', ext_options), + ('biom', '0.3.12', ext_options), + ('pim', '2.0.0.2', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), + ('bmp', '0.2', ext_options), + ('readbitmap', '0.1-4', ext_options), + ('purrr', '0.2.2', ext_options), + ('imager', '0.31', ext_options), +] + +moduleclass = 'lang' + -- GitLab From 80146673bc89daf3861e7df57114c0aa32a68f23 Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Fri, 17 Mar 2017 10:03:41 +0100 Subject: [PATCH 0744/1311] Removed unnecessary patch from SAMtools 1.4 and 1.3.1 for intel/2016b and removed the 1.4 patch file from the repository. --- .../s/SAMtools/SAMtools-1.3.1-intel-2016b.eb | 3 --- .../s/SAMtools/SAMtools-1.4-intel-2016b.eb | 3 --- .../s/SAMtools/SAMtools-1.4_Makefile.patch | 21 ------------------- 3 files changed, 27 deletions(-) delete mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.3.1-intel-2016b.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.3.1-intel-2016b.eb index 068f81d41a..ad73efb9d9 100644 --- a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.3.1-intel-2016b.eb +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.3.1-intel-2016b.eb @@ -22,9 +22,6 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] sources = [SOURCELOWER_TAR_BZ2] -# Patch Makefile to link against zlib provided by EB -patches = ['SAMtools-%(version)s_Makefile.patch'] - dependencies = [ ('ncurses', '6.0'), ('zlib', '1.2.8'), diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb index 28fabf7d41..3167310f24 100644 --- a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2016b.eb @@ -25,9 +25,6 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] sources = [SOURCELOWER_TAR_BZ2] -# Patch Makefile to link against zlib provided by EB -patches = ['SAMtools-%(version)s_Makefile.patch'] - # The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. # The latter is currently provided by XZ. dependencies = [ diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch deleted file mode 100644 index 321f1c822c..0000000000 --- a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4_Makefile.patch +++ /dev/null @@ -1,21 +0,0 @@ -# Use EB modules for zlib and ncurses -# Author: Kurt Lust, UAntwerpen -# Developed from the 1.3.1 patch by Adam Huffman of The Francis Crick Institute ---- samtools-1.4-orig/Makefile 2017-03-16 15:11:35.236460000 +0100 -+++ samtools-1.4/Makefile 2017-03-16 15:14:45.964895969 +0100 -@@ -86,13 +86,13 @@ - - ALL_CPPFLAGS = -I. $(HTSLIB_CPPFLAGS) $(CPPFLAGS) - ALL_LDFLAGS = $(HTSLIB_LDFLAGS) $(LDFLAGS) --ALL_LIBS = -lz $(LIBS) -+ALL_LIBS = -L$(EBROOTZLIB) -lz $(LIBS) - - # Usually config.mk and config.h are generated by running configure - # or config.status, but if those aren't used create defaults here. - - config.mk: -- @sed -e '/^prefix/,/^LIBS/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#htslib-1.4#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;s/@CURSES_LIB@/-lcurses/g' config.mk.in > $@ -+ @sed -e '/^prefix/,/^LIBS/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#htslib-1.4#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;s/@CURSES_LIB@/-L$$(EBROOTNCURSES)\/lib -lcurses/g' config.mk.in > $@ - - config.h: - echo '/* Basic config.h generated by Makefile */' > $@ -- GitLab From e96b2fbf0f49b0f448e32e7029def139d9143e3a Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Fri, 17 Mar 2017 17:38:10 +0800 Subject: [PATCH 0745/1311] prepare release notes for eb312 --- RELEASE_NOTES | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 96a76caa5a..a515a07590 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,6 +6,36 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,647 easyconfig files, for 1,168 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.1.2 (March 17th 2017) +------------------------ + +bugfix release +- added example easyconfig files for 12 new software packages: + - DBG2OLC (#4281), disambiguate (#4125), fqtrim (#4280), GFOLD (#4293), Kaiju (#4349), LSMS (#4335), + L_RNA_scaffolder (#4282), PileOMeth (#4289), psycopg2 (#4319), QGIS (#4307), QJson (#4305), + QScintilla (#4306, #4313) +- added additional easyconfigs for various supported software packages, including: + - BLAT v3.5, FFTW v3.3.6, flex v2.6.3, FreeXL v1.0.2, GDAL v2.1.3, GEOS v3.6.1, GROMACS v2016.2 + v2016.3, + HDF5 1.10.0-patch1, help2man v1.47.4, ImageJ v1.51k, libspatialindex v1.8.5, libspatialite v4.3.0a, M4 v1.4.18, + Mono v4.8.0.495, MyMediaLite v3.12, PGI v17.1, PROJ v4.9.3, PyQt v4.12, QCA v2.1.3, QwtPolar v1.1.1, Qwt v6.1.3, + requests v2.13.0, SIP v4.19, SPAdes v3.10.1, STAR v2.5.2b, SWASH v4.01, SWIG v3.0.11, Tensorflow v1.0.1, + ViennaRNA 2.3.4, Yasm v1.3.0 +- various enhancements, including: + - fix style in several easyconfigs (#4267-#4271, #4274, #4275, #4277, #4279, #4286-#4288, #4318) + - pass down $FFLAGS via FLAGS_OPT in SWASH easyconfigs (#4341) +- various bug fixes, including: + - fix missing PYTHONPATH in ROOT v6.08.02 easyconfig (#4239) + - correct libjpeg turbo references in GDAL (#4276) + - fix to be sure the HDF5 provided by easybuild is used in BLASR (#4278) + - miRDeep2 scripts do a hard check for an (empty) file named 'install_successful' in the install dir... (#4291) + - fix shebang in miRDeep2 Perl scripts (#4301) + - also check with Tcl module syntax, Lua is the default in EasyBuild v3.x (#4315) + - also copy Rfam_for_miRDeep.fa to mirDeep2 directory (#4316) + - detect use of '$root', which is not compatible with module files in Lua syntax (#4330) + - correctly set $PYTHONPATH in ROOT easyconfigs (#4331) + - add requests and psycopg2 as dependencies for QGIS (#4332) + + v3.1.1 (March 7th 2017) ----------------------- -- GitLab From e3cb8e7f412614e49f061056d460adc144640bcd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 17 Mar 2017 13:28:43 +0100 Subject: [PATCH 0746/1311] adding easyconfigs: sketchmap-20170130-intel-2016b.eb --- .../sketchmap-20170130-intel-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/s/sketchmap/sketchmap-20170130-intel-2016b.eb diff --git a/easybuild/easyconfigs/s/sketchmap/sketchmap-20170130-intel-2016b.eb b/easybuild/easyconfigs/s/sketchmap/sketchmap-20170130-intel-2016b.eb new file mode 100644 index 0000000000..6caab74f6e --- /dev/null +++ b/easybuild/easyconfigs/s/sketchmap/sketchmap-20170130-intel-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'MakeCp' + +name = 'sketchmap' +version = '20170130' +commit = '7e059bd' + +homepage = 'http://sketchmap.org/' +description = """Sketch-map is a dimensionality reduction algorithm that is particularly well suited to examining + the high-dimensionality data that is routinely produced in atomistic simulations.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/cosmo-epfl/sketchmap/archive/'] +sources = ['%s.tar.gz' % commit] + +buildopts = 'CXX="$CXX" MAKEDEPEND="$CXX -M \$(CXXFLAGS)" LLAPACK="$LIBLAPACK_MT"' + +files_to_copy = ['bin'] + +sanity_check_paths = { + 'files': ['bin/dimdist', 'bin/dimlandmark', 'bin/dimproj', 'bin/dimred'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From b886e0f5e7426e7fdb73dc73aa4eba4d96d134b8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 17 Mar 2017 15:25:31 +0100 Subject: [PATCH 0747/1311] adding easyconfigs: snaphu-1.4.2-intel-2016b.eb --- .../s/snaphu/snaphu-1.4.2-intel-2016b.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb new file mode 100644 index 0000000000..8397d4ea59 --- /dev/null +++ b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb @@ -0,0 +1,26 @@ +easyblock = 'MakeCp' + +name = 'snaphu' +version = '1.4.2' + +homepage = 'https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/' +description = """SNAPHU is an implementation of the Statistical-cost, Network-flow Algorithm for Phase Unwrapping + proposed by Chen and Zebker""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/'] +sources = ['snaphu-v%(version)s.tar.gz'] + +start_dir = 'src' + +buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' + +files_to_copy = ['bin', 'config', 'man'] + +sanity_check_paths = { + 'files': ['bin/snaphu'], + 'dirs': ['config', 'man'], +} + +moduleclass = 'math' -- GitLab From 5f80281a8224f78bc2f8b8544cb8fcb596f9b9ae Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 17 Mar 2017 15:25:51 +0100 Subject: [PATCH 0748/1311] adding easyconfigs: Triangle-1.6-intel-2016b.eb --- .../t/Triangle/Triangle-1.6-intel-2016b.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb diff --git a/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb new file mode 100644 index 0000000000..f3df6e7173 --- /dev/null +++ b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb @@ -0,0 +1,38 @@ +easyblock = 'MakeCp' + +name = 'Triangle' +version = '1.6' + +homepage = 'http://www.cs.cmu.edu/~quake/triangle.html' +description = """Triangle generates exact Delaunay triangulations, constrained Delaunay triangulations, + conforming Delaunay triangulations, Voronoi diagrams, and high-quality triangular meshes. + The latter can be generated with no small or large angles, + and are thus suitable for finite element analysis.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.netlib.org/voronoi/'] +sources = ['%(namelower)s.zip'] +checksums = [('md5', '10aff8d7950f5e0e2fb6dd2e340be2c9')] + +patches = ['%(name)s-%(version)s_makefile.patch'] + +dependencies = [ + ('X11', '20160819'), +] + +buildopts = 'triangle trilibrary' + +files_to_copy = [ + (['triangle', 'tricall'], 'bin'), + (['triangle.h'], 'include'), + (['libtriangle.a'], 'lib'), +] + +sanity_check_paths = { + 'files': ['bin/triangle', 'bin/tricall', 'include/triangle.h', 'lib/libtriangle.a'], + 'dirs': [] +} + +moduleclass = 'numlib' -- GitLab From 89a2a4661e0639138aef33016134925343aedb1b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 17 Mar 2017 15:32:46 +0100 Subject: [PATCH 0749/1311] remove unneeded X11 dep in Triangle easyconfig since 'showme' binary isn't being built --- easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb index f3df6e7173..77785bc785 100644 --- a/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb +++ b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2016b.eb @@ -18,10 +18,6 @@ checksums = [('md5', '10aff8d7950f5e0e2fb6dd2e340be2c9')] patches = ['%(name)s-%(version)s_makefile.patch'] -dependencies = [ - ('X11', '20160819'), -] - buildopts = 'triangle trilibrary' files_to_copy = [ -- GitLab From a10c62c9e46d52fa47d1eae69f094c52307c559b Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sat, 18 Mar 2017 09:33:54 +0100 Subject: [PATCH 0750/1311] adding easyconfigs: SAMtools-1.4-foss-2016b.eb --- .../s/SAMtools/SAMtools-1.4-foss-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-foss-2016b.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-foss-2016b.eb new file mode 100644 index 0000000000..340f9547b8 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-foss-2016b.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +## +name = 'SAMtools' +version = '1.4' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), +] + +moduleclass = 'bio' -- GitLab From 491b626efb646f6115990fb080b7267d23737efe Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Sat, 18 Mar 2017 10:06:18 +0100 Subject: [PATCH 0751/1311] adding easyconfigs: HTSlib-1.4-foss-2016b.eb, HTSlib-1.4-intel-2016b.eb --- .../h/HTSlib/HTSlib-1.4-foss-2016b.eb | 36 +++++++++++++++++++ .../h/HTSlib/HTSlib-1.4-intel-2016b.eb | 36 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-intel-2016b.eb diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-foss-2016b.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-foss-2016b.eb new file mode 100644 index 0000000000..9bdb215d4c --- /dev/null +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-foss-2016b.eb @@ -0,0 +1,36 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 1.4 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'HTSlib' +version = '1.4' + +homepage = "http://www.htslib.org/" +description = """A C library for reading/writing high-throughput sequencing data. + This package includes the utilities bgzip and tabix""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +# cURL added for S3 support +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), + ('cURL', '7.49.1'), +] + +sanity_check_paths = { + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.%s" % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-intel-2016b.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-intel-2016b.eb new file mode 100644 index 0000000000..5c5a91710c --- /dev/null +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4-intel-2016b.eb @@ -0,0 +1,36 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 1.4 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'HTSlib' +version = '1.4' + +homepage = "http://www.htslib.org/" +description = """A C library for reading/writing high-throughput sequencing data. + This package includes the utilities bgzip and tabix""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +# cURL added for S3 support +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), + ('cURL', '7.49.1'), +] + +sanity_check_paths = { + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.%s" % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 3e057c110297155dcb957faa7a10335bdc21613b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 18 Mar 2017 11:07:56 +0100 Subject: [PATCH 0752/1311] complete release notes for EasyBuild v3.1.2 & bump version --- RELEASE_NOTES | 40 ++++++++++++++++++---------------------- setup.py | 2 +- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index a515a07590..1faff06d0d 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,43 +3,39 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,647 easyconfig files, for 1,168 different software packages, +The latest version of easybuild-easyconfig provides 6,718 easyconfig files, for 1,182 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. -v3.1.2 (March 17th 2017) +v3.1.2 (March 20th 2017) ------------------------ -bugfix release -- added example easyconfig files for 12 new software packages: +bugfix/update release +- add patch to FFTW 3.3.6 easyconfigs to fix MPI F03 interface (#4334) + - note that this warrants rebuilding FFTW that is a part of foss/2017a +- added example easyconfig files for 14 new software packages: - DBG2OLC (#4281), disambiguate (#4125), fqtrim (#4280), GFOLD (#4293), Kaiju (#4349), LSMS (#4335), - L_RNA_scaffolder (#4282), PileOMeth (#4289), psycopg2 (#4319), QGIS (#4307), QJson (#4305), - QScintilla (#4306, #4313) -- added additional easyconfigs for various supported software packages, including: - - BLAT v3.5, FFTW v3.3.6, flex v2.6.3, FreeXL v1.0.2, GDAL v2.1.3, GEOS v3.6.1, GROMACS v2016.2 + v2016.3, - HDF5 1.10.0-patch1, help2man v1.47.4, ImageJ v1.51k, libspatialindex v1.8.5, libspatialite v4.3.0a, M4 v1.4.18, - Mono v4.8.0.495, MyMediaLite v3.12, PGI v17.1, PROJ v4.9.3, PyQt v4.12, QCA v2.1.3, QwtPolar v1.1.1, Qwt v6.1.3, - requests v2.13.0, SIP v4.19, SPAdes v3.10.1, STAR v2.5.2b, SWASH v4.01, SWIG v3.0.11, Tensorflow v1.0.1, - ViennaRNA 2.3.4, Yasm v1.3.0 + L_RNA_scaffolder (#4282), PileOMeth (#4289), psycopg2 (#4319), QGIS (#4307, #4332), QJson (#4305), + QScintilla (#4306, #4313), sketchmap (#4360), snaphu (#4362) +- added additional easyconfigs for various supported software packages, including GROMACS 2016.3, PGI 17.1, SAMtools 1.4 - various enhancements, including: - fix style in several easyconfigs (#4267-#4271, #4274, #4275, #4277, #4279, #4286-#4288, #4318) - - pass down $FFLAGS via FLAGS_OPT in SWASH easyconfigs (#4341) - various bug fixes, including: - - fix missing PYTHONPATH in ROOT v6.08.02 easyconfig (#4239) + - correctly set $PYTHONPATH in ROOT easyconfigs (#4239, #4331) - correct libjpeg turbo references in GDAL (#4276) - - fix to be sure the HDF5 provided by easybuild is used in BLASR (#4278) - - miRDeep2 scripts do a hard check for an (empty) file named 'install_successful' in the install dir... (#4291) - - fix shebang in miRDeep2 Perl scripts (#4301) - - also check with Tcl module syntax, Lua is the default in EasyBuild v3.x (#4315) - - also copy Rfam_for_miRDeep.fa to mirDeep2 directory (#4316) + - make sure that HDF5 provided via EasyBuild is used in BLASR easyconfigs (#4278) + - fix issues with miRDeep2 installation (#4291, #4301, #4316) + - also run tests with Tcl module syntax, Lua is the default in EasyBuild v3.x (#4315) + - fix PostgreSQL homepage + minor style fixes (#4318) - detect use of '$root', which is not compatible with module files in Lua syntax (#4330) - - correctly set $PYTHONPATH in ROOT easyconfigs (#4331) - - add requests and psycopg2 as dependencies for QGIS (#4332) + - fix homepage/source_urls for ViennaRNA (#4338) + - pass down $FFLAGS via FLAGS_OPT in SWASH easyconfigs (#4341) + - remove include/GL/wglext.h from Mesa sanity check (#4354) v3.1.1 (March 7th 2017) ----------------------- -bugfix release +bugfix/update release - added example easyconfig files for 16 new software packages: - Caffe (#3667), DIAMOND (#4107), fmt (#4131), googletest (#4132), igraph (#4172), MEGA (#4202), meRanTK (#4175), meshio (#4178), miRDeep2 (#4229, #4255), OOMPA (#4211), PBSuite (#4224, #4230), randfold (#4217), skewer (#4246), diff --git a/setup.py b/setup.py index 0683e432c9..0512590286 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.2.0.dev0' +VERSION = '3.1.2' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 4b402eaee4aa4427376aa3ab0871650e6e87758e Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Mar 2017 13:24:22 +0000 Subject: [PATCH 0753/1311] cannot have directories with trailing dot in windows --- .../s/{S.A.G.E. => SAGE}/S.A.G.E.-6.3.eb | 4 +-- easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/s/{S.A.G.E. => SAGE}/S.A.G.E.-6.3.eb (79%) create mode 100644 easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb diff --git a/easybuild/easyconfigs/s/S.A.G.E./S.A.G.E.-6.3.eb b/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb similarity index 79% rename from easybuild/easyconfigs/s/S.A.G.E./S.A.G.E.-6.3.eb rename to easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb index 28ef2c7ef6..52a2bd4d13 100644 --- a/easybuild/easyconfigs/s/S.A.G.E./S.A.G.E.-6.3.eb +++ b/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb @@ -7,14 +7,14 @@ easyblock = "Tarball" name = 'S.A.G.E.' version = '6.3' -homepage = 'https://code.google.com/archive/p/opensage/' +homepage = 'http://darwin.cwru.edu/sage/' description = """ S.A.G.E. (Statistical Analysis for Genetic Epidemiology) is free software package containing programs for use in the genetic analysis of family, pedigree and individual data.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/opensage/'] +source_urls = ['https://github.com/elstonsage/sageCore/releases/download/v6.3'] sources = ['%(name)sv%(version)s_Linux_x86_64.tar.gz'] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb b/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb new file mode 100644 index 0000000000..7935579b22 --- /dev/null +++ b/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb @@ -0,0 +1,25 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Ravi Tripathi +# Email: ravi89@uab.edu + +easyblock = "Tarball" + +name = 'S.A.G.E.' +version = '6.4' + +homepage = 'http://darwin.cwru.edu/sage/' +description = """ S.A.G.E. (Statistical Analysis for Genetic +Epidemiology) is free software package containing programs for +use in the genetic analysis of family, pedigree and individual data.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://darwin.cwru.edu/sage/files/'] +sources = ['%(name)sv%(version)s_Linux_x86_64.tar.gz'] + +sanity_check_paths = { + 'files': ["bin/freq", "bin/ageon", "bin/segreg"], + 'dirs': ["data_files", "documentaion"] +} + +moduleclass = 'bio' -- GitLab From 13f84a024104777d4ef6d6aa90f158b1d37a6589 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Mar 2017 13:31:51 +0000 Subject: [PATCH 0754/1311] rename so everything uses the non-dot names --- easybuild/easyconfigs/s/SAGE/{S.A.G.E.-6.3.eb => SAGE-6.3.eb} | 4 ++-- easybuild/easyconfigs/s/SAGE/{S.A.G.E.-6.4.eb => SAGE-6.4.eb} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename easybuild/easyconfigs/s/SAGE/{S.A.G.E.-6.3.eb => SAGE-6.3.eb} (90%) rename easybuild/easyconfigs/s/SAGE/{S.A.G.E.-6.4.eb => SAGE-6.4.eb} (90%) diff --git a/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb similarity index 90% rename from easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb rename to easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb index 52a2bd4d13..3ff2689829 100644 --- a/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.3.eb +++ b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb @@ -4,7 +4,7 @@ easyblock = "Tarball" -name = 'S.A.G.E.' +name = 'SAGE' version = '6.3' homepage = 'http://darwin.cwru.edu/sage/' @@ -15,7 +15,7 @@ use in the genetic analysis of family, pedigree and individual data.""" toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['https://github.com/elstonsage/sageCore/releases/download/v6.3'] -sources = ['%(name)sv%(version)s_Linux_x86_64.tar.gz'] +sources = ['S.A.G.E.v%(version)s_Linux_x86_64.tar.gz'] sanity_check_paths = { 'files': ["bin/freq", "bin/ageon", "bin/segreg"], diff --git a/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb b/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb similarity index 90% rename from easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb rename to easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb index 7935579b22..fa85d69211 100644 --- a/easybuild/easyconfigs/s/SAGE/S.A.G.E.-6.4.eb +++ b/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb @@ -4,7 +4,7 @@ easyblock = "Tarball" -name = 'S.A.G.E.' +name = 'SAGE' version = '6.4' homepage = 'http://darwin.cwru.edu/sage/' @@ -15,7 +15,7 @@ use in the genetic analysis of family, pedigree and individual data.""" toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://darwin.cwru.edu/sage/files/'] -sources = ['%(name)sv%(version)s_Linux_x86_64.tar.gz'] +sources = ['S.A.G.E.v%(version)s_Linux_x86_64.tar.gz'] sanity_check_paths = { 'files': ["bin/freq", "bin/ageon", "bin/segreg"], -- GitLab From 56f97bf6c0649519fd493ee0861496d065da3209 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Mar 2017 13:43:24 +0000 Subject: [PATCH 0755/1311] updating with checksums --- easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb | 1 + easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb | 1 + 2 files changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb index 3ff2689829..603afb8db8 100644 --- a/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb +++ b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb @@ -16,6 +16,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['https://github.com/elstonsage/sageCore/releases/download/v6.3'] sources = ['S.A.G.E.v%(version)s_Linux_x86_64.tar.gz'] +checksums = ['c94a0b9af656212251ce452f7b2f99ec'] sanity_check_paths = { 'files': ["bin/freq", "bin/ageon", "bin/segreg"], diff --git a/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb b/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb index fa85d69211..f518617128 100644 --- a/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb +++ b/easybuild/easyconfigs/s/SAGE/SAGE-6.4.eb @@ -16,6 +16,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = ['http://darwin.cwru.edu/sage/files/'] sources = ['S.A.G.E.v%(version)s_Linux_x86_64.tar.gz'] +checksums = ['da3b135389df1ab9a21288cb041ac0c3'] sanity_check_paths = { 'files': ["bin/freq", "bin/ageon", "bin/segreg"], -- GitLab From d6dc1c333d65c9336a6f0ccd622a6c05d0e0bbbe Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 18 Mar 2017 16:40:08 +0100 Subject: [PATCH 0756/1311] include #4368 in v3.1.2 release notes --- RELEASE_NOTES | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 1faff06d0d..a56c5c3afe 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -30,6 +30,7 @@ bugfix/update release - fix homepage/source_urls for ViennaRNA (#4338) - pass down $FFLAGS via FLAGS_OPT in SWASH easyconfigs (#4341) - remove include/GL/wglext.h from Mesa sanity check (#4354) + - rename S.A.G.E. to SAGE, can't have directories with trailing dot in Windows (#4368) v3.1.1 (March 7th 2017) -- GitLab From d7ce8c79da296aef4c19d2b976caa770d7552fbc Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Mar 2017 15:43:15 +0000 Subject: [PATCH 0757/1311] update with version variable --- easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb index 603afb8db8..3c539b01d1 100644 --- a/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb +++ b/easybuild/easyconfigs/s/SAGE/SAGE-6.3.eb @@ -14,7 +14,7 @@ use in the genetic analysis of family, pedigree and individual data.""" toolchain = {'name': 'dummy', 'version': 'dummy'} -source_urls = ['https://github.com/elstonsage/sageCore/releases/download/v6.3'] +source_urls = ['https://github.com/elstonsage/sageCore/releases/download/v%(version)s'] sources = ['S.A.G.E.v%(version)s_Linux_x86_64.tar.gz'] checksums = ['c94a0b9af656212251ce452f7b2f99ec'] -- GitLab From ecc192ceba36db967ebf16ba3ac1131f0f1c1ec4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 19 Mar 2017 18:29:56 +0100 Subject: [PATCH 0758/1311] add missing XZ dep in easyconfig for libunwind 1.1 w/ GCC/4.9.2, sync sanity_check_paths across libunwind easyconfigs --- .../easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb | 10 ++++++++++ .../l/libunwind/libunwind-1.1-foss-2015a.eb | 2 +- .../l/libunwind/libunwind-1.1-foss-2016a.eb | 1 + .../l/libunwind/libunwind-1.1-goolf-1.4.10.eb | 1 + .../l/libunwind/libunwind-1.1-ictce-5.3.0.eb | 1 + .../l/libunwind/libunwind-1.1-intel-2016b.eb | 1 + 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb index 6bc89f03e7..43105b8275 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb @@ -15,6 +15,16 @@ toolchain = {'name': 'GCC', 'version': '4.9.2'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] +checksums = [ + 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz +] + +dependencies = [ + ('XZ', '5.2.2'), +] + +preconfigopts = 'export LIBS="$LIBS -llzma" && ' + sanity_check_paths = { 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb index 15053fb3db..fe52e32d1e 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb @@ -26,7 +26,7 @@ dependencies = [ preconfigopts = 'export LIBS="$LIBS -llzma" && ' sanity_check_paths = { - 'files': ["include/libunwind.h", "lib/libunwind.%s" % SHLIB_EXT], + 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] } diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb index ac65492ae4..24e009d090 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb @@ -27,6 +27,7 @@ preconfigopts = 'export LIBS="$LIBS -llzma" && ' sanity_check_paths = { 'files': ["include/libunwind.h", "lib/libunwind.%s" % SHLIB_EXT], + 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] } diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb index 6d87f10400..daf551f8aa 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb @@ -27,6 +27,7 @@ preconfigopts = 'export LIBS="$LIBS -llzma" && ' sanity_check_paths = { 'files': ["include/libunwind.h", "lib/libunwind.%s" % SHLIB_EXT], + 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] } diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb index 6e07f18865..aae5a5fed7 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb @@ -27,6 +27,7 @@ preconfigopts = 'export LIBS="$LIBS -llzma" && ' sanity_check_paths = { 'files': ["include/libunwind.h", "lib/libunwind.%s" % SHLIB_EXT], + 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] } diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb index aea3c64e51..e201bb7758 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb @@ -27,6 +27,7 @@ preconfigopts = 'export LIBS="$LIBS -llzma" && ' sanity_check_paths = { 'files': ["include/libunwind.h", "lib/libunwind.%s" % SHLIB_EXT], + 'files': ['include/libunwind.h', ('lib/libunwind.%s' % SHLIB_EXT, 'lib64/libunwind.%s' % SHLIB_EXT)], 'dirs': [] } -- GitLab From ccf4d6591d7369bbba30a1af83fa1de8219b39d3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 19 Mar 2017 18:57:45 +0100 Subject: [PATCH 0759/1311] add missing XZ easyconfig --- .../easyconfigs/x/XZ/XZ-5.2.2-GCC-4.9.2.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-4.9.2.eb diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-4.9.2.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-4.9.2.eb new file mode 100644 index 0000000000..0423282a10 --- /dev/null +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCC-4.9.2.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'XZ' +version = '5.2.2' + +homepage = 'http://tukaani.org/xz/' +description = "xz: XZ utilities" + +toolchain = {'name': 'GCC', 'version': '4.9.2'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://tukaani.org/xz/'] + +patches = ['XZ-%(version)s_compat-libs.patch'] + +builddependencies = [ + ('Autotools', '20150215'), + ('gettext', '0.19.8', '', True), +] + +# may become useful in non-x86 archs +# configopts = ' --disable-assembler ' + +sanity_check_paths = { + 'files': ["bin/xz", "bin/lzmainfo"], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 2311bc03eae3c5cf5562baff913f2b366e778a45 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Mon, 20 Mar 2017 10:09:29 +0100 Subject: [PATCH 0760/1311] fix freetype dependency and moduleclass --- .../r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb index d40917cf4c..e7e4443ff3 100644 --- a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb @@ -21,7 +21,7 @@ sources = ['%(version)s.tar.gz'] dependencies = [ ('Python', '2.7.11'), ('ROOT','v6.08.02','-Python-%(pyver)s'), - ('matplotlib', '1.5.1', '-Python-%(pyver)s') + ('matplotlib', '1.5.1', '-freetype-2.6.3') ] sanity_check_paths = { @@ -29,4 +29,4 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -moduleclass = 'bio' +moduleclass = 'data' -- GitLab From cc70804b27f7ce9391e362ed0f27237036e51aed Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 20 Mar 2017 10:18:39 +0100 Subject: [PATCH 0761/1311] adding easyconfigs: QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb --- .../QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/q/QuTiP/QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/q/QuTiP/QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/q/QuTiP/QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..703fb053f6 --- /dev/null +++ b/easybuild/easyconfigs/q/QuTiP/QuTiP-4.1.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'QuTiP' +version = '4.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://qutip.org' +description = """QuTiP is open-source software for simulating the dynamics of open quantum systems.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://qutip.org/downloads/%(version)s/'] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'chem' -- GitLab From a797616eb175ed6650e8247579bb4f1a2f0fcbef Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Mon, 20 Mar 2017 12:37:28 +0100 Subject: [PATCH 0762/1311] Bowtie2 - With a patch to change the Makefile to use better compiler options for Intel, also based on a suggestion on the Allinea blog --- .../b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb | 45 +++++++++++++++++++ .../Bowtie2-2.2.9_optimize-intel.patch | 22 +++++++++ 2 files changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb create mode 100644 easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb new file mode 100644 index 0000000000..3817ce9c24 --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb @@ -0,0 +1,45 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# Modified by: Robert Schmidt +# Ottawa Hospital Research Institute - Bioinformatics Team +# Modified by: Adam Huffman +# The Francis Crick Institute +# Modified by: Kurt Lust, UAntwerp: Patch for better optimization with the +# Intel compilers, based on +# https://www.allinea.com/blog/201501/tuning-bowtie2-better-performance + +easyblock = 'MakeCp' + +name = 'Bowtie2' +version = '2.2.9' + +homepage = 'http://bowtie-bio.sourceforge.net/bowtie2/index.shtml' +description = """ Bowtie 2 is an ultrafast and memory-efficient tool for aligning sequencing reads + to long reference sequences. It is particularly good at aligning reads of about 50 up to 100s or 1,000s + of characters, and particularly good at aligning to relatively long (e.g. mammalian) genomes. + Bowtie 2 indexes the genome with an FM Index to keep its memory footprint small: for the human genome, + its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +sources = ['%(namelower)s-%(version)s-source.zip'] +source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] + +patches = ['Bowtie2-%(version)s_optimize-intel.patch'] + +files_to_copy = [ + (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", + "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), + "LICENSE", "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] + +sanity_check_paths = { + 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], + 'dirs': [], +} + +# to add script folder to path just uncomment this line +#modextrapaths = {'PATH': 'scripts'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch new file mode 100644 index 0000000000..7c5a3cf076 --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch @@ -0,0 +1,22 @@ +# Adapt Bowtie2 makefile to use compiler flags that are suited for icpc. +# Options are derived from the options that EasyBuild choses. +# In particular, the compile is no longer restricted to SSE2 but now +# uses -xHost so that AVX/AVX2 instructions will be attempted were appropriate, +# as suggested by https://www.allinea.com/blog/201501/tuning-bowtie2-better-performance +# Author: Kurt Lust, UAntwerp. +--- bowtie2-2.2.9-orig/Makefile 2016-03-10 16:15:50.000000000 +0100 ++++ bowtie2-2.2.9/Makefile 2017-03-20 11:06:20.521070416 +0100 +@@ -165,11 +165,9 @@ + $(error bowtie2 compilation requires a 64-bit platform ) + endif + +-SSE_FLAG=-msse2 +- +-DEBUG_FLAGS = -O0 -g3 -m64 $(SSE_FLAG) ++DEBUG_FLAGS = -std=c++11 -O0 -g3 -xHost -ftz -fp-speculation=safe -fp-model source + DEBUG_DEFS = -DCOMPILER_OPTIONS="\"$(DEBUG_FLAGS) $(EXTRA_FLAGS)\"" +-RELEASE_FLAGS = -O3 -m64 $(SSE_FLAG) -funroll-loops -g3 ++RELEASE_FLAGS = -std=c++11 -O2 -xHost -ftz -fp-speculation=safe -fp-model source + RELEASE_DEFS = -DCOMPILER_OPTIONS="\"$(RELEASE_FLAGS) $(EXTRA_FLAGS)\"" + NOASSERT_FLAGS = -DNDEBUG + FILE_FLAGS = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -- GitLab From 8a32fc2baa2a1f2e1780adbc366e0ecf34401c82 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Mar 2017 13:20:17 +0100 Subject: [PATCH 0763/1311] adding easyconfigs: imbalanced-learn-0.2.1-intel-2016b-Python-3.5.2.eb --- ...ed-learn-0.2.1-intel-2016b-Python-3.5.2.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..399d48b06b --- /dev/null +++ b/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'imbalanced-learn' +version = '0.2.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/scikit-learn-contrib/imbalanced-learn' +description = """imbalanced-learn is a Python package offering a number of re-sampling techniques commonly used in + datasets showing strong between-class imbalance.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.5.2'), + ('scikit-learn', '0.18.1', versionsuffix), +] + +options = {'modulename': 'imblearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From 2e7c9ddb5a373c9ffdb28645e29f2708c8380efb Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Mon, 20 Mar 2017 14:02:30 +0100 Subject: [PATCH 0764/1311] Bowtie2 for Intel: Changed the easyconfig so that the patch from the previous commit is not needed; removed the patch. --- .../b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb | 6 ++++- .../Bowtie2-2.2.9_optimize-intel.patch | 22 ------------------- 2 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb index 3817ce9c24..28ad38c224 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb @@ -27,7 +27,11 @@ toolchain = {'name': 'intel', 'version': '2016b'} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -patches = ['Bowtie2-%(version)s_optimize-intel.patch'] +toolchainopts = {'cstd': 'c++11'} + +# Make sure that the Makefile uses options for intel rather than the ones for gcc coded +# in the Makefile by setting RELEASE_FLAGS. +buildopts = 'RELEASE_FLAGS="$CXXFLAGS"' files_to_copy = [ (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch deleted file mode 100644 index 7c5a3cf076..0000000000 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9_optimize-intel.patch +++ /dev/null @@ -1,22 +0,0 @@ -# Adapt Bowtie2 makefile to use compiler flags that are suited for icpc. -# Options are derived from the options that EasyBuild choses. -# In particular, the compile is no longer restricted to SSE2 but now -# uses -xHost so that AVX/AVX2 instructions will be attempted were appropriate, -# as suggested by https://www.allinea.com/blog/201501/tuning-bowtie2-better-performance -# Author: Kurt Lust, UAntwerp. ---- bowtie2-2.2.9-orig/Makefile 2016-03-10 16:15:50.000000000 +0100 -+++ bowtie2-2.2.9/Makefile 2017-03-20 11:06:20.521070416 +0100 -@@ -165,11 +165,9 @@ - $(error bowtie2 compilation requires a 64-bit platform ) - endif - --SSE_FLAG=-msse2 -- --DEBUG_FLAGS = -O0 -g3 -m64 $(SSE_FLAG) -+DEBUG_FLAGS = -std=c++11 -O0 -g3 -xHost -ftz -fp-speculation=safe -fp-model source - DEBUG_DEFS = -DCOMPILER_OPTIONS="\"$(DEBUG_FLAGS) $(EXTRA_FLAGS)\"" --RELEASE_FLAGS = -O3 -m64 $(SSE_FLAG) -funroll-loops -g3 -+RELEASE_FLAGS = -std=c++11 -O2 -xHost -ftz -fp-speculation=safe -fp-model source - RELEASE_DEFS = -DCOMPILER_OPTIONS="\"$(RELEASE_FLAGS) $(EXTRA_FLAGS)\"" - NOASSERT_FLAGS = -DNDEBUG - FILE_FLAGS = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -- GitLab From 379f4c31ce260b1cbc92362a30c6426e81c4ef14 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Mar 2017 14:19:45 +0100 Subject: [PATCH 0765/1311] adding easyconfigs: SWASH-3.14-intel-2016b-mpi.eb, SWASH-3.14-intel-2017a-mpi.eb --- .../s/SWASH/SWASH-3.14-intel-2016b-mpi.eb | 31 +++++++++++++++++++ .../s/SWASH/SWASH-3.14-intel-2017a-mpi.eb | 31 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2016b-mpi.eb create mode 100644 easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2017a-mpi.eb diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2016b-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2016b-mpi.eb new file mode 100644 index 0000000000..82347e4014 --- /dev/null +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2016b-mpi.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'SWASH' +version = '3.14' +versionsuffix = '-mpi' + +homepage = 'http://swash.sourceforge.net/' +description = """SWASH is a general-purpose numerical tool for simulating unsteady, non-hydrostatic, free-surface, + rotational flow and transport phenomena in coastal waters as driven by waves, tides, buoyancy and wind forces.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['http://swash.sourceforge.net/download/zip/'] +sources = [SOURCELOWER_TAR_GZ] + +prebuildopts = "unset FC && make config && " +buildopts = 'mpi FLAGS_OPT="$FFLAGS"' + +parallel = 1 + +files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] + +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + +sanity_check_paths = { + 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], + 'dirs': [], +} + +moduleclass = 'cae' diff --git a/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2017a-mpi.eb b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2017a-mpi.eb new file mode 100644 index 0000000000..6b97716f50 --- /dev/null +++ b/easybuild/easyconfigs/s/SWASH/SWASH-3.14-intel-2017a-mpi.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'SWASH' +version = '3.14' +versionsuffix = '-mpi' + +homepage = 'http://swash.sourceforge.net/' +description = """SWASH is a general-purpose numerical tool for simulating unsteady, non-hydrostatic, free-surface, + rotational flow and transport phenomena in coastal waters as driven by waves, tides, buoyancy and wind forces.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://swash.sourceforge.net/download/zip/'] +sources = [SOURCELOWER_TAR_GZ] + +prebuildopts = "unset FC && make config && " +buildopts = 'mpi FLAGS_OPT="$FFLAGS"' + +parallel = 1 + +files_to_copy = [(['swash.exe', 'swashrun', 'SWASHRUN.README'], 'bin')] + +postinstallcmds = ["chmod a+rx %(installdir)s/bin/swash.exe %(installdir)s/bin/swashrun"] + +sanity_check_paths = { + 'files': ['bin/swash.exe', 'bin/swashrun', 'bin/SWASHRUN.README'], + 'dirs': [], +} + +moduleclass = 'cae' -- GitLab From 69933991035c5ce2ac99a843390487cd68109eca Mon Sep 17 00:00:00 2001 From: HPC core facility CalcUA Date: Mon, 20 Mar 2017 14:38:47 +0100 Subject: [PATCH 0766/1311] Bowtie2: Modified the comments as requested in the pull request comments. --- easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb index 28ad38c224..fa3d31dfa4 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb @@ -6,9 +6,8 @@ # Ottawa Hospital Research Institute - Bioinformatics Team # Modified by: Adam Huffman # The Francis Crick Institute -# Modified by: Kurt Lust, UAntwerp: Patch for better optimization with the -# Intel compilers, based on -# https://www.allinea.com/blog/201501/tuning-bowtie2-better-performance +# Modified by: Kurt Lust, UAntwerp: Overwrite compiler options used in the GNU-based +# Makefile with the preferred options for intel compilers. easyblock = 'MakeCp' -- GitLab From b97f2f6df4dd995e89280b15598056f4c66db77c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Mar 2017 15:11:03 +0100 Subject: [PATCH 0767/1311] adding easyconfigs: EasyBuild-3.1.2.eb --- .../e/EasyBuild/EasyBuild-3.1.2.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.2.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.2.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.2.eb new file mode 100644 index 0000000000..eaadea3b41 --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.1.2.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.1.2' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/ef/c7/640c6d791ba452321c0d1371b6626486bb495e0645bb896d33c78a09f810', + # vsc-base + 'https://pypi.python.org/packages/da/90/ee40b1a6a5bfed24139042c737500a9b45db0373a6735e76481fc860fe37', + # easybuild-framework + 'https://pypi.python.org/packages/fa/00/6a47862b38e6d921071d305deab4c494ae2eae58556c90c95e520fea28b9/', + # easybuild-easyblocks + 'https://pypi.python.org/packages/d6/55/9b6634b01fbc26edb9f5af39b06acbe7ec843da438ba5ac3063937934b3e', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/5a/4c/ea8faa46c7874a3d20f28e2d222a1f4a5e97a4f8052add338a785755ec89', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.25.tar.gz', + 'vsc-base-2.5.7.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From 80350c7b4c07f77f07a1b646bbc4f45cec83d619 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Mar 2017 18:06:38 +0100 Subject: [PATCH 0768/1311] bump version to v3.2.0.dev0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0512590286..0683e432c9 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.1.2' +VERSION = '3.2.0.dev0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From bf8085add933e30949220dbef4b6caba7ab1c34c Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Tue, 21 Mar 2017 15:19:13 +0800 Subject: [PATCH 0769/1311] adding easyconfigs: QuantumESPRESSO-6.1-intel-2017a.eb --- .../QuantumESPRESSO-6.1-intel-2017a.eb | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-6.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-6.1-intel-2017a.eb b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-6.1-intel-2017a.eb new file mode 100644 index 0000000000..4a105c34ef --- /dev/null +++ b/easybuild/easyconfigs/q/QuantumESPRESSO/QuantumESPRESSO-6.1-intel-2017a.eb @@ -0,0 +1,59 @@ +name = 'QuantumESPRESSO' +version = '6.1' + +homepage = 'http://www.pwscf.org/' +description = """Quantum ESPRESSO is an integrated suite of computer codes + for electronic-structure calculations and materials modeling at the nanoscale. + It is based on density-functional theory, plane waves, and pseudopotentials + (both norm-conserving and ultrasoft).""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +# major part of this list was determined from espresso/install/plugins_list +sources = [ + 'qe-%(version)s.tar.gz', + 'wannier90-2.1.0.tar.gz', + 'qe-gipaw-6.1.tar.gz', + # must be downloaded manually from + # http://qe-forge.org/gf/project/q-e/scmsvn/?action=browse&path=%2F%2Acheckout%2A%2Ftags%2FQE-5.2.1%2Fespresso%2Farchive%2Fplumed-1.3-qe.tar.gz&revision=11758 + # gets updated without changes to filename, cfr. http://qe-forge.org/pipermail/q-e-commits/2015-June/007359.html + # 'plumed-1.3-qe-r11758.tar.gz', + 'want-2.5.1-base.tar.gz', + 'West-2.0.1.tar.gz', + 'yambo-3.4.2.tgz', +] +missing_sources = [ + 'sax-2.0.3.tar.gz', # nowhere to be found +] +source_urls = [ + 'http://files.qe-forge.org/index.php?file=', # all sources, except espresso*.tar.gz + 'http://www.wannier.org/code/', # wannier90-2.1.0.tar.gz + 'http://qe-forge.org/gf/download/frsrelease/240/1075/', # qe-6.1.tar.gz + 'http://qe-forge.org/gf/download/frsrelease/153/618/', # want-2.5.1-base.tar.gz + 'http://www.west-code.org/downloads/', # West-2.0.1.tar.gz + 'http://qe-forge.org/gf/download/frsrelease/208/932/', # yambo-3.4.2.tgz +] + +patches = [ + 'QuantumESPRESSO-5.4.0_yambo-fixes.patch', +] + +# source checksums +checksums = [ + 'db398edcad76e085f8c8a3f6ecb7aaab', # qe-6.1.tar.gz + '07a81c002b41d6d0f97857e55c57d769', # wannier90-2.1.0.tar.gz + '178055353e59eb4dd8bebe27331f2927', # qe-gipaw-6.1.tar.gz + # 'f094031c6d13a0e00022daf4d7c847c7', # plumed-1.3-qe-r11758.tar.gz + 'ac365daebbe380bf4019235eacf71079', # want-2.5.1-base.tar.gz + '000abe6a5dccd1e722d1767c3dcd3996', # West-2.0.1.tar.gz + 'f0820a0f42dfc81ce3811af647bed777', # yambo-3.4.2.tgz +] + +# add plumed and uncomment the lines in sources and checksums if the package is downloaded manually +buildopts = 'all w90 epw gipaw want west yambo xspectra' # plumed + +# parallel build tends to fail +parallel = 1 + +moduleclass = 'chem' -- GitLab From 0a20d53f1dc9beebcf2f9938f2d84c9963a997a3 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Tue, 21 Mar 2017 11:00:13 +0100 Subject: [PATCH 0770/1311] fix versionsuffix dependency matplotlib --- .../r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb index e7e4443ff3..efecae95e8 100644 --- a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb @@ -21,7 +21,7 @@ sources = ['%(version)s.tar.gz'] dependencies = [ ('Python', '2.7.11'), ('ROOT','v6.08.02','-Python-%(pyver)s'), - ('matplotlib', '1.5.1', '-freetype-2.6.3') + ('matplotlib', '1.5.1', versionsuffix + '-freetype-2.6.3') ] sanity_check_paths = { -- GitLab From d1b093ed3d64f2b8d2bf4a6c35a9f356da607c82 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 13:06:07 +0100 Subject: [PATCH 0771/1311] sync Bowtie2 easyconfigs, consistently use Bowtie2 easyblock --- .../b/Bowtie2/Bowtie2-2.0.2-goolf-1.4.10.eb | 7 +++--- .../b/Bowtie2/Bowtie2-2.0.2-ictce-5.3.0.eb | 7 +++--- .../b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb | 8 +------ .../b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb | 8 +------ .../b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb | 12 +--------- .../b/Bowtie2/Bowtie2-2.1.0-ictce-5.5.0.eb | 3 +-- .../b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb | 13 +---------- .../b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb | 22 ++----------------- 19 files changed, 26 insertions(+), 197 deletions(-) diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-goolf-1.4.10.eb index 13ddeb08e1..f334c5a116 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-goolf-1.4.10.eb @@ -12,17 +12,18 @@ name = 'Bowtie2' version = '2.0.2' -altversions = ['2.0.0-beta6', '2.0.0-beta7', '2.0.1', '2.0.2'] homepage = 'http://bowtie-bio.sourceforge.net/bowtie2/index.shtml' description = """Bowtie 2 is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -# N.B. the download option above -> required for sourceforge + +# to add scripts folder to $PATH just uncomment this line +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-ictce-5.3.0.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-ictce-5.3.0.eb index 7f8fbd5ca6..fa8a4e145b 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.2-ictce-5.3.0.eb @@ -12,7 +12,6 @@ name = 'Bowtie2' version = '2.0.2' -altversions = ['2.0.0-beta6', '2.0.0-beta7', '2.0.1', '2.0.2'] homepage = 'http://bowtie-bio.sourceforge.net/bowtie2/index.shtml' description = """Bowtie 2 is an ultrafast and memory-efficient tool @@ -20,10 +19,12 @@ description = """Bowtie 2 is an ultrafast and memory-efficient tool toolchain = {'name': 'ictce', 'version': '5.3.0'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -# N.B. the download option above -> required for sourceforge + +# to add scripts folder to $PATH just uncomment this line +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb index 9469af37f5..a81247d559 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.5-goolf-1.4.10.eb @@ -3,8 +3,6 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.0.5' @@ -16,6 +14,7 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] @@ -24,11 +23,6 @@ files_to_copy = [ (["bowtie2", "bowtie2-align", "bowtie2-build", "bowtie2-inspect"], 'bin'), "doc", "example", "scripts"] -sanity_check_paths = { - 'files': ["bin/bowtie2-align", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add scripts folder to $PATH just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb index 264b5296c0..00cfc5cb06 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.0.6-goolf-1.4.10.eb @@ -3,8 +3,6 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.0.6' @@ -16,6 +14,7 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] @@ -24,11 +23,6 @@ files_to_copy = [ (["bowtie2", "bowtie2-align", "bowtie2-build", "bowtie2-inspect"], 'bin'), "doc", "example", "scripts"] -sanity_check_paths = { - 'files': ["bin/bowtie2-align", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add scripts folder to $PATH just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb index f3e4ae2e16..8f006d9054 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-goolf-1.4.10.eb @@ -3,8 +3,6 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.1.0' @@ -16,19 +14,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align", "bowtie2-build", "bowtie2-inspect"], 'bin'), - "doc", "example", "scripts"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add scripts folder to $PATH just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-ictce-5.5.0.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-ictce-5.5.0.eb index 975220fa34..de611ce79f 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.1.0-ictce-5.5.0.eb @@ -12,14 +12,13 @@ name = 'Bowtie2' version = '2.1.0' -altversions = ['2.0.0-beta6', '2.0.0-beta7', '2.0.1', '2.0.2', '2.1.0'] homepage = 'http://bowtie-bio.sourceforge.net/bowtie2/index.shtml' description = """Bowtie 2 is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} -toolchainopts = {'optarch': True, 'pic': True} +toolchainopts = {'pic': True} # note: SOURCEFORGE_SOURCE constant doesn't work here because of bowtie-bio used in URL source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb index 3ccec7b3ec..9dc4955f2b 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.0-goolf-1.4.10.eb @@ -3,8 +3,6 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.0' @@ -16,20 +14,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add scripts folder to $PATH just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb index 37790b2b2b..535fcdd94e 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.2-goolf-1.4.10.eb @@ -3,8 +3,6 @@ # Swiss Institute of Bioinformatics # Biozentrum - University of Basel -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.2' @@ -16,20 +14,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb index 48fab89b05..8e2370c316 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.4-goolf-1.4.10.eb @@ -5,8 +5,6 @@ # Modified by: Robert Schmidt # Ottawa Hospital Research Institute - Bioinformatics Team -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.4' @@ -18,20 +16,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb index 3f2240e2f4..b011315af8 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-goolf-1.7.20.eb @@ -5,8 +5,6 @@ # Modified by: Robert Schmidt # Ottawa Hospital Research Institute - Bioinformatics Team -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.5' @@ -18,20 +16,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb index 0bb8d3c531..4dca70247f 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.5-intel-2015a.eb @@ -5,8 +5,6 @@ # Modified by: Robert Schmidt # Ottawa Hospital Research Institute - Bioinformatics Team -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.5' @@ -18,20 +16,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'intel', 'version': '2015a'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb index ab7844bff7..6cd8cef8b8 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-foss-2015b.eb @@ -5,8 +5,6 @@ # Modified by: Robert Schmidt # Ottawa Hospital Research Institute - Bioinformatics Team -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.6' @@ -18,20 +16,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb index 9167bcb56a..5c6e44e1e9 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.6-intel-2015b.eb @@ -5,8 +5,6 @@ # Modified by: Robert Schmidt # Ottawa Hospital Research Institute - Bioinformatics Team -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.6' @@ -18,20 +16,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'intel', 'version': '2015b'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb index 063d865aaf..7cd080fdb1 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.7-foss-2015b.eb @@ -7,8 +7,6 @@ # Modified by: Adam Huffman # The Francis Crick Institute -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.7' @@ -20,20 +18,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb index 7309705748..e6c1bebf90 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2015b.eb @@ -7,8 +7,6 @@ # Modified by: Adam Huffman # The Francis Crick Institute -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.8' @@ -20,20 +18,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'foss', 'version': '2015b'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb index 4a280ff234..4982ab4d19 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.8-foss-2016a.eb @@ -7,8 +7,6 @@ # Modified by: Adam Huffman # The Francis Crick Institute -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.8' @@ -20,20 +18,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'pic': True} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb index 7f469a05ee..cf2e82b71c 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-foss-2016a.eb @@ -7,8 +7,6 @@ # Modified by: Adam Huffman # The Francis Crick Institute -easyblock = 'MakeCp' - name = 'Bowtie2' version = '2.2.9' @@ -20,20 +18,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb index c03250720b..637e625710 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-goolf-1.7.20.eb @@ -7,8 +7,6 @@ # Modified by: Adam Huffman # The Francis Crick Institute -easyblock = 'MakeCp' - name = 'Bowtie2' version = "2.2.9" @@ -20,20 +18,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line # modextrapaths = {'PATH': 'scripts'} diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb index fa3d31dfa4..826bc88a15 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb @@ -6,10 +6,7 @@ # Ottawa Hospital Research Institute - Bioinformatics Team # Modified by: Adam Huffman # The Francis Crick Institute -# Modified by: Kurt Lust, UAntwerp: Overwrite compiler options used in the GNU-based -# Makefile with the preferred options for intel compilers. - -easyblock = 'MakeCp' +# Modified by: Kurt Lust, UAntwerp name = 'Bowtie2' version = '2.2.9' @@ -22,26 +19,11 @@ description = """ Bowtie 2 is an ultrafast and memory-efficient tool for alignin its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] -toolchainopts = {'cstd': 'c++11'} - -# Make sure that the Makefile uses options for intel rather than the ones for gcc coded -# in the Makefile by setting RELEASE_FLAGS. -buildopts = 'RELEASE_FLAGS="$CXXFLAGS"' - -files_to_copy = [ - (["bowtie2", "bowtie2-align-l", "bowtie2-align-s", "bowtie2-build", "bowtie2-build-l", "bowtie2-build-s", - "bowtie2-inspect", "bowtie2-inspect-l", "bowtie2-inspect-s"], 'bin'), - "LICENSE", "doc", "example", "scripts", "MANUAL", "MANUAL.markdown", "NEWS"] - -sanity_check_paths = { - 'files': ["bin/bowtie2-align-l", "bin/bowtie2-build", "bin/bowtie2-inspect"], - 'dirs': [], -} - # to add script folder to path just uncomment this line #modextrapaths = {'PATH': 'scripts'} -- GitLab From e5d137194f7e4d46ed8578d0a0a25f4c2c4be089 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 14:25:53 +0100 Subject: [PATCH 0772/1311] adding easyconfigs: JasPer-2.0.12-intel-2017a.eb --- .../j/JasPer/JasPer-2.0.12-intel-2017a.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-intel-2017a.eb diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-intel-2017a.eb b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-intel-2017a.eb new file mode 100644 index 0000000000..668f15ccad --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'CMakeMake' + +name = 'JasPer' +version = '2.0.12' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +builddependencies = [('CMake', '3.7.2')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['bin/jasper', 'lib64/libjasper.%s' % SHLIB_EXT], + 'dirs': ['include'], +} + +moduleclass = 'vis' -- GitLab From 721d136ab9753a345adfd377e5f391fbd0e97833 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 14:40:34 +0100 Subject: [PATCH 0773/1311] adding easyconfigs: HDF5-1.10.0-patch1-intel-2017a.eb, Szip-2.1-intel-2017a.eb --- .../h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb | 22 ++++++++++++++++++ .../s/Szip/Szip-2.1-intel-2017a.eb | 23 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb new file mode 100644 index 0000000000..bc132a2144 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.10.0-patch1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['9180ff0ef8dc2ef3f61bd37a7404f295'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.11'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017a.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017a.eb new file mode 100644 index 0000000000..7a02acddee --- /dev/null +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'Szip' +version = '2.1' + +homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' +description = "Szip compression software, providing lossless compression of scientific data" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +sanity_check_paths = { + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From b5f873be346781802822e6f839239e35ebb22dff Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 14:49:54 +0100 Subject: [PATCH 0774/1311] adding easyconfigs: netCDF-4.4.1.1-intel-2017a.eb, netCDF-Fortran-4.4.4-intel-2017a.eb, cURL-7.53.1-GCCcore-6.3.0.eb, Doxygen-1.8.13-GCCcore-6.3.0.eb --- .../c/cURL/cURL-7.53.1-GCCcore-6.3.0.eb | 34 +++++++++++++++++++ .../d/Doxygen/Doxygen-1.8.13-GCCcore-6.3.0.eb | 23 +++++++++++++ .../netCDF-Fortran-4.4.4-intel-2017a.eb | 17 ++++++++++ .../n/netCDF/netCDF-4.4.1.1-intel-2017a.eb | 34 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 easybuild/easyconfigs/c/cURL/cURL-7.53.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.13-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/c/cURL/cURL-7.53.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/cURL/cURL-7.53.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..09811fccde --- /dev/null +++ b/easybuild/easyconfigs/c/cURL/cURL-7.53.1-GCCcore-6.3.0.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'cURL' +version = '7.53.1' + +homepage = 'http://curl.haxx.se' +description = """libcurl is a free and easy-to-use client-side URL transfer library, + supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports + SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, + proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, + Kerberos), file transfer resume, http proxy tunneling and more.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://curl.haxx.se/download/'] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# dependencies = [('OpenSSL', '1.1.0e')] +# configopts = "--with-ssl=$EBROOTOPENSSL" + +modextravars = {'CURL_INCLUDES': '%(installdir)s/include'} + +sanity_check_paths = { + 'files': ['bin/curl', 'lib/libcurl.a', 'lib/libcurl.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.13-GCCcore-6.3.0.eb b/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.13-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..00e9535d4b --- /dev/null +++ b/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.13-GCCcore-6.3.0.eb @@ -0,0 +1,23 @@ +name = 'Doxygen' +version = '1.8.13' + +homepage = 'http://www.doxygen.org' +description = """Doxygen is a documentation system for C++, C, Java, Objective-C, Python, + IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = ['%(namelower)s-%(version)s.src.tar.gz'] +source_urls = ['http://ftp.stack.nl/pub/users/dimitri/'] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), + ('CMake', '3.7.2'), + ('flex', '2.6.3'), + ('Bison', '3.0.4'), +] + +parallel = 1 + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a.eb b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a.eb new file mode 100644 index 0000000000..fa3d6fe963 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a.eb @@ -0,0 +1,17 @@ +name = 'netCDF-Fortran' +version = '4.4.4' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/Unidata/netcdf-fortran/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('netCDF', '4.4.1.1')] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a.eb new file mode 100644 index 0000000000..d30a65ec63 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a.eb @@ -0,0 +1,34 @@ +name = 'netCDF' +version = '4.4.1.1' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = ['v%(version)s.tar.gz'] +source_urls = [ + 'https://github.com/Unidata/netcdf-c/archive/' +] + +dependencies = [ + ('HDF5', '1.10.0-patch1'), + ('cURL', '7.53.1'), + ('Szip', '2.1'), +] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Doxygen', '1.8.13'), +] + +# make sure both static and shared libs are built +configopts = [ + "-DBUILD_SHARED_LIBS=OFF ", + "-DBUILD_SHARED_LIBS=ON ", +] + +moduleclass = 'data' -- GitLab From 5762444b72a33f59fe9ba453c4d5eca6ffb80f25 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 16:31:10 +0100 Subject: [PATCH 0775/1311] collapse checksums to a single line to make @wpoely86 happy --- easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb | 4 +--- easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb | 4 +--- easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb | 4 +--- .../easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb | 4 +--- .../easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb | 4 +--- .../easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb | 4 +--- 6 files changed, 6 insertions(+), 18 deletions(-) diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb index 43105b8275..396cb5364f 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-GCC-4.9.2.eb @@ -15,9 +15,7 @@ toolchain = {'name': 'GCC', 'version': '4.9.2'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb index fe52e32d1e..19a10c8362 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2015a.eb @@ -15,9 +15,7 @@ toolchain = {'version': '2015a', 'name': 'foss'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb index 24e009d090..9cbc7f2bbf 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-foss-2016a.eb @@ -15,9 +15,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb index daf551f8aa..97bdf43906 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-goolf-1.4.10.eb @@ -15,9 +15,7 @@ toolchain = {'version': '1.4.10', 'name': 'goolf'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb index aae5a5fed7..5b2faed557 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-ictce-5.3.0.eb @@ -15,9 +15,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), diff --git a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb index e201bb7758..ba5d709769 100644 --- a/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libunwind/libunwind-1.1-intel-2016b.eb @@ -15,9 +15,7 @@ toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCE_TAR_GZ] source_urls = [GNU_SAVANNAH_SOURCE] -checksums = [ - 'fb4ea2f6fbbe45bf032cd36e586883ce', # libunwind-1.1.tar.gz -] +checksums = ['fb4ea2f6fbbe45bf032cd36e586883ce'] dependencies = [ ('XZ', '5.2.2'), -- GitLab From 1e610f306de5153e933712cb219a377d1dfe9947 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 19:49:40 +0100 Subject: [PATCH 0776/1311] use 'use_fma4' rather than deprecated 'use_fma' easyconfig parameter in FFTW easyconfigs using intel toolchain --- easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb index aba6939866..f931b781ea 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.5-intel-2016b.eb @@ -15,8 +15,8 @@ source_urls = [homepage] # see also http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html with_quad_prec = False -# compilation fails when configuring with --enable-avx-128-fma -use_fma = False +# compilation fails when configuring with --enable-avx-128-fma, Intel compilers do not support FMA4 instructions +use_fma4 = False runtest = 'check' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb index 07c5fa9224..da857e5ca5 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb @@ -21,8 +21,8 @@ patches = [ # http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html with_quad_prec = False -# compilation fails when configuring with --enable-avx-128-fma -use_fma = False +# compilation fails when configuring with --enable-avx-128-fma, Intel compilers do not support FMA4 instructions +use_fma4 = False runtest = 'check' -- GitLab From baae366171417e854889d108e8f266afeaec8e98 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 22:26:58 +0100 Subject: [PATCH 0777/1311] adding easyconfigs: WRF-3.8.0-intel-2016b-dmpar.eb, tcsh-6.20.00-GCCcore-5.4.0.eb --- .../t/tcsh/tcsh-6.20.00-GCCcore-5.4.0.eb | 41 +++++++++++++++++++ .../w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb | 39 ++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 easybuild/easyconfigs/t/tcsh/tcsh-6.20.00-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb diff --git a/easybuild/easyconfigs/t/tcsh/tcsh-6.20.00-GCCcore-5.4.0.eb b/easybuild/easyconfigs/t/tcsh/tcsh-6.20.00-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..1413bb1d34 --- /dev/null +++ b/easybuild/easyconfigs/t/tcsh/tcsh-6.20.00-GCCcore-5.4.0.eb @@ -0,0 +1,41 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 University of Luxembourg/Computer Science and Communications Research Unit +# Authors:: Valentin Plugaru +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_05-06.html +## +easyblock = 'ConfigureMake' + +name = 'tcsh' +version = '6.20.00' + +homepage = 'http://www.tcsh.org' +description = """Tcsh is an enhanced, but completely compatible version of the Berkeley UNIX C shell (csh). + It is a command language interpreter usable both as an interactive login shell and a shell script command + processor. It includes a command-line editor, programmable word completion, spelling correction, a history + mechanism, job control and a C-like syntax.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'ftp://ftp.astron.com/pub/%(namelower)s', + 'ftp://ftp.astron.com/pub/%(namelower)s/old', +] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.26', '', True)] + +dependencies = [('ncurses', '6.0')] + +sanity_check_paths = { + 'files': ["bin/tcsh"], + 'dirs': [] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb new file mode 100644 index 0000000000..9f07b0effa --- /dev/null +++ b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb @@ -0,0 +1,39 @@ +name = 'WRF' +version = '3.8.0' +buildtype = "dmpar" +versionsuffix = '-%s' % buildtype + +homepage = 'http://www.wrf-model.org' +description = """The Weather Research and Forecasting (WRF) Model is a next-generation mesoscale + numerical weather prediction system designed to serve both operational forecasting and atmospheric + research needs.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'opt': False} # don't use agressive optimization, stick to -O2 + +sources = ['%(name)sV%(version_major_minor)s.TAR.gz'] +source_urls = [ + 'http://www2.mmm.ucar.edu/wrf/src/', + 'http://www.mmm.ucar.edu/wrf/src/', +] + +# csh is used by WRF install scripts +builddependencies = [('tcsh', '6.20.00')] + +dependencies = [ + ('JasPer', '2.0.10'), + ('netCDF', '4.4.1.1'), + ('netCDF-Fortran', '4.4.4'), +] + +patches = [ + 'WRF_parallel_build_fix.patch', + 'WRF_tests_limit-runtimes.patch', + 'WRF-%(version)s_netCDF-Fortran_separate_path.patch', + 'WRF-%(version)s_known_problems.patch', +] + +# limit parallel build to 20 +maxparallel = 20 + +moduleclass = 'geo' -- GitLab From b8c0b56d34346a63dbd7933630ad5ef2e8e68299 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 21 Mar 2017 22:39:04 +0100 Subject: [PATCH 0778/1311] fix netCDF version in dependencies --- easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb index 9f07b0effa..09959e26a3 100644 --- a/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb +++ b/easybuild/easyconfigs/w/WRF/WRF-3.8.0-intel-2016b-dmpar.eb @@ -22,7 +22,7 @@ builddependencies = [('tcsh', '6.20.00')] dependencies = [ ('JasPer', '2.0.10'), - ('netCDF', '4.4.1.1'), + ('netCDF', '4.4.1'), ('netCDF-Fortran', '4.4.4'), ] -- GitLab From 800c673582b5a3203d6a073f4a2800e82199ee9e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 22 Mar 2017 20:04:21 +0100 Subject: [PATCH 0779/1311] adding easyconfigs: ACTC-1.1-intel-2016b.eb --- .../a/ACTC/ACTC-1.1-intel-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb diff --git a/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb new file mode 100644 index 0000000000..88e0e00942 --- /dev/null +++ b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'ACTC' +version = '1.1' + +homepage = 'https://sourceforge.net/projects/actc' +description = "ACTC converts independent triangles into triangle strips or fans." + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +skipsteps = ['configure'] + +buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' + +installopts = "INCDEST=%(installdir)s/include/ac/ LIBDEST=%(installdir)s/lib && " +installopts += "mv %(installdir)s/lib/tc.h %(installdir)s/include/ac/ && " +installopts += "mkdir %(installdir)s/bin && cp -a {tcsample,tctest,tctest2} %(installdir)s/bin && " +installopts += "cp -a {COPYRIGHT,manual.html,prims.gif,README} %(installdir)s/" + +sanity_check_paths = { + 'files': ['bin/tctest', 'bin/tctest2', 'bin/tcsample', 'include/ac/tc.h', 'lib/libactc.a', + 'COPYRIGHT', 'manual.html', 'prims.gif', 'README'], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 933287b2503f1828df80efc7277958dcf53f559f Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 22 Mar 2017 19:21:18 +0000 Subject: [PATCH 0780/1311] renamed recipe to match convention --- ...2016a-download.eb => PETSc-3.7.5-intel-2016a-download_deps.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/p/PETSc/{PETSc-3.7.5-intel-2016a-download.eb => PETSc-3.7.5-intel-2016a-download_deps.eb} (100%) diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download_deps.eb similarity index 100% rename from easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download.eb rename to easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download_deps.eb -- GitLab From cb193298f3defbc6c268e7e7f2aa6f1f42156fdf Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Wed, 22 Mar 2017 19:21:59 +0000 Subject: [PATCH 0781/1311] renamed recipe to match convention --- ...ownload_deps.eb => PETSc-3.7.5-intel-2016a-downloaded_deps.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/p/PETSc/{PETSc-3.7.5-intel-2016a-download_deps.eb => PETSc-3.7.5-intel-2016a-downloaded_deps.eb} (100%) diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download_deps.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-downloaded_deps.eb similarity index 100% rename from easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-download_deps.eb rename to easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-downloaded_deps.eb -- GitLab From d78a9a2c5fb56e58eb9c44aa60ad3365b503b0d7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 10:26:12 +0100 Subject: [PATCH 0782/1311] adding easyconfigs: OpenMPI-2.1.0-GCC-6.3.0-2.28.eb, hwloc-1.11.6-GCC-6.3.0-2.28.eb, GCC-6.3.0-2.28.eb --- easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.28.eb | 25 ++++++++++++++ .../h/hwloc/hwloc-1.11.6-GCC-6.3.0-2.28.eb | 23 +++++++++++++ .../o/OpenMPI/OpenMPI-2.1.0-GCC-6.3.0-2.28.eb | 34 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.28.eb create mode 100644 easybuild/easyconfigs/h/hwloc/hwloc-1.11.6-GCC-6.3.0-2.28.eb create mode 100644 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.1.0-GCC-6.3.0-2.28.eb diff --git a/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.28.eb b/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.28.eb new file mode 100644 index 0000000000..bac0785b8c --- /dev/null +++ b/easybuild/easyconfigs/g/GCC/GCC-6.3.0-2.28.eb @@ -0,0 +1,25 @@ +easyblock = 'Bundle' + +name = 'GCC' +version = '6.3.0' + +binutilsver = '2.28' +versionsuffix = '-%s' % binutilsver + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +dependencies = [ + ('GCCcore', version), + # binutils built on top of GCCcore, which was built on top of (dummy-built) binutils + ('binutils', binutilsver, '', ('GCCcore', version)), +] + +altroot = 'GCCcore' +altversion = 'GCCcore' + +# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.6-GCC-6.3.0-2.28.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.6-GCC-6.3.0-2.28.eb new file mode 100644 index 0000000000..93ceada29d --- /dev/null +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.6-GCC-6.3.0-2.28.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.6' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.28'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.1.0-GCC-6.3.0-2.28.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.1.0-GCC-6.3.0-2.28.eb new file mode 100644 index 0000000000..f0864ac518 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.1.0-GCC-6.3.0-2.28.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '2.1.0' + +homepage = 'http://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-2 implementation.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.28'} + +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['c058052b53d209c7521079e3d2da613b'] + +dependencies = [('hwloc', '1.11.6')] + +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading + +# needed for --with-verbs +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] + +libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % binfile for binfile in ["ompi_info", "opal_wrapper", "orterun"]] + + ["lib/lib%s.%s" % (libfile, SHLIB_EXT) for libfile in libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' -- GitLab From 3f38e052bc47c21c631e125a8bf556792bce9e0d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 11:26:13 +0100 Subject: [PATCH 0783/1311] correctly update $CPATH in ACTC easyconfig --- easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb index 88e0e00942..c94517dc29 100644 --- a/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb @@ -26,4 +26,6 @@ sanity_check_paths = { 'dirs': [], } +modextrapaths = {'CPATH': 'include/ac'} + moduleclass = 'lib' -- GitLab From 5d143002ba0dde7c4e197453c88c488e9c431ea8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 11:49:15 +0100 Subject: [PATCH 0784/1311] adding easyconfigs: HISAT2-2.0.5-intel-2017a.eb, NGS-1.3.0-intel-2017a.eb, ncbi-vdb-2.8.2-intel-2017a.eb, file-5.30-intel-2017a.eb --- .../f/file/file-5.30-intel-2017a.eb | 25 ++++++++++++ .../h/HISAT2/HISAT2-2.0.5-intel-2017a.eb | 36 ++++++++++++++++++ .../n/NGS/NGS-1.3.0-intel-2017a.eb | 35 +++++++++++++++++ .../n/ncbi-vdb/ncbi-vdb-2.8.2-intel-2017a.eb | 38 +++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 easybuild/easyconfigs/f/file/file-5.30-intel-2017a.eb create mode 100644 easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/NGS/NGS-1.3.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/ncbi-vdb/ncbi-vdb-2.8.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/file/file-5.30-intel-2017a.eb b/easybuild/easyconfigs/f/file/file-5.30-intel-2017a.eb new file mode 100644 index 0000000000..cab481c6f4 --- /dev/null +++ b/easybuild/easyconfigs/f/file/file-5.30-intel-2017a.eb @@ -0,0 +1,25 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +## + +easyblock = 'ConfigureMake' + +name = 'file' +version = '5.30' + +homepage = 'http://www.darwinsys.com/file/' +description = """The file command is 'a file type guesser', that is, a command-line tool + that tells you in words what kind of data a file contains.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['ftp://ftp.astron.com/pub/file/'] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/file', 'include/magic.h', 'lib/libmagic.%s' % SHLIB_EXT], + 'dirs': ['share'] +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5-intel-2017a.eb b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5-intel-2017a.eb new file mode 100644 index 0000000000..a0d6f2ef27 --- /dev/null +++ b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5-intel-2017a.eb @@ -0,0 +1,36 @@ +easyblock = 'MakeCp' + +name = 'HISAT2' +version = '2.0.5' + +homepage = 'https://ccb.jhu.edu/software/hisat2/index.shtml' +description = """HISAT2 is a fast and sensitive alignment program for mapping next-generation sequencing reads + (both DNA and RNA) against the general human population (as well as against a single reference genome).""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['%(namelower)s-%(version)s-source.zip'] +source_urls = ['ftp://ftp.ccb.jhu.edu/pub/infphilo/%(namelower)s/downloads/'] + +patches = ['HISAT2-%(version)s_intel-fixes.patch'] + +checksums = ['b6d867e1f8463012d1de3d1472573906'] + +dependencies = [ + ('NGS', '1.3.0'), + ('ncbi-vdb', '2.8.2'), +] + +buildopts = 'CC="$CC" CPP="$CXX" RELEASE_FLAGS="$CFLAGS" ' +buildopts += "USE_SRA=1 NCBI_NGS_DIR=$EBROOTNGS NCBI_VDB_DIR=$EBROOTNCBIMINVDB" + +executables = ['hisat2', 'hisat2-align-l', 'hisat2-align-s', 'hisat2-build', 'hisat2-build-l', 'hisat2-build-s', + 'hisat2-inspect', 'hisat2-inspect-s', 'hisat2-inspect-l'] +files_to_copy = [(executables, 'bin')] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in executables], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/n/NGS/NGS-1.3.0-intel-2017a.eb b/easybuild/easyconfigs/n/NGS/NGS-1.3.0-intel-2017a.eb new file mode 100644 index 0000000000..8d0219a742 --- /dev/null +++ b/easybuild/easyconfigs/n/NGS/NGS-1.3.0-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'NGS' +version = '1.3.0' + +homepage = 'https://github.com/ncbi/ngs' +description = """NGS is a new, domain-specific API for accessing reads, alignments and pileups produced from + Next Generation Sequencing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/ncbi/ngs/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [('Java', '1.8.0_121', '', True)] + +# override default of using $HOME/ncbi-outdir +configopts = "--build-prefix=%(builddir)s/ncbi-outdir" + +buildopts = 'CC="$CC -c" CPP="$CXX" CP="$CXX -c" -C ngs-sdk && ' +buildopts += 'make CC="$CC -c" CPP="$CXX" CP="$CXX -c" -C ngs-java' + +installopts = "-C ngs-sdk && make install -C ngs-java" + +parallel = 1 + +sanity_check_paths = { + 'files': ['jar/ngs-java.jar', ('lib/libngs-sdk.%s' % SHLIB_EXT, 'lib64/libngs-sdk.%s' % SHLIB_EXT), + ('lib/libngs-adapt-c++.a', 'lib64/libngs-adapt-c++.a'), ('lib/libngs-c++.a', 'lib64/libngs-c++.a')], + 'dirs': ['include/ngs', 'share'], +} + +modextrapaths = {'CLASSPATH': 'jar/ngs-java.jar'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/n/ncbi-vdb/ncbi-vdb-2.8.2-intel-2017a.eb b/easybuild/easyconfigs/n/ncbi-vdb/ncbi-vdb-2.8.2-intel-2017a.eb new file mode 100644 index 0000000000..5bfe59a4db --- /dev/null +++ b/easybuild/easyconfigs/n/ncbi-vdb/ncbi-vdb-2.8.2-intel-2017a.eb @@ -0,0 +1,38 @@ +easyblock = 'ConfigureMake' + +name = 'ncbi-vdb' +version = '2.8.2' + +homepage = 'https://github.com/ncbi/ncbi-vdb' +description = """The SRA Toolkit and SDK from NCBI is a collection of tools and libraries for + using data in the INSDC Sequence Read Archives.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/ncbi/ncbi-vdb/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('libxml2', '2.9.4'), + ('file', '5.30'), # provides libmagic + ('HDF5', '1.10.0-patch1'), + ('NGS', '1.3.0'), +] + +# override default of using $HOME/ncbi-outdir +configopts = "--build-prefix=%(builddir)s/ncbi-outdir " + +configopts += "--with-ngs-sdk-prefix=$EBROOTNGS --with-ngs-java-prefix=$EBROOTNGS " +configopts += "--with-hdf5-prefix=$EBROOTHDF5 --with-xml2-prefix=$EBROOTLIBXML2" + +parallel = 1 + +sanity_check_paths = { + 'files': ['include/ncbi-vdb/NGS.hpp', ('lib/libncbi-vdb.%s' % SHLIB_EXT, 'lib64/libncbi-vdb.%s' % SHLIB_EXT), + ('lib/libncbi-wvdb.%s' % SHLIB_EXT, 'lib64/libncbi-wvdb.%s' % SHLIB_EXT), + ('lib/libncbi-ngs-c++.a', 'lib64/libncbi-ngs-c++.a'), ('lib/libncbi-vdb.a', 'lib64/libncbi-vdb.a'), + ('lib/libncbi-wvdb.a', 'lib64/libncbi-wvdb.a')], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 399938d27b6370d98c81312cd0c3699e76360be8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 12:20:18 +0100 Subject: [PATCH 0785/1311] add missing patch file for HISAT2 --- .../h/HISAT2/HISAT2-2.0.5_intel-fixes.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5_intel-fixes.patch diff --git a/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5_intel-fixes.patch b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5_intel-fixes.patch new file mode 100644 index 0000000000..571fc956b3 --- /dev/null +++ b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.0.5_intel-fixes.patch @@ -0,0 +1,15 @@ +fix Intel compiler error due to wrong cast to void*, should be int* +author: Kenneth Hoste (HPC-UGent) +--- hisat2-2.0.5/processor_support.h.orig 2017-03-23 11:39:02.647104669 +0100 ++++ hisat2-2.0.5/processor_support.h 2017-03-23 11:39:23.727376802 +0100 +@@ -44,8 +44,8 @@ + + try { + #if ( defined(USING_INTEL_COMPILER) || defined(USING_MSC_COMPILER) ) +- __cpuid((void *) ®s,0); // test if __cpuid() works, if not catch the exception +- __cpuid((void *) ®s,0x1); // POPCNT bit is bit 23 in ECX ++ __cpuid((int *) ®s,0); // test if __cpuid() works, if not catch the exception ++ __cpuid((int *) ®s,0x1); // POPCNT bit is bit 23 in ECX + #elif defined(USING_GCC_COMPILER) + __get_cpuid(0x1, ®s.EAX, ®s.EBX, ®s.ECX, ®s.EDX); + #else -- GitLab From 0caaed423383193b70eb9765c15c4d55ba479f66 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 12:21:08 +0100 Subject: [PATCH 0786/1311] {bio}[intel/2017a] SAMtools 1.4 --- .../s/SAMtools/SAMtools-1.4-intel-2017a.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2017a.eb new file mode 100644 index 0000000000..86a737bc61 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-intel-2017a.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +## +name = 'SAMtools' +version = '1.4' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), +] + +moduleclass = 'bio' -- GitLab From f9903bade05e9e83af1538b4ebe64a3916fc55cb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 12:21:29 +0100 Subject: [PATCH 0787/1311] also patch XZ 5.2.3 to include symbols required by rpm command --- easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb index 0e517cfb0f..735c3cbe5b 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-GCCcore-6.3.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'GCCcore', 'version': '6.3.0'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-5.2.2_compat-libs.patch'] + builddependencies = [ ('gettext', '0.19.8.1', '', True), # use same binutils version that was used when building GCCcore toolchain -- GitLab From 732a70a17a353521a2a9128c5acb8d766c06417c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 13:43:23 +0100 Subject: [PATCH 0788/1311] use MakeCp for ACTC --- .../easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb index c94517dc29..47b6a5d46f 100644 --- a/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb +++ b/easybuild/easyconfigs/a/ACTC/ACTC-1.1-intel-2016b.eb @@ -1,4 +1,4 @@ -easyblock = 'ConfigureMake' +easyblock = 'MakeCp' name = 'ACTC' version = '1.1' @@ -11,14 +11,14 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = [SOURCEFORGE_SOURCE] sources = [SOURCELOWER_TAR_GZ] -skipsteps = ['configure'] - buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' -installopts = "INCDEST=%(installdir)s/include/ac/ LIBDEST=%(installdir)s/lib && " -installopts += "mv %(installdir)s/lib/tc.h %(installdir)s/include/ac/ && " -installopts += "mkdir %(installdir)s/bin && cp -a {tcsample,tctest,tctest2} %(installdir)s/bin && " -installopts += "cp -a {COPYRIGHT,manual.html,prims.gif,README} %(installdir)s/" +files_to_copy = [ + (['tcsample', 'tctest', 'tctest2'], 'bin'), + (['tc.h'], 'include/ac'), + (['libactc.a'], 'lib'), + 'COPYRIGHT', 'manual.html', 'prims.gif', 'README', +] sanity_check_paths = { 'files': ['bin/tctest', 'bin/tctest2', 'bin/tcsample', 'include/ac/tc.h', 'lib/libactc.a', -- GitLab From 27497f51ac83dddbba0c8be081f7d94ebe9a26d1 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Thu, 23 Mar 2017 13:07:11 +0000 Subject: [PATCH 0789/1311] changed toolchain so that HDF5 1.8.18 is found by the bot --- ...oaded_deps.eb => PETSc-3.7.5-intel-2016b-downloaded_deps.eb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/p/PETSc/{PETSc-3.7.5-intel-2016a-downloaded_deps.eb => PETSc-3.7.5-intel-2016b-downloaded_deps.eb} (96%) diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-downloaded_deps.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb similarity index 96% rename from easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-downloaded_deps.eb rename to easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb index 111a8d2edd..f864b6e767 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016a-downloaded_deps.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb @@ -6,7 +6,7 @@ homepage = 'http://www.mcs.anl.gov/petsc' description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations.""" -toolchain = {'name': 'intel', 'version': '2016a'} +toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'usempi': True, 'pic': True} source_urls = ['http://ftp.mcs.anl.gov/pub/petsc/release-snapshots'] -- GitLab From cd45943e036bb52b2bab419b4d529947949eb272 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 14:30:07 +0100 Subject: [PATCH 0790/1311] {vis}[intel/2016b] VMD 1.9.3 --- .../v/VMD/VMD-1.9.3-intel-2016b.eb | 34 +++++ .../v/VMD/VMD-1.9.3_configure.patch | 116 ++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb create mode 100644 easybuild/easyconfigs/v/VMD/VMD-1.9.3_configure.patch diff --git a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb new file mode 100644 index 0000000000..2a5279436b --- /dev/null +++ b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb @@ -0,0 +1,34 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Authors:: Stephane Thiell +## +name = 'VMD' +version = '1.9.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.ks.uiuc.edu/Research/vmd' +description = """VMD is a molecular visualization program for displaying, animating, and analyzing large biomolecular + systems using 3-D graphics and built-in scripting.""" + +toolchain= {'name': 'intel' , 'version': '2016b'} + +# downloading requires registration +sources = [('%(namelower)s-%(version)s.src.tar.gz', "tar xfv %s")] + +patches = [ + 'VMD-%(version)s_configure.patch', +] + +dependencies = [ + ('Tcl', '8.6.5'), + ('Tk', '8.6.5'), + ('FLTK', '1.3.3'), + ('Python', '2.7.12'), + ('Mesa', '12.0.2'), + ('netCDF', '4.4.1.1'), + ('FFmpeg', '3.1.3'), + ('ImageMagick', '7.0.3-1'), + ('ACTC', '1.1'), +] + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/v/VMD/VMD-1.9.3_configure.patch b/easybuild/easyconfigs/v/VMD/VMD-1.9.3_configure.patch new file mode 100644 index 0000000000..23f1311b5b --- /dev/null +++ b/easybuild/easyconfigs/v/VMD/VMD-1.9.3_configure.patch @@ -0,0 +1,116 @@ +fix hardcoded stuff in VMD configure script +authors: Stephane Thiell (Stanford University), Kenneth Hoste (HPC-UGent) +--- vmd-1.9.3/configure.orig 2016-12-01 08:11:33.000000000 +0100 ++++ vmd-1.9.3/configure 2017-03-23 13:36:41.501910996 +0100 +@@ -466,7 +476,7 @@ + + $arch_cc = "cc"; + $arch_ccpp = "CC"; +-$arch_nvcc = "/usr/local/cuda-8.0/bin/nvcc"; ++$arch_nvcc = "nvcc"; + $arch_nvccflags = "--ptxas-options=-v " . + "-gencode arch=compute_30,code=compute_30 " . + "-gencode arch=compute_30,code=sm_35 " . +@@ -581,17 +591,17 @@ + # location of Mesa library and include files; basically does the same + # as OpenGL. This is based on the default instructions from the Mesa + # README; the include files should by default be in /usr/local/include/GL. +-$mesa_dir = "$vmd_library_dir/Mesa"; ++$mesa_dir = $ENV{'EBROOTMESA'}; + $mesa_include = "-I$mesa_dir/include"; + $mesa_library = "-L$mesa_dir/lib_$config_arch"; + #$mesa_libs = "-lMesaGL -lMesaGLU"; +-$mesa_libs = "-lMesaGL"; ++$mesa_libs = "-lGL -lGLU"; + $mesa_defines = "-DUSELINEAXES -DVMDMESA -DVMDOPENGL"; + @mesa_cc = (); + @mesa_cu = (); +-@mesa_ccpp = @opengl_ccpp; +-@mesa_h = @opengl_h; +-@mesa_extra = @opengl_extra; ++@mesa_ccpp = (); ++@mesa_h = (); ++@mesa_extra = (); + + + # +@@ -666,10 +676,10 @@ + + ################ FLTK GUI + $fltk_defines = "-DVMDGUI -DVMDFLTK"; +-$fltk_dir = "$vmd_library_dir/fltk"; ++$fltk_dir = $ENV{'EBROOTFLTK'}; + $fltk_include = "-I$fltk_dir/include"; + $fltk_library = "-L$fltk_dir/$config_arch"; +-$fltk_libs = "-lfltk -lX11"; ++$fltk_libs = "-lfltk -lX11 -lXfixes -lXcursor -lXinerama"; + #@fltk_cc = ('forms_ui.c'); + @fltk_cu = (); + @fltk_ccpp = ( 'ColorFltkMenu.C', +@@ -729,8 +739,8 @@ + if ($config_tk) { $tcl_include .= " -I$stock_tk_include_dir"; } + $tcl_library = "-L$stock_tcl_library_dir"; + if ($config_tk) { $tcl_library .= " -L$stock_tk_library_dir"; } +-$tcl_libs = "-ltcl8.5"; +-if ($config_tk) { $tcl_libs = "-ltk8.5 -lX11 " . $tcl_libs; } ++$tcl_libs = "-ltcl8.6"; ++if ($config_tk) { $tcl_libs = "-ltk8.6 -lX11 " . $tcl_libs; } + + @tcl_cc = (); + @tcl_cu = (); +@@ -922,7 +932,7 @@ + # This option enables the use of CUDA GPU acceleration functions. + ####################### + $cuda_defines = "-DVMDCUDA -DMSMPOT_CUDA"; +-$cuda_dir = "/usr/local/cuda-8.0"; ++$cuda_dir = "$CUDA_HOME"; + $cuda_include = ""; + $cuda_library = ""; + $cuda_libs = "-Wl,-rpath -Wl,\$\$ORIGIN/ -lcudart_static"; +@@ -1042,7 +1052,7 @@ + # $liboptix_dir = "/usr/local/encap/NVIDIA-OptiX-SDK-3.6.3-linux64"; + # $liboptix_dir = "/usr/local/encap/NVIDIA-OptiX-SDK-3.8.0-linux64"; + # $liboptix_dir = "/usr/local/encap/NVIDIA-OptiX-SDK-3.9.0-linux64"; +-$liboptix_dir = "/usr/local/encap/NVIDIA-OptiX-SDK-4.0.1-linux64"; ++$liboptix_dir = "$ENV{'EBROOTOPTIX'}"; + # NCSA Blue Waters + # $liboptix_dir = "/u/sciteam/stonej/local/NVIDIA-OptiX-SDK-3.6.3-linux64"; + # $liboptix_dir = "/u/sciteam/stonej/local/NVIDIA-OptiX-SDK-3.8.0-linux64"; +@@ -1310,8 +1320,8 @@ + ####################### + $actc_defines = "-DVMDACTC"; + $actc_dir = "$vmd_library_dir/actc"; +-$actc_include = "-I$actc_dir/include"; +-$actc_library = "-L$actc_dir/lib_$config_arch"; ++$actc_include = "-I$actc_dir"; ++$actc_library = "-L$actc_dir"; + $actc_libs = "-lactc"; + @actc_cc = (); + @actc_cu = (); +@@ -1388,7 +1398,7 @@ + $python_defines = "-DVMDPYTHON"; + $python_include = "-I$stock_python_include_dir -I$stock_numpy_include_dir -I$stock_numpy_library_dir"; + $python_library = "-L$stock_python_library_dir"; +-$python_libs = "-lpython2.5 -lpthread"; ++$python_libs = "-lpython2.7 -lpthread"; + @python_h = ('PythonTextInterp.h', + 'VMDTkinterMenu.h', + 'py_commands.h', +@@ -2173,7 +2183,7 @@ + + if ($config_static) { + $arch_lopts = "-static"; +- $mesa_libs = "-lMesaGL -L/usr/X11R6/lib -lXext -lX11"; ++ $mesa_libs = "-lGL -lGLU -L/usr/X11R6/lib64 -lXext -lX11"; + } else { + $arch_lopts = ""; + # -rpath causes problems for people running Chromium.. +@@ -2303,7 +2313,7 @@ + # they likely serve no useful purpose going forward. + if (!$config_opengl_dispatch) { + $opengl_dep_libs = "-L/usr/X11R6/lib64 -lGL -lX11"; +- $mesa_libs = "-lMesaGL -L/usr/X11R6/lib64 -lXext -lX11"; ++ $mesa_libs = "-lGL -lGLU -L/usr/X11R6/lib64 -lXext -lX11"; + } + + # this is to make tcl happy -- GitLab From 84b686e27ad0f9e554a6cf078d652a77c11913b1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 17:03:48 +0100 Subject: [PATCH 0791/1311] style fixes in PETSc easyconfig that downloads deps --- ...ETSc-3.7.5-intel-2016b-downloaded-deps.eb} | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) rename easybuild/easyconfigs/p/PETSc/{PETSc-3.7.5-intel-2016b-downloaded_deps.eb => PETSc-3.7.5-intel-2016b-downloaded-deps.eb} (68%) diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb similarity index 68% rename from easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb rename to easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb index f864b6e767..87e4b65750 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded_deps.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb @@ -1,6 +1,6 @@ name = 'PETSc' version = '3.7.5' -versionsuffix = '-downloaded_deps' +versionsuffix = '-downloaded-deps' homepage = 'http://www.mcs.anl.gov/petsc' description = """PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the @@ -12,32 +12,19 @@ toolchainopts = {'usempi': True, 'pic': True} source_urls = ['http://ftp.mcs.anl.gov/pub/petsc/release-snapshots'] sources = [SOURCELOWER_TAR_GZ] +# (build) dependencies provided through EasyBuild builddependencies = [('CMake', '3.5.2')] -shared_libs = 1 -pic = 1 - -downloadinstall = True - -# For these dependencies, we do not download them dependencies = [('HDF5','1.8.18')] -configopts = "" -configopts += "--with-mkl_pardiso=1 --with-mkl_pardiso-dir=$MKLROOT " -configopts += "--with-hdf5=1 --with-hdf5-dir=$EBROOTHDF5" # external packages that are downloaded with --download-=1 and --download--static=1 -download_deps_static = [ - 'hypre', - 'metis', - 'ml', - 'mumps', - 'parmetis', - 'prometheus', - 'ptscotch', - 'suitesparse', - 'superlu', - 'superlu_dist' -] +download_deps_static = ['hypre', 'metis', 'ml', 'mumps', 'parmetis', 'prometheus', 'ptscotch', 'suitesparse', + 'superlu', 'superlu_dist'] # triangle cannot be downloaded with --download-triangle-static because it fails download_deps = ['triangle'] +configopts = "--with-mkl_pardiso=1 --with-mkl_pardiso-dir=$MKLROOT " +configopts += "--with-hdf5=1 --with-hdf5-dir=$EBROOTHDF5" + +shared_libs = True + moduleclass = 'numlib' -- GitLab From bca436c37aa54ec9ae171066f4d480a701f664f1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 17:41:36 +0100 Subject: [PATCH 0792/1311] add checksum for VMD 1.9.3 sources --- easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb index 2a5279436b..3e3df4bec4 100644 --- a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb +++ b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb @@ -13,11 +13,11 @@ description = """VMD is a molecular visualization program for displaying, animat toolchain= {'name': 'intel' , 'version': '2016b'} # downloading requires registration -sources = [('%(namelower)s-%(version)s.src.tar.gz', "tar xfv %s")] +sources = ['vmd-%(version)s.src.tar.gz'] -patches = [ - 'VMD-%(version)s_configure.patch', -] +patches = ['VMD-%(version)s_configure.patch'] + +checksums = ['5706f88b9b77cc5fafda6fef3a82d6fa'] dependencies = [ ('Tcl', '8.6.5'), -- GitLab From 3d41143457e45e0b7c720954adf981364f9ab72a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 23 Mar 2017 18:44:18 +0100 Subject: [PATCH 0793/1311] fix easyconfig filename for VMD --- ....9.3-intel-2016b.eb => VMD-1.9.3-intel-2016b-Python-2.7.12.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/v/VMD/{VMD-1.9.3-intel-2016b.eb => VMD-1.9.3-intel-2016b-Python-2.7.12.eb} (100%) diff --git a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb similarity index 100% rename from easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b.eb rename to easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb -- GitLab From 3e03d88c9300b4a346ca39a28fbbad235b9e75f7 Mon Sep 17 00:00:00 2001 From: Daniel Navarro-Gomez Date: Fri, 24 Mar 2017 12:33:43 -0400 Subject: [PATCH 0794/1311] Added SAMtools-1.4-goolf-1.4.10.eb and ncurses-6.0-goolf-1.4.10.eb, the second one is a dependece of the first. By Daniel Navarro-Gomez, MEEI Bioinformatics Center new file: easyconfigs/n/ncurses/ncurses-6.0-goolf-1.4.10.eb new file: easyconfigs/s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb --- .../n/ncurses/ncurses-6.0-goolf-1.4.10.eb | 38 ++++++++++++++++++ .../s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb | 40 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 easybuild/easyconfigs/n/ncurses/ncurses-6.0-goolf-1.4.10.eb create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb diff --git a/easybuild/easyconfigs/n/ncurses/ncurses-6.0-goolf-1.4.10.eb b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-goolf-1.4.10.eb new file mode 100644 index 0000000000..6b10da13e5 --- /dev/null +++ b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-goolf-1.4.10.eb @@ -0,0 +1,38 @@ +# Modified for goolf-1.4.10 by: Daniel Navarro-Gomez, MEEI Bioinformatics Center (MBC) + +easyblock = 'ConfigureMake' + +name = 'ncurses' +version = '6.0' + +homepage = 'http://www.gnu.org/software/ncurses/' +description = """The Ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, + and more. It uses Terminfo format, supports pads and color and multiple highlights and forms characters and + function-key mapping, and has all the other SYSV-curses enhancements over BSD Curses.""" + +toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['ncurses-%(version)s_gcc-5.patch'] + +configopts = [ + # default build + '--with-shared --enable-overwrite', + # the UTF-8 enabled version (ncursesw) + '--with-shared --enable-overwrite --enable-ext-colors --enable-widec --includedir=%(installdir)s/include/ncursesw/' +] + +libs = ["form", "menu", "ncurses", "panel"] +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["captoinfo", "clear", "infocmp", "infotocap", "ncurses%(version_major)s-config", + "reset", "tabs", "tic", "toe", "tput", "tset"]] + + ['lib/lib%s%s.a' % (x, y) for x in libs for y in ['', '_g', 'w', 'w_g']] + + ['lib/lib%s%s.so' % (x, y) for x in libs for y in ['', 'w']] + + ['lib/libncurses++%s.a' % x for x in ['', 'w']], + 'dirs': ['include', 'include/ncursesw'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb new file mode 100644 index 0000000000..f620000661 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4-goolf-1.4.10.eb @@ -0,0 +1,40 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +# Modified for goolf-1.4.10 by: Daniel Navarro-Gomez, MEEI Bioinformatics Center (MBC) +# +## +name = 'SAMtools' +version = '1.4' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'goolf', 'version': '1.4.10'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +# +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.7'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.2'), +] + +moduleclass = 'bio' -- GitLab From 8f63e326929541c6c9f8911357c81019aea0bde8 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Fri, 24 Mar 2017 19:27:45 +0000 Subject: [PATCH 0795/1311] added recipe for repasthpc --- .../r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb diff --git a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb new file mode 100644 index 0000000000..d01d3cb5a2 --- /dev/null +++ b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'RepastHPC' +version = '2.2.0' + +homepage = 'https://repast.github.io/' +description = """The Repast Suite is a family of advanced, free, and open source agent-based modeling and simulation platforms that have collectively been under continuous development for over 15 years: +Repast for High Performance Computing 2.2.0, released on 30 September 2016, is a lean and expert-focused C++-based modeling system that is designed for use on large computing clusters and supercomputers.""" + +toolchain = {'name': 'foss', 'version': '2016a'} +toolchainopts = {'usempi': True} + +sources = ["repast_hpc-%s.tgz" % version] +source_urls = ['https://github.com/Repast/repast.hpc/releases/download/v%s' % version] + +dependencies = [ + ('netCDF-C++','4.2'), + ('Boost', '1.60.0'), +] + +configopts = '--with-boost=$EBROOTBOOST --with-netcdf=$EBROOTNETCDFMINCPLUSPLUS' + +sanity_check_paths = { + 'files': ['lib/librepast_hpc-%s.so' % version, 'lib/librelogo-%s.so' % version], + 'dirs': ['include','lib','bin/zombie', 'bin/rumor'], +} + +moduleclass = 'bio' -- GitLab From 933e11553203ffe64b2c29128734b3631ce6fe77 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 27 Mar 2017 12:00:12 +0800 Subject: [PATCH 0796/1311] adding easyconfigs: Wannier90-2.1.0-intel-2017a.eb --- .../Wannier90/Wannier90-2.1.0-intel-2017a.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/w/Wannier90/Wannier90-2.1.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/w/Wannier90/Wannier90-2.1.0-intel-2017a.eb b/easybuild/easyconfigs/w/Wannier90/Wannier90-2.1.0-intel-2017a.eb new file mode 100644 index 0000000000..4945212393 --- /dev/null +++ b/easybuild/easyconfigs/w/Wannier90/Wannier90-2.1.0-intel-2017a.eb @@ -0,0 +1,29 @@ +easyblock = 'MakeCp' + +name = 'Wannier90' +version = '2.1.0' + +homepage = 'http://www.wannier.org' +description = """A tool for obtaining maximally-localised Wannier functions""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.wannier.org/code'] +checksums = ['07a81c002b41d6d0f97857e55c57d769'] + +prebuildopts = 'cp ./config/make.inc.ifort ./make.inc && ' + +buildopts = 'all F90=$F90 MPIF90=$MPIF90 FCOPTS="$FFLAGS" LDOPTS="$FFLAGS" ' +buildopts += 'LIBDIR="$LAPACK_LIB_DIR" LIBS="$LIBLAPACK" ' +buildopts += 'COMMS=mpi' + +files_to_copy = [(['wannier90.x', 'postw90.x'], 'bin'), (['libwannier.a'], 'lib')] + +sanity_check_paths = { + 'files': ['bin/wannier90.x', 'bin/postw90.x', 'lib/libwannier.a'], + 'dirs': [] +} + +moduleclass = 'chem' -- GitLab From 33de8679402f5de09a5ce0d7bcdb5bbddd34f302 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 27 Mar 2017 18:03:08 +0800 Subject: [PATCH 0797/1311] adding easyconfigs: DFTB+-1.3.1-intel-2017a.eb --- .../d/DFTB+/DFTB+-1.3.1-intel-2017a.eb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb new file mode 100644 index 0000000000..35d80f5918 --- /dev/null +++ b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb @@ -0,0 +1,47 @@ +easyblock = 'MakeCp' + +name = 'DFTB+' +version = '1.3.1' + +homepage = 'https://www.dftb-plus.info' +description = """DFTB+ is a fast and efficient versatile quantum mechanical simulation package. It is based on the + Density Functional Tight Binding (DFTB) method, containing almost all of the useful extensions which have been + developed for the DFTB framework so far. Using DFTB+ you can carry out quantum mechanical simulations like with + ab-initio density functional theory based packages, but in an approximate way gaining typically around two order of + magnitude in speed.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://www.dftb-plus.info/download/dftb-13'] # requires registration +sources = [ + 'dftbplus-%(version)s-src.tar.xz', + 'dftbplus-%(version)s-extlib.tar.xz', + 'dftbplus-%(version)s-autotest.tar.xz', +] + +checksums = [ + 'b821ed7406a2a4b35c0a48974e18667f', # dftbplus-1.3.1-src.tar.xz + '2333f1ff826a3c4776e1e77a28f17004', # dftbplus-1.3.1-extlib.tar.xz + 'abaf8a2f94c74a13a0d8d19e9b022e40', # dftbplus-1.3.1-autotest.tar.xz +] + +dependencies = [ + ('arpack-ng', '3.4.0'), +] + +subdir = '%dftbplus-%(version)s' + +prebuildopts = "sed 's/ARCH = x86_64-linux-intel/ARCH = user/' Makefile.user.template > Makefile.user && " +prebuildopts += "cp sysmakes/make.x86_64-linux-intel sysmakes/make.user && " +prebuildopts += "sed -i 's|LNOPT = -static|#LNOPT = -static|' sysmakes/make.user && " +prebuildopts += "sed -i 's|/opt/intel/mkl/10.2.6.038/lib/em64t|$(MKLROOT)|' sysmakes/make.user && " +prebuildopts += "cd prg_dftb && " + +files_to_copy = [(['prg_dftb/_obj_user/dftb+'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/dftb+'], + 'dirs': [] +} + +moduleclass = 'phys' -- GitLab From 341613bcd83198517aa20bc7e728f356df2ad5f4 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 27 Mar 2017 18:09:07 +0800 Subject: [PATCH 0798/1311] adding easyconfigs: BerkeleyGW-1.2.0-intel-2017a.eb --- .../BerkeleyGW-1.2.0-intel-2017a.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb new file mode 100644 index 0000000000..21a5da2750 --- /dev/null +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb @@ -0,0 +1,40 @@ +easyblock = 'ConfigureMake' + +name = 'BerkeleyGW' +version = "1.2.0" + +homepage = 'http://www.berkeleygw.org' +description = """The BerkeleyGW Package is a set of computer codes that calculates the quasiparticle + properties and the optical responses of a large variety of materials from bulk periodic crystals to + nanostructures such as slabs, wires and molecules.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://www.berkeleygw.org/releases/'] # requires registration +sources = ['BGW-%(version)s.tar.gz'] +checksums = ['0bfcac62ebe486374b37d04a131453d7'] + +skipsteps = ['configure'] + +prebuildopts = 'cp config/generic.mpi.linux.mk arch.mk && ' + +buildopts = 'all-flavors COMPFLAG=-DINTEL PARAFLAG="-DMPI -DOMP" DEBUGFLAG="" F90free="$MPIF90 -free" LINK="$MPIF90" ' +buildopts += 'FOPTS="$FFLAGS -qopenmp" MOD_OPT="-module " C_PARAFLAG="$PARAFLAG" CC_COMP="$MPICXX" C_COMP="$MPICC" ' +buildopts += 'C_LINK="$MPICXX" C_OPTS="$CFLAGS -qopenmp" MKLPATH="$MKLROOT" LAPACKLIB="$LIBLAPACK" ' +buildopts += 'BLACSDIR="$BLACS_LIB_DIR" BLACS="$LIBBLACS" SCALAPACKLIB="$LIBSCALAPACK" ' +buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2xf_double_intel.a" ' + +# "all-flavors" cleans and compiles everything again +preinstallopts = 'sed -i "s/install: all-flavors/install: all/" Makefile && ' + +installopts = 'INSTDIR=%(installdir)s' + +sanity_check_paths = { + 'files': ['bin/' + prog + '.' + flavor + '.x' + for prog in ['epsilon', 'sigma', 'kernel', 'absorption', 'nonlinearoptics'] + for flavor in ['real', 'cplx']], + 'dirs': [] +} + +moduleclass = 'phys' -- GitLab From f9818b855274e1615306b3fde48bcbdbc3b27865 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Mon, 27 Mar 2017 23:45:22 +0800 Subject: [PATCH 0799/1311] simplify prebuildopts --- easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb index 35d80f5918..15d96ddf6e 100644 --- a/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb +++ b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb @@ -31,12 +31,11 @@ dependencies = [ subdir = '%dftbplus-%(version)s' -prebuildopts = "sed 's/ARCH = x86_64-linux-intel/ARCH = user/' Makefile.user.template > Makefile.user && " -prebuildopts += "cp sysmakes/make.x86_64-linux-intel sysmakes/make.user && " -prebuildopts += "sed -i 's|LNOPT = -static|#LNOPT = -static|' sysmakes/make.user && " -prebuildopts += "sed -i 's|/opt/intel/mkl/10.2.6.038/lib/em64t|$(MKLROOT)|' sysmakes/make.user && " +prebuildopts = "cp sysmakes/make.x86_64-linux-intel sysmakes/make.user && " prebuildopts += "cd prg_dftb && " +buildopts = "ARCH=user MKL_LIBDIR=$MKLROOT LNOPT= " + files_to_copy = [(['prg_dftb/_obj_user/dftb+'], 'bin')] sanity_check_paths = { -- GitLab From 92fd0795325dd52804826307a09bcc0fcd9cf979 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Mar 2017 17:54:49 +0200 Subject: [PATCH 0800/1311] adding easyconfigs: ED2-20170201-intel-2017a.eb --- .../e/ED2/ED2-20170201-intel-2017a.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb diff --git a/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb new file mode 100644 index 0000000000..e02aad07d9 --- /dev/null +++ b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb @@ -0,0 +1,37 @@ +easyblock = 'MakeCp' + +name = 'ED2' +version = '20170201' +commit = '0146fa4' + +homepage = 'https://github.com/EDmodel/ED2' +description = """The Ecosystem Demography Biosphere Model (ED2) is an integrated terrestrial biosphere model + incorporating hydrology, land-surface biophysics, vegetation dynamics, and soil carbon and nitrogen biogeochemistry""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/EDmodel/ED2/archive/'] +sources = ['%s.tar.gz' % commit] + +patches = ['ED2.patch'] + +dependencies = [('HDF5', '1.10.0-patch1')] + +start_dir = 'ED/build' + +# rely on install.sh to prepare everything, but run 'make' command ourselves to take control over compiler options +prebuildopts = "sed -i 's/^make OPT/#make OPT/g' install.sh && ./install.sh --kind E --platform intel --gitoff && " +prebuildopts += "cd bin-opt-E && " + +buildopts = "OPT=opt KIND_COMP=E GIT_TAG= HDF5_PATH=$EBROOTHDF5 PAR_LIBS='' " +buildopts += 'F_COMP="$FC" C_COMP="$CC" LOADER="$FC" F_OPTS="$FFLAGS" C_OPTS="$CFLAGS" F_LOWO_OPTS="$FFLAGS" && cd -' + +files_to_copy = [(['ED/build/ed_2.1-opt'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/ed_2.1-opt'], + 'dirs': [], +} + +moduleclass = 'geo' -- GitLab From 5ec6dcd34db0e99be4c4ba8a7cae4a12b533d4c4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Mar 2017 18:18:56 +0200 Subject: [PATCH 0801/1311] add patches for ED2 --- .../e/ED2/ED2-20170201-intel-2017a.eb | 8 ++++--- .../easyconfigs/e/ED2/ED2_fix-type.patch | 13 ++++++++++ .../e/ED2/ED2_install-without-make.patch | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 easybuild/easyconfigs/e/ED2/ED2_fix-type.patch create mode 100644 easybuild/easyconfigs/e/ED2/ED2_install-without-make.patch diff --git a/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb index e02aad07d9..eed367500a 100644 --- a/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb +++ b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a.eb @@ -14,15 +14,17 @@ toolchainopts = {'usempi': True} source_urls = ['https://github.com/EDmodel/ED2/archive/'] sources = ['%s.tar.gz' % commit] -patches = ['ED2.patch'] +patches = [ + 'ED2_install-without-make.patch', + 'ED2_fix-type.patch', +] dependencies = [('HDF5', '1.10.0-patch1')] start_dir = 'ED/build' # rely on install.sh to prepare everything, but run 'make' command ourselves to take control over compiler options -prebuildopts = "sed -i 's/^make OPT/#make OPT/g' install.sh && ./install.sh --kind E --platform intel --gitoff && " -prebuildopts += "cd bin-opt-E && " +prebuildopts = "./install.sh --kind E --platform intel --gitoff && cd bin-opt-E && " buildopts = "OPT=opt KIND_COMP=E GIT_TAG= HDF5_PATH=$EBROOTHDF5 PAR_LIBS='' " buildopts += 'F_COMP="$FC" C_COMP="$CC" LOADER="$FC" F_OPTS="$FFLAGS" C_OPTS="$CFLAGS" F_LOWO_OPTS="$FFLAGS" && cd -' diff --git a/easybuild/easyconfigs/e/ED2/ED2_fix-type.patch b/easybuild/easyconfigs/e/ED2/ED2_fix-type.patch new file mode 100644 index 0000000000..4f73ca3487 --- /dev/null +++ b/easybuild/easyconfigs/e/ED2/ED2_fix-type.patch @@ -0,0 +1,13 @@ +fix type for argument to h5dget_type_f call +see https://github.com/EDmodel/ED2/issues/153 and https://github.com/crollinson/ED2/commit/48b9e8132b992460aa8afeca222fd4c12f01cfe4 +--- ED/src/utils/hdf5_utils.F90.orig 2017-02-01 22:00:01.000000000 +0100 ++++ ED/src/utils/hdf5_utils.F90 2017-03-27 11:56:38.579744327 +0200 +@@ -432,7 +432,7 @@ + character(len=2) :: ctype + + logical :: convert = .false. +- integer :: type_id ++ integer(HID_T) :: type_id + real(kind=8), allocatable, dimension(:) :: dvaraTEMP + + ! Find which data type will be read diff --git a/easybuild/easyconfigs/e/ED2/ED2_install-without-make.patch b/easybuild/easyconfigs/e/ED2/ED2_install-without-make.patch new file mode 100644 index 0000000000..601e93e788 --- /dev/null +++ b/easybuild/easyconfigs/e/ED2/ED2_install-without-make.patch @@ -0,0 +1,24 @@ +avoid install.sh calling 'make' (and hard set GIT_EXIST) +author: Kenneth Hoste (HPC-UGent) +--- ED/build/install.sh.orig 2017-03-27 12:00:10.321077952 +0200 ++++ ED/build/install.sh 2017-03-27 11:59:40.200888391 +0200 +@@ -94,8 +94,8 @@ + esac + + # Tag executables with a git version and branch name if possible. +-GIT_EXIST=`git rev-parse --is-inside-work-tree` +-if [ ${GIT_EXIST} == "true" -a ${USE_GIT} ] ++GIT_EXIST="" ++if [ "${GIT_EXIST}" == "true" -a ${USE_GIT} ] + then + GIT_TAG=`git branch -v | awk '/\*/ {print "-" $2 "-" $3}'` + GIT_TAG=`echo ${GIT_TAG} | tr -d '()/[]'` +@@ -122,7 +122,7 @@ + touch dependency.mk + + #----- Launch the compiler. ---------------------------------------------------------------# +-make OPT=${OPT} KIND_COMP=${KIND} ${CLEAN} GIT_TAG=${GIT_TAG} ++#make OPT=${OPT} KIND_COMP=${KIND} ${CLEAN} GIT_TAG=${GIT_TAG} + make_exit_code=$? + #------------------------------------------------------------------------------------------# + -- GitLab From 1af6f173acf17c4edddfd3ce10b770e71ddb0346 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Mon, 27 Mar 2017 19:22:16 +0000 Subject: [PATCH 0802/1311] cosmetic changes --- .../r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb index d01d3cb5a2..d533ab1e52 100644 --- a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb +++ b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb @@ -4,25 +4,27 @@ name = 'RepastHPC' version = '2.2.0' homepage = 'https://repast.github.io/' -description = """The Repast Suite is a family of advanced, free, and open source agent-based modeling and simulation platforms that have collectively been under continuous development for over 15 years: -Repast for High Performance Computing 2.2.0, released on 30 September 2016, is a lean and expert-focused C++-based modeling system that is designed for use on large computing clusters and supercomputers.""" +description = """The Repast Suite is a family of advanced, free, and open source agent-based modeling and simulation +platforms that have collectively been under continuous development for over 15 years: +Repast for High Performance Computing 2.2.0, released on 30 September 2016, is a lean and expert-focused C++-based +modeling system that is designed for use on large computing clusters and supercomputers.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'usempi': True} -sources = ["repast_hpc-%s.tgz" % version] -source_urls = ['https://github.com/Repast/repast.hpc/releases/download/v%s' % version] +sources = ["repast_hpc-%(version)s.tgz"] +source_urls = ['https://github.com/Repast/repast.hpc/releases/download/v%(version)s'] dependencies = [ - ('netCDF-C++','4.2'), + ('netCDF-C++', '4.2'), ('Boost', '1.60.0'), ] configopts = '--with-boost=$EBROOTBOOST --with-netcdf=$EBROOTNETCDFMINCPLUSPLUS' sanity_check_paths = { - 'files': ['lib/librepast_hpc-%s.so' % version, 'lib/librelogo-%s.so' % version], - 'dirs': ['include','lib','bin/zombie', 'bin/rumor'], + 'files': ['lib/librelogo-%(version)s.%s' % SHLIB_EXT, 'lib/librepast_hpc-%(version)s.%s' % SHLIB_EXT ], + 'dirs': ['bin/rumor', 'bin/zombie', 'include', 'lib'], } moduleclass = 'bio' -- GitLab From 2d8c701f3270602f9db0b3edb5cd4a4de7009159 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Tue, 28 Mar 2017 10:03:12 +0800 Subject: [PATCH 0803/1311] disable stdc-predef.h pre-include --- .../easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb index 21a5da2750..6db03e17ee 100644 --- a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb @@ -21,8 +21,8 @@ prebuildopts = 'cp config/generic.mpi.linux.mk arch.mk && ' buildopts = 'all-flavors COMPFLAG=-DINTEL PARAFLAG="-DMPI -DOMP" DEBUGFLAG="" F90free="$MPIF90 -free" LINK="$MPIF90" ' buildopts += 'FOPTS="$FFLAGS -qopenmp" MOD_OPT="-module " C_PARAFLAG="$PARAFLAG" CC_COMP="$MPICXX" C_COMP="$MPICC" ' -buildopts += 'C_LINK="$MPICXX" C_OPTS="$CFLAGS -qopenmp" MKLPATH="$MKLROOT" LAPACKLIB="$LIBLAPACK" ' -buildopts += 'BLACSDIR="$BLACS_LIB_DIR" BLACS="$LIBBLACS" SCALAPACKLIB="$LIBSCALAPACK" ' +buildopts += 'FCPP="cpp -C -P -ffreestanding" C_LINK="$MPICXX" C_OPTS="$CFLAGS -qopenmp" MKLPATH="$MKLROOT" ' +buildopts += 'LAPACKLIB="$LIBLAPACK" BLACSDIR="$BLACS_LIB_DIR" BLACS="$LIBBLACS" SCALAPACKLIB="$LIBSCALAPACK" ' buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2xf_double_intel.a" ' # "all-flavors" cleans and compiles everything again -- GitLab From e64ee749935ed6de93fde54097f4bcc9caeca1b9 Mon Sep 17 00:00:00 2001 From: easybuild Date: Tue, 28 Mar 2017 15:29:46 +0800 Subject: [PATCH 0804/1311] cleanup --- easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb index 15d96ddf6e..7f8e07f325 100644 --- a/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb +++ b/easybuild/easyconfigs/d/DFTB+/DFTB+-1.3.1-intel-2017a.eb @@ -29,10 +29,7 @@ dependencies = [ ('arpack-ng', '3.4.0'), ] -subdir = '%dftbplus-%(version)s' - -prebuildopts = "cp sysmakes/make.x86_64-linux-intel sysmakes/make.user && " -prebuildopts += "cd prg_dftb && " +prebuildopts = "cp sysmakes/make.x86_64-linux-intel sysmakes/make.user && cd prg_dftb && " buildopts = "ARCH=user MKL_LIBDIR=$MKLROOT LNOPT= " -- GitLab From a629ee133ac546cb1145364ab4dcafd4405b08f2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 11:20:23 +0200 Subject: [PATCH 0805/1311] adding easyconfigs: WRF-Fire-20170221-intel-2016b-dmpar.eb --- .../WRF-Fire-20170221-intel-2016b-dmpar.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb diff --git a/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb b/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb new file mode 100644 index 0000000000..eeb28fe474 --- /dev/null +++ b/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb @@ -0,0 +1,23 @@ +name = 'WRF-Fire' +version = '20170221' +commit = 'f2db7a0' +buildtype = 'dmpar' +versionsuffix = '-' + buildtype + +homepage = 'http://www.openwfm.org/wiki/WRF-SFIRE' +description = """WRF-Fire combines the Weather Research and Forecasting model (WRF) with a fire code implementing a + surface fire behavior model, called SFIRE, based on semi-empirical formulas calculate the rate of spread of the fire + line (the interface between burning and unignited fuel) based on fuel properties, wind velocities from WRF, and + terrain slope. The fire spread is implemented by the level set method.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['https://github.com/openwfm/wrf-fire/archive/'] +sources = ['%s.tar.gz' % commit] + +dependencies = [ + ('netCDF-Fortran', '4.4.4'), +] + + +moduleclass = 'geo' -- GitLab From af3b49f341a5e52e48df92f6cfe65a3cf316c78f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 11:49:11 +0200 Subject: [PATCH 0806/1311] add maxparallel = 10 --- .../w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb b/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb index eeb28fe474..55b59e1608 100644 --- a/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb +++ b/easybuild/easyconfigs/w/WRF-Fire/WRF-Fire-20170221-intel-2016b-dmpar.eb @@ -19,5 +19,7 @@ dependencies = [ ('netCDF-Fortran', '4.4.4'), ] +# limit max. parallelism for build (WRF-Fire will cap to 2 if > 20) +maxparallel = 10 moduleclass = 'geo' -- GitLab From e9b358bfb426d73b3a04eae8b2a57dfb47e8ede6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 12:41:24 +0200 Subject: [PATCH 0807/1311] adding easyconfigs: Doris-4.02-intel-2017a.eb --- .../d/Doris/Doris-4.02-intel-2017a.eb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 easybuild/easyconfigs/d/Doris/Doris-4.02-intel-2017a.eb diff --git a/easybuild/easyconfigs/d/Doris/Doris-4.02-intel-2017a.eb b/easybuild/easyconfigs/d/Doris/Doris-4.02-intel-2017a.eb new file mode 100644 index 0000000000..37cf20fd5b --- /dev/null +++ b/easybuild/easyconfigs/d/Doris/Doris-4.02-intel-2017a.eb @@ -0,0 +1,16 @@ +name = 'Doris' +version = '4.02' + +homepage = 'http://doris.tudelft.nl/' +description = "Delft object-oriented radar interferometric software" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://doris.tudelft.nl/software/'] +sources = ['doris_v%(version)s.tar.gz'] + +dependencies = [ + ('FFTW', '3.3.6'), +] + +moduleclass = 'geo' -- GitLab From b3fc425e503d838764466ab63d3321642070e1c9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 14:31:38 +0200 Subject: [PATCH 0808/1311] adding easyconfigs: h5py-2.7.0-intel-2016b-Python-2.7.12.eb --- .../h5py-2.7.0-intel-2016b-Python-2.7.12.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..adc15ffb81 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'h5py' +version = '2.7.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.12'), + ('HDF5', '1.10.0-patch1'), + ('pkgconfig', '1.1.0', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' -- GitLab From ad6485b3fbe49817a1543a16dbb87ad2b171c876 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 14:32:03 +0200 Subject: [PATCH 0809/1311] adding easyconfigs: SpiceyPy-1.1.0-intel-2016b-Python-2.7.12.eb --- ...piceyPy-1.1.0-intel-2016b-Python-2.7.12.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.0-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.0-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9ffb950100 --- /dev/null +++ b/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.0-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'SpiceyPy' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/AndrewAnnex/SpiceyPy' +description = "SpiceyPy is a Python wrapper for the NAIF C SPICE Toolkit (N65)" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'geo' -- GitLab From 6f50fca325bea7be094393d39e28bdc2c94b19ce Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Mar 2017 14:32:29 +0200 Subject: [PATCH 0810/1311] adding easyconfigs: FFTW-3.3.6-intel-2016b.eb --- .../f/FFTW/FFTW-3.3.6-intel-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb new file mode 100644 index 0000000000..14ebd120a4 --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb @@ -0,0 +1,29 @@ +name = 'FFTW' +version = '3.3.6' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [homepage] +sources = ['fftw-%(version)s-pl1.tar.gz'] +checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] + +patches = [ + 'FFTW-3.3.6-F03_interface_pl2.patch', +] + +# no quad precision, requires GCC v4.6 or higher +# see also +# http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html +with_quad_prec = False + +# compilation fails when configuring with --enable-avx-128-fma, Intel compilers do not support FMA4 instructions +use_fma4 = False + +runtest = 'check' + +moduleclass = 'numlib' -- GitLab From 4757aa658eebdd42897f500ee38fbea0e652d2c4 Mon Sep 17 00:00:00 2001 From: Maxime Boissonneault Date: Tue, 28 Mar 2017 12:52:24 +0000 Subject: [PATCH 0811/1311] escaped % --- easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb index d533ab1e52..fc07069bff 100644 --- a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb +++ b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb @@ -23,7 +23,7 @@ dependencies = [ configopts = '--with-boost=$EBROOTBOOST --with-netcdf=$EBROOTNETCDFMINCPLUSPLUS' sanity_check_paths = { - 'files': ['lib/librelogo-%(version)s.%s' % SHLIB_EXT, 'lib/librepast_hpc-%(version)s.%s' % SHLIB_EXT ], + 'files': ['lib/librelogo-%%(version)s.%s' % SHLIB_EXT, 'lib/librepast_hpc-%%(version)s.%s' % SHLIB_EXT ], 'dirs': ['bin/rumor', 'bin/zombie', 'include', 'lib'], } -- GitLab From 61c407afe0e0c14abfcbb085a78030d4a1b6bf86 Mon Sep 17 00:00:00 2001 From: easybuild Date: Wed, 29 Mar 2017 08:58:45 +0800 Subject: [PATCH 0812/1311] remove -qopenmp and enable openmp toolchain option --- .../easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb index 6db03e17ee..94e1cd433d 100644 --- a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb @@ -9,7 +9,7 @@ description = """The BerkeleyGW Package is a set of computer codes that calculat nanostructures such as slabs, wires and molecules.""" toolchain = {'name': 'intel', 'version': '2017a'} -toolchainopts = {'usempi': True} +toolchainopts = {'usempi': True, 'openmp': True} source_urls = ['http://www.berkeleygw.org/releases/'] # requires registration sources = ['BGW-%(version)s.tar.gz'] @@ -21,7 +21,7 @@ prebuildopts = 'cp config/generic.mpi.linux.mk arch.mk && ' buildopts = 'all-flavors COMPFLAG=-DINTEL PARAFLAG="-DMPI -DOMP" DEBUGFLAG="" F90free="$MPIF90 -free" LINK="$MPIF90" ' buildopts += 'FOPTS="$FFLAGS -qopenmp" MOD_OPT="-module " C_PARAFLAG="$PARAFLAG" CC_COMP="$MPICXX" C_COMP="$MPICC" ' -buildopts += 'FCPP="cpp -C -P -ffreestanding" C_LINK="$MPICXX" C_OPTS="$CFLAGS -qopenmp" MKLPATH="$MKLROOT" ' +buildopts += 'FCPP="cpp -C -P -ffreestanding" C_LINK="$MPICXX" C_OPTS="$CFLAGS" MKLPATH="$MKLROOT" ' buildopts += 'LAPACKLIB="$LIBLAPACK" BLACSDIR="$BLACS_LIB_DIR" BLACS="$LIBBLACS" SCALAPACKLIB="$LIBSCALAPACK" ' buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2xf_double_intel.a" ' -- GitLab From e665b67632d148ef30590adec9b871b6cc74c9b1 Mon Sep 17 00:00:00 2001 From: easybuild Date: Wed, 29 Mar 2017 14:31:28 +0800 Subject: [PATCH 0813/1311] remove the other -qopenmp --- .../easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb index 94e1cd433d..2eb57382c1 100644 --- a/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb +++ b/easybuild/easyconfigs/b/BerkeleyGW/BerkeleyGW-1.2.0-intel-2017a.eb @@ -20,7 +20,7 @@ skipsteps = ['configure'] prebuildopts = 'cp config/generic.mpi.linux.mk arch.mk && ' buildopts = 'all-flavors COMPFLAG=-DINTEL PARAFLAG="-DMPI -DOMP" DEBUGFLAG="" F90free="$MPIF90 -free" LINK="$MPIF90" ' -buildopts += 'FOPTS="$FFLAGS -qopenmp" MOD_OPT="-module " C_PARAFLAG="$PARAFLAG" CC_COMP="$MPICXX" C_COMP="$MPICC" ' +buildopts += 'FOPTS="$FFLAGS" MOD_OPT="-module " C_PARAFLAG="$PARAFLAG" CC_COMP="$MPICXX" C_COMP="$MPICC" ' buildopts += 'FCPP="cpp -C -P -ffreestanding" C_LINK="$MPICXX" C_OPTS="$CFLAGS" MKLPATH="$MKLROOT" ' buildopts += 'LAPACKLIB="$LIBLAPACK" BLACSDIR="$BLACS_LIB_DIR" BLACS="$LIBBLACS" SCALAPACKLIB="$LIBSCALAPACK" ' buildopts += 'FFTWINCLUDE="$FFTW_INC_DIR" FFTWLIB="$MKLROOT/lib/intel64/libfftw2xf_double_intel.a" ' -- GitLab From 1fd96d8483783fe062547963cb0baee7a49ed8db Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 29 Mar 2017 18:32:53 +0200 Subject: [PATCH 0814/1311] adding easyconfigs: ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb --- .../ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..367e778dfc --- /dev/null +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb @@ -0,0 +1,47 @@ +easyblock = 'ConfigureMake' + +name = 'ROI_PAC' +version = '3.0.1' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://roipac.org/' +description = """Repeat Orbit Interferometry PACkage (ROI_PAC), software for processing synthetic aperture radar data + to produce differential interferograms""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +# download requires registration, see http://www.openchannelfoundation.org/projects/ROI_PAC +sources = ['ROI_PAC_%s.tgz' % '_'.join(version.split('.'))] + +# FIXME: http://roipac.org/cgi-bin/moin.cgi/Patches + +builddependencies = [('Autotools', '20150215')] +dependencies = [ + ('FFTW', '3.3.6'), + ('GETORB', '2.3.2'), + ('Perl', '5.24.0'), +] + +start_dir = 'ROI_PAC' + +postinstallcmds = [ + # symlink to getorb requires in /bin subdirectory + "cd %(installdir)s/bin && ln -s $(which getorb)", + # also copy scripts and make sure they're excutable + "cp -a INT_SCR/* %(installdir)s/bin", + # fix shebang in Perl scripts + "sed -i 's@^#!.*/bin/perl.*@#!/usr/bin/env perl@g' %(installdir)s//bin/*.pl", +] + +sanity_check_paths = { + 'files': ['bin/getorb', 'bin/make_raw.pl', 'bin/roi'], + 'dirs': [], +} + +modextrapaths = {'PERL5LIB': 'bin'} +modextravars = { + 'INT_BIN': '%(installdir)s/bin', + 'INT_SCR': '%(installdir)s/bin', +} + +moduleclass = 'geo' -- GitLab From fc0f4ff96ff2a60bbb800af32366c28229941270 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 29 Mar 2017 18:34:36 +0200 Subject: [PATCH 0815/1311] adding easyconfigs: jemalloc-4.5.0-intel-2017a.eb --- .../j/jemalloc/jemalloc-4.5.0-intel-2017a.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/j/jemalloc/jemalloc-4.5.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/j/jemalloc/jemalloc-4.5.0-intel-2017a.eb b/easybuild/easyconfigs/j/jemalloc/jemalloc-4.5.0-intel-2017a.eb new file mode 100644 index 0000000000..45f685672f --- /dev/null +++ b/easybuild/easyconfigs/j/jemalloc/jemalloc-4.5.0-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'jemalloc' +version = '4.5.0' + +homepage = 'http://www.canonware.com/jemalloc' +description = """jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and + scalable concurrency support.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/jemalloc/jemalloc/archive'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "./autogen.sh && " +prebuildopts = "make dist && " + +sanity_check_paths = { + 'files': ['bin/jeprof', 'lib/libjemalloc.a', 'lib/libjemalloc_pic.a', 'lib/libjemalloc.%s' % SHLIB_EXT, + 'include/jemalloc/jemalloc.h'], + 'dirs': ['share'], +} + +modextrapaths = {'LD_PRELOAD': ['lib/libjemalloc.%s' % SHLIB_EXT]} + +moduleclass = 'lib' -- GitLab From 16bdb31b1f2f30a4a25c0a601176e39348a2a341 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 29 Mar 2017 20:04:44 +0200 Subject: [PATCH 0816/1311] add easyconfig for GETORB dependency for ROI_PAC --- .../g/GETORB/GETORB-2.3.2-intel-2016b.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb new file mode 100644 index 0000000000..61b3b12249 --- /dev/null +++ b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'GETORB' +version = '2.3.2' + +homepage = 'http://www.deos.tudelft.nl/ers/precorbs/tools/getorb_pack.shtml' +description = "GETORB software package contains programs to handle the orbital data records (ODRs)" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://www.deos.tudelft.nl/ers/precorbs/tools/'] +sources = ['getorb_%(version)s.tar.gz'] + +skipsteps = ['configure'] + +preinstallopts = "mkdir %(installdir)s/bin && " +installopts = 'BIN_DIR=%(installdir)s/bin' + +sanity_check_paths = { + 'files': ['bin/getorb', 'bin/lodr', 'bin/mdate'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From 5ae48b9b752d2c302000a1a64f9ed58c9da4f585 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 10:31:21 +0200 Subject: [PATCH 0817/1311] disable parallel building for GETORB, tends to break --- easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb index 61b3b12249..2e648643f9 100644 --- a/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb +++ b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb @@ -13,6 +13,8 @@ sources = ['getorb_%(version)s.tar.gz'] skipsteps = ['configure'] +parallel = 1 + preinstallopts = "mkdir %(installdir)s/bin && " installopts = 'BIN_DIR=%(installdir)s/bin' -- GitLab From 07b52f5f937b0962931ac68e1ff50ef6567a3ddb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 10:57:46 +0200 Subject: [PATCH 0818/1311] apply fixes for ROI_PAC described at http://roipac.org/cgi-bin/moin.cgi/Patches --- .../ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb index 367e778dfc..30adf12039 100644 --- a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb @@ -10,10 +10,14 @@ description = """Repeat Orbit Interferometry PACkage (ROI_PAC), software for pro toolchain = {'name': 'intel', 'version': '2016b'} -# download requires registration, see http://www.openchannelfoundation.org/projects/ROI_PAC +# download of ROI_PAC tarball requires registration, see http://www.openchannelfoundation.org/projects/ROI_PAC sources = ['ROI_PAC_%s.tgz' % '_'.join(version.split('.'))] -# FIXME: http://roipac.org/cgi-bin/moin.cgi/Patches +# make_raw_alos.pl via http://roipac.org/cgi-bin/moin.cgi/ALOS_PALSAR?action=AttachFile&do=get&target=make_raw_alos.pl +patches = [ + 'ROI_PAC-%(version)s_fix-IntSim.patch', + ('make_raw_alos.pl', 'ROI_PAC/INT_SCR'), +] builddependencies = [('Autotools', '20150215')] dependencies = [ @@ -24,6 +28,8 @@ dependencies = [ start_dir = 'ROI_PAC' +installopts = "&& cd fip && $CC $CFLAGS -o add_rmgAmpPhs add_rmgAmpPhs.c && cp -a add_rmgAmpPhs %(installdir)s/bin" + postinstallcmds = [ # symlink to getorb requires in /bin subdirectory "cd %(installdir)s/bin && ln -s $(which getorb)", @@ -34,7 +40,7 @@ postinstallcmds = [ ] sanity_check_paths = { - 'files': ['bin/getorb', 'bin/make_raw.pl', 'bin/roi'], + 'files': ['bin/add_rmgAmpPhs', 'bin/getorb', 'bin/make_raw.pl', 'bin/make_raw_alos.pl', 'bin/roi'], 'dirs': [], } -- GitLab From c1fc2295bb7312211e795a36fa9bb466465ef66d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 11:49:06 +0200 Subject: [PATCH 0819/1311] also define $MY_BIN and $ROI_PAC in ROI_PAC easyconfig --- .../r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb index 30adf12039..89a80fb749 100644 --- a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb @@ -48,6 +48,10 @@ modextrapaths = {'PERL5LIB': 'bin'} modextravars = { 'INT_BIN': '%(installdir)s/bin', 'INT_SCR': '%(installdir)s/bin', + 'MY_BIN': '%(installdir)s/bin', + 'ROI_PAC': '%(installdir)s', } +modloadmsg = "To define: $INS_DIR, $POR_DIR, $SAR_ODR_DIR, $SAR_PRC_DIR, $VOR_DIR\n" + moduleclass = 'geo' -- GitLab From 58efec1edfc3367d40113a41898e9c66a597f816 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 11:53:29 +0200 Subject: [PATCH 0820/1311] add easyconfig for SQLite 3.17.0 as dep for Python 2.7.13 --- .../s/SQLite/SQLite-3.17.0-GCCcore-6.3.0.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/s/SQLite/SQLite-3.17.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.17.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.17.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..41b5a58bd2 --- /dev/null +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.17.0-GCCcore-6.3.0.eb @@ -0,0 +1,44 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'SQLite' +version = '3.17.0' + +homepage = 'http://www.sqlite.org/' +description = 'SQLite: SQL Database Engine in a C Library' + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.sqlite.org/2017/'] +version_minor_etc = version.split('.')[1:] +version_minor_etc += '0' * (3 - len(version_minor_etc)) +version_str = '%(version_major)s' + ''.join('%02d' % int(x) for x in version_minor_etc) +sources = ['sqlite-autoconf-%s.tar.gz' % version_str] + +builddependencies = [ + ('binutils', '2.27'), +] + +dependencies = [ + ('libreadline', '7.0'), + ('Tcl', '8.6.6'), +] + +sanity_check_paths = { + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'devel' -- GitLab From fb829371d5936654f861cad99145ed7ca41ab1f6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 11:58:41 +0200 Subject: [PATCH 0821/1311] no need to patch libreadline 7.0 --- .../easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb index a64400af8e..66d703c987 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-7.0-GCCcore-6.3.0.eb @@ -15,8 +15,6 @@ toolchainopts = {'pic': True} sources = ['readline-%(version)s.tar.gz'] source_urls = ['http://ftp.gnu.org/gnu/readline'] -patches = ['libreadline-%(version)s-bugfix.patch'] - builddependencies = [('binutils', '2.27')] dependencies = [('ncurses', '6.0')] -- GitLab From ca1a4fafff488db98e9293a6d4f93b9ee6cde90f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 13:11:17 +0200 Subject: [PATCH 0822/1311] update extensions in Python 2.7.13 easyconfig, mainly to include numpy 1.12.1 and scipy 0.19.0 --- .../p/Python/Python-2.7.13-intel-2017a.eb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb index 31e0d3d932..8d585acc42 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb @@ -28,7 +28,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] # order is important! -# package versions updated March 6th 2017 +# package versions updated March 30th 2017 exts_list = [ # note: more recent versions of setuptools (v34.x) can not be installed from source anymore, # see https://github.com/pypa/setuptools/issues/980 @@ -42,13 +42,14 @@ exts_list = [ ('nose', '1.3.7', { 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], }), - ('numpy', '1.12.0', { + ('numpy', '1.12.1', { 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], 'source_tmpl': '%(name)s-%(version)s.zip', 'patches': ['numpy-1.12.0-mkl.patch'], }), - ('scipy', '0.18.1', { + ('scipy', '0.19.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + 'source_tmpl': '%(name)s-%(version)s.zip', }), ('blist', '1.3.6', { 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], @@ -90,7 +91,7 @@ exts_list = [ ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], }), - ('cryptography', '1.7.2', { + ('cryptography', '1.8.1', { 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], }), ('paramiko', '2.1.2', { @@ -111,8 +112,9 @@ exts_list = [ ('mock', '2.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], }), - ('pytz', '2016.10', { + ('pytz', '2017.2', { 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + 'source_tmpl': '%(name)s-%(version)s.zip', }), ('pandas', '0.19.2', { 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], -- GitLab From c51102c55e1c7cb3641db800e8c2ac005121464d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 30 Mar 2017 16:39:09 +0200 Subject: [PATCH 0823/1311] adding easyconfigs: Mesa-17.0.2-intel-2017a.eb, LLVM-4.0.0-intel-2017a.eb, nettle-3.3-intel-2017a.eb, libdrm-2.4.76-intel-2017a.eb, Mako-1.0.6-intel-2017a-Python-2.7.13.eb, libxml2-2.9.4-intel-2017a-Python-2.7.13.eb --- .../l/LLVM/LLVM-4.0.0-intel-2017a.eb | 42 +++++++++++++ .../l/libdrm/libdrm-2.4.76-intel-2017a.eb | 24 +++++++ ...libxml2-2.9.4-intel-2017a-Python-2.7.13.eb | 24 +++++++ .../Mako-1.0.6-intel-2017a-Python-2.7.13.eb | 22 +++++++ .../m/Mesa/Mesa-17.0.2-intel-2017a.eb | 63 +++++++++++++++++++ .../n/nettle/nettle-3.3-intel-2017a.eb | 28 +++++++++ 6 files changed, 203 insertions(+) create mode 100644 easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/Mako/Mako-1.0.6-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-intel-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-intel-2017a.eb new file mode 100644 index 0000000000..5fba0f28fc --- /dev/null +++ b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-intel-2017a.eb @@ -0,0 +1,42 @@ +easyblock = 'CMakeMake' + +name = 'LLVM' +version = '4.0.0' + +homepage = "http://llvm.org/" +description = """The LLVM Core libraries provide a modern source- and target-independent + optimizer, along with code generation support for many popular CPUs + (as well as some less common ones!) These libraries are built around a well + specified code representation known as the LLVM intermediate representation + ("LLVM IR"). The LLVM Core libraries are well documented, and it is + particularly easy to invent your own language (or port an existing compiler) + to use LLVM as an optimizer and code generator.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'cstd': 'gnu++11'} + +source_urls = ["http://llvm.org/releases/%(version)s"] +sources = ["llvm-%(version)s.src.tar.xz"] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Python', '2.7.13'), +] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +configopts = '-DBUILD_SHARED_LIBS=ON -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS -shared-intel" ' +# required to install extra tools in bin/ +configopts += "-DLLVM_INSTALL_UTILS=ON -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_ZLIB=ON" + +sanity_check_paths = { + 'files': ['bin/llvm-ar', 'bin/FileCheck'], + 'dirs': ['include/llvm', 'include/llvm-c'], +} + +separate_build_dir = True + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb new file mode 100644 index 0000000000..be5c5321ff --- /dev/null +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libdrm' +version = '2.4.76' + +homepage = 'http://dri.freedesktop.org' +description = """Direct Rendering Manager runtime library.""" + +source_urls = ['http://dri.freedesktop.org/libdrm/'] +sources = [SOURCELOWER_TAR_GZ] + +toolchain = {'name': 'intel', 'version': '2017a'} + +dependencies = [ + ('X11', '20170129'), +] + +sanity_check_paths = { + 'files': ['include/xf86drm.h', 'include/xf86drmMode.h', 'lib/libdrm_intel.%s' % SHLIB_EXT, + 'lib/libdrm_radeon.%s' % SHLIB_EXT, 'lib/libdrm.%s' % SHLIB_EXT, 'lib/libkms.%s' % SHLIB_EXT], + 'dirs': ['include/libdrm', 'include/libkms', 'lib/pkgconfig'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..8eeb402547 --- /dev/null +++ b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +name = 'libxml2' +version = '2.9.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://xmlsoft.org/' +description = """Libxml2 is the XML C parser and toolchain developed for the Gnome project (but usable + outside of the Gnome platform).""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [ + 'http://xmlsoft.org/sources/', + 'http://xmlsoft.org/sources/old/' +] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.11'), + ('XZ', '5.2.3'), + ('Python', '2.7.13'), +] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/Mako/Mako-1.0.6-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/Mako/Mako-1.0.6-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..9bae465168 --- /dev/null +++ b/easybuild/easyconfigs/m/Mako/Mako-1.0.6-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'Mako' +version = '1.0.6' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.makotemplates.org' +description = """A super-fast templating language that borrows the best ideas from the existing templating languages""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.13')] + +sanity_check_paths = { + 'files': ['bin/mako-render'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s.egg'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb new file mode 100644 index 0000000000..70b8bcc2b4 --- /dev/null +++ b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb @@ -0,0 +1,63 @@ +# the purpose of the easyconfig is to build a Mesa for software rendering, +# not hardware rendering. This means you want at least SSE4.2. We build: +# - llvmpipe: the high-performance Gallium LLVM driver +# - swr: Intel's OpenSWR +# it will try to use the llvmpipe by default. It you want swr, do: +# GALLIUM_DRIVER=swr + +easyblock = 'ConfigureMake' + +name = 'Mesa' +version = '17.0.2' + +homepage = 'http://www.mesa3d.org/' +description = """Mesa is an open-source implementation of the OpenGL specification - + a system for rendering interactive 3D graphics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +# swr detects and builds parts specific for AVX and AVX2. If we use +# -xHost, this always gets overwritten and will fail. +toolchainopts = {'optarch': False} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = [ + 'https://mesa.freedesktop.org/archive/', + 'https://mesa.freedesktop.org/archive/%(version)s', + 'ftp://ftp.freedesktop.org/pub/mesa/%(version)s', + 'ftp://ftp.freedesktop.org/pub/mesa/older-versions/%(version_major)s.x/%(version)s', +] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + ('Autotools', '20150215'), + ('pkg-config', '0.29.1'), + ('Mako', '1.0.6', '-Python-2.7.13'), + ('libxml2', '2.9.4', '-Python-2.7.13'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('nettle', '3.3'), + ('libdrm', '2.4.76'), + ('LLVM', '4.0.0'), + ('X11', '20170129'), +] + +# GLU is not part anymore of Mesa package! +configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" +configopts += " --disable-gbm --disable-driglx-direct --with-gallium-drivers='swrast,swr' --disable-egl" +configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-shared-libs " + +sanity_check_paths = { + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb new file mode 100644 index 0000000000..d8f9e8fc31 --- /dev/null +++ b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'nettle' +version = '3.3' + +homepage = 'http://www.lysator.liu.se/~nisse/nettle/' +description = """Nettle is a cryptographic library that is designed to fit easily + in more or less any context: In crypto toolkits for object-oriented + languages (C++, Python, Pike, ...), in applications like LSH or GNUPG, + or even in kernel space.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('GMP', '6.1.2'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + + ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, + 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + 'dirs': ['include/nettle'], +} + +moduleclass = 'lib' -- GitLab From 65ed10a7fb122fd9bbde169b3234337aedb587c9 Mon Sep 17 00:00:00 2001 From: John Donners Date: Thu, 30 Mar 2017 18:55:11 +0200 Subject: [PATCH 0824/1311] adding easyconfigs: SCOTCH-6.0.4-intel-2016b.eb --- easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016b.eb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016b.eb index 20bc255b1a..5df84b7224 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016b.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016b.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' -- GitLab From dd3c0ab7262f61bf0d5187f1ce8307bd4c3afda4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 10:34:22 +0200 Subject: [PATCH 0825/1311] adding easyconfigs: PGI-17.3-GCC-6.3.0-2.28.eb --- .../p/PGI/PGI-17.3-GCC-6.3.0-2.28.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/p/PGI/PGI-17.3-GCC-6.3.0-2.28.eb diff --git a/easybuild/easyconfigs/p/PGI/PGI-17.3-GCC-6.3.0-2.28.eb b/easybuild/easyconfigs/p/PGI/PGI-17.3-GCC-6.3.0-2.28.eb new file mode 100644 index 0000000000..fd7e68ba06 --- /dev/null +++ b/easybuild/easyconfigs/p/PGI/PGI-17.3-GCC-6.3.0-2.28.eb @@ -0,0 +1,25 @@ +name = 'PGI' +version = '17.3' + +homepage = 'http://www.pgroup.com/' +description = "C, C++ and Fortran compilers from The Portland Group - PGI" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['pgilinux-20%(version_major)s-%(version_major)s%(version_minor)s-x86_64.tar.gz'] +checksums = ['6eefc42f85e756cbaba76467ed640902'] + +gccver = '6.3.0' +binutilsver = '2.28' +versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) + +dependencies = [ + ('GCCcore', gccver), + ('binutils', binutilsver, '', ('GCCcore', gccver)), + ('numactl', '2.0.11', '', ('GCCcore', gccver)), +] + +# license file +license_file = HOME + '/licenses/pgi/license.dat' + +moduleclass = 'compiler' -- GitLab From 22f66c09d8737d5987422a44069c798e5702ac5f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 11:52:19 +0200 Subject: [PATCH 0826/1311] adding easyconfigs: VTune-2017_update2.eb --- .../easyconfigs/v/VTune/VTune-2017_update2.eb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/v/VTune/VTune-2017_update2.eb diff --git a/easybuild/easyconfigs/v/VTune/VTune-2017_update2.eb b/easybuild/easyconfigs/v/VTune/VTune-2017_update2.eb new file mode 100644 index 0000000000..5db4d180ba --- /dev/null +++ b/easybuild/easyconfigs/v/VTune/VTune-2017_update2.eb @@ -0,0 +1,15 @@ +name = 'VTune' +version = '2017_update2' + +homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['vtune_amplifier_xe_%(version)s.tar.gz'] +checksums = ['1ef91898e107a1da015305def80091e4'] + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' -- GitLab From 21c7598a04c602939937779d872a9e59ca0f717c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 15:43:48 +0200 Subject: [PATCH 0827/1311] add patch to fix build of Mesa 17.0.2 with Intel compilers --- .../easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb | 3 +++ .../m/Mesa/Mesa-17.0.2_fix-strip-llvm-flags.patch | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/m/Mesa/Mesa-17.0.2_fix-strip-llvm-flags.patch diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb index 70b8bcc2b4..f2828371e3 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb @@ -26,6 +26,7 @@ source_urls = [ 'ftp://ftp.freedesktop.org/pub/mesa/%(version)s', 'ftp://ftp.freedesktop.org/pub/mesa/older-versions/%(version_major)s.x/%(version)s', ] +patches = ['Mesa-%(version)s_fix-strip-llvm-flags.patch'] builddependencies = [ ('flex', '2.6.3'), @@ -49,6 +50,8 @@ configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm -- configopts += " --disable-gbm --disable-driglx-direct --with-gallium-drivers='swrast,swr' --disable-egl" configopts += " --with-osmesa-bits=32 --enable-texture-float --enable-llvm-shared-libs " +buildopts = 'V=1' + sanity_check_paths = { 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2_fix-strip-llvm-flags.patch b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2_fix-strip-llvm-flags.patch new file mode 100644 index 0000000000..d0aae3dd9c --- /dev/null +++ b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2_fix-strip-llvm-flags.patch @@ -0,0 +1,14 @@ +strip out '-fp-model source' as a whole, rather than only stripping out '-fp-model' which leads to compilation errors: +"File not found: 'source'" + +author: Ward Poelmans (VUB) +--- mesa-17.0.2/configure.orig 2017-03-31 15:08:32.677119063 +0200 ++++ mesa-17.0.2/configure 2017-03-31 15:09:03.797577051 +0200 +@@ -22317,6 +22317,7 @@ + -e 's/\s\+-O\S*//g' \ + -e 's/\s\+-g\S*//g' \ + -e 's/-fno-rtti\>/-Fno-rtti/g' \ ++ -e 's/\s\+-fp-model \S*//g' \ + -e 's/\s\+-f\S*//g' \ + -e 's/-Fno-rtti\>/-fno-rtti/g' \ + -e 's/^ //' -- GitLab From d9dad61ddaf59e678a9abf97cc7fa9ee16318a9f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 17:28:15 +0200 Subject: [PATCH 0828/1311] adding easyconfigs: scp-0.10.2-intel-2016b-Python-2.7.12.eb --- .../scp-0.10.2-intel-2016b-Python-2.7.12.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/s/scp/scp-0.10.2-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/scp/scp-0.10.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/scp/scp-0.10.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1372c5db1e --- /dev/null +++ b/easybuild/easyconfigs/s/scp/scp-0.10.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'scp' +version = '0.10.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/jbardin/scp.py' +description = """The scp.py module uses a paramiko transport to send and recieve files via the scp1 protocol.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From f0df52802c6a87777ca2ca60a7ceff6f977cb419 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 17:28:41 +0200 Subject: [PATCH 0829/1311] adding easyconfigs: Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb --- ...Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/s/Seaborn/Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/Seaborn/Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/Seaborn/Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..c0dc9e45f8 --- /dev/null +++ b/easybuild/easyconfigs/s/Seaborn/Seaborn-0.7.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,31 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics (SIB) +# Biozentrum - University of Basel + +easyblock = 'PythonPackage' + +name = 'Seaborn' +version = '0.7.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://stanford.edu/~mwaskom/software/seaborn/' +description = """ Seaborn is a Python visualization library based on matplotlib. + It provides a high-level interface for drawing attractive statistical graphics. """ + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '1.5.3', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'bio' -- GitLab From 77ccc1df9abe43202a2a677829df4cda59bf6b04 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 17:34:12 +0200 Subject: [PATCH 0830/1311] {data}[intel/2017a] GDAL v2.1.3 + updated deps --- .../GDAL-2.1.3-intel-2017a-Python-2.7.13.eb | 48 +++++++++++++++++++ .../GDAL-2.1.3_fix-uchar-definition.patch | 9 ++++ .../GEOS-3.6.1-intel-2017a-Python-2.7.13.eb | 28 +++++++++++ .../l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb | 33 +++++++++++++ .../libjpeg-turbo-1.5.1-intel-2017a.eb | 30 ++++++++++++ .../l/libpng/libpng-1.6.29-GCCcore-6.3.0.eb | 29 +++++++++++ .../n/NASM/NASM-2.12.02-intel-2017a.eb | 31 ++++++++++++ .../p/PCRE/PCRE-8.40-intel-2017a.eb | 18 +++++++ .../SWIG-3.0.12-intel-2017a-Python-2.7.13.eb | 20 ++++++++ 9 files changed, 246 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.3_fix-uchar-definition.patch create mode 100644 easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.29-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/n/NASM/NASM-2.12.02-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..07385fe881 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,48 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.1.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] +patches = ['GDAL-%(version)s_fix-uchar-definition.patch'] + +dependencies = [ + ('Python', '2.7.13'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.17.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('JasPer', '2.0.12'), + ('LibTIFF', '4.0.7'), + ('zlib', '1.2.11'), + ('cURL', '7.53.1'), + ('PCRE', '8.40'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3_fix-uchar-definition.patch b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3_fix-uchar-definition.patch new file mode 100644 index 0000000000..c70a977531 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3_fix-uchar-definition.patch @@ -0,0 +1,9 @@ +--- gdal-2.1.3/frmts/jpeg2000/jpeg2000_vsil_io.h.orig 2017-03-31 17:06:52.996122910 +0200 ++++ gdal-2.1.3/frmts/jpeg2000/jpeg2000_vsil_io.h 2017-03-31 17:07:06.356370202 +0200 +@@ -34,4 +34,6 @@ + + jas_stream_t *JPEG2000_VSIL_fopen(const char *filename, const char *mode); + ++#define uchar unsigned char ++ + #endif diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..4483d7a5d0 --- /dev/null +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'GEOS' +version = '3.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://trac.osgeo.org/geos' +description = """GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS)""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://download.osgeo.org/geos/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [('Python', '2.7.13')] + +builddependencies = [('SWIG', '3.0.12', versionsuffix)] + +configopts = '--enable-python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['bin/geos-config', 'lib/libgeos.%s' % SHLIB_EXT, 'lib/libgeos.a', 'include/geos.h'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/geos'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb new file mode 100644 index 0000000000..9087c14aa4 --- /dev/null +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb @@ -0,0 +1,33 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos , Alan O'Cais (JSC) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## +easyblock = 'ConfigureMake' + +name = 'LibTIFF' +version = '4.0.7' + +homepage = 'http://www.remotesensing.org/libtiff/' +description = "tiff: Library and tools for reading and writing TIFF data files" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [ + 'http://download.osgeo.org/libtiff/', + 'ftp://ftp.remotesensing.org/pub/libtiff/', +] +sources = ['tiff-%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['bin/tiffinfo'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-intel-2017a.eb b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-intel-2017a.eb new file mode 100644 index 0000000000..921c5c073d --- /dev/null +++ b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-intel-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'libjpeg-turbo' +version = '1.5.1' + +homepage = 'http://sourceforge.net/projects/libjpeg-turbo/' +description = """libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to accelerate baseline JPEG +compression and decompression. libjpeg is a library that implements JPEG image encoding, decoding and transcoding. +""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('NASM', '2.12.02'), +] + +configopts = "--with-jpeg8" +runtest = "test" + +sanity_check_paths = { + 'files': ['bin/cjpeg', 'bin/djpeg', 'bin/jpegtran', 'bin/rdjpgcom', 'bin/tjbench', 'bin/wrjpgcom', + 'lib/libjpeg.a', 'lib/libjpeg.%s' % SHLIB_EXT, 'lib/libturbojpeg.a', 'lib/libturbojpeg.%s' % SHLIB_EXT], + 'dirs': ['include', 'share'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.29-GCCcore-6.3.0.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.29-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..85ea50b710 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.29-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.29' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.11')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/n/NASM/NASM-2.12.02-intel-2017a.eb b/easybuild/easyconfigs/n/NASM/NASM-2.12.02-intel-2017a.eb new file mode 100644 index 0000000000..a4d8935beb --- /dev/null +++ b/easybuild/easyconfigs/n/NASM/NASM-2.12.02-intel-2017a.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-90.html +## + +easyblock = 'ConfigureMake' + +name = 'NASM' +version = '2.12.02' + +homepage = 'http://www.nasm.us/' +description = """NASM: General-purpose x86 assembler""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://www.nasm.us/pub/nasm/releasebuilds/%(version)s'] + +sanity_check_paths = { + 'files': ['bin/nasm'], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2017a.eb b/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2017a.eb new file mode 100644 index 0000000000..b2df6c9ad9 --- /dev/null +++ b/easybuild/easyconfigs/p/PCRE/PCRE-8.40-intel-2017a.eb @@ -0,0 +1,18 @@ +easyblock = 'ConfigureMake' + +name = 'PCRE' +version = '8.40' + +homepage = 'http://www.pcre.org/' +description = """The PCRE library is a set of functions that implement regular expression pattern matching using + the same syntax and semantics as Perl 5.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic --disable-cpp --enable-utf --enable-unicode-properties" + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..b90543199e --- /dev/null +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,20 @@ +name = 'SWIG' +version = '3.0.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.swig.org/' +description = """SWIG is a software development tool that connects programs written in C and C++ with + a variety of high-level programming languages.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('PCRE', '8.40'), +] + +moduleclass = 'devel' -- GitLab From bbf0a5bf2bdef4672f51a6750df57ef02ed6bb41 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 17:51:28 +0200 Subject: [PATCH 0831/1311] adding easyconfigs: LIBSVM-3.22-intel-2016b.eb --- .../l/LIBSVM/LIBSVM-3.22-intel-2016b.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/l/LIBSVM/LIBSVM-3.22-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/LIBSVM/LIBSVM-3.22-intel-2016b.eb b/easybuild/easyconfigs/l/LIBSVM/LIBSVM-3.22-intel-2016b.eb new file mode 100644 index 0000000000..26b2999f95 --- /dev/null +++ b/easybuild/easyconfigs/l/LIBSVM/LIBSVM-3.22-intel-2016b.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'LIBSVM' +version = '3.22' + +homepage = 'http://www.csie.ntu.edu.tw/~cjlin/libsvm/' +description = """LIBSVM is an integrated software for support vector classification, (C-SVC, nu-SVC), regression + (epsilon-SVR, nu-SVR) and distribution estimation (one-class SVM). It supports multi-class classification.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [homepage] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Qt', '4.8.7')] + +buildopts = ' && cd svm-toy/qt && make MOC=$EBROOTQT/bin/moc ' +buildopts += 'CFLAGS="$CFLAGS -I$EBROOTQT/include -I$EBROOTQT/include/QtGui -lQtGui -lQtCore" && cd -' + +files_to_copy = [(['svm-*'], 'bin'), 'tools'] + +sanity_check_paths = { + 'files': ['bin/svm-%s' % x for x in ['predict', 'scale', 'train']] + ['bin/svm-toy/qt/svm-toy'], + 'dirs': ['bin/svm-toy', 'tools'], +} + +modextrapaths = { + 'PATH': ['bin', 'bin/svm-toy/qt'], +} + +moduleclass = 'lib' -- GitLab From e9b30261c84e53d6c1d33de470ad822df6a81c07 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 18:15:56 +0200 Subject: [PATCH 0832/1311] consistently add zlib as dependency in SCOTCH easyconfigs --- .../s/SCOTCH/SCOTCH-5.1.12b_esmumps-goolf-1.4.10.eb | 4 ++++ .../s/SCOTCH/SCOTCH-5.1.12b_esmumps-ictce-5.3.0.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-goolf-1.4.10.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.3.0.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.5.0.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-6.2.5.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-intel-2014b.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.3-intel-2015a.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015.05.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015b.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016a.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-gimkl-2.11.5.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015a.eb | 4 ++++ .../easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b-64bitint.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b.eb | 4 ++++ easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016a.eb | 4 ++++ 17 files changed, 68 insertions(+) diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goolf-1.4.10.eb index f7e1fa75af..fb8bdd5fe8 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goolf-1.4.10.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/28978/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.7'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-ictce-5.3.0.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-ictce-5.3.0.eb index 63e54d60a9..a840cb128c 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-ictce-5.3.0.eb @@ -12,4 +12,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/28978/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.7'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-goolf-1.4.10.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-goolf-1.4.10.eb index adc2bceafc..36e2a02cae 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-goolf-1.4.10.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/31832/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.7'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.3.0.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.3.0.eb index 8e693c1ca4..b9f3cfb699 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.3.0.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/31832/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.7'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.5.0.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.5.0.eb index b0d4836a13..60cfca1ccb 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-5.5.0.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/31832/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-6.2.5.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-6.2.5.eb index b9f29b45c5..1a0f934621 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-ictce-6.2.5.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/31832/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-intel-2014b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-intel-2014b.eb index 89020e5a6b..4e6810fc24 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-intel-2014b.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.0_esmumps-intel-2014b.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['https://gforge.inria.fr/frs/download.php/31832/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.3-intel-2015a.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.3-intel-2015a.eb index f4c56ce013..68499c20c9 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.3-intel-2015a.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.3-intel-2015a.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34099/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015.05.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015.05.eb index f5bdd9828b..8e49ec9738 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015.05.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015.05.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015b.eb index 3f65d37408..6646f63b1d 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015b.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2015b.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016a.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016a.eb index 431d04e9df..6627e15ad7 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016a.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb index 9fb7233435..e19c44686d 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-foss-2016b.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-gimkl-2.11.5.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-gimkl-2.11.5.eb index b61aa3728e..4bbf975f93 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-gimkl-2.11.5.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015a.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015a.eb index a98a4841f7..173ec5abc6 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015a.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015a.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b-64bitint.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b-64bitint.eb index ba1a0a43d1..a9f67fc882 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b-64bitint.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b-64bitint.eb @@ -12,4 +12,8 @@ toolchainopts = {'pic': True, 'i8': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b.eb index 34df491afd..5f4f35c9c0 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2015b.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016a.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016a.eb index a90bb75fa5..30e51cb632 100644 --- a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016a.eb +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2016a.eb @@ -11,4 +11,8 @@ toolchainopts = {'pic': True} source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] sources = ['%(namelower)s_%(version)s.tar.gz'] +dependencies = [ + ('zlib', '1.2.8'), +] + moduleclass = 'math' -- GitLab From e11ecadb7b25a413b83103555ebe21477c841adb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 18:40:48 +0200 Subject: [PATCH 0833/1311] adding easyconfigs: cairo-1.14.8-intel-2017a.eb, pixman-0.34.0-GCCcore-6.3.0.eb, GLib-2.52.0-intel-2017a.eb --- .../c/cairo/cairo-1.14.8-intel-2017a.eb | 43 +++++++++++++++++++ .../g/GLib/GLib-2.52.0-intel-2017a.eb | 34 +++++++++++++++ .../p/pixman/pixman-0.34.0-GCCcore-6.3.0.eb | 23 ++++++++++ 3 files changed, 100 insertions(+) create mode 100644 easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/pixman/pixman-0.34.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb new file mode 100644 index 0000000000..6f9eb993e3 --- /dev/null +++ b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb @@ -0,0 +1,43 @@ +easyblock = 'ConfigureMake' + +name = 'cairo' +version = '1.14.8' + +homepage = 'http://cairographics.org' +description = """Cairo is a 2D graphics library with support for multiple output devices. + Currently supported output targets include the X Window System (via both Xlib and XCB), Quartz, Win32, image buffers, + PostScript, PDF, and SVG file output. Experimental backends include OpenGL, BeOS, OS/2, and DirectFB""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://cairographics.org/releases/'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('libpng', '1.6.29'), + ('freetype', '2.7.1'), + ('pixman', '0.34.0'), + ('expat', '2.2.0'), + ('GLib', '2.52.0'), + ('X11', '20170129'), +] + +# disable symbol lookup, which requires -lbfd, to avoid link issues with (non-PIC) libiberty.a provided by GCC +configopts = "--enable-symbol-lookup=no --enable-gobject=yes --enable-svg=yes --enable-tee=yes --enable-xlib-xcb " + +# workaround for "hidden symbol .* in .* is referenced by DSO" and "ld: final link failed: Bad value" +buildopts = 'LD="$CC" LDFLAGS="$LDFLAGS -shared-intel"' + +sanity_check_paths = { + 'files': ['bin/cairo-trace', 'lib/cairo/libcairo-trace.so', 'lib/cairo/libcairo-trace.a', + 'lib/libcairo.a', 'lib/libcairo-gobject.a', 'lib/libcairo-script-interpreter.a', + 'lib/libcairo-gobject.so', 'lib/libcairo-script-interpreter.so', 'lib/libcairo.so'] + + ['include/cairo/cairo%s.h' % x for x in ['', '-deprecated', '-features', '-ft', '-gobject', '-pdf', '-ps', + '-script', '-script-interpreter', '-svg', '-version', '-xcb', + '-xlib', '-xlib-xrender']], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb new file mode 100644 index 0000000000..dcffcd7dec --- /dev/null +++ b/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'GLib' +version = '2.52.0' + +homepage = 'http://www.gtk.org/' +description = """GLib is one of the base libraries of the GTK+ project""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('libffi', '3.2.1'), + ('gettext', '0.19.8.1'), + ('libxml2', '2.9.4'), + ('PCRE', '8.40'), +] + +builddependencies = [('Python', '2.7.13')] + +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --disable-systemtap " +configopts += "--enable-static --enable-shared" + +postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] + +sanity_check_paths = { + 'files': ['lib/libglib-%(version_major)s.0.a', 'lib/libglib-%%(version_major)s.0.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/pixman/pixman-0.34.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/p/pixman/pixman-0.34.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..185ce92b1d --- /dev/null +++ b/easybuild/easyconfigs/p/pixman/pixman-0.34.0-GCCcore-6.3.0.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'pixman' +version = '0.34.0' + +homepage = 'http://www.pixman.org/' +description = """Pixman is a low-level software library for pixel manipulation, providing features such as image +compositing and trapezoid rasterization. Important users of pixman are the cairo graphics library and the X server.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://cairographics.org/releases/'] +sources = [SOURCE_TAR_GZ] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['lib/libpixman-1.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'vis' -- GitLab From 8cea6ea8a6ecbc4dd325a0acdce97bd43aba31af Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 18:41:22 +0200 Subject: [PATCH 0834/1311] adding easyconfigs: ED2-20170201-intel-2017a-serial.eb --- .../e/ED2/ED2-20170201-intel-2017a-serial.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a-serial.eb diff --git a/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a-serial.eb b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a-serial.eb new file mode 100644 index 0000000000..0ba1a5a27b --- /dev/null +++ b/easybuild/easyconfigs/e/ED2/ED2-20170201-intel-2017a-serial.eb @@ -0,0 +1,39 @@ +easyblock = 'MakeCp' + +name = 'ED2' +version = '20170201' +commit = '0146fa4' +versionsuffix = '-serial' + +homepage = 'https://github.com/EDmodel/ED2' +description = """The Ecosystem Demography Biosphere Model (ED2) is an integrated terrestrial biosphere model + incorporating hydrology, land-surface biophysics, vegetation dynamics, and soil carbon and nitrogen biogeochemistry""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/EDmodel/ED2/archive/'] +sources = ['%s.tar.gz' % commit] + +patches = [ + 'ED2_install-without-make.patch', + 'ED2_fix-type.patch', +] + +dependencies = [('HDF5', '1.10.0-patch1')] + +start_dir = 'ED/build' + +# rely on install.sh to prepare everything, but run 'make' command ourselves to take control over compiler options +prebuildopts = "./install.sh --kind E --platform intel --gitoff && cd bin-opt-E && " + +buildopts = "OPT=opt KIND_COMP=E GIT_TAG= HDF5_PATH=$EBROOTHDF5 PAR_LIBS='' PAR_DEFS='' " +buildopts += 'F_COMP="$FC" C_COMP="$CC" LOADER="$FC" F_OPTS="$FFLAGS" C_OPTS="$CFLAGS" F_LOWO_OPTS="$FFLAGS" && cd -' + +files_to_copy = [(['ED/build/ed_2.1-opt'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/ed_2.1-opt'], + 'dirs': [], +} + +moduleclass = 'geo' -- GitLab From 7040ded550b1739b2a37c1ce8193dcb5c9509991 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 19:03:15 +0200 Subject: [PATCH 0835/1311] adding easyconfigs: R-3.3.3-intel-2017a-X11-20170129.eb, libGLU-9.0.0-intel-2017a.eb, Tk-8.6.6-intel-2017a.eb, PROJ-4.9.3-intel-2017a.eb --- .../l/libGLU/libGLU-9.0.0-intel-2017a.eb | 24 + .../p/PROJ/PROJ-4.9.3-intel-2017a.eb | 30 ++ .../r/R/R-3.3.3-intel-2017a-X11-20170129.eb | 509 ++++++++++++++++++ .../easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb | 27 + 4 files changed, 590 insertions(+) create mode 100644 easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2017a.eb create mode 100644 easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb create mode 100644 easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb diff --git a/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-intel-2017a.eb b/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-intel-2017a.eb new file mode 100644 index 0000000000..7dff238507 --- /dev/null +++ b/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libGLU' +version = '9.0.0' + +homepage = 'ftp://ftp.freedesktop.org/pub/mesa/glu/' +description = """The OpenGL Utility Library (GLU) is a computer graphics library for OpenGL. """ + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['ftp://ftp.freedesktop.org/pub/mesa/glu/'] +sources = ['glu-%(version)s.tar.bz2'] + +dependencies = [ + ('Mesa', '17.0.2'), +] + +sanity_check_paths = { + 'files': ['lib/libGLU.so.1'], + 'dirs': [], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2017a.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2017a.eb new file mode 100644 index 0000000000..07a9a99e42 --- /dev/null +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.3-intel-2017a.eb @@ -0,0 +1,30 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2014-2015 The Cyprus Institute +# Authors:: Thekla Loizou +# License:: MIT/GPL +# +## +easyblock = 'ConfigureMake' + +name = 'PROJ' +version = '4.9.3' + +homepage = 'http://trac.osgeo.org/proj/' +description = """Program proj is a standard Unix filter function which converts +geographic longitude and latitude coordinates into cartesian coordinates""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['http://download.osgeo.org/proj/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', + 'bin/nad2bin', 'bin/proj'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb new file mode 100644 index 0000000000..e0614dfdd9 --- /dev/null +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb @@ -0,0 +1,509 @@ +name = 'R' +version = '3.3.3' +x11ver = '20170129' +versionsuffix = '-X11-%s' % x11ver + +homepage = 'http://www.r-project.org/' +description = """R is a free software environment for statistical computing and graphics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] + +preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +#Actually use Tcl/Tk +configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' +# Enable graphics capabilities for plotting. +configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" +# some recommended packages may fail in a parallel build (e.g. Matrix), and we're installing them anyway below +configopts += " --with-recommended-packages=no" + +dependencies = [ + ('X11', x11ver), + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('cairo', '1.14.8'), + ('libreadline', '7.0'), + ('ncurses', '6.0'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), + ('zlib', '1.2.11'), + ('SQLite', '3.17.0'), + ('PCRE', '8.40'), + ('libpng', '1.6.29'), # for plotting in R + ('libjpeg-turbo', '1.5.1'), # for plottting in R + ('LibTIFF', '4.0.7'), + ('Java', '1.8.0_121', '', True), # Java bindings are built if Java is found, might as well provide it + ('Tcl', '8.6.6'), # for tcltk + ('Tk', '8.6.6'), # for tcltk + ('cURL', '7.53.1'), # for RCurl + ('libxml2', '2.9.4'), # for XML + ('GDAL', '2.1.3', '-Python-2.7.13'), # for rgdal + ('PROJ', '4.9.3'), # for rgdal + ('GMP', '6.1.2'), # for igraph + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +name_tmpl = '%(name)s_%(version)s.tar.gz' +ext_options = { + 'source_urls': [ + 'http://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'http://cran.r-project.org/src/contrib/', # current version of packages + 'http://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': name_tmpl, +} + +# !! order of packages is important !! +# packages updated on March 7th 2017 +exts_list = [ + # default libraries, only here to sanity check their presence + 'base', + 'datasets', + 'graphics', + 'grDevices', + 'grid', + 'methods', + 'splines', + 'stats', + 'stats4', + 'tools', + 'utils', + # non-standard libraries, should be specified with fixed versions! + ('Rmpi', '0.6-6', ext_options), + ('abind', '1.4-5', ext_options), + ('magic', '1.5-6', ext_options), + ('geometry', '0.3-6', ext_options), + ('bit', '1.1-12', ext_options), + ('filehash', '2.3', ext_options), + ('ff', '2.2-13', ext_options), + ('bnlearn', '4.1', ext_options), + ('bootstrap', '2017.2', ext_options), + ('combinat', '0.0-8', ext_options), + ('deal', '1.2-37', ext_options), + ('fdrtool', '1.2.15', ext_options), + ('formatR', '1.4', ext_options), + ('gtools', '3.5.0', ext_options), + ('gdata', '2.17.0', ext_options), + ('GSA', '1.03', ext_options), + ('highr', '0.6', ext_options), + ('infotheo', '1.2.0', ext_options), + ('lars', '1.2', ext_options), + ('lazy', '1.2-15', ext_options), + ('kernlab', '0.9-25', ext_options), + ('mime', '0.5', ext_options), + ('markdown', '0.7.7', ext_options), + ('mlbench', '2.1-1', ext_options), + ('NLP', '0.1-10', ext_options), + ('mclust', '5.2.2', ext_options), + ('RANN', '2.5', ext_options), + ('rmeta', '2.16', ext_options), + ('segmented', '0.5-1.4', ext_options), + ('som', '0.3-5.1', ext_options), + ('SuppDists', '1.1-9.4', ext_options), + ('stabledist', '0.7-1', ext_options), + ('survivalROC', '1.0.3', ext_options), + ('pspline', '1.0-17', ext_options), + ('timeDate', '3012.100', ext_options), + ('longmemo', '1.0-0', ext_options), + ('ADGofTest', '0.3', ext_options), + ('ade4', '1.7-5', ext_options), + ('AlgDesign', '1.1-7.3', ext_options), + ('base64enc', '0.1-3', ext_options), + ('BH', '1.62.0-1', ext_options), + ('brew', '1.0-6', ext_options), + ('Brobdingnag', '1.2-4', ext_options), + ('corpcor', '1.6.8', ext_options), + ('longitudinal', '1.1.12', ext_options), + ('backports', '1.0.5', ext_options), + ('checkmate', '1.8.2', ext_options), + ('Rcpp', '0.12.9', ext_options), + ('cubature', '1.3-6', ext_options), + ('DEoptimR', '1.0-8', ext_options), + ('digest', '0.6.12', ext_options), + ('fastmatch', '1.1-0', ext_options), + ('ffbase', '0.12.3', ext_options), + ('iterators', '1.0.8', ext_options), + ('maps', '3.1.1', ext_options), + ('nnls', '1.4', ext_options), + ('sendmailR', '1.2-1', ext_options), + ('spam', '1.4-0', ext_options), + ('subplex', '1.2-2', ext_options), + ('stringi', '1.1.2', ext_options), + ('magrittr', '1.5', ext_options), + ('stringr', '1.2.0', ext_options), + ('evaluate', '0.10', ext_options), + ('logspline', '2.1.9', ext_options), + ('ncbit', '2013.03.29', ext_options), + ('permute', '0.9-4', ext_options), + ('plotrix', '3.6-4', ext_options), + ('randomForest', '4.6-12', ext_options), + ('scatterplot3d', '0.3-38', ext_options), + ('SparseM', '1.76', ext_options), + ('tripack', '1.3-8', ext_options), + ('irace', '2.1', ext_options), + ('rJava', '0.9-8', ext_options), + ('lattice', '0.20-34', ext_options), + ('RColorBrewer', '1.1-2', ext_options), + ('latticeExtra', '0.6-28', ext_options), + ('Matrix', '1.2-8', ext_options), + ('png', '0.1-7', ext_options), + ('RcppArmadillo', '0.7.700.0.0', ext_options), + ('plyr', '1.8.4', ext_options), + ('pROC', '1.9.1', ext_options), + ('quadprog', '1.5-5', ext_options), + ('BB', '2014.10-1', ext_options), + ('BBmisc', '1.11', ext_options), + ('fail', '1.3', ext_options), + ('rlecuyer', '0.3-4', ext_options), + ('snow', '0.4-2', ext_options), + ('MASS', '7.3-45', ext_options), + ('tree', '1.0-37', ext_options), + ('pls', '2.6-0', ext_options), + ('class', '7.3-14', ext_options), + ('e1071', '1.6-8', ext_options), + ('nnet', '7.3-12', ext_options), + ('nlme', '3.1-131', ext_options), + ('minqa', '1.2.4', ext_options), + ('RcppEigen', '0.3.2.9.0', ext_options), + ('MatrixModels', '0.4-1', ext_options), + ('quantreg', '5.29', ext_options), + ('mgcv', '1.8-17', ext_options), + ('colorspace', '1.3-2', ext_options), + ('robustbase', '0.92-7', ext_options), + ('sp', '1.2-4', ext_options), + ('zoo', '1.7-14', ext_options), + ('lmtest', '0.9-35', ext_options), + ('vcd', '1.4-3', ext_options), + ('snowfall', '1.84-6.1', ext_options), + ('rpart', '4.1-10', ext_options), + ('survival', '2.40-1', ext_options), + ('mice', '2.30', ext_options), + ('urca', '1.3-0', ext_options), + ('fracdiff', '1.4-2', ext_options), + ('logistf', '1.22', ext_options), + ('akima', '0.6-2', ext_options), + ('bitops', '1.0-6', ext_options), + ('boot', '1.3-18', ext_options), + ('mixtools', '1.1.0', ext_options), + ('cluster', '2.0.5', ext_options), + ('gclus', '1.3.1', ext_options), + ('coda', '0.19-1', ext_options), + ('codetools', '0.2-15', ext_options), + ('foreach', '1.4.3', ext_options), + ('doMC', '1.3.4', ext_options), + ('DBI', '0.6', ext_options), + ('foreign', '0.8-67', ext_options), + ('gam', '1.14', ext_options), + ('gamlss.data', '5.0-0', ext_options), + ('gamlss.dist', '5.0-0', ext_options), + ('hwriter', '1.3.2', ext_options), + ('KernSmooth', '2.23-15', ext_options), + ('xts', '0.9-7', ext_options), + ('TTR', '0.23-1', ext_options), + ('quantmod', '0.4-7', ext_options), + ('mnormt', '1.5-5', ext_options), + ('mvtnorm', '1.0-6', ext_options), + ('pcaPP', '1.9-61', ext_options), + ('numDeriv', '2016.8-1', ext_options), + ('lava', '1.4.7', ext_options), + ('prodlim', '1.6.1', ext_options), + ('pscl', '1.4.9', ext_options), + ('memoise', '1.0.0', ext_options), + ('plogr', '0.1-1', ext_options), + ('RSQLite', '1.1-2', ext_options), + ('BatchJobs', '1.6', ext_options), + ('sandwich', '2.3-4', ext_options), + ('sfsmisc', '1.1-0', ext_options), + ('spatial', '7.3-11', ext_options), + ('VGAM', '1.0-3', ext_options), + ('waveslim', '1.7.5', ext_options), + ('xtable', '1.8-2', ext_options), + ('profileModel', '0.5-9', ext_options), + ('brglm', '0.5-9', ext_options), + ('deSolve', '1.14', ext_options), + ('tseriesChaos', '0.1-13', ext_options), + ('tseries', '0.10-38', ext_options), + ('fastICA', '1.2-0', ext_options), + ('R.methodsS3', '1.7.1', ext_options), + ('R.oo', '1.21.0', ext_options), + ('cgdsr', '1.2.5', ext_options), + ('R.utils', '2.5.0', ext_options), + ('R.matlab', '3.6.1', ext_options), + ('gbm', '2.1.1', ext_options), + ('dichromat', '2.0-0', ext_options), + ('Formula', '1.2-1', ext_options), + ('acepack', '1.4.1', ext_options), + ('reshape2', '1.4.2', ext_options), + ('gtable', '0.2.0', ext_options), + ('munsell', '0.4.3', ext_options), + ('labeling', '0.3', ext_options), + ('scales', '0.4.1', ext_options), + ('proto', '1.0.0', ext_options), + ('lazyeval', '0.2.0', ext_options), + ('assertthat', '0.1', ext_options), + ('tibble', '1.2', ext_options), + ('ggplot2', '2.2.1', ext_options), + ('gridExtra', '2.2.1', ext_options), + ('chron', '2.3-50', ext_options), + ('data.table', '1.10.4', ext_options), + ('viridis', '0.3.4', ext_options), + ('yaml', '2.1.14', ext_options), + ('jsonlite', '1.3', ext_options), + ('htmltools', '0.3.5', ext_options), + ('htmlwidgets', '0.8', ext_options), + ('knitr', '1.15.1', ext_options), + ('htmlTable', '1.9', ext_options), + ('Hmisc', '4.0-2', ext_options), + ('fastcluster', '1.1.22', ext_options), + ('registry', '0.3', ext_options), + ('pkgmaker', '0.22', ext_options), + ('rngtools', '1.2.4', ext_options), + ('doParallel', '1.0.10', ext_options), + ('gridBase', '0.4-7', ext_options), + ('NMF', '0.20.6', ext_options), + ('irlba', '2.1.2', ext_options), + ('igraph', '1.0.1', ext_options), + ('GeneNet', '1.2.13', ext_options), + ('ape', '4.1', ext_options), + ('RJSONIO', '1.3-0', ext_options), + ('caTools', '1.17.1', ext_options), + ('gplots', '3.0.1', ext_options), + ('ROCR', '1.0-7', ext_options), + ('httpuv', '1.3.3', ext_options), + ('R6', '2.2.0', ext_options), + ('rjson', '0.2.15', ext_options), + ('sourcetools', '0.1.5', ext_options), + ('shiny', '1.0.0', ext_options), + ('seqinr', '3.3-3', ext_options), + ('LearnBayes', '2.15', ext_options), + ('deldir', '0.1-12', ext_options), + ('gmodels', '2.16.2', ext_options), + ('expm', '0.999-1', ext_options), + ('spdep', '0.6-11', ext_options), + ('dplyr', '0.5.0', ext_options), + ('vegan', '2.4-2', ext_options), + ('adegenet', '2.0.1', ext_options), + ('prettyunits', '1.0.2', ext_options), + ('progress', '1.1.2', ext_options), + ('rncl', '0.8.2', ext_options), + ('XML', '3.98-1.5', ext_options), + ('crayon', '1.3.2', ext_options), + ('praise', '1.0.0', ext_options), + ('testthat', '1.0.2', ext_options), + ('rprojroot', '1.2', ext_options), + ('rmarkdown', '1.3', ext_options), + ('curl', '2.3', ext_options), + ('openssl', '0.9.6', ext_options), + ('httr', '1.2.1', ext_options), + ('reshape', '0.8.6', ext_options), + ('xml2', '1.1.1', ext_options), + ('bold', '0.4.0', ext_options), + ('triebeard', '0.3.0', ext_options), + ('urltools', '1.6.0', ext_options), + ('httpcode', '0.2.0', ext_options), + ('crul', '0.3.0', ext_options), + ('rredlist', '0.3.0', ext_options), + ('rentrez', '1.0.4', ext_options), + ('rotl', '3.0.3', ext_options), + ('solrium', '0.4.0', ext_options), + ('ritis', '0.5.4', ext_options), + ('worrms', '0.1.0', ext_options), + ('natserv', '0.1.4', ext_options), + ('taxize', '0.8.4', ext_options), + ('tidyr', '0.6.1', ext_options), + ('uuid', '0.1-2', ext_options), + ('RNeXML', '2.0.7', ext_options), + ('phylobase', '0.8.2', ext_options), + ('adephylo', '1.1-10', ext_options), + ('animation', '2.4', ext_options), + ('bigmemory.sri', '0.1.3', ext_options), + ('bigmemory', '4.5.19', ext_options), + ('calibrate', '1.7.2', ext_options), + ('clusterGeneration', '1.3.4', ext_options), + ('raster', '2.5-8', ext_options), + ('dismo', '1.1-4', ext_options), + ('extrafontdb', '1.0', ext_options), + ('Rttf2pt1', '1.3.4', ext_options), + ('extrafont', '0.17', ext_options), + ('fields', '8.10', ext_options), + ('shapefiles', '0.7', ext_options), + ('fossil', '0.3.7', ext_options), + ('geiger', '2.0.6', ext_options), + ('glmnet', '2.0-5', ext_options), + ('rgl', '0.98.1', ext_options), + ('labdsv', '1.8-0', ext_options), + ('stabs', '0.6-2', ext_options), + ('modeltools', '0.2-21', ext_options), + ('strucchange', '1.5-1', ext_options), + ('TH.data', '1.0-8', ext_options), + ('multcomp', '1.4-6', ext_options), + ('coin', '1.1-3', ext_options), + ('party', '1.2-2', ext_options), + ('mboost', '2.7-0', ext_options), + ('msm', '1.6.4', ext_options), + ('nor1mix', '1.2-2', ext_options), + ('np', '0.60-2', ext_options), + ('polynom', '1.3-9', ext_options), + ('polspline', '1.1.12', ext_options), + ('rms', '5.1-0', ext_options), + ('RWekajars', '3.9.1-1', ext_options), + ('RWeka', '0.4-31', ext_options), + ('slam', '0.1-40', ext_options), + ('tm', '0.7-1', ext_options), + ('TraMineR', '1.8-13', ext_options), + ('chemometrics', '1.4.1', ext_options), + ('FNN', '1.1', ext_options), + ('ipred', '0.9-6', ext_options), + ('statmod', '1.4.29', ext_options), + ('miscTools', '0.6-22', ext_options), + ('maxLik', '1.3-4', ext_options), + ('mlogit', '0.2-4', ext_options), + ('getopt', '1.20.0', ext_options), + ('gsalib', '2.1', ext_options), + ('optparse', '1.3.2', ext_options), + ('klaR', '0.6-12', ext_options), + ('neuRosim', '0.2-12', ext_options), + ('locfit', '1.5-9.1', ext_options), + ('GGally', '1.3.0', ext_options), + ('beanplot', '1.2', ext_options), + ('clValid', '0.6-6', ext_options), + ('matrixStats', '0.51.0', ext_options), + ('DiscriMiner', '0.1-29', ext_options), + ('ellipse', '0.3-8', ext_options), + ('leaps', '3.0', ext_options), + ('nloptr', '1.0.4', ext_options), + ('lme4', '1.1-12', ext_options), + ('pbkrtest', '0.4-6', ext_options), + ('car', '2.1-4', ext_options), + ('flashClust', '1.01-2', ext_options), + ('FactoMineR', '1.35', ext_options), + ('flexclust', '1.3-4', ext_options), + ('flexmix', '2.3-13', ext_options), + ('prabclus', '2.2-6', ext_options), + ('diptest', '0.75-7', ext_options), + ('trimcluster', '0.1-2', ext_options), + ('fpc', '2.1-10', ext_options), + ('BiasedUrn', '1.07', ext_options), + ('TeachingDemos', '2.10', ext_options), + ('kohonen', '2.0.19', ext_options), + ('base64', '2.0', ext_options), + ('doRNG', '1.6', ext_options), + ('nleqslv', '3.2', ext_options), + ('RGCCA', '2.1', ext_options), + ('pheatmap', '1.0.8', ext_options), + ('openxlsx', '4.0.0', ext_options), + ('pvclust', '2.0-0', ext_options), + ('RCircos', '1.2.0', ext_options), + ('lambda.r', '1.1.9', ext_options), + ('futile.options', '1.0.0', ext_options), + ('futile.logger', '1.4.3', ext_options), + ('VennDiagram', '1.6.17', ext_options), + ('xlsxjars', '0.6.1', ext_options), + ('xlsx', '0.5.7', ext_options), + ('forecast', '8.0', ext_options), + ('fma', '2.3', ext_options), + ('expsmooth', '2.3', ext_options), + ('fpp', '0.5', ext_options), + ('maptools', '0.9-1', ext_options), + ('tensor', '1.5', ext_options), + ('polyclip', '1.5-6', ext_options), + ('goftest', '1.0-4', ext_options), + ('spatstat', '1.49-0', ext_options), + ('rgdal', '1.2-5', ext_options), + ('gdalUtils', '2.0.1.7', ext_options), + ('pracma', '1.9.9', ext_options), + ('RCurl', '1.95-4.8', ext_options), + ('bio3d', '2.3-1', ext_options), + ('AUC', '0.3.0', ext_options), + ('interpretR', '0.2.4', ext_options), + ('cvAUC', '1.1.0', ext_options), + ('SuperLearner', '2.0-21', ext_options), + ('lpSolve', '5.6.13', ext_options), + ('mediation', '4.4.5', ext_options), + ('ModelMetrics', '1.1.0', ext_options), + ('caret', '6.0-73', ext_options), + ('adabag', '4.1', ext_options), + ('parallelMap', '1.3', ext_options), + ('ParamHelpers', '1.10', ext_options), + ('ggvis', '0.4.3', ext_options), + ('mlr', '2.10', ext_options), + ('unbalanced', '2.0', ext_options), + ('RSNNS', '0.4-9', ext_options), + ('abc.data', '1.0', ext_options), + ('abc', '2.1', ext_options), + ('lhs', '0.14', ext_options), + ('tensorA', '0.36', ext_options), + ('EasyABC', '1.5', ext_options), + ('shape', '1.4.2', ext_options), + ('whisker', '0.3-2', ext_options), + ('rstudioapi', '0.6', ext_options), + ('commonmark', '1.2', ext_options), + ('desc', '1.1.0', ext_options), + ('roxygen2', '6.0.1', ext_options), + ('git2r', '0.18.0', ext_options), + ('rversions', '1.0.3', ext_options), + ('withr', '1.0.2', ext_options), + ('devtools', '1.12.0', ext_options), + ('Rook', '1.1-1', ext_options), + ('Cairo', '1.5-9', dict(ext_options.items() + [('patches', ['Cairo-1.5-9.patch'])])), + ('RMTstat', '0.3', ext_options), + ('Lmoments', '1.2-3', ext_options), + ('distillery', '1.0-2', ext_options), + ('extRemes', '2.0-8', ext_options), + ('pixmap', '0.4-11', ext_options), + ('tkrplot', '0.0-23', ext_options), + ('misc3d', '0.8-4', ext_options), + ('multicool', '0.1-10', ext_options), + ('ks', '1.10.5', ext_options), + ('logcondens', '2.1.5', ext_options), + ('Iso', '0.0-17', ext_options), + ('penalized', '0.9-50', ext_options), + ('clusterRepro', '0.5-1.1', ext_options), + ('randomForestSRC', '2.4.2', ext_options), + ('sm', '2.2-5.4', ext_options), + ('psych', '1.6.12', ext_options), + ('pbivnorm', '0.6.0', ext_options), + ('lavaan', '0.5-23.1097', ext_options), + ('matrixcalc', '1.0-3', ext_options), + ('arm', '1.9-3', ext_options), + ('mi', '1.0', ext_options), + ('visNetwork', '1.0.3', ext_options), + ('rgexf', '0.15.3', ext_options), + ('influenceR', '0.1.0', ext_options), + ('DiagrammeR', '0.9.0', ext_options), + ('sem', '3.1-8', ext_options), + ('jpeg', '0.1-8', ext_options), + ('network', '1.13.0', ext_options), + ('statnet.common', '3.3.0', ext_options), + ('sna', '2.4', ext_options), + ('glasso', '1.8', ext_options), + ('huge', '1.2.7', ext_options), + ('d3Network', '0.5.2.1', ext_options), + ('ggm', '2.3', ext_options), + ('qgraph', '1.4.2', ext_options), + ('diveRsity', '1.9.89', ext_options), + ('doSNOW', '1.0.14', ext_options), + ('phangorn', '2.1.1', ext_options), + ('geepack', '1.2-1', ext_options), + ('lubridate', '1.6.0', ext_options), + ('biom', '0.3.12', ext_options), + ('pim', '2.0.0.2', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), + ('bmp', '0.2', ext_options), + ('readbitmap', '0.1-4', ext_options), + ('purrr', '0.2.2', ext_options), + ('imager', '0.31', ext_options), +] + +moduleclass = 'lang' + diff --git a/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb b/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb new file mode 100644 index 0000000000..325e35acc9 --- /dev/null +++ b/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'Tk' +version = '8.6.6' + +homepage = 'http://www.tcl.tk/' +description = """Tk is an open source, cross-platform widget toolchain that provides a library of basic elements for + building a graphical user interface (GUI) in many different programming languages.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +patches = ['Tk-8.6.4_different-prefix-with-tcl.patch'] + +dependencies = [ + ('X11', '20170129'), + ('Tcl', version), + ('zlib', '1.2.11'), +] + +configopts = '--enable-threads --with-tcl=$EBROOTTCL/lib CFLAGS="-I$EBROOTTCL/include"' + +start_dir = 'unix' + +moduleclass = 'vis' -- GitLab From 2d73e37dd1ce05ab3f76e27bbe6c7972f3ff8f4a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 19:03:49 +0200 Subject: [PATCH 0836/1311] add util-linux as dependency to GLib --- .../g/GLib/GLib-2.52.0-intel-2017a.eb | 1 + .../util-linux-2.29.2-intel-2017a.eb | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/u/util-linux/util-linux-2.29.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb index dcffcd7dec..6b20efcba1 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.52.0-intel-2017a.eb @@ -17,6 +17,7 @@ dependencies = [ ('gettext', '0.19.8.1'), ('libxml2', '2.9.4'), ('PCRE', '8.40'), + ('util-linux', '2.29.2'), ] builddependencies = [('Python', '2.7.13')] diff --git a/easybuild/easyconfigs/u/util-linux/util-linux-2.29.2-intel-2017a.eb b/easybuild/easyconfigs/u/util-linux/util-linux-2.29.2-intel-2017a.eb new file mode 100644 index 0000000000..3495ebee0c --- /dev/null +++ b/easybuild/easyconfigs/u/util-linux/util-linux-2.29.2-intel-2017a.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'util-linux' +version = '2.29.2' + +homepage = 'http://www.kernel.org/pub/linux/utils/util-linux' +description = """Set of Linux utilities""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['%s/v%%(version_major_minor)s' % homepage] +sources = [SOURCELOWER_TAR_GZ] + +# disable account related utilities (they need OS dependant pam-devel files) +# disable wall and friends (requires group changing permissions for install user) +# install systemd service files in install dir +# install bash completion files in install dir +configopts = "--disable-chfn-chsh --disable-login --disable-su " +configopts += "--disable-wall --disable-use-tty-group " +configopts += "--disable-makeinstall-chown --disable-makeinstall-setuid " +configopts += "--with-systemdsystemunitdir='${prefix}/systemd' " +configopts += "--with-bashcompletiondir='${prefix}/share/bash-completion/completions' " +# disable building Python bindings (since we don't include Python as a dep) +configopts += "--without-python " + +dependencies = [('ncurses', '6.0')] + +sanity_check_paths = { + 'files': ['lib/lib%s.a' % x for x in ['blkid', 'mount', 'uuid']], + 'dirs': ['include', 'bin', 'share', 'sbin'], +} + +moduleclass = 'tools' -- GitLab From 98be1ce1add0f4ccea0920abe523f5a7d3182fa8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 20:29:25 +0200 Subject: [PATCH 0837/1311] adding easyconfigs: X11-20170314-GCCcore-6.3.0.eb, fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb, freetype-2.7.2-GCCcore-6.3.0.eb --- ...fig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb | 27 ++++ .../freetype/freetype-2.7.2-GCCcore-6.3.0.eb | 29 ++++ .../x/X11/X11-20170314-GCCcore-6.3.0.eb | 135 ++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb new file mode 100644 index 0000000000..cc99c8e530 --- /dev/null +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'fontconfig' +version = '2.12.1' +freetype_ver = '2.7.2' +versionsuffix = '-freetype-%s' % freetype_ver + +homepage = 'http://www.freedesktop.org/software/fontconfig' +description = """Fontconfig is a library designed to provide system-wide font configuration, customization and +application access.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.freedesktop.org/software/fontconfig/release/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('expat', '2.2.0'), + ('freetype', freetype_ver), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +configopts = '--disable-docs ' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..6f9485b3f0 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +name = 'freetype' +version = '2.7.2' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('libpng', '1.6.29'), + ('zlib', '1.2.11'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..28c4d48e99 --- /dev/null +++ b/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb @@ -0,0 +1,135 @@ +easyblock = 'Bundle' + +name = 'X11' +version = '20170314' + +homepage = 'https://www.x.org' +description = "The X Window System (X11) is a windowing system for bitmap displays" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [ + XORG_LIB_SOURCE, + XORG_PROTO_SOURCE, + 'http://xcb.freedesktop.org/dist/', + 'http://xkbcommon.org/download/', + 'http://cgit.freedesktop.org/xorg/util/macros/snapshot', +] + +dependencies = [ + ('bzip2', '1.0.6'), + ('fontconfig', '2.12.1', '-freetype-2.7.2'), + ('zlib', '1.2.11'), +] +builddependencies = [ + ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8.1'), + ('pkg-config', '0.29.1'), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + +default_easyblock = 'ConfigureMake' + +common_specs = { + 'sources': [SOURCE_TAR_GZ], + 'start_dir': '%(name)s-%(version)s', +} +components = [ + ('xorg-macros', '1.19.1', { # 2017-01-29 + 'sources': ['util-macros-%(version)s.tar.gz'], + 'start_dir': 'util-macros-%(version)s', + }), + ('libpthread-stubs', '0.4', common_specs), # 2017-03-14 + ('bigreqsproto', '1.1.2', common_specs), # 2012-03-23 + ('compositeproto', '0.4.2', common_specs), # 2010-10-30 + ('damageproto', '1.2.1', common_specs), # 2010-10-30 + ('dmxproto', '2.3.1', common_specs), # 2011-01-06 + ('dri2proto', '2.8', common_specs), # 2012-07-11 + ('dri3proto', '1.0', common_specs), # 2013-11-01 + ('fixesproto', '5.0', common_specs), # 2011-03-08 + ('fontsproto', '2.1.3', common_specs), # 2014-04-14 + ('glproto', '1.4.17', common_specs), # 2013-12-10 + ('inputproto', '2.3.2', common_specs), # 2016-04-04 + ('kbproto', '1.0.7', common_specs), # 2015-05-01 + ('presentproto', '1.1', common_specs), # 2017-01-26 + ('randrproto', '1.5.0', common_specs), # 2015-05-17 + ('recordproto', '1.14.2', common_specs), # 2012-03-23 + ('renderproto', '0.11.1', common_specs), # 2010-08-10 + ('resourceproto', '1.2.0', common_specs), # 2011-05-28 + ('scrnsaverproto', '1.2.2', common_specs), # 2012-03-23 + ('videoproto', '2.3.3', common_specs), # 2016-03-11 + ('xcmiscproto', '1.2.2', common_specs), # 2012-03-23 + ('xextproto', '7.3.0', common_specs), # 2013-12-27 + ('xf86bigfontproto', '1.2.0', common_specs), # 2009-08-27 + ('xf86dgaproto', '2.1', common_specs), # 2009-10-01 + ('xf86driproto', '2.1.1', common_specs), # 2011-01-06 + ('xf86vidmodeproto', '2.3.1', common_specs), # 2011-01-06 + ('xineramaproto', '1.2.1', common_specs), # 2011-01-06 + ('xproto', '7.0.31', common_specs), # 2016-09-23 + ('libXau', '1.0.8', common_specs), # 2013-05-24 + ('libXdmcp', '1.1.2', common_specs), # 2015-03-21 + ('xcb-proto', '1.12', common_specs), # 2016-05-18 + ('libxcb', '1.12', common_specs), # 2016-05-18 + ('xtrans', '1.3.5', common_specs), # 2014-09-22 + ('libxkbcommon', '0.7.1', { # 2017-01-18 + 'sources': ['libxkbcommon-%(version)s.tar.xz'], + 'start_dir': 'libxkbcommon-%(version)s', + }), + ('libX11', '1.6.5', common_specs), # 2017-02-26 + ('libXext', '1.3.3', common_specs), # 2014-07-24 + ('libFS', '1.0.7', common_specs), # 2015-05-01 + ('libICE', '1.0.9', common_specs), # 2014-06-07 + ('libSM', '1.2.2', common_specs), # 2013-09-08 + ('libXScrnSaver', '1.2.2', common_specs), # 2012-03-08 + ('libXt', '1.1.5', common_specs), # 2015-05-01 + ('libXmu', '1.1.2', common_specs), # 2013-09-08 + ('libXpm', '3.5.12', common_specs), # 2016-12-15 + ('libXaw', '1.0.13', common_specs), # 2015-05-01 + ('libXfixes', '5.0.3', common_specs), # 2016-10-04 + ('libXcomposite', '0.4.4', common_specs), # 2013-01-03 + ('libXrender', '0.9.10', common_specs), # 2016-10-04 + ('libXcursor', '1.1.14', common_specs), # 2013-05-30 + ('libXdamage', '1.1.4', common_specs), # 2013-01-03 + ('libfontenc', '1.1.3', common_specs), # 2015-05-01 + ('libXfont', '1.5.2', common_specs), # 2016-08-31 + ('libXfont2', '2.0.1', common_specs), # 2015-12-11 + ('libXft', '2.3.2', common_specs), # 2014-06-06 + ('libXi', '1.7.9', common_specs), # 2017-01-23 + ('libXinerama', '1.1.3', common_specs), # 2013-05-31 + ('libXrandr', '1.5.1', common_specs), # 2016-10-04 + ('libXres', '1.0.7', common_specs), # 2013-05-31 + ('libXtst', '1.2.3', common_specs), # 2016-10-04 + ('libXv', '1.0.11', common_specs), # 2016-10-04 + ('libXvMC', '1.0.10', common_specs), # 2016-10-04 + ('libXxf86dga', '1.1.4', common_specs), # 2013-05-31 + ('libXxf86vm', '1.1.4', common_specs), # 2015-02-24 + ('libdmx', '1.1.3', common_specs), # 2013-05-28 + ('libpciaccess', '0.13.4', common_specs), # 2015-05-01 + ('libxkbfile', '1.0.9', common_specs), # 2015-05-01 + ('libxshmfence', '1.2', common_specs), # 2015-01-02 + ('xcb-util', '0.4.0', common_specs), # 2014-10-15 + ('xcb-util-image', '0.4.0', common_specs), # 2014-10-15 + ('xcb-util-keysyms', '0.4.0', common_specs), # 2014-10-01 + ('xcb-util-renderutil', '0.3.9', common_specs), # 2014-06-13 + ('xcb-util-wm', '0.4.1', common_specs), # 2014-02-19 + ('xcb-util-cursor', '0.1.3', common_specs), # 2016-05-12 +] + +# Python is required for xcb-proto +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[0:2]) + +preconfigopts = "if [ ! -f configure ]; then ./autogen.sh; fi && " + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['include/X11/Xlib.h', 'include/X11/Xutil.h'], + 'dirs': ['include/GL', 'include/X11', 'include/X11/extensions', 'lib', + 'lib/python%s/site-packages/xcbgen' % pyshortver, 'lib/pkgconfig', 'share/pkgconfig'], +} + +moduleclass = 'vis' -- GitLab From 42b1274584aa7936846cd2f34cfd71df6a72f79c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 21:06:20 +0200 Subject: [PATCH 0838/1311] no freetype 2.7.2 yet, change versionsuffix to -libpng-1.6.29 --- ....eb => fontconfig-2.12.1-GCCcore-6.3.0-libpng-1.6.29.eb} | 5 ++--- ...3.0.eb => freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb} | 6 ++++-- easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) rename easybuild/easyconfigs/f/fontconfig/{fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb => fontconfig-2.12.1-GCCcore-6.3.0-libpng-1.6.29.eb} (86%) rename easybuild/easyconfigs/f/freetype/{freetype-2.7.2-GCCcore-6.3.0.eb => freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb} (89%) diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-libpng-1.6.29.eb similarity index 86% rename from easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb rename to easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-libpng-1.6.29.eb index cc99c8e530..b9da643ed4 100644 --- a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-freetype-2.7.2.eb +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-6.3.0-libpng-1.6.29.eb @@ -2,8 +2,7 @@ easyblock = 'ConfigureMake' name = 'fontconfig' version = '2.12.1' -freetype_ver = '2.7.2' -versionsuffix = '-freetype-%s' % freetype_ver +versionsuffix = '-libpng-1.6.29' homepage = 'http://www.freedesktop.org/software/fontconfig' description = """Fontconfig is a library designed to provide system-wide font configuration, customization and @@ -16,7 +15,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('expat', '2.2.0'), - ('freetype', freetype_ver), + ('freetype', '2.7.1', versionsuffix), ] # use same binutils version that was used when building GCCcore toolchain diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb similarity index 89% rename from easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb rename to easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb index 6f9485b3f0..1b0dc16aba 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7.2-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb @@ -1,5 +1,7 @@ name = 'freetype' -version = '2.7.2' +version = '2.7.1' +libpng_ver = '1.6.29' +versionsuffix = '-libpng-%s' % libpng_ver homepage = 'http://freetype.org' description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and @@ -13,7 +15,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('bzip2', '1.0.6'), - ('libpng', '1.6.29'), + ('libpng', libpng_ver), ('zlib', '1.2.11'), ] diff --git a/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb index 28c4d48e99..dc3461eb7f 100644 --- a/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/x/X11/X11-20170314-GCCcore-6.3.0.eb @@ -18,7 +18,8 @@ source_urls = [ dependencies = [ ('bzip2', '1.0.6'), - ('fontconfig', '2.12.1', '-freetype-2.7.2'), + ('fontconfig', '2.12.1', '-libpng-1.6.29'), + ('freetype', '2.7.1', '-libpng-1.6.29'), ('zlib', '1.2.11'), ] builddependencies = [ -- GitLab From 6c8b36edb3ad6280a15cc4cfc13bfabebeb5710c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 21:07:15 +0200 Subject: [PATCH 0839/1311] bump X11 to version 20170314 in Mesa 17.0.2 easyconfig --- easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb | 2 +- easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb index be5c5321ff..a8a5a109c8 100644 --- a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.76-intel-2017a.eb @@ -12,7 +12,7 @@ sources = [SOURCELOWER_TAR_GZ] toolchain = {'name': 'intel', 'version': '2017a'} dependencies = [ - ('X11', '20170129'), + ('X11', '20170314'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb index f2828371e3..8bb12d31a3 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-17.0.2-intel-2017a.eb @@ -42,7 +42,7 @@ dependencies = [ ('nettle', '3.3'), ('libdrm', '2.4.76'), ('LLVM', '4.0.0'), - ('X11', '20170129'), + ('X11', '20170314'), ] # GLU is not part anymore of Mesa package! -- GitLab From 20ef59bf583714a6cf3719bdffc7e2978ad23024 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 21:10:07 +0200 Subject: [PATCH 0840/1311] bump X11 dep version in cairo 1.14.8 easyconfig --- easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb index 6f9eb993e3..6be8104cc5 100644 --- a/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb +++ b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb @@ -21,7 +21,7 @@ dependencies = [ ('pixman', '0.34.0'), ('expat', '2.2.0'), ('GLib', '2.52.0'), - ('X11', '20170129'), + ('X11', '20170314'), ] # disable symbol lookup, which requires -lbfd, to avoid link issues with (non-PIC) libiberty.a provided by GCC -- GitLab From 22f35fb732e032fa70bcedfe12fcf01bffec2f89 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 21:11:57 +0200 Subject: [PATCH 0841/1311] bump X11 deps to 20170314 --- ...017a-X11-20170129.eb => R-3.3.3-intel-2017a-X11-20170314.eb} | 2 +- easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/r/R/{R-3.3.3-intel-2017a-X11-20170129.eb => R-3.3.3-intel-2017a-X11-20170314.eb} (99%) diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb similarity index 99% rename from easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb rename to easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index e0614dfdd9..6892093317 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170129.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -1,6 +1,6 @@ name = 'R' version = '3.3.3' -x11ver = '20170129' +x11ver = '20170314' versionsuffix = '-X11-%s' % x11ver homepage = 'http://www.r-project.org/' diff --git a/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb b/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb index 325e35acc9..a01bad3db9 100644 --- a/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/t/Tk/Tk-8.6.6-intel-2017a.eb @@ -15,7 +15,7 @@ sources = ['%(namelower)s%(version)s-src.tar.gz'] patches = ['Tk-8.6.4_different-prefix-with-tcl.patch'] dependencies = [ - ('X11', '20170129'), + ('X11', '20170314'), ('Tcl', version), ('zlib', '1.2.11'), ] -- GitLab From 113e1afec23069c309e9b805b51809af27f54de1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 21:47:22 +0200 Subject: [PATCH 0842/1311] fix freetype dep in cairo 1.14.8 easyconfig --- easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb index 6be8104cc5..872e069d81 100644 --- a/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb +++ b/easybuild/easyconfigs/c/cairo/cairo-1.14.8-intel-2017a.eb @@ -17,7 +17,7 @@ dependencies = [ ('bzip2', '1.0.6'), ('zlib', '1.2.11'), ('libpng', '1.6.29'), - ('freetype', '2.7.1'), + ('freetype', '2.7.1', '-libpng-1.6.29'), ('pixman', '0.34.0'), ('expat', '2.2.0'), ('GLib', '2.52.0'), -- GitLab From ad7470594727b093fefd925cf9cf6b40ad5e802f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 31 Mar 2017 22:32:51 +0200 Subject: [PATCH 0843/1311] include patches for R v3.3.3 extensions to fix compilation with Intel compilers --- .../r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 6892093317..75250e8769 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -79,7 +79,7 @@ exts_list = [ ('Rmpi', '0.6-6', ext_options), ('abind', '1.4-5', ext_options), ('magic', '1.5-6', ext_options), - ('geometry', '0.3-6', ext_options), + ('geometry', '0.3-6', dict(ext_options.items() + [('patches', ['geometry-0.3-4-icc.patch'])])), ('bit', '1.1-12', ext_options), ('filehash', '2.3', ext_options), ('ff', '2.2-13', ext_options), @@ -324,7 +324,7 @@ exts_list = [ ('adephylo', '1.1-10', ext_options), ('animation', '2.4', ext_options), ('bigmemory.sri', '0.1.3', ext_options), - ('bigmemory', '4.5.19', ext_options), + ('bigmemory', '4.5.19', dict(ext_options.items() + [('patches', ['bigmemory-4.5.19_icpc-wd308.patch'])])), ('calibrate', '1.7.2', ext_options), ('clusterGeneration', '1.3.4', ext_options), ('raster', '2.5-8', ext_options), @@ -407,7 +407,7 @@ exts_list = [ ('VennDiagram', '1.6.17', ext_options), ('xlsxjars', '0.6.1', ext_options), ('xlsx', '0.5.7', ext_options), - ('forecast', '8.0', ext_options), + ('forecast', '8.0', dict(ext_options.items() + [('patches', ['forecast-6.1_icpc-wd308.patch'])])), ('fma', '2.3', ext_options), ('expsmooth', '2.3', ext_options), ('fpp', '0.5', ext_options), @@ -460,7 +460,7 @@ exts_list = [ ('pixmap', '0.4-11', ext_options), ('tkrplot', '0.0-23', ext_options), ('misc3d', '0.8-4', ext_options), - ('multicool', '0.1-10', ext_options), + ('multicool', '0.1-10', dict(ext_options.items() + [('patches', [('multicool-0.1-9_icpc-wd308.patch', 1)])])), ('ks', '1.10.5', ext_options), ('logcondens', '2.1.5', ext_options), ('Iso', '0.0-17', ext_options), @@ -483,7 +483,7 @@ exts_list = [ ('network', '1.13.0', ext_options), ('statnet.common', '3.3.0', ext_options), ('sna', '2.4', ext_options), - ('glasso', '1.8', ext_options), + ('glasso', '1.8', dict(ext_options.items() + [('patches', [('glasso-1.8-ifort-no-fixed.patch', 1)])])), ('huge', '1.2.7', ext_options), ('d3Network', '0.5.2.1', ext_options), ('ggm', '2.3', ext_options), -- GitLab From d845dddaa77015db0f0b283f52559461647d5738 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 1 Apr 2017 12:02:44 +0200 Subject: [PATCH 0844/1311] adding easyconfigs: Spack-0.10.0.eb --- easybuild/easyconfigs/s/Spack/Spack-0.10.0.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/s/Spack/Spack-0.10.0.eb diff --git a/easybuild/easyconfigs/s/Spack/Spack-0.10.0.eb b/easybuild/easyconfigs/s/Spack/Spack-0.10.0.eb new file mode 100644 index 0000000000..3a97b911b1 --- /dev/null +++ b/easybuild/easyconfigs/s/Spack/Spack-0.10.0.eb @@ -0,0 +1,26 @@ +easyblock = 'Tarball' + +name = 'Spack' +version = '0.10.0' + +homepage = 'https://spack.io/' +description = """Spack is a package manager for supercomputers, Linux, and macOS. It makes installing scientific + software easy. With Spack, you can build a package with multiple versions, configurations, platforms, and compilers, + and all of these builds can coexist on the same machine.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://github.com/LLNL/spack/archive/'] +sources = ['v%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['bin/spack'], + 'dirs': ['etc/spack/defaults', 'lib/spack', 'share/spack', 'var/spack'], +} + +sanity_check_commands = [ + "spack list", + "spack versions gcc", +] + +moduleclass = 'devel' -- GitLab From 5c10b74a26b8517f3c9462ce128ef51f9867bf82 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 1 Apr 2017 21:19:46 +0200 Subject: [PATCH 0845/1311] fix patch for multicool-0.1-10 extension in R 3.3.3 easyconfig --- .../easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 2 +- .../easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 75250e8769..eb14dda6a0 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -460,7 +460,7 @@ exts_list = [ ('pixmap', '0.4-11', ext_options), ('tkrplot', '0.0-23', ext_options), ('misc3d', '0.8-4', ext_options), - ('multicool', '0.1-10', dict(ext_options.items() + [('patches', [('multicool-0.1-9_icpc-wd308.patch', 1)])])), + ('multicool', '0.1-10', dict(ext_options.items() + [('patches', [('multicool-0.1-10_icpc-wd308.patch', 1)])])), ('ks', '1.10.5', ext_options), ('logcondens', '2.1.5', ext_options), ('Iso', '0.0-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch b/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch new file mode 100644 index 0000000000..a86f23d77d --- /dev/null +++ b/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch @@ -0,0 +1,7 @@ +add -wd308 compiler option to avoid compiler warning #308 being treated as an error +author: Kenneth Hoste (HPC-UGent) +--- multicool/src/Makevars.orig 2017-04-01 21:14:54.299465099 +0200 ++++ multicool/src/Makevars 2017-04-01 21:14:54.299465099 +0200 +@@ -0,0 +1,2 @@ ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CXXFLAGS = -wd308 -- GitLab From 23693fca6ad76a06c641d3110ef58445491d73f3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 1 Apr 2017 21:32:43 +0200 Subject: [PATCH 0846/1311] make sure multicool patch level can be derived --- .../easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 2 +- .../easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index eb14dda6a0..06a44541b2 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -460,7 +460,7 @@ exts_list = [ ('pixmap', '0.4-11', ext_options), ('tkrplot', '0.0-23', ext_options), ('misc3d', '0.8-4', ext_options), - ('multicool', '0.1-10', dict(ext_options.items() + [('patches', [('multicool-0.1-10_icpc-wd308.patch', 1)])])), + ('multicool', '0.1-10', dict(ext_options.items() + [('patches', ['multicool-0.1-10_icpc-wd308.patch'])])), ('ks', '1.10.5', ext_options), ('logcondens', '2.1.5', ext_options), ('Iso', '0.0-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch b/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch index a86f23d77d..660089c7d5 100644 --- a/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch +++ b/easybuild/easyconfigs/r/R/multicool-0.1-10_icpc-wd308.patch @@ -1,5 +1,12 @@ add -wd308 compiler option to avoid compiler warning #308 being treated as an error author: Kenneth Hoste (HPC-UGent) +--- multicool/MD5.orig 2017-04-01 21:30:37.105382230 +0200 ++++ multicool/MD5 2017-04-01 21:30:30.095337987 +0200 +@@ -20,3 +20,4 @@ + b18b7e9e5912cf1014aa2c2fa8e86047 *src/compositions.cpp + 994ea793adf2455b973554d9b8dacd99 *src/multicool.cpp + 8e6ea24037e92ec9c30f699f4e3f9b8a *src/multinomial.h ++b1d3a4d02405fe08c7983c479bc27f13 */src/Makevars --- multicool/src/Makevars.orig 2017-04-01 21:14:54.299465099 +0200 +++ multicool/src/Makevars 2017-04-01 21:14:54.299465099 +0200 @@ -0,0 +1,2 @@ -- GitLab From 1db6d2bc186632ac3e477de75e3620300e4364e2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 2 Apr 2017 09:43:12 +0200 Subject: [PATCH 0847/1311] add patch for imager extension in R 3.3.3 easyconfig --- .../r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 2 +- .../r/R/imager-0.3_fix-icpc-bool-cast.patch | 259 ++++++++++++++++++ 2 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 06a44541b2..01ebe2e855 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -502,7 +502,7 @@ exts_list = [ ('bmp', '0.2', ext_options), ('readbitmap', '0.1-4', ext_options), ('purrr', '0.2.2', ext_options), - ('imager', '0.31', ext_options), + ('imager', '0.31', dict(ext_options.items() + [('patches', ['imager-0.3_fix-icpc-bool-cast.patch'])])), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch b/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch new file mode 100644 index 0000000000..8d994cb858 --- /dev/null +++ b/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch @@ -0,0 +1,259 @@ +fix Intel compilation errors, partially based on https://github.com/dtschump/CImg/commit/d66a4e7f1b13594a572c22160c20e2bd3f231f6c +author: Kenneth Hoste (HPC-UGent) +--- imager/inst/include/CImg.h.orig 2016-08-31 16:30:10.000000000 +0200 ++++ imager/inst/include/CImg.h 2017-04-01 22:43:25.292695440 +0200 +@@ -17988,7 +17988,7 @@ + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; +- if (img) { ++ if ((bool)img) { + if (mp.opcode[12]!=(ulongT)-1) { + const CImg M(&_mp_arg(12) + 1,dx,dy,dz,(unsigned int)mp.opcode[13],true); + img.draw_image(x,y,z,c,S,M,opacity,(float)_mp_arg(14)); +@@ -18107,10 +18107,10 @@ + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary +- if (img) return (double)img[cimg::mod(off,whds)]; ++ if ((bool)img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary +- if (img) return (double)(off<0?*img:img.back()); ++ if ((bool)img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; +@@ -18184,10 +18184,10 @@ + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary +- if (img) return (double)img[cimg::mod(off,whds)]; ++ if ((bool)img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary +- if (img) return (double)(off<0?*img:img.back()); ++ if ((bool)img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; +@@ -18257,10 +18257,10 @@ + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary +- if (img) return (double)img[cimg::mod(off,whds)]; ++ if ((bool)img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary +- if (img) return (double)(off<0?*img:img.back()); ++ if ((bool)img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; +@@ -18317,10 +18317,10 @@ + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary +- if (img) return (double)img(ind,cimg::mod(off,whds)); ++ if ((bool)img) return (double)img(ind,cimg::mod(off,whds)); + return 0; + case 1 : // Neumann boundary +- if (img) return (double)(off<0?*img:img.back()); ++ if ((bool)img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; +@@ -18590,7 +18590,7 @@ + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary +- if (img) { ++ if ((bool)img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); +@@ -18662,7 +18662,7 @@ + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary +- if (img) { ++ if ((bool)img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); +@@ -19579,7 +19579,7 @@ + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary +- if (img) { ++ if ((bool)img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); +@@ -19648,7 +19648,7 @@ + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary +- if (img) { ++ if ((bool)img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); +@@ -25664,14 +25664,15 @@ + x0 = ((int)xc%width()) - width(), + y0 = ((int)yc%height()) - height(), + z0 = ((int)zc%depth()) - depth(), +- c0 = ((int)cc%spectrum()) - spectrum(); ++ c0 = ((int)cc%spectrum()) - spectrum(), ++ dx = width(), dy = height(), dz = depth(), dc = spectrum(); + #ifdef cimg_use_openmp + #pragma omp parallel for collapse(3) if (res.size()>=65536) + #endif +- for (int c = c0; c<(int)sc; c+=spectrum()) +- for (int z = z0; z<(int)sz; z+=depth()) +- for (int y = y0; y<(int)sy; y+=height()) +- for (int x = x0; x<(int)sx; x+=width()) ++ for (int c = c0; c<(int)sc; c+=dc) ++ for (int z = z0; z<(int)sz; z+=dz) ++ for (int y = y0; y<(int)sy; y+=dy) ++ for (int x = x0; x<(int)sx; x+=dx) + res.draw_image(x,y,z,c,*this); + } break; + case 1 : { // Neumann boundary. +@@ -47059,7 +47060,7 @@ + const IplImage *img = 0; + for (unsigned int i = 0; iwidthStep - 3*img->width); + assign(img->width,img->height,1,3); + const unsigned char* ptrs = (unsigned char*)img->imageData; +@@ -52636,7 +52637,7 @@ + case 'x' : { // Along the X-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) { ++ if ((bool)img) { + dx+=img._width; + dy = cimg::max(dy,img._height); + dz = cimg::max(dz,img._depth); +@@ -52646,7 +52647,7 @@ + res.assign(dx,dy,dz,dc,0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) res.draw_image(pos, ++ if ((bool)img) res.draw_image(pos, + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), +@@ -52657,7 +52658,7 @@ + case 'y' : { // Along the Y-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) { ++ if ((bool)img) { + dx = cimg::max(dx,img._width); + dy+=img._height; + dz = cimg::max(dz,img._depth); +@@ -52667,7 +52668,7 @@ + res.assign(dx,dy,dz,dc,0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) res.draw_image((int)(align*(dx - img._width)), ++ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), + pos, + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), +@@ -52678,7 +52679,7 @@ + case 'z' : { // Along the Z-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) { ++ if ((bool)img) { + dx = cimg::max(dx,img._width); + dy = cimg::max(dy,img._height); + dz+=img._depth; +@@ -52688,7 +52689,7 @@ + res.assign(dx,dy,dz,dc,0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) res.draw_image((int)(align*(dx - img._width)), ++ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), + pos, + (int)(align*(dc - img._spectrum)), +@@ -52699,7 +52700,7 @@ + default : { // Along the C-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) { ++ if ((bool)img) { + dx = cimg::max(dx,img._width); + dy = cimg::max(dy,img._height); + dz = cimg::max(dz,img._depth); +@@ -52709,7 +52710,7 @@ + res.assign(dx,dy,dz,dc,0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; +- if (img) res.draw_image((int)(align*(dx - img._width)), ++ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), + pos, +@@ -53957,7 +53958,7 @@ + CImg img; + try { img.load_pnm(filename_tmp2); } + catch (CImgException&) { stop_flag = true; } +- if (img) { img.move_to(*this); std::remove(filename_tmp2); } ++ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } + } + cimg::exception_mode(omode); + if (is_empty()) +@@ -54033,7 +54034,7 @@ + CImg img; + try { img.load_png(filename_tmp2); } + catch (CImgException&) { } +- if (img) { img.move_to(*this); std::remove(filename_tmp2); } ++ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } + else { // Try to read animated gif. + unsigned int i = 0; + for (bool stop_flag = false; !stop_flag; ++i) { +@@ -54042,7 +54043,7 @@ + CImg img; + try { img.load_png(filename_tmp2); } + catch (CImgException&) { stop_flag = true; } +- if (img) { img.move_to(*this); std::remove(filename_tmp2); } ++ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } + } + } + cimg::exception_mode(omode); +--- imager/src/Makevars.in.orig 2017-04-01 22:32:32.628591934 +0200 ++++ imager/src/Makevars.in 2017-04-01 22:32:40.968645087 +0200 +@@ -1,4 +1,5 @@ + + PKG_CPPFLAGS = @HAVE_OPENMP@ @OPENMP_CFLAGS@ @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_r_mode -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 + PKG_LIBS = @OPENMP_CFLAGS@ @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ $(RCPP_LDFLAGS) +- ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CXXFLAGS = -wd308 +--- imager/MD5.orig 2016-09-12 15:08:55.000000000 +0200 ++++ imager/MD5 2017-04-01 22:44:16.943021224 +0200 +@@ -31,7 +31,7 @@ + 05e04a3bc5a858c40e001cc65b853dfc *inst/extdata/Leonardo_Birds.jpg + e1328ba2c55d5a72eb77e283c9630b90 *inst/extdata/parrots.png + daa5b7e30235689ad0444df37c88b7ff *inst/extdata/tennis_sif.mpeg +-00de9e6b4c2066d28d7f8d9e251915cd *inst/include/CImg.h ++ea9acc61a3dd73452639c570af543d29 *inst/include/CImg.h + 034a9e8aab9e05094fd31ce9ea3bbae2 *inst/include/imager.h + 0c8aae8db902f96a8f8e323043eb1418 *inst/include/wrappers.h + be39be77874a0181ecd47b1a7a9af5dd *man/FFT.Rd +@@ -140,7 +140,7 @@ + a680472a2ef1eda48c1a9b90488543b5 *man/vanvliet.Rd + 08193940e20b440f614e4c7a2dbf82fb *man/warp.Rd + 429b25a38f282c30d5d178ad9efc3b1f *man/watershed.Rd +-ab8f97aa6f15c67d1029e3eb5091853d *src/Makevars.in ++802ecbe76012c51adf729063804c793a *src/Makevars.in + 5ecf9e8577f31e535dee1c371e75a35f *src/Makevars.win + 78aff3a88c55983a329723eb1174a4ca *src/RcppExports.cpp + 8193f4fecd751c7d310d23b0faacd303 *src/colourspace.cpp -- GitLab From a5f2063b833b5bf00edccfe0167ac1a396850d5d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 2 Apr 2017 16:03:04 +0200 Subject: [PATCH 0848/1311] adding easyconfigs: ClusterShell-1.7.3.eb --- .../c/ClusterShell/ClusterShell-1.7.3.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb diff --git a/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb b/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb new file mode 100644 index 0000000000..7a6d8ed9f6 --- /dev/null +++ b/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'ClusterShell' +version = '1.7.3' + +homepage = 'http://cea-hpc.github.io/clustershell/' +description = """ClusterShell is an event-driven open source Python library, designed to run local or distant commands + in parallel on server farms or on large Linux clusters.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [PYPI_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +options = {'modulename': 'ClusterShell'} + +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': ['bin/clubak', 'bin/clush', 'bin/nodeset'], + 'dirs': ['lib/python%s/site-packages' % pyshortver] +} + +moduleclass = 'tools' -- GitLab From 5663f27a280b6494a5efef3dae1bf526ec75fd1f Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 3 Apr 2017 08:13:41 +0100 Subject: [PATCH 0849/1311] adding easyconfigs: ALLPATHS-LG-52488-foss-2016a.eb --- .../ALLPATHS-LG-52488-foss-2016a.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb diff --git a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb new file mode 100755 index 0000000000..3ba22f9da5 --- /dev/null +++ b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 The Cyprus Institute +# Authors:: Andreas Panteli , Thekla Loizou , +# George Tsouloupas +# License:: MIT/GPL +# +## +# 52488 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'ALLPATHS-LG' +version = '52488' + +homepage = 'http://www.broadinstitute.org/software/allpaths-lg/blog/' +description = """ALLPATHS-LG, the new short read genome assembler.""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +# source is moved over time, hence multiple URLs below +source_urls = [ + 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code', + 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/2013-06', + 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/2013/2013-06', +] +sources = ['allpathslg-%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin'], +} + +moduleclass = 'bio' -- GitLab From a041d36a1b35a350727fee2733daa96baeb39e8f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 3 Apr 2017 10:48:18 +0200 Subject: [PATCH 0850/1311] adding easyconfigs: Inspector-2017_update2.eb --- .../i/Inspector/Inspector-2017_update2.eb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/i/Inspector/Inspector-2017_update2.eb diff --git a/easybuild/easyconfigs/i/Inspector/Inspector-2017_update2.eb b/easybuild/easyconfigs/i/Inspector/Inspector-2017_update2.eb new file mode 100644 index 0000000000..9ea21d95ae --- /dev/null +++ b/easybuild/easyconfigs/i/Inspector/Inspector-2017_update2.eb @@ -0,0 +1,17 @@ +name = 'Inspector' +version = '2017_update2' + +homepage = 'http://software.intel.com/en-us/intel-inspector-xe' +description = """Intel Inspector XE is an easy to use memory error checker and thread checker for serial + and parallel applications""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['inspector_%(version)s.tar.gz'] +checksums = ['d85a3bbd699b0fc77967fcd5e923ad35'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' -- GitLab From b71a103e395e5a84fad3efd2089ffe1748da8238 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Mon, 3 Apr 2017 11:05:44 +0200 Subject: [PATCH 0851/1311] adding easyconfigs: samblaster-0.1.24-goolf-1.7.20.eb --- .../samblaster-0.1.24-goolf-1.7.20.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb new file mode 100644 index 0000000000..55c7310c7e --- /dev/null +++ b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'MakeCp' + +name = 'samblaster' +version = '0.1.24' + +homepage = 'https://github.com/GregoryFaust/samblaster' +description = """samblaster: a tool to mark duplicates and extract discordant and split reads from sam files""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/GregoryFaust/samblaster/archive/'] +sources = ['v.%(version)s.tar.gz'] + +files_to_copy = [(['samblaster'], 'bin/'), + 'README.md', + 'SAMBLASTER_Supplemental.pdf', + 'LICENSE.txt', +] + +sanity_check_paths = { + 'files': ['bin/samblaster'], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From 33a00c24c74c17fb559dcdb9cb4f6b532f95362a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 3 Apr 2017 11:29:09 +0200 Subject: [PATCH 0852/1311] adding easyconfigs: ImageMagick-7.0.5-4-intel-2017a.eb, Ghostscript-9.21-intel-2017a.eb, LittleCMS-2.8-intel-2017a.eb --- .../Ghostscript-9.21-intel-2017a.eb | 35 ++++++++++++++++ .../ImageMagick-7.0.5-4-intel-2017a.eb | 42 +++++++++++++++++++ .../l/LittleCMS/LittleCMS-2.8-intel-2017a.eb | 23 ++++++++++ 3 files changed, 100 insertions(+) create mode 100644 easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.21-intel-2017a.eb create mode 100644 easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.21-intel-2017a.eb b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.21-intel-2017a.eb new file mode 100644 index 0000000000..e055f488f1 --- /dev/null +++ b/easybuild/easyconfigs/g/Ghostscript/Ghostscript-9.21-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'Ghostscript' +version = '9.21' + +homepage = 'http://ghostscript.com' +description = """Ghostscript is a versatile processor for PostScript data with the ability to render PostScript to + different targets. It used to be part of the cups printing stack, but is no longer used for that.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs%(version_major)s%(version_minor)s/', +] +sources = ['ghostscript-%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.11'), + ('libpng', '1.6.29'), + ('freetype', '2.7.1', '-libpng-1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('expat', '2.2.0'), + ('GLib', '2.52.0'), + ('cairo', '1.14.8'), + ('LibTIFF', '4.0.7'), +] + +# Do not use local copies of zlib, jpeg, freetype, and png +preconfigopts = "mv zlib zlib.no && mv jpeg jpeg.no && mv freetype freetype.no && mv libpng libpng.no && " +preconfigopts += 'export LIBS="$LIBS -lz" && ' + +configopts = "--with-system-libtiff --enable-dynamic" + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-4-intel-2017a.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-4-intel-2017a.eb new file mode 100644 index 0000000000..b01509be3a --- /dev/null +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-4-intel-2017a.eb @@ -0,0 +1,42 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Ravi Tripathi +# Email: ravi89@uab.edu + +easyblock = 'ConfigureMake' + +name = 'ImageMagick' +version = '7.0.5-4' + +homepage = 'http://www.imagemagick.org/' +description = """ImageMagick is a software suite to create, edit, compose, or convert bitmap images""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://www.imagemagick.org/download/releases/'] +checksums = ['473a1e7ae37548eb6fe9cf2b1fb78011'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('X11', '20170314'), + ('Ghostscript', '9.21'), + ('JasPer', '2.0.12'), + ('libjpeg-turbo', '1.5.1'), + ('LibTIFF', '4.0.7'), + ('LittleCMS', '2.8'), +] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +configopts = "--with-gslib --with-x" + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'etc/%(name)s-%(version_major)s', 'include/%(name)s-%(version_major)s', 'lib', 'share'], +} + +modextravars = {'MAGICK_HOME': '%(installdir)s'} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-intel-2017a.eb b/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-intel-2017a.eb new file mode 100644 index 0000000000..338a40a66d --- /dev/null +++ b/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'LittleCMS' +version = '2.8' + +homepage = 'http://www.littlecms.com/' +description = """ Little CMS intends to be an OPEN SOURCE small-footprint color management engine, + with special focus on accuracy and performance. """ + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://sourceforge.net/projects/lcms/files/lcms/%(version)s/'] +sources = ['lcms2-%(version)s.tar.gz'] + +dependencies = [('libjpeg-turbo', '1.5.1')] + +sanity_check_paths = { + 'files': ['bin/jpgicc', 'bin/linkicc', 'bin/psicc', 'bin/transicc', 'include/lcms2.h', 'include/lcms2_plugin.h', + 'lib/liblcms2.a', 'lib/liblcms2.%s' % SHLIB_EXT, 'lib/pkgconfig/lcms2.pc'], + 'dirs': ['share/man'], +} + +moduleclass = 'vis' -- GitLab From 674a1c51476cf8e99d35adf0eff04ac75f62cd02 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 3 Apr 2017 12:04:18 +0200 Subject: [PATCH 0853/1311] add PyYAML as dependency for ClusterShell --- .../c/ClusterShell/ClusterShell-1.7.3.eb | 1 + .../easyconfigs/l/libyaml/libyaml-0.1.7.eb | 28 +++++++++++++++++++ easybuild/easyconfigs/p/PyYAML/PyYAML-3.12.eb | 25 +++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/l/libyaml/libyaml-0.1.7.eb create mode 100644 easybuild/easyconfigs/p/PyYAML/PyYAML-3.12.eb diff --git a/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb b/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb index 7a6d8ed9f6..26131a5764 100644 --- a/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb +++ b/easybuild/easyconfigs/c/ClusterShell/ClusterShell-1.7.3.eb @@ -12,6 +12,7 @@ toolchain = {'name': 'dummy', 'version': ''} source_urls = [PYPI_SOURCE] sources = [SOURCELOWER_TAR_GZ] +dependencies = [('PyYAML', '3.12')] allow_system_deps = [('Python', SYS_PYTHON_VERSION)] options = {'modulename': 'ClusterShell'} diff --git a/easybuild/easyconfigs/l/libyaml/libyaml-0.1.7.eb b/easybuild/easyconfigs/l/libyaml/libyaml-0.1.7.eb new file mode 100644 index 0000000000..44f94ecc3d --- /dev/null +++ b/easybuild/easyconfigs/l/libyaml/libyaml-0.1.7.eb @@ -0,0 +1,28 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Nils Christian +# License:: MIT/GPL +# $Id$ +## + +easyblock = 'ConfigureMake' + +name = 'libyaml' +version = '0.1.7' + +homepage = 'http://pyyaml.org/wiki/LibYAML' +description = """LibYAML is a YAML 1.1 parser and emitter written in C.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://pyyaml.org/download/libyaml/'] +sources = ['yaml-%(version)s.tar.gz'] + +sanity_check_paths = { + 'files': ['include/yaml.h', 'lib/libyaml.a', 'lib/libyaml.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'] +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12.eb b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12.eb new file mode 100644 index 0000000000..8a6937f145 --- /dev/null +++ b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'PyYAML' +version = '3.12' + +homepage = "https://pypi.python.org/pypi/PyYAML/" +description = """PyYAML is a YAML parser and emitter for the Python programming language.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('libyaml', '0.1.7')] +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +options = {'modulename': 'yaml'} + +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': [], + 'dirs': [('lib/python%s/site-packages' % pyshortver, 'lib64/python%s/site-packages' % pyshortver)] +} + +moduleclass = 'lib' -- GitLab From 7859c40ad54c1bb3b76ec5037be59eddf796668b Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 3 Apr 2017 11:18:29 +0100 Subject: [PATCH 0854/1311] Remove obsolete FTP paths --- .../easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb index 3ba22f9da5..a840c61253 100755 --- a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb +++ b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb @@ -19,13 +19,12 @@ version = '52488' homepage = 'http://www.broadinstitute.org/software/allpaths-lg/blog/' description = """ALLPATHS-LG, the new short read genome assembler.""" +# Compilation fails with GCC 5.3 (goss-2016b) toolchain = {'name': 'foss', 'version': '2016a'} # source is moved over time, hence multiple URLs below source_urls = [ 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code', - 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/2013-06', - 'ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/2013/2013-06', ] sources = ['allpathslg-%(version)s.tar.gz'] -- GitLab From 36b2bfee952f02ce6b499e5f5b7ba8b5d112b5b7 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 3 Apr 2017 11:21:44 +0100 Subject: [PATCH 0855/1311] Fix typo --- .../easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb index a840c61253..0227efebd7 100755 --- a/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb +++ b/easybuild/easyconfigs/a/ALLPATHS-LG/ALLPATHS-LG-52488-foss-2016a.eb @@ -19,7 +19,7 @@ version = '52488' homepage = 'http://www.broadinstitute.org/software/allpaths-lg/blog/' description = """ALLPATHS-LG, the new short read genome assembler.""" -# Compilation fails with GCC 5.3 (goss-2016b) +# Compilation fails with GCC 5.3 (foss-2016b) toolchain = {'name': 'foss', 'version': '2016a'} # source is moved over time, hence multiple URLs below -- GitLab From 8c68ce861deb926d89f492e0eaf100c735ef9995 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 3 Apr 2017 17:41:12 +0200 Subject: [PATCH 0856/1311] adding easyconfigs: deap-0.9.2-intel-2016b-Python-2.7.12.eb --- .../deap-0.9.2-intel-2016b-Python-2.7.12.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/d/deap/deap-0.9.2-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/d/deap/deap-0.9.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/d/deap/deap-0.9.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..f639521510 --- /dev/null +++ b/easybuild/easyconfigs/d/deap/deap-0.9.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'deap' +version = '0.9.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://deap.readthedocs.org/en/master/' +description = """DEAP is a novel evolutionary computation framework for rapid prototyping and testing of ideas. + It seeks to make algorithms explicit and data structures transparent.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From e28163397a26a71ad0c592cafa5b85b4a7b56c78 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Tue, 4 Apr 2017 12:14:05 +0930 Subject: [PATCH 0857/1311] Support for BioKanga 4.3.4 --- .../b/BioKanga/BioKanga-4.3.4-foss-2015b.eb | 30 +++++++++++++++++++ .../b/BioKanga/BioKanga-4.3.4_configure.patch | 29 ++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb create mode 100644 easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb new file mode 100644 index 0000000000..da082e4501 --- /dev/null +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'BioKanga' +version = '4.3.4' + +homepage = 'https://github.com/csiro-crop-informatics/biokanga' +description = """BioKanga is an integrated toolkit of high performance bioinformatics + subprocesses targeting the challenges of next generation sequencing analytics. + Kanga is an acronym standing for 'K-mer Adaptive Next Generation Aligner'.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = ['https://github.com/csiro-crop-informatics/biokanga/archive/'] +sources = ['v%(version)s.tar.gz'] + +patches = ['BioKanga-4.3.4_configure.patch'] + +builddependencies = [ + ('Autoconf', '2.69'), + ('Automake', '1.15') +] + +preconfigopts = "autoreconf -f -i && " + +sanity_check_paths = { + 'files': ["bin/biokanga"], + 'dirs': [] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch new file mode 100644 index 0000000000..a88701ea28 --- /dev/null +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch @@ -0,0 +1,29 @@ +--- ./configure.ac 2017-04-04 11:47:18.067209892 +0930 ++++ ./configure.ac 2017-04-04 11:47:46.719519662 +0930 +@@ -23,11 +23,10 @@ + fasta2dist/Makefile locsw/Makefile quickcount/Makefile csv2feat/Makefile + genalignref2relloci/Makefile genalignloci2core/Makefile maploci2features/Makefile + processcsvfiles/Makefile genalignconf/Makefile Loci2Phylip/Makefile blast2csv/Makefile genrollups/Makefile +- gengoterms/Makefile gengoassoc/Makefile goassoc/Makefile + genWiggle/Makefile gencentroidmetrics/Makefile proccentroids/Makefile DNAseqSitePotential/Makefile SimulateMNase/Makefile + filterreads/Makefile prednucleosomes/Makefile RNAseqSitePotential/Makefile + genDESeq/Makefile fasta2struct/Makefile kangarg/Makefile genultras/Makefile +- LocateROI/Makefile genstructprofile/Makefile genstructstats/Makefile predconfnucs/Makefile gennucstats/Makefile fastafilter/Makefile ++ LocateROI/Makefile genstructprofile/Makefile predconfnucs/Makefile gennucstats/Makefile fastafilter/Makefile + BEDMerge/Makefile BEDFilter/Makefile genElementProfiles/Makefile genzygosity/Makefile genGenomeFromAGP/Makefile genmarkers/Makefile + HammingDist/Makefile genreadsde/Makefile ufilter/Makefile uhamming/Makefile genseqcandidates/Makefile GFFfilter/Makefile loci2dist/Makefile + genNormWiggle/Makefile GTFfilter/Makefile genDiffExpr/Makefile dmpbioseq/Makefile genpseudogenome/Makefile usimdiffexpr/Makefile RNAFragSim/Makefile mergeoverlaps/Makefile +--- Makefile.am 2017-04-04 11:51:40.878045716 +0930 ++++ Makefile.am 2017-04-04 11:51:57.518224861 +0930 +@@ -8,10 +8,9 @@ + genalignref2relloci genalignloci2core maploci2features \ + processcsvfiles genalignconf Loci2Phylip blast2csv genrollups \ + genWiggle proccentroids gencentroidmetrics SimulateMNase predconfnucs \ +- gengoterms gengoassoc goassoc \ + DNAseqSitePotential RNAseqSitePotential prednucleosomes gennucstats \ + uhamming LocateROI genDESeq genGenomeFromAGP kangarg genultras \ +- genstructprofile genstructstats filterreads fasta2struct ufilter genseqcandidates genmarkers GFFfilter \ ++ genstructprofile filterreads fasta2struct ufilter genseqcandidates genmarkers GFFfilter \ + genElementProfiles BEDMerge BEDFilter loci2dist genzygosity genNormWiggle GTFfilter genDiffExpr \ + dmpbioseq genpseudogenome usimdiffexpr genreadsde HammingDist RNAFragSim mergeoverlaps fastafilter \ + kangasr kangar kangahrdx kangade kangas kangapr csv2sqlite biokanga locmarkers PEscaffold SSRdiscovery pacbiokanga -- GitLab From ed49e763dc0bd0d51fe8a687cc1dc6056c9ab11d Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Tue, 4 Apr 2017 12:34:08 +0930 Subject: [PATCH 0858/1311] Added missing easyconfig dependencies for foss-2015b toolchain --- .../a/Autoconf/Autoconf-2.69-foss-2015b.eb | 25 ++++++++++++++ .../a/Automake/Automake-1.15-foss-2015b.eb | 33 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-foss-2015b.eb create mode 100644 easybuild/easyconfigs/a/Automake/Automake-1.15-foss-2015b.eb diff --git a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-foss-2015b.eb b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-foss-2015b.eb new file mode 100644 index 0000000000..408f488eca --- /dev/null +++ b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-foss-2015b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'Autoconf' +version = '2.69' + +homepage = 'http://www.gnu.org/software/autoconf/' +description = """Autoconf is an extensible package of M4 macros that produce shell scripts to automatically + configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like + systems without manual user intervention. Autoconf creates a configuration script for a package from a + template file that lists the operating system features that the package can use, in the form of M4 macro calls.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('M4', '1.4.17')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["autoconf", "autoheader", "autom4te", "autoreconf", + "autoscan", "autoupdate", "ifnames"]], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/a/Automake/Automake-1.15-foss-2015b.eb b/easybuild/easyconfigs/a/Automake/Automake-1.15-foss-2015b.eb new file mode 100644 index 0000000000..543e7a0ba7 --- /dev/null +++ b/easybuild/easyconfigs/a/Automake/Automake-1.15-foss-2015b.eb @@ -0,0 +1,33 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'Automake' +version = "1.15" + +homepage = 'http://www.gnu.org/software/automake/automake.html' +description = "Automake: GNU Standards-compliant Makefile generator" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Autoconf', '2.69')] + +sanity_check_paths = { + 'files': ['bin/automake', 'bin/aclocal'], + 'dirs': [] +} + +moduleclass = 'devel' -- GitLab From 2c0bd091e388bc06f25908f60bdaf821e2efeb9b Mon Sep 17 00:00:00 2001 From: Edoardo Di Lorenzo Date: Tue, 4 Apr 2017 09:54:03 +0200 Subject: [PATCH 0859/1311] adding easyconfigs: Cantera-2.3.0-foss-2016b-Python-2.7.12.eb --- .../Cantera-2.3.0-foss-2016b-Python-2.7.12.eb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..87566ca1da --- /dev/null +++ b/easybuild/easyconfigs/c/Cantera/Cantera-2.3.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,50 @@ +easyblock = 'SCons' + +name = 'Cantera' +version = '2.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/Cantera/cantera' +description = """Chemical kinetics, thermodynamics, and transport tool suite""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/Cantera/cantera/archive/'] +sources = ['v%(version)s.tar.gz'] + +patches = [ + 'Cantera-%(version)s_fix-bug-416.patch', + 'Cantera-%(version)s_fix-test-reprod.patch', +] + +dependencies = [ + ('Python', '2.7.12'), + ('Boost', '1.63.0', versionsuffix), + ('SUNDIALS', '2.7.0'), + ('Eigen', '3.3.2'), + ('fmt', '3.0.1'), + ('googletest', '1.8.0'), +] +builddependencies = [ + ('SCons', '2.5.1', versionsuffix), + ('3to2', '1.1.1', versionsuffix), +] + +common_opts = 'env_vars=all CC="$CC" CXX="$CXX" blas_lapack_libs=openblas blas_lapack_dir=$BLAS_LAPACK_LIB_DIR' +common_opts += ' sundials_include=$EBROOTSUNDIALS/include sundials_libdir=$EBROOTSUNDIALS/lib' +buildopts = 'build ' + common_opts +runtest = 'test ' + common_opts +installopts = 'install ' + common_opts +prefix_arg = 'prefix=' + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/mixmaster'], + 'dirs': ['include/cantera', 'lib/pkgconfig', 'lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = [('python', "-c 'import cantera'")] + +moduleclass = 'chem' -- GitLab From 504315aa55cf670592a7dfaa04a662012782ee73 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 4 Apr 2017 10:03:58 +0200 Subject: [PATCH 0860/1311] {bio}[intel/2016b] Stampy v1.0.31 w/ Python 2.7.12 --- ...Stampy-1.0.31-intel-2016b-Python-2.7.12.eb | 35 ++++++++++++++++ .../Stampy/Stampy-1.0.31_fix-hardcoding.patch | 40 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 easybuild/easyconfigs/s/Stampy/Stampy-1.0.31-intel-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/s/Stampy/Stampy-1.0.31_fix-hardcoding.patch diff --git a/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..1c6a84db5e --- /dev/null +++ b/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,35 @@ +easyblock = 'MakeCp' + +name = 'Stampy' +version = '1.0.31' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.well.ox.ac.uk/stampy' +description = """Stampy is a package for the mapping of short reads from illumina sequencing machines onto + a reference genome.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +# download via http://www.well.ox.ac.uk/software-download-registration and rename from Stampy-latest.tgz +sources = ['Stampy-%(version)s.tgz'] +checksums = ['512b2da5a952a65d2e6f70220c4641dc'] + +patches = ['Stampy-%(version)s_fix-hardcoding.patch'] + +dependencies = [('Python', '2.7.12')] + +files_to_copy = ['ext', 'maptools.%s' % SHLIB_EXT, 'plugins', 'README.txt', 'Stampy', 'stampy.py'] + +sanity_check_paths = { + 'files': ['maptools.%s' % SHLIB_EXT, 'stampy.py'], + 'dirs': ['ext', 'plugins', 'Stampy'], +} + +modextrapaths = { + # add top-level install path to $PATH and $PYTHONPATH + 'PATH': [''], + 'PYTHONPATH': [''], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31_fix-hardcoding.patch b/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31_fix-hardcoding.patch new file mode 100644 index 0000000000..ce59a23011 --- /dev/null +++ b/easybuild/easyconfigs/s/Stampy/Stampy-1.0.31_fix-hardcoding.patch @@ -0,0 +1,40 @@ +--- stampy-1.0.31/makefile.orig 2016-12-01 17:28:32.000000000 +0100 ++++ stampy-1.0.31/makefile 2017-04-04 09:59:04.057705404 +0200 +@@ -3,6 +3,10 @@ + # Compiles with gcc 5.4.0 and Apple LLVM version 6.1.0 + # + ++CC?=gcc ++CXX?=g++ ++CFLAGS?=-O2 ++CXXFLAGS?= + SHELL=/bin/bash + python?=python + platform=`uname` +@@ -31,21 +35,21 @@ + + $(bdir)/c/%.o: + mkdir -p $(bdir)/c +- gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c c/$*.c -o $@ ++ $(CC) -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c c/$*.c -o $@ + + $(bdir)/pyx/%.o: + mkdir -p $(bdir)/pyx + ln -s -f `pwd`/pyx/$(ucs)/$*.c pyx/$*.c +- gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c pyx/$*.c -o $@ ++ $(CC) -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c pyx/$*.c -o $@ + + $(bdir)/%.o: +- gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c ext/readalign/$*.cc -o $@ ++ $(CC) -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC `$(python)-config --includes` -c ext/readalign/$*.cc -o $@ + + build-stampy: $(objs) + cp -r build/python2.7/* . + @if [ $(platform) = Linux ]; then \ +- g++ `$(python)-config --ldflags` -pthread -shared $(objs) -o maptools.so ; \ ++ $(CXX) `$(python)-config --ldflags` -pthread -shared $(objs) -o maptools.so ; \ + else \ +- g++ `$(python)-config --ldflags` -pthread -dynamiclib $(objs) -o maptools.so ; \ ++ $(CXX) `$(python)-config --ldflags` -pthread -dynamiclib $(objs) -o maptools.so ; \ + fi + -- GitLab From 104319a4179492a63772b13e76cb8d051b248f09 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:23:37 +0200 Subject: [PATCH 0861/1311] missing dep --- .../s/SUNDIALS/SUNDIALS-2.7.0-foss-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/s/SUNDIALS/SUNDIALS-2.7.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SUNDIALS/SUNDIALS-2.7.0-foss-2016b.eb b/easybuild/easyconfigs/s/SUNDIALS/SUNDIALS-2.7.0-foss-2016b.eb new file mode 100644 index 0000000000..21d1aa5067 --- /dev/null +++ b/easybuild/easyconfigs/s/SUNDIALS/SUNDIALS-2.7.0-foss-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'CMakeMake' + +name = 'SUNDIALS' +version = '2.7.0' + +homepage = 'http://computation.llnl.gov/projects/sundials' +description = "SUNDIALS: SUite of Nonlinear and DIfferential/ALgebraic Equation Solvers" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['http://computation.llnl.gov/projects/sundials/download/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('CMake', '3.6.2')] + +separate_build_dir = True + +configopts = "-DMPI_ENABLE=ON -DOPENMP_ENABLE=ON -DLAPACK_ENABLE=ON" + +solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in solvers + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in solvers + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in solvers] + ['include/%s' % s for s in solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +moduleclass = 'math' -- GitLab From f37de2420a9c1c3105717e39e765a76951c55205 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:23:57 +0200 Subject: [PATCH 0862/1311] missing dep --- .../easyconfigs/e/Eigen/Eigen-3.3.2-foss-2016b.eb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-foss-2016b.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-foss-2016b.eb new file mode 100644 index 0000000000..bab8954a19 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.2-foss-2016b.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.3.2' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' -- GitLab From 3be2fdf53413ebf2aa43b7df16ce006bb80cfd60 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:24:19 +0200 Subject: [PATCH 0863/1311] missing dep --- .../easyconfigs/f/fmt/fmt-3.0.1-foss-2016b.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/f/fmt/fmt-3.0.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/f/fmt/fmt-3.0.1-foss-2016b.eb b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-foss-2016b.eb new file mode 100644 index 0000000000..6faff2689b --- /dev/null +++ b/easybuild/easyconfigs/f/fmt/fmt-3.0.1-foss-2016b.eb @@ -0,0 +1,24 @@ +easyblock = 'CMakeMake' + +name = 'fmt' +version = '3.0.1' + +homepage = 'http://fmtlib.net/' +description = "fmt (formerly cppformat) is an open-source formatting library." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/fmtlib/fmt/releases/download/%(version)s/'] +sources = ['fmt-%(version)s.zip'] + +builddependencies = [('CMake', '3.7.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libfmt.a'], + 'dirs': ['include/fmt', 'lib/cmake'], +} + +moduleclass = 'lib' -- GitLab From bb9e516ef8adbfa25e3e8b9bc65cd1a2118a0e97 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:24:36 +0200 Subject: [PATCH 0864/1311] missing dep --- .../googletest/googletest-1.8.0-foss-2016b.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/g/googletest/googletest-1.8.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/googletest/googletest-1.8.0-foss-2016b.eb b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-foss-2016b.eb new file mode 100644 index 0000000000..51ca2d0db0 --- /dev/null +++ b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-foss-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'CMakeMake' + +name = 'googletest' +version = '1.8.0' + +homepage = 'https://github.com/google/googletest' +description = "Google's C++ test framework" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/google/googletest/archive/'] +sources = ['release-%(version)s.tar.gz'] + +builddependencies = [('CMake', '3.7.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libgmock.a', 'lib/libgmock_main.a', 'lib/libgtest.a', 'lib/libgtest_main.a'], + 'dirs': ['include/gmock', 'include/gtest'], +} + +moduleclass = 'tools' -- GitLab From ce46e440b36dd05543bf1c0982a03360faf138a8 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:24:59 +0200 Subject: [PATCH 0865/1311] missing dep --- .../SCons-2.5.1-foss-2016b-Python-2.7.12.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/s/SCons/SCons-2.5.1-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/s/SCons/SCons-2.5.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..40cbf3c559 --- /dev/null +++ b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'SCons' +version = '2.5.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.scons.org/' +description = "SCons is a software construction tool." + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +dependencies = [('Python', '2.7.12')] + +sanity_check_paths = { + 'files': ['bin/scons', 'bin/scons-time', 'bin/sconsign'], + 'dirs': ['lib/%(namelower)s-%(version)s/%(name)s'], +} + +options = {'modulename': False} + +moduleclass = 'devel' -- GitLab From e653637f60899545e584b8abce4485607356e097 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 4 Apr 2017 10:25:20 +0200 Subject: [PATCH 0866/1311] missing dep --- .../3to2-1.1.1-foss-2016b-Python-2.7.12.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/0/3to2/3to2-1.1.1-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/0/3to2/3to2-1.1.1-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/0/3to2/3to2-1.1.1-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..5236c8830e --- /dev/null +++ b/easybuild/easyconfigs/0/3to2/3to2-1.1.1-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = '3to2' +version = '1.1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/3to2' +description = """lib3to2 is a set of fixers that are intended to backport code written for Python version 3.x + into Python version 2.x.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_ZIP] + +dependencies = [('Python', '2.7.12')] + +options = {'modulename': 'lib3to2'} + +sanity_check_paths = { + 'files': ['bin/3to2'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From ad5231b3ecf0c03a913ffabe6c000a7f969d3399 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 4 Apr 2017 13:10:31 +0200 Subject: [PATCH 0867/1311] adding easyconfigs: Sambamba-0.6.6.eb --- .../easyconfigs/s/Sambamba/Sambamba-0.6.6.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb diff --git a/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb new file mode 100644 index 0000000000..cd17c8d34d --- /dev/null +++ b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Tarball' + +name = 'Sambamba' +version = '0.6.6' + +homepage = 'http://lomereiter.github.io/sambamba/' +description = """Sambamba is a high performance modern robust and fast tool (and library), + written in the D programming language, for working with SAM and BAM files. Current functionality + is an important subset of samtools functionality, including view, index, sort, markdup, and depth""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = ['https://github.com/lomereiter/sambamba/releases/download/v%(version)s/'] +sources = ['%(namelower)s_v%(version)s_linux.tar.bz2'] + +sanity_check_paths = { + 'files': ['sambamba_v%(version)s'], + 'dirs': [], +} + +modextrapaths = { + 'PATH': "", +} + +postinstallcmds = ['cd %(installdir)s && ln -s sambamba_v%(version)s sambamba',] + +moduleclass = 'bio' -- GitLab From 1a436e8b4ff18fd3e7d68944ff2f6a851cd46d02 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 13:16:24 +0200 Subject: [PATCH 0868/1311] style fixes --- .../s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb index 55c7310c7e..a99c1c0912 100644 --- a/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb @@ -16,10 +16,11 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['https://github.com/GregoryFaust/samblaster/archive/'] sources = ['v.%(version)s.tar.gz'] -files_to_copy = [(['samblaster'], 'bin/'), - 'README.md', - 'SAMBLASTER_Supplemental.pdf', - 'LICENSE.txt', +files_to_copy = [ + (['samblaster'], 'bin/'), + 'README.md', + 'SAMBLASTER_Supplemental.pdf', + 'LICENSE.txt', ] sanity_check_paths = { -- GitLab From e96add50c8edc330c81ed35a3bf500d241a9b126 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 4 Apr 2017 13:41:54 +0200 Subject: [PATCH 0869/1311] adding easyconfigs: Perl-5.24.1-intel-2017a.eb --- .../p/Perl/Perl-5.24.1-intel-2017a.eb | 893 ++++++++++++++++++ 1 file changed, 893 insertions(+) create mode 100644 easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb new file mode 100644 index 0000000000..a2c5b790f2 --- /dev/null +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb @@ -0,0 +1,893 @@ +name = 'Perl' +version = '5.24.1' + +homepage = 'https://www.perl.org/' +description = """Larry Wall's Practical Extraction and Report Language""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.cpan.org/src/%(version_major)s.0'] +sources = [SOURCELOWER_TAR_GZ] + +exts_list = [ + ('Config::General', '2.63', { + 'source_tmpl': 'Config-General-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], + }), + ('File::Listing', '6.04', { + 'source_tmpl': 'File-Listing-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('ExtUtils::InstallPaths', '0.011', { + 'source_tmpl': 'ExtUtils-InstallPaths-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Helpers', '0.026', { + 'source_tmpl': 'ExtUtils-Helpers-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Test::Harness', '3.38', { + 'source_tmpl': 'Test-Harness-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('ExtUtils::Config', '0.008', { + 'source_tmpl': 'ExtUtils-Config-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Build::Tiny', '0.039', { + 'source_tmpl': 'Module-Build-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('aliased', '0.34', { + 'source_tmpl': 'aliased-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Text::Glob', '0.11', { + 'source_tmpl': 'Text-Glob-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('Regexp::Common', '2016060801', { + 'source_tmpl': 'Regexp-Common-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], + }), + ('GO::Utils', '0.15', { + 'source_tmpl': 'go-perl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CM/CMUNGALL'], + }), + ('Module::Pluggable', '5.2', { + 'source_tmpl': 'Module-Pluggable-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SI/SIMONW'], + }), + ('Test::Fatal', '0.014', { + 'source_tmpl': 'Test-Fatal-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Warnings', '0.026', { + 'source_tmpl': 'Test-Warnings-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('File::ShareDir::Install', '0.11', { + 'source_tmpl': 'File-ShareDir-Install-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('DateTime::Locale', '1.16', { + 'source_tmpl': 'DateTime-Locale-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('DateTime::TimeZone', '2.11', { + 'source_tmpl': 'DateTime-TimeZone-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Test::Requires', '0.10', { + 'source_tmpl': 'Test-Requires-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM'], + }), + ('Module::Implementation', '0.09', { + 'source_tmpl': 'Module-Implementation-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Module::Build', '0.4222', { + 'source_tmpl': 'Module-Build-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Module::Runtime', '0.014', { + 'source_tmpl': 'Module-Runtime-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM'], + }), + ('Try::Tiny', '0.28', { + 'source_tmpl': 'Try-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Params::Validate', '1.26', { + 'source_tmpl': 'Params-Validate-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('List::MoreUtils', '0.418', { + 'source_tmpl': 'List-MoreUtils-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Exporter::Tiny', '0.044', { + 'source_tmpl': 'Exporter-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOBYINK'], + }), + ('Class::Singleton', '1.5', { + 'source_tmpl': 'Class-Singleton-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHAY'], + }), + ('DateTime', '1.42', { + 'source_tmpl': 'DateTime-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('File::Find::Rule::Perl', '1.15', { + 'source_tmpl': 'File-Find-Rule-Perl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Readonly', '2.05', { + 'source_tmpl': 'Readonly-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SA/SANKO'], + }), + ('Git', '0.41', { + 'source_tmpl': 'Git-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MS/MSOUTH'], + }), + ('Tree::DAG_Node', '1.29', { + 'source_tmpl': 'Tree-DAG_Node-%(version)s.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Template', '2.26', { + 'source_tmpl': 'Template-Toolkit-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('FreezeThaw', '0.5001', { + 'source_tmpl': 'FreezeThaw-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules'], + }), + ('DBI', '1.636', { + 'source_tmpl': 'DBI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TI/TIMB'], + }), + ('DBD::SQLite', '1.54', { + 'source_tmpl': 'DBD-SQLite-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI'], + }), + ('Math::Bezier', '0.01', { + 'source_tmpl': 'Math-Bezier-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AB/ABW'], + }), + ('Archive::Extract', '0.80', { + 'source_tmpl': 'Archive-Extract-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('DBIx::Simple', '1.35', { + 'source_tmpl': 'DBIx-Simple-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JU/JUERD'], + }), + ('Shell', '0.73', { + 'source_tmpl': 'Shell-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FE/FERREIRA'], + }), + ('File::Spec', '3.62', { + 'source_tmpl': 'PathTools-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Simple', '1.302078', { + 'source_tmpl': 'Test-Simple-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Set::Scalar', '1.29', { + 'source_tmpl': 'Set-Scalar-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAVIDO'], + }), + ('IO::Stringy', '2.111', { + 'source_tmpl': 'IO-stringy-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DS/DSKOLL'], + }), + ('Encode::Locale', '1.05', { + 'source_tmpl': 'Encode-Locale-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('XML::SAX::Base', '1.09', { + 'source_tmpl': 'XML-SAX-Base-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('XML::NamespaceSupport', '1.12', { + 'source_tmpl': 'XML-NamespaceSupport-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN'], + }), + ('XML::SAX', '0.99', { + 'source_tmpl': 'XML-SAX-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('Test::LeakTrace', '0.15', { + 'source_tmpl': 'Test-LeakTrace-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GF/GFUJI'], + }), + ('Test::Exception', '0.43', { + 'source_tmpl': 'Test-Exception-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Text::Table', '1.132', { + 'source_tmpl': 'Text-Table-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('MIME::Types', '2.13', { + 'source_tmpl': 'MIME-Types-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], + }), + ('Module::Build::XSUtil', '0.16', { + 'source_tmpl': 'Module-Build-XSUtil-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO'], + }), + ('Tie::Function', '0.02', { + 'source_tmpl': 'Tie-Function-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAVIDNICO/handy_tied_functions'], + }), + ('Template::Plugin::Number::Format', '1.06', { + 'source_tmpl': 'Template-Plugin-Number-Format-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DARREN'], + }), + ('HTML::Parser', '3.72', { + 'source_tmpl': 'HTML-Parser-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Date::Handler', '1.2', { + 'source_tmpl': 'Date-Handler-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ'], + }), + ('Params::Util', '1.07', { + 'source_tmpl': 'Params-Util-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('IO::HTML', '1.001', { + 'source_tmpl': 'IO-HTML-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], + }), + ('Data::Grove', '0.08', { + 'source_tmpl': 'libxml-perl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KM/KMACLEOD'], + }), + ('Class::ISA', '0.36', { + 'source_tmpl': 'Class-ISA-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SM/SMUELLER'], + }), + ('URI', '1.71', { + 'source_tmpl': 'URI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Ima::DBI', '0.35', { + 'source_tmpl': 'Ima-DBI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERRIN'], + }), + ('Tie::IxHash', '1.23', { + 'source_tmpl': 'Tie-IxHash-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CH/CHORNY'], + }), + ('GO', '0.04', { + 'source_tmpl': 'go-db-perl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SJ/SJCARBON'], + }), + ('Class::DBI::SQLite', '0.11', { + 'source_tmpl': 'Class-DBI-SQLite-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('Pod::POM', '2.01', { + 'source_tmpl': 'Pod-POM-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Math::Round', '0.07', { + 'source_tmpl': 'Math-Round-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], + }), + ('Text::Diff', '1.44', { + 'source_tmpl': 'Text-Diff-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Log::Message::Simple', '0.10', { + 'source_tmpl': 'Log-Message-Simple-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('IO::Socket::SSL', '2.047', { + 'source_tmpl': 'IO-Socket-SSL-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SU/SULLR'], + }), + ('Fennec::Lite', '0.004', { + 'source_tmpl': 'Fennec-Lite-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Sub::Uplevel', '0.2800', { + 'source_tmpl': 'Sub-Uplevel-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('Meta::Builder', '0.003', { + 'source_tmpl': 'Meta-Builder-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Exporter::Declare', '0.114', { + 'source_tmpl': 'Exporter-Declare-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Getopt::Long', '2.49.1', { + 'source_tmpl': 'Getopt-Long-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JV/JV'], + }), + ('Log::Message', '0.08', { + 'source_tmpl': 'Log-Message-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Mouse', 'v2.4.9', { + 'source_tmpl': 'Mouse-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('Test::Version', '2.05', { + 'source_tmpl': 'Test-Version-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PL/PLICEASE'], + }), + ('DBIx::Admin::TableInfo', '3.03', { + 'source_tmpl': 'DBIx-Admin-TableInfo-%(version)s.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Net::HTTP', '6.13', { + 'source_tmpl': 'Net-HTTP-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/O/OA/OALDERS'], + }), + ('Test::Deep', '1.126', { + 'source_tmpl': 'Test-Deep-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Warn', '0.32', { + 'source_tmpl': 'Test-Warn-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BIGJ'], + }), + ('MRO::Compat', '0.13', { + 'source_tmpl': 'MRO-Compat-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('Moo', '2.003002', { + 'source_tmpl': 'Moo-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('Hash::Merge', '0.200', { + 'source_tmpl': 'Hash-Merge-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('SQL::Abstract', '1.84', { + 'source_tmpl': 'SQL-Abstract-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IL/ILMARI'], + }), + ('HTML::Form', '6.03', { + 'source_tmpl': 'HTML-Form-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('File::Copy::Recursive', '0.38', { + 'source_tmpl': 'File-Copy-Recursive-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DM/DMUEY'], + }), + ('Number::Compare', '0.03', { + 'source_tmpl': 'Number-Compare-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('IPC::Run', '0.94', { + 'source_tmpl': 'IPC-Run-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('HTML::Entities::Interpolate', '1.10', { + 'source_tmpl': 'HTML-Entities-Interpolate-%(version)s.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('Test::ClassAPI', '1.06', { + 'source_tmpl': 'Test-ClassAPI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Test::Most', '0.35', { + 'source_tmpl': 'Test-Most-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/O/OV/OVID'], + }), + ('Class::Accessor', '0.34', { + 'source_tmpl': 'Class-Accessor-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Test::Differences', '0.64', { + 'source_tmpl': 'Test-Differences-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DC/DCANTRELL'], + }), + ('HTTP::Tiny', '0.070', { + 'source_tmpl': 'HTTP-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('Package::DeprecationManager', '0.17', { + 'source_tmpl': 'Package-DeprecationManager-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Digest::SHA1', '2.13', { + 'source_tmpl': 'Digest-SHA1-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Date::Language', '2.30', { + 'source_tmpl': 'TimeDate-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GB/GBARR'], + }), + ('version', '0.9917', { + 'source_tmpl': 'version-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JP/JPEACOCK'], + }), + ('Sub::Uplevel', '0.2800', { + 'source_tmpl': 'Sub-Uplevel-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('XML::Bare', '0.53', { + 'source_tmpl': 'XML-Bare-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CO/CODECHILD'], + 'patches': ['XML-Bare-0.53_icc.patch'], + }), + ('Dist::CheckConflicts', '0.11', { + 'source_tmpl': 'Dist-CheckConflicts-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('Sub::Name', '0.21', { + 'source_tmpl': 'Sub-Name-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Time::Piece', '1.31', { + 'source_tmpl': 'Time-Piece-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ES/ESAYM'], + }), + ('Digest::HMAC', '1.03', { + 'source_tmpl': 'Digest-HMAC-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('HTTP::Negotiate', '6.01', { + 'source_tmpl': 'HTTP-Negotiate-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('MIME::Lite', '3.030', { + 'source_tmpl': 'MIME-Lite-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Crypt::Rijndael', '1.13', { + 'source_tmpl': 'Crypt-Rijndael-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('B::Lint', '1.20', { + 'source_tmpl': 'B-Lint-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Canary::Stability', '2012', { + 'source_tmpl': 'Canary-Stability-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN'], + }), + ('AnyEvent', '7.13', { + 'source_tmpl': 'AnyEvent-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN'], + }), + ('Object::Accessor', '0.48', { + 'source_tmpl': 'Object-Accessor-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Data::UUID', '1.221', { + 'source_tmpl': 'Data-UUID-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Test::Pod', '1.51', { + 'source_tmpl': 'Test-Pod-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('AppConfig', '1.71', { + 'source_tmpl': 'AppConfig-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/N/NE/NEILB'], + }), + ('Net::SMTP::SSL', '1.04', { + 'source_tmpl': 'Net-SMTP-SSL-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('XML::Tiny', '2.06', { + 'source_tmpl': 'XML-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DC/DCANTRELL'], + }), + ('HTML::Tagset', '3.20', { + 'source_tmpl': 'HTML-Tagset-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PETDANCE'], + }), + ('HTML::Tree', '5.03', { + 'source_tmpl': 'HTML-Tree-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], + }), + ('Devel::GlobalDestruction', '0.14', { + 'source_tmpl': 'Devel-GlobalDestruction-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('WWW::RobotRules', '6.02', { + 'source_tmpl': 'WWW-RobotRules-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Expect', '1.33', { + 'source_tmpl': 'Expect-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JA/JACOBY'], + }), + ('Term::UI', '0.46', { + 'source_tmpl': 'Term-UI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('Net::SNMP', 'v6.0.1', { + 'source_tmpl': 'Net-SNMP-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DT/DTOWN'], + }), + ('XML::SAX::Writer', '0.56', { + 'source_tmpl': 'XML-SAX-Writer-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN'], + }), + ('Statistics::Descriptive', '3.0612', { + 'source_tmpl': 'Statistics-Descriptive-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Class::Load', '0.23', { + 'source_tmpl': 'Class-Load-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('LWP::Simple', '6.25', { + 'source_tmpl': 'libwww-perl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/O/OA/OALDERS'], + }), + ('Time::Piece::MySQL', '0.06', { + 'source_tmpl': 'Time-Piece-MySQL-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Package::Stash::XS', '0.28', { + 'source_tmpl': 'Package-Stash-XS-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('GD::Graph', '1.54', { + 'source_tmpl': 'GDGraph-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RU/RUZ'], + }), + ('Set::Array', '0.30', { + 'source_tmpl': 'Set-Array-%(version)s.tgz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RS/RSAVAGE'], + }), + ('boolean', '0.46', { + 'source_tmpl': 'boolean-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], + }), + ('Number::Format', '1.75', { + 'source_tmpl': 'Number-Format-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/W/WR/WRW'], + }), + ('Data::Stag', '0.14', { + 'source_tmpl': 'Data-Stag-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CM/CMUNGALL'], + }), + ('Test::NoWarnings', '1.04', { + 'source_tmpl': 'Test-NoWarnings-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Crypt::DES', '2.07', { + 'source_tmpl': 'Crypt-DES-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DP/DPARIS'], + }), + ('Exporter', '5.72', { + 'source_tmpl': 'Exporter-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Class::Inspector', '1.31', { + 'source_tmpl': 'Class-Inspector-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PL/PLICEASE'], + }), + ('Parse::RecDescent', '1.967014', { + 'source_tmpl': 'Parse-RecDescent-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/J/JT/JTBRAUN'], + }), + ('Carp', '1.38', { + 'source_tmpl': 'Carp-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('XML::XPath', '1.40', { + 'source_tmpl': 'XML-XPath-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MANWAR'], + }), + ('Capture::Tiny', '0.46', { + 'source_tmpl': 'Capture-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('JSON', '2.90', { + 'source_tmpl': 'JSON-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA'], + }), + ('Sub::Exporter', '0.987', { + 'source_tmpl': 'Sub-Exporter-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Class::Load::XS', '0.09', { + 'source_tmpl': 'Class-Load-XS-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Set::IntSpan::Fast', '1.15', { + 'source_tmpl': 'Set-IntSpan-Fast-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AN/ANDYA'], + }), + ('Sub::Exporter::Progressive', '0.001013', { + 'source_tmpl': 'Sub-Exporter-Progressive-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FR/FREW'], + }), + ('Data::Dumper::Concise', '2.022', { + 'source_tmpl': 'Data-Dumper-Concise-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FR/FREW'], + }), + ('File::Slurp::Tiny', '0.004', { + 'source_tmpl': 'File-Slurp-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], + }), + ('Algorithm::Diff', '1.1903', { + 'source_tmpl': 'Algorithm-Diff-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TY/TYEMQ'], + }), + ('AnyData', '0.12', { + 'source_tmpl': 'AnyData-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Text::Iconv', '1.7', { + 'source_tmpl': 'Text-Iconv-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MP/MPIOTR'], + }), + ('Class::Data::Inheritable', '0.08', { + 'source_tmpl': 'Class-Data-Inheritable-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('Text::Balanced', '2.03', { + 'source_tmpl': 'Text-Balanced-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHAY'], + }), + ('strictures', '2.000003', { + 'source_tmpl': 'strictures-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('Switch', '2.17', { + 'source_tmpl': 'Switch-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CH/CHORNY'], + }), + ('File::Which', '1.21', { + 'source_tmpl': 'File-Which-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PL/PLICEASE'], + }), + ('Email::Date::Format', '1.005', { + 'source_tmpl': 'Email-Date-Format-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Error', '0.17024', { + 'source_tmpl': 'Error-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Mock::Quick', '1.111', { + 'source_tmpl': 'Mock-Quick-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/EX/EXODIST'], + }), + ('Text::CSV', '1.92', { + 'source_tmpl': 'Text-CSV-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI'], + }), + ('Test::Output', '1.031', { + 'source_tmpl': 'Test-Output-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BD/BDFOY'], + }), + ('Class::DBI', 'v3.0.17', { + 'source_tmpl': 'Class-DBI-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('List::AllUtils', '0.14', { + 'source_tmpl': 'List-AllUtils-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('UNIVERSAL::moniker', '0.08', { + 'source_tmpl': 'UNIVERSAL-moniker-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KASEI'], + }), + ('Exception::Class', '1.42', { + 'source_tmpl': 'Exception-Class-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('File::CheckTree', '4.42', { + 'source_tmpl': 'File-CheckTree-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Math::VecStat', '0.08', { + 'source_tmpl': 'Math-VecStat-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], + }), + ('Pod::LaTeX', '0.61', { + 'source_tmpl': 'Pod-LaTeX-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TJ/TJENNESS'], + }), + ('Eval::Closure', '0.14', { + 'source_tmpl': 'Eval-Closure-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('HTTP::Request', '6.11', { + 'source_tmpl': 'HTTP-Message-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('XML::Twig', '3.52', { + 'source_tmpl': 'XML-Twig-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIROD'], + }), + ('IO::String', '1.08', { + 'source_tmpl': 'IO-String-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('XML::Simple', '2.22', { + 'source_tmpl': 'XML-Simple-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GR/GRANTM'], + }), + ('Sub::Install', '0.928', { + 'source_tmpl': 'Sub-Install-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('HTTP::Cookies', '6.03', { + 'source_tmpl': 'HTTP-Cookies-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/O/OA/OALDERS'], + }), + ('Pod::Plainer', '1.04', { + 'source_tmpl': 'Pod-Plainer-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RM/RMBARKER'], + }), + ('Test::Exception::LessClever', '0.009', { + 'source_tmpl': 'Test-Exception-LessClever-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('LWP::MediaTypes', '6.02', { + 'source_tmpl': 'LWP-MediaTypes-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Scalar::Util', '1.47', { + 'source_tmpl': 'Scalar-List-Utils-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/P/PE/PEVANS'], + }), + ('Data::Section::Simple', '0.07', { + 'source_tmpl': 'Data-Section-Simple-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('Class::Trigger', '0.14', { + 'source_tmpl': 'Class-Trigger-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA'], + }), + ('HTTP::Daemon', '6.01', { + 'source_tmpl': 'HTTP-Daemon-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('File::HomeDir', '1.00', { + 'source_tmpl': 'File-HomeDir-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('HTTP::Date', '6.02', { + 'source_tmpl': 'HTTP-Date-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GAAS'], + }), + ('Authen::SASL', '2.16', { + 'source_tmpl': 'Authen-SASL-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GB/GBARR'], + }), + ('Clone', '0.38', { + 'source_tmpl': 'Clone-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/G/GA/GARU'], + }), + ('Data::Types', '0.09', { + 'source_tmpl': 'Data-Types-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DW/DWHEELER'], + }), + ('Import::Into', '1.002005', { + 'source_tmpl': 'Import-Into-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/H/HA/HAARG'], + }), + ('DateTime::Tiny', '1.06', { + 'source_tmpl': 'DateTime-Tiny-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN'], + }), + ('DBD::AnyData', '0.110', { + 'source_tmpl': 'DBD-AnyData-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('Text::Format', '0.60', { + 'source_tmpl': 'Text-Format-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF'], + }), + ('Devel::CheckCompiler', '0.07', { + 'source_tmpl': 'Devel-CheckCompiler-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], + }), + ('Log::Handler', '0.88', { + 'source_tmpl': 'Log-Handler-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BL/BLOONIX'], + }), + ('DBIx::ContextualFetch', '1.03', { + 'source_tmpl': 'DBIx-ContextualFetch-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TM/TMTM'], + }), + ('Devel::StackTrace', '2.02', { + 'source_tmpl': 'Devel-StackTrace-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DR/DROLSKY'], + }), + ('Term::ReadKey', '2.14', { + 'source_tmpl': 'TermReadKey-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KJ/KJALB'], + }), + ('Set::IntSpan', '1.19', { + 'source_tmpl': 'Set-IntSpan-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SW/SWMCD'], + }), + ('Moose', '2.2004', { + 'source_tmpl': 'Moose-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/E/ET/ETHER'], + }), + ('Algorithm::Dependency', '1.110', { + 'source_tmpl': 'Algorithm-Dependency-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/A/AD/ADAMK'], + }), + ('Font::TTF', '1.06', { + 'source_tmpl': 'Font-TTF-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BH/BHALLISSY'], + }), + ('IPC::Run3', '0.048', { + 'source_tmpl': 'IPC-Run3-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('File::Find::Rule', '0.34', { + 'source_tmpl': 'File-Find-Rule-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RC/RCLAMP'], + }), + ('SQL::Statement', '1.410', { + 'source_tmpl': 'SQL-Statement-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RE/REHSACK'], + }), + ('File::Slurp', '9999.19', { + 'source_tmpl': 'File-Slurp-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/U/UR/URI'], + }), + ('Package::Stash', '0.37', { + 'source_tmpl': 'Package-Stash-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/D/DO/DOY'], + }), + ('Data::OptList', '0.110', { + 'source_tmpl': 'Data-OptList-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('CPANPLUS', '0.9164', { + 'source_tmpl': 'CPANPLUS-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], + }), + ('IO::Tty', '1.12', { + 'source_tmpl': 'IO-Tty-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TODDR'], + }), + ('Text::Soundex', '3.05', { + 'source_tmpl': 'Text-Soundex-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RJ/RJBS'], + }), + ('Lingua::EN::PluralToSingular', '0.19', { + 'source_tmpl': 'Lingua-EN-PluralToSingular-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BK/BKB'], + }), + ('Want', '0.29', { + 'source_tmpl': 'Want-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/R/RO/ROBIN'], + }), + ('Cwd::Guard', '0.05', { + 'source_tmpl': 'Cwd-Guard-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], + }), + ('Bundle::BioPerl', '2.1.9', { + 'source_tmpl': 'Bundle-BioPerl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS'], + }), + ('Mail::Util', '2.18', { + 'source_tmpl': 'MailTools-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MARKOV'], + }), + ('Text::Template', '1.47', { + 'source_tmpl': 'Text-Template-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MS/MSCHOUT'], + }), + ('PDF::API2', '2.031', { + 'source_tmpl': 'PDF-API2-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SS/SSIMMS'], + }), +] + +moduleclass = 'lang' -- GitLab From f47b5a553604438de699f09d452f750f51c4df1b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 4 Apr 2017 13:45:47 +0200 Subject: [PATCH 0870/1311] add comment with info on last update of Perl extensions --- easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb index a2c5b790f2..7186e3ec91 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb @@ -10,6 +10,8 @@ toolchainopts = {'pic': True} source_urls = ['http://www.cpan.org/src/%(version_major)s.0'] sources = [SOURCELOWER_TAR_GZ] +# !! order of extensions is important !! +# extensions updated on April 4th 2017 exts_list = [ ('Config::General', '2.63', { 'source_tmpl': 'Config-General-%(version)s.tar.gz', -- GitLab From f94439f39c75c014db0eb230041cbeac2d02d0c2 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 4 Apr 2017 14:28:30 +0100 Subject: [PATCH 0871/1311] adding easyconfigs: matplotlib-2.0.0-foss-2016b-Python-2.7.12.eb --- ...tplotlib-2.0.0-foss-2016b-Python-2.7.12.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..2f829b0767 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.12'), + ('freetype', '2.7'), + ('libpng', '1.6.26'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From 3cb81f831d69775ac510480c8dc116e468e78258 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 4 Apr 2017 14:54:03 +0100 Subject: [PATCH 0872/1311] adding easyconfigs: MultiQC-0.9-foss-2016b-Python-2.7.12.eb --- .../MultiQC-0.9-foss-2016b-Python-2.7.12.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..a7a94c8c8c --- /dev/null +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Adam Huffman +# The Francis Crick Institute +easyblock = 'PythonPackage' + +name = 'MultiQC' +version = '0.9' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://multiqc.info' +description = """Aggregate results from bioinformatics analyses across many samples into a single + report. + + MultiQC searches a given directory for analysis logs and compiles a HTML report. It's a general + use tool, perfect for summarising the output from numerous bioinformatics tools.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/ewels/MultiQC/archive'] + +dependencies = [ + ('Python', '2.7.12'), + ('matplotlib', '2.0.0', versionsuffix), +] + +sanity_check_paths = { + 'files': ['bin/%(namelower)s'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'bio' -- GitLab From e9dd3eee1b8bf54fae66b954aaf7705665188d6a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 4 Apr 2017 18:45:56 +0200 Subject: [PATCH 0873/1311] update imager extensions to 0.40.1 + add patch to fix compilation with Intel compilers --- .../r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 3 +- .../r/R/imager-0.3_fix-icpc-bool-cast.patch | 259 --------------- .../r/R/imager-0.40.1_fix-CImg-icpc.patch | 310 ++++++++++++++++++ 3 files changed, 312 insertions(+), 260 deletions(-) delete mode 100644 easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch create mode 100644 easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 01ebe2e855..7c666ff2ec 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -502,7 +502,8 @@ exts_list = [ ('bmp', '0.2', ext_options), ('readbitmap', '0.1-4', ext_options), ('purrr', '0.2.2', ext_options), - ('imager', '0.31', dict(ext_options.items() + [('patches', ['imager-0.3_fix-icpc-bool-cast.patch'])])), + ('downloader', '0.4', ext_options), + ('imager', '0.40.1', dict(ext_options.items() + [('patches', ['imager-0.40.1_fix-CImg-icpc.patch'])])), ] moduleclass = 'lang' diff --git a/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch b/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch deleted file mode 100644 index 8d994cb858..0000000000 --- a/easybuild/easyconfigs/r/R/imager-0.3_fix-icpc-bool-cast.patch +++ /dev/null @@ -1,259 +0,0 @@ -fix Intel compilation errors, partially based on https://github.com/dtschump/CImg/commit/d66a4e7f1b13594a572c22160c20e2bd3f231f6c -author: Kenneth Hoste (HPC-UGent) ---- imager/inst/include/CImg.h.orig 2016-08-31 16:30:10.000000000 +0200 -+++ imager/inst/include/CImg.h 2017-04-01 22:43:25.292695440 +0200 -@@ -17988,7 +17988,7 @@ - unsigned int ind = (unsigned int)mp.opcode[2]; - if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); - CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; -- if (img) { -+ if ((bool)img) { - if (mp.opcode[12]!=(ulongT)-1) { - const CImg M(&_mp_arg(12) + 1,dx,dy,dz,(unsigned int)mp.opcode[13],true); - img.draw_image(x,y,z,c,S,M,opacity,(float)_mp_arg(14)); -@@ -18107,10 +18107,10 @@ - if (off<0 || off>=whds) - switch (boundary_conditions) { - case 2 : // Periodic boundary -- if (img) return (double)img[cimg::mod(off,whds)]; -+ if ((bool)img) return (double)img[cimg::mod(off,whds)]; - return 0; - case 1 : // Neumann boundary -- if (img) return (double)(off<0?*img:img.back()); -+ if ((bool)img) return (double)(off<0?*img:img.back()); - return 0; - default : // Dirichet boundary - return 0; -@@ -18184,10 +18184,10 @@ - if (off<0 || off>=whds) - switch (boundary_conditions) { - case 2 : // Periodic boundary -- if (img) return (double)img[cimg::mod(off,whds)]; -+ if ((bool)img) return (double)img[cimg::mod(off,whds)]; - return 0; - case 1 : // Neumann boundary -- if (img) return (double)(off<0?*img:img.back()); -+ if ((bool)img) return (double)(off<0?*img:img.back()); - return 0; - default : // Dirichet boundary - return 0; -@@ -18257,10 +18257,10 @@ - if (off<0 || off>=whds) - switch (boundary_conditions) { - case 2 : // Periodic boundary -- if (img) return (double)img[cimg::mod(off,whds)]; -+ if ((bool)img) return (double)img[cimg::mod(off,whds)]; - return 0; - case 1 : // Neumann boundary -- if (img) return (double)(off<0?*img:img.back()); -+ if ((bool)img) return (double)(off<0?*img:img.back()); - return 0; - default : // Dirichet boundary - return 0; -@@ -18317,10 +18317,10 @@ - if (off<0 || off>=whds) - switch (boundary_conditions) { - case 2 : // Periodic boundary -- if (img) return (double)img(ind,cimg::mod(off,whds)); -+ if ((bool)img) return (double)img(ind,cimg::mod(off,whds)); - return 0; - case 1 : // Neumann boundary -- if (img) return (double)(off<0?*img:img.back()); -+ if ((bool)img) return (double)(off<0?*img:img.back()); - return 0; - default : // Dirichet boundary - return 0; -@@ -18590,7 +18590,7 @@ - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); - return cimg::type::nan(); - case 1 : // Neumann boundary -- if (img) { -+ if ((bool)img) { - ptrs = off<0?img._data:&img.back(); - cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); -@@ -18662,7 +18662,7 @@ - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); - return cimg::type::nan(); - case 1 : // Neumann boundary -- if (img) { -+ if ((bool)img) { - ptrs = off<0?img._data:&img.back(); - cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); -@@ -19579,7 +19579,7 @@ - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); - return cimg::type::nan(); - case 1 : // Neumann boundary -- if (img) { -+ if ((bool)img) { - ptrs = off<0?img._data:&img.back(); - cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); -@@ -19648,7 +19648,7 @@ - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); - return cimg::type::nan(); - case 1 : // Neumann boundary -- if (img) { -+ if ((bool)img) { - ptrs = off<0?img._data:&img.back(); - cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } - } else std::memset(ptrd,0,img._spectrum*sizeof(double)); -@@ -25664,14 +25664,15 @@ - x0 = ((int)xc%width()) - width(), - y0 = ((int)yc%height()) - height(), - z0 = ((int)zc%depth()) - depth(), -- c0 = ((int)cc%spectrum()) - spectrum(); -+ c0 = ((int)cc%spectrum()) - spectrum(), -+ dx = width(), dy = height(), dz = depth(), dc = spectrum(); - #ifdef cimg_use_openmp - #pragma omp parallel for collapse(3) if (res.size()>=65536) - #endif -- for (int c = c0; c<(int)sc; c+=spectrum()) -- for (int z = z0; z<(int)sz; z+=depth()) -- for (int y = y0; y<(int)sy; y+=height()) -- for (int x = x0; x<(int)sx; x+=width()) -+ for (int c = c0; c<(int)sc; c+=dc) -+ for (int z = z0; z<(int)sz; z+=dz) -+ for (int y = y0; y<(int)sy; y+=dy) -+ for (int x = x0; x<(int)sx; x+=dx) - res.draw_image(x,y,z,c,*this); - } break; - case 1 : { // Neumann boundary. -@@ -47059,7 +47060,7 @@ - const IplImage *img = 0; - for (unsigned int i = 0; iwidthStep - 3*img->width); - assign(img->width,img->height,1,3); - const unsigned char* ptrs = (unsigned char*)img->imageData; -@@ -52636,7 +52637,7 @@ - case 'x' : { // Along the X-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) { -+ if ((bool)img) { - dx+=img._width; - dy = cimg::max(dy,img._height); - dz = cimg::max(dz,img._depth); -@@ -52646,7 +52647,7 @@ - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) res.draw_image(pos, -+ if ((bool)img) res.draw_image(pos, - (int)(align*(dy - img._height)), - (int)(align*(dz - img._depth)), - (int)(align*(dc - img._spectrum)), -@@ -52657,7 +52658,7 @@ - case 'y' : { // Along the Y-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) { -+ if ((bool)img) { - dx = cimg::max(dx,img._width); - dy+=img._height; - dz = cimg::max(dz,img._depth); -@@ -52667,7 +52668,7 @@ - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) res.draw_image((int)(align*(dx - img._width)), -+ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), - pos, - (int)(align*(dz - img._depth)), - (int)(align*(dc - img._spectrum)), -@@ -52678,7 +52679,7 @@ - case 'z' : { // Along the Z-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) { -+ if ((bool)img) { - dx = cimg::max(dx,img._width); - dy = cimg::max(dy,img._height); - dz+=img._depth; -@@ -52688,7 +52689,7 @@ - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) res.draw_image((int)(align*(dx - img._width)), -+ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), - (int)(align*(dy - img._height)), - pos, - (int)(align*(dc - img._spectrum)), -@@ -52699,7 +52700,7 @@ - default : { // Along the C-axis. - cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) { -+ if ((bool)img) { - dx = cimg::max(dx,img._width); - dy = cimg::max(dy,img._height); - dz = cimg::max(dz,img._depth); -@@ -52709,7 +52710,7 @@ - res.assign(dx,dy,dz,dc,0); - if (res) cimglist_for(*this,l) { - const CImg& img = (*this)[l]; -- if (img) res.draw_image((int)(align*(dx - img._width)), -+ if ((bool)img) res.draw_image((int)(align*(dx - img._width)), - (int)(align*(dy - img._height)), - (int)(align*(dz - img._depth)), - pos, -@@ -53957,7 +53958,7 @@ - CImg img; - try { img.load_pnm(filename_tmp2); } - catch (CImgException&) { stop_flag = true; } -- if (img) { img.move_to(*this); std::remove(filename_tmp2); } -+ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } - } - cimg::exception_mode(omode); - if (is_empty()) -@@ -54033,7 +54034,7 @@ - CImg img; - try { img.load_png(filename_tmp2); } - catch (CImgException&) { } -- if (img) { img.move_to(*this); std::remove(filename_tmp2); } -+ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } - else { // Try to read animated gif. - unsigned int i = 0; - for (bool stop_flag = false; !stop_flag; ++i) { -@@ -54042,7 +54043,7 @@ - CImg img; - try { img.load_png(filename_tmp2); } - catch (CImgException&) { stop_flag = true; } -- if (img) { img.move_to(*this); std::remove(filename_tmp2); } -+ if ((bool)img) { img.move_to(*this); std::remove(filename_tmp2); } - } - } - cimg::exception_mode(omode); ---- imager/src/Makevars.in.orig 2017-04-01 22:32:32.628591934 +0200 -+++ imager/src/Makevars.in 2017-04-01 22:32:40.968645087 +0200 -@@ -1,4 +1,5 @@ - - PKG_CPPFLAGS = @HAVE_OPENMP@ @OPENMP_CFLAGS@ @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_r_mode -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 - PKG_LIBS = @OPENMP_CFLAGS@ @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ $(RCPP_LDFLAGS) -- -+# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' -+PKG_CXXFLAGS = -wd308 ---- imager/MD5.orig 2016-09-12 15:08:55.000000000 +0200 -+++ imager/MD5 2017-04-01 22:44:16.943021224 +0200 -@@ -31,7 +31,7 @@ - 05e04a3bc5a858c40e001cc65b853dfc *inst/extdata/Leonardo_Birds.jpg - e1328ba2c55d5a72eb77e283c9630b90 *inst/extdata/parrots.png - daa5b7e30235689ad0444df37c88b7ff *inst/extdata/tennis_sif.mpeg --00de9e6b4c2066d28d7f8d9e251915cd *inst/include/CImg.h -+ea9acc61a3dd73452639c570af543d29 *inst/include/CImg.h - 034a9e8aab9e05094fd31ce9ea3bbae2 *inst/include/imager.h - 0c8aae8db902f96a8f8e323043eb1418 *inst/include/wrappers.h - be39be77874a0181ecd47b1a7a9af5dd *man/FFT.Rd -@@ -140,7 +140,7 @@ - a680472a2ef1eda48c1a9b90488543b5 *man/vanvliet.Rd - 08193940e20b440f614e4c7a2dbf82fb *man/warp.Rd - 429b25a38f282c30d5d178ad9efc3b1f *man/watershed.Rd --ab8f97aa6f15c67d1029e3eb5091853d *src/Makevars.in -+802ecbe76012c51adf729063804c793a *src/Makevars.in - 5ecf9e8577f31e535dee1c371e75a35f *src/Makevars.win - 78aff3a88c55983a329723eb1174a4ca *src/RcppExports.cpp - 8193f4fecd751c7d310d23b0faacd303 *src/colourspace.cpp diff --git a/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch b/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch new file mode 100644 index 0000000000..8f3e05fe69 --- /dev/null +++ b/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch @@ -0,0 +1,310 @@ +fix compilation issues with Intel compilers in CImg.h +cfr. https://github.com/dtschump/CImg/issues/123 and https://github.com/dahtah/imager/commit/b46e96efe0a9c596c9aca9d786123b10dd83adf2 +also include extra compiler option -wd308 to avoid 'member "std::complex::_M_value" is inaccessible' errors +patched composed by Kenneth Hoste (HPC-UGent) +--- imager/src/Makevars.in.orig 2017-04-01 22:32:32.628591934 +0200 ++++ imager/src/Makevars.in 2017-04-01 22:32:40.968645087 +0200 +@@ -1,4 +1,5 @@ + + PKG_CPPFLAGS = @HAVE_OPENMP@ @OPENMP_CFLAGS@ @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_r_mode -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 + PKG_LIBS = @OPENMP_CFLAGS@ @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ $(RCPP_LDFLAGS) +- ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CXXFLAGS = -wd308 +diff --git a/inst/include/CImg.h b/inst/include/CImg.h +index 213d864..922edf8 100755 +--- a/inst/include/CImg.h ++++ b/inst/include/CImg.h +@@ -15161,7 +15161,7 @@ namespace cimg_library_suffixed { + const CImg& img_input=CImg::const_empty(), CImg *const img_output=0, + const CImgList *const list_input=0, CImgList *const list_output=0, + const bool _is_fill=false): +- code(_code),p_break((CImg*)0 - 2), ++ code(_code),p_break((CImg*)(-2*sizeof(CImg))), + imgin(img_input),listin(list_input?*list_input:CImgList::const_empty()), + imgout(img_output?*img_output:CImg::empty()),listout(list_output?*list_output:CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),user_macro(0), +@@ -15222,6 +15222,7 @@ namespace cimg_library_suffixed { + memtype.assign(mem._width,1,1,1,0); + for (unsigned int i = 0; i<_cimg_mp_slot_x; ++i) memtype[i] = 1; + memtype[17] = 0; ++ memtype[_cimg_mp_slot_x] = memtype[_cimg_mp_slot_y] = memtype[_cimg_mp_slot_z] = memtype[_cimg_mp_slot_c] = -2; + mempos = _cimg_mp_slot_c + 1; + variable_pos.assign(8); + +@@ -15270,7 +15271,7 @@ namespace cimg_library_suffixed { + } + + _cimg_math_parser(): +- code(_code),p_code_end(0),p_break((CImg*)0 - 2), ++ code(_code),p_code_end(0),p_break((CImg*)(-2*sizeof(CImg))), + imgin(CImg::const_empty()),listin(CImgList::const_empty()), + imgout(CImg::empty()),listout(CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),debug_indent(0), +@@ -15301,7 +15302,7 @@ namespace cimg_library_suffixed { + unsigned int *pd = res._data; + int level = 0; + for (const char *ps = expr._data; *ps && level>=0; ++ps) { +- if (!next_is_escaped && *ps=='\\') next_is_escaped = true; ++ if (!is_escaped && !next_is_escaped && *ps=='\\') next_is_escaped = true; + if (!is_escaped && *ps=='\'') { // Non-escaped character + if (!mode && ps>expr._data && *(ps - 1)=='[') next_mode = mode = 2; // Start vector-string + else if (mode==2 && *(ps + 1)==']') next_mode = !mode; // End vector-string +@@ -20498,7 +20499,7 @@ namespace cimg_library_suffixed { + CImg S(&_mp_arg(1) + 1,dx,dy,dz,dc,true); + const float opacity = (float)_mp_arg(12); + +- if (img) { ++ if (img._data) { + if (mp.opcode[13]!=~0U) { // Opacity mask specified + const ulongT sizM = mp.opcode[14]; + if (sizM<(ulongT)dx*dy*dz) +@@ -20605,7 +20606,7 @@ namespace cimg_library_suffixed { + off = (longT)_mp_arg(2), + whds = (longT)img.size(); + if (off>=0 && off=0 && off=0 && off=0 && off::nan(); + } +- if (img) switch (boundary_conditions) { ++ if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } +- if (img) switch (boundary_conditions) { ++ if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } +- if (img) switch (boundary_conditions) { ++ if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } +- if (img) switch (boundary_conditions) { ++ if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff=65536)) +- for (int c = c0; c<(int)sc; c+=spectrum()) +- for (int z = z0; z<(int)sz; z+=depth()) +- for (int y = y0; y<(int)sy; y+=height()) +- for (int x = x0; x<(int)sx; x+=width()) ++ for (int c = c0; c<(int)sc; c+=dc) ++ for (int z = z0; z<(int)sz; z+=dz) ++ for (int y = y0; y<(int)sy; y+=dy) ++ for (int x = x0; x<(int)sx; x+=dx) + res.draw_image(x,y,z,c,*this); + } break; + case 1 : { // Neumann +@@ -34824,8 +34826,7 @@ namespace cimg_library_suffixed { + _sigma_x = sigma_x>=0?sigma_x:-sigma_x*_width/100, + _sigma_y = sigma_y>=0?sigma_y:-sigma_y*_height/100, + _sigma_z = sigma_z>=0?sigma_z:-sigma_z*_depth/100, +- __sigma_r = sigma_r>=0?sigma_r:-sigma_r*(edge_max - edge_min)/100, +- _sigma_r = std::max(0.1f,__sigma_r), ++ _sigma_r = sigma_r>=0?sigma_r:-sigma_r*(edge_max - edge_min)/100, + _sampling_x = sampling_x?sampling_x:std::max(_sigma_x,1.0f), + _sampling_y = sampling_y?sampling_y:std::max(_sigma_y,1.0f), + _sampling_z = sampling_z?sampling_z:std::max(_sigma_z,1.0f), +@@ -48076,9 +48077,13 @@ namespace cimg_library_suffixed { + else return load_other(filename); + #else + // Open file and check for PNG validity +- const char *volatile nfilename = filename; // two 'volatile' here to remove a g++ warning due to 'setjmp'. ++#if defined __GNUC__ ++ const char *volatile nfilename = filename; // Use 'volatile' to avoid (wrong) g++ warning. + std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"rb"); +- ++#else ++ const char *nfilename = filename; ++ std::FILE *nfile = file?file:cimg::fopen(nfilename,"rb"); ++#endif + unsigned char pngCheck[8] = { 0 }; + cimg::fread(pngCheck,8,(std::FILE*)nfile); + if (png_sig_cmp(pngCheck,0,8)) { +@@ -49017,11 +49022,11 @@ namespace cimg_library_suffixed { + rdr.ndim(2)?rdr.ndim(2):1, + rdr.ndim(3)?rdr.ndim(3):1, + rdr.ndim(4)?rdr.ndim(4):1); +- if(typeid(T)==typeid(unsigned char)) ++ if (typeid(T)==typeid(unsigned char)) + rdr.setup_read_byte(); +- else if(typeid(T)==typeid(int)) ++ else if (typeid(T)==typeid(int)) + rdr.setup_read_int(); +- else if(typeid(T)==typeid(double)) ++ else if (typeid(T)==typeid(double)) + rdr.setup_read_double(); + else + rdr.setup_read_float(); +@@ -49312,7 +49317,7 @@ namespace cimg_library_suffixed { + *item = *tmp1 = *tmp2 = 0; + out[0] = std::fscanf(file,"%63s",item._data); + out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; +- if(cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) ++ if (cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) + throw CImgIOException("CImg<%s>::load_inr(): INRIMAGE-4 header not found.", + pixel_type()); + +@@ -49342,17 +49347,17 @@ namespace cimg_library_suffixed { + tmp2._data); + } + } +- if(out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) ++ if (out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) + throw CImgIOException("CImg<%s>::load_inr(): Invalid dimensions (%d,%d,%d,%d) defined in header.", + pixel_type(), + out[0],out[1],out[2],out[3]); +- if(out[4]<0 || out[5]<0) ++ if (out[4]<0 || out[5]<0) + throw CImgIOException("CImg<%s>::load_inr(): Incomplete pixel type defined in header.", + pixel_type()); +- if(out[6]<0) ++ if (out[6]<0) + throw CImgIOException("CImg<%s>::load_inr(): Incomplete PIXSIZE field defined in header.", + pixel_type()); +- if(out[7]<0) ++ if (out[7]<0) + throw CImgIOException("CImg<%s>::load_inr(): Big/Little Endian coding type undefined in header.", + pixel_type()); + } +@@ -52161,9 +52166,16 @@ namespace cimg_library_suffixed { + "save_png(): Unable to save data in '(*FILE)' unless libpng is enabled.", + cimg_instance); + #else +- const char *volatile nfilename = filename; // two 'volatile' here to remove a g++ warning due to 'setjmp'. ++ ++#if defined __GNUC__ ++ const char *volatile nfilename = filename; // Use 'volatile' to avoid (wrong) g++ warning. + std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"wb"); + volatile double stmin, stmax = (double)max_min(stmin); ++#else ++ const char *nfilename = filename; ++ std::FILE *nfile = file?file:cimg::fopen(nfilename,"wb"); ++ double stmin, stmax = (double)max_min(stmin); ++#endif + + if (_depth>1) + cimg::warn(_cimg_instance +@@ -52188,7 +52200,7 @@ namespace cimg_library_suffixed { + png_error_ptr user_error_fn = 0, user_warning_fn = 0; + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,user_error_ptr, user_error_fn, + user_warning_fn); +- if(!png_ptr){ ++ if (!png_ptr){ + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "save_png(): Failed to initialize 'png_ptr' structure when saving file '%s'.", +@@ -52921,17 +52933,17 @@ namespace cimg_library_suffixed { + wtr.open(filename, imitate_file); + else { + minc::minc_info di; +- if(width()) di.push_back(minc::dim_info(width(),width()*0.5,-1,minc::dim_info::DIM_X)); +- if(height()) di.push_back(minc::dim_info(height(),height()*0.5,-1,minc::dim_info::DIM_Y)); +- if(depth()) di.push_back(minc::dim_info(depth(),depth()*0.5,-1,minc::dim_info::DIM_Z)); +- if(spectrum()) di.push_back(minc::dim_info(spectrum(),spectrum()*0.5,-1,minc::dim_info::DIM_TIME)); ++ if (width()) di.push_back(minc::dim_info(width(),width()*0.5,-1,minc::dim_info::DIM_X)); ++ if (height()) di.push_back(minc::dim_info(height(),height()*0.5,-1,minc::dim_info::DIM_Y)); ++ if (depth()) di.push_back(minc::dim_info(depth(),depth()*0.5,-1,minc::dim_info::DIM_Z)); ++ if (spectrum()) di.push_back(minc::dim_info(spectrum(),spectrum()*0.5,-1,minc::dim_info::DIM_TIME)); + wtr.open(filename,di,1,NC_FLOAT,0); + } +- if(typeid(T)==typeid(unsigned char)) ++ if (typeid(T)==typeid(unsigned char)) + wtr.setup_write_byte(); +- else if(typeid(T)==typeid(int)) ++ else if (typeid(T)==typeid(int)) + wtr.setup_write_int(); +- else if(typeid(T)==typeid(double)) ++ else if (typeid(T)==typeid(double)) + wtr.setup_write_double(); + else + wtr.setup_write_float(); +@@ -56443,7 +56455,7 @@ namespace cimg_library_suffixed { + } + if (disp.is_resized()) { disp.resize(false); visu0.assign(); } + if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} +- else if (ym>=visu.height() - 13) { if(text_down) { visu.assign(); text_down = false; }} ++ else if (ym>=visu.height() - 13) { if (text_down) { visu.assign(); text_down = false; }} + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; +@@ -57564,7 +57576,7 @@ namespace cimg_library_suffixed { + if (nlast_frame>=nb_images) nlast_frame = nb_images - 1; + assign(1 + (nlast_frame - nfirst_frame)/nstep_frame); + TIFFSetDirectory(tif,0); +-#if cimg_verbosity>=3 ++#if cimg_verbosity<3 + TIFFSetWarningHandler(0); + TIFFSetErrorHandler(0); + #endif +@@ -58324,7 +58336,6 @@ namespace cimg_library_suffixed { + throw CImgIOException(_cimglist_instance + "save_gzip_external(): Specified filename is (null).", + cimglist_instance); +- + CImg command(1024), filename_tmp(256), body(256); + const char + *ext = cimg::split_filename(filename,body), +--- imager/src/Makevars.in.orig 2017-04-04 18:02:36.525410690 +0200 ++++ imager/src/Makevars.in 2017-04-04 18:04:52.818449342 +0200 +@@ -1,3 +1,5 @@ + PKG_CPPFLAGS = $(SHLIB_OPENMP_CFLAGS) @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ @TIFF_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_use_r -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 -Dcimg_date='""' -Dcimg_time='""' + PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ @TIFF_LIBS@ $(RCPP_LDFLAGS) + ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CXXFLAGS = -wd308 -- GitLab From 7638aeafcfa7264556a6ad330ed7572759665261 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:08:33 +0200 Subject: [PATCH 0874/1311] added zlib dependency --- .../easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb index c3aab419f3..773f70da96 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb @@ -11,7 +11,10 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] -dependencies = [('libpng', '1.6.18')] +dependencies = [ + ('libpng', '1.6.18'), + ('zlib', '1.2.8') +] sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], -- GitLab From e814354fd0809d35cbf6bf1b85844bb2e267dcfc Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:09:15 +0200 Subject: [PATCH 0875/1311] added zlib dependency --- .../easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb index 76cd412cf3..7436cc5833 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb @@ -11,7 +11,10 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] -dependencies = [('libpng', '1.6.21')] +dependencies = [ + ('libpng', '1.6.21'), + ('zlib', '1.2.8') +] sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], -- GitLab From d90ac78aec452f629244a06ae4ff49c8001e7684 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:10:43 +0200 Subject: [PATCH 0876/1311] added custom sanity check --- .../easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb index a083925f91..2a604f301f 100644 --- a/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.18-goolf-1.7.20.eb @@ -16,4 +16,11 @@ dependencies = [('zlib', '1.2.8')] configopts = "--with-pic" +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + moduleclass = 'lib' -- GitLab From ab8b2b9c6a5272d9912cff51be3bb22a5eff1b3e Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:11:13 +0200 Subject: [PATCH 0877/1311] added custom sanity checks --- .../easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb index cb4fbebab2..15f766ff31 100644 --- a/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.21-goolf-1.7.20.eb @@ -16,4 +16,11 @@ dependencies = [('zlib', '1.2.8')] configopts = "--with-pic" +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + moduleclass = 'lib' -- GitLab From 746c112e1e9293ed92e4ea7192c1f6271ad17621 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:12:12 +0200 Subject: [PATCH 0878/1311] remove unneeded line --- .../m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb index 14c2e7f378..9cef816ccd 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb @@ -24,7 +24,6 @@ dependencies = [ # this is a bundle of Python packages exts_defaultclass = 'PythonPackage' -exts_filter = ("python -c 'import %(ext_name)s'", '') exts_list = [ ('six', '1.10.0', { -- GitLab From a00d479e8b57814916e4d9078bda040ef48fe56f Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:15:01 +0200 Subject: [PATCH 0879/1311] delete unneeded LD_LIBRARY_PATH --- .../m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb index 9cef816ccd..9565d51bb3 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb @@ -66,7 +66,6 @@ exts_list = [ modextrapaths = { 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], - 'LD_LIBRARY_PATH': ['lib/python%(pyshortver)s/site-packages'] } sanity_check_paths = { -- GitLab From 4b6fe00282e6767b906ebac0a88c360b0c42300d Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 4 Apr 2017 19:15:22 +0200 Subject: [PATCH 0880/1311] update sanity check --- .../m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb index 9565d51bb3..52da5ecd72 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb @@ -70,7 +70,7 @@ modextrapaths = { sanity_check_paths = { 'files': ['bin/multiqc'], - 'dirs': ['lib/python%(pyshortver)s/site-packages/multiqc-%(version)s-py%(pyshortver)s.egg'] + 'dirs': ['lib/python%(pyshortver)s/site-packages/'] } moduleclass = 'bio' -- GitLab From cc5d41bc0cc73c26f134801cede7f89961d06811 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Wed, 5 Apr 2017 09:29:23 +0930 Subject: [PATCH 0881/1311] Easyconfig for Autotools-20150215/foss-2015b --- .../Autotools/Autotools-20150215-foss-2015b.eb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/a/Autotools/Autotools-20150215-foss-2015b.eb diff --git a/easybuild/easyconfigs/a/Autotools/Autotools-20150215-foss-2015b.eb b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-foss-2015b.eb new file mode 100644 index 0000000000..ab4ec5f149 --- /dev/null +++ b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-foss-2015b.eb @@ -0,0 +1,17 @@ +easyblock = 'Bundle' + +name = 'Autotools' +version = '20150215' # date of the most recent change + +homepage = 'http://autotools.io' +description = """This bundle collect the standard GNU build tools: Autoconf, Automake and libtool""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +dependencies = [ + ('Autoconf', '2.69'), # 20120424 + ('Automake', '1.15'), # 20150105 + ('libtool', '2.4.6'), # 20150215 +] + +moduleclass = 'devel' -- GitLab From c65c50b2a84609923b11eebb2dfe79b7c1252752 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Wed, 5 Apr 2017 09:30:11 +0930 Subject: [PATCH 0882/1311] Added comment/author to patch file --- .../easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch index a88701ea28..735a5b6d0c 100644 --- a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4_configure.patch @@ -1,3 +1,6 @@ +The Open Sourcing and refactoring of BioKanga on GitHub has resulted in some build issues. This +patch removes references to code which nolonger exists in refactored code of v4.3.4 +author: Nathan S. Watson-Haigh (University of Adelaide) --- ./configure.ac 2017-04-04 11:47:18.067209892 +0930 +++ ./configure.ac 2017-04-04 11:47:46.719519662 +0930 @@ -23,11 +23,10 @@ -- GitLab From 62b4678f29b9ba66d2d7334bf916a5871aa08573 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Wed, 5 Apr 2017 09:31:32 +0930 Subject: [PATCH 0883/1311] Implement changes suggested by Kenneth Hoste. * Changed to use Autotools-20150215/foss-2015b as build dependency. * Use %(version)s variable in patch name instead of hardcoding. --- .../easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb index da082e4501..b413e97fee 100644 --- a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.4-foss-2015b.eb @@ -13,12 +13,9 @@ toolchain = {'name': 'foss', 'version': '2015b'} source_urls = ['https://github.com/csiro-crop-informatics/biokanga/archive/'] sources = ['v%(version)s.tar.gz'] -patches = ['BioKanga-4.3.4_configure.patch'] +patches = ['BioKanga-%(version)s_configure.patch'] -builddependencies = [ - ('Autoconf', '2.69'), - ('Automake', '1.15') -] +builddependencies = [('Autotools', '20150215')] preconfigopts = "autoreconf -f -i && " -- GitLab From fa83d2fc94fcabf75adbd75cde9c2ce86d225162 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Wed, 5 Apr 2017 09:49:56 +0930 Subject: [PATCH 0884/1311] Adding libtool-2.4.6/foss-2015b missing dep --- .../l/libtool/libtool-2.4.6-foss-2015b.eb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/l/libtool/libtool-2.4.6-foss-2015b.eb diff --git a/easybuild/easyconfigs/l/libtool/libtool-2.4.6-foss-2015b.eb b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-foss-2015b.eb new file mode 100644 index 0000000000..83d12ef5f8 --- /dev/null +++ b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-foss-2015b.eb @@ -0,0 +1,17 @@ +easyblock = 'ConfigureMake' + +name = 'libtool' +version = '2.4.6' + +homepage = 'http://www.gnu.org/software/libtool' +description = """GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries + behind a consistent, portable interface.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [('M4', '1.4.17')] + +moduleclass = 'lib' -- GitLab From 71e29e140a369ff5d938a57835bda6f4f53e5d1f Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Wed, 5 Apr 2017 09:00:59 +0200 Subject: [PATCH 0885/1311] removed unused patches line --- .../n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb index b4a5ec30e9..a4c16330cb 100644 --- a/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/n/numpy/numpy-1.10.1-goolf-1.7.20-Python-2.7.11.eb @@ -14,8 +14,6 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = [SOURCEFORGE_SOURCE] sources = [SOURCE_TAR_GZ] -#patches = ['numpy-1.8.0-mkl.patch'] - dependencies = [ ('Python', '2.7.11'), ] -- GitLab From cad67753370e1950e1ee1c63301ea5b159276d0d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 11:23:41 +0200 Subject: [PATCH 0886/1311] bump imager extension to 0.40.1 in R 3.3.3 easyconfig to sync it up with #4427 --- easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb index 2584758870..3b6ee9a746 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb @@ -502,7 +502,8 @@ exts_list = [ ('bmp', '0.2', ext_options), ('readbitmap', '0.1-4', ext_options), ('purrr', '0.2.2', ext_options), - ('imager', '0.31', ext_options), + ('downloader', '0.4', ext_options), + ('imager', '0.40.1', ext_options), ] moduleclass = 'lang' -- GitLab From fc93911bf77c7d56dcb1b7fbf7c1e01b91116208 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Wed, 5 Apr 2017 13:03:36 +0200 Subject: [PATCH 0887/1311] style fixes and add symlink to the sanity check --- easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb index cd17c8d34d..c6c18b59b8 100644 --- a/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb +++ b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb @@ -18,8 +18,10 @@ toolchain = {'name': 'dummy', 'version': ''} source_urls = ['https://github.com/lomereiter/sambamba/releases/download/v%(version)s/'] sources = ['%(namelower)s_v%(version)s_linux.tar.bz2'] +postinstallcmds = ['cd %(installdir)s && ln -s sambamba_v%(version)s sambamba',] + sanity_check_paths = { - 'files': ['sambamba_v%(version)s'], + 'files': ['sambamba_v%(version)s', 'sambamba'], 'dirs': [], } @@ -27,6 +29,4 @@ modextrapaths = { 'PATH': "", } -postinstallcmds = ['cd %(installdir)s && ln -s sambamba_v%(version)s sambamba',] - moduleclass = 'bio' -- GitLab From ff2de14ad7c936a63b9c2b9ba092ff0912669456 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 5 Apr 2017 12:03:45 +0100 Subject: [PATCH 0888/1311] Add explicit Python extension deps, based on @pescobar's work --- .../MultiQC-0.9-foss-2016b-Python-2.7.12.eb | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb index a7a94c8c8c..4ca3af6861 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb @@ -1,7 +1,11 @@ # This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild # Adam Huffman # The Francis Crick Institute -easyblock = 'PythonPackage' +# Elements derived from work by Pablo Escobar +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Bundle' name = 'MultiQC' version = '0.9' @@ -16,14 +20,56 @@ description = """Aggregate results from bioinformatics analyses across many samp toolchain = {'name': 'foss', 'version': '2016b'} -sources = ['v%(version)s.tar.gz'] -source_urls = ['https://github.com/ewels/MultiQC/archive'] - dependencies = [ ('Python', '2.7.12'), ('matplotlib', '2.0.0', versionsuffix), ] +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('pyparsing', '2.1.9', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('pytz', '2016.6.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], + }), + ('cycler', '0.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], + }), + ('python-dateutil', '2.5.3', { + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + 'modulename': 'dateutil', + }), + ('MarkupSafe', '0.23', { + 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], + }), + ('click', '6.6', { + 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], + }), + ('PyYAML', '3.12', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], + 'modulename': 'yaml', + }), + ('simplejson', '3.8.2', { + 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], + }), + ('Jinja2', '2.8', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + }), + ('multiqc', version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/multiqc/'], + }), +] + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], +} + + sanity_check_paths = { 'files': ['bin/%(namelower)s'], 'dirs': ['lib/python%(pyshortver)s/site-packages'] -- GitLab From fa8ca0b1d95b064584aaf1b3885d72ebfc7a3366 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 14:26:20 +0200 Subject: [PATCH 0889/1311] adding easyconfigs: vsc-mympirun-4.0.0b0.eb, vsc-base-2.5.8.eb, IPy-0.83.eb, vsc-install-0.10.25.eb --- easybuild/easyconfigs/i/IPy/IPy-0.83.eb | 23 ++++++++++++ .../easyconfigs/v/vsc-base/vsc-base-2.5.8.eb | 27 ++++++++++++++ .../v/vsc-install/vsc-install-0.10.25.eb | 23 ++++++++++++ .../v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb | 35 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 easybuild/easyconfigs/i/IPy/IPy-0.83.eb create mode 100644 easybuild/easyconfigs/v/vsc-base/vsc-base-2.5.8.eb create mode 100644 easybuild/easyconfigs/v/vsc-install/vsc-install-0.10.25.eb create mode 100755 easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb diff --git a/easybuild/easyconfigs/i/IPy/IPy-0.83.eb b/easybuild/easyconfigs/i/IPy/IPy-0.83.eb new file mode 100644 index 0000000000..661784d022 --- /dev/null +++ b/easybuild/easyconfigs/i/IPy/IPy-0.83.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'IPy' +version = '0.83' + +homepage = 'https://pypi.python.org/pypi/IPy' +description = """Class and tools for handling of IPv4 and IPv6 addresses and networks""" + +# purposely built with system compilers & Python +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] + +options = {'modulename': 'IPy'} + +shortpyver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%s/site-packages/' % shortpyver], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/v/vsc-base/vsc-base-2.5.8.eb b/easybuild/easyconfigs/v/vsc-base/vsc-base-2.5.8.eb new file mode 100644 index 0000000000..c38a164cb9 --- /dev/null +++ b/easybuild/easyconfigs/v/vsc-base/vsc-base-2.5.8.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'vsc-base' +version = '2.5.8' + +homepage = 'http://hpcugent.github.com/vsc-base/' +description = """Basic Python libraries used by UGent's HPC group""" + +# purposely built with system compilers & Python +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] + +# install as zipped egg to make sure that tools that use this as a dependency are responsive +use_easy_install = True +zipped_egg = True + +options = {'modulename': 'vsc.utils'} + +shortpyver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': ['lib/python%(pyver)s/site-packages/vsc_base-%%(version)s-py%(pyver)s.egg' % {'pyver': shortpyver}], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/v/vsc-install/vsc-install-0.10.25.eb b/easybuild/easyconfigs/v/vsc-install/vsc-install-0.10.25.eb new file mode 100644 index 0000000000..c821c18048 --- /dev/null +++ b/easybuild/easyconfigs/v/vsc-install/vsc-install-0.10.25.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'vsc-install' +version = '0.10.25' + +homepage = 'http://hpcugent.github.com/vsc-install/' +description = """Shared setuptools functions and classes for python libraries developed by UGent's HPC group""" + +# purposely built with system compilers & Python +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCE_TAR_GZ] +source_urls = [PYPI_SOURCE] + +options = {'modulename': 'vsc.install'} + +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%s/site-packages' % pyshortver], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb b/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb new file mode 100755 index 0000000000..58a69d638c --- /dev/null +++ b/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'vsc-mympirun' +version = '4.0.0b0' + +homepage = 'https://github.com/hpcugent/vsc-mympirun' +description = """VSC-tools is a set of Python libraries and scripts that are commonly used within HPC-UGent.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [PYPI_SOURCE] +sources = ['vsc-mympirun-%(version)s.tar.gz'] + +dependencies = [ + ('vsc-base', '2.5.8'), + ('IPy', '0.83'), +] +builddependencies = [('vsc-install', '0.10.25')] + +#postinstallcmds = ['echo "import pkg_resources; pkg_resources.declare_namespace(__name__)" > %(installdir)s/lib/vsc/__init__.py'] +#use_easy_install = True + +# we ship something in bin/fake +modextrapaths = {'PATH': 'bin/fake'} + +#options = {'modulename': 'vsc.mympirun'} +options = {'modulename': 'vsc'} + +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) +sanity_check_paths = { + 'files': ['bin/mympirun', 'bin/mympisanity'], + 'dirs': ['bin/fake', 'lib/python%s/site-packages' % pyshortver], +} + +moduleclass = 'tools' -- GitLab From 03f367f888b40140a128276d63c9ff7c7f4779bd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 14:30:31 +0200 Subject: [PATCH 0890/1311] don't patch Makevars.in twice in patch for R imager extension --- .../easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch | 9 --------- 1 file changed, 9 deletions(-) diff --git a/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch b/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch index 8f3e05fe69..829b112342 100644 --- a/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch +++ b/easybuild/easyconfigs/r/R/imager-0.40.1_fix-CImg-icpc.patch @@ -2,15 +2,6 @@ fix compilation issues with Intel compilers in CImg.h cfr. https://github.com/dtschump/CImg/issues/123 and https://github.com/dahtah/imager/commit/b46e96efe0a9c596c9aca9d786123b10dd83adf2 also include extra compiler option -wd308 to avoid 'member "std::complex::_M_value" is inaccessible' errors patched composed by Kenneth Hoste (HPC-UGent) ---- imager/src/Makevars.in.orig 2017-04-01 22:32:32.628591934 +0200 -+++ imager/src/Makevars.in 2017-04-01 22:32:40.968645087 +0200 -@@ -1,4 +1,5 @@ - - PKG_CPPFLAGS = @HAVE_OPENMP@ @OPENMP_CFLAGS@ @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_r_mode -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 - PKG_LIBS = @OPENMP_CFLAGS@ @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ $(RCPP_LDFLAGS) -- -+# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' -+PKG_CXXFLAGS = -wd308 diff --git a/inst/include/CImg.h b/inst/include/CImg.h index 213d864..922edf8 100755 --- a/inst/include/CImg.h -- GitLab From 6806348b71dbd35af608f2da2a6644e741ae03d8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 15:00:10 +0200 Subject: [PATCH 0891/1311] remove commented out lines, addd sanity check command to check that 'mympirun --help' works --- .../easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb b/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb index 58a69d638c..b31dee5a6e 100755 --- a/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb +++ b/easybuild/easyconfigs/v/vsc-mympirun/vsc-mympirun-4.0.0b0.eb @@ -17,13 +17,10 @@ dependencies = [ ] builddependencies = [('vsc-install', '0.10.25')] -#postinstallcmds = ['echo "import pkg_resources; pkg_resources.declare_namespace(__name__)" > %(installdir)s/lib/vsc/__init__.py'] -#use_easy_install = True - # we ship something in bin/fake modextrapaths = {'PATH': 'bin/fake'} -#options = {'modulename': 'vsc.mympirun'} +# can't check for 'import vsc.mympirun' because vsc-base may be installed system-wide options = {'modulename': 'vsc'} pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2]) @@ -32,4 +29,6 @@ sanity_check_paths = { 'dirs': ['bin/fake', 'lib/python%s/site-packages' % pyshortver], } +sanity_check_commands = ["mympirun --help"] + moduleclass = 'tools' -- GitLab From 372ee603a6f226341a0ee51b8a6b33cdb48156e3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 15:14:17 +0200 Subject: [PATCH 0892/1311] bump to intel/2017a and Perl 5.24.1 in ROI_PAC easyconfig --- ....2-intel-2016b.eb => GETORB-2.3.2-intel-2017a.eb} | 2 +- ...0.eb => ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb} | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) rename easybuild/easyconfigs/g/GETORB/{GETORB-2.3.2-intel-2016b.eb => GETORB-2.3.2-intel-2017a.eb} (92%) rename easybuild/easyconfigs/r/ROI_PAC/{ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb => ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb} (83%) diff --git a/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2017a.eb similarity index 92% rename from easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb rename to easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2017a.eb index 2e648643f9..f01c7d1564 100644 --- a/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2016b.eb +++ b/easybuild/easyconfigs/g/GETORB/GETORB-2.3.2-intel-2017a.eb @@ -6,7 +6,7 @@ version = '2.3.2' homepage = 'http://www.deos.tudelft.nl/ers/precorbs/tools/getorb_pack.shtml' description = "GETORB software package contains programs to handle the orbital data records (ODRs)" -toolchain = {'name': 'intel', 'version': '2016b'} +toolchain = {'name': 'intel', 'version': '2017a'} source_urls = ['http://www.deos.tudelft.nl/ers/precorbs/tools/'] sources = ['getorb_%(version)s.tar.gz'] diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb similarity index 83% rename from easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb rename to easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb index 89a80fb749..351c02bb8c 100644 --- a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb @@ -8,22 +8,26 @@ homepage = 'http://roipac.org/' description = """Repeat Orbit Interferometry PACkage (ROI_PAC), software for processing synthetic aperture radar data to produce differential interferograms""" -toolchain = {'name': 'intel', 'version': '2016b'} +toolchain = {'name': 'intel', 'version': '2017a'} # download of ROI_PAC tarball requires registration, see http://www.openchannelfoundation.org/projects/ROI_PAC sources = ['ROI_PAC_%s.tgz' % '_'.join(version.split('.'))] # make_raw_alos.pl via http://roipac.org/cgi-bin/moin.cgi/ALOS_PALSAR?action=AttachFile&do=get&target=make_raw_alos.pl patches = [ - 'ROI_PAC-%(version)s_fix-IntSim.patch', ('make_raw_alos.pl', 'ROI_PAC/INT_SCR'), + 'ROI_PAC-%(version)s_fix-IntSim.patch', +] +checksums = [ + 'db50e9cd99183291eb9cfe7c74750cc6', # ROI_PAC_3_0_1.tgz + '284faa43c12626670810c1e14d393159', # make_raw_alos.pl ] builddependencies = [('Autotools', '20150215')] dependencies = [ ('FFTW', '3.3.6'), ('GETORB', '2.3.2'), - ('Perl', '5.24.0'), + ('Perl', '5.24.1'), ] start_dir = 'ROI_PAC' @@ -52,6 +56,6 @@ modextravars = { 'ROI_PAC': '%(installdir)s', } -modloadmsg = "To define: $INS_DIR, $POR_DIR, $SAR_ODR_DIR, $SAR_PRC_DIR, $VOR_DIR\n" +modloadmsg = "These environment variables should be defined: $INS_DIR, $POR_DIR, $SAR_ODR_DIR, $SAR_PRC_DIR, $VOR_DIR\n" moduleclass = 'geo' -- GitLab From 3db3b7b5770a9f83fd0aa56f48c62b8eb4410f80 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Apr 2017 15:15:16 +0200 Subject: [PATCH 0893/1311] add missing patch file for ROI_PAC --- .../r/ROI_PAC/ROI_PAC-3.0.1_fix-IntSim.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1_fix-IntSim.patch diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1_fix-IntSim.patch b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1_fix-IntSim.patch new file mode 100644 index 0000000000..f9b938a005 --- /dev/null +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1_fix-IntSim.patch @@ -0,0 +1,15 @@ +fix bug in ROI_PAC v3.0.1, cfr. http://roipac.org/cgi-bin/moin.cgi/Patches +--- ./ROI_PAC/intsim/IntSim.f.orig 2017-03-30 10:35:09.702908447 +0200 ++++ ./ROI_PAC/intsim/IntSim.f 2017-03-30 10:36:32.204116436 +0200 +@@ -1339,6 +1339,11 @@ + ntotlonpx = ntotcpx + endif + ++! update these after padding has been applied EJF 2013/5/9 ++ nslatpx = int(dem_pixel_min(1)) ++ nslonpx = int(dem_pixel_min(2)) ++ nlatpx = nint(dem_pixel_max(1)) - nslatpx + 1 ++ nlonpx = nint(dem_pixel_max(2)) - nslonpx + 1 + + write (*,*) + write (*,*) -- GitLab From 231a282bc419ebf00eb44efadcd54d9ca68bfca1 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Tue, 4 Apr 2017 18:48:52 +0000 Subject: [PATCH 0894/1311] Fix pkgconfig patch for Qhull to only let CMake substitute @ --- easybuild/easyconfigs/q/Qhull/Qhull_pkgconfig.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/Qhull/Qhull_pkgconfig.patch b/easybuild/easyconfigs/q/Qhull/Qhull_pkgconfig.patch index 53f43a015d..0aa79c3083 100644 --- a/easybuild/easyconfigs/q/Qhull/Qhull_pkgconfig.patch +++ b/easybuild/easyconfigs/q/Qhull/Qhull_pkgconfig.patch @@ -3,7 +3,7 @@ requires making CMake to fill in the gaps via 'configure_file(... @ONLY)' author: Kenneth Hoste (UGent) --- qhull/CMakeLists.txt.orig 2015-09-21 15:27:38.424110227 +0200 +++ qhull/CMakeLists.txt 2015-09-21 15:27:06.403494984 +0200 -@@ -430,3 +430,9 @@ +@@ -430,3 +430,10 @@ install(FILES html/rbox.man DESTINATION ${MAN_INSTALL_DIR} RENAME rbox.1) install(FILES ${doc_FILES} DESTINATION ${DOC_INSTALL_DIR}) install(DIRECTORY html/ DESTINATION ${DOC_INSTALL_DIR}) @@ -11,6 +11,7 @@ author: Kenneth Hoste (UGent) +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/qhull.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/qhull.pc" ++ @ONLY +) +INSTALL(FILES "${CMAKE_BINARY_DIR}/qhull.pc" DESTINATION lib/pkgconfig) --- qhull/qhull.pc.in 1970-01-01 01:00:00.000000000 +0100 -- GitLab From f5d42fd9a077f9483e3e48fae1daee3bd335347e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 00:10:18 +0200 Subject: [PATCH 0895/1311] fix comment --- .../r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb index 351c02bb8c..d772d057cf 100644 --- a/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/r/ROI_PAC/ROI_PAC-3.0.1-intel-2017a-Perl-5.24.1.eb @@ -37,7 +37,7 @@ installopts = "&& cd fip && $CC $CFLAGS -o add_rmgAmpPhs add_rmgAmpPhs.c && cp - postinstallcmds = [ # symlink to getorb requires in /bin subdirectory "cd %(installdir)s/bin && ln -s $(which getorb)", - # also copy scripts and make sure they're excutable + # also copy scripts "cp -a INT_SCR/* %(installdir)s/bin", # fix shebang in Perl scripts "sed -i 's@^#!.*/bin/perl.*@#!/usr/bin/env perl@g' %(installdir)s//bin/*.pl", -- GitLab From d8cc0f780474286401a29f65cc0fe227c987b28a Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Thu, 6 Apr 2017 00:51:01 +0000 Subject: [PATCH 0896/1311] Octave 4.2.1: add easyconfig for intel 2016b with updated deps incl Qt5 --- .../o/Octave/Octave-4.2.1-intel-2016b.eb | 63 +++++++++++++++++++ .../o/Octave/Octave-4.2.1_intel.patch | 47 ++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb create mode 100644 easybuild/easyconfigs/o/Octave/Octave-4.2.1_intel.patch diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb new file mode 100644 index 0000000000..5ea3487cef --- /dev/null +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb @@ -0,0 +1,63 @@ +easyblock = 'ConfigureMake' + +name = 'Octave' +version = '4.2.1' + +homepage = 'http://www.gnu.org/software/octave/' +description = """GNU Octave is a high-level interpreted language, primarily intended for numerical computations.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['%(name)s-%(version)s_intel.patch'] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.3'), + ('Autotools', '20150215'), + ('libtool', '2.4.6'), + ('gperf', '3.0.4'), +] + +dependencies = [ + ('X11', '20170314'), + ('PCRE', '8.40'), + ('ncurses', '6.0'), + ('libreadline', '7.0'), + ('arpack-ng', '3.4.0'), + ('cURL', '7.52.1'), + ('FLTK', '1.3.3'), + ('fontconfig', '2.12.1'), + ('freetype', '2.7'), + ('GLPK', '4.60'), + ('GL2PS', '1.3.9'), + ('gnuplot', '5.0.5'), + ('Java', '1.8.0_121', '', True), + ('zlib', '1.2.8'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('Qhull', '2015.2'), + ('Qt5', '5.8.0'), + ('HDF5', '1.8.17', '-serial'), + ('qrupdate', '1.1.2'), + ('SuiteSparse', '4.5.3', '-METIS-5.1.0'), + ('GraphicsMagick', '1.3.25'), + ('FFTW', '3.3.6'), +] + +configopts = 'MOC=$EBROOTQT5/bin/moc ' +configopts += 'UIC=$EBROOTQT5/bin/uic ' +configopts += 'RCC=$EBROOTQT5/bin/rcc ' +configopts += 'LRELEASE=$EBROOTQT5/bin/lrelease ' +configopts += '--with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK" --disable-docs ' + +sanity_check_paths = { + 'files': ['bin/octave'], + 'dirs': [] +} + +sanity_check_commands = [('octave', '--eval "1+2"')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1_intel.patch b/easybuild/easyconfigs/o/Octave/Octave-4.2.1_intel.patch new file mode 100644 index 0000000000..872aa06961 --- /dev/null +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1_intel.patch @@ -0,0 +1,47 @@ +Intel compiler does not understand __builtin_*_overflow +# Oct 25th 2016 by B. Hajgato (Free University Brussels - VUB) +# Apr 4th 2017 by B. Oldeman (Compute Canada) +--- octave-4.2.1/libgnu/xalloc-oversized.h.orig 2017-02-22 18:17:37.000000000 +0000 ++++ octave-4.2.1/libgnu/xalloc-oversized.h 2017-04-04 14:29:22.020046084 +0000 +@@ -43,12 +43,12 @@ + nonnegative. This is a macro, not a function, so that it + works correctly even when SIZE_MAX < N. */ + +-#if 7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p) ++#if (7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p) && !__INTEL_COMPILER) + # define xalloc_oversized(n, s) __builtin_mul_overflow_p (n, s, (size_t) 1) + #elif ((5 <= __GNUC__ \ + || (__has_builtin (__builtin_mul_overflow) \ + && __has_builtin (__builtin_constant_p))) \ +- && !__STRICT_ANSI__) ++ && !__STRICT_ANSI__ && !__INTEL_COMPILER) + # define xalloc_oversized(n, s) \ + (__builtin_constant_p (n) && __builtin_constant_p (s) \ + ? __xalloc_oversized (n, s) \ +--- octave-4.0.3/libgnu/glob.c.orig 2016-10-24 16:11:56.437441986 +0200 ++++ octave-4.0.3/libgnu/glob.c 2016-10-24 16:12:21.127612656 +0200 +@@ -257,7 +257,7 @@ + static bool + size_add_wrapv (size_t a, size_t b, size_t *r) + { +-#if 5 <= __GNUC__ || __has_builtin (__builtin_add_overflow) ++#if ((5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) && !__INTEL_COMPILER) + return __builtin_add_overflow (a, b, r); + #else + *r = a + b; +--- octave-4.2.1/libgnu/intprops.h.orig 2017-02-22 18:17:35.000000000 +0000 ++++ octave-4.2.1/libgnu/intprops.h 2017-04-04 14:35:17.208604138 +0000 +@@ -242,11 +242,11 @@ + + /* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ + #define _GL_HAS_BUILTIN_OVERFLOW \ +- (5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) ++ ((5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) && !__INTEL_COMPILER) + + /* True if __builtin_add_overflow_p (A, B, C) works. */ + #define _GL_HAS_BUILTIN_OVERFLOW_P \ +- (7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p)) ++ ((7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p)) && !__INTEL_COMPILER) + + /* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands -- GitLab From 8fde62045a9e2e96adb7ce875c72d3b922ee411a Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Thu, 6 Apr 2017 01:06:14 +0000 Subject: [PATCH 0897/1311] Fix irresolvable dependencies. --- easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb index 5ea3487cef..7cb6f50189 100644 --- a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb @@ -22,10 +22,10 @@ builddependencies = [ ] dependencies = [ - ('X11', '20170314'), + ('X11', '20160819'), ('PCRE', '8.40'), ('ncurses', '6.0'), - ('libreadline', '7.0'), + ('libreadline', '6.3'), ('arpack-ng', '3.4.0'), ('cURL', '7.52.1'), ('FLTK', '1.3.3'), -- GitLab From 950cd4fa74caec7d7129c9c5f17923778748f88e Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Thu, 6 Apr 2017 01:24:41 +0000 Subject: [PATCH 0898/1311] Avoid conflicts in dependencies. --- easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb index 7cb6f50189..e845e9c89e 100644 --- a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb @@ -15,7 +15,7 @@ patches = ['%(name)s-%(version)s_intel.patch'] builddependencies = [ ('Bison', '3.0.4'), - ('flex', '2.6.3'), + ('flex', '2.6.2'), ('Autotools', '20150215'), ('libtool', '2.4.6'), ('gperf', '3.0.4'), @@ -23,14 +23,14 @@ builddependencies = [ dependencies = [ ('X11', '20160819'), - ('PCRE', '8.40'), + ('PCRE', '8.39'), ('ncurses', '6.0'), ('libreadline', '6.3'), ('arpack-ng', '3.4.0'), ('cURL', '7.52.1'), ('FLTK', '1.3.3'), ('fontconfig', '2.12.1'), - ('freetype', '2.7'), + ('freetype', '2.6.5'), ('GLPK', '4.60'), ('GL2PS', '1.3.9'), ('gnuplot', '5.0.5'), -- GitLab From 16d28a2efc5c9070ab7bc996dd5221a5e676e15b Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 6 Apr 2017 07:59:23 +0200 Subject: [PATCH 0899/1311] adding easyconfigs: Autotools-20150215-GCCcore-5.4.0.eb --- .../a/Autoconf/Autoconf-2.69-GCCcore-5.4.0.eb | 29 +++++++++++++++ .../a/Automake/Automake-1.15-GCCcore-5.4.0.eb | 36 +++++++++++++++++++ .../Autotools-20150215-GCCcore-5.4.0.eb | 18 ++++++++++ .../l/libtool/libtool-2.4.6-GCCcore-5.4.0.eb | 20 +++++++++++ 4 files changed, 103 insertions(+) create mode 100644 easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-5.4.0.eb b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..765fe6f2fd --- /dev/null +++ b/easybuild/easyconfigs/a/Autoconf/Autoconf-2.69-GCCcore-5.4.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'Autoconf' +version = '2.69' + +homepage = 'http://www.gnu.org/software/autoconf/' +description = """Autoconf is an extensible package of M4 macros that produce shell scripts + to automatically configure software source code packages. These scripts can adapt the + packages to many kinds of UNIX-like systems without manual user intervention. Autoconf + creates a configuration script for a package from a template file that lists the + operating system features that the package can use, in the form of M4 macro calls.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('M4', '1.4.18')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["autoconf", "autoheader", "autom4te", "autoreconf", "autoscan", + "autoupdate", "ifnames"]], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-5.4.0.eb b/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..0d4c530534 --- /dev/null +++ b/easybuild/easyconfigs/a/Automake/Automake-1.15-GCCcore-5.4.0.eb @@ -0,0 +1,36 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'Automake' +version = "1.15" + +homepage = 'http://www.gnu.org/software/automake/automake.html' +description = "Automake: GNU Standards-compliant Makefile generator" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Autoconf', '2.69')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/automake', 'bin/aclocal'], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-5.4.0.eb b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..79f6723eb6 --- /dev/null +++ b/easybuild/easyconfigs/a/Autotools/Autotools-20150215-GCCcore-5.4.0.eb @@ -0,0 +1,18 @@ +easyblock = 'Bundle' + +name = 'Autotools' +version = '20150215' # date of the most recent change + +homepage = 'http://autotools.io' +description = """This bundle collect the standard GNU build tools: Autoconf, Automake and libtool""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +dependencies = [ + ('Autoconf', '2.69'), # 20120424 + ('Automake', '1.15'), # 20150105 + ('libtool', '2.4.6'), # 20150215 +] +# Pure bundle -- no need to specify 'binutils' used when building GCCcore toolchain as build dependency + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..677b163091 --- /dev/null +++ b/easybuild/easyconfigs/l/libtool/libtool-2.4.6-GCCcore-5.4.0.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libtool' +version = '2.4.6' + +homepage = 'http://www.gnu.org/software/libtool' +description = """GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries + behind a consistent, portable interface.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [('M4', '1.4.18')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +moduleclass = 'lib' -- GitLab From 5e3ae80f025fa5ee94d3d58603d6b2f037b68c10 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 08:52:34 +0200 Subject: [PATCH 0900/1311] adding easyconfigs: StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb, snaphu-1.4.2-intel-2017a.eb, Triangle-1.6-intel-2017a.eb --- .../StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb | 50 +++++++++++++++++++ .../s/snaphu/snaphu-1.4.2-intel-2017a.eb | 26 ++++++++++ .../t/Triangle/Triangle-1.6-intel-2017a.eb | 34 +++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb create mode 100644 easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..457a515e11 --- /dev/null +++ b/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,50 @@ +easyblock = 'ConfigureMake' + +name = 'StaMPS' +version = '3.3b1' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://homepages.see.leeds.ac.uk/~earahoo/stamps/' +description = """A software package to extract ground displacements from time series of synthetic aperture radar + (SAR) acquisitions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://homepages.see.leeds.ac.uk/~earahoo/stamps/'] +sources = ['%(name)s_v%(version)s.tar.gz'] + +dependencies = [ + ('Perl', '5.24.1'), + ('ROI_PAC', '3.0.1', versionsuffix), + ('Doris', '4.02'), + ('Triangle', '1.6'), + ('snaphu', '1.4.2'), +] + +skipsteps = ['configure'] + +start_dir = 'src' + +buildopts = 'CC="$CXX" CFLAGS="$CXXFLAGS"' + +preinstallopts = 'cp -a ../bin %(installdir)s/bin && ' +installopts = 'INSTALL_DIR=%(installdir)s/bin && cd .. && cp -a {DORIS_SCR,matlab,ROI_PAC_SCR} %(installdir)s/' + +postinstallcmds = [ + # fix shebang in Perl scripts + "sed -i 's@^#!.*/bin/perl.*@#!/usr/bin/env perl@g' %(installdir)s//*_SCR/*.pl", +] + +sanity_check_paths = { + 'files': ['bin/calamp', 'bin/cpxsum', 'bin/pscdem', 'bin/psclonlat', 'bin/pscphase', 'bin/selpsc_patch', + 'bin/selsbc_patch', 'bin/selsbc_patch_new'], + 'dirs': ['DORIS_SCR', 'matlab', 'ROI_PAC_SCR'], +} + +modextravars = { + 'DORIS_SCR': '%(installdir)s/DORIS_SCR', + 'MY_SCR': '%(installdir)s/ROI_PAC_SCR', + 'STAMPS': '%(installdir)s', +} + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb new file mode 100644 index 0000000000..467c802a40 --- /dev/null +++ b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb @@ -0,0 +1,26 @@ +easyblock = 'MakeCp' + +name = 'snaphu' +version = '1.4.2' + +homepage = 'https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/' +description = """SNAPHU is an implementation of the Statistical-cost, Network-flow Algorithm for Phase Unwrapping + proposed by Chen and Zebker""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/'] +sources = ['snaphu-v%(version)s.tar.gz'] + +start_dir = 'src' + +buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' + +files_to_copy = ['bin', 'config', 'man'] + +sanity_check_paths = { + 'files': ['bin/snaphu'], + 'dirs': ['config', 'man'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2017a.eb b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2017a.eb new file mode 100644 index 0000000000..166329f4f1 --- /dev/null +++ b/easybuild/easyconfigs/t/Triangle/Triangle-1.6-intel-2017a.eb @@ -0,0 +1,34 @@ +easyblock = 'MakeCp' + +name = 'Triangle' +version = '1.6' + +homepage = 'http://www.cs.cmu.edu/~quake/triangle.html' +description = """Triangle generates exact Delaunay triangulations, constrained Delaunay triangulations, + conforming Delaunay triangulations, Voronoi diagrams, and high-quality triangular meshes. + The latter can be generated with no small or large angles, + and are thus suitable for finite element analysis.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.netlib.org/voronoi/'] +sources = ['%(namelower)s.zip'] +checksums = [('md5', '10aff8d7950f5e0e2fb6dd2e340be2c9')] + +patches = ['%(name)s-%(version)s_makefile.patch'] + +buildopts = 'triangle trilibrary' + +files_to_copy = [ + (['triangle', 'tricall'], 'bin'), + (['triangle.h'], 'include'), + (['libtriangle.a'], 'lib'), +] + +sanity_check_paths = { + 'files': ['bin/triangle', 'bin/tricall', 'include/triangle.h', 'lib/libtriangle.a'], + 'dirs': [] +} + +moduleclass = 'numlib' -- GitLab From 974ebcbcc6544aac2c3e1b84ca1fe3529d85bbe9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 09:54:44 +0200 Subject: [PATCH 0901/1311] {bio}[intel/2017a] BreakDancer 1.4.5 --- .../BreakDancer-1.4.5-intel-2017a.eb | 29 +++++++++++++++++++ ...eakDancer-1.4.5_fix-icpc-compilation.patch | 14 +++++++++ 2 files changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5-intel-2017a.eb create mode 100644 easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5_fix-icpc-compilation.patch diff --git a/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5-intel-2017a.eb b/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5-intel-2017a.eb new file mode 100644 index 0000000000..2526494ae8 --- /dev/null +++ b/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5-intel-2017a.eb @@ -0,0 +1,29 @@ +easyblock = 'CMakeMake' + +name = 'BreakDancer' +version = '1.4.5' + +homepage = 'http://gmt.genome.wustl.edu/packages/breakdancer' +description = """BreakDancer is a Perl/C++ package that provides genome-wide detection of structural variants from + next generation paired-end sequencing reads""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/genome/breakdancer/archive/'] +sources = ['v%(version)s.tar.gz'] +patches = ['BreakDancer-%(version)s_fix-icpc-compilation.patch'] + +dependencies = [('zlib', '1.2.11')] +builddependencies = [('CMake', '3.7.2')] + +separate_build_dir = True +configopts = '-DCMAKE_BUILD_TYPE=release' + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/breakdancer-max'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5_fix-icpc-compilation.patch b/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5_fix-icpc-compilation.patch new file mode 100644 index 0000000000..e2859dd505 --- /dev/null +++ b/easybuild/easyconfigs/b/BreakDancer/BreakDancer-1.4.5_fix-icpc-compilation.patch @@ -0,0 +1,14 @@ +fix for compilation error: +error: no instance of constructor "testing::AssertionResult::AssertionResult" matches the argument list +author: Kenneth Hoste (HPC-UGent) +--- test/lib/io/TestBam.cpp.orig 2017-04-03 18:06:43.355151223 +0200 ++++ test/lib/io/TestBam.cpp 2017-04-03 18:06:09.154756888 +0200 +@@ -107,7 +107,7 @@ + size_t size = in.tellg(); + in.seekg(0, std::ios::beg); + std::vector buf(size); +- ASSERT_TRUE(in.read(buf.data(), size)); ++ ASSERT_TRUE((bool)in.read(buf.data(), size)); + buf.push_back(0); // make sure buffer is null terminated + EXPECT_STREQ(samData.c_str(), buf.data()); + -- GitLab From f092fd499ca51fff05161c17c43d49e84315d7e7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 10:07:38 +0200 Subject: [PATCH 0902/1311] also include $LDFLAGS --- .../s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb | 2 +- easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb | 2 +- easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb index 457a515e11..122fdfc60d 100644 --- a/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/s/StaMPS/StaMPS-3.3b1-intel-2017a-Perl-5.24.1.eb @@ -25,7 +25,7 @@ skipsteps = ['configure'] start_dir = 'src' -buildopts = 'CC="$CXX" CFLAGS="$CXXFLAGS"' +buildopts = 'CC="$CXX" CFLAGS="$CXXFLAGS $LDFLAGS"' preinstallopts = 'cp -a ../bin %(installdir)s/bin && ' installopts = 'INSTALL_DIR=%(installdir)s/bin && cd .. && cp -a {DORIS_SCR,matlab,ROI_PAC_SCR} %(installdir)s/' diff --git a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb index 8397d4ea59..c65762eb7a 100644 --- a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb +++ b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2016b.eb @@ -14,7 +14,7 @@ sources = ['snaphu-v%(version)s.tar.gz'] start_dir = 'src' -buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' +buildopts = 'CC="$CC" CFLAGS="$CFLAGS $LDFLAGS"' files_to_copy = ['bin', 'config', 'man'] diff --git a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb index 467c802a40..3261c207aa 100644 --- a/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb +++ b/easybuild/easyconfigs/s/snaphu/snaphu-1.4.2-intel-2017a.eb @@ -14,7 +14,7 @@ sources = ['snaphu-v%(version)s.tar.gz'] start_dir = 'src' -buildopts = 'CC="$CC" CFLAGS="$CFLAGS"' +buildopts = 'CC="$CC" CFLAGS="$CFLAGS $LDFLAGS"' files_to_copy = ['bin', 'config', 'man'] -- GitLab From 94e004a50d650754e599fc04bf206b24cfeb96ab Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 6 Apr 2017 11:33:25 +0200 Subject: [PATCH 0903/1311] adding easyconfigs: freetype-2.7.1-GCCcore-5.4.0.eb --- .../b/bzip2/bzip2-1.0.6-GCCcore-5.4.0.eb | 18 ++++++++++++ .../freetype/freetype-2.7.1-GCCcore-5.4.0.eb | 29 +++++++++++++++++++ .../l/libpng/libpng-1.6.28-GCCcore-5.4.0.eb | 29 +++++++++++++++++++ .../z/zlib/zlib-1.2.11-GCCcore-5.4.0.eb | 25 ++++++++++++++++ 4 files changed, 101 insertions(+) create mode 100644 easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-5.4.0.eb b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..139b8c3f30 --- /dev/null +++ b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-GCCcore-5.4.0.eb @@ -0,0 +1,18 @@ +name = 'bzip2' +version = '1.0.6' + +homepage = 'http://www.bzip.org/' +description = """bzip2 is a freely available, patent free, high-quality data compressor. It typically + compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical + compressors), whilst being around twice as fast at compression and six times faster at decompression.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.bzip.org/%(version)s'] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..fee6777ad0 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb @@ -0,0 +1,29 @@ +name = 'freetype' +version = '2.7.1' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('libpng', '1.6.28'), + ('zlib', '1.2.11'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..3d37620c50 --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-GCCcore-5.4.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.28' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.11')] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-5.4.0.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..8409e2aa5c --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.11' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://zlib.net/fossils'] +sources = [SOURCELOWER_TAR_GZ] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 9b6f95e5909ef012e1853fba226f146c6b9428c7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 12:32:58 +0200 Subject: [PATCH 0904/1311] adding easyconfigs: BLAT-3.5-intel-2017a.eb --- .../b/BLAT/BLAT-3.5-intel-2017a.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2017a.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2017a.eb new file mode 100644 index 0000000000..7e57ded042 --- /dev/null +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2017a.eb @@ -0,0 +1,34 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 The Cyprus Institute +# Authors:: Andreas Panteli , Thekla Loizou +# License:: MIT/GPL +# +## + +name = 'BLAT' +version = '3.5' + +homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' +description = """BLAT on DNA is designed to quickly find sequences of 95% and greater similarity + of length 25 bases or more.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['%%(namelower)sSrc%s.zip' % ''.join(version.split('.'))] +source_urls = ['http://users.soe.ucsc.edu/~kent/src'] + +dependencies = [('libpng', '1.6.29')] + +buildopts = 'CC="$CC" COPT= L="$LIBS"' + +files_to_copy = ["bin", "blat", "gfClient", "gfServer", "hg", "inc", "jkOwnLib", "lib", "utils", "webBlat"] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['blat', 'faToNib', 'faToTwoBit', 'gfClient', 'gfServer', 'nibFrag', + 'pslPretty', 'pslReps', 'pslSort', 'twoBitInfo', 'twoBitToFa']], + 'dirs': files_to_copy, +} + +moduleclass = 'bio' -- GitLab From 927716f4af5f0146eb885b5debdd96c471bae27e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 12:33:26 +0200 Subject: [PATCH 0905/1311] adding easyconfigs: BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb --- .../BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb diff --git a/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..43055f9bb9 --- /dev/null +++ b/easybuild/easyconfigs/b/BioPerl/BioPerl-1.7.1-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,28 @@ +# easybuild easyconfig +# +# John Dey jfdey@fredhutch.org +# +# Fred Hutchinson Cancer Research Center + +easyblock = 'PerlModule' + +name = 'BioPerl' +version = '1.7.1' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://www.bioperl.org/' +description = """Bioperl is the product of a community effort to produce Perl code which is useful in biology. + Examples include Sequence objects, Alignment objects and database searching objects.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/bioperl/bioperl-live/archive/'] +sources = ['release-%s.zip' % version.replace('.', '-')] + +dependencies = [ + ('Perl', '5.24.1'), +] + +options = {'modulename': 'Bio::Perl'} + +moduleclass = 'bio' -- GitLab From be8d72e960b3f118bb72ba5070687d21bbf28928 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 13:25:25 +0200 Subject: [PATCH 0906/1311] adding easyconfigs: Rascaf-1.0.2-intel-2017a.eb, SAMtools-0.1.20-intel-2017a.eb --- .../r/Rascaf/Rascaf-1.0.2-intel-2017a.eb | 33 +++++++++++++++++++ .../s/SAMtools/SAMtools-0.1.20-intel-2017a.eb | 20 +++++++++++ 2 files changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/r/Rascaf/Rascaf-1.0.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.20-intel-2017a.eb diff --git a/easybuild/easyconfigs/r/Rascaf/Rascaf-1.0.2-intel-2017a.eb b/easybuild/easyconfigs/r/Rascaf/Rascaf-1.0.2-intel-2017a.eb new file mode 100644 index 0000000000..8d81791c83 --- /dev/null +++ b/easybuild/easyconfigs/r/Rascaf/Rascaf-1.0.2-intel-2017a.eb @@ -0,0 +1,33 @@ +easyblock = 'MakeCp' + +name = 'Rascaf' +version = '1.0.2' + +homepage = 'https://github.com/mourisl/Rascaf' +description = """Rascaf (RnA-seq SCAFfolder) uses continuity and order information from paired-end RNA-seq reads + to improve a draft assembly, particularly in the gene regions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/mourisl/Rascaf/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.11'), + ('SAMtools', '0.1.20'), +] + +# create fake libbam.a to skip building of included SAMtools +prebuildopts = "touch samtools-0.1.19/libbam.a && " +# empty LINKPATH to avoid that included SAMtools copy is used +buildopts = 'CXX="$CXX" CXXFLAGS="$CXXFLAGS" LINKPATH=""' +parallel = 1 + +files_to_copy = [(['rascaf', 'rascaf-join'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/rascaf', 'bin/rascaf-join'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.20-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.20-intel-2017a.eb new file mode 100644 index 0000000000..75a920a136 --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.20-intel-2017a.eb @@ -0,0 +1,20 @@ +name = 'SAMtools' +version = '0.1.20' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/samtools/%(namelower)s/archive/%(version)s'] + +patches = ['SAMtools-%(version)s_Makefile-ncurses.patch'] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' -- GitLab From 5977c9c92fa12f6fefb43d24dc7ed36a80da51bd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 13:41:48 +0200 Subject: [PATCH 0907/1311] adding easyconfigs: Boost-1.63.0-intel-2017a-Python-2.7.13.eb --- .../Boost-1.63.0-intel-2017a-Python-2.7.13.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..e0340fc524 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,25 @@ +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +patches = ['Boost-1.61_fix-make_array-icpc.patch'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('Python', '2.7.13'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' -- GitLab From 11b3a84303b558a60d035b91a785884b116774f1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 14:11:47 +0200 Subject: [PATCH 0908/1311] adding easyconfigs: SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb --- ...ACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb diff --git a/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..9d51ecf299 --- /dev/null +++ b/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,27 @@ +easyblock = 'Tarball' + +name = 'SSPACE_Basic' +version = '2.1.1' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'https://github.com/nsoranzo/sspace_basic' +description = "SSPACE Basic, SSAKE-based Scaffolding of Pre-Assembled Contigs after Extension" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/nsoranzo/sspace_basic/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('Perl', '5.24.1'), + ('Bowtie', '1.1.2'), +] + +sanity_check_paths = { + 'files': ['README', 'SSPACE_Basic.pl'], + 'dirs': ['bin', 'tools'], +} + +modextrapaths = {'PATH': ''} + +moduleclass = 'bio' -- GitLab From b921145d0ec6fb2ef6480dbef2b506f4faf241c1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 14:47:04 +0200 Subject: [PATCH 0909/1311] {bio}[intel/2017a] GapFiller v2.1.1 --- .../GapFiller/GapFiller-2.1.1-intel-2017a.eb | 30 +++++++++++++++++++ .../GapFiller/GapFillter-2.1.1_fix-typo.patch | 13 ++++++++ 2 files changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/GapFiller/GapFillter-2.1.1_fix-typo.patch diff --git a/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb b/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb new file mode 100644 index 0000000000..4e408b39dd --- /dev/null +++ b/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'GapFiller' +version = '2.1.1' + +homepage = 'https://sourceforge.net/projects/gapfiller' +description = """GapFiller is a seed-and-extend local assembler to fill the gap within paired reads. + It can be used for both DNA and RNA and it has been tested on Illumina data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] +patches = ['GapFillter-%(version)s_fix-typo.patch'] + +dependencies = [ + ('Boost', '1.63.0', '-Python-2.7.13'), + ('zlib', '1.2.11'), +] + +buildopts = 'bin_PROGRAMS=GapFiller ' +buildopts += 'GapFiller_CFLAGS="$CFLAGS $LDFLAGS -lz" GapFiller_CXXFLAGS="$CXXFLAGS $LDFLAGS -lz"' +installopts = 'bin_PROGRAMS=GapFiller ' + +sanity_check_paths = { + 'files': ['bin/GapFiller'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GapFiller/GapFillter-2.1.1_fix-typo.patch b/easybuild/easyconfigs/g/GapFiller/GapFillter-2.1.1_fix-typo.patch new file mode 100644 index 0000000000..4327a994ef --- /dev/null +++ b/easybuild/easyconfigs/g/GapFiller/GapFillter-2.1.1_fix-typo.patch @@ -0,0 +1,13 @@ +fix typo that breaks compilation with Intel compilers +author: Kenneth Hoste (HPC-UGent) +--- gapfiller-2.1.1/src/data_structures/Reads.cpp.orig 2017-04-06 13:30:10.978641815 +0200 ++++ gapfiller-2.1.1/src/data_structures/Reads.cpp 2017-04-06 13:38:39.941387943 +0200 +@@ -154,7 +154,7 @@ + case 1: out.append("C"); break; + case 2: out.append("G"); break; + case 3: out.append("T"); break; +- default: cout << "strange "<< cout << "\n"; ++ default: cout << "strange " << out << "\n"; + } + } + -- GitLab From 1730f76e147bfacab9a328311e2dce727c617736 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 14:48:15 +0200 Subject: [PATCH 0910/1311] adding easyconfigs: fqtrim-0.9.5-intel-2017a.eb --- .../f/fqtrim/fqtrim-0.9.5-intel-2017a.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.5-intel-2017a.eb b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.5-intel-2017a.eb new file mode 100644 index 0000000000..c00d6cd413 --- /dev/null +++ b/easybuild/easyconfigs/f/fqtrim/fqtrim-0.9.5-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'MakeCp' + +name = 'fqtrim' +version = '0.9.5' + +homepage = 'http://ccb.jhu.edu/software/fqtrim/' +description = """fqtrim is a versatile stand-alone utility that can be used to trim adapters, poly-A tails, + terminal unknown bases (Ns) and low quality 3' regions in reads from high-throughput next-generation sequencing + machines.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://ccb.jhu.edu/software/fqtrim/dl/'] +sources = [SOURCE_TAR_GZ] + +buildopts = 'release CC="$CXX" LINKER="$CXX"' + +files_to_copy = [(['fqtrim'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/fqtrim'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 799702c12e239d7de2a423c2730bbb120bdbc92a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Apr 2017 16:16:56 +0200 Subject: [PATCH 0911/1311] adding easyconfigs: DBG2OLC-20170208-intel-2017a.eb --- .../d/DBG2OLC/DBG2OLC-20170208-intel-2017a.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2017a.eb diff --git a/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2017a.eb b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2017a.eb new file mode 100644 index 0000000000..367145a273 --- /dev/null +++ b/easybuild/easyconfigs/d/DBG2OLC/DBG2OLC-20170208-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'CmdCp' + +name = 'DBG2OLC' +version = '20170208' +commit = 'b452286' + +homepage = 'https://github.com/yechengxi/DBG2OLC' +description = """DBG2OLC:Efficient Assembly of Large Genomes Using Long Erroneous Reads of the Third Generation + Sequencing Technologies""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/yechengxi/DBG2OLC/archive/'] +sources = ['%s.tar.gz' % commit] + +cmds_map = [('.*', "$CXX $CXXFLAGS $LDFLAGS -o DBG2OLC *.cpp")] + +files_to_copy = [(['DBG2OLC'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/DBG2OLC'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From c827dba5e6c5962a872c23d29dc191513a343168 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Thu, 6 Apr 2017 16:03:20 +0000 Subject: [PATCH 0912/1311] Add --enable-fortran-calling-convention=gfortran to Octave eb. --- easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb index e845e9c89e..534dc92f99 100644 --- a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2016b.eb @@ -52,6 +52,8 @@ configopts += 'UIC=$EBROOTQT5/bin/uic ' configopts += 'RCC=$EBROOTQT5/bin/rcc ' configopts += 'LRELEASE=$EBROOTQT5/bin/lrelease ' configopts += '--with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK" --disable-docs ' +# correct for both GCC and Intel compilers +configopts += '--enable-fortran-calling-convention=gfortran' sanity_check_paths = { 'files': ['bin/octave'], -- GitLab From 4d1e8dcd8cac962fd799d7c7abd261952559ddef Mon Sep 17 00:00:00 2001 From: iotaka Date: Fri, 7 Apr 2017 08:55:29 +0200 Subject: [PATCH 0913/1311] Update METIS-5.1.0-foss-2016b.eb Needed for OpenFOAM # We use 32bit for indices and 64bit for content patches = ['METIS-5.1.0-use-doubles.patch'] --- easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb index 1510375706..56000b7259 100644 --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016b.eb @@ -15,6 +15,9 @@ source_urls = [ 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', ] +# We use 32bit for indices and 64bit for content +patches = ['METIS-5.1.0-use-doubles.patch'] + builddependencies = [('CMake', '3.6.1')] configopts = ['', 'shared=1'] -- GitLab From 4849064e9a0ad00a90bdce3cfaa039ef0627ced7 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 7 Apr 2017 19:05:15 +0930 Subject: [PATCH 0914/1311] picard updated --- .../p/picard/picard-2.2.4-Java-1.8.0_71.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb diff --git a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb new file mode 100644 index 0000000000..9208d35f20 --- /dev/null +++ b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb @@ -0,0 +1,36 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: +# +# Notes:: +## + + +name = 'picard' +version = '2.2.4' + +homepage = 'http://sourceforge.net/projects/picard' +description = """A set of tools (in Java) for working with next generation sequencing data in the BAM format.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://github.com/broadinstitute/picard/releases/download/%(version)s'] +sources = ['%(name)s-tools-%(version)s.zip'] + +java = 'Java' +javaver = '1.8.0_71' +versionsuffix = '-%s-%s' % (java, javaver) +dependencies = [(java, javaver)] + +sanity_check_paths = { + 'files': ['picard.jar'], + 'dirs': [], +} + +modloadmsg = "To execute picard run: java -jar $EBROOTPICARD/%(name)s.jar" + +moduleclass = 'bio' -- GitLab From 56461268690ba56036c3a01df34157f3a2ced24e Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 7 Apr 2017 22:40:34 +0930 Subject: [PATCH 0915/1311] Java version changed --- easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb index 9208d35f20..bc5e0d5779 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb @@ -22,7 +22,7 @@ source_urls = ['https://github.com/broadinstitute/picard/releases/download/%(ver sources = ['%(name)s-tools-%(version)s.zip'] java = 'Java' -javaver = '1.8.0_71' +javaver = '1.8.0_92' versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] -- GitLab From f7cda6667810791d21a725fa2ded135d4d42f6c9 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 8 Apr 2017 12:21:00 +0930 Subject: [PATCH 0916/1311] file name fixed --- ...icard-2.2.4-Java-1.8.0_71.eb => picard-2.2.4-Java-1.8.0_92.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/p/picard/{picard-2.2.4-Java-1.8.0_71.eb => picard-2.2.4-Java-1.8.0_92.eb} (100%) diff --git a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb similarity index 100% rename from easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_71.eb rename to easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb -- GitLab From b630d75714ea12e9e328f1ed517e8b6abd3b7c23 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 8 Apr 2017 21:48:13 +0930 Subject: [PATCH 0917/1311] PyOpenGL easyconfig added --- ...OpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb b/easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb new file mode 100644 index 0000000000..e76b799546 --- /dev/null +++ b/easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb @@ -0,0 +1,42 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: +# +# Notes:: +## + +easyblock = 'PythonPackage' + +name = 'PyOpenGL' +version = '3.1.1a1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://pyopengl.sourceforge.net' +description = """PyOpenGL is the most common cross platform Python binding to OpenGL and related APIs.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +builddependencies = [ + ('bzip2', '1.0.6'), +] + +dependencies = [ + ('Python', '2.7.12'), + ('Mesa', '12.0.2'), +] + +options = {'modulename': 'OpenGL'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'vis' -- GitLab From cf285a2e857c03b7eccba850d44de4194795bac3 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 8 Apr 2017 22:02:55 +0930 Subject: [PATCH 0918/1311] Style fixed --- ...hon-2.7.11.eb => PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.12.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/p/PyOpenGL/{PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb => PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.12.eb} (100%) diff --git a/easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb b/easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.12.eb similarity index 100% rename from easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.11.eb rename to easybuild/easyconfigs/p/PyOpenGL/PyOpenGL-3.1.1a1-foss-2016b-Python-2.7.12.eb -- GitLab From 07eb225c270bec1545e9b5cf63753a1f79f5aa7e Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 8 Apr 2017 22:05:17 +0930 Subject: [PATCH 0919/1311] lynx easyconfig added --- .../l/lynx/lynx-2.8.9-foss-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb new file mode 100644 index 0000000000..cb6a046e97 --- /dev/null +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb @@ -0,0 +1,33 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: GNU GPLv2 +# +# Notes:: +## + +easyblock = 'ConfigureMake' + +name = 'lynx' +version = '2.8.9' + +description = "lynx is an alphanumeric display oriented World-Wide Web Client" +homepage = 'http://lynx.isc.org/' + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://invisible-mirror.net/archives/lynx/tarballs'] +sources = ['%(name)s%(version)sdev.11.tar.bz2'] + +dependencies = [ + ('ncurses', '6.0'), +] +sanity_check_paths = { + 'files': ['bin/lynx'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From 74b43253719a950a3b13d30a3531754be93587b0 Mon Sep 17 00:00:00 2001 From: iotaka Date: Mon, 10 Apr 2017 09:49:43 +0200 Subject: [PATCH 0920/1311] change qt version dep --- .../ParaView/ParaView-5.3.0-foss-2016b-mpi.eb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-foss-2016b-mpi.eb diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-foss-2016b-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-foss-2016b-mpi.eb new file mode 100644 index 0000000000..b50111ff96 --- /dev/null +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-foss-2016b-mpi.eb @@ -0,0 +1,52 @@ +easyblock = 'CMakeMake' + +name = 'ParaView' +version = '5.3.0' +versionsuffix = '-mpi' + +homepage = "http://www.paraview.org" +description = "ParaView is a scientific parallel visualizer." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +download_suffix = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=all&downloadFile=' +source_urls = ['http://www.paraview.org/paraview-downloads/%s' % download_suffix] +sources = ["ParaView-v%(version)s.tar.gz"] + +dependencies = [ + ('X11', '20160819'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('Qt5', '5.7.0'), + ('zlib', '1.2.8'), + ('HDF5', '1.8.17'), + ('Python', '2.7.12'), +] + +builddependencies = [('CMake', '3.6.1')] + +separate_build_dir = True + +configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON -DPARAVIEW_USE_MPI=ON ' +configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s ' % SHLIB_EXT +configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.%s ' % SHLIB_EXT +configopts += '-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s ' % SHLIB_EXT +configopts += '-DVTK_USE_SYSTEM_HDF5=ON -DPARAVIEW_ENABLE_PYTHON=ON -DBUILD_SHARED_LIBS=ON ' +# if you want to build server only Paraview, uncomment the following line: +# configopts += '-DVTK_USE_X=OFF ' + +# Without internet connection turn off testing (uncomment the following line) +configopts += '-DBUILD_TESTING=OFF ' +# Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md +# and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly +# Without internet connection, comment the following two lines (configopts and prebuildopts) +configopts += '-DExternalData_OBJECT_STORES=%(builddir)s/ExternalData ' + +configopts += ' -DPARAVIEW_QT_VERSION=5 -DQt5_DIR=$EBROOTQT5/lib/cmake/Qt5 -DQT_QMAKE_EXECUTABLE=$EBROOTQT5/bin/qmake ' +# The ParaView server can be cranky, test downloads are quite often failing, especially in the case +# of parallel downloads. Using ; insted of && gives a second chance to download the test files, if the +# first serial attempt would fail. +prebuildopts = 'make VTKData ;' + +moduleclass = 'vis' -- GitLab From 6ac55301bd87882370344c539da5b133642f3089 Mon Sep 17 00:00:00 2001 From: iotaka Date: Mon, 10 Apr 2017 09:51:22 +0200 Subject: [PATCH 0921/1311] change ParaView version dep --- easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb index 4f9d282dad..00ba2fa1df 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb @@ -1,7 +1,7 @@ name = 'OpenFOAM' version = '4.0' -homepage = 'http://www.openfoam.org/' +homepage = 'http://www.openfoam.com/' description = """OpenFOAM is a free, open source CFD software package. OpenFOAM has an extensive range of features to solve anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, @@ -22,10 +22,9 @@ dependencies = [ ('ncurses', '6.0'), # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) ('METIS', '5.1.0'), - #('METIS', '5.1.0', '-32bitIDX'), ('SCOTCH', '6.0.4'), ('CGAL', '4.8.1'), - ('ParaView', '5.1.2', '-mpi'), + ('ParaView', '5.3.0', '-mpi'), ] builddependencies = [ -- GitLab From 18cb49ea57b2f04daf6f925cb00e2f9101bd260f Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 10 Apr 2017 09:28:35 +0100 Subject: [PATCH 0922/1311] adding easyconfigs: gnuplot-5.0.5-foss-2016b.eb --- .../g/gnuplot/gnuplot-5.0.5-foss-2016b.eb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb new file mode 100755 index 0000000000..52cec88efd --- /dev/null +++ b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb @@ -0,0 +1,42 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 University of Luxembourg/Luxembourg Centre for Systems Biomedicine +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## +easyblock = 'ConfigureMake' + +name = 'gnuplot' +version = '5.0.5' + +homepage = 'http://gnuplot.sourceforge.net/' +description = """Portable interactive, function plotting utility""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = [('http://sourceforge.net/projects/gnuplot/files', 'download')] + +dependencies = [ + ('cairo', '1.14.6'), + ('libjpeg-turbo', '1.5.0'), + ('libpng', '1.6.26'), + ('libgd', '2.2.3'), + ('Pango', '1.40.3'), + ('libcerf', '1.5'), + ('Qt', '4.8.7'), +] + +configopts = '--with-qt=qt4 ' + +sanity_check_paths = { + 'files': ['bin/gnuplot'], + 'dirs': [] +} + +moduleclass = 'vis' -- GitLab From a7fceb3c9b669fb14e2c23952a48482fca1b50c6 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Mon, 10 Apr 2017 09:31:00 +0100 Subject: [PATCH 0923/1311] adding easyconfigs: canu-1.4-foss-2016b.eb --- .../easyconfigs/c/canu/canu-1.4-foss-2016b.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 easybuild/easyconfigs/c/canu/canu-1.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/c/canu/canu-1.4-foss-2016b.eb b/easybuild/easyconfigs/c/canu/canu-1.4-foss-2016b.eb new file mode 100755 index 0000000000..ff486b7b50 --- /dev/null +++ b/easybuild/easyconfigs/c/canu/canu-1.4-foss-2016b.eb @@ -0,0 +1,38 @@ +easyblock = 'MakeCp' + +name = 'canu' +version = '1.4' + +homepage = 'https://github.com/marbl/canu' +description = """Canu is a fork of the Celera Assembler, designed for high-noise single-molecule + sequencing (such as the PacBio RS II or Oxford Nanopore MinION). + + Canu is a hierarchical assembly pipeline which runs in four steps: + + Detect overlaps in high-noise sequences using MHAP + Generate corrected sequence consensus + Trim corrected sequences + Assemble trimmed corrected sequences +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/marbl/canu/archive/'] + +start_dir = 'src' + +files_to_copy = ['Linux-amd64/*'] + +dependencies = [ + ('Java', '1.8.0_112', '', True), + ('Perl', '5.24.0'), + ('gnuplot', '5.0.5'), +] + +sanity_check_paths = { + 'files': ['bin/canu'], + 'dirs': ["bin"] +} + +moduleclass = 'bio' -- GitLab From a38d10acbf7234f434e0c19ff59dc699bc1f57d4 Mon Sep 17 00:00:00 2001 From: Fokke Dijkstra Date: Mon, 10 Apr 2017 10:54:07 +0200 Subject: [PATCH 0924/1311] Stacks 1.45 build with the foss-2016a toolchain. --- .../s/Stacks/Stacks-1.45-foss-2016a.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb new file mode 100644 index 0000000000..4f24751d68 --- /dev/null +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'Stacks' +version = '1.45' + +homepage = 'http://creskolab.uoregon.edu/stacks/' +description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. +""" + +toolchain = {'name': 'foss', 'version': '2016a'} + +source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), + ('sparsehash', '2.0.2'), +] + +sanity_check_paths = { + 'files': [ + 'bin/%s' % binfile for binfile in [ + 'clone_filter', 'denovo_map.pl', 'exec_velvet.pl', 'genotypes', 'index_radtags.pl', 'load_radtags.pl', + 'populations', 'process_shortreads', 'ref_map.pl', 'sstacks', 'ustacks', 'cstacks', 'estacks', + 'export_sql.pl', 'hstacks', 'kmer_filter', 'load_sequences.pl', 'process_radtags', 'pstacks', + 'sort_read_pairs.pl', 'stacks_export_notify.pl', + ] + ], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 21dee843cc0e8baa54067ef32a50cd458268bc25 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 10 Apr 2017 15:27:16 +0200 Subject: [PATCH 0925/1311] Add Qt5/5.8 for intel/2017a --- .../pkg-config-0.29.2-intel-2017a.eb | 27 +++++++++++++++ .../q/Qt5/Qt5-5.8.0-intel-2017a.eb | 33 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-intel-2017a.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-intel-2017a.eb new file mode 100644 index 0000000000..90af56a5b1 --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-intel-2017a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.2' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb new file mode 100644 index 0000000000..fc41f1c1fd --- /dev/null +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb @@ -0,0 +1,33 @@ +easyblock = 'EB_Qt' + +name = 'Qt5' +version = '5.8.0' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/single/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/single/' +] +sources = ['qt-everywhere-opensource-src-%(version)s.tar.xz'] + +patches = ['Qt5-5.7.1_fix-nan-inf.patch'] + +builddependencies = [ + ('pkg-config', '0.29.2'), +] + +# qtgamepad needs recent kernel/libevdev (fails on RHEL 6.x) +configopts = '-skip qtgamepad' + +dependencies = [ + ('GLib', '2.52.0'), + ('libpng', '1.6.29'), + ('X11', '20170314'), #, '', ('GCCcore', '6.3.0')), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' -- GitLab From 9406dda37ebe8a116f962078b11b46179fe977e7 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 10 Apr 2017 15:28:50 +0200 Subject: [PATCH 0926/1311] Added ParaView-5.3.0-intel-2017a-mpi --- .../c/CMake/CMake-3.7.2-intel-2017a.eb | 31 +++++++++++ .../h/HDF5/HDF5-1.8.18-intel-2017a.eb | 26 ++++++++++ .../ParaView-5.3.0-intel-2017a-mpi.eb | 52 +++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb new file mode 100644 index 0000000000..d78b6b43f1 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.7.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2j'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb new file mode 100644 index 0000000000..570e4a8ff2 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb @@ -0,0 +1,26 @@ +name = 'HDF5' +version = '1.8.18' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.11'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb new file mode 100644 index 0000000000..a124946808 --- /dev/null +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb @@ -0,0 +1,52 @@ +easyblock = 'CMakeMake' + +name = 'ParaView' +version = '5.3.0' +versionsuffix = '-mpi' + +homepage = "http://www.paraview.org" +description = "ParaView is a scientific parallel visualizer." + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +download_suffix = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=all&downloadFile=' +source_urls = ['http://www.paraview.org/paraview-downloads/%s' % download_suffix] +sources = ["ParaView-v%(version)s.tar.gz"] + +dependencies = [ + ('X11', '20170314'), + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('Qt5', '5.8.0'), + ('zlib', '1.2.11'), + ('HDF5', '1.8.18'), + ('Python', '2.7.13'), +] + +builddependencies = [('CMake', '3.7.2')] + +separate_build_dir = True + +configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON -DPARAVIEW_USE_MPI=ON ' +configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s ' % SHLIB_EXT +configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.%s ' % SHLIB_EXT +configopts += '-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s ' % SHLIB_EXT +configopts += '-DVTK_USE_SYSTEM_HDF5=ON -DPARAVIEW_ENABLE_PYTHON=ON -DBUILD_SHARED_LIBS=ON ' +# if you want to build server only Paraview, uncomment the following line: +# configopts += '-DVTK_USE_X=OFF ' + +# Without internet connection turn off testing (uncomment the following line) +configopts += '-DBUILD_TESTING=OFF ' +# Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md +# and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly +# Without internet connection, comment the following two lines (configopts and prebuildopts) +configopts += '-DExternalData_OBJECT_STORES=%(builddir)s/ExternalData ' + +configopts += ' -DPARAVIEW_QT_VERSION=5 -DQt5_DIR=$EBROOTQT5/lib/cmake/Qt5 -DQT_QMAKE_EXECUTABLE=$EBROOTQT5/bin/qmake ' +# The ParaView server can be cranky, test downloads are quite often failing, especially in the case +# of parallel downloads. Using ; insted of && gives a second chance to download the test files, if the +# first serial attempt would fail. +prebuildopts = 'make VTKData ;' + +moduleclass = 'vis' -- GitLab From 1f1e58d79e385169568b49542262db25ac27c804 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 10 Apr 2017 15:37:48 +0200 Subject: [PATCH 0927/1311] Added CGAL-4.9-intel-2017a-Python-2.7.13 --- .../CGAL-4.9-intel-2017a-Python-2.7.13.eb | 36 ++++ .../e/Eigen/Eigen-3.3.3-GCCcore-6.3.0.eb | 13 ++ .../m/MPFR/MPFR-3.1.5-20161219.patch | 174 ++++++++++++++++++ .../m/MPFR/MPFR-3.1.5-intel-2017a.eb | 29 +++ 4 files changed, 252 insertions(+) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-20161219.patch create mode 100644 easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..9b23706bf9 --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,36 @@ +name = 'CGAL' +version = '4.9' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-%(version)s'] +sources = [SOURCE_TAR_XZ] + +dependencies = [ + ('zlib', '1.2.11'), + ('Python', '2.7.13'), + ('Boost', '1.63.0', versionsuffix), + ('MPFR', '3.1.5'), + ('GMP', '6.1.2'), + ('libGLU', '9.0.0'), + ('Qt5', '5.8.0'), +] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Eigen', '3.3.3'), +] + +configopts = "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DWITH_ZLIB=ON -DWITH_MPFR=ON -DWITH_OpenGL=ON -DWITH_Eigen3=ON " +configopts += "-DWITH_GMPXX=ON -DWITH_LAPACK=ON -DWITH_BLAS=ON " + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-GCCcore-6.3.0.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..86af55ba48 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.3.3-GCCcore-6.3.0.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.3.3' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-20161219.patch b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-20161219.patch new file mode 100644 index 0000000000..6b2d11466e --- /dev/null +++ b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-20161219.patch @@ -0,0 +1,174 @@ +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-15 08:35:46.476430238 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-15 08:35:46.544430346 +0000 +@@ -0,0 +1 @@ ++vasprintf +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-15 08:35:46.544430346 +0000 +@@ -1 +1 @@ +-3.1.5 ++3.1.5-p1 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5" ++#define MPFR_VERSION_STRING "3.1.5-p1" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/vasprintf.c mpfr-3.1.5-b/src/vasprintf.c +--- mpfr-3.1.5-a/src/vasprintf.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/vasprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1593,7 +1593,7 @@ + } + else if (spec.spec == 'f' || spec.spec == 'F') + { +- if (spec.prec == -1) ++ if (spec.prec < 0) + spec.prec = 6; + if (regular_fg (np, p, spec, NULL) == -1) + goto error; +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-15 08:35:46.544430346 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5"; ++ return "3.1.5-p1"; + } +diff -Naurd mpfr-3.1.5-a/tests/tsprintf.c mpfr-3.1.5-b/tests/tsprintf.c +--- mpfr-3.1.5-a/tests/tsprintf.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tsprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1251,6 +1251,25 @@ + check_emin_aux (MPFR_EMIN_MIN); + } + ++static void ++test20161214 (void) ++{ ++ mpfr_t x; ++ char buf[32]; ++ const char s[] = "0x0.fffffffffffff8p+1024"; ++ int r; ++ ++ mpfr_init2 (x, 64); ++ mpfr_set_str (x, s, 16, MPFR_RNDN); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", -2, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN + 1, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN, x); ++ MPFR_ASSERTN(r == 316); ++ mpfr_clear (x); ++} ++ + int + main (int argc, char **argv) + { +@@ -1271,6 +1290,7 @@ + mixed (); + check_emax (); + check_emin (); ++ test20161214 (); + + #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) + #if MPFR_LCONV_DPTS +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-19 22:11:17.022676737 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-19 22:11:17.094676820 +0000 +@@ -0,0 +1 @@ ++strtofr +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-19 22:11:17.094676820 +0000 +@@ -1 +1 @@ +-3.1.5-p1 ++3.1.5-p2 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-19 22:11:17.090676815 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5-p1" ++#define MPFR_VERSION_STRING "3.1.5-p2" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/strtofr.c mpfr-3.1.5-b/src/strtofr.c +--- mpfr-3.1.5-a/src/strtofr.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/strtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -743,11 +743,14 @@ + of the pstr_size most significant digits of pstr->mant, with + equality in case exact is non-zero. */ + +- /* test if rounding is possible, and if so exit the loop */ +- if (exact || mpfr_can_round_raw (result, ysize, +- (pstr->negative) ? -1 : 1, +- ysize_bits - err - 1, +- MPFR_RNDN, rnd, MPFR_PREC(x))) ++ /* test if rounding is possible, and if so exit the loop. ++ Note: we also need to be able to determine the correct ternary value, ++ thus we use the MPFR_PREC(x) + (rnd == MPFR_RNDN) trick. ++ For example if result = xxx...xxx111...111 and rnd = RNDN, ++ then we know the correct rounding is xxx...xx(x+1), but we cannot know ++ the correct ternary value. */ ++ if (exact || mpfr_round_p (result, ysize, ysize_bits - err - 1, ++ MPFR_PREC(x) + (rnd == MPFR_RNDN))) + break; + + next_loop: +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-19 22:11:17.094676820 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5-p1"; ++ return "3.1.5-p2"; + } +diff -Naurd mpfr-3.1.5-a/tests/tstrtofr.c mpfr-3.1.5-b/tests/tstrtofr.c +--- mpfr-3.1.5-a/tests/tstrtofr.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tstrtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -1191,6 +1191,24 @@ + mpfr_clears (e, x1, x2, (mpfr_ptr) 0); + } + ++/* Note: the number is 5^47/2^9. */ ++static void ++bug20161217 (void) ++{ ++ mpfr_t fp, z; ++ static const char * num = "0.1387778780781445675529539585113525390625e31"; ++ int inex; ++ ++ mpfr_init2 (fp, 110); ++ mpfr_init2 (z, 110); ++ inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN); ++ MPFR_ASSERTN(inex == 0); ++ mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001101E-9"); ++ MPFR_ASSERTN(mpfr_equal_p (fp, z)); ++ mpfr_clear (fp); ++ mpfr_clear (z); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -1205,6 +1223,7 @@ + test20100310 (); + bug20120814 (); + bug20120829 (); ++ bug20161217 (); + + tests_end_mpfr (); + return 0; diff --git a/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-intel-2017a.eb b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-intel-2017a.eb new file mode 100644 index 0000000000..94a6262015 --- /dev/null +++ b/easybuild/easyconfigs/m/MPFR/MPFR-3.1.5-intel-2017a.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'MPFR' +version = '3.1.5' + +homepage = 'http://www.mpfr.org' +description = """The MPFR library is a C library for multiple-precision + floating-point computations with correct rounding.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.mpfr.org/mpfr-%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +patches = [ + 'MPFR_ictce_remove-deprecated-mp.patch', + '%(name)s-%(version)s-20161219.patch', +] + +dependencies = [('GMP', '6.1.2')] + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libmpfr.%s' % SHLIB_EXT, 'include/mpfr.h'], + 'dirs': [] +} + +moduleclass = 'math' -- GitLab From 7c2309cf46942ad0342bc4102db6e55fd02cef94 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 10 Apr 2017 15:40:35 +0200 Subject: [PATCH 0928/1311] Added OpenFOAM-4.1-intel-2017a --- .../m/METIS/METIS-5.1.0-intel-2017a.eb | 25 ++ .../o/OpenFOAM/OpenFOAM-4.1-cleanup.patch | 339 ++++++++++++++++++ .../o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb | 36 ++ .../s/SCOTCH/SCOTCH-6.0.4-intel-2017a.eb | 18 + 4 files changed, 418 insertions(+) create mode 100644 easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2017a.eb diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb new file mode 100644 index 0000000000..352a974db9 --- /dev/null +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb @@ -0,0 +1,25 @@ +name = 'METIS' +version = '5.1.0' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, +and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the +multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', +] + +# We use 32bit for indices and 64bit for content +patches = ['METIS-5.1.0-use-doubles.patch'] + +builddependencies = [('CMake', '3.7.2')] + +configopts = ['', 'shared=1'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch new file mode 100644 index 0000000000..6c5fc1671a --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch @@ -0,0 +1,339 @@ +# This patch removes all need for the ThirdParty files of OpenFOAM: +# we use EB dependencies for everything. It adjusts the paths, variables, etc +# We also let the install dir, compiler, etc be set by EB. +# Lastly, we also fix a small compile issue in 'ptscotchDecomp.C' +# Ward Poelmans +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/mesh/manipulation/setSet/Allwmake OpenFOAM-4.x-version-4.1/applications/utilities/mesh/manipulation/setSet/Allwmake +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/mesh/manipulation/setSet/Allwmake 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/mesh/manipulation/setSet/Allwmake 2017-04-10 14:51:01.472221220 +0200 +@@ -9,11 +9,11 @@ + # + # use readline if available + # +-if [ -f /usr/include/readline/readline.h ] ++if [ -f $EBROOTLIBREADLINE/include/readline/readline.h ] + then + echo "Found -- enabling readline support." + export COMP_FLAGS="-DHAS_READLINE" +- export LINK_FLAGS="-lreadline" ++ export LINK_FLAGS="-L$EBROOTLIBREADLINE/lib -lreadline -L$EBROOTNCURSES -lncurses" + fi + + wmake +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 +@@ -41,7 +41,7 @@ + # + + # Extend the auto-generated panel +-QT4_WRAP_CPP(MOC_SRCS pqPV3blockMeshReaderPanel.h) ++QT5_WRAP_CPP(MOC_SRCS pqPV3blockMeshReaderPanel.h) + + ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS + CLASS_NAME pqPV3blockMeshReaderPanel +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 +@@ -42,7 +42,7 @@ + # + + # Extend the auto-generated panel +-QT4_WRAP_CPP(MOC_SRCS pqPV3FoamReaderPanel.h) ++QT5_WRAP_CPP(MOC_SRCS pqPV3FoamReaderPanel.h) + + ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS + CLASS_NAME pqPV3FoamReaderPanel +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/Allwmake OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/Allwmake +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/Allwmake 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/Allwmake 2017-04-10 14:51:01.472221220 +0200 +@@ -16,7 +16,7 @@ + } + + # ensure CMake gets the correct C++ compiler +- [ -n "$WM_CXX" ] && export CXX="$WM_CXX" ++# [ -n "$WM_CXX" ] && export CXX="$WM_CXX" + + wmake $targetType vtkPVReaders + PVblockMeshReader/Allwmake $* +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 +@@ -42,7 +42,7 @@ + # + + # Extend the auto-generated panel +-QT4_WRAP_CPP(MOC_SRCS pqPVblockMeshReaderPanel.h) ++QT5_WRAP_CPP(MOC_SRCS pqPVblockMeshReaderPanel.h) + + ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS + CLASS_NAME pqPVblockMeshReaderPanel +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 +@@ -43,7 +43,7 @@ + # + + # Extend the auto-generated panel +-QT4_WRAP_CPP(MOC_SRCS pqPVFoamReaderPanel.h) ++QT5_WRAP_CPP(MOC_SRCS pqPVFoamReaderPanel.h) + + ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS + CLASS_NAME pqPVFoamReaderPanel +diff -ur OpenFOAM-4.x-version-4.1.org/etc/bashrc OpenFOAM-4.x-version-4.1/etc/bashrc +--- OpenFOAM-4.x-version-4.1.org/etc/bashrc 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/bashrc 2017-04-10 14:51:54.957704631 +0200 +@@ -42,9 +42,8 @@ + # + # Please set to the appropriate path if the default is not correct. + # +-[ $BASH_SOURCE ] && \ +-export FOAM_INST_DIR=$(cd ${BASH_SOURCE%/*/*/*} && pwd -P) || \ +-export FOAM_INST_DIR=$HOME/$WM_PROJECT ++# For Easybuild: set by the module ++# + # export FOAM_INST_DIR=~$WM_PROJECT + # export FOAM_INST_DIR=/opt/$WM_PROJECT + # export FOAM_INST_DIR=/usr/local/$WM_PROJECT +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/CGAL OpenFOAM-4.x-version-4.1/etc/config.sh/CGAL +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/CGAL 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/CGAL 2017-04-10 14:51:01.473221230 +0200 +@@ -36,37 +36,7 @@ + # + #------------------------------------------------------------------------------ + +-boost_version=boost-system +-cgal_version=cgal-system +-#cgal_version=CGAL-4.8 +- +-if [ -z "$SOURCE_CGAL_VERSIONS_ONLY" ] +-then +- +- common_path=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER +- +- export BOOST_ARCH_PATH=$common_path/$boost_version +- export CGAL_ARCH_PATH=$common_path/$cgal_version +- +- if [ "$FOAM_VERBOSE" -a "$PS1" ] +- then +- echo "Using CGAL and boost" 1>&2 +- echo " $cgal_version at $CGAL_ARCH_PATH" 1>&2 +- echo " $boost_version at $BOOST_ARCH_PATH" 1>&2 +- fi +- +- if [ -d "$CGAL_ARCH_PATH" -a "$cgal_version" != "cgal-system" ] +- then +- _foamAddLib $CGAL_ARCH_PATH/lib +- fi +- +- if [ -d "$BOOST_ARCH_PATH" -a "$boost_version" != "boost-system" ] +- then +- _foamAddLib $BOOST_ARCH_PATH/lib +- fi +- +- unset boost_version cgal_version common_path +- +-fi ++export CGAL_ARCH_PATH=$EBROOTCGAL ++export BOOST_ARCH_PATH=$EBROOTBOOST + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/gperftools OpenFOAM-4.x-version-4.1/etc/config.sh/gperftools +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/gperftools 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/gperftools 2017-04-10 14:51:01.473221230 +0200 +@@ -29,13 +29,7 @@ + # + #------------------------------------------------------------------------------ + +-version=svn +-gperftools_install=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER +- +-GPERFTOOLS_VERSION=gperftools-$version +-GPERFTOOLS_ARCH_PATH=$gperftools_install/$GPERFTOOLS_VERSION +- +-export PATH=$GPERFTOOLS_ARCH_PATH/bin:$PATH +-export LD_LIBRARY_PATH=$GPERFTOOLS_ARCH_PATH/lib:$LD_LIBRARY_PATH ++GPERFTOOLS_VERSION=gperftools-$EBVERSIONGPERFTOOLS ++GPERFTOOLS_ARCH_PATH=$EBROOTGPERFTOOLS + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/metis OpenFOAM-4.x-version-4.1/etc/config.sh/metis +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/metis 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/metis 2017-04-10 14:51:01.473221230 +0200 +@@ -34,7 +34,7 @@ + # + #------------------------------------------------------------------------------ + +-export METIS_VERSION=metis-5.1.0 +-export METIS_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$METIS_VERSION ++export METIS_VERSION=metis-$EBVERSIONMETIS ++export METIS_ARCH_PATH=$EBROOTMETIS + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/mpi OpenFOAM-4.x-version-4.1/etc/config.sh/mpi +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/mpi 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/mpi 2017-04-10 14:51:01.473221230 +0200 +@@ -249,6 +249,9 @@ + _foamAddPath $MPI_ARCH_PATH/bin64 + _foamAddLib $MPI_ARCH_PATH/lib64 + ;; ++EASYBUILDMPI) ++ export FOAM_MPI=mpi ++ ;; + *) + export FOAM_MPI=dummy + ;; +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/paraview OpenFOAM-4.x-version-4.1/etc/config.sh/paraview +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/paraview 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/paraview 2017-04-10 14:51:01.473221230 +0200 +@@ -41,21 +41,6 @@ + ) \ + && PATH="$cleaned" + +-# Determine the cmake to be used +-unset CMAKE_HOME +-for cmake in cmake-3.2.1 cmake-2.8.12.1 cmake-2.8.8 cmake-2.8.4 cmake-2.8.3 \ +- cmake-2.8.1 +-do +- cmake=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cmake +- if [ -r $cmake ] +- then +- export CMAKE_HOME=$cmake +- export CMAKE_ROOT=$cmake +- export PATH=$CMAKE_HOME/bin:$PATH +- break +- fi +-done +- + + #- ParaView version, automatically determine major version + #export ParaView_VERSION=3.12.0 +@@ -64,7 +49,7 @@ + #export ParaView_VERSION=4.3.1 + #export ParaView_VERSION=4.4.0 + #export ParaView_VERSION=5.0.0 +-export ParaView_VERSION=5.0.1 ++export ParaView_VERSION=$EBVERSIONPARAVIEW + export ParaView_MAJOR=detect + + +@@ -105,21 +90,15 @@ + paraviewInstDir=$WM_THIRD_PARTY_DIR/ParaView-$ParaView_VERSION + paraviewArchName=ParaView-$ParaView_VERSION + +-export ParaView_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$paraviewArchName ++export ParaView_DIR=$EBROOTPARAVIEW + + # Set paths if binaries or source are present + if [ -r $ParaView_DIR -o -r $paraviewInstDir ] + then + export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-$ParaView_MAJOR +- if [ ! -d $ParaView_INCLUDE_DIR -a -d $ParaView_DIR/include/paraview-3.0 ] +- then +- export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-3.0 +- fi + + ParaView_LIB_DIR=$ParaView_DIR/lib/paraview-$ParaView_MAJOR + +- export PATH=$ParaView_DIR/bin:$PATH +- export LD_LIBRARY_PATH=$ParaView_LIB_DIR:$LD_LIBRARY_PATH + export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-$ParaView_MAJOR + + if [ "$FOAM_VERBOSE" -a "$PS1" ] +@@ -131,17 +110,6 @@ + echo " PV_PLUGIN_PATH : $PV_PLUGIN_PATH" + fi + +- # Add in python libraries if required +- paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping +- if [ -r $paraviewPython ] +- then +- if [ "$PYTHONPATH" ] +- then +- export PYTHONPATH=$PYTHONPATH:$paraviewPython:$ParaView_LIB_DIR +- else +- export PYTHONPATH=$paraviewPython:$ParaView_LIB_DIR +- fi +- fi + else + unset PV_PLUGIN_PATH + fi +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/scotch OpenFOAM-4.x-version-4.1/etc/config.sh/scotch +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/scotch 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/scotch 2017-04-10 14:51:01.473221230 +0200 +@@ -37,7 +37,7 @@ + # + #------------------------------------------------------------------------------ + +-export SCOTCH_VERSION=scotch_6.0.3 +-export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$SCOTCH_VERSION ++export SCOTCH_VERSION=scotch_$EBVERSIONSCOTCH ++export SCOTCH_ARCH_PATH=$EBROOTSCOTCH + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/settings OpenFOAM-4.x-version-4.1/etc/config.sh/settings +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/settings 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/settings 2017-04-10 14:51:01.473221230 +0200 +@@ -56,11 +56,11 @@ + 64) + WM_ARCH=linux64 + export WM_COMPILER_LIB_ARCH=64 +- export WM_CC='gcc' +- export WM_CXX='g++' +- export WM_CFLAGS='-m64 -fPIC' +- export WM_CXXFLAGS='-m64 -fPIC -std=c++0x' +- export WM_LDFLAGS='-m64' ++ export WM_CC=$CC ++ export WM_CXX=$CXX ++ export WM_CFLAGS=$CFLAGS ++ export WM_CXXFLAGS=$CXXFLAGS ++ export WM_LDFLAGS=$LDFLAGS + ;; + *) + echo "Unknown WM_ARCH_OPTION '$WM_ARCH_OPTION', should be 32 or 64"\ +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/Make/options OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/Make/options +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/Make/options 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/Make/options 2017-04-10 14:51:01.473221230 +0200 +@@ -3,10 +3,8 @@ + + EXE_INC = \ + $(PFLAGS) $(PINC) \ +- -I$(SCOTCH_ROOT)/include \ + -I$(SCOTCH_ARCH_PATH)/include/$(FOAM_MPI) \ +- -I/usr/include/scotch \ + -I../decompositionMethods/lnInclude + + LIB_LIBS = \ +- -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lscotch ${LINK_FLAGS} -lrt ++ -L$(SCOTCH_ARCH_PATH)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lscotch ${LINK_FLAGS} -lrt +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C 2017-04-10 14:51:01.474221238 +0200 +@@ -30,10 +30,11 @@ + #include "globalIndex.H" + #include "SubField.H" + ++#include ++ + extern "C" + { + #include +- #include + #include "ptscotch.h" + } + +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/scotchDecomp/Make/options OpenFOAM-4.x-version-4.1/src/parallel/decompose/scotchDecomp/Make/options +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/scotchDecomp/Make/options 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/scotchDecomp/Make/options 2017-04-10 14:51:01.474221238 +0200 +@@ -7,10 +7,8 @@ + + EXE_INC = \ + $(PFLAGS) $(PINC) \ +- -I$(SCOTCH_ROOT)/include \ + -I$(SCOTCH_ARCH_PATH)/include \ +- -I/usr/include/scotch \ + -I../decompositionMethods/lnInclude + + LIB_LIBS = \ +- -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit -lrt ++ -L$(SCOTCH_ARCH_PATH)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit -lrt diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb new file mode 100644 index 0000000000..214d84ba90 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb @@ -0,0 +1,36 @@ +name = 'OpenFOAM' +version = '4.1' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/OpenFOAM/OpenFOAM-%(version_major)s.x/archive'] +sources = ['version-%(version)s.tar.gz'] + +checksums = ['318a446c4ae6366c7296b61184acd37c'] + +patches = ['OpenFOAM-%(version)s-cleanup.patch'] + +dependencies = [ + ('libreadline', '7.0'), + ('ncurses', '6.0'), + # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) + ('METIS', '5.1.0'), + ('SCOTCH', '6.0.4'), + ('CGAL', '4.9', '-Python-2.7.13'), + ('ParaView', '5.3.0', '-mpi'), +] + +builddependencies = [ + ('Bison', '3.0.4'), + ('CMake', '3.7.2'), + ('flex', '2.6.3'), +] + +moduleclass = 'cae' diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2017a.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2017a.eb new file mode 100644 index 0000000000..56f2a3c362 --- /dev/null +++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-6.0.4-intel-2017a.eb @@ -0,0 +1,18 @@ +name = 'SCOTCH' +version = '6.0.4' + +homepage = 'http://gforge.inria.fr/projects/scotch/' +description = """Software package and libraries for sequential and parallel graph partitioning, +static mapping, and sparse matrix block ordering, and sequential mesh and hypergraph partitioning.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://gforge.inria.fr/frs/download.php/file/34618/'] +sources = ['%(namelower)s_%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.11'), +] + +moduleclass = 'math' -- GitLab From f0c6c952907f6b57aaef620f887e0e90aabd9940 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 10 Apr 2017 15:47:12 +0200 Subject: [PATCH 0929/1311] Downgrade ParaView to 5.2 as OpenFOAM 4.1 does not work with 5.3 They uses something that has been dropped in ParaView 5.3 --- easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb | 2 +- ...3.0-intel-2017a-mpi.eb => ParaView-5.2.0-intel-2017a-mpi.eb} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/p/ParaView/{ParaView-5.3.0-intel-2017a-mpi.eb => ParaView-5.2.0-intel-2017a-mpi.eb} (99%) diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb index 214d84ba90..2469f2947a 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb @@ -24,7 +24,7 @@ dependencies = [ ('METIS', '5.1.0'), ('SCOTCH', '6.0.4'), ('CGAL', '4.9', '-Python-2.7.13'), - ('ParaView', '5.3.0', '-mpi'), + ('ParaView', '5.2.0', '-mpi'), ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb similarity index 99% rename from easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb rename to easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb index a124946808..addfba2c58 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-5.3.0-intel-2017a-mpi.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb @@ -1,7 +1,7 @@ easyblock = 'CMakeMake' name = 'ParaView' -version = '5.3.0' +version = '5.2.0' versionsuffix = '-mpi' homepage = "http://www.paraview.org" -- GitLab From 9f863dc507b877ed77968f9d56a47408b7f5e970 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 11 Apr 2017 10:33:06 +0200 Subject: [PATCH 0930/1311] Switch OpenFOAM 4.1 to Qt 4.x OpenFOAM doesn't work with Qt5 yet... --- .../CGAL-4.9-intel-2017a-Python-2.7.13.eb | 2 +- .../o/OpenFOAM/OpenFOAM-4.1-cleanup.patch | 48 ------------------- .../ParaView-5.2.0-intel-2017a-mpi.eb | 4 +- .../easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb | 28 +++++++++++ 4 files changed, 31 insertions(+), 51 deletions(-) create mode 100644 easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb index 9b23706bf9..da60ff72f0 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb @@ -19,7 +19,7 @@ dependencies = [ ('MPFR', '3.1.5'), ('GMP', '6.1.2'), ('libGLU', '9.0.0'), - ('Qt5', '5.8.0'), + ('Qt', '4.8.7'), ] builddependencies = [ diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch index 6c5fc1671a..1098db34cb 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch @@ -20,30 +20,6 @@ diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/mesh/manipulation/s fi wmake -diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt ---- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 -+++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 -@@ -41,7 +41,7 @@ - # - - # Extend the auto-generated panel --QT4_WRAP_CPP(MOC_SRCS pqPV3blockMeshReaderPanel.h) -+QT5_WRAP_CPP(MOC_SRCS pqPV3blockMeshReaderPanel.h) - - ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS - CLASS_NAME pqPV3blockMeshReaderPanel -diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt ---- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 -+++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 -@@ -42,7 +42,7 @@ - # - - # Extend the auto-generated panel --QT4_WRAP_CPP(MOC_SRCS pqPV3FoamReaderPanel.h) -+QT5_WRAP_CPP(MOC_SRCS pqPV3FoamReaderPanel.h) - - ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS - CLASS_NAME pqPV3FoamReaderPanel diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/Allwmake OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/Allwmake --- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/Allwmake 2016-10-16 16:11:45.000000000 +0200 +++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/Allwmake 2017-04-10 14:51:01.472221220 +0200 @@ -56,30 +32,6 @@ diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/grap wmake $targetType vtkPVReaders PVblockMeshReader/Allwmake $* -diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt ---- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 -+++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 -@@ -42,7 +42,7 @@ - # - - # Extend the auto-generated panel --QT4_WRAP_CPP(MOC_SRCS pqPVblockMeshReaderPanel.h) -+QT5_WRAP_CPP(MOC_SRCS pqPVblockMeshReaderPanel.h) - - ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS - CLASS_NAME pqPVblockMeshReaderPanel -diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt ---- OpenFOAM-4.x-version-4.1.org/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt 2016-10-16 16:11:45.000000000 +0200 -+++ OpenFOAM-4.x-version-4.1/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt 2017-04-10 14:52:45.450160371 +0200 -@@ -43,7 +43,7 @@ - # - - # Extend the auto-generated panel --QT4_WRAP_CPP(MOC_SRCS pqPVFoamReaderPanel.h) -+QT5_WRAP_CPP(MOC_SRCS pqPVFoamReaderPanel.h) - - ADD_PARAVIEW_OBJECT_PANEL(IFACES IFACE_SRCS - CLASS_NAME pqPVFoamReaderPanel diff -ur OpenFOAM-4.x-version-4.1.org/etc/bashrc OpenFOAM-4.x-version-4.1/etc/bashrc --- OpenFOAM-4.x-version-4.1.org/etc/bashrc 2016-10-16 16:11:45.000000000 +0200 +++ OpenFOAM-4.x-version-4.1/etc/bashrc 2017-04-10 14:51:54.957704631 +0200 diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb index addfba2c58..903174f12f 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb @@ -18,7 +18,7 @@ dependencies = [ ('X11', '20170314'), ('Mesa', '17.0.2'), ('libGLU', '9.0.0'), - ('Qt5', '5.8.0'), + ('Qt', '4.8.7'), ('zlib', '1.2.11'), ('HDF5', '1.8.18'), ('Python', '2.7.13'), @@ -43,7 +43,7 @@ configopts += '-DBUILD_TESTING=OFF ' # Without internet connection, comment the following two lines (configopts and prebuildopts) configopts += '-DExternalData_OBJECT_STORES=%(builddir)s/ExternalData ' -configopts += ' -DPARAVIEW_QT_VERSION=5 -DQt5_DIR=$EBROOTQT5/lib/cmake/Qt5 -DQT_QMAKE_EXECUTABLE=$EBROOTQT5/bin/qmake ' +configopts += ' -DPARAVIEW_QT_VERSION=4 -DQT_QMAKE_EXECUTABLE=$EBROOTQT/bin/qmake ' # The ParaView server can be cranky, test downloads are quite often failing, especially in the case # of parallel downloads. Using ; insted of && gives a second chance to download the test files, if the # first serial attempt would fail. diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb new file mode 100644 index 0000000000..f45873187d --- /dev/null +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb @@ -0,0 +1,28 @@ +name = 'Qt' +version = '4.8.7' + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/' +] +sources = ['%(namelower)s-everywhere-opensource-src-%(version)s.tar.gz'] + +patches = ['Qt-%(version)s_phonon-export.patch'] + +builddependencies = [ + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('GLib', '2.52.0'), + ('libpng', '1.6.29'), + ('X11', '20170314'), + ('libGLU', '9.0.0'), +] + +moduleclass = 'devel' -- GitLab From cccb215e70aba11ff7b33283085b9a4763b97c58 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 11 Apr 2017 12:00:50 +0200 Subject: [PATCH 0931/1311] Qt4 also for CGAL --- .../o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb | 2 +- .../ParaView/ParaView-5.2.0-foss-2016b-mpi.eb | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb index 00ba2fa1df..3db67b3e22 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.0-foss-2016b.eb @@ -24,7 +24,7 @@ dependencies = [ ('METIS', '5.1.0'), ('SCOTCH', '6.0.4'), ('CGAL', '4.8.1'), - ('ParaView', '5.3.0', '-mpi'), + ('ParaView', '5.2.0', '-mpi'), ] builddependencies = [ diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb new file mode 100644 index 0000000000..5dd45f28db --- /dev/null +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb @@ -0,0 +1,51 @@ +easyblock = 'CMakeMake' + +name = 'ParaView' +version = '5.2.0' +versionsuffix = '-mpi' + +homepage = "http://www.paraview.org" +description = "ParaView is a scientific parallel visualizer." + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True, 'usempi': True} + +download_suffix = 'download.php?submit=Download&version=v%(version_major_minor)s&type=source&os=all&downloadFile=' +source_urls = ['http://www.paraview.org/paraview-downloads/%s' % download_suffix] +sources = ["ParaView-v%(version)s.tar.gz"] + +dependencies = [ + ('X11', '20160819'), + ('Mesa', '12.0.2'), + ('libGLU', '9.0.0'), + ('Qt', '4.8.7'), + ('zlib', '1.2.8'), + ('HDF5', '1.8.17'), + ('Python', '2.7.12'), +] + +builddependencies = [('CMake', '3.6.1')] + +separate_build_dir = True + +configopts = '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DVTK_OPENGL_HAS_OSMESA=ON -DPARAVIEW_USE_MPI=ON ' +configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s ' % SHLIB_EXT +configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.%s ' % SHLIB_EXT +configopts += '-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s ' % SHLIB_EXT +configopts += '-DVTK_USE_SYSTEM_HDF5=ON -DPARAVIEW_ENABLE_PYTHON=ON -DBUILD_SHARED_LIBS=ON ' +# if you want to build server only Paraview, uncomment the following line: +# configopts += '-DVTK_USE_X=OFF ' + +# Without internet connection turn off testing (uncomment the following line) +configopts += '-DBUILD_TESTING=OFF ' +# Or consult https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/git/data.md +# and download ExternalData to $EASYBUILD_SOURCEPATH and adjust -DExternalData_OBJECT_STORES accordingly +# Without internet connection, comment the following two lines (configopts and prebuildopts) +configopts += '-DExternalData_OBJECT_STORES=%(builddir)s/ExternalData ' + +# The ParaView server can be cranky, test downloads are quite often failing, especially in the case +# of parallel downloads. Using ; insted of && gives a second chance to download the test files, if the +# first serial attempt would fail. +prebuildopts = 'make VTKData ;' + +moduleclass = 'vis' -- GitLab From 090054ad90088e311860cfdc0b1c228030fe1834 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 11 Apr 2017 12:51:58 +0200 Subject: [PATCH 0932/1311] Force usage of C++98 for Qt4 with intel/2017a --- easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb index f45873187d..f9818f430a 100644 --- a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-intel-2017a.eb @@ -5,6 +5,7 @@ homepage = 'http://qt.io/' description = "Qt is a comprehensive cross-platform C++ application framework." toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'cstd': 'gnu++98'} source_urls = [ 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/', -- GitLab From d1193f3f30d6139025fa19716905c166ab9520e8 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 11 Apr 2017 14:37:55 +0200 Subject: [PATCH 0933/1311] Qt4 also for CGAL --- .../o/OpenFOAM/OpenFOAM-4.1-cleanup.patch | 281 ++++++++++++++++++ .../o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb | 36 +++ 2 files changed, 317 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch new file mode 100644 index 0000000000..d7e72b20c9 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-cleanup.patch @@ -0,0 +1,281 @@ +# This patch removes all need for the ThirdParty files of OpenFOAM: +# we use EB dependencies for everything. It adjusts the paths, variables, etc +# We also let the install dir, compiler, etc be set by EB. +# Lastly, we also fix a small compile issue in 'ptscotchDecomp.C' +# Ward Poelmans +diff -ur OpenFOAM-4.x-version-4.1.org/applications/utilities/mesh/manipulation/setSet/Allwmake OpenFOAM-4.x-version-4.1/applications/utilities/mesh/manipulation/setSet/Allwmake +--- OpenFOAM-4.x-version-4.1.org/applications/utilities/mesh/manipulation/setSet/Allwmake 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/applications/utilities/mesh/manipulation/setSet/Allwmake 2017-04-10 14:51:01.472221220 +0200 +@@ -9,11 +9,11 @@ + # + # use readline if available + # +-if [ -f /usr/include/readline/readline.h ] ++if [ -f $EBROOTLIBREADLINE/include/readline/readline.h ] + then + echo "Found -- enabling readline support." + export COMP_FLAGS="-DHAS_READLINE" +- export LINK_FLAGS="-lreadline" ++ export LINK_FLAGS="-L$EBROOTLIBREADLINE/lib -lreadline -L$EBROOTNCURSES -lncurses" + fi + + wmake +diff -ur OpenFOAM-4.x-version-4.1.org/etc/bashrc OpenFOAM-4.x-version-4.1/etc/bashrc +--- OpenFOAM-4.x-version-4.1.org/etc/bashrc 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/bashrc 2017-04-10 14:51:54.957704631 +0200 +@@ -42,9 +42,8 @@ + # + # Please set to the appropriate path if the default is not correct. + # +-[ $BASH_SOURCE ] && \ +-export FOAM_INST_DIR=$(cd ${BASH_SOURCE%/*/*/*} && pwd -P) || \ +-export FOAM_INST_DIR=$HOME/$WM_PROJECT ++# For Easybuild: set by the module ++# + # export FOAM_INST_DIR=~$WM_PROJECT + # export FOAM_INST_DIR=/opt/$WM_PROJECT + # export FOAM_INST_DIR=/usr/local/$WM_PROJECT +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/CGAL OpenFOAM-4.x-version-4.1/etc/config.sh/CGAL +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/CGAL 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/CGAL 2017-04-10 14:51:01.473221230 +0200 +@@ -36,37 +36,7 @@ + # + #------------------------------------------------------------------------------ + +-boost_version=boost-system +-cgal_version=cgal-system +-#cgal_version=CGAL-4.8 +- +-if [ -z "$SOURCE_CGAL_VERSIONS_ONLY" ] +-then +- +- common_path=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER +- +- export BOOST_ARCH_PATH=$common_path/$boost_version +- export CGAL_ARCH_PATH=$common_path/$cgal_version +- +- if [ "$FOAM_VERBOSE" -a "$PS1" ] +- then +- echo "Using CGAL and boost" 1>&2 +- echo " $cgal_version at $CGAL_ARCH_PATH" 1>&2 +- echo " $boost_version at $BOOST_ARCH_PATH" 1>&2 +- fi +- +- if [ -d "$CGAL_ARCH_PATH" -a "$cgal_version" != "cgal-system" ] +- then +- _foamAddLib $CGAL_ARCH_PATH/lib +- fi +- +- if [ -d "$BOOST_ARCH_PATH" -a "$boost_version" != "boost-system" ] +- then +- _foamAddLib $BOOST_ARCH_PATH/lib +- fi +- +- unset boost_version cgal_version common_path +- +-fi ++export CGAL_ARCH_PATH=$EBROOTCGAL ++export BOOST_ARCH_PATH=$EBROOTBOOST + +#------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/gperftools OpenFOAM-4.x-version-4.1/etc/config.sh/gperftools +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/gperftools 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/gperftools 2017-04-10 14:51:01.473221230 +0200 +@@ -29,13 +29,7 @@ + # + #------------------------------------------------------------------------------ + +-version=svn +-gperftools_install=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER +- +-GPERFTOOLS_VERSION=gperftools-$version +-GPERFTOOLS_ARCH_PATH=$gperftools_install/$GPERFTOOLS_VERSION +- +-export PATH=$GPERFTOOLS_ARCH_PATH/bin:$PATH +-export LD_LIBRARY_PATH=$GPERFTOOLS_ARCH_PATH/lib:$LD_LIBRARY_PATH ++GPERFTOOLS_VERSION=gperftools-$EBVERSIONGPERFTOOLS ++GPERFTOOLS_ARCH_PATH=$EBROOTGPERFTOOLS + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/metis OpenFOAM-4.x-version-4.1/etc/config.sh/metis +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/metis 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/metis 2017-04-10 14:51:01.473221230 +0200 +@@ -34,7 +34,7 @@ + # + #------------------------------------------------------------------------------ + +-export METIS_VERSION=metis-5.1.0 +-export METIS_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$METIS_VERSION ++export METIS_VERSION=metis-$EBVERSIONMETIS ++export METIS_ARCH_PATH=$EBROOTMETIS + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/mpi OpenFOAM-4.x-version-4.1/etc/config.sh/mpi +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/mpi 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/mpi 2017-04-10 14:51:01.473221230 +0200 +@@ -249,6 +249,9 @@ + _foamAddPath $MPI_ARCH_PATH/bin64 + _foamAddLib $MPI_ARCH_PATH/lib64 + ;; ++EASYBUILDMPI) ++ export FOAM_MPI=mpi ++ ;; + *) + export FOAM_MPI=dummy + ;; +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/paraview OpenFOAM-4.x-version-4.1/etc/config.sh/paraview +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/paraview 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/paraview 2017-04-10 14:51:01.473221230 +0200 +@@ -41,21 +41,6 @@ + ) \ + && PATH="$cleaned" + +-# Determine the cmake to be used +-unset CMAKE_HOME +-for cmake in cmake-3.2.1 cmake-2.8.12.1 cmake-2.8.8 cmake-2.8.4 cmake-2.8.3 \ +- cmake-2.8.1 +-do +- cmake=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cmake +- if [ -r $cmake ] +- then +- export CMAKE_HOME=$cmake +- export CMAKE_ROOT=$cmake +- export PATH=$CMAKE_HOME/bin:$PATH +- break +- fi +-done +- + + #- ParaView version, automatically determine major version + #export ParaView_VERSION=3.12.0 +@@ -64,7 +49,7 @@ + #export ParaView_VERSION=4.3.1 + #export ParaView_VERSION=4.4.0 + #export ParaView_VERSION=5.0.0 +-export ParaView_VERSION=5.0.1 ++export ParaView_VERSION=$EBVERSIONPARAVIEW + export ParaView_MAJOR=detect + + +@@ -105,21 +90,15 @@ + paraviewInstDir=$WM_THIRD_PARTY_DIR/ParaView-$ParaView_VERSION + paraviewArchName=ParaView-$ParaView_VERSION + +-export ParaView_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$paraviewArchName ++export ParaView_DIR=$EBROOTPARAVIEW + + # Set paths if binaries or source are present + if [ -r $ParaView_DIR -o -r $paraviewInstDir ] + then + export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-$ParaView_MAJOR +- if [ ! -d $ParaView_INCLUDE_DIR -a -d $ParaView_DIR/include/paraview-3.0 ] +- then +- export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-3.0 +- fi + + ParaView_LIB_DIR=$ParaView_DIR/lib/paraview-$ParaView_MAJOR + +- export PATH=$ParaView_DIR/bin:$PATH +- export LD_LIBRARY_PATH=$ParaView_LIB_DIR:$LD_LIBRARY_PATH + export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-$ParaView_MAJOR + + if [ "$FOAM_VERBOSE" -a "$PS1" ] +@@ -131,17 +110,6 @@ + echo " PV_PLUGIN_PATH : $PV_PLUGIN_PATH" + fi + +- # Add in python libraries if required +- paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping +- if [ -r $paraviewPython ] +- then +- if [ "$PYTHONPATH" ] +- then +- export PYTHONPATH=$PYTHONPATH:$paraviewPython:$ParaView_LIB_DIR +- else +- export PYTHONPATH=$paraviewPython:$ParaView_LIB_DIR +- fi +- fi + else + unset PV_PLUGIN_PATH + fi +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/scotch OpenFOAM-4.x-version-4.1/etc/config.sh/scotch +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/scotch 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/scotch 2017-04-10 14:51:01.473221230 +0200 +@@ -37,7 +37,7 @@ + # + #------------------------------------------------------------------------------ + +-export SCOTCH_VERSION=scotch_6.0.3 +-export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$SCOTCH_VERSION ++export SCOTCH_VERSION=scotch_$EBVERSIONSCOTCH ++export SCOTCH_ARCH_PATH=$EBROOTSCOTCH + + #------------------------------------------------------------------------------ +diff -ur OpenFOAM-4.x-version-4.1.org/etc/config.sh/settings OpenFOAM-4.x-version-4.1/etc/config.sh/settings +--- OpenFOAM-4.x-version-4.1.org/etc/config.sh/settings 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/etc/config.sh/settings 2017-04-10 14:51:01.473221230 +0200 +@@ -56,11 +56,11 @@ + 64) + WM_ARCH=linux64 + export WM_COMPILER_LIB_ARCH=64 +- export WM_CC='gcc' +- export WM_CXX='g++' +- export WM_CFLAGS='-m64 -fPIC' +- export WM_CXXFLAGS='-m64 -fPIC -std=c++0x' +- export WM_LDFLAGS='-m64' ++ export WM_CC=$CC ++ export WM_CXX=$CXX ++ export WM_CFLAGS=$CFLAGS ++ export WM_CXXFLAGS=$CXXFLAGS ++ export WM_LDFLAGS=$LDFLAGS + ;; + *) + echo "Unknown WM_ARCH_OPTION '$WM_ARCH_OPTION', should be 32 or 64"\ +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/Make/options OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/Make/options +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/Make/options 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/Make/options 2017-04-10 14:51:01.473221230 +0200 +@@ -3,10 +3,8 @@ + + EXE_INC = \ + $(PFLAGS) $(PINC) \ +- -I$(SCOTCH_ROOT)/include \ + -I$(SCOTCH_ARCH_PATH)/include/$(FOAM_MPI) \ +- -I/usr/include/scotch \ + -I../decompositionMethods/lnInclude + + LIB_LIBS = \ +- -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lscotch ${LINK_FLAGS} -lrt ++ -L$(SCOTCH_ARCH_PATH)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit -lscotch ${LINK_FLAGS} -lrt +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/ptscotchDecomp/ptscotchDecomp.C 2017-04-10 14:51:01.474221238 +0200 +@@ -30,10 +30,11 @@ + #include "globalIndex.H" + #include "SubField.H" + ++#include ++ + extern "C" + { + #include +- #include + #include "ptscotch.h" + } + +diff -ur OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/scotchDecomp/Make/options OpenFOAM-4.x-version-4.1/src/parallel/decompose/scotchDecomp/Make/options +--- OpenFOAM-4.x-version-4.1.org/src/parallel/decompose/scotchDecomp/Make/options 2016-10-16 16:11:45.000000000 +0200 ++++ OpenFOAM-4.x-version-4.1/src/parallel/decompose/scotchDecomp/Make/options 2017-04-10 14:51:01.474221238 +0200 +@@ -7,10 +7,8 @@ + + EXE_INC = \ + $(PFLAGS) $(PINC) \ +- -I$(SCOTCH_ROOT)/include \ + -I$(SCOTCH_ARCH_PATH)/include \ +- -I/usr/include/scotch \ + -I../decompositionMethods/lnInclude + + LIB_LIBS = \ +- -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit -lrt ++ -L$(SCOTCH_ARCH_PATH)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit -lrt + + diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb new file mode 100644 index 0000000000..efc992104f --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb @@ -0,0 +1,36 @@ +name = 'OpenFOAM' +version = '4.1' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/OpenFOAM/OpenFOAM-%(version_major)s.x/archive'] +sources = ['version-%(version)s.tar.gz'] + +checksums = ['318a446c4ae6366c7296b61184acd37c'] + +patches = ['OpenFOAM-%(version)s-cleanup.patch'] + +dependencies = [ + ('libreadline', '6.3'), + ('ncurses', '6.0'), + # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) + ('METIS', '5.1.0'), + ('SCOTCH', '6.0.4'), + ('CGAL', '4.8.1'), + ('ParaView', '5.1.2', '-mpi'), +] + +builddependencies = [ + ('Bison', '3.0.4'), + ('CMake', '3.6.1'), + ('flex', '2.6.0'), +] + +moduleclass = 'cae' -- GitLab From 18dd07b9caed0bb7fe11b96ec455336759009e7b Mon Sep 17 00:00:00 2001 From: Daniel Navarro-Gomez Date: Tue, 11 Apr 2017 11:10:43 -0400 Subject: [PATCH 0934/1311] Added PLINK-1.9b_4.1-x86_64.eb --- .../p/PLINK/PLINK-1.9b_4.1-x86_64.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb diff --git a/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb b/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb new file mode 100644 index 0000000000..fdc904389a --- /dev/null +++ b/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb @@ -0,0 +1,30 @@ +easyblock = 'PackedBinary' + +name = 'PLINK' +version = '1.9b-4.1-x86_64' + +homepage = 'https://www.cog-genomics.org/plink/1.9/' +description = 'plink-1.9-x86_64: Whole-genome association analysis toolset' + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['plink_linux_x86_64.zip'] +source_urls = ['https://www.cog-genomics.org/static/bin/plink170330/'] + +checksums = ['27e05daa4de39a15a9c7034998a35cc4'] + +files_to_copy = [ + 'plink', + 'gPLINK.jar', + 'test.map', + 'test.ped', + 'COPYING.txt', + 'README.txt', +] + +sanity_check_paths = { + 'files': ['plink', 'prettify', 'toy.map', 'toy.ped'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 798ff8c32a5f67ca08f3607017b8b43ef4a3c9d5 Mon Sep 17 00:00:00 2001 From: Daniel Navarro-Gomez Date: Tue, 11 Apr 2017 13:09:51 -0400 Subject: [PATCH 0935/1311] Corrected version name --- easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb b/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb index fdc904389a..1454e1f498 100644 --- a/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb +++ b/easybuild/easyconfigs/p/PLINK/PLINK-1.9b_4.1-x86_64.eb @@ -1,7 +1,7 @@ easyblock = 'PackedBinary' name = 'PLINK' -version = '1.9b-4.1-x86_64' +version = '1.9b_4.1-x86_64' homepage = 'https://www.cog-genomics.org/plink/1.9/' description = 'plink-1.9-x86_64: Whole-genome association analysis toolset' -- GitLab From f2ad640fea6d4242d77456cb3899a1655a0bc73e Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 12 Apr 2017 09:08:20 +0200 Subject: [PATCH 0936/1311] R extension nloptr need the NLopt lib --- .../n/NLopt/NLopt-2.4.2-intel-2017a.eb | 26 +++++++++++++++++++ .../r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 1 + 2 files changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb new file mode 100644 index 0000000000..a614e1864e --- /dev/null +++ b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb @@ -0,0 +1,26 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel + +easyblock = 'ConfigureMake' + +name = 'NLopt' +version = '2.4.2' + +homepage = 'http://ab-initio.mit.edu/wiki/index.php/NLopt' +description = """ NLopt is a free/open-source library for nonlinear optimization, + providing a common interface for a number of different free optimization routines + available online as well as original implementations of various other algorithms. """ + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://ab-initio.mit.edu/nlopt/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ["lib/libnlopt.a", "include/nlopt.h"], + 'dirs': [""], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 7c666ff2ec..963e074572 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -43,6 +43,7 @@ dependencies = [ ('GDAL', '2.1.3', '-Python-2.7.13'), # for rgdal ('PROJ', '4.9.3'), # for rgdal ('GMP', '6.1.2'), # for igraph + ('NLopt', '2.4.2'), # for nloptr # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons # ('OpenSSL', '1.0.2h'), -- GitLab From e632d08a417cf5d687a4bfae93373ebc5ba6652b Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 12 Apr 2017 09:16:03 +0200 Subject: [PATCH 0937/1311] Build shared lib for NLopt --- easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb index a614e1864e..607bdc3f75 100644 --- a/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb +++ b/easybuild/easyconfigs/n/NLopt/NLopt-2.4.2-intel-2017a.eb @@ -18,6 +18,8 @@ toolchain = {'name': 'intel', 'version': '2017a'} source_urls = ['http://ab-initio.mit.edu/nlopt/'] sources = [SOURCELOWER_TAR_GZ] +configopts = '--enable-shared' + sanity_check_paths = { 'files': ["lib/libnlopt.a", "include/nlopt.h"], 'dirs': [""], -- GitLab From bf0d8f6148716a4b0c12bb67c20d7d189527fb40 Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Thu, 13 Apr 2017 06:32:52 +0930 Subject: [PATCH 0938/1311] New easyconfig for BioKanga 4.3.5 --- .../b/BioKanga/BioKanga-4.3.5-foss-2015b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.5-foss-2015b.eb diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.5-foss-2015b.eb b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.5-foss-2015b.eb new file mode 100644 index 0000000000..c614af140d --- /dev/null +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.5-foss-2015b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'BioKanga' +version = '4.3.5' + +homepage = 'https://github.com/csiro-crop-informatics/biokanga' +description = """BioKanga is an integrated toolkit of high performance bioinformatics + subprocesses targeting the challenges of next generation sequencing analytics. + Kanga is an acronym standing for 'K-mer Adaptive Next Generation Aligner'.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = ['https://github.com/csiro-crop-informatics/biokanga/archive/'] +sources = ['v%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "autoreconf -f -i && " + +sanity_check_paths = { + 'files': ["bin/biokanga"], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From eef18915f6321f45c5224f19fddb5cc35db4db51 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 13 Apr 2017 10:42:59 +0800 Subject: [PATCH 0939/1311] adding easyconfigs: atomate-0.4.4-intel-2017a-Python-2.7.13.eb, custodian-1.1.0-intel-2017a-Python-2.7.13.eb, FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb, Flask-0.12-intel-2017a-Python-2.7.13.eb, Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb, gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb, Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb, matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb, monty-0.9.6-intel-2017a-Python-2.7.13.eb, mpmath-0.19-intel-2017a-Python-2.7.13.eb, pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb, pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb, pymongo-3.4.0-intel-2017a-Python-2.7.13.eb, PyYAML-3.12-intel-2017a-Python-2.7.13.eb, requests-2.13.0-intel-2017a-Python-2.7.13.eb, smoqe-0.1.3-intel-2017a-Python-2.7.13.eb, spglib-python-1.9.9.38-intel-2017a-Python-2.7.13.eb, sympy-1.0-intel-2017a-Python-2.7.13.eb, Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb --- ...atomate-0.4.4-intel-2017a-Python-2.7.13.eb | 28 ++++++++++++ ...stodian-1.1.0-intel-2017a-Python-2.7.13.eb | 26 +++++++++++ ...reWorks-1.4.2-intel-2017a-Python-2.7.13.eb | 31 +++++++++++++ ...aginate-0.4.5-intel-2017a-Python-2.7.13.eb | 27 ++++++++++++ .../Flask-0.12-intel-2017a-Python-2.7.13.eb | 26 +++++++++++ ...nicorn-19.7.1-intel-2017a-Python-2.7.13.eb | 24 ++++++++++ .../Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb | 24 ++++++++++ ...plotlib-2.0.0-intel-2017a-Python-2.7.13.eb | 44 +++++++++++++++++++ .../monty-0.9.6-intel-2017a-Python-2.7.13.eb | 26 +++++++++++ .../mpmath-0.19-intel-2017a-Python-2.7.13.eb | 34 ++++++++++++++ .../PyYAML-3.12-intel-2017a-Python-2.7.13.eb | 27 ++++++++++++ ...tgen-db-0.6.5-intel-2017a-Python-2.7.13.eb | 29 ++++++++++++ ...ymatgen-4.7.3-intel-2017a-Python-2.7.13.eb | 32 ++++++++++++++ ...pymongo-3.4.0-intel-2017a-Python-2.7.13.eb | 24 ++++++++++ ...quests-2.13.0-intel-2017a-Python-2.7.13.eb | 24 ++++++++++ .../smoqe-0.1.3-intel-2017a-Python-2.7.13.eb | 25 +++++++++++ ...thon-1.9.9.38-intel-2017a-Python-2.7.13.eb | 26 +++++++++++ .../sympy-1.0-intel-2017a-Python-2.7.13.eb | 33 ++++++++++++++ ...rkzeug-0.12.1-intel-2017a-Python-2.7.13.eb | 24 ++++++++++ 19 files changed, 534 insertions(+) create mode 100644 easybuild/easyconfigs/a/atomate/atomate-0.4.4-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/spglib-python/spglib-python-1.9.9.38-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/a/atomate/atomate-0.4.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/a/atomate/atomate-0.4.4-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..6a33cf7fb2 --- /dev/null +++ b/easybuild/easyconfigs/a/atomate/atomate-0.4.4-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,28 @@ +easyblock = "PythonPackage" + +name = 'atomate' +version = '0.4.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pythonhosted.org/atomate/' +description = """atomate has implementations of FireWorks workflows for Materials Science.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('FireWorks', '1.4.2', versionsuffix), + ('custodian', '1.1.0', versionsuffix), + ('pymatgen', '4.7.3', versionsuffix), + ('pymatgen-db', '0.6.5', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..45b7389451 --- /dev/null +++ b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,26 @@ +easyblock = "PythonPackage" + +name = 'custodian' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/custodian' +description = """A simple JIT job management framework in Python.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('PyYAML', '3.12', versionsuffix), + ('monty', '0.9.6', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..526b35054c --- /dev/null +++ b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,31 @@ +easyblock = "PythonPackage" + +name = 'FireWorks' +version = '1.4.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/FireWorks' +description = """FireWorks helps run calculation workflows, with a centralized workflow server + controlling many worker nodes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('Flask', '0.12', versionsuffix), + ('Flask-paginate', '0.4.5', versionsuffix), + ('PyYAML', '3.12', versionsuffix), + ('gunicorn', '19.7.1', versionsuffix), + ('monty', '0.9.6', versionsuffix), + ('pymongo', '3.4.0', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..153e1028fe --- /dev/null +++ b/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,27 @@ +easyblock = "PythonPackage" + +name = 'Flask-paginate' +version = '0.4.5' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/Flask-paginate" +description = """Simple paginate support for flask.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCELOWER_ZIP] + +dependencies = [ + ('Python', '2.7.13'), + ('Flask', '0.12', versionsuffix), +] + +options = {'modulename': 'flask_paginate'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..b305d04f47 --- /dev/null +++ b/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,26 @@ +easyblock = "PythonPackage" + +name = 'Flask' +version = '0.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/Flask" +description = """A microframework based on Werkzeug, Jinja2 and good intentions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('Jinja2', '2.9.6', versionsuffix), + ('Werkzeug', '0.12.1', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..6e2be6854a --- /dev/null +++ b/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = "PythonPackage" + +name = 'gunicorn' +version = '19.7.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/gunicorn" +description = """WSGI HTTP Server for UNIX.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..0069b2587c --- /dev/null +++ b/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = "PythonPackage" + +name = 'Jinja2' +version = '2.9.6' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/Jinja2" +description = """A small but fast and easy to use stand-alone template engine written in pure python.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..4cff5e718d --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('freetype', '2.7.1'), + ('libpng', '1.6.29'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..64c36ac39f --- /dev/null +++ b/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'monty' +version = '0.9.6' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/monty/" +description = """Monty implements supplementary useful functions for Python that are not part of the standard library. + Examples include useful utilities like transparent support for zipped files, useful design patterns such as singleton + and cached_class, and many more.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s.egg'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..db5a0e5289 --- /dev/null +++ b/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,34 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Author: Adam Huffman +# adam.huffman@crick.ac.uk +# The Francis Crick Institute + +easyblock = 'PythonPackage' + +name = 'mpmath' +version = '0.19' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://mpmath.org/' +description = """mpmath can be used as an arbitrary-precision substitute for Python's float/complex + types and math/cmath modules, but also does much more advanced mathematics. Almost any calculation + can be performed just as well at 10-digit or 1000-digit precision, with either real or complex + numbers, and in many cases mpmath implements efficient algorithms that scale well for extremely + high precision work.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/fredrik-johansson/mpmath/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [('Python', '2.7.13')] + +runtest = 'python -c "import mpmath; mpmath.runtests();"' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/mpmath'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..4ff041f5c0 --- /dev/null +++ b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'PyYAML' +version = '3.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/PyYAML/" +description = """PyYAML is a YAML parser and emitter for the Python programming language.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('libyaml', '0.1.7'), +] + +options = {'modulename': 'yaml'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..908d8b8ff5 --- /dev/null +++ b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,29 @@ +easyblock = "PythonPackage" + +name = 'pymatgen-db' +version = '0.6.5' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/pymatgen-db' +description = """Pymatgen-db is a database add-on for the Python Materials Genomics (pymatgen) + materials analysis library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('pymatgen', '4.7.3', versionsuffix), + ('smoqe', '0.1.3', versionsuffix), +] + +options = {'modulename': 'matgendb'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..f8b263a2dd --- /dev/null +++ b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'pymatgen' +version = '4.7.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/pymatgen' +description = """Python Materials Genomics is a robust materials analysis code that defines core object + representations for structures and molecules with support for many electronic structure codes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('PyYAML', '3.12', versionsuffix), + ('matplotlib', '2.0.0', versionsuffix), + ('monty', '0.9.6', versionsuffix), + ('mpmath', '0.19', versionsuffix), + ('requests', '2.13.0', versionsuffix), + ('spglib-python', '1.9.9.38', versionsuffix), + ('sympy', '1.0', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..9bb19f1090 --- /dev/null +++ b/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'pymongo' +version = '3.4.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/pymongo' +description = """Python driver for MongoDB.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..786bbdf2c6 --- /dev/null +++ b/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'requests' +version = '2.13.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/requests' +description = """Python http for humans.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..a5ff78eb95 --- /dev/null +++ b/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'smoqe' +version = '0.1.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/smoqe' +description = """Simple MongoDB Query Engine (SMoQE).""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('pymongo', '3.4.0', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/spglib-python/spglib-python-1.9.9.38-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/spglib-python/spglib-python-1.9.9.38-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..6c2b70d3f7 --- /dev/null +++ b/easybuild/easyconfigs/s/spglib-python/spglib-python-1.9.9.38-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'spglib-python' +version = '1.9.9.38' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pypi.python.org/pypi/spglib' +description = """Spglib for Python. Spglib is a library for finding and handling crystal symmetries written in C.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://pypi.python.org/packages/source/%(nameletter)s/spglib'] +sources = ['spglib-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.13'), +] + +options = {'modulename': 'spglib'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..444574067c --- /dev/null +++ b/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,33 @@ +easyblock = 'PythonPackage' + +name = 'sympy' +version = '1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://sympy.org/' +description = """SymPy is a Python library for symbolic mathematics. It aims to + become a full-featured computer algebra system (CAS) while keeping the code as + simple as possible in order to be comprehensible and easily extensible. SymPy + is written entirely in Python and does not require any external libraries.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# patch to fix tests +patches = ['sympy-1.0_tests-unicode.patch'] + +dependencies = [ + ('Python', '2.7.13'), + ('mpmath', '0.19', '-Python-%(pyver)s'), +] + +# runtest = 'python setup.py test' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s.egg/%(name)s'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..9f007d3773 --- /dev/null +++ b/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = "PythonPackage" + +name = 'Werkzeug' +version = '0.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/WerkZeug" +description = """The Swiss Army knife of Python web development.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' -- GitLab From e64a152e2eba52d015850c2cf549afd467ca0f49 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 13 Apr 2017 11:18:23 +0800 Subject: [PATCH 0940/1311] use existing libyaml with dummy toolchain --- .../p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb index 4ff041f5c0..73b6477407 100644 --- a/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-2.7.13.eb @@ -14,7 +14,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.13'), - ('libyaml', '0.1.7'), + ('libyaml', '0.1.7', '', True), ] options = {'modulename': 'yaml'} -- GitLab From 23807849f1af83d3d0520249a6694f0317f8515f Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 13 Apr 2017 13:13:48 +0800 Subject: [PATCH 0941/1311] remove libpng from matplotlib dependencies (already a dependency of freetype) --- .../m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb index 4cff5e718d..e00702b768 100644 --- a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.0-intel-2017a-Python-2.7.13.eb @@ -17,7 +17,6 @@ exts_defaultclass = 'PythonPackage' dependencies = [ ('Python', '2.7.13'), ('freetype', '2.7.1'), - ('libpng', '1.6.29'), ] exts_list = [ -- GitLab From 86b92838f0b3009d1ec12ffc53e2b7f6993d0974 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Thu, 13 Apr 2017 10:20:31 +0100 Subject: [PATCH 0942/1311] Fix libpng version conflict --- easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb index 52cec88efd..20416b1946 100755 --- a/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb +++ b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.5-foss-2016b.eb @@ -25,7 +25,7 @@ source_urls = [('http://sourceforge.net/projects/gnuplot/files', 'download')] dependencies = [ ('cairo', '1.14.6'), ('libjpeg-turbo', '1.5.0'), - ('libpng', '1.6.26'), + ('libpng', '1.6.24'), ('libgd', '2.2.3'), ('Pango', '1.40.3'), ('libcerf', '1.5'), -- GitLab From 08e498cb5cc4bf318ed4660616330eb391c4b42c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 18 Apr 2017 11:49:10 +0200 Subject: [PATCH 0943/1311] adding easyconfigs: bx-python-0.7.4-intel-2017a-Python-2.7.13.eb, LZO-2.10-intel-2017a.eb --- ...-python-0.7.4-intel-2017a-Python-2.7.13.eb | 47 +++++++++++++++++++ .../easyconfigs/l/LZO/LZO-2.10-intel-2017a.eb | 31 ++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 easybuild/easyconfigs/b/bx-python/bx-python-0.7.4-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/l/LZO/LZO-2.10-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/bx-python/bx-python-0.7.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/bx-python/bx-python-0.7.4-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..8f02847ea1 --- /dev/null +++ b/easybuild/easyconfigs/b/bx-python/bx-python-0.7.4-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,47 @@ +easyblock = 'Bundle' + +name = 'bx-python' +version = '0.7.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/bxlab/bx-python' +description = """The bx-python project is a Python library and associated set of scripts to allow for rapid + implementation of genome scale analyses.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + + +dependencies = [ + ('Python', '2.7.13'), + ('LZO', '2.10'), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +prebuildopts = "export CPATH=$EBROOTLZO/include/lzo:$CPATH && " + +exts_list = [ + ('python-lzo', '1.11', { + 'modulename': 'lzo', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-lzo/'], + 'source_tmpl': 'python-lzo-%(version)s.tar.gz', + }), + (name, version, { + 'modulename': 'bx', + 'source_urls': ['https://github.com/bxlab/bx-python/archive/'], + 'source_tmpl': 'v%(version)s.tar.gz', + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/l/LZO/LZO-2.10-intel-2017a.eb b/easybuild/easyconfigs/l/LZO/LZO-2.10-intel-2017a.eb new file mode 100644 index 0000000000..801057a84f --- /dev/null +++ b/easybuild/easyconfigs/l/LZO/LZO-2.10-intel-2017a.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +## + +easyblock = 'ConfigureMake' + +name = 'LZO' +version = '2.10' + +homepage = 'http://www.oberhumer.com/opensource/lzo/' +description = "Portable lossless data compression library" + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [homepage + 'download/'] + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +runtest = 'test' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib', 'include'] +} + +moduleclass = 'devel' -- GitLab From ffa2d8c231fe75d6527db2440b07d8f50b250975 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 18 Apr 2017 13:14:06 +0200 Subject: [PATCH 0944/1311] {math}[intel/2016b] scipy 0.19.0 + numpy 1.12.1 w/ Python 3.5.2 --- .../n/numpy/numpy-1.12.0-mkl.patch | 55 +++++++++++++++++++ .../numpy-1.12.1-intel-2016b-Python-3.5.2.eb | 23 ++++++++ .../scipy-0.19.0-intel-2016b-Python-3.5.2.eb | 19 +++++++ 3 files changed, 97 insertions(+) create mode 100644 easybuild/easyconfigs/n/numpy/numpy-1.12.0-mkl.patch create mode 100644 easybuild/easyconfigs/n/numpy/numpy-1.12.1-intel-2016b-Python-3.5.2.eb create mode 100644 easybuild/easyconfigs/s/scipy/scipy-0.19.0-intel-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.12.0-mkl.patch b/easybuild/easyconfigs/n/numpy/numpy-1.12.0-mkl.patch new file mode 100644 index 0000000000..3d09924f96 --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.12.0-mkl.patch @@ -0,0 +1,55 @@ +fix issues in numpy distutils pkg w.r.t. detecting BLAS/LAPACK libraries +by Kenneth Hoste (HPC-UGent) +diff -ru numpy-1.12.0.orig/numpy/distutils/fcompiler/__init__.py numpy-1.12.0/numpy/distutils/fcompiler/__init__.py +--- numpy-1.12.0.orig/numpy/distutils/fcompiler/__init__.py 2017-01-15 11:39:18.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/fcompiler/__init__.py 2017-03-06 17:19:07.262810683 +0100 +@@ -628,7 +628,10 @@ + return options + + def library_option(self, lib): +- return "-l" + lib ++ if lib[0]=='-': ++ return lib ++ else: ++ return "-l" + lib + def library_dir_option(self, dir): + return "-L" + dir + +diff -ru numpy-1.12.0.orig/numpy/distutils/system_info.py numpy-1.12.0/numpy/distutils/system_info.py +--- numpy-1.12.0.orig/numpy/distutils/system_info.py 2017-01-15 11:39:18.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/system_info.py 2017-03-06 17:25:38.778143748 +0100 +@@ -675,7 +675,7 @@ + if is_string(default): + return [default] + return default +- return [b for b in [a.strip() for a in libs.split(',')] if b] ++ return [b for b in [a.strip().replace(':',',') for a in libs.split(',')] if b] + + def get_libraries(self, key='libraries'): + if hasattr(self, '_lib_names'): +@@ -756,6 +756,9 @@ + # make sure we preserve the order of libs, as it can be important + found_dirs, found_libs = [], [] + for lib in libs: ++ if lib[0] == '-': ++ found_libs.append(lib) ++ continue + for lib_dir in lib_dirs: + found_lib = self._find_lib(lib_dir, lib, exts) + if found_lib: +diff -ru numpy-1.12.0.orig/numpy/distutils/unixccompiler.py numpy-1.12.0/numpy/distutils/unixccompiler.py +--- numpy-1.12.0.orig/numpy/distutils/unixccompiler.py 2016-12-21 16:46:24.000000000 +0100 ++++ numpy-1.12.0/numpy/distutils/unixccompiler.py 2017-03-06 17:19:07.262810683 +0100 +@@ -123,3 +123,12 @@ + + replace_method(UnixCCompiler, 'create_static_lib', + UnixCCompiler_create_static_lib) ++ ++def UnixCCompiler_library_option(self, lib): ++ if lib[0]=='-': ++ return lib ++ else: ++ return "-l" + lib ++ ++replace_method(UnixCCompiler, 'library_option', ++ UnixCCompiler_library_option) diff --git a/easybuild/easyconfigs/n/numpy/numpy-1.12.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/n/numpy/numpy-1.12.1-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..b83a080a7d --- /dev/null +++ b/easybuild/easyconfigs/n/numpy/numpy-1.12.1-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,23 @@ +name = 'numpy' +version = '1.12.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.numpy.org' +description = """NumPy is the fundamental package for scientific computing with Python. It contains among other things: + a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran + code, useful linear algebra, Fourier transform, and random number capabilities. Besides its obvious scientific uses, + NumPy can also be used as an efficient multi-dimensional container of generic data. Arbitrary data-types can be + defined. This allows NumPy to seamlessly and speedily integrate with a wide variety of databases.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_ZIP] + +patches = ['numpy-1.12.0-mkl.patch'] + +dependencies = [ + ('Python', '3.5.2'), +] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/scipy/scipy-0.19.0-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/s/scipy/scipy-0.19.0-intel-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..523cf018d9 --- /dev/null +++ b/easybuild/easyconfigs/s/scipy/scipy-0.19.0-intel-2016b-Python-3.5.2.eb @@ -0,0 +1,19 @@ +name = 'scipy' +version = '0.19.0' +versionsuffix = '-Python-3.5.2' + +homepage = 'http://www.scipy.org' +description = """SciPy is a collection of mathematical algorithms and convenience + functions built on the Numpy extension for Python.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_ZIP] + +dependencies = [ + ('numpy', '1.12.1', versionsuffix), +] + +moduleclass = 'math' -- GitLab From e085c578bfb1eac166f793d1b1877a36059d0491 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 18 Apr 2017 13:17:35 +0200 Subject: [PATCH 0945/1311] adding easyconfigs: Stacks-1.46-intel-2017a.eb, sparsehash-2.0.3-intel-2017a.eb --- .../s/Stacks/Stacks-1.46-intel-2017a.eb | 35 +++++++++++++++++++ .../sparsehash-2.0.3-intel-2017a.eb | 23 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/sparsehash/sparsehash-2.0.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb new file mode 100644 index 0000000000..341b4db710 --- /dev/null +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'Stacks' +version = '1.46' + +homepage = 'http://creskolab.uoregon.edu/stacks/' +description = """Stacks is a software pipeline for building loci from short-read sequences, such as those generated on + the Illumina platform. Stacks was developed to work with restriction enzyme-based data, such as RAD-seq, + for the purpose of building genetic maps and conducting population genomics and phylogeography. +""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.11'), + ('SAMtools', '1.4'), + ('sparsehash', '2.0.3'), +] + +sanity_check_paths = { + 'files': [ + 'bin/%s' % binfile for binfile in [ + 'clone_filter', 'denovo_map.pl', 'exec_velvet.pl', 'genotypes', 'index_radtags.pl', 'load_radtags.pl', + 'populations', 'process_shortreads', 'ref_map.pl', 'sstacks', 'ustacks', 'cstacks', 'estacks', + 'export_sql.pl', 'hstacks', 'kmer_filter', 'load_sequences.pl', 'process_radtags', 'pstacks', + 'sort_read_pairs.pl', 'stacks_export_notify.pl', + ] + ], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/sparsehash/sparsehash-2.0.3-intel-2017a.eb b/easybuild/easyconfigs/s/sparsehash/sparsehash-2.0.3-intel-2017a.eb new file mode 100644 index 0000000000..32f208ded5 --- /dev/null +++ b/easybuild/easyconfigs/s/sparsehash/sparsehash-2.0.3-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'sparsehash' +version = '2.0.3' + +homepage = 'https://github.com/sparsehash/sparsehash' +description = """An extremely memory-efficient hash_map + implementation. 2 bits/entry overhead! The SparseHash library + contains several hash-map implementations, including + implementations that optimize for space or speed.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/sparsehash/sparsehash/archive/'] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['include/google/type_traits.h'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 28cf85302f91dcc01e4e373f8d7a8b84ee9a0aff Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 10:08:35 +0200 Subject: [PATCH 0946/1311] adding easyconfigs: MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb, Eigen-3.2.10-intel-2016b.eb --- ...MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/m/MRtrix/MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/m/MRtrix/MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/MRtrix/MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..bfa4a70408 --- /dev/null +++ b/easybuild/easyconfigs/m/MRtrix/MRtrix-0.3.15-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,23 @@ +name = 'MRtrix' +version = '0.3.15' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.brain.org.au/software/index.html#mrtrix' +description = """MRtrix provides a set of tools to perform diffusion-weighted MR white-matter tractography in a manner + robust to crossing fibres, using constrained spherical deconvolution (CSD) and probabilistic streamlines.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/MRtrix3/mrtrix3/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), + ('Python', '2.7.12'), + ('Mesa', '12.0.2'), + ('Qt', '4.8.7'), + ('Eigen', '3.2.10'), +] + +moduleclass = 'bio' -- GitLab From 3ce4bc6da6754819d8706ff8d011551ddc02dbfc Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 19 Apr 2017 13:03:43 +0200 Subject: [PATCH 0947/1311] Add CUDA/8.0.61 --- .../c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb | 18 ++++++++++++++++++ easybuild/easyconfigs/c/CUDA/CUDA-8.0.61.eb | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/c/CUDA/CUDA-8.0.61.eb diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..02ed53d7d5 --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb @@ -0,0 +1,18 @@ +name = 'CUDA' +version = '8.0.61' + +homepage = 'https://developer.nvidia.com/cuda-toolkit' +description = """CUDA (formerly Compute Unified Device Architecture) is a parallel + computing platform and programming model created by NVIDIA and implemented by the + graphics processing units (GPUs) that they produce. CUDA gives developers access + to the virtual instruction set and memory of the parallel computational elements in CUDA GPUs.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/Prod2/local_installers/'] + +sources = ['cuda_%(version)s_375.26_linux-run'] + +modextravars = {'CUDA_HOME': '%(installdir)s'} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61.eb new file mode 100644 index 0000000000..b3ad585f70 --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61.eb @@ -0,0 +1,18 @@ +name = 'CUDA' +version = '8.0.61' + +homepage = 'https://developer.nvidia.com/cuda-toolkit' +description = """CUDA (formerly Compute Unified Device Architecture) is a parallel + computing platform and programming model created by NVIDIA and implemented by the + graphics processing units (GPUs) that they produce. CUDA gives developers access + to the virtual instruction set and memory of the parallel computational elements in CUDA GPUs.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/Prod2/local_installers/'] + +sources = ['cuda_%(version)s_375.26_linux-run'] + +modextravars = {'CUDA_HOME': '%(installdir)s'} + +moduleclass = 'system' -- GitLab From 8307b771d0e3d26a65a442d1e3c761ccb7bdb934 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 19 Apr 2017 13:14:31 +0200 Subject: [PATCH 0948/1311] Drop Cuda easyconfig with unsupported GCC --- .../c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb deleted file mode 100644 index 02ed53d7d5..0000000000 --- a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61-GCCcore-6.3.0.eb +++ /dev/null @@ -1,18 +0,0 @@ -name = 'CUDA' -version = '8.0.61' - -homepage = 'https://developer.nvidia.com/cuda-toolkit' -description = """CUDA (formerly Compute Unified Device Architecture) is a parallel - computing platform and programming model created by NVIDIA and implemented by the - graphics processing units (GPUs) that they produce. CUDA gives developers access - to the virtual instruction set and memory of the parallel computational elements in CUDA GPUs.""" - -toolchain = {'name': 'GCCcore', 'version': '6.3.0'} - -source_urls = ['https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/Prod2/local_installers/'] - -sources = ['cuda_%(version)s_375.26_linux-run'] - -modextravars = {'CUDA_HOME': '%(installdir)s'} - -moduleclass = 'system' -- GitLab From ad01055ce5e98a5dce7f62d59d7bfd360355cf18 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 13:53:42 +0200 Subject: [PATCH 0949/1311] adding easyconfigs: JasPer-1.900.1-intel-2017a.eb --- .../j/JasPer/JasPer-1.900.1-intel-2017a.eb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-intel-2017a.eb b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-intel-2017a.eb new file mode 100644 index 0000000000..80e537b9bb --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-intel-2017a.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'JasPer' +version = '1.900.1' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_ZIP] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +sanity_check_paths = { + 'files': ["bin/jasper", "lib/libjasper.a"], + 'dirs': ["include"], +} + +moduleclass = 'vis' -- GitLab From 98c8fa75eab423831af2b64676302a7ab477997f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 13:54:13 +0200 Subject: [PATCH 0950/1311] adding easyconfigs: makedepend-1.0.5-GCCcore-6.3.0.eb, xorg-macros-1.19.1-GCCcore-6.3.0.eb, xproto-7.0.31-GCCcore-6.3.0.eb --- .../makedepend-1.0.5-GCCcore-6.3.0.eb | 26 +++++++++++++++++ .../xorg-macros-1.19.1-GCCcore-6.3.0.eb | 27 +++++++++++++++++ .../x/xproto/xproto-7.0.31-GCCcore-6.3.0.eb | 29 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-GCCcore-6.3.0.eb create mode 100755 easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.1-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/x/xproto/xproto-7.0.31-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-GCCcore-6.3.0.eb b/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..b7d5d70c2d --- /dev/null +++ b/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-GCCcore-6.3.0.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'makedepend' +version = '1.0.5' + +homepage = "http://www.linuxfromscratch.org/blfs/view/svn/x/makedepend.html" +description = "The makedepend package contains a C-preprocessor like utility to determine build-time dependencies." + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [XORG_UTIL_SOURCE] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), + ('xproto', '7.0.31'), + ('xorg-macros', '1.19.1'), +] + +sanity_check_paths = { + 'files': ['bin/makedepend'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.1-GCCcore-6.3.0.eb new file mode 100755 index 0000000000..6f48acb154 --- /dev/null +++ b/easybuild/easyconfigs/x/xorg-macros/xorg-macros-1.19.1-GCCcore-6.3.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'xorg-macros' +version = '1.19.1' + +homepage = 'http://cgit.freedesktop.org/xorg/util/macros' +description = """X.org macros utilities.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://cgit.freedesktop.org/xorg/util/macros/snapshot'] # no slash ('/') at the end! +sources = ['util-macros-%(version)s.tar.gz'] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), + ('Autotools', '20150215'), +] + +preconfigopts = './autogen.sh && ' + +sanity_check_paths = { + 'files': ['share/pkgconfig/xorg-macros.pc'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/x/xproto/xproto-7.0.31-GCCcore-6.3.0.eb b/easybuild/easyconfigs/x/xproto/xproto-7.0.31-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..06e2a620f7 --- /dev/null +++ b/easybuild/easyconfigs/x/xproto/xproto-7.0.31-GCCcore-6.3.0.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'xproto' +version = '7.0.31' + +homepage = "http://www.freedesktop.org/wiki/Software/xlibs" +description = "X protocol and ancillary headers" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [XORG_PROTO_SOURCE] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), + ('xorg-macros', '1.19.1'), +] + +sanity_check_paths = { + 'files': ['include/X11/%s' % x for x in ['ap_keysym.h', 'HPkeysym.h', 'keysym.h', 'Xalloca.h', 'Xatom.h', + 'XF86keysym.h', 'Xfuncs.h', 'Xmd.h', 'Xos.h', 'Xpoll.h', 'Xprotostr.h', + 'Xw32defs.h', 'Xwindows.h', 'DECkeysym.h', 'keysymdef.h', 'Sunkeysym.h', + 'Xarch.h', 'Xdefs.h', 'Xfuncproto.h', 'X.h', 'Xosdefs.h', 'Xos_r.h', + 'Xproto.h', 'Xthreads.h', 'XWDFile.h', 'Xwinsock.h']], + 'dirs': [] +} + +moduleclass = 'devel' -- GitLab From e4c9596d4b47c878879c7413a42508d5bd897b29 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 13:58:21 +0200 Subject: [PATCH 0951/1311] adding easyconfigs: cURL-7.54.0-GCCcore-6.3.0.eb --- .../c/cURL/cURL-7.54.0-GCCcore-6.3.0.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/c/cURL/cURL-7.54.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/cURL/cURL-7.54.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/cURL/cURL-7.54.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..8d7f087e2b --- /dev/null +++ b/easybuild/easyconfigs/c/cURL/cURL-7.54.0-GCCcore-6.3.0.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'cURL' +version = '7.54.0' + +homepage = 'http://curl.haxx.se' +description = """libcurl is a free and easy-to-use client-side URL transfer library, + supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports + SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, + proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, + Kerberos), file transfer resume, http proxy tunneling and more.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://curl.haxx.se/download/'] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# dependencies = [('OpenSSL', '1.1.0e')] +# configopts = "--with-ssl=$EBROOTOPENSSL" + +modextravars = {'CURL_INCLUDES': '%(installdir)s/include'} + +sanity_check_paths = { + 'files': ['bin/curl', 'lib/libcurl.a', 'lib/libcurl.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'tools' -- GitLab From a38dd1652faef8092f063cfcb4a8f8c95aaa21a9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 14:27:11 +0200 Subject: [PATCH 0952/1311] adding easyconfigs: UDUNITS-2.2.24-intel-2017a.eb --- .../u/UDUNITS/UDUNITS-2.2.24-intel-2017a.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/u/UDUNITS/UDUNITS-2.2.24-intel-2017a.eb diff --git a/easybuild/easyconfigs/u/UDUNITS/UDUNITS-2.2.24-intel-2017a.eb b/easybuild/easyconfigs/u/UDUNITS/UDUNITS-2.2.24-intel-2017a.eb new file mode 100644 index 0000000000..0e89a4b4d6 --- /dev/null +++ b/easybuild/easyconfigs/u/UDUNITS/UDUNITS-2.2.24-intel-2017a.eb @@ -0,0 +1,38 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 University of Luxembourg, Ghent University +# Authors:: Fotis Georgatos , Kenneth Hoste (Ghent University) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## + +easyblock = 'ConfigureMake' + +name = 'UDUNITS' +version = '2.2.24' + +homepage = 'http://www.unidata.ucar.edu/software/udunits/' +description = """UDUNITS supports conversion of unit specifications between formatted and binary forms, + arithmetic manipulation of units, and conversion of values between compatible scales of measurement.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['ftp://ftp.unidata.ucar.edu/pub/udunits'] + +dependencies = [('expat', '2.2.0')] + +sanity_check_paths = { + 'files': ['bin/udunits2', 'include/converter.h', 'include/udunits2.h', 'include/udunits.h', + 'lib/libudunits2.a', 'lib/libudunits2.%s' % SHLIB_EXT], + 'dirs': ['share'], +} + +parallel = 1 + +moduleclass = 'phys' -- GitLab From b1b868b9fad00772a8c991df2a84b5e91e4488e9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 14:27:39 +0200 Subject: [PATCH 0953/1311] adding easyconfigs: HDF-4.2.12-intel-2017a.eb --- .../h/HDF/HDF-4.2.12-intel-2017a.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF/HDF-4.2.12-intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HDF/HDF-4.2.12-intel-2017a.eb b/easybuild/easyconfigs/h/HDF/HDF-4.2.12-intel-2017a.eb new file mode 100644 index 0000000000..36b03f1853 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF/HDF-4.2.12-intel-2017a.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'HDF' +version = '4.2.12' + +homepage = 'http://www.hdfgroup.org/products/hdf4/' +description = """HDF (also known as HDF4) is a library and multi-object file format for storing and managing data + between machines.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.hdfgroup.org/ftp/HDF/releases/HDF%(version)s/src/'] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), +] +dependencies = [ + ('Szip', '2.1'), + ('libjpeg-turbo', '1.5.1'), +] + +configopts = "--with-szlib=$EBROOTSZIP --includedir=%(installdir)s/include/%(namelower)s" + +modextrapaths = {'CPATH': 'include/hdf'} + +sanity_check_paths = { + 'files': ['lib/libdf.a', 'lib/libhdf4.settings', 'lib/libmfhdf.a'], + 'dirs': ['bin', 'include/hdf'], +} + +moduleclass = 'data' -- GitLab From db59e7eca44753a4e802ccff209fe89a4804e19d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 14:28:06 +0200 Subject: [PATCH 0954/1311] adding easyconfigs: g2lib-1.4.0-intel-2017a.eb, g2clib-1.6.0-intel-2017a.eb --- .../g/g2clib/g2clib-1.6.0-intel-2017a.eb | 17 +++++++++++++++ .../g/g2lib/g2lib-1.4.0-intel-2017a.eb | 21 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/g/g2clib/g2clib-1.6.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/g2lib/g2lib-1.4.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/g2clib/g2clib-1.6.0-intel-2017a.eb b/easybuild/easyconfigs/g/g2clib/g2clib-1.6.0-intel-2017a.eb new file mode 100644 index 0000000000..91bbbfa89b --- /dev/null +++ b/easybuild/easyconfigs/g/g2clib/g2clib-1.6.0-intel-2017a.eb @@ -0,0 +1,17 @@ +name = 'g2clib' +version = '1.6.0' + +homepage = 'http://www.nco.ncep.noaa.gov/pmb/codes/GRIB2/' +description = """Library contains GRIB2 encoder/decoder ('C' version).""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [homepage] +sources = ['%(name)s-%(version)s.tar'] + +dependencies = [('JasPer', '1.900.1')] + +# parallel build tends to fail +parallel = 1 + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/g/g2lib/g2lib-1.4.0-intel-2017a.eb b/easybuild/easyconfigs/g/g2lib/g2lib-1.4.0-intel-2017a.eb new file mode 100644 index 0000000000..c7f92d0e2b --- /dev/null +++ b/easybuild/easyconfigs/g/g2lib/g2lib-1.4.0-intel-2017a.eb @@ -0,0 +1,21 @@ +name = 'g2lib' +version = '1.4.0' + +homepage = 'http://www.nco.ncep.noaa.gov/pmb/codes/GRIB2/' +description = """Library contains GRIB2 encoder/decoder and search/indexing routines.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [homepage] +sources = ['%(name)s-%(version)s.tar'] + +patches = ['fix_makefile.patch'] + +dependencies = [('JasPer', '1.900.1')] + +buildopts = 'CFLAGS="$CFLAGS -DLINUXG95 -D__64BIT__" FFLAGS="$FFLAGS -fpp -I."' + +# parallel build tends to fail +parallel = 1 + +moduleclass = 'data' -- GitLab From 766e37c4509ed9d8de231878b0b1080dc2922fd8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 14:47:38 +0200 Subject: [PATCH 0955/1311] {geo}[intel/2017a] ESMF 6.3.0rp1 --- .../e/ESMF/ESMF-6.3.0rp1-intel-2017a.eb | 31 +++++++++++++++++++ .../ESMF-6.3.0rp1_fix-file-open-test.patch | 13 ++++++++ .../netCDF-C++4-4.3.0-intel-2017a.eb | 24 ++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1_fix-file-open-test.patch create mode 100644 easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a.eb b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a.eb new file mode 100644 index 0000000000..fec7e0e3f7 --- /dev/null +++ b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a.eb @@ -0,0 +1,31 @@ +name = 'ESMF' +version = '6.3.0rp1' + +homepage = 'http://sourceforge.net/projects/esmf' +description = """The Earth System Modeling Framework (ESMF) is software for building and coupling weather, + climate, and related models.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['%%(namelower)s_%s_src.tar.gz' % '_'.join(version.split('.'))] + +patches = [ + 'ESMF-6.1.1_libopts.patch', + 'ESMF-%(version)s_fix-file-open-test.patch', +] + +dependencies = [ + ('netCDF', '4.4.1.1'), + ('netCDF-Fortran', '4.4.4'), + ('netCDF-C++4', '4.3.0'), +] + +buildopts = 'ESMF_NETCDF_INCLUDE=$EBROOTNETCDFMINFORTRAN/include ' +buildopts += 'ESMF_NETCDF_LIBS="`nc-config --libs` `nf-config --flibs` `ncxx4-config --libs`"' + +# too parallel causes the build to become really slow +maxparallel = 8 + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1_fix-file-open-test.patch b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1_fix-file-open-test.patch new file mode 100644 index 0000000000..62a98e0354 --- /dev/null +++ b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1_fix-file-open-test.patch @@ -0,0 +1,13 @@ +fix compilation issue with recent compilers +cfr. https://sourceforge.net/p/esmf/esmf/ci/3706bf758012daebadef83d6575c477aeff9c89b/#diff-1 +--- src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp.orig 2017-04-19 13:44:03.384547426 +0200 ++++ src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp 2017-04-19 13:44:16.864674576 +0200 +@@ -105,7 +105,7 @@ + ReadABAQUS::~ReadABAQUS() + { + mdbImpl->release_interface(readMeshIface); +- if (NULL != abFile) ++ if (abFile.is_open()) + abFile.close(); + } + diff --git a/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a.eb b/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a.eb new file mode 100644 index 0000000000..959f14667b --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'netCDF-C++4' +version = '4.3.0' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/Unidata/netcdf-cxx4/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('netCDF', '4.4.1.1')] + +sanity_check_paths = { + 'files': ['include/netcdf', 'lib/libnetcdf_c++4.a', 'lib/libnetcdf_c++4.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'data' -- GitLab From 4133ea658c683e1f2a46a28bb5494b71aa9765e1 Mon Sep 17 00:00:00 2001 From: RvDijk Date: Wed, 19 Apr 2017 15:32:06 +0200 Subject: [PATCH 0956/1311] v6.0 --- .../c/cuDNN/cuDNN-6.0-CUDA-8.0.61.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/c/cuDNN/cuDNN-6.0-CUDA-8.0.61.eb diff --git a/easybuild/easyconfigs/c/cuDNN/cuDNN-6.0-CUDA-8.0.61.eb b/easybuild/easyconfigs/c/cuDNN/cuDNN-6.0-CUDA-8.0.61.eb new file mode 100644 index 0000000000..942648ea47 --- /dev/null +++ b/easybuild/easyconfigs/c/cuDNN/cuDNN-6.0-CUDA-8.0.61.eb @@ -0,0 +1,35 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Author: Stephane Thiell +## +easyblock = 'Tarball' + +name = 'cuDNN' +version = '6.0' +cuda_version = '8.0.61' + +versionsuffix = '-CUDA-%s' % cuda_version + +homepage = 'https://developer.nvidia.com/cudnn' +description = """The NVIDIA CUDA Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for + deep neural networks.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# Nvidia developer registration required. +# Download link: https://developer.nvidia.com/rdp/cudnn-download +sources = ['%(namelower)s-8.0-linux-x64-v%(version)s.tgz'] + +dependencies = [('CUDA', cuda_version)] + +checksums = [ + '4aacb7acb93c5e4dfa9db814df496219', # cudnn-8.0-linux-x64-v6.0.tgz, Jan 20 2017 download +] + +sanity_check_paths = { + 'files': ['include/cudnn.h', 'lib64/libcudnn_static.a'], + 'dirs': ['include', 'lib64'], +} + +moduleclass = 'numlib' -- GitLab From 695590ab4dad6e11621fcf63d0bf7152afc9ad9d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 19 Apr 2017 18:36:20 +0200 Subject: [PATCH 0957/1311] adding easyconfigs: libiconv-1.15-intel-2017a.eb --- .../l/libiconv/libiconv-1.15-intel-2017a.eb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb diff --git a/easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb b/easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb new file mode 100644 index 0000000000..fb6be42e9f --- /dev/null +++ b/easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libiconv' +version = '1.15' + +homepage = 'https://www.gnu.org/software/libiconv' +description = "Libiconv converts from one character encoding to another through Unicode conversion" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/iconv', 'include/iconv.h', 'include/libcharset.h', 'include/localcharset.h', + 'lib/libcharset.a', 'lib/libcharset.%s' % SHLIB_EXT, 'lib/libiconv.%s' % SHLIB_EXT], + 'dirs': ['share'], +} + +moduleclass = 'lib' -- GitLab From 2d502840969e2356078da89e05ac197c67ae0306 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 10:14:45 +0200 Subject: [PATCH 0958/1311] install libiconv with GCCcore rather than intel toolchain --- ...nv-1.15-intel-2017a.eb => libiconv-1.15-GCCcore-6.3.0.eb} | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) rename easybuild/easyconfigs/l/libiconv/{libiconv-1.15-intel-2017a.eb => libiconv-1.15-GCCcore-6.3.0.eb} (75%) diff --git a/easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb b/easybuild/easyconfigs/l/libiconv/libiconv-1.15-GCCcore-6.3.0.eb similarity index 75% rename from easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb rename to easybuild/easyconfigs/l/libiconv/libiconv-1.15-GCCcore-6.3.0.eb index fb6be42e9f..c2a203f1b2 100644 --- a/easybuild/easyconfigs/l/libiconv/libiconv-1.15-intel-2017a.eb +++ b/easybuild/easyconfigs/l/libiconv/libiconv-1.15-GCCcore-6.3.0.eb @@ -6,11 +6,14 @@ version = '1.15' homepage = 'https://www.gnu.org/software/libiconv' description = "Libiconv converts from one character encoding to another through Unicode conversion" -toolchain = {'name': 'intel', 'version': '2017a'} +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_GZ] +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + sanity_check_paths = { 'files': ['bin/iconv', 'include/iconv.h', 'include/libcharset.h', 'include/localcharset.h', 'lib/libcharset.a', 'lib/libcharset.%s' % SHLIB_EXT, 'lib/libiconv.%s' % SHLIB_EXT], -- GitLab From b72075148a92dc4187d739278cb11f5f33e40709 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 10:35:46 +0200 Subject: [PATCH 0959/1311] adding easyconfigs: numba-0.32.0-intel-2017a-Python-2.7.13.eb --- .../numba-0.32.0-intel-2017a-Python-2.7.13.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/n/numba/numba-0.32.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/n/numba/numba-0.32.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/n/numba/numba-0.32.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..dc868ad142 --- /dev/null +++ b/easybuild/easyconfigs/n/numba/numba-0.32.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,40 @@ +easyblock = 'Bundle' + +name = 'numba' +version = '0.32.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://numba.pydata.org/' +description = """Numba is an Open Source NumPy-aware optimizing compiler for Python sponsored by Continuum Analytics, + Inc. It uses the remarkable LLVM compiler infrastructure to compile Python syntax to machine code.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('LLVM', '4.0.0'), +] + +exts_list = [ + ('llvmlite', '0.17.1', { + 'source_urls': ['https://pypi.python.org/packages/source/l/llvmlite/'], + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/n/numba/'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['bin/numba', 'bin/pycc'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'lang' -- GitLab From bf7342099c04a56d0715d02cdf2531ee57e1d194 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 10:58:08 +0200 Subject: [PATCH 0960/1311] adding easyconfigs: PyZMQ-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb, ZeroMQ-4.2.2-intel-2017a.eb, OpenPGM-5.2.122-intel-2017a.eb, libsodium-1.0.12-intel-2017a.eb --- .../libsodium/libsodium-1.0.12-intel-2017a.eb | 20 +++++++++++ .../o/OpenPGM/OpenPGM-5.2.122-intel-2017a.eb | 30 ++++++++++++++++ ...Q-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb | 30 ++++++++++++++++ .../z/ZeroMQ/ZeroMQ-4.2.2-intel-2017a.eb | 36 +++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 easybuild/easyconfigs/l/libsodium/libsodium-1.0.12-intel-2017a.eb create mode 100644 easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb create mode 100644 easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/l/libsodium/libsodium-1.0.12-intel-2017a.eb b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.12-intel-2017a.eb new file mode 100644 index 0000000000..faf9cf93a1 --- /dev/null +++ b/easybuild/easyconfigs/l/libsodium/libsodium-1.0.12-intel-2017a.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libsodium' +version = '1.0.12' + +homepage = 'http://doc.libsodium.org/' +description = """Sodium is a modern, easy-to-use software library for encryption, decryption, signatures, + password hashing and more.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://download.libsodium.org/libsodium/releases/'] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['include/sodium.h', 'lib/libsodium.so', 'lib/libsodium.a'], + 'dirs': ['include/sodium', 'lib/pkgconfig'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2017a.eb b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2017a.eb new file mode 100644 index 0000000000..d604042523 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenPGM/OpenPGM-5.2.122-intel-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'OpenPGM' +version = '5.2.122' + +homepage = 'http://code.google.com/p/openpgm/' +description = """OpenPGM is an open source implementation of the Pragmatic General Multicast (PGM) + specification in RFC 3208 available at www.ietf.org. PGM is a reliable and scalable multicast protocol + that enables receivers to detect loss, request retransmission of lost data, or notify an application + of unrecoverable loss. PGM is a receiver-reliable protocol, which means the receiver is responsible + for ensuring all data is received, absolving the sender of reception responsibility.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openpgm/'] +sources = ['libpgm-%(version)s.tar.gz'] + +checksums = ['d7673e9ff6cc33cf42fe9fb9a7bfbffa'] + +configopts = '--with-pic' + +start_dir = 'pgm' + +sanity_check_paths = { + 'files': ['lib/libpgm.%s' % SHLIB_EXT, 'lib/libpgm.a'], + 'dirs': ['include'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb new file mode 100644 index 0000000000..3ee565a8d9 --- /dev/null +++ b/easybuild/easyconfigs/p/PyZMQ/PyZMQ-16.0.2-intel-2017a-Python-2.7.13-zmq4.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyZMQ' +version = '16.0.2' +zmqversion = '4.2.2' +versionsuffix = '-Python-%%(pyver)s-zmq%s' % zmqversion.split('.')[0] + +homepage = 'http://www.zeromq.org/bindings:python' +description = """Python bindings for ZeroMQ""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['9a8768b00a566a400d70318f8c359cfe'] + +dependencies = [ + ('Python', '2.7.13'), + ('ZeroMQ', zmqversion), +] + +options = {'modulename': 'zmq'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/zmq'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.2-intel-2017a.eb b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.2-intel-2017a.eb new file mode 100644 index 0000000000..165ba15944 --- /dev/null +++ b/easybuild/easyconfigs/z/ZeroMQ/ZeroMQ-4.2.2-intel-2017a.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'ZeroMQ' +version = '4.2.2' + +homepage = 'http://www.zeromq.org/' +description = """ZeroMQ looks like an embeddable networking library but acts like a concurrency framework. + It gives you sockets that carry atomic messages across various transports like in-process, + inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fanout, + pub-sub, task distribution, and request-reply. It's fast enough to be the fabric for clustered + products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous + message-processing tasks. It has a score of language APIs and runs on most operating systems.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/zeromq/libzmq/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['52499909b29604c1e47a86f1cb6a9115'] + +# --with-pgm will use shipped OpenPGM (in foreign subdir) +configopts = '--with-pic --with-system-pgm ' +configopts += 'OpenPGM_CFLAGS="-I$EBROOTOPENPGM/include/pgm-${EBVERSIONOPENPGM%.*}" ' +configopts += 'OpenPGM_LIBS="-L$EBROOTOPENPGM/lib -lpgm -lrt -lpthread -lm" ' + +dependencies = [ + ('OpenPGM', '5.2.122'), + ('util-linux', '2.29.2'), + ('libsodium', '1.0.12'), +] + +sanity_check_paths = { + 'files': ['lib/libzmq.%s' % SHLIB_EXT, 'lib/libzmq.a'], + 'dirs': ['include', 'lib'], +} + +moduleclass = 'devel' -- GitLab From 54c21ef39805e3658819582f56a821f29ea5b96c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 10:58:44 +0200 Subject: [PATCH 0961/1311] adding easyconfigs: GSL-2.3-intel-2017a.eb --- .../easyconfigs/g/GSL/GSL-2.3-intel-2017a.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2017a.eb b/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2017a.eb new file mode 100644 index 0000000000..23a2fed6dc --- /dev/null +++ b/easybuild/easyconfigs/g/GSL/GSL-2.3-intel-2017a.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'GSL' +version = '2.3' + +homepage = 'http://www.gnu.org/software/gsl/' +description = """The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. + The library provides a wide range of mathematical routines such as random number generators, special functions + and least-squares fitting.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'unroll': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +moduleclass = 'numlib' -- GitLab From 5611e1be3e27234852c0429f2a98458f8e3a0e2e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 11:42:16 +0200 Subject: [PATCH 0962/1311] add patch to avoid configparser declaring ownership of backports namespace, fixes #3825 --- ...igparser-3.5.0-foss-2016a-Python-2.7.11.eb | 16 +++------- ...gparser-3.5.0-intel-2016b-Python-2.7.12.eb | 15 ++------- ...igparser-3.5.0-intel-2016b-Python-3.5.2.eb | 7 ++--- ...gparser-3.5.0_no-backports-namespace.patch | 31 +++++++++++++++++++ 4 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 easybuild/easyconfigs/c/configparser/configparser-3.5.0_no-backports-namespace.patch diff --git a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016a-Python-2.7.11.eb index 8172078525..f9db925788 100644 --- a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016a-Python-2.7.11.eb @@ -12,26 +12,18 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/'] sources = ['configparser-%(version)s.tar.gz'] -dependencies = [ - ('Python', '2.7.11'), -] -builddependencies = [ - ('pip', '8.1.2', versionsuffix), -] +patches = ['configparser-%(version)s_no-backports-namespace.patch'] + +dependencies = [('Python', '2.7.11')] +builddependencies = [('pip', '8.1.2', versionsuffix)] use_pip = True -unpack_sources = False sanity_check_paths = { 'files': ['lib/python%(pyshortver)s/site-packages/configparser.py'], 'dirs': ['lib/python%(pyshortver)s/site-packages/backports/configparser'], } -# XXX: hack! for some reason the sanity check imports fail, even though the -# PYTHONPATH seems to point to the right directory?!? Creating the __init__.py -# in backports makes it pass and hopefully does not break anything. -postinstallcmds = ['touch %(installdir)s/lib/python%(pyshortver)s/site-packages/backports/__init__.py'] - sanity_check_commands = [ ('python', "-c 'import configparser'"), ('python', "-c 'from backports import configparser'"), diff --git a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-2.7.12.eb index 10fc576297..bed63bcc08 100644 --- a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-2.7.12.eb @@ -12,26 +12,17 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/'] sources = ['configparser-%(version)s.tar.gz'] -dependencies = [ - ('Python', '2.7.12'), -] -builddependencies = [ - ('pip', '8.1.2', versionsuffix), -] +patches = ['configparser-%(version)s_no-backports-namespace.patch'] + +dependencies = [('Python', '2.7.12')] use_pip = True -unpack_sources = False sanity_check_paths = { 'files': ['lib/python%(pyshortver)s/site-packages/configparser.py'], 'dirs': ['lib/python%(pyshortver)s/site-packages/backports/configparser'], } -# XXX: hack! for some reason the sanity check imports fail, even though the -# PYTHONPATH seems to point to the right directory?!? Creating the __init__.py -# in backports makes it pass and hopefully does not break anything. -postinstallcmds = ['touch %(installdir)s/lib/python%(pyshortver)s/site-packages/backports/__init__.py'] - sanity_check_commands = [ ('python', "-c 'import configparser'"), ('python', "-c 'from backports import configparser'"), diff --git a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-3.5.2.eb index e3bb6d9e20..113e88c75f 100644 --- a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-intel-2016b-Python-3.5.2.eb @@ -12,12 +12,11 @@ toolchain = {'name': 'intel', 'version': '2016b'} source_urls = ['https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/'] sources = ['configparser-%(version)s.tar.gz'] -dependencies = [ - ('Python', '3.5.2'), -] +patches = ['configparser-%(version)s_no-backports-namespace.patch'] + +dependencies = [('Python', '3.5.2')] use_pip = True -unpack_sources = False sanity_check_paths = { 'files': [], diff --git a/easybuild/easyconfigs/c/configparser/configparser-3.5.0_no-backports-namespace.patch b/easybuild/easyconfigs/c/configparser/configparser-3.5.0_no-backports-namespace.patch new file mode 100644 index 0000000000..6deccec5e6 --- /dev/null +++ b/easybuild/easyconfigs/c/configparser/configparser-3.5.0_no-backports-namespace.patch @@ -0,0 +1,31 @@ +don't let configparser define 'backports' namespace, since that interferes with other packaging that provide stuff in 'backports' + +patch obtained from https://github.com/NIXOS/nixpkgs/blob/master/pkgs/development/python-modules/configparser/0001-namespace-fix.patch +see also https://bitbucket.org/ambv/configparser/issues/17/importerror-when-used-with-other-backports +diff --git a/setup.py b/setup.py +index 3b07823..63ed25d 100644 +--- a/setup.py ++++ b/setup.py +@@ -42,7 +42,6 @@ setup( + py_modules=modules, + package_dir={'': 'src'}, + packages=find_packages('src'), +- namespace_packages=['backports'], + include_package_data=True, + zip_safe=False, + install_requires=requirements, +diff --git a/src/backports/__init__.py b/src/backports/__init__.py +index f84d25c..febdb2f 100644 +--- a/src/backports/__init__.py ++++ b/src/backports/__init__.py +@@ -3,9 +3,3 @@ + + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) +- +-try: +- import pkg_resources +- pkg_resources.declare_namespace(__name__) +-except ImportError: +- pass +-- -- GitLab From cf19458b143e485f7f38567676fccbce91806cd1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 17:12:07 +0200 Subject: [PATCH 0963/1311] re-add nbconvert extension in IPython easyconfigs --- ...igparser-3.5.0-foss-2016b-Python-2.7.12.eb | 31 +++++++++++++++++++ ...rypoints-0.2.2-foss-2016b-Python-2.7.12.eb | 28 +++++++++++++++++ .../IPython-5.1.0-foss-2016b-Python-2.7.12.eb | 12 +++---- ...IPython-5.1.0-intel-2016b-Python-2.7.12.eb | 12 +++---- ...IPython-5.2.2-intel-2016b-Python-2.7.12.eb | 16 +++++----- 5 files changed, 75 insertions(+), 24 deletions(-) create mode 100644 easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016b-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/e/entrypoints/entrypoints-0.2.2-foss-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..5bd3d25aab --- /dev/null +++ b/easybuild/easyconfigs/c/configparser/configparser-3.5.0-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,31 @@ +easyblock = 'PythonPackage' + +name = 'configparser' +version = '3.5.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://docs.python.org/3/library/configparser.html' +description = "configparser is a Python library that brings the updated configparser from Python 3.5 to Python 2.6-3.5" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/'] +sources = ['configparser-%(version)s.tar.gz'] + +patches = ['configparser-%(version)s_no-backports-namespace.patch'] + +dependencies = [('Python', '2.7.12')] + +use_pip = True + +sanity_check_paths = { + 'files': ['lib/python%(pyshortver)s/site-packages/configparser.py'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/backports/configparser'], +} + +sanity_check_commands = [ + ('python', "-c 'import configparser'"), + ('python', "-c 'from backports import configparser'"), +] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/e/entrypoints/entrypoints-0.2.2-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/e/entrypoints/entrypoints-0.2.2-foss-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..a82113c472 --- /dev/null +++ b/easybuild/easyconfigs/e/entrypoints/entrypoints-0.2.2-foss-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'entrypoints' +version = '0.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/takluyver/entrypoints' +description = """Entry points are a way for Python packages to advertise objects with some common interface.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://pypi.python.org/packages/f8/ad/0e77a853c745a15981ab51fa9a0cb4eca7a7a007b4c1970106ee6ba01e0c/'] +sources = ['entrypoints-0.2.2-py2.py3-none-any.whl'] + +dependencies = [ + ('Python', '2.7.12'), + ('configparser', '3.5.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['lib/python%(pyshortver)s/site-packages/entrypoints.py'], + 'dirs': [] +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb index 15948e83d4..ec7c04c10b 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-foss-2016b-Python-2.7.12.eb @@ -18,9 +18,7 @@ dependencies = [ ('Python', '2.7.12'), ('PyZMQ', '16.0.2', '%s-zmq4' % versionsuffix), ('testpath', '0.3', versionsuffix), - # required by 'nbconvert', but causes problems w.r.t. 'backports' module... - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('entrypoints', '0.2.2', versionsuffix), + ('entrypoints', '0.2.2', versionsuffix), ('path.py', '8.2.1', versionsuffix), ('prompt-toolkit', '1.0.6', versionsuffix), ] @@ -114,11 +112,9 @@ exts_list = [ ('pexpect', '4.2.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], }), - # disabled because entrypoints on which this depends pull in configparser, which causes problems - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('nbconvert', '4.2.0', { - # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - # }), + ('nbconvert', '4.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb index 73b84816cd..ad14e82e32 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.1.0-intel-2016b-Python-2.7.12.eb @@ -18,9 +18,7 @@ dependencies = [ ('Python', '2.7.12'), ('PyZMQ', '15.4.0', '%s-zmq4' % versionsuffix), ('testpath', '0.3', versionsuffix), - # required by 'nbconvert', but causes problems w.r.t. 'backports' module... - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('entrypoints', '0.2.2', versionsuffix), + ('entrypoints', '0.2.2', versionsuffix), ('path.py', '8.2.1', versionsuffix), ('prompt-toolkit', '1.0.6', versionsuffix), ] @@ -114,11 +112,9 @@ exts_list = [ ('pexpect', '4.2.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], }), - # disabled because entrypoints on which this depends pull in configparser, which causes problems - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('nbconvert', '4.2.0', { - # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - # }), + ('nbconvert', '4.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb index 89001fc17a..01c5f93a20 100644 --- a/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/i/IPython/IPython-5.2.2-intel-2016b-Python-2.7.12.eb @@ -18,9 +18,7 @@ dependencies = [ ('Python', '2.7.12'), ('PyZMQ', '16.0.2', '%s-zmq4' % versionsuffix), ('testpath', '0.3', versionsuffix), - # required by 'nbconvert', but causes problems w.r.t. 'backports' module... - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('entrypoints', '0.2.2', versionsuffix), + ('entrypoints', '0.2.2', versionsuffix), ('path.py', '10.1', versionsuffix), ('prompt-toolkit', '1.0.13', versionsuffix), ] @@ -111,11 +109,13 @@ exts_list = [ ('pexpect', '4.2.1', { 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], }), - # disabled because entrypoints on which this depends pull in configparser, which causes problems - # see https://github.com/hpcugent/easybuild-easyconfigs/issues/3825 - # ('nbconvert', '5.1.1', { - # 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], - # }), + ('pandocfilters', '1.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandocfilters/'], + }), + ('nbconvert', '5.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + 'use_pip': True, + }), ('backports.shutil_get_terminal_size', '1.0.0', { 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], }), -- GitLab From f142dcdf9ad525403d586d37b3bf68d2a2933032 Mon Sep 17 00:00:00 2001 From: Basil Neff Date: Thu, 20 Apr 2017 17:31:03 +0200 Subject: [PATCH 0964/1311] Change source_urls of pycrypto to https://pypi.python.org/packages/source/p/pycrypto/: A crypto library should be downloaded via https, python.org seems more reliable than dlitz.net, dlitz.net is currently not online. --- easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb | 2 +- .../easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb | 2 +- .../p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb | 2 +- .../p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2016b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.12-intel-2016b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016b.eb | 2 +- easybuild/easyconfigs/p/Python/Python-3.5.2-intel-2016b.eb | 2 +- 61 files changed, 61 insertions(+), 61 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb index 0cacb5b908..6b56eb27c3 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015a.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb index c4b91910db..8b4e1559a2 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-foss-2015b.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb index 6cb74160de..acd58a0881 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-gimkl-2.11.5.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb index 2bf2b3c0c7..e8f04d3c24 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.4.10.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb index d616f3a678..f6fb8098a2 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-goolf-1.7.20.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb index 3bba96e78d..e63f73a086 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015a.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb index 5578abe094..007214e5b0 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.10-intel-2015b.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb index 4289f275f3..8a60745ce6 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb index f16c276300..f9d52e68ec 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb index 7ca3e0d30a..b14cb9623b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2015a.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb index 90aff56172..161e0d5c72 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-foss-2016a.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb index 540888954b..236dc03eb2 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-gimkl-2.11.5.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb index 500c945db9..61b2cea7f1 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-goolf-1.7.20.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb index 66287172c5..15781ef44b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2015b.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb index 49ed840807..92cc06cd43 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016.02-GCC-4.9.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb index 4fa82a32c1..2bcf51b6e3 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a-libX11-1.6.3.eb @@ -95,7 +95,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb index 36a33282cc..b4d230688e 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-intel-2016a.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb index ceffc4847a..f016ee6e7a 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.07.eb @@ -92,7 +92,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb index 42a08985d0..7040853aa6 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -90,7 +90,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2016b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2016b.eb index ba6ada1467..0f7cc1242b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2016b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2016b.eb @@ -85,7 +85,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-intel-2016b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-intel-2016b.eb index f39ab1c056..8305709383 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-intel-2016b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-intel-2016b.eb @@ -85,7 +85,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb index 47c4558b9f..eb4f43f9dd 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-iomkl-2017a.eb @@ -85,7 +85,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb index 8d585acc42..099f1ae1b2 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-intel-2017a.eb @@ -86,7 +86,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb index 9cf2d30627..b98190bc1b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-foss-2015b.eb @@ -81,7 +81,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb index 0d7187668b..6d47c29a41 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.4.10.eb @@ -81,7 +81,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb index 1f04581f6c..5d62c714b3 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-goolf-1.5.14.eb @@ -81,7 +81,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb index d6acb56cd0..466af1fc83 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.2.0.eb @@ -79,7 +79,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb index 0a6a82b9fe..9112593773 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-ictce-5.3.0.eb @@ -79,7 +79,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb index 78b8331206..b74b1eef65 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.3-intel-2015a.eb @@ -79,7 +79,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb index 8bc486f394..fa3597eb0f 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-goolf-1.4.10.eb @@ -82,7 +82,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb index f91d5d9be1..74108af019 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.3.0.eb @@ -82,7 +82,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb index 1589ad3044..7f83fbbc76 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.5-ictce-5.5.0.eb @@ -82,7 +82,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.8', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb index cc438001ba..d802876700 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-goolf-1.4.10.eb @@ -81,7 +81,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb index 8a3b97a885..8d651bcfeb 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.6-ictce-5.5.0.eb @@ -84,7 +84,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb index ff8c4dd1f7..0ac840f64e 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-foss-2014b.eb @@ -81,7 +81,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb index 400936afa7..8301c629cc 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-goolf-1.5.14.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb index 535df5f445..fcb554f578 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-ictce-7.1.2.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb index 15167c0da9..d08ab61505 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014.06.eb @@ -88,7 +88,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb index 5da8fad6cd..3479838d18 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2014b.eb @@ -88,7 +88,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb index a19c3193df..e92ff5d69d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.8-intel-2015a.eb @@ -84,7 +84,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb index c42116cc9a..0f597d584c 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.06.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb index e020765a41..2963dc2fc7 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-CrayGNU-2015.11.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb index 0e5c8bdaf5..6953cb6dbe 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015.05.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb index 50b5d85a22..0f287711fc 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015a.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb index 954cb1d6c9..77b75dd242 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-foss-2015b.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb index 2117038315..3ba0f79c58 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.14.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb index de0245d75a..58ac4915cc 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.5.16.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb index 39c33c3855..f324c5da55 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-goolf-1.7.20.eb @@ -87,7 +87,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb index dfd615f248..76e8491a9b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.9-intel-2015a.eb @@ -88,7 +88,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb index 530b345146..e15e16e66c 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-goolf-1.4.10.eb @@ -62,7 +62,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ] diff --git a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb index 1f4aa039b5..fbcadd2903 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.2.3-ictce-5.3.0.eb @@ -62,7 +62,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ] diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb index 85a061b4b2..aaa2d02a7e 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2014b.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb index 43f98bbf39..80c176feab 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.1-intel-2015a.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.11', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb index fa4d5db712..e220cd9cc4 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.4.3-intel-2015a.eb @@ -91,7 +91,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb index 7f32b2fbd5..1fe2eb4748 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.0-intel-2015b.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb index 34b680443b..3794d8056b 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2015a.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb index f17ad6e258..0ea37fde6e 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-foss-2016a.eb @@ -93,7 +93,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb index bba87219ba..6b27ddc007 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.1-intel-2016a.eb @@ -97,7 +97,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb index 3034157afb..0f528e0158 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016.04.eb @@ -92,7 +92,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016b.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016b.eb index f40c4aab55..2fc712658f 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-foss-2016b.eb @@ -92,7 +92,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-intel-2016b.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-intel-2016b.eb index 805061ab30..198569f10b 100644 --- a/easybuild/easyconfigs/p/Python/Python-3.5.2-intel-2016b.eb +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-intel-2016b.eb @@ -92,7 +92,7 @@ exts_list = [ }), ('pycrypto', '2.6.1', { 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], }), ('ecdsa', '0.13', { 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], -- GitLab From 2582246e9f15e21fffde3cf51c5c8e8f192422ef Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 20:47:44 +0200 Subject: [PATCH 0965/1311] adding easyconfigs: IPython-5.3.0-intel-2017a-Python-2.7.13.eb --- ...IPython-5.3.0-intel-2017a-Python-2.7.13.eb | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 easybuild/easyconfigs/i/IPython/IPython-5.3.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/i/IPython/IPython-5.3.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/i/IPython/IPython-5.3.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..62ef063309 --- /dev/null +++ b/easybuild/easyconfigs/i/IPython/IPython-5.3.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,176 @@ +easyblock = 'Bundle' + +name = 'IPython' +version = '5.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://ipython.org/index.html' +description = """IPython provides a rich architecture for interactive computing with: + Powerful interactive shells (terminal and Qt-based). + A browser-based notebook with support for code, text, mathematical expressions, inline plots and other rich media. + Support for interactive data visualization and use of GUI toolkits. + Flexible, embeddable interpreters to load into your own projects. + Easy to use, high performance tools for parallel computing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +dependencies = [ + ('Python', '2.7.13'), + ('PyZMQ', '16.0.2', '%s-zmq4' % versionsuffix), +] + +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('requests', '2.13.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], + }), + ('nbformat', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbformat/'], + }), + ('Pygments', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/P/Pygments/'], + 'modulename': 'pygments', + }), + ('singledispatch', '3.4.0.3', { + 'source_urls': ['https://pypi.python.org/packages/source/s/singledispatch/'], + }), + ('certifi', '2017.4.17', { + 'source_urls': ['https://pypi.python.org/packages/source/c/certifi/'], + }), + ('backports_abc', '0.5', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports_abc/'], + }), + ('tornado', '4.5', { + 'source_urls': ['https://pypi.python.org/packages/source/t/tornado/'], + }), + ('MarkupSafe', '1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/M/MarkupSafe/'], + 'modulename': 'markupsafe', + }), + ('Jinja2', '2.9.6', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + 'modulename': 'jinja2', + }), + ('jupyter_client', '5.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_client/'], + }), + ('functools32', '3.2.3-2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/functools32/'], + }), + ('jsonschema', '2.6.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jsonschema/'], + }), + ('mistune', '0.7.4', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mistune/'], + }), + ('ptyprocess', '0.5.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/ptyprocess/'], + }), + ('terminado', '0.6', { + 'source_urls': ['https://pypi.python.org/packages/source/t/terminado/'], + }), + ('simplegeneric', '0.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/simplegeneric/'], + 'source_tmpl': 'simplegeneric-%(version)s.zip', + }), + ('ipython_genutils', '0.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython_genutils/'], + }), + ('scandir', '1.5', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scandir/'], + }), + ('pathlib2', '2.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pathlib2/'], + }), + ('pickleshare', '0.7.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pickleshare/'], + }), + ('traitlets', '4.3.2', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traitlets/'], + }), + ('notebook', '5.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/notebook/'], + }), + ('jupyter_core', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_core/'], + }), + ('pexpect', '4.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pexpect/'], + }), + ('pandocfilters', '1.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandocfilters/'], + }), + ('configparser', '3.5.0', { + 'source_urls': ['https://pypi.python.org/packages/source/c/configparser/'], + 'patches': ['configparser-3.5.0_no-backports-namespace.patch'], + 'use_pip': True, + }), + ('entrypoints', '0.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/e/entrypoints/'], + 'source_tmpl': 'entrypoints-%(version)s-py2.py3-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('nbconvert', '5.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert/'], + 'use_pip': True, + }), + ('backports.shutil_get_terminal_size', '1.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/b/backports.shutil_get_terminal_size/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('testpath', '0.3', { + 'source_urls': ['https://pypi.python.org/packages/py2.py3/t/testpath/'], + 'source_tmpl': 'testpath-%(version)s-py2.py3-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('wcwidth', '0.1.7', { + 'source_urls': ['https://pypi.python.org/packages/source/w/wcwidth/'], + 'source_tmpl': 'wcwidth-%(version)s-py2.py3-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('prompt-toolkit', '1.0.14', { + 'modulename': 'prompt_toolkit', + 'source_urls': ['https://pypi.python.org/packages/source/p/prompt_toolkit/'], + 'source_tmpl': 'prompt_toolkit-%(version)s-py2-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('ipython', version, { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython/'], + 'modulename': 'IPython', + }), + ('ipykernel', '4.6.1', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipykernel/'], + }), + ('ipywidgets', '5.2.3', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipywidgets/'], + }), + ('widgetsnbextension', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/w/widgetsnbextension/'], + }), +] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/ipython'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/IPython'], +} + +sanity_check_commands = [ + ('ipython -h', ''), + ('ipython notebook --help', ''), + ('iptest', ''), + ('iptest2', ''), +] + +moduleclass = 'tools' -- GitLab From d9723ff8ec091b57e3ffbf11566782a52a612a75 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 21:05:59 +0200 Subject: [PATCH 0966/1311] adding easyconfigs: ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb, h5py-2.7.0-intel-2017a-Python-2.7.13.eb, pkgconfig-1.2.2-intel-2017a-Python-2.7.13.eb, pkg-config-0.29.2-GCCcore-6.3.0.eb --- .../h5py-2.7.0-intel-2017a-Python-2.7.13.eb | 32 +++++++ ...ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb | 88 +++++++++++++++++++ .../pkg-config-0.29.2-GCCcore-6.3.0.eb | 32 +++++++ ...gconfig-1.2.2-intel-2017a-Python-2.7.13.eb | 26 ++++++ 4 files changed, 178 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..300f1e3d6e --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'h5py' +version = '2.7.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '2.7.13'), + ('HDF5', '1.10.0-patch1'), + ('pkgconfig', '1.2.2', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..d74840fcf3 --- /dev/null +++ b/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,88 @@ +easyblock = 'Bundle' + +name = 'ipyrad' +version = '0.6.15' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://ipyrad.readthedocs.io' +description = """ipyrad is an interactive toolkit for assembly and analysis of restriction-site associated genomic + data sets (e.g., RAD, ddRAD, GBS) for population genetic and phylogenetic studies.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('h5py', '2.7.0', versionsuffix), + ('numba', '0.32.0', versionsuffix), + ('IPython', '5.3.0', versionsuffix), +] + +exts_list = [ + ('imagesize', '0.7.1', { + 'source_urls': ['https://pypi.python.org/packages/source/i/imagesize'], + }), + ('alabaster', '0.7.10', { + 'source_urls': ['https://pypi.python.org/packages/source/a/alabaster'], + }), + ('Babel', '2.4.0', { + 'source_urls': ['https://pypi.python.org/packages/source/B/Babel'], + }), + ('snowballstemmer', '1.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/snowballstemmer'], + }), + ('docutils', '0.13.1', { + 'source_urls': ['https://pypi.python.org/packages/source/d/docutils'], + }), + ('Sphinx', '1.5.5', { + 'source_urls': ['https://pypi.python.org/packages/source/S/Sphinx'], + }), + ('networkx', '1.11', { + 'source_urls': ['https://pypi.python.org/packages/source/n/networkx'], + }), + ('jupyter', '1.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter'], + }), + ('ipyparallel', '6.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipyparallel'], + }), + ('webencodings', '0.5.1', { + 'source_urls': ['https://pypi.python.org/packages/source/w/webencodings'], + }), + ('html5lib', '0.999999999', { + 'source_urls': ['https://pypi.python.org/packages/source/h/html5lib'], + }), + ('bleach', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/b/bleach'], + }), + ('jupyter-console', '5.1.0', { + 'modulename': 'jupyter_console', + 'source_urls': ['https://pypi.python.org/packages/source/j/jupyter_console'], + 'source_tmpl': 'jupyter_console-%(version)s.tar.gz', + }), + ('qtconsole', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/q/qtconsole'], + }), + ('futures', '3.1.1', { + 'modulename': 'concurrent.futures', + 'source_urls': ['https://pypi.python.org/packages/source/f/futures'], + }), + (name, version, { + 'source_urls': ['https://github.com/dereneaton/ipyrad/archive/'], + 'source_tmpl': '%(version)s.tar.gz', + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['bin/ipyrad'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..b75a0d85ea --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.2-GCCcore-6.3.0.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.2' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] + +builddependencies = [ + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.27', '', True), +] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..0df86ffc84 --- /dev/null +++ b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'pkgconfig' +version = '1.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://github.com/matze/pkgconfig' +description = """pkgconfig is a Python module to interface with the pkg-config command line tool""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('pkg-config', '0.29.2'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' -- GitLab From 0be93bb3b688cde0add034758905359998691a30 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 22:04:24 +0200 Subject: [PATCH 0967/1311] add patch file for configparser as extension in IPython easyconfig --- ...gparser-3.5.0_no-backports-namespace.patch | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/i/IPython/configparser-3.5.0_no-backports-namespace.patch diff --git a/easybuild/easyconfigs/i/IPython/configparser-3.5.0_no-backports-namespace.patch b/easybuild/easyconfigs/i/IPython/configparser-3.5.0_no-backports-namespace.patch new file mode 100644 index 0000000000..6deccec5e6 --- /dev/null +++ b/easybuild/easyconfigs/i/IPython/configparser-3.5.0_no-backports-namespace.patch @@ -0,0 +1,31 @@ +don't let configparser define 'backports' namespace, since that interferes with other packaging that provide stuff in 'backports' + +patch obtained from https://github.com/NIXOS/nixpkgs/blob/master/pkgs/development/python-modules/configparser/0001-namespace-fix.patch +see also https://bitbucket.org/ambv/configparser/issues/17/importerror-when-used-with-other-backports +diff --git a/setup.py b/setup.py +index 3b07823..63ed25d 100644 +--- a/setup.py ++++ b/setup.py +@@ -42,7 +42,6 @@ setup( + py_modules=modules, + package_dir={'': 'src'}, + packages=find_packages('src'), +- namespace_packages=['backports'], + include_package_data=True, + zip_safe=False, + install_requires=requirements, +diff --git a/src/backports/__init__.py b/src/backports/__init__.py +index f84d25c..febdb2f 100644 +--- a/src/backports/__init__.py ++++ b/src/backports/__init__.py +@@ -3,9 +3,3 @@ + + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) +- +-try: +- import pkg_resources +- pkg_resources.declare_namespace(__name__) +-except ImportError: +- pass +-- -- GitLab From 0c7c4f5c3d8938754cdf2229ab8aa6743d375d6d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 20 Apr 2017 23:28:04 +0200 Subject: [PATCH 0968/1311] add toyplot extension in ipyrad easyconfig file --- ...ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb | 26 +++++++++++++++++- .../Pillow-4.1.0-intel-2017a-Python-2.7.13.eb | 27 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/p/Pillow/Pillow-4.1.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb index d74840fcf3..ecce4b3046 100644 --- a/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/i/ipyrad/ipyrad-0.6.15-intel-2017a-Python-2.7.13.eb @@ -10,14 +10,15 @@ description = """ipyrad is an interactive toolkit for assembly and analysis of r toolchain = {'name': 'intel', 'version': '2017a'} -# this is a bundle of Python packages exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') dependencies = [ ('Python', '2.7.13'), ('h5py', '2.7.0', versionsuffix), ('numba', '0.32.0', versionsuffix), ('IPython', '5.3.0', versionsuffix), + ('Pillow', '4.1.0', versionsuffix), ] exts_list = [ @@ -69,6 +70,29 @@ exts_list = [ 'modulename': 'concurrent.futures', 'source_urls': ['https://pypi.python.org/packages/source/f/futures'], }), + ('arrow', '0.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/a/arrow'], + }), + ('colormath', '2.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/c/colormath'], + }), + ('multipledispatch', '0.4.9', { + 'source_urls': ['https://pypi.python.org/packages/source/m/multipledispatch'], + }), + ('pypng', '0.0.18', { + 'modulename': 'png', + 'source_urls': ['https://pypi.python.org/packages/source/p/pypng'], + }), + ('olefile', '0.44', { + 'source_urls': ['https://pypi.python.org/packages/source/o/olefile'], + 'source_tmpl': 'olefile-%(version)s.zip', + }), + ('reportlab', '3.4.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/reportlab'], + }), + ('toyplot', '0.14.0', { + 'source_urls': ['https://pypi.python.org/packages/source/t/toyplot'], + }), (name, version, { 'source_urls': ['https://github.com/dereneaton/ipyrad/archive/'], 'source_tmpl': '%(version)s.tar.gz', diff --git a/easybuild/easyconfigs/p/Pillow/Pillow-4.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/Pillow/Pillow-4.1.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..f4cf66d2ef --- /dev/null +++ b/easybuild/easyconfigs/p/Pillow/Pillow-4.1.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'Pillow' +version = '4.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://pillow.readthedocs.org/' +description = """Pillow is the 'friendly PIL fork' by Alex Clark and Contributors. + PIL is the Python Imaging Library by Fredrik Lundh and Contributors.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('libjpeg-turbo', '1.5.1'), + ('libpng', '1.6.29'), + ('zlib', '1.2.11'), + ('LibTIFF', '4.0.7'), + ('freetype', '2.7.1', '-libpng-1.6.29'), +] + +options = {'modulename': 'PIL'} + +moduleclass = 'vis' -- GitLab From 4dd8a3443ae8329b20a05bce182f2386c3053d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 21 Apr 2017 13:14:18 +0200 Subject: [PATCH 0969/1311] Go 1.8.1 binary version --- easybuild/easyconfigs/g/Go/Go-1.8.1.eb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 easybuild/easyconfigs/g/Go/Go-1.8.1.eb diff --git a/easybuild/easyconfigs/g/Go/Go-1.8.1.eb b/easybuild/easyconfigs/g/Go/Go-1.8.1.eb new file mode 100644 index 0000000000..07ab4f25c4 --- /dev/null +++ b/easybuild/easyconfigs/g/Go/Go-1.8.1.eb @@ -0,0 +1,21 @@ +easyblock = 'Tarball' + +name = 'Go' +version = '1.8.1' + +homepage = 'http://www.golang.org' +description = """Go is an open source programming language that makes it easy to build + simple, reliable, and efficient software.""" + +toolchain = {'name': 'dummy', 'version': ''} + +sources = ['%(namelower)s%(version)s.linux-amd64.tar.gz'] +source_urls = ['https://storage.googleapis.com/golang/'] + +sanity_check_paths = { + 'files': ['bin/go', 'bin/gofmt'], + 'dirs': ['api', 'doc', 'lib', 'pkg'], +} + +modextravars = {'GOROOT': '%(installdir)s'} +moduleclass = 'compiler' -- GitLab From 6beb05e877f425ecaafe2fa8cbb60ff583c27dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Fri, 21 Apr 2017 13:43:25 +0200 Subject: [PATCH 0970/1311] added AdapterRemoval --- .../AdapterRemoval-2.2.0-foss-2016b.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/a/AdapterRemoval/AdapterRemoval-2.2.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/a/AdapterRemoval/AdapterRemoval-2.2.0-foss-2016b.eb b/easybuild/easyconfigs/a/AdapterRemoval/AdapterRemoval-2.2.0-foss-2016b.eb new file mode 100644 index 0000000000..738b03c0ca --- /dev/null +++ b/easybuild/easyconfigs/a/AdapterRemoval/AdapterRemoval-2.2.0-foss-2016b.eb @@ -0,0 +1,35 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'MakeCp' + +name = 'AdapterRemoval' +version = '2.2.0' + +homepage = 'https://github.com/MikkelSchubert/%(namelower)s' +description = """AdapterRemoval searches for and removes remnant adapter sequences + from High-Throughput Sequencing (HTS) data and (optionally) trims low quality bases + from the 3' end of reads following adapter removal.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/MikkelSchubert/%(namelower)s/archive/'] +sources = ['v%(version)s.tar.gz'] + +files_to_copy = [(['build/%(name)s'], 'bin'), (['build/%(name)s.1'], 'share/man/man1')] + +checksums = ['159e5c7c527dde70eac444a87bf5fbfc'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['bin/%(name)s'], + 'dirs': ['share'] +} + +sanity_check_commands = [('AdapterRemoval', '--version')] + +moduleclass = 'bio' -- GitLab From 321af123d5b5f5bb627e1e067dbf730af59b4816 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 23 Apr 2017 13:16:53 +0200 Subject: [PATCH 0971/1311] adding easyconfigs: ViennaRNA-2.3.5-intel-2017a.eb --- .../ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb new file mode 100644 index 0000000000..daafb8cd29 --- /dev/null +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb @@ -0,0 +1,44 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +easyblock = 'ConfigureMake' + +name = 'ViennaRNA' +version = '2.3.5' + +homepage = 'http://www.tbi.univie.ac.at/RNA/' +description = """The Vienna RNA Package consists of a C code library and several +stand-alone programs for the prediction and comparison of RNA secondary structures.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'openmp': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] + +# Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. +configopts = '--without-perl' +# Alternatively, you may want to use the following to copy the perl-module to a "local" directory +# Code NOT yet tested, therefor left here for future recycling +# preconfigopts = 'env PERLPREFIX="/path/where/the/perl/module/shoud/go"' + +sanity_check_paths = { + 'files': ['bin/RNA%s' % x for x in ['fold', 'eval', 'heat', 'pdist', 'distance', + 'inverse', 'plot', 'subopt', 'Lfold', 'cofold', + 'paln', 'duplex', 'alifold', 'plfold', 'up', + 'aliduplex', 'Lalifold', '2Dfold', 'parconv', + 'PKplex', 'plex', 'snoop', 'forester']] + + ['bin/Kinfold'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 28d361d3ce47585509674f61b14a5027ac94a1dc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 24 Apr 2017 11:00:31 +0200 Subject: [PATCH 0972/1311] add checksum for ViennaRNA 2.3.5 source tarball --- .../easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb index daafb8cd29..fc2a6f62b8 100644 --- a/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb +++ b/easybuild/easyconfigs/v/ViennaRNA/ViennaRNA-2.3.5-intel-2017a.eb @@ -25,6 +25,8 @@ toolchainopts = {'pic': True, 'openmp': True} sources = [SOURCE_TAR_GZ] source_urls = ['http://www.tbi.univie.ac.at/RNA/download/sourcecode/%(version_major)s_%(version_minor)s_x/'] +checksums = ['4542120adae9b7abb605e2304c2a1326'] + # Prevents the "make install" step from trying to copy to _global_ perl dir and thus make easybuild fail. configopts = '--without-perl' # Alternatively, you may want to use the following to copy the perl-module to a "local" directory -- GitLab From 513967084fe5171105b83b20c0cc16466b84346b Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Tue, 25 Apr 2017 17:12:25 +0800 Subject: [PATCH 0973/1311] bundle most of the python packages as extensions --- ...stodian-1.1.0-intel-2017a-Python-2.7.13.eb | 9 ++++- ...reWorks-1.4.2-intel-2017a-Python-2.7.13.eb | 33 +++++++++++++++--- ...aginate-0.4.5-intel-2017a-Python-2.7.13.eb | 27 --------------- .../Flask-0.12-intel-2017a-Python-2.7.13.eb | 26 -------------- ...nicorn-19.7.1-intel-2017a-Python-2.7.13.eb | 24 ------------- .../Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb | 24 ------------- .../monty-0.9.6-intel-2017a-Python-2.7.13.eb | 26 -------------- .../mpmath-0.19-intel-2017a-Python-2.7.13.eb | 34 ------------------- ...tgen-db-0.6.5-intel-2017a-Python-2.7.13.eb | 9 ++++- ...ymatgen-4.7.3-intel-2017a-Python-2.7.13.eb | 32 ++++++++++++++--- ...pymongo-3.4.0-intel-2017a-Python-2.7.13.eb | 24 ------------- ...quests-2.13.0-intel-2017a-Python-2.7.13.eb | 24 ------------- .../smoqe-0.1.3-intel-2017a-Python-2.7.13.eb | 25 -------------- .../sympy-1.0-intel-2017a-Python-2.7.13.eb | 33 ------------------ .../s/sympy/sympy-1.0_tests-unicode.patch | 23 ------------- ...rkzeug-0.12.1-intel-2017a-Python-2.7.13.eb | 24 ------------- 16 files changed, 72 insertions(+), 325 deletions(-) delete mode 100644 easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb delete mode 100644 easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch delete mode 100644 easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb index 45b7389451..2a8be8856b 100644 --- a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb @@ -15,7 +15,14 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.13'), ('PyYAML', '3.12', versionsuffix), - ('monty', '0.9.6', versionsuffix), +] + +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('monty', '0.9.6', { + 'source_urls': ['https://pypi.python.org/packages/source/m/monty/'], + }), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb index 526b35054c..0323b8f8c9 100644 --- a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb @@ -15,12 +15,35 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.13'), - ('Flask', '0.12', versionsuffix), - ('Flask-paginate', '0.4.5', versionsuffix), ('PyYAML', '3.12', versionsuffix), - ('gunicorn', '19.7.1', versionsuffix), - ('monty', '0.9.6', versionsuffix), - ('pymongo', '3.4.0', versionsuffix), +] + +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('Flask', '0.12', { + 'source_urls': ['https://pypi.python.org/packages/source/F/Flask/'], + }), + ('Flask-paginate', '0.4.5', { + 'source_urls': ['https://pypi.python.org/packages/source/F/Flask-paginate/'], + 'source_tmpl': 'flask-paginate-%(version)s.zip', + 'modulename': 'flask_paginate', + }), + ('Jinja2', '2.9.6', { + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + }), + ('Werkzeug', '0.12.1', { + 'source_urls': ['https://pypi.python.org/packages/source/W/Werkzeug/'], + }), + ('gunicorn', '19.7.1', { + 'source_urls': ['https://pypi.python.org/packages/source/g/gunicorn/'], + }), + ('monty', '0.9.6', { + 'source_urls': ['https://pypi.python.org/packages/source/m/monty/'], + }), + ('pymongo', '3.4.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pymongo/'], + }), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 153e1028fe..0000000000 --- a/easybuild/easyconfigs/f/Flask-paginate/Flask-paginate-0.4.5-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,27 +0,0 @@ -easyblock = "PythonPackage" - -name = 'Flask-paginate' -version = '0.4.5' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/Flask-paginate" -description = """Simple paginate support for flask.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCELOWER_ZIP] - -dependencies = [ - ('Python', '2.7.13'), - ('Flask', '0.12', versionsuffix), -] - -options = {'modulename': 'flask_paginate'} - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index b305d04f47..0000000000 --- a/easybuild/easyconfigs/f/Flask/Flask-0.12-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,26 +0,0 @@ -easyblock = "PythonPackage" - -name = 'Flask' -version = '0.12' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/Flask" -description = """A microframework based on Werkzeug, Jinja2 and good intentions.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), - ('Jinja2', '2.9.6', versionsuffix), - ('Werkzeug', '0.12.1', versionsuffix), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 6e2be6854a..0000000000 --- a/easybuild/easyconfigs/g/gunicorn/gunicorn-19.7.1-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = "PythonPackage" - -name = 'gunicorn' -version = '19.7.1' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/gunicorn" -description = """WSGI HTTP Server for UNIX.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 0069b2587c..0000000000 --- a/easybuild/easyconfigs/j/Jinja2/Jinja2-2.9.6-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = "PythonPackage" - -name = 'Jinja2' -version = '2.9.6' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/Jinja2" -description = """A small but fast and easy to use stand-alone template engine written in pure python.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 64c36ac39f..0000000000 --- a/easybuild/easyconfigs/m/monty/monty-0.9.6-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,26 +0,0 @@ -easyblock = 'PythonPackage' - -name = 'monty' -version = '0.9.6' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/monty/" -description = """Monty implements supplementary useful functions for Python that are not part of the standard library. - Examples include useful utilities like transparent support for zipped files, useful design patterns such as singleton - and cached_class, and many more.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s.egg'], -} - -moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index db5a0e5289..0000000000 --- a/easybuild/easyconfigs/m/mpmath/mpmath-0.19-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,34 +0,0 @@ -# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild -# -# Author: Adam Huffman -# adam.huffman@crick.ac.uk -# The Francis Crick Institute - -easyblock = 'PythonPackage' - -name = 'mpmath' -version = '0.19' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://mpmath.org/' -description = """mpmath can be used as an arbitrary-precision substitute for Python's float/complex - types and math/cmath modules, but also does much more advanced mathematics. Almost any calculation - can be performed just as well at 10-digit or 1000-digit precision, with either real or complex - numbers, and in many cases mpmath implements efficient algorithms that scale well for extremely - high precision work.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = ['https://github.com/fredrik-johansson/mpmath/archive/'] -sources = ['%(version)s.tar.gz'] - -dependencies = [('Python', '2.7.13')] - -runtest = 'python -c "import mpmath; mpmath.runtests();"' - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages/mpmath'], -} - -moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb index 908d8b8ff5..b7bde5299a 100644 --- a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb @@ -16,7 +16,14 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.13'), ('pymatgen', '4.7.3', versionsuffix), - ('smoqe', '0.1.3', versionsuffix), +] + +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('smoqe', '0.1.3', { + 'source_urls': ['https://pypi.python.org/packages/source/s/smoqe/'], + }), ] options = {'modulename': 'matgendb'} diff --git a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb index f8b263a2dd..c011699956 100644 --- a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb @@ -17,11 +17,35 @@ dependencies = [ ('Python', '2.7.13'), ('PyYAML', '3.12', versionsuffix), ('matplotlib', '2.0.0', versionsuffix), - ('monty', '0.9.6', versionsuffix), - ('mpmath', '0.19', versionsuffix), - ('requests', '2.13.0', versionsuffix), ('spglib-python', '1.9.9.38', versionsuffix), - ('sympy', '1.0', versionsuffix), +] + +exts_defaultclass = 'PythonPackage' + +exts_list = [ + ('Flask', '0.12', { + 'source_urls': ['https://pypi.python.org/packages/source/F/Flask/'], + }), + ('Flask-paginate', '0.4.5', { + 'source_urls': ['https://pypi.python.org/packages/source/F/Flask-paginate/'], + 'source_tmpl': 'flask-paginate-%(version)s.zip', + 'modulename': 'flask_paginate', + }), + ('gunicorn', '19.7.1', { + 'source_urls': ['https://pypi.python.org/packages/source/g/gunicorn/'], + }), + ('monty', '0.9.6', { + 'source_urls': ['https://pypi.python.org/packages/source/m/monty/'], + }), + ('mpmath', '0.19', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mpmath/'], + }), + ('requests', '2.13.0', { + 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], + }), + ('sympy', '1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/sympy/'], + }), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 9bb19f1090..0000000000 --- a/easybuild/easyconfigs/p/pymongo/pymongo-3.4.0-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'PythonPackage' - -name = 'pymongo' -version = '3.4.0' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://pypi.python.org/pypi/pymongo' -description = """Python driver for MongoDB.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_LOWER_SOURCE] -sources = [SOURCELOWER_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'data' diff --git a/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 786bbdf2c6..0000000000 --- a/easybuild/easyconfigs/r/requests/requests-2.13.0-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'PythonPackage' - -name = 'requests' -version = '2.13.0' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://pypi.python.org/pypi/requests' -description = """Python http for humans.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_LOWER_SOURCE] -sources = [SOURCELOWER_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index a5ff78eb95..0000000000 --- a/easybuild/easyconfigs/s/smoqe/smoqe-0.1.3-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,25 +0,0 @@ -easyblock = 'PythonPackage' - -name = 'smoqe' -version = '0.1.3' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'https://pypi.python.org/pypi/smoqe' -description = """Simple MongoDB Query Engine (SMoQE).""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_LOWER_SOURCE] -sources = [SOURCELOWER_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), - ('pymongo', '3.4.0', versionsuffix), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 444574067c..0000000000 --- a/easybuild/easyconfigs/s/sympy/sympy-1.0-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,33 +0,0 @@ -easyblock = 'PythonPackage' - -name = 'sympy' -version = '1.0' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://sympy.org/' -description = """SymPy is a Python library for symbolic mathematics. It aims to - become a full-featured computer algebra system (CAS) while keeping the code as - simple as possible in order to be comprehensible and easily extensible. SymPy - is written entirely in Python and does not require any external libraries.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -# patch to fix tests -patches = ['sympy-1.0_tests-unicode.patch'] - -dependencies = [ - ('Python', '2.7.13'), - ('mpmath', '0.19', '-Python-%(pyver)s'), -] - -# runtest = 'python setup.py test' - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s-%(version)s-py%(pyshortver)s.egg/%(name)s'], -} - -moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch b/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch deleted file mode 100644 index 87e12a3b40..0000000000 --- a/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch +++ /dev/null @@ -1,23 +0,0 @@ -Fix for Unicode error that causes one of the tests to fail - -For reference, see -http://stackoverflow.com/questions/21129020/how-to-fix-unicodedecodeerror-ascii-codec-cant-decode-byte -and http://nedbatchelder.com/text/unipain/unipain.html - -Patch created by: - -Adam Huffman -The Francis Crick Institute - -diff -ur sympy-sympy-1.0/sympy/utilities/autowrap.py sympy-sympy-1.0.new/sympy/utilities/autowrap.py ---- sympy-sympy-1.0/sympy/utilities/autowrap.py 2016-03-08 18:35:33.000000000 +0000 -+++ sympy-sympy-1.0.new/sympy/utilities/autowrap.py 2016-05-15 10:54:52.870235379 +0100 -@@ -164,7 +164,7 @@ - except CalledProcessError as e: - raise CodeWrapError( - "Error while executing command: %s. Command output is:\n%s" % ( -- " ".join(command), e.output.decode())) -+ " ".join(command), e.output.decode('ascii', 'ignore'))) - if not self.quiet: - print(retoutput) - diff --git a/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb deleted file mode 100644 index 9f007d3773..0000000000 --- a/easybuild/easyconfigs/w/Werkzeug/Werkzeug-0.12.1-intel-2017a-Python-2.7.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = "PythonPackage" - -name = 'Werkzeug' -version = '0.12.1' -versionsuffix = '-Python-%(pyver)s' - -homepage = "https://pypi.python.org/pypi/WerkZeug" -description = """The Swiss Army knife of Python web development.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - -dependencies = [ - ('Python', '2.7.13'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ['lib/python%(pyshortver)s/site-packages'], -} - -moduleclass = 'devel' -- GitLab From 5cbbbd21c3081ec7f660939e08bb4e12b23b3063 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Tue, 25 Apr 2017 18:05:52 +0800 Subject: [PATCH 0974/1311] restore erroneously deleted file --- .../s/sympy/sympy-1.0_tests-unicode.patch | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch diff --git a/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch b/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch new file mode 100644 index 0000000000..87e12a3b40 --- /dev/null +++ b/easybuild/easyconfigs/s/sympy/sympy-1.0_tests-unicode.patch @@ -0,0 +1,23 @@ +Fix for Unicode error that causes one of the tests to fail + +For reference, see +http://stackoverflow.com/questions/21129020/how-to-fix-unicodedecodeerror-ascii-codec-cant-decode-byte +and http://nedbatchelder.com/text/unipain/unipain.html + +Patch created by: + +Adam Huffman +The Francis Crick Institute + +diff -ur sympy-sympy-1.0/sympy/utilities/autowrap.py sympy-sympy-1.0.new/sympy/utilities/autowrap.py +--- sympy-sympy-1.0/sympy/utilities/autowrap.py 2016-03-08 18:35:33.000000000 +0000 ++++ sympy-sympy-1.0.new/sympy/utilities/autowrap.py 2016-05-15 10:54:52.870235379 +0100 +@@ -164,7 +164,7 @@ + except CalledProcessError as e: + raise CodeWrapError( + "Error while executing command: %s. Command output is:\n%s" % ( +- " ".join(command), e.output.decode())) ++ " ".join(command), e.output.decode('ascii', 'ignore'))) + if not self.quiet: + print(retoutput) + -- GitLab From ce6e45a9eff79478f37e7e8dec137a229cd1c9bc Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Tue, 25 Apr 2017 18:12:09 +0800 Subject: [PATCH 0975/1311] use Bundle easyblock for easyconfigs with extensions --- .../custodian-1.1.0-intel-2017a-Python-2.7.13.eb | 14 ++++++++++---- .../FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb | 14 ++++++++++---- ...pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb | 15 ++++++++++----- .../pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb | 14 ++++++++++---- 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb index 2a8be8856b..e8bf835f61 100644 --- a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb @@ -1,4 +1,4 @@ -easyblock = "PythonPackage" +easyblock = 'Bundle' name = 'custodian' version = '1.1.0' @@ -9,22 +9,28 @@ description = """A simple JIT job management framework in Python.""" toolchain = {'name': 'intel', 'version': '2017a'} -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - dependencies = [ ('Python', '2.7.13'), ('PyYAML', '3.12', versionsuffix), ] +# this is a bundle of Python packages exts_defaultclass = 'PythonPackage' exts_list = [ + ('custodian', version, { + 'source_urls': ['https://pypi.python.org/packages/source/c/custodian/'], + }), ('monty', '0.9.6', { 'source_urls': ['https://pypi.python.org/packages/source/m/monty/'], }), ] +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + sanity_check_paths = { 'files': [], 'dirs': ['lib/python%(pyshortver)s/site-packages'] diff --git a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb index 0323b8f8c9..f776bdcadf 100644 --- a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb @@ -1,4 +1,4 @@ -easyblock = "PythonPackage" +easyblock = 'Bundle' name = 'FireWorks' version = '1.4.2' @@ -10,17 +10,18 @@ description = """FireWorks helps run calculation workflows, with a centralized w toolchain = {'name': 'intel', 'version': '2017a'} -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - dependencies = [ ('Python', '2.7.13'), ('PyYAML', '3.12', versionsuffix), ] +# this is a bundle of Python packages exts_defaultclass = 'PythonPackage' exts_list = [ + ('FireWorks', version, { + 'source_urls': ['https://pypi.python.org/packages/source/F/FireWorks/'], + }), ('Flask', '0.12', { 'source_urls': ['https://pypi.python.org/packages/source/F/Flask/'], }), @@ -46,6 +47,11 @@ exts_list = [ }), ] +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + sanity_check_paths = { 'files': [], 'dirs': ['lib/python%(pyshortver)s/site-packages'] diff --git a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb index b7bde5299a..007db0084d 100644 --- a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb @@ -1,4 +1,4 @@ -easyblock = "PythonPackage" +easyblock = 'Bundle' name = 'pymatgen-db' version = '0.6.5' @@ -10,23 +10,28 @@ description = """Pymatgen-db is a database add-on for the Python Materials Genom toolchain = {'name': 'intel', 'version': '2017a'} -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - dependencies = [ ('Python', '2.7.13'), ('pymatgen', '4.7.3', versionsuffix), ] +# this is a bundle of Python packages exts_defaultclass = 'PythonPackage' exts_list = [ + ('pymatgen-db', '0.6.5', { + 'modulename': 'matgendb', + 'source_urls': ['https://pypi.python.org/packages/source/p/pymatgen-db/'], + }), ('smoqe', '0.1.3', { 'source_urls': ['https://pypi.python.org/packages/source/s/smoqe/'], }), ] -options = {'modulename': 'matgendb'} +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} sanity_check_paths = { 'files': [], diff --git a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb index c011699956..718deacce4 100644 --- a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb @@ -1,4 +1,4 @@ -easyblock = 'PythonPackage' +easyblock = 'Bundle' name = 'pymatgen' version = '4.7.3' @@ -10,9 +10,6 @@ description = """Python Materials Genomics is a robust materials analysis code t toolchain = {'name': 'intel', 'version': '2017a'} -source_urls = [PYPI_SOURCE] -sources = [SOURCE_TAR_GZ] - dependencies = [ ('Python', '2.7.13'), ('PyYAML', '3.12', versionsuffix), @@ -20,6 +17,7 @@ dependencies = [ ('spglib-python', '1.9.9.38', versionsuffix), ] +# this is a bundle of Python packages exts_defaultclass = 'PythonPackage' exts_list = [ @@ -40,6 +38,9 @@ exts_list = [ ('mpmath', '0.19', { 'source_urls': ['https://pypi.python.org/packages/source/m/mpmath/'], }), + ('pymatgen', version, { + 'source_urls': ['https://pypi.python.org/packages/source/p/pymatgen/'], + }), ('requests', '2.13.0', { 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], }), @@ -48,6 +49,11 @@ exts_list = [ }), ] +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + sanity_check_paths = { 'files': [], 'dirs': ['lib/python%(pyshortver)s/site-packages'] -- GitLab From 07ac52418a3dd86aaa411fb487e172b7c3ae50cb Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 25 Apr 2017 15:51:57 +0200 Subject: [PATCH 0976/1311] {chem} [dummy] ORCA/4.0.0.2 --- .../o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb b/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb new file mode 100644 index 0000000000..c9312c4044 --- /dev/null +++ b/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb @@ -0,0 +1,38 @@ +easyblock = "PackedBinary" + +name = "ORCA" +version = '4.0.0.2' + +openmpiversion = '2.0.2' +versionsuffix = '-OpenMPI-%s' % openmpiversion + +homepage = 'http://cec.mpg.de/forum/' +description = """ORCA is a flexible, efficient and easy-to-use general purpose tool for quantum chemistry + with specific emphasis on spectroscopic properties of open-shell molecules. + It features a wide variety of standard quantum chemical methods ranging from semiempirical methods to DFT to single- + and multireference correlated ab initio methods. + It can also treat environmental and relativistic effects.""" + +toolchain = {'name': 'dummy', 'version': ''} + +# Download from https://cec.mpg.de/orcadownload/index.php +sources = ['%%(namelower)s_%s_linux_x86-64_openmpi%s.tbz' % (version.replace('.', '_'), openmpiversion.replace('.', ''))] + +checksums = ['a5b8ecdd3d004af4bc8190c986f34e11'] + +dependencies = [('OpenMPI', openmpiversion, '-GCC-6.3.0-2.27')] + +sanity_check_paths = { + 'files': ['orca_%s%s' % (x, y) for x in ['anoint', 'casscf', 'cis', 'cleanup', 'cpscf', + 'eprnmr', 'gtoint', 'mdci', 'mp2', 'mrci', 'pc', + 'rocis', 'scf', 'scfgrad', 'soc'] + for y in ["", "_mpi"]] + + ['orca_%s' % x for x in ['2mkl', 'asa', 'chelpg', 'ciprep', 'eca', 'ecplib', + 'euler', 'fci', 'fitpes', 'gstep', 'loc', 'mapspc', + 'md', 'mergefrag', 'ndoint', 'numfreq', 'plot', + 'pltvib', 'pop', 'rel', 'vib', 'vpot']] + + ['orca'], + 'dirs': [], +} + +moduleclass = 'chem' -- GitLab From fb97882c1ab2909d8026a599a4ca7bf1baf576fc Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:19:15 +0200 Subject: [PATCH 0977/1311] adding easyconfigs: Python-2.7.12-foss-2017a.eb --- .../p/Python/Python-2.7.12-foss-2017a.eb | 293 ++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb new file mode 100644 index 0000000000..b8e862c97f --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb @@ -0,0 +1,293 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-21_17-31-01 +# Built with EasyBuild version 3.1.1 on 2017-04-20_11-17-51 +# Built with EasyBuild version 3.1.1 on 2017-04-03_09-46-50 +name = 'Python' +version = '2.7.12' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('Tk', '8.6.5'), # this requires a full X11 stack + ('GMP', '6.1.1'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated March 30th 2017 +# setuptools 34.3.3 zip +exts_list = [ + ('setuptools', '23.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + }), + ('pip', '9.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.11.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + 'patches': ['numpy-1.8.0-mkl.patch'], + }), + ('scipy', '0.19.0', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + }), + ('pbr', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('lockfile', '0.12.2', { + 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], + }), + ('Cython', '0.25.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.6.0', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('paramiko', '2.1.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.19', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('funcsigs', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], + }), + ('mock', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], + }), + ('pytz', '2017.2', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + }), + ('pandas', '0.19.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('enum34', '1.1.6', { + 'modulename': 'enum', + 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], + }), + ('bitstring', '3.1.5', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' + +# Build statistics +buildstats = [{ + "build_time": 2237.89, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 404321068, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491205609, + "total_memory": 128828, +}] + +# Build statistics +buildstats = [ +{ + "build_time": 2237.89, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 404321068, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491205609, + "total_memory": 128828, +}, +{ + "build_time": 1966.64, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login24", + "install_size": 404321244, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1492679870, + "total_memory": 128828, +}, +] + +# Build statistics +buildstats = [ +{ + "build_time": 2237.89, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 404321068, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491205609, + "total_memory": 128828, +}, +{ + "build_time": 1966.64, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login24", + "install_size": 404321244, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1492679870, + "total_memory": 128828, +}, +{ + "build_time": 1970.68, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--force', '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 404321549, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1492788660, + "total_memory": 128828, +}, +] -- GitLab From 89f32f26dbe584295199ddd82dcac02a1691aaf6 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:21:09 +0200 Subject: [PATCH 0978/1311] adding easyconfigs: OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb --- .../OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb new file mode 100644 index 0000000000..773f1229f6 --- /dev/null +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb @@ -0,0 +1,51 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-04_19-59-16 +easyblock = 'ConfigureMake' + +name = 'OSU-Micro-Benchmarks' +version = '5.3.2' + +homepage = 'http://mvapich.cse.ohio-state.edu/benchmarks/' +description = """OSU Micro-Benchmarks""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ['http://mvapich.cse.ohio-state.edu/download/mvapich/'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = 'CC="$MPICC" CXX="$MPICC"' + +benchmark_dirs = ['libexec/osu-micro-benchmarks/mpi/%s' % x for x in ['collective', 'one-sided', 'pt2pt']] +modextrapaths = {'PATH': benchmark_dirs} + +sanity_check_paths = { + 'files': [], + 'dirs': benchmark_dirs, +} + +moduleclass = 'perf' + +# Build statistics +buildstats = [{ + "build_time": 15.4, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 1041307, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491328756, + "total_memory": 128828, +}] -- GitLab From cb391d58e57d511606572ea9d503ca1fd6ec9802 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:22:20 +0200 Subject: [PATCH 0979/1311] adding easyconfigs: LLVM-4.0.0-foss-2017a.eb, LLVM-3.9.1-foss-2017a.eb --- .../l/LLVM/LLVM-3.9.1-foss-2017a.eb | 123 +++++++ .../l/LLVM/LLVM-4.0.0-foss-2017a.eb | 301 ++++++++++++++++++ 2 files changed, 424 insertions(+) create mode 100644 easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb create mode 100644 easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb new file mode 100644 index 0000000000..be174d687f --- /dev/null +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb @@ -0,0 +1,123 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-22_13-55-34 +# Built with EasyBuild version 3.1.1 on 2017-04-04_11-30-48 +easyblock = 'CMakeMake' + +name = 'LLVM' +version = "3.9.1" + +homepage = "http://llvm.org/" +description = """The LLVM Core libraries provide a modern source- and target-independent + optimizer, along with code generation support for many popular CPUs + (as well as some less common ones!) These libraries are built around a well + specified code representation known as the LLVM intermediate representation + ("LLVM IR"). The LLVM Core libraries are well documented, and it is + particularly easy to invent your own language (or port an existing compiler) + to use LLVM as an optimizer and code generator.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'cstd': 'gnu++11'} + +source_urls = ["http://llvm.org/releases/%(version)s"] +sources = ["llvm-%(version)s.src.tar.xz"] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Python', '2.7.12'), +] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +configopts = '-DBUILD_SHARED_LIBS=ON ' +# required to install extra tools in bin/ +configopts += '-DLLVM_INSTALL_UTILS=ON -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_ZLIB=ON ' +configopts += '-DCMAKE_BUILD_TYPE=Release ' + +sanity_check_paths = { + 'files': ['bin/llvm-ar', 'bin/FileCheck'], + 'dirs': ['include/llvm', 'include/llvm-c'], +} + +separate_build_dir = True + +moduleclass = 'compiler' + +# Build statistics +buildstats = [{ + "build_time": 520.33, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-3.9.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 55611227, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491298248, + "total_memory": 128828, +}] + +# Build statistics +buildstats = [ +{ + "build_time": 520.33, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-3.9.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 55611227, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491298248, + "total_memory": 128828, +}, +{ + "build_time": 687.87, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--try-software-version='3.9.1'", "--umask='002'", 'LLVM-3.9.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 55620832, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492862134, + "total_memory": 128828, +}, +] diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb new file mode 100644 index 0000000000..9090d26425 --- /dev/null +++ b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb @@ -0,0 +1,301 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-22_14-33-26 +# Built with EasyBuild version 3.1.1 on 2017-04-22_13-54-52 +# Built with EasyBuild version 3.1.1 on 2017-04-21_17-49-43 +# Built with EasyBuild version 3.1.1 on 2017-04-04_11-52-35 +easyblock = 'CMakeMake' + +name = 'LLVM' +version = '4.0.0' + +homepage = "http://llvm.org/" +description = """The LLVM Core libraries provide a modern source- and target-independent + optimizer, along with code generation support for many popular CPUs + (as well as some less common ones!) These libraries are built around a well + specified code representation known as the LLVM intermediate representation + ("LLVM IR"). The LLVM Core libraries are well documented, and it is + particularly easy to invent your own language (or port an existing compiler) + to use LLVM as an optimizer and code generator.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'cstd': 'gnu++11'} + +source_urls = ["http://llvm.org/releases/%(version)s"] +sources = ["llvm-%(version)s.src.tar.xz"] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Python', '2.7.12'), +] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +configopts = '-DBUILD_SHARED_LIBS=ON ' +# required to install extra tools in bin/ +configopts += '-DLLVM_INSTALL_UTILS=ON -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_ZLIB=ON ' +configopts += '-DCMAKE_BUILD_TYPE=Release ' + +sanity_check_paths = { + 'files': ['bin/llvm-ar', 'bin/FileCheck'], + 'dirs': ['include/llvm', 'include/llvm-c'], +} + +separate_build_dir = True + +moduleclass = 'compiler' + +# Build statistics +buildstats = [{ + "build_time": 751.68, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259484, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491299554, + "total_memory": 128828, +}] + +# Build statistics +buildstats = [ +{ + "build_time": 751.68, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259484, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491299554, + "total_memory": 128828, +}, +{ + "build_time": 392.25, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259232, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492789782, + "total_memory": 128828, +}, +] + +# Build statistics +buildstats = [ +{ + "build_time": 751.68, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259484, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491299554, + "total_memory": 128828, +}, +{ + "build_time": 392.25, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259232, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492789782, + "total_memory": 128828, +}, +{ + "build_time": 739.5, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259232, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492862091, + "total_memory": 128828, +}, +] + +# Build statistics +buildstats = [ +{ + "build_time": 751.68, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259484, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491299554, + "total_memory": 128828, +}, +{ + "build_time": 392.25, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259232, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492789782, + "total_memory": 128828, +}, +{ + "build_time": 739.5, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259232, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492862091, + "total_memory": 128828, +}, +{ + "build_time": 395.04, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 141259789, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492864405, + "total_memory": 128828, +}, +] -- GitLab From 2c13ce9d66850ecf1c3f0d3eef88fdf57fb26981 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:27:11 +0200 Subject: [PATCH 0980/1311] adding easyconfigs: Boost-1.63.0-foss-2017a.eb, Boost-1.63.0-foss-2017a-Python-2.7.12.eb --- .../Boost-1.63.0-foss-2017a-Python-2.7.12.eb | 103 ++++++++++++++++++ .../b/Boost/Boost-1.63.0-foss-2017a.eb | 50 +++++++++ 2 files changed, 153 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb new file mode 100644 index 0000000000..483520bf60 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb @@ -0,0 +1,103 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-20_15-40-11 +# Built with EasyBuild version 3.1.1 on 2017-04-03_15-24-36 +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('Python', '2.7.12'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' + +# Build statistics +buildstats = [{ + "build_time": 1537.69, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'PETSc-3.7.5-foss-2017a-Python-2.7.12.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 169939518, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491225875, + "total_memory": 128828, +}] + +# Build statistics +buildstats = [ +{ + "build_time": 1537.69, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'PETSc-3.7.5-foss-2017a-Python-2.7.12.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 169939518, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1491225875, + "total_memory": 128828, +}, +{ + "build_time": 1585.32, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login24", + "install_size": 169940729, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", + "timestamp": 1492695611, + "total_memory": 128828, +}, +] diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb new file mode 100644 index 0000000000..daa0767419 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb @@ -0,0 +1,50 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-04_18-18-26 +name = 'Boost' +version = '1.63.0' + +homepage = 'http://www.boost.org/' +description = """Boost provides free peer-reviewed portable C++ source libraries.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = [SOURCEFORGE_SOURCE] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), +] + +configopts = '--without-libraries=python' + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' + +# Build statistics +buildstats = [{ + "build_time": 2759.25, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'GROMACS-5.1.4-foss-2017a-hybrid.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 167262879, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491322705, + "total_memory": 128828, +}] -- GitLab From 0584f74e36a564f4a10893de1e84c542751ebeba Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:27:40 +0200 Subject: [PATCH 0981/1311] adding easyconfigs: NAMD-2.12-foss-2017a-mpi.eb --- .../n/NAMD/NAMD-2.12-foss-2017a-mpi.eb | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb new file mode 100644 index 0000000000..13ea1d21a4 --- /dev/null +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb @@ -0,0 +1,50 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-04_17-10-41 +name = 'NAMD' +version = '2.12' +versionsuffix = '-mpi' + +homepage = 'http://www.ks.uiuc.edu/Research/namd/' +description = """NAMD is a parallel molecular dynamics code designed for high-performance simulation of + large biomolecular systems.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'opt': True, 'pic': True} + +sources = ['NAMD_%(version)s_Source.tar.gz'] + +dependencies = [ + ('Tcl', '8.5.12'), +] + +# /bin/csh is required by 'config' script +osdependencies = ['tcsh'] + +charm_arch = "mpi-linux-x86_64" + +moduleclass = 'chem' + +# Build statistics +buildstats = [{ + "build_time": 269.88, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'NAMD-2.12-foss-2017a-mpi.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 45931470, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491318641, + "total_memory": 128828, +}] -- GitLab From 85190c2bda5be363fb61a927f39ffe2a9911b564 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:28:39 +0200 Subject: [PATCH 0982/1311] adding easyconfigs: IMB-4.1-foss-2017a.eb --- .../easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb new file mode 100644 index 0000000000..87a1fa9cc3 --- /dev/null +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb @@ -0,0 +1,57 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-21_09-32-59 +easyblock = 'MakeCp' + +name = 'IMB' +version = '4.1' + +homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' +description = """ +The Intel® MPI Benchmarks perform a set of MPI performance measurements for point-to-point +and global communication operations for a range of message sizes. +""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = ['%(name)s_%(version)s.tgz'] +source_urls = ['https://software.intel.com/sites/default/files/managed/a3/b2/'] + +start_dir = 'src' +prebuildopts = 'export MPI_HOME=$EBROOTOPENMPI && ' +buildopts = "-f make_mpich MPI_HOME=$EBROOTOPENMPI" + +parallel = 1 + +files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] + +sanity_check_paths = { + 'files': ['bin/%s' % binfile for binfile in ['IMB-RMA', 'IMB-EXT', 'IMB-NBC', 'IMB-MPI1']], + 'dirs': ['bin', 'doc'] +} + +moduleclass = 'perf' + +# Build statistics +buildstats = [{ + "build_time": 17.94, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'IMB-4.1-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 1238017, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1492759974, + "total_memory": 128828, +}] -- GitLab From a6aea5c1c8a5f4247519054b20bc9bcbc40399cd Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:29:53 +0200 Subject: [PATCH 0983/1311] adding easyconfigs: grib_api-1.21.0-foss-2017a.eb --- .../g/grib_api/grib_api-1.21.0-foss-2017a.eb | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb new file mode 100644 index 0000000000..c8b9bec5e8 --- /dev/null +++ b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb @@ -0,0 +1,51 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-03_13-34-52 +easyblock = 'ConfigureMake' + +name = 'grib_api' +version = '1.21.0' + +homepage = 'https://software.ecmwf.int/wiki/display/GRIB/Home' +description = """The ECMWF GRIB API is an application program interface accessible from C, FORTRAN and Python + programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. A useful set of + command line tools is also provided to give quick access to GRIB messages.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ['https://software.ecmwf.int/wiki/download/attachments/3473437/'] +sources = ['grib_api-%(version)s-Source.tar.gz'] + +dependencies = [ + ('JasPer', '1.900.1'), +] + +configopts = '--with-jasper=$EBROOTJASPER' + +parallel = 1 + +moduleclass = 'data' + +# Build statistics +buildstats = [{ + "build_time": 778.65, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'grib_api-1.16.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 27887407, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491219291, + "total_memory": 128828, +}] -- GitLab From 6c7928b649a58001999f593917825f9e51c5362e Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 20:31:20 +0200 Subject: [PATCH 0984/1311] adding easyconfigs: HDF5-1.8.18-foss-2017a.eb --- .../h/HDF5/HDF5-1.8.18-foss-2017a.eb | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb new file mode 100644 index 0000000000..10498ad96c --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb @@ -0,0 +1,53 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-04_14-47-11 +name = 'HDF5' +version = '1.8.18' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.11'), + ('Szip', '2.1'), +] + +moduleclass = 'data' + +# Build statistics +buildstats = [{ + "build_time": 144.81, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'HDF5-1.8.18-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 25911504, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1491310030, + "total_memory": 128828, +}] -- GitLab From b65a2b6bb4c73feb566e0c2ffb9030263b588a14 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 21:49:46 +0200 Subject: [PATCH 0985/1311] adding easyconfigs: SIONlib-1.7.1-foss-2017a.eb, SIONlib-1.7.1-foss-2017a-tools.eb --- .../SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb | 70 +++++++++++++++++++ .../s/SIONlib/SIONlib-1.7.1-foss-2017a.eb | 64 +++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb create mode 100644 easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb new file mode 100644 index 0000000000..7d3b72d93e --- /dev/null +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb @@ -0,0 +1,70 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-25_21-35-15 +## +# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2016 Juelich Supercomputing Centre, Germany +# Authors:: Markus Geimer +# License:: 3-clause BSD +## + +easyblock = 'ConfigureMake' + +name = 'SIONlib' +version = '1.7.1' +# Provide a stripped-down version with renamed symbols for tools, +# see description for further details +versionsuffix = '-tools' + +homepage = 'http://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/SIONlib/_node.html' +description = """SIONlib is a scalable I/O library for parallel access to task-local files. + The library not only supports writing and reading binary data to or from several thousands of + processors into a single or a small number of physical files, but also provides global open + and close functions to access SIONlib files in parallel. This package provides a stripped-down + installation of SIONlib for use with performance tools (e.g., Score-P), with renamed symbols + to avoid conflicts when an application using SIONlib itself is linked against a tool requiring + a different SIONlib version.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = ['sionlib-%(version)sl.tar.gz'] +source_urls = ['http://apps.fz-juelich.de/jsc/sionlib/download.php?version=%(version)sl'] + +checksums = [ + 'bc2ed625cdf967815007e71e732f38d1', # sionlib-1.7.1l.tar.gz +] + +configopts = '--disable-cxx --disable-fortran --disable-ompi' + +sanity_check_paths = { + 'files': ['bin/sionconfig'] + + ['lib/lib%s_64.a' % x for x in ['lsioncom', 'lsiongen', 'lsionser']], + 'dirs': [] +} + +moduleclass = 'lib' + +# Build statistics +buildstats = [{ + "build_time": 8.34, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'SIONlib-1.7.1-foss-2017a-tools.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 1955553, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1493148914, + "total_memory": 128828, +}] diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb new file mode 100644 index 0000000000..667807f3cc --- /dev/null +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb @@ -0,0 +1,64 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-25_21-34-35 +## +# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2016 Juelich Supercomputing Centre, Germany +# Authors:: Markus Geimer +# License:: 3-clause BSD +## + +easyblock = 'ConfigureMake' + +name = 'SIONlib' +version = '1.7.1' + +homepage = 'http://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/SIONlib/_node.html' +description = """SIONlib is a scalable I/O library for parallel access to task-local files. + The library not only supports writing and reading binary data to or from several thousands of + processors into a single or a small number of physical files, but also provides global open + and close functions to access SIONlib files in parallel. SIONlib provides different interfaces: + parallel access using MPI, OpenMP, or their combination, and sequential access for post-processing + utilities.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://apps.fz-juelich.de/jsc/sionlib/download.php?version=%(version)s'] + +checksums = [ + '9d613055896af2792518d6e0cda02588', # sionlib-1.7.1.tar.gz +] + +sanity_check_paths = { + 'files': ['bin/sionconfig'] + + ['lib/lib%s_64.a' % x for x in ['sioncom', 'siongen', 'sionser']], + 'dirs': [] +} + +moduleclass = 'lib' + +# Build statistics +buildstats = [{ + "build_time": 14.02, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'SIONlib-1.7.1-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 4336229, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1493148875, + "total_memory": 128828, +}] -- GitLab From 7a5457b4666d8716ecdedc2417d645c451103a60 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 25 Apr 2017 21:50:23 +0200 Subject: [PATCH 0986/1311] adding easyconfigs: OTF2-2.0-foss-2017a.eb --- .../easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb new file mode 100644 index 0000000000..7d56604ccc --- /dev/null +++ b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb @@ -0,0 +1,67 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-25_21-37-09 +## +# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild +# Copyright:: Copyright 2013-2016 Juelich Supercomputing Centre, Germany +# Authors:: Bernd Mohr +# Markus Geimer +# License:: 3-clause BSD +# +# This work is based on experiences from the UNITE project +# http://apps.fz-juelich.de/unite/ +## + +easyblock = 'EB_Score_minus_P' + +name = 'OTF2' +version = '2.0' + +homepage = 'http://www.score-p.org' +description = """The Open Trace Format 2 is a highly scalable, memory efficient event + trace data format plus support library. It is the new standard trace format for + Scalasca, Vampir, and TAU and is open for other tools.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.vi-hps.org/upload/packages/otf2/'] + +checksums = [ + '5b546188b25bc1c4e285e06dddf75dfc', # otf2-2.0.tar.gz +] + +builddependencies = [('SIONlib', '1.7.1', '-tools')] + +configopts = '--enable-shared' + +sanity_check_paths = { + 'files': ["bin/otf2-config", "include/otf2/otf2.h", ("lib/libotf2.a", "lib64/libotf2.a")], + 'dirs': [], +} + +moduleclass = 'perf' + +# Build statistics +buildstats = [{ + "build_time": 69.0, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'OTF2-2.0-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 19885165, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1493149028, + "total_memory": 128828, +}] -- GitLab From 979674e2721a618799239d5ea2a795a9481e5aa6 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 26 Apr 2017 08:47:16 +0800 Subject: [PATCH 0987/1311] reorder extensions --- .../custodian-1.1.0-intel-2017a-Python-2.7.13.eb | 6 +++--- .../FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb | 6 +++--- .../pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb | 6 +++--- .../pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb | 9 +++------ 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb index e8bf835f61..0c065c7d55 100644 --- a/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/c/custodian/custodian-1.1.0-intel-2017a-Python-2.7.13.eb @@ -18,12 +18,12 @@ dependencies = [ exts_defaultclass = 'PythonPackage' exts_list = [ - ('custodian', version, { - 'source_urls': ['https://pypi.python.org/packages/source/c/custodian/'], - }), ('monty', '0.9.6', { 'source_urls': ['https://pypi.python.org/packages/source/m/monty/'], }), + ('custodian', version, { + 'source_urls': ['https://pypi.python.org/packages/source/c/custodian/'], + }), ] # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module diff --git a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb index f776bdcadf..ac5fcef9e1 100644 --- a/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/f/FireWorks/FireWorks-1.4.2-intel-2017a-Python-2.7.13.eb @@ -19,9 +19,6 @@ dependencies = [ exts_defaultclass = 'PythonPackage' exts_list = [ - ('FireWorks', version, { - 'source_urls': ['https://pypi.python.org/packages/source/F/FireWorks/'], - }), ('Flask', '0.12', { 'source_urls': ['https://pypi.python.org/packages/source/F/Flask/'], }), @@ -45,6 +42,9 @@ exts_list = [ ('pymongo', '3.4.0', { 'source_urls': ['https://pypi.python.org/packages/source/p/pymongo/'], }), + ('FireWorks', version, { + 'source_urls': ['https://pypi.python.org/packages/source/F/FireWorks/'], + }), ] # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module diff --git a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb index 007db0084d..7c6022d3f6 100644 --- a/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen-db/pymatgen-db-0.6.5-intel-2017a-Python-2.7.13.eb @@ -19,13 +19,13 @@ dependencies = [ exts_defaultclass = 'PythonPackage' exts_list = [ + ('smoqe', '0.1.3', { + 'source_urls': ['https://pypi.python.org/packages/source/s/smoqe/'], + }), ('pymatgen-db', '0.6.5', { 'modulename': 'matgendb', 'source_urls': ['https://pypi.python.org/packages/source/p/pymatgen-db/'], }), - ('smoqe', '0.1.3', { - 'source_urls': ['https://pypi.python.org/packages/source/s/smoqe/'], - }), ] # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module diff --git a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb index 718deacce4..86166ed4e4 100644 --- a/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/pymatgen/pymatgen-4.7.3-intel-2017a-Python-2.7.13.eb @@ -38,15 +38,12 @@ exts_list = [ ('mpmath', '0.19', { 'source_urls': ['https://pypi.python.org/packages/source/m/mpmath/'], }), - ('pymatgen', version, { - 'source_urls': ['https://pypi.python.org/packages/source/p/pymatgen/'], - }), - ('requests', '2.13.0', { - 'source_urls': ['https://pypi.python.org/packages/source/r/requests/'], - }), ('sympy', '1.0', { 'source_urls': ['https://pypi.python.org/packages/source/s/sympy/'], }), + ('pymatgen', version, { + 'source_urls': ['https://pypi.python.org/packages/source/p/pymatgen/'], + }), ] # specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module -- GitLab From cfc84bc757447be2c00d78890c4fba64817486a5 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 26 Apr 2017 10:59:42 +0930 Subject: [PATCH 0988/1311] prodigal easyconfig added --- .../prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb diff --git a/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb b/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb new file mode 100644 index 0000000000..300e28ae47 --- /dev/null +++ b/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb @@ -0,0 +1,40 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exe Escobedo +# License:: GPL-v3.0 +# +# Notes:: +## + + +easyblock = 'MakeCp' + +name = 'prodigal' +version = '2.6.2' + +homepage = 'http://prodigal.ornl.gov/' + +description = """Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a microbial (bacterial and archaeal) gene finding program developed at Oak Ridge National Laboratory and the University of Tennessee.""" + +toolchain = {'name': 'GCC', 'version': '4.9.3-binutils-2.25'} + +source_urls = ['https://github.com/hyattpd/Prodigal/archive/'] +sources = ['v%(version)s.tar.gz'] +#https://github.com/hyattpd/Prodigal/archive/v2.6.2.tar.gz + +files_to_copy = [ + (['prodigal'], 'bin'), + (['*.h'], 'include'), + (['LICENSE'], 'license'), +] + +sanity_check_paths = { + 'files': ['bin/prodigal'], + 'dirs': ['include', 'license'], +} + +moduleclass = 'bio' + -- GitLab From 49691e295bac00c8d5dcfa04e643f66f99257cc4 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 26 Apr 2017 13:09:36 +0200 Subject: [PATCH 0989/1311] {lang} [intel/2017a] PyCUDA/2016.1.2 --- ...CUDA-2016.1.2-intel-2017a-Python-2.7.13.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..102a71dd89 --- /dev/null +++ b/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'PyCUDA' +version = '2016.1.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://mathema.tician.de/software/pycuda' +description = """PyCUDA lets you access Nvidia’s CUDA parallel computation API from Python.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('CUDA', '8.0.61', '', True), + ('Boost', '1.63.0', versionsuffix), +] + +prebuildopts = "./configure.py --cuda-root=$EBROOTCUDA --boost-inc-dir=$EBROOTBOOST/include/boost/ --boost-lib-dir=$EBROOTBOOST/lib/ --no-use-shipped-boost --boost-python-libname=boost_python && " + +options = {'modulename': '%(namelower)s'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lang' -- GitLab From ecf4252a307ec2a48fd8b7a0d54a6f2fdfb77605 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 26 Apr 2017 18:29:34 +0200 Subject: [PATCH 0990/1311] Wrap line --- .../p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb index 102a71dd89..fd93f89fda 100644 --- a/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/p/PyCUDA/PyCUDA-2016.1.2-intel-2017a-Python-2.7.13.eb @@ -18,7 +18,8 @@ dependencies = [ ('Boost', '1.63.0', versionsuffix), ] -prebuildopts = "./configure.py --cuda-root=$EBROOTCUDA --boost-inc-dir=$EBROOTBOOST/include/boost/ --boost-lib-dir=$EBROOTBOOST/lib/ --no-use-shipped-boost --boost-python-libname=boost_python && " +prebuildopts = "./configure.py --cuda-root=$EBROOTCUDA --boost-inc-dir=$EBROOTBOOST/include/boost/ " +prebuildopts += "--boost-lib-dir=$EBROOTBOOST/lib/ --no-use-shipped-boost --boost-python-libname=boost_python && " options = {'modulename': '%(namelower)s'} -- GitLab From 0a7cde9d50f531ed67fc85d4cfb143fe560f1ee8 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 08:05:52 +0200 Subject: [PATCH 0991/1311] upgraded 2.7.13 instead --- .../p/Python/Python-2.7.13-foss-2017a.eb | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb new file mode 100644 index 0000000000..3625e3bbd6 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb @@ -0,0 +1,162 @@ +# Built with EasyBuild version 3.1.1 on 2017-04-27_06-34-41 +name = 'Python' +version = '2.7.13' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('libreadline', '7.0'), + ('ncurses', '6.0'), + ('SQLite', '3.17.0'), + ('GMP', '6.1.2'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2k'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated March 30th 2017 +exts_list = [ + # note: more recent versions of setuptools (v34.x) can not be installed from source anymore, + # see https://github.com/pypa/setuptools/issues/980 + ('setuptools', '33.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('pip', '9.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.12.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + 'source_tmpl': '%(name)s-%(version)s.zip', + 'patches': ['numpy-1.12.0-mkl.patch'], + }), + ('scipy', '0.19.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + }), + ('pbr', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('Cython', '0.25.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.6.0', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('paramiko', '2.1.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.19', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('funcsigs', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], + }), + ('mock', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], + }), + ('pytz', '2017.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('pandas', '0.19.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('enum34', '1.1.6', { + 'modulename': 'enum', + 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], + }), + ('bitstring', '3.1.5', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], + }), + ('virtualenv', '15.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' + +# Build statistics +buildstats = [{ + "build_time": 2019.51, + "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/home/henkela/slurm/easybuild-easyconfigs/easybuild/easyconfigs'", "--robot-paths=':/home/henkela/slurm/easybuild-easyconfigs/easybuild/easyconfigs'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python-2.7.13-foss-2017a.eb'], + "core_count": 40, + "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", + "cpu_speed": 3100.0, + "cpu_vendor": "Intel", + "easybuild-easyblocks_version": "3.1.1", + "easybuild-framework_version": "3.1.1", + "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", + "glibc_version": "2.17", + "hostname": "login23", + "install_size": 409464422, + "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), + "os_name": "centos linux", + "os_type": "Linux", + "os_version": "7.3.1611", + "platform_name": "x86_64-unknown-linux", + "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", + "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", + "system_python_path": "/usr/bin/python", + "timestamp": 1493267680, + "total_memory": 128828, +}] -- GitLab From 5fc0d21237b193085a426540bd13d4fdd264287c Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 17:00:41 +0200 Subject: [PATCH 0992/1311] removed built comments --- .../SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb | 27 +------------------ .../s/SIONlib/SIONlib-1.7.1-foss-2017a.eb | 27 +------------------ 2 files changed, 2 insertions(+), 52 deletions(-) diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb index 7d3b72d93e..7e537ec0fb 100644 --- a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb @@ -1,9 +1,9 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-25_21-35-15 ## # This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2016 Juelich Supercomputing Centre, Germany # Authors:: Markus Geimer +# Modified 2017 by Andreas Henkel # License:: 3-clause BSD ## @@ -43,28 +43,3 @@ sanity_check_paths = { moduleclass = 'lib' -# Build statistics -buildstats = [{ - "build_time": 8.34, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'SIONlib-1.7.1-foss-2017a-tools.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 1955553, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1493148914, - "total_memory": 128828, -}] diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb index 667807f3cc..46e980be5f 100644 --- a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb @@ -1,9 +1,9 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-25_21-34-35 ## # This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild # # Copyright:: Copyright 2016 Juelich Supercomputing Centre, Germany # Authors:: Markus Geimer +# Modified 2017 by Andreas Henkel # License:: 3-clause BSD ## @@ -37,28 +37,3 @@ sanity_check_paths = { moduleclass = 'lib' -# Build statistics -buildstats = [{ - "build_time": 14.02, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'SIONlib-1.7.1-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 4336229, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1493148875, - "total_memory": 128828, -}] -- GitLab From 898b454611d529f69430652bb58b19dae94a9096 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 17:03:16 +0200 Subject: [PATCH 0993/1311] removed built comments --- .../easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb | 27 +---------------- .../i/IMB/IMB-4.1-intel-2017.02.eb | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb index 87a1fa9cc3..0a33899fe9 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-21_09-32-59 easyblock = 'MakeCp' name = 'IMB' @@ -30,28 +29,4 @@ sanity_check_paths = { moduleclass = 'perf' -# Build statistics -buildstats = [{ - "build_time": 17.94, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'IMB-4.1-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 1238017, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1492759974, - "total_memory": 128828, -}] + diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb new file mode 100644 index 0000000000..65d5fc7e4a --- /dev/null +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb @@ -0,0 +1,29 @@ +easyblock = 'MakeCp' + +name = 'IMB' +version = '4.1' + +homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' +description = """The Intel MPI Benchmarks perform a set of MPI performance measurements for point-to-point and + global communication operations for a range of message sizes""" + +toolchain = {'name': 'intel', 'version': '2017.02'} +toolchainopts = {'usempi': True} + +source_urls = ['https://software.intel.com/sites/default/files/managed/34/aa/'] +sources = ['%(name)s_%(version)s.tgz'] + +prebuildopts = "cd src && " +buildopts = "all" + +parallel = 1 + +files_to_copy = [(['src/IMB-*'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/IMB-EXT', 'bin/IMB-IO', 'bin/IMB-MPI1', 'bin/IMB-NBC', 'bin/IMB-RMA'], + 'dirs': [], +} + +moduleclass = 'perf' + -- GitLab From 622f881da74b15c05d51e9e56979b3dd518756d8 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 19:49:42 +0200 Subject: [PATCH 0994/1311] removed built comments from Python-2.7.13-foss-2017a.eb easyconfig --- .../p/Python/Python-2.7.13-foss-2017a.eb | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb index 3625e3bbd6..166b747669 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-27_06-34-41 name = 'Python' version = '2.7.13' @@ -135,28 +134,3 @@ exts_list = [ moduleclass = 'lang' -# Build statistics -buildstats = [{ - "build_time": 2019.51, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/home/henkela/slurm/easybuild-easyconfigs/easybuild/easyconfigs'", "--robot-paths=':/home/henkela/slurm/easybuild-easyconfigs/easybuild/easyconfigs'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python-2.7.13-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 409464422, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1493267680, - "total_memory": 128828, -}] -- GitLab From 4c5f699986938c5a6d6770067bb8a74afb8c904d Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 19:53:37 +0200 Subject: [PATCH 0995/1311] delete Python-2.7.12-foss-2017a.eb easyconfig file --- .../p/Python/Python-2.7.12-foss-2017a.eb | 293 ------------------ 1 file changed, 293 deletions(-) delete mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb deleted file mode 100644 index b8e862c97f..0000000000 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-foss-2017a.eb +++ /dev/null @@ -1,293 +0,0 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-21_17-31-01 -# Built with EasyBuild version 3.1.1 on 2017-04-20_11-17-51 -# Built with EasyBuild version 3.1.1 on 2017-04-03_09-46-50 -name = 'Python' -version = '2.7.12' - -homepage = 'http://python.org/' -description = """Python is a programming language that lets you work more quickly and integrate your systems - more effectively.""" - -toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'pic': True} - -source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] -sources = [SOURCE_TGZ] - -# python needs bzip2 to build the bz2 package -dependencies = [ - ('bzip2', '1.0.6'), - ('zlib', '1.2.11'), - ('libreadline', '6.3'), - ('ncurses', '6.0'), - ('SQLite', '3.13.0'), - ('Tk', '8.6.5'), # this requires a full X11 stack - ('GMP', '6.1.1'), - ('libffi', '3.2.1'), - # OS dependency should be preferred if the os version is more recent then this version, - # it's nice to have an up to date openssl for security reasons - # ('OpenSSL', '1.0.2h'), -] - -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] - -# order is important! -# package versions updated March 30th 2017 -# setuptools 34.3.3 zip -exts_list = [ - ('setuptools', '23.1.0', { - 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], - }), - ('pip', '9.0.1', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], - }), - ('nose', '1.3.7', { - 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], - }), - ('numpy', '1.11.1', { - 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], - 'patches': ['numpy-1.8.0-mkl.patch'], - }), - ('scipy', '0.19.0', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], - }), - ('blist', '1.3.6', { - 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], - }), - ('mpi4py', '2.0.0', { - 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], - }), - ('paycheck', '1.0.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], - }), - ('pbr', '2.0.0', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], - }), - ('lockfile', '0.12.2', { - 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], - }), - ('Cython', '0.25.2', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], - }), - ('six', '1.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], - }), - ('dateutil', '2.6.0', { - 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', - 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], - }), - ('deap', '1.0.2', { - 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', - 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], - }), - ('decorator', '4.0.11', { - 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], - }), - ('arff', '2.1.0', { - 'source_tmpl': 'liac-%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], - }), - ('pycrypto', '2.6.1', { - 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], - }), - ('ecdsa', '0.13', { - 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], - }), - ('cryptography', '1.8.1', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], - }), - ('paramiko', '2.1.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], - }), - ('pyparsing', '2.2.0', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], - }), - ('netifaces', '0.10.5', { - 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], - }), - ('netaddr', '0.7.19', { - 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], - }), - ('funcsigs', '1.0.2', { - 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], - }), - ('mock', '2.0.0', { - 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], - }), - ('pytz', '2017.2', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], - }), - ('pandas', '0.19.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], - }), - ('enum34', '1.1.6', { - 'modulename': 'enum', - 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], - }), - ('bitstring', '3.1.5', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], - }), - ('virtualenv', '15.1.0', { - 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], - }), -] - -moduleclass = 'lang' - -# Build statistics -buildstats = [{ - "build_time": 2237.89, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 404321068, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491205609, - "total_memory": 128828, -}] - -# Build statistics -buildstats = [ -{ - "build_time": 2237.89, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 404321068, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491205609, - "total_memory": 128828, -}, -{ - "build_time": 1966.64, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login24", - "install_size": 404321244, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1492679870, - "total_memory": 128828, -}, -] - -# Build statistics -buildstats = [ -{ - "build_time": 2237.89, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--sourcepath='/cluster/easybuild/sources'", 'Python-2.7.12-foss-2017a-updated.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 404321068, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491205609, - "total_memory": 128828, -}, -{ - "build_time": 1966.64, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login24", - "install_size": 404321244, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1492679870, - "total_memory": 128828, -}, -{ - "build_time": 1970.68, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--force', '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Python/Python-2.7.12-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 404321549, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1492788660, - "total_memory": 128828, -}, -] -- GitLab From 5446fcacc7f537b151b6c2e9abf42fa9b9bec5de Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 19:57:59 +0200 Subject: [PATCH 0996/1311] removed built comments --- .../OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb index 773f1229f6..3f1b8657b8 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-04_19-59-16 easyblock = 'ConfigureMake' name = 'OSU-Micro-Benchmarks' @@ -24,28 +23,3 @@ sanity_check_paths = { moduleclass = 'perf' -# Build statistics -buildstats = [{ - "build_time": 15.4, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 1041307, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491328756, - "total_memory": 128828, -}] -- GitLab From 5516323ae59d996cf2489f0c372952e2b4c510d3 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 20:00:49 +0200 Subject: [PATCH 0997/1311] correcting title --- easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb index 166b747669..5abe3e3e7d 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2017a.eb @@ -133,4 +133,3 @@ exts_list = [ ] moduleclass = 'lang' - -- GitLab From f1171afab1d0bf1a0ef79b28c4b1ce10e9cbd490 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 20:27:16 +0200 Subject: [PATCH 0998/1311] removed built comments, and changed to python-2.7.13 --- .../l/LLVM/LLVM-3.9.1-foss-2017a.eb | 81 +----- .../l/LLVM/LLVM-4.0.0-foss-2017a.eb | 259 +----------------- 2 files changed, 2 insertions(+), 338 deletions(-) diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb index be174d687f..6bffed0098 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb @@ -1,5 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-22_13-55-34 -# Built with EasyBuild version 3.1.1 on 2017-04-04_11-30-48 easyblock = 'CMakeMake' name = 'LLVM' @@ -22,7 +20,7 @@ sources = ["llvm-%(version)s.src.tar.xz"] builddependencies = [ ('CMake', '3.7.2'), - ('Python', '2.7.12'), + ('Python', '2.7.13'), ] dependencies = [ @@ -44,80 +42,3 @@ separate_build_dir = True moduleclass = 'compiler' -# Build statistics -buildstats = [{ - "build_time": 520.33, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-3.9.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 55611227, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491298248, - "total_memory": 128828, -}] - -# Build statistics -buildstats = [ -{ - "build_time": 520.33, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-3.9.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 55611227, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491298248, - "total_memory": 128828, -}, -{ - "build_time": 687.87, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--try-software-version='3.9.1'", "--umask='002'", 'LLVM-3.9.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 55620832, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492862134, - "total_memory": 128828, -}, -] diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb index 9090d26425..5a2a5553d5 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb @@ -1,7 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-22_14-33-26 -# Built with EasyBuild version 3.1.1 on 2017-04-22_13-54-52 -# Built with EasyBuild version 3.1.1 on 2017-04-21_17-49-43 -# Built with EasyBuild version 3.1.1 on 2017-04-04_11-52-35 easyblock = 'CMakeMake' name = 'LLVM' @@ -24,7 +20,7 @@ sources = ["llvm-%(version)s.src.tar.xz"] builddependencies = [ ('CMake', '3.7.2'), - ('Python', '2.7.12'), + ('Python', '2.7.13'), ] dependencies = [ @@ -46,256 +42,3 @@ separate_build_dir = True moduleclass = 'compiler' -# Build statistics -buildstats = [{ - "build_time": 751.68, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259484, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491299554, - "total_memory": 128828, -}] - -# Build statistics -buildstats = [ -{ - "build_time": 751.68, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259484, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491299554, - "total_memory": 128828, -}, -{ - "build_time": 392.25, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259232, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492789782, - "total_memory": 128828, -}, -] - -# Build statistics -buildstats = [ -{ - "build_time": 751.68, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259484, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491299554, - "total_memory": 128828, -}, -{ - "build_time": 392.25, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259232, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492789782, - "total_memory": 128828, -}, -{ - "build_time": 739.5, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259232, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492862091, - "total_memory": 128828, -}, -] - -# Build statistics -buildstats = [ -{ - "build_time": 751.68, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259484, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491299554, - "total_memory": 128828, -}, -{ - "build_time": 392.25, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM/LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259232, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492789782, - "total_memory": 128828, -}, -{ - "build_time": 739.5, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259232, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492862091, - "total_memory": 128828, -}, -{ - "build_time": 395.04, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'LLVM-4.0.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 141259789, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492864405, - "total_memory": 128828, -}, -] -- GitLab From 485b0eb98fcde2bb53fa971f1530deed67ace3a7 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 20:51:09 +0200 Subject: [PATCH 0999/1311] removed comments, add jasper 1.900.1-foss-2017a dependency --- .../g/grib_api/grib_api-1.21.0-foss-2017a.eb | 26 ------------------- .../j/JasPer/JasPer-1.900.1-foss-2017a.eb | 22 ++++++++++++++++ 2 files changed, 22 insertions(+), 26 deletions(-) create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb diff --git a/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb index c8b9bec5e8..fa7f84d3e3 100644 --- a/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb +++ b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-03_13-34-52 easyblock = 'ConfigureMake' name = 'grib_api' @@ -24,28 +23,3 @@ parallel = 1 moduleclass = 'data' -# Build statistics -buildstats = [{ - "build_time": 778.65, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'grib_api-1.16.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 27887407, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491219291, - "total_memory": 128828, -}] diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb new file mode 100644 index 0000000000..73e404db1c --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'JasPer' +version = '1.900.1' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_ZIP] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +sanity_check_paths = { + 'files': ["bin/jasper", "lib/libjasper.a"], + 'dirs': ["include"], +} + +moduleclass = 'vis' + -- GitLab From 0378f98cce404a3d418b2ff997068c303ba29f9d Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 20:55:18 +0200 Subject: [PATCH 1000/1311] removed built comments --- .../easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb index 7d56604ccc..c2ecdc414e 100644 --- a/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb +++ b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb @@ -1,10 +1,9 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-25_21-37-09 ## # This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild # Copyright:: Copyright 2013-2016 Juelich Supercomputing Centre, Germany # Authors:: Bernd Mohr # Markus Geimer -# License:: 3-clause BSD +## License:: 3-clause BSD # # This work is based on experiences from the UNITE project # http://apps.fz-juelich.de/unite/ @@ -40,28 +39,3 @@ sanity_check_paths = { moduleclass = 'perf' -# Build statistics -buildstats = [{ - "build_time": 69.0, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--git-working-dirs-path='/home/henkela/tmp/easybuild-easyconfigs'", "--github-user='henkela'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", '--minimal-toolchains', "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'OTF2-2.0-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 19885165, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1493149028, - "total_memory": 128828, -}] -- GitLab From df93abf1c89c8562763fa53595193975553e6234 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 20:59:28 +0200 Subject: [PATCH 1001/1311] removed built comments and added Szip-2.1-foss-2017a.eb dependency --- .../h/HDF5/HDF5-1.8.18-foss-2017a.eb | 27 ------------------- .../easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb | 24 +++++++++++++++++ 2 files changed, 24 insertions(+), 27 deletions(-) create mode 100644 easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb index 10498ad96c..1febe1c832 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-04_14-47-11 name = 'HDF5' version = '1.8.18' @@ -25,29 +24,3 @@ dependencies = [ ] moduleclass = 'data' - -# Build statistics -buildstats = [{ - "build_time": 144.81, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'HDF5-1.8.18-foss-2017a.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 25911504, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491310030, - "total_memory": 128828, -}] diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb new file mode 100644 index 0000000000..9365662b36 --- /dev/null +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'Szip' +version = '2.1' + +homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' +description = "Szip compression software, providing lossless compression of scientific data" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +sanity_check_paths = { + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], + 'dirs': [], +} + +moduleclass = 'tools' + -- GitLab From 00949b56eb8ba377a3f9adbbc96729483f1d7a0a Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 21:36:16 +0200 Subject: [PATCH 1002/1311] updated Boost-1.63.0-foss-2017a-Python-2.7.12 to 2.7.13 and removed built comments --- .../Boost-1.63.0-foss-2017a-Python-2.7.13.eb | 24 +++++++++++++++++ .../b/Boost/Boost-1.63.0-foss-2017a.eb | 26 ------------------- 2 files changed, 24 insertions(+), 26 deletions(-) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..49051608e1 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +name = 'Boost' +version = '1.63.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.boost.org/' +description = "Boost provides free peer-reviewed portable C++ source libraries." + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] +source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('Python', '2.7.13'), +] + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' + diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb index daa0767419..ea4624e01d 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-04_18-18-26 name = 'Boost' version = '1.63.0' @@ -23,28 +22,3 @@ boost_mpi = True moduleclass = 'devel' -# Build statistics -buildstats = [{ - "build_time": 2759.25, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'GROMACS-5.1.4-foss-2017a-hybrid.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 167262879, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491322705, - "total_memory": 128828, -}] -- GitLab From 101e7c5c515b350678f51ac93715b0e537db32d2 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Thu, 27 Apr 2017 21:38:09 +0200 Subject: [PATCH 1003/1311] deleted Boost-1.63.0-foss-2017a-Python-2.7.12.eb --- .../Boost-1.63.0-foss-2017a-Python-2.7.12.eb | 103 ------------------ 1 file changed, 103 deletions(-) delete mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb deleted file mode 100644 index 483520bf60..0000000000 --- a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb +++ /dev/null @@ -1,103 +0,0 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-20_15-40-11 -# Built with EasyBuild version 3.1.1 on 2017-04-03_15-24-36 -name = 'Boost' -version = '1.63.0' -versionsuffix = '-Python-%(pyver)s' - -homepage = 'http://www.boost.org/' -description = "Boost provides free peer-reviewed portable C++ source libraries." - -toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'usempi': True, 'pic': True} - -sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] -source_urls = ['https://sourceforge.net/projects/%(namelower)s/files/%(namelower)s/%(version)s'] - -dependencies = [ - ('bzip2', '1.0.6'), - ('zlib', '1.2.11'), - ('Python', '2.7.12'), -] - -# also build boost_mpi -boost_mpi = True - -moduleclass = 'devel' - -# Build statistics -buildstats = [{ - "build_time": 1537.69, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'PETSc-3.7.5-foss-2017a-Python-2.7.12.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 169939518, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491225875, - "total_memory": 128828, -}] - -# Build statistics -buildstats = [ -{ - "build_time": 1537.69, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs:/cluster/easybuild/ebfiles_repo'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", '--use-existing-modules', 'PETSc-3.7.5-foss-2017a-Python-2.7.12.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 169939518, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1491225875, - "total_memory": 128828, -}, -{ - "build_time": 1585.32, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", '--group-writable-installdir', "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", '--rebuild', "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot='/cluster/easybuild/ebfiles_repo:/cluster/easybuild/software/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs'", "--robot-paths='/cluster/easybuild/ebfiles_repo:'", '--set-gid-bit', "--sourcepath='/cluster/easybuild/sources'", "--umask='002'", 'Boost/Boost-1.63.0-foss-2017a-Python-2.7.12.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login24", - "install_size": 169940729, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/cluster/easybuild/software/lang/Python/2.7.12-foss-2017a/bin/python", - "timestamp": 1492695611, - "total_memory": 128828, -}, -] -- GitLab From 4eaa887d711737ff20a23ad31aa3dc194c816c33 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Fri, 28 Apr 2017 06:06:57 +0200 Subject: [PATCH 1004/1311] removed built comments and updated tcl --- .../n/NAMD/NAMD-2.12-foss-2017a-mpi.eb | 28 +------------------ .../t/Tcl/Tcl-8.5.19-foss-2017a.eb | 27 ++++++++++++++++++ 2 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb index 13ea1d21a4..6dd67416d3 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb @@ -1,4 +1,3 @@ -# Built with EasyBuild version 3.1.1 on 2017-04-04_17-10-41 name = 'NAMD' version = '2.12' versionsuffix = '-mpi' @@ -13,7 +12,7 @@ toolchainopts = {'opt': True, 'pic': True} sources = ['NAMD_%(version)s_Source.tar.gz'] dependencies = [ - ('Tcl', '8.5.12'), + ('Tcl', '8.5.19'), ] # /bin/csh is required by 'config' script @@ -23,28 +22,3 @@ charm_arch = "mpi-linux-x86_64" moduleclass = 'chem' -# Build statistics -buildstats = [{ - "build_time": 269.88, - "command_line": ["--buildpath='/dev/shm'", "--configfiles='/cluster/easybuild/config.cfg'", "--installpath='/cluster/easybuild'", "--module-naming-scheme='CategorizedModuleNamingScheme'", "--module-syntax='Tcl'", "--modules-tool='EnvironmentModulesC'", "--packagepath='/cluster/easybuild/packages'", "--parallel='40'", "--prefix='/cluster/easybuild'", "--repository='GitRepository'", "--repositorypath='/cluster/easybuild/ebfiles_repo.git'", "--robot-paths=':/cluster/easybuild/ebfiles_repo'", "--sourcepath='/cluster/easybuild/sources'", 'NAMD-2.12-foss-2017a-mpi.eb'], - "core_count": 40, - "cpu_model": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz", - "cpu_speed": 3100.0, - "cpu_vendor": "Intel", - "easybuild-easyblocks_version": "3.1.1", - "easybuild-framework_version": "3.1.1", - "gcc_version": "Using built-in specs.; COLLECT_GCC=gcc; COLLECT_LTO_WRAPPER=/cluster/easybuild/software/compiler/GCCcore/6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper; Target: x86_64-pc-linux-gnu; Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --with-local-prefix=/cluster/easybuild/software/compiler/GCCcore/6.3.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/6.3.0/dummy-/gcc-6.3.0/stage2_stuff; Thread model: posix; gcc version 6.3.0 (GCC) ; ", - "glibc_version": "2.17", - "hostname": "login23", - "install_size": 45931470, - "modules_tool": ('EnvironmentModulesC', '/usr/bin/modulecmd', '3.2.10'), - "os_name": "centos linux", - "os_type": "Linux", - "os_version": "7.3.1611", - "platform_name": "x86_64-unknown-linux", - "python_version": "2.7.5 (default, Nov 6 2016, 00:28:07) ; [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]", - "system_gcc_path": "/cluster/easybuild/software/compiler/GCCcore/6.3.0/bin/gcc", - "system_python_path": "/usr/bin/python", - "timestamp": 1491318641, - "total_memory": 128828, -}] diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb new file mode 100644 index 0000000000..0514b4e682 --- /dev/null +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'Tcl' +version = "8.5.19" + +homepage = 'http://www.tcl.tk/' +description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +dependencies = [ + ('zlib', '1.2.11'), +] + +configopts = '--enable-threads EXTRA_INSTALL="install-private-headers"' + +runtest = 'test' + +start_dir = 'unix' + +moduleclass = 'lang' + -- GitLab From 1763251c00437c70b3aeff0287d6406648f30897 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 10:57:26 +0200 Subject: [PATCH 1005/1311] align IMB 4.1 easyconfigs for foss/2017a and intel/2017.02 --- easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb | 14 +++++--------- .../easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb | 11 +++++------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb index 0a33899fe9..bcbb961f34 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2017a.eb @@ -4,29 +4,25 @@ name = 'IMB' version = '4.1' homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' -description = """ -The Intel® MPI Benchmarks perform a set of MPI performance measurements for point-to-point -and global communication operations for a range of message sizes. -""" +description = """The Intel MPI Benchmarks perform a set of MPI performance measurements for point-to-point and + global communication operations for a range of message sizes""" toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': True} sources = ['%(name)s_%(version)s.tgz'] source_urls = ['https://software.intel.com/sites/default/files/managed/a3/b2/'] start_dir = 'src' -prebuildopts = 'export MPI_HOME=$EBROOTOPENMPI && ' -buildopts = "-f make_mpich MPI_HOME=$EBROOTOPENMPI" +buildopts = 'all CC="$MPICC"' parallel = 1 files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] sanity_check_paths = { - 'files': ['bin/%s' % binfile for binfile in ['IMB-RMA', 'IMB-EXT', 'IMB-NBC', 'IMB-MPI1']], + 'files': ['bin/IMB-EXT', 'bin/IMB-IO', 'bin/IMB-MPI1', 'bin/IMB-NBC', 'bin/IMB-RMA'], 'dirs': ['bin', 'doc'] } moduleclass = 'perf' - - diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb index 65d5fc7e4a..d22113b5a9 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017.02.eb @@ -10,20 +10,19 @@ description = """The Intel MPI Benchmarks perform a set of MPI performance measu toolchain = {'name': 'intel', 'version': '2017.02'} toolchainopts = {'usempi': True} -source_urls = ['https://software.intel.com/sites/default/files/managed/34/aa/'] sources = ['%(name)s_%(version)s.tgz'] +source_urls = ['https://software.intel.com/sites/default/files/managed/a3/b2/'] -prebuildopts = "cd src && " -buildopts = "all" +start_dir = 'src' +buildopts = 'all CC="$MPICC"' parallel = 1 -files_to_copy = [(['src/IMB-*'], 'bin')] +files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] sanity_check_paths = { 'files': ['bin/IMB-EXT', 'bin/IMB-IO', 'bin/IMB-MPI1', 'bin/IMB-NBC', 'bin/IMB-RMA'], - 'dirs': [], + 'dirs': ['bin', 'doc'] } moduleclass = 'perf' - -- GitLab From 828a4b4be010f44678b5cc7c401ecd2b84ea51d7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 11:23:30 +0200 Subject: [PATCH 1006/1311] adding easyconfigs: Boost-1.64.0-intel-2017a.eb --- .../b/Boost/Boost-1.64.0-intel-2017a.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.64.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.64.0-intel-2017a.eb b/easybuild/easyconfigs/b/Boost/Boost-1.64.0-intel-2017a.eb new file mode 100644 index 0000000000..981136de99 --- /dev/null +++ b/easybuild/easyconfigs/b/Boost/Boost-1.64.0-intel-2017a.eb @@ -0,0 +1,23 @@ +name = 'Boost' +version = '1.64.0' + +homepage = 'http://www.boost.org/' +description = """Boost provides free peer-reviewed portable C++ source libraries.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['%%(namelower)s_%s.tar.gz' % '_'.join(version.split('.'))] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), +] + +configopts = '--without-libraries=python' + +# also build boost_mpi +boost_mpi = True + +moduleclass = 'devel' -- GitLab From d211df671be83d9fbb2740449366a1874cf44490 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 12:44:47 +0200 Subject: [PATCH 1007/1311] adding easyconfigs: Python-3.6.1-intel-2017a.eb --- .../p/Python/Python-3.6.1-intel-2017a.eb | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-3.6.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/p/Python/Python-3.6.1-intel-2017a.eb b/easybuild/easyconfigs/p/Python/Python-3.6.1-intel-2017a.eb new file mode 100644 index 0000000000..b226f52d51 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-3.6.1-intel-2017a.eb @@ -0,0 +1,127 @@ +name = 'Python' +version = '3.6.1' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.11'), + ('libreadline', '7.0'), + ('ncurses', '6.0'), + ('SQLite', '3.17.0'), + ('GMP', '6.1.2'), + ('XZ', '5.2.3'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2k'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# order is important! +# package versions updated May 28th 2015 +exts_list = [ + # note: more recent versions of setuptools (v34.x) can not be installed from source anymore, + # see https://github.com/pypa/setuptools/issues/980 + ('setuptools', '33.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('pip', '9.0.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], + }), + ('nose', '1.3.7', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], + }), + ('numpy', '1.12.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], + 'source_tmpl': '%(name)s-%(version)s.zip', + 'patches': ['numpy-1.12.0-mkl.patch'], + }), + ('scipy', '0.19.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], + 'source_tmpl': '%(name)s-%(version)s.zip', + }), + ('blist', '1.3.6', { + 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], + }), + ('mpi4py', '2.0.0', { + 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], + }), + ('paycheck', '1.0.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], + 'patches': [ + 'paycheck-1.0.2_setup-open-README-utf8.patch', + ], + }), + ('pbr', '2.0.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], + }), + ('lockfile', '0.12.2', { + 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], + }), + ('Cython', '0.25.2', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], + }), + ('six', '1.10.0', { + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + }), + ('dateutil', '2.6.0', { + 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + }), + ('deap', '1.0.2', { + 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', + 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], + 'patches': [ + 'deap-1.0.2_setup-open-README-utf8.patch', + ], + }), + ('decorator', '4.0.11', { + 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], + }), + ('arff', '2.1.0', { + 'source_tmpl': 'liac-%(name)s-%(version)s.zip', + 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], + }), + ('pycrypto', '2.6.1', { + 'modulename': 'Crypto', + 'source_urls': ['https://pypi.python.org/packages/source/p/pycrypto/'], + }), + ('ecdsa', '0.13', { + 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], + }), + ('cryptography', '1.8.1', { + 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], + }), + ('paramiko', '2.1.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], + }), + ('pyparsing', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + }), + ('netifaces', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], + }), + ('netaddr', '0.7.19', { + 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], + }), + ('pandas', '0.19.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], + }), + ('virtualenv', '15.1.0', { + 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], + }), +] + +moduleclass = 'lang' -- GitLab From 6d38e047d7867b3529d97081d4ff1c69857e504c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 14:50:50 +0200 Subject: [PATCH 1008/1311] adding easyconfigs: BamTools-2.4.1-intel-2017a.eb, CMake-3.8.0-GCCcore-6.3.0.eb --- .../b/BamTools/BamTools-2.4.1-intel-2017a.eb | 16 +++++++++ .../c/CMake/CMake-3.8.0-GCCcore-6.3.0.eb | 36 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/b/BamTools/BamTools-2.4.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.8.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/b/BamTools/BamTools-2.4.1-intel-2017a.eb b/easybuild/easyconfigs/b/BamTools/BamTools-2.4.1-intel-2017a.eb new file mode 100644 index 0000000000..fd92ae4c8f --- /dev/null +++ b/easybuild/easyconfigs/b/BamTools/BamTools-2.4.1-intel-2017a.eb @@ -0,0 +1,16 @@ +name = 'BamTools' +version = '2.4.1' + +homepage = 'https://github.com/pezmaster31/bamtools' +description = """BamTools provides both a programmer's API and an end-user's toolkit for handling BAM files.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/pezmaster31/bamtools/archive'] + +builddependencies = [('CMake', '3.8.0')] + +files_to_copy = ['bin', 'lib', 'include', 'docs', 'LICENSE', 'README'] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.8.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.8.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..522448447c --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.8.0-GCCcore-6.3.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.8.0' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 9d66b3cd3f23021c0083ce763ee46a4b14b0dbb9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 17:01:10 +0200 Subject: [PATCH 1009/1311] use pl2 source tarball for FFTW 3.3.6 which already includes patch for F03 interface --- easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb | 8 ++------ easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb | 8 ++------ easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb | 8 ++------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb index 4325e0c729..ad3e944f8a 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompi-2017a.eb @@ -9,12 +9,8 @@ toolchain = {'name': 'gompi', 'version': '2017a'} toolchainopts = {'pic': True} source_urls = [homepage] -sources = ['fftw-%(version)s-pl1.tar.gz'] -checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] - -patches = [ - 'FFTW-3.3.6-F03_interface_pl2.patch', -] +sources = ['fftw-%(version)s-pl2.tar.gz'] +checksums = ['927e481edbb32575397eb3d62535a856'] runtest = 'check' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb index 14ebd120a4..2c0fe9cb97 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2016b.eb @@ -9,12 +9,8 @@ toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True} source_urls = [homepage] -sources = ['fftw-%(version)s-pl1.tar.gz'] -checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] - -patches = [ - 'FFTW-3.3.6-F03_interface_pl2.patch', -] +sources = ['fftw-%(version)s-pl2.tar.gz'] +checksums = ['927e481edbb32575397eb3d62535a856'] # no quad precision, requires GCC v4.6 or higher # see also diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb index da857e5ca5..7d5646bd9c 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-intel-2017a.eb @@ -9,12 +9,8 @@ toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'pic': True} source_urls = [homepage] -sources = ['fftw-%(version)s-pl1.tar.gz'] -checksums = ['682a0e78d6966ca37c7446d4ab4cc2a1'] - -patches = [ - 'FFTW-3.3.6-F03_interface_pl2.patch', -] +sources = ['fftw-%(version)s-pl2.tar.gz'] +checksums = ['927e481edbb32575397eb3d62535a856'] # no quad precision, requires GCC v4.6 or higher # see also -- GitLab From 8a0042c90ca5002241acabd21eae93ec86b751a2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 17:24:03 +0200 Subject: [PATCH 1010/1311] adding easyconfigs: SuiteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb, SuiteSparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb, METIS-5.1.0-intel-2017a.eb, ParMETIS-4.0.3-intel-2017a.eb --- .../m/METIS/METIS-5.1.0-intel-2017a.eb | 25 +++++++++++++++++++ .../p/ParMETIS/ParMETIS-4.0.3-intel-2017a.eb | 22 ++++++++++++++++ ...iteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb | 19 ++++++++++++++ ...Sparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb | 19 ++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb create mode 100644 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb new file mode 100644 index 0000000000..91d00f1139 --- /dev/null +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb @@ -0,0 +1,25 @@ +name = 'METIS' +version = '5.1.0' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, +and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the +multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', +] + +# We use 32bit for indices and 64bit for content +patches = ['METIS-5.1.0-use-doubles.patch'] + +builddependencies = [('CMake', '3.8.0')] + +configopts = ['', 'shared=1'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2017a.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2017a.eb new file mode 100644 index 0000000000..239bd0fcd4 --- /dev/null +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-intel-2017a.eb @@ -0,0 +1,22 @@ +name = 'ParMETIS' +version = '4.0.3' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/OLD', +] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('CMake', '3.8.0')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb new file mode 100644 index 0000000000..3f7ce4f28f --- /dev/null +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-METIS-5.1.0.eb @@ -0,0 +1,19 @@ +name = 'SuiteSparse' +version = '4.5.5' +metis_ver = '5.1.0' +versionsuffix = '-METIS-%s' % metis_ver + +homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' +description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'unroll': True, 'pic': True} + +source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('METIS', metis_ver)] + +parallel = 1 + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb new file mode 100644 index 0000000000..28aa92c03a --- /dev/null +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-intel-2017a-ParMETIS-4.0.3.eb @@ -0,0 +1,19 @@ +name = 'SuiteSparse' +version = '4.5.5' +metis_ver = '4.0.3' +versionsuffix = '-ParMETIS-%s' % metis_ver + +homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' +description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'unroll': True, 'pic': True} + +source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('ParMETIS', metis_ver)] + +parallel = 1 + +moduleclass = 'numlib' -- GitLab From ab62066363ea6186a345ad2c4c489dc45f355fa2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 17:39:36 +0200 Subject: [PATCH 1011/1311] fix sources spec for HMMER 3.1b2 + minor style fixes --- easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb | 9 ++++----- easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb index 0456b6d6ce..c756d8464e 100644 --- a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb @@ -28,16 +28,15 @@ description = """HMMER is used for searching sequence databases for homologs of toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['http://eddylab.org/software/hmmer%(version_major)s/%(version)s/'] -sources = ['hmmer-%(version)s-linux-intel-x86_64.tar.gz'] +sources = ['hmmer-%(version)s.tar.gz'] + +runtest = 'check' installopts = ' && cd easel && make install' sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["hmmemit", "hmmsearch", "hmmscan", - "esl-alimap", "esl-cluster", "esl-mask"]], + 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan'], 'dirs': [] } -runtest = 'check' - moduleclass = 'bio' diff --git a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb index da1af277a5..4211dd88a0 100644 --- a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb @@ -28,16 +28,15 @@ description = """HMMER is used for searching sequence databases for homologs of toolchain = {'name': 'intel', 'version': '2015a'} source_urls = ['http://eddylab.org/software/hmmer%(version_major)s/%(version)s/'] -sources = ['hmmer-%(version)s-linux-intel-x86_64.tar.gz'] +sources = ['hmmer-%(version)s.tar.gz'] + +runtest = 'check' installopts = ' && cd easel && make install' sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["hmmemit", "hmmsearch", "hmmscan", - "esl-alimap", "esl-cluster", "esl-mask"]], + 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan'], 'dirs': [] } -runtest = 'check' - moduleclass = 'bio' -- GitLab From 83ab75f708cba109de54b5c963959c07e8f9b33f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 17:44:19 +0200 Subject: [PATCH 1012/1311] extend sanity check for HMMER 3.1b2 --- easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb | 5 +++-- easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb index c756d8464e..aed3e32ba8 100644 --- a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-foss-2016a.eb @@ -35,8 +35,9 @@ runtest = 'check' installopts = ' && cd easel && make install' sanity_check_paths = { - 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan'], - 'dirs': [] + 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan', + 'lib/libeasel.a', 'lib/libhmmer.a'], + 'dirs': ['include', 'share'], } moduleclass = 'bio' diff --git a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb index 4211dd88a0..66c915507d 100644 --- a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2015a.eb @@ -35,8 +35,9 @@ runtest = 'check' installopts = ' && cd easel && make install' sanity_check_paths = { - 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan'], - 'dirs': [] + 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan', + 'lib/libeasel.a', 'lib/libhmmer.a'], + 'dirs': ['include', 'share'], } moduleclass = 'bio' -- GitLab From 0944579f6e494a7a2e3e626638aa50ea16c951e4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 17:58:00 +0200 Subject: [PATCH 1013/1311] adding easyconfigs: HMMER-3.1b2-intel-2017a.eb --- .../h/HMMER/HMMER-3.1b2-intel-2017a.eb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2017a.eb b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2017a.eb new file mode 100644 index 0000000000..3ca7456fc5 --- /dev/null +++ b/easybuild/easyconfigs/h/HMMER/HMMER-3.1b2-intel-2017a.eb @@ -0,0 +1,43 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Nils Christian , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +easyblock = 'ConfigureMake' + +name = 'HMMER' +version = '3.1b2' + +homepage = 'http://hmmer.org/' +description = """HMMER is used for searching sequence databases for homologs of protein sequences, + and for making protein sequence alignments. It implements methods using probabilistic models + called profile hidden Markov models (profile HMMs). Compared to BLAST, FASTA, and other + sequence alignment and database search tools based on older scoring methodology, + HMMER aims to be significantly more accurate and more able to detect remote homologs + because of the strength of its underlying mathematical models. In the past, this strength + came at significant computational expense, but in the new HMMER3 project, HMMER is now + essentially as fast as BLAST.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://eddylab.org/software/hmmer%(version_major)s/%(version)s/'] +sources = ['hmmer-%(version)s.tar.gz'] + +runtest = 'check' + +installopts = ' && cd easel && make install' + +sanity_check_paths = { + 'files': ['bin/esl-alimap', 'bin/esl-cluster', 'bin/esl-mask', 'bin/hmmemit', 'bin/hmmsearch', 'bin/hmmscan', + 'lib/libeasel.a', 'lib/libhmmer.a'], + 'dirs': ['include', 'share'], +} + +moduleclass = 'bio' -- GitLab From 6c5e0ab7620bddaf2d500c27241863c56198f9a8 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 2 May 2017 20:21:29 +0200 Subject: [PATCH 1014/1311] adding easyconfigs: OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb --- .../OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb new file mode 100755 index 0000000000..1e3286223d --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '2.0.2' +versionsuffix= '-opa' + +homepage = 'http://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-2 implementation.""" + +toolchain = {'name': 'GCC', 'version': '6.3.0-2.27'} + +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['886698becc5bea8c151c0af2074b8392'] + +dependencies = [('hwloc', '1.11.5')] + +configopts = '--enable-shared --enable-mpi-thread-multiple --with-psm2 ' +configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading + +# needed for --with-verbs +osdependencies = [('libpsm2', 'libpsm2-devel')] + +libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % binfile for binfile in ["ompi_info", "opal_wrapper", "orterun"]] + + ["lib/lib%s.%s" % (libfile, SHLIB_EXT) for libfile in libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' -- GitLab From d8b7170e5bdc9bf19490d270f9877692a2e5d9b5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 21:01:29 +0200 Subject: [PATCH 1015/1311] {compiler}[dummy] GCCcore 7.1.0 --- .../easyconfigs/g/GCCcore/GCCcore-7.1.0.eb | 54 ++++++ .../mpfr-3.1.5-allpatches-20161219.patch | 176 ++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb new file mode 100644 index 0000000000..6f69a58a66 --- /dev/null +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb @@ -0,0 +1,54 @@ +easyblock = 'EB_GCC' + +name = 'GCCcore' +version = '7.1.0' + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +mpfr_version = '3.1.5' + +source_urls = [ + 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://www.multiprecision.org/mpc/download', # MPC official + 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies + 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies + 'http://isl.gforge.inria.fr/', # original HTTP source for ISL +] + +sources = [ + 'gcc-%(version)s.tar.bz2', + 'gmp-6.1.2.tar.bz2', + 'mpfr-%s.tar.bz2' % mpfr_version, + 'mpc-1.0.3.tar.gz', + 'isl-0.16.1.tar.bz2', +] + +builddependencies = [ + ('M4', '1.4.18'), + ('binutils', '2.28'), +] + +patches = [ + ('mpfr-%s-allpatches-20161219.patch' % mpfr_version, '../mpfr-%s' % mpfr_version), + 'GCCcore-6.2.0-fix-find-isl.patch', +] + +checksums = [ + '6bf56a2bca9dac9dbbf8e8d1036964a8', # gcc-7.1.0.tar.bz2 + '8ddbb26dc3bd4e2302984debba1406a5', # gmp-6.1.2.tar.bz2 + 'b1d23a55588e3b2a13e3be66bc69fd8d', # mpfr-3.1.5.tar.gz + 'd6a1d5f8ddea3abd2cc3e98f58352d26', # mpc-1.0.3.tar.gz + 'ac1f25a0677912952718a51f5bc20f32', # isl-0.16.1.tar.bz2 +] + +languages = ['c', 'c++', 'fortran'] + +withisl = True + +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch new file mode 100644 index 0000000000..4e70357e4a --- /dev/null +++ b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch @@ -0,0 +1,176 @@ +# MPFR v3.1.5 patch dated 2017-12-19 +# downloaded via https://gforge.inria.fr/frs/?group_id=136 +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-15 08:35:46.476430238 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-15 08:35:46.544430346 +0000 +@@ -0,0 +1 @@ ++vasprintf +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-15 08:35:46.544430346 +0000 +@@ -1 +1 @@ +-3.1.5 ++3.1.5-p1 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5" ++#define MPFR_VERSION_STRING "3.1.5-p1" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/vasprintf.c mpfr-3.1.5-b/src/vasprintf.c +--- mpfr-3.1.5-a/src/vasprintf.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/vasprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1593,7 +1593,7 @@ + } + else if (spec.spec == 'f' || spec.spec == 'F') + { +- if (spec.prec == -1) ++ if (spec.prec < 0) + spec.prec = 6; + if (regular_fg (np, p, spec, NULL) == -1) + goto error; +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-15 08:35:46.544430346 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5"; ++ return "3.1.5-p1"; + } +diff -Naurd mpfr-3.1.5-a/tests/tsprintf.c mpfr-3.1.5-b/tests/tsprintf.c +--- mpfr-3.1.5-a/tests/tsprintf.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tsprintf.c 2016-12-15 08:35:46.520430308 +0000 +@@ -1251,6 +1251,25 @@ + check_emin_aux (MPFR_EMIN_MIN); + } + ++static void ++test20161214 (void) ++{ ++ mpfr_t x; ++ char buf[32]; ++ const char s[] = "0x0.fffffffffffff8p+1024"; ++ int r; ++ ++ mpfr_init2 (x, 64); ++ mpfr_set_str (x, s, 16, MPFR_RNDN); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", -2, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN + 1, x); ++ MPFR_ASSERTN(r == 316); ++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN, x); ++ MPFR_ASSERTN(r == 316); ++ mpfr_clear (x); ++} ++ + int + main (int argc, char **argv) + { +@@ -1271,6 +1290,7 @@ + mixed (); + check_emax (); + check_emin (); ++ test20161214 (); + + #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) + #if MPFR_LCONV_DPTS +diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES +--- mpfr-3.1.5-a/PATCHES 2016-12-19 22:11:17.022676737 +0000 ++++ mpfr-3.1.5-b/PATCHES 2016-12-19 22:11:17.094676820 +0000 +@@ -0,0 +1 @@ ++strtofr +diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION +--- mpfr-3.1.5-a/VERSION 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/VERSION 2016-12-19 22:11:17.094676820 +0000 +@@ -1 +1 @@ +-3.1.5-p1 ++3.1.5-p2 +diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h +--- mpfr-3.1.5-a/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000 ++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-19 22:11:17.090676815 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 1 + #define MPFR_VERSION_PATCHLEVEL 5 +-#define MPFR_VERSION_STRING "3.1.5-p1" ++#define MPFR_VERSION_STRING "3.1.5-p2" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.1.5-a/src/strtofr.c mpfr-3.1.5-b/src/strtofr.c +--- mpfr-3.1.5-a/src/strtofr.c 2016-09-27 07:58:15.000000000 +0000 ++++ mpfr-3.1.5-b/src/strtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -743,11 +743,14 @@ + of the pstr_size most significant digits of pstr->mant, with + equality in case exact is non-zero. */ + +- /* test if rounding is possible, and if so exit the loop */ +- if (exact || mpfr_can_round_raw (result, ysize, +- (pstr->negative) ? -1 : 1, +- ysize_bits - err - 1, +- MPFR_RNDN, rnd, MPFR_PREC(x))) ++ /* test if rounding is possible, and if so exit the loop. ++ Note: we also need to be able to determine the correct ternary value, ++ thus we use the MPFR_PREC(x) + (rnd == MPFR_RNDN) trick. ++ For example if result = xxx...xxx111...111 and rnd = RNDN, ++ then we know the correct rounding is xxx...xx(x+1), but we cannot know ++ the correct ternary value. */ ++ if (exact || mpfr_round_p (result, ysize, ysize_bits - err - 1, ++ MPFR_PREC(x) + (rnd == MPFR_RNDN))) + break; + + next_loop: +diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c +--- mpfr-3.1.5-a/src/version.c 2016-12-15 08:35:46.544430346 +0000 ++++ mpfr-3.1.5-b/src/version.c 2016-12-19 22:11:17.094676820 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.1.5-p1"; ++ return "3.1.5-p2"; + } +diff -Naurd mpfr-3.1.5-a/tests/tstrtofr.c mpfr-3.1.5-b/tests/tstrtofr.c +--- mpfr-3.1.5-a/tests/tstrtofr.c 2016-09-27 07:58:14.000000000 +0000 ++++ mpfr-3.1.5-b/tests/tstrtofr.c 2016-12-19 22:11:17.066676788 +0000 +@@ -1191,6 +1191,24 @@ + mpfr_clears (e, x1, x2, (mpfr_ptr) 0); + } + ++/* Note: the number is 5^47/2^9. */ ++static void ++bug20161217 (void) ++{ ++ mpfr_t fp, z; ++ static const char * num = "0.1387778780781445675529539585113525390625e31"; ++ int inex; ++ ++ mpfr_init2 (fp, 110); ++ mpfr_init2 (z, 110); ++ inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN); ++ MPFR_ASSERTN(inex == 0); ++ mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001101E-9"); ++ MPFR_ASSERTN(mpfr_equal_p (fp, z)); ++ mpfr_clear (fp); ++ mpfr_clear (z); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -1205,6 +1223,7 @@ + test20100310 (); + bug20120814 (); + bug20120829 (); ++ bug20161217 (); + + tests_end_mpfr (); + return 0; -- GitLab From 4e6ea8705ba5ea327960feb905feefd9cbdfa3c0 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 2 May 2017 21:11:14 +0200 Subject: [PATCH 1016/1311] adding easyconfigs: METIS-5.1.0-foss-2017a.eb, ParMETIS-4.0.3-foss-2017a.eb, SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb, SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb --- .../m/METIS/METIS-5.1.0-foss-2017a.eb | 22 +++++++++++++++++++ .../p/ParMETIS/ParMETIS-4.0.3-foss-2017a.eb | 22 +++++++++++++++++++ ...uiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb | 19 ++++++++++++++++ ...eSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb | 19 ++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100755 easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb create mode 100755 easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2017a.eb create mode 100755 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb create mode 100755 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb new file mode 100755 index 0000000000..03a730e5cc --- /dev/null +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb @@ -0,0 +1,22 @@ +name = 'METIS' +version = '5.1.0' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, + and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the + multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', +] + +builddependencies = [('CMake', '3.8.0')] + +configopts = ['', 'shared=1'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2017a.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2017a.eb new file mode 100755 index 0000000000..875f07389d --- /dev/null +++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.3-foss-2017a.eb @@ -0,0 +1,22 @@ +name = 'ParMETIS' +version = '4.0.3' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview' +description = """ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning + unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the + functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and + large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way + graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/OLD', +] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('CMake', '3.8.0')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb new file mode 100755 index 0000000000..a66251bb0f --- /dev/null +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb @@ -0,0 +1,19 @@ +name = 'SuiteSparse' +version = '4.5.5' +metis_ver = '5.1.0' +versionsuffix = '-METIS-%s' % metis_ver + +homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' +description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'opt': True, 'unroll': True, 'pic': True} + +source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('METIS', metis_ver)] + +maxparallel = 1 + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb new file mode 100755 index 0000000000..7c7dff3356 --- /dev/null +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb @@ -0,0 +1,19 @@ +name = 'SuiteSparse' +version = '4.5.5' +parmetis_ver = '4.0.3' +versionsuffix = '-ParMETIS-%s' % parmetis_ver + +homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' +description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'opt': True, 'unroll': True, 'pic': True} + +source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('ParMETIS', parmetis_ver)] + +maxparallel = 1 + +moduleclass = 'numlib' -- GitLab From cf7d72d4c302a22a5ee6946ec7a95f47f1cb9779 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 21:32:15 +0200 Subject: [PATCH 1017/1311] fix time travelling in MPFR patch, thanks @wpoely86 --- .../easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch index 4e70357e4a..67ff28d57a 100644 --- a/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch +++ b/easybuild/easyconfigs/g/GCCcore/mpfr-3.1.5-allpatches-20161219.patch @@ -1,4 +1,4 @@ -# MPFR v3.1.5 patch dated 2017-12-19 +# MPFR v3.1.5 patch dated 2016-12-19 # downloaded via https://gforge.inria.fr/frs/?group_id=136 diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES --- mpfr-3.1.5-a/PATCHES 2016-12-15 08:35:46.476430238 +0000 -- GitLab From 42e15f650164f4faee57db07337d9dfeabf46332 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 May 2017 21:36:24 +0200 Subject: [PATCH 1018/1311] {compiler}[dummy] GCC 7.1.0 w/ binutils 2.28 + deps --- .../b/Bison/Bison-3.0.4-GCCcore-7.1.0.eb | 27 ++++++++++++++++++ .../b/binutils/binutils-2.28-GCCcore-7.1.0.eb | 21 ++++++++++++++ .../f/flex/flex-2.6.3-GCCcore-7.1.0.eb | 24 ++++++++++++++++ easybuild/easyconfigs/g/GCC/GCC-7.1.0-2.28.eb | 25 +++++++++++++++++ .../help2man/help2man-1.47.4-GCCcore-7.1.0.eb | 24 ++++++++++++++++ .../m/M4/M4-1.4.18-GCCcore-7.1.0.eb | 28 +++++++++++++++++++ .../z/zlib/zlib-1.2.11-GCCcore-7.1.0.eb | 25 +++++++++++++++++ 7 files changed, 174 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/g/GCC/GCC-7.1.0-2.28.eb create mode 100644 easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-7.1.0.eb create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-7.1.0.eb diff --git a/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-7.1.0.eb b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..33d3ae47a6 --- /dev/null +++ b/easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-7.1.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'Bison' +version = '3.0.4' + +homepage = 'http://www.gnu.org/software/bison' +description = """Bison is a general-purpose parser generator that converts an annotated context-free grammar + into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables.""" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('M4', '1.4.18'), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.28', '', True), +] + + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["bison", "yacc"]] + ["lib/liby.a"], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-7.1.0.eb b/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..10ecc14d7a --- /dev/null +++ b/easybuild/easyconfigs/b/binutils/binutils-2.28-GCCcore-7.1.0.eb @@ -0,0 +1,21 @@ +name = 'binutils' +version = '2.28' + +homepage = 'http://directory.fsf.org/project/binutils/' +description = "binutils: GNU binary utilities" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +builddependencies = [ + ('flex', '2.6.3'), + ('Bison', '3.0.4'), + # zlib required, but being linked in statically, so not a runtime dep + ('zlib', '1.2.11'), + # use same binutils version that was used when building GCC toolchain, to 'bootstrap' this binutils + ('binutils', version, '', True) +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-7.1.0.eb b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..28c855c205 --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.6.3-GCCcore-7.1.0.eb @@ -0,0 +1,24 @@ +name = 'flex' +version = '2.6.3' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/'] + +checksums = ['a5f65570cd9107ec8a8ec88f17b31bb1'] + +dependencies = [('M4', '1.4.18')] +builddependencies = [ + ('Bison', '3.0.4'), + ('help2man', '1.47.4'), + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.28', '', True), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/g/GCC/GCC-7.1.0-2.28.eb b/easybuild/easyconfigs/g/GCC/GCC-7.1.0-2.28.eb new file mode 100644 index 0000000000..870e7eab31 --- /dev/null +++ b/easybuild/easyconfigs/g/GCC/GCC-7.1.0-2.28.eb @@ -0,0 +1,25 @@ +easyblock = 'Bundle' + +name = 'GCC' +version = '7.1.0' + +binutilsver = '2.28' +versionsuffix = '-%s' % binutilsver + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +dependencies = [ + ('GCCcore', version), + # binutils built on top of GCCcore, which was built on top of (dummy-built) binutils + ('binutils', binutilsver, '', ('GCCcore', version)), +] + +altroot = 'GCCcore' +altversion = 'GCCcore' + +# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-7.1.0.eb b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..f487ba5530 --- /dev/null +++ b/easybuild/easyconfigs/h/help2man/help2man-1.47.4-GCCcore-7.1.0.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'help2man' +version = '1.47.4' + +homepage = 'https://www.gnu.org/software/help2man/' +description = """help2man produces simple manual pages from the '--help' and '--version' output of other commands.""" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_XZ] + +builddependencies = [ + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.28', '', True), +] + +sanity_check_paths = { + 'files': ['bin/help2man'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-7.1.0.eb b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..18394615f9 --- /dev/null +++ b/easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-7.1.0.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'M4' +version = '1.4.18' + +homepage = 'http://www.gnu.org/software/m4/m4.html' +description = """GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible + although it has some extensions (for example, handling more than 9 positional parameters to macros). + GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc.""" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.28', '', True)] + +# '-fgnu89-inline' is required to avoid linking errors with older glibc's, +# see https://github.com/hpcugent/easybuild-easyconfigs/issues/529 +configopts = "--enable-cxx CPPFLAGS=-fgnu89-inline" + +sanity_check_paths = { + 'files': ["bin/m4"], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-7.1.0.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-7.1.0.eb new file mode 100644 index 0000000000..bec9454ed8 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-7.1.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.11' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'name': 'GCCcore', 'version': '7.1.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://zlib.net/fossils'] +sources = [SOURCELOWER_TAR_GZ] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.28', '', True)] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 29988a028e00ce8b88a74b367cd1cfcbd1b4db80 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 3 May 2017 11:22:05 +0200 Subject: [PATCH 1019/1311] PoC for TBB open source --- .../t/tbb/tbb-2017_U5-goolf-1.7.20.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb new file mode 100644 index 0000000000..94782c17c8 --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb @@ -0,0 +1,28 @@ +name = 'tbb' +version = '2017_U5' + +homepage = 'https://01.org/tbb/' +description = """Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that + take full advantage of multicore performance, that are portable, composable and have future-proof scalability.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/01org/tbb/archive/'] +sources = ['%(version)s.tar.gz'] + +unpack_options = '--strip-components=1' + +skipsteps = ['configure', 'install'] + +buildininstalldir = True + +buildopts = "compiler=$CC" + +#runtest = 'compiler=$CC test' + +sanity_check_paths = { + 'files': [], + 'dirs': ['.'], +} + +moduleclass = 'lib' -- GitLab From 60038da4530e4cde6809d03d02b289e8ca841a83 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 11:30:23 +0200 Subject: [PATCH 1020/1311] also build IMB-IO in IMB 4.1 easyconfig using foss/2016b --- easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb index f6d0b1f028..449a0d2750 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb @@ -4,26 +4,24 @@ name = 'IMB' version = '4.1' homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' -description = """ -The Intel® MPI Benchmarks perform a set of MPI performance measurements for point-to-point -and global communication operations for a range of message sizes. -""" +description = """The Intel MPI Benchmarks perform a set of MPI performance measurements for point-to-point and + global communication operations for a range of message sizes""" -toolchain = {'name': 'foss', 'version': '2016a'} +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} sources = ['%(name)s_%(version)s.tgz'] source_urls = ['https://software.intel.com/sites/default/files/managed/a3/b2/'] start_dir = 'src' -prebuildopts = 'export MPI_HOME=$EBROOTOPENMPI && ' -buildopts = "-f make_mpich MPI_HOME=$EBROOTOPENMPI" +buildopts = 'all CC="$MPICC"' parallel = 1 files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] sanity_check_paths = { - 'files': ['bin/%s' % binfile for binfile in ['IMB-RMA', 'IMB-EXT', 'IMB-NBC', 'IMB-MPI1']], + 'files': ['bin/IMB-EXT', 'bin/IMB-IO', 'bin/IMB-MPI1', 'bin/IMB-NBC', 'bin/IMB-RMA'], 'dirs': ['bin', 'doc'] } -- GitLab From 9d83a3a823af6048779169f9eb4272b540b03097 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 11:33:59 +0200 Subject: [PATCH 1021/1311] adding easyconfigs: IMB-4.1-intel-2017a.eb --- .../easyconfigs/i/IMB/IMB-4.1-intel-2017a.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017a.eb new file mode 100644 index 0000000000..6636a983cd --- /dev/null +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'MakeCp' + +name = 'IMB' +version = '4.1' + +homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' +description = """The Intel MPI Benchmarks perform a set of MPI performance measurements for point-to-point and + global communication operations for a range of message sizes""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = ['%(name)s_%(version)s.tgz'] +source_urls = ['https://software.intel.com/sites/default/files/managed/a3/b2/'] + +start_dir = 'src' +buildopts = 'all CC="$MPICC"' + +parallel = 1 + +files_to_copy = [(['src/IMB-*'], 'bin'), (['doc/IMB_Users_Guide.pdf'], 'doc')] + +sanity_check_paths = { + 'files': ['bin/IMB-EXT', 'bin/IMB-IO', 'bin/IMB-MPI1', 'bin/IMB-NBC', 'bin/IMB-RMA'], + 'dirs': ['bin', 'doc'] +} + +moduleclass = 'perf' -- GitLab From 1521762763e6b6414ffd0859c553dc3337f5a038 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 11:59:21 +0200 Subject: [PATCH 1022/1311] fix toolchain version --- easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb index 449a0d2750..2b74ec6d38 100644 --- a/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IMB/IMB-4.1-foss-2016a.eb @@ -7,7 +7,7 @@ homepage = 'https://software.intel.com/en-us/articles/intel-mpi-benchmarks' description = """The Intel MPI Benchmarks perform a set of MPI performance measurements for point-to-point and global communication operations for a range of message sizes""" -toolchain = {'name': 'foss', 'version': '2016b'} +toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'usempi': True} sources = ['%(name)s_%(version)s.tgz'] -- GitLab From a8d022261518aa55ac0044ad7e0b852f1fc55509 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 14:10:11 +0200 Subject: [PATCH 1023/1311] clean up tbb easyconfig to use enhanced easyblock --- .../easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb index 94782c17c8..f90202e1b4 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-goolf-1.7.20.eb @@ -10,19 +10,4 @@ toolchain = {'name': 'goolf', 'version': '1.7.20'} source_urls = ['https://github.com/01org/tbb/archive/'] sources = ['%(version)s.tar.gz'] -unpack_options = '--strip-components=1' - -skipsteps = ['configure', 'install'] - -buildininstalldir = True - -buildopts = "compiler=$CC" - -#runtest = 'compiler=$CC test' - -sanity_check_paths = { - 'files': [], - 'dirs': ['.'], -} - moduleclass = 'lib' -- GitLab From b2623eb814ff0c54f95850202907564ac4768734 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 14:20:28 +0200 Subject: [PATCH 1024/1311] adding easyconfigs: tbb-2017_U5-intel-2017a.eb --- .../easyconfigs/t/tbb/tbb-2017_U5-intel-2017a.eb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017_U5-intel-2017a.eb diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017_U5-intel-2017a.eb b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-intel-2017a.eb new file mode 100644 index 0000000000..fc7398b13b --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-intel-2017a.eb @@ -0,0 +1,13 @@ +name = 'tbb' +version = '2017_U5' + +homepage = 'https://01.org/tbb/' +description = """Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that + take full advantage of multicore performance, that are portable, composable and have future-proof scalability.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/01org/tbb/archive/'] +sources = ['%(version)s.tar.gz'] + +moduleclass = 'lib' -- GitLab From 775f59f8c5345bb4ddb974790de0275d68e88e29 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 16:47:33 +0200 Subject: [PATCH 1025/1311] adding easyconfigs: Node-RED-0.16.2-foss-2017a.eb, nodejs-6.10.3-foss-2017a.eb --- .../n/Node-RED/Node-RED-0.16.2-foss-2017a.eb | 28 +++++++++++++++++++ .../n/nodejs/nodejs-6.10.3-foss-2017a.eb | 26 +++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb create mode 100644 easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb diff --git a/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb new file mode 100644 index 0000000000..828c4e612b --- /dev/null +++ b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'PackedBinary' + +name = 'Node-RED' +version = '0.16.2' + +homepage = 'http://nodered.org' +description = """Node-RED is a programming tool for wiring together hardware devices, APIs and online services + in new and interesting ways.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ['https://github.com/node-red/node-red/releases/download/%(version)s/'] +sources = ['node-red-%(version)s.zip'] + +dependencies = [ + ('nodejs', '6.10.3'), +] + +preinstallopts = 'cd %(namelower)s-%(version)s && ' +install_cmd = 'npm install --prefix %(installdir)s -g' + +sanity_check_paths = { + 'files': ['bin/%(namelower)s'], + 'dirs': ['lib/node_modules/%(namelower)s'], +} +sanity_check_commands = ['%(namelower)s --version'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb b/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb new file mode 100644 index 0000000000..65377857a3 --- /dev/null +++ b/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'nodejs' +version = '6.10.3' + +homepage = 'http://nodejs.org' + +description = """Node.js is a platform built on Chrome's JavaScript runtime + for easily building fast, scalable network applications. Node.js uses an + event-driven, non-blocking I/O model that makes it lightweight and efficient, + perfect for data-intensive real-time applications that run across distributed devices.""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'lowopt': True} + +source_urls = ['http://nodejs.org/dist/v%(version)s/'] +sources = ['node-v%(version)s.tar.gz'] + +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +sanity_check_paths = { + 'files': ['bin/node', 'bin/npm'], + 'dirs': ['lib/node_modules', 'include/node'] +} + +moduleclass = 'lang' -- GitLab From 012625a422c61cf81f51b20892b4413d2891039f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 17:20:32 +0200 Subject: [PATCH 1026/1311] more %(namelower)s --- easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb index 828c4e612b..7531db7616 100644 --- a/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb +++ b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb @@ -10,7 +10,7 @@ description = """Node-RED is a programming tool for wiring together hardware dev toolchain = {'name': 'foss', 'version': '2017a'} source_urls = ['https://github.com/node-red/node-red/releases/download/%(version)s/'] -sources = ['node-red-%(version)s.zip'] +sources = ['%(namelower)s-%(version)s.zip'] dependencies = [ ('nodejs', '6.10.3'), -- GitLab From f9589ba77bc83a6b6e568a99c9de6b0958733f10 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 May 2017 17:27:30 +0200 Subject: [PATCH 1027/1311] use --help as sanity check command, since --version starts a Node-RED server... --- easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb index 7531db7616..f11db814aa 100644 --- a/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb +++ b/easybuild/easyconfigs/n/Node-RED/Node-RED-0.16.2-foss-2017a.eb @@ -23,6 +23,6 @@ sanity_check_paths = { 'files': ['bin/%(namelower)s'], 'dirs': ['lib/node_modules/%(namelower)s'], } -sanity_check_commands = ['%(namelower)s --version'] +sanity_check_commands = ['%(namelower)s --help'] moduleclass = 'tools' -- GitLab From a3a0e6c3c840bbd9e2ac747879d5fb04bceb7223 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 4 May 2017 12:21:44 +0800 Subject: [PATCH 1028/1311] prepare release notes for eb320 --- RELEASE_NOTES | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index a56c5c3afe..b25f9e1c1c 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -6,6 +6,32 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en The latest version of easybuild-easyconfig provides 6,718 easyconfig files, for 1,182 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.2.0 (May 5th 2017) +--------------------- + +feature release +- added example easyconfig files for 33 new software packages: + - ACTC (#4386), atomate (#4484), BreakDancer (#4455), bx-python (#4486), ClusterShell (#4432), custodian (#4484), + DFTB+ (#4398), Doris (#4404), ED2 (#4402), FireWorks (#4484), GETORB (#4414), GapFiller (#4462), IPy (#4450), + imbalanced-learn (#4373), ipyrad (#4507), libiconv (#4499), MultiQC (#3564), NLopt (#1750), PyCUDA (#4523), + pymatgen-db (#4484), QuTiP (#4371), ROI_PAC (#4414), Rascaf (#4459), RepastHPC (#4395), rootpy (#4242), + SSPACE_Basic (#4461), Sambamba (#4442), Spack (#4431), SpiceyPy (#4406), StaMPS (#4454), samblaster (#4435), + VMD (#4391), WRF-Fire (#4403) +- added additional easyconfigs for various supported software packages, including ... +- various enhancements, including: + - sync Bowtie2 easyconfigs, consistently use Bowtie2 easyblock (#4380) + - use pl2 source tarball for FFTW 3.3.6 which already includes patch for F03 interface (#4529) +- various bug fixes, including: + - add missing XZ dep in easyconfig for libunwind 1.1 w/ GCC/4.9.2, sync sanity_check_paths across libunwind easyconfigs (#4369) + - use 'use_fma4' rather than deprecated 'use_fma' easyconfig parameter in FFTW easyconfigs using intel toolchain (#4384) + - fix pkgconfig patch for Qhull to only let CMake substitute (#4451) + - also use patch for METIS 5.1.0 to enable use of doubles in easyconfig for foss/2016b (#4467) + - add dependency NLopt for R extension nloptr (#4481) + - fix issue with configparser and backports namespace blocking inclusion of nbconvert with IPython (#4504) + - change source_urls of pycrypto to encrypted https://pypi.python.org/... (#4505) + - fix sources spec for HMMER 3.1b2 + minor style fixes + better sanity check (#4531) + + v3.1.2 (March 20th 2017) ------------------------ -- GitLab From 23d840436deca449424710bd1abe199149a27d7c Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Thu, 4 May 2017 13:50:49 +0800 Subject: [PATCH 1029/1311] prepare release notes for eb320 --- RELEASE_NOTES | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index b25f9e1c1c..f2fbd7d51c 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -17,7 +17,8 @@ feature release pymatgen-db (#4484), QuTiP (#4371), ROI_PAC (#4414), Rascaf (#4459), RepastHPC (#4395), rootpy (#4242), SSPACE_Basic (#4461), Sambamba (#4442), Spack (#4431), SpiceyPy (#4406), StaMPS (#4454), samblaster (#4435), VMD (#4391), WRF-Fire (#4403) -- added additional easyconfigs for various supported software packages, including ... +- added additional easyconfigs for various supported software packages, including: + - 3to2 1.1.1, ACTC 1.1, ALLPATHS-LG 52488, Autoconf 2.69, Autoconf 2.69, Automake 1.15, Automake 1.15, Autotools 20150215, Autotools 20150215, arpack-ng 3.4.0, atomate 0.4.4, BLAT 3.5, BamTools 2.4.1, BioKanga 4.3.4, BioKanga 4.3.5, BioPerl 1.7.1, Bison 3.0.4, Boost 1.63.0, Boost 1.64.0, Bowtie2 2.2.9, BreakDancer 1.4.5, binutils 2.28, bx-python , bzip2 1.0.6, CMake 3.8.0, CUDA 8.0.61.eb, Cantera 2.3.0, ClusterShell 1.7.3.eb, cURL 7.53.1, cURL 7.54.0, cairo 1.14.8, configparser 3.5.0, cuDNN 6.0, custodian 1.1.0, DBG2OLC 20170208, DFTB+ 1.3.1, Doris 4.02, Doxygen 1.8.13, deap 0.9.2, ED2 20170201, ED2 20170201, ESMF 6.3.0rp1, EasyBuild 3.1.2.eb, Eigen 3.3.2, entrypoints 0.2.2, FFTW 3.3.6, FireWorks 1.4.2, file 5.30, flex 2.6.3, fmt 3.0.1, fontconfig 2.12.1, fqtrim 0.9.5, freetype 2.5.5, freetype 2.6.2, freetype 2.7.1, freetype 2.7.1, GCC 6.3.0, GCC 7.1.0, GCCcore 7.1.0.eb, GDAL 2.1.3, GEOS 3.6.1, GETORB 2.3.2, GLib 2.52.0, GMP 6.1.2, GSL 2.3, GapFiller 2.1.1, Ghostscript 9.21, Go 1.8.1.eb, g2clib 1.6.0, g2lib 1.4.0, gnuplot 5.0.5, googletest 1.8.0, HDF 4.2.12, HDF5 1.10.0, HISAT2 2.0.5, HMMER 3.1b2, h5py 2.7.0, h5py 2.7.0, help2man 1.47.4, hwloc 1.11.6, IMB 4.1, IMB 4.1, IMB 4.1, IPy 0.83.eb, IPython 5.3.0, ImageMagick 7.0.5, Inspector 2017_update2.eb, imbalanced-learn 0.2.1, ipyrad 0.6.15, JasPer 1.900.1, JasPer 2.0.12, jemalloc 4.5.0, LIBSVM 3.22, LLVM 4.0.0, LZO 2.10, LibTIFF 4.0.7, LittleCMS 2.8, libGLU 9.0.0, libdrm 2.4.76, libiconv 1.15, libjpeg-turbo 1.5.1, libpng 1.6.18, libpng 1.6.21, libpng 1.6.28, libpng 1.6.29, libreadline 7.0, libsodium 1.0.12, libtool 2.4.6, libtool 2.4.6, libxml2 2.9.4, libyaml 0.1.7.eb, M4 1.4.18, METIS 5.1.0, MRtrix 0.3.15, Mako 1.0.6, Mesa 17.0.2, MultiQC 0.7, MultiQC 0.9, makedepend 1.0.5, matplotlib 1.5.1, matplotlib 2.0.0, matplotlib 2.0.0, NASM 2.12.02, NGS 1.3.0, NLopt 2.4.2, NLopt 2.4.2, ncbi-vdb 2.8.2, ncurses 6.0, netCDF-C++4 4.3.0, netCDF-Fortran 4.4.4, netCDF 4.4.1.1, nettle 3.3, numba 0.32.0, numpy 1.10.1, numpy 1.12.1, ORCA 4.0.0.2, Octave 4.2.1, OpenMPI 2.1.0, OpenPGM 5.2.122, PCRE 8.40, PETSc 3.7.5, PGI 17.3, PLINK 1.9b_4.1, PROJ 4.9.3, ParMETIS 4.0.3, Perl 5.24.1, Pillow 4.1.0, PyCUDA 2016.1.2, PyYAML 3.12, PyYAML 3.12.eb, PyZMQ 16.0.2, Python 2.7.13, Python 3.6.1, pixman 0.34.0, pkg-config 0.29.2, pkgconfig 1.2.2, pymatgen-db 0.6.5, pymatgen 4.7.3, QuTiP 4.1.0, QuantumESPRESSO 6.1, R 3.3.3, R 3.3.3, ROI_PAC 3.0.1, Rascaf 1.0.2, RepastHPC 2.2.0, rootpy 0.8.0, SAMtools 0.1.20, SAMtools 1.4, SAMtools 1.4, SCons 2.5.1, SIONlib 1.7.1, SIONlib 1.7.1, SQLite 3.17.0, SSPACE_Basic 2.1.1, SUNDIALS 2.7.0, SWASH 3.14, SWASH 3.14, SWIG 3.0.12, Sambamba 0.6.6.eb, Seaborn 0.7.1, Spack 0.10.0.eb, SpiceyPy 1.1.0, StaMPS 3.3b1, Stacks 1.45, Stacks 1.46, Stampy 1.0.31, SuiteSparse 4.5.5, SuiteSparse 4.5.5, Szip 2.1, samblaster 0.1.24, scipy 0.19.0, scp 0.10.2, snaphu 1.4.2, sparsehash 2.0.3, spglib-python 1.9.9.38, Tcl 8.6.6, Tk 8.6.6, Triangle 1.6, tbb 2017_U5, tbb 2017_U5, tcsh 6.20.00, UDUNITS 2.2.24, util linux, VMD 1.9.3, VTune 2017_update2.eb, ViennaRNA 2.3.5, vsc-base 2.5.8, vsc-install 0.10.25, vsc-mympirun 4.0.0b0, WRF-Fire 20170221, WRF 3.8.0, Wannier90 2.1.0, X11 20170314, XZ 5.2.2, xorg-macros 1.19.1, xproto 7.0.31, ZeroMQ 4.2.2, zlib 1.2.11, zlib 1.2.11 - various enhancements, including: - sync Bowtie2 easyconfigs, consistently use Bowtie2 easyblock (#4380) - use pl2 source tarball for FFTW 3.3.6 which already includes patch for F03 interface (#4529) -- GitLab From 64164034dc03ed67cc9cf24fef855d8a71878eb3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 4 May 2017 09:35:28 +0200 Subject: [PATCH 1030/1311] add comment on Python as build dep for nodejs --- easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb b/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb index 65377857a3..b02123940f 100644 --- a/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb +++ b/easybuild/easyconfigs/n/nodejs/nodejs-6.10.3-foss-2017a.eb @@ -16,6 +16,7 @@ toolchainopts = {'lowopt': True} source_urls = ['http://nodejs.org/dist/v%(version)s/'] sources = ['node-v%(version)s.tar.gz'] +# Python is required (only) as build dependency allow_system_deps = [('Python', SYS_PYTHON_VERSION)] sanity_check_paths = { -- GitLab From c673a9aa8a3d703806f3201b950947d051eba7c5 Mon Sep 17 00:00:00 2001 From: iotaka Date: Thu, 4 May 2017 15:51:53 +0200 Subject: [PATCH 1031/1311] adding easyconfigs: git-2.12.2-foss-2016b.eb --- .../g/git/git-2.12.2-foss-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/g/git/git-2.12.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/git/git-2.12.2-foss-2016b.eb b/easybuild/easyconfigs/g/git/git-2.12.2-foss-2016b.eb new file mode 100644 index 0000000000..4708565849 --- /dev/null +++ b/easybuild/easyconfigs/g/git/git-2.12.2-foss-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'git' +version = '2.12.2' + +homepage = 'http://git-scm.com/' +description = """Git is a free and open source distributed version control system designed +to handle everything from small to very large projects with speed and efficiency.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/git/git/archive'] + +dependencies = [ + ('cURL', '7.49.1'), + ('expat', '2.2.0'), + ('gettext', '0.19.8'), + ('Perl', '5.24.0', '-bare'), +] + +preconfigopts = 'make configure && ' + +# Work around git build system bug. If LIBS contains -lpthread, then configure +# will not append -lpthread to LDFLAGS, but Makefile ignores LIBS. +configopts = "--with-perl=${EBROOTPERL}/bin/perl --enable-pthreads='-lpthread'" + +sanity_check_paths = { + 'files': ['bin/git'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From c1912bd137f0ca05f1a33357f119144fe79d8a0e Mon Sep 17 00:00:00 2001 From: Damian Alvarez Date: Thu, 4 May 2017 16:17:20 +0200 Subject: [PATCH 1032/1311] Added memkind --- .../Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb | 26 ++++++++++++++ .../m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb | 34 +++++++++++++++++++ easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb | 25 ++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb diff --git a/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..c94e4b8ac3 --- /dev/null +++ b/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = "Coreutils" +version = "8.27" + +homepage = 'http://www.gnu.org/software/coreutils/' +description = """The GNU Core Utilities are the basic file, shell and text manipulation utilities of the + GNU operating system. These are the core utilities which are expected to exist on every operating system. + + Contact: sc@fz-juelich.de +""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +builddependencies = [('binutils', '2.26')] + +sanity_check_paths = { + 'files': ['bin/sort', 'bin/echo', 'bin/du', 'bin/date', 'bin/true'], + 'dirs': [] +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..30d25870f8 --- /dev/null +++ b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'memkind' +version = '1.5.0' + +homepage = 'http://memkind.github.io' +description = """User Extensible Heap Manager built on top of jemalloc which enables control of memory characteristics +and a partitioning of the heap between kinds of memory. + + Contact: sc@fz-juelich.de +""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/memkind/memkind/archive/'] +sources = ['v%(version)s.tar.gz'] + +builddependencies = [ + ('binutils', '2.26'), + ('Coreutils', '8.27'), # needed to ensure that ./build_jemalloc.sh works properly + ('Autotools', '20150215'), # needed to ensure that ./build_jemalloc.sh works properly +] + +dependencies = [ + ('tbb', '2017.4.174', '', True), # optional, to enable the tbb heap manager +] + +# This can be also an EB dependency, but seems unnecesary +osdependencies = [('numactl-devel', 'libnuma-devel ')] + +preconfigopts = './build_jemalloc.sh && ./autogen.sh && ' + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb new file mode 100644 index 0000000000..54c9706aa0 --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb @@ -0,0 +1,25 @@ +name = 'tbb' +version = '2017.4.174' + +homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' +description = """Intel Threading Building Blocks 4.0 (Intel TBB) + is a widely used, award-winning C++ template library for creating reliable, + portable, and scalable parallel applications. + Use Intel TBB for a simple and rapid way of developing robust task-based + parallel applications that scale to available processor cores, are compatible + with multiple environments, and are easier to maintain. + Intel TBB is the most proficient way to implement future-proof parallel applications + that tap into the power and performance of multicore and manycore hardware platforms. + + Contact: sc@fz-juelich.de +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['l_tbb_%(version)s.tgz'] + +requires_runtime_license = False + +dontcreateinstalldir = True + +moduleclass = 'lib' -- GitLab From c183a7c624985aadebe8e70291df64825a2aaf72 Mon Sep 17 00:00:00 2001 From: Damian Alvarez Date: Thu, 4 May 2017 16:19:51 +0200 Subject: [PATCH 1033/1311] Removed contact info --- .../easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb | 2 -- easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb | 2 -- easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb | 2 -- 3 files changed, 6 deletions(-) diff --git a/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb index c94e4b8ac3..e47ad52ac4 100644 --- a/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/c/Coreutils/Coreutils-8.27-GCCcore-5.4.0.eb @@ -6,8 +6,6 @@ version = "8.27" homepage = 'http://www.gnu.org/software/coreutils/' description = """The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system. - - Contact: sc@fz-juelich.de """ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} diff --git a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb index 30d25870f8..5522bebb7b 100644 --- a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb @@ -6,8 +6,6 @@ version = '1.5.0' homepage = 'http://memkind.github.io' description = """User Extensible Heap Manager built on top of jemalloc which enables control of memory characteristics and a partitioning of the heap between kinds of memory. - - Contact: sc@fz-juelich.de """ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb index 54c9706aa0..925ecf0fc9 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb @@ -10,8 +10,6 @@ description = """Intel Threading Building Blocks 4.0 (Intel TBB) with multiple environments, and are easier to maintain. Intel TBB is the most proficient way to implement future-proof parallel applications that tap into the power and performance of multicore and manycore hardware platforms. - - Contact: sc@fz-juelich.de """ toolchain = {'name': 'dummy', 'version': 'dummy'} -- GitLab From 27e05e5536c1a9366d61d1ed9487ad36f7e11df1 Mon Sep 17 00:00:00 2001 From: jrbosch Date: Thu, 4 May 2017 16:26:44 -0400 Subject: [PATCH 1034/1311] add easyconfig x265-2.4-foss-2016b.eb --- .../easyconfigs/x/x265/x265-2.4-foss-2016b.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb b/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb new file mode 100644 index 0000000000..d0b1d74b60 --- /dev/null +++ b/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb @@ -0,0 +1,29 @@ +easyblock = 'CMakeMake' + +name = 'x265' +version = '2.4' + +homepage = 'http://x265.org/' +description = """x265 is a free software library and application for encoding video streams into the H.265 + AVC compression format, and is released under the terms of the GNU GPL.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://ftp.videolan.org/pub/videolan/x265/', + 'http://download.videolan.org/pub/videolan/x265/', +] +sources = ['%(name)s_%(version)s.tar.gz'] + +dependencies = [('Yasm', '1.3.0')] + +builddependencies = [('CMake', '3.7.2')] + +start_dir = 'source' + +sanity_check_paths = { + 'files': ['bin/x265', 'include/x265_config.h', 'include/x265.h', 'lib/libx265.a', 'lib/libx265.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'vis' -- GitLab From 26710fc9b17f4bbed3ad2f9de260e16ca650da40 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 4 May 2017 22:34:40 +0200 Subject: [PATCH 1035/1311] bump version to 3.2.0 + tweak release notes --- RELEASE_NOTES | 18 ++++++++++-------- setup.py | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index f2fbd7d51c..d67162b731 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,34 +3,36 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,718 easyconfig files, for 1,182 different software packages, +The latest version of easybuild-easyconfig provides 6,943 easyconfig files, for 1,216 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. v3.2.0 (May 5th 2017) --------------------- feature release -- added example easyconfig files for 33 new software packages: +- added example easyconfig files for 34 new software packages: - ACTC (#4386), atomate (#4484), BreakDancer (#4455), bx-python (#4486), ClusterShell (#4432), custodian (#4484), DFTB+ (#4398), Doris (#4404), ED2 (#4402), FireWorks (#4484), GETORB (#4414), GapFiller (#4462), IPy (#4450), - imbalanced-learn (#4373), ipyrad (#4507), libiconv (#4499), MultiQC (#3564), NLopt (#1750), PyCUDA (#4523), - pymatgen-db (#4484), QuTiP (#4371), ROI_PAC (#4414), Rascaf (#4459), RepastHPC (#4395), rootpy (#4242), - SSPACE_Basic (#4461), Sambamba (#4442), Spack (#4431), SpiceyPy (#4406), StaMPS (#4454), samblaster (#4435), - VMD (#4391), WRF-Fire (#4403) + imbalanced-learn (#4373), ipyrad (#4507), libiconv (#4499), MultiQC (#3564), NLopt (#1750), Node-RED (#4542), + PyCUDA (#4523), pymatgen-db (#4484), QuTiP (#4371), ROI_PAC (#4414), Rascaf (#4459), RepastHPC (#4395), + rootpy (#4242), SSPACE_Basic (#4461), Sambamba (#4442), Spack (#4431), SpiceyPy (#4406), StaMPS (#4454), + samblaster (#4435), VMD (#4391), WRF-Fire (#4403) - added additional easyconfigs for various supported software packages, including: - - 3to2 1.1.1, ACTC 1.1, ALLPATHS-LG 52488, Autoconf 2.69, Autoconf 2.69, Automake 1.15, Automake 1.15, Autotools 20150215, Autotools 20150215, arpack-ng 3.4.0, atomate 0.4.4, BLAT 3.5, BamTools 2.4.1, BioKanga 4.3.4, BioKanga 4.3.5, BioPerl 1.7.1, Bison 3.0.4, Boost 1.63.0, Boost 1.64.0, Bowtie2 2.2.9, BreakDancer 1.4.5, binutils 2.28, bx-python , bzip2 1.0.6, CMake 3.8.0, CUDA 8.0.61.eb, Cantera 2.3.0, ClusterShell 1.7.3.eb, cURL 7.53.1, cURL 7.54.0, cairo 1.14.8, configparser 3.5.0, cuDNN 6.0, custodian 1.1.0, DBG2OLC 20170208, DFTB+ 1.3.1, Doris 4.02, Doxygen 1.8.13, deap 0.9.2, ED2 20170201, ED2 20170201, ESMF 6.3.0rp1, EasyBuild 3.1.2.eb, Eigen 3.3.2, entrypoints 0.2.2, FFTW 3.3.6, FireWorks 1.4.2, file 5.30, flex 2.6.3, fmt 3.0.1, fontconfig 2.12.1, fqtrim 0.9.5, freetype 2.5.5, freetype 2.6.2, freetype 2.7.1, freetype 2.7.1, GCC 6.3.0, GCC 7.1.0, GCCcore 7.1.0.eb, GDAL 2.1.3, GEOS 3.6.1, GETORB 2.3.2, GLib 2.52.0, GMP 6.1.2, GSL 2.3, GapFiller 2.1.1, Ghostscript 9.21, Go 1.8.1.eb, g2clib 1.6.0, g2lib 1.4.0, gnuplot 5.0.5, googletest 1.8.0, HDF 4.2.12, HDF5 1.10.0, HISAT2 2.0.5, HMMER 3.1b2, h5py 2.7.0, h5py 2.7.0, help2man 1.47.4, hwloc 1.11.6, IMB 4.1, IMB 4.1, IMB 4.1, IPy 0.83.eb, IPython 5.3.0, ImageMagick 7.0.5, Inspector 2017_update2.eb, imbalanced-learn 0.2.1, ipyrad 0.6.15, JasPer 1.900.1, JasPer 2.0.12, jemalloc 4.5.0, LIBSVM 3.22, LLVM 4.0.0, LZO 2.10, LibTIFF 4.0.7, LittleCMS 2.8, libGLU 9.0.0, libdrm 2.4.76, libiconv 1.15, libjpeg-turbo 1.5.1, libpng 1.6.18, libpng 1.6.21, libpng 1.6.28, libpng 1.6.29, libreadline 7.0, libsodium 1.0.12, libtool 2.4.6, libtool 2.4.6, libxml2 2.9.4, libyaml 0.1.7.eb, M4 1.4.18, METIS 5.1.0, MRtrix 0.3.15, Mako 1.0.6, Mesa 17.0.2, MultiQC 0.7, MultiQC 0.9, makedepend 1.0.5, matplotlib 1.5.1, matplotlib 2.0.0, matplotlib 2.0.0, NASM 2.12.02, NGS 1.3.0, NLopt 2.4.2, NLopt 2.4.2, ncbi-vdb 2.8.2, ncurses 6.0, netCDF-C++4 4.3.0, netCDF-Fortran 4.4.4, netCDF 4.4.1.1, nettle 3.3, numba 0.32.0, numpy 1.10.1, numpy 1.12.1, ORCA 4.0.0.2, Octave 4.2.1, OpenMPI 2.1.0, OpenPGM 5.2.122, PCRE 8.40, PETSc 3.7.5, PGI 17.3, PLINK 1.9b_4.1, PROJ 4.9.3, ParMETIS 4.0.3, Perl 5.24.1, Pillow 4.1.0, PyCUDA 2016.1.2, PyYAML 3.12, PyYAML 3.12.eb, PyZMQ 16.0.2, Python 2.7.13, Python 3.6.1, pixman 0.34.0, pkg-config 0.29.2, pkgconfig 1.2.2, pymatgen-db 0.6.5, pymatgen 4.7.3, QuTiP 4.1.0, QuantumESPRESSO 6.1, R 3.3.3, R 3.3.3, ROI_PAC 3.0.1, Rascaf 1.0.2, RepastHPC 2.2.0, rootpy 0.8.0, SAMtools 0.1.20, SAMtools 1.4, SAMtools 1.4, SCons 2.5.1, SIONlib 1.7.1, SIONlib 1.7.1, SQLite 3.17.0, SSPACE_Basic 2.1.1, SUNDIALS 2.7.0, SWASH 3.14, SWASH 3.14, SWIG 3.0.12, Sambamba 0.6.6.eb, Seaborn 0.7.1, Spack 0.10.0.eb, SpiceyPy 1.1.0, StaMPS 3.3b1, Stacks 1.45, Stacks 1.46, Stampy 1.0.31, SuiteSparse 4.5.5, SuiteSparse 4.5.5, Szip 2.1, samblaster 0.1.24, scipy 0.19.0, scp 0.10.2, snaphu 1.4.2, sparsehash 2.0.3, spglib-python 1.9.9.38, Tcl 8.6.6, Tk 8.6.6, Triangle 1.6, tbb 2017_U5, tbb 2017_U5, tcsh 6.20.00, UDUNITS 2.2.24, util linux, VMD 1.9.3, VTune 2017_update2.eb, ViennaRNA 2.3.5, vsc-base 2.5.8, vsc-install 0.10.25, vsc-mympirun 4.0.0b0, WRF-Fire 20170221, WRF 3.8.0, Wannier90 2.1.0, X11 20170314, XZ 5.2.2, xorg-macros 1.19.1, xproto 7.0.31, ZeroMQ 4.2.2, zlib 1.2.11, zlib 1.2.11 + - BamTools 2.4.1, Boost 1.64.0, GCC 7.1.0, IPython 5.3.0, LLVM 4.0.0, Mesa 17.0.2, Octave 4.2.1, OpenMPI 2.1.0, + PETSc 3.7.5, PGI 17.3, Perl 5.24.1, Python 2.7.13 + 3.6.1 (incl. numpy 1.12.1, scipy 0.19.0), R 3.3.3, SuiteSparse 4.5.5 - various enhancements, including: - sync Bowtie2 easyconfigs, consistently use Bowtie2 easyblock (#4380) - use pl2 source tarball for FFTW 3.3.6 which already includes patch for F03 interface (#4529) - various bug fixes, including: - add missing XZ dep in easyconfig for libunwind 1.1 w/ GCC/4.9.2, sync sanity_check_paths across libunwind easyconfigs (#4369) - use 'use_fma4' rather than deprecated 'use_fma' easyconfig parameter in FFTW easyconfigs using intel toolchain (#4384) - - fix pkgconfig patch for Qhull to only let CMake substitute (#4451) + - fix pkgconfig patch for Qhull (#4451) - also use patch for METIS 5.1.0 to enable use of doubles in easyconfig for foss/2016b (#4467) - add dependency NLopt for R extension nloptr (#4481) - fix issue with configparser and backports namespace blocking inclusion of nbconvert with IPython (#4504) - change source_urls of pycrypto to encrypted https://pypi.python.org/... (#4505) - fix sources spec for HMMER 3.1b2 + minor style fixes + better sanity check (#4531) + - also build IMB-IO in IMB 4.1 easyconfig using foss/2016a (#4539) v3.1.2 (March 20th 2017) diff --git a/setup.py b/setup.py index 0683e432c9..40e8813698 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.2.0.dev0' +VERSION = '3.2.0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 79ac6ae1634c2272cc3f821d2f56ee53ee6d67ee Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 5 May 2017 16:10:45 +0200 Subject: [PATCH 1036/1311] Bump all to CMake 3.8.0 --- .../CGAL-4.9-intel-2017a-Python-2.7.13.eb | 2 +- .../c/CMake/CMake-3.7.2-intel-2017a.eb | 31 ------------------- .../m/METIS/METIS-5.1.0-intel-2017a.eb | 2 +- .../ParaView-5.2.0-intel-2017a-mpi.eb | 2 +- 4 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb index da60ff72f0..e83b067d66 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.9-intel-2017a-Python-2.7.13.eb @@ -23,7 +23,7 @@ dependencies = [ ] builddependencies = [ - ('CMake', '3.7.2'), + ('CMake', '3.8.0'), ('Eigen', '3.3.3'), ] diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb b/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb deleted file mode 100644 index d78b6b43f1..0000000000 --- a/easybuild/easyconfigs/c/CMake/CMake-3.7.2-intel-2017a.eb +++ /dev/null @@ -1,31 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'CMake' -version = '3.7.2' - -homepage = 'http://www.cmake.org' -description = """CMake, the cross-platform, open-source build system. - CMake is a family of tools designed to build, test and package software.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] -sources = [SOURCELOWER_TAR_GZ] - -configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' - -dependencies = [ - ('ncurses', '6.0'), - # OS dependency should be preferred if the os version is more recent then this version, - # it's nice to have an up to date openssl for security reasons - # ('OpenSSL', '1.0.2j'), -] - -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] - -sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], - 'dirs': [], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb index 352a974db9..91d00f1139 100644 --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-intel-2017a.eb @@ -18,7 +18,7 @@ source_urls = [ # We use 32bit for indices and 64bit for content patches = ['METIS-5.1.0-use-doubles.patch'] -builddependencies = [('CMake', '3.7.2')] +builddependencies = [('CMake', '3.8.0')] configopts = ['', 'shared=1'] diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb index 903174f12f..8746599786 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-intel-2017a-mpi.eb @@ -24,7 +24,7 @@ dependencies = [ ('Python', '2.7.13'), ] -builddependencies = [('CMake', '3.7.2')] +builddependencies = [('CMake', '3.8.0')] separate_build_dir = True -- GitLab From 946baf954570a740f5d87d4161d1d75b0bf27b3d Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 5 May 2017 16:11:55 +0200 Subject: [PATCH 1037/1311] Bump CMake in OpenFOAM too to 3.8.0 --- easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb index 2469f2947a..c3f3f806f9 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-intel-2017a.eb @@ -29,7 +29,7 @@ dependencies = [ builddependencies = [ ('Bison', '3.0.4'), - ('CMake', '3.7.2'), + ('CMake', '3.8.0'), ('flex', '2.6.3'), ] -- GitLab From fcc2fe709d80ba7fe6a6a2d350398621c54022c7 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 5 May 2017 16:19:50 +0200 Subject: [PATCH 1038/1311] Drop old comment --- easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb index fc41f1c1fd..ab4ae0dab8 100644 --- a/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb +++ b/easybuild/easyconfigs/q/Qt5/Qt5-5.8.0-intel-2017a.eb @@ -26,7 +26,7 @@ configopts = '-skip qtgamepad' dependencies = [ ('GLib', '2.52.0'), ('libpng', '1.6.29'), - ('X11', '20170314'), #, '', ('GCCcore', '6.3.0')), + ('X11', '20170314'), ('libGLU', '9.0.0'), ] -- GitLab From 94fab13de92516a969d7a43238c3571870007b1e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 5 May 2017 17:29:28 +0200 Subject: [PATCH 1039/1311] adding easyconfigs: EasyBuild-3.2.0.eb --- .../e/EasyBuild/EasyBuild-3.2.0.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.0.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.0.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.0.eb new file mode 100644 index 0000000000..d84e16eaba --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.0.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.2.0' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/82/ec/19d85d2bb91b562195d00db9ac82d7529904e7eabc0597720966bf74714f/', + # vsc-base + 'https://pypi.python.org/packages/f7/66/1ff7ecc4a93ba37e063f5bfbe395e95a547b1dec73b017c2724f4475a958/', + # easybuild-framework + 'https://pypi.python.org/packages/2c/39/4435097a0b897ca1e3c7f055000ebfa2a5dc3632e606a7cf0088b0caa2ee/', + # easybuild-easyblocks + 'https://pypi.python.org/packages/ce/49/70a1d3f419ffb21dc3a3446bdf63d2a49447753fa4e69ec0a3db5a262e67/', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/97/59/b8d166b270f113ae69b0983275dac5da5bfb94bb1082a10bb26e93c78ed7/', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.26.tar.gz', + 'vsc-base-2.5.8.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From b1d56530a5bae608a28c907a43792ed3c9f85ea6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 5 May 2017 17:58:30 +0200 Subject: [PATCH 1040/1311] bump to v3.3.0.dev0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 40e8813698..85590c2983 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.2.0' +VERSION = '3.3.0.dev0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From 2a8958f86f854c0523d195c3bf3a34edb6615ef6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 7 May 2017 22:26:00 +0200 Subject: [PATCH 1041/1311] adding easyconfigs: OpenFOAM-2.2.2-intel-2017a.eb, flex-2.5.39-GCCcore-6.3.0.eb --- .../f/flex/flex-2.5.39-GCCcore-6.3.0.eb | 22 +++++++++++ .../o/OpenFOAM/OpenFOAM-2.2.2-intel-2017a.eb | 39 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 easybuild/easyconfigs/f/flex/flex-2.5.39-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.2.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/flex/flex-2.5.39-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/flex/flex-2.5.39-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..f579ff8a96 --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.5.39-GCCcore-6.3.0.eb @@ -0,0 +1,22 @@ +name = 'flex' +version = '2.5.39' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +checksums = [ + 'e133e9ead8ec0a58d81166b461244fde', # flex-2.5.39.tar.gz +] + +dependencies = [('M4', '1.4.18')] +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.27', '', True)] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.2.2-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.2.2-intel-2017a.eb new file mode 100644 index 0000000000..7d4fcb2a52 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.2.2-intel-2017a.eb @@ -0,0 +1,39 @@ +name = 'OpenFOAM' +version = '2.2.2' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://downloads.sourceforge.net/foam/%(version)s'] +sources = [ + SOURCE_TGZ, + 'ThirdParty-%(version)s.tgz', +] + +patches = [ + 'cleanup-OpenFOAM-%(version)s.patch', + 'OpenFOAM-2.2.0_libreadline.patch', + ('cleanup-ThirdParty-%(version)s.patch', ".."), # patch should not be applied in OpenFOAM subdir +] + +dependencies = [ + ('libreadline', '6.3'), + ('METIS', '5.1.0'), + ('ncurses', '6.0'), + ('SCOTCH', '6.0.4'), + ('Boost', '1.64.0'), +] + + +builddependencies = [ + ('flex', '2.5.39'), + ('Bison', '3.0.4'), + ('CMake', '3.8.0'), +] + +moduleclass = 'cae' -- GitLab From 0fee12a842bff40dfac37d47d96db9e9137ffb2c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 7 May 2017 22:28:24 +0200 Subject: [PATCH 1042/1311] adding easyconfigs: OpenFOAM-2.3.1-intel-2017a.eb --- .../o/OpenFOAM/OpenFOAM-2.3.1-intel-2017a.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.3.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.3.1-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.3.1-intel-2017a.eb new file mode 100644 index 0000000000..22826bc9df --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.3.1-intel-2017a.eb @@ -0,0 +1,44 @@ +name = 'OpenFOAM' +version = '2.3.1' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://downloads.sourceforge.net/foam/%(version)s'] +sources = [ + SOURCE_TGZ, + 'ThirdParty-%(version)s.tgz', +] + +patches = [ + 'OpenFOAM-%(version)s_cleanup.patch', + 'OpenFOAM-2.3.0_libreadline.patch', + ('ThirdParty-%(version)s_cleanup.patch', ".."), # patch should not be applied in OpenFOAM subdir +] + +# fix for cyclic symlink issue, which may cause unpacking to fail +# see also http://www.openfoam.org/mantisbt/view.php?id=1191 +# fixed in recent versions: https://github.com/OpenFOAM/OpenFOAM-2.3.x/commit/f7a485069c778495cc39b308580289f6c2d47163 +unpack_options = "--exclude=*tutorials/mesh/foamyHexMesh/mixerVessel/system/backgroundMeshDecomposition" +unpack_options += " --exclude=*tutorials/mesh/foamyHexMesh/mixerVessel/system/cellShapeControlMesh" + +dependencies = [ + ('libreadline', '6.3'), + ('METIS', '5.1.0'), + ('ncurses', '6.0'), + ('SCOTCH', '6.0.4'), + ('Boost', '1.64.0'), +] + +builddependencies = [ + ('flex', '2.5.39'), + ('Bison', '3.0.4'), + ('CMake', '3.8.0'), +] + +moduleclass = 'cae' -- GitLab From d3563b795447df65ba2eaaf239c0f332589a3c50 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 7 May 2017 22:29:03 +0200 Subject: [PATCH 1043/1311] adding easyconfigs: OpenFOAM-2.4.0-intel-2017a.eb --- .../o/OpenFOAM/OpenFOAM-2.4.0-intel-2017a.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.4.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.4.0-intel-2017a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.4.0-intel-2017a.eb new file mode 100644 index 0000000000..dd2ccbb6b7 --- /dev/null +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-2.4.0-intel-2017a.eb @@ -0,0 +1,38 @@ +name = 'OpenFOAM' +version = '2.4.0' + +homepage = 'http://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://downloads.sourceforge.net/foam/%(version)s'] +sources = [ + SOURCE_TGZ, + 'ThirdParty-%(version)s.tgz', +] + +patches = [ + 'OpenFOAM-%(version)s_cleanup.patch', + 'OpenFOAM-2.3.0_libreadline.patch', + ('ThirdParty-%(version)s_cleanup.patch', ".."), # patch should not be applied in OpenFOAM subdir +] + +dependencies = [ + ('libreadline', '6.3'), + ('METIS', '5.1.0'), + ('ncurses', '6.0'), + ('SCOTCH', '6.0.4'), + ('Boost', '1.64.0'), +] + +builddependencies = [ + ('flex', '2.5.39'), + ('Bison', '3.0.4'), + ('CMake', '3.8.0'), +] + +moduleclass = 'cae' -- GitLab From 8d7635554191701bb4b415e9a5fce845e981f221 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 8 May 2017 09:52:09 +0200 Subject: [PATCH 1044/1311] adding easyconfigs: ASE-3.13.0-intel-2017a-Python-2.7.13.eb --- .../ASE-3.13.0-intel-2017a-Python-2.7.13.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/a/ASE/ASE-3.13.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/a/ASE/ASE-3.13.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/a/ASE/ASE-3.13.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..046d2d02c9 --- /dev/null +++ b/easybuild/easyconfigs/a/ASE/ASE-3.13.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'ASE' +version = '3.13.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://wiki.fysik.dtu.dk/ase/' +description = """ASE is a python package providing an open source Atomic Simulation Environment + in the Python scripting language.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), +] + +sanity_check_paths = { + 'files': ['bin/ase-build', 'bin/ase-db', 'bin/ase-gui', 'bin/ase-info', 'bin/ase-run'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'chem' -- GitLab From d3dd9379507508f02b36714605f0a22ae9bc187d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 8 May 2017 10:16:35 +0200 Subject: [PATCH 1045/1311] adding easyconfigs: hanythingondemand-3.2.2-cli.eb, hanythingondemand-3.2.2-intel-2016b-Python-2.7.12.eb --- .../hanythingondemand-3.2.2-cli.eb | 42 +++++++++++++++++++ ...ndemand-3.2.2-intel-2016b-Python-2.7.12.eb | 30 +++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-cli.eb create mode 100644 easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-cli.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-cli.eb new file mode 100644 index 0000000000..5c43bd66c7 --- /dev/null +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-cli.eb @@ -0,0 +1,42 @@ +easyblock = 'PythonPackage' + +name = 'hanythingondemand' +version = '3.2.2' +versionsuffix = '-cli' + +homepage = 'https://github.com/hpcugent/hanythingondemand' +description = """HanythingOnDemand (HOD) is a system for provisioning virtual Hadoop clusters over a large physical cluster. +It uses the Torque resource manager to do node allocation.""" + +toolchain = {'name': 'dummy', 'version': ''} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# minimal version for interactive use: just uses system Python (netaddr/netifaces/mpi4py not required) +dependencies = [ + ('pbs_python', '4.6.0'), + ('vsc-base', '2.5.8'), +] + +use_easy_install = True +zipped_egg = True + +# use 'hod' rather than 'hanythingondemand' in module name +modaltsoftname = 'hod' + +options = {'modulename': 'hod'} + +modextravars = { + # site-specific settings, hence commented out + # specify HOD module to use in jobs (*full* HOD installation, not a minimal one) + # 'HOD_BATCH_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # 'HOD_CREATE_HOD_MODULE': 'hanythingondemand/%(version)s-intel-2016b-Python-2.7.12', + # specify location on shared 'scratch' filesystem for HOD working directories + # 'HOD_BATCH_WORKDIR': '\$VSC_SCRATCH/hod', + # 'HOD_CREATE_WORKDIR': '\$VSC_SCRATCH/hod', +} + +sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..ef65fdbca6 --- /dev/null +++ b/easybuild/easyconfigs/h/hanythingondemand/hanythingondemand-3.2.2-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'hanythingondemand' +version = '3.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/hpcugent/hanythingondemand' +description = """HanythingOnDemand (HOD) is a system for provisioning virtual Hadoop clusters over a large physical cluster. +It uses the Torque resource manager to do node allocation.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# a Python version with netaddr/netifaces/mpi4py + pbs_python and vsc-base/vsc-mympirun is required at runtime +dependencies = [ + ('Python', '2.7.12'), # provides netaddr, netifaces, mpi4py + ('pbs_python', '4.6.0', versionsuffix), + ('vsc-mympirun', '3.4.3', versionsuffix), +] + +use_easy_install = True +zipped_egg = True + +options = {'modulename': 'hod'} + +sanity_check_commands = [('hod', '--help'), ('hod', 'dists')] + +moduleclass = 'tools' -- GitLab From ee456a43f1d3f473ea3dcd590add6e5b5193aecc Mon Sep 17 00:00:00 2001 From: iotaka Date: Mon, 8 May 2017 11:04:19 +0200 Subject: [PATCH 1046/1311] Update OpenFOAM-4.1-foss-2016b.eb --- easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb index efc992104f..eea7c1b416 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-4.1-foss-2016b.eb @@ -24,7 +24,7 @@ dependencies = [ ('METIS', '5.1.0'), ('SCOTCH', '6.0.4'), ('CGAL', '4.8.1'), - ('ParaView', '5.1.2', '-mpi'), + ('ParaView', '5.2.0', '-mpi'), ] builddependencies = [ -- GitLab From bd572560993ad8dfd0fba752371b66d459df4116 Mon Sep 17 00:00:00 2001 From: iotaka Date: Mon, 8 May 2017 11:05:32 +0200 Subject: [PATCH 1047/1311] Update ParaView-5.2.0-foss-2016b-mpi.eb --- .../easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb index 5dd45f28db..d4515369c6 100644 --- a/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb +++ b/easybuild/easyconfigs/p/ParaView/ParaView-5.2.0-foss-2016b-mpi.eb @@ -33,6 +33,7 @@ configopts += '-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DOPENGL_gl_LIBRARY=$EBR configopts += '-DOSMESA_INCLUDE_DIR=$EBROOTMESA/include -DOSMESA_LIBRARY=$EBROOTMESA/lib/libOSMesa.%s ' % SHLIB_EXT configopts += '-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s ' % SHLIB_EXT configopts += '-DVTK_USE_SYSTEM_HDF5=ON -DPARAVIEW_ENABLE_PYTHON=ON -DBUILD_SHARED_LIBS=ON ' +configopts += '-DPARAVIEW_QT_VERSION=4 -DQT_QMAKE_EXECUTABLE=$EBROOTQT/bin/qmake ' # if you want to build server only Paraview, uncomment the following line: # configopts += '-DVTK_USE_X=OFF ' -- GitLab From acb79d1e16b4eb7312bbda5353605e53a86bd33c Mon Sep 17 00:00:00 2001 From: Damian Alvarez Date: Mon, 8 May 2017 12:00:47 +0200 Subject: [PATCH 1048/1311] Added tbb open source and numactl as dependencies for memkind --- .../m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb | 11 +++++++---- .../t/tbb/tbb-2017_U5-GCCcore-5.4.0.eb | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017_U5-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb index 5522bebb7b..6a31d17221 100644 --- a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb @@ -21,12 +21,15 @@ builddependencies = [ ] dependencies = [ - ('tbb', '2017.4.174', '', True), # optional, to enable the tbb heap manager + ('tbb', '2017_U5'), # optional, to enable the tbb heap manager + ('numactl', '2.0.11') ] -# This can be also an EB dependency, but seems unnecesary -osdependencies = [('numactl-devel', 'libnuma-devel ')] - preconfigopts = './build_jemalloc.sh && ./autogen.sh && ' +sanity_check_paths = { + 'files': ["include/memkind.h", "lib/libmemkind.%s" % SHLIB_EXT], + 'dirs': [], +} + moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017_U5-GCCcore-5.4.0.eb b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..0e4e8f19f1 --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017_U5-GCCcore-5.4.0.eb @@ -0,0 +1,17 @@ +name = 'tbb' +version = '2017_U5' + +homepage = 'https://01.org/tbb/' +description = """Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that + take full advantage of multicore performance, that are portable, composable and have future-proof scalability.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = ['https://github.com/01org/tbb/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [ + ('binutils', '2.26') +] + +moduleclass = 'lib' -- GitLab From 3afbfc7bec4adf121f4e597a3f3d5e2a69d2b449 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 9 May 2017 09:28:23 +0200 Subject: [PATCH 1049/1311] updated --- .../easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb | 4 ++++ .../SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb | 10 ++++++---- .../SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb | 9 +++++---- 3 files changed, 15 insertions(+), 8 deletions(-) mode change 100755 => 100644 easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb mode change 100755 => 100644 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb old mode 100755 new mode 100644 index 03a730e5cc..24c6a9c29a --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb @@ -15,8 +15,12 @@ source_urls = [ 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', ] +#We use 32bit for indices and 64bit for content +patches = ['METIS-5.1.0-use-doubles.path'] + builddependencies = [('CMake', '3.8.0')] configopts = ['', 'shared=1'] moduleclass = 'math' + diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb old mode 100755 new mode 100644 index a66251bb0f..ac3303de2d --- a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb @@ -1,19 +1,21 @@ name = 'SuiteSparse' version = '4.5.5' -metis_ver = '5.1.0' -versionsuffix = '-METIS-%s' % metis_ver homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'opt': True, 'unroll': True, 'pic': True} +toolchainopts = {'unroll': True, 'pic': True} source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] sources = [SOURCE_TAR_GZ] -dependencies = [('METIS', metis_ver)] +metis = 'METIS' +metis_ver = '5.1.0' +versionsuffix = '-%s-%s' % (metis, metis_ver) +dependencies = [(metis, metis_ver)] maxparallel = 1 moduleclass = 'numlib' + diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb index 7c7dff3356..a24c57563a 100755 --- a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb @@ -1,18 +1,19 @@ name = 'SuiteSparse' version = '4.5.5' -parmetis_ver = '4.0.3' -versionsuffix = '-ParMETIS-%s' % parmetis_ver homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'opt': True, 'unroll': True, 'pic': True} +toolchainopts = {'unroll': True, 'pic': True} source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] sources = [SOURCE_TAR_GZ] -dependencies = [('ParMETIS', parmetis_ver)] +parmetis = 'ParMETIS' +parmetis_ver = '4.0.3' +versionsuffix = '-%s-%s' % (parmetis, parmetis_ver) +dependencies = [(parmetis, parmetis_ver)] maxparallel = 1 -- GitLab From a171247892a0d7a9b2082a7f6cd472ff99d74b8c Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 9 May 2017 09:40:54 +0200 Subject: [PATCH 1050/1311] missing files --- .../libpciaccess-0.13.1-goolf-1.4.10.eb | 4 +--- .../libpciaccess-0.13.1-ictce-4.0.6.eb | 24 +++++++++++++++++++ .../libpciaccess-0.13.1-ictce-4.1.13.eb | 24 +++++++++++++++++++ .../libpciaccess-0.13.1-ictce-5.3.0.eb | 4 +--- .../libpciaccess-0.13.1-ictce-5.5.0.eb | 4 +--- .../libpciaccess-0.13.1-intel-2015a.eb | 4 +--- .../libpciaccess-0.13.3-intel-2015a.eb | 4 +--- .../libpciaccess-0.13.4-gimkl-2.11.5.eb | 4 +--- .../libpciaccess-0.13.4-intel-2015b.eb | 4 +--- .../libpciaccess-0.13.4-intel-2016a.eb | 4 +--- 10 files changed, 56 insertions(+), 24 deletions(-) create mode 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb create mode 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb index 437954d342..9371a19f2d 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb @@ -6,7 +6,7 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'goolf', 'version': '1.4.10'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.17'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb new file mode 100644 index 0000000000..adbb940942 --- /dev/null +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libpciaccess' +version = '0.13.1' + +homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' +description = """Generic PCI access library.""" + +source_urls = ['https://www.x.org/releases/individual/lib/'] +sources = [SOURCE_TAR_GZ] + +toolchain = {'name': 'ictce', 'version': '4.0.6'} + +builddependencies = [ + ('Autoconf', '2.69'), + ('xorg-macros', '1.17'), +] + +sanity_check_paths = { + 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb new file mode 100644 index 0000000000..67891759ae --- /dev/null +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libpciaccess' +version = '0.13.1' + +homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' +description = """Generic PCI access library.""" + +source_urls = ['https://www.x.org/releases/individual/lib/'] +sources = [SOURCE_TAR_GZ] + +toolchain = {'name': 'ictce', 'version': '4.1.13'} + +builddependencies = [ + ('Autoconf', '2.69'), + ('xorg-macros', '1.17'), +] + +sanity_check_paths = { + 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb index 834a292992..cbc3f1b46c 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb @@ -6,7 +6,7 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'ictce', 'version': '5.3.0'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.17'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb index c3e51b6854..1abedab086 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb @@ -6,7 +6,7 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'ictce', 'version': '5.5.0'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.17'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb index 8f259d339a..8970daab0a 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb @@ -6,7 +6,7 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'intel', 'version': '2015a'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.17'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb index 5f22d77a36..a36467cdf5 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb @@ -6,7 +6,7 @@ version = '0.13.3' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'intel', 'version': '2015a'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb index ea05edcced..449c59f9bf 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'gimkl', 'version': '2.11.5'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb index 1af83efe66..fd0fe49af5 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'intel', 'version': '2015b'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb index c0a23d9702..69a705ef82 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'intel', 'version': '2016a'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], -- GitLab From c22ad8a61d53d5c2f32a5f02e6744227475d3416 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 09:46:50 +0200 Subject: [PATCH 1051/1311] don't re-add archived libpciaccess easyconfigs --- .../libpciaccess-0.13.1-ictce-4.0.6.eb | 24 ------------------- .../libpciaccess-0.13.1-ictce-4.1.13.eb | 24 ------------------- 2 files changed, 48 deletions(-) delete mode 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb delete mode 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb deleted file mode 100644 index adbb940942..0000000000 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.0.6.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'libpciaccess' -version = '0.13.1' - -homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' -description = """Generic PCI access library.""" - -source_urls = ['https://www.x.org/releases/individual/lib/'] -sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'ictce', 'version': '4.0.6'} - -builddependencies = [ - ('Autoconf', '2.69'), - ('xorg-macros', '1.17'), -] - -sanity_check_paths = { - 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], - 'dirs': ['lib/pkgconfig'], -} - -moduleclass = 'system' diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb deleted file mode 100644 index 67891759ae..0000000000 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-4.1.13.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'libpciaccess' -version = '0.13.1' - -homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' -description = """Generic PCI access library.""" - -source_urls = ['https://www.x.org/releases/individual/lib/'] -sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'ictce', 'version': '4.1.13'} - -builddependencies = [ - ('Autoconf', '2.69'), - ('xorg-macros', '1.17'), -] - -sanity_check_paths = { - 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], - 'dirs': ['lib/pkgconfig'], -} - -moduleclass = 'system' -- GitLab From 44b396a0cef6d3a4c19f55157e03ab3932b184bc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 09:48:20 +0200 Subject: [PATCH 1052/1311] consistent update of libpciaccess source URLs --- .../l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb | 4 +--- .../l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb | 4 +--- .../l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb index 01c9c7b5d7..9967c64c68 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb @@ -6,7 +6,7 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'GCC', 'version': '4.7.2'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.17'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb index 11ed8ea67d..76bd735f5a 100755 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'foss', 'version': '2016b'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb index 9124b553ab..de4d55b188 100755 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb @@ -6,7 +6,7 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" -source_urls = ['http://cgit.freedesktop.org/xorg/lib/libpciaccess/snapshot'] +source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] toolchain = {'name': 'intel', 'version': '2016b'} @@ -16,8 +16,6 @@ builddependencies = [ ('xorg-macros', '1.19.0'), ] -preconfigopts = "env ACLOCAL='aclocal -I $EBROOTXORGMINMACROS/share/aclocal' ./autogen.sh && " - sanity_check_paths = { 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], 'dirs': ['lib/pkgconfig'], -- GitLab From 3a215d2301ab7fa13a66b9899a3f3e02038d4413 Mon Sep 17 00:00:00 2001 From: iotaka Date: Tue, 9 May 2017 09:49:24 +0200 Subject: [PATCH 1053/1311] Update METIS-5.1.0-foss-2016a.eb --- easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016a.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016a.eb index 2b65f31212..728e632fc1 100644 --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016a.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2016a.eb @@ -15,6 +15,9 @@ source_urls = [ 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', ] +# We use 32bit for indices and 64bit for content +patches = ['METIS-5.1.0-use-doubles.patch'] + builddependencies = [('CMake', '3.4.3')] configopts = ['', 'shared=1'] -- GitLab From 5e3ebe055d256bd61a2683a4843ab65f80687aea Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Tue, 9 May 2017 09:59:39 +0200 Subject: [PATCH 1054/1311] updated usempi --- easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb index 6dd67416d3..b1ee1a4af9 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb @@ -7,7 +7,7 @@ description = """NAMD is a parallel molecular dynamics code designed for high-pe large biomolecular systems.""" toolchain = {'name': 'foss', 'version': '2017a'} -toolchainopts = {'opt': True, 'pic': True} +toolchainopts = {'usempi': True, 'pic': True} sources = ['NAMD_%(version)s_Source.tar.gz'] @@ -22,3 +22,4 @@ charm_arch = "mpi-linux-x86_64" moduleclass = 'chem' + -- GitLab From ed733c7284cfedc210d707cdf4990d9ea3ff7fa7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 10:34:00 +0200 Subject: [PATCH 1055/1311] adding easyconfigs: xarray-0.9.5-intel-2017a-Python-3.6.1.eb --- .../xarray-0.9.5-intel-2017a-Python-3.6.1.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..aba02b5499 --- /dev/null +++ b/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'xarray' +version = '0.9.5' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pydata/xarray' +description = """xarray (formerly xray) is an open source project and Python package that aims to bring + the labeled data power of pandas to the physical sciences, by providing N-dimensional variants of the + core pandas data structures.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '3.6.1')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'data' -- GitLab From 1721278ce3b16a5e15f737939f20588ea7dbcf64 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 11:02:07 +0200 Subject: [PATCH 1056/1311] adding easyconfigs: CMake-3.8.1-GCCcore-6.3.0.eb --- .../c/CMake/CMake-3.8.1-GCCcore-6.3.0.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.8.1-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.8.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.8.1-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..4eddbf2181 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.8.1-GCCcore-6.3.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.8.1' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 6493fbb9d6c7df667f875b49dbf17d1b72f4ce8c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 11:23:56 +0200 Subject: [PATCH 1057/1311] adding easyconfigs: googletest-1.8.0-intel-2017a.eb --- .../googletest-1.8.0-intel-2017a.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb new file mode 100644 index 0000000000..c0c3624868 --- /dev/null +++ b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'CMakeMake' + +name = 'googletest' +version = '1.8.0' + +homepage = 'https://github.com/google/googletest' +description = "Google's C++ test framework" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/google/googletest/archive/'] +sources = ['release-%(version)s.tar.gz'] + +builddependencies = [('CMake', '3.8.1')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['lib/libgmock.a', 'lib/libgmock_main.a', 'lib/libgtest.a', 'lib/libgtest_main.a'], + 'dirs': ['include/gmock', 'include/gtest'], +} + +moduleclass = 'tools' -- GitLab From cfb7d78f7f0e3039c1c367608fcf6e6527c5ff12 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 11:30:33 +0200 Subject: [PATCH 1058/1311] use GCCcore/6.3.0 toolchain for googletest --- ....0-intel-2017a.eb => googletest-1.8.0-GCCcore-6.3.0.eb} | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/g/googletest/{googletest-1.8.0-intel-2017a.eb => googletest-1.8.0-GCCcore-6.3.0.eb} (79%) diff --git a/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-GCCcore-6.3.0.eb similarity index 79% rename from easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb rename to easybuild/easyconfigs/g/googletest/googletest-1.8.0-GCCcore-6.3.0.eb index c0c3624868..a63352bc58 100644 --- a/easybuild/easyconfigs/g/googletest/googletest-1.8.0-intel-2017a.eb +++ b/easybuild/easyconfigs/g/googletest/googletest-1.8.0-GCCcore-6.3.0.eb @@ -6,12 +6,15 @@ version = '1.8.0' homepage = 'https://github.com/google/googletest' description = "Google's C++ test framework" -toolchain = {'name': 'intel', 'version': '2017a'} +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} source_urls = ['https://github.com/google/googletest/archive/'] sources = ['release-%(version)s.tar.gz'] -builddependencies = [('CMake', '3.8.1')] +builddependencies = [ + ('binutils', '2.27'), + ('CMake', '3.8.1'), +] separate_build_dir = True -- GitLab From 699236a4da05466e1bf6767f266408f08c5ee8b2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 12:43:20 +0200 Subject: [PATCH 1059/1311] adding easyconfigs: HDF5-1.10.1-intel-2017a.eb --- .../h/HDF5/HDF5-1.10.1-intel-2017a.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb new file mode 100644 index 0000000000..d72f14fe00 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb @@ -0,0 +1,22 @@ +name = 'HDF5' +version = '1.10.1' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['43a2f9466702fb1db31df98ae6677f15'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.11'), + ('Szip', '2.1'), +] + +moduleclass = 'data' -- GitLab From a7bf4c610f903ff28228d6b7ae027f8dea70ac93 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 9 May 2017 16:18:19 +0200 Subject: [PATCH 1060/1311] adding easyconfigs: Keras-2.0.4-intel-2017a-Python-3.6.1.eb, Theano-0.9.0-intel-2017a-Python-3.6.1.eb, h5py-2.7.0-intel-2017a-Python-3.6.1.eb, PyYAML-3.12-intel-2017a-Python-3.6.1.eb, pkgconfig-1.2.2-intel-2017a-Python-3.6.1.eb, nose-parameterized-0.6.0-intel-2017a-Python-3.6.1.eb --- .../h5py-2.7.0-intel-2017a-Python-3.6.1.eb | 32 +++++++++++++++++++ .../Keras-2.0.4-intel-2017a-Python-3.6.1.eb | 28 ++++++++++++++++ ...eterized-0.6.0-intel-2017a-Python-3.6.1.eb | 24 ++++++++++++++ .../PyYAML-3.12-intel-2017a-Python-3.6.1.eb | 27 ++++++++++++++++ ...kgconfig-1.2.2-intel-2017a-Python-3.6.1.eb | 26 +++++++++++++++ .../Theano-0.9.0-intel-2017a-Python-3.6.1.eb | 23 +++++++++++++ 6 files changed, 160 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/n/nose-parameterized/nose-parameterized-0.6.0-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..b00f2d835b --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'h5py' +version = '2.7.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.6.1'), + ('HDF5', '1.10.1'), + ('pkgconfig', '1.2.2', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..45f0be1e64 --- /dev/null +++ b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'Keras' +version = '2.0.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://keras.io/' +description = """Keras is a minimalist, highly modular neural networks library, written in Python and +capable of running on top of either TensorFlow or Theano.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('Theano', '0.9.0', versionsuffix), + ('h5py', '2.7.0', '%(versionsuffix)s'), + ('PyYAML', '3.12', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/n/nose-parameterized/nose-parameterized-0.6.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/n/nose-parameterized/nose-parameterized-0.6.0-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..7877603edb --- /dev/null +++ b/easybuild/easyconfigs/n/nose-parameterized/nose-parameterized-0.6.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'nose-parameterized' +version = '0.6.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'hmat://github.com/wolever/nose-parameterized' +description = """Parameterized testing with any Python test framework.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '3.6.1')] + +options = {'modulename': 'nose_parameterized'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..6ad31707a9 --- /dev/null +++ b/easybuild/easyconfigs/p/PyYAML/PyYAML-3.12-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'PyYAML' +version = '3.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/PyYAML/" +description = """PyYAML is a YAML parser and emitter for the Python programming language.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('libyaml', '0.1.7', '', True), +] + +options = {'modulename': 'yaml'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..5b31de03c1 --- /dev/null +++ b/easybuild/easyconfigs/p/pkgconfig/pkgconfig-1.2.2-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'pkgconfig' +version = '1.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://github.com/matze/pkgconfig' +description = """pkgconfig is a Python module to interface with the pkg-config command line tool""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('pkg-config', '0.29.2'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..3bd29d9876 --- /dev/null +++ b/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'Theano' +version = '0.9.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://deeplearning.net/software/theano' +description = """Theano is a Python library that allows you to define, optimize, +and evaluate mathematical expressions involving multi-dimensional arrays efficiently.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '3.6.1')] + +sanity_check_paths = { + 'files': ['bin/theano-cache', 'bin/theano-nose'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' -- GitLab From 0b5e6f8788f525168634c28e81bb9ac25fe17f7d Mon Sep 17 00:00:00 2001 From: jrbosch Date: Tue, 9 May 2017 14:00:18 -0400 Subject: [PATCH 1061/1311] convert to UNIX format --- .../easyconfigs/x/x265/x265-2.4-foss-2016b.eb | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb b/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb index d0b1d74b60..1d2f5fec38 100644 --- a/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb +++ b/easybuild/easyconfigs/x/x265/x265-2.4-foss-2016b.eb @@ -1,29 +1,29 @@ -easyblock = 'CMakeMake' - -name = 'x265' -version = '2.4' - -homepage = 'http://x265.org/' -description = """x265 is a free software library and application for encoding video streams into the H.265 - AVC compression format, and is released under the terms of the GNU GPL.""" - -toolchain = {'name': 'foss', 'version': '2016b'} - -source_urls = [ - 'http://ftp.videolan.org/pub/videolan/x265/', - 'http://download.videolan.org/pub/videolan/x265/', -] -sources = ['%(name)s_%(version)s.tar.gz'] - -dependencies = [('Yasm', '1.3.0')] - -builddependencies = [('CMake', '3.7.2')] - -start_dir = 'source' - -sanity_check_paths = { - 'files': ['bin/x265', 'include/x265_config.h', 'include/x265.h', 'lib/libx265.a', 'lib/libx265.%s' % SHLIB_EXT], - 'dirs': [], -} - -moduleclass = 'vis' +easyblock = 'CMakeMake' + +name = 'x265' +version = '2.4' + +homepage = 'http://x265.org/' +description = """x265 is a free software library and application for encoding video streams into the H.265 + AVC compression format, and is released under the terms of the GNU GPL.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://ftp.videolan.org/pub/videolan/x265/', + 'http://download.videolan.org/pub/videolan/x265/', +] +sources = ['%(name)s_%(version)s.tar.gz'] + +dependencies = [('Yasm', '1.3.0')] + +builddependencies = [('CMake', '3.7.2')] + +start_dir = 'source' + +sanity_check_paths = { + 'files': ['bin/x265', 'include/x265_config.h', 'include/x265.h', 'lib/libx265.a', 'lib/libx265.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'vis' -- GitLab From 8ab7c872caf82ab348498376928e3b90480fbfc2 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Tue, 9 May 2017 21:22:35 +0200 Subject: [PATCH 1062/1311] adding easyconfigs: GROMACS-2016.1-foss-2017a-PLUMED.eb --- .../GROMACS-2016.1-foss-2017a-PLUMED.eb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 easybuild/easyconfigs/g/GROMACS/GROMACS-2016.1-foss-2017a-PLUMED.eb diff --git a/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.1-foss-2017a-PLUMED.eb b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.1-foss-2017a-PLUMED.eb new file mode 100644 index 0000000000..9fc85b8f3e --- /dev/null +++ b/easybuild/easyconfigs/g/GROMACS/GROMACS-2016.1-foss-2017a-PLUMED.eb @@ -0,0 +1,41 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2016 University of Luxembourg / LCSB, Cyprus Institute / CaSToRC, +# Ghent University / The Francis Crick Institute +# Authors:: +# * Wiktor Jurkowski +# * Fotis Georgatos +# * George Tsouloupas +# * Kenneth Hoste +# * Adam Huffman +# License:: MIT/GPL +## + +name = 'GROMACS' +version = '2016.1' +versionsuffix = '-PLUMED' + +homepage = 'http://www.gromacs.org' +description = """ +GROMACS is a versatile package to perform molecular dynamics, + i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. + +This is CPU only build, containing both MPI and threadMPI builds. +""" + +toolchain = {'name': 'foss', 'version': '2017a'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['ftp://ftp.gromacs.org/pub/gromacs/'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('CMake', '3.7.2'), +] + +dependencies = [ + ('PLUMED', '2.3.0'), +] + +moduleclass = 'bio' -- GitLab From 5d359bd43470955903edd5a7cb2e5ae8871d6894 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 10 May 2017 07:24:00 +0800 Subject: [PATCH 1063/1311] adding easyconfigs: Siesta-4.0-intel-2017a.eb, Siesta-4.1-b2-intel-2017a.eb --- .../s/Siesta/Siesta-4.0-intel-2017a.eb | 18 ++++++++++++++++++ .../s/Siesta/Siesta-4.1-b2-intel-2017a.eb | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb new file mode 100644 index 0000000000..b92708a1d8 --- /dev/null +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb @@ -0,0 +1,18 @@ +name = 'Siesta' +version = '4.0' + +homepage = 'http://departments.icmab.es/leem/siesta' +description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic + structure calculations and ab initio molecular dynamics simulations of molecules and solids.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TGZ] +source_urls = ['https://launchpad.net/%(namelower)s/%(version_major_minor)s/%(version)s/+download/'] + +dependencies = [('netCDF-Fortran', '4.4.4')] + +parallel = 1 + +moduleclass = 'phys' diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb new file mode 100644 index 0000000000..5e51c29c8b --- /dev/null +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb @@ -0,0 +1,18 @@ +name = 'Siesta' +version = '4.1-b2' + +homepage = 'http://departments.icmab.es/leem/siesta' +description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic + structure calculations and ab initio molecular dynamics simulations of molecules and solids.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://launchpad.net/%(namelower)s/%(version_major)s.1/%(version)s/+download/'] + +dependencies = [('netCDF-Fortran', '4.4.4')] + +parallel = 1 + +moduleclass = 'phys' -- GitLab From 6442a465e77fd8e6c5ac2c6b62b94978ef20b422 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 10 May 2017 12:12:32 +0930 Subject: [PATCH 1064/1311] style error corrected --- easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb | 5 +++-- .../easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb | 4 +--- .../p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb | 7 +++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb index cb6a046e97..132cfc359d 100644 --- a/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb +++ b/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb @@ -3,7 +3,7 @@ # Homepage: https://www.adelaide.edu.au/phoenix/ # # Copyright:: adelaide.edu.au/phoenix -# Authors:: Robert Qiao , Exe Escobedo +# Authors:: Robert Qiao , Exequiel Sepulveda # License:: GNU GPLv2 # # Notes:: @@ -13,9 +13,10 @@ easyblock = 'ConfigureMake' name = 'lynx' version = '2.8.9' +versionsuffix = '-develop' description = "lynx is an alphanumeric display oriented World-Wide Web Client" -homepage = 'http://lynx.isc.org/' +homepage = 'http://lynx.browser.org/' toolchain = {'name': 'foss', 'version': '2016b'} diff --git a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb index bc5e0d5779..4af929c18d 100644 --- a/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/p/picard/picard-2.2.4-Java-1.8.0_92.eb @@ -4,12 +4,10 @@ # # Copyright:: adelaide.edu.au/phoenix # Authors:: Robert Qiao , Exe Escobedo -# License:: +# License:: MIT # -# Notes:: ## - name = 'picard' version = '2.2.4' diff --git a/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb b/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb index 300e28ae47..e5b64245b5 100644 --- a/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb +++ b/easybuild/easyconfigs/p/prodigal/prodigal-2.6.2-GCC-4.9.3-binutils-2.25.eb @@ -9,7 +9,6 @@ # Notes:: ## - easyblock = 'MakeCp' name = 'prodigal' @@ -17,13 +16,14 @@ version = '2.6.2' homepage = 'http://prodigal.ornl.gov/' -description = """Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a microbial (bacterial and archaeal) gene finding program developed at Oak Ridge National Laboratory and the University of Tennessee.""" +description = """Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) + is a microbial (bacterial and archaeal) gene finding program developed + at Oak Ridge National Laboratory and the University of Tennessee.""" toolchain = {'name': 'GCC', 'version': '4.9.3-binutils-2.25'} source_urls = ['https://github.com/hyattpd/Prodigal/archive/'] sources = ['v%(version)s.tar.gz'] -#https://github.com/hyattpd/Prodigal/archive/v2.6.2.tar.gz files_to_copy = [ (['prodigal'], 'bin'), @@ -37,4 +37,3 @@ sanity_check_paths = { } moduleclass = 'bio' - -- GitLab From 7ffaf3184d592177d1f816179e4a2e003ed986de Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 10 May 2017 12:29:33 +0930 Subject: [PATCH 1065/1311] lynx file name corrected --- ...{lynx-2.8.9-foss-2016b.eb => lynx-2.8.9-foss-2016b-develop.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/l/lynx/{lynx-2.8.9-foss-2016b.eb => lynx-2.8.9-foss-2016b-develop.eb} (100%) diff --git a/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb b/easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b-develop.eb similarity index 100% rename from easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b.eb rename to easybuild/easyconfigs/l/lynx/lynx-2.8.9-foss-2016b-develop.eb -- GitLab From 00cdb166ff15cf4a58f71f10473790e4c3c1436f Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Wed, 10 May 2017 08:48:11 +0200 Subject: [PATCH 1066/1311] updated comments --- .../easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) mode change 100755 => 100644 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb old mode 100755 new mode 100644 index 1e3286223d..3413573e74 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb @@ -21,7 +21,7 @@ configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support configopts += '--disable-dlopen ' # statically link component, don't do dynamic loading -# needed for --with-verbs +# needed for --with-psm2 osdependencies = [('libpsm2', 'libpsm2-devel')] libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] @@ -33,3 +33,5 @@ sanity_check_paths = { } moduleclass = 'mpi' + + -- GitLab From 8d3c267dbee7f7b89edf438bd54e5e1fa7966262 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 10 May 2017 14:56:57 +0800 Subject: [PATCH 1067/1311] add checksums and make source_url more generic --- easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb | 4 +++- easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb index b92708a1d8..88fc6fad8f 100644 --- a/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'usempi': True} sources = [SOURCELOWER_TGZ] -source_urls = ['https://launchpad.net/%(namelower)s/%(version_major_minor)s/%(version)s/+download/'] +vl = version.split('-') +source_urls = ['https://launchpad.net/siesta/%s/%%(version)s/+download' % vl[0]] +checksums = ['c4aa5f4cf2eabefaaacd3ef6350ec8fd'] dependencies = [('netCDF-Fortran', '4.4.4')] diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb index 5e51c29c8b..5b2e971198 100644 --- a/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb @@ -9,7 +9,9 @@ toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'usempi': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['https://launchpad.net/%(namelower)s/%(version_major)s.1/%(version)s/+download/'] +vl = version.split('-') +source_urls = ['https://launchpad.net/siesta/%s/%%(version)s/+download' % vl[0]] +checksums = ['6dd700aa79b0da39bbd3233c220d630f'] dependencies = [('netCDF-Fortran', '4.4.4')] -- GitLab From c19bdd1337dea376a7db32ce9145cf4dfe132c74 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Wed, 10 May 2017 09:43:32 +0200 Subject: [PATCH 1068/1311] updated --- easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb | 2 +- .../SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb | 7 +++---- .../SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb | 7 +++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb index 24c6a9c29a..b1648c008c 100644 --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb @@ -16,7 +16,7 @@ source_urls = [ ] #We use 32bit for indices and 64bit for content -patches = ['METIS-5.1.0-use-doubles.path'] +patches = ['METIS-5.1.0-use-doubles.patch'] builddependencies = [('CMake', '3.8.0')] diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb index ac3303de2d..4727d14749 100644 --- a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb @@ -1,5 +1,7 @@ name = 'SuiteSparse' version = '4.5.5' +metis_ver = '5.1.0' +versionsuffix = '-METIS-%s' % metis_ver homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" @@ -10,10 +12,7 @@ toolchainopts = {'unroll': True, 'pic': True} source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] sources = [SOURCE_TAR_GZ] -metis = 'METIS' -metis_ver = '5.1.0' -versionsuffix = '-%s-%s' % (metis, metis_ver) -dependencies = [(metis, metis_ver)] +dependencies = [('METIS', metis_ver)] maxparallel = 1 diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb index a24c57563a..457bb71cde 100755 --- a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-ParMETIS-4.0.3.eb @@ -1,5 +1,7 @@ name = 'SuiteSparse' version = '4.5.5' +parmetis_ver = '4.0.3' +versionsuffix = '-ParMETIS-%s' % parmetis_ver homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html' description = """SuiteSparse is a collection of libraries manipulate sparse matrices.""" @@ -10,10 +12,7 @@ toolchainopts = {'unroll': True, 'pic': True} source_urls = ['http://faculty.cse.tamu.edu/davis/SuiteSparse/'] sources = [SOURCE_TAR_GZ] -parmetis = 'ParMETIS' -parmetis_ver = '4.0.3' -versionsuffix = '-%s-%s' % (parmetis, parmetis_ver) -dependencies = [(parmetis, parmetis_ver)] +dependencies = [('ParMETIS', parmetis_ver)] maxparallel = 1 -- GitLab From 84a87e68b2bfe4a5516557e54910c445299b05f5 Mon Sep 17 00:00:00 2001 From: "\"Andreas \"" Date: Wed, 10 May 2017 09:56:53 +0200 Subject: [PATCH 1069/1311] added fftw as dependency --- easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb index b1ee1a4af9..8c793e8447 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb @@ -13,6 +13,7 @@ sources = ['NAMD_%(version)s_Source.tar.gz'] dependencies = [ ('Tcl', '8.5.19'), + ('FFTW', '3.3.6'), ] # /bin/csh is required by 'config' script -- GitLab From f19f305be53e82db0c019889343e9614fd7042d9 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Wed, 10 May 2017 15:58:50 +0800 Subject: [PATCH 1070/1311] remove no longer necessary parallel=1 --- easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb | 2 -- easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb | 2 -- 2 files changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb index 88fc6fad8f..c782f5eabf 100644 --- a/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.0-intel-2017a.eb @@ -15,6 +15,4 @@ checksums = ['c4aa5f4cf2eabefaaacd3ef6350ec8fd'] dependencies = [('netCDF-Fortran', '4.4.4')] -parallel = 1 - moduleclass = 'phys' diff --git a/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb index 5b2e971198..3186618b3a 100644 --- a/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb +++ b/easybuild/easyconfigs/s/Siesta/Siesta-4.1-b2-intel-2017a.eb @@ -15,6 +15,4 @@ checksums = ['6dd700aa79b0da39bbd3233c220d630f'] dependencies = [('netCDF-Fortran', '4.4.4')] -parallel = 1 - moduleclass = 'phys' -- GitLab From 38c1c0621a437cf495f525da7c2b4d087790bedc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 13:18:00 +0200 Subject: [PATCH 1071/1311] adding easyconfigs: Tensorflow-1.1.0-intel-2017a-Python-2.7.13.eb, Tensorflow-1.1.0-intel-2017a-Python-3.6.1.eb, protobuf-3.3.0-intel-2017a.eb, protobuf-python-3.3.0-intel-2017a-Python-2.7.13.eb, protobuf-python-3.3.0-intel-2017a-Python-3.6.1.eb --- ...-python-3.3.0-intel-2017a-Python-2.7.13.eb | 29 +++++++++++++++ ...f-python-3.3.0-intel-2017a-Python-3.6.1.eb | 29 +++++++++++++++ .../p/protobuf/protobuf-3.3.0-intel-2017a.eb | 23 ++++++++++++ ...sorflow-1.1.0-intel-2017a-Python-2.7.13.eb | 35 +++++++++++++++++++ ...nsorflow-1.1.0-intel-2017a-Python-3.6.1.eb | 35 +++++++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/p/protobuf/protobuf-3.3.0-intel-2017a.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-2.7.13.eb create mode 100755 easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..e538a8e99b --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf'} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..4c753d376f --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf-python/protobuf-python-3.3.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'protobuf-python' +version = '3.3.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/google/protobuf/' +description = """Python Protocol Buffers runtime library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('protobuf', version) +] + +start_dir = 'python' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +options = {'modulename': 'google.protobuf'} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/p/protobuf/protobuf-3.3.0-intel-2017a.eb b/easybuild/easyconfigs/p/protobuf/protobuf-3.3.0-intel-2017a.eb new file mode 100644 index 0000000000..10bedd5672 --- /dev/null +++ b/easybuild/easyconfigs/p/protobuf/protobuf-3.3.0-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'protobuf' +version = '3.3.0' + +homepage = 'https://github.com/google/protobuf/' +description = """Google Protocol Buffers""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/google/protobuf/archive/v%(version)s/'] +sources = [SOURCE_TAR_GZ] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "./autogen.sh && " + +sanity_check_paths = { + 'files': ['bin/protoc', 'lib/libprotobuf.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-2.7.13.eb new file mode 100755 index 0000000000..a6aec94f18 --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2017a'} + +pymaj = '2' +pymin = '7' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/8a/73/74c610decd5e0a1fd7f441a32e3561d21c28ced98fd6d3d9d5c70dbf92ce/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)smu-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['70a7a29dbef478cbac9a9c839a18227e'] + +dependencies = [ + ('Python', '%s.%s.13' % (pymaj, pymin)), + ('protobuf-python', '3.3.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-3.6.1.eb new file mode 100755 index 0000000000..f134b5be2b --- /dev/null +++ b/easybuild/easyconfigs/t/Tensorflow/Tensorflow-1.1.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,35 @@ +easyblock = 'PythonPackage' + +name = 'Tensorflow' +version = '1.1.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'intel', 'version': '2017a'} + +pymaj = '3' +pymin = '6' +pymajmin = pymaj + pymin + +source_urls = ['https://pypi.python.org/packages/cd/e4/b2a8bcd1fa689489050386ec70c5c547e4a75d06f2cc2b55f45463cd092c/'] +sources = [ + 'tensorflow-%%(version)s-cp%(pymajmin)s-cp%(pymajmin)sm-manylinux1_x86_64.whl' % {'pymajmin': pymajmin}, +] +checksums = ['1f761290358dfb7fe4ec73140f4d282a'] + +dependencies = [ + ('Python', '%s.%s.1' % (pymaj, pymin)), + ('protobuf-python', '3.3.0', versionsuffix), +] + +use_pip = True +unpack_sources = False + +sanity_check_paths = { + 'files': ['bin/tensorboard'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From 1483de14a6df6e3641b2f740f5931682055045c8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 15:08:41 +0200 Subject: [PATCH 1072/1311] adding easyconfigs: NLTK-3.2.2-intel-2017a-Python-2.7.13.eb --- .../NLTK-3.2.2-intel-2017a-Python-2.7.13.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..1388501b14 --- /dev/null +++ b/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'NLTK' +version = '3.2.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.nltk.org/' +description = "NLTK is a leading platform for building Python programs to work with human language data." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Python', '2.7.13')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From 6ec3072ebf8e9ae25a8f5289def75bd636a385b6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 15:16:14 +0200 Subject: [PATCH 1073/1311] adding easyconfigs: pbdagcon-20170330-intel-2017a.eb, BLASR-20170330-intel-2017a.eb, blasr_libcpp-20170426-intel-2017a.eb, pbbam-20170508-intel-2017a.eb, HTSlib-20160107-intel-2017a-PacBio.eb, HDF5-1.8.18-intel-2017a-serial.eb --- .../b/BLASR/BLASR-20170330-intel-2017a.eb | 38 ++++++++++++++ .../blasr_libcpp-20170426-intel-2017a.eb | 41 ++++++++++++++++ .../h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb | 27 ++++++++++ .../HTSlib-20160107-intel-2017a-PacBio.eb | 41 ++++++++++++++++ .../p/pbbam/pbbam-20170508-intel-2017a.eb | 49 +++++++++++++++++++ .../pbdagcon/pbdagcon-20170330-intel-2017a.eb | 40 +++++++++++++++ 6 files changed, 236 insertions(+) create mode 100644 easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb create mode 100644 easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb create mode 100644 easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb create mode 100644 easybuild/easyconfigs/h/HTSlib/HTSlib-20160107-intel-2017a-PacBio.eb create mode 100644 easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/pbdagcon/pbdagcon-20170330-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb b/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb new file mode 100644 index 0000000000..e63d8bc616 --- /dev/null +++ b/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb @@ -0,0 +1,38 @@ +easyblock = 'MakeCp' + +name = 'BLASR' +commit = 'bed926d' +version = '20170330' + +homepage = 'https://github.com/PacificBiosciences/blasr' +description = """ BLASR (Basic Local Alignment with Successive Refinement) rapidly maps + reads to genomes by finding the highest scoring local alignment or set of local alignments + between the read and the genome. Optimized for PacBio's extraordinarily long reads and + taking advantage of rich quality values, BLASR maps reads rapidly with high accuracy. """ + +toolchain = {'name': 'intel', 'version': '2017a'} +#toolchainopts = {'usempi': True} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/PacificBiosciences/blasr/archive/'] +sources = ['%s.tar.gz' % commit] + +dependencies = [ + ('HDF5', '1.8.18', '-serial'), + ('pbbam', '20170508'), + ('blasr_libcpp', '20170426'), +] + +prebuildopts = "./configure.py --with-szlib HDF5_INCLUDE=$EBROOTHDF5/include HDF5_LIB=$EBROOTHDF5/lib && " + +binaries = ['blasr', 'utils/loadPulses', 'utils/pls2fasta', 'utils/samFilter', 'utils/samtoh5', + 'utils/samtom4', 'utils/sawriter', 'utils/sdpMatcher', 'utils/toAfg'] +files_to_copy = [(binaries, 'bin')] + +sanity_check_paths = { + 'files': ['bin/blasr', 'bin/loadPulses', 'bin/pls2fasta', 'bin/samFilter', 'bin/samtoh5', 'bin/samtom4', + 'bin/sawriter', 'bin/sdpMatcher', 'bin/toAfg'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb b/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb new file mode 100644 index 0000000000..e172377121 --- /dev/null +++ b/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb @@ -0,0 +1,41 @@ +easyblock = 'ConfigureMake' + +name = 'blasr_libcpp' +version = '20170426' +commit = 'cd49f36' + +homepage = 'https://github.com/PacificBiosciences/blasr_libcpp' +description = """Blasr_libcpp is a library used by blasr and other executables such as samtoh5, loadPulses for + analyzing PacBio sequences""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/PacificBiosciences/blasr_libcpp/archive/'] +sources = ['%s.tar.gz' % commit] + +dependencies = [ + ('HDF5', '1.8.18', '-serial'), + ('pbbam', '20170508'), +] + +unpack_options = "--strip-components=1" + +skipsteps = ['configure', 'install'] +buildininstalldir = True + +#prebuildopts = "NOPBBAM=1 NOHDF=1 ./configure.py && " +prebuildopts = "./configure.py && " + +sanity_check_paths = { + 'files': ['alignment/libblasr.a', 'alignment/libblasr.%s' % SHLIB_EXT, 'hdf/libpbihdf.a', + 'hdf/libpbihdf.%s' % SHLIB_EXT, 'pbdata/libpbdata.a', 'pbdata/libpbdata.%s' % SHLIB_EXT], + 'dirs': [], +} + +modextrapaths = { + 'CPATH': ['alignment', 'hdf', 'pbdata'], + 'LD_LIBRARY_PATH': ['alignment', 'hdf', 'pbdata'], + 'LIBRARY_PATH': ['alignment', 'hdf', 'pbdata'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb new file mode 100644 index 0000000000..ef054b6cdf --- /dev/null +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb @@ -0,0 +1,27 @@ +name = 'HDF5' +version = '1.8.18' +versionsuffix = '-serial' + +homepage = 'http://www.hdfgroup.org/HDF5/' +description = """HDF5 is a unique technology suite that makes possible the management of + extremely large and complex data collections.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': False} + +source_urls = [ + 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', + 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' +] + +sources = [SOURCELOWER_TAR_GZ] +checksums = ['dd2148b740713ca0295442ec683d7b1c'] + +buildopts = 'CXXFLAGS="$CXXFLAGS -DMPICH_IGNORE_CXX_SEEK"' + +dependencies = [ + ('zlib', '1.2.11'), + ('Szip', '2.1'), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-20160107-intel-2017a-PacBio.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-20160107-intel-2017a-PacBio.eb new file mode 100644 index 0000000000..e9e046ddd8 --- /dev/null +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-20160107-intel-2017a-PacBio.eb @@ -0,0 +1,41 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 1.4 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'HTSlib' +version = '20160107' +commit = '6b6c813' +versionsuffix = '-PacBio' + +homepage = 'https://github.com/PacificBiosciences/htslib' +description = """PacBio fork of C library for reading/writing high-throughput sequencing data. + This package includes the utilities bgzip and tabix""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/PacificBiosciences/htslib/archive/'] +sources = ['%s.tar.gz' % commit] + +dependencies = [ + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), + ('cURL', '7.54.0'), +] + +skipsteps = ['configure'] + +installopts = ' prefix=%(installdir)s' + +sanity_check_paths = { + 'files': ['bin/bgzip', 'bin/tabix', 'lib/libhts.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb b/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb new file mode 100644 index 0000000000..5e218a3225 --- /dev/null +++ b/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb @@ -0,0 +1,49 @@ +easyblock = 'CMakeMake' + +name = 'pbbam' +version = '20170508' +commit = 'd62e310' + +homepage = 'http://pbbam.readthedocs.io/' +description = """The pbbam software package provides components to create, query, & edit PacBio BAM files + and associated indices.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +gtest_ver = '1.8.0' +source_urls = [ + 'https://github.com/PacificBiosciences/pbbam/archive/', + 'https://github.com/google/googletest/archive/', +] +sources = [ + ('%s.tar.gz' % commit, "tar xfvz %s --strip-components=1"), # pbbam + 'release-%s.tar.gz' % gtest_ver, # googletest +] + +builddependencies = [ + ('CMake', '3.8.1'), + ('Doxygen', '1.8.13'), +] +dependencies = [ + ('zlib', '1.2.11'), + ('Boost', '1.64.0'), + ('googletest', '1.8.0'), + ('HTSlib', '20160107', '-PacBio'), +] + +skipsteps = ['install'] + +buildininstalldir = True + +configopts = "-DHTSLIB_ROOTDIR=$EBROOTHTSLIB -DGTEST_SRC_DIR=%%(builddir)s/googletest-release-%s" % gtest_ver + +runtest = 'test' + +postinstallcmds = ["rm -r googletest-release-%s" % gtest_ver] + +sanity_check_paths = { + 'files': ['bin/pbindex', 'bin/pbindexdump', 'bin/pbmerge', 'lib/libpbbam.a'], + 'dirs': ['include/pbbam'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/pbdagcon/pbdagcon-20170330-intel-2017a.eb b/easybuild/easyconfigs/p/pbdagcon/pbdagcon-20170330-intel-2017a.eb new file mode 100644 index 0000000000..51dd75d3e1 --- /dev/null +++ b/easybuild/easyconfigs/p/pbdagcon/pbdagcon-20170330-intel-2017a.eb @@ -0,0 +1,40 @@ +easyblock = 'MakeCp' + +name = 'pbdagcon' +version = '20170330' +commit = 'fd8fbad' + +homepage = 'https://github.com/PacificBiosciences/pbdagcon' +description = """pbdagcon is a tool that implements DAGCon (Directed Acyclic Graph Consensus) which is a sequence + consensus algorithm based on using directed acyclic graphs to encode multiple sequence alignment.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [ + 'https://github.com/PacificBiosciences/pbdagcon/archive/', + 'https://github.com/PacificBiosciences/DALIGNER/archive/', + 'https://github.com/PacificBiosciences/DAZZ_DB/archive/', +] +sources = [ + '%s.tar.gz' % commit, # pbdagcon + '583de37.tar.gz', # DALIGNER + '7954b44.tar.gz', # DAZZ_DB +] + +dependencies = [ + ('blasr_libcpp', '20170426'), +] + +prebuildopts = "rmdir DAZZ_DB && ln -s %(builddir)s/DAZZ_DB* DAZZ_DB && cd DAZZ_DB && pwd && make && cd .. && " +prebuildopts += "export CPATH=$PWD/DAZZ_DB:$CPATH && export LIBRARY_PATH=$PWD/DAZZ_DB:$LIBRARY_PATH && " +prebuildopts += "rmdir DALIGNER && ln -s %(builddir)s/DALIGNER* DALIGNER && cd DALIGNER && pwd && make && cd .. && " +prebuildopts += "./configure.py && export DALIGNER_SRC=$PWD/DALIGNER && export DAZZ_DB_SRC=$PWD/DAZZ_DB && " + +files_to_copy = [(['src/cpp/pbdagcon'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/pbdagcon'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From f433280a21cca4e4c0b1a2495a6fcaa1832c0af2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 15:34:11 +0200 Subject: [PATCH 1074/1311] adding easyconfigs: pyenchant-1.6.8-intel-2017a-Python-2.7.13.eb, enchant-1.6.1-intel-2017a.eb, hunspell-1.6.1-intel-2017a.eb --- .../e/enchant/enchant-1.6.1-intel-2017a.eb | 25 +++++++++++++++++ .../h/hunspell/hunspell-1.6.1-intel-2017a.eb | 25 +++++++++++++++++ ...enchant-1.6.8-intel-2017a-Python-2.7.13.eb | 27 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/h/hunspell/hunspell-1.6.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/pyenchant/pyenchant-1.6.8-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb b/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb new file mode 100644 index 0000000000..13433c2f04 --- /dev/null +++ b/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'enchant' +version = '1.6.1' + +homepage = 'https://abiword.github.io/enchant/' +description = """Enchant is a library (and command-line program) that wraps a number of different spelling libraries + and programs with a consistent interface.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/AbiWord/enchant/releases/download/enchant-%s/' % '-'.join(version.split('.'))] +sources = [SOURCE_TAR_GZ] + +builddependencies = [('Autotools', '20150215')] +dependencies = [('hunspell', '1.6.1')] + +buildopts = "LIBTOOL='libtool --tag=CC'" + +sanity_check_paths = { + 'files': ['bin/enchant', 'lib/libenchant.a', 'lib/libenchant.%s' % SHLIB_EXT], + 'dirs': ['include/enchant', 'lib/enchant'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/h/hunspell/hunspell-1.6.1-intel-2017a.eb b/easybuild/easyconfigs/h/hunspell/hunspell-1.6.1-intel-2017a.eb new file mode 100644 index 0000000000..808d4c832e --- /dev/null +++ b/easybuild/easyconfigs/h/hunspell/hunspell-1.6.1-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'hunspell' +version = '1.6.1' + +homepage = 'http://hunspell.github.io/' +description = """Hunspell is a spell checker and morphological analyzer library and program designed for languages + with rich morphology and complex word compounding or character encoding.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/hunspell/hunspell/archive/'] +sources = ['v%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "autoreconf -vfi && " + +sanity_check_paths = { + 'files': ['bin/hunspell', 'lib/libhunspell-%(version_major_minor)s.a', + 'lib/libhunspell-%%(version_major_minor)s.%s' % SHLIB_EXT, 'lib/pkgconfig/hunspell.pc'], + 'dirs': ['include/hunspell'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/pyenchant/pyenchant-1.6.8-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pyenchant/pyenchant-1.6.8-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..44fd59e0fa --- /dev/null +++ b/easybuild/easyconfigs/p/pyenchant/pyenchant-1.6.8-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'pyenchant' +version = '1.6.8' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://pythonhosted.org/pyenchant/' +description = "PyEnchant is a spellchecking library for Python, based on the excellent Enchant library." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('enchant', '1.6.1'), +] + +options = {'modulename': 'enchant'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From ae2102adbb82b9d5a4ba8d501c50ec282682c784 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 16:17:26 +0200 Subject: [PATCH 1075/1311] adding easyconfigs: pandas-0.20.1-intel-2017a-Python-3.6.1.eb --- .../pandas-0.20.1-intel-2017a-Python-3.6.1.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/p/pandas/pandas-0.20.1-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/p/pandas/pandas-0.20.1-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/p/pandas/pandas-0.20.1-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..ea5b45bce1 --- /dev/null +++ b/easybuild/easyconfigs/p/pandas/pandas-0.20.1-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'pandas' +version = '0.20.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/pandas/" +description = """pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures + and data analysis tools for the Python programming language.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '3.6.1')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From 6fe5e21171575a9bddd5010a52a597d2b3b8b8f7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 16:38:47 +0200 Subject: [PATCH 1076/1311] adding easyconfigs: scikit-learn-0.18.1-intel-2017a-Python-3.6.1.eb, matplotlib-2.0.1-intel-2017a-Python-3.6.1.eb --- ...tplotlib-2.0.1-intel-2017a-Python-3.6.1.eb | 43 +++++++++++++++++++ ...t-learn-0.18.1-intel-2017a-Python-3.6.1.eb | 30 +++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.1-intel-2017a-Python-3.6.1.eb create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.1-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.1-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..a1866952ba --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.1-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,43 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '3.6.1'), + ('freetype', '2.7.1'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-3.6.1.eb new file mode 100755 index 0000000000..af24f8502f --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('matplotlib', '2.0.1', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' -- GitLab From 33f3a414b01acd8de6e44c737dec0165a534143e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 18:37:10 +0200 Subject: [PATCH 1077/1311] adding easyconfigs: RAxML-8.2.10-intel-2017a-hybrid-avx2.eb --- .../RAxML-8.2.10-intel-2017a-hybrid-avx2.eb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 easybuild/easyconfigs/r/RAxML/RAxML-8.2.10-intel-2017a-hybrid-avx2.eb diff --git a/easybuild/easyconfigs/r/RAxML/RAxML-8.2.10-intel-2017a-hybrid-avx2.eb b/easybuild/easyconfigs/r/RAxML/RAxML-8.2.10-intel-2017a-hybrid-avx2.eb new file mode 100644 index 0000000000..55ca13f91f --- /dev/null +++ b/easybuild/easyconfigs/r/RAxML/RAxML-8.2.10-intel-2017a-hybrid-avx2.eb @@ -0,0 +1,27 @@ +easyblock = 'MakeCp' + +name = 'RAxML' +version = '8.2.10' +versionsuffix = '-hybrid-avx2' + +homepage = 'https://github.com/stamatak/standard-RAxML' +description = "RAxML search algorithm for maximum likelihood based inference of phylogenetic trees." + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = ['v%(version)s.zip'] +source_urls = ['https://github.com/stamatak/standard-RAxML/archive/'] + +buildopts = '-f Makefile.AVX2.HYBRID.gcc CC="$CC"' + +files_to_copy = [(["raxmlHPC-HYBRID-AVX2"], "bin"), "usefulScripts", "README", "manual"] + +postinstallcmds = ["cd %(installdir)s/bin && ln -s raxmlHPC-HYBRID-AVX2 raxmlHPC"] + +sanity_check_paths = { + 'files': ['bin/raxmlHPC'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From e26314e1b0611d8031c8cec4e5272efc68677fa1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 May 2017 19:09:28 +0200 Subject: [PATCH 1078/1311] clean up commented out lines in BLASR & blasr_libcpp easyconfigs, no need to use cstd=c++11 for BLASR --- easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb | 2 -- .../b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb | 1 - 2 files changed, 3 deletions(-) diff --git a/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb b/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb index e63d8bc616..d6ce3f9ad0 100644 --- a/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb +++ b/easybuild/easyconfigs/b/BLASR/BLASR-20170330-intel-2017a.eb @@ -11,8 +11,6 @@ description = """ BLASR (Basic Local Alignment with Successive Refinement) rapid taking advantage of rich quality values, BLASR maps reads rapidly with high accuracy. """ toolchain = {'name': 'intel', 'version': '2017a'} -#toolchainopts = {'usempi': True} -toolchainopts = {'cstd': 'c++11'} source_urls = ['https://github.com/PacificBiosciences/blasr/archive/'] sources = ['%s.tar.gz' % commit] diff --git a/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb b/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb index e172377121..c6d9e3ba4f 100644 --- a/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb +++ b/easybuild/easyconfigs/b/blasr_libcpp/blasr_libcpp-20170426-intel-2017a.eb @@ -23,7 +23,6 @@ unpack_options = "--strip-components=1" skipsteps = ['configure', 'install'] buildininstalldir = True -#prebuildopts = "NOPBBAM=1 NOHDF=1 ./configure.py && " prebuildopts = "./configure.py && " sanity_check_paths = { -- GitLab From 006a5ed25c64d72593d5761c0672a4ba8bd9f34c Mon Sep 17 00:00:00 2001 From: "Nathan S. Watson-Haigh" Date: Thu, 11 May 2017 15:20:45 +0930 Subject: [PATCH 1079/1311] EasyConfig for BioKanga v4.3.6 --- .../b/BioKanga/BioKanga-4.3.6-foss-2015b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.6-foss-2015b.eb diff --git a/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.6-foss-2015b.eb b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.6-foss-2015b.eb new file mode 100644 index 0000000000..e9e6ecd9f9 --- /dev/null +++ b/easybuild/easyconfigs/b/BioKanga/BioKanga-4.3.6-foss-2015b.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'BioKanga' +version = '4.3.6' + +homepage = 'https://github.com/csiro-crop-informatics/biokanga' +description = """BioKanga is an integrated toolkit of high performance bioinformatics + subprocesses targeting the challenges of next generation sequencing analytics. + Kanga is an acronym standing for 'K-mer Adaptive Next Generation Aligner'.""" + +toolchain = {'name': 'foss', 'version': '2015b'} + +source_urls = ['https://github.com/csiro-crop-informatics/biokanga/archive/'] +sources = ['v%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "autoreconf -f -i && " + +sanity_check_paths = { + 'files': ["bin/biokanga"], + 'dirs': [] +} + +moduleclass = 'bio' -- GitLab From a0d0507e01ead49ed4189641b597f7f0be1001a0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 11 May 2017 08:43:03 +0200 Subject: [PATCH 1080/1311] use 'data' as moduleclass --- .../easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb index 1388501b14..6f5ffa7a5b 100644 --- a/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/n/NLTK/NLTK-3.2.2-intel-2017a-Python-2.7.13.eb @@ -19,4 +19,4 @@ sanity_check_paths = { 'dirs': ['lib/python%(pyshortver)s/site-packages'], } -moduleclass = 'tools' +moduleclass = 'data' -- GitLab From 65fa3ba5ecc8668bfacd8eb7bd9b6141bcaac096 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 11 May 2017 08:44:33 +0200 Subject: [PATCH 1081/1311] blank line between deps & builddeps --- easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb b/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb index 13433c2f04..abd8322098 100644 --- a/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb +++ b/easybuild/easyconfigs/e/enchant/enchant-1.6.1-intel-2017a.eb @@ -13,6 +13,7 @@ source_urls = ['https://github.com/AbiWord/enchant/releases/download/enchant-%s/ sources = [SOURCE_TAR_GZ] builddependencies = [('Autotools', '20150215')] + dependencies = [('hunspell', '1.6.1')] buildopts = "LIBTOOL='libtool --tag=CC'" -- GitLab From 64536687d1aaa8c0b42588f54367f04ed6b9da5c Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 11 May 2017 14:17:24 +0200 Subject: [PATCH 1082/1311] adding easyconfigs: goolfc-2017.01.eb --- .../CUDA/CUDA-8.0.61_375.26-GCC-5.4.0-2.26.eb | 24 ++++++++ .../f/FFTW/FFTW-3.3.6-gompic-2017.01.eb | 25 +++++++++ .../easyconfigs/g/gcccuda/gcccuda-2017.01.eb | 21 +++++++ .../easyconfigs/g/gompic/gompic-2017.01.eb | 23 ++++++++ .../easyconfigs/g/goolfc/goolfc-2017.01.eb | 38 +++++++++++++ .../h/hwloc/hwloc-1.11.5-GCC-5.4.0-2.26.eb | 23 ++++++++ ...BLAS-0.2.19-GCC-5.4.0-2.26-LAPACK-3.7.0.eb | 56 +++++++++++++++++++ .../OpenMPI/OpenMPI-2.0.2-gcccuda-2017.01.eb | 34 +++++++++++ ...ic-2017.01-OpenBLAS-0.2.19-LAPACK-3.7.0.eb | 25 +++++++++ 9 files changed, 269 insertions(+) create mode 100644 easybuild/easyconfigs/c/CUDA/CUDA-8.0.61_375.26-GCC-5.4.0-2.26.eb create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompic-2017.01.eb create mode 100644 easybuild/easyconfigs/g/gcccuda/gcccuda-2017.01.eb create mode 100644 easybuild/easyconfigs/g/gompic/gompic-2017.01.eb create mode 100644 easybuild/easyconfigs/g/goolfc/goolfc-2017.01.eb create mode 100644 easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-5.4.0-2.26.eb create mode 100644 easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-5.4.0-2.26-LAPACK-3.7.0.eb create mode 100644 easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-gcccuda-2017.01.eb create mode 100644 easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompic-2017.01-OpenBLAS-0.2.19-LAPACK-3.7.0.eb diff --git a/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61_375.26-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61_375.26-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..8bfbdd15f7 --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA/CUDA-8.0.61_375.26-GCC-5.4.0-2.26.eb @@ -0,0 +1,24 @@ +name = 'CUDA' +version = '8.0.61_375.26' + +homepage = 'https://developer.nvidia.com/cuda-toolkit' +description = """CUDA (formerly Compute Unified Device Architecture) is a parallel + computing platform and programming model created by NVIDIA and implemented by the + graphics processing units (GPUs) that they produce. CUDA gives developers access + to the virtual instruction set and memory of the parallel computational elements in CUDA GPUs.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} + +source_urls = [ + 'https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/prod/local_installers/', + 'http://developer.download.nvidia.com/compute/cuda/%(version_major_minor)s/Prod/local_installers/', + 'https://developer.nvidia.com/compute/cuda/%(version_major_minor)s/Prod2/local_installers/', +] + +sources = ['%(namelower)s_%(version)s_linux-run'] + +checksums = [ + '33e1bd980e91af4e55f3ef835c103f9b', +] + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompic-2017.01.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompic-2017.01.eb new file mode 100644 index 0000000000..98911ef733 --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.6-gompic-2017.01.eb @@ -0,0 +1,25 @@ +name = 'FFTW' +version = '3.3.6' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'gompic', 'version': '2017.01'} +toolchainopts = {'pic': True} + +source_urls = [homepage] +sources = ['fftw-%(version)s-pl2.tar.gz'] +checksums = ['927e481edbb32575397eb3d62535a856'] + +# no quad precision, requires GCC v4.6 or higher +# see also +# http://www.fftw.org/doc/Extended-and-quadruple-precision-in-Fortran.html +with_quad_prec = False + +# compilation fails when configuring with --enable-avx-128-fma, Intel compilers do not support FMA4 instructions +use_fma4 = False + +runtest = 'check' + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/g/gcccuda/gcccuda-2017.01.eb b/easybuild/easyconfigs/g/gcccuda/gcccuda-2017.01.eb new file mode 100644 index 0000000000..1dc8205870 --- /dev/null +++ b/easybuild/easyconfigs/g/gcccuda/gcccuda-2017.01.eb @@ -0,0 +1,21 @@ +easyblock = "Toolchain" + +name = 'gcccuda' +version = '2017.01' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain, along with CUDA toolkit.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +comp_name = 'GCC' +comp_ver = '5.4.0-2.26' +comp = (comp_name, comp_ver) + +# compiler toolchain dependencies +dependencies = [ + comp, + ('CUDA', '8.0.61_375.26', '', comp), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/g/gompic/gompic-2017.01.eb b/easybuild/easyconfigs/g/gompic/gompic-2017.01.eb new file mode 100644 index 0000000000..138f18ef6c --- /dev/null +++ b/easybuild/easyconfigs/g/gompic/gompic-2017.01.eb @@ -0,0 +1,23 @@ +easyblock = "Toolchain" + +name = 'gompic' +version = '2017.01' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain along with CUDA toolkit, + including OpenMPI for MPI support with CUDA features enabled.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +comp_name = 'GCC' +comp_ver = '5.4.0-2.26' +comp = (comp_name, comp_ver) + +# compiler toolchain dependencies +dependencies = [ + comp, # part of gcccuda + ('CUDA', '8.0.61_375.26', '', comp), # part of gcccuda + ('OpenMPI', '2.0.2', '', ('gcccuda', version)), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/g/goolfc/goolfc-2017.01.eb b/easybuild/easyconfigs/g/goolfc/goolfc-2017.01.eb new file mode 100644 index 0000000000..b8e965c62e --- /dev/null +++ b/easybuild/easyconfigs/g/goolfc/goolfc-2017.01.eb @@ -0,0 +1,38 @@ +easyblock = "Toolchain" + +name = 'goolfc' +version = '2017.01' + +homepage = '(none)' +description = """GCC based compiler toolchain __with CUDA support__, and including + OpenMPI for MPI support, OpenBLAS (BLAS and LAPACK support), FFTW and ScaLAPACK.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +comp_name = 'GCC' +comp_ver = '5.4.0-2.26' +comp = (comp_name, comp_ver) + +# toolchain used to build goolfc dependencies +comp_mpi_tc_name = 'gompic' +comp_mpi_tc_ver = version +comp_mpi_tc = (comp_mpi_tc_name, comp_mpi_tc_ver) + +blaslib = 'OpenBLAS' +blasver = '0.2.19' +blassuff = '-LAPACK-3.7.0' +blas = '-%s-%s%s' % (blaslib, blasver, blassuff) + +# compiler toolchain dependencies +# we need GCC and OpenMPI as explicit dependencies instead of gompi toolchain +# because of toolchain preperation functions +dependencies = [ + comp, # part of gompic + ('CUDA', '8.0.61_375.26', '', comp), # part of gompic + ('OpenMPI', '2.0.2', '', ('gcccuda', version)), # part of gompic + (blaslib, blasver, blassuff, comp), + ('FFTW', '3.3.6', '', comp_mpi_tc), + ('ScaLAPACK', '2.0.2', blas, comp_mpi_tc), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..547c202aa9 --- /dev/null +++ b/easybuild/easyconfigs/h/hwloc/hwloc-1.11.5-GCC-5.4.0-2.26.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '1.11.5' + +homepage = 'http://www.open-mpi.org/projects/hwloc/' +description = """The Portable Hardware Locality (hwloc) software package provides a portable abstraction +(across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including +NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various +system attributes such as cache and memory information as well as the locality of I/O devices such as +network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering +information about modern computing hardware so as to exploit it accordingly and efficiently.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} + +source_urls = ['http://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [('numactl', '2.0.11')] + +configopts = "--enable-libnuma=$EBROOTNUMACTL" + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-5.4.0-2.26-LAPACK-3.7.0.eb b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-5.4.0-2.26-LAPACK-3.7.0.eb new file mode 100644 index 0000000000..4c55b7dc6c --- /dev/null +++ b/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.19-GCC-5.4.0-2.26-LAPACK-3.7.0.eb @@ -0,0 +1,56 @@ +easyblock = 'ConfigureMake' + +name = 'OpenBLAS' +version = '0.2.19' + +lapackver = '3.7.0' +versionsuffix = '-LAPACK-%s' % lapackver + +homepage = 'http://xianyi.github.com/OpenBLAS/' +description = """OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} + +lapack_src = 'lapack-%s.tgz' % lapackver +large_src = 'large.tgz' +timing_src = 'timing.tgz' + +lapack_unpack_cmd = 'cd %(name)s-%(version)s; rm -rf lapack-netlib;' +lapack_unpack_cmd += 'mkdir lapack-netlib;' +lapack_unpack_cmd += 'tar -C lapack-netlib --strip-components=1 -zxf %s; cd -' + +sources = [ + 'v%(version)s.tar.gz', + (lapack_src, lapack_unpack_cmd), + large_src, + timing_src, +] +source_urls = [ + # order matters, trying to download the LAPACK tarball from GitHub causes trouble + "http://www.netlib.org/lapack/", + "http://www.netlib.org/lapack/timing/", + "https://github.com/xianyi/OpenBLAS/archive/", +] + +patches = [ + (large_src, '.'), + (timing_src, '.'), + 'OpenBLAS-%(version)s_LAPACK-3.7.0-fixes.patch', +] + +skipsteps = ['configure'] + +buildopts = 'BINARY=64 USE_THREAD=1 CC="$CC" FC="$F77" NO_AFFINITY=1' +installopts = "USE_THREAD=1 PREFIX=%(installdir)s" + +# extensive testing can be enabled by uncommenting the line below +# runtest = 'PATH=.:$PATH lapack-timing' + +sanity_check_paths = { + 'files': ['include/cblas.h', 'include/f77blas.h', 'include/lapacke_config.h', 'include/lapacke.h', + 'include/lapacke_mangling.h', 'include/lapacke_utils.h', 'include/openblas_config.h', + 'lib/libopenblas.a', 'lib/libopenblas.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-gcccuda-2017.01.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-gcccuda-2017.01.eb new file mode 100644 index 0000000000..f4abe2cc5c --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-gcccuda-2017.01.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '2.0.2' + +homepage = 'http://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-2 implementation.""" + +toolchain = {'name': 'gcccuda', 'version': '2017.01'} + +source_urls = ['http://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['886698becc5bea8c151c0af2074b8392'] + +dependencies = [('hwloc', '1.11.5')] + +configopts = '--enable-shared --enable-mpi-thread-multiple --with-verbs ' +configopts += '--enable-mpirun-prefix-by-default ' # suppress failure modes in relation to mpirun path +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-cuda=$CUDA_HOME ' # CUDA-aware build; N.B. --disable-dlopen is incompatible + +# needed for --with-verbs +osdependencies = [('libibverbs-dev', 'libibverbs-devel')] + +libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % binfile for binfile in ["ompi_info", "opal_wrapper", "orterun"]] + + ["lib/lib%s.%s" % (libfile, SHLIB_EXT) for libfile in libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompic-2017.01-OpenBLAS-0.2.19-LAPACK-3.7.0.eb b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompic-2017.01-OpenBLAS-0.2.19-LAPACK-3.7.0.eb new file mode 100644 index 0000000000..8f3ffb84de --- /dev/null +++ b/easybuild/easyconfigs/s/ScaLAPACK/ScaLAPACK-2.0.2-gompic-2017.01-OpenBLAS-0.2.19-LAPACK-3.7.0.eb @@ -0,0 +1,25 @@ +name = 'ScaLAPACK' +version = '2.0.2' + +homepage = 'http://www.netlib.org/scalapack/' +description = """The ScaLAPACK (or Scalable LAPACK) library includes a subset of LAPACK routines + redesigned for distributed memory MIMD parallel computers.""" + +toolchain = {'name': 'gompic', 'version': '2017.01'} +toolchainopts = {'pic': True} + +source_urls = [homepage] +sources = [SOURCELOWER_TGZ] + +blaslib = 'OpenBLAS' +blasver = '0.2.19' +blassuff = '-LAPACK-3.7.0' + +versionsuffix = "-%s-%s%s" % (blaslib, blasver, blassuff) + +dependencies = [(blaslib, blasver, blassuff)] + +# parallel build tends to fail, so disabling it +parallel = 1 + +moduleclass = 'numlib' -- GitLab From 1ac0a3d24973bb43c15c441e2a7e7dd018d87276 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 11 May 2017 21:17:56 +0200 Subject: [PATCH 1083/1311] adding easyconfigs: R-3.4.0-intel-2017a-X11-20170314.eb --- .../r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 514 ++++++++++++++++++ 1 file changed, 514 insertions(+) create mode 100644 easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb new file mode 100644 index 0000000000..0f9329d684 --- /dev/null +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -0,0 +1,514 @@ +name = 'R' +version = '3.4.0' +x11ver = '20170314' +versionsuffix = '-X11-%s' % x11ver + +homepage = 'http://www.r-project.org/' +description = """R is a free software environment for statistical computing and graphics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] + +preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +#Actually use Tcl/Tk +configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' +# Enable graphics capabilities for plotting. +configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" +# some recommended packages may fail in a parallel build (e.g. Matrix), and we're installing them anyway below +configopts += " --with-recommended-packages=no" + +dependencies = [ + ('X11', x11ver), + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('cairo', '1.14.8'), + ('libreadline', '7.0'), + ('ncurses', '6.0'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), + ('zlib', '1.2.11'), + ('SQLite', '3.17.0'), + ('PCRE', '8.40'), + ('libpng', '1.6.29'), # for plotting in R + ('libjpeg-turbo', '1.5.1'), # for plottting in R + ('LibTIFF', '4.0.7'), + ('Java', '1.8.0_121', '', True), # Java bindings are built if Java is found, might as well provide it + ('Tcl', '8.6.6'), # for tcltk + ('Tk', '8.6.6'), # for tcltk + ('cURL', '7.53.1'), # for RCurl + ('libxml2', '2.9.4'), # for XML + ('GDAL', '2.1.3', '-Python-2.7.13'), # for rgdal + ('PROJ', '4.9.3'), # for rgdal + ('GMP', '6.1.2'), # for igraph + ('NLopt', '2.4.2'), # for nloptr + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +name_tmpl = '%(name)s_%(version)s.tar.gz' +ext_options = { + 'source_urls': [ + 'http://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'http://cran.r-project.org/src/contrib/', # current version of packages + 'http://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': name_tmpl, +} + +# !! order of packages is important !! +# packages updated on March 7th 2017 +exts_list = [ + # default libraries, only here to sanity check their presence + 'base', + 'datasets', + 'graphics', + 'grDevices', + 'grid', + 'methods', + 'splines', + 'stats', + 'stats4', + 'tools', + 'utils', + # non-standard libraries, should be specified with fixed versions! + ('Rmpi', '0.6-6', ext_options), + ('abind', '1.4-5', ext_options), + ('magic', '1.5-6', ext_options), + ('geometry', '0.3-6', dict(ext_options.items() + [('patches', ['geometry-0.3-4-icc.patch'])])), + ('bit', '1.1-12', ext_options), + ('filehash', '2.4-1', ext_options), + ('ff', '2.2-13', ext_options), + ('bnlearn', '4.1.1', ext_options), + ('bootstrap', '2017.2', ext_options), + ('combinat', '0.0-8', ext_options), + ('deal', '1.2-37', ext_options), + ('fdrtool', '1.2.15', ext_options), + ('formatR', '1.5', ext_options), + ('gtools', '3.5.0', ext_options), + ('gdata', '2.17.0', ext_options), + ('GSA', '1.03', ext_options), + ('highr', '0.6', ext_options), + ('infotheo', '1.2.0', ext_options), + ('lars', '1.2', ext_options), + ('lazy', '1.2-15', ext_options), + ('kernlab', '0.9-25', ext_options), + ('mime', '0.5', ext_options), + ('markdown', '0.8', ext_options), + ('mlbench', '2.1-1', ext_options), + ('NLP', '0.1-10', ext_options), + ('mclust', '5.2.3', ext_options), + ('RANN', '2.5', ext_options), + ('rmeta', '2.16', ext_options), + ('segmented', '0.5-1.4', ext_options), + ('som', '0.3-5.1', ext_options), + ('SuppDists', '1.1-9.4', ext_options), + ('stabledist', '0.7-1', ext_options), + ('survivalROC', '1.0.3', ext_options), + ('pspline', '1.0-17', ext_options), + ('timeDate', '3012.100', ext_options), + ('longmemo', '1.0-0', ext_options), + ('ADGofTest', '0.3', ext_options), + ('ade4', '1.7-6', ext_options), + ('AlgDesign', '1.1-7.3', ext_options), + ('base64enc', '0.1-3', ext_options), + ('BH', '1.62.0-1', ext_options), + ('brew', '1.0-6', ext_options), + ('Brobdingnag', '1.2-4', ext_options), + ('corpcor', '1.6.9', ext_options), + ('longitudinal', '1.1.12', ext_options), + ('backports', '1.0.5', ext_options), + ('checkmate', '1.8.2', ext_options), + ('Rcpp', '0.12.10', ext_options), + ('cubature', '1.3-8', ext_options), + ('DEoptimR', '1.0-8', ext_options), + ('digest', '0.6.12', ext_options), + ('fastmatch', '1.1-0', ext_options), + ('ffbase', '0.12.3', ext_options), + ('iterators', '1.0.8', ext_options), + ('maps', '3.1.1', ext_options), + ('nnls', '1.4', ext_options), + ('sendmailR', '1.2-1', ext_options), + ('spam', '1.4-0', ext_options), + ('subplex', '1.2-2', ext_options), + ('stringi', '1.1.5', ext_options), + ('magrittr', '1.5', ext_options), + ('stringr', '1.2.0', ext_options), + ('evaluate', '0.10', ext_options), + ('logspline', '2.1.9', ext_options), + ('ncbit', '2013.03.29', ext_options), + ('permute', '0.9-4', ext_options), + ('plotrix', '3.6-5', ext_options), + ('randomForest', '4.6-12', ext_options), + ('scatterplot3d', '0.3-40', ext_options), + ('SparseM', '1.77', ext_options), + ('tripack', '1.3-8', ext_options), + ('irace', '2.3', ext_options), + ('rJava', '0.9-8', ext_options), + ('lattice', '0.20-35', ext_options), + ('RColorBrewer', '1.1-2', ext_options), + ('latticeExtra', '0.6-28', ext_options), + ('Matrix', '1.2-10', ext_options), + ('png', '0.1-7', ext_options), + ('RcppArmadillo', '0.7.800.2.0', ext_options), + ('plyr', '1.8.4', ext_options), + ('pROC', '1.9.1', ext_options), + ('quadprog', '1.5-5', ext_options), + ('BB', '2014.10-1', ext_options), + ('BBmisc', '1.11', ext_options), + ('fail', '1.3', ext_options), + ('rlecuyer', '0.3-4', ext_options), + ('snow', '0.4-2', ext_options), + ('MASS', '7.3-47', ext_options), + ('tree', '1.0-37', ext_options), + ('pls', '2.6-0', ext_options), + ('class', '7.3-14', ext_options), + ('e1071', '1.6-8', ext_options), + ('nnet', '7.3-12', ext_options), + ('nlme', '3.1-131', ext_options), + ('minqa', '1.2.4', ext_options), + ('RcppEigen', '0.3.3.3.0', ext_options), + ('MatrixModels', '0.4-1', ext_options), + ('quantreg', '5.33', ext_options), + ('mgcv', '1.8-17', ext_options), + ('colorspace', '1.3-2', ext_options), + ('robustbase', '0.92-7', ext_options), + ('sp', '1.2-4', ext_options), + ('zoo', '1.8-0', ext_options), + ('lmtest', '0.9-35', ext_options), + ('vcd', '1.4-3', ext_options), + ('snowfall', '1.84-6.1', ext_options), + ('rpart', '4.1-11', ext_options), + ('survival', '2.41-3', ext_options), + ('mice', '2.30', ext_options), + ('urca', '1.3-0', ext_options), + ('fracdiff', '1.4-2', ext_options), + ('logistf', '1.22', ext_options), + ('akima', '0.6-2', ext_options), + ('bitops', '1.0-6', ext_options), + ('boot', '1.3-19', ext_options), + ('mixtools', '1.1.0', ext_options), + ('cluster', '2.0.6', ext_options), + ('gclus', '1.3.1', ext_options), + ('coda', '0.19-1', ext_options), + ('codetools', '0.2-15', ext_options), + ('foreach', '1.4.3', ext_options), + ('doMC', '1.3.4', ext_options), + ('DBI', '0.6-1', ext_options), + ('foreign', '0.8-68', ext_options), + ('gam', '1.14-4', ext_options), + ('gamlss.data', '5.0-0', ext_options), + ('gamlss.dist', '5.0-0', ext_options), + ('hwriter', '1.3.2', ext_options), + ('KernSmooth', '2.23-15', ext_options), + ('xts', '0.9-7', ext_options), + ('TTR', '0.23-1', ext_options), + ('quantmod', '0.4-8', ext_options), + ('mnormt', '1.5-5', ext_options), + ('mvtnorm', '1.0-6', ext_options), + ('pcaPP', '1.9-61', ext_options), + ('numDeriv', '2016.8-1', ext_options), + ('lava', '1.5', ext_options), + ('prodlim', '1.6.1', ext_options), + ('pscl', '1.4.9', ext_options), + ('memoise', '1.1.0', ext_options), + ('plogr', '0.1-1', ext_options), + ('RSQLite', '1.1-2', ext_options), + ('BatchJobs', '1.6', ext_options), + ('sandwich', '2.3-4', ext_options), + ('sfsmisc', '1.1-0', ext_options), + ('spatial', '7.3-11', ext_options), + ('VGAM', '1.0-3', ext_options), + ('waveslim', '1.7.5', ext_options), + ('xtable', '1.8-2', ext_options), + ('profileModel', '0.5-9', ext_options), + ('brglm', '0.5-9', ext_options), + ('deSolve', '1.14', ext_options), + ('tseriesChaos', '0.1-13', ext_options), + ('tseries', '0.10-40', ext_options), + ('fastICA', '1.2-0', ext_options), + ('R.methodsS3', '1.7.1', ext_options), + ('R.oo', '1.21.0', ext_options), + ('cgdsr', '1.2.6', ext_options), + ('R.utils', '2.5.0', ext_options), + ('R.matlab', '3.6.1', ext_options), + ('gbm', '2.1.3', ext_options), + ('dichromat', '2.0-0', ext_options), + ('Formula', '1.2-1', ext_options), + ('acepack', '1.4.1', ext_options), + ('reshape2', '1.4.2', ext_options), + ('gtable', '0.2.0', ext_options), + ('munsell', '0.4.3', ext_options), + ('labeling', '0.3', ext_options), + ('scales', '0.4.1', ext_options), + ('proto', '1.0.0', ext_options), + ('lazyeval', '0.2.0', ext_options), + ('assertthat', '0.2.0', ext_options), + ('tibble', '1.3.0', ext_options), + ('ggplot2', '2.2.1', ext_options), + ('gridExtra', '2.2.1', ext_options), + ('chron', '2.3-50', ext_options), + ('data.table', '1.10.4', ext_options), + ('viridisLite', '0.2.0', ext_options), + ('viridis', '0.4.0', ext_options), + ('yaml', '2.1.14', ext_options), + ('jsonlite', '1.4', ext_options), + ('htmltools', '0.3.6', ext_options), + ('htmlwidgets', '0.8', ext_options), + ('knitr', '1.15.1', ext_options), + ('htmlTable', '1.9', ext_options), + ('Hmisc', '4.0-3', ext_options), + ('fastcluster', '1.1.22', ext_options), + ('registry', '0.3', ext_options), + ('pkgmaker', '0.22', ext_options), + ('rngtools', '1.2.4', ext_options), + ('doParallel', '1.0.10', ext_options), + ('gridBase', '0.4-7', ext_options), + ('NMF', '0.20.6', ext_options), + ('irlba', '2.1.2', ext_options), + ('igraph', '1.0.1', ext_options), + ('GeneNet', '1.2.13', ext_options), + ('ape', '4.1', ext_options), + ('RJSONIO', '1.3-0', ext_options), + ('caTools', '1.17.1', ext_options), + ('gplots', '3.0.1', ext_options), + ('ROCR', '1.0-7', ext_options), + ('httpuv', '1.3.3', ext_options), + ('R6', '2.2.1', ext_options), + ('rjson', '0.2.15', ext_options), + ('sourcetools', '0.1.6', ext_options), + ('shiny', '1.0.3', ext_options), + ('seqinr', '3.3-6', ext_options), + ('LearnBayes', '2.15', ext_options), + ('deldir', '0.1-14', ext_options), + ('gmodels', '2.16.2', ext_options), + ('expm', '0.999-2', ext_options), + ('spdep', '0.6-13', ext_options), + ('dplyr', '0.5.0', ext_options), + ('vegan', '2.4-3', ext_options), + ('adegenet', '2.0.1', ext_options), + ('prettyunits', '1.0.2', ext_options), + ('progress', '1.1.2', ext_options), + ('rncl', '0.8.2', ext_options), + ('XML', '3.98-1.7', ext_options), + ('crayon', '1.3.2', ext_options), + ('praise', '1.0.0', ext_options), + ('testthat', '1.0.2', ext_options), + ('rprojroot', '1.2', ext_options), + ('rmarkdown', '1.5', ext_options), + ('curl', '2.6', ext_options), + ('openssl', '0.9.6', ext_options), + ('httr', '1.2.1', ext_options), + ('reshape', '0.8.6', ext_options), + ('xml2', '1.1.1', ext_options), + ('bold', '0.4.0', ext_options), + ('triebeard', '0.3.0', ext_options), + ('urltools', '1.6.0', ext_options), + ('httpcode', '0.2.0', ext_options), + ('crul', '0.3.4', ext_options), + ('rredlist', '0.3.0', ext_options), + ('rentrez', '1.0.4', ext_options), + ('rotl', '3.0.3', ext_options), + ('solrium', '0.4.0', ext_options), + ('ritis', '0.5.4', ext_options), + ('worrms', '0.1.0', ext_options), + ('natserv', '0.1.4', ext_options), + ('taxize', '0.8.4', ext_options), + ('tidyr', '0.6.2', ext_options), + ('uuid', '0.1-2', ext_options), + ('RNeXML', '2.0.7', ext_options), + ('phylobase', '0.8.4', ext_options), + ('adephylo', '1.1-10', ext_options), + ('animation', '2.5', ext_options), + ('bigmemory.sri', '0.1.3', ext_options), + ('bigmemory', '4.5.19', dict(ext_options.items() + [('patches', ['bigmemory-4.5.19_icpc-wd308.patch'])])), + ('calibrate', '1.7.2', ext_options), + ('clusterGeneration', '1.3.4', ext_options), + ('raster', '2.5-8', ext_options), + ('dismo', '1.1-4', ext_options), + ('extrafontdb', '1.0', ext_options), + ('Rttf2pt1', '1.3.4', ext_options), + ('extrafont', '0.17', ext_options), + ('fields', '8.10', ext_options), + ('shapefiles', '0.7', ext_options), + ('fossil', '0.3.7', ext_options), + ('geiger', '2.0.6', ext_options), + ('glmnet', '2.0-10', ext_options), + ('rgl', '0.98.1', ext_options), + ('labdsv', '1.8-0', ext_options), + ('stabs', '0.6-2', ext_options), + ('modeltools', '0.2-21', ext_options), + ('strucchange', '1.5-1', ext_options), + ('TH.data', '1.0-8', ext_options), + ('multcomp', '1.4-6', ext_options), + ('coin', '1.1-3', ext_options), + ('party', '1.2-3', ext_options), + ('mboost', '2.8-0', ext_options), + ('msm', '1.6.4', ext_options), + ('nor1mix', '1.2-2', ext_options), + ('np', '0.60-3', ext_options), + ('polynom', '1.3-9', ext_options), + ('polspline', '1.1.12', ext_options), + ('rms', '5.1-1', ext_options), + ('RWekajars', '3.9.1-3', ext_options), + ('RWeka', '0.4-34', ext_options), + ('slam', '0.1-40', ext_options), + ('tm', '0.7-1', ext_options), + ('TraMineR', '1.8-13', ext_options), + ('chemometrics', '1.4.2', ext_options), + ('FNN', '1.1', ext_options), + ('ipred', '0.9-6', ext_options), + ('statmod', '1.4.29', ext_options), + ('miscTools', '0.6-22', ext_options), + ('maxLik', '1.3-4', ext_options), + ('mlogit', '0.2-4', ext_options), + ('getopt', '1.20.0', ext_options), + ('gsalib', '2.1', ext_options), + ('optparse', '1.3.2', ext_options), + ('klaR', '0.6-12', ext_options), + ('neuRosim', '0.2-12', ext_options), + ('locfit', '1.5-9.1', ext_options), + ('GGally', '1.3.0', ext_options), + ('beanplot', '1.2', ext_options), + ('clValid', '0.6-6', ext_options), + ('matrixStats', '0.52.2', ext_options), + ('DiscriMiner', '0.1-29', ext_options), + ('ellipse', '0.3-8', ext_options), + ('leaps', '3.0', ext_options), + ('nloptr', '1.0.4', ext_options), + ('lme4', '1.1-13', ext_options), + ('pbkrtest', '0.4-7', ext_options), + ('car', '2.1-4', ext_options), + ('flashClust', '1.01-2', ext_options), + ('FactoMineR', '1.35', ext_options), + ('flexclust', '1.3-4', ext_options), + ('flexmix', '2.3-14', ext_options), + ('prabclus', '2.2-6', ext_options), + ('diptest', '0.75-7', ext_options), + ('trimcluster', '0.1-2', ext_options), + ('fpc', '2.1-10', ext_options), + ('BiasedUrn', '1.07', ext_options), + ('TeachingDemos', '2.10', ext_options), + ('kohonen', '3.0.2', dict(ext_options.items() + [('patches', ['kohonen-3.0.2_icpc-wd308.patch'])])), + ('base64', '2.0', ext_options), + ('doRNG', '1.6.6', ext_options), + ('nleqslv', '3.2', ext_options), + ('Deriv', '3.8.0', ext_options), + ('RGCCA', '2.1.2', ext_options), + ('pheatmap', '1.0.8', ext_options), + ('openxlsx', '4.0.17', ext_options), + ('pvclust', '2.0-0', ext_options), + ('RCircos', '1.2.0', ext_options), + ('lambda.r', '1.1.9', ext_options), + ('futile.options', '1.0.0', ext_options), + ('futile.logger', '1.4.3', ext_options), + ('VennDiagram', '1.6.17', ext_options), + ('xlsxjars', '0.6.1', ext_options), + ('xlsx', '0.5.7', ext_options), + ('forecast', '8.0', dict(ext_options.items() + [('patches', ['forecast-6.1_icpc-wd308.patch'])])), + ('fma', '2.3', ext_options), + ('expsmooth', '2.3', ext_options), + ('fpp', '0.5', ext_options), + ('maptools', '0.9-2', ext_options), + ('tensor', '1.5', ext_options), + ('polyclip', '1.6-1', ext_options), + ('goftest', '1.1-1', ext_options), + ('spatstat.utils', '1.6-0', ext_options), + ('spatstat', '1.51-0', ext_options), + ('rgdal', '1.2-7', ext_options), + ('gdalUtils', '2.0.1.7', ext_options), + ('pracma', '2.0.4', ext_options), + ('RCurl', '1.95-4.8', ext_options), + ('bio3d', '2.3-1', ext_options), + ('AUC', '0.3.0', ext_options), + ('interpretR', '0.2.4', ext_options), + ('cvAUC', '1.1.0', ext_options), + ('SuperLearner', '2.0-21', ext_options), + ('lpSolve', '5.6.13', ext_options), + ('mediation', '4.4.5', ext_options), + ('ModelMetrics', '1.1.0', ext_options), + ('caret', '6.0-76', ext_options), + ('adabag', '4.1', ext_options), + ('parallelMap', '1.3', ext_options), + ('ParamHelpers', '1.10', ext_options), + ('ggvis', '0.4.3', ext_options), + ('mlr', '2.11', ext_options), + ('unbalanced', '2.0', ext_options), + ('RSNNS', '0.4-9', ext_options), + ('abc.data', '1.0', ext_options), + ('abc', '2.1', ext_options), + ('lhs', '0.14', ext_options), + ('tensorA', '0.36', ext_options), + ('EasyABC', '1.5', ext_options), + ('shape', '1.4.2', ext_options), + ('whisker', '0.3-2', ext_options), + ('rstudioapi', '0.6', ext_options), + ('commonmark', '1.2', ext_options), + ('desc', '1.1.0', ext_options), + ('roxygen2', '6.0.1', ext_options), + ('git2r', '0.18.0', ext_options), + ('rversions', '1.0.3', ext_options), + ('withr', '1.0.2', ext_options), + ('devtools', '1.13.0', ext_options), + ('Rook', '1.1-1', ext_options), + ('Cairo', '1.5-9', dict(ext_options.items() + [('patches', ['Cairo-1.5-9.patch'])])), + ('RMTstat', '0.3', ext_options), + ('Lmoments', '1.2-3', ext_options), + ('distillery', '1.0-2', ext_options), + ('extRemes', '2.0-8', ext_options), + ('pixmap', '0.4-11', ext_options), + ('tkrplot', '0.0-23', ext_options), + ('misc3d', '0.8-4', ext_options), + ('multicool', '0.1-10', dict(ext_options.items() + [('patches', ['multicool-0.1-10_icpc-wd308.patch'])])), + ('ks', '1.10.6', ext_options), + ('logcondens', '2.1.5', ext_options), + ('Iso', '0.0-17', ext_options), + ('penalized', '0.9-50', ext_options), + ('clusterRepro', '0.5-1.1', ext_options), + ('randomForestSRC', '2.4.2', ext_options), + ('sm', '2.2-5.4', ext_options), + ('psych', '1.7.5', ext_options), + ('pbivnorm', '0.6.0', ext_options), + ('lavaan', '0.5-23.1097', ext_options), + ('matrixcalc', '1.0-3', ext_options), + ('arm', '1.9-3', ext_options), + ('mi', '1.0', ext_options), + ('visNetwork', '1.0.3', ext_options), + ('rgexf', '0.15.3', ext_options), + ('influenceR', '0.1.0', ext_options), + ('DiagrammeR', '0.9.0', ext_options), + ('sem', '3.1-9', ext_options), + ('jpeg', '0.1-8', ext_options), + ('network', '1.13.0', ext_options), + ('statnet.common', '3.3.0', ext_options), + ('sna', '2.4', ext_options), + ('glasso', '1.8', dict(ext_options.items() + [('patches', [('glasso-1.8-ifort-no-fixed.patch', 1)])])), + ('huge', '1.2.7', ext_options), + ('d3Network', '0.5.2.1', ext_options), + ('ggm', '2.3', ext_options), + ('qgraph', '1.4.3', ext_options), + ('diveRsity', '1.9.90', ext_options), + ('doSNOW', '1.0.14', ext_options), + ('phangorn', '2.2.0', ext_options), + ('geepack', '1.2-1', ext_options), + ('lubridate', '1.6.0', ext_options), + ('biom', '0.3.12', ext_options), + ('pim', '2.0.1', ext_options), + ('minpack.lm', '1.2-1', ext_options), + ('rootSolve', '1.7', ext_options), + ('diagram', '1.6.3', ext_options), + ('FME', '1.3.5', ext_options), + ('bmp', '0.2', ext_options), + ('readbitmap', '0.1-4', ext_options), + ('purrr', '0.2.2', ext_options), + ('downloader', '0.4', ext_options), + ('imager', '0.40.2', dict(ext_options.items() + [('patches', ['imager-0.40.2_icpc-wd308.patch'])])), +] + +moduleclass = 'lang' + -- GitLab From 907e2454dc8d7bb28ef3852a02d94ab0461b1d7b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 11 May 2017 21:25:15 +0200 Subject: [PATCH 1084/1311] add missing patch files for kohoner/imager extensions in R v3.4.0 --- .../r/R/imager-0.40.2_icpc-wd308.patch | 21 +++++++++++++++++ .../r/R/kohonen-3.0.2_icpc-wd308.patch | 23 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/r/R/imager-0.40.2_icpc-wd308.patch create mode 100644 easybuild/easyconfigs/r/R/kohonen-3.0.2_icpc-wd308.patch diff --git a/easybuild/easyconfigs/r/R/imager-0.40.2_icpc-wd308.patch b/easybuild/easyconfigs/r/R/imager-0.40.2_icpc-wd308.patch new file mode 100644 index 0000000000..bdcf948b63 --- /dev/null +++ b/easybuild/easyconfigs/r/R/imager-0.40.2_icpc-wd308.patch @@ -0,0 +1,21 @@ +add -wd308 compiler option to avoid compiler warning #308 being treated as an error +author: Kenneth Hoste (HPC-UGent) +--- imager/MD5.orig 2017-05-11 19:41:40.494524499 +0200 ++++ imager/MD5 2017-05-11 19:41:57.914534000 +0200 +@@ -178,7 +178,7 @@ + ad2654de31942fed6a81372ca95c69f8 *man/warp.Rd + 175e0ff835838c3a97f4e262ea2e22a9 *man/watershed.Rd + 6d2ea6da4b089e34b2c74fa9915598ad *man/where.Rd +-2d2d7a47e364f82c3a83d1def6997313 *src/Makevars.in ++4b7df5fe6555e13b54525ca11ac3bfb7 *src/Makevars.in + 0921c95e100ceb6edfe481db8258741c *src/Makevars.win + ad6fce36dbcb58ce1a05b98b5a87f263 *src/RcppExports.cpp + cac489a7495799d378cf0c10c8db3ebd *src/colourspace.cpp +--- imager/src/Makevars.in.orig 2017-05-11 19:41:06.494524465 +0200 ++++ imager/src/Makevars.in 2017-05-11 19:41:20.957122000 +0200 +@@ -1,3 +1,5 @@ + PKG_CPPFLAGS = $(SHLIB_OPENMP_CFLAGS) @CPPFLAGS@ @HAVE_FFTW@ @FFTW_CFLAGS@ @TIFF_CFLAGS@ -I../inst/include -DCIMG_COMPILING -Dcimg_use_rng -Dcimg_use_r -Dcimg_use_fftw3_singlethread -Dcimg_verbosity=1 -Dcimg_date='""' -Dcimg_time='""' + PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) @LIBS@ @HAVE_FFTW@ @FFTW_LIBS@ @TIFF_LIBS@ $(RCPP_LDFLAGS) + ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CXXFLAGS = -wd308 diff --git a/easybuild/easyconfigs/r/R/kohonen-3.0.2_icpc-wd308.patch b/easybuild/easyconfigs/r/R/kohonen-3.0.2_icpc-wd308.patch new file mode 100644 index 0000000000..7c77bb7a74 --- /dev/null +++ b/easybuild/easyconfigs/r/R/kohonen-3.0.2_icpc-wd308.patch @@ -0,0 +1,23 @@ +add -wd308 compiler option to avoid compiler warning #308 being treated as an error +author: Kenneth Hoste (HPC-UGent) +--- kohonen/MD5.orig 2017-05-11 18:42:50.494520969 +0200 ++++ kohonen/MD5 2017-05-11 18:43:02.299001000 +0200 +@@ -41,7 +41,7 @@ + 4074da8d1e8ba029d52de2a9ff24124b *man/unit.distances.Rd + c7f0e4739945511e6fcd67289320eab1 *man/wines.Rd + ad838f45c3a9435e7b2229b8cc6682ae *man/yeast.Rd +-74d73c2023015c6b008d9fdd11d60b14 *src/Makevars ++803f88be6a292da8d8ab21bdf420bda0 *src/Makevars + fada3f440c7f59d360c9303e803b1460 *src/RcppExports.cpp + 0b0c395e4a39ef2e6b31d2459c449912 *src/batch-supersom.cpp + 478e89466560e680760d7781c81acbcc *src/distance-functions.cpp +--- kohonen/src/Makevars.orig 2017-05-11 18:42:07.494520926 +0200 ++++ kohonen/src/Makevars 2017-05-11 18:42:34.436276000 +0200 +@@ -1,3 +1,4 @@ +-PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS) +-PKG_CXXFLAGS = $(SHLIB_OPENMP_CFLAGS) +-PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) ++# disable Intel C++ compiler (icpc) warning/error #308, to avoid 'member "std::complex::_M_value" is inaccessible' ++PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS) -wd308 ++PKG_CXXFLAGS = $(SHLIB_OPENMP_CFLAGS) -wd308 ++PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) -wd308 -- GitLab From f2abe0f2e6cfb51114b25520766aad0dfa32f615 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 11 May 2017 21:30:04 +0200 Subject: [PATCH 1085/1311] adding easyconfigs: R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb --- ...le-Bioconductor-3.5-intel-2017a-R-3.4.0.eb | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb diff --git a/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb new file mode 100644 index 0000000000..99eea4dc16 --- /dev/null +++ b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb @@ -0,0 +1,168 @@ +easyblock = 'Bundle' + +name = 'R-bundle-Bioconductor' +version = '3.5' +versionsuffix = '-R-%(rver)s' + +homepage = 'http://www.r-project.org/' +description = """R is a free software environment for statistical computing and graphics.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +dependencies = [ + ('R', '3.4.0', '-X11-20170314'), + ('HDF5', '1.10.0-patch1'), # for rhdf5 +] + +name_tmpl = '%(name)s_%(version)s.tar.gz' +ext_options = { + 'source_urls': [ + 'http://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'http://cran.r-project.org/src/contrib/', # current version of packages + 'http://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': name_tmpl, +} +bioconductor_options = { + 'source_urls': [ + 'http://bioconductor.org/packages/3.5/bioc/src/contrib/', + 'http://bioconductor.org/packages/3.5/data/annotation/src/contrib/', + 'http://bioconductor.org/packages/3.5/data/experiment/src/contrib/', + ], + 'source_tmpl': name_tmpl, +} + +exts_defaultclass = 'RPackage' +exts_filter = ("R -q --no-save", "library(%(ext_name)s)") + +# CRAN packages on which these Bioconductor packages depend are available in R module on which this depends +# !! order of packages is important !! +exts_list = [ + ('BiocGenerics', '0.22.0', bioconductor_options), + ('Biobase', '2.36.2', bioconductor_options), + ('S4Vectors', '0.14.0', bioconductor_options), + ('IRanges', '2.10.0', bioconductor_options), + ('GenomeInfoDbData', '0.99.0', bioconductor_options), + ('GenomeInfoDb', '1.12.0', bioconductor_options), + ('AnnotationDbi', '1.38.0', bioconductor_options), + ('zlibbioc', '1.22.0', bioconductor_options), + ('XVector', '0.16.0', bioconductor_options), + ('Biostrings', '2.44.0', bioconductor_options), + ('GenomicRanges', '1.28.1', bioconductor_options), + ('BiocParallel', '1.10.1', bioconductor_options), + ('Rsamtools', '1.28.0', bioconductor_options), + ('lambda.r', '1.1.9', ext_options), + ('futile.options', '1.0.0', ext_options), + ('futile.logger', '1.4.3', ext_options), + ('DelayedArray', '0.2.2', bioconductor_options), + ('SummarizedExperiment', '1.6.1', bioconductor_options), + ('GenomicAlignments', '1.12.0', bioconductor_options), + ('ShortRead', '1.34.0', bioconductor_options), + ('graph', '1.54.0', bioconductor_options), + ('affyio', '1.46.0', bioconductor_options), + ('BiocInstaller', '1.26.0', bioconductor_options), + ('preprocessCore', '1.38.1', bioconductor_options), + ('affy', '1.54.0', bioconductor_options), + ('GO.db', '3.4.1', bioconductor_options), + ('limma', '3.32.2', bioconductor_options), + ('RBGL', '1.52.0', bioconductor_options), + ('org.Hs.eg.db', '3.4.1', bioconductor_options), + ('AnnotationForge', '1.18.0', bioconductor_options), + ('KEGG.db', '3.2.3', bioconductor_options), + ('annaffy', '1.48.0', bioconductor_options), + ('gcrma', '2.48.0', bioconductor_options), + ('oligoClasses', '1.38.0', bioconductor_options), + ('edgeR', '3.18.1', bioconductor_options), + ('PFAM.db', '3.4.1', bioconductor_options), + ('perm', '1.0-0.0', ext_options), + ('baySeq', '2.10.0', bioconductor_options), + ('qvalue', '2.8.0', bioconductor_options), + ('impute', '1.50.1', bioconductor_options), + ('samr', '2.0', ext_options), + ('DEGseq', '1.30.0', bioconductor_options), + ('hgu133plus2.db', '3.2.3', bioconductor_options), + ('illuminaio', '0.18.0', bioconductor_options), + ('rtracklayer', '1.36.0', bioconductor_options), + ('biomaRt', '2.32.0', bioconductor_options), + ('GenomicFeatures', '1.28.0', bioconductor_options), + ('bumphunter', '1.16.0', bioconductor_options), + ('multtest', '2.32.0', bioconductor_options), + ('siggenes', '1.50.0', bioconductor_options), + ('DynDoc', '1.54.0', bioconductor_options), + ('genoset', '1.32.0', bioconductor_options), + ('NOISeq', '2.20.0', bioconductor_options), + ('Rgraphviz', '2.20.0', bioconductor_options), + ('RNASeqPower', '1.16.0', bioconductor_options), + ('annotate', '1.54.0', bioconductor_options), + ('GSEABase', '1.38.0', bioconductor_options), + ('genefilter', '1.58.1', bioconductor_options), + ('Category', '2.38.0', bioconductor_options), + ('GOstats', '2.42.0', bioconductor_options), + ('BSgenome', '1.44.0', bioconductor_options), + ('VariantAnnotation', '1.22.0', bioconductor_options), + ('interactiveDisplayBase', '1.14.0', bioconductor_options), + ('AnnotationHub', '2.8.1', bioconductor_options), + ('AnnotationFilter', '1.0.0', bioconductor_options), + ('ProtGenerics', '1.8.0', bioconductor_options), + ('ensembldb', '2.0.1', bioconductor_options), + ('biovizBase', '1.24.0', bioconductor_options), + ('OrganismDbi', '1.18.0', bioconductor_options), + ('ggbio', '1.24.0', bioconductor_options), + ('geneplotter', '1.54.0', bioconductor_options), + ('DESeq2', '1.16.1', bioconductor_options), + ('ReportingTools', '2.16.0', bioconductor_options), + ('affycoretools', '1.48.0', bioconductor_options), + ('TxDb.Hsapiens.UCSC.hg19.knownGene', '3.2.2', bioconductor_options), + ('Homo.sapiens', '1.3.1', bioconductor_options), + ('BSgenome.Hsapiens.UCSC.hg19', '1.4.0', bioconductor_options), + ('AgiMicroRna', '2.26.0', bioconductor_options), + ('GenomeGraphs', '1.36.0', bioconductor_options), + ('geneLenDataBase', '1.12.0', bioconductor_options), + ('goseq', '1.28.0', bioconductor_options), + ('KEGGREST', '1.16.0', bioconductor_options), + ('KEGGgraph', '1.34.0', bioconductor_options), + ('KEGGprofile', '1.18.0', bioconductor_options), + ('GEOquery', '2.42.0', bioconductor_options), + ('mixOmics', '6.1.3', ext_options), + ('minfi', '1.22.1', bioconductor_options), + ('FDb.InfiniumMethylation.hg19', '2.2.0', bioconductor_options), + ('methylumi', '2.22.0', bioconductor_options), + ('lumi', '2.28.0', bioconductor_options), + ('widgetTools', '1.54.0', bioconductor_options), + ('tkWidgets', '1.54.0', bioconductor_options), + ('Mfuzz', '2.36.0', bioconductor_options), + ('venn', '1.2', ext_options), + ('maSigPro', '1.48.0', bioconductor_options), + ('SPIA', '2.28.0', bioconductor_options), + ('Gviz', '1.20.0', bioconductor_options), + ('cummeRbund', '2.18.0', bioconductor_options), + ('GenomicFiles', '1.12.0', bioconductor_options), + ('derfinderHelper', '1.10.0', bioconductor_options), + ('derfinder', '1.10.3', bioconductor_options), + ('polyester', '1.12.0', bioconductor_options), + ('Rsubread', '1.26.0', bioconductor_options), + ('pcaMethods', '1.68.0', bioconductor_options), + ('marray', '1.54.0', bioconductor_options), + ('CGHbase', '1.36.0', bioconductor_options), + ('sigaR', '1.24.0', bioconductor_options), + ('HCsnip', '1.16.0', bioconductor_options), + ('metagenomeSeq', '1.18.0', bioconductor_options), + ('gdsfmt', '1.12.0', bioconductor_options), + ('SNPRelate', '1.10.1', dict(bioconductor_options.items() + [('patches', ['SNPRelate-1.6.5_no-SSE-intr.patch'])])), + ('rhdf5', '2.20.0', bioconductor_options), + ('biomformat', '1.4.0', bioconductor_options), + ('phyloseq', '1.20.0', bioconductor_options), + ('ALDEx2', '1.8.0', bioconductor_options), + ('RcppParallel', '4.3.20', ext_options), + ('dada2', '1.4.0', bioconductor_options), + ('LEA', '1.8.1', bioconductor_options), +] + +modextrapaths = {'R_LIBS': ''} + +sanity_check_paths = { + 'files': [], + 'dirs': ['AnnotationDbi', 'BiocInstaller', 'GenomicFeatures'], +} + +moduleclass = 'bio' -- GitLab From 5ada904273c09ec09a905f36c44ee31bc583c9a0 Mon Sep 17 00:00:00 2001 From: Miguel Dias Costa Date: Fri, 12 May 2017 09:56:28 +0800 Subject: [PATCH 1086/1311] prepare release notes for eb321 --- RELEASE_NOTES | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index d67162b731..7fd5ec2c84 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,9 +3,23 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 6,943 easyconfig files, for 1,216 different software packages, +The latest version of easybuild-easyconfig provides 7,037 easyconfig files, for 1,228 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. +v3.2.1 (May 12th 2017) +---------------------- + +bugfix/update release +- added example easyconfig files for 12 new software packages: + - AdapterRemoval (#4509), blasr_libcpp (#4566), canu (#4473), enchant (#4567), hunspell (#4567), memkind (#4544), + NLTK (#4565), pbbam (#4566), pbdagcon (#4566), pyenchant (#4567), Siesta (#4562), xarray (#4556) +- added additional easyconfigs for various supported software packages, including: + - ASE 3.13.0, AdapterRemoval 2.2.0, BLASR 20170330, BerkeleyGW 1.2.0, BioKanga 4.3.6, Boost 1.63.0, Boost 1.63.0, blasr_libcpp 20170426, CGAL 4.8.1, CGAL 4.9, CMake 3.8.1, CUDA 8.0.61_375.26, Coreutils 8.27, canu 1.4, EasyBuild 3.2.0.eb, Eigen 3.3.3, enchant 1.6.1, FFTW 3.3.6, flex 2.5.39, GROMACS 2016.1, gcccuda 2017.01.eb, gompic 2017.01.eb, googletest 1.8.0, goolfc 2017.01.eb, grib_api 1.21.0, HDF5 1.10.1, HDF5 1.8.18, HDF5 1.8.18, HDF5 1.8.18, HTSlib 20160107, h5py 2.7.0, hanythingondemand 3.2.2, hanythingondemand 3.2.2, hunspell 1.6.1, hwloc 1.11.5, JasPer 1.900.1, Keras 2.0.4, LLVM 3.9.1, LLVM 4.0.0, METIS 5.1.0, MPFR 3.1.5, matplotlib 2.0.1, memkind 1.5.0, NAMD 2.11, NAMD 2.12, NLTK 3.2.2, nose parameterized, OSU Micro, OTF2 2.0, OpenBLAS 0.2.19, OpenFOAM 2.2.2, OpenFOAM 2.3.1, OpenFOAM 2.4.0, OpenFOAM 4.0, OpenFOAM 4.1, OpenFOAM 4.1, OpenMPI 2.0.2, OpenMPI 2.0.2, ParMETIS 4.0.3, ParaView 5.2.0, ParaView 5.2.0, ParaView 5.3.0, PyYAML 3.12, Python 2.7.13, pandas 0.20.1, pbbam 20170508, pbdagcon 20170330, pkg config, pkgconfig 1.2.2, protobuf python, protobuf python, protobuf 3.3.0, pyenchant 1.6.8, Qt 4.8.7, Qt5 5.8.0, RAxML 8.2.10, SCOTCH 6.0.4, ScaLAPACK 2.0.2, Siesta 4.0, Siesta 4.1, SuiteSparse 4.5.5, SuiteSparse 4.5.5, Szip 2.1, scikit learn, Tcl 8.5.19, Tensorflow 1.1.0, Tensorflow 1.1.0, Theano 0.9.0, tbb 2017.4.174.eb, tbb 2017_U5, x265 2.4, xarray 0.9.5 +- minor enhancements, including: + - update source URLs in libpciaccess easyconfigs (#3960) + - enable use of double precision floating point in METIS 5.1.0 foss/2016a easyconfig (#4555) + + v3.2.0 (May 5th 2017) --------------------- -- GitLab From 9059b01edbf202cc26b0313d7f85c12ba5bd3a02 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 May 2017 08:51:58 +0200 Subject: [PATCH 1087/1311] fix update date for extensions in R 3.4.0 easyconfig --- easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb index 0f9329d684..949ed58bbb 100644 --- a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -13,7 +13,7 @@ source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" -#Actually use Tcl/Tk +# Actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" @@ -62,7 +62,7 @@ ext_options = { } # !! order of packages is important !! -# packages updated on March 7th 2017 +# packages updated on May 11th 2017 exts_list = [ # default libraries, only here to sanity check their presence 'base', -- GitLab From 143826bdf5c4a40c95e9bb07bd20bd38f1914964 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 May 2017 08:53:34 +0200 Subject: [PATCH 1088/1311] add update date for extensions in R-bundle-Bioconductor 3.5 easyconfig --- .../R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb index 99eea4dc16..80580237a7 100644 --- a/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb +++ b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb @@ -37,6 +37,7 @@ exts_filter = ("R -q --no-save", "library(%(ext_name)s)") # CRAN packages on which these Bioconductor packages depend are available in R module on which this depends # !! order of packages is important !! +# packages updated on May 11th 2017 exts_list = [ ('BiocGenerics', '0.22.0', bioconductor_options), ('Biobase', '2.36.2', bioconductor_options), -- GitLab From 583d4167050a61ca7a9737d49a17bfd7a38910f6 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Fri, 12 May 2017 09:53:54 +0200 Subject: [PATCH 1089/1311] {tools}[intel/2016b] imbalanced-learn 0.2.1 /w Python 2.7.12 (REVIEW) --- ...d-learn-0.2.1-intel-2016b-Python-2.7.12.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..6f8572780e --- /dev/null +++ b/easybuild/easyconfigs/i/imbalanced-learn/imbalanced-learn-0.2.1-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'imbalanced-learn' +version = '0.2.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/scikit-learn-contrib/imbalanced-learn' +description = """imbalanced-learn is a Python package offering a number of re-sampling techniques commonly used in + datasets showing strong between-class imbalance.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.12'), + ('scikit-learn', '0.18.1', versionsuffix), +] + +options = {'modulename': 'imblearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' -- GitLab From d637dc7a1b7d40ae4c70305b74ab3c1d3c7fc18e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 May 2017 10:26:08 +0200 Subject: [PATCH 1090/1311] bump version to v3.2.1 and massage release notes --- RELEASE_NOTES | 6 ++++-- setup.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 7fd5ec2c84..4b1afa6117 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,7 +3,7 @@ For more detailed information, please see the git log. These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html. -The latest version of easybuild-easyconfig provides 7,037 easyconfig files, for 1,228 different software packages, +The latest version of easybuild-easyconfig provides 7,036 easyconfig files, for 1,228 different software packages, 25 different (compiler) toolchains, 13 software bundles and 1 meta-package. v3.2.1 (May 12th 2017) @@ -13,8 +13,10 @@ bugfix/update release - added example easyconfig files for 12 new software packages: - AdapterRemoval (#4509), blasr_libcpp (#4566), canu (#4473), enchant (#4567), hunspell (#4567), memkind (#4544), NLTK (#4565), pbbam (#4566), pbdagcon (#4566), pyenchant (#4567), Siesta (#4562), xarray (#4556) +- added new easyconfigs for existing toolchains: + - goolfc 2017.01 (#4577) - added additional easyconfigs for various supported software packages, including: - - ASE 3.13.0, AdapterRemoval 2.2.0, BLASR 20170330, BerkeleyGW 1.2.0, BioKanga 4.3.6, Boost 1.63.0, Boost 1.63.0, blasr_libcpp 20170426, CGAL 4.8.1, CGAL 4.9, CMake 3.8.1, CUDA 8.0.61_375.26, Coreutils 8.27, canu 1.4, EasyBuild 3.2.0.eb, Eigen 3.3.3, enchant 1.6.1, FFTW 3.3.6, flex 2.5.39, GROMACS 2016.1, gcccuda 2017.01.eb, gompic 2017.01.eb, googletest 1.8.0, goolfc 2017.01.eb, grib_api 1.21.0, HDF5 1.10.1, HDF5 1.8.18, HDF5 1.8.18, HDF5 1.8.18, HTSlib 20160107, h5py 2.7.0, hanythingondemand 3.2.2, hanythingondemand 3.2.2, hunspell 1.6.1, hwloc 1.11.5, JasPer 1.900.1, Keras 2.0.4, LLVM 3.9.1, LLVM 4.0.0, METIS 5.1.0, MPFR 3.1.5, matplotlib 2.0.1, memkind 1.5.0, NAMD 2.11, NAMD 2.12, NLTK 3.2.2, nose parameterized, OSU Micro, OTF2 2.0, OpenBLAS 0.2.19, OpenFOAM 2.2.2, OpenFOAM 2.3.1, OpenFOAM 2.4.0, OpenFOAM 4.0, OpenFOAM 4.1, OpenFOAM 4.1, OpenMPI 2.0.2, OpenMPI 2.0.2, ParMETIS 4.0.3, ParaView 5.2.0, ParaView 5.2.0, ParaView 5.3.0, PyYAML 3.12, Python 2.7.13, pandas 0.20.1, pbbam 20170508, pbdagcon 20170330, pkg config, pkgconfig 1.2.2, protobuf python, protobuf python, protobuf 3.3.0, pyenchant 1.6.8, Qt 4.8.7, Qt5 5.8.0, RAxML 8.2.10, SCOTCH 6.0.4, ScaLAPACK 2.0.2, Siesta 4.0, Siesta 4.1, SuiteSparse 4.5.5, SuiteSparse 4.5.5, Szip 2.1, scikit learn, Tcl 8.5.19, Tensorflow 1.1.0, Tensorflow 1.1.0, Theano 0.9.0, tbb 2017.4.174.eb, tbb 2017_U5, x265 2.4, xarray 0.9.5 + - HDF5 1.10.1, NAMD 2.12, OpenFOAM 4.1, pandas 0.20.1, ParaView 5.2.0, R 3.4.0, R-bundle-Bioconductor 3.5, Tensorflow 1.1.0 - minor enhancements, including: - update source URLs in libpciaccess easyconfigs (#3960) - enable use of double precision floating point in METIS 5.1.0 foss/2016a easyconfig (#4555) diff --git a/setup.py b/setup.py index 85590c2983..cdf0d69c62 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.3.0.dev0' +VERSION = '3.2.1' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From e531e19778783ca7f5285c4c8d6dc8b2485b8756 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 May 2017 14:26:56 +0200 Subject: [PATCH 1091/1311] (re-)bump to v3.3.0.dev0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index cdf0d69c62..85590c2983 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ from distutils import log # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '3.2.1' +VERSION = '3.3.0.dev0' API_VERSION = VERSION.split('.')[0] EB_VERSION = '.'.join(VERSION.split('.')[0:2]) -- GitLab From ee171bc1dce094e97f1862ecc390486b82b7c86f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 May 2017 14:32:46 +0200 Subject: [PATCH 1092/1311] adding easyconfigs: EasyBuild-3.2.1.eb --- .../e/EasyBuild/EasyBuild-3.2.1.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.1.eb diff --git a/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.1.eb b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.1.eb new file mode 100644 index 0000000000..dfebb15dea --- /dev/null +++ b/easybuild/easyconfigs/e/EasyBuild/EasyBuild-3.2.1.eb @@ -0,0 +1,38 @@ +easyblock = 'EB_EasyBuildMeta' + +name = 'EasyBuild' +version = '3.2.1' + +homepage = 'http://hpcugent.github.com/easybuild/' +description = """EasyBuild is a software build and installation framework + written in Python that allows you to install software in a structured, + repeatable and robust way.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = [ + # vsc-install + 'https://pypi.python.org/packages/82/ec/19d85d2bb91b562195d00db9ac82d7529904e7eabc0597720966bf74714f/', + # vsc-base + 'https://pypi.python.org/packages/f7/66/1ff7ecc4a93ba37e063f5bfbe395e95a547b1dec73b017c2724f4475a958/', + # easybuild-framework + 'https://pypi.python.org/packages/77/a2/34beda6176a1c85e99861f6a5e881c3a5c67e68e1edc50258a7d941195e8/', + # easybuild-easyblocks + 'https://pypi.python.org/packages/3d/02/a5d239cbe7dfaecf712edc4aa53192239db174505e81d4c793e20abd96b6/', + # easybuild-easyconfigs + 'https://pypi.python.org/packages/ac/ae/185b876b02b2f2310fe52bb41539d23a00e421e5b19c246779e4b2be03a8/', +] +# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?) +sources = [ + 'vsc-install-0.10.26.tar.gz', + 'vsc-base-2.5.8.tar.gz', + 'easybuild-framework-%(version)s.tar.gz', + 'easybuild-easyblocks-%(version)s.tar.gz', + 'easybuild-easyconfigs-%(version)s.tar.gz', +] + +# EasyBuild is a (set of) Python packages, so it depends on Python +# usually, we want to use the system Python, so no actual Python dependency is listed +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +moduleclass = 'tools' -- GitLab From 8aeae6284f5fe6bcb0bb5832f4a1ea0ec04ce5e2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 14 May 2017 19:39:51 +0200 Subject: [PATCH 1093/1311] adding easyconfigs: NAMD-2.12-intel-2017a-mpi.eb --- .../n/NAMD/NAMD-2.12-intel-2017a-mpi.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb new file mode 100644 index 0000000000..a859f5adf4 --- /dev/null +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb @@ -0,0 +1,24 @@ +name = 'NAMD' +version = '2.12' +versionsuffix = '-mpi' + +homepage = 'http://www.ks.uiuc.edu/Research/namd/' +description = """NAMD is a parallel molecular dynamics code designed for high-performance simulation of + large biomolecular systems.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['NAMD_%(version)s_Source.tar.gz'] + +dependencies = [ + ('Tcl', '8.6.6'), + ('FFTW', '3.3.6'), +] + +# /bin/csh is required by 'config' script +osdependencies = ['tcsh'] + +charm_arch = "mpi-linux-x86_64" + +moduleclass = 'chem' -- GitLab From e75dd82ba959670948e38161852763656350f6c9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 10:26:16 +0200 Subject: [PATCH 1094/1311] style fixes: use single quotes, fix order in toolchainopts --- easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb index a859f5adf4..fd5bdbb7ed 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-intel-2017a-mpi.eb @@ -7,7 +7,7 @@ description = """NAMD is a parallel molecular dynamics code designed for high-pe large biomolecular systems.""" toolchain = {'name': 'intel', 'version': '2017a'} -toolchainopts = {'usempi': True, 'pic': True} +toolchainopts = {'pic': True, 'usempi': True} sources = ['NAMD_%(version)s_Source.tar.gz'] @@ -19,6 +19,6 @@ dependencies = [ # /bin/csh is required by 'config' script osdependencies = ['tcsh'] -charm_arch = "mpi-linux-x86_64" +charm_arch = 'mpi-linux-x86_64' moduleclass = 'chem' -- GitLab From 28a58de9d80083c85473f36012476856d93edcb9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 11:20:31 +0200 Subject: [PATCH 1095/1311] adding easyconfigs: STAR-2.5.3a-intel-2017a.eb --- .../s/STAR/STAR-2.5.3a-intel-2017a.eb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 easybuild/easyconfigs/s/STAR/STAR-2.5.3a-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/STAR/STAR-2.5.3a-intel-2017a.eb b/easybuild/easyconfigs/s/STAR/STAR-2.5.3a-intel-2017a.eb new file mode 100644 index 0000000000..7bb56d5efd --- /dev/null +++ b/easybuild/easyconfigs/s/STAR/STAR-2.5.3a-intel-2017a.eb @@ -0,0 +1,43 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# Modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'MakeCp' + +name = 'STAR' +version = '2.5.3a' + +homepage = 'https://github.com/alexdobin/STAR' +description = "STAR aligns RNA-seq reads to a reference genome using uncompressed suffix arrays." + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'openmp': True} + +source_urls = ['https://github.com/alexdobin/STAR/archive/'] +sources = ['%(version)s.tar.gz'] + +dependencies = [ + ('zlib', '1.2.11'), +] + +start_dir = 'source' + +buildopts = ' STAR && make STARlong' + +parallel = 1 + +files_to_copy = [ + (['source/STAR', 'source/STARlong'], 'bin'), + 'CHANGES.md', 'doc', 'extras', 'LICENSE', 'README.md', 'RELEASEnotes.md', +] + +sanity_check_paths = { + 'files': ["bin/STAR", "bin/STARlong"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 61ed4e7c403d624f0d85b986ff9a3818eb6371a4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 11:51:15 +0200 Subject: [PATCH 1096/1311] adding easyconfigs: Velvet-1.2.10-intel-2017a-mt-kmer_37.eb --- .../Velvet-1.2.10-intel-2017a-mt-kmer_37.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/v/Velvet/Velvet-1.2.10-intel-2017a-mt-kmer_37.eb diff --git a/easybuild/easyconfigs/v/Velvet/Velvet-1.2.10-intel-2017a-mt-kmer_37.eb b/easybuild/easyconfigs/v/Velvet/Velvet-1.2.10-intel-2017a-mt-kmer_37.eb new file mode 100644 index 0000000000..19b58c6e52 --- /dev/null +++ b/easybuild/easyconfigs/v/Velvet/Velvet-1.2.10-intel-2017a-mt-kmer_37.eb @@ -0,0 +1,31 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA, 2012-2013 The Cyprus Institute +# Authors:: Cedric Laczny , Fotis Georgatos , +# Thekla Loizou , Andreas Panteli +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +name = 'Velvet' +version = '1.2.10' +versionsuffix = '-mt-kmer_37' + +homepage = 'http://www.ebi.ac.uk/~zerbino/velvet/' +description = """Sequence assembler for very short reads""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'openmp': True, 'pic': True} + +sources = ['%(namelower)s_%(version)s.tgz'] +source_urls = ['http://www.ebi.ac.uk/~zerbino/%(namelower)s'] + +buildopts = "OPENMP=1 MAXKMERLENGTH=%s LONGSEQUENCES=1" % versionsuffix.split('_')[1] + +postinstallcmds = ["cd contrib/MetaVelvet-1.* && make && cd ../../ && cp -a contrib %(installdir)s/"] + +moduleclass = 'bio' -- GitLab From 7934c12a2e7fc6fd81543a7c8df06a1b6788a6b8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 11:52:38 +0200 Subject: [PATCH 1097/1311] adding easyconfigs: Bpipe-0.9.9.2-intel-2017a.eb, Java-1.8.0_131.eb --- .../b/Bpipe/Bpipe-0.9.9.2-intel-2017a.eb | 21 +++++++++++++++++++ .../easyconfigs/j/Java/Java-1.8.0_131.eb | 15 +++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bpipe/Bpipe-0.9.9.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/j/Java/Java-1.8.0_131.eb diff --git a/easybuild/easyconfigs/b/Bpipe/Bpipe-0.9.9.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bpipe/Bpipe-0.9.9.2-intel-2017a.eb new file mode 100644 index 0000000000..b0ee97e8f9 --- /dev/null +++ b/easybuild/easyconfigs/b/Bpipe/Bpipe-0.9.9.2-intel-2017a.eb @@ -0,0 +1,21 @@ +easyblock = 'Tarball' + +name = 'Bpipe' +version = '0.9.9.2' + +homepage = 'http://docs.bpipe.org/' +description = "Bpipe - a tool for running and managing bioinformatics pipelines" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://download.bpipe.org/versions/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Java', '1.8.0_131', '', True)] + +sanity_check_paths = { + 'files': ['bin/bpipe', 'lib/bpipe.jar'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/j/Java/Java-1.8.0_131.eb b/easybuild/easyconfigs/j/Java/Java-1.8.0_131.eb new file mode 100644 index 0000000000..2bb2551e95 --- /dev/null +++ b/easybuild/easyconfigs/j/Java/Java-1.8.0_131.eb @@ -0,0 +1,15 @@ +name = 'Java' +version = '1.8.0_131' + +homepage = 'http://java.com/' +description = """Java Platform, Standard Edition (Java SE) lets you develop and deploy + Java applications on desktops and servers.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# download the tar.gz directly from http://www.oracle.com/technetwork/java/javase/downloads/index.html +(vp, vs) = version.split('_') +altver = '%su%s' % (vp.split('.')[1], vs) +sources = ['jdk-%s-linux-x64.tar.gz' % altver] + +moduleclass = 'lang' -- GitLab From 26cd2367b99136755e104c2dd2b5063f67c5c957 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 16:19:34 +0200 Subject: [PATCH 1098/1311] adding easyconfigs: netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb, netCDF-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb, netCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb --- ...tCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb | 25 +++++++++++++ ...F-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb | 18 ++++++++++ .../netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb | 36 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb diff --git a/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb b/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb new file mode 100644 index 0000000000..62c2012841 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF-C++4/netCDF-C++4-4.3.0-intel-2017a-HDF5-1.8.18.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'netCDF-C++4' +version = '4.3.0' +versionsuffix = '-HDF5-1.8.18' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/Unidata/netcdf-cxx4/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('netCDF', '4.4.1.1', versionsuffix)] + +sanity_check_paths = { + 'files': ['include/netcdf', 'lib/libnetcdf_c++4.a', 'lib/libnetcdf_c++4.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb new file mode 100644 index 0000000000..188697273d --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF-Fortran/netCDF-Fortran-4.4.4-intel-2017a-HDF5-1.8.18.eb @@ -0,0 +1,18 @@ +name = 'netCDF-Fortran' +version = '4.4.4' +versionsuffix = '-HDF5-1.8.18' + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/Unidata/netcdf-fortran/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [('netCDF', '4.4.1.1', versionsuffix)] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb new file mode 100644 index 0000000000..8bc6d56640 --- /dev/null +++ b/easybuild/easyconfigs/n/netCDF/netCDF-4.4.1.1-intel-2017a-HDF5-1.8.18.eb @@ -0,0 +1,36 @@ +name = 'netCDF' +version = '4.4.1.1' +hdf5_ver = '1.8.18' +versionsuffix = '-HDF5-%s' % hdf5_ver + +homepage = 'http://www.unidata.ucar.edu/software/netcdf/' +description = """NetCDF (network Common Data Form) is a set of software libraries + and machine-independent data formats that support the creation, access, and sharing of array-oriented + scientific data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = ['v%(version)s.tar.gz'] +source_urls = [ + 'https://github.com/Unidata/netcdf-c/archive/' +] + +dependencies = [ + ('HDF5', hdf5_ver), + ('cURL', '7.53.1'), + ('Szip', '2.1'), +] + +builddependencies = [ + ('CMake', '3.7.2'), + ('Doxygen', '1.8.13'), +] + +# make sure both static and shared libs are built +configopts = [ + "-DBUILD_SHARED_LIBS=OFF ", + "-DBUILD_SHARED_LIBS=ON ", +] + +moduleclass = 'data' -- GitLab From c134dc6583580744f6a678ec0671352361d19c91 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 16:52:33 +0200 Subject: [PATCH 1099/1311] adding easyconfigs: Doris-4.04beta4-intel-2017a.eb, Doris-4.06beta2-intel-2017a.eb --- .../d/Doris/Doris-4.04beta4-intel-2017a.eb | 16 ++++++++++++++++ .../d/Doris/Doris-4.06beta2-intel-2017a.eb | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/d/Doris/Doris-4.04beta4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/d/Doris/Doris-4.06beta2-intel-2017a.eb diff --git a/easybuild/easyconfigs/d/Doris/Doris-4.04beta4-intel-2017a.eb b/easybuild/easyconfigs/d/Doris/Doris-4.04beta4-intel-2017a.eb new file mode 100644 index 0000000000..ad3c1ecff3 --- /dev/null +++ b/easybuild/easyconfigs/d/Doris/Doris-4.04beta4-intel-2017a.eb @@ -0,0 +1,16 @@ +name = 'Doris' +version = '4.04beta4' + +homepage = 'http://doris.tudelft.nl/' +description = "Delft object-oriented radar interferometric software" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://doris.tudelft.nl/software/'] +sources = ['doris_v%(version)s.tar.gz'] + +dependencies = [ + ('FFTW', '3.3.6'), +] + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/d/Doris/Doris-4.06beta2-intel-2017a.eb b/easybuild/easyconfigs/d/Doris/Doris-4.06beta2-intel-2017a.eb new file mode 100644 index 0000000000..190f829952 --- /dev/null +++ b/easybuild/easyconfigs/d/Doris/Doris-4.06beta2-intel-2017a.eb @@ -0,0 +1,16 @@ +name = 'Doris' +version = '4.06beta2' + +homepage = 'http://doris.tudelft.nl/' +description = "Delft object-oriented radar interferometric software" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://doris.tudelft.nl/software/'] +sources = ['doris_v%(version)s.tar.gz'] + +dependencies = [ + ('FFTW', '3.3.6'), +] + +moduleclass = 'geo' -- GitLab From b1d528ec317c4f012caf7d34c67ec6f25a6008b5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 17:11:22 +0200 Subject: [PATCH 1100/1311] adding easyconfigs: EricScript-0.5.5-intel-2017a-R-3.4.0.eb, ada-2.0-5-intel-2017a-R-3.4.0.eb, BWA-0.7.15-intel-2017a.eb, SAMtools-1.4.1-intel-2017a.eb, BEDTools-2.26.0-intel-2017a.eb, seqtk-1.2-intel-2017a.eb --- .../a/ada/ada-2.0-5-intel-2017a-R-3.4.0.eb | 22 +++++++++++ .../b/BEDTools/BEDTools-2.26.0-intel-2017a.eb | 33 +++++++++++++++++ .../b/BWA/BWA-0.7.15-intel-2017a.eb | 32 ++++++++++++++++ .../EricScript-0.5.5-intel-2017a-R-3.4.0.eb | 34 +++++++++++++++++ .../s/SAMtools/SAMtools-1.4.1-intel-2017a.eb | 37 +++++++++++++++++++ .../s/seqtk/seqtk-1.2-intel-2017a.eb | 28 ++++++++++++++ 6 files changed, 186 insertions(+) create mode 100644 easybuild/easyconfigs/a/ada/ada-2.0-5-intel-2017a-R-3.4.0.eb create mode 100644 easybuild/easyconfigs/b/BEDTools/BEDTools-2.26.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2017a.eb create mode 100644 easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-1.4.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/s/seqtk/seqtk-1.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/a/ada/ada-2.0-5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/a/ada/ada-2.0-5-intel-2017a-R-3.4.0.eb new file mode 100644 index 0000000000..b1735c68ac --- /dev/null +++ b/easybuild/easyconfigs/a/ada/ada-2.0-5-intel-2017a-R-3.4.0.eb @@ -0,0 +1,22 @@ +easyblock = 'RPackage' + +name = 'ada' +version = '2.0-5' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://cran.r-project.org/web/packages/ada/index.html' +description = "Performs discrete, real, and gentle boost under both exponential and logistic loss on a given data set." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://cran.r-project.org/src/contrib/'] +sources = ['ada_%(version)s.tar.gz'] + +dependencies = [('R', '3.4.0', '-X11-20170314')] + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/b/BEDTools/BEDTools-2.26.0-intel-2017a.eb b/easybuild/easyconfigs/b/BEDTools/BEDTools-2.26.0-intel-2017a.eb new file mode 100644 index 0000000000..48be152602 --- /dev/null +++ b/easybuild/easyconfigs/b/BEDTools/BEDTools-2.26.0-intel-2017a.eb @@ -0,0 +1,33 @@ +# Author: Maxime Schmitt, University of Luxembourg +# Author: Adam Huffman, The Francis Crick Institute +# +# Based on the work of: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics (SIB) +# Biozentrum - University of Basel + +easyblock = 'MakeCp' + +name = 'BEDTools' +version = '2.26.0' + +homepage = "https://github.com/arq5x/bedtools2" +description = """The BEDTools utilities allow one to address common genomics tasks such as finding feature overlaps + and computing coverage. The utilities are largely based on four widely-used file formats: BED, GFF/GTF, VCF, + and SAM/BAM.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# https://github.com/arq5x/bedtools2/releases/download/v2.26.0/bedtools-2.26.0.tar.gz +source_urls = ['https://github.com/arq5x/bedtools2/releases/download/v%(version)s/'] +sources = ['bedtools-%(version)s.tar.gz'] + +buildopts = 'CXX="$CXX"' + +files_to_copy = ["bin", "docs", "data", "genomes", "scripts", "test"] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['bedtools', 'pairToBed', 'mergeBed', 'bedToBam', 'fastaFromBed']], + 'dirs': files_to_copy, +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2017a.eb b/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2017a.eb new file mode 100644 index 0000000000..04f7fad391 --- /dev/null +++ b/easybuild/easyconfigs/b/BWA/BWA-0.7.15-intel-2017a.eb @@ -0,0 +1,32 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA +# Authors:: George Tsouloupas , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# +# Version >= 0.7.15 +# Author: Adam Huffman +# The Francis Crick Institute +# +# Note that upstream development is mainly at: https://github.com/lh3/bwa +## + +name = 'BWA' +version = '0.7.15' + +homepage = 'http://bio-bwa.sourceforge.net/' +description = """Burrows-Wheeler Aligner (BWA) is an efficient program that aligns + relatively short nucleotide sequences against a long reference sequence such as the human genome.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/lh3/%(name)s/archive/'] +sources = ['v%(version)s.tar.gz'] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb new file mode 100644 index 0000000000..adaed6879a --- /dev/null +++ b/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb @@ -0,0 +1,34 @@ +easyblock = 'Tarball' + +name = 'EricScript' +version = '0.5.5' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://sites.google.com/site/bioericscript/home' +description = "EricScript is a computational framework for the discovery of gene fusions in paired end RNA-seq data." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('R', '3.4.0', '-X11-20170314'), + ('ada', '2.0-5', versionsuffix), + ('BWA', '0.7.15'), + ('SAMtools', '1.4.1'), + ('BEDTools', '2.26.0'), + ('seqtk', '1.2'), + ('BLAT', '3.5'), +] + +postinstallcmds = ["chmod a+rx %(installdir)s/ericscript.pl"] + +sanity_check_paths = { + 'files': ['ericscript.pl', 'LICENSE', 'README'], + 'dirs': ['lib'], +} + +modextrapaths = {'PATH': ''} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4.1-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4.1-intel-2017a.eb new file mode 100644 index 0000000000..cd48ea8cde --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.4.1-intel-2017a.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +## +name = 'SAMtools' +version = '1.4.1' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/seqtk/seqtk-1.2-intel-2017a.eb b/easybuild/easyconfigs/s/seqtk/seqtk-1.2-intel-2017a.eb new file mode 100644 index 0000000000..d6c74b18dc --- /dev/null +++ b/easybuild/easyconfigs/s/seqtk/seqtk-1.2-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'MakeCp' + +name = 'seqtk' +version = '1.2' + +homepage = 'https://github.com/lh3/seqtk/' +description = """Seqtk is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format. + It seamlessly parses both FASTA and FASTQ files which can also be optionally compressed by gzip.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['v%(version)s.tar.gz'] +source_urls = ['https://github.com/lh3/seqtk/archive/'] + +buildopts = 'CC="$CC" CFLAGS="$CLFAGS"' + +files_to_copy = ["seqtk"] + +sanity_check_paths = { + 'files': files_to_copy, + 'dirs': [], +} + +modextrapaths = { + 'PATH': [''], +} + +moduleclass = 'bio' -- GitLab From e1a4963d905de9962b793beed5336e14098d1577 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 19:35:34 +0200 Subject: [PATCH 1101/1311] {data}[intel/2017a] NCL 6.4.0 (+ deps) --- .../ESMF-6.3.0rp1-intel-2017a-HDF5-1.8.18.eb | 32 +++++++ ...0-intel-2017a-Python-2.7.13-HDF5-1.8.18.eb | 49 ++++++++++ .../n/NCL/NCL-6.4.0-intel-2017a.eb | 40 ++++++++ .../n/NCL/NCL-6.4.0_fix-types.patch | 94 +++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-2.7.13-HDF5-1.8.18.eb create mode 100644 easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/NCL/NCL-6.4.0_fix-types.patch diff --git a/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a-HDF5-1.8.18.eb b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a-HDF5-1.8.18.eb new file mode 100644 index 0000000000..7d428e69ac --- /dev/null +++ b/easybuild/easyconfigs/e/ESMF/ESMF-6.3.0rp1-intel-2017a-HDF5-1.8.18.eb @@ -0,0 +1,32 @@ +name = 'ESMF' +version = '6.3.0rp1' +versionsuffix = '-HDF5-1.8.18' + +homepage = 'http://sourceforge.net/projects/esmf' +description = """The Earth System Modeling Framework (ESMF) is software for building and coupling weather, + climate, and related models.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['%%(namelower)s_%s_src.tar.gz' % '_'.join(version.split('.'))] + +patches = [ + 'ESMF-6.1.1_libopts.patch', + 'ESMF-%(version)s_fix-file-open-test.patch', +] + +dependencies = [ + ('netCDF', '4.4.1.1', versionsuffix), + ('netCDF-Fortran', '4.4.4', versionsuffix), + ('netCDF-C++4', '4.3.0', versionsuffix), +] + +buildopts = 'ESMF_NETCDF_INCLUDE=$EBROOTNETCDFMINFORTRAN/include ' +buildopts += 'ESMF_NETCDF_LIBS="`nc-config --libs` `nf-config --flibs` `ncxx4-config --libs`"' + +# too parallel causes the build to become really slow +maxparallel = 8 + +moduleclass = 'geo' diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-2.7.13-HDF5-1.8.18.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-2.7.13-HDF5-1.8.18.eb new file mode 100644 index 0000000000..26dd6f6835 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-2.7.13-HDF5-1.8.18.eb @@ -0,0 +1,49 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.2.0' +hdf5_ver = '1.8.18' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5_ver + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] +patches = ['GDAL-%(version)s_fix-uchar-definition.patch'] + +dependencies = [ + ('Python', '2.7.13'), + ('netCDF', '4.4.1.1', '-HDF5-%s' % hdf5_ver), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', '-Python-%(pyver)s'), + ('SQLite', '3.17.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('JasPer', '1.900.1'), + ('LibTIFF', '4.0.7'), + ('zlib', '1.2.11'), + ('cURL', '7.53.1'), + ('PCRE', '8.40'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb b/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb new file mode 100644 index 0000000000..69a80fc8ea --- /dev/null +++ b/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb @@ -0,0 +1,40 @@ +name = 'NCL' +version = '6.4.0' + +homepage = 'http://www.ncl.ucar.edu' +description = """NCL is an interpreted language designed specifically for scientific data analysis and + visualization.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +#toolchainopts = {'pic': True, 'usempi': True, 'openmp': True} +toolchainopts = {'pic': True, 'openmp': True, 'cstd': 'c99'} + +# download via https://www.earthsystemgrid.org/dataset/ncl.html +sources = ['%(namelower)s_ncarg-%(version)s.tar.gz'] + +patches = ['NCL-%(version)s_fix-types.patch'] + +hdf5_ver = '1.8.18' +dependencies = [ + ('cURL', '7.53.1'), + ('JasPer', '1.900.1'), + ('g2lib', '1.4.0'), + ('g2clib', '1.6.0'), + ('HDF', '4.2.12'), + ('HDF5', hdf5_ver), + ('netCDF', '4.4.1.1', '-HDF5-%s' % hdf5_ver), + ('netCDF-Fortran', '4.4.4', '-HDF5-%s' % hdf5_ver), + ('Szip', '2.1'), + ('freetype', '2.7.1', '-libpng-1.6.29'), + ('zlib', '1.2.11'), + ('GDAL', '2.2.0', '-Python-2.7.13-HDF5-%s' % hdf5_ver), + ('UDUNITS', '2.2.24'), + ('ESMF', '6.3.0rp1', '-HDF5-%s' % hdf5_ver), + ('bzip2', '1.0.6'), + ('cairo', '1.14.8'), + ('libiconv', '1.15'), + ('GSL', '2.3'), +] +builddependencies = [('makedepend', '1.0.5')] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/n/NCL/NCL-6.4.0_fix-types.patch b/easybuild/easyconfigs/n/NCL/NCL-6.4.0_fix-types.patch new file mode 100644 index 0000000000..ecdfe831e0 --- /dev/null +++ b/easybuild/easyconfigs/n/NCL/NCL-6.4.0_fix-types.patch @@ -0,0 +1,94 @@ +fix compilation problems due to incorrect type +author: Kenneth Hoste (HPC-UGent) +--- ni/src/lib/nfp/SCRIP2KMLW.c.orig 2017-04-21 11:22:11.523861897 +0200 ++++ ni/src/lib/nfp/SCRIP2KMLW.c 2017-04-21 11:22:17.773923222 +0200 +@@ -8,17 +8,17 @@ + NhlErrorTypes SCRIP2KML_W(void) { + /* Defining the Arguments */ + /* Argument # 0 */ +- string * scrip_filename; ++ NclQuark* scrip_filename; + char * c_scrip_filename; + int ncid; + + /* Argument # 1 */ +- string * kml_filename; ++ NclQuark* kml_filename; + char * c_kml_filename; + FILE * fid; + + /* Argument # 2 */ +- string * gridname; ++ NclQuark* gridname; + char * c_gridname; + + /* End of Defining the Arguments */ +@@ -48,7 +48,7 @@ + + /* Getting Arguments values */ + /* Argument # 0 */ +- scrip_filename = (string *) NclGetArgValue( ++ scrip_filename = (NclQuark*) NclGetArgValue( + 0, + 3, + NULL, +@@ -61,7 +61,7 @@ + c_scrip_filename = NrmQuarkToString(*scrip_filename); + + /* Argument # 1 */ +- kml_filename = (string *) NclGetArgValue( ++ kml_filename = (NclQuark*) NclGetArgValue( + 1, + 3, + NULL, +@@ -74,7 +74,7 @@ + c_kml_filename = NrmQuarkToString(*kml_filename); + + /* Argument # 1 */ +- gridname = (string *) NclGetArgValue( ++ gridname = (NclQuark*) NclGetArgValue( + 2, + 3, + NULL, +@@ -212,4 +212,4 @@ + free(grid_corner_lon); + fclose(fid); + return (NhlNOERROR); +-} +\ No newline at end of file ++} +--- ni/src/lib/nfp/Unstruct2KMLW.c.orig 2017-04-21 11:20:50.403067496 +0200 ++++ ni/src/lib/nfp/Unstruct2KMLW.c 2017-04-21 11:21:34.883504667 +0200 +@@ -7,12 +7,12 @@ + NhlErrorTypes Unstruct2KML_W(void) { + /* Defining the Arguments */ + /* Argument # 0 */ +- string * filename; ++ NclQuark* filename; + char * c_filename; + FILE * fid; + + /* Argument # 1 */ +- string * gridname; ++ NclQuark* gridname; + char * c_gridname; + + /* Argument # 2 */ +@@ -50,7 +50,7 @@ + + /* Getting Arguments values */ + /* Argument # 0 */ +- filename = (string *) NclGetArgValue( ++ filename = (NclQuark*) NclGetArgValue( + 0, + 6, + NULL, +@@ -63,7 +63,7 @@ + c_filename = NrmQuarkToString(*filename); + + /* Argument # 1 */ +- gridname = (string *) NclGetArgValue( ++ gridname = (NclQuark*) NclGetArgValue( + 1, + 6, + NULL, -- GitLab From a870c28a01201cd38a21584c6f614e470204f76b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 May 2017 20:56:01 +0200 Subject: [PATCH 1102/1311] add missing patch file for GDAL 2.2.0 with intel/2017a --- .../g/GDAL/GDAL-2.2.0_fix-uchar-definition.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.2.0_fix-uchar-definition.patch diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0_fix-uchar-definition.patch b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0_fix-uchar-definition.patch new file mode 100644 index 0000000000..c876781483 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0_fix-uchar-definition.patch @@ -0,0 +1,11 @@ +add definition for uchar type that is not known by Intel compilers +author: Kenneth Hoste (HPC-UGent) +--- gdal-2.2.0/frmts/jpeg2000/jpeg2000_vsil_io.h.orig 2017-05-15 17:23:31.334324922 +0200 ++++ gdal-2.2.0/frmts/jpeg2000/jpeg2000_vsil_io.h 2017-05-15 17:23:52.134563207 +0200 +@@ -34,4 +34,6 @@ + + jas_stream_t *JPEG2000_VSIL_fopen(const char *filename, const char *mode); + ++#define uchar unsigned char ++ + #endif -- GitLab From f350e79564938b994f09e48b09bdbe88964ab95e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 09:30:27 +0200 Subject: [PATCH 1103/1311] clean up toolchainopts in NCL 6.4.0 easyconfig --- easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb b/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb index 69a80fc8ea..9fa92eb87b 100644 --- a/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb +++ b/easybuild/easyconfigs/n/NCL/NCL-6.4.0-intel-2017a.eb @@ -6,8 +6,7 @@ description = """NCL is an interpreted language designed specifically for scient visualization.""" toolchain = {'name': 'intel', 'version': '2017a'} -#toolchainopts = {'pic': True, 'usempi': True, 'openmp': True} -toolchainopts = {'pic': True, 'openmp': True, 'cstd': 'c99'} +toolchainopts = {'cstd': 'c99', 'openmp': True, 'pic': True} # download via https://www.earthsystemgrid.org/dataset/ncl.html sources = ['%(namelower)s_ncarg-%(version)s.tar.gz'] -- GitLab From 9b014dfe78bf42f2c5f26e82868346b9dd0bff48 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 09:58:11 +0200 Subject: [PATCH 1104/1311] adding easyconfigs: SCons-2.5.1-intel-2017a.eb --- .../s/SCons/SCons-2.5.1-intel-2017a.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2017a.eb b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2017a.eb new file mode 100644 index 0000000000..cfdd0743d4 --- /dev/null +++ b/easybuild/easyconfigs/s/SCons/SCons-2.5.1-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'SCons' +version = '2.5.1' + +homepage = 'http://www.scons.org/' +description = "SCons is a software construction tool." + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(namelower)s'] + +# SCons requires Python 2, rely on system Python so we can use SCons when module for Python 3.x is loaded +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] + +sanity_check_paths = { + 'files': ['bin/scons', 'bin/scons-time', 'bin/sconsign'], + 'dirs': ['lib/%(namelower)s-%(version)s/%(name)s'], +} + +options = {'modulename': False} + +moduleclass = 'devel' -- GitLab From a7191dd886149d7f146737462f4dc79bc6b58d07 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 10:17:28 +0200 Subject: [PATCH 1105/1311] adding easyconfigs: SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb --- ...SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..e2776528bd --- /dev/null +++ b/easybuild/easyconfigs/s/SpiceyPy/SpiceyPy-1.1.1-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'SpiceyPy' +version = '1.1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/AndrewAnnex/SpiceyPy' +description = "SpiceyPy is a Python wrapper for the NAIF C SPICE Toolkit (N65)" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Python', '3.6.1')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'geo' -- GitLab From 34a5f16d1c19c76a6275b1e1e76a735243bce8c8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 10:19:34 +0200 Subject: [PATCH 1106/1311] adding easyconfigs: h5py-2.7.0-intel-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb --- ...l-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb diff --git a/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb new file mode 100644 index 0000000000..22fe0fbf91 --- /dev/null +++ b/easybuild/easyconfigs/h/h5py/h5py-2.7.0-intel-2017a-Python-3.6.1-HDF5-1.10.0-patch1.eb @@ -0,0 +1,33 @@ +easyblock = 'PythonPackage' + +name = 'h5py' +version = '2.7.0' +hdf5_ver = '1.10.0-patch1' +versionsuffix = '-Python-%%(pyver)s-HDF5-%s' % hdf5_ver + +homepage = 'http://www.h5py.org/' +description = """HDF5 for Python (h5py) is a general-purpose Python interface to the Hierarchical Data Format library, + version 5. HDF5 is a versatile, mature scientific software library designed for the fast, flexible storage of enormous + amounts of data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +# to really use mpi enabled hdf5 we now seem to need a configure step +prebuildopts = ' python setup.py configure --mpi --hdf5=$EBROOTHDF5 && ' + +dependencies = [ + ('Python', '3.6.1'), + ('HDF5', hdf5_ver), + ('pkgconfig', '1.2.2', '-Python-%(pyver)s'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/'], +} + +moduleclass = 'data' -- GitLab From efa22960a1721b67796cfac831401c5c0f98d8ee Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 10:34:27 +0200 Subject: [PATCH 1107/1311] adding easyconfigs: GDAL-2.2.0-intel-2017a-Python-3.6.1.eb, GEOS-3.6.1-intel-2017a-Python-3.6.1.eb, SWIG-3.0.12-intel-2017a-Python-3.6.1.eb --- .../GDAL-2.2.0-intel-2017a-Python-3.6.1.eb | 48 +++++++++++++++++++ .../GEOS-3.6.1-intel-2017a-Python-3.6.1.eb | 29 +++++++++++ .../SWIG-3.0.12-intel-2017a-Python-3.6.1.eb | 20 ++++++++ 3 files changed, 97 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-3.6.1.eb create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..0b26815dc5 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.2.0-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,48 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.2.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] +patches = ['GDAL-%(version)s_fix-uchar-definition.patch'] + +dependencies = [ + ('Python', '3.6.1'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.17.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('JasPer', '2.0.12'), + ('LibTIFF', '4.0.7'), + ('zlib', '1.2.11'), + ('cURL', '7.53.1'), + ('PCRE', '8.40'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..786b191d55 --- /dev/null +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,29 @@ +easyblock = 'ConfigureMake' + +name = 'GEOS' +version = '3.6.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://trac.osgeo.org/geos' +description = """GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS)""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://download.osgeo.org/geos/'] +sources = [SOURCELOWER_TAR_BZ2] +patches = ['GEOS-%(version)s_fix-Python3.patch'] + +dependencies = [('Python', '3.6.1')] + +builddependencies = [('SWIG', '3.0.12', versionsuffix)] + +configopts = '--enable-python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['bin/geos-config', 'lib/libgeos.%s' % SHLIB_EXT, 'lib/libgeos.a', 'include/geos.h'], + 'dirs': ['lib/python%(pyshortver)s/site-packages/geos'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..5c78d52fbe --- /dev/null +++ b/easybuild/easyconfigs/s/SWIG/SWIG-3.0.12-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,20 @@ +name = 'SWIG' +version = '3.0.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.swig.org/' +description = """SWIG is a software development tool that connects programs written in C and C++ with + a variety of high-level programming languages.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '3.6.1'), + ('PCRE', '8.40'), +] + +moduleclass = 'devel' -- GitLab From 35513ec7cbaaf931910118fbf7f6567ffb5f5dbb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 10:35:59 +0200 Subject: [PATCH 1108/1311] add missing patch for GEOS --- .../g/GEOS/GEOS-3.6.1_fix-Python3.patch | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 easybuild/easyconfigs/g/GEOS/GEOS-3.6.1_fix-Python3.patch diff --git a/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1_fix-Python3.patch b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1_fix-Python3.patch new file mode 100644 index 0000000000..51d136b71d --- /dev/null +++ b/easybuild/easyconfigs/g/GEOS/GEOS-3.6.1_fix-Python3.patch @@ -0,0 +1,65 @@ +fix configuring with Python 3 +cfr. https://trac.osgeo.org/geos/ticket/774 +--- configure.orig 2016-12-29 17:33:15.229294313 +0100 ++++ configure 2016-12-29 18:33:27.822625611 +0100 +@@ -18329,7 +18329,7 @@ + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` ++ am_cv_python_version=`$PYTHON -c "import sys; print(sys.version[:3])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -18348,7 +18348,7 @@ + if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` ++ am_cv_python_platform=`$PYTHON -c "import sys; print(sys.platform)"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 + $as_echo "$am_cv_python_platform" >&6; } +@@ -18362,7 +18362,7 @@ + if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || ++ am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +@@ -18379,7 +18379,7 @@ + if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || ++ am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX'))" 2>/dev/null || + echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +@@ -18448,19 +18448,21 @@ + # Check for Python library path + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5 + $as_echo_n "checking for Python library path... " >&6; } +- for i in "$base_python_path/lib/python$PYTHON_VERSION/config/" "$base_python_path/lib/python$PYTHON_VERSION/" "$base_python_path/lib/python/config/" "$base_python_path/lib/python/" "$base_python_path/" "$base_python_path/libs/" ; do +- python_path=`find $i -name libpython$PYTHON_VERSION.* -print 2> /dev/null | sed "1q"` ++ for i in "$base_python_path/lib/python$PYTHON_VERSION/config/" "$base_python_path/lib/python$PYTHON_VERSION/" "$base_python_path/lib/python/config/" "$base_python_path/lib/python/" "$base_python_path/" "$base_python_path/libs/" "$base_python_path/lib/" ; do ++ python_path=`find $i -name libpython$PYTHON_VERSION*.so* -print 2> /dev/null | sed "1q"` + if test -n "$python_path" ; then + break + fi + done ++ ++ lpython_name=`python -c "import os; print(os.path.split(\"$python_path\")[1].split(\".so\")[0].split(\"lib\")[1])"` + python_path=`echo $python_path | sed "s,/libpython.*$,,"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_path" >&5 + $as_echo "$python_path" >&6; } + if test -z "$python_path" ; then + as_fn_error $? "cannot find Python library path" "$LINENO" 5 + fi +- PYTHON_LDFLAGS="-L$python_path -lpython$PYTHON_VERSION" ++ PYTHON_LDFLAGS="-L$python_path -l$lpython_name" + + # + python_site=`echo $base_python_path | sed "s/config/site-packages/"` -- GitLab From 7561b619e73b3afa2cc5bc68c2f35e798f09cbc7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 10:37:19 +0200 Subject: [PATCH 1109/1311] adding easyconfigs: motif-2.3.7-intel-2017a.eb, xbitmaps-1.1.1.eb, flex-2.6.4-GCCcore-6.3.0.eb --- .../f/flex/flex-2.6.4-GCCcore-6.3.0.eb | 24 ++++++++++++ .../m/motif/motif-2.3.7-intel-2017a.eb | 39 +++++++++++++++++++ .../easyconfigs/x/xbitmaps/xbitmaps-1.1.1.eb | 19 +++++++++ 3 files changed, 82 insertions(+) create mode 100644 easybuild/easyconfigs/f/flex/flex-2.6.4-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/m/motif/motif-2.3.7-intel-2017a.eb create mode 100644 easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1.eb diff --git a/easybuild/easyconfigs/f/flex/flex-2.6.4-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/flex/flex-2.6.4-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..c864ccaca1 --- /dev/null +++ b/easybuild/easyconfigs/f/flex/flex-2.6.4-GCCcore-6.3.0.eb @@ -0,0 +1,24 @@ +name = 'flex' +version = '2.6.4' + +homepage = 'http://flex.sourceforge.net/' +description = """Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner, + sometimes called a tokenizer, is a program which recognizes lexical patterns in text.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/'] + +checksums = ['2882e3179748cc9f9c23ec593d6adc8d'] + +dependencies = [('M4', '1.4.18')] +builddependencies = [ + ('Bison', '3.0.4'), + ('help2man', '1.47.4'), + # use same binutils version that was used when building GCC toolchain + ('binutils', '2.27', '', True), +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/m/motif/motif-2.3.7-intel-2017a.eb b/easybuild/easyconfigs/m/motif/motif-2.3.7-intel-2017a.eb new file mode 100644 index 0000000000..e0ba802b63 --- /dev/null +++ b/easybuild/easyconfigs/m/motif/motif-2.3.7-intel-2017a.eb @@ -0,0 +1,39 @@ +easyblock = 'ConfigureMake' + +name = 'motif' +version = '2.3.7' + +homepage = 'http://motif.ics.com/' +description = """Motif refers to both a graphical user interface (GUI) specification and the widget toolkit for building + applications that follow that specification under the X Window System on Unix and other POSIX-compliant systems. + It was the standard toolkit for the Common Desktop Environment and thus for Unix.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['%(name)s-%(version)s.tar.gz'] +source_urls = [SOURCEFORGE_SOURCE] + +dependencies = [ + ('X11', '20170314'), + ('libpng', '1.6.29'), + ('xbitmaps', '1.1.1', '', True), + ('freetype', '2.7.1', '-libpng-1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('bzip2', '1.0.6'), +] +builddependencies = [ + ('Autotools', '20150215'), + ('flex', '2.6.4'), + ('Bison', '3.0.4'), + ('util-linux', '2.29.2'), +] + +# makefile is not parallel safe +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libMrm.a', 'lib/libUil.a', 'lib/libXm.a', 'bin/mwm', 'bin/uil', 'bin/xmbind'], + 'dirs': ['include/Mrm', 'include/uil', 'include/X11', 'include/Xm'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1.eb b/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1.eb new file mode 100644 index 0000000000..b56ca14110 --- /dev/null +++ b/easybuild/easyconfigs/x/xbitmaps/xbitmaps-1.1.1.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'xbitmaps' +version = '1.1.1' + +homepage = "http://www.freedesktop.org/wiki/Software/xlibs" +description = """provides bitmaps for x""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCE_TAR_GZ] +source_urls = [XORG_DATA_SOURCE] + +sanity_check_paths = { + 'files': ['include/X11/bitmaps/gray'], + 'dirs': [] +} + +moduleclass = 'devel' -- GitLab From 0377a1294cf02a92a3163d815860a572958fba73 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 11:49:06 +0200 Subject: [PATCH 1110/1311] {bio}[intel/2017a] TopHat 2.1.1 --- .../t/TopHat/TopHat-2.1.1-intel-2017a.eb | 41 +++++++++++++++++++ .../TopHat-2.1.1_fix-templating-error.patch | 13 ++++++ 2 files changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/t/TopHat/TopHat-2.1.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/t/TopHat/TopHat-2.1.1_fix-templating-error.patch diff --git a/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1-intel-2017a.eb b/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1-intel-2017a.eb new file mode 100644 index 0000000000..f3be80ad62 --- /dev/null +++ b/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1-intel-2017a.eb @@ -0,0 +1,41 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# Modified by: Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'TopHat' +version = '2.1.1' + +homepage = 'http://ccb.jhu.edu/software/tophat/' +description = """TopHat is a fast splice junction mapper for RNA-Seq reads.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://ccb.jhu.edu/software/tophat/downloads/'] + +patches = [ + 'tophat-2.0.13-zlib.patch', + 'TopHat-2.1.1_fix-templating-error.patch', +] + +dependencies = [ + ('Boost', '1.64.0'), + ('zlib', '1.2.11'), +] + +configopts = '--with-boost=$EBROOTBOOST' + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/tophat'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1_fix-templating-error.patch b/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1_fix-templating-error.patch new file mode 100644 index 0000000000..0abcfeeb26 --- /dev/null +++ b/easybuild/easyconfigs/t/TopHat/TopHat-2.1.1_fix-templating-error.patch @@ -0,0 +1,13 @@ +fix templating compilation error, let type inference do its job +authors: Kenneth Hoste (HPC-UGent), Ward Poelmans (VUB) +--- tophat-2.1.1/src/tophat_reports.cpp.orig 2017-05-16 11:24:21.776900497 +0200 ++++ tophat-2.1.1/src/tophat_reports.cpp 2017-05-16 11:25:31.958523978 +0200 +@@ -2705,7 +2705,7 @@ + junction_stat.gtf_match = true; + junction_stat.accepted = true; + +- gtf_junctions.insert(make_pair(Junction(ref_id, left_coord, right_coord, antisense), junction_stat)); ++ gtf_junctions.insert(make_pair(Junction(ref_id, left_coord, right_coord, antisense), junction_stat)); + } + } + fprintf(stderr, "Loaded %d GFF junctions from %s.\n", (int)(gtf_junctions.size()), gtf_juncs.c_str()); -- GitLab From 0650f1b517d052a4e93fc7b4a99b8d5e421402fd Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 16 May 2017 13:45:29 +0200 Subject: [PATCH 1111/1311] adding easyconfigs: SeqAn-2.3.2-foss-2016b.eb --- .../s/SeqAn/SeqAn-2.3.2-foss-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb new file mode 100644 index 0000000000..28c6b25215 --- /dev/null +++ b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb @@ -0,0 +1,37 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "CMakeMake" + +name = 'SeqAn' +version = '2.3.2' + +homepage = 'https://www.seqan.de/' +description = """SeqAn is an open source C++ library of efficient algorithms and data structures + for the analysis of sequences with the focus on biological data""" + +# GCC > 5 required. https://github.com/seqan/seqan#prerequisites +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/seqan/seqan/archive/'] +sources = ['%(namelower)s-v%(version)s.tar.gz'] + +# CMake > 3 required. CMake >= 3.4 recommended +builddependencies = [('CMake', '3.4.3')] + +dependencies = [ + ('zlib', '1.2.8'), + ('bzip2', '1.0.6') +] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["gustaf_mate_joining", "mason_materializer", "mason_variator", "rabema_prepare_sam", + "seqan_tcoffee", "s4_join", "samcat", "splazers", "yara_mapper"]], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From dc8ce7b3d0b19c872e7539e880dfaee4786e8553 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Lopez Date: Tue, 16 May 2017 15:04:01 +0200 Subject: [PATCH 1112/1311] update CMake dependency to 3.7.2 --- easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb index 28c6b25215..b89f6044b4 100644 --- a/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb +++ b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb @@ -19,7 +19,7 @@ source_urls = ['https://github.com/seqan/seqan/archive/'] sources = ['%(namelower)s-v%(version)s.tar.gz'] # CMake > 3 required. CMake >= 3.4 recommended -builddependencies = [('CMake', '3.4.3')] +builddependencies = [('CMake', '3.7.2')] dependencies = [ ('zlib', '1.2.8'), -- GitLab From ebf4e914abd70d84f09a56acc1c20c3d638a10e6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 17:07:13 +0200 Subject: [PATCH 1113/1311] adding easyconfigs: NCO-4.6.6-intel-2017a.eb, ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb, libdap-3.18.1-intel-2017a.eb, LibUUID-1.0.3-intel-2017a.eb --- .../ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb | 32 +++++++++++++++++ .../l/LibUUID/LibUUID-1.0.3-intel-2017a.eb | 19 ++++++++++ .../l/libdap/libdap-3.18.1-intel-2017a.eb | 32 +++++++++++++++++ .../n/NCO/NCO-4.6.6-intel-2017a.eb | 35 +++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 easybuild/easyconfigs/a/ANTLR/ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/l/LibUUID/LibUUID-1.0.3-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libdap/libdap-3.18.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/n/NCO/NCO-4.6.6-intel-2017a.eb diff --git a/easybuild/easyconfigs/a/ANTLR/ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/a/ANTLR/ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..e00f225a13 --- /dev/null +++ b/easybuild/easyconfigs/a/ANTLR/ANTLR-2.7.7-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'ANTLR' +version = '2.7.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.antlr2.org/' +description = """ANTLR, ANother Tool for Language Recognition, (formerly PCCTS) + is a language tool that provides a framework for constructing recognizers, + compilers, and translators from grammatical descriptions containing + Java, C#, C++, or Python actions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.antlr2.org/download/'] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['%(name)s-%(version)s_includes.patch'] + +dependencies = [ + ('Java', '1.8.0_131', '', True), + ('Python', '2.7.13'), +] + +configopts = '--disable-examples --disable-csharp ' + +sanity_check_paths = { + 'files': ['bin/antlr', 'bin/antlr-config'], + 'dirs': ['include'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/l/LibUUID/LibUUID-1.0.3-intel-2017a.eb b/easybuild/easyconfigs/l/LibUUID/LibUUID-1.0.3-intel-2017a.eb new file mode 100644 index 0000000000..a50ce3901e --- /dev/null +++ b/easybuild/easyconfigs/l/LibUUID/LibUUID-1.0.3-intel-2017a.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'LibUUID' +version = '1.0.3' + +homepage = 'http://sourceforge.net/projects/libuuid/' +description = """Portable uuid C library""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['include/uuid/uuid.h', 'lib/libuuid.a', 'lib/libuuid.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libdap/libdap-3.18.1-intel-2017a.eb b/easybuild/easyconfigs/l/libdap/libdap-3.18.1-intel-2017a.eb new file mode 100644 index 0000000000..437ea556cf --- /dev/null +++ b/easybuild/easyconfigs/l/libdap/libdap-3.18.1-intel-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libdap' +version = '3.18.1' + +homepage = 'http://opendap.org/download/libdap' +description = """A C++ SDK which contains an implementation of DAP 2.0 + and the development versions of DAP3, up to 3.4. + This includes both Client- and Server-side support classes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.opendap.org/pub/source/'] +sources = [SOURCE_TAR_GZ] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.4'), +] + +dependencies = [ + ('cURL', '7.53.1'), + ('libxml2', '2.9.4'), + ('LibUUID', '1.0.3'), +] + +sanity_check_paths = { + 'files': ['bin/getdap', 'bin/getdap4', 'bin/dap-config', 'lib/libdap.a', 'lib/libdap.%s' % SHLIB_EXT], + 'dirs': ['include'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/n/NCO/NCO-4.6.6-intel-2017a.eb b/easybuild/easyconfigs/n/NCO/NCO-4.6.6-intel-2017a.eb new file mode 100644 index 0000000000..b9edf1373e --- /dev/null +++ b/easybuild/easyconfigs/n/NCO/NCO-4.6.6-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'NCO' +version = '4.6.6' + +homepage = "http://nco.sourceforge.net" +description = """manipulates and analyzes data stored in netCDF-accessible formats, including DAP, HDF4, and HDF5""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://nco.sourceforge.net/src'] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.4'), +] + +dependencies = [ + ('UDUNITS', '2.2.24'), + ('expat', '2.2.0'), + ('ANTLR', '2.7.7', '-Python-2.7.13'), + ('libdap', '3.18.1'), + ('GSL', '2.3'), + ('netCDF', '4.4.1.1', '-HDF5-1.8.18'), +] + +sanity_check_paths = { + 'files': ['bin/nc%s' % x for x in ('ap', 'ap2', 'atted', 'bo', 'diff', 'ea', 'ecat', 'es', + 'flint', 'ks', 'pdq', 'ra', 'rcat', 'rename', 'wa')] + + ['lib/libnco.a', 'lib/libnco.%s' % SHLIB_EXT, 'lib/libnco_c++.a', 'lib/libnco_c++.%s' % SHLIB_EXT], + 'dirs': ['include'], +} + +moduleclass = 'tools' -- GitLab From 06bbccbc6a65622a729a53d4d1b9555487911510 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 17:43:36 +0200 Subject: [PATCH 1114/1311] {data}[intel/2017a] CDO 1.8.1 + YAXT 0.5.1 --- .../c/CDO/CDO-1.8.1-intel-2017a.eb | 31 +++++++++++++++++++ .../y/YAXT/YAXT-0.5.1-intel-2017a.eb | 23 ++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb b/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb new file mode 100644 index 0000000000..f6f33ffc90 --- /dev/null +++ b/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'CDO' +version = '1.8.1' + +homepage = 'https://code.zmaw.de/projects/cdo' +description = """CDO is a collection of command line Operators to manipulate and analyse Climate and NWP model Data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://code.zmaw.de/attachments/download/14271/'] +checksums = ['54498438de788f245d47499efad7966c'] + +dependencies = [ + ('HDF5', '1.8.18'), + ('netCDF', '4.4.1.1', '-HDF5-1.8.18'), + ('YAXT', '0.5.1'), +] + +configopts = "--with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF" +# fix for linking issues with HDF5 libraries for libcdi, should link with both -lnetcdf and -lhdf5_hl -lhdf5 +prebuildopts = "find libcdi -name Makefile | xargs sed -i 's/^\(LIBS.*\)/\\1 -lhdf5_hl -lhdf5/g' && " + +sanity_check_paths = { + 'files': ['bin/cdo'], + 'dirs': [], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2017a.eb b/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2017a.eb new file mode 100644 index 0000000000..4cdb872a2c --- /dev/null +++ b/easybuild/easyconfigs/y/YAXT/YAXT-0.5.1-intel-2017a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'YAXT' +version = '0.5.1' + +homepage = 'https://www.dkrz.de/redmine/projects/yaxt' +description = "Yet Another eXchange Tool" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://www.dkrz.de/redmine/attachments/download/473/'] +checksums = ['2176c5b1096146e58163656b9d83c0b3'] + +configopts = 'FC="$F90" FCFLAGS="$F90FLAGS -cpp"' + +sanity_check_paths = { + 'files': ['include/yaxt.h', 'include/yaxt.mod', 'lib/libyaxt.a', 'lib/libyaxt.%s' % SHLIB_EXT], + 'dirs': ['include/xt'], +} + +moduleclass = 'tools' -- GitLab From 0c48bec1e62a5778a068bd6bb9acdd3e4952f610 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 19:44:51 +0200 Subject: [PATCH 1115/1311] simplify patching of libcdi Makefiles in CDO easyconfig --- easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb b/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb index f6f33ffc90..1e3e7c4c76 100644 --- a/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb +++ b/easybuild/easyconfigs/c/CDO/CDO-1.8.1-intel-2017a.eb @@ -21,7 +21,7 @@ dependencies = [ configopts = "--with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF" # fix for linking issues with HDF5 libraries for libcdi, should link with both -lnetcdf and -lhdf5_hl -lhdf5 -prebuildopts = "find libcdi -name Makefile | xargs sed -i 's/^\(LIBS.*\)/\\1 -lhdf5_hl -lhdf5/g' && " +prebuildopts = "find libcdi -name Makefile | xargs sed -i 's/-lnetcdf -lnetcdf/-lnetcdf -lhdf5_hl -lhdf5/g' && " sanity_check_paths = { 'files': ['bin/cdo'], -- GitLab From 4aebea8ec5da414b987f37af99914dddb715ca4b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 May 2017 21:47:14 +0200 Subject: [PATCH 1116/1311] use 'git diff --name-only' and $TRAVIS_COMMIT_RANGE in Travis config to get list of changed files --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 07cebed738..2fcb5e365f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,5 +40,7 @@ install: - if [ ! -z $LMOD_VERSION ]; then source $(which install_eb_dep.sh) lua-5.1.4.8 $HOME; fi - if [ ! -z $LMOD_VERSION ]; then source $(which install_eb_dep.sh) Lmod-${LMOD_VERSION} $HOME; fi script: + - echo $TRAVIS_COMMIT_RANGE + - cd $TRAVIS_BUILD_DIR; git diff --name-only $(echo $TRAVIS_COMMIT_RANGE | sed 's/\.//'); cd - > /dev/null - export PYTHONPATH=$TRAVIS_BUILD_DIR - python -O -m test.easyconfigs.suite -- GitLab From bd23642e2d2c6686caaef2b752817389437509a4 Mon Sep 17 00:00:00 2001 From: jrbosch Date: Wed, 17 May 2017 09:36:48 -0400 Subject: [PATCH 1117/1311] add FFmpeg easyconfig with support to x265 and LAME --- .../f/FFmpeg/FFmpeg-3.3.1-foss-2016b.eb | 34 +++++++++++++++++++ .../l/LAME/LAME-3.99.5-foss-2016b.eb | 30 ++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.3.1-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/LAME/LAME-3.99.5-foss-2016b.eb diff --git a/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.3.1-foss-2016b.eb b/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.3.1-foss-2016b.eb new file mode 100644 index 0000000000..374f64671c --- /dev/null +++ b/easybuild/easyconfigs/f/FFmpeg/FFmpeg-3.3.1-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'FFmpeg' +version = '3.3.1' + +homepage = 'https://www.ffmpeg.org/' +description = """A complete, cross-platform solution to record, convert and stream audio and video.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ffmpeg.org/releases/'] + +dependencies = [ + ('NASM', '2.12.02'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), + ('x264', '20160614'), + ('x265', '2.4'), + ('LAME', '3.99.5'), + ('X11', '20160819'), +] + +configopts = '--enable-pic --enable-shared --enable-gpl --enable-version3 --enable-nonfree --cc="$CC" --cxx="$CXX" ' +configopts += '--enable-libx264 --enable-libx265 --enable-libmp3lame' + +sanity_check_paths = { + 'files': ['bin/ff%s' % x for x in ['mpeg', 'probe', 'server']] + + ['lib/lib%s.%s' % (x, y) for x in ['avdevice', 'avfilter', 'avformat', 'avcodec', 'postproc', + 'swresample', 'swscale', 'avutil'] for y in [SHLIB_EXT, 'a']], + 'dirs': ['include'] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/LAME/LAME-3.99.5-foss-2016b.eb b/easybuild/easyconfigs/l/LAME/LAME-3.99.5-foss-2016b.eb new file mode 100644 index 0000000000..042510cf2a --- /dev/null +++ b/easybuild/easyconfigs/l/LAME/LAME-3.99.5-foss-2016b.eb @@ -0,0 +1,30 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Author: Stephane Thiell +### + +easyblock = 'ConfigureMake' + +name = 'LAME' +version = '3.99.5' + +homepage = 'http://lame.sourceforge.net/' +description = """LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://sourceforge.net/projects/lame/files/lame/%(version_major_minor)s/'] + +dependencies = [('ncurses', '6.0')] + +# configure is broken: add workaround to find libncurses... +configure_cmd_prefix = "FRONTEND_LDADD='-L${EBROOTNCURSES}/lib' " + +sanity_check_paths = { + 'files': ['bin/lame', 'include/lame/lame.h', 'lib/libmp3lame.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'data' -- GitLab From 0c5e71d70e1d1ec068990eff100d8e053a267dd4 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 17 May 2017 15:46:08 +0200 Subject: [PATCH 1118/1311] adding easyconfigs: MUMmer-4.0.0beta-goolf-1.7.20.eb --- .../m/MUMmer/MUMmer-4.0.0beta-goolf-1.7.20.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/m/MUMmer/MUMmer-4.0.0beta-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/m/MUMmer/MUMmer-4.0.0beta-goolf-1.7.20.eb b/easybuild/easyconfigs/m/MUMmer/MUMmer-4.0.0beta-goolf-1.7.20.eb new file mode 100644 index 0000000000..8471838376 --- /dev/null +++ b/easybuild/easyconfigs/m/MUMmer/MUMmer-4.0.0beta-goolf-1.7.20.eb @@ -0,0 +1,23 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'ConfigureMake' + +name = 'MUMmer' +version = '4.0.0beta' + +homepage = 'http://mummer.sourceforge.net/' +description = """MUMmer is a system for rapidly aligning entire genomes, + whether in complete or draft form. AMOS makes use of it.""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} +toolchainopts = {'openmp': True} + +source_urls = ['https://github.com/gmarcais/mummer/releases/download/v%(version)s/'] +sources = ['%(namelower)s-%(version)s.tar.gz'] + +patches = ['mummer-%(version)s.patch'] + +moduleclass = 'bio' -- GitLab From 8e1bf1c361216cb5bc75de261cdc612704e3bdd9 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Wed, 17 May 2017 15:52:41 +0200 Subject: [PATCH 1119/1311] added mummer patch --- .../easyconfigs/m/MUMmer/mummer-4.0.0beta.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/m/MUMmer/mummer-4.0.0beta.patch diff --git a/easybuild/easyconfigs/m/MUMmer/mummer-4.0.0beta.patch b/easybuild/easyconfigs/m/MUMmer/mummer-4.0.0beta.patch new file mode 100644 index 0000000000..b95c705ef8 --- /dev/null +++ b/easybuild/easyconfigs/m/MUMmer/mummer-4.0.0beta.patch @@ -0,0 +1,15 @@ +Fix a compilation error in version 4.0.0beta +https://github.com/gmarcais/mummer/issues/7 + +diff -ru mummer-4.0.0beta.orig/src/essaMEM/mummer.cpp mummer-4.0.0beta/src/essaMEM/mummer.cpp +--- mummer-4.0.0beta.orig/src/essaMEM/mummer.cpp 2017-04-06 19:49:04.000000000 +0200 ++++ mummer-4.0.0beta/src/essaMEM/mummer.cpp 2017-05-17 15:36:51.998784593 +0200 +@@ -218,7 +218,7 @@ + case 22: + #ifdef VERSION + std::cout << VERSION << '\n'; +-#elif ++#else + std::cout << "\n"; + #endif + exit(0); -- GitLab From a9e81f5a5670c4b90ed5cc8f10243742b554c14e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 17 May 2017 17:40:01 +0200 Subject: [PATCH 1120/1311] adding easyconfigs: gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb, MPC-1.0.3-intel-2017a.eb --- .../gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb | 27 ++++++++++++++++ .../m/MPC/MPC-1.0.3-intel-2017a.eb | 32 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/g/gmpy2/gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/m/MPC/MPC-1.0.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/gmpy2/gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/g/gmpy2/gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..d82b9f3a9d --- /dev/null +++ b/easybuild/easyconfigs/g/gmpy2/gmpy2-2.0.8-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,27 @@ +easyblock = 'PythonPackage' + +name = 'gmpy2' +version = '2.0.8' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/aleaxit/gmpy' +description = "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_ZIP] + +dependencies = [ + ('Python', '2.7.13'), + ('GMP', '6.1.2'), + ('MPFR', '3.1.5'), + ('MPC', '1.0.3'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MPC/MPC-1.0.3-intel-2017a.eb b/easybuild/easyconfigs/m/MPC/MPC-1.0.3-intel-2017a.eb new file mode 100644 index 0000000000..5bddb3e5d5 --- /dev/null +++ b/easybuild/easyconfigs/m/MPC/MPC-1.0.3-intel-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'MPC' +version = '1.0.3' + +homepage = 'http://www.multiprecision.org/' +description = """Gnu Mpc is a C library for the arithmetic of + complex numbers with arbitrarily high precision and correct + rounding of the result. It extends the principles of the IEEE-754 + standard for fixed precision real floating point numbers to + complex numbers, providing well-defined semantics for every + operation. At the same time, speed of operation at high precision + is a major design goal.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.multiprecision.org/mpc/download/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('GMP', '6.1.2'), + ('MPFR', '3.1.5'), +] + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libmpc.%s' % SHLIB_EXT, 'include/mpc.h'], + 'dirs': [] +} + +moduleclass = 'math' -- GitLab From 0933fa668c99dee172f6ddae2d7349654c35dee6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 May 2017 09:14:09 +0200 Subject: [PATCH 1121/1311] adding easyconfigs: scikit-learn-0.18.1-intel-2017a-Python-2.7.13.eb, matplotlib-2.0.2-intel-2017a-Python-2.7.13.eb --- ...plotlib-2.0.2-intel-2017a-Python-2.7.13.eb | 43 +++++++++++++++++++ ...-learn-0.18.1-intel-2017a-Python-2.7.13.eb | 30 +++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13.eb create mode 100755 easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..fa289dd53b --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,43 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('freetype', '2.7.1'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-2.7.13.eb new file mode 100755 index 0000000000..388e0e3afa --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.18.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,30 @@ +easyblock = 'PythonPackage' + +name = 'scikit-learn' +version = '0.18.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('matplotlib', '2.0.2', versionsuffix), +] + +options = {'modulename': 'sklearn'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/sklearn'], +} + +moduleclass = 'data' -- GitLab From 2bfb83215f61d130c7363fcd8412e4ed09b961da Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 May 2017 09:19:36 +0200 Subject: [PATCH 1122/1311] adding easyconfigs: statsmodels-0.8.0-intel-2017a-Python-2.7.13.eb --- ...smodels-0.8.0-intel-2017a-Python-2.7.13.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/s/statsmodels/statsmodels-0.8.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/s/statsmodels/statsmodels-0.8.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.8.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..85483b0005 --- /dev/null +++ b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.8.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,36 @@ +easyblock = 'Bundle' + +name = 'statsmodels' +version = '0.8.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://statsmodels.sourceforge.net/' +description = """Statsmodels is a Python module that allows users to explore data, estimate statistical models, +and perform statistical tests.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [('Python', '2.7.13')] + +exts_list = [ + ('patsy', '0.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/patsy'], + 'source_tmpl': 'patsy-%(version)s.zip', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/statsmodels'], + 'source_tmpl': 'statsmodels-%(version)s.tar.gz', + }), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'math' -- GitLab From 7b5e6e94f527f488a3a966a7cc397c250fa2ddf2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 May 2017 09:20:21 +0200 Subject: [PATCH 1123/1311] fix typo in statsmodels source url (/sources/ -> /source/) --- .../s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb index 435f33a3bd..484c222815 100644 --- a/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb +++ b/easybuild/easyconfigs/s/statsmodels/statsmodels-0.6.1-intel-2016b-Python-3.5.2.eb @@ -21,7 +21,7 @@ exts_list = [ 'source_tmpl': 'patsy-%(version)s.zip', }), (name, version, { - 'source_urls': ['https://pypi.python.org/packages/sources/statsmodels'], + 'source_urls': ['https://pypi.python.org/packages/source/statsmodels'], 'source_tmpl': 'statsmodels-%(version)s.zip', }), ] -- GitLab From d76b99582a77ec30e760a41563bb7c12a398c0c9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 May 2017 11:25:50 +0200 Subject: [PATCH 1124/1311] adding easyconfigs: gnuplot-5.0.6-intel-2017a.eb, Pango-1.40.5-intel-2017a.eb, libgd-2.2.4-intel-2017a.eb, libcerf-1.5-intel-2017a.eb, HarfBuzz-1.3.1-intel-2017a.eb, GObject-Introspection-1.52.0-intel-2017a.eb --- ...Object-Introspection-1.52.0-intel-2017a.eb | 47 +++++++++++++++++++ .../g/gnuplot/gnuplot-5.0.6-intel-2017a.eb | 42 +++++++++++++++++ .../h/HarfBuzz/HarfBuzz-1.3.1-intel-2017a.eb | 34 ++++++++++++++ .../l/libcerf/libcerf-1.5-intel-2017a.eb | 28 +++++++++++ .../l/libgd/libgd-2.2.4-intel-2017a.eb | 26 ++++++++++ .../p/Pango/Pango-1.40.5-intel-2017a.eb | 31 ++++++++++++ 6 files changed, 208 insertions(+) create mode 100644 easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.52.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.6-intel-2017a.eb create mode 100644 easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libcerf/libcerf-1.5-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libgd/libgd-2.2.4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/p/Pango/Pango-1.40.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.52.0-intel-2017a.eb b/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.52.0-intel-2017a.eb new file mode 100644 index 0000000000..804872f657 --- /dev/null +++ b/easybuild/easyconfigs/g/GObject-Introspection/GObject-Introspection-1.52.0-intel-2017a.eb @@ -0,0 +1,47 @@ +easyblock = 'ConfigureMake' + +name = 'GObject-Introspection' +version = '1.52.0' + +homepage = 'https://wiki.gnome.org/GObjectIntrospection/' +description = """GObject introspection is a middleware layer between C libraries + (using GObject) and language bindings. The C library can be scanned at + compile time and generate a metadata file, in addition to the actual + native C library. Then at runtime, language bindings can read this + metadata and automatically provide bindings to call into the C library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('Python', '2.7.13'), + ('GLib', '2.52.0'), + ('libffi', '3.2.1'), +] + +builddependencies = [ + ('Autotools', '20150215'), + ('flex', '2.6.4'), + ('Bison', '3.0.4'), + ('cairo', '1.14.8'), +] + +preconfigopts = "env GI_SCANNER_DISABLE_CACHE=true " + +# avoid using hard-coded path to 'python' in shebang of scripts +buildopts = "PYTHON=python" + +modextrapaths = { + 'GI_TYPELIB_PATH': 'share', + 'XDG_DATA_DIRS': 'share', +} + +sanity_check_paths = { + 'files': ['bin/g-ir-%s' % x for x in ['annotation-tool', 'compiler', 'generate', 'scanner']] + + ['lib/libgirepository-1.0.%s' % x for x in ['so', 'a']], + 'dirs': ['include', 'share'] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.6-intel-2017a.eb b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.6-intel-2017a.eb new file mode 100644 index 0000000000..22b8ccefa5 --- /dev/null +++ b/easybuild/easyconfigs/g/gnuplot/gnuplot-5.0.6-intel-2017a.eb @@ -0,0 +1,42 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2013 University of Luxembourg/Luxembourg Centre for Systems Biomedicine +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## +easyblock = 'ConfigureMake' + +name = 'gnuplot' +version = '5.0.6' + +homepage = 'http://gnuplot.sourceforge.net/' +description = """Portable interactive, function plotting utility""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = [('http://sourceforge.net/projects/gnuplot/files', 'download')] + +dependencies = [ + ('cairo', '1.14.8'), + ('libjpeg-turbo', '1.5.1'), + ('libpng', '1.6.29'), + ('libgd', '2.2.4'), + ('Pango', '1.40.5'), + ('libcerf', '1.5'), + ('Qt', '4.8.7'), +] + +configopts = '--with-qt=qt4 ' + +sanity_check_paths = { + 'files': ['bin/gnuplot'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-intel-2017a.eb b/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-intel-2017a.eb new file mode 100644 index 0000000000..58049805dd --- /dev/null +++ b/easybuild/easyconfigs/h/HarfBuzz/HarfBuzz-1.3.1-intel-2017a.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'HarfBuzz' +version = '1.3.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/HarfBuzz' +description = """HarfBuzz is an OpenType text shaping engine.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.freedesktop.org/software/harfbuzz/release/'] +sources = [SOURCELOWER_TAR_BZ2] + +dependencies = [ + ('GLib', '2.52.0'), + ('cairo', '1.14.8'), + ('freetype', '2.7.1', '-libpng-1.6.29'), +] + +builddependencies = [('GObject-Introspection', '1.52.0')] + +configopts = "--enable-introspection=yes --with-gobject=yes --enable-static --enable-shared --with-cairo " + +modextrapaths = { + 'GI_TYPELIB_PATH': 'share', + 'XDG_DATA_DIRS': 'share', +} + +sanity_check_paths = { + 'files': ['lib/libharfbuzz.%s' % SHLIB_EXT, 'bin/hb-view'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libcerf/libcerf-1.5-intel-2017a.eb b/easybuild/easyconfigs/l/libcerf/libcerf-1.5-intel-2017a.eb new file mode 100644 index 0000000000..3c7483ca6e --- /dev/null +++ b/easybuild/easyconfigs/l/libcerf/libcerf-1.5-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'libcerf' +version = '1.5' + +homepage = 'http://gnuplot.sourceforge.net/' +description = """libcerf is a self-contained numeric library that provides an efficient and accurate + implementation of complex error functions, along with Dawson, Faddeeva, and Voigt functions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TGZ] +source_urls = [ + 'http://apps.jcns.fz-juelich.de/src/libcerf/', + 'http://apps.jcns.fz-juelich.de/src/libcerf/old', +] + +builddependencies = [ + ('Autotools', '20150215'), + ('libtool', '2.4.6'), +] + +sanity_check_paths = { + 'files': ['lib/libcerf.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-intel-2017a.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-intel-2017a.eb new file mode 100644 index 0000000000..1a8de80eb4 --- /dev/null +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-intel-2017a.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libgd' +version = '2.2.4' + +homepage = 'https://libgd.github.io/' +description = "GD is an open source code library for the dynamic creation of images by programmers." + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/libgd/libgd/releases/download/gd-%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('fontconfig', '2.12.1', '-libpng-1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('libpng', '1.6.29'), + ('zlib', '1.2.11'), +] + +sanity_check_paths = { + 'files': ["lib/libgd.a", "lib/libgd.%s" % SHLIB_EXT], + 'dirs': ["bin", "include"], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/Pango/Pango-1.40.5-intel-2017a.eb b/easybuild/easyconfigs/p/Pango/Pango-1.40.5-intel-2017a.eb new file mode 100644 index 0000000000..d7561a197b --- /dev/null +++ b/easybuild/easyconfigs/p/Pango/Pango-1.40.5-intel-2017a.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'Pango' +version = '1.40.5' + +homepage = 'http://www.pango.org/' +description = """Pango is a library for laying out and rendering of text, with an emphasis on internationalization. +Pango can be used anywhere that text layout is needed, though most of the work on Pango so far has been done in the +context of the GTK+ widget toolkit. Pango forms the core of text and font handling for GTK+-2.x.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('X11', '20170314'), + ('GLib', '2.52.0'), + ('cairo', '1.14.8'), + ('HarfBuzz', '1.3.1'), +] + +builddependencies = [('GObject-Introspection', '1.52.0')] + +configopts = "--disable-silent-rules --enable-introspection=yes --enable-static --enable-shared " + +modextrapaths = { + 'XDG_DATA_DIRS': 'share', +} + +moduleclass = 'vis' -- GitLab From ca675cca030fd8a76cc631816f5b128da4555daf Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Thu, 18 May 2017 12:08:14 +0200 Subject: [PATCH 1125/1311] Bump FSL to intel/2017a --- .../f/FSL/FSL-5.0.9-intel-2017a.eb | 24 +++++++++++++ .../f/freeglut/freeglut-3.0.0-intel-2017a.eb | 35 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb create mode 100644 easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb b/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb new file mode 100644 index 0000000000..34a1890fcb --- /dev/null +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb @@ -0,0 +1,24 @@ +name = 'FSL' +version = '5.0.9' + +homepage = 'http://www.fmrib.ox.ac.uk/fsl/' +description = """FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI brain imaging data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ["http://www.fmrib.ox.ac.uk/fsldownloads/"] +sources = ['%(namelower)s-%(version)s-sources.tar.gz'] + +patches = [ + 'FSL-%(version)s_makefile_fixes.patch', + 'FSL-%(version)s_missing_lib.patch', + 'FSL_icc_nan-inf_fix.patch', +] + +dependencies = [ + ('freeglut', '3.0.0'), + ('expat', '2.2.0'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb new file mode 100644 index 0000000000..3d404c8658 --- /dev/null +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'CMakeMake' + +name = 'freeglut' +version = '3.0.0' + +homepage = 'http://freeglut.sourceforge.net/' +description = "freeglut is a completely OpenSourced alternative to the OpenGL Utility Toolkit (GLUT) library." + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(name)s'] + +builddependencies = [('CMake', '3.8.0')] + +dependencies = [ + ('X11', '20170314'), + ('libGLU', '9.0.0'), + ('Mesa', '17.0.2'), +] + +configopts = ' -DX11_X11_LIB="$EBROOTX11/lib/libX11.so" ' +configopts += ' -DX11_X11_INCLUDE_PATH="$EBROOTX11/include/X11" ' +configopts += ' -DX11_Xext_LIB="$EBROOTX11/lib/libXext.so" ' +configopts += ' -DX11_Xrandr_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xrandr_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' +configopts += ' -DX11_Xi_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xi_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' + +sanity_check_paths = { + 'files': [('lib/libglut.a', 'lib64/libglut.a'), ('lib/libglut.%s' % SHLIB_EXT, 'lib64/libglut.%s' % SHLIB_EXT)], + 'dirs': ['include/GL'], +} + +moduleclass = 'lib' -- GitLab From 8a6b28c55b1bd5cc8e88bb7cd1a11b2084cafcff Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 May 2017 13:14:31 +0200 Subject: [PATCH 1126/1311] adding easyconfigs: Octave-4.2.1-intel-2017a.eb, arpack-ng-3.5.0-intel-2017a.eb, FLTK-1.3.4-intel-2017a.eb, GLPK-4.61-intel-2017a.eb, GL2PS-1.4.0-intel-2017a.eb, Qhull-2015.2-intel-2017a.eb, qrupdate-1.1.2-intel-2017a.eb, GraphicsMagick-1.3.25-intel-2017a.eb, freeglut-3.0.0-intel-2017a.eb, gperf-3.0.4-intel-2017a.eb, xprop-1.2.2-intel-2017a.eb --- .../arpack-ng/arpack-ng-3.5.0-intel-2017a.eb | 25 +++++++ .../f/FLTK/FLTK-1.3.4-intel-2017a.eb | 36 ++++++++++ .../f/freeglut/freeglut-3.0.0-intel-2017a.eb | 35 ++++++++++ .../g/GL2PS/GL2PS-1.4.0-intel-2017a.eb | 32 +++++++++ .../g/GLPK/GLPK-4.61-intel-2017a.eb | 28 ++++++++ .../GraphicsMagick-1.3.25-intel-2017a.eb | 39 +++++++++++ .../g/gperf/gperf-3.0.4-intel-2017a.eb | 22 +++++++ .../o/Octave/Octave-4.2.1-intel-2017a.eb | 65 +++++++++++++++++++ .../q/Qhull/Qhull-2015.2-intel-2017a.eb | 36 ++++++++++ .../q/qrupdate/qrupdate-1.1.2-intel-2017a.eb | 28 ++++++++ .../x/xprop/xprop-1.2.2-intel-2017a.eb | 30 +++++++++ 11 files changed, 376 insertions(+) create mode 100644 easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.5.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/f/FLTK/FLTK-1.3.4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/GL2PS/GL2PS-1.4.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/GraphicsMagick/GraphicsMagick-1.3.25-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/gperf/gperf-3.0.4-intel-2017a.eb create mode 100644 easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/q/Qhull/Qhull-2015.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/q/qrupdate/qrupdate-1.1.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/x/xprop/xprop-1.2.2-intel-2017a.eb diff --git a/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.5.0-intel-2017a.eb b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.5.0-intel-2017a.eb new file mode 100644 index 0000000000..c2f959831c --- /dev/null +++ b/easybuild/easyconfigs/a/arpack-ng/arpack-ng-3.5.0-intel-2017a.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'arpack-ng' +version = '3.5.0' + +homepage = 'http://forge.scilab.org/index.php/p/arpack-ng/' +description = """ARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'usempi': True} + +source_urls = ['https://github.com/opencollab/arpack-ng/archive/'] +sources = ['%(version)s.tar.gz'] + +builddependencies = [('Autotools', '20150215')] + +preconfigopts = "sh bootstrap && " +configopts = '--with-pic --with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK"' + +sanity_check_paths = { + 'files': ["lib/libarpack.a", "lib/libarpack.%s" % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FLTK/FLTK-1.3.4-intel-2017a.eb b/easybuild/easyconfigs/f/FLTK/FLTK-1.3.4-intel-2017a.eb new file mode 100644 index 0000000000..95391e1838 --- /dev/null +++ b/easybuild/easyconfigs/f/FLTK/FLTK-1.3.4-intel-2017a.eb @@ -0,0 +1,36 @@ +# +# author: Dina Mahmoud Ibrahim ( Cairo University ) +# +easyblock = 'ConfigureMake' + +name = 'FLTK' +version = '1.3.4' + +homepage = 'http://www.fltk.org' +description = """FLTK is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, + and MacOS X. FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL + and its built-in GLUT emulation.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +sources = ['%(namelower)s-%(version)s-source.tar.gz'] +source_urls = ['http://fltk.org/pub/%(namelower)s/%(version)s/'] + +configopts = '--enable-shared --enable-threads --enable-xft' + +dependencies = [ + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('xprop', '1.2.2'), + ('zlib', '1.2.11'), +] + +sanity_check_paths = { + 'files': ['bin/fltk-config', 'bin/fluid', 'lib/libfltk.a', 'lib/libfltk.%s' % SHLIB_EXT], + 'dirs': ['lib'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb new file mode 100644 index 0000000000..64f67b2563 --- /dev/null +++ b/easybuild/easyconfigs/f/freeglut/freeglut-3.0.0-intel-2017a.eb @@ -0,0 +1,35 @@ +easyblock = 'CMakeMake' + +name = 'freeglut' +version = '3.0.0' + +homepage = 'http://freeglut.sourceforge.net/' +description = "freeglut is a completely OpenSourced alternative to the OpenGL Utility Toolkit (GLUT) library." + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://prdownloads.sourceforge.net/%(name)s'] + +builddependencies = [('CMake', '3.8.1')] + +dependencies = [ + ('X11', '20170314'), + ('libGLU', '9.0.0'), + ('Mesa', '17.0.2'), +] + +configopts = ' -DX11_X11_LIB="$EBROOTX11/lib/libX11.so" ' +configopts += ' -DX11_X11_INCLUDE_PATH="$EBROOTX11/include/X11" ' +configopts += ' -DX11_Xext_LIB="$EBROOTX11/lib/libXext.so" ' +configopts += ' -DX11_Xrandr_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xrandr_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' +configopts += ' -DX11_Xi_LIB="$EBROOTX11/lib/libXrandr.so" ' +configopts += ' -DX11_Xi_INCLUDE_PATH="$EBROOTX11/include/X11/extensions/" ' + +sanity_check_paths = { + 'files': [('lib/libglut.a', 'lib64/libglut.a'), ('lib/libglut.%s' % SHLIB_EXT, 'lib64/libglut.%s' % SHLIB_EXT)], + 'dirs': ['include/GL'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/g/GL2PS/GL2PS-1.4.0-intel-2017a.eb b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.4.0-intel-2017a.eb new file mode 100644 index 0000000000..a2bcb6dc02 --- /dev/null +++ b/easybuild/easyconfigs/g/GL2PS/GL2PS-1.4.0-intel-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'CMakeMake' + +name = 'GL2PS' +version = '1.4.0' + +homepage = 'http://www.geuz.org/gl2ps/' +description = """GL2PS: an OpenGL to PostScript printing library""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://geuz.org/gl2ps/src/'] +sources = [SOURCELOWER_TGZ] + +builddependencies = [ + ('CMake', '3.8.1'), +] + +dependencies = [ + ('X11', '20170314'), + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('freeglut', '3.0.0'), + ('libpng', '1.6.29'), + ('zlib', '1.2.11'), +] + +sanity_check_paths = { + 'files': ['include/gl2ps.h', 'lib/libgl2ps.so'], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb new file mode 100644 index 0000000000..28b87558fc --- /dev/null +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'GLPK' +version = '4.61' + +homepage = 'https://www.gnu.org/software/glpk/' +description = """The GLPK (GNU Linear Programming Kit) package is intended for + solving large-scale linear programming (LP), + mixed integer programming (MIP), and other related problems. + It is a set of routines written in ANSI C + and organized in the form of a callable library.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] + +dependencies = [('GMP', '6.1.2')] + +configopts = "--with-gmp" + +sanity_check_paths = { + 'files': ['bin/glpsol', 'include/glpk.h'] + + ['lib/libglpk.%s' % x for x in [SHLIB_EXT, 'a']], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/g/GraphicsMagick/GraphicsMagick-1.3.25-intel-2017a.eb b/easybuild/easyconfigs/g/GraphicsMagick/GraphicsMagick-1.3.25-intel-2017a.eb new file mode 100644 index 0000000000..e1b8b64f3a --- /dev/null +++ b/easybuild/easyconfigs/g/GraphicsMagick/GraphicsMagick-1.3.25-intel-2017a.eb @@ -0,0 +1,39 @@ +easyblock = 'ConfigureMake' + +name = 'GraphicsMagick' +version = '1.3.25' + +homepage = 'http://www.graphicsmagick.org/' +description = """GraphicsMagick is the swiss army knife of image processing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [ + SOURCEFORGE_SOURCE, + 'ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/%(version_major_minor)s/', +] +sources = [SOURCE_TAR_GZ] + +patches = ['%(name)s-%(version)s_intel.patch'] + +builddependencies = [ + ('libtool', '2.4.6'), +] + +dependencies = [ + ('X11', '20170314'), + ('bzip2', '1.0.6'), + ('freetype', '2.7.1', '-libpng-1.6.29'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('LibTIFF', '4.0.7'), + ('libxml2', '2.9.4'), + ('XZ', '5.2.3'), + ('zlib', '1.2.11'), + ('Ghostscript', '9.21'), +] + +modextrapaths = {'CPATH': ['include/GraphicsMagick']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/g/gperf/gperf-3.0.4-intel-2017a.eb b/easybuild/easyconfigs/g/gperf/gperf-3.0.4-intel-2017a.eb new file mode 100644 index 0000000000..6b56add6d5 --- /dev/null +++ b/easybuild/easyconfigs/g/gperf/gperf-3.0.4-intel-2017a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'gperf' +version = '3.0.4' + +homepage = 'http://www.gnu.org/software/gperf/' +description = """GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash + function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash + function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single + string comparison only.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/gperf'], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2017a.eb b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2017a.eb new file mode 100644 index 0000000000..b28e83ac96 --- /dev/null +++ b/easybuild/easyconfigs/o/Octave/Octave-4.2.1-intel-2017a.eb @@ -0,0 +1,65 @@ +easyblock = 'ConfigureMake' + +name = 'Octave' +version = '4.2.1' + +homepage = 'http://www.gnu.org/software/octave/' +description = """GNU Octave is a high-level interpreted language, primarily intended for numerical computations.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +patches = ['%(name)s-%(version)s_intel.patch'] + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.4'), + ('Autotools', '20150215'), + ('libtool', '2.4.6'), + ('gperf', '3.0.4'), +] + +dependencies = [ + ('X11', '20170314'), + ('PCRE', '8.40'), + ('ncurses', '6.0'), + ('libreadline', '6.3'), + ('arpack-ng', '3.5.0'), + ('cURL', '7.53.1'), + ('FLTK', '1.3.4'), + ('fontconfig', '2.12.1', '-libpng-1.6.29'), + ('freetype', '2.7.1', '-libpng-1.6.29'), + ('GLPK', '4.61'), + ('GL2PS', '1.4.0'), + ('gnuplot', '5.0.6'), + ('Java', '1.8.0_131', '', True), + ('zlib', '1.2.11'), + ('Mesa', '17.0.2'), + ('libGLU', '9.0.0'), + ('Qhull', '2015.2'), + ('Qt5', '5.8.0'), + ('HDF5', '1.8.18', '-serial'), + ('qrupdate', '1.1.2'), + ('SuiteSparse', '4.5.5', '-METIS-5.1.0'), + ('GraphicsMagick', '1.3.25'), + ('FFTW', '3.3.6'), +] + +configopts = 'MOC=$EBROOTQT5/bin/moc ' +configopts += 'UIC=$EBROOTQT5/bin/uic ' +configopts += 'RCC=$EBROOTQT5/bin/rcc ' +configopts += 'LRELEASE=$EBROOTQT5/bin/lrelease ' +configopts += '--with-blas="$LIBBLAS" --with-lapack="$LIBLAPACK" --disable-docs ' +# correct for both GCC and Intel compilers +configopts += '--enable-fortran-calling-convention=gfortran' + +sanity_check_paths = { + 'files': ['bin/octave'], + 'dirs': [] +} + +sanity_check_commands = [('octave', '--eval "1+2"')] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/q/Qhull/Qhull-2015.2-intel-2017a.eb b/easybuild/easyconfigs/q/Qhull/Qhull-2015.2-intel-2017a.eb new file mode 100644 index 0000000000..a35971ec3e --- /dev/null +++ b/easybuild/easyconfigs/q/Qhull/Qhull-2015.2-intel-2017a.eb @@ -0,0 +1,36 @@ +easyblock = 'CMakeMake' + +name = 'Qhull' +version = '2015.2' + +homepage = 'http://www.qhull.org' +description = """ +Qhull computes the convex hull, Delaunay triangulation, Voronoi diagram, halfspace intersection about a point, +furthest-site Delaunay triangulation, and furthest-site Voronoi diagram. The source code runs in 2-d, 3-d, 4-d, +and higher dimensions. Qhull implements the Quickhull algorithm for computing the convex hull. +""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = ['%(namelower)s-%(version_major)s-src-7.%(version_minor)s.0.tgz'] +source_urls = ['http://www.qhull.org/download/'] + +patches = [ + 'Qhull-%(version)s-intel-fix.patch', + 'Qhull_pkgconfig.patch', +] + +builddependencies = [('CMake', '3.8.1')] + +sanity_check_paths = { + 'files': ['bin/qhull', 'lib/libqhull.%s' % SHLIB_EXT, 'lib/pkgconfig/qhull.pc'], + 'dirs': [], +} + +modextrapaths = { + 'CPATH': ['qhull/include'], +} + +parallel = 1 + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/q/qrupdate/qrupdate-1.1.2-intel-2017a.eb b/easybuild/easyconfigs/q/qrupdate/qrupdate-1.1.2-intel-2017a.eb new file mode 100644 index 0000000000..4f82f6763a --- /dev/null +++ b/easybuild/easyconfigs/q/qrupdate/qrupdate-1.1.2-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'MakeCp' + +name = 'qrupdate' +version = '1.1.2' + +homepage = 'https://sourceforge.net/projects/qrupdate/' +description = """qrupdate is a Fortran library for fast updates of QR and Cholesky decompositions.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCE_TAR_GZ] +source_urls = [SOURCEFORGE_SOURCE] + +patches = ['%(name)s-%(version)s_makeconf.patch'] + +buildopts = 'lib' + +files_to_copy = [(['libqrupdate.a'], 'lib')] + +sanity_check_paths = { + 'files': ['lib/libqrupdate.a'], + 'dirs': [], +} + +parallel = 1 + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/x/xprop/xprop-1.2.2-intel-2017a.eb b/easybuild/easyconfigs/x/xprop/xprop-1.2.2-intel-2017a.eb new file mode 100644 index 0000000000..773d17a26f --- /dev/null +++ b/easybuild/easyconfigs/x/xprop/xprop-1.2.2-intel-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'xprop' +version = '1.2.2' + +homepage = "http://www.x.org/wiki/" +description = """The xprop utility is for displaying window and font properties in an X server. + One window or font is selected using the command line arguments or possibly + in the case of a window, by clicking on the desired window. A list of + properties is then given, possibly with formatting information.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://ftp.x.org/archive/individual/app/'] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +dependencies = [ + ('X11', '20170314'), +] + +sanity_check_paths = { + 'files': ['bin/xprop'], + 'dirs': [], +} + +moduleclass = 'vis' -- GitLab From 603325793bfd941b1aaeb1a26400880125cdedf5 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Thu, 18 May 2017 19:37:19 +0200 Subject: [PATCH 1127/1311] {math}[binary] MATLAB 2017a (REVIEW) --- .../easyconfigs/m/MATLAB/MATLAB-2017a.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb new file mode 100644 index 0000000000..04d37d4f1e --- /dev/null +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb @@ -0,0 +1,22 @@ +name = 'MATLAB' +version = '2017a' + +homepage = 'http://www.mathworks.com/products/matlab' +description = """MATLAB is a high-level language and interactive environment + that enables you to perform computationally intensive tasks faster than with + traditional programming languages such as C, C++, and Fortran.""" + +toolchain = {'name': 'dummy', 'version': ''} + +# be sure to copy both DVD content to the SAME directory, +# including the hidden files, especially .dvd1 and .dvd2 +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('Java', '1.8.0_121')] + +import os +license_server = os.getenv('EB_MATLAB_LICENSE_SERVER', 'license.example.com') +license_server_port = os.getenv('EB_MATLAB_LICENSE_SERVER_PORT', '00000') +key = os.getenv('EB_MATLAB_KEY', '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000') + +moduleclass = 'math' -- GitLab From 372b412676c7564c9f93360d7e897bd05491e24d Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 19 May 2017 12:27:56 +0200 Subject: [PATCH 1128/1311] Keras/2.0.4 for Python 2.7.13 --- .../Keras-2.0.4-intel-2017a-Python-2.7.13.eb | 28 +++++++++++++++++++ .../Theano-0.9.0-intel-2017a-Python-2.7.13.eb | 23 +++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..7f78e14b8d --- /dev/null +++ b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'Keras' +version = '2.0.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://keras.io/' +description = """Keras is a minimalist, highly modular neural networks library, written in Python and +capable of running on top of either TensorFlow or Theano.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('Theano', '0.9.0', versionsuffix), + ('h5py', '2.7.0', '%(versionsuffix)s'), + ('PyYAML', '3.12', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..6119fbb576 --- /dev/null +++ b/easybuild/easyconfigs/t/Theano/Theano-0.9.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,23 @@ +easyblock = 'PythonPackage' + +name = 'Theano' +version = '0.9.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://deeplearning.net/software/theano' +description = """Theano is a Python library that allows you to define, optimize, +and evaluate mathematical expressions involving multi-dimensional arrays efficiently.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.13')] + +sanity_check_paths = { + 'files': ['bin/theano-cache', 'bin/theano-nose'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'math' -- GitLab From c026c35e54a606aa89c99bcb1f4f50c62cfe535c Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 19 May 2017 12:44:11 +0200 Subject: [PATCH 1129/1311] Switch default backend to Theano for keras --- .../k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb index 7f78e14b8d..b475663604 100644 --- a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-2.7.13.eb @@ -20,6 +20,9 @@ dependencies = [ ('PyYAML', '3.12', versionsuffix), ] +# it defaults to Tensorflow +modextravars = {'KERAS_BACKEND': 'theano'} + sanity_check_paths = { 'files': [], 'dirs': ['lib/python%(pyshortver)s/site-packages'], -- GitLab From 0ff5782bb6b544645a89f85b268e3811a17ec77f Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 19 May 2017 13:53:35 +0200 Subject: [PATCH 1130/1311] Sync Py3 and Py2 easyconfigs of Keras --- .../k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb index 45f0be1e64..d338fae1c9 100644 --- a/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb +++ b/easybuild/easyconfigs/k/Keras/Keras-2.0.4-intel-2017a-Python-3.6.1.eb @@ -20,6 +20,9 @@ dependencies = [ ('PyYAML', '3.12', versionsuffix), ] +# it defaults to Tensorflow +modextravars = {'KERAS_BACKEND': 'theano'} + sanity_check_paths = { 'files': [], 'dirs': ['lib/python%(pyshortver)s/site-packages'], -- GitLab From bb1e24a58fbdf67a53ff89fe0bef88ca2926a58c Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Fri, 19 May 2017 15:25:59 +0200 Subject: [PATCH 1131/1311] FSL/5.0.10 for intel/2017a --- .../f/FSL/FSL-5.0.10-intel-2017a.eb | 33 + .../f/FSL/FSL-5.0.10_build_extras.patch | 13 + .../f/FSL/FSL-5.0.10_makefile_fixes.patch | 605 ++++++++++++++++++ .../g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb | 24 + .../libsigc++/libsigc++-2.10.0-intel-2017a.eb | 20 + .../l/libxml++/libxml++-2.91.3-intel-2017a.eb | 24 + 6 files changed, 719 insertions(+) create mode 100644 easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb create mode 100644 easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch create mode 100644 easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch create mode 100644 easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb b/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb new file mode 100644 index 0000000000..b6760b7e06 --- /dev/null +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb @@ -0,0 +1,33 @@ +name = 'FSL' +version = '5.0.10' + +homepage = 'http://www.fmrib.ox.ac.uk/fsl/' +description = """FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI brain imaging data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ["http://www.fmrib.ox.ac.uk/fsldownloads/"] +sources = ['%(namelower)s-%(version)s-sources.tar.gz'] + +patches = [ + 'FSL-%(version)s_makefile_fixes.patch', + 'FSL-5.0.9_missing_lib.patch', + 'FSL_icc_nan-inf_fix.patch', + 'FSL-%(version)s_build_extras.patch', +] + +dependencies = [ + ('Boost', '1.63.0', '-Python-2.7.13'), + ('libgd', '2.2.4'), + ('libxml++', '2.91.3'), + ('SQLite', '3.13.0'), + ('libpng', '1.6.29'), + ('Tk', '8.6.6'), + ('GLibmm', '2.53.1.1'), + ('NLopt', '2.4.2'), + ('freeglut', '3.0.0'), + ('expat', '2.2.0'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch new file mode 100644 index 0000000000..ac663c9852 --- /dev/null +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch @@ -0,0 +1,13 @@ +# only build thing we don't provide with EasyBuild +diff -ur fsl/extras/build fsl.new/extras/build +--- fsl/extras/build 2016-11-15 15:30:21.000000000 +0100 ++++ fsl.new/extras/build 2017-05-19 15:21:07.321630239 +0200 +@@ -106,6 +106,8 @@ + fi + PROJECTS="${PROJECTS} libgd libgdc libprob libcprob newmat cprob newran fftw" + PROJECTS="${PROJECTS} boost libxml2-2.9.2 libxml++-2.34.0 libsqlite libnlopt ../include/armawrap/dummy_newmat" ++# For EasyBuild: ++PROJECTS="libprob libcprob newmat cprob newran" + for projname in $PROJECTS; do + if [ -d $FSLESRCDIR/$projname ] ; then + buildIt $FSLESRCDIR $projname 1 diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch new file mode 100644 index 0000000000..8808344d6f --- /dev/null +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -0,0 +1,605 @@ +patch out hardcoded compiler names and options +author: kenneth hoste (hpc-ugent) +diff -ur fsl.orig/config/apple-darwin10-gcc4.2/systemvars.mk fsl/config/apple-darwin10-gcc4.2/systemvars.mk +--- fsl.orig/config/apple-darwin10-gcc4.2/systemvars.mk 2009-11-03 18:02:14.000000000 +0100 ++++ fsl/config/apple-darwin10-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -3,8 +3,8 @@ + + # Compiler dependent variables + +-CC = cc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = + CXXSTATICFLAGS = + +@@ -15,7 +15,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ++OPTFLAGS := ${CFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/apple-darwin10-gcc4.2: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin11-gcc4.2/systemvars.mk fsl/config/apple-darwin11-gcc4.2/systemvars.mk +--- fsl.orig/config/apple-darwin11-gcc4.2/systemvars.mk 2012-03-21 12:30:53.000000000 +0100 ++++ fsl/config/apple-darwin11-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -15,7 +15,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 ++OPTFLAGS := -O3 -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic + ANSI_FLAGS = ${GNU_ANSI_FLAGS} +Only in fsl/config/apple-darwin11-gcc4.2: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin12-gcc4.2/systemvars.mk fsl/config/apple-darwin12-gcc4.2/systemvars.mk +--- fsl.orig/config/apple-darwin12-gcc4.2/systemvars.mk 2013-04-09 18:00:32.000000000 +0200 ++++ fsl/config/apple-darwin12-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -15,7 +15,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 ++OPTFLAGS := -O3 -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic + ANSI_FLAGS = ${GNU_ANSI_FLAGS} +Only in fsl/config/apple-darwin12-gcc4.2: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin7-gcc3.1/systemvars.mk fsl/config/apple-darwin7-gcc3.1/systemvars.mk +--- fsl.orig/config/apple-darwin7-gcc3.1/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/apple-darwin7-gcc3.1/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -7,8 +7,8 @@ + + # Compiler dependent variables + +-CC = cc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = + CXXSTATICFLAGS = + +@@ -17,7 +17,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -traditional-cpp -Wall -Wno-long-long -Wno-long-double -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/apple-darwin7-gcc3.1: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin7-gcc3.3/systemvars.mk fsl/config/apple-darwin7-gcc3.3/systemvars.mk +--- fsl.orig/config/apple-darwin7-gcc3.3/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/apple-darwin7-gcc3.3/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -7,8 +7,8 @@ + + # Compiler dependent variables + +-CC = cc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = + CXXSTATICFLAGS = + +@@ -17,7 +17,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/apple-darwin7-gcc3.3: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin8-gcc4.0/systemvars.mk fsl/config/apple-darwin8-gcc4.0/systemvars.mk +--- fsl.orig/config/apple-darwin8-gcc4.0/systemvars.mk 2007-12-19 15:40:57.000000000 +0100 ++++ fsl/config/apple-darwin8-gcc4.0/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -3,8 +3,8 @@ + + # Compiler dependent variables + +-CC = cc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = + CXXSTATICFLAGS = + +@@ -17,7 +17,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ++OPTFLAGS := ${CFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/apple-darwin8-gcc4.0: systemvars.mk.orig +diff -ur fsl.orig/config/apple-darwin9-gcc4.0/systemvars.mk fsl/config/apple-darwin9-gcc4.0/systemvars.mk +--- fsl.orig/config/apple-darwin9-gcc4.0/systemvars.mk 2007-12-19 15:33:53.000000000 +0100 ++++ fsl/config/apple-darwin9-gcc4.0/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -3,8 +3,8 @@ + + # Compiler dependent variables + +-CC = cc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = + CXXSTATICFLAGS = + +@@ -17,7 +17,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ++OPTFLAGS := ${CFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/apple-darwin9-gcc4.0: systemvars.mk.orig +diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk +--- fsl.orig/config/generic/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/generic/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -16,8 +16,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -25,7 +25,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/generic: systemvars.mk.orig +diff -ur fsl.orig/config/gnu_64-gcc4.4/systemvars.mk fsl/config/gnu_64-gcc4.4/systemvars.mk +--- fsl.orig/config/gnu_64-gcc4.4/systemvars.mk 2011-04-19 10:47:52.000000000 +0200 ++++ fsl/config/gnu_64-gcc4.4/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/gnu_64-gcc4.4: systemvars.mk.orig +diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.2/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.2/systemvars.mk +--- fsl.orig/config/i686-pc-cygwin-gcc3.2/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/i686-pc-cygwin-gcc3.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc-2 +-CXX = c++-2 ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/i686-pc-cygwin-gcc3.2: systemvars.mk.orig +diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.3/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.3/systemvars.mk +--- fsl.orig/config/i686-pc-cygwin-gcc3.3/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/i686-pc-cygwin-gcc3.3/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/i686-pc-cygwin-gcc3.3: systemvars.mk.orig +diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.4/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.4/systemvars.mk +--- fsl.orig/config/i686-pc-cygwin-gcc3.4/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 ++++ fsl/config/i686-pc-cygwin-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/i686-pc-cygwin-gcc3.4: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc2.96/systemvars.mk fsl/config/linux_32-gcc2.96/systemvars.mk +--- fsl.orig/config/linux_32-gcc2.96/systemvars.mk 2007-07-25 17:21:07.000000000 +0200 ++++ fsl/config/linux_32-gcc2.96/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc2.96: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc3.2/systemvars.mk fsl/config/linux_32-gcc3.2/systemvars.mk +--- fsl.orig/config/linux_32-gcc3.2/systemvars.mk 2007-07-25 17:21:08.000000000 +0200 ++++ fsl/config/linux_32-gcc3.2/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc3.2: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc3.3/systemvars.mk fsl/config/linux_32-gcc3.3/systemvars.mk +--- fsl.orig/config/linux_32-gcc3.3/systemvars.mk 2007-07-25 17:21:09.000000000 +0200 ++++ fsl/config/linux_32-gcc3.3/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc3.3: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc3.4/systemvars.mk fsl/config/linux_32-gcc3.4/systemvars.mk +--- fsl.orig/config/linux_32-gcc3.4/systemvars.mk 2007-07-25 17:21:10.000000000 +0200 ++++ fsl/config/linux_32-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc3.4: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc4.0/systemvars.mk fsl/config/linux_32-gcc4.0/systemvars.mk +--- fsl.orig/config/linux_32-gcc4.0/systemvars.mk 2007-07-25 17:21:11.000000000 +0200 ++++ fsl/config/linux_32-gcc4.0/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc4.0: systemvars.mk.orig +diff -ur fsl.orig/config/linux_32-gcc4.1/systemvars.mk fsl/config/linux_32-gcc4.1/systemvars.mk +--- fsl.orig/config/linux_32-gcc4.1/systemvars.mk 2012-04-20 11:37:28.000000000 +0200 ++++ fsl/config/linux_32-gcc4.1/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_32-gcc4.1: systemvars.mk.orig +diff -ur fsl.orig/config/linux_64-gcc3.4/systemvars.mk fsl/config/linux_64-gcc3.4/systemvars.mk +--- fsl.orig/config/linux_64-gcc3.4/systemvars.mk 2007-07-25 17:21:12.000000000 +0200 ++++ fsl/config/linux_64-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_64-gcc3.4: systemvars.mk.orig +diff -ur fsl.orig/config/linux_64-gcc4.0/systemvars.mk fsl/config/linux_64-gcc4.0/systemvars.mk +--- fsl.orig/config/linux_64-gcc4.0/systemvars.mk 2007-07-25 17:21:13.000000000 +0200 ++++ fsl/config/linux_64-gcc4.0/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_64-gcc4.0: systemvars.mk.orig +diff -ur fsl.orig/config/linux_64-gcc4.1/systemvars.mk fsl/config/linux_64-gcc4.1/systemvars.mk +--- fsl.orig/config/linux_64-gcc4.1/systemvars.mk 2007-07-25 11:19:45.000000000 +0200 ++++ fsl/config/linux_64-gcc4.1/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_64-gcc4.1: systemvars.mk.orig +diff -ur fsl.orig/config/linux_64-gcc4.2/systemvars.mk fsl/config/linux_64-gcc4.2/systemvars.mk +--- fsl.orig/config/linux_64-gcc4.2/systemvars.mk 2008-06-26 15:25:42.000000000 +0200 ++++ fsl/config/linux_64-gcc4.2/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static + +@@ -27,7 +27,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_64-gcc4.2: systemvars.mk.orig +diff -ur fsl.orig/config/linux_64-gcc4.4/systemvars.mk fsl/config/linux_64-gcc4.4/systemvars.mk +--- fsl.orig/config/linux_64-gcc4.4/systemvars.mk 2017-01-20 16:47:17.000000000 +0100 ++++ fsl/config/linux_64-gcc4.4/systemvars.mk 2017-05-18 13:57:25.995699462 +0200 +@@ -18,8 +18,8 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + CXX11 = scl enable devtoolset-2 -- c++ + CSTATICFLAGS = -static + CXXSTATICFLAGS = -static +@@ -30,7 +30,7 @@ + + DEPENDFLAGS = -MM + +-OPTFLAGS = -g -O3 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = -g + GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/linux_64-gcc4.4: systemvars.mk.orig +Only in fsl/config/linux_64-gcc4.4: systemvars.mk.rej +diff -ur fsl.orig/config/sparc-solaris2.8-gcc2.95/systemvars.mk fsl/config/sparc-solaris2.8-gcc2.95/systemvars.mk +--- fsl.orig/config/sparc-solaris2.8-gcc2.95/systemvars.mk 2007-07-13 13:00:21.000000000 +0200 ++++ fsl/config/sparc-solaris2.8-gcc2.95/systemvars.mk 2017-05-18 13:54:40.448975885 +0200 +@@ -5,14 +5,14 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + + ARCHFLAGS = -mv8 -ffast-math -fomit-frame-pointer + + DEPENDFLAGS = -MM + +-OPTFLAGS = -O6 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/sparc-solaris2.8-gcc2.95: systemvars.mk.orig +diff -ur fsl.orig/config/sparc-solaris2.9-gcc2.95/systemvars.mk fsl/config/sparc-solaris2.9-gcc2.95/systemvars.mk +--- fsl.orig/config/sparc-solaris2.9-gcc2.95/systemvars.mk 2007-07-13 13:00:21.000000000 +0200 ++++ fsl/config/sparc-solaris2.9-gcc2.95/systemvars.mk 2017-05-18 13:54:40.448975885 +0200 +@@ -5,14 +5,14 @@ + + # Compiler dependent variables + +-CC = gcc +-CXX = c++ ++CC := ${CC} ++CXX := ${CXX} + + ARCHFLAGS = -mv8 -ffast-math -fomit-frame-pointer + ARCHLDFLAGS = -static + DEPENDFLAGS = -MM + +-OPTFLAGS = -O6 -fexpensive-optimizations ${ARCHFLAGS} ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 + MACHDBGFLAGS = + GNU_ANSI_FLAGS = -Wall -ansi -pedantic + SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/sparc-solaris2.9-gcc2.95: systemvars.mk.orig +diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile +--- fsl.orig/src/film/Makefile 2017-04-20 17:01:43.000000000 +0200 ++++ fsl/src/film/Makefile 2017-05-18 13:54:40.448975885 +0200 +@@ -28,7 +28,7 @@ + ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} ftoz.o ${LIBS} + + film_gls:${OBJS} film_gls.o +- ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -l giftiio ++ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -lgiftiio + + film_gls_res:${OBJS} film_gls_res.o + ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls_res.o ${LIBS} +Only in fsl/src/film: Makefile.orig +diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile +--- fsl.orig/src/libmeshutils/Makefile 2012-07-23 15:25:20.000000000 +0200 ++++ fsl/src/libmeshutils/Makefile 2017-05-18 13:54:40.448975885 +0200 +@@ -3,7 +3,7 @@ + + PROJNAME = meshUtils + +-LD_LIBRARY_PATH=${FSLDIR}/lib ++#LD_LIBRARY_PATH=${FSLDIR}/lib + + USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} + USRLDFLAGS = -L${LIB_PROB} -L${LIB_NEWMAT} -L${LIB_ZLIB} +Only in fsl/src/libmeshutils: Makefile.orig +diff -ur fsl.orig/src/melodic/Makefile fsl/src/melodic/Makefile +--- fsl.orig/src/melodic/Makefile 2016-09-01 17:24:32.000000000 +0200 ++++ fsl/src/melodic/Makefile 2017-05-18 13:54:40.448975885 +0200 +@@ -3,7 +3,7 @@ + include ${FSLCONFDIR}/default.mk + + OPTFLAGS = -O3 -Wno-deprecated -ggdb +-OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui ++#OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui + + PROJNAME = melodic + +Only in fsl/src/melodic: Makefile.orig diff --git a/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb b/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb new file mode 100644 index 0000000000..b9e19ec518 --- /dev/null +++ b/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'GLibmm' +version = '2.53.1.1' + +homepage = 'http://www.gtk.org/' +description = """GLib is one of the base libraries of the GTK+ project""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = ['http://ftp.gnome.org/pub/gnome/sources/glibmm/%(version_major_minor)s/'] +sources = ['%(namelower)s-%(version)s.tar.xz'] + +dependencies = [ + ('GLib', '2.52.0'), + ('libsigc++', '2.10.0'), +] + +sanity_check_paths = { + 'files': ['lib/libglibmm-2.5.%s' % SHLIB_EXT], + 'dirs': [], +} +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb b/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb new file mode 100644 index 0000000000..bb4e33f915 --- /dev/null +++ b/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libsigc++' +version = '2.10.0' + +homepage = 'http://www.gtk.org/' +description = """The libsigc++ package implements a typesafe callback system for standard C++.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'optarch': True, 'pic': True} + +source_urls = ['http://ftp.gnome.org/pub/gnome/sources/%(name)s/%(version_major_minor)s/'] +sources = ['%(namelower)s-%(version)s.tar.xz'] + +sanity_check_paths = { + 'files': ['lib/libsigc-2.0.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb b/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb new file mode 100644 index 0000000000..8e9c13f200 --- /dev/null +++ b/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libxml++' +version = '2.91.3' + +homepage = 'http://libxmlplusplus.sourceforge.net' +description = """ libxml++ is a C++ wrapper for the libxml XML parser library. """ + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_XZ] +source_urls = ['http://www.example.com'] + +dependencies = [ + ('libxml2', '2.9.4'), + ('GLibmm', '2.53.1.1'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ["."] +} + +moduleclass = 'lib' -- GitLab From f28aafad75d4bb0e567b219ba26fd4d4e4687141 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 20 May 2017 10:35:16 +0200 Subject: [PATCH 1132/1311] get list of added/modified files using 'git diff --name-only' in Travis config --- .travis.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2fcb5e365f..accc9427b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,8 +39,13 @@ install: - if [ ! -z $ENV_MOD_VERSION ]; then source $(which install_eb_dep.sh) modules-${ENV_MOD_VERSION} $HOME; fi - if [ ! -z $LMOD_VERSION ]; then source $(which install_eb_dep.sh) lua-5.1.4.8 $HOME; fi - if [ ! -z $LMOD_VERSION ]; then source $(which install_eb_dep.sh) Lmod-${LMOD_VERSION} $HOME; fi +before_script: + - cd $TRAVIS_BUILD_DIR + # pull in develop so we can diff against it + - git fetch -v origin ${TRAVIS_BRANCH}:${TRAVIS_BRANCH} + # get list of filenames for modified/added files, use '...' to compare with merge base of develop and branch + - git diff --name-only --diff-filter=AM ${TRAVIS_BRANCH}...HEAD script: - - echo $TRAVIS_COMMIT_RANGE - - cd $TRAVIS_BUILD_DIR; git diff --name-only $(echo $TRAVIS_COMMIT_RANGE | sed 's/\.//'); cd - > /dev/null + - cd $HOME - export PYTHONPATH=$TRAVIS_BUILD_DIR - python -O -m test.easyconfigs.suite -- GitLab From d32172cde98fb79987a55f4abca094f33f5caa64 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Sun, 21 May 2017 20:41:43 +0200 Subject: [PATCH 1133/1311] Update Tkinter easyconfigs --- ...er-2.7.13-foss-2016b-Python-2.7.13-bare.eb | 9 +------- ...kinter-2.7.13-intel-2017a-Python-2.7.13.eb | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) mode change 100755 => 100644 easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb create mode 100644 easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb old mode 100755 new mode 100644 index 4f9e88dceb..9870eab580 --- a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb +++ b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb @@ -1,11 +1,8 @@ easyblock = 'EB_TkinterPython' -# TODO: -# only build the Tkinter parts we want -# using further easyblock customisation name = 'Tkinter' version = '2.7.13' -versionsuffix = '-Python-%(version)s-bare' +versionsuffix = '-Python-%(pyver)s-bare' homepage = 'http://python.org/' description = """Tkinter module, built with the Python buildsystem""" @@ -16,8 +13,6 @@ toolchainopts = {'pic': True} source_urls = ['http://www.python.org/ftp/python/%(version)s/'] sources = ['Python-%(version)s.tgz'] -postinstallcmds = [ ' mv %(installdir)s/lib/python%(pyshortver)s/lib-tk %(installdir)s/lib/ && mv %(installdir)s/lib/python%(pyshortver)s/lib-dynload/_tkinter.so %(installdir)s/lib/ && rm -rf %(installdir)s/lib/python%(pyshortver)s/* && mv %(installdir)s/lib/lib-tk %(installdir)s/lib/python%(pyshortver)s/ && mkdir %(installdir)s/lib/python%(pyshortver)s/lib-dynload && mv %(installdir)s/lib/_tkinter.so %(installdir)s/lib/python%(pyshortver)s/lib-dynload && rm %(installdir)s/bin/python ' ] - dependencies = [ ('Python', '2.7.13', '-bare'), ('Tcl', '8.6.5'), @@ -25,6 +20,4 @@ dependencies = [ ('xproto', '7.0.28'), ] -modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/lib-dynload:lib/python%(pyshortver)s/lib-tk']} - moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..8b9e8501c9 --- /dev/null +++ b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,21 @@ +easyblock = 'EB_TkinterPython' + +name = 'Tkinter' +version = '2.7.13' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://python.org/' +description = """Tkinter module, built with the Python buildsystem""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/python/%(version)s/'] +sources = ['Python-%(version)s.tgz'] + +dependencies = [ + ('Python', '2.7.13'), + ('Tk', '8.6.6'), +] + +moduleclass = 'lang' -- GitLab From 7e22d56d6410cfbf87668110ff23823ee58d8f05 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Mon, 22 May 2017 09:36:41 +0200 Subject: [PATCH 1134/1311] Use new name easyblock tkinter --- .../t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb | 2 -- .../t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb | 2 -- 2 files changed, 4 deletions(-) diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb index 9870eab580..79e3c82386 100644 --- a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb +++ b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb @@ -1,5 +1,3 @@ -easyblock = 'EB_TkinterPython' - name = 'Tkinter' version = '2.7.13' versionsuffix = '-Python-%(pyver)s-bare' diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb index 8b9e8501c9..a9547d3014 100644 --- a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-intel-2017a-Python-2.7.13.eb @@ -1,5 +1,3 @@ -easyblock = 'EB_TkinterPython' - name = 'Tkinter' version = '2.7.13' versionsuffix = '-Python-%(pyver)s' -- GitLab From 0aeb00c035456e42dc385cc3ec05efa3d8507684 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 22 May 2017 12:03:03 +0200 Subject: [PATCH 1135/1311] {vis}[intel/2017a] matplotlib 2.0.2 Python 2.7.13 w/ Qt 4.8.7 --- ....0.2-intel-2017a-Python-2.7.13-Qt-4.8.7.eb | 46 +++++++++++++++++++ .../PyQt-4.12-intel-2017a-Python-2.7.13.eb | 37 +++++++++++++++ .../SIP-4.19.2-intel-2017a-Python-2.7.13.eb | 30 ++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-Qt-4.8.7.eb create mode 100644 easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-Qt-4.8.7.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-Qt-4.8.7.eb new file mode 100644 index 0000000000..591cb38e66 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-Qt-4.8.7.eb @@ -0,0 +1,46 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.2' +qtver = '4.8.7' +versionsuffix = '-Python-%%(pyver)s-Qt-%s' % qtver + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('Qt', qtver), + ('PyQt', '4.12', '-Python-%(pyver)s'), + ('freetype', '2.7.1', '-libpng-1.6.29'), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..d5c9f991a7 --- /dev/null +++ b/easybuild/easyconfigs/p/PyQt/PyQt-4.12-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,37 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'PyQt' +version = '4.12' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.co.uk/software/pyqt' +description = """PyQt is a set of Python v2 and v3 bindings for Digia's Qt application framework.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-%(version)s'] +sources = ['PyQt4_gpl_x11-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.13'), + ('SIP', '4.19.2', versionsuffix), + ('Qt', '4.8.7'), +] + +configopts = "configure-ng.py --confirm-license" +configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " +configopts += " --sipdir=%(installdir)s/share/sip/PyQt%(version_major)s" + +options = {'modulename': '%(name)s%(version_major)s'} + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s%(version_major)s'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..c113a20dd9 --- /dev/null +++ b/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'SIP' +version = '4.19.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.com/software/sip/' +description = """SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://sourceforge.net/projects/pyqt/files/sip/sip-%(version)s'] + +dependencies = [('Python', '2.7.13')] + +configopts = "configure.py --bindir %(installdir)s/bin --incdir %(installdir)s/include " +configopts += "--destdir %(installdir)s/lib/python%(pyshortver)s/site-packages" + +sanity_check_paths = { + 'files': ['bin/sip', 'include/sip.h'] + + ['lib/python%%(pyshortver)s/site-packages/%s' % x + for x in ['sip.%s' % SHLIB_EXT, 'sipconfig.py', 'sipdistutils.py']], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From e96f924206f4f47c0d775f00daab621fbedb8d22 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 23 May 2017 13:59:20 +1200 Subject: [PATCH 1136/1311] Removed commented out references to SamTools --- .../easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb | 9 --------- .../easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb | 11 +---------- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb index 43dbd48785..1311c9dfcc 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb @@ -16,8 +16,6 @@ dependencies = [ ('libxml2', '2.9.2'), # for XML::LibXML ] -#builddependencies = [('SAMtools', '0.1.20')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. - source_urls = ['http://www.cpan.org/src/5.0'] sources = [SOURCELOWER_TAR_GZ] #runtest = 'test' @@ -883,13 +881,6 @@ exts_list = [ 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], }), - -# Trouble finding libbam.a and bam/bam.h - try Alien::Samtools next -# ('Bio::DB::Sam', '1.41', { -# 'source_tmpl': 'Bio-SamTools-1.41.tar.gz', -# 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LD/LDS/'], -# 'patches': ['Perl-Bio-SamTools.patch'], -# }), ('HTML::TableExtract', '2.13', { 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb index dc4e724075..0443d98f0a 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb @@ -13,9 +13,7 @@ dependencies = [ ('SQLite', '3.8.9'), # for DBD::SQLite module ('expat', '2.1.0'), # for XML::Parser I think ('libxml2', '2.9.2'), # for XML::LibXML - ] - -#builddependencies = [('SAMtools', '0.1.20')] # NOT A LATER VERSION. For Bio::DB::Sam to static link to. +] source_urls = ['http://www.cpan.org/src/5.0'] sources = [SOURCELOWER_TAR_GZ] @@ -882,13 +880,6 @@ exts_list = [ 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], }), - -# Trouble finding libbam.a and bam/bam.h - try Alien::Samtools next -# ('Bio::DB::Sam', '1.41', { -# 'source_tmpl': 'Bio-SamTools-1.41.tar.gz', -# 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LD/LDS/'], -# 'patches': ['Perl-Bio-SamTools.patch'], -# }), ('HTML::TableExtract', '2.13', { 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], -- GitLab From abe1231ab912c5880b7c9506b59fd55e0d36d1cd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 10:42:23 +0200 Subject: [PATCH 1137/1311] adding easyconfigs: BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb, AUGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb, BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb, EMBOSS-6.6.0-intel-2017a.eb, lpsolve-5.5.2.5-intel-2017a.eb, libharu-2.3.0-intel-2017a.eb --- ...UGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb | 42 +++++++++++++++ .../BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb | 54 +++++++++++++++++++ .../BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb | 31 +++++++++++ .../e/EMBOSS/EMBOSS-6.6.0-intel-2017a.eb | 48 +++++++++++++++++ .../l/libharu/libharu-2.3.0-intel-2017a.eb | 39 ++++++++++++++ .../l/lpsolve/lpsolve-5.5.2.5-intel-2017a.eb | 32 +++++++++++ 6 files changed, 246 insertions(+) create mode 100644 easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/b/BUSCO/BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/libharu/libharu-2.3.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/l/lpsolve/lpsolve-5.5.2.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..e754db2e6d --- /dev/null +++ b/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,42 @@ +easyblock = 'ConfigureMake' + +name = 'AUGUSTUS' +version = '3.2.3' +versionsuffix = '-Python-2.7.13' + +homepage = 'http://bioinf.uni-greifswald.de/augustus/' +description = "AUGUSTUS is a program that predicts genes in eukaryotic genomic sequences" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://bioinf.uni-greifswald.de/augustus/binaries/'] +sources = [SOURCELOWER_TAR_GZ] +patches = ['AUGUSTUS-%(version)s_fix-hardcoding.patch'] + +dependencies = [ + ('zlib', '1.2.11'), + ('Boost', '1.63.0', versionsuffix), + ('SQLite', '3.17.0'), + ('GSL', '2.3'), + ('SuiteSparse', '4.5.5', '-ParMETIS-4.0.3'), + ('lpsolve', '5.5.2.5'), + ('BamTools', '2.4.1'), +] + +skipsteps = ['configure'] + +prebuildopts = "unset LDFLAGS && unset LIBS && " +buildopts = 'COMPGENEPRED=true SQLITE=true ZIPINPUT=true CXX="$CXX" LINK.cc="$CXX"' +installopts = 'INSTALLDIR=%(installdir)s' + +sanity_check_paths = { + 'files': ['bin/aln2wig', 'bin/augustus', 'bin/bam2hints', 'bin/bam2wig', 'bin/espoca', 'bin/etraining', + 'bin/fastBlockSearch', 'bin/filterBam', 'bin/getSeq', 'bin/homGeneMapping', 'bin/joingenes', + 'bin/load2sqlitedb', 'bin/prepareAlign'], + 'dirs': ['config', 'scripts'], +} + +modextrapaths = {'PATH': 'scripts'} +modextravars = {'AUGUSTUS_CONFIG_PATH': '%(installdir)s/config'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..c6ba2de331 --- /dev/null +++ b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,54 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos , Kenneth Hoste (UGent) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## + +easyblock = 'ConfigureMake' + +name = 'BLAST+' +version = '2.6.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://blast.ncbi.nlm.nih.gov/' +description = """Basic Local Alignment Search Tool, or BLAST, is an algorithm + for comparing primary biological sequence information, such as the amino-acid + sequences of different proteins or the nucleotides of DNA sequences.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'cstd': 'c++14'} + +sources = ['ncbi-blast-%(version)s+-src.tar.gz'] +source_urls = ['http://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/%(version)s/'] +patches = [ + 'BLAST+-2.2.30_ictce-fixes.patch', + 'BLAST+.patch', +] + +dependencies = [ + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('PCRE', '8.40'), + ('Python', '2.7.13'), + ('Boost', '1.63.0', versionsuffix), + ('GMP', '6.1.2'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), +] + +configopts = "--with-64 --with-z=$EBROOTZLIB --with-bz2=$EBROOTBZIP2 --with-pcre=$EBROOTPCRE " +configopts += "--with-python=$EBROOTPYTHON --with-boost=$EBROOTBOOST --with-gmp=$EBROOTGMP --with-png=$EBROOTLIBPNG " +configopts += "--with-jpeg=$EBROOTLIBJPEGMINTURBO " + +sanity_check_paths = { + 'files': ['bin/blastn', 'bin/blastp', 'bin/blastx'], + 'dirs': [] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/BUSCO/BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/BUSCO/BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..3c812eb0fb --- /dev/null +++ b/easybuild/easyconfigs/b/BUSCO/BUSCO-2.0.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,31 @@ +easyblock = 'Tarball' + +name = 'BUSCO' +version = '2.0.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://busco.ezlab.org/' +description = "BUSCO: assessing genome assembly and annotation completeness with single-copy orthologs" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# download via https://gitlab.com/ezlab/busco/repository/archive.tar.gz?ref=2.0.1 +# rename to busco-2.0.1.tar.gz +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('Python', '2.7.13'), + ('BLAST+', '2.6.0', versionsuffix), + ('HMMER', '3.1b2'), + ('AUGUSTUS', '3.2.3', versionsuffix), + ('EMBOSS', '6.6.0'), +] + +sanity_check_paths = { + 'files': ['BUSCO.py', 'BUSCO_plot.py'], + 'dirs': ['sample_data'], +} + +modextrapaths = {'PATH': '.'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-intel-2017a.eb b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-intel-2017a.eb new file mode 100644 index 0000000000..d6fa49965a --- /dev/null +++ b/easybuild/easyconfigs/e/EMBOSS/EMBOSS-6.6.0-intel-2017a.eb @@ -0,0 +1,48 @@ +# authors: Kenneth Hoste (Ghent University), George Tsouloupas , Fotis Georgatos +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# foss-2016b modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'EMBOSS' +version = '6.6.0' + +homepage = 'http://emboss.sourceforge.net/' +description = """EMBOSS is 'The European Molecular Biology Open Software Suite'. + EMBOSS is a free Open Source software analysis package specially developed for + the needs of the molecular biology (e.g. EMBnet) user community.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [ + 'ftp://emboss.open-bio.org/pub/EMBOSS/', + 'ftp://emboss.open-bio.org/pub/EMBOSS/old/%(version_major_minor)s.0', +] + +sources = [SOURCE_TAR_GZ] + +patches = ['EMBOSS_disable-embossupdate.patch'] + +dependencies = [ + ('libharu', '2.3.0'), + ('Java', '1.7.0_80', '', True), +] + +configopts = " --with-hpdf=$EBROOTLIBHARU " + +# jemboss.jar does not build in a parallel build +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['seqret', 'aligncopy', 'profit', 'prophet']] + + ['lib/lib%s.a' % x for x in ['acd', 'ajax', 'ajaxdb', 'ajaxg', 'eexpat', 'ensembl', + 'epcre', 'eplplot', 'ezlib', 'nucleus']] + + ['share/EMBOSS/jemboss/lib/jemboss.jar'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/l/libharu/libharu-2.3.0-intel-2017a.eb b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-intel-2017a.eb new file mode 100644 index 0000000000..b87a22de76 --- /dev/null +++ b/easybuild/easyconfigs/l/libharu/libharu-2.3.0-intel-2017a.eb @@ -0,0 +1,39 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Cyprus Institute / CaSToRC, Uni.Lu/LCSB, NTUA +# Authors:: George Tsouloupas , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +## +# Modified for foss-2016b by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'CMakeMake' + +name = 'libharu' +version = '2.3.0' + +homepage = 'http://libharu.org/' +description = """libHaru is a free, cross platform, open source library for generating PDF files.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [' https://github.com/libharu/libharu/archive/'] +sources = ['RELEASE_%s.tar.gz' % '_'.join(version.split('.'))] + +dependencies = [('libpng', '1.6.29')] + +builddependencies = [('CMake', '3.8.1')] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libhpdf.%s' % SHLIB_EXT], + 'dirs': ['if', 'include', 'lib'] +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/lpsolve/lpsolve-5.5.2.5-intel-2017a.eb b/easybuild/easyconfigs/l/lpsolve/lpsolve-5.5.2.5-intel-2017a.eb new file mode 100644 index 0000000000..3ca32aeeb9 --- /dev/null +++ b/easybuild/easyconfigs/l/lpsolve/lpsolve-5.5.2.5-intel-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'CmdCp' + +name = 'lpsolve' +version = '5.5.2.5' + +homepage = 'https://sourceforge.net/projects/lpsolve/' +description = "Mixed Integer Linear Programming (MILP) solver" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['lp_solve_%(version)s_source.tar.gz'] + +lpsolve_ver = '%(version_major)s%(version_minor)s' +start_dir = 'lpsolve%s' % lpsolve_ver + +comp_cmd = 'sed -i "s/^c=.*/c=\'$CC\'/g" ccc && sed -i "s/^opts=.*/opts=\'$CFLAGS\'/g" ccc && ' +comp_cmd += "sh ccc" +cmds_map = [('.*', comp_cmd)] + +lpsolve_libname = 'liblpsolve%s' % lpsolve_ver +files_to_copy = [ + (['bin/ux64/%s.a' % lpsolve_libname, 'bin/ux64/%s.%s' % (lpsolve_libname, SHLIB_EXT)], 'lib'), + (['../lp*.h'], 'include'), +] + +sanity_check_paths = { + 'files': ['lib/%s.a' % lpsolve_libname, 'lib/%s.%s' % (lpsolve_libname, SHLIB_EXT)], + 'dirs': ['include'], +} + +moduleclass = 'math' -- GitLab From 009634088181bae31d3a6d27883b45fe34246b2a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 10:43:47 +0200 Subject: [PATCH 1138/1311] add patch for AUGUSTUS --- .../AUGUSTUS-3.2.3_fix-hardcoding.patch | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3_fix-hardcoding.patch diff --git a/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3_fix-hardcoding.patch b/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3_fix-hardcoding.patch new file mode 100644 index 0000000000..85bff50668 --- /dev/null +++ b/easybuild/easyconfigs/a/AUGUSTUS/AUGUSTUS-3.2.3_fix-hardcoding.patch @@ -0,0 +1,57 @@ +fix hardcoded compiler names in Makefile + don't try to link binaries in /usr/local/bin +author: Kenneth Hoste (HPC-UGent) +--- augustus-3.2.3/auxprogs/compileSpliceCands/Makefile.orig 2017-05-02 20:40:04.471986962 +0200 ++++ augustus-3.2.3/auxprogs/compileSpliceCands/Makefile 2017-05-02 20:40:30.812468384 +0200 +@@ -1,8 +1,8 @@ + compileSpliceCands : compileSpliceCands.o list.h list.o +- gcc $(LDFLAGS) -o compileSpliceCands compileSpliceCands.o list.o; ++ $(CC) $(LDFLAGS) -o compileSpliceCands compileSpliceCands.o list.o; + # cp compileSpliceCands ../../bin + compileSpliceCands.o : compileSpliceCands.c +- gcc -Wall -pedantic -ansi $(CPPFLAGS) -c compileSpliceCands.c ++ $(CC) -Wall -pedantic -ansi $(CPPFLAGS) -c compileSpliceCands.c + + all : compileSpliceCands + +--- augustus-3.2.3/auxprogs/homGeneMapping/src/Makefile.orig 2017-05-04 10:12:47.633497259 +0200 ++++ augustus-3.2.3/auxprogs/homGeneMapping/src/Makefile 2017-05-04 10:12:56.313614398 +0200 +@@ -7,7 +7,7 @@ + # database access for retrieval of hints + # SQLITE = true + +-CC = g++ ++CC = $(CXX) + + # Notes: - "-Wno-sign-compare" eliminates a high number of warnings (see footnote below). Please adopt + # a strict signed-only usage strategy to avoid mistakes since we are not warned about this. +--- augustus-3.2.3/auxprogs/joingenes/Makefile.orig 2017-05-04 10:46:28.700811811 +0200 ++++ augustus-3.2.3/auxprogs/joingenes/Makefile 2017-05-04 10:46:35.380911653 +0200 +@@ -1,4 +1,4 @@ +-CC=g++ ++CC=$(CXX) + CFLAGS=-Wall -std=gnu++0x + + all: joingenes +--- augustus-3.2.3/Makefile.orig 2017-05-04 09:54:03.568352171 +0200 ++++ augustus-3.2.3/Makefile 2017-05-04 09:54:11.968330382 +0200 +@@ -17,13 +17,13 @@ + install: + install -d $(INSTALLDIR) + cp -a config bin scripts $(INSTALLDIR) +- ln -sf $(INSTALLDIR)/bin/augustus /usr/local/bin/augustus +- ln -sf $(INSTALLDIR)/bin/etraining /usr/local/bin/etraining +- ln -sf $(INSTALLDIR)/bin/prepareAlign /usr/local/bin/prepareAlign +- ln -sf $(INSTALLDIR)/bin/fastBlockSearch /usr/local/bin/fastBlockSearch +- ln -sf $(INSTALLDIR)/bin/load2db /usr/local/bin/load2db +- ln -sf $(INSTALLDIR)/bin/getSeq /usr/local/bin/getSeq +- ln -sf $(INSTALLDIR)/bin/espoca /usr/local/bin/espoca ++ #ln -sf $(INSTALLDIR)/bin/augustus /usr/local/bin/augustus ++ #ln -sf $(INSTALLDIR)/bin/etraining /usr/local/bin/etraining ++ #ln -sf $(INSTALLDIR)/bin/prepareAlign /usr/local/bin/prepareAlign ++ #ln -sf $(INSTALLDIR)/bin/fastBlockSearch /usr/local/bin/fastBlockSearch ++ #ln -sf $(INSTALLDIR)/bin/load2db /usr/local/bin/load2db ++ #ln -sf $(INSTALLDIR)/bin/getSeq /usr/local/bin/getSeq ++ #ln -sf $(INSTALLDIR)/bin/espoca /usr/local/bin/espoca + + # for internal purposes: + release: -- GitLab From 4d22e9d52139428d75e141a502bae918e19608d8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 10:46:59 +0200 Subject: [PATCH 1139/1311] add patch for BLAST+ 2.6.0 (based on patch provided in #4195) --- .../BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb | 2 +- .../b/BLAST+/BLAST+-2.6.0_fix-make-install.patch | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0_fix-make-install.patch diff --git a/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb index c6ba2de331..37ae5901c6 100644 --- a/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0-intel-2017a-Python-2.7.13.eb @@ -28,7 +28,7 @@ sources = ['ncbi-blast-%(version)s+-src.tar.gz'] source_urls = ['http://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/%(version)s/'] patches = [ 'BLAST+-2.2.30_ictce-fixes.patch', - 'BLAST+.patch', + 'BLAST+-%(version)s_fix-make-install.patch', ] dependencies = [ diff --git a/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0_fix-make-install.patch b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0_fix-make-install.patch new file mode 100644 index 0000000000..61dc64608e --- /dev/null +++ b/easybuild/easyconfigs/b/BLAST+/BLAST+-2.6.0_fix-make-install.patch @@ -0,0 +1,14 @@ +fix 'make install-toolkit' by copying header files in 'common' separately +patch created by Kenneth Hoste (HPC-UGent), based on patch by Kurt Lust (UAntwerpen) +--- ncbi-blast-2.6.0+-src/c++/src/build-system/Makefile.in.top.orig 2017-05-22 13:35:40.236430282 +0200 ++++ ncbi-blast-2.6.0+-src/c++/src/build-system/Makefile.in.top 2017-05-22 13:38:37.179080048 +0200 +@@ -51,7 +51,8 @@ + done + cd $(includedir0) && find * -name CVS -prune -o -print |\ + cpio -pd $(pincludedir) +- $(INSTALL) -m 644 $(incdir)/* $(pincludedir) ++ $(INSTALL) -m 644 $(incdir)/*.h $(pincludedir) ++ $(INSTALL) -m 644 $(incdir)/common/*.h $(pincludedir)/common + ## set up appropriate build and status directories somewhere under $(libdir)? + + install-gbench: -- GitLab From 2a15c267ab3ac4492f437d0d76b8233db0a8a31b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 15:05:32 +0200 Subject: [PATCH 1140/1311] adding easyconfigs: Spyder-3.1.4-intel-2017a-Python-2.7.13.eb, PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb, SIP-4.19.2-intel-2017a-Python-2.7.13.eb --- .../PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb | 34 +++++ .../SIP-4.19.2-intel-2017a-Python-2.7.13.eb | 30 +++++ .../Spyder-3.1.4-intel-2017a-Python-2.7.13.eb | 117 ++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 easybuild/easyconfigs/p/PyQt5/PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/s/Spyder/Spyder-3.1.4-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/p/PyQt5/PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PyQt5/PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..60a9bfec1e --- /dev/null +++ b/easybuild/easyconfigs/p/PyQt5/PyQt5-5.8.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMakePythonPackage' + +name = 'PyQt5' +version = '5.8.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.co.uk/software/pyqt' +description = """PyQt5 is a set of Python bindings for v5 of the Qt application framework from The Qt Company.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-%(version)s'] +sources = ['%(name)s_gpl-%(version)s.tar.gz'] + +dependencies = [ + ('Python', '2.7.13'), + ('SIP', '4.19.2', versionsuffix), + ('Qt5', '5.8.0'), +] + +configopts = "configure.py --confirm-license" +configopts += " --destdir=%(installdir)s/lib/python%(pyshortver)s/site-packages " +configopts += " --no-sip-files" + +options = {'modulename': '%(name)s'} + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/%(name)s'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..c113a20dd9 --- /dev/null +++ b/easybuild/easyconfigs/s/SIP/SIP-4.19.2-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Bart Verleye +# Center for eResearch, Auckland +easyblock = 'ConfigureMakePythonPackage' + +name = 'SIP' +version = '4.19.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.riverbankcomputing.com/software/sip/' +description = """SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://sourceforge.net/projects/pyqt/files/sip/sip-%(version)s'] + +dependencies = [('Python', '2.7.13')] + +configopts = "configure.py --bindir %(installdir)s/bin --incdir %(installdir)s/include " +configopts += "--destdir %(installdir)s/lib/python%(pyshortver)s/site-packages" + +sanity_check_paths = { + 'files': ['bin/sip', 'include/sip.h'] + + ['lib/python%%(pyshortver)s/site-packages/%s' % x + for x in ['sip.%s' % SHLIB_EXT, 'sipconfig.py', 'sipdistutils.py']], + 'dirs': [], +} + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/s/Spyder/Spyder-3.1.4-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/s/Spyder/Spyder-3.1.4-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..148b4a94d1 --- /dev/null +++ b/easybuild/easyconfigs/s/Spyder/Spyder-3.1.4-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,117 @@ +easyblock = 'Bundle' + +name = 'Spyder' +version = '3.1.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/spyder-ide/spyder' +description = """Spyder is an interactive Python development environment providing MATLAB-like features in a simple + and light-weighted software.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +dependencies = [ + ('Python', '2.7.13'), + ('PyQt5', '5.8.2', versionsuffix), + ('PyZMQ', '16.0.2', versionsuffix + '-zmq4'), +] + +exts_defaultclass = 'PythonPackage' +exts_filter = ("python -c 'import %(ext_name)s'", '') + +exts_list = [ + ('qtconsole', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/q/qtconsole'], + }), + ('rope', '0.10.5', { + 'source_urls': ['https://pypi.python.org/packages/source/r/rope'], + }), + ('jedi', '0.10.2', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jedi'], + }), + ('pyflakes', '1.5.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pyflakes'], + }), + ('Sphinx', '1.6.1', { + 'source_urls': ['https://pypi.python.org/packages/source/s/Sphinx'], + }), + ('Pygments', '2.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/P/Pygments'], + }), + ('pylint', '1.7.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pylint'], + }), + ('pep8', '1.7.0', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pep8'], + }), + ('psutil', '5.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/p/psutil'], + }), + ('ipython_genutils', '0.2.0', { + 'source_urls': ['https://pypi.python.org/packages/source/i/ipython_genutils/'], + }), + ('traitlets', '4.3.2', { + 'source_urls': ['https://pypi.python.org/packages/source/t/traitlets/'], + }), + ('jsonschema', '2.6.0', { + 'source_urls': ['https://pypi.python.org/packages/source/j/jsonschema/'], + }), + ('nbformat', '4.3.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbformat/'], + }), + ('configparser', '3.5.0', { + 'source_urls': ['https://pypi.python.org/packages/source/c/configparser/'], + 'patches': ['configparser-3.5.0_no-backports-namespace.patch'], + 'use_pip': True, + }), + ('entrypoints', '0.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/e/entrypoints/'], + 'source_tmpl': 'entrypoints-%(version)s-py2.py3-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('pandocfilters', '1.4.1', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pandocfilters/'], + }), + ('testpath', '0.3', { + 'source_urls': ['https://pypi.python.org/packages/py2.py3/t/testpath/'], + 'source_tmpl': 'testpath-%(version)s-py2.py3-none-any.whl', + 'unpack_sources': False, + 'use_pip': True, + }), + ('nbconvert', '5.1.1', { + 'source_urls': ['https://pypi.python.org/packages/source/n/nbconvert'], + 'use_pip': True, + }), + ('QtAwesome', '0.4.4', { + 'source_urls': ['https://pypi.python.org/packages/source/Q/QtAwesome'], + 'prebuildopts': "rm -r qtawesome/tests/__pycache__ && ", + }), + ('pickleshare', '0.7.4', { + 'source_urls': ['https://pypi.python.org/packages/source/p/pickleshare'], + }), + ('QtPy', '1.2.1', { + 'source_urls': ['https://pypi.python.org/packages/source/Q/QtPy'], + }), + ('chardet', '3.0.3', { + 'source_urls': ['https://pypi.python.org/packages/source/c/chardet'], + }), + ('numpydoc', '0.6.0', { + 'source_urls': ['https://pypi.python.org/packages/source/n/numpydoc'], + }), + (name.lower(), version, { + 'source_urls': ['https://pypi.python.org/packages/source/s/spyder'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['bin/spyder'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'tools' -- GitLab From ae42b680550622152b1ae579352285c80394ebbe Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 15:20:20 +0200 Subject: [PATCH 1141/1311] add tuneR, seewave, soundecology extensions for R 3.4.0 (+ libsndfile as dep) --- .../libsndfile-1.0.28-intel-2017a.eb | 20 +++++++++++++++++++ .../r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 14 ++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/l/libsndfile/libsndfile-1.0.28-intel-2017a.eb diff --git a/easybuild/easyconfigs/l/libsndfile/libsndfile-1.0.28-intel-2017a.eb b/easybuild/easyconfigs/l/libsndfile/libsndfile-1.0.28-intel-2017a.eb new file mode 100644 index 0000000000..0912c1995f --- /dev/null +++ b/easybuild/easyconfigs/l/libsndfile/libsndfile-1.0.28-intel-2017a.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libsndfile' +version = '1.0.28' + +homepage = 'http://www.mega-nerd.com/libsndfile' +description = """Libsndfile is a C library for reading and writing files containing sampled sound + (such as MS Windows WAV and the Apple/SGI AIFF format) through one standard library interface.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.mega-nerd.com/libsndfile/files/'] +sources = [SOURCE_TAR_GZ] + +sanity_check_paths = { + 'files': ['include/sndfile.h', 'include/sndfile.hh', 'lib/libsndfile.a', 'lib/libsndfile.%s' % SHLIB_EXT], + 'dirs': ['bin'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb index 949ed58bbb..94a8307cc4 100644 --- a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -44,6 +44,8 @@ dependencies = [ ('PROJ', '4.9.3'), # for rgdal ('GMP', '6.1.2'), # for igraph ('NLopt', '2.4.2'), # for nloptr + ('FFTW', '3.3.6'), # for fftw + ('libsndfile', '1.0.28'), # for seewave # OS dependency should be preferred if the os version is more recent then this version, # it's nice to have an up to date openssl for security reasons # ('OpenSSL', '1.0.2h'), @@ -508,7 +510,17 @@ exts_list = [ ('purrr', '0.2.2', ext_options), ('downloader', '0.4', ext_options), ('imager', '0.40.2', dict(ext_options.items() + [('patches', ['imager-0.40.2_icpc-wd308.patch'])])), + ('pracma', '2.0.4', ext_options), + ('signal', '0.7-6', ext_options), + ('tuneR', '1.3.2', ext_options), + ('pastecs', '1.3-18', ext_options), + ('audio', '0.1-5', ext_options), + ('fftw', '1.0-4', ext_options), + ('seewave', '2.0.5', ext_options), + ('gsw', '1.0-3', ext_options), + ('oce', '0.9-21', ext_options), + ('ineq', '0.2-13', ext_options), + ('soundecology', '1.3.2', ext_options), ] moduleclass = 'lang' - -- GitLab From e69694e926d3426f654dcfd7f67cd72b63430d22 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 15:22:50 +0200 Subject: [PATCH 1142/1311] add missing patch for configparser --- ...gparser-3.5.0_no-backports-namespace.patch | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/s/Spyder/configparser-3.5.0_no-backports-namespace.patch diff --git a/easybuild/easyconfigs/s/Spyder/configparser-3.5.0_no-backports-namespace.patch b/easybuild/easyconfigs/s/Spyder/configparser-3.5.0_no-backports-namespace.patch new file mode 100644 index 0000000000..6deccec5e6 --- /dev/null +++ b/easybuild/easyconfigs/s/Spyder/configparser-3.5.0_no-backports-namespace.patch @@ -0,0 +1,31 @@ +don't let configparser define 'backports' namespace, since that interferes with other packaging that provide stuff in 'backports' + +patch obtained from https://github.com/NIXOS/nixpkgs/blob/master/pkgs/development/python-modules/configparser/0001-namespace-fix.patch +see also https://bitbucket.org/ambv/configparser/issues/17/importerror-when-used-with-other-backports +diff --git a/setup.py b/setup.py +index 3b07823..63ed25d 100644 +--- a/setup.py ++++ b/setup.py +@@ -42,7 +42,6 @@ setup( + py_modules=modules, + package_dir={'': 'src'}, + packages=find_packages('src'), +- namespace_packages=['backports'], + include_package_data=True, + zip_safe=False, + install_requires=requirements, +diff --git a/src/backports/__init__.py b/src/backports/__init__.py +index f84d25c..febdb2f 100644 +--- a/src/backports/__init__.py ++++ b/src/backports/__init__.py +@@ -3,9 +3,3 @@ + + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) +- +-try: +- import pkg_resources +- pkg_resources.declare_namespace(__name__) +-except ImportError: +- pass +-- -- GitLab From 3de6edbdf821c34fe4397a9ec4ffa16d0bc1e3c5 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 23 May 2017 16:04:22 +0200 Subject: [PATCH 1143/1311] Drop testing easyconfigs --- .../p/Python/Python-2.7.13-foss-2016b-bare.eb | 147 ------------------ ...er-2.7.13-foss-2016b-Python-2.7.13-bare.eb | 21 --- 2 files changed, 168 deletions(-) delete mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb delete mode 100644 easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb deleted file mode 100644 index 4c330ffc74..0000000000 --- a/easybuild/easyconfigs/p/Python/Python-2.7.13-foss-2016b-bare.eb +++ /dev/null @@ -1,147 +0,0 @@ -name = 'Python' -version = '2.7.13' -versionsuffix = '-bare' - -homepage = 'http://python.org/' -description = """Python is a programming language that lets you work more quickly and integrate your systems - more effectively. - - This is a version without Tk or X11.""" - -toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'pic': True} - -source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] -sources = [SOURCE_TGZ] - -# python needs bzip2 to build the bz2 package -dependencies = [ - ('bzip2', '1.0.6'), - ('zlib', '1.2.8'), - ('libreadline', '6.3'), - ('ncurses', '6.0'), - ('SQLite', '3.13.0'), - ('GMP', '6.1.2'), - ('libffi', '3.2.1'), - # OS dependency should be preferred if the os version is more recent then this version, - # it's nice to have an up to date openssl for security reasons - # ('OpenSSL', '1.0.2h'), -] - -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] - -# order is important! -# package versions updated 9th February 2017 -# using easy_update -# the commented out extensions were added by easy_update but broke the build -exts_list = [ - ('six', '1.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], - }), - #('packaging', '16.8', { - # 'source_urls': ['https://pypi.python.org/packages/source/p/packaging/'], - #}), - #('pyparsing', '2.1.10', { - # 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], - #}), - #('appdirs', '1.4.0', { - # 'source_urls': ['https://pypi.python.org/packages/source/a/appdirs/'], - #}), - ('setuptools', '32.3.1', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'], - }), - ('pip', '9.0.1', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pip/'], - }), - ('nose', '1.3.7', { - 'source_urls': ['https://pypi.python.org/packages/source/n/nose/'], - }), - ('numpy', '1.12.0', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/n/numpy'], - }), - ('scipy', '0.18.1', { - 'source_urls': ['https://pypi.python.org/packages/source/s/scipy'], - }), - ('blist', '1.3.6', { - 'source_urls': ['https://pypi.python.org/packages/source/b/blist/'], - }), - ('mpi4py', '2.0.0', { - 'source_urls': ['http://bitbucket.org/mpi4py/mpi4py/downloads/'], - }), - ('paycheck', '1.0.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/paycheck/'], - }), - ('pbr', '1.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pbr/'], - }), - ('lockfile', '0.12.2', { - 'source_urls': ['https://pypi.python.org/packages/source/l/lockfile/'], - }), - ('Cython', '0.25.2', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cython/'], - }), - ('dateutil', '2.5.3', { - 'source_tmpl': 'python-%(name)s-%(version)s.tar.gz', - 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], - }), - ('deap', '1.0.2', { - 'source_tmpl': '%(name)s-%(version)s.post2.tar.gz', - 'source_urls': ['https://pypi.python.org/packages/source/d/deap/'], - }), - ('decorator', '4.0.11', { - 'source_urls': ['https://pypi.python.org/packages/source/d/decorator/'], - }), - ('arff', '2.1.0', { - 'source_tmpl': 'liac-%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/l/liac-arff/'], - }), - ('pycrypto', '2.6.1', { - 'modulename': 'Crypto', - 'source_urls': ['http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/'], - }), - ('ecdsa', '0.13', { - 'source_urls': ['https://pypi.python.org/packages/source/e/ecdsa/'], - }), - ('cryptography', '1.7.2', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cryptography/'], - }), - ('pyasn1', '0.2.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyasn1/'], - }), - ('paramiko', '2.1.1', { - 'source_urls': ['https://pypi.python.org/packages/source/p/paramiko/'], - }), - ('netifaces', '0.10.5', { - 'source_urls': ['https://pypi.python.org/packages/source/n/netifaces'], - }), - ('netaddr', '0.7.19', { - 'source_urls': ['https://pypi.python.org/packages/source/n/netaddr'], - }), - ('funcsigs', '1.0.2', { - 'source_urls': ['https://pypi.python.org/packages/source/f/funcsigs'], - }), - ('mock', '2.0.0', { - 'source_urls': ['https://pypi.python.org/packages/source/m/mock'], - }), - ('pytz', '2016.10', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pytz'], - }), - ('pandas', '0.19.2', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pandas'], - }), - ('enum34', '1.1.6', { - 'modulename': 'enum', - 'source_urls': ['https://pypi.python.org/packages/source/e/enum34'], - }), - ('bitstring', '3.1.5', { - 'source_tmpl': '%(name)s-%(version)s.zip', - 'source_urls': ['https://pypi.python.org/packages/source/b/bitstring'], - }), - ('virtualenv', '15.1.0', { - 'source_urls': ['https://pypi.python.org/packages/source/v/virtualenv'], - }), -] - -moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb b/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb deleted file mode 100644 index 79e3c82386..0000000000 --- a/easybuild/easyconfigs/t/Tkinter/Tkinter-2.7.13-foss-2016b-Python-2.7.13-bare.eb +++ /dev/null @@ -1,21 +0,0 @@ -name = 'Tkinter' -version = '2.7.13' -versionsuffix = '-Python-%(pyver)s-bare' - -homepage = 'http://python.org/' -description = """Tkinter module, built with the Python buildsystem""" - -toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'pic': True} - -source_urls = ['http://www.python.org/ftp/python/%(version)s/'] -sources = ['Python-%(version)s.tgz'] - -dependencies = [ - ('Python', '2.7.13', '-bare'), - ('Tcl', '8.6.5'), - ('Tk', '8.6.5', '-libX11-1.6.3'), - ('xproto', '7.0.28'), -] - -moduleclass = 'lang' -- GitLab From 3a1774cff1fcb0b5d67c56e5f856c9676431b142 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 23 May 2017 17:45:12 +0200 Subject: [PATCH 1144/1311] Add VTK/7.1.1 --- .../VTK-7.1.1-intel-2017a-Python-2.7.13.eb | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..79963c3515 --- /dev/null +++ b/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,59 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-97.html +## + +easyblock = 'CMakeMake' + +name = 'VTK' +version = '7.1.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.vtk.org' +description = """The Visualization Toolkit (VTK) is an open-source, freely available software system for + 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several + interpreted interface layers including Tcl/Tk, Java, and Python. VTK supports a wide variety of visualization + algorithms including: scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques + such as: implicit modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://www.vtk.org/files/release/%(version_major_minor)s'] +sources = [ + SOURCE_TAR_GZ, + '%(name)sData-%(version)s.tar.gz', +] + +builddependencies = [('CMake', '3.8.0')] + +dependencies = [ + ('Python', '2.7.13'), + ('libGLU', '9.0.0'), + ('X11', '20170314'), +] + +configopts = "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include -DVTK_WRAP_PYTHON=ON " +configopts += "-DPYTHON_LIBRARY=$EBROOTPYTHON/lib/libpython%%(pyshortver)s.%s " % SHLIB_EXT +configopts += " -DPYTHON_INCLUDE_DIR=$EBROOTPYTHON/include/python%(pyshortver)s " +preinstallopts = "mkdir -p %(installdir)s/lib/python%(pyshortver)s/site-packages/ && " +preinstallopts += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && " + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +sanity_check_paths = { + 'files': ['bin/vtk%s-%%(version_major_minor)s' % x for x in ['EncodeString', 'HashSource']], + 'dirs': ['lib/python%(pyshortver)s/site-packages/', 'include/vtk-%(version_major_minor)s'], +} + +sanity_check_commands = [('python', "-c 'import %(namelower)s'")] + +moduleclass = 'vis' -- GitLab From e49f01daadc3275835be0ddfafb68785c1a744dc Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 23 May 2017 17:49:59 +0200 Subject: [PATCH 1145/1311] Fix FSL to actually build --- .../f/FSL/FSL-5.0.10-intel-2017a.eb | 6 +- .../f/FSL/FSL-5.0.10_build_extras.patch | 2 +- .../f/FSL/FSL-5.0.10_makefile_fixes.patch | 758 +++++------------- .../g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb | 24 - .../libsigc++/libsigc++-2.10.0-intel-2017a.eb | 20 - .../l/libxml++/libxml++-2.91.3-intel-2017a.eb | 24 - 6 files changed, 213 insertions(+), 621 deletions(-) delete mode 100644 easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb delete mode 100644 easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb delete mode 100644 easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb b/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb index b6760b7e06..5ba9750bf3 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10-intel-2017a.eb @@ -19,15 +19,15 @@ patches = [ dependencies = [ ('Boost', '1.63.0', '-Python-2.7.13'), ('libgd', '2.2.4'), - ('libxml++', '2.91.3'), - ('SQLite', '3.13.0'), + ('libxml2', '2.9.4'), + ('SQLite', '3.17.0'), ('libpng', '1.6.29'), ('Tk', '8.6.6'), - ('GLibmm', '2.53.1.1'), ('NLopt', '2.4.2'), ('freeglut', '3.0.0'), ('expat', '2.2.0'), ('zlib', '1.2.11'), + ('VTK', '7.1.1', '-Python-2.7.13'), ] moduleclass = 'bio' diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch index ac663c9852..d545a66031 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch @@ -7,7 +7,7 @@ diff -ur fsl/extras/build fsl.new/extras/build PROJECTS="${PROJECTS} libgd libgdc libprob libcprob newmat cprob newran fftw" PROJECTS="${PROJECTS} boost libxml2-2.9.2 libxml++-2.34.0 libsqlite libnlopt ../include/armawrap/dummy_newmat" +# For EasyBuild: -+PROJECTS="libprob libcprob newmat cprob newran" ++PROJECTS="libprob libcprob newmat cprob newran libxml++-2.34.0 libgdc" for projname in $PROJECTS; do if [ -d $FSLESRCDIR/$projname ] ; then buildIt $FSLESRCDIR $projname 1 diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index 8808344d6f..ca470e4c17 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -1,605 +1,265 @@ -patch out hardcoded compiler names and options -author: kenneth hoste (hpc-ugent) -diff -ur fsl.orig/config/apple-darwin10-gcc4.2/systemvars.mk fsl/config/apple-darwin10-gcc4.2/systemvars.mk ---- fsl.orig/config/apple-darwin10-gcc4.2/systemvars.mk 2009-11-03 18:02:14.000000000 +0100 -+++ fsl/config/apple-darwin10-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -3,8 +3,8 @@ - - # Compiler dependent variables - --CC = cc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = - CXXSTATICFLAGS = - -@@ -15,7 +15,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations -+OPTFLAGS := ${CFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/apple-darwin10-gcc4.2: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin11-gcc4.2/systemvars.mk fsl/config/apple-darwin11-gcc4.2/systemvars.mk ---- fsl.orig/config/apple-darwin11-gcc4.2/systemvars.mk 2012-03-21 12:30:53.000000000 +0100 -+++ fsl/config/apple-darwin11-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -15,7 +15,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -+OPTFLAGS := -O3 -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic - ANSI_FLAGS = ${GNU_ANSI_FLAGS} -Only in fsl/config/apple-darwin11-gcc4.2: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin12-gcc4.2/systemvars.mk fsl/config/apple-darwin12-gcc4.2/systemvars.mk ---- fsl.orig/config/apple-darwin12-gcc4.2/systemvars.mk 2013-04-09 18:00:32.000000000 +0200 -+++ fsl/config/apple-darwin12-gcc4.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -15,7 +15,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -+OPTFLAGS := -O3 -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -ansi -pedantic - ANSI_FLAGS = ${GNU_ANSI_FLAGS} -Only in fsl/config/apple-darwin12-gcc4.2: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin7-gcc3.1/systemvars.mk fsl/config/apple-darwin7-gcc3.1/systemvars.mk ---- fsl.orig/config/apple-darwin7-gcc3.1/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/apple-darwin7-gcc3.1/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -7,8 +7,8 @@ - - # Compiler dependent variables - --CC = cc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = - CXXSTATICFLAGS = - -@@ -17,7 +17,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -traditional-cpp -Wall -Wno-long-long -Wno-long-double -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/apple-darwin7-gcc3.1: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin7-gcc3.3/systemvars.mk fsl/config/apple-darwin7-gcc3.3/systemvars.mk ---- fsl.orig/config/apple-darwin7-gcc3.3/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/apple-darwin7-gcc3.3/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -7,8 +7,8 @@ - - # Compiler dependent variables - --CC = cc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = - CXXSTATICFLAGS = - -@@ -17,7 +17,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/apple-darwin7-gcc3.3: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin8-gcc4.0/systemvars.mk fsl/config/apple-darwin8-gcc4.0/systemvars.mk ---- fsl.orig/config/apple-darwin8-gcc4.0/systemvars.mk 2007-12-19 15:40:57.000000000 +0100 -+++ fsl/config/apple-darwin8-gcc4.0/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -3,8 +3,8 @@ - - # Compiler dependent variables - --CC = cc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = - CXXSTATICFLAGS = - -@@ -17,7 +17,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations -+OPTFLAGS := ${CFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/apple-darwin8-gcc4.0: systemvars.mk.orig -diff -ur fsl.orig/config/apple-darwin9-gcc4.0/systemvars.mk fsl/config/apple-darwin9-gcc4.0/systemvars.mk ---- fsl.orig/config/apple-darwin9-gcc4.0/systemvars.mk 2007-12-19 15:33:53.000000000 +0100 -+++ fsl/config/apple-darwin9-gcc4.0/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -3,8 +3,8 @@ - - # Compiler dependent variables - --CC = cc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = - CXXSTATICFLAGS = - -@@ -17,7 +17,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations -+OPTFLAGS := ${CFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -Wno-long-long -Wno-long-double -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/apple-darwin9-gcc4.0: systemvars.mk.orig +# This fixes the build system of FSL. It now (mostly) uses EB. +# Ward Poelmans +diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk +--- fsl.orig/config/common/vars.mk 2016-05-24 17:44:11.000000000 +0200 ++++ fsl/config/common/vars.mk 2017-05-23 10:19:55.325628385 +0200 +@@ -24,14 +24,14 @@ + USRCFLAGS = + USRCXXFLAGS = + +-LDFLAGS = ${ARCHLDFLAGS} ${USRLDFLAGS} -L. -L${DEVLIBDIR} -L${LIBDIR} ++LDFLAGS = ${EBVARLDFLAGS} ${ARCHLDFLAGS} ${USRLDFLAGS} -L. -L${DEVLIBDIR} -L${LIBDIR} + +-AccumulatedIncFlags = -I${INC_BOOST} ${USRINCFLAGS} -I. -I${DEVINCDIR} -I${INCDIR} ++AccumulatedIncFlags = ${EBVARCPPFLAGS} -I${INC_BOOST} ${USRINCFLAGS} -I. -I${DEVINCDIR} -I${INCDIR} + +-CFLAGS = ${ANSI_FLAGS} ${ANSI_CFLAGS} ${DBGFLAGS} ${USEDCSTATICFLAGS} ${USRCFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ ++CFLAGS = ${EBVARCFLAGS} ${ANSI_FLAGS} ${ANSI_CFLAGS} ${DBGFLAGS} ${USEDCSTATICFLAGS} ${USRCFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ + ${AccumulatedIncFlags} + +-CXXFLAGS = ${ANSI_FLAGS} ${ANSI_CXXFLAGS} ${DBGFLAGS} ${USEDCXXSTATICFLAGS} ${USRCXXFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ ++CXXFLAGS = ${EBVARCXXFLAGS} ${ANSI_FLAGS} ${ANSI_CXXFLAGS} ${DBGFLAGS} ${USEDCXXSTATICFLAGS} ${USRCXXFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ + ${AccumulatedIncFlags} + + HFILES = *.h diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk --- fsl.orig/config/generic/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/generic/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 ++++ fsl/config/generic/systemvars.mk 2017-05-22 14:26:37.819705455 +0200 @@ -16,8 +16,8 @@ - + # Compiler dependent variables - + -CC = gcc -CXX = c++ +CC := ${CC} +CXX := ${CXX} CSTATICFLAGS = -static CXXSTATICFLAGS = -static - + @@ -25,7 +25,7 @@ - + DEPENDFLAGS = -MM - + -OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} +OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 MACHDBGFLAGS = GNU_ANSI_FLAGS = -Wall -ansi -pedantic SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/generic: systemvars.mk.orig -diff -ur fsl.orig/config/gnu_64-gcc4.4/systemvars.mk fsl/config/gnu_64-gcc4.4/systemvars.mk ---- fsl.orig/config/gnu_64-gcc4.4/systemvars.mk 2011-04-19 10:47:52.000000000 +0200 -+++ fsl/config/gnu_64-gcc4.4/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/gnu_64-gcc4.4: systemvars.mk.orig -diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.2/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.2/systemvars.mk ---- fsl.orig/config/i686-pc-cygwin-gcc3.2/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/i686-pc-cygwin-gcc3.2/systemvars.mk 2017-05-18 13:54:40.446975876 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc-2 --CXX = c++-2 -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/i686-pc-cygwin-gcc3.2: systemvars.mk.orig -diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.3/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.3/systemvars.mk ---- fsl.orig/config/i686-pc-cygwin-gcc3.3/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/i686-pc-cygwin-gcc3.3/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/i686-pc-cygwin-gcc3.3: systemvars.mk.orig -diff -ur fsl.orig/config/i686-pc-cygwin-gcc3.4/systemvars.mk fsl/config/i686-pc-cygwin-gcc3.4/systemvars.mk ---- fsl.orig/config/i686-pc-cygwin-gcc3.4/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/i686-pc-cygwin-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-deprecated - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/i686-pc-cygwin-gcc3.4: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc2.96/systemvars.mk fsl/config/linux_32-gcc2.96/systemvars.mk ---- fsl.orig/config/linux_32-gcc2.96/systemvars.mk 2007-07-25 17:21:07.000000000 +0200 -+++ fsl/config/linux_32-gcc2.96/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc2.96: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc3.2/systemvars.mk fsl/config/linux_32-gcc3.2/systemvars.mk ---- fsl.orig/config/linux_32-gcc3.2/systemvars.mk 2007-07-25 17:21:08.000000000 +0200 -+++ fsl/config/linux_32-gcc3.2/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc3.2: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc3.3/systemvars.mk fsl/config/linux_32-gcc3.3/systemvars.mk ---- fsl.orig/config/linux_32-gcc3.3/systemvars.mk 2007-07-25 17:21:09.000000000 +0200 -+++ fsl/config/linux_32-gcc3.3/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc3.3: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc3.4/systemvars.mk fsl/config/linux_32-gcc3.4/systemvars.mk ---- fsl.orig/config/linux_32-gcc3.4/systemvars.mk 2007-07-25 17:21:10.000000000 +0200 -+++ fsl/config/linux_32-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc3.4: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc4.0/systemvars.mk fsl/config/linux_32-gcc4.0/systemvars.mk ---- fsl.orig/config/linux_32-gcc4.0/systemvars.mk 2007-07-25 17:21:11.000000000 +0200 -+++ fsl/config/linux_32-gcc4.0/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc4.0: systemvars.mk.orig -diff -ur fsl.orig/config/linux_32-gcc4.1/systemvars.mk fsl/config/linux_32-gcc4.1/systemvars.mk ---- fsl.orig/config/linux_32-gcc4.1/systemvars.mk 2012-04-20 11:37:28.000000000 +0200 -+++ fsl/config/linux_32-gcc4.1/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_32-gcc4.1: systemvars.mk.orig -diff -ur fsl.orig/config/linux_64-gcc3.4/systemvars.mk fsl/config/linux_64-gcc3.4/systemvars.mk ---- fsl.orig/config/linux_64-gcc3.4/systemvars.mk 2007-07-25 17:21:12.000000000 +0200 -+++ fsl/config/linux_64-gcc3.4/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_64-gcc3.4: systemvars.mk.orig -diff -ur fsl.orig/config/linux_64-gcc4.0/systemvars.mk fsl/config/linux_64-gcc4.0/systemvars.mk ---- fsl.orig/config/linux_64-gcc4.0/systemvars.mk 2007-07-25 17:21:13.000000000 +0200 -+++ fsl/config/linux_64-gcc4.0/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_64-gcc4.0: systemvars.mk.orig -diff -ur fsl.orig/config/linux_64-gcc4.1/systemvars.mk fsl/config/linux_64-gcc4.1/systemvars.mk ---- fsl.orig/config/linux_64-gcc4.1/systemvars.mk 2007-07-25 11:19:45.000000000 +0200 -+++ fsl/config/linux_64-gcc4.1/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_64-gcc4.1: systemvars.mk.orig -diff -ur fsl.orig/config/linux_64-gcc4.2/systemvars.mk fsl/config/linux_64-gcc4.2/systemvars.mk ---- fsl.orig/config/linux_64-gcc4.2/systemvars.mk 2008-06-26 15:25:42.000000000 +0200 -+++ fsl/config/linux_64-gcc4.2/systemvars.mk 2017-05-18 13:54:40.447975880 +0200 -@@ -18,8 +18,8 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - CSTATICFLAGS = -static - CXXSTATICFLAGS = -static - -@@ -27,7 +27,7 @@ - - DEPENDFLAGS = -MM - --OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = -g - GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_64-gcc4.2: systemvars.mk.orig -diff -ur fsl.orig/config/linux_64-gcc4.4/systemvars.mk fsl/config/linux_64-gcc4.4/systemvars.mk ---- fsl.orig/config/linux_64-gcc4.4/systemvars.mk 2017-01-20 16:47:17.000000000 +0100 -+++ fsl/config/linux_64-gcc4.4/systemvars.mk 2017-05-18 13:57:25.995699462 +0200 -@@ -18,8 +18,8 @@ - +diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc4.8/externallibs.mk +--- fsl.orig/config/linux_64-gcc4.8/externallibs.mk 2017-02-18 13:20:05.000000000 +0100 ++++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-23 17:11:51.141583678 +0200 +@@ -15,7 +15,7 @@ + INC_GDC = ${FSLEXTINC}/libgdc + + # LIBXML2 library +-INC_XML2 = ${FSLEXTINC}/libxml2 ++INC_XML2 = ${EBROOTLIBXML2} + + # LIBXML++ library + INC_XML++ = ${FSLEXTINC}/libxml++-2.6 +@@ -49,12 +49,12 @@ + INC_ZLIB = /usr/include + + # BOOST library +-BOOSTDIR = ${FSLEXTINC}/boost +-LIB_BOOST = ${BOOSTDIR} +-INC_BOOST = ${BOOSTDIR} ++BOOSTDIR = ${EBROOTBOOST} ++LIB_BOOST = ${BOOSTDIR}/lib ++INC_BOOST = ${BOOSTDIR}/include + + # QT library +-QTDIR = /usr/lib/qt3 ++QTDIR = ${EBROOTQT} + LIB_QT = ${QTDIR}/lib + INC_QT = ${QTDIR}/include + +@@ -64,10 +64,10 @@ + INC_QWT = ${QWTDIR}/include + + # FFTW3 library +-LIB_FFTW3 = ${FSLEXTLIB} +-INC_FFTW3 = ${FSLEXTINC}/fftw3 ++LIB_FFTW3 = ${EBVARFFTW_LIB_DIR} ++INC_FFTW3 = ${EBVARFFTW_INC_DIR} + + # VTK library +-VTKDIR_INC = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/include/vtk-7.0 +-VTKDIR_LIB = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/lib +-VTKSUFFIX = -7.0 +\ No newline at end of file ++VTKDIR_INC = ${EBROOTVTK}/include/vtk-7.1 ++VTKDIR_LIB = ${EBROOTVTK}/lib ++VTKSUFFIX = -7.1 +diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4.8/systemvars.mk +--- fsl.orig/config/linux_64-gcc4.8/systemvars.mk 2017-02-18 13:20:05.000000000 +0100 ++++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-22 15:09:39.988913330 +0200 +@@ -8,7 +8,7 @@ + CP = /bin/cp + MV = /bin/mv + INSTALL = install -p +-TCLSH = ${FSLDIR}/bin/fsltclsh ++TCLSH = tclsh + RANLIB = echo + + FSLML = ${FSLDIR}/bin/fslml +@@ -18,9 +18,9 @@ + # Compiler dependent variables - + -CC = gcc -CXX = c++ +-CXX11 = scl enable devtoolset-2 -- c++ +CC := ${CC} +CXX := ${CXX} - CXX11 = scl enable devtoolset-2 -- c++ ++CXX11 = ${CXX} -std=c++11 CSTATICFLAGS = -static CXXSTATICFLAGS = -static -@@ -30,7 +30,7 @@ - + +@@ -30,16 +30,16 @@ + DEPENDFLAGS = -MM - + -OPTFLAGS = -g -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 ++OPTFLAGS := ${OPTFLAGS} ${ARCHFLAGS} -wd803 MACHDBGFLAGS = -g GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/linux_64-gcc4.4: systemvars.mk.orig -Only in fsl/config/linux_64-gcc4.4: systemvars.mk.rej -diff -ur fsl.orig/config/sparc-solaris2.8-gcc2.95/systemvars.mk fsl/config/sparc-solaris2.8-gcc2.95/systemvars.mk ---- fsl.orig/config/sparc-solaris2.8-gcc2.95/systemvars.mk 2007-07-13 13:00:21.000000000 +0200 -+++ fsl/config/sparc-solaris2.8-gcc2.95/systemvars.mk 2017-05-18 13:54:40.448975885 +0200 -@@ -5,14 +5,14 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - - ARCHFLAGS = -mv8 -ffast-math -fomit-frame-pointer - - DEPENDFLAGS = -MM - --OPTFLAGS = -O6 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = - GNU_ANSI_FLAGS = -Wall -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/sparc-solaris2.8-gcc2.95: systemvars.mk.orig -diff -ur fsl.orig/config/sparc-solaris2.9-gcc2.95/systemvars.mk fsl/config/sparc-solaris2.9-gcc2.95/systemvars.mk ---- fsl.orig/config/sparc-solaris2.9-gcc2.95/systemvars.mk 2007-07-13 13:00:21.000000000 +0200 -+++ fsl/config/sparc-solaris2.9-gcc2.95/systemvars.mk 2017-05-18 13:54:40.448975885 +0200 -@@ -5,14 +5,14 @@ - - # Compiler dependent variables - --CC = gcc --CXX = c++ -+CC := ${CC} -+CXX := ${CXX} - - ARCHFLAGS = -mv8 -ffast-math -fomit-frame-pointer - ARCHLDFLAGS = -static - DEPENDFLAGS = -MM - --OPTFLAGS = -O6 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 - MACHDBGFLAGS = - GNU_ANSI_FLAGS = -Wall -ansi -pedantic - SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/sparc-solaris2.9-gcc2.95: systemvars.mk.orig + ANSI_FLAGS = ${GNU_ANSI_FLAGS} + + # CUDA development environment +-CUDA_INSTALLATION = /opt/cuda-7.5 ++CUDA_INSTALLATION = ${EBROOTCUDA} + GENCODE_FLAGS = $(shell ${FSLDIR}/config/common/supportedGencodes.sh ${CUDA_INSTALLATION}) + LIB_CUDA = ${CUDA_INSTALLATION}/lib64 + INC_CUDA = ${CUDA_INSTALLATION}/include + NVCC = ${CUDA_INSTALLATION}/bin/nvcc +-NVCC11=scl enable devtoolset-2 -- ${CUDA_INSTALLATION}/bin/nvcc ++NVCC11= ${CUDA_INSTALLATION}/bin/nvcc +diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh +--- fsl.orig/etc/fslconf/fsl.csh 2014-05-19 16:54:10.000000000 +0200 ++++ fsl/etc/fslconf/fsl.csh 2017-05-22 14:31:34.251256565 +0200 +@@ -25,7 +25,7 @@ + # The following variables specify paths for programs and can be changed + # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) + +-setenv FSLTCLSH $FSLDIR/bin/fsltclsh ++setenv FSLTCLSH tclsh + setenv FSLWISH $FSLDIR/bin/fslwish + + # The following variables are used for running code in parallel across +diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh +--- fsl.orig/etc/fslconf/fsl-devel.sh 2014-05-19 16:54:10.000000000 +0200 ++++ fsl/etc/fslconf/fsl-devel.sh 2017-05-22 14:31:41.437318420 +0200 +@@ -26,7 +26,7 @@ + # The following variables specify paths for programs and can be changed + # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) + +-FSLTCLSH=$FSLDIR/bin/fsltclsh ++FSLTCLSH=tclsh + FSLWISH=$FSLDIR/bin/fslwish + + export FSLTCLSH FSLWISH +diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh +--- fsl.orig/etc/fslconf/fsl.sh 2014-05-19 16:54:10.000000000 +0200 ++++ fsl/etc/fslconf/fsl.sh 2017-05-22 14:31:28.729209032 +0200 +@@ -26,7 +26,7 @@ + # The following variables specify paths for programs and can be changed + # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) + +-FSLTCLSH=$FSLDIR/bin/fsltclsh ++FSLTCLSH=tclsh + FSLWISH=$FSLDIR/bin/fslwish + + export FSLTCLSH FSLWISH +diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc +--- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-22 15:01:50.430868138 +0200 +@@ -39,6 +39,6 @@ + + bool IStreamParserInputBuffer::do_close() + { +- return input_; ++ return static_cast(input_); + } + } +diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc +--- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2017-05-22 15:01:50.431868146 +0200 +@@ -29,13 +29,13 @@ + // here we rely on the ostream implicit conversion to boolean, to know if the stream can be used and/or if the write succeded. + if(output_) + output_.write(buffer, len); +- return output_; ++ return static_cast(output_); + } + + bool OStreamOutputBuffer::do_close() + { + if(output_) + output_.flush(); +- return output_; ++ return static_cast(output_); + } + } diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile --- fsl.orig/src/film/Makefile 2017-04-20 17:01:43.000000000 +0200 -+++ fsl/src/film/Makefile 2017-05-18 13:54:40.448975885 +0200 ++++ fsl/src/film/Makefile 2017-05-22 14:26:37.820705464 +0200 @@ -28,7 +28,7 @@ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} ftoz.o ${LIBS} - + film_gls:${OBJS} film_gls.o - ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -l giftiio + ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -lgiftiio - + film_gls_res:${OBJS} film_gls_res.o ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls_res.o ${LIBS} Only in fsl/src/film: Makefile.orig diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile --- fsl.orig/src/libmeshutils/Makefile 2012-07-23 15:25:20.000000000 +0200 -+++ fsl/src/libmeshutils/Makefile 2017-05-18 13:54:40.448975885 +0200 ++++ fsl/src/libmeshutils/Makefile 2017-05-22 14:26:37.820705464 +0200 @@ -3,7 +3,7 @@ - + PROJNAME = meshUtils - + -LD_LIBRARY_PATH=${FSLDIR}/lib +#LD_LIBRARY_PATH=${FSLDIR}/lib - - USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} + + USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} USRLDFLAGS = -L${LIB_PROB} -L${LIB_NEWMAT} -L${LIB_ZLIB} Only in fsl/src/libmeshutils: Makefile.orig diff -ur fsl.orig/src/melodic/Makefile fsl/src/melodic/Makefile --- fsl.orig/src/melodic/Makefile 2016-09-01 17:24:32.000000000 +0200 -+++ fsl/src/melodic/Makefile 2017-05-18 13:54:40.448975885 +0200 ++++ fsl/src/melodic/Makefile 2017-05-22 14:26:37.820705464 +0200 @@ -3,7 +3,7 @@ include ${FSLCONFDIR}/default.mk - + OPTFLAGS = -O3 -Wno-deprecated -ggdb -OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui +#OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui - + PROJNAME = melodic - + Only in fsl/src/melodic: Makefile.orig +diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile +--- fsl.orig/src/mist-clean/Makefile 2017-04-20 14:17:54.000000000 +0200 ++++ fsl/src/mist-clean/Makefile 2017-05-23 16:14:14.034077875 +0200 +@@ -2,15 +2,15 @@ + + NLOPT_INC = ${FSLEXTINC} + NLOPT_LIB = ${FSLEXTLIB} +-SQLITE_INC = ${FSLEXTINC}/libsqlite +-SQLITE_LIB = ${FSLEXTLIB} ++SQLITE_INC = ${EBROOTSQLITE}/include ++SQLITE_LIB = ${EBROOTSQLITE}/lib + + PROJNAME = mist + + XFILES = mist/mist + SCRIPTS = bin/mist_1_train bin/mist_2_fit bin/mist_FA_reg bin/mist_display bin/mist_mesh_utils + +-USRCXXFLAGS = -std=c++11 ++USRCXXFLAGS = -std=c++11 -DBOOST_LOG_DYN_LINK + USRINCFLAGS = -I${FSLDIR}/include/newimage -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_GDC} -I${INC_GD} -I${SQLITE_INC} -I${NLOPT_INC} -I${VTKDIR_INC} -Icommon + USRLDFLAGS = -L${LIB_NEWMAT} -L${LIB_ZLIB} -L${LIB_BOOST} -L${LIB_GDC} -L${LIB_GD} -L${NLOPT_LIB} -L${VTKDIR_LIB} + diff --git a/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb b/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb deleted file mode 100644 index b9e19ec518..0000000000 --- a/easybuild/easyconfigs/g/GLibmm/GLibmm-2.53.1.1-intel-2017a.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'GLibmm' -version = '2.53.1.1' - -homepage = 'http://www.gtk.org/' -description = """GLib is one of the base libraries of the GTK+ project""" - -toolchain = {'name': 'intel', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} - -source_urls = ['http://ftp.gnome.org/pub/gnome/sources/glibmm/%(version_major_minor)s/'] -sources = ['%(namelower)s-%(version)s.tar.xz'] - -dependencies = [ - ('GLib', '2.52.0'), - ('libsigc++', '2.10.0'), -] - -sanity_check_paths = { - 'files': ['lib/libglibmm-2.5.%s' % SHLIB_EXT], - 'dirs': [], -} -moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb b/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb deleted file mode 100644 index bb4e33f915..0000000000 --- a/easybuild/easyconfigs/l/libsigc++/libsigc++-2.10.0-intel-2017a.eb +++ /dev/null @@ -1,20 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'libsigc++' -version = '2.10.0' - -homepage = 'http://www.gtk.org/' -description = """The libsigc++ package implements a typesafe callback system for standard C++.""" - -toolchain = {'name': 'intel', 'version': '2017a'} -toolchainopts = {'optarch': True, 'pic': True} - -source_urls = ['http://ftp.gnome.org/pub/gnome/sources/%(name)s/%(version_major_minor)s/'] -sources = ['%(namelower)s-%(version)s.tar.xz'] - -sanity_check_paths = { - 'files': ['lib/libsigc-2.0.%s' % SHLIB_EXT], - 'dirs': [], -} - -moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb b/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb deleted file mode 100644 index 8e9c13f200..0000000000 --- a/easybuild/easyconfigs/l/libxml++/libxml++-2.91.3-intel-2017a.eb +++ /dev/null @@ -1,24 +0,0 @@ -easyblock = 'ConfigureMake' - -name = 'libxml++' -version = '2.91.3' - -homepage = 'http://libxmlplusplus.sourceforge.net' -description = """ libxml++ is a C++ wrapper for the libxml XML parser library. """ - -toolchain = {'name': 'intel', 'version': '2017a'} - -sources = [SOURCE_TAR_XZ] -source_urls = ['http://www.example.com'] - -dependencies = [ - ('libxml2', '2.9.4'), - ('GLibmm', '2.53.1.1'), -] - -sanity_check_paths = { - 'files': [], - 'dirs': ["."] -} - -moduleclass = 'lib' -- GitLab From 2c0d4a6304f7ab97cc7077bb16d508ae81f70386 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 23 May 2017 20:24:16 +0200 Subject: [PATCH 1146/1311] adding easyconfigs: matplotlib-2.0.2-intel-2017a-Python-2.7.13-libpng-1.6.29.eb --- ...intel-2017a-Python-2.7.13-libpng-1.6.29.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-libpng-1.6.29.eb diff --git a/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-libpng-1.6.29.eb b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-libpng-1.6.29.eb new file mode 100644 index 0000000000..5b2a328b11 --- /dev/null +++ b/easybuild/easyconfigs/m/matplotlib/matplotlib-2.0.2-intel-2017a-Python-2.7.13-libpng-1.6.29.eb @@ -0,0 +1,44 @@ +easyblock = 'Bundle' + +name = 'matplotlib' +version = '2.0.2' +libpng_ver = '1.6.29' +versionsuffix = '-Python-%%(pyver)s-libpng-%s' % libpng_ver + +homepage = 'http://matplotlib.org' +description = """matplotlib is a python 2D plotting library which produces publication quality figures in a variety of + hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python + and ipython shell, web application servers, and six graphical user interface toolkits.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' + +dependencies = [ + ('Python', '2.7.13'), + ('freetype', '2.7.1', '-libpng-%s' % libpng_ver), +] + +exts_list = [ + ('Cycler', '0.10.0', { + 'modulename': 'cycler', + 'source_urls': ['https://pypi.python.org/packages/source/C/Cycler'], + 'source_tmpl': 'cycler-%(version)s.tar.gz', + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/m/matplotlib'], + }), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'vis' -- GitLab From ef5a7c15c0843b4459a249852b5da027ee368a20 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 23 May 2017 21:47:12 +0200 Subject: [PATCH 1147/1311] Drop testing easyconfig --- .../f/FSL/FSL-5.0.9-intel-2017a.eb | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb b/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb deleted file mode 100644 index 34a1890fcb..0000000000 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.9-intel-2017a.eb +++ /dev/null @@ -1,24 +0,0 @@ -name = 'FSL' -version = '5.0.9' - -homepage = 'http://www.fmrib.ox.ac.uk/fsl/' -description = """FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI brain imaging data.""" - -toolchain = {'name': 'intel', 'version': '2017a'} - -source_urls = ["http://www.fmrib.ox.ac.uk/fsldownloads/"] -sources = ['%(namelower)s-%(version)s-sources.tar.gz'] - -patches = [ - 'FSL-%(version)s_makefile_fixes.patch', - 'FSL-%(version)s_missing_lib.patch', - 'FSL_icc_nan-inf_fix.patch', -] - -dependencies = [ - ('freeglut', '3.0.0'), - ('expat', '2.2.0'), - ('zlib', '1.2.11'), -] - -moduleclass = 'bio' -- GitLab From 6dc1b3764473357dfec073a64bbd1ce6d68934e5 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Tue, 23 May 2017 22:17:41 +0200 Subject: [PATCH 1148/1311] Fix patch --- .../f/FSL/FSL-5.0.10_makefile_fixes.patch | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index ca470e4c17..a9d93a90d7 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -2,7 +2,7 @@ # Ward Poelmans diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk --- fsl.orig/config/common/vars.mk 2016-05-24 17:44:11.000000000 +0200 -+++ fsl/config/common/vars.mk 2017-05-23 10:19:55.325628385 +0200 ++++ fsl/config/common/vars.mk 2017-05-23 22:14:37.138797842 +0200 @@ -24,14 +24,14 @@ USRCFLAGS = USRCXXFLAGS = @@ -22,9 +22,10 @@ diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk ${AccumulatedIncFlags} HFILES = *.h +Only in fsl/config/common: vars.mk.orig diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk --- fsl.orig/config/generic/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/generic/systemvars.mk 2017-05-22 14:26:37.819705455 +0200 ++++ fsl/config/generic/systemvars.mk 2017-05-23 22:14:37.139797850 +0200 @@ -16,8 +16,8 @@ # Compiler dependent variables @@ -45,9 +46,10 @@ diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk MACHDBGFLAGS = GNU_ANSI_FLAGS = -Wall -ansi -pedantic SGI_ANSI_FLAGS = -ansi -fullwarn +Only in fsl/config/generic: systemvars.mk.orig diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc4.8/externallibs.mk --- fsl.orig/config/linux_64-gcc4.8/externallibs.mk 2017-02-18 13:20:05.000000000 +0100 -+++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-23 17:11:51.141583678 +0200 ++++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-23 22:15:51.535436754 +0200 @@ -15,7 +15,7 @@ INC_GDC = ${FSLEXTINC}/libgdc @@ -91,9 +93,11 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc +VTKDIR_INC = ${EBROOTVTK}/include/vtk-7.1 +VTKDIR_LIB = ${EBROOTVTK}/lib +VTKSUFFIX = -7.1 +Only in fsl/config/linux_64-gcc4.8: externallibs.mk.orig +Only in fsl/config/linux_64-gcc4.8: externallibs.mk.rej diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4.8/systemvars.mk --- fsl.orig/config/linux_64-gcc4.8/systemvars.mk 2017-02-18 13:20:05.000000000 +0100 -+++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-22 15:09:39.988913330 +0200 ++++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-23 22:14:37.139797850 +0200 @@ -8,7 +8,7 @@ CP = /bin/cp MV = /bin/mv @@ -136,9 +140,10 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4. NVCC = ${CUDA_INSTALLATION}/bin/nvcc -NVCC11=scl enable devtoolset-2 -- ${CUDA_INSTALLATION}/bin/nvcc +NVCC11= ${CUDA_INSTALLATION}/bin/nvcc +Only in fsl/config/linux_64-gcc4.8: systemvars.mk.orig diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh --- fsl.orig/etc/fslconf/fsl.csh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl.csh 2017-05-22 14:31:34.251256565 +0200 ++++ fsl/etc/fslconf/fsl.csh 2017-05-23 22:14:37.139797850 +0200 @@ -25,7 +25,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -148,9 +153,10 @@ diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh setenv FSLWISH $FSLDIR/bin/fslwish # The following variables are used for running code in parallel across +Only in fsl/etc/fslconf: fsl.csh.orig diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh --- fsl.orig/etc/fslconf/fsl-devel.sh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl-devel.sh 2017-05-22 14:31:41.437318420 +0200 ++++ fsl/etc/fslconf/fsl-devel.sh 2017-05-23 22:14:37.139797850 +0200 @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -160,9 +166,10 @@ diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh FSLWISH=$FSLDIR/bin/fslwish export FSLTCLSH FSLWISH +Only in fsl/etc/fslconf: fsl-devel.sh.orig diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh --- fsl.orig/etc/fslconf/fsl.sh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl.sh 2017-05-22 14:31:28.729209032 +0200 ++++ fsl/etc/fslconf/fsl.sh 2017-05-23 22:14:37.139797850 +0200 @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -172,9 +179,10 @@ diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh FSLWISH=$FSLDIR/bin/fslwish export FSLTCLSH FSLWISH +Only in fsl/etc/fslconf: fsl.sh.orig diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc --- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 -+++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-22 15:01:50.430868138 +0200 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-23 22:14:37.139797850 +0200 @@ -39,6 +39,6 @@ bool IStreamParserInputBuffer::do_close() @@ -183,9 +191,10 @@ diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffe + return static_cast(input_); } } +Only in fsl/extras/src/libxml++-2.34.0/libxml++/io: istreamparserinputbuffer.cc.orig diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc --- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 -+++ fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2017-05-22 15:01:50.431868146 +0200 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2017-05-23 22:14:37.139797850 +0200 @@ -29,13 +29,13 @@ // here we rely on the ostream implicit conversion to boolean, to know if the stream can be used and/or if the write succeded. if(output_) @@ -202,9 +211,10 @@ diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc + return static_cast(output_); } } +Only in fsl/extras/src/libxml++-2.34.0/libxml++/io: ostreamoutputbuffer.cc.orig diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile --- fsl.orig/src/film/Makefile 2017-04-20 17:01:43.000000000 +0200 -+++ fsl/src/film/Makefile 2017-05-22 14:26:37.820705464 +0200 ++++ fsl/src/film/Makefile 2017-05-23 22:14:37.139797850 +0200 @@ -28,7 +28,7 @@ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} ftoz.o ${LIBS} @@ -217,7 +227,7 @@ diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile Only in fsl/src/film: Makefile.orig diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile --- fsl.orig/src/libmeshutils/Makefile 2012-07-23 15:25:20.000000000 +0200 -+++ fsl/src/libmeshutils/Makefile 2017-05-22 14:26:37.820705464 +0200 ++++ fsl/src/libmeshutils/Makefile 2017-05-23 22:14:37.140797859 +0200 @@ -3,7 +3,7 @@ PROJNAME = meshUtils @@ -230,7 +240,7 @@ diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile Only in fsl/src/libmeshutils: Makefile.orig diff -ur fsl.orig/src/melodic/Makefile fsl/src/melodic/Makefile --- fsl.orig/src/melodic/Makefile 2016-09-01 17:24:32.000000000 +0200 -+++ fsl/src/melodic/Makefile 2017-05-22 14:26:37.820705464 +0200 ++++ fsl/src/melodic/Makefile 2017-05-23 22:14:37.140797859 +0200 @@ -3,7 +3,7 @@ include ${FSLCONFDIR}/default.mk @@ -243,7 +253,7 @@ diff -ur fsl.orig/src/melodic/Makefile fsl/src/melodic/Makefile Only in fsl/src/melodic: Makefile.orig diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile --- fsl.orig/src/mist-clean/Makefile 2017-04-20 14:17:54.000000000 +0200 -+++ fsl/src/mist-clean/Makefile 2017-05-23 16:14:14.034077875 +0200 ++++ fsl/src/mist-clean/Makefile 2017-05-23 22:14:37.140797859 +0200 @@ -2,15 +2,15 @@ NLOPT_INC = ${FSLEXTINC} @@ -263,3 +273,4 @@ diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile USRINCFLAGS = -I${FSLDIR}/include/newimage -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_GDC} -I${INC_GD} -I${SQLITE_INC} -I${NLOPT_INC} -I${VTKDIR_INC} -Icommon USRLDFLAGS = -L${LIB_NEWMAT} -L${LIB_ZLIB} -L${LIB_BOOST} -L${LIB_GDC} -L${LIB_GD} -L${NLOPT_LIB} -L${VTKDIR_LIB} +Only in fsl/src/mist-clean: Makefile.orig -- GitLab From 687e00080e43440cf4f3a4b7c2921812f6ad85da Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 24 May 2017 08:06:32 +0200 Subject: [PATCH 1149/1311] adding easyconfigs: xarray-0.9.5-intel-2017a-Python-2.7.13.eb --- .../xarray-0.9.5-intel-2017a-Python-2.7.13.eb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..10d17b9e1f --- /dev/null +++ b/easybuild/easyconfigs/x/xarray/xarray-0.9.5-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,24 @@ +easyblock = 'PythonPackage' + +name = 'xarray' +version = '0.9.5' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pydata/xarray' +description = """xarray (formerly xray) is an open source project and Python package that aims to bring + the labeled data power of pandas to the physical sciences, by providing N-dimensional variants of the + core pandas data structures.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '2.7.13')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'data' -- GitLab From 7f12474b3edb909a36dffe5c61e7a601068587aa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 24 May 2017 08:35:56 +0200 Subject: [PATCH 1150/1311] also copy README for GapFiller --- .../easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb b/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb index 4e408b39dd..28fa1604ac 100644 --- a/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb +++ b/easybuild/easyconfigs/g/GapFiller/GapFiller-2.1.1-intel-2017a.eb @@ -22,8 +22,10 @@ buildopts = 'bin_PROGRAMS=GapFiller ' buildopts += 'GapFiller_CFLAGS="$CFLAGS $LDFLAGS -lz" GapFiller_CXXFLAGS="$CXXFLAGS $LDFLAGS -lz"' installopts = 'bin_PROGRAMS=GapFiller ' +postinstallcmds = ["cp -a README %(installdir)s"] + sanity_check_paths = { - 'files': ['bin/GapFiller'], + 'files': ['bin/GapFiller', 'README'], 'dirs': [], } -- GitLab From 2699a28f353017f29796c94ff951a0b103b5eea4 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 24 May 2017 09:50:09 +0200 Subject: [PATCH 1151/1311] Fix patch again --- .../f/FSL/FSL-5.0.10_makefile_fixes.patch | 69 +++++++------------ 1 file changed, 23 insertions(+), 46 deletions(-) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index a9d93a90d7..6a7fdafd84 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -2,7 +2,7 @@ # Ward Poelmans diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk --- fsl.orig/config/common/vars.mk 2016-05-24 17:44:11.000000000 +0200 -+++ fsl/config/common/vars.mk 2017-05-23 22:14:37.138797842 +0200 ++++ fsl/config/common/vars.mk 2017-05-24 09:38:05.912369589 +0200 @@ -24,14 +24,14 @@ USRCFLAGS = USRCXXFLAGS = @@ -22,10 +22,9 @@ diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk ${AccumulatedIncFlags} HFILES = *.h -Only in fsl/config/common: vars.mk.orig diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk --- fsl.orig/config/generic/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 -+++ fsl/config/generic/systemvars.mk 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/config/generic/systemvars.mk 2017-05-24 09:38:05.912369589 +0200 @@ -16,8 +16,8 @@ # Compiler dependent variables @@ -42,14 +41,13 @@ diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk DEPENDFLAGS = -MM -OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} -wd803 ++OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} MACHDBGFLAGS = GNU_ANSI_FLAGS = -Wall -ansi -pedantic SGI_ANSI_FLAGS = -ansi -fullwarn -Only in fsl/config/generic: systemvars.mk.orig diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc4.8/externallibs.mk --- fsl.orig/config/linux_64-gcc4.8/externallibs.mk 2017-02-18 13:20:05.000000000 +0100 -+++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-23 22:15:51.535436754 +0200 ++++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-24 09:45:04.058907856 +0200 @@ -15,7 +15,7 @@ INC_GDC = ${FSLEXTINC}/libgdc @@ -82,22 +80,22 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc # FFTW3 library -LIB_FFTW3 = ${FSLEXTLIB} -INC_FFTW3 = ${FSLEXTINC}/fftw3 -+LIB_FFTW3 = ${EBVARFFTW_LIB_DIR} -+INC_FFTW3 = ${EBVARFFTW_INC_DIR} - - # VTK library +- +-# VTK library -VTKDIR_INC = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/include/vtk-7.0 -VTKDIR_LIB = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/lib -VTKSUFFIX = -7.0 \ No newline at end of file -+VTKDIR_INC = ${EBROOTVTK}/include/vtk-7.1 ++LIB_FFTW3 = ${EBVARFFTW_LIB_DIR} ++INC_FFTW3 = ${EBVARFFTW_INC_DIR} ++ ++ # VTK library ++VTKDIR_INC = ${EBROOTVTK}/include/vtk-`echo $EBVERSIONVTK | cut -f1-2 -d.` +VTKDIR_LIB = ${EBROOTVTK}/lib -+VTKSUFFIX = -7.1 -Only in fsl/config/linux_64-gcc4.8: externallibs.mk.orig -Only in fsl/config/linux_64-gcc4.8: externallibs.mk.rej ++VTKSUFFIX = -`echo $EBVERSIONVTK | cut -f1-2 -d.` diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4.8/systemvars.mk --- fsl.orig/config/linux_64-gcc4.8/systemvars.mk 2017-02-18 13:20:05.000000000 +0100 -+++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-24 09:38:05.912369589 +0200 @@ -8,7 +8,7 @@ CP = /bin/cp MV = /bin/mv @@ -125,7 +123,7 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4. DEPENDFLAGS = -MM -OPTFLAGS = -g -O3 -fexpensive-optimizations ${ARCHFLAGS} -+OPTFLAGS := ${OPTFLAGS} ${ARCHFLAGS} -wd803 ++OPTFLAGS := ${OPTFLAGS} ${ARCHFLAGS} MACHDBGFLAGS = -g GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long SGI_ANSI_FLAGS = -ansi -fullwarn @@ -140,10 +138,9 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4. NVCC = ${CUDA_INSTALLATION}/bin/nvcc -NVCC11=scl enable devtoolset-2 -- ${CUDA_INSTALLATION}/bin/nvcc +NVCC11= ${CUDA_INSTALLATION}/bin/nvcc -Only in fsl/config/linux_64-gcc4.8: systemvars.mk.orig diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh --- fsl.orig/etc/fslconf/fsl.csh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl.csh 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/etc/fslconf/fsl.csh 2017-05-24 09:38:05.912369589 +0200 @@ -25,7 +25,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -153,10 +150,9 @@ diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh setenv FSLWISH $FSLDIR/bin/fslwish # The following variables are used for running code in parallel across -Only in fsl/etc/fslconf: fsl.csh.orig diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh --- fsl.orig/etc/fslconf/fsl-devel.sh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl-devel.sh 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/etc/fslconf/fsl-devel.sh 2017-05-24 09:38:05.912369589 +0200 @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -166,10 +162,9 @@ diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh FSLWISH=$FSLDIR/bin/fslwish export FSLTCLSH FSLWISH -Only in fsl/etc/fslconf: fsl-devel.sh.orig diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh --- fsl.orig/etc/fslconf/fsl.sh 2014-05-19 16:54:10.000000000 +0200 -+++ fsl/etc/fslconf/fsl.sh 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/etc/fslconf/fsl.sh 2017-05-24 09:38:05.912369589 +0200 @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) @@ -179,10 +174,9 @@ diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh FSLWISH=$FSLDIR/bin/fslwish export FSLTCLSH FSLWISH -Only in fsl/etc/fslconf: fsl.sh.orig diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc --- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 -+++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-24 09:38:05.913369598 +0200 @@ -39,6 +39,6 @@ bool IStreamParserInputBuffer::do_close() @@ -191,10 +185,9 @@ diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffe + return static_cast(input_); } } -Only in fsl/extras/src/libxml++-2.34.0/libxml++/io: istreamparserinputbuffer.cc.orig diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc --- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 -+++ fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc 2017-05-24 09:38:05.913369598 +0200 @@ -29,13 +29,13 @@ // here we rely on the ostream implicit conversion to boolean, to know if the stream can be used and/or if the write succeded. if(output_) @@ -211,10 +204,9 @@ diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc + return static_cast(output_); } } -Only in fsl/extras/src/libxml++-2.34.0/libxml++/io: ostreamoutputbuffer.cc.orig diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile --- fsl.orig/src/film/Makefile 2017-04-20 17:01:43.000000000 +0200 -+++ fsl/src/film/Makefile 2017-05-23 22:14:37.139797850 +0200 ++++ fsl/src/film/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -28,7 +28,7 @@ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} ftoz.o ${LIBS} @@ -224,10 +216,9 @@ diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile film_gls_res:${OBJS} film_gls_res.o ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls_res.o ${LIBS} -Only in fsl/src/film: Makefile.orig diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile --- fsl.orig/src/libmeshutils/Makefile 2012-07-23 15:25:20.000000000 +0200 -+++ fsl/src/libmeshutils/Makefile 2017-05-23 22:14:37.140797859 +0200 ++++ fsl/src/libmeshutils/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -3,7 +3,7 @@ PROJNAME = meshUtils @@ -237,23 +228,9 @@ diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} USRLDFLAGS = -L${LIB_PROB} -L${LIB_NEWMAT} -L${LIB_ZLIB} -Only in fsl/src/libmeshutils: Makefile.orig -diff -ur fsl.orig/src/melodic/Makefile fsl/src/melodic/Makefile ---- fsl.orig/src/melodic/Makefile 2016-09-01 17:24:32.000000000 +0200 -+++ fsl/src/melodic/Makefile 2017-05-23 22:14:37.140797859 +0200 -@@ -3,7 +3,7 @@ - include ${FSLCONFDIR}/default.mk - - OPTFLAGS = -O3 -Wno-deprecated -ggdb --OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui -+#OPTFLAGS_alphaev6-dec-osf5.0-gcc2.95.2 = -O3 -mieee -mfp-trap-mode=sui - - PROJNAME = melodic - -Only in fsl/src/melodic: Makefile.orig diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile --- fsl.orig/src/mist-clean/Makefile 2017-04-20 14:17:54.000000000 +0200 -+++ fsl/src/mist-clean/Makefile 2017-05-23 22:14:37.140797859 +0200 ++++ fsl/src/mist-clean/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -2,15 +2,15 @@ NLOPT_INC = ${FSLEXTINC} @@ -269,8 +246,8 @@ diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile SCRIPTS = bin/mist_1_train bin/mist_2_fit bin/mist_FA_reg bin/mist_display bin/mist_mesh_utils -USRCXXFLAGS = -std=c++11 +# EB: needed to correctly (dynamically) link with the Boost log libs +USRCXXFLAGS = -std=c++11 -DBOOST_LOG_DYN_LINK USRINCFLAGS = -I${FSLDIR}/include/newimage -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_GDC} -I${INC_GD} -I${SQLITE_INC} -I${NLOPT_INC} -I${VTKDIR_INC} -Icommon USRLDFLAGS = -L${LIB_NEWMAT} -L${LIB_ZLIB} -L${LIB_BOOST} -L${LIB_GDC} -L${LIB_GD} -L${NLOPT_LIB} -L${VTKDIR_LIB} -Only in fsl/src/mist-clean: Makefile.orig -- GitLab From 50598e882b5c1a267ef293df6f536682fafddb26 Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 24 May 2017 09:51:17 +0200 Subject: [PATCH 1152/1311] Authorship patch --- easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch index d545a66031..15bc9a7922 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_build_extras.patch @@ -1,4 +1,5 @@ # only build thing we don't provide with EasyBuild +# Ward Poelmans diff -ur fsl/extras/build fsl.new/extras/build --- fsl/extras/build 2016-11-15 15:30:21.000000000 +0100 +++ fsl.new/extras/build 2017-05-19 15:21:07.321630239 +0200 -- GitLab From d5afd3ccab3e7da38cc41acd8905104c1655024e Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 24 May 2017 09:58:04 +0200 Subject: [PATCH 1153/1311] Final? fix of patch --- .../f/FSL/FSL-5.0.10_makefile_fixes.patch | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index 6a7fdafd84..c9f8391467 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -4,42 +4,42 @@ diff -ur fsl.orig/config/common/vars.mk fsl/config/common/vars.mk --- fsl.orig/config/common/vars.mk 2016-05-24 17:44:11.000000000 +0200 +++ fsl/config/common/vars.mk 2017-05-24 09:38:05.912369589 +0200 @@ -24,14 +24,14 @@ - USRCFLAGS = + USRCFLAGS = USRCXXFLAGS = - + -LDFLAGS = ${ARCHLDFLAGS} ${USRLDFLAGS} -L. -L${DEVLIBDIR} -L${LIBDIR} +LDFLAGS = ${EBVARLDFLAGS} ${ARCHLDFLAGS} ${USRLDFLAGS} -L. -L${DEVLIBDIR} -L${LIBDIR} - + -AccumulatedIncFlags = -I${INC_BOOST} ${USRINCFLAGS} -I. -I${DEVINCDIR} -I${INCDIR} +AccumulatedIncFlags = ${EBVARCPPFLAGS} -I${INC_BOOST} ${USRINCFLAGS} -I. -I${DEVINCDIR} -I${INCDIR} - + -CFLAGS = ${ANSI_FLAGS} ${ANSI_CFLAGS} ${DBGFLAGS} ${USEDCSTATICFLAGS} ${USRCFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ +CFLAGS = ${EBVARCFLAGS} ${ANSI_FLAGS} ${ANSI_CFLAGS} ${DBGFLAGS} ${USEDCSTATICFLAGS} ${USRCFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ ${AccumulatedIncFlags} - + -CXXFLAGS = ${ANSI_FLAGS} ${ANSI_CXXFLAGS} ${DBGFLAGS} ${USEDCXXSTATICFLAGS} ${USRCXXFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ +CXXFLAGS = ${EBVARCXXFLAGS} ${ANSI_FLAGS} ${ANSI_CXXFLAGS} ${DBGFLAGS} ${USEDCXXSTATICFLAGS} ${USRCXXFLAGS} ${ARCHFLAGS} ${OPTFLAGS} \ ${AccumulatedIncFlags} - + HFILES = *.h diff -ur fsl.orig/config/generic/systemvars.mk fsl/config/generic/systemvars.mk --- fsl.orig/config/generic/systemvars.mk 2007-07-13 13:00:20.000000000 +0200 +++ fsl/config/generic/systemvars.mk 2017-05-24 09:38:05.912369589 +0200 @@ -16,8 +16,8 @@ - + # Compiler dependent variables - + -CC = gcc -CXX = c++ +CC := ${CC} +CXX := ${CXX} CSTATICFLAGS = -static CXXSTATICFLAGS = -static - + @@ -25,7 +25,7 @@ - + DEPENDFLAGS = -MM - + -OPTFLAGS = -O3 -fexpensive-optimizations ${ARCHFLAGS} +OPTFLAGS := ${CFLAGS} ${ARCHFLAGS} MACHDBGFLAGS = @@ -50,16 +50,16 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc +++ fsl/config/linux_64-gcc4.8/externallibs.mk 2017-05-24 09:45:04.058907856 +0200 @@ -15,7 +15,7 @@ INC_GDC = ${FSLEXTINC}/libgdc - + # LIBXML2 library -INC_XML2 = ${FSLEXTINC}/libxml2 +INC_XML2 = ${EBROOTLIBXML2} - + # LIBXML++ library INC_XML++ = ${FSLEXTINC}/libxml++-2.6 @@ -49,12 +49,12 @@ INC_ZLIB = /usr/include - + # BOOST library -BOOSTDIR = ${FSLEXTINC}/boost -LIB_BOOST = ${BOOSTDIR} @@ -67,28 +67,28 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc +BOOSTDIR = ${EBROOTBOOST} +LIB_BOOST = ${BOOSTDIR}/lib +INC_BOOST = ${BOOSTDIR}/include - + # QT library -QTDIR = /usr/lib/qt3 +QTDIR = ${EBROOTQT} LIB_QT = ${QTDIR}/lib INC_QT = ${QTDIR}/include - + @@ -64,10 +64,10 @@ INC_QWT = ${QWTDIR}/include - + # FFTW3 library -LIB_FFTW3 = ${FSLEXTLIB} -INC_FFTW3 = ${FSLEXTINC}/fftw3 - --# VTK library +-# VTK library -VTKDIR_INC = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/include/vtk-7.0 -VTKDIR_LIB = /home/fs0/cowboy/var/caper_linux_64-gcc4.4/VTK7/lib -VTKSUFFIX = -7.0 \ No newline at end of file +LIB_FFTW3 = ${EBVARFFTW_LIB_DIR} +INC_FFTW3 = ${EBVARFFTW_INC_DIR} -+ ++ + # VTK library +VTKDIR_INC = ${EBROOTVTK}/include/vtk-`echo $EBVERSIONVTK | cut -f1-2 -d.` +VTKDIR_LIB = ${EBROOTVTK}/lib @@ -103,12 +103,12 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4. -TCLSH = ${FSLDIR}/bin/fsltclsh +TCLSH = tclsh RANLIB = echo - + FSLML = ${FSLDIR}/bin/fslml @@ -18,9 +18,9 @@ - + # Compiler dependent variables - + -CC = gcc -CXX = c++ -CXX11 = scl enable devtoolset-2 -- c++ @@ -117,18 +117,18 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4. +CXX11 = ${CXX} -std=c++11 CSTATICFLAGS = -static CXXSTATICFLAGS = -static - + @@ -30,16 +30,16 @@ - + DEPENDFLAGS = -MM - + -OPTFLAGS = -g -O3 -fexpensive-optimizations ${ARCHFLAGS} +OPTFLAGS := ${OPTFLAGS} ${ARCHFLAGS} MACHDBGFLAGS = -g GNU_ANSI_FLAGS = -Wall -ansi -pedantic -Wno-long-long SGI_ANSI_FLAGS = -ansi -fullwarn ANSI_FLAGS = ${GNU_ANSI_FLAGS} - + # CUDA development environment -CUDA_INSTALLATION = /opt/cuda-7.5 +CUDA_INSTALLATION = ${EBROOTCUDA} @@ -144,11 +144,11 @@ diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh @@ -25,7 +25,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) - + -setenv FSLTCLSH $FSLDIR/bin/fsltclsh +setenv FSLTCLSH tclsh setenv FSLWISH $FSLDIR/bin/fslwish - + # The following variables are used for running code in parallel across diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh --- fsl.orig/etc/fslconf/fsl-devel.sh 2014-05-19 16:54:10.000000000 +0200 @@ -156,29 +156,29 @@ diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) - + -FSLTCLSH=$FSLDIR/bin/fsltclsh +FSLTCLSH=tclsh FSLWISH=$FSLDIR/bin/fslwish - - export FSLTCLSH FSLWISH + + export FSLTCLSH FSLWISH diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh --- fsl.orig/etc/fslconf/fsl.sh 2014-05-19 16:54:10.000000000 +0200 +++ fsl/etc/fslconf/fsl.sh 2017-05-24 09:38:05.912369589 +0200 @@ -26,7 +26,7 @@ # The following variables specify paths for programs and can be changed # or replaced by different programs ( e.g. FSLDISPLAY=open for MacOSX) - + -FSLTCLSH=$FSLDIR/bin/fsltclsh +FSLTCLSH=tclsh FSLWISH=$FSLDIR/bin/fslwish - - export FSLTCLSH FSLWISH + + export FSLTCLSH FSLWISH diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc --- fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2010-12-15 11:41:27.000000000 +0100 +++ fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc 2017-05-24 09:38:05.913369598 +0200 @@ -39,6 +39,6 @@ - + bool IStreamParserInputBuffer::do_close() { - return input_; @@ -195,7 +195,7 @@ diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc - return output_; + return static_cast(output_); } - + bool OStreamOutputBuffer::do_close() { if(output_) @@ -209,45 +209,45 @@ diff -ur fsl.orig/src/film/Makefile fsl/src/film/Makefile +++ fsl/src/film/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -28,7 +28,7 @@ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} ftoz.o ${LIBS} - + film_gls:${OBJS} film_gls.o - ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -l giftiio + ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls.o ${LIBS} -lgiftiio - + film_gls_res:${OBJS} film_gls_res.o ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${OBJS} film_gls_res.o ${LIBS} diff -ur fsl.orig/src/libmeshutils/Makefile fsl/src/libmeshutils/Makefile --- fsl.orig/src/libmeshutils/Makefile 2012-07-23 15:25:20.000000000 +0200 +++ fsl/src/libmeshutils/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -3,7 +3,7 @@ - + PROJNAME = meshUtils - + -LD_LIBRARY_PATH=${FSLDIR}/lib +#LD_LIBRARY_PATH=${FSLDIR}/lib - - USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} + + USRINCFLAGS = -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_PROB} -I${INC_BOOST} USRLDFLAGS = -L${LIB_PROB} -L${LIB_NEWMAT} -L${LIB_ZLIB} diff -ur fsl.orig/src/mist-clean/Makefile fsl/src/mist-clean/Makefile --- fsl.orig/src/mist-clean/Makefile 2017-04-20 14:17:54.000000000 +0200 +++ fsl/src/mist-clean/Makefile 2017-05-24 09:38:05.913369598 +0200 @@ -2,15 +2,15 @@ - + NLOPT_INC = ${FSLEXTINC} NLOPT_LIB = ${FSLEXTLIB} -SQLITE_INC = ${FSLEXTINC}/libsqlite -SQLITE_LIB = ${FSLEXTLIB} +SQLITE_INC = ${EBROOTSQLITE}/include +SQLITE_LIB = ${EBROOTSQLITE}/lib - + PROJNAME = mist - + XFILES = mist/mist SCRIPTS = bin/mist_1_train bin/mist_2_fit bin/mist_FA_reg bin/mist_display bin/mist_mesh_utils - + -USRCXXFLAGS = -std=c++11 # EB: needed to correctly (dynamically) link with the Boost log libs +USRCXXFLAGS = -std=c++11 -DBOOST_LOG_DYN_LINK USRINCFLAGS = -I${FSLDIR}/include/newimage -I${INC_NEWMAT} -I${INC_ZLIB} -I${INC_GDC} -I${INC_GD} -I${SQLITE_INC} -I${NLOPT_INC} -I${VTKDIR_INC} -Icommon USRLDFLAGS = -L${LIB_NEWMAT} -L${LIB_ZLIB} -L${LIB_BOOST} -L${LIB_GDC} -L${LIB_GD} -L${NLOPT_LIB} -L${VTKDIR_LIB} - + -- GitLab From a80f9ff2b305ad2c9082e07718565629a00fe7eb Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 24 May 2017 10:55:41 +0200 Subject: [PATCH 1154/1311] Fix VTK patch in makefile --- easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index c9f8391467..cd68478001 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -90,9 +90,9 @@ diff -ur fsl.orig/config/linux_64-gcc4.8/externallibs.mk fsl/config/linux_64-gcc +INC_FFTW3 = ${EBVARFFTW_INC_DIR} + + # VTK library -+VTKDIR_INC = ${EBROOTVTK}/include/vtk-`echo $EBVERSIONVTK | cut -f1-2 -d.` ++VTKDIR_INC = ${EBROOTVTK}/include/vtk-`echo ${EBVERSIONVTK} | cut -f1-2 -d.` +VTKDIR_LIB = ${EBROOTVTK}/lib -+VTKSUFFIX = -`echo $EBVERSIONVTK | cut -f1-2 -d.` ++VTKSUFFIX = -`echo ${EBVERSIONVTK} | cut -f1-2 -d.` diff -ur fsl.orig/config/linux_64-gcc4.8/systemvars.mk fsl/config/linux_64-gcc4.8/systemvars.mk --- fsl.orig/config/linux_64-gcc4.8/systemvars.mk 2017-02-18 13:20:05.000000000 +0100 +++ fsl/config/linux_64-gcc4.8/systemvars.mk 2017-05-24 09:38:05.912369589 +0200 -- GitLab From 38913dfcb6952029cc0846799fcc48c8cbfc4f6e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 24 May 2017 11:24:27 +0200 Subject: [PATCH 1155/1311] {bio}[intel/2017a] VariantMetaCaller 1.0 --- .../VariantMetaCaller-1.0-intel-2017a.eb | 24 +++++++++++++++ ...VariantMetaCaller-1.0_fix-hardcoding.patch | 29 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb create mode 100644 easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch diff --git a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb new file mode 100644 index 0000000000..122e215269 --- /dev/null +++ b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb @@ -0,0 +1,24 @@ +easyblock = 'MakeCp' + +name = 'VariantMetaCaller' +version = '1.0' + +homepage = 'http://bioinformatics.mit.bme.hu/VariantMetaCaller/' +description = """VariantMetaCaller automatically integrates variant calling pipelines into a better performing + overall model that also predicts accurate variant probabilities.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://bioinformatics.mit.bme.hu/VariantMetaCaller/'] +sources = ['%(name)s_v%(version)s.tar.gz'] + +patches = ['VariantMetaCaller-%(version)s_fix-hardcoding.patch'] + +files_to_copy = [(['VariantMetaCaller'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/VariantMetaCaller'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch new file mode 100644 index 0000000000..3d14a49394 --- /dev/null +++ b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch @@ -0,0 +1,29 @@ +fix hardcoding of g++ and optimisation flags +fix minor compilation issue "no operator "<<" matches these operands" +author: Kenneth Hoste (HPC-UGent) +diff --git a/VariantMetaCaller_v1.0/makefile.orig b/VariantMetaCaller_v1.0/makefile +index 78ff65d..c49027d 100644 +--- a/VariantMetaCaller_v1.0/makefile.orig ++++ b/VariantMetaCaller_v1.0/makefile +@@ -37,7 +37,7 @@ all: VariantMetaCaller + VariantMetaCaller: $(OBJS) $(USER_OBJS) + @echo 'Building target: $@' + @echo 'Invoking: GCC C++ Linker' +- g++ -o"VariantMetaCaller" $(OBJS) $(USER_OBJS) $(LIBS) -fopenmp ++ ${CXX} ${CXXFLAGS} -o"VariantMetaCaller" $(OBJS) $(USER_OBJS) $(LIBS) -fopenmp + @echo 'Finished building target: $@' + @echo ' ' + +diff --git a/VariantMetaCaller_v1.0/subdir.mk.orig b/VariantMetaCaller_v1.0/subdir.mk +index 530defe..110d8f3 100644 +--- a/VariantMetaCaller_v1.0/subdir.mk.orig ++++ b/VariantMetaCaller_v1.0/subdir.mk +@@ -35,7 +35,7 @@ genotypePrioritizer.d + ./%.o: %.cpp + @echo 'Building file: $<' + @echo 'Invoking: GCC C++ Compiler' +- g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -fopenmp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" ++ ${CXX} ${CXXFLAGS} -Wall -c -fmessage-length=0 -std=c++11 -fopenmp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + -- GitLab From a1967a73483c9123654218c749ce232395927b77 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 24 May 2017 11:43:18 +0200 Subject: [PATCH 1156/1311] fix remarks --- .../v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb | 1 + .../VariantMetaCaller-1.0_fix-hardcoding.patch | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb index 122e215269..d77e58e531 100644 --- a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb +++ b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0-intel-2017a.eb @@ -8,6 +8,7 @@ description = """VariantMetaCaller automatically integrates variant calling pipe overall model that also predicts accurate variant probabilities.""" toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'cstd': 'c++11', 'openmp': True} source_urls = ['http://bioinformatics.mit.bme.hu/VariantMetaCaller/'] sources = ['%(name)s_v%(version)s.tar.gz'] diff --git a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch index 3d14a49394..efa19b4c6e 100644 --- a/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch +++ b/easybuild/easyconfigs/v/VariantMetaCaller/VariantMetaCaller-1.0_fix-hardcoding.patch @@ -10,7 +10,7 @@ index 78ff65d..c49027d 100644 @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' - g++ -o"VariantMetaCaller" $(OBJS) $(USER_OBJS) $(LIBS) -fopenmp -+ ${CXX} ${CXXFLAGS} -o"VariantMetaCaller" $(OBJS) $(USER_OBJS) $(LIBS) -fopenmp ++ ${CXX} ${CXXFLAGS} ${LDFLAGS} -o"VariantMetaCaller" $(OBJS) $(USER_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' @@ -23,7 +23,7 @@ index 530defe..110d8f3 100644 @echo 'Building file: $<' @echo 'Invoking: GCC C++ Compiler' - g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -fopenmp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" -+ ${CXX} ${CXXFLAGS} -Wall -c -fmessage-length=0 -std=c++11 -fopenmp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" ++ ${CXX} ${CXXFLAGS} -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" @echo 'Finished building: $<' @echo ' ' -- GitLab From 0bcd09ed9c394849f9c947485b5a4e914570681d Mon Sep 17 00:00:00 2001 From: Ward Poelmans Date: Wed, 24 May 2017 14:52:31 +0200 Subject: [PATCH 1157/1311] Small fixes --- .../easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch | 9 ++++++--- .../v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch index cd68478001..8801e205ce 100644 --- a/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch +++ b/easybuild/easyconfigs/f/FSL/FSL-5.0.10_makefile_fixes.patch @@ -147,7 +147,8 @@ diff -ur fsl.orig/etc/fslconf/fsl.csh fsl/etc/fslconf/fsl.csh -setenv FSLTCLSH $FSLDIR/bin/fsltclsh +setenv FSLTCLSH tclsh - setenv FSLWISH $FSLDIR/bin/fslwish +-setenv FSLWISH $FSLDIR/bin/fslwish ++setenv FSLWISH wish # The following variables are used for running code in parallel across diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh @@ -159,7 +160,8 @@ diff -ur fsl.orig/etc/fslconf/fsl-devel.sh fsl/etc/fslconf/fsl-devel.sh -FSLTCLSH=$FSLDIR/bin/fsltclsh +FSLTCLSH=tclsh - FSLWISH=$FSLDIR/bin/fslwish +-FSLWISH=$FSLDIR/bin/fslwish ++FSLWISH=wish export FSLTCLSH FSLWISH diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh @@ -171,7 +173,8 @@ diff -ur fsl.orig/etc/fslconf/fsl.sh fsl/etc/fslconf/fsl.sh -FSLTCLSH=$FSLDIR/bin/fsltclsh +FSLTCLSH=tclsh - FSLWISH=$FSLDIR/bin/fslwish +-FSLWISH=$FSLDIR/bin/fslwish ++FSLWISH=wish export FSLTCLSH FSLWISH diff -ur fsl.orig/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc fsl/extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc diff --git a/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb index 79963c3515..e0221778a4 100644 --- a/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/v/VTK/VTK-7.1.1-intel-2017a-Python-2.7.13.eb @@ -34,6 +34,7 @@ sources = [ builddependencies = [('CMake', '3.8.0')] dependencies = [ + ('HDF5', '1.8.18'), ('Python', '2.7.13'), ('libGLU', '9.0.0'), ('X11', '20170314'), -- GitLab From f53b549a86ae0612078bbcc138603986d7a57444 Mon Sep 17 00:00:00 2001 From: Daniel Kinnamon Date: Fri, 26 May 2017 12:11:34 -0400 Subject: [PATCH 1158/1311] adding easyconfigs: Aspera-CLI-3.7.2.354.010c3b8.eb --- .../Aspera-CLI-3.7.2.354.010c3b8.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb diff --git a/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb b/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb new file mode 100644 index 0000000000..44c70d7c08 --- /dev/null +++ b/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb @@ -0,0 +1,40 @@ +# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild +# Author: Daniel D. Kinnamon +# Division of Human Genetics +# The Ohio State University Wexner Medical Center + +easyblock = 'Tarball' + +name = 'Aspera-CLI' +version = '3.7.2' +versionsuffix = '.354.010c3b8' + +homepage = 'http://asperasoft.com' +docurls = ['http://downloads.asperasoft.com/en/documentation/62'] +description = """IBM Aspera Command-Line Interface (the Aspera CLI) is +a collection of Aspera tools for performing high-speed, secure data +transfers from the command line. The Aspera CLI is for users and +organizations who want to automate their transfer workflows.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +# Aspera CLI install script includes tarball inline and installs to a +# fixed location. Need to include custom extract command to pull +# tarball out of install script and pipe to tar. %s in the extraction +# command will be replaced by the source filename. +sources = [ + ('%(namelower)s-%(version)s%(versionsuffix)s-linux-64-release.sh', + "sed '1,/^__ARCHIVE_FOLLOWS__$/d' %s |" + + 'tar -xzpo --strip-components 1 -f -') +] +source_urls = ['http://download.asperasoft.com/download/sw/cli/%(version)s'] +checksums = ['02787ca46814fb9ae2de5c706461367e'] + +sanity_check_paths = { + 'files': ['product-info.mf'], + 'dirs': ['bin', 'certs', 'docs', 'etc', 'share/man'] +} + +sanity_check_commands = ['ascp -h', 'man ascp -P cat'] + +moduleclass = 'tools' -- GitLab From aa87ae52227decd252fb4ed609cda6d89e81fee4 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Mon, 29 May 2017 11:32:26 +1200 Subject: [PATCH 1159/1311] Add CDK version suffix --- ...GI-16.1-GCC-4.9.2-2.25.eb => PGI-16.1-CDK-GCC-4.9.2-2.25.eb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/p/PGI/{PGI-16.1-GCC-4.9.2-2.25.eb => PGI-16.1-CDK-GCC-4.9.2-2.25.eb} (91%) diff --git a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb b/easybuild/easyconfigs/p/PGI/PGI-16.1-CDK-GCC-4.9.2-2.25.eb similarity index 91% rename from easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb rename to easybuild/easyconfigs/p/PGI/PGI-16.1-CDK-GCC-4.9.2-2.25.eb index 5972e15b28..d25dc435ae 100644 --- a/easybuild/easyconfigs/p/PGI/PGI-16.1-GCC-4.9.2-2.25.eb +++ b/easybuild/easyconfigs/p/PGI/PGI-16.1-CDK-GCC-4.9.2-2.25.eb @@ -11,7 +11,7 @@ checksums = ['442c044b9690a84b6600cd6919480bcb'] gccver = '4.9.2' binutilsver = '2.25' -versionsuffix = '-GCC-%s-%s' % (gccver, binutilsver) +versionsuffix = '-CDK-GCC-%s-%s' % (gccver, binutilsver) dependencies = [ ('GCCcore', gccver), -- GitLab From 54f63e63bedcce71d3698b0ec7548627573358a7 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Mon, 29 May 2017 12:30:46 +0200 Subject: [PATCH 1160/1311] {bio}[intel/2017a] Bio-SamTools 1.43 w/Perl-5.24.1 (REVIEW) --- ...o-SamTools-1.43-intel-2017a-Perl-5.24.1.eb | 27 ++++++++++ .../b/Bio-SamTools/Bio-SamTools-1.43.patch | 54 +++++++++++++++++++ .../s/SAMtools/SAMtools-0.1.17-intel-2017a.eb | 21 ++++++++ 3 files changed, 102 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb create mode 100644 easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch create mode 100644 easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..f1f376b07b --- /dev/null +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,27 @@ +easyblock = 'PerlModule' + +name = 'Bio-SamTools' +version = '1.43' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://search.cpan.org/~lds/Bio-SamTools/' +description = """This is a Perl interface to the SAMtools sequence alignment interface.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['http://search.cpan.org/CPAN/authors/id/L/LD/LDS'] +sources = [SOURCE_TAR_GZ] +#sources = [(SOURCE_TAR_GZ, 'tar -xzf %s && chmod -R +w .')] + +patches = ['%(name)s-%(version)s.patch'] + +dependencies = [ + ('Perl', '5.24.1'), + ('BioPerl', '1.7.1', versionsuffix), + ('SAMtools', '0.1.17'), +] + +options = {'modulename': 'Bio::DB::Sam'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch new file mode 100644 index 0000000000..d1342c786b --- /dev/null +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch @@ -0,0 +1,54 @@ +--- Bio-SamTools-1.43/Build.PL.orig 2016-02-12 20:31:32.000000000 +0100 ++++ Bio-SamTools-1.43/Build.PL 2017-05-26 13:22:23.318323680 +0200 +@@ -75,7 +75,7 @@ + $sam_include = $samtools + if -e "$samtools/$HeaderFile"; + $sam_include = "$samtools/include" +- if -e "$samtools/include/$HeaderFile"; ++ if -e "$samtools/include/bam/$HeaderFile"; + $sam_lib = $samtools + if -e "$samtools/$LibFile"; + $sam_lib = "$samtools/lib" +@@ -164,7 +164,7 @@ + } + + sub _samtools { +- $ENV{SAMTOOLS} || ++ $ENV{EBROOTSAMTOOLS} || + ( can_load(modules => {'Alien::SamTools' => undef, 'File::ShareDir' => undef}) && + File::ShareDir::dist_dir('Alien-SamTools')); + } +--- Bio-SamTools-1.43/c_bin/makefile.orig 2016-02-12 20:31:32.000000000 +0100 ++++ Bio-SamTools-1.43/c_bin/makefile 2017-05-26 13:44:43.770545813 +0200 +@@ -1,5 +1,5 @@ +-CC= gcc +-CFLAGS= -g -Wall -O2 -fPIC ++CC?= gcc ++CFLAGS?= -g -Wall -O2 -fPIC + DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_USE_KNETFILE -D_CURSES_LIB=1 + INCLUDES= + LIBPATH= +--- Bio-SamTools-1.43/c_bin/bam2bedgraph.c.orig 2016-02-12 20:31:32.000000000 +0100 ++++ Bio-SamTools-1.43/c_bin/bam2bedgraph.c 2017-05-26 13:29:28.041584111 +0200 +@@ -1,5 +1,5 @@ + #include +-#include "sam.h" ++#include "bam/sam.h" + + typedef struct { + uint32_t ltid; +--- Bio-SamTools-1.43/lib/Bio/DB/Sam.xs.orig 2016-02-12 20:31:32.000000000 +0100 ++++ Bio-SamTools-1.43/lib/Bio/DB/Sam.xs 2017-05-29 11:56:51.145855185 +0200 +@@ -25,9 +25,9 @@ + + #include + #include +-#include "bam.h" +-#include "khash.h" +-#include "faidx.h" ++#include "bam/bam.h" ++#include "bam/khash.h" ++#include "bam/faidx.h" + + /* stolen from bam_aux.c */ + #define MAX_REGION 1<<29 diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb new file mode 100644 index 0000000000..0424b6875f --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb @@ -0,0 +1,21 @@ +name = 'SAMtools' +version = '0.1.17' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://github.com/samtools/%(namelower)s/archive/%(version)s'] + +#patches = ['SAMtools-%(version)s_Makefile-ncurses.patch'] + +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' -- GitLab From 19a531697a174af059efe0d0e26cccc113a6f091 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 29 May 2017 14:27:06 +0200 Subject: [PATCH 1161/1311] add location to DotLib.pm to $PERL5LIB for SSPACE Basic --- .../SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb index 9d51ecf299..d196a375f0 100644 --- a/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/s/SSPACE_Basic/SSPACE_Basic-2.1.1-intel-2017a-Perl-5.24.1.eb @@ -18,10 +18,13 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['README', 'SSPACE_Basic.pl'], + 'files': ['dotlib/DotLib.pm', 'README', 'SSPACE_Basic.pl'], 'dirs': ['bin', 'tools'], } -modextrapaths = {'PATH': ''} +modextrapaths = { + 'PATH': '', + 'PERL5LIB': 'dotlib', +} moduleclass = 'bio' -- GitLab From c0d8aac7fe9ebda34b5d9a20aed248b8497a0560 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 29 May 2017 19:17:31 +0200 Subject: [PATCH 1162/1311] enable inclusion of version symbol by using --enable-ld-version-script configure option for LibTIFF --- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.4.10.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.7.20.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-ictce-5.3.0.eb | 4 +++- .../easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014.06.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014b.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-foss-2015a.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-goolf-1.7.20.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-intel-2015a.eb | 2 ++ .../easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-foss-2015a.eb | 4 +++- .../easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-intel-2015a.eb | 4 +++- easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2015a.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016a.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016b.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016a.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016b.eb | 2 ++ easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb | 2 ++ 18 files changed, 45 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.4.10.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.4.10.eb index 9875af8f63..b741841310 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.4.10.eb @@ -18,13 +18,15 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'goolf', 'version': '1.4.10'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'goolf', 'version': '1.4.10'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.7.20.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.7.20.eb index 46a3c3ee49..1496187e7b 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-goolf-1.7.20.eb @@ -6,13 +6,15 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'goolf', 'version': '1.7.20'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'goolf', 'version': '1.7.20'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-ictce-5.3.0.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-ictce-5.3.0.eb index 87e3b72f57..3b637dfd68 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-ictce-5.3.0.eb @@ -18,13 +18,15 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'ictce', 'version': '5.3.0'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'ictce', 'version': '5.3.0'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014.06.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014.06.eb index e29ed51d54..2d0643c0a8 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014.06.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014.06.eb @@ -17,13 +17,15 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'intel', 'version': '2014.06'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'intel', 'version': '2014.06'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014b.eb index a06a26e3be..42a3e46a06 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014b.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2014b.eb @@ -17,13 +17,15 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'intel', 'version': '2014b'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'intel', 'version': '2014b'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb index 36759b619b..a080abfe8e 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015a.eb @@ -17,6 +17,8 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'intel', 'version': '2015a'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', @@ -24,7 +26,7 @@ source_urls = [ sources = ['tiff-%(version)s.tar.gz'] checksums = ['051c1068e6a0627f461948c365290410'] -toolchain = {'name': 'intel', 'version': '2015a'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb index 245af77e27..769d5c3bf4 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.3-intel-2015b.eb @@ -17,6 +17,8 @@ version = '4.0.3' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +configopts = " --enable-ld-version-script " + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-foss-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-foss-2015a.eb index 70578c5f23..9fdf349e0c 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-foss-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-foss-2015a.eb @@ -26,6 +26,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-goolf-1.7.20.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-goolf-1.7.20.eb index 8858538d5a..a8769ecc26 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-goolf-1.7.20.eb @@ -6,13 +6,15 @@ version = '4.0.4' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'goolf', 'version': '1.7.20'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'goolf', 'version': '1.7.20'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-intel-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-intel-2015a.eb index 6b0d237d17..caf97944ef 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-intel-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4-intel-2015a.eb @@ -26,6 +26,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-foss-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-foss-2015a.eb index accbb2bb0a..a7ec21003e 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-foss-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-foss-2015a.eb @@ -19,13 +19,15 @@ version = '4.0.4beta' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'foss', 'version': '2015a'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'foss', 'version': '2015a'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-intel-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-intel-2015a.eb index a1149ab376..2ebd87d4b6 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-intel-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.4beta-intel-2015a.eb @@ -18,13 +18,15 @@ version = '4.0.4beta' homepage = 'http://www.remotesensing.org/libtiff/' description = "tiff: Library and tools for reading and writing TIFF data files" +toolchain = {'name': 'intel', 'version': '2015a'} + source_urls = [ 'http://download.osgeo.org/libtiff/', 'ftp://ftp.remotesensing.org/pub/libtiff/', ] sources = ['tiff-%(version)s.tar.gz'] -toolchain = {'name': 'intel', 'version': '2015a'} +configopts = " --enable-ld-version-script " sanity_check_paths = { 'files': ['bin/tiffinfo'], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2015a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2015a.eb index 68f9ad3dc9..259a9d8bc6 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2015a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2015a.eb @@ -26,6 +26,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016a.eb index d7aa3b2df4..f513557a05 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016a.eb @@ -25,6 +25,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016b.eb index 07fa7682ed..a7365c221f 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016b.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-foss-2016b.eb @@ -25,6 +25,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016a.eb index ed490e66de..b666f47dc2 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016a.eb @@ -25,6 +25,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016b.eb index d8f291e4e8..9281e4ddc9 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016b.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.6-intel-2016b.eb @@ -25,6 +25,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb index 9087c14aa4..073c1b3d60 100644 --- a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-intel-2017a.eb @@ -25,6 +25,8 @@ source_urls = [ ] sources = ['tiff-%(version)s.tar.gz'] +configopts = " --enable-ld-version-script " + sanity_check_paths = { 'files': ['bin/tiffinfo'], 'dirs': [], -- GitLab From d143cc508767eff11a422fb8ed82940694e53d1d Mon Sep 17 00:00:00 2001 From: Daniel Kinnamon Date: Mon, 29 May 2017 15:44:44 -0400 Subject: [PATCH 1163/1311] Fixed multi-line command and sanity check error with man 2.6.3 --- .../easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb b/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb index 44c70d7c08..c5b603114d 100644 --- a/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb +++ b/easybuild/easyconfigs/a/Aspera-CLI/Aspera-CLI-3.7.2.354.010c3b8.eb @@ -24,8 +24,7 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # command will be replaced by the source filename. sources = [ ('%(namelower)s-%(version)s%(versionsuffix)s-linux-64-release.sh', - "sed '1,/^__ARCHIVE_FOLLOWS__$/d' %s |" + - 'tar -xzpo --strip-components 1 -f -') + "sed '1,/^__ARCHIVE_FOLLOWS__$/d' %s | tar -xzpo --strip-components 1 -f -") ] source_urls = ['http://download.asperasoft.com/download/sw/cli/%(version)s'] checksums = ['02787ca46814fb9ae2de5c706461367e'] @@ -35,6 +34,6 @@ sanity_check_paths = { 'dirs': ['bin', 'certs', 'docs', 'etc', 'share/man'] } -sanity_check_commands = ['ascp -h', 'man ascp -P cat'] +sanity_check_commands = ['ascp -h', 'man ascp'] moduleclass = 'tools' -- GitLab From 482f3b8a3b874e208b67b90758ff4c1c8943a37d Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 30 May 2017 06:42:30 +0100 Subject: [PATCH 1164/1311] adding easyconfigs: R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb --- ...le-Bioconductor-3.5-intel-2017a-R-3.4.0.eb | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb index 80580237a7..9125415482 100644 --- a/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb +++ b/easybuild/easyconfigs/r/R-bundle-Bioconductor/R-bundle-Bioconductor-3.5-intel-2017a-R-3.4.0.eb @@ -37,27 +37,27 @@ exts_filter = ("R -q --no-save", "library(%(ext_name)s)") # CRAN packages on which these Bioconductor packages depend are available in R module on which this depends # !! order of packages is important !! -# packages updated on May 11th 2017 +# packages updated on May 28th 2017 exts_list = [ ('BiocGenerics', '0.22.0', bioconductor_options), ('Biobase', '2.36.2', bioconductor_options), - ('S4Vectors', '0.14.0', bioconductor_options), - ('IRanges', '2.10.0', bioconductor_options), + ('S4Vectors', '0.14.2', bioconductor_options), + ('IRanges', '2.10.2', bioconductor_options), ('GenomeInfoDbData', '0.99.0', bioconductor_options), ('GenomeInfoDb', '1.12.0', bioconductor_options), ('AnnotationDbi', '1.38.0', bioconductor_options), ('zlibbioc', '1.22.0', bioconductor_options), ('XVector', '0.16.0', bioconductor_options), ('Biostrings', '2.44.0', bioconductor_options), - ('GenomicRanges', '1.28.1', bioconductor_options), + ('GenomicRanges', '1.28.3', bioconductor_options), ('BiocParallel', '1.10.1', bioconductor_options), ('Rsamtools', '1.28.0', bioconductor_options), ('lambda.r', '1.1.9', ext_options), ('futile.options', '1.0.0', ext_options), ('futile.logger', '1.4.3', ext_options), - ('DelayedArray', '0.2.2', bioconductor_options), + ('DelayedArray', '0.2.4', bioconductor_options), ('SummarizedExperiment', '1.6.1', bioconductor_options), - ('GenomicAlignments', '1.12.0', bioconductor_options), + ('GenomicAlignments', '1.12.1', bioconductor_options), ('ShortRead', '1.34.0', bioconductor_options), ('graph', '1.54.0', bioconductor_options), ('affyio', '1.46.0', bioconductor_options), @@ -83,7 +83,7 @@ exts_list = [ ('DEGseq', '1.30.0', bioconductor_options), ('hgu133plus2.db', '3.2.3', bioconductor_options), ('illuminaio', '0.18.0', bioconductor_options), - ('rtracklayer', '1.36.0', bioconductor_options), + ('rtracklayer', '1.36.3', bioconductor_options), ('biomaRt', '2.32.0', bioconductor_options), ('GenomicFeatures', '1.28.0', bioconductor_options), ('bumphunter', '1.16.0', bioconductor_options), @@ -97,15 +97,15 @@ exts_list = [ ('annotate', '1.54.0', bioconductor_options), ('GSEABase', '1.38.0', bioconductor_options), ('genefilter', '1.58.1', bioconductor_options), - ('Category', '2.38.0', bioconductor_options), + ('Category', '2.42.0', bioconductor_options), ('GOstats', '2.42.0', bioconductor_options), ('BSgenome', '1.44.0', bioconductor_options), - ('VariantAnnotation', '1.22.0', bioconductor_options), + ('VariantAnnotation', '1.22.1', bioconductor_options), ('interactiveDisplayBase', '1.14.0', bioconductor_options), ('AnnotationHub', '2.8.1', bioconductor_options), ('AnnotationFilter', '1.0.0', bioconductor_options), ('ProtGenerics', '1.8.0', bioconductor_options), - ('ensembldb', '2.0.1', bioconductor_options), + ('ensembldb', '2.0.2', bioconductor_options), ('biovizBase', '1.24.0', bioconductor_options), ('OrganismDbi', '1.18.0', bioconductor_options), ('ggbio', '1.24.0', bioconductor_options), @@ -139,7 +139,7 @@ exts_list = [ ('cummeRbund', '2.18.0', bioconductor_options), ('GenomicFiles', '1.12.0', bioconductor_options), ('derfinderHelper', '1.10.0', bioconductor_options), - ('derfinder', '1.10.3', bioconductor_options), + ('derfinder', '1.10.4', bioconductor_options), ('polyester', '1.12.0', bioconductor_options), ('Rsubread', '1.26.0', bioconductor_options), ('pcaMethods', '1.68.0', bioconductor_options), -- GitLab From 3f0ada5a6a3e896ab3d5f024164f312bd567fd82 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 30 May 2017 09:00:31 +0200 Subject: [PATCH 1165/1311] comment added to patch, commendted line deleted, sanity check added --- .../Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb | 6 +++++- .../easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb index f1f376b07b..0ba564434a 100644 --- a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb @@ -12,7 +12,6 @@ toolchainopts = {'pic': True} source_urls = ['http://search.cpan.org/CPAN/authors/id/L/LD/LDS'] sources = [SOURCE_TAR_GZ] -#sources = [(SOURCE_TAR_GZ, 'tar -xzf %s && chmod -R +w .')] patches = ['%(name)s-%(version)s.patch'] @@ -24,4 +23,9 @@ dependencies = [ options = {'modulename': 'Bio::DB::Sam'} +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['bam2bedgraph', 'bamToGBrowse.pl', 'chrom_sizes.pl', 'genomeCoverageBed.pl']], + 'dirs': ['lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/%s' % x for x in ['auto', 'Bio']], +} + moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch index d1342c786b..836cc7a688 100644 --- a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch @@ -1,3 +1,5 @@ +# Take EB provided SAMtools, and use thge correct include path. Pick EB provided CC and CFLAGS as well +# May 29th 2017 by B. Hajgato (Free University Brussles - VUB) --- Bio-SamTools-1.43/Build.PL.orig 2016-02-12 20:31:32.000000000 +0100 +++ Bio-SamTools-1.43/Build.PL 2017-05-26 13:22:23.318323680 +0200 @@ -75,7 +75,7 @@ -- GitLab From 2488a83fd7a9abff45eb9fc3646c3ffdd8f5993c Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 30 May 2017 09:02:13 +0200 Subject: [PATCH 1166/1311] commendted line deleted --- easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb index 0424b6875f..53a5edea87 100644 --- a/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-0.1.17-intel-2017a.eb @@ -11,8 +11,6 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = ['https://github.com/samtools/%(namelower)s/archive/%(version)s'] -#patches = ['SAMtools-%(version)s_Makefile-ncurses.patch'] - dependencies = [ ('ncurses', '6.0'), ('zlib', '1.2.11'), -- GitLab From 6b7fff6124dd480089a2e2c619ea05622bea40af Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 30 May 2017 09:05:27 +0200 Subject: [PATCH 1167/1311] Typo --- easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch index 836cc7a688..22981ce8a4 100644 --- a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43.patch @@ -1,4 +1,4 @@ -# Take EB provided SAMtools, and use thge correct include path. Pick EB provided CC and CFLAGS as well +# Take EB provided SAMtools, and use the correct include path. Pick EB provided CC and CFLAGS as well. # May 29th 2017 by B. Hajgato (Free University Brussles - VUB) --- Bio-SamTools-1.43/Build.PL.orig 2016-02-12 20:31:32.000000000 +0100 +++ Bio-SamTools-1.43/Build.PL 2017-05-26 13:22:23.318323680 +0200 -- GitLab From f74a8b87473783613e05ea29b2e7a3727f4d3c0f Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Tue, 30 May 2017 10:01:52 +0200 Subject: [PATCH 1168/1311] %% --- .../b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb index 0ba564434a..870337a366 100644 --- a/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/b/Bio-SamTools/Bio-SamTools-1.43-intel-2017a-Perl-5.24.1.eb @@ -25,7 +25,7 @@ options = {'modulename': 'Bio::DB::Sam'} sanity_check_paths = { 'files': ['bin/%s' % x for x in ['bam2bedgraph', 'bamToGBrowse.pl', 'chrom_sizes.pl', 'genomeCoverageBed.pl']], - 'dirs': ['lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/%s' % x for x in ['auto', 'Bio']], + 'dirs': ['lib/perl5/site_perl/%%(perlver)s/x86_64-linux-thread-multi/%s' % x for x in ['auto', 'Bio']], } moduleclass = 'bio' -- GitLab From 97a13bcb686c35c4aa438e0c8025f7e15e933f37 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 30 May 2017 14:53:01 +0200 Subject: [PATCH 1169/1311] adding easyconfigs: GDAL-2.1.3-intel-2017a-Python-3.6.1.eb --- .../GDAL-2.1.3-intel-2017a-Python-3.6.1.eb | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-3.6.1.eb diff --git a/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-3.6.1.eb b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-3.6.1.eb new file mode 100644 index 0000000000..cfd1d42ed3 --- /dev/null +++ b/easybuild/easyconfigs/g/GDAL/GDAL-2.1.3-intel-2017a-Python-3.6.1.eb @@ -0,0 +1,48 @@ +easyblock = 'ConfigureMake' + +name = 'GDAL' +version = '2.1.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.gdal.org/' +description = """GDAL is a translator library for raster geospatial data formats that is released under an X/MIT style + Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model + to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for + data translation and processing.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['http://download.osgeo.org/gdal/%(version)s/'] +sources = [SOURCELOWER_TAR_XZ] +patches = ['GDAL-%(version)s_fix-uchar-definition.patch'] + +dependencies = [ + ('Python', '3.6.1'), + ('netCDF', '4.4.1.1'), + ('expat', '2.2.0'), + ('GEOS', '3.6.1', versionsuffix), + ('SQLite', '3.17.0'), + ('libxml2', '2.9.4'), + ('libpng', '1.6.29'), + ('libjpeg-turbo', '1.5.1'), + ('JasPer', '2.0.12'), + ('LibTIFF', '4.0.7'), + ('zlib', '1.2.11'), + ('cURL', '7.53.1'), + ('PCRE', '8.40'), +] + +configopts = '--with-expat=$EBROOTEXPAT --with-libz=$EBROOTLIBZ --with-hdf5=$EBROOTHDF5 --with-netcdf=$EBROOTNETCDF' +configopts += ' --with-xml2=$EBROOTLIBXML2 --with-geos=$EBROOTGEOS/bin/geos-config --with-jpeg=$EBROOTLIBJPEGMINTURBO' +configopts += ' --with-png=$EBROOTLIBPNG --with-sqlite3=$EBROOTSQLITE --with-jasper=$EBROOTJASPER' +configopts += ' --with-libtiff=$EBROOTLIBTIFF --with-pcre=$EBROOTPCRE --with-python=$EBROOTPYTHON/bin/python' + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libgdal.a', 'lib/libgdal.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include', 'lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'data' -- GitLab From 2751fbdc6cdc809fe36a7f31d5e266939ff490cd Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 31 May 2017 15:42:23 +1200 Subject: [PATCH 1170/1311] A 2017a version of the gimkl toolchain --- easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb diff --git a/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb new file mode 100644 index 0000000000..553786dd35 --- /dev/null +++ b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb @@ -0,0 +1,19 @@ +easyblock = "Toolchain" + +name = 'gimkl' +version = '2017a' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain with Intel MPI and MKL""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +comp = ('GCC', '5.4.0') + +dependencies = [ + comp, + ('impi', '2017.1.132', '', comp), + ('imkl', '2017.1.132', '', ('gimpi', version)), +] + +moduleclass = 'toolchain' -- GitLab From 4971ea3b19ffb8af7a0b2e0ebf97fc357cf2c053 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 31 May 2017 15:47:40 +1200 Subject: [PATCH 1171/1311] EasyConfig for CMake 3.6.1 with no particular toolchain --- easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb new file mode 100644 index 0000000000..0e73857b1d --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.6.1' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1' + +# Don't depend on anything, since we will use this to build other software +# which might want different versions of the same dependency, eg: ncurses +dependencies = [] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From 53b4a44a6c1a9ffab69de2ceb4540cf012836042 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 31 May 2017 06:54:12 +0100 Subject: [PATCH 1172/1311] adding easyconfigs: buildenv-default-intel-2017a.eb --- .../b/buildenv/buildenv-default-intel-2017a.eb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2017a.eb b/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2017a.eb new file mode 100755 index 0000000000..ba8c60067e --- /dev/null +++ b/easybuild/easyconfigs/b/buildenv/buildenv-default-intel-2017a.eb @@ -0,0 +1,13 @@ +easyblock = 'BuildEnv' + +name = 'buildenv' +version = 'default' + +homepage = 'None' +description = """This module sets a group of environment variables for compilers, linkers, maths libraries, etc., that + you can use to easily transition between toolchains when building your software. To query the variables being set + please use: module show """ + +toolchain = {'name': 'intel', 'version': '2017a'} + +moduleclass = 'devel' -- GitLab From 073bc69b50039a97d6873a31137f238e1a9f4bc5 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 31 May 2017 15:40:09 +0930 Subject: [PATCH 1173/1311] CNVnator added --- easybuild/easyconfigs/TEMPLATE.eb | 31 -------------- .../c/CNVnator/CNVnator-0.3.3-foss-2016b.eb | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 31 deletions(-) delete mode 100644 easybuild/easyconfigs/TEMPLATE.eb create mode 100644 easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb diff --git a/easybuild/easyconfigs/TEMPLATE.eb b/easybuild/easyconfigs/TEMPLATE.eb deleted file mode 100644 index 69759ec8da..0000000000 --- a/easybuild/easyconfigs/TEMPLATE.eb +++ /dev/null @@ -1,31 +0,0 @@ -# Note: -# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild -# It was auto-generated based on a template easyconfig, so it should be used with care. -easyblock = 'ConfigureMake' - -name = 'NAME' -version = 'VERSION' - -homepage = 'http://www.example.com' -description = """TEMPLATE DESCRIPTION""" - -# toolchain name should be 'TEMPLATE' if this is a template, so EasyBuild knows and is willing to use it as a template -toolchain = {'name': 'TEMPLATE', 'version': 'TK_VERSION'} -toolchainopts = {} # toolchain options, e.g. opt, pic, usempi, optarch, ... - -# For sources line to work correctly with --try-software-version, you MUST employ %s OR use a construct like SOURCE_TAR_GZ -sources = ['%(name)s-%(version)s.tar.gz'] -source_urls = ['http://www.example.com'] - -patches = [] - -dependencies = [] - -# The sanity test MUST be tuned before going production and submitting your contribution to upstream git repositories -sanity_check_paths = { - 'files': [], - 'dirs': ["."] -} - -# You SHOULD change the following line; Kindly consult other easyconfigs for possible options -moduleclass = 'base' diff --git a/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb new file mode 100644 index 0000000000..702088ee73 --- /dev/null +++ b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb @@ -0,0 +1,40 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: Copyright 2014-2017 adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exequiel Sepulveda +# License:: CCPL +# +# Notes:: +## + +easyblock = 'MakeCp' + +name = 'CNVnator' +version = '0.3.3' + +homepage = 'https://github.com/abyzovlab/CNVnator' +description = """ a tool for CNV discovery and genotyping from depth-of-coverage by mapped reads +""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['v%(version)s/%(name)s_v%(version)s.zip'] +source_urls = ['https://github.com/abyzovlab/CNVnator/releases/download'] + +dependencies = [ + ('Perl', '5.24.0'), +] + +skipsteps = ['build'] + +files_to_copy = [(['cnvnator2VCF.pl'], 'bin')] + + +sanity_check_paths = { + 'files': ['bin/cnvnator2VCF.pl'] , + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From e58bb5f0388828466c00673f51c987d8907acd55 Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Wed, 31 May 2017 15:54:51 +0930 Subject: [PATCH 1174/1311] correction --- easybuild/easyconfigs/TEMPLATE.eb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/TEMPLATE.eb diff --git a/easybuild/easyconfigs/TEMPLATE.eb b/easybuild/easyconfigs/TEMPLATE.eb new file mode 100644 index 0000000000..69759ec8da --- /dev/null +++ b/easybuild/easyconfigs/TEMPLATE.eb @@ -0,0 +1,31 @@ +# Note: +# This is an easyconfig file for EasyBuild, see https://github.com/hpcugent/easybuild +# It was auto-generated based on a template easyconfig, so it should be used with care. +easyblock = 'ConfigureMake' + +name = 'NAME' +version = 'VERSION' + +homepage = 'http://www.example.com' +description = """TEMPLATE DESCRIPTION""" + +# toolchain name should be 'TEMPLATE' if this is a template, so EasyBuild knows and is willing to use it as a template +toolchain = {'name': 'TEMPLATE', 'version': 'TK_VERSION'} +toolchainopts = {} # toolchain options, e.g. opt, pic, usempi, optarch, ... + +# For sources line to work correctly with --try-software-version, you MUST employ %s OR use a construct like SOURCE_TAR_GZ +sources = ['%(name)s-%(version)s.tar.gz'] +source_urls = ['http://www.example.com'] + +patches = [] + +dependencies = [] + +# The sanity test MUST be tuned before going production and submitting your contribution to upstream git repositories +sanity_check_paths = { + 'files': [], + 'dirs': ["."] +} + +# You SHOULD change the following line; Kindly consult other easyconfigs for possible options +moduleclass = 'base' -- GitLab From b7117a7ee415d84ffa4312f7ea047ed3b43e1a2d Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 31 May 2017 15:57:06 +0930 Subject: [PATCH 1175/1311] style fixed --- easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb index 702088ee73..c3f9fc44b3 100644 --- a/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb @@ -33,7 +33,7 @@ files_to_copy = [(['cnvnator2VCF.pl'], 'bin')] sanity_check_paths = { - 'files': ['bin/cnvnator2VCF.pl'] , + 'files': ['bin/cnvnator2VCF.pl'], 'dirs': [], } -- GitLab From 0664518e768281132e9cb8338180e0f148cf6dfc Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 31 May 2017 17:17:36 +0930 Subject: [PATCH 1176/1311] easyblock corrected --- easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb index c3f9fc44b3..83fea79140 100644 --- a/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb +++ b/easybuild/easyconfigs/c/CNVnator/CNVnator-0.3.3-foss-2016b.eb @@ -9,7 +9,7 @@ # Notes:: ## -easyblock = 'MakeCp' +easyblock = 'CmdCp' name = 'CNVnator' version = '0.3.3' -- GitLab From 7f6ba11aeac585c11e57486efd5960a13e437e9f Mon Sep 17 00:00:00 2001 From: builduser Date: Wed, 31 May 2017 14:18:32 +0200 Subject: [PATCH 1177/1311] adding easyconfigs: NRGLjubljana-2.4.3.23-foss-2016b.eb --- .../NRGLjubljana-2.4.3.23-foss-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb diff --git a/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb new file mode 100644 index 0000000000..3880dd3342 --- /dev/null +++ b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb @@ -0,0 +1,37 @@ +easyblock = 'ConfigureMake' + +name = 'NRGLjubljana' +version = '2.4.3.23' + +homepage = 'http://nrgljubljana.ijs.si/' +description = """ + NRG Ljubljana is an efficient implementation of the numerical renormalization group (NRG) + technique for solving quantum impurity problems that arise as simplified models of + magnetic impurities and as effective models in the dynamical mean field theory (DMFT) + approach to bulk correlated materials. +""" + +docurls = 'http://nrgljubljana.ijs.si/examples/' +software_license = 'LicenseGPLv3' + +toolchain = {'name': 'foss', 'version': '2016b'} +#toolchainopts = { 'usempi': True, 'pic': True } +toolchainopts = { 'pic': True } + +sources = [ '%(namelower)s-%(version)s.tar.gz' ] +source_urls = [ 'http://nrgljubljana.ijs.si/' ] + +configopts = "--with-tools --with-boost-serialization=boost_serialization CXXFLAGS=\"-Ddsyev=dsyev_ -Ddsyevr=dsyevr_ -Dzheev=zheev_ -Dzheevr=zheevr_\" LDFLAGS=\"-lopenblas -L${EBROOTBOOST}/lib\"" + +dependencies = [ + ('GMP', '6.1.2'), + ('GSL', '2.3'), + ('Boost', '1.61.0') +] + +sanity_check_paths = { + 'files': ["bin/nrg2_4", "bin/nrgcmpl2_4"], + 'dirs': [], +} + +moduleclass = 'phys' -- GitLab From e72c0086c925fdbb8319bd6345bd5dee601b56ba Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 31 May 2017 14:24:04 +0200 Subject: [PATCH 1178/1311] adding easyconfigs: FFTW-2.1.5-intel-2017a.eb --- .../f/FFTW/FFTW-2.1.5-intel-2017a.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb new file mode 100644 index 0000000000..313bc9e8bb --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'FFTW' +version = '2.1.5' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [homepage] + +common_configopts = "--enable-shared --enable-type-prefix --enable-threads --with-pic" + +configopts = [ + common_configopts + " --enable-float --enable-mpi", + common_configopts + " --enable-mpi", # default as last +] + +sanity_check_paths = { + 'files': ['include/%sfftw%s.h' % (x, y) for x in ['d', 'dr', 's', 'sr'] for y in ['', '_mpi', '_threads']] + + ['lib/lib%sfftw%s.a' % (x, y) for x in ['d', 'dr', 's', 'sr'] for y in ['', '_mpi', '_threads']] + + ['lib/lib%sfftw%s.%s' % (x, y, SHLIB_EXT) for x in ['d', 'dr', 's', 'sr'] + for y in ['', '_mpi', '_threads']], + 'dirs': [], +} + +moduleclass = 'numlib' -- GitLab From ca1debbc16d59bc8d2ee55b3e2367b10a8958c96 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 31 May 2017 17:23:41 +0200 Subject: [PATCH 1179/1311] add missing /gnu/ ins ftpmirror.gnu.org source_urls, or use GNU_SOURCE where possible --- easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-4.1.2.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-4.2.4.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-4.3.6.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-4.4.7.eb | 2 +- easybuild/easyconfigs/g/GCC/GCC-4.5.2.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.5.3-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.5.3.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.6.0.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.6.3-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.6.3.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.6.4.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.0-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.0.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.1-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.1.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.2.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.3-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.3.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.4-CLooG-PPL.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.7.4.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.1.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.2-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.2.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.3.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.4.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.8.5.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.0.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.1.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.2-binutils-2.25.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.2.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.3-binutils-2.25.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-4.9.3.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb | 6 +++--- easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.2.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.3.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.4.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb | 6 +++--- easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb | 6 +++--- easybuild/easyconfigs/g/GLPK/GLPK-4.48-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.53-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.53-ictce-6.2.5.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.55-foss-2015a.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.55-intel-2015a.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.58-foss-2016a.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.58-intel-2016a.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.60-intel-2016b.eb | 2 +- easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb | 2 +- easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb | 2 +- easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.3.0.eb | 2 +- easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-6.2.5.eb | 2 +- easybuild/easyconfigs/m/M4/M4-1.4.16-ictce-5.5.0.eb | 2 +- easybuild/easyconfigs/m/mutil/mutil-1.822.3-intel-2016a.eb | 2 +- 73 files changed, 179 insertions(+), 179 deletions(-) diff --git a/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb b/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb index 48f5d0b7b4..dfd1efd2bf 100644 --- a/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb @@ -9,7 +9,7 @@ description = """GNU ed is a line-oriented text editor.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} sources = [SOURCE_TAR_GZ] -source_urls = ['http://ftpmirror.gnu.org/%(name)s/'] +source_urls = [GNU_SOURCE] sanity_check_paths = { 'files': ['bin/ed'], diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.1.2.eb b/easybuild/easyconfigs/g/GCC/GCC-4.1.2.eb index 15db97e462..3353304539 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.1.2.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.1.2.eb @@ -7,7 +7,7 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': ''} # empty version to ensure that dependencies are loaded -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s'] +source_urls = ['http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s'] sources = [SOURCELOWER_TAR_BZ2] checksums = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.2.4.eb b/easybuild/easyconfigs/g/GCC/GCC-4.2.4.eb index 690c94392b..2315380a64 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.2.4.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.2.4.eb @@ -7,7 +7,7 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': ''} # empty version to ensure that dependencies are loaded -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s'] +source_urls = ['http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s'] sources = [SOURCELOWER_TAR_BZ2] checksums = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.3.6.eb b/easybuild/easyconfigs/g/GCC/GCC-4.3.6.eb index d2df4b4c42..49e488fc5d 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.3.6.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.3.6.eb @@ -7,7 +7,7 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': ''} # empty version to ensure that dependencies are loaded -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s'] +source_urls = ['http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s'] sources = [SOURCELOWER_TAR_BZ2] checksums = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.4.7.eb b/easybuild/easyconfigs/g/GCC/GCC-4.4.7.eb index 584afb9b7c..9a6e1777a2 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.4.7.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.4.7.eb @@ -7,7 +7,7 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': ''} # empty version to ensure that dependencies are loaded -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s'] +source_urls = ['http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s'] sources = [SOURCELOWER_TAR_BZ2] checksums = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.5.2.eb b/easybuild/easyconfigs/g/GCC/GCC-4.5.2.eb index 719bc6f315..e4f74a2769 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.5.2.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.5.2.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.5.3-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.5.3-CLooG-PPL.eb index bcb7fd7639..137d7d524e 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.5.3-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.5.3-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.11' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/count.php3?url=.', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.5.3.eb b/easybuild/easyconfigs/g/GCC/GCC-4.5.3.eb index 9a31d20e93..df06986016 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.5.3.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.5.3.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.6.0.eb b/easybuild/easyconfigs/g/GCC/GCC-4.6.0.eb index f310421ff2..e34a70f28b 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.6.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.6.0.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.6.3-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.6.3-CLooG-PPL.eb index 3a9114bc86..5955aa5fd3 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.6.3-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.6.3-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.12' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/count.php3?url=.', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.6.3.eb b/easybuild/easyconfigs/g/GCC/GCC-4.6.3.eb index 884bd3660e..a17723ccd7 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.6.3.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.6.3.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.6.4.eb b/easybuild/easyconfigs/g/GCC/GCC-4.6.4.eb index 6d06e3dc27..92eb1f920e 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.6.4.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.6.4.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.0-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.0-CLooG-PPL.eb index b46830b3c9..8c20572741 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.0-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.0-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.12' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/count.php3?url=.', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.0.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.0.eb index 25a490f355..c5bea4cc95 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.0.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.1-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.1-CLooG-PPL.eb index 6c58ae7bc6..96faf6492a 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.1-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.1-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.12' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.1.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.1.eb index b3ad3f8087..b98f04d03d 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.1.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.1.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.2.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.2.eb index decee62a58..52df95a761 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.2.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.2.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.3-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.3-CLooG-PPL.eb index 8f5cae195c..f76b5cd461 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.3-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.3-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.12.1' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.3.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.3.eb index 03f65ea5f0..f082b457cb 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.3.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.3.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.4-CLooG-PPL.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.4-CLooG-PPL.eb index da943f7026..bf7a65c4b8 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.4-CLooG-PPL.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.4-CLooG-PPL.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} pplver = '0.12.1' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://bugseng.com/products/ppl/download/ftp/releases/%s' % pplver, # PPL official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.7.4.eb b/easybuild/easyconfigs/g/GCC/GCC-4.7.4.eb index 5d688569b0..d6755a5d57 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.7.4.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.7.4.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb index 618d553031..b9384bdcfe 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.1-CLooG.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.1.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.1.eb index 85085960e8..cfc68d66f6 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.1.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.1.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb index 6d29040095..f7ae0b63f1 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG-multilib.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb index 9a60bde46d..53a6b802c8 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-CLooG.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-multilib.eb index 8154896aaa..62ff1a29d8 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2-multilib.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.2.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.2.eb index 525d8bbaf4..ac1ea618e1 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.2.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.2.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb index 54f482d906..55705b2a56 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.3-CLooG-multilib.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.3.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.3.eb index d300b36d8f..47fcc28da6 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.3.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.3.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb index 89f13931a3..8bc99398c5 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG-multilib.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb index 1fee24d2ad..d04c5b5989 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.4-CLooG.eb @@ -9,9 +9,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.4.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.4.eb index 5149d85b52..18e237e811 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.4.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.4.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.8.5.eb b/easybuild/easyconfigs/g/GCC/GCC-4.8.5.eb index 358952fcd9..7a8cd2b768 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.8.5.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.8.5.eb @@ -8,9 +8,9 @@ description = """The GNU Compiler Collection includes front ends for C, C++, Obj toolchain = {'name': 'dummy', 'version': 'dummy'} source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb index c0cd444cef..3d2b9ee9c0 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG-multilib.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb index 7a4b755a4c..3d655c2b61 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.0-CLooG.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.0.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.0.eb index 288754285b..68428b6c43 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.0.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb index bd08517bfa..9e22d2092e 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG-multilib.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb index 5cb7dc788a..ba83e49da7 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.1-CLooG.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.1.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.1.eb index d520b55ace..39947a23d7 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.1.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.1.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb index 4b52dcc343..de353eab4d 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG-multilib.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb index 1ec5100100..b598d63b4c 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-CLooG.eb @@ -11,9 +11,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'http://www.bastoul.net/cloog/pages/download/', # CLooG official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-binutils-2.25.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-binutils-2.25.eb index 44e39d233d..62739aefa4 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2-binutils-2.25.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2-binutils-2.25.eb @@ -13,9 +13,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.2.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.2.eb index e9df0050c0..8586c48e2c 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.2.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.2.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.3-binutils-2.25.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.3-binutils-2.25.eb index 8c62c13920..30c0749622 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.3-binutils-2.25.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.3-binutils-2.25.eb @@ -13,9 +13,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-4.9.3.eb b/easybuild/easyconfigs/g/GCC/GCC-4.9.3.eb index e36af87104..ef8f2e2c88 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-4.9.3.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-4.9.3.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb b/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb index 897ca9088c..f271d37e88 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.1.0-binutils-2.25.eb @@ -13,9 +13,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb index 88c83fce42..fb056c8d3b 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.1.0.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb index 4052ab789b..66232b4383 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.2.0.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.3' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb index 30c9cc61c0..bac0b46be0 100644 --- a/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb +++ b/easybuild/easyconfigs/g/GCC/GCC-5.3.0.eb @@ -10,9 +10,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.3' source_urls = [ - 'http://ftpmirror.gnu.org/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/%(namelower)s/%(namelower)s-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.2.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.2.eb index 872c6745e0..1247d0d3d2 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.2.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.2.eb @@ -13,9 +13,9 @@ mpfr_version = '3.1.2' gcc_name = 'GCC' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.3.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.3.eb index d0d9f1d3a7..50cc39964d 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.3.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.2' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.4.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.4.eb index 9a01aa75ef..04c34b3dcc 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.4.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-4.9.4.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.4' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%s' % version, # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official ] sources = [ diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb index 508f91d3f8..cfbd5a5779 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.3.0.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.3' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb index 1a5cf8b884..c44b03f2db 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-5.4.0.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.4' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb index a645d60588..b3173aaf56 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.1.0.eb @@ -12,12 +12,12 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.4' source_urls = [ - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror 'https://ftp.gnu.org/gnu/gcc/gcc-%(version)s/', # Alternative GCC 'http://isl.gforge.inria.fr/', # original HTTP source for ISL ] diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb index a460408c19..8bf2b22931 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.2.0.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.4' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb index a581540c04..603d43dcde 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-6.3.0.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.5' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb b/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb index 6f69a58a66..198af84508 100644 --- a/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb +++ b/easybuild/easyconfigs/g/GCCcore/GCCcore-7.1.0.eb @@ -12,9 +12,9 @@ toolchain = {'name': 'dummy', 'version': ''} mpfr_version = '3.1.5' source_urls = [ - 'http://ftpmirror.gnu.org/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror - 'http://ftpmirror.gnu.org/gmp', # idem for GMP - 'http://ftpmirror.gnu.org/mpfr', # idem for MPFR + 'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror + 'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP + 'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR 'http://www.multiprecision.org/mpc/download', # MPC official 'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies 'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.48-ictce-5.3.0.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.48-ictce-5.3.0.eb index c0b7a97231..b2cdf2a95f 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.48-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.48-ictce-5.3.0.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s'] +source_urls = [GNU_SOURCE] dependencies = [ ('GMP', '5.1.1'), diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.53-goolf-1.4.10.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.53-goolf-1.4.10.eb index 4525095b97..7eebd2e1b5 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.53-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.53-goolf-1.4.10.eb @@ -11,7 +11,7 @@ written in ANSI C and organized in the form of a callable library.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s'] +source_urls = [GNU_SOURCE] dependencies = [ ('GMP', '5.1.1'), diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.53-ictce-6.2.5.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.53-ictce-6.2.5.eb index aabef669ba..23cdf9bdeb 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.53-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.53-ictce-6.2.5.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'ictce', 'version': '6.2.5'} toolchainopts = {'opt': True, 'optarch': True, 'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftpmirror.gnu.org/%(namelower)s'] +source_urls = [GNU_SOURCE] dependencies = [ ('GMP', '5.1.1'), diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.55-foss-2015a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.55-foss-2015a.eb index 270390d86d..d0490da351 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.55-foss-2015a.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.55-foss-2015a.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'foss', 'version': '2015a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.0.0a', '', ('GCC', '4.9.2'))] diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.55-intel-2015a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.55-intel-2015a.eb index aef6e26abf..97c634c6e3 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.55-intel-2015a.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.55-intel-2015a.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'intel', 'version': '2015a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.0.0a', '', ('GCC', '4.9.2'))] diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.58-foss-2016a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.58-foss-2016a.eb index d5751eec2a..1923d225b7 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.58-foss-2016a.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.58-foss-2016a.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'foss', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.1.0')] diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.58-intel-2016a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.58-intel-2016a.eb index 07ed2e7997..391a5af632 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.58-intel-2016a.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.58-intel-2016a.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'intel', 'version': '2016a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.1.0')] diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.60-intel-2016b.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.60-intel-2016b.eb index 66b0f5b8f2..c1d050fb81 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.60-intel-2016b.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.60-intel-2016b.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'intel', 'version': '2016b'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.1.1')] diff --git a/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb b/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb index 28b87558fc..634ca00ce6 100644 --- a/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb +++ b/easybuild/easyconfigs/g/GLPK/GLPK-4.61-intel-2017a.eb @@ -13,7 +13,7 @@ description = """The GLPK (GNU Linear Programming Kit) package is intended for toolchain = {'name': 'intel', 'version': '2017a'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftp.gnu.org/gnu/%(namelower)s/'] +source_urls = [GNU_SOURCE] dependencies = [('GMP', '6.1.2')] diff --git a/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb b/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb index 723ea8a309..848138c178 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb @@ -11,7 +11,7 @@ description = """The GNU Scientific Library (GSL) is a numerical library for C a toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'unroll': True, 'pic': True} -source_urls = ['http://ftpmirror.gnu.org/gsl/'] +source_urls = ['http://ftpmirror.gnu.org/gnu/gsl/'] sources = [SOURCELOWER_TAR_GZ] configopts = "--with-pic" diff --git a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.3.0.eb b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.3.0.eb index d309818ed8..443c4e034e 100644 --- a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.3.0.eb @@ -21,7 +21,7 @@ description = "gzip (GNU zip) is a popular data compression program as a replace toolchain = {'name': 'ictce', 'version': '5.3.0'} # eg. http://ftp.gnu.org/gnu/gzip/gzip-1.6.tar.gz -source_urls = ['http://ftpmirror.gnu.org/gzip'] +source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_GZ] # make sure the gzip, gunzip and compress binaries are available after installation diff --git a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.5.0.eb b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.5.0.eb index 5f29b035e2..ce75649419 100644 --- a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-5.5.0.eb @@ -21,7 +21,7 @@ description = "gzip (GNU zip) is a popular data compression program as a replace toolchain = {'name': 'ictce', 'version': '5.5.0'} # eg. http://ftp.gnu.org/gnu/gzip/gzip-1.6.tar.gz -source_urls = ['http://ftpmirror.gnu.org/gzip'] +source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_GZ] # make sure the gzip, gunzip and compress binaries are available after installation diff --git a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-6.2.5.eb b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-6.2.5.eb index 036f697797..0b795ea36c 100644 --- a/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-6.2.5.eb +++ b/easybuild/easyconfigs/g/gzip/gzip-1.6-ictce-6.2.5.eb @@ -21,7 +21,7 @@ description = "gzip (GNU zip) is a popular data compression program as a replace toolchain = {'name': 'ictce', 'version': '6.2.5'} # eg. http://ftp.gnu.org/gnu/gzip/gzip-1.6.tar.gz -source_urls = ['http://ftpmirror.gnu.org/gzip'] +source_urls = [GNU_SOURCE] sources = [SOURCE_TAR_GZ] # make sure the gzip, gunzip and compress binaries are available after installation diff --git a/easybuild/easyconfigs/m/M4/M4-1.4.16-ictce-5.5.0.eb b/easybuild/easyconfigs/m/M4/M4-1.4.16-ictce-5.5.0.eb index a7f7a66b5b..9b71429dfd 100644 --- a/easybuild/easyconfigs/m/M4/M4-1.4.16-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/m/M4/M4-1.4.16-ictce-5.5.0.eb @@ -11,7 +11,7 @@ description = """GNU M4 is an implementation of the traditional Unix macro proce toolchain = {'name': 'ictce', 'version': '5.5.0'} sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://ftpmirror.gnu.org/m4'] +source_urls = [GNU_SOURCE] patches = ['M4-%(version)s-no-gets.patch'] diff --git a/easybuild/easyconfigs/m/mutil/mutil-1.822.3-intel-2016a.eb b/easybuild/easyconfigs/m/mutil/mutil-1.822.3-intel-2016a.eb index b4d2d3ae93..851772647c 100644 --- a/easybuild/easyconfigs/m/mutil/mutil-1.822.3-intel-2016a.eb +++ b/easybuild/easyconfigs/m/mutil/mutil-1.822.3-intel-2016a.eb @@ -17,7 +17,7 @@ sources = [ ] source_urls = [ SOURCEFORGE_SOURCE, - 'http://ftpmirror.gnu.org/coreutils', + 'http://ftpmirror.gnu.org/gnu/coreutils', ] dependencies = [ -- GitLab From f5c207b85368f0c31cf348e7e38c924b94e19942 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 15:34:38 -0500 Subject: [PATCH 1180/1311] adding easyconfigs: expat-2.2.0-GCCcore-5.4.0.eb --- .../e/expat/expat-2.2.0-GCCcore-5.4.0.eb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..eeff8e600b --- /dev/null +++ b/easybuild/easyconfigs/e/expat/expat-2.2.0-GCCcore-5.4.0.eb @@ -0,0 +1,18 @@ +easyblock = 'ConfigureMake' + +name = 'expat' +version = '2.2.0' + +homepage = 'http://expat.sourceforge.net/' +description = """Expat is an XML parser library written in C. It is a stream-oriented parser in which an application + registers handlers for things the parser might find in the XML document (like start tags)""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +builddependencies = [('binutils', '2.26', '', True)] + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [SOURCEFORGE_SOURCE] + +moduleclass = 'tools' -- GitLab From a17d9abdf97f0390c8205b2bc63c46f8a7dcffc4 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 15:57:06 -0500 Subject: [PATCH 1181/1311] adding easyconfigs: libpng-1.6.24-GCCcore-5.4.0.eb, freetype-2.6.5-GCCcore-5.4.0.eb, fontconfig-2.12.1-GCCcore-5.4.0.eb --- .../fontconfig-2.12.1-GCCcore-5.4.0.eb | 25 +++++++++++++++++ .../freetype/freetype-2.6.5-GCCcore-5.4.0.eb | 28 +++++++++++++++++++ .../l/libpng/libpng-1.6.24-GCCcore-5.4.0.eb | 28 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.24-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..39bdb77029 --- /dev/null +++ b/easybuild/easyconfigs/f/fontconfig/fontconfig-2.12.1-GCCcore-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'fontconfig' +version = '2.12.1' + +homepage = 'http://www.freedesktop.org/software/fontconfig' +description = """Fontconfig is a library designed to provide system-wide font configuration, customization and +application access.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = ['http://www.freedesktop.org/software/fontconfig/release/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('expat', '2.2.0'), + ('freetype', '2.6.5'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +configopts = '--disable-docs ' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..e1a17a86f6 --- /dev/null +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb @@ -0,0 +1,28 @@ +name = 'freetype' +version = '2.6.5' + +homepage = 'http://freetype.org' +description = """FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable, and + portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display + servers, font conversion tools, text image generation tools, and many other products as well.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SAVANNAH_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('libpng', '1.6.24'), + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), +] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], + 'dirs': ['include/freetype2'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.24-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.24-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..c2aea84a3c --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.24-GCCcore-5.4.0.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.24' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.8')] + +builddependencies = [('binutils', '2.26', '', True)] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' -- GitLab From f2a56252d1355196f6825012b83aeda3e4854eba Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 16:21:09 -0500 Subject: [PATCH 1182/1311] adding easyconfigs: gettext-0.19.8-GCCcore-5.4.0.eb, libxml2-2.9.4-GCCcore-5.4.0.eb, XZ-5.2.2-GCCcore-5.4.0.eb --- .../g/gettext/gettext-0.19.8-GCCcore-5.4.0.eb | 26 +++++++++++++++++ .../l/libxml2/libxml2-2.9.4-GCCcore-5.4.0.eb | 26 +++++++++++++++++ .../x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb | 28 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-5.4.0.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..8875bae587 --- /dev/null +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-GCCcore-5.4.0.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'gettext' +version = '0.19.8' + +homepage = 'http://www.gnu.org/software/gettext/' +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools +and documentation""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libxml2', '2.9.4'), + ('ncurses', '6.0'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +configopts = '--without-emacs --with-libxml2-prefix=$EBROOTLIBXML2' + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..5c02f30d48 --- /dev/null +++ b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-GCCcore-5.4.0.eb @@ -0,0 +1,26 @@ +name = 'libxml2' +version = '2.9.4' + +homepage = 'http://xmlsoft.org/' +description = """Libxml2 is the XML C parser and +toolchain developed for the Gnome project + (but usable outside of the Gnome platform).""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'http://xmlsoft.org/sources/', + 'http://xmlsoft.org/sources/old/' +] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.8'), + ('XZ', '5.2.2'), +] + +# use same binutils version that was used when building GCCcore toolchain +builddependencies = [('binutils', '2.26', '', True)] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..c46df20c2f --- /dev/null +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'XZ' +version = '5.2.2' + +homepage = 'http://tukaani.org/xz/' +description = "xz: XZ utilities" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://tukaani.org/xz/'] + +builddependencies = [ + ('gettext', '0.19.8', '', True), + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.26', '', True), +] + +# may become useful in non-x86 archs +# configopts = ' --disable-assembler ' + +sanity_check_paths = { + 'files': ["bin/xz", "bin/lzmainfo"], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From 379c40fb8733c04fe402d94d347c9cf78a3b51e8 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 16:23:59 -0500 Subject: [PATCH 1183/1311] adding easyconfigs: pkg-config-0.29.1-GCCcore-5.4.0.eb --- .../pkg-config-0.29.1-GCCcore-5.4.0.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..11d61b23f7 --- /dev/null +++ b/easybuild/easyconfigs/p/pkg-config/pkg-config-0.29.1-GCCcore-5.4.0.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'pkg-config' +version = '0.29.1' + +homepage = 'http://www.freedesktop.org/wiki/Software/pkg-config/' +description = """pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the + correct compiler options on the command line so an application can use + gcc -o test test.c `pkg-config --libs --cflags glib-2.0` + for instance, rather than hard-coding values on where to find glib (or other libraries).""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['https://pkg-config.freedesktop.org/releases/'] + +builddependencies = [ + # use same binutils version that was used when building GCCcore toolchain + ('binutils', '2.26', '', True), +] + +# don't use PAX, it might break. +tar_config_opts = True + +configopts = " --with-internal-glib" + +sanity_check_paths = { + 'files': ['bin/pkg-config'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From ff583b852b1a90018a60f91aea9520173851ad2c Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 17:16:39 -0500 Subject: [PATCH 1184/1311] adding easyconfigs: GMP-6.1.1-GCCcore-5.4.0.eb --- .../g/GMP/GMP-6.1.1-GCCcore-5.4.0.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..6b309e5f37 --- /dev/null +++ b/easybuild/easyconfigs/g/GMP/GMP-6.1.1-GCCcore-5.4.0.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'GMP' +version = '6.1.1' + +homepage = 'http://gmplib.org/' +description = """GMP is a free library for arbitrary precision arithmetic, +operating on signed integers, rational numbers, and floating point numbers. """ + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True, 'precise': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://ftp.gnu.org/gnu/gmp'] + +builddependencies = [ + ('binutils', '2.26'), + ('Autotools', '20150215'), +] + +# enable C++ interface +configopts = '--enable-cxx' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libgmp.%s' % SHLIB_EXT, 'include/gmp.h'], + 'dirs': [], +} + +moduleclass = 'math' -- GitLab From b02e7fe62bbeefd882c8ad270226bf1f8e9125f4 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 17:18:18 -0500 Subject: [PATCH 1185/1311] adding easyconfigs: libffi-3.2.1-GCCcore-5.4.0.eb --- .../l/libffi/libffi-3.2.1-GCCcore-5.4.0.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..c9f216298d --- /dev/null +++ b/easybuild/easyconfigs/l/libffi/libffi-3.2.1-GCCcore-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'libffi' +version = '3.2.1' + +homepage = 'http://sourceware.org/libffi/' +description = """The libffi library provides a portable, high level programming interface to various calling +conventions. This allows a programmer to call any function specified by a call interface description at run-time.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [ + 'ftp://sourceware.org/pub/libffi/', + 'http://www.mirrorservice.org/sites/sourceware.org/pub/libffi/', +] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': [('lib/libffi.%s' % SHLIB_EXT, 'lib64/libffi.%s' % SHLIB_EXT), ('lib/libffi.a', 'lib64/libffi.a')], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From bf7ef0e281e7e157677d5417eae2b0ba46dc297a Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Wed, 31 May 2017 17:18:43 -0500 Subject: [PATCH 1186/1311] adding easyconfigs: libreadline-6.3-GCCcore-5.4.0.eb --- .../libreadline-6.3-GCCcore-5.4.0.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..a356775b1b --- /dev/null +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-GCCcore-5.4.0.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'libreadline' +version = '6.3' + +homepage = 'http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html' +description = """The GNU Readline library provides a set of functions for use by applications that + allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. + The Readline library includes additional functions to maintain a list of previously-entered command lines, + to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +sources = ['readline-%(version)s.tar.gz'] +source_urls = ['http://ftp.gnu.org/gnu/readline'] + +patches = ['libreadline-%(version)s-bugfix.patch'] + +builddependencies = [('binutils', '2.26', '', True)] + +dependencies = [('ncurses', '6.0')] + +# for the termcap symbols, use EB ncurses +preconfigopts = "env LDFLAGS='-lncurses'" + +sanity_check_paths = { + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From 41fa0eb1d9f2300d745770149525ac624a23fc38 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 1 Jun 2017 16:48:59 +1200 Subject: [PATCH 1187/1311] Add ncurses-devel as OS dependency and ccmake as sanity check --- ....1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 38 +++++++++++++++++++ easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb | 4 +- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb new file mode 100644 index 0000000000..f8ab683344 --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -0,0 +1,38 @@ +name = 'CGAL' +version = '4.8.1' +gmpver = '6.0.0a' + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'strict': True} + +# note: source URL needs to be updated for a new version (checksums too)! +source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] +sources = [SOURCE_TAR_XZ] +checksums = ['1cbcb3f251822766ed3d744f923c782d'] + +dependencies = [ + ('Boost', '1.60.0'), + ('GMP', gmpver), + ('MPFR', '3.1.2', '-GMP-%s' % gmpver), +] + +configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " +configopts += "-DBoost_INCLUDE_DIR=$EBROOTBOOST/include " +configopts += "-DBoost_LIBRARY_DIRS=$EBROOTBOOST/lib " +configopts += "-DBoost_SYSTEM_LIBRARY=$EBROOTBOOST/libboost_system.%s " % SHLIB_EXT +configopts += "-DBoost_THREAD_LIBRARY=$EBROOTBOOST/libboost_thread.%s " % SHLIB_EXT +configopts += "-DMPFR_INCLUDE_DIR=$EBROOTMPFR/include " +configopts += "-DMPFR_LIBRARIES=$EBROOTMPFR/lib/libmpfr.%s " % SHLIB_EXT +configopts += "-DGMP_INCLUDE_DIR=$EBROOTGMP/include " +configopts += "-DGMP_LIBRARIES=$EBROOTGMP/lib/libgmp.%s " % SHLIB_EXT +configopts += "-DGMP_LIBRARIES_DIR=$EBROOTGMP/lib " + +builddependencies = [ + ('CMake', '3.4.1'), +] + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb index 0e73857b1d..71580ff227 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb @@ -18,10 +18,10 @@ configopts = '-- -DCMAKE_USE_OPENSSL=1' # which might want different versions of the same dependency, eg: ncurses dependencies = [] -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel', 'ncurses-devel')] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['cmake', 'ccmake', 'cpack', 'ctest']], 'dirs': [], } -- GitLab From 9b68d8c3abc8e69a5230410fc69da373615b4d90 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 1 Jun 2017 16:52:35 +1200 Subject: [PATCH 1188/1311] Delete this file - wrongly committed to this branch --- .../CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb index f8ab683344..0819922f0a 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -1,6 +1,9 @@ name = 'CGAL' version = '4.8.1' gmpver = '6.0.0a' +pyver = '2.7.11' +glibver = '2.48.2' +versionsuffix = '-GLib-%s-Python-%s' % (glibver, pyver) homepage = 'http://www.cgal.org/' description = """The goal of the CGAL Open Source Project is to provide easy access to efficient @@ -9,15 +12,16 @@ description = """The goal of the CGAL Open Source Project is to provide easy acc toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'strict': True} -# note: source URL needs to be updated for a new version (checksums too)! source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] sources = [SOURCE_TAR_XZ] checksums = ['1cbcb3f251822766ed3d744f923c782d'] dependencies = [ ('Boost', '1.60.0'), + ('GLib', glibver), ('GMP', gmpver), ('MPFR', '3.1.2', '-GMP-%s' % gmpver), + ('Qt', '4.8.7', versionsuffix), ] configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " -- GitLab From 18ff6997f7d60bd9f4174732982e4d432f354283 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 1 Jun 2017 16:54:02 +1200 Subject: [PATCH 1189/1311] Delete CGAL easyconfig, again --- ....1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb deleted file mode 100644 index 0819922f0a..0000000000 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb +++ /dev/null @@ -1,42 +0,0 @@ -name = 'CGAL' -version = '4.8.1' -gmpver = '6.0.0a' -pyver = '2.7.11' -glibver = '2.48.2' -versionsuffix = '-GLib-%s-Python-%s' % (glibver, pyver) - -homepage = 'http://www.cgal.org/' -description = """The goal of the CGAL Open Source Project is to provide easy access to efficient - and reliable geometric algorithms in the form of a C++ library.""" - -toolchain = {'name': 'foss', 'version': '2015a'} -toolchainopts = {'strict': True} - -source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] -sources = [SOURCE_TAR_XZ] -checksums = ['1cbcb3f251822766ed3d744f923c782d'] - -dependencies = [ - ('Boost', '1.60.0'), - ('GLib', glibver), - ('GMP', gmpver), - ('MPFR', '3.1.2', '-GMP-%s' % gmpver), - ('Qt', '4.8.7', versionsuffix), -] - -configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " -configopts += "-DBoost_INCLUDE_DIR=$EBROOTBOOST/include " -configopts += "-DBoost_LIBRARY_DIRS=$EBROOTBOOST/lib " -configopts += "-DBoost_SYSTEM_LIBRARY=$EBROOTBOOST/libboost_system.%s " % SHLIB_EXT -configopts += "-DBoost_THREAD_LIBRARY=$EBROOTBOOST/libboost_thread.%s " % SHLIB_EXT -configopts += "-DMPFR_INCLUDE_DIR=$EBROOTMPFR/include " -configopts += "-DMPFR_LIBRARIES=$EBROOTMPFR/lib/libmpfr.%s " % SHLIB_EXT -configopts += "-DGMP_INCLUDE_DIR=$EBROOTGMP/include " -configopts += "-DGMP_LIBRARIES=$EBROOTGMP/lib/libgmp.%s " % SHLIB_EXT -configopts += "-DGMP_LIBRARIES_DIR=$EBROOTGMP/lib " - -builddependencies = [ - ('CMake', '3.4.1'), -] - -moduleclass = 'numlib' -- GitLab From 2fd2715980e85eb5489fcfc009fa5dbe6fb5056f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Thu, 1 Jun 2017 17:12:31 +1200 Subject: [PATCH 1190/1311] Dependencies for the gimkl-2017a toolchain --- easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb | 25 ++++++++++++ easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb | 18 +++++++++ .../i/imkl/imkl-2017.1.132-gimpi-2017a.eb | 36 +++++++++++++++++ .../i/impi/impi-2017.1.132-GCC-5.4.0.eb | 40 +++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb create mode 100644 easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb create mode 100644 easybuild/easyconfigs/i/imkl/imkl-2017.1.132-gimpi-2017a.eb create mode 100644 easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb new file mode 100644 index 0000000000..0bc33f7250 --- /dev/null +++ b/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'Bundle' + +name = 'GCC' +version = '5.4.0' + +binutilsver = '2.26' +#versionsuffix = '-%s' % binutilsver + +homepage = 'http://gcc.gnu.org/' +description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, + as well as libraries for these languages (libstdc++, libgcj,...).""" + +toolchain = {'name': 'dummy', 'version': ''} + +dependencies = [ + ('GCCcore', version), + # binutils built on top of GCCcore, which was built on top of (dummy-built) binutils + ('binutils', binutilsver, '', ('GCCcore', version)), +] + +altroot = 'GCCcore' +altversion = 'GCCcore' + +# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) +moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb new file mode 100644 index 0000000000..394c894b37 --- /dev/null +++ b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb @@ -0,0 +1,18 @@ +easyblock = "Toolchain" + +name = 'gimpi' +version = '2017a' + +homepage = '(none)' +description = """GNU Compiler Collection (GCC) based compiler toolchain with Intel MPI.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +comp = ('GCC', '5.4.0') + +dependencies = [ + comp, + ('impi', '2017.1.132', '', comp), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-gimpi-2017a.eb b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-gimpi-2017a.eb new file mode 100644 index 0000000000..aaa3568ab0 --- /dev/null +++ b/easybuild/easyconfigs/i/imkl/imkl-2017.1.132-gimpi-2017a.eb @@ -0,0 +1,36 @@ +name = 'imkl' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-mkl/' +description = """Intel Math Kernel Library is a library of highly optimized, + extensively threaded math routines for science, engineering, and financial + applications that require maximum performance. Core math functions include + BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, Vector Math, and more.""" + +toolchain = {'name': 'gimpi', 'version': '2017a'} + +sources = ['l_mkl_%(version)s.tgz'] +checksums = ['7911c0f777c4cb04225bf4518088939e'] + +dontcreateinstalldir = 'True' + +license_file = HOME + '/licenses/intel/license.lic' + +interfaces = True + +postinstallcmds = [ + # extract the examples + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_cluster_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_c.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_core_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_f95.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_f.tgz -C %(installdir)s/mkl/examples/', + 'tar xvzf %(installdir)s/mkl/examples/examples_mic_c.tgz -C %(installdir)s/mkl/examples/', +] + +modextravars = { + 'MKL_EXAMPLES': '%(installdir)s/mkl/examples/', +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb new file mode 100644 index 0000000000..e03300b9d5 --- /dev/null +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb @@ -0,0 +1,40 @@ +name = 'impi' +version = '2017.1.132' + +homepage = 'http://software.intel.com/en-us/intel-mpi-library/' +description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message + passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for + Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0'} + +sources = ['l_mpi_%(version)s.tgz'] +checksums = ['d5e941ac2bcf7c5576f85f6bcfee4c18'] + +dontcreateinstalldir = 'True' + +components = ['intel-mpi', 'intel-psxe', 'intel-imb'] + +# license file +license_file = HOME + '/licenses/intel/license.lic' + +# Set I_MPI_ variables to point at the appropriate compilers +set_mpi_wrappers_all = True + +# Are these values for modextravars site-specific? +modextravars = { + 'I_MPI_WAIT_MODE': '1', + 'I_MPI_DAPL_PROVIDER': 'ofa-v2-mlx4_0-1', + 'I_MPI_PMI_LIBRARY': '/usr/lib64/libpmi.so', +} + +postinstallcmds = [ + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpich.so', + 'ln -s %(installdir)s/lib64/libmpigc4.so %(installdir)s/lib64/libmpichcxx.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libfmpich.so', + 'ln -s %(installdir)s/lib64/libmpigf.so %(installdir)s/lib64/libmpichf90.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpl.so', + 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libopa.so' +] + +moduleclass = 'mpi' -- GitLab From 062930f2b303492bb31f9ab351985d78479c3345 Mon Sep 17 00:00:00 2001 From: builduser Date: Thu, 1 Jun 2017 08:58:54 +0200 Subject: [PATCH 1191/1311] Fixed line lengths, quoting and removed a commented-out line --- .../n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb index 3880dd3342..491184693e 100644 --- a/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb +++ b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb @@ -15,13 +15,14 @@ docurls = 'http://nrgljubljana.ijs.si/examples/' software_license = 'LicenseGPLv3' toolchain = {'name': 'foss', 'version': '2016b'} -#toolchainopts = { 'usempi': True, 'pic': True } toolchainopts = { 'pic': True } sources = [ '%(namelower)s-%(version)s.tar.gz' ] source_urls = [ 'http://nrgljubljana.ijs.si/' ] -configopts = "--with-tools --with-boost-serialization=boost_serialization CXXFLAGS=\"-Ddsyev=dsyev_ -Ddsyevr=dsyevr_ -Dzheev=zheev_ -Dzheevr=zheevr_\" LDFLAGS=\"-lopenblas -L${EBROOTBOOST}/lib\"" +configopts = '--with-tools --with-boost-serialization=boost_serialization' +configopts += ' CXXFLAGS="-Ddsyev=dsyev_ -Ddsyevr=dsyevr_ -Dzheev=zheev_ -Dzheevr=zheevr_"' +configopts += ' LDFLAGS="-lopenblas -L${EBROOTBOOST}/lib"' dependencies = [ ('GMP', '6.1.2'), -- GitLab From 82e901b88e3a4e4f8a26414a8144a1d32c4fbd38 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 09:25:19 +0200 Subject: [PATCH 1192/1311] add checksum and alternate source URL for ed 1.9 --- easybuild/easyconfigs/e/ed/ed-1.9-goolf-1.4.10.eb | 6 +++++- easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/e/ed/ed-1.9-goolf-1.4.10.eb b/easybuild/easyconfigs/e/ed/ed-1.9-goolf-1.4.10.eb index b0dc02f6dd..2c5d7fe41f 100644 --- a/easybuild/easyconfigs/e/ed/ed-1.9-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/e/ed/ed-1.9-goolf-1.4.10.eb @@ -8,8 +8,12 @@ description = """GNU ed is a line-oriented text editor.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} +source_urls = [ + 'https://launchpad.net/ed/main/%(version)s/+download/', + GNU_SOURCE, +] sources = [SOURCE_TAR_GZ] -source_urls = [GNU_SOURCE] +checksums = ['d5b372cfadf073001823772272fceac2cfa87552c5cd5a8efc1c8aae61f45a88'] sanity_check_paths = { 'files': ['bin/ed'], diff --git a/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb b/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb index dfd1efd2bf..7b11af7dc6 100644 --- a/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/e/ed/ed-1.9-ictce-5.3.0.eb @@ -8,8 +8,12 @@ description = """GNU ed is a line-oriented text editor.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} +source_urls = [ + 'https://launchpad.net/ed/main/%(version)s/+download/', + GNU_SOURCE, +] sources = [SOURCE_TAR_GZ] -source_urls = [GNU_SOURCE] +checksums = ['d5b372cfadf073001823772272fceac2cfa87552c5cd5a8efc1c8aae61f45a88'] sanity_check_paths = { 'files': ['bin/ed'], -- GitLab From d0ae8e4500fa9021010e0b959ca4fb47f5ed44d3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 09:26:51 +0200 Subject: [PATCH 1193/1311] also use GNU_SOURCE for GSL (nice catch @migueldiascosta!) --- easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb b/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb index 848138c178..b2099121ee 100644 --- a/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/GSL/GSL-1.16-goolf-1.7.20.eb @@ -11,7 +11,7 @@ description = """The GNU Scientific Library (GSL) is a numerical library for C a toolchain = {'name': 'goolf', 'version': '1.7.20'} toolchainopts = {'unroll': True, 'pic': True} -source_urls = ['http://ftpmirror.gnu.org/gnu/gsl/'] +source_urls = [GNU_SOURCE] sources = [SOURCELOWER_TAR_GZ] configopts = "--with-pic" -- GitLab From 853e9b5bf078b33b989486cc9e2927813130e48e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 09:32:44 +0200 Subject: [PATCH 1194/1311] add patch for FFTW 2.1.5 to ensure *_f77 symbols are there --- .../easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb | 4 ++++ .../FFTW-2.1.5_fix-configure-Fortran-linking.patch | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb index 313bc9e8bb..f08bc07dde 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2017a.eb @@ -13,6 +13,8 @@ toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] source_urls = [homepage] +patches = ['FFTW-%(version)s_fix-configure-Fortran-linking.patch'] + common_configopts = "--enable-shared --enable-type-prefix --enable-threads --with-pic" configopts = [ @@ -27,5 +29,7 @@ sanity_check_paths = { for y in ['', '_mpi', '_threads']], 'dirs': [], } +# make sure *_f77 symbols are there (patch is required to avoid --disable-fortran being used automatically) +sanity_check_commands = ["nm %(installdir)s/lib/libdfftw.a | grep _f77"] moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch new file mode 100644 index 0000000000..3c6ff3ce4a --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch @@ -0,0 +1,13 @@ +diff --git a/fftw-2.1.5.orig/configure b/fftw-2.1.5/configure +index f5bab28..ba60d87 100755 +--- a/fftw-2.1.5.orig/configure ++++ b/fftw-2.1.5/configure +@@ -8612,7 +8612,7 @@ _ACEOF + ac_save_FFLAGS=$FFLAGS + FFLAGS="$FFLAGS $ac_cv_prog_f77_v" + (eval echo $as_me:8614: \"$ac_link\") >&5 +-ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` ++ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed 's/"//g' | grep -v 'Driving:'` + echo "$ac_f77_v_output" >&5 + FFLAGS=$ac_save_FFLAGS + -- GitLab From c00a53d1e1655e39f9f41f740fda7c8292723a29 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 10:37:57 +0200 Subject: [PATCH 1195/1311] add description + authorship in patch for FFTW 2.1.5 --- .../f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch index 3c6ff3ce4a..6dbbf6e91a 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch +++ b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5_fix-configure-Fortran-linking.patch @@ -1,3 +1,6 @@ +remove double quotes from verbose output of Fortran compiler +required to avoid that --disable-fortran gets used automatically, resulting in missing *_f77 symbols +author: Kenneth Hoste (HPC-UGent) diff --git a/fftw-2.1.5.orig/configure b/fftw-2.1.5/configure index f5bab28..ba60d87 100755 --- a/fftw-2.1.5.orig/configure -- GitLab From 6b698c93def4e0de309d169b8d92e3fe487cac31 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 10:52:52 +0200 Subject: [PATCH 1196/1311] adding easyconfigs: HTSlib-1.4.1-intel-2017a.eb --- .../h/HTSlib/HTSlib-1.4.1-intel-2017a.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/h/HTSlib/HTSlib-1.4.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4.1-intel-2017a.eb b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4.1-intel-2017a.eb new file mode 100644 index 0000000000..03cac8f884 --- /dev/null +++ b/easybuild/easyconfigs/h/HTSlib/HTSlib-1.4.1-intel-2017a.eb @@ -0,0 +1,36 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 1.4 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'HTSlib' +version = '1.4.1' + +homepage = "http://www.htslib.org/" +description = """A C library for reading/writing high-throughput sequencing data. + This package includes the utilities bgzip and tabix""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s/'] +sources = [SOURCELOWER_TAR_BZ2] + +# cURL added for S3 support +dependencies = [ + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), + ('cURL', '7.53.1'), +] + +sanity_check_paths = { + 'files': ["bin/bgzip", "bin/tabix", "lib/libhts.%s" % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 4324824cf9132a34f9fd33100f4f48e4332b6613 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 11:23:11 +0200 Subject: [PATCH 1197/1311] adding easyconfigs: Bowtie2-2.3.2-intel-2017a.eb, tbb-2017_U6-intel-2017a.eb --- .../b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb | 35 +++++++++++++++++++ .../t/tbb/tbb-2017_U6-intel-2017a.eb | 13 +++++++ 2 files changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017_U6-intel-2017a.eb diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb new file mode 100644 index 0000000000..98d5525da2 --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb @@ -0,0 +1,35 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# Modified by: Robert Schmidt +# Ottawa Hospital Research Institute - Bioinformatics Team +# Modified by: Adam Huffman +# The Francis Crick Institute +# Modified by: Kurt Lust, UAntwerp + +name = 'Bowtie2' +version = '2.3.2' + +homepage = 'http://bowtie-bio.sourceforge.net/bowtie2/index.shtml' +description = """ Bowtie 2 is an ultrafast and memory-efficient tool for aligning sequencing reads + to long reference sequences. It is particularly good at aligning reads of about 50 up to 100s or 1,000s + of characters, and particularly good at aligning to relatively long (e.g. mammalian) genomes. + Bowtie 2 indexes the genome with an FM Index to keep its memory footprint small: for the human genome, + its memory footprint is typically around 3.2 GB. Bowtie 2 supports gapped, local, and paired-end alignment modes.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +sources = ['%(namelower)s-%(version)s-source.zip'] +source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] + +dependencies = [('tbb', '2017_U6')] + +# disable warning on incompatible exception specification that is treated as an error +buildopts = "EXTRA_FLAGS='-wd809'" + +# to add script folder to path just uncomment this line +#modextrapaths = {'PATH': 'scripts'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017_U6-intel-2017a.eb b/easybuild/easyconfigs/t/tbb/tbb-2017_U6-intel-2017a.eb new file mode 100644 index 0000000000..9fd9a0ec5a --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017_U6-intel-2017a.eb @@ -0,0 +1,13 @@ +name = 'tbb' +version = '2017_U6' + +homepage = 'https://01.org/tbb/' +description = """Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that + take full advantage of multicore performance, that are portable, composable and have future-proof scalability.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/01org/tbb/archive/'] +sources = ['%(version)s.tar.gz'] + +moduleclass = 'lib' -- GitLab From 4a0bef476a5d450ced0b667a2e603e74a2a33083 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 1 Jun 2017 11:29:44 +0200 Subject: [PATCH 1198/1311] adding easyconfigs: pydlpoly-20150225-intel-2017a-Python-2.7.13.eb --- ...poly-20150225-intel-2017a-Python-2.7.13.eb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..89fcff1c23 --- /dev/null +++ b/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,39 @@ +easyblock = 'MakeCp' + +name = 'pydlpoly' +version = '20150225' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://cmc.aci.ruhr-uni-bochum.de/cmc/' +description = """Pydlpoly is a molecular dynamics simulation package which is a modified version of DL-POLY with + a Python language interface.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%(name)s_250215.tgz'] +checksums = ['cd84a4b563dd16823e22fe6c450b07fd95036e20e0c6b7fc308afdb347241122'] + +dependencies = [ + ('Python', '2.7.13'), # also provides mpi4py, numpy + ('h5py', '2.7.0', versionsuffix), + ('FFTW', '2.1.5'), +] + +start_dir = 'source' + +parallel = 1 +buildopts = 'FC="$FC" LD="$FC -o" LDFLAGS="$FFLAGS" FFLAGS="-c $FFLAGS" LDLIBS="-ldfftw" F2PY_COMP=intelem' + +files_to_copy = ['doc', 'py', 'scripts', 'so'] + +sanity_check_paths = { + 'files': ['so/_pydlpoly.%s' % SHLIB_EXT], + 'dirs': ['py'], +} +sanity_check_commands = ["python -c 'import pydlpoly'"] + +modextrapaths = {'PYTHONPATH': ['py', 'so']} +modextravars = {'PDLPDIR': '%(installdir)s'} + +moduleclass = 'chem' -- GitLab From 6c13759d623f43c58ac07d121e1748f96d181536 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Thu, 1 Jun 2017 09:25:56 -0500 Subject: [PATCH 1199/1311] Added patch file --- easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb index c46df20c2f..3f9cceef3c 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.2-GCCcore-5.4.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'GCCcore', 'version': '5.4.0'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-%(version)s_compat-libs.patch'] + builddependencies = [ ('gettext', '0.19.8', '', True), # use same binutils version that was used when building GCCcore toolchain -- GitLab From ac8aa533f0100516bc03024358ad05266281e8e4 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 2 Jun 2017 10:12:15 +1200 Subject: [PATCH 1200/1311] Tweaks requested by K.H. --- easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb index 71580ff227..d8773947c8 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb @@ -18,10 +18,10 @@ configopts = '-- -DCMAKE_USE_OPENSSL=1' # which might want different versions of the same dependency, eg: ncurses dependencies = [] -osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel', 'ncurses-devel')] +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'ncurses-devel'] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ['cmake', 'ccmake', 'cpack', 'ctest']], + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], 'dirs': [], } -- GitLab From 300e1c109c871025c7993c7899d48c0bf07033ec Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 2 Jun 2017 10:39:57 +1200 Subject: [PATCH 1201/1311] Change GCC-5.4.0 to GCC-5.4.0-2.26 and consequential changes --- easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb | 25 ------------------- easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb | 4 ++- easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb | 4 ++- ...0.eb => impi-2017.1.132-GCC-5.4.0-2.26.eb} | 13 +++------- 4 files changed, 10 insertions(+), 36 deletions(-) delete mode 100644 easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb rename easybuild/easyconfigs/i/impi/{impi-2017.1.132-GCC-5.4.0.eb => impi-2017.1.132-GCC-5.4.0-2.26.eb} (81%) diff --git a/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb b/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb deleted file mode 100644 index 0bc33f7250..0000000000 --- a/easybuild/easyconfigs/g/GCC/GCC-5.4.0.eb +++ /dev/null @@ -1,25 +0,0 @@ -easyblock = 'Bundle' - -name = 'GCC' -version = '5.4.0' - -binutilsver = '2.26' -#versionsuffix = '-%s' % binutilsver - -homepage = 'http://gcc.gnu.org/' -description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, - as well as libraries for these languages (libstdc++, libgcj,...).""" - -toolchain = {'name': 'dummy', 'version': ''} - -dependencies = [ - ('GCCcore', version), - # binutils built on top of GCCcore, which was built on top of (dummy-built) binutils - ('binutils', binutilsver, '', ('GCCcore', version)), -] - -altroot = 'GCCcore' -altversion = 'GCCcore' - -# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) -moduleclass = 'compiler' diff --git a/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb index 553786dd35..1ed5c3adff 100644 --- a/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb +++ b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb @@ -8,7 +8,9 @@ description = """GNU Compiler Collection (GCC) based compiler toolchain with Int toolchain = {'name': 'dummy', 'version': 'dummy'} -comp = ('GCC', '5.4.0') +gccver = '5.4.0' +binutilsver = '2.26' +comp = ('GCC', '%s-%s' % (gccver, binutilsver)) dependencies = [ comp, diff --git a/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb index 394c894b37..faaefc8f0b 100644 --- a/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb +++ b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb @@ -8,7 +8,9 @@ description = """GNU Compiler Collection (GCC) based compiler toolchain with Int toolchain = {'name': 'dummy', 'version': 'dummy'} -comp = ('GCC', '5.4.0') +gccver = '5.4.0' +binutilsver = '2.26' +comp = ('GCC', '%s-%s' % (gccver, binutilsver)) dependencies = [ comp, diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb similarity index 81% rename from easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb rename to easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb index e03300b9d5..596670ca45 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb @@ -6,7 +6,9 @@ description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric messag passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" -toolchain = {'name': 'GCC', 'version': '5.4.0'} +gccver = '5.4.0' +binutilsver = '2.26' +toolchain = {'name': 'GCC', 'version': '%s-%s' % (gccver, binutilsver)} sources = ['l_mpi_%(version)s.tgz'] checksums = ['d5e941ac2bcf7c5576f85f6bcfee4c18'] @@ -19,14 +21,7 @@ components = ['intel-mpi', 'intel-psxe', 'intel-imb'] license_file = HOME + '/licenses/intel/license.lic' # Set I_MPI_ variables to point at the appropriate compilers -set_mpi_wrappers_all = True - -# Are these values for modextravars site-specific? -modextravars = { - 'I_MPI_WAIT_MODE': '1', - 'I_MPI_DAPL_PROVIDER': 'ofa-v2-mlx4_0-1', - 'I_MPI_PMI_LIBRARY': '/usr/lib64/libpmi.so', -} +#set_mpi_wrappers_all = True postinstallcmds = [ 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpich.so', -- GitLab From 56f3c72e17f2ef085d5dc268b5d6fa3d7c99802e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 2 Jun 2017 16:11:07 +1200 Subject: [PATCH 1202/1311] Change file permissions on two libpciaccess easyconfigs --- .../easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb | 0 .../easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb mode change 100755 => 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb old mode 100755 new mode 100644 diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb old mode 100755 new mode 100644 -- GitLab From f01ff0a9d8b5164a1088d4aa9172d424c2b2c312 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 2 Jun 2017 17:16:17 +1200 Subject: [PATCH 1203/1311] Changes requested by K.H. --- ....1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 38 +++++++++++ .../e/Eigen/Eigen-3.2.9-foss-2015a.eb | 13 ++++ .../e/eudev/eudev-3.1.5-foss-2015a.eb | 32 ++++++++++ .../g/gperf/gperf-3.0.4-foss-2015a.eb | 22 +++++++ .../l/LLVM/LLVM-3.7.1-foss-2015a.eb | 33 ++++++++++ .../l/libdrm/libdrm-2.4.68-foss-2015a.eb | 28 +++++++++ .../libpciaccess-0.13.4-foss-2015a.eb | 24 +++++++ .../m/Mesa/Mesa-11.2.1-foss-2015a.eb | 63 +++++++++++++++++++ .../makedepend/makedepend-1.0.5-foss-2015a.eb | 24 +++++++ 9 files changed, 277 insertions(+) create mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb create mode 100644 easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2015a.eb create mode 100644 easybuild/easyconfigs/e/eudev/eudev-3.1.5-foss-2015a.eb create mode 100644 easybuild/easyconfigs/g/gperf/gperf-3.0.4-foss-2015a.eb create mode 100644 easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb create mode 100644 easybuild/easyconfigs/l/libdrm/libdrm-2.4.68-foss-2015a.eb create mode 100644 easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2015a.eb create mode 100644 easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb create mode 100644 easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-foss-2015a.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb new file mode 100644 index 0000000000..618170db54 --- /dev/null +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -0,0 +1,38 @@ +name = 'CGAL' +version = '4.8.1' +gmpver = '6.0.0a' +pyver = '2.7.11' +glibver = '2.48.2' +versionsuffix = '-GLib-%s-Python-%s' % (glibver, pyver) + +homepage = 'http://www.cgal.org/' +description = """The goal of the CGAL Open Source Project is to provide easy access to efficient + and reliable geometric algorithms in the form of a C++ library.""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'strict': True} + +source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] +sources = [SOURCE_TAR_XZ] +checksums = ['1cbcb3f251822766ed3d744f923c782d'] + +dependencies = [ + ('Boost', '1.60.0'), + ('GLib', glibver), + ('GMP', gmpver), + ('libGLU', '9.0.0', '-Mesa-11.2.1'), + ('MPFR', '3.1.2', '-GMP-%s' % gmpver), + ('Qt', '4.8.7', versionsuffix), +] + +configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " +configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " +configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT +configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT + +builddependencies = [ + ('CMake', '3.4.1'), + ('Eigen', '3.2.9'), +] + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2015a.eb b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2015a.eb new file mode 100644 index 0000000000..308bb395d6 --- /dev/null +++ b/easybuild/easyconfigs/e/Eigen/Eigen-3.2.9-foss-2015a.eb @@ -0,0 +1,13 @@ +name = 'Eigen' +version = '3.2.9' + +homepage = 'http://eigen.tuxfamily.org/index.php?title=Main_Page' +description = """Eigen is a C++ template library for linear algebra: + matrices, vectors, numerical solvers, and related algorithms.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = ['http://bitbucket.org/%(namelower)s/%(namelower)s/get'] +sources = ['%(version)s.tar.bz2'] + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/e/eudev/eudev-3.1.5-foss-2015a.eb b/easybuild/easyconfigs/e/eudev/eudev-3.1.5-foss-2015a.eb new file mode 100644 index 0000000000..6fa9d11cb4 --- /dev/null +++ b/easybuild/easyconfigs/e/eudev/eudev-3.1.5-foss-2015a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'eudev' +version = '3.1.5' + +homepage = 'https://wiki.gentoo.org/wiki/Project:Eudev' +description = """eudev is a fork of systemd-udev with the goal of obtaining + better compatibility with existing software such as + OpenRC and Upstart, older kernels, various toolchains + and anything else required by users and various distributions.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://dev.gentoo.org/~blueness/%(name)s/'] +patches = ['%(name)s-3.1.2_pre-2.6.34_kernel.patch'] + +builddependencies = [ + ('gperf', '3.0.4'), +] + +osdependencies = [('kernel-headers', 'linux-libc-dev')] + +configopts = '--disable-blkid --disable-selinux --disable-gudev --disable-manpages ' +runtest = 'check' + +sanity_check_paths = { + 'files': ['bin/udevadm', 'include/libudev.h', 'include/udev.h', 'lib/libudev.so.1'], + 'dirs': [], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/g/gperf/gperf-3.0.4-foss-2015a.eb b/easybuild/easyconfigs/g/gperf/gperf-3.0.4-foss-2015a.eb new file mode 100644 index 0000000000..fa479b36e5 --- /dev/null +++ b/easybuild/easyconfigs/g/gperf/gperf-3.0.4-foss-2015a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'gperf' +version = '3.0.4' + +homepage = 'http://www.gnu.org/software/gperf/' +description = """GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash + function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash + function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single + string comparison only.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +sanity_check_paths = { + 'files': ['bin/gperf'], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb new file mode 100644 index 0000000000..031705af89 --- /dev/null +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb @@ -0,0 +1,33 @@ +name = "LLVM" +version = "3.7.1" + +homepage = 'http://llvm.org' +description = """A collection of modular and reusable compiler and toolchain technologies""" +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {} + +easyblock = 'ConfigureMake' + +sources = ['%(namelower)s-%(version)s.src.tar.xz'] +source_urls = ['http://llvm.org/releases/%(version)s'] + +builddependencies = [ + ('Python', '2.7.9'), +] + +# No build allowed in source dir +preconfigopts = "[ ! -e build ] && mkdir build && cd build &&" +configure_cmd_prefix = '../' + +# For llvmpy / Numba: +configopts = '--enable-optimized --enable-pic --enable-shared' +prebuildopts = 'cd build && REQUIRES_RTTI=1' + +preinstallopts = 'cd build &&' + +sanity_check_paths = { + 'files': ["lib/libLLVMCore.a", "include/llvm-c/Core.h"], + 'dirs': ["include/llvm", ] +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libdrm/libdrm-2.4.68-foss-2015a.eb b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.68-foss-2015a.eb new file mode 100644 index 0000000000..d976cb1a3f --- /dev/null +++ b/easybuild/easyconfigs/l/libdrm/libdrm-2.4.68-foss-2015a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'libdrm' +version = '2.4.68' + +homepage = 'http://dri.freedesktop.org' +description = """Direct Rendering Manager runtime library.""" + +source_urls = ['http://dri.freedesktop.org/libdrm/'] +sources = [SOURCELOWER_TAR_GZ] + +toolchain = {'name': 'foss', 'version': '2015a'} + +builddependencies = [ + ('libpthread-stubs', '0.3'), +] + +dependencies = [ + ('libpciaccess', '0.13.4'), +] + +sanity_check_paths = { + 'files': ['include/xf86drm.h', 'include/xf86drmMode.h', 'lib/libdrm_intel.%s' % SHLIB_EXT, + 'lib/libdrm_radeon.%s' % SHLIB_EXT, 'lib/libdrm.%s' % SHLIB_EXT, 'lib/libkms.%s' % SHLIB_EXT], + 'dirs': ['include/libdrm', 'include/libkms', 'lib/pkgconfig'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2015a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2015a.eb new file mode 100644 index 0000000000..d0b6288597 --- /dev/null +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2015a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libpciaccess' +version = '0.13.4' + +homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' +description = """Generic PCI access library.""" + +source_urls = ['https://www.x.org/releases/individual/lib/'] +sources = [SOURCE_TAR_GZ] + +toolchain = {'name': 'foss', 'version': '2015a'} + +builddependencies = [ + ('Autotools', '20150215'), + ('X11', '20160819'), +] + +sanity_check_paths = { + 'files': ['include/pciaccess.h', 'lib/libpciaccess.a'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'system' diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb new file mode 100644 index 0000000000..126c65abd6 --- /dev/null +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb @@ -0,0 +1,63 @@ +easyblock = 'ConfigureMake' + +name = 'Mesa' +version = '11.2.1' + +homepage = 'http://www.mesa3d.org/' +description = """Mesa is an open-source implementation of the OpenGL specification - + a system for rendering interactive 3D graphics.""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [ + 'https://mesa.freedesktop.org/archive/%(version)s', + 'ftp://ftp.freedesktop.org/pub/mesa/%(version)s', + 'ftp://ftp.freedesktop.org/pub/mesa/older-versions/%(version_major)s.x/%(version)s', +] + +builddependencies = [ + ('flex', '2.6.0'), + ('Bison', '3.0.4'), + ('Autotools', '20150215'), + ('pkg-config', '0.29.1'), + ('libpthread-stubs', '0.3'), + ('makedepend', '1.0.5'), +] + +dependencies = [ + ('eudev', '3.1.5'), + ('libxml2', '2.9.2'), + ('libdrm', '2.4.68'), + ('LLVM', '3.7.1'), + ('X11', '20160819'), +] + +# Use the os provided libudev or the EB provided eudev +#osdependencies = ['libudev'] + +# GLU is not part anymore of Mesa package! +configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" +configopts += " --enable-xlib-glx --disable-driglx-direct --with-gallium-drivers='swrast' --disable-egl" +configopts += " --with-osmesa-bits=32 --enable-texture-float " + +# package-config files for os dependencies are in an os specific place +# preconfigopts = 'libtoolize && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib64/pkgconfig/:/usr/share/pkgconfig" ' +preconfigopts = ' libtoolize && ' + +prebuildopts = 'env CPATH="$EBROOTLIBDRM/include/libdrm:$CPATH" ' + +sanity_check_paths = { + 'files': ['lib/libGL.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT, + 'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT, + 'include/GL/glext.h', 'include/GL/gl_mangle.h', + 'include/GL/glx.h', 'include/GL/osmesa.h', + 'include/GL/gl.h', 'include/GL/glxext.h', + 'include/GL/glx_mangle.h', 'include/GLES/gl.h', + 'include/GLES2/gl2.h', 'include/GLES3/gl3.h'], + 'dirs': [] +} + +maxparallel = 1 + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-foss-2015a.eb b/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-foss-2015a.eb new file mode 100644 index 0000000000..29786d5315 --- /dev/null +++ b/easybuild/easyconfigs/m/makedepend/makedepend-1.0.5-foss-2015a.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'makedepend' +version = '1.0.5' + +homepage = "http://www.linuxfromscratch.org/blfs/view/svn/x/makedepend.html" +description = "The makedepend package contains a C-preprocessor like utility to determine build-time dependencies." + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'optarch': True} + +sources = [SOURCE_TAR_GZ] +source_urls = [XORG_UTIL_SOURCE] + +builddependencies = [ + ('X11', '20160819'), +] + +sanity_check_paths = { + 'files': ['bin/makedepend'], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From daac9037af512c7c3d482c4013f25d4cdf256aab Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 2 Jun 2017 17:34:56 +1200 Subject: [PATCH 1204/1311] Additional dependencies --- .../g/GLib/GLib-2.48.2-foss-2015a.eb | 33 +++++++++++++++++++ .../libGLU-9.0.0-foss-2015a-Mesa-11.2.1.eb | 27 +++++++++++++++ ....7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 31 +++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb create mode 100644 easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-foss-2015a-Mesa-11.2.1.eb create mode 100644 easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb new file mode 100644 index 0000000000..9af7e1beb3 --- /dev/null +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'GLib' +version = '2.48.2' + +homepage = 'http://www.gtk.org/' +description = """GLib is one of the base libraries of the GTK+ project""" + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'pic': True} + +source_urls = [FTPGNOME_SOURCE] +sources = [SOURCELOWER_TAR_XZ] + +dependencies = [ + ('libffi', '3.2.1'), + ('gettext', '0.19.8'), + ('libxml2', '2.9.3'), + ('PCRE', '8.37'), +] + +builddependencies = [('Python', '2.7.9')] + +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap --with-pcre=system" + +postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] + +sanity_check_paths = { + 'files': ['lib/libglib-%(version_major)s.0.a', 'lib/libglib-%%(version_major)s.0.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-foss-2015a-Mesa-11.2.1.eb b/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-foss-2015a-Mesa-11.2.1.eb new file mode 100644 index 0000000000..ffcaba3d56 --- /dev/null +++ b/easybuild/easyconfigs/l/libGLU/libGLU-9.0.0-foss-2015a-Mesa-11.2.1.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'libGLU' +version = '9.0.0' + +homepage = 'ftp://ftp.freedesktop.org/pub/mesa/glu/' +description = """The OpenGL Utility Library (GLU) is a computer graphics library for OpenGL. """ + +toolchain = {'name': 'foss', 'version': '2015a'} +toolchainopts = {'pic': True} + +source_urls = ['ftp://ftp.freedesktop.org/pub/mesa/glu/'] +sources = ['glu-%(version)s.tar.bz2'] + +mesa_ver = '11.2.1' +versionsuffix = '-Mesa-%s' % mesa_ver + +dependencies = [ + ('Mesa', mesa_ver), +] + +sanity_check_paths = { + 'files': ['lib/libGLU.so.1'], + 'dirs': [], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb new file mode 100644 index 0000000000..ba744fff34 --- /dev/null +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -0,0 +1,31 @@ +name = 'Qt' +version = '4.8.7' +glib = 'GLib' +glibver = '2.48.2' +glibsuffix = '-%s-%s' % (glib, glibver) +python = 'Python' +pyver = '2.7.11' +pysuffix = '-%s-%s' % (python, pyver) +versionsuffix = '%s%s' % (glibsuffix, pysuffix) + +homepage = 'http://qt.io/' +description = "Qt is a comprehensive cross-platform C++ application framework." + +toolchain = {'name': 'foss', 'version': '2015a'} + +source_urls = [ + 'http://download.qt.io/official_releases/qt/%(version_major_minor)s/%(version)s/', + 'http://download.qt.io/archive/qt/%(version_major_minor)s/%(version)s/' +] +sources = ['%(namelower)s-everywhere-opensource-src-%(version)s.tar.gz'] + +patches = ['Qt-%(version)s_phonon-export.patch'] + +dependencies = [ + ('GLib', '2.48.2'), + ('libX11', '1.6.3', pysuffix), + ('libXt', '1.1.5', pysuffix), + ('libXrender', '0.9.9', pysuffix), +] + +moduleclass = 'devel' -- GitLab From 722ce562fc3fa30be225d4670301b21c465477bc Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 2 Jun 2017 13:03:54 -0500 Subject: [PATCH 1205/1311] adding easyconfigs: X11-20160819-GCCcore-5.4.0.eb --- .../x/X11/X11-20160819-GCCcore-5.4.0.eb | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 easybuild/easyconfigs/x/X11/X11-20160819-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/x/X11/X11-20160819-GCCcore-5.4.0.eb b/easybuild/easyconfigs/x/X11/X11-20160819-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..69f438faec --- /dev/null +++ b/easybuild/easyconfigs/x/X11/X11-20160819-GCCcore-5.4.0.eb @@ -0,0 +1,134 @@ +easyblock = 'Bundle' + +name = 'X11' +version = '20160819' + +homepage = 'https://www.x.org' +description = "The X Window System (X11) is a windowing system for bitmap displays" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [ + XORG_LIB_SOURCE, + XORG_PROTO_SOURCE, + 'http://xcb.freedesktop.org/dist/', + 'http://xkbcommon.org/download/', + 'http://cgit.freedesktop.org/xorg/util/macros/snapshot', +] + +builddependencies = [ + ('Autotools', '20150215'), + ('Bison', '3.0.4'), + ('gettext', '0.19.8'), + ('pkg-config', '0.29.1'), + ('binutils', '2.26', '', True), +] +dependencies = [ + ('freetype', '2.6.5'), + ('fontconfig', '2.12.1'), + ('zlib', '1.2.8'), + ('bzip2', '1.0.6'), +] + +default_easyblock = 'ConfigureMake' + +common_specs = { + 'sources': [SOURCE_TAR_GZ], + 'start_dir': '%(name)s-%(version)s', +} +components = [ + ('xorg-macros', '1.19.0', { + 'sources': ['util-macros-%(version)s.tar.gz'], + 'start_dir': 'util-macros-%(version)s', + }), + ('libpthread-stubs', '0.3', common_specs), + ('bigreqsproto', '1.1.2', common_specs), + ('compositeproto', '0.4.2', common_specs), + ('damageproto', '1.2.1', common_specs), + ('dmxproto', '2.3.1', common_specs), + ('dri2proto', '2.8', common_specs), + ('dri3proto', '1.0', common_specs), + ('fixesproto', '5.0', common_specs), + ('fontsproto', '2.1.3', common_specs), + ('glproto', '1.4.17', common_specs), + ('inputproto', '2.3.1', common_specs), + ('kbproto', '1.0.7', common_specs), + ('presentproto', '1.0', common_specs), + ('randrproto', '1.5.0', common_specs), + ('recordproto', '1.14.2', common_specs), + ('renderproto', '0.11', common_specs), + ('resourceproto', '1.2.0', common_specs), + ('scrnsaverproto', '1.2.2', common_specs), + ('videoproto', '2.3.3', common_specs), + ('xcmiscproto', '1.2.2', common_specs), + ('xextproto', '7.3.0', common_specs), + ('xf86bigfontproto', '1.2.0', common_specs), + ('xf86dgaproto', '2.1', common_specs), + ('xf86driproto', '2.1.1', common_specs), + ('xf86vidmodeproto', '2.3.1', common_specs), + ('xineramaproto', '1.2.1', common_specs), + ('xproto', '7.0.28', common_specs), + ('libXau', '1.0.8', common_specs), + ('libXdmcp', '1.1.2', common_specs), + ('xcb-proto', '1.11', common_specs), + ('libxcb', '1.11.1', common_specs), + ('xtrans', '1.3.5', common_specs), + ('libxkbcommon', '0.6.1', { + 'sources': ['libxkbcommon-%(version)s.tar.xz'], + 'start_dir': 'libxkbcommon-%(version)s', + }), + ('libX11', '1.6.3', common_specs), + ('libXext', '1.3.3', common_specs), + ('libFS', '1.0.7', common_specs), + ('libICE', '1.0.9', common_specs), + ('libSM', '1.2.2', common_specs), + ('libXScrnSaver', '1.2.2', common_specs), + ('libXt', '1.1.5', common_specs), + ('libXmu', '1.1.2', common_specs), + ('libXpm', '3.5.11', common_specs), + ('libXaw', '1.0.13', common_specs), + ('libXfixes', '5.0.2', common_specs), + ('libXcomposite', '0.4.4', common_specs), + ('libXrender', '0.9.9', common_specs), + ('libXcursor', '1.1.14', common_specs), + ('libXdamage', '1.1.4', common_specs), + ('libfontenc', '1.1.3', common_specs), + ('libXfont', '1.5.1', common_specs), + ('libXft', '2.3.2', common_specs), + ('libXi', '1.7.6', common_specs), + ('libXinerama', '1.1.3', common_specs), + ('libXrandr', '1.5.0', common_specs), + ('libXres', '1.0.7', common_specs), + ('libXtst', '1.2.2', common_specs), + ('libXv', '1.0.10', common_specs), + ('libXvMC', '1.0.9', common_specs), + ('libXxf86dga', '1.1.4', common_specs), + ('libXxf86vm', '1.1.4', common_specs), + ('libdmx', '1.1.3', common_specs), + ('libpciaccess', '0.13.4', common_specs), + ('libxkbfile', '1.0.9', common_specs), + ('libxshmfence', '1.2', common_specs), + ('xcb-util', '0.4.0', common_specs), + ('xcb-util-image', '0.4.0', common_specs), + ('xcb-util-keysyms', '0.4.0', common_specs), + ('xcb-util-renderutil', '0.3.9', common_specs), + ('xcb-util-wm', '0.4.1', common_specs), + ('xcb-util-cursor', '0.1.3', common_specs), +] + +# Python is required for xcb-proto +allow_system_deps = [('Python', SYS_PYTHON_VERSION)] +pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[0:2]) + +preconfigopts = "if [ ! -f configure ]; then ./autogen.sh; fi && " + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +full_sanity_check = True + +sanity_check_paths = { + 'files': ['include/X11/Xlib.h', 'include/X11/Xutil.h'], + 'dirs': ['include/GL', 'include/X11', 'include/X11/extensions', 'lib', + 'lib/python%s/site-packages/xcbgen' % pyshortver, 'lib/pkgconfig', 'share/pkgconfig'], +} + +moduleclass = 'vis' -- GitLab From 2bf7bc8bb1026af9f14f6b968e78eca8fb3f9d08 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 3 Jun 2017 12:06:50 +0200 Subject: [PATCH 1206/1311] consistently use --with-harfbuzz=no configure option in freetype easyconfigs --- .../easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb | 2 ++ .../f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.6.2-CrayGNU-2015.11.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2016a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-gimkl-2.11.5.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2015b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2016a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.3-foss-2016a.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.3-intel-2016a.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.5-foss-2016b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.6.5-intel-2016b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.7-foss-2016b.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.7-intel-2016b.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb | 2 ++ .../f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb | 2 ++ .../easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb | 2 ++ easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb | 2 ++ 39 files changed, 78 insertions(+) diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb index 7e51dd88f4..e8bc65d782 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-goolf-1.4.10.eb @@ -12,6 +12,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb index bcf6608413..7e75acce83 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.10-ictce-5.3.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb index 916f1302f2..dedbe863ab 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-goolf-1.4.10.eb @@ -12,6 +12,8 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = [GNU_SAVANNAH_SOURCE] sources = [SOURCE_TAR_GZ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb index 26eaffc5f6..10444c4ad7 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.4.11-ictce-5.3.0.eb @@ -11,6 +11,8 @@ toolchain = {'name': 'ictce', 'version': '5.3.0'} source_urls = ['http://download.savannah.gnu.org/releases/freetype/'] sources = [SOURCE_TAR_GZ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb index cbbe1daafc..b0e7a6a30e 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-goolf-1.4.10.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb index a5e70027fa..d1983d8529 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.3.0.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb index 8fa382b0ca..415101e28d 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.0.1-ictce-5.5.0.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.6')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb index 0571a145ad..64e6ea7181 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.2-ictce-5.5.0.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.9')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb index cea107f292..0d671ee5bb 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-foss-2014b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb index 9b0aae30b7..f35d8dc0c1 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-goolf-1.7.20.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb index 45d6dc8e93..fb9b9599e8 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.3-intel-2014b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.12')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb index c9b6e770b4..13b13e9cc7 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-foss-2015a.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb index 773f70da96..f26f3a1cf8 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb @@ -16,6 +16,8 @@ dependencies = [ ('zlib', '1.2.8') ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb index 07f4f8160c..3b19e21412 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015a.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb index 44080cb0f8..6d539701a6 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-intel-2015b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.16')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb index 7cfa18b2f4..352ce2f725 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-foss-2015a.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb index 78c7fb98d6..5930e1dad7 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-goolf-1.7.20.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb index 4cf88e23a7..febe99790f 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6-intel-2015a.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.17')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb index 8405a0ec93..4ed20bab25 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b-libpng-1.6.19.eb @@ -15,6 +15,8 @@ libpngver = '1.6.19' versionsuffix = '-libpng-%s' % libpngver dependencies = [('libpng', libpngver)] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb index 9c9d2b2e08..2b433c8140 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.1-intel-2015b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.18')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-CrayGNU-2015.11.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-CrayGNU-2015.11.eb index 7f9b603bc6..b8dc673ae8 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-CrayGNU-2015.11.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.21')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb index bbfd2a2508..8d1ddddc16 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015a.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.20')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb index 912f826139..446146f3b1 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2015b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.21')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2016a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2016a.eb index 932824a17e..75cf76d290 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2016a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-foss-2016a.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-gimkl-2.11.5.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-gimkl-2.11.5.eb index fec100e1f0..d00692c774 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-gimkl-2.11.5.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.21')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb index 7436cc5833..fefd237604 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb @@ -16,6 +16,8 @@ dependencies = [ ('zlib', '1.2.8') ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2015b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2015b.eb index 0811253154..896545c2ea 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2015b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2015b.eb @@ -13,6 +13,8 @@ sources = [SOURCE_TAR_GZ] dependencies = [('libpng', '1.6.21')] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2016a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2016a.eb index 60b3db5452..7b8aa9c093 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2016a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-intel-2016a.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.3-foss-2016a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.3-foss-2016a.eb index d267c83653..1b349e2706 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.3-foss-2016a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.3-foss-2016a.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.3-intel-2016a.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.3-intel-2016a.eb index 3d89e4bbb1..fe187d8408 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.3-intel-2016a.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.3-intel-2016a.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb index e1a17a86f6..5aca056975 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-GCCcore-5.4.0.eb @@ -19,6 +19,8 @@ dependencies = [ builddependencies = [('binutils', '2.26', '', True)] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-foss-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-foss-2016b.eb index 9156052c8f..f59391c7f9 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-foss-2016b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-foss-2016b.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-intel-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-intel-2016b.eb index bf9e0cfc01..68aae21c57 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.5-intel-2016b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.5-intel-2016b.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7-foss-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7-foss-2016b.eb index 8b88736d00..85f52fb15e 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7-foss-2016b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7-foss-2016b.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7-intel-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7-intel-2016b.eb index 52d8477931..154dcf903b 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7-intel-2016b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7-intel-2016b.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb index fee6777ad0..f01c0208b5 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-5.4.0.eb @@ -20,6 +20,8 @@ dependencies = [ # use same binutils version that was used when building GCCcore toolchain builddependencies = [('binutils', '2.26', '', True)] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb index 1b0dc16aba..8016819a78 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0-libpng-1.6.29.eb @@ -22,6 +22,8 @@ dependencies = [ # use same binutils version that was used when building GCCcore toolchain builddependencies = [('binutils', '2.27', '', True)] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb index 2892f7ffb0..50a10ef694 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-GCCcore-6.3.0.eb @@ -20,6 +20,8 @@ dependencies = [ # use same binutils version that was used when building GCCcore toolchain builddependencies = [('binutils', '2.27', '', True)] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb index d3a160563e..752f791cd9 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.7.1-intel-2016b.eb @@ -17,6 +17,8 @@ dependencies = [ ('zlib', '1.2.8'), ] +configopts = '--with-harfbuzz=no' + sanity_check_paths = { 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], -- GitLab From 3445b51503bfd360e60c2362d9a0e0f9dcece80d Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 6 Jun 2017 16:08:24 +1200 Subject: [PATCH 1207/1311] Add a comment re osdependencies and remove empty dependencies list --- easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb index d8773947c8..d199586122 100644 --- a/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb +++ b/easybuild/easyconfigs/c/CMake/CMake-3.6.1.eb @@ -14,10 +14,8 @@ sources = [SOURCELOWER_TAR_GZ] configopts = '-- -DCMAKE_USE_OPENSSL=1' -# Don't depend on anything, since we will use this to build other software -# which might want different versions of the same dependency, eg: ncurses -dependencies = [] - +# Use OS dependencies in order to ensure that CMake can build software that +# depends on them osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel'), 'ncurses-devel'] sanity_check_paths = { -- GitLab From 262754d0412e86ff7f5688966891b214743e8805 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 6 Jun 2017 16:14:08 +1200 Subject: [PATCH 1208/1311] Replace nonce variables with ordinary strings --- easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb | 4 +--- easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb | 4 +--- .../easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb index 1ed5c3adff..a390890a86 100644 --- a/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb +++ b/easybuild/easyconfigs/g/gimkl/gimkl-2017a.eb @@ -8,9 +8,7 @@ description = """GNU Compiler Collection (GCC) based compiler toolchain with Int toolchain = {'name': 'dummy', 'version': 'dummy'} -gccver = '5.4.0' -binutilsver = '2.26' -comp = ('GCC', '%s-%s' % (gccver, binutilsver)) +comp = ('GCC', '5.4.0-2.26') dependencies = [ comp, diff --git a/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb index faaefc8f0b..93489e6415 100644 --- a/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb +++ b/easybuild/easyconfigs/g/gimpi/gimpi-2017a.eb @@ -8,9 +8,7 @@ description = """GNU Compiler Collection (GCC) based compiler toolchain with Int toolchain = {'name': 'dummy', 'version': 'dummy'} -gccver = '5.4.0' -binutilsver = '2.26' -comp = ('GCC', '%s-%s' % (gccver, binutilsver)) +comp = ('GCC', '5.4.0-2.26') dependencies = [ comp, diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb index 596670ca45..106806006c 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb @@ -6,9 +6,7 @@ description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric messag passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" -gccver = '5.4.0' -binutilsver = '2.26' -toolchain = {'name': 'GCC', 'version': '%s-%s' % (gccver, binutilsver)} +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} sources = ['l_mpi_%(version)s.tgz'] checksums = ['d5e941ac2bcf7c5576f85f6bcfee4c18'] -- GitLab From 14e336473cfce9df9703c17b03a279c7221d0669 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 6 Jun 2017 09:31:15 +0200 Subject: [PATCH 1209/1311] adding easyconfigs: Perl4-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb --- ...-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/p/Perl4-CoreLibs/Perl4-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb diff --git a/easybuild/easyconfigs/p/Perl4-CoreLibs/Perl4-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/p/Perl4-CoreLibs/Perl4-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..5590b7d7de --- /dev/null +++ b/easybuild/easyconfigs/p/Perl4-CoreLibs/Perl4-CoreLibs-0.003-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,26 @@ +easyblock = 'PerlModule' + +name = 'Perl4-CoreLibs' +version = '0.003' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'https://metacpan.org/pod/Perl4::CoreLibs' +description = "Libraries historically supplied with Perl 4" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Perl', '5.24.1'), +] + +options = {'modulename': 'Perl4::CoreLibs'} + +sanity_check_paths = { + 'files': ['lib/perl5/site_perl/%(perlver)s/getopts.pl'], + 'dirs': [], +} + +moduleclass = 'data' -- GitLab From 2bae87de23179653f9e6b98fa456c40be3249c3b Mon Sep 17 00:00:00 2001 From: Jakob Schiotz Date: Tue, 6 Jun 2017 13:46:43 +0200 Subject: [PATCH 1210/1311] ImageMagick with FOSS 2016b tool chain and FFmpeg support. --- .../ImageMagick-7.0.5-10-foss-2016b.eb | 44 +++++++++++++++++++ .../j/JasPer/JasPer-2.0.12-foss-2016b.eb | 25 +++++++++++ .../l/LibTIFF/LibTIFF-4.0.7-foss-2016b.eb | 35 +++++++++++++++ .../l/LittleCMS/LittleCMS-2.8-foss-2016b.eb | 23 ++++++++++ .../libjpeg-turbo-1.5.1-foss-2016b.eb | 30 +++++++++++++ 5 files changed, 157 insertions(+) create mode 100644 easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb create mode 100644 easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb new file mode 100644 index 0000000000..c320486a5a --- /dev/null +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb @@ -0,0 +1,44 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Ravi Tripathi +# Email: ravi89@uab.edu + +easyblock = 'ConfigureMake' + +name = 'ImageMagick' +version = '7.0.5-10' + +homepage = 'http://www.imagemagick.org/' +description = """ImageMagick is a software suite to create, edit, compose, or convert bitmap images""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://www.imagemagick.org/download/releases/'] +#checksums = ['473a1e7ae37548eb6fe9cf2b1fb78011'] + +dependencies = [ + ('bzip2', '1.0.6'), + #('X11', '20170314'), # Conflicts with FFmpeg + ('X11', '20160819'), + ('Ghostscript', '9.20'), + ('JasPer', '2.0.12'), + ('libjpeg-turbo', '1.5.1'), + ('LibTIFF', '4.0.7'), + ('LittleCMS', '2.8'), + ('FFmpeg', '3.3.1'), +] + +builddependencies = [ + ('pkg-config', '0.29.1'), +] + +configopts = "--with-gslib --with-x" + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'etc/%(name)s-%(version_major)s', 'include/%(name)s-%(version_major)s', 'lib', 'share'], +} + +modextravars = {'MAGICK_HOME': '%(installdir)s'} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-foss-2016b.eb b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-foss-2016b.eb new file mode 100644 index 0000000000..c6d030f5e7 --- /dev/null +++ b/easybuild/easyconfigs/j/JasPer/JasPer-2.0.12-foss-2016b.eb @@ -0,0 +1,25 @@ +easyblock = 'CMakeMake' + +name = 'JasPer' +version = '2.0.12' + +homepage = 'http://www.ece.uvic.ca/~frodo/jasper/' +description = """The JasPer Project is an open-source initiative to provide a free + software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard.""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://www.ece.uvic.ca/~frodo/jasper/software/'] + +builddependencies = [('CMake', '3.7.2')] + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['bin/jasper', 'lib64/libjasper.%s' % SHLIB_EXT], + 'dirs': ['include'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-foss-2016b.eb b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-foss-2016b.eb new file mode 100644 index 0000000000..e74567cf30 --- /dev/null +++ b/easybuild/easyconfigs/l/LibTIFF/LibTIFF-4.0.7-foss-2016b.eb @@ -0,0 +1,35 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos , Alan O'Cais (JSC) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## +easyblock = 'ConfigureMake' + +name = 'LibTIFF' +version = '4.0.7' + +homepage = 'http://www.remotesensing.org/libtiff/' +description = "tiff: Library and tools for reading and writing TIFF data files" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [ + 'http://download.osgeo.org/libtiff/', + 'ftp://ftp.remotesensing.org/pub/libtiff/', +] +sources = ['tiff-%(version)s.tar.gz'] + +configopts = " --enable-ld-version-script " + +sanity_check_paths = { + 'files': ['bin/tiffinfo'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-foss-2016b.eb b/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-foss-2016b.eb new file mode 100644 index 0000000000..c553697d74 --- /dev/null +++ b/easybuild/easyconfigs/l/LittleCMS/LittleCMS-2.8-foss-2016b.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'LittleCMS' +version = '2.8' + +homepage = 'http://www.littlecms.com/' +description = """ Little CMS intends to be an OPEN SOURCE small-footprint color management engine, + with special focus on accuracy and performance. """ + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://sourceforge.net/projects/lcms/files/lcms/%(version)s/'] +sources = ['lcms2-%(version)s.tar.gz'] + +dependencies = [('libjpeg-turbo', '1.5.0')] + +sanity_check_paths = { + 'files': ['bin/jpgicc', 'bin/linkicc', 'bin/psicc', 'bin/transicc', 'include/lcms2.h', 'include/lcms2_plugin.h', + 'lib/liblcms2.a', 'lib/liblcms2.%s' % SHLIB_EXT, 'lib/pkgconfig/lcms2.pc'], + 'dirs': ['share/man'], +} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-foss-2016b.eb b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-foss-2016b.eb new file mode 100644 index 0000000000..7544c29c96 --- /dev/null +++ b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.1-foss-2016b.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'libjpeg-turbo' +version = '1.5.1' + +homepage = 'http://sourceforge.net/projects/libjpeg-turbo/' +description = """libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to accelerate baseline JPEG +compression and decompression. libjpeg is a library that implements JPEG image encoding, decoding and transcoding. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('NASM', '2.12.02'), +] + +configopts = "--with-jpeg8" +runtest = "test" + +sanity_check_paths = { + 'files': ['bin/cjpeg', 'bin/djpeg', 'bin/jpegtran', 'bin/rdjpgcom', 'bin/tjbench', 'bin/wrjpgcom', + 'lib/libjpeg.a', 'lib/libjpeg.%s' % SHLIB_EXT, 'lib/libturbojpeg.a', 'lib/libturbojpeg.%s' % SHLIB_EXT], + 'dirs': ['include', 'share'], +} + +moduleclass = 'lib' -- GitLab From 1c4c921fde96de1c75fa71272bdd7eb70f20b02e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 12:39:09 +1200 Subject: [PATCH 1211/1311] Remove superseded CGAL easyconfig without Qt deps etc --- .../c/CGAL/CGAL-4.8.1-foss-2015a.eb | 38 ------------------- .../libpthread-stubs-0.3-foss-2015a.eb | 20 ++++++++++ .../libpthread-stubs-0.3-foss-2016b.eb | 0 .../libpthread-stubs-0.3-intel-2016b.eb | 0 4 files changed, 20 insertions(+), 38 deletions(-) delete mode 100644 easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb create mode 100644 easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2015a.eb mode change 100755 => 100644 easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb mode change 100755 => 100644 easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb deleted file mode 100644 index f8ab683344..0000000000 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a.eb +++ /dev/null @@ -1,38 +0,0 @@ -name = 'CGAL' -version = '4.8.1' -gmpver = '6.0.0a' - -homepage = 'http://www.cgal.org/' -description = """The goal of the CGAL Open Source Project is to provide easy access to efficient - and reliable geometric algorithms in the form of a C++ library.""" - -toolchain = {'name': 'foss', 'version': '2015a'} -toolchainopts = {'strict': True} - -# note: source URL needs to be updated for a new version (checksums too)! -source_urls = ['https://github.com/%(name)s/%(namelower)s/releases/download/releases%2F%(name)s-%(version)s'] -sources = [SOURCE_TAR_XZ] -checksums = ['1cbcb3f251822766ed3d744f923c782d'] - -dependencies = [ - ('Boost', '1.60.0'), - ('GMP', gmpver), - ('MPFR', '3.1.2', '-GMP-%s' % gmpver), -] - -configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " -configopts += "-DBoost_INCLUDE_DIR=$EBROOTBOOST/include " -configopts += "-DBoost_LIBRARY_DIRS=$EBROOTBOOST/lib " -configopts += "-DBoost_SYSTEM_LIBRARY=$EBROOTBOOST/libboost_system.%s " % SHLIB_EXT -configopts += "-DBoost_THREAD_LIBRARY=$EBROOTBOOST/libboost_thread.%s " % SHLIB_EXT -configopts += "-DMPFR_INCLUDE_DIR=$EBROOTMPFR/include " -configopts += "-DMPFR_LIBRARIES=$EBROOTMPFR/lib/libmpfr.%s " % SHLIB_EXT -configopts += "-DGMP_INCLUDE_DIR=$EBROOTGMP/include " -configopts += "-DGMP_LIBRARIES=$EBROOTGMP/lib/libgmp.%s " % SHLIB_EXT -configopts += "-DGMP_LIBRARIES_DIR=$EBROOTGMP/lib " - -builddependencies = [ - ('CMake', '3.4.1'), -] - -moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2015a.eb b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2015a.eb new file mode 100644 index 0000000000..ab9b29a42e --- /dev/null +++ b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2015a.eb @@ -0,0 +1,20 @@ +easyblock = 'ConfigureMake' + +name = 'libpthread-stubs' +version = '0.3' + +homepage = 'http://xcb.freedesktop.org/' +description = """The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a small footprint, +latency hiding, direct access to the protocol, improved threading support, and extensibility.""" + +source_urls = ['http://xcb.freedesktop.org/dist/'] +sources = [SOURCELOWER_TAR_GZ] + +toolchain = {'name': 'foss', 'version': '2015a'} + +sanity_check_paths = { + 'files': ['lib/pkgconfig/pthread-stubs.pc'], + 'dirs': [], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-foss-2016b.eb old mode 100755 new mode 100644 diff --git a/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb b/easybuild/easyconfigs/l/libpthread-stubs/libpthread-stubs-0.3-intel-2016b.eb old mode 100755 new mode 100644 -- GitLab From ff12d96bb9c435aaa85e56a05bae48cf0fe5ddb0 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 12:49:06 +1200 Subject: [PATCH 1212/1311] Easyconfig (hitherto missing) for gettext --- .../g/gettext/gettext-0.19.8-foss-2015a.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2015a.eb diff --git a/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2015a.eb b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2015a.eb new file mode 100644 index 0000000000..482c543fe8 --- /dev/null +++ b/easybuild/easyconfigs/g/gettext/gettext-0.19.8-foss-2015a.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'gettext' +version = '0.19.8' + +homepage = 'http://www.gnu.org/software/gettext/' +description = """GNU 'gettext' is an important step for the GNU Translation Project, as it is an asset on which we may +build many other steps. This package offers to programmers, translators, and even users, a well integrated set of tools +and documentation""" + +toolchain = {'name': 'foss', 'version': '2015a'} + +sources = [SOURCE_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libxml2', '2.9.3'), + ('ncurses', '5.9'), +] + +configopts = '--without-emacs --with-libxml2-prefix=$EBROOTLIBXML2' + +moduleclass = 'vis' -- GitLab From ab941d89a7b4c73ba1c485f266e2c0aa68b8744e Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 13:08:18 +1200 Subject: [PATCH 1213/1311] Replace specific X11 libs with the whole X11 ensemble --- .../q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb index ba744fff34..fa6c4175a4 100644 --- a/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb +++ b/easybuild/easyconfigs/q/Qt/Qt-4.8.7-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -23,9 +23,7 @@ patches = ['Qt-%(version)s_phonon-export.patch'] dependencies = [ ('GLib', '2.48.2'), - ('libX11', '1.6.3', pysuffix), - ('libXt', '1.1.5', pysuffix), - ('libXrender', '0.9.9', pysuffix), + ('X11', '20160819'), ] moduleclass = 'devel' -- GitLab From 658e51307010c918a6da56dde208c5e87d1a710f Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 13:33:25 +1200 Subject: [PATCH 1214/1311] Use GMP built against GCC, not against foss-2015a toolchain --- .../c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb index 618170db54..462e46256b 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -19,7 +19,7 @@ checksums = ['1cbcb3f251822766ed3d744f923c782d'] dependencies = [ ('Boost', '1.60.0'), ('GLib', glibver), - ('GMP', gmpver), + ('GMP', gmpver, '', ('GCC', '4.9.2')), ('libGLU', '9.0.0', '-Mesa-11.2.1'), ('MPFR', '3.1.2', '-GMP-%s' % gmpver), ('Qt', '4.8.7', versionsuffix), -- GitLab From 8689888be2edfef451f561a8ee18c3425ddeadbe Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 14:03:16 +1200 Subject: [PATCH 1215/1311] Use libxml2 2.9.3 for the sake of consistency --- easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb index 126c65abd6..27ac3ec93c 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb @@ -27,7 +27,7 @@ builddependencies = [ dependencies = [ ('eudev', '3.1.5'), - ('libxml2', '2.9.2'), + ('libxml2', '2.9.3'), ('libdrm', '2.4.68'), ('LLVM', '3.7.1'), ('X11', '20160819'), -- GitLab From bc2f2c4ca80154ec8b8782fbd9b171ec1232abeb Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 14:18:21 +1200 Subject: [PATCH 1216/1311] Easyconfig for ncurses 6.0 with the gimkl 2017a toolchain --- .../n/ncurses/ncurses-6.0-gimkl-2017a.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/n/ncurses/ncurses-6.0-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/n/ncurses/ncurses-6.0-gimkl-2017a.eb b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-gimkl-2017a.eb new file mode 100644 index 0000000000..0f183aae81 --- /dev/null +++ b/easybuild/easyconfigs/n/ncurses/ncurses-6.0-gimkl-2017a.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'ncurses' +version = '6.0' + +homepage = 'http://www.gnu.org/software/ncurses/' +description = """The Ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, + and more. It uses Terminfo format, supports pads and color and multiple highlights and forms characters and + function-key mapping, and has all the other SYSV-curses enhancements over BSD Curses.""" + +toolchain = {'version': '2017a', 'name': 'gimkl'} +toolchainopts = {'pic': True} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +patches = ['ncurses-%(version)s_gcc-5.patch'] + +configopts = [ + # default build + '--with-shared --enable-overwrite', + # the UTF-8 enabled version (ncursesw) + '--with-shared --enable-overwrite --enable-ext-colors --enable-widec --includedir=%(installdir)s/include/ncursesw/' +] + +libs = ["form", "menu", "ncurses", "panel"] +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ["captoinfo", "clear", "infocmp", "infotocap", "ncurses%(version_major)s-config", + "reset", "tabs", "tic", "toe", "tput", "tset"]] + + ['lib/lib%s%s.a' % (x, y) for x in libs for y in ['', '_g', 'w', 'w_g']] + + ['lib/lib%s%s.so' % (x, y) for x in libs for y in ['', 'w']] + + ['lib/libncurses++%s.a' % x for x in ['', 'w']], + 'dirs': ['include', 'include/ncursesw'], +} + +moduleclass = 'devel' -- GitLab From af20584806bf6a8daecc635ec7efd99872f68489 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 15:54:57 +1200 Subject: [PATCH 1217/1311] Easyconfig for zlib 1.2.11 with the gimkl 2017a toolchain --- .../z/zlib/zlib-1.2.11-gimkl-2017a.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb new file mode 100644 index 0000000000..1362fe53c9 --- /dev/null +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'zlib' +version = '1.2.11' + +homepage = 'http://www.zlib.net/' +description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is, + not covered by any patents -- lossless data-compression library for use on virtually any + computer hardware and operating system.""" + +toolchain = {'version': '2017a', 'name': 'gimkl'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] + +sanity_check_paths = { + 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From b0a05fb4b685ef205ac36d04c2779d26e0050ffc Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 16:03:24 +1200 Subject: [PATCH 1218/1311] EasyConfigs for libxml2 2.9.4 and XZ 5.2.3 with the gimkl 2017a toolchain --- .../l/libxml2/libxml2-2.9.4-gimkl-2017a.eb | 23 ++++++++++++++ .../easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb | 30 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-gimkl-2017a.eb create mode 100644 easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-gimkl-2017a.eb b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-gimkl-2017a.eb new file mode 100644 index 0000000000..eaca2fc38e --- /dev/null +++ b/easybuild/easyconfigs/l/libxml2/libxml2-2.9.4-gimkl-2017a.eb @@ -0,0 +1,23 @@ +name = 'libxml2' +version = '2.9.4' + +homepage = 'http://xmlsoft.org/' +description = """Libxml2 is the XML C parser and +toolchain developed for the Gnome project + (but usable outside of the Gnome platform).""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = [ + 'http://xmlsoft.org/sources/', + 'http://xmlsoft.org/sources/old/' +] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('zlib', '1.2.11'), + ('XZ', '5.2.3'), +] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb new file mode 100644 index 0000000000..4b1d474ab3 --- /dev/null +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'XZ' +version = '5.2.3' + +homepage = 'http://tukaani.org/xz/' +description = "xz: XZ utilities" + +toolchain = {'version': '2017a', 'name': 'gimkl'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://tukaani.org/xz/'] + +# non-toolchain gettext because otherwise there is a circular dependency: +# XZ (presumably its executables) depends on gettext, which depends on +# xmllib2, which depends (optionally) on XZ +builddependencies = [ + ('Autotools', '20150215', '', True), + ('gettext', '0.19.8', '', True), +] + +# may become useful in non-x86 archs +#configopts = ' --disable-assembler ' + +sanity_check_paths = { + 'files': ["bin/xz", "bin/lzmainfo"], + 'dirs': [] +} + +moduleclass = 'tools' -- GitLab From eb65c292b8dbd6ba7e36cf8d5b394db95bcfcc8a Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 7 Jun 2017 16:21:10 +1200 Subject: [PATCH 1219/1311] Easyconfig for libreadline 6.3 with the gimkl 2017a toolchain --- .../libreadline-6.3-gimkl-2017a.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb new file mode 100644 index 0000000000..3c72c2c527 --- /dev/null +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libreadline' +version = '6.3' + +homepage = 'http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html' +description = """The GNU Readline library provides a set of functions for use by applications that + allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. + The Readline library includes additional functions to maintain a list of previously-entered command lines, + to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = ['readline-%(version)s.tar.gz'] +source_urls = ['http://ftp.gnu.org/gnu/readline'] + +patches = ['libreadline-%(version)s-bugfix.patch'] + +dependencies = [('ncurses', '6.0')] + +# for the termcap symbols, use EB ncurses +preconfigopts = "env LDFLAGS='-lncurses'" + +sanity_check_paths = { + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], +} + +moduleclass = 'lib' -- GitLab From e7ce769ab6bf187a0cfc09bf03ca3ba3b41d0201 Mon Sep 17 00:00:00 2001 From: Jakob Schiotz Date: Wed, 7 Jun 2017 11:08:50 +0200 Subject: [PATCH 1220/1311] Fix dependency conflicts. --- .../i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb index c320486a5a..c287c7aa6f 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb @@ -22,8 +22,8 @@ dependencies = [ ('X11', '20160819'), ('Ghostscript', '9.20'), ('JasPer', '2.0.12'), - ('libjpeg-turbo', '1.5.1'), - ('LibTIFF', '4.0.7'), + ('libjpeg-turbo', '1.5.0'), + ('LibTIFF', '4.0.6'), ('LittleCMS', '2.8'), ('FFmpeg', '3.3.1'), ] -- GitLab From 6fa82b503c46b2a8459f9c6c97bed2a3a9ffaae8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 7 Jun 2017 11:51:42 +0200 Subject: [PATCH 1221/1311] add vcfR extension in R 3.4.0 easyconfig --- easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb index 94a8307cc4..b17ecb1531 100644 --- a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -521,6 +521,9 @@ exts_list = [ ('oce', '0.9-21', ext_options), ('ineq', '0.2-13', ext_options), ('soundecology', '1.3.2', ext_options), + ('memuse', '3.0-1', ext_options), + ('pinfsc50', '1.1.0', ext_options), + ('vcfR', '1.5.0', ext_options), ] moduleclass = 'lang' -- GitLab From 6ea80c47ebcdffea6da6b8808252977077bb38a1 Mon Sep 17 00:00:00 2001 From: Jakob Schiotz Date: Wed, 7 Jun 2017 12:26:14 +0200 Subject: [PATCH 1222/1311] Add checksum --- .../i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb index c287c7aa6f..495de72aba 100644 --- a/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb +++ b/easybuild/easyconfigs/i/ImageMagick/ImageMagick-7.0.5-10-foss-2016b.eb @@ -14,11 +14,10 @@ toolchain = {'name': 'foss', 'version': '2016b'} sources = [SOURCE_TAR_GZ] source_urls = ['https://www.imagemagick.org/download/releases/'] -#checksums = ['473a1e7ae37548eb6fe9cf2b1fb78011'] +checksums = ['43912034c69171882536b359a7b84f9f'] dependencies = [ ('bzip2', '1.0.6'), - #('X11', '20170314'), # Conflicts with FFmpeg ('X11', '20160819'), ('Ghostscript', '9.20'), ('JasPer', '2.0.12'), -- GitLab From fee6089eeb307248d856fc8720c3c39bd225e9e4 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 8 Jun 2017 11:45:38 +0930 Subject: [PATCH 1223/1311] {bio}[foss/2016b] --- .../l/LUMPY/LUMPY-0.2.13-foss-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/l/LUMPY/LUMPY-0.2.13-foss-2016b.eb diff --git a/easybuild/easyconfigs/l/LUMPY/LUMPY-0.2.13-foss-2016b.eb b/easybuild/easyconfigs/l/LUMPY/LUMPY-0.2.13-foss-2016b.eb new file mode 100644 index 0000000000..a301016ab0 --- /dev/null +++ b/easybuild/easyconfigs/l/LUMPY/LUMPY-0.2.13-foss-2016b.eb @@ -0,0 +1,34 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: Copyright 2014-2017 adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exequiel Sepulveda +# License:: MIT +# +# Notes:: +## + +easyblock = 'MakeCp' + +name = 'LUMPY' +version = '0.2.13' + +homepage = 'https://github.com/arq5x/lumpy-sv' +description = """A probabilistic framework for structural variant discovery. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/arq5x/lumpy-sv/archive/'] +sources = ['%(version)s.tar.gz'] + +files_to_copy = [(['bin/*'], 'bin'), 'data', 'LICENSE'] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['lumpy', 'lumpyexpress']], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 8a9b2447b271975f6d62bdc24b3659b348720b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 08:48:00 +0200 Subject: [PATCH 1224/1311] Add BEDOPS 2.4.26 easyconfig --- .../easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb diff --git a/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb new file mode 100644 index 0000000000..79cc3e49ca --- /dev/null +++ b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb @@ -0,0 +1,26 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'Tarball' + +name = 'BEDOPS' +version = '2.4.26' + +homepage = 'http://bedops.readthedocs.io/en/latest/index.html' +description = """BEDOPS is an open-source command-line toolkit that performs highly efficient + and scalable Boolean and other set operations, statistical calculations, archiving, conversion + and other management of genomic data of arbitrary scale. Tasks can be easily split by chromosome + for distributing whole-genome analyses across a computational cluster.""" + +sources = ['%(namelower)s_linux_x86_64-v%(version)s.tar.bz2'] +source_urls = ['https://github.com/%(namelower)s/%(namelower)s/releases/download/v%(version)s/'] + +checksums = ['eb39bf1dadd138dff2faa45171f8f78e'] + +sanity_check_paths = { + 'files': ['bam2bed', '%(namelower)s', 'convert2bed', 'unstarch'], + 'dirs': ['.'], +} + +modextrapaths = {'PATH': ''} + +moduleclass = 'bio' -- GitLab From 7e3ce985151b5e28940d4dd87ea01bf3c9e9565f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 09:19:47 +0200 Subject: [PATCH 1225/1311] Add missing toolchain --- easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb index 79cc3e49ca..b96f53227b 100644 --- a/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb +++ b/easybuild/easyconfigs/b/BEDOPS/BEDOPS-2.4.26.eb @@ -11,6 +11,8 @@ description = """BEDOPS is an open-source command-line toolkit that performs hig and other management of genomic data of arbitrary scale. Tasks can be easily split by chromosome for distributing whole-genome analyses across a computational cluster.""" +toolchain = {'version': 'dummy', 'name': 'dummy'} + sources = ['%(namelower)s_linux_x86_64-v%(version)s.tar.bz2'] source_urls = ['https://github.com/%(namelower)s/%(namelower)s/releases/download/v%(version)s/'] -- GitLab From b4d309369914562cac73f4abba5fd5980c6cf415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 09:44:22 +0200 Subject: [PATCH 1226/1311] Add FASTA 36.3.5e foss-2016b --- .../f/FASTA/FASTA-36.3.5e-foss-2016b.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-foss-2016b.eb diff --git a/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-foss-2016b.eb b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-foss-2016b.eb new file mode 100644 index 0000000000..93fe9bd8a4 --- /dev/null +++ b/easybuild/easyconfigs/f/FASTA/FASTA-36.3.5e-foss-2016b.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'MakeCp' + +name = "FASTA" +version = "36.3.5e" + +homepage = 'http://fasta.bioch.virginia.edu' +description = """The FASTA programs find regions of local or global (new) similarity between +protein or DNA sequences, either by searching Protein or DNA databases, or by identifying +local duplications within a sequence.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://faculty.virginia.edu/wrpearson/fasta/fasta36'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['1c76727b3c61ca36bd19ce4da70c02fe'] + +buildopts = '-C ./src -f ../make/Makefile.linux_sse2 all' + +files_to_copy = ["bin", "conf", "data", "doc", "FASTA_LIST", "misc", "README", "seq", "sql", "test"] + +sanity_check_paths = { + 'files': ["FASTA_LIST", "README"] + ['bin/%s' % x for x in ['lav2svg', 'lav2ps', 'map_db']] + + ['bin/%s%%(version_major)s' % x for x in ['fasta', 'fastm', 'fastx', 'ggsearch', 'lalign', 'tfastf', + 'tfasts', 'tfasty', 'fastf', 'fasts', 'fasty', 'glsearch', + 'ssearch', 'tfastm', 'tfastx']], + 'dirs': ["conf", "data", "doc", "misc", "seq", "sql", "test"] +} + +moduleclass = 'bio' -- GitLab From 15b969586a2b84b0a2fab41e17a5f41c362b1217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 10:17:37 +0200 Subject: [PATCH 1227/1311] Add segemehl 0.2.0 foss-2016b --- .../s/segemehl/segemehl-0.2.0-foss-2016b.eb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb new file mode 100644 index 0000000000..7f59d53c66 --- /dev/null +++ b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb @@ -0,0 +1,38 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'MakeCp' + +name = "segemehl" +version = "0.2.0" + +homepage = 'http://www.bioinf.uni-leipzig.de/Software/segemehl/' +description = """ segemehl is a software to map short sequencer reads to reference genomes. + Unlike other methods, segemehl is able to detect not only mismatches but also insertions + and deletions. Furthermore, segemehl is not limited to a specific read length and is able + to mapprimer- or polyadenylation contaminated reads correctly. segemehl implements a matching + strategy based on enhanced suffix arrays (ESA). Segemehl now supports the SAM format, reads + gziped queries to save both disk and memory space and allows bisulfite sequencing mapping + and split read mapping. """ + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://www.bioinf.uni-leipzig.de/Software/segemehl/'] +sources = ['%s_%s.tar.gz' % (name, version.replace('.','_'))] + +checksums = ['fef4db00ed2742a2bf4131eed674bb08'] + +parallel = 1 + +dependencies = [ + ('ncurses', '5.9'), + ('zlib', '1.2.8'), +] + +files_to_copy = [(["lack.x", "segemehl.x", "testrealign.x"], "bin")] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["lack.x" , "segemehl.x", "testrealign.x"]], + 'dirs': ["."] +} + +moduleclass = 'bio' -- GitLab From c697d989a4751a2cec405ede613df73e3842429f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 10:25:31 +0200 Subject: [PATCH 1228/1311] Add StringTie 1.3.3b foss-2016b --- .../StringTie/StringTie-1.3.3b-foss-2016b.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/s/StringTie/StringTie-1.3.3b-foss-2016b.eb diff --git a/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3b-foss-2016b.eb b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3b-foss-2016b.eb new file mode 100644 index 0000000000..d1eb27f7fe --- /dev/null +++ b/easybuild/easyconfigs/s/StringTie/StringTie-1.3.3b-foss-2016b.eb @@ -0,0 +1,25 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'MakeCp' + +name = 'StringTie' +version = "1.3.3b" + +homepage = 'http://ccb.jhu.edu/software/stringtie/' +description = """StringTie is a fast and highly efficient assembler of RNA-Seq alignments into potential transcripts.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://ccb.jhu.edu/software/stringtie/dl/'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['8f9ed07ff532a0641cd04b23e27eb547'] + +files_to_copy = [(['stringtie'], 'bin'), 'README', 'LICENSE'] + +sanity_check_paths = { + 'files': ['bin/stringtie'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From aee428fc62cb76252e4a9bb5a8e3b1580bcf904d Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Thu, 8 Jun 2017 10:49:53 +0200 Subject: [PATCH 1229/1311] adding easyconfigs: DIAMOND-0.9.6-goolf-1.7.20.eb --- .../d/DIAMOND/DIAMOND-0.9.6-goolf-1.7.20.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.9.6-goolf-1.7.20.eb diff --git a/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.9.6-goolf-1.7.20.eb b/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.9.6-goolf-1.7.20.eb new file mode 100644 index 0000000000..bc285581b6 --- /dev/null +++ b/easybuild/easyconfigs/d/DIAMOND/DIAMOND-0.9.6-goolf-1.7.20.eb @@ -0,0 +1,32 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = "CMakeMake" + +name = 'DIAMOND' +version = '0.9.6' + +homepage = 'https://github.com/bbuchfink/diamond' +description = """Accelerated BLAST compatible local sequence aligner""" + +toolchain = {'name': 'goolf', 'version': '1.7.20'} + +source_urls = ['https://github.com/bbuchfink/diamond/archive/'] +sources = ['v%(version)s.tar.gz'] + +separate_build_dir = True + +builddependencies = [('CMake', '3.4.3')] + +dependencies = [ + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['bin/diamond'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From dec1652bd49f3019b46eeb442a0ef37b99b74c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 8 Jun 2017 11:29:47 +0200 Subject: [PATCH 1230/1311] Add requested changes Use ncurses 6.0 instead of 5.9 and empty sanity check directory list instead of current directory. --- easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb index 7f59d53c66..c7d6d5fcae 100644 --- a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb +++ b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb @@ -24,7 +24,7 @@ checksums = ['fef4db00ed2742a2bf4131eed674bb08'] parallel = 1 dependencies = [ - ('ncurses', '5.9'), + ('ncurses', '6.0'), ('zlib', '1.2.8'), ] @@ -32,7 +32,7 @@ files_to_copy = [(["lack.x", "segemehl.x", "testrealign.x"], "bin")] sanity_check_paths = { 'files': ["bin/%s" % x for x in ["lack.x" , "segemehl.x", "testrealign.x"]], - 'dirs': ["."] + 'dirs': [] } moduleclass = 'bio' -- GitLab From 3a9d057a7240d86e5de526442e819f4e7997aa32 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Jun 2017 11:59:46 +0200 Subject: [PATCH 1231/1311] fix source URL for SQLite 3.8.9 --- easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb index 45f98b9cdb..8c66a0ef4c 100644 --- a/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.8.9-foss-2015a.eb @@ -19,7 +19,7 @@ homepage = 'http://www.hwaci.com/sw/sqlite/' description = "SQLite: SQL Database Engine in a C Library" # eg. http://www.hwaci.com/sw/sqlite/2013/sqlite-autoconf-3080100.tar.gz -source_urls = ['http://www.hwaci.com/sw/sqlite/2013'] +source_urls = ['http://www.sqlite.org/2015/'] sources = ['sqlite-autoconf-%s0%s0%s00.tar.gz' % tuple(version.split('.'))] # very weird way to calculate your filename toolchain = {'name': 'foss', 'version': '2015a'} -- GitLab From 080305d7b42b72cc2651ab8e3b3292078671e400 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Jun 2017 12:04:31 +0200 Subject: [PATCH 1232/1311] use cpan.metacpan.org source URLs for Perl extensions, avoid hardcoding versions in source names --- .../p/Perl/Perl-5.22.0-foss-2015a-mt.eb | 517 +++++++++--------- .../p/Perl/Perl-5.22.0-foss-2015a.eb | 516 ++++++++--------- 2 files changed, 519 insertions(+), 514 deletions(-) diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb index 1311c9dfcc..7b23b1c105 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb @@ -22,873 +22,876 @@ sources = [SOURCELOWER_TAR_GZ] exts_list = [ ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason - 'source_tmpl': 'Module-Build-0.4210.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Module/LEONT/'], + 'source_tmpl': 'Module-Build-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::MakeMaker', '7.04', { - 'source_tmpl': 'ExtUtils-MakeMaker-7.04.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], + 'source_tmpl': 'ExtUtils-MakeMaker-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], }), ('local::lib', '2.000011', { - 'source_tmpl': 'local-lib-2.000011.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], - }), + 'source_tmpl': 'local-lib-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], + ):, ('IO::String', '1.08', { - 'source_tmpl': 'IO-String-1.08.tar.gz', + 'source_tmpl': 'IO-String-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Data::Stag', '0.14', { - 'source_tmpl': 'Data-Stag-0.14.tar.gz', + 'source_tmpl': 'Data-Stag-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], }), ('DB_File', '1.835', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], + 'source_tmpl': 'DB_File-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PM/PMQS/'], }), ('DBI', '1.633', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], + 'source_tmpl': 'DBI-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TI/TIMB/'], }), ('Sub::Uplevel', '0.25', { - 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], + 'source_tmpl': 'Sub-Uplevel-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], }), ('Tree::DAG_Node', '1.26', { - 'source_tmpl': 'Tree-DAG_Node-1.26.tgz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Tree/RSAVAGE/'], + 'source_tmpl': 'Tree-DAG_Node-%(version)s.tgz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], }), ('Try::Tiny', '0.22', { - 'source_tmpl': 'Try-Tiny-0.22.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + 'source_tmpl': 'Try-Tiny-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Devel::StackTrace', '2.00', { - 'source_tmpl': 'Devel-StackTrace-2.00.tar.gz', + 'source_tmpl': 'Devel-StackTrace-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Data::Inheritable', '0.08', { - 'source_tmpl': 'Class-Data-Inheritable-0.08.tar.gz', + 'source_tmpl': 'Class-Data-Inheritable-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('Exception::Class', '1.39', { - 'source_tmpl': 'Exception-Class-1.39.tar.gz', + 'source_tmpl': 'Exception-Class-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Test::Fatal', '0.014', { - 'source_tmpl': 'Test-Fatal-0.014.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], + 'source_tmpl': 'Test-Fatal-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Test::NoWarnings', '1.04', { - 'source_tmpl': 'Test-NoWarnings-1.04.tar.gz', + 'source_tmpl': 'Test-NoWarnings-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Test::Deep', '0.117', { - 'source_tmpl': 'Test-Deep-0.117.tar.gz', + 'source_tmpl': 'Test-Deep-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Algorithm::Diff', '1.15', { - 'source_tmpl': 'Algorithm-Diff-1.15.tar.gz', + 'source_tmpl': 'Algorithm-Diff-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/'], }), ('Text::Diff', '1.41', { - 'source_tmpl': 'Text-Diff-1.41.tar.gz', + 'source_tmpl': 'Text-Diff-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Test::Differences', '0.61', { - 'source_tmpl': 'Test-Differences-0.61.tar.gz', + 'source_tmpl': 'Test-Differences-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Test::Exception', '0.32', { - 'source_tmpl': 'Test-Exception-0.32.tar.gz', + 'source_tmpl': 'Test-Exception-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADIE/'], }), ('Test::Warn', '0.30', { - 'source_tmpl': 'Test-Warn-0.30.tar.gz', + 'source_tmpl': 'Test-Warn-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Test::Requires', '0.08', { - 'source_tmpl': 'Test-Requires-0.08.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], + 'source_tmpl': 'Test-Requires-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM'], }), ('Test::Tester', '0.109', { - 'source_tmpl': 'Test-Tester-0.109.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/FDALY/'], + 'source_tmpl': 'Test-Tester-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FD/FDALY'], }), ('File::Slurp::Tiny', '0.003', { - 'source_tmpl': 'File-Slurp-Tiny-0.003.tar.gz', + 'source_tmpl': 'File-Slurp-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('Params::Util', '1.07', { - 'source_tmpl': 'Params-Util-1.07.tar.gz', + 'source_tmpl': 'Params-Util-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Sub::Install', '0.928', { - 'source_tmpl': 'Sub-Install-0.928.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], + 'source_tmpl': 'Sub-Install-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Data::OptList', '0.109', { - 'source_tmpl': 'Data-OptList-0.109.tar.gz', + 'source_tmpl': 'Data-OptList-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Sub::Exporter', '0.987', { - 'source_tmpl': 'Sub-Exporter-0.987.tar.gz', + 'source_tmpl': 'Sub-Exporter-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Capture::Tiny', '0.30', { - 'source_tmpl': 'Capture-Tiny-0.30.tar.gz', + 'source_tmpl': 'Capture-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], }), ('Test::Output', '1.03', { - 'source_tmpl': 'Test-Output-1.03.tar.gz', + 'source_tmpl': 'Test-Output-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BD/BDFOY/'], }), ('Module::Runtime', '0.014', { - 'source_tmpl': 'Module-Runtime-0.014.tar.gz', + 'source_tmpl': 'Module-Runtime-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/'], }), ('Module::Implementation', '0.09', { - 'source_tmpl': 'Module-Implementation-0.09.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], + 'source_tmpl': 'Module-Implementation-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('List::MoreUtils', '0.413', { - 'source_tmpl': 'List-MoreUtils-0.413.tar.gz', + 'source_tmpl': 'List-MoreUtils-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Package::DeprecationManager', '0.14', { - 'source_tmpl': 'Package-DeprecationManager-0.14.tar.gz', + 'source_tmpl': 'Package-DeprecationManager-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Dist::CheckConflicts', '0.11', { - 'source_tmpl': 'Dist-CheckConflicts-0.11.tar.gz', + 'source_tmpl': 'Dist-CheckConflicts-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Package::Stash', '0.37', { - 'source_tmpl': 'Package-Stash-0.37.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], + 'source_tmpl': 'Package-Stash-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Class::Load', '0.23', { - 'source_tmpl': 'Class-Load-0.23.tar.gz', + 'source_tmpl': 'Class-Load-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('TAP::Harness::Env', '3.35', { - 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_tmpl': 'Test-Harness-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('ExtUtils::Helpers', '0.022', { - 'source_tmpl': 'ExtUtils-Helpers-0.022.tar.gz', + 'source_tmpl': 'ExtUtils-Helpers-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::Config', '0.008', { - 'source_tmpl': 'ExtUtils-Config-0.008.tar.gz', + 'source_tmpl': 'ExtUtils-Config-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::InstallPaths', '0.011', { - 'source_tmpl': 'ExtUtils-InstallPaths-0.011.tar.gz', + 'source_tmpl': 'ExtUtils-InstallPaths-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('Module::Build::Tiny', '0.039', { - 'source_tmpl': 'Module-Build-Tiny-0.039.tar.gz', + 'source_tmpl': 'Module-Build-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('MRO::Compat', '0.12', { - 'source_tmpl': 'MRO-Compat-0.12.tar.gz', + 'source_tmpl': 'MRO-Compat-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BO/BOBTFISH/'], }), ('Sub::Name', '0.05', { - 'source_tmpl': 'Sub-Name-0.05.tar.gz', + 'source_tmpl': 'Sub-Name-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FL/FLORA/'], }), ('Eval::Closure', '0.13', { - 'source_tmpl': 'Eval-Closure-0.13.tar.gz', + 'source_tmpl': 'Eval-Closure-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Sub::Exporter::Progressive', '0.001011', { - 'source_tmpl': 'Sub-Exporter-Progressive-0.001011.tar.gz', + 'source_tmpl': 'Sub-Exporter-Progressive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], }), ('Devel::GlobalDestruction', '0.13', { - 'source_tmpl': 'Devel-GlobalDestruction-0.13.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + 'source_tmpl': 'Devel-GlobalDestruction-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('boolean', '0.45', { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'boolean-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('Tie::IxHash', '1.23', { - 'source_tmpl': 'Tie-IxHash-1.23.tar.gz', + 'source_tmpl': 'Tie-IxHash-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Moose', '2.1405', { - 'source_urls': ['http://www.cpan.org/modules/by-module/MooseX/ETHER/'], + 'source_tmpl': 'Moose-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Package::Stash::XS', '0.28', { - 'source_tmpl': 'Package-Stash-XS-0.28.tar.gz', + 'source_tmpl': 'Package-Stash-XS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Params::Validate', '1.20', { - 'source_tmpl': 'Params-Validate-1.20.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], + 'source_tmpl': 'Params-Validate-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Load::XS', '0.09', { - 'source_tmpl': 'Class-Load-XS-0.09.tar.gz', + 'source_tmpl': 'Class-Load-XS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), - # For uoa00001, Zendesk #9076 ('Math::CDF', '0.1', { - 'source_tmpl': 'Math-CDF-0.1.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], + 'source_tmpl': 'Math-CDF-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CA/CALLAHAN/'], }), - ('DateTime::Locale', '0.46', { - 'source_tmpl': 'DateTime-Locale-0.46.tar.gz', + 'source_tmpl': 'DateTime-Locale-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Singleton', '1.4', { - 'source_tmpl': 'Class-Singleton-1.4.tar.gz', + 'source_tmpl': 'Class-Singleton-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('DateTime::TimeZone', '1.92', { - 'source_tmpl': 'DateTime-TimeZone-1.92.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + 'source_tmpl': 'DateTime-TimeZone-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Test::Warnings', '0.021', { - 'source_tmpl': 'Test-Warnings-0.021.tar.gz', + 'source_tmpl': 'Test-Warnings-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Data::Types', '0.09', { - 'source_tmpl': 'Data-Types-0.09.tar.gz', + 'source_tmpl': 'Data-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], }), ('Exporter::Tiny', '0.042', { - 'source_tmpl': 'Exporter-Tiny-0.042.tar.gz', + 'source_tmpl': 'Exporter-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], }), - ('List::AllUtils', '0.09', { - 'source_tmpl': 'List-AllUtils-0.09.tar.gz', + 'source_tmpl': 'List-AllUtils-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('DateTime', '1.20', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + 'source_tmpl': 'DateTime-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('DateTime::Tiny', '1.04', { - 'source_tmpl': 'DateTime-Tiny-1.04.tar.gz', + 'source_tmpl': 'DateTime-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('File::Slurp', '9999.19', { - 'source_tmpl': 'File-Slurp-9999.19.tar.gz', + 'source_tmpl': 'File-Slurp-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/U/UR/URI/'], }), ('HTTP::Date', '6.02', { - 'source_tmpl': 'HTTP-Date-6.02.tar.gz', + 'source_tmpl': 'HTTP-Date-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('IO::HTML', '1.001', { - 'source_tmpl': 'IO-HTML-1.001.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/IO/CJM/'], + 'source_tmpl': 'IO-HTML-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], }), ('LWP::MediaTypes', '6.02', { - 'source_tmpl': 'LWP-MediaTypes-6.02.tar.gz', + 'source_tmpl': 'LWP-MediaTypes-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('URI', '1.69', { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + 'source_tmpl': 'URI-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Encode::Locale', '1.05', { - 'source_tmpl': 'Encode-Locale-1.05.tar.gz', + 'source_tmpl': 'Encode-Locale-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Request', '6.06', { - 'source_tmpl': 'HTTP-Message-6.06.tar.gz', + 'source_tmpl': 'HTTP-Message-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTML::Tagset', '3.20', { - 'source_tmpl': 'HTML-Tagset-3.20.tar.gz', + 'source_tmpl': 'HTML-Tagset-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PETDANCE/'], }), ('HTML::Entities', '3.71', { - 'source_tmpl': 'HTML-Parser-3.71.tar.gz', + 'source_tmpl': 'HTML-Parser-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('File::Listing', '6.04', { - 'source_tmpl': 'File-Listing-6.04.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + 'source_tmpl': 'File-Listing-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('AnyEvent', '7.09', { + 'source_tmpl': 'AnyEvent-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/'], }), ('Devel::CheckCompiler', '0.06', { - 'source_tmpl': 'Devel-CheckCompiler-0.06.tar.gz', + 'source_tmpl': 'Devel-CheckCompiler-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], }), ('File::Copy::Recursive', '0.38', { - 'source_tmpl': 'File-Copy-Recursive-0.38.tar.gz', + 'source_tmpl': 'File-Copy-Recursive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DM/DMUEY/'], }), ('Cwd::Guard', '0.04', { - 'source_tmpl': 'Cwd-Guard-0.04.tar.gz', + 'source_tmpl': 'Cwd-Guard-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], }), ('Module::Build::XSUtil', '0.16', { - 'source_tmpl': 'Module-Build-XSUtil-0.16.tar.gz', + 'source_tmpl': 'Module-Build-XSUtil-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO/'], }), ('LWP', '6.13', { - 'source_tmpl': 'libwww-perl-6.13.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + 'source_tmpl': 'libwww-perl-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Fennec::Lite', '0.004', { - 'source_tmpl': 'Fennec-Lite-0.004.tar.gz', + 'source_tmpl': 'Fennec-Lite-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('aliased', '0.31', { + 'source_tmpl': 'aliased-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Meta::Builder', '0.003', { - 'source_tmpl': 'Meta-Builder-0.003.tar.gz', + 'source_tmpl': 'Meta-Builder-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Exporter::Declare', '0.114', { - 'source_tmpl': 'Exporter-Declare-0.114.tar.gz', + 'source_tmpl': 'Exporter-Declare-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Mock::Quick', '1.108', { - 'source_tmpl': 'Mock-Quick-1.108.tar.gz', + 'source_tmpl': 'Mock-Quick-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Test::Exception::LessClever', '0.006', { - 'source_tmpl': 'Test-Exception-LessClever-0.006.tar.gz', + 'source_tmpl': 'Test-Exception-LessClever-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Test::LeakTrace', '0.15', { - 'source_tmpl': 'Test-LeakTrace-0.15.tar.gz', + 'source_tmpl': 'Test-LeakTrace-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], }), ('Mouse', '2.4.2', { + 'source_tmpl': 'Mouse-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], }), ('XML::NamespaceSupport', '1.11', { - 'source_tmpl': 'XML-NamespaceSupport-1.11.tar.gz', + 'source_tmpl': 'XML-NamespaceSupport-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], }), ('XML::SAX::Base', '1.08', { - 'source_tmpl': 'XML-SAX-Base-1.08.tar.gz', + 'source_tmpl': 'XML-SAX-Base-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::SAX', '0.99', { - 'source_tmpl': 'XML-SAX-0.99.tar.gz', + 'source_tmpl': 'XML-SAX-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::LibXML', '2.0121', { - 'source_tmpl': 'XML-LibXML-2.0121.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + 'source_tmpl': 'XML-LibXML-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Clone', '0.38', { - 'source_tmpl': 'Clone-0.38.tar.gz', + 'source_tmpl': 'Clone-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GARU'], }), ('Config::General', '2.58', { - 'source_tmpl': 'Config-General-2.58.tar.gz', + 'source_tmpl': 'Config-General-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], }), ('Test::Simple', '0.98', { - 'source_tmpl': 'Test-Simple-0.98_05.tar.gz', + 'source_tmpl': 'Test-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSCHWERN'], }), ('Font::TTF', '1.05', { - 'source_tmpl': 'Font-TTF-1.05.tar.gz', + 'source_tmpl': 'Font-TTF-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHOSKEN'], }), ('IO::Tty', '1.12', { - 'source_tmpl': 'IO-Tty-1.12.tar.gz', + 'source_tmpl': 'IO-Tty-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], }), ('Math::Bezier', '0.01', { - 'source_tmpl': 'Math-Bezier-0.01.tar.gz', + 'source_tmpl': 'Math-Bezier-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW'], }), ('IPC::Run', '0.94', { - 'source_tmpl': 'IPC-Run-0.94.tar.gz', + 'source_tmpl': 'IPC-Run-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], }), ('Math::Round', '0.07', { - 'source_tmpl': 'Math-Round-0.07.tar.gz', + 'source_tmpl': 'Math-Round-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], }), ('B::LintSubs', '0.06', { - 'source_tmpl': 'B-LintSubs-0.06.tar.gz', + 'source_tmpl': 'B-LintSubs-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PEVANS'], }), ('Math::VecStat', '0.08', { - 'source_tmpl': 'Math-VecStat-0.08.tar.gz', + 'source_tmpl': 'Math-VecStat-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], }), ('Test::Most', '0.34', { - 'source_tmpl': 'Test-Most-0.34.tar.gz', + 'source_tmpl': 'Test-Most-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Readonly', '1.04', { - 'source_tmpl': 'Readonly-1.04.tar.gz', + 'source_tmpl': 'Readonly-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SA/SANKO/'], }), ('Regexp::Common', '2013031301', { - 'source_tmpl': 'Regexp-Common-2013031301.tar.gz', + 'source_tmpl': 'Regexp-Common-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], }), ('Want', '0.26', { - 'source_tmpl': 'Want-0.26.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], + 'source_tmpl': 'Want-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RO/ROBIN/'], }), ('DBD::SQLite', '1.48', { - 'source_tmpl': 'DBD-SQLite-1.48.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], + 'source_tmpl': 'DBD-SQLite-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/'], }), ('Set::IntSpan', '1.19', { - 'source_tmpl': 'Set-IntSpan-1.19.tar.gz', + 'source_tmpl': 'Set-IntSpan-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SW/SWMCD'], }), ('forks', '0.36', { - 'source_tmpl': 'forks-0.36.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], + 'source_tmpl': 'forks-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RY/RYBSKEJ/'], }), ('File::Which', '1.09', { - 'source_tmpl': 'File-Which-1.09.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + 'source_tmpl': 'File-Which-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), - ('Perl::Unsafe::Signals', '', { - 'source_tmpl': 'Perl-Unsafe-Signals-0.02.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], + ('Perl::Unsafe::Signals', '0.02', { + 'source_tmpl': 'Perl-Unsafe-Signals-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGARCIA/'], }), ('Bit::Vector', '7.4', { - 'source_tmpl': 'Bit-Vector-7.4.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], + 'source_tmpl': 'Bit-Vector-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/ST/STBEY/'], }), ('Parse::RecDescent', '1.967009', { - 'source_tmpl': 'Parse-RecDescent-1.967009.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], + 'source_tmpl': 'Parse-RecDescent-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JT/JTBRAUN/'], }), ('Inline', '0.80', { - 'source_tmpl': 'Inline-0.80.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'Inline-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('File::ShareDir::Install', '0.10', { - 'source_tmpl': 'File-ShareDir-Install-0.10.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GW/GWYN/'], + 'source_tmpl': 'File-ShareDir-Install-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GW/GWYN/'], }), ('Inline::C', '0.76', { - 'source_tmpl': 'Inline-C-0.76.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'Inline-C-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('IO::All', '0.85', { - 'source_tmpl': 'IO-All-0.85.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], + 'source_tmpl': 'IO-All-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], }), ('IO::Prompt', '0.997002', { - 'source_tmpl': 'IO-Prompt-0.997002.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], + 'source_tmpl': 'IO-Prompt-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DC/DCONWAY/'], }), ('Getopt::Long', '2.47', { - 'source_tmpl': 'Getopt-Long-2.47.tar.gz', + 'source_tmpl': 'Getopt-Long-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JV/JV/'], }), ('AppConfig', '1.66', { + 'source_tmpl': 'AppConfig-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('Archive::Extract', '0.76', { - 'source_tmpl': 'Archive-Extract-0.76.tar.gz', + 'source_tmpl': 'Archive-Extract-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Archive::Tar', '2.08', { - 'source_tmpl': 'Archive-Tar-2.08.tar.gz', + 'source_tmpl': 'Archive-Tar-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Archive::Zip', '1.57', { - 'source_tmpl': 'Archive-Zip-1.57.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], + 'source_tmpl': 'Archive-Zip-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PH/PHRED/'], }), ('Authen::SASL', '2.16', { - 'source_tmpl': 'Authen-SASL-2.16.tar.gz', + 'source_tmpl': 'Authen-SASL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], }), ('B::Lint', '1.20', { - 'source_tmpl': 'B-Lint-1.20.tar.gz', + 'source_tmpl': 'B-Lint-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), # BioPerl bundle was here ('Class::Accessor', '0.34', { - 'source_tmpl': 'Class-Accessor-0.34.tar.gz', + 'source_tmpl': 'Class-Accessor-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('Class::DBI', '3.0.17', { - 'source_tmpl': 'Class-DBI-v3.0.17.tar.gz', + 'source_tmpl': 'Class-DBI-v%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('Class::Inspector', '1.28', { - 'source_tmpl': 'Class-Inspector-1.28.tar.gz', + 'source_tmpl': 'Class-Inspector-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Class::ISA', '0.36', { - 'source_tmpl': 'Class-ISA-0.36.tar.gz', + 'source_tmpl': 'Class-ISA-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SM/SMUELLER/'], }), ('Class::Trigger', '0.14', { - 'source_tmpl': 'Class-Trigger-0.14.tar.gz', + 'source_tmpl': 'Class-Trigger-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], }), ('CPANPLUS', '0.9154', { + 'source_tmpl': 'CPANPLUS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Data::Grove', '0.08', { - 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_tmpl': 'libxml-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], }), ('Data::UUID', '1.220', { - 'source_tmpl': 'Data-UUID-1.220.tar.gz', + 'source_tmpl': 'Data-UUID-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Date::Language', '2.30', { - 'source_tmpl': 'TimeDate-2.30.tar.gz', + 'source_tmpl': 'TimeDate-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], }), ('Date::Handler', '1.2', { - 'source_tmpl': 'Date-Handler-1.2.tar.gz', + 'source_tmpl': 'Date-Handler-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ/'], }), ('SQL::Statement', '1.407', { - 'source_tmpl': 'SQL-Statement-1.407.tar.gz', + 'source_tmpl': 'SQL-Statement-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Module::Pluggable', '5.1', { - 'source_tmpl': 'Module-Pluggable-5.1.tar.gz', + 'source_tmpl': 'Module-Pluggable-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SI/SIMONW/'], }), ('Digest::HMAC', '1.03', { - 'source_tmpl': 'Digest-HMAC-1.03.tar.gz', + 'source_tmpl': 'Digest-HMAC-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Digest::SHA1', '2.13', { - 'source_tmpl': 'Digest-SHA1-2.13.tar.gz', + 'source_tmpl': 'Digest-SHA1-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Email::Date::Format', '1.005', { - 'source_tmpl': 'Email-Date-Format-1.005.tar.gz', + 'source_tmpl': 'Email-Date-Format-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Error', '0.17024', { + 'source_tmpl': 'Error-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Expect', '1.21', { + 'source_tmpl': 'Expect-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGIERSIG/'], }), ('File::CheckTree', '4.42', { - 'source_tmpl': 'File-CheckTree-4.42.tar.gz', + 'source_tmpl': 'File-CheckTree-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('FreezeThaw', '0.5001', { 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules/'], }), ('Git', '0.41', { - 'source_tmpl': 'Git-0.41.tar.gz', + 'source_tmpl': 'Git-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSOUTH/'], }), ('GO::Utils', '0.15', { - 'source_tmpl': 'go-perl-0.15.tar.gz', + 'source_tmpl': 'go-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], }), ('GO', '0.04', { - 'source_tmpl': 'go-db-perl-0.04.tar.gz', + 'source_tmpl': 'go-db-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SJ/SJCARBON/'], }), ('HTML::Form', '6.03', { - 'source_tmpl': 'HTML-Form-6.03.tar.gz', + 'source_tmpl': 'HTML-Form-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Cookies', '6.01', { - 'source_tmpl': 'HTTP-Cookies-6.01.tar.gz', + 'source_tmpl': 'HTTP-Cookies-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Daemon', '6.01', { - 'source_tmpl': 'HTTP-Daemon-6.01.tar.gz', + 'source_tmpl': 'HTTP-Daemon-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Negotiate', '6.01', { - 'source_tmpl': 'HTTP-Negotiate-6.01.tar.gz', + 'source_tmpl': 'HTTP-Negotiate-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('IO::Stringy', '2.111', { - 'source_tmpl': 'IO-stringy-2.111.tar.gz', + 'source_tmpl': 'IO-stringy-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DS/DSKOLL/'], }), ('IO::Socket::SSL', '2.016', { - 'source_tmpl': 'IO-Socket-SSL-2.016.tar.gz', + 'source_tmpl': 'IO-Socket-SSL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SU/SULLR/'], }), ('JSON', '2.90', { + 'source_tmpl': 'JSON-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA/'], }), ('Log::Message', '0.08', { - 'source_tmpl': 'Log-Message-0.08.tar.gz', + 'source_tmpl': 'Log-Message-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Log::Message::Simple', '0.10', { - 'source_tmpl': 'Log-Message-Simple-0.10.tar.gz', + 'source_tmpl': 'Log-Message-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Mail::Util', '2.14', { - 'source_tmpl': 'MailTools-2.14.tar.gz', + 'source_tmpl': 'MailTools-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], }), ('MIME::Types', '2.11', { - 'source_tmpl': 'MIME-Types-2.11.tar.gz', + 'source_tmpl': 'MIME-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], }), ('MIME::Lite', '3.030', { - 'source_tmpl': 'MIME-Lite-3.030.tar.gz', + 'source_tmpl': 'MIME-Lite-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Net::HTTP', '6.06', { - 'source_tmpl': 'Net-HTTP-6.06.tar.gz', + 'source_tmpl': 'Net-HTTP-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Net::SMTP::SSL', '1.01', { - 'source_tmpl': 'Net-SMTP-SSL-1.01.tar.gz', + 'source_tmpl': 'Net-SMTP-SSL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CW/CWEST/'], }), ('Object::Accessor', '0.48', { - 'source_tmpl': 'Object-Accessor-0.48.tar.gz', + 'source_tmpl': 'Object-Accessor-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Pod::LaTeX', '0.61', { - 'source_tmpl': 'Pod-LaTeX-0.61.tar.gz', + 'source_tmpl': 'Pod-LaTeX-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJENNESS/'], }), ('Pod::Plainer', '1.04', { - 'source_tmpl': 'Pod-Plainer-1.04.tar.gz', + 'source_tmpl': 'Pod-Plainer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RM/RMBARKER/'], }), ('Pod::POM', '0.29', { - 'source_tmpl': 'Pod-POM-0.29.tar.gz', + 'source_tmpl': 'Pod-POM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AN/ANDREWF/'], }), ('Shell', '0.72', { 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FE/FERREIRA/'], }), ('Statistics::Descriptive', '3.0609', { - 'source_tmpl': 'Statistics-Descriptive-3.0609.tar.gz', + 'source_tmpl': 'Statistics-Descriptive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Switch', '2.17', { + 'source_tmpl': 'Switch-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Template', '2.26', { - 'source_tmpl': 'Template-Toolkit-2.26.tar.gz', + 'source_tmpl': 'Template-Toolkit-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('Term::UI', '0.46', { - 'source_tmpl': 'Term-UI-0.46.tar.gz', + 'source_tmpl': 'Term-UI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Text::Iconv', '1.7', { - 'source_tmpl': 'Text-Iconv-1.7.tar.gz', + 'source_tmpl': 'Text-Iconv-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MP/MPIOTR/'], }), ('Text::Soundex', '3.04', { - 'source_tmpl': 'Text-Soundex-3.04.tar.gz', + 'source_tmpl': 'Text-Soundex-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Time::Piece', '1.30', { - 'source_tmpl': 'Time-Piece-1.30.tar.gz', + 'source_tmpl': 'Time-Piece-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Time::Piece::MySQL', '0.06', { - 'source_tmpl': 'Time-Piece-MySQL-0.06.tar.gz', + 'source_tmpl': 'Time-Piece-MySQL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('UNIVERSAL::moniker', '0.08', { - 'source_tmpl': 'UNIVERSAL-moniker-0.08.tar.gz', + 'source_tmpl': 'UNIVERSAL-moniker-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('version', '0.9912', { 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JP/JPEACOCK/'], }), ('WWW::RobotRules', '6.02', { - 'source_tmpl': 'WWW-RobotRules-6.02.tar.gz', + 'source_tmpl': 'WWW-RobotRules-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('XML::SAX::Writer', '0.56', { - 'source_tmpl': 'XML-SAX-Writer-0.56.tar.gz', + 'source_tmpl': 'XML-SAX-Writer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], }), ('XML::Simple', '2.20', { - 'source_tmpl': 'XML-Simple-2.20.tar.gz', + 'source_tmpl': 'XML-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::XPath', '1.13', { - 'source_tmpl': 'XML-XPath-1.13.tar.gz', + 'source_tmpl': 'XML-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSERGEANT/'], }), ('DBD::AnyData', '0.110', { - 'source_tmpl': 'DBD-AnyData-0.110.tar.gz', + 'source_tmpl': 'DBD-AnyData-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Ima::DBI', '0.35', { - 'source_tmpl': 'Ima-DBI-0.35.tar.gz', + 'source_tmpl': 'Ima-DBI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERRIN/'], }), ('DBIx::ContextualFetch', '1.03', { - 'source_tmpl': 'DBIx-ContextualFetch-1.03.tar.gz', + 'source_tmpl': 'DBIx-ContextualFetch-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('DBIx::Simple', '1.35', { - 'source_tmpl': 'DBIx-Simple-1.35.tar.gz', + 'source_tmpl': 'DBIx-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JU/JUERD/'], }), ('Term::ReadKey', '2.32', { - 'source_tmpl': 'TermReadKey-2.32.tar.gz', + 'source_tmpl': 'TermReadKey-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JS/JSTOWE/'], 'patches': ['TermReadKey-2.32.patch'], }), ('Moo', '2.000001', { - 'source_tmpl': 'Moo-2.000001.tar.gz', + 'source_tmpl': 'Moo-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('strictures', '2.000001', { - 'source_tmpl': 'strictures-2.000001.tar.gz', + 'source_tmpl': 'strictures-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('File::Find::Rule::Perl', '1.13', { - 'source_tmpl': 'File-Find-Rule-Perl-1.13.tar.gz', + 'source_tmpl': 'File-Find-Rule-Perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Test::Version', '1.002004', { - 'source_tmpl': 'Test-Version-1.002004.tar.gz', + 'source_tmpl': 'Test-Version-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/X/XE/XENO/'], }), ('Test::Harness', '3.35', { - 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_tmpl': 'Test-Harness-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('Import::Into', '1.002004', { - 'source_tmpl': 'Import-Into-1.002004.tar.gz', + 'source_tmpl': 'Import-Into-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('File::Find::Rule', '0.33', { - 'source_tmpl': 'File-Find-Rule-0.33.tar.gz', + 'source_tmpl': 'File-Find-Rule-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('Data::Section::Simple', '0.07', { - 'source_tmpl': 'Data-Section-Simple-0.07.tar.gz', + 'source_tmpl': 'Data-Section-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], }), ('Text::Glob', '0.09', { - 'source_tmpl': 'Text-Glob-0.09.tar.gz', + 'source_tmpl': 'Text-Glob-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('Number::Compare', '0.03', { - 'source_tmpl': 'Number-Compare-0.03.tar.gz', + 'source_tmpl': 'Number-Compare-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('IPC::Run3', '0.048', { - 'source_tmpl': 'IPC-Run3-0.048.tar.gz', + 'source_tmpl': 'IPC-Run3-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Set::Array', '0.30', { - 'source_tmpl': 'Set-Array-0.30.tgz', + 'source_tmpl': 'Set-Array-%(version)s.tgz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], }), ('Bundle::BioPerl', '2.1.9', { - 'source_tmpl': 'Bundle-BioPerl-2.1.9.tar.gz', + 'source_tmpl': 'Bundle-BioPerl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS/'], }), - ('Algorithm::Munkres', '0.08', { - 'source_tmpl': 'Algorithm-Munkres-0.08.tar.gz', + 'source_tmpl': 'Algorithm-Munkres-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TP/TPEDERSE/'], }), -# Lots of deps: Carp, Types::Standard etc. -# ('Array::Compare', '2.11', { -# 'source_tmpl': 'Array-Compare-2.11.tar.gz', -# 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVECROSS/'], -# }), ('Graph', '0.96', { + 'source_tmpl': 'Graph-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JH/JHI/'], }), ('Set::Scalar', '1.29', { - 'source_tmpl': 'Set-Scalar-1.29.tar.gz', + 'source_tmpl': 'Set-Scalar-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVIDO/'], }), - ('CGI', '4.21', { - 'source_tmpl': 'CGI-4.21.tar.gz', + 'source_tmpl': 'CGI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEEJO/'], }), ('Bio::Phylo', '0.58', { - 'source_tmpl': 'Bio-Phylo-0.58.tar.gz', + 'source_tmpl': 'Bio-Phylo-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RV/RVOSA/'], }), -# ('GD', '2.56', { -# 'source_urls': 'http://cpan.metacpan.org/authors/id/L/LD/LDS/'], -# }), ('SVG', '2.64', { + 'source_tmpl': 'SVG-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SZ/SZABGAB/'], }), ('XML::DOM', '1.44', { - 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_tmpl': 'XML-DOM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], }), ('XML::DOM::XPath', '0.14', { - 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_tmpl': 'XML-DOM-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('XML::Parser::PerlSAX', '0.08', { - 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_tmpl': 'libxml-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], }), ('XML::Parser', '2.44', { - 'source_tmpl': 'XML-Parser-2.44.tar.gz', + 'source_tmpl': 'XML-Parser-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR/'], }), ('XML::Twig', '3.49', { - 'source_tmpl': 'XML-Twig-3.49.tar.gz', + 'source_tmpl': 'XML-Twig-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('XML::Writer', '0.625', { - 'source_tmpl': 'XML-Writer-0.625.tar.gz', + 'source_tmpl': 'XML-Writer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JO/JOSEPHW/'], }), ('XML::DOM', '1.44', { - 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_tmpl': 'XML-DOM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], }), ('Spreadsheet::ParseExcel', '0.65', { - 'source_tmpl': 'Spreadsheet-ParseExcel-0.65.tar.gz', + 'source_tmpl': 'Spreadsheet-ParseExcel-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOUGW/'], }), ('XML::DOM::XPath', '0.14', { - 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_tmpl': 'XML-DOM-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('Convert::Binary::C', '0.77', { - 'source_tmpl': 'Convert-Binary-C-0.77.tar.gz', + 'source_tmpl': 'Convert-Binary-C-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHX/'], }), ('Sys::SigAction.pm', '0.21', { - 'source_tmpl': 'Sys-SigAction-0.21.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], + 'source_tmpl': 'Sys-SigAction-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LB/LBAXTER/'], }), ('Acme::Damn', '0.06', { - 'source_tmpl': 'Acme-Damn-0.06.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], + 'source_tmpl': 'Acme-Damn-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IB/IBB/'], }), ('Set::IntervalTree', '0.10', { - 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], + 'source_tmpl': 'Set-IntervalTree-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BE/BENBOOTH/'], }), ('HTML::TableExtract', '2.13', { - 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', + 'source_tmpl': 'HTML-TableExtract-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], }), - ('Bio::Perl', '1.6.924', { - 'source_tmpl': 'BioPerl-1.6.924.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], + 'source_tmpl': 'BioPerl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS'], }), ] diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb index 0443d98f0a..b4c631de0e 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb @@ -17,877 +17,879 @@ dependencies = [ source_urls = ['http://www.cpan.org/src/5.0'] sources = [SOURCELOWER_TAR_GZ] -#runtest = 'test' exts_list = [ ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason - 'source_tmpl': 'Module-Build-0.4210.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Module/LEONT/'], + 'source_tmpl': 'Module-Build-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::MakeMaker', '7.04', { - 'source_tmpl': 'ExtUtils-MakeMaker-7.04.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/ExtUtils/BINGOS/'], + 'source_tmpl': 'ExtUtils-MakeMaker-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/B/BI/BINGOS'], }), ('local::lib', '2.000011', { - 'source_tmpl': 'local-lib-2.000011.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + 'source_tmpl': 'local-lib-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('IO::String', '1.08', { - 'source_tmpl': 'IO-String-1.08.tar.gz', + 'source_tmpl': 'IO-String-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Data::Stag', '0.14', { - 'source_tmpl': 'Data-Stag-0.14.tar.gz', + 'source_tmpl': 'Data-Stag-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], }), ('DB_File', '1.835', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DB_File/PMQS/'], + 'source_tmpl': 'DB_File-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PM/PMQS/'], }), ('DBI', '1.633', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DBI/TIMB/'], + 'source_tmpl': 'DBI-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TI/TIMB/'], }), ('Sub::Uplevel', '0.25', { - 'source_tmpl': 'Sub-Uplevel-0.25.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/DAGOLDEN/'], + 'source_tmpl': 'Sub-Uplevel-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], }), ('Tree::DAG_Node', '1.26', { - 'source_tmpl': 'Tree-DAG_Node-1.26.tgz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Tree/RSAVAGE/'], + 'source_tmpl': 'Tree-DAG_Node-%(version)s.tgz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], }), ('Try::Tiny', '0.22', { - 'source_tmpl': 'Try-Tiny-0.22.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DO/DOY/'], + 'source_tmpl': 'Try-Tiny-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Devel::StackTrace', '2.00', { - 'source_tmpl': 'Devel-StackTrace-2.00.tar.gz', + 'source_tmpl': 'Devel-StackTrace-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Data::Inheritable', '0.08', { - 'source_tmpl': 'Class-Data-Inheritable-0.08.tar.gz', + 'source_tmpl': 'Class-Data-Inheritable-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('Exception::Class', '1.39', { - 'source_tmpl': 'Exception-Class-1.39.tar.gz', + 'source_tmpl': 'Exception-Class-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Test::Fatal', '0.014', { - 'source_tmpl': 'Test-Fatal-0.014.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/RJBS/'], + 'source_tmpl': 'Test-Fatal-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Test::NoWarnings', '1.04', { - 'source_tmpl': 'Test-NoWarnings-1.04.tar.gz', + 'source_tmpl': 'Test-NoWarnings-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Test::Deep', '0.117', { - 'source_tmpl': 'Test-Deep-0.117.tar.gz', + 'source_tmpl': 'Test-Deep-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Algorithm::Diff', '1.15', { - 'source_tmpl': 'Algorithm-Diff-1.15.tar.gz', + 'source_tmpl': 'Algorithm-Diff-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/'], }), ('Text::Diff', '1.41', { - 'source_tmpl': 'Text-Diff-1.41.tar.gz', + 'source_tmpl': 'Text-Diff-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Test::Differences', '0.61', { - 'source_tmpl': 'Test-Differences-0.61.tar.gz', + 'source_tmpl': 'Test-Differences-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Test::Exception', '0.32', { - 'source_tmpl': 'Test-Exception-0.32.tar.gz', + 'source_tmpl': 'Test-Exception-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADIE/'], }), ('Test::Warn', '0.30', { - 'source_tmpl': 'Test-Warn-0.30.tar.gz', + 'source_tmpl': 'Test-Warn-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Test::Requires', '0.08', { - 'source_tmpl': 'Test-Requires-0.08.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/TOKUHIROM/'], + 'source_tmpl': 'Test-Requires-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/T/TO/TOKUHIROM'], }), ('Test::Tester', '0.109', { - 'source_tmpl': 'Test-Tester-0.109.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Test/FDALY/'], + 'source_tmpl': 'Test-Tester-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/F/FD/FDALY'], }), ('File::Slurp::Tiny', '0.003', { - 'source_tmpl': 'File-Slurp-Tiny-0.003.tar.gz', + 'source_tmpl': 'File-Slurp-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('Params::Util', '1.07', { - 'source_tmpl': 'Params-Util-1.07.tar.gz', + 'source_tmpl': 'Params-Util-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Sub::Install', '0.928', { - 'source_tmpl': 'Sub-Install-0.928.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Sub/RJBS/'], + 'source_tmpl': 'Sub-Install-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Data::OptList', '0.109', { - 'source_tmpl': 'Data-OptList-0.109.tar.gz', + 'source_tmpl': 'Data-OptList-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Sub::Exporter', '0.987', { - 'source_tmpl': 'Sub-Exporter-0.987.tar.gz', + 'source_tmpl': 'Sub-Exporter-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Capture::Tiny', '0.30', { - 'source_tmpl': 'Capture-Tiny-0.30.tar.gz', + 'source_tmpl': 'Capture-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/'], }), ('Test::Output', '1.03', { - 'source_tmpl': 'Test-Output-1.03.tar.gz', + 'source_tmpl': 'Test-Output-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BD/BDFOY/'], }), ('Module::Runtime', '0.014', { - 'source_tmpl': 'Module-Runtime-0.014.tar.gz', + 'source_tmpl': 'Module-Runtime-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/'], }), ('Module::Implementation', '0.09', { - 'source_tmpl': 'Module-Implementation-0.09.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Module/DROLSKY/'], + 'source_tmpl': 'Module-Implementation-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('List::MoreUtils', '0.413', { - 'source_tmpl': 'List-MoreUtils-0.413.tar.gz', + 'source_tmpl': 'List-MoreUtils-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Package::DeprecationManager', '0.14', { - 'source_tmpl': 'Package-DeprecationManager-0.14.tar.gz', + 'source_tmpl': 'Package-DeprecationManager-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Dist::CheckConflicts', '0.11', { - 'source_tmpl': 'Dist-CheckConflicts-0.11.tar.gz', + 'source_tmpl': 'Dist-CheckConflicts-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Package::Stash', '0.37', { - 'source_tmpl': 'Package-Stash-0.37.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Package/DOY/'], + 'source_tmpl': 'Package-Stash-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Class::Load', '0.23', { - 'source_tmpl': 'Class-Load-0.23.tar.gz', + 'source_tmpl': 'Class-Load-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('TAP::Harness::Env', '3.35', { - 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_tmpl': 'Test-Harness-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('ExtUtils::Helpers', '0.022', { - 'source_tmpl': 'ExtUtils-Helpers-0.022.tar.gz', + 'source_tmpl': 'ExtUtils-Helpers-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::Config', '0.008', { - 'source_tmpl': 'ExtUtils-Config-0.008.tar.gz', + 'source_tmpl': 'ExtUtils-Config-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('ExtUtils::InstallPaths', '0.011', { - 'source_tmpl': 'ExtUtils-InstallPaths-0.011.tar.gz', + 'source_tmpl': 'ExtUtils-InstallPaths-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT'], }), ('Module::Build::Tiny', '0.039', { - 'source_tmpl': 'Module-Build-Tiny-0.039.tar.gz', + 'source_tmpl': 'Module-Build-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('MRO::Compat', '0.12', { - 'source_tmpl': 'MRO-Compat-0.12.tar.gz', + 'source_tmpl': 'MRO-Compat-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BO/BOBTFISH/'], }), ('Sub::Name', '0.05', { - 'source_tmpl': 'Sub-Name-0.05.tar.gz', + 'source_tmpl': 'Sub-Name-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FL/FLORA/'], }), ('Eval::Closure', '0.13', { - 'source_tmpl': 'Eval-Closure-0.13.tar.gz', + 'source_tmpl': 'Eval-Closure-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Sub::Exporter::Progressive', '0.001011', { - 'source_tmpl': 'Sub-Exporter-Progressive-0.001011.tar.gz', + 'source_tmpl': 'Sub-Exporter-Progressive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], }), ('Devel::GlobalDestruction', '0.13', { - 'source_tmpl': 'Devel-GlobalDestruction-0.13.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/'], + 'source_tmpl': 'Devel-GlobalDestruction-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('boolean', '0.45', { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'boolean-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('Tie::IxHash', '1.23', { - 'source_tmpl': 'Tie-IxHash-1.23.tar.gz', + 'source_tmpl': 'Tie-IxHash-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Moose', '2.1405', { - 'source_urls': ['http://www.cpan.org/modules/by-module/MooseX/ETHER/'], + 'source_tmpl': 'Moose-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Package::Stash::XS', '0.28', { - 'source_tmpl': 'Package-Stash-XS-0.28.tar.gz', + 'source_tmpl': 'Package-Stash-XS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOY/'], }), ('Params::Validate', '1.20', { - 'source_tmpl': 'Params-Validate-1.20.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Params/DROLSKY/'], + 'source_tmpl': 'Params-Validate-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Load::XS', '0.09', { - 'source_tmpl': 'Class-Load-XS-0.09.tar.gz', + 'source_tmpl': 'Class-Load-XS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), - # For uoa00001, Zendesk #9076 ('Math::CDF', '0.1', { - 'source_tmpl': 'Math-CDF-0.1.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/'], + 'source_tmpl': 'Math-CDF-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CA/CALLAHAN/'], }), - ('DateTime::Locale', '0.46', { - 'source_tmpl': 'DateTime-Locale-0.46.tar.gz', + 'source_tmpl': 'DateTime-Locale-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Class::Singleton', '1.4', { - 'source_tmpl': 'Class-Singleton-1.4.tar.gz', + 'source_tmpl': 'Class-Singleton-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('DateTime::TimeZone', '1.92', { - 'source_tmpl': 'DateTime-TimeZone-1.92.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + 'source_tmpl': 'DateTime-TimeZone-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('Test::Warnings', '0.021', { - 'source_tmpl': 'Test-Warnings-0.021.tar.gz', + 'source_tmpl': 'Test-Warnings-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Data::Types', '0.09', { - 'source_tmpl': 'Data-Types-0.09.tar.gz', + 'source_tmpl': 'Data-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], }), ('Exporter::Tiny', '0.042', { - 'source_tmpl': 'Exporter-Tiny-0.042.tar.gz', + 'source_tmpl': 'Exporter-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], }), - ('List::AllUtils', '0.09', { - 'source_tmpl': 'List-AllUtils-0.09.tar.gz', + 'source_tmpl': 'List-AllUtils-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('DateTime', '1.20', { - 'source_urls': ['http://www.cpan.org/modules/by-module/DateTime/DROLSKY/'], + 'source_tmpl': 'DateTime-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DR/DROLSKY/'], }), ('DateTime::Tiny', '1.04', { - 'source_tmpl': 'DateTime-Tiny-1.04.tar.gz', + 'source_tmpl': 'DateTime-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('File::Slurp', '9999.19', { - 'source_tmpl': 'File-Slurp-9999.19.tar.gz', + 'source_tmpl': 'File-Slurp-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/U/UR/URI/'], }), ('HTTP::Date', '6.02', { - 'source_tmpl': 'HTTP-Date-6.02.tar.gz', + 'source_tmpl': 'HTTP-Date-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('IO::HTML', '1.001', { - 'source_tmpl': 'IO-HTML-1.001.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/IO/CJM/'], + 'source_tmpl': 'IO-HTML-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJM'], }), ('LWP::MediaTypes', '6.02', { - 'source_tmpl': 'LWP-MediaTypes-6.02.tar.gz', + 'source_tmpl': 'LWP-MediaTypes-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('URI', '1.69', { - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + 'source_tmpl': 'URI-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Encode::Locale', '1.05', { - 'source_tmpl': 'Encode-Locale-1.05.tar.gz', + 'source_tmpl': 'Encode-Locale-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Request', '6.06', { - 'source_tmpl': 'HTTP-Message-6.06.tar.gz', + 'source_tmpl': 'HTTP-Message-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTML::Tagset', '3.20', { - 'source_tmpl': 'HTML-Tagset-3.20.tar.gz', + 'source_tmpl': 'HTML-Tagset-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PETDANCE/'], }), ('HTML::Entities', '3.71', { - 'source_tmpl': 'HTML-Parser-3.71.tar.gz', + 'source_tmpl': 'HTML-Parser-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('File::Listing', '6.04', { - 'source_tmpl': 'File-Listing-6.04.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/'], + 'source_tmpl': 'File-Listing-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('AnyEvent', '7.09', { + 'source_tmpl': 'AnyEvent-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/'], }), ('Devel::CheckCompiler', '0.06', { - 'source_tmpl': 'Devel-CheckCompiler-0.06.tar.gz', + 'source_tmpl': 'Devel-CheckCompiler-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SY/SYOHEX'], }), ('File::Copy::Recursive', '0.38', { - 'source_tmpl': 'File-Copy-Recursive-0.38.tar.gz', + 'source_tmpl': 'File-Copy-Recursive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DM/DMUEY/'], }), ('Cwd::Guard', '0.04', { - 'source_tmpl': 'Cwd-Guard-0.04.tar.gz', + 'source_tmpl': 'Cwd-Guard-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KAZEBURO'], }), ('Module::Build::XSUtil', '0.16', { - 'source_tmpl': 'Module-Build-XSUtil-0.16.tar.gz', + 'source_tmpl': 'Module-Build-XSUtil-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO/'], }), ('LWP', '6.13', { - 'source_tmpl': 'libwww-perl-6.13.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/'], + 'source_tmpl': 'libwww-perl-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('Fennec::Lite', '0.004', { - 'source_tmpl': 'Fennec-Lite-0.004.tar.gz', + 'source_tmpl': 'Fennec-Lite-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('aliased', '0.31', { + 'source_tmpl': 'aliased-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Meta::Builder', '0.003', { - 'source_tmpl': 'Meta-Builder-0.003.tar.gz', + 'source_tmpl': 'Meta-Builder-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Exporter::Declare', '0.114', { - 'source_tmpl': 'Exporter-Declare-0.114.tar.gz', + 'source_tmpl': 'Exporter-Declare-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Mock::Quick', '1.108', { - 'source_tmpl': 'Mock-Quick-1.108.tar.gz', + 'source_tmpl': 'Mock-Quick-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Test::Exception::LessClever', '0.006', { - 'source_tmpl': 'Test-Exception-LessClever-0.006.tar.gz', + 'source_tmpl': 'Test-Exception-LessClever-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/EX/EXODIST/'], }), ('Test::LeakTrace', '0.15', { - 'source_tmpl': 'Test-LeakTrace-0.15.tar.gz', + 'source_tmpl': 'Test-LeakTrace-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], }), ('Mouse', '2.4.2', { + 'source_tmpl': 'Mouse-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GF/GFUJI/'], }), ('XML::NamespaceSupport', '1.11', { - 'source_tmpl': 'XML-NamespaceSupport-1.11.tar.gz', + 'source_tmpl': 'XML-NamespaceSupport-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], }), ('XML::SAX::Base', '1.08', { - 'source_tmpl': 'XML-SAX-Base-1.08.tar.gz', + 'source_tmpl': 'XML-SAX-Base-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::SAX', '0.99', { - 'source_tmpl': 'XML-SAX-0.99.tar.gz', + 'source_tmpl': 'XML-SAX-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::LibXML', '2.0121', { - 'source_tmpl': 'XML-LibXML-2.0121.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/'], + 'source_tmpl': 'XML-LibXML-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Clone', '0.38', { - 'source_tmpl': 'Clone-0.38.tar.gz', + 'source_tmpl': 'Clone-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GARU'], }), ('Config::General', '2.58', { - 'source_tmpl': 'Config-General-2.58.tar.gz', + 'source_tmpl': 'Config-General-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TL/TLINDEN'], }), ('Test::Simple', '0.98', { - 'source_tmpl': 'Test-Simple-0.98_05.tar.gz', + 'source_tmpl': 'Test-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSCHWERN'], }), ('Font::TTF', '1.05', { - 'source_tmpl': 'Font-TTF-1.05.tar.gz', + 'source_tmpl': 'Font-TTF-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHOSKEN'], }), ('IO::Tty', '1.12', { - 'source_tmpl': 'IO-Tty-1.12.tar.gz', + 'source_tmpl': 'IO-Tty-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], }), ('Math::Bezier', '0.01', { - 'source_tmpl': 'Math-Bezier-0.01.tar.gz', + 'source_tmpl': 'Math-Bezier-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW'], }), ('IPC::Run', '0.94', { - 'source_tmpl': 'IPC-Run-0.94.tar.gz', + 'source_tmpl': 'IPC-Run-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR'], }), ('Math::Round', '0.07', { - 'source_tmpl': 'Math-Round-0.07.tar.gz', + 'source_tmpl': 'Math-Round-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GROMMEL'], }), ('B::LintSubs', '0.06', { - 'source_tmpl': 'B-LintSubs-0.06.tar.gz', + 'source_tmpl': 'B-LintSubs-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PEVANS'], }), ('Math::VecStat', '0.08', { - 'source_tmpl': 'Math-VecStat-0.08.tar.gz', + 'source_tmpl': 'Math-VecStat-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AS/ASPINELLI'], }), ('Test::Most', '0.34', { - 'source_tmpl': 'Test-Most-0.34.tar.gz', + 'source_tmpl': 'Test-Most-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/O/OV/OVID/'], }), ('Readonly', '1.04', { - 'source_tmpl': 'Readonly-1.04.tar.gz', + 'source_tmpl': 'Readonly-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SA/SANKO/'], }), ('Regexp::Common', '2013031301', { - 'source_tmpl': 'Regexp-Common-2013031301.tar.gz', + 'source_tmpl': 'Regexp-Common-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABIGAIL'], }), ('Want', '0.26', { - 'source_tmpl': 'Want-0.26.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/'], + 'source_tmpl': 'Want-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RO/ROBIN/'], }), ('DBD::SQLite', '1.48', { - 'source_tmpl': 'DBD-SQLite-1.48.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/'], + 'source_tmpl': 'DBD-SQLite-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/'], }), ('Set::IntSpan', '1.19', { - 'source_tmpl': 'Set-IntSpan-1.19.tar.gz', + 'source_tmpl': 'Set-IntSpan-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SW/SWMCD'], }), ('forks', '0.36', { - 'source_tmpl': 'forks-0.36.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RY/RYBSKEJ/'], + 'source_tmpl': 'forks-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RY/RYBSKEJ/'], }), ('File::Which', '1.09', { - 'source_tmpl': 'File-Which-1.09.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/'], + 'source_tmpl': 'File-Which-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), - ('Perl::Unsafe::Signals', '', { - 'source_tmpl': 'Perl-Unsafe-Signals-0.02.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/'], + ('Perl::Unsafe::Signals', '0.02', { + 'source_tmpl': 'Perl-Unsafe-Signals-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGARCIA/'], }), ('Bit::Vector', '7.4', { - 'source_tmpl': 'Bit-Vector-7.4.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/'], + 'source_tmpl': 'Bit-Vector-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/S/ST/STBEY/'], }), ('Parse::RecDescent', '1.967009', { - 'source_tmpl': 'Parse-RecDescent-1.967009.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/J/JT/JTBRAUN/'], + 'source_tmpl': 'Parse-RecDescent-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JT/JTBRAUN/'], }), ('Inline', '0.80', { - 'source_tmpl': 'Inline-0.80.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'Inline-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('File::ShareDir::Install', '0.10', { - 'source_tmpl': 'File-ShareDir-Install-0.10.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/G/GW/GWYN/'], + 'source_tmpl': 'File-ShareDir-Install-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GW/GWYN/'], }), ('Inline::C', '0.76', { - 'source_tmpl': 'Inline-C-0.76.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IN/INGY/'], + 'source_tmpl': 'Inline-C-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/I/IN/INGY'], }), ('IO::All', '0.85', { - 'source_tmpl': 'IO-All-0.85.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/F/FR/FREW/'], + 'source_tmpl': 'IO-All-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FR/FREW/'], }), ('IO::Prompt', '0.997002', { - 'source_tmpl': 'IO-Prompt-0.997002.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/'], + 'source_tmpl': 'IO-Prompt-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DC/DCONWAY/'], }), ('Getopt::Long', '2.47', { - 'source_tmpl': 'Getopt-Long-2.47.tar.gz', + 'source_tmpl': 'Getopt-Long-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JV/JV/'], }), ('AppConfig', '1.66', { + 'source_tmpl': 'AppConfig-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('Archive::Extract', '0.76', { - 'source_tmpl': 'Archive-Extract-0.76.tar.gz', + 'source_tmpl': 'Archive-Extract-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Archive::Tar', '2.08', { - 'source_tmpl': 'Archive-Tar-2.08.tar.gz', + 'source_tmpl': 'Archive-Tar-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Archive::Zip', '1.57', { - 'source_tmpl': 'Archive-Zip-1.57.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/'], + 'source_tmpl': 'Archive-Zip-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PH/PHRED/'], }), ('Authen::SASL', '2.16', { - 'source_tmpl': 'Authen-SASL-2.16.tar.gz', + 'source_tmpl': 'Authen-SASL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], }), ('B::Lint', '1.20', { - 'source_tmpl': 'B-Lint-1.20.tar.gz', + 'source_tmpl': 'B-Lint-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), # BioPerl bundle was here ('Class::Accessor', '0.34', { - 'source_tmpl': 'Class-Accessor-0.34.tar.gz', + 'source_tmpl': 'Class-Accessor-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('Class::DBI', '3.0.17', { - 'source_tmpl': 'Class-DBI-v3.0.17.tar.gz', + 'source_tmpl': 'Class-DBI-v%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('Class::Inspector', '1.28', { - 'source_tmpl': 'Class-Inspector-1.28.tar.gz', + 'source_tmpl': 'Class-Inspector-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Class::ISA', '0.36', { - 'source_tmpl': 'Class-ISA-0.36.tar.gz', + 'source_tmpl': 'Class-ISA-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SM/SMUELLER/'], }), ('Class::Trigger', '0.14', { - 'source_tmpl': 'Class-Trigger-0.14.tar.gz', + 'source_tmpl': 'Class-Trigger-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], }), ('CPANPLUS', '0.9154', { + 'source_tmpl': 'CPANPLUS-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Data::Grove', '0.08', { - 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_tmpl': 'libxml-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], }), ('Data::UUID', '1.220', { - 'source_tmpl': 'Data-UUID-1.220.tar.gz', + 'source_tmpl': 'Data-UUID-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Date::Language', '2.30', { - 'source_tmpl': 'TimeDate-2.30.tar.gz', + 'source_tmpl': 'TimeDate-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GB/GBARR/'], }), ('Date::Handler', '1.2', { - 'source_tmpl': 'Date-Handler-1.2.tar.gz', + 'source_tmpl': 'Date-Handler-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BB/BBEAUSEJ/'], }), ('SQL::Statement', '1.407', { - 'source_tmpl': 'SQL-Statement-1.407.tar.gz', + 'source_tmpl': 'SQL-Statement-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Module::Pluggable', '5.1', { - 'source_tmpl': 'Module-Pluggable-5.1.tar.gz', + 'source_tmpl': 'Module-Pluggable-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SI/SIMONW/'], }), ('Digest::HMAC', '1.03', { - 'source_tmpl': 'Digest-HMAC-1.03.tar.gz', + 'source_tmpl': 'Digest-HMAC-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Digest::SHA1', '2.13', { - 'source_tmpl': 'Digest-SHA1-2.13.tar.gz', + 'source_tmpl': 'Digest-SHA1-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Email::Date::Format', '1.005', { - 'source_tmpl': 'Email-Date-Format-1.005.tar.gz', + 'source_tmpl': 'Email-Date-Format-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Error', '0.17024', { + 'source_tmpl': 'Error-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Expect', '1.21', { + 'source_tmpl': 'Expect-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RG/RGIERSIG/'], }), ('File::CheckTree', '4.42', { - 'source_tmpl': 'File-CheckTree-4.42.tar.gz', + 'source_tmpl': 'File-CheckTree-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('FreezeThaw', '0.5001', { 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules/'], }), ('Git', '0.41', { - 'source_tmpl': 'Git-0.41.tar.gz', + 'source_tmpl': 'Git-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSOUTH/'], }), ('GO::Utils', '0.15', { - 'source_tmpl': 'go-perl-0.15.tar.gz', + 'source_tmpl': 'go-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CM/CMUNGALL/'], }), ('GO', '0.04', { - 'source_tmpl': 'go-db-perl-0.04.tar.gz', + 'source_tmpl': 'go-db-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SJ/SJCARBON/'], }), ('HTML::Form', '6.03', { - 'source_tmpl': 'HTML-Form-6.03.tar.gz', + 'source_tmpl': 'HTML-Form-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Cookies', '6.01', { - 'source_tmpl': 'HTTP-Cookies-6.01.tar.gz', + 'source_tmpl': 'HTTP-Cookies-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Daemon', '6.01', { - 'source_tmpl': 'HTTP-Daemon-6.01.tar.gz', + 'source_tmpl': 'HTTP-Daemon-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('HTTP::Negotiate', '6.01', { - 'source_tmpl': 'HTTP-Negotiate-6.01.tar.gz', + 'source_tmpl': 'HTTP-Negotiate-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('IO::Stringy', '2.111', { - 'source_tmpl': 'IO-stringy-2.111.tar.gz', + 'source_tmpl': 'IO-stringy-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DS/DSKOLL/'], }), ('IO::Socket::SSL', '2.016', { - 'source_tmpl': 'IO-Socket-SSL-2.016.tar.gz', + 'source_tmpl': 'IO-Socket-SSL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SU/SULLR/'], }), ('JSON', '2.90', { + 'source_tmpl': 'JSON-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MAKAMAKA/'], }), ('Log::Message', '0.08', { - 'source_tmpl': 'Log-Message-0.08.tar.gz', + 'source_tmpl': 'Log-Message-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Log::Message::Simple', '0.10', { - 'source_tmpl': 'Log-Message-Simple-0.10.tar.gz', + 'source_tmpl': 'Log-Message-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Mail::Util', '2.14', { - 'source_tmpl': 'MailTools-2.14.tar.gz', + 'source_tmpl': 'MailTools-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], }), ('MIME::Types', '2.11', { - 'source_tmpl': 'MIME-Types-2.11.tar.gz', + 'source_tmpl': 'MIME-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MA/MARKOV/'], }), ('MIME::Lite', '3.030', { - 'source_tmpl': 'MIME-Lite-3.030.tar.gz', + 'source_tmpl': 'MIME-Lite-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Net::HTTP', '6.06', { - 'source_tmpl': 'Net-HTTP-6.06.tar.gz', + 'source_tmpl': 'Net-HTTP-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('Net::SMTP::SSL', '1.01', { - 'source_tmpl': 'Net-SMTP-SSL-1.01.tar.gz', + 'source_tmpl': 'Net-SMTP-SSL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CW/CWEST/'], }), ('Object::Accessor', '0.48', { - 'source_tmpl': 'Object-Accessor-0.48.tar.gz', + 'source_tmpl': 'Object-Accessor-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Pod::LaTeX', '0.61', { - 'source_tmpl': 'Pod-LaTeX-0.61.tar.gz', + 'source_tmpl': 'Pod-LaTeX-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJENNESS/'], }), ('Pod::Plainer', '1.04', { - 'source_tmpl': 'Pod-Plainer-1.04.tar.gz', + 'source_tmpl': 'Pod-Plainer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RM/RMBARKER/'], }), ('Pod::POM', '0.29', { - 'source_tmpl': 'Pod-POM-0.29.tar.gz', + 'source_tmpl': 'Pod-POM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AN/ANDREWF/'], }), ('Shell', '0.72', { 'source_urls': ['http://cpan.metacpan.org/authors/id/F/FE/FERREIRA/'], }), ('Statistics::Descriptive', '3.0609', { - 'source_tmpl': 'Statistics-Descriptive-3.0609.tar.gz', + 'source_tmpl': 'Statistics-Descriptive-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/'], }), ('Switch', '2.17', { + 'source_tmpl': 'Switch-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CH/CHORNY/'], }), ('Template', '2.26', { - 'source_tmpl': 'Template-Toolkit-2.26.tar.gz', + 'source_tmpl': 'Template-Toolkit-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AB/ABW/'], }), ('Term::UI', '0.46', { - 'source_tmpl': 'Term-UI-0.46.tar.gz', + 'source_tmpl': 'Term-UI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BI/BINGOS/'], }), ('Text::Iconv', '1.7', { - 'source_tmpl': 'Text-Iconv-1.7.tar.gz', + 'source_tmpl': 'Text-Iconv-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MP/MPIOTR/'], }), ('Text::Soundex', '3.04', { - 'source_tmpl': 'Text-Soundex-3.04.tar.gz', + 'source_tmpl': 'Text-Soundex-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Time::Piece', '1.30', { - 'source_tmpl': 'Time-Piece-1.30.tar.gz', + 'source_tmpl': 'Time-Piece-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Time::Piece::MySQL', '0.06', { - 'source_tmpl': 'Time-Piece-MySQL-0.06.tar.gz', + 'source_tmpl': 'Time-Piece-MySQL-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('UNIVERSAL::moniker', '0.08', { - 'source_tmpl': 'UNIVERSAL-moniker-0.08.tar.gz', + 'source_tmpl': 'UNIVERSAL-moniker-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KA/KASEI/'], }), ('version', '0.9912', { 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JP/JPEACOCK/'], }), ('WWW::RobotRules', '6.02', { - 'source_tmpl': 'WWW-RobotRules-6.02.tar.gz', + 'source_tmpl': 'WWW-RobotRules-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], }), ('XML::SAX::Writer', '0.56', { - 'source_tmpl': 'XML-SAX-Writer-0.56.tar.gz', + 'source_tmpl': 'XML-SAX-Writer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/'], }), ('XML::Simple', '2.20', { - 'source_tmpl': 'XML-Simple-2.20.tar.gz', + 'source_tmpl': 'XML-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GR/GRANTM/'], }), ('XML::XPath', '1.13', { - 'source_tmpl': 'XML-XPath-1.13.tar.gz', + 'source_tmpl': 'XML-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSERGEANT/'], }), ('DBD::AnyData', '0.110', { - 'source_tmpl': 'DBD-AnyData-0.110.tar.gz', + 'source_tmpl': 'DBD-AnyData-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RE/REHSACK/'], }), ('Ima::DBI', '0.35', { - 'source_tmpl': 'Ima-DBI-0.35.tar.gz', + 'source_tmpl': 'Ima-DBI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/P/PE/PERRIN/'], }), ('DBIx::ContextualFetch', '1.03', { - 'source_tmpl': 'DBIx-ContextualFetch-1.03.tar.gz', + 'source_tmpl': 'DBIx-ContextualFetch-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TM/TMTM/'], }), ('DBIx::Simple', '1.35', { - 'source_tmpl': 'DBIx-Simple-1.35.tar.gz', + 'source_tmpl': 'DBIx-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JU/JUERD/'], }), ('Term::ReadKey', '2.32', { - 'source_tmpl': 'TermReadKey-2.32.tar.gz', + 'source_tmpl': 'TermReadKey-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JS/JSTOWE/'], 'patches': ['TermReadKey-2.32.patch'], }), ('Moo', '2.000001', { - 'source_tmpl': 'Moo-2.000001.tar.gz', + 'source_tmpl': 'Moo-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('strictures', '2.000001', { - 'source_tmpl': 'strictures-2.000001.tar.gz', + 'source_tmpl': 'strictures-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/H/HA/HAARG/'], }), ('File::Find::Rule::Perl', '1.13', { - 'source_tmpl': 'File-Find-Rule-Perl-1.13.tar.gz', + 'source_tmpl': 'File-Find-Rule-Perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/A/AD/ADAMK/'], }), ('Test::Version', '1.002004', { - 'source_tmpl': 'Test-Version-1.002004.tar.gz', + 'source_tmpl': 'Test-Version-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/X/XE/XENO/'], }), ('Test::Harness', '3.35', { - 'source_tmpl': 'Test-Harness-3.35.tar.gz', + 'source_tmpl': 'Test-Harness-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEONT/'], }), ('Import::Into', '1.002004', { - 'source_tmpl': 'Import-Into-1.002004.tar.gz', + 'source_tmpl': 'Import-Into-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], }), ('File::Find::Rule', '0.33', { - 'source_tmpl': 'File-Find-Rule-0.33.tar.gz', + 'source_tmpl': 'File-Find-Rule-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('Data::Section::Simple', '0.07', { - 'source_tmpl': 'Data-Section-Simple-0.07.tar.gz', + 'source_tmpl': 'Data-Section-Simple-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/'], }), ('Text::Glob', '0.09', { - 'source_tmpl': 'Text-Glob-0.09.tar.gz', + 'source_tmpl': 'Text-Glob-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('Number::Compare', '0.03', { - 'source_tmpl': 'Number-Compare-0.03.tar.gz', + 'source_tmpl': 'Number-Compare-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RC/RCLAMP/'], }), ('IPC::Run3', '0.048', { - 'source_tmpl': 'IPC-Run3-0.048.tar.gz', + 'source_tmpl': 'IPC-Run3-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RJ/RJBS/'], }), ('Set::Array', '0.30', { - 'source_tmpl': 'Set-Array-0.30.tgz', + 'source_tmpl': 'Set-Array-%(version)s.tgz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RS/RSAVAGE/'], }), ('Bundle::BioPerl', '2.1.9', { - 'source_tmpl': 'Bundle-BioPerl-2.1.9.tar.gz', + 'source_tmpl': 'Bundle-BioPerl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS/'], }), - ('Algorithm::Munkres', '0.08', { - 'source_tmpl': 'Algorithm-Munkres-0.08.tar.gz', + 'source_tmpl': 'Algorithm-Munkres-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TP/TPEDERSE/'], }), -# Lots of deps: Carp, Types::Standard etc. -# ('Array::Compare', '2.11', { -# 'source_tmpl': 'Array-Compare-2.11.tar.gz', -# 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVECROSS/'], -# }), ('Graph', '0.96', { + 'source_tmpl': 'Graph-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JH/JHI/'], }), ('Set::Scalar', '1.29', { - 'source_tmpl': 'Set-Scalar-1.29.tar.gz', + 'source_tmpl': 'Set-Scalar-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DA/DAVIDO/'], }), - ('CGI', '4.21', { - 'source_tmpl': 'CGI-4.21.tar.gz', + 'source_tmpl': 'CGI-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LE/LEEJO/'], }), ('Bio::Phylo', '0.58', { - 'source_tmpl': 'Bio-Phylo-0.58.tar.gz', + 'source_tmpl': 'Bio-Phylo-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/R/RV/RVOSA/'], }), -# ('GD', '2.56', { -# 'source_urls': 'http://cpan.metacpan.org/authors/id/L/LD/LDS/'], -# }), ('SVG', '2.64', { + 'source_tmpl': 'SVG-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/S/SZ/SZABGAB/'], }), ('XML::DOM', '1.44', { - 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_tmpl': 'XML-DOM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], }), ('XML::DOM::XPath', '0.14', { - 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_tmpl': 'XML-DOM-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('XML::Parser::PerlSAX', '0.08', { - 'source_tmpl': 'libxml-perl-0.08.tar.gz', + 'source_tmpl': 'libxml-perl-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/K/KM/KMACLEOD/'], }), ('XML::Parser', '2.44', { - 'source_tmpl': 'XML-Parser-2.44.tar.gz', + 'source_tmpl': 'XML-Parser-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TODDR/'], }), ('XML::Twig', '3.49', { - 'source_tmpl': 'XML-Twig-3.49.tar.gz', + 'source_tmpl': 'XML-Twig-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('XML::Writer', '0.625', { - 'source_tmpl': 'XML-Writer-0.625.tar.gz', + 'source_tmpl': 'XML-Writer-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/J/JO/JOSEPHW/'], }), ('XML::DOM', '1.44', { - 'source_tmpl': 'XML-DOM-1.44.tar.gz', + 'source_tmpl': 'XML-DOM-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TJ/TJMATHER/'], }), ('Spreadsheet::ParseExcel', '0.65', { - 'source_tmpl': 'Spreadsheet-ParseExcel-0.65.tar.gz', + 'source_tmpl': 'Spreadsheet-ParseExcel-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DO/DOUGW/'], }), ('XML::DOM::XPath', '0.14', { - 'source_tmpl': 'XML-DOM-XPath-0.14.tar.gz', + 'source_tmpl': 'XML-DOM-XPath-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MI/MIROD/'], }), ('Convert::Binary::C', '0.77', { - 'source_tmpl': 'Convert-Binary-C-0.77.tar.gz', + 'source_tmpl': 'Convert-Binary-C-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MH/MHX/'], }), ('Sys::SigAction.pm', '0.21', { - 'source_tmpl': 'Sys-SigAction-0.21.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/L/LB/LBAXTER/'], + 'source_tmpl': 'Sys-SigAction-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/L/LB/LBAXTER/'], }), ('Acme::Damn', '0.06', { - 'source_tmpl': 'Acme-Damn-0.06.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/I/IB/IBB/'], + 'source_tmpl': 'Acme-Damn-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/I/IB/IBB/'], }), ('Set::IntervalTree', '0.10', { - 'source_tmpl': 'Set-IntervalTree-0.10.tar.gz', - 'source_urls': ['http://search.cpan.org/CPAN/authors/id/B/BE/BENBOOTH/'], + 'source_tmpl': 'Set-IntervalTree-%(version)s.tar.gz', + 'source_urls': ['http://cpan.metacpan.org/authors/id/B/BE/BENBOOTH/'], }), ('HTML::TableExtract', '2.13', { - 'source_tmpl': 'HTML-TableExtract-2.13.tar.gz', + 'source_tmpl': 'HTML-TableExtract-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/M/MS/MSISK/'], }), - ('Bio::Perl', '1.6.924', { - 'source_tmpl': 'BioPerl-1.6.924.tar.gz', - 'source_urls': ['http://www.cpan.org/modules/by-module/Bio/CJFIELDS/'], + 'source_tmpl': 'BioPerl-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/C/CJ/CJFIELDS'], }), ] -- GitLab From 7e605984029bc4870921c38260620edde61d5df4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Jun 2017 13:18:47 +0200 Subject: [PATCH 1233/1311] add SHA256 checksums for libpciaccess --- .../l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb | 5 +++-- .../l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb | 5 +++-- 12 files changed, 36 insertions(+), 24 deletions(-) diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb index 9967c64c68..17116e1d46 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-GCC-4.7.2.eb @@ -6,10 +6,11 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'GCC', 'version': '4.7.2'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'GCC', 'version': '4.7.2'} +checksums = ['8641a3ce37c97a6b28439d4630adb9583d8bd3e3a08c2040aa81f9932a7a76f6'] builddependencies = [ ('Autoconf', '2.69'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb index 9371a19f2d..05a5d755f2 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-goolf-1.4.10.eb @@ -6,10 +6,11 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'goolf', 'version': '1.4.10'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'goolf', 'version': '1.4.10'} +checksums = ['8641a3ce37c97a6b28439d4630adb9583d8bd3e3a08c2040aa81f9932a7a76f6'] builddependencies = [ ('Autoconf', '2.69'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb index cbc3f1b46c..7b5d65355f 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.3.0.eb @@ -6,10 +6,11 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'ictce', 'version': '5.3.0'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'ictce', 'version': '5.3.0'} +checksums = ['8641a3ce37c97a6b28439d4630adb9583d8bd3e3a08c2040aa81f9932a7a76f6'] builddependencies = [ ('Autoconf', '2.69'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb index 1abedab086..a19198650c 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-ictce-5.5.0.eb @@ -6,10 +6,11 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'ictce', 'version': '5.5.0'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'ictce', 'version': '5.5.0'} +checksums = ['8641a3ce37c97a6b28439d4630adb9583d8bd3e3a08c2040aa81f9932a7a76f6'] builddependencies = [ ('Autoconf', '2.69'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb index 8970daab0a..9afa895bc3 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.1-intel-2015a.eb @@ -6,10 +6,11 @@ version = '0.13.1' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'intel', 'version': '2015a'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'intel', 'version': '2015a'} +checksums = ['8641a3ce37c97a6b28439d4630adb9583d8bd3e3a08c2040aa81f9932a7a76f6'] builddependencies = [ ('Autotools', '20150119', '', ('GCC', '4.9.2')), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb index a36467cdf5..1617203250 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.3-intel-2015a.eb @@ -6,10 +6,11 @@ version = '0.13.3' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'intel', 'version': '2015a'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'intel', 'version': '2015a'} +checksums = ['9e0244e815dc55cbedb135baa4dc1e4b0325875276e081edfe38ff2bf61dfe02'] builddependencies = [ ('Autoconf', '2.69'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb index 0baaea5ccf..d017a972c2 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016a.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'foss', 'version': '2016a'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'foss', 'version': '2016a'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb index 76bd735f5a..c55a493a71 100755 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-foss-2016b.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'foss', 'version': '2016b'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'foss', 'version': '2016b'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb index 449c59f9bf..08c466e4d7 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-gimkl-2.11.5.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'gimkl', 'version': '2.11.5'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'gimkl', 'version': '2.11.5'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb index fd0fe49af5..64406b5039 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2015b.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'intel', 'version': '2015b'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'intel', 'version': '2015b'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215', '', ('GNU', '4.9.3-2.25')), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb index 69a705ef82..1ce0816af9 100644 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016a.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'intel', 'version': '2016a'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'intel', 'version': '2016a'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215'), diff --git a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb index de4d55b188..b1b38aee06 100755 --- a/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb +++ b/easybuild/easyconfigs/l/libpciaccess/libpciaccess-0.13.4-intel-2016b.eb @@ -6,10 +6,11 @@ version = '0.13.4' homepage = 'http://cgit.freedesktop.org/xorg/lib/libpciaccess/' description = """Generic PCI access library.""" +toolchain = {'name': 'intel', 'version': '2016b'} + source_urls = ['https://www.x.org/releases/individual/lib/'] sources = [SOURCE_TAR_GZ] - -toolchain = {'name': 'intel', 'version': '2016b'} +checksums = ['74d92bda448e6fdb64fee4e0091255f48d625d07146a121653022ed3a0ca1f2f'] builddependencies = [ ('Autotools', '20150215'), -- GitLab From a59eee0aa1d29d1c01eda712ffc3eb5ead940ca9 Mon Sep 17 00:00:00 2001 From: Balazs Hajgato Date: Thu, 8 Jun 2017 13:54:47 +0200 Subject: [PATCH 1234/1311] {geo}[intel/2017a] GMT 5.4.1 (REVIEW) --- .../g/GMT/GMT-5.4.1-intel-2017a.eb | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 easybuild/easyconfigs/g/GMT/GMT-5.4.1-intel-2017a.eb diff --git a/easybuild/easyconfigs/g/GMT/GMT-5.4.1-intel-2017a.eb b/easybuild/easyconfigs/g/GMT/GMT-5.4.1-intel-2017a.eb new file mode 100644 index 0000000000..1ae0c637c6 --- /dev/null +++ b/easybuild/easyconfigs/g/GMT/GMT-5.4.1-intel-2017a.eb @@ -0,0 +1,61 @@ +easyblock = "CMakeMake" + +name = "GMT" +version = "5.4.1" + +homepage = 'http://gmt.soest.hawaii.edu/' +description = """GMT is an open source collection of about 80 command-line tools for manipulating + geographic and Cartesian data sets (including filtering, trend fitting, gridding, projecting, + etc.) and producing PostScript illustrations ranging from simple x-y plots via contour maps + to artificially illuminated surfaces and 3D perspective views; the GMT supplements add another + 40 more specialized and discipline-specific tools. """ + +toolchain = {'name': 'intel', 'version': '2017a'} + +gshhg_ver = '2.3.6' +dcw_ver = '1.1.2' +sources = [ + 'gmt-%(version)s-src.tar.xz', + # coastlines, rivers, and political boundaries + 'gshhg-gmt-%s.tar.gz' % gshhg_ver, + # country polygons + 'dcw-gmt-%s.tar.gz' % dcw_ver, +] + +# 'http://gmt.soest.hawaii.edu/files/download?name=' needs flash enabled browser +source_urls = [ + 'ftp://ftp.soest.hawaii.edu/gmt', + 'ftp://ftp.soest.hawaii.edu/gmt/legacy', + 'ftp://ftp.soest.hawaii.edu/gshhg', + 'ftp://ftp.soest.hawaii.edu/gshhg/legacy', + 'ftp://ftp.soest.hawaii.edu/dcw', + 'ftp://ftp.soest.hawaii.edu/dcw/legacy', +] + +patches = ['GMT-5.1.2_netCDF.patch'] + +builddependencies = [('CMake', '3.8.1')] + +dependencies = [ + ('PCRE', '8.40'), + ('GDAL', '2.1.3', '-Python-2.7.13'), + ('FFTW', '3.3.6'), + ('netCDF', '4.4.1.1'), + ('Ghostscript', '9.21'), + ('cURL', '7.53.1'), + ('zlib', '1.2.11'), +] + +configopts = '-DCOPY_GSHHG=TRUE -DGSHHG_ROOT=%%(builddir)s/gshhg-gmt-%s ' % gshhg_ver +configopts += '-DCOPY_DCW=TRUE -DDCW_ROOT=%%(builddir)s/dcw-gmt-%s ' % dcw_ver + +separate_build_dir = True + +sanity_check_paths = { + 'files': ['bin/gmt', 'bin/isogmt'], + 'dirs': [] +} + +modextrapaths = {'GMTHOME': ''} + +moduleclass = 'geo' -- GitLab From 429abc826d81ba546c3a53dafc0fb6a40c686251 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Jun 2017 14:07:25 +0200 Subject: [PATCH 1235/1311] adding easyconfigs: FUNWAVE-TVD-3.1-20170525-intel-2017a.eb --- .../FUNWAVE-TVD-3.1-20170525-intel-2017a.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a.eb diff --git a/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a.eb b/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a.eb new file mode 100644 index 0000000000..e8a2edef7d --- /dev/null +++ b/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'MakeCp' + +name = 'FUNWAVE-TVD' +version = '3.1-20170525' +commit = '814107a' + +homepage = 'https://fengyanshi.github.io' +description = """FUNWAVE–TVD is the TVD version of the fully nonlinear Boussinesq wave model (FUNWAVE) + initially developed by Kirby et al.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/fengyanshi/FUNWAVE-TVD/archive/'] +sources = ['%s.tar.gz' % commit] + +start_dir = 'src' +parallel = 1 +buildopts = 'FC="$FC" FFLAGS="$FFLAGS -fpp" CPPFLAGS="-DINTEL -DMIXING -DMANNING -DVIS_KENNEDY"' + +files_to_copy = [(['mytvd'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/mytvd'], + 'dirs': [], +} + +moduleclass = 'math' -- GitLab From af0ad01045d5d19e6f347fab5226348316407c60 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Thu, 8 Jun 2017 08:38:47 -0500 Subject: [PATCH 1236/1311] adding easyconfigs: Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb, Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb --- ....6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 26 +++++++++++++++++++ ....6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 26 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb create mode 100644 easybuild/easyconfigs/t/Tk/Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..d9890f7017 --- /dev/null +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'Tcl' +version = '8.6.5' + +homepage = 'http://www.tcl.tk/' +description = """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, +suitable for a very wide range of uses, including web and desktop applications, networking, administration, +testing and many more.""" + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +dependencies = [ + ('zlib', '1.2.8'), +] + +configopts = '--enable-threads EXTRA_INSTALL="install-private-headers"' + +runtest = 'test' + +start_dir = 'unix' + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/t/Tk/Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/t/Tk/Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..5f81a41eff --- /dev/null +++ b/easybuild/easyconfigs/t/Tk/Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'Tk' +version = '8.6.5' + +homepage = 'http://www.tcl.tk/' +description = """Tk is an open source, cross-platform widget toolchain that provides a library of basic elements for + building a graphical user interface (GUI) in many different programming languages.""" + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} + +source_urls = ["http://prdownloads.sourceforge.net/tcl"] +sources = ['%(namelower)s%(version)s-src.tar.gz'] + +patches = ['Tk-8.6.4_different-prefix-with-tcl.patch'] + +dependencies = [ + ('Tcl', version), + ('zlib', '1.2.8'), +] + +configopts = '--enable-threads --with-tcl=$EBROOTTCL/lib CFLAGS="-I$EBROOTTCL/include"' + +start_dir = 'unix' + +moduleclass = 'vis' -- GitLab From 8f64ad53373e7f11714d8395ce6fe360d576ea70 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Thu, 8 Jun 2017 08:52:47 -0500 Subject: [PATCH 1237/1311] adding easyconfigs: SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb --- ...13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..de897a790e --- /dev/null +++ b/easybuild/easyconfigs/s/SQLite/SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -0,0 +1,40 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/ +## + +easyblock = 'ConfigureMake' + +name = 'SQLite' +version = '3.13.0' + +homepage = 'http://www.sqlite.org/' +description = 'SQLite: SQL Database Engine in a C Library' + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} + +source_urls = ['http://www.sqlite.org/2016/'] +version_minor_etc = version.split('.')[1:] +version_minor_etc += '0' * (3 - len(version_minor_etc)) +version_str = '%(version_major)s' + ''.join('%02d' % int(x) for x in version_minor_etc) +sources = ['sqlite-autoconf-%s.tar.gz' % version_str] + +dependencies = [ + ('libreadline', '6.3'), + ('Tcl', '8.6.5'), +] + +sanity_check_paths = { + 'files': ['bin/sqlite3', 'include/sqlite3ext.h', 'include/sqlite3.h', 'lib/libsqlite3.a', + 'lib/libsqlite3.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'devel' -- GitLab From 73dd65a55f1a26a53c084baf3ea7097d8a383f11 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Thu, 8 Jun 2017 10:26:20 -0500 Subject: [PATCH 1238/1311] adding easyconfigs: NASM-2.11.08-GCCcore-5.4.0.eb, libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb --- .../libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb | 32 +++++++++++++++++++ .../n/NASM/NASM-2.11.08-GCCcore-5.4.0.eb | 21 ++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/n/NASM/NASM-2.11.08-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..42aa366fd1 --- /dev/null +++ b/easybuild/easyconfigs/l/libjpeg-turbo/libjpeg-turbo-1.5.0-GCCcore-5.4.0.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'libjpeg-turbo' +version = '1.5.0' + +homepage = 'http://sourceforge.net/projects/libjpeg-turbo/' +description = """libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to accelerate baseline JPEG +compression and decompression. libjpeg is a library that implements JPEG image encoding, decoding and transcoding. +""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [ + ('NASM', '2.11.08'), +] + +builddependencies = [('binutils', '2.26', '', True)] + +configopts = "--with-jpeg8" +runtest = "test" + +sanity_check_paths = { + 'files': ['bin/cjpeg', 'bin/djpeg', 'bin/jpegtran', 'bin/rdjpgcom', 'bin/tjbench', 'bin/wrjpgcom', + 'lib/libjpeg.a', 'lib/libjpeg.%s' % SHLIB_EXT, 'lib/libturbojpeg.a', 'lib/libturbojpeg.%s' % SHLIB_EXT], + 'dirs': ['include', 'share'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/n/NASM/NASM-2.11.08-GCCcore-5.4.0.eb b/easybuild/easyconfigs/n/NASM/NASM-2.11.08-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..30ce2d87b8 --- /dev/null +++ b/easybuild/easyconfigs/n/NASM/NASM-2.11.08-GCCcore-5.4.0.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'NASM' +version = '2.11.08' + +homepage = 'http://www.nasm.us/' +description = """NASM: General-purpose x86 assembler""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://www.nasm.us/pub/nasm/releasebuilds/%(version)s'] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/nasm'], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From 64fa7fb704f44c1848a36a46944d8777b7a10595 Mon Sep 17 00:00:00 2001 From: John Donners Date: Thu, 8 Jun 2017 21:14:01 +0200 Subject: [PATCH 1239/1311] adding easyconfigs: impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb, impi-2017.1.132-GCC-5.4.0-2.26.eb, impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb, impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb, impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb, impi-4.1.0.027.eb, impi-4.1.0.030-iccifort-2013.2.146.eb, impi-4.1.0.030-iccifort-2013.3.163.eb, impi-4.1.0.030-iccifort-2013.4.183.eb, impi-4.1.0.030.eb, impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb, impi-4.1.1.036-iccifort-2013.5.192.eb, impi-4.1.1.036.eb, impi-4.1.2.040.eb, impi-4.1.3.045-iccifort-2013_sp1.1.106.eb, impi-4.1.3.045.eb, impi-4.1.3.049-GCC-4.8.3.eb, impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb, impi-4.1.3.049-iccifort-2013_sp1.2.144.eb, impi-4.1.3.049.eb, impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb, impi-5.0.1.035-iccifort-2015.0.090.eb, impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb, impi-5.0.3.048-GCC-4.9.3.eb, impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb, impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb, impi-5.0.3.048-iccifort-2015.3.187.eb, impi-5.1.0.079-iccifort-2015.3.187.eb, impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb, impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb, impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb, impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb, impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb, impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb, impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb, impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb, impi-5.1.3.181-iccifortcuda-2016.10.eb --- .../impi/impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb | 2 +- easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb | 2 +- .../impi/impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb | 2 +- .../impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb | 2 +- .../impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb | 2 +- .../easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb | 2 +- .../easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb | 2 +- .../easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb | 2 +- .../i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb | 2 +- .../easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb | 2 +- .../i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb | 2 +- .../i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb | 2 +- .../i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb | 2 +- easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb | 2 +- .../i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb | 2 +- .../easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb | 2 +- .../i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb | 2 +- easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb | 2 +- .../i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb | 2 +- .../i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb | 2 +- .../easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 2 +- .../easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/easybuild/easyconfigs/i/impi/impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb index 867202a357..3457aacbc5 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.0.098-iccifort-2017.0.098-GCC-5.4.0-2.26.eb @@ -6,7 +6,7 @@ version = '2017.0.098' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2017.0.098-GCC-5.4.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb index 106806006c..57fd16dd93 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb @@ -4,7 +4,7 @@ version = '2017.1.132' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb index bebecd8cf6..aa746359e2 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-5.4.0-2.26.eb @@ -6,7 +6,7 @@ version = '2017.1.132' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-5.4.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb index 3193d2cc9a..48a890bbcf 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-iccifort-2017.1.132-GCC-6.3.0-2.27.eb @@ -6,7 +6,7 @@ version = '2017.1.132' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2017.1.132-GCC-6.3.0-2.27'} diff --git a/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb index 9375fca351..2d925e4ac1 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.2.174-iccifort-2017.2.174-GCC-6.3.0-2.27.eb @@ -6,7 +6,7 @@ version = '2017.2.174' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2017.2.174-GCC-6.3.0-2.27'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb index 209842e727..6929387be6 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.027.eb @@ -4,7 +4,7 @@ version = '4.1.0.027' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb index c4e43d9fa9..ab6d7960f3 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.2.146.eb @@ -4,7 +4,7 @@ version = '4.1.0.030' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.2.146'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb index 9b5a71ce36..e04df8a494 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.3.163.eb @@ -4,7 +4,7 @@ version = '4.1.0.030' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.3.163'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb index 36a86386a0..0cb097158e 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030-iccifort-2013.4.183.eb @@ -4,7 +4,7 @@ version = '4.1.0.030' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.4.183'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb b/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb index 3f28cb9676..159af122db 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.0.030.eb @@ -4,7 +4,7 @@ version = '4.1.0.030' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb index ee1796488d..be19fa0081 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192-GCC-4.8.3.eb @@ -4,7 +4,7 @@ version = '4.1.1.036' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.5.192-GCC-4.8.3'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb index 97573c0075..118bb8c103 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036-iccifort-2013.5.192.eb @@ -4,7 +4,7 @@ version = '4.1.1.036' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.5.192'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb b/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb index 5524846083..6f14962150 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.1.036.eb @@ -4,7 +4,7 @@ version = '4.1.1.036' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb b/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb index 5301684735..dd8f68cc71 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.2.040.eb @@ -4,7 +4,7 @@ version = '4.1.2.040' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb index 3eef4c39b6..8841eb5e48 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.045-iccifort-2013_sp1.1.106.eb @@ -4,7 +4,7 @@ version = '4.1.3.045' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013_sp1.1.106'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb index de266ab029..53f0e55211 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.045.eb @@ -4,7 +4,7 @@ version = '4.1.3.045' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb index 81b707143d..f9f2e44736 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-GCC-4.8.3.eb @@ -4,7 +4,7 @@ version = '4.1.3.049' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'GCC', 'version': '4.8.3'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb index 91e7ec80d3..db7602586f 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013.5.192-GCC-4.8.3.eb @@ -4,7 +4,7 @@ version = '4.1.3.049' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013.5.192-GCC-4.8.3'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb index 3b51024f12..3970ddc476 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049-iccifort-2013_sp1.2.144.eb @@ -4,7 +4,7 @@ version = '4.1.3.049' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'iccifort', 'version': '2013_sp1.2.144'} diff --git a/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb b/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb index 7b345a78e7..8b558e1f1c 100644 --- a/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb +++ b/easybuild/easyconfigs/i/impi/impi-4.1.3.049.eb @@ -4,7 +4,7 @@ version = '4.1.3.049' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 2.2 (MPI-2) specification.""" toolchain = {'name': 'dummy', 'version': 'dummy'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb index 154d705ccf..68543c277e 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090-GCC-4.9.2.eb @@ -4,7 +4,7 @@ version = '5.0.1.035' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.0.090-GCC-4.9.2'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb index 952a3f2313..f8d4105279 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.1.035-iccifort-2015.0.090.eb @@ -4,7 +4,7 @@ version = '5.0.1.035' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.0.090'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb index 62a9caf2ee..42da75af9c 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.2.044-iccifort-2015.1.133-GCC-4.9.2.eb @@ -4,7 +4,7 @@ version = '5.0.2.044' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.1.133-GCC-4.9.2'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb index 46722880e7..c9221491ef 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-GCC-4.9.3.eb @@ -4,7 +4,7 @@ version = '5.0.3.048' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'GCC', 'version': '4.9.3'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb index 452ab3ddd5..8a9edd8c88 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.2.164-GCC-4.9.2.eb @@ -4,7 +4,7 @@ version = '5.0.3.048' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.2.164-GCC-4.9.2'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb index 7de5ce16aa..b10c36dc27 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187-GNU-4.9.3-2.25.eb @@ -4,7 +4,7 @@ version = '5.0.3.048' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.3.187-GNU-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb index 51baff5e35..ea4314e4dc 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.0.3.048-iccifort-2015.3.187.eb @@ -4,7 +4,7 @@ version = '5.0.3.048' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.3.187'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb index 845f7631f8..ff29599396 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.2.181-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb index eaf9a3b7a7..b683120608 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.2.181-GCC-5.3.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb index 56d81448bf..82952d9703 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb index cc0d58235f..c9693689db 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.3.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb index 565380f44c..28540e5444 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb index 292b8c704e..9873b9f096 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" toolchain = {'name': 'iccifortcuda', 'version': '2016.10'} -- GitLab From dfd0a7ee896a9a0a1f96931842ca436897f66b5e Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 9 Jun 2017 13:30:31 +0930 Subject: [PATCH 1240/1311] {bio}{dummy} SEED added --- easybuild/easyconfigs/s/SEED/SEED-2015.eb | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/s/SEED/SEED-2015.eb diff --git a/easybuild/easyconfigs/s/SEED/SEED-2015.eb b/easybuild/easyconfigs/s/SEED/SEED-2015.eb new file mode 100644 index 0000000000..b186b85f21 --- /dev/null +++ b/easybuild/easyconfigs/s/SEED/SEED-2015.eb @@ -0,0 +1,36 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: Copyright 2014-2017 adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exequiel Sepulveda +# License:: Artistic-v2.0 +# +# Notes:: +## + +easyblock = 'CmdCp' + +name = 'SEED' +version = '2015' + +homepage = 'http://www.theseed.org/wiki/Main_Page' +description = """ SEED is a software for clustering large sets of Next Generation Sequences (NGS) +with hundreds of millions of reads in a time and memory efficient manner. +Its algorithm joins highly similar sequences into clusters that can differ +by up to three mismatches and three overhanging residues. +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['master.zip'] +source_urls = ['https://github.com/baoe/SEED/archive'] + +files_to_copy = (['SEED/SEED'], 'bin'), + +sanity_check_paths = { + 'files': ["bin/SEED"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 5b0f4797cfda1e3bc685e45a60701eb8131d47cf Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 9 Jun 2017 16:23:45 +1200 Subject: [PATCH 1241/1311] Ensure PREFIX is set at build, not only at install, so that NE_GLOBAL_DIR is correctly set --- easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb | 1 + easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb | 1 + 2 files changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb index 4898061930..ebfa1fab31 100644 --- a/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-foss-2015a.eb @@ -15,6 +15,7 @@ source_urls = ['http://ne.di.unimi.it/'] sources = [SOURCELOWER_TAR_GZ] skipsteps = ['configure'] +buildopts = "PREFIX=%(installdir)s" installopts = "PREFIX=%(installdir)s" sanity_check_paths = { diff --git a/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb index f6ca385967..b43f3a5a81 100644 --- a/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb +++ b/easybuild/easyconfigs/n/ne/ne-3.0.1-gimkl-2017a.eb @@ -19,6 +19,7 @@ dependencies = [ ] skipsteps = ['configure'] +buildopts = "PREFIX=%(installdir)s" installopts = "PREFIX=%(installdir)s" sanity_check_paths = { -- GitLab From 04a431ff6ff6184621160ce03e90c730b54ff06c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 9 Jun 2017 15:01:28 +0200 Subject: [PATCH 1242/1311] adding easyconfigs: sleuth-0.29.0-intel-2017a-R-3.4.0.eb --- .../sleuth-0.29.0-intel-2017a-R-3.4.0.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/s/sleuth/sleuth-0.29.0-intel-2017a-R-3.4.0.eb diff --git a/easybuild/easyconfigs/s/sleuth/sleuth-0.29.0-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/s/sleuth/sleuth-0.29.0-intel-2017a-R-3.4.0.eb new file mode 100644 index 0000000000..aba646221e --- /dev/null +++ b/easybuild/easyconfigs/s/sleuth/sleuth-0.29.0-intel-2017a-R-3.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'RPackage' + +name = 'sleuth' +version = '0.29.0' +versionsuffix = '-R-%(rver)s' + +homepage = 'http://pachterlab.github.io/sleuth' +description = """Investigate RNA-Seq transcript abundance from kallisto and perform differential expression analysis.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/pachterlab/sleuth/archive/'] +sources = ['v%(version)s.tar.gz'] + +dependencies = [ + ('R', '3.4.0', '-X11-20170314'), + ('R-bundle-Bioconductor', '3.5', versionsuffix), +] + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'bio' -- GitLab From c932408af5283c17fd34ddae5eb097910d9eb2a8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 9 Jun 2017 18:23:29 +0200 Subject: [PATCH 1243/1311] use --with-x=yes in R easyconfigs that include X11 as a dependency --- easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb | 2 +- easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 2 +- easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb index 3b6ee9a746..17436647a4 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb @@ -12,7 +12,7 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' -configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=yes --enable-R-shlib" #Actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index 963e074572..dd6b13d0c2 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -12,7 +12,7 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' -configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=yes --enable-R-shlib" #Actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb index b17ecb1531..db02d8833d 100644 --- a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -12,7 +12,7 @@ sources = [SOURCE_TAR_GZ] source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' -configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=no --enable-R-shlib" +configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=yes --enable-R-shlib" # Actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. -- GitLab From 8a545e4e062c77c5f35e68362f7537fa919a94fb Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 9 Jun 2017 17:07:11 -0500 Subject: [PATCH 1244/1311] adding easyconfigs: Tcl-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb, SQLite-3.13.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb, Tk-8.6.5-iccifort-2016.3.210-GCC-5.4.0-2.26.eb, Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb --- ...iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb new file mode 100644 index 0000000000..d9fd114759 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb @@ -0,0 +1,35 @@ +name = 'Python' +version = '2.7.12' +versionsuffix = '-bare' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} +toolchainopts = {'pic': True, 'opt': True, 'optarch': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +# python needs bzip2 to build the bz2 package +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('Tk', '8.6.5'), # this requires a full X11 stack + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +modluafooter = 'family("python")' + +# bare installation: no extensions included +exts_list = [] + +moduleclass = 'lang' -- GitLab From 045e29d93edb740575e27d03287bee21f55f1e60 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 10 Jun 2017 11:40:06 +0930 Subject: [PATCH 1245/1311] OrfM easyconfig added --- .../o/OrfM/OrfM-0.6.1-foss-2016b.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb diff --git a/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb new file mode 100644 index 0000000000..ae95bf0649 --- /dev/null +++ b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb @@ -0,0 +1,37 @@ +## +# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia +# Homepage: https://www.adelaide.edu.au/phoenix/ +# +# Copyright:: Copyright 2014-2017 adelaide.edu.au/phoenix +# Authors:: Robert Qiao , Exequiel Sepulveda +# License:: LGPL-v3.0 +# +# Notes:: +## + +easyblock = 'ConfigureMake' + +name = 'OrfM' +version = '0.6.1' +namelower = 'orfm' + +homepage = 'https://github.com/wwood/OrfM' +description = """A simple and not slow open reading frame (ORF) caller. +No bells or whistles like frameshift detection, +just a straightforward goal of returning a FASTA file +of open reading frames over a certain length from a FASTA/Q file +of nucleotide sequences. +""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'usempi': True} + +sources = ['v%(version)s/%(namelower)s-%(version)s.tar.gz'] +source_urls = ['https://github.com/wwood/OrfM/releases/download'] + +sanity_check_paths = { + 'files': ['bin/orfm'], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 20d3efacb6ab40bc6729d727ec861e81a01dd068 Mon Sep 17 00:00:00 2001 From: Jack Perdue Date: Fri, 9 Jun 2017 22:50:18 -0500 Subject: [PATCH 1246/1311] adding easyconfigs: tbb-2017.6.196.eb --- easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb new file mode 100644 index 0000000000..458116d68c --- /dev/null +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb @@ -0,0 +1,25 @@ +name = 'tbb' +version = '2017.6.196' + +homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' + +description = """ + Intel Threading Building Blocks 4.0 (Intel TBB) is a widely used, + award-winning C++ template library for creating reliable, portable, and + scalable parallel applications. Use Intel TBB for a simple and rapid way + of developing robust task-based parallel applications that scale to available + processor cores, are compatible with multiple environments, and are easier to + maintain. Intel TBB is the most proficient way to implement future-proof + parallel applications that tap into the power and performance of multicore + and manycore hardware platforms. +""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['l_tbb_%(version)s.tgz'] + +requires_runtime_license = False + +dontcreateinstalldir = True + +moduleclass = 'lib' -- GitLab From 734e3e1f0706ce8edb5d0e440e96628277091d44 Mon Sep 17 00:00:00 2001 From: John Donners Date: Sat, 10 Jun 2017 10:33:06 +0200 Subject: [PATCH 1247/1311] Fixed descriptions of impi-5.1.\* --- .../easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb | 2 +- .../i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb | 2 +- .../i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 2 +- .../easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb b/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb index 51936e972d..66832f4bce 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.0.079-iccifort-2015.3.187.eb @@ -4,7 +4,7 @@ version = '5.1.0.079' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.3.187'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb index 8d146fd342..2a54c28eb8 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.1.109-iccifort-2016.0.109-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.1.109' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.0.109-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb index af79fd7190..562b27bc40 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2015.5.223-GCC-4.9.3-2.25.eb @@ -4,7 +4,7 @@ version = '5.1.2.150' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2015.5.223-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb index 6042d117f6..71b0e15d81 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.2.150' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 2 (MPI-2) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.1.150-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb index ff29599396..8f1eb713c5 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.2.181-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb index b683120608..72d570c9ae 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.2.181-GCC-5.3.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.2.181-GCC-5.3.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb index 82952d9703..212b21a522 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-4.9.3-2.25.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-4.9.3-2.25'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb index c9693689db..783cda572d 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.3.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.3.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb index 28540e5444..420224789e 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} diff --git a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb index 9873b9f096..b61daed0c1 100644 --- a/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb +++ b/easybuild/easyconfigs/i/impi/impi-5.1.3.181-iccifortcuda-2016.10.eb @@ -6,7 +6,7 @@ version = '5.1.3.181' homepage = 'http://software.intel.com/en-us/intel-mpi-library/' description = """The Intel(R) MPI Library for Linux* OS is a multi-fabric message passing library based on ANL MPICH2 and OSU MVAPICH2. The Intel MPI Library for - Linux OS implements the Message Passing Interface, version 3.1 (MPI-3) specification.""" + Linux OS implements the Message Passing Interface, version 3.0 (MPI-3) specification.""" toolchain = {'name': 'iccifortcuda', 'version': '2016.10'} -- GitLab From 6e0c6e7f6755f0507de970fe643c1dacc279b39c Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Mon, 12 Jun 2017 16:56:56 +0200 Subject: [PATCH 1248/1311] MaSuRCA for foss 2016a --- .../m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb new file mode 100644 index 0000000000..57cbf4b326 --- /dev/null +++ b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb @@ -0,0 +1,44 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2017 University of Geneva +# Authors:: Yann Sagon +# License:: MIT/GPL +# $Id$ +# +## + +easyblock = 'ConfigureMake' + +name = 'MaSuRCA' +version = '3.2.2' + +homepage = 'http://www.genome.umd.edu/masurca.html' + +description = '''MaSuRCA is whole genome assembly software. It combines the efficiency of the de Bruijn graph + and Overlap-Layout-Consensus (OLC) approaches. MaSuRCA can assemble data sets containing + only short reads from Illumina sequencing or a mixture of short reads and long reads + (Sanger, 454, Pacbio and Nanopore).''' + +toolchain = {'name': 'foss', 'version': '2016a'} + +buildopts="install-special" +start_dir="global-1" + +#need a temporary url to download it. Do it manually. +source_urls = ['http://www.genome.umd.edu/masurca_form.html'] +sources = ['%(name)s-%(version)s.tar.gz'] + +dependencies = [ + ('libreadline', '6.3'), + ('Tcl', '8.6.3'), + ('Boost', '1.61.0'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ["bin"], +} + +moduleclass = 'bio' -- GitLab From eb98f583f62a69a35e73ecc52ec4fbbc40cb4cc2 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Mon, 12 Jun 2017 17:07:19 +0200 Subject: [PATCH 1249/1311] typo filename --- .../{MaSuRCA-3.2.2-foss-206a.eb => MaSuRCA-3.2.2-foss-2016a.eb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easybuild/easyconfigs/m/MaSuRCA/{MaSuRCA-3.2.2-foss-206a.eb => MaSuRCA-3.2.2-foss-2016a.eb} (100%) diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb similarity index 100% rename from easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-206a.eb rename to easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb -- GitLab From 843775d27184e4e0d5292a83e886a36ba2c65adc Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Mon, 12 Jun 2017 17:21:42 +0200 Subject: [PATCH 1250/1311] fix tcl dep --- easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb index 57cbf4b326..56f1d8c0ac 100644 --- a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb @@ -31,7 +31,7 @@ sources = ['%(name)s-%(version)s.tar.gz'] dependencies = [ ('libreadline', '6.3'), - ('Tcl', '8.6.3'), + ('Tcl', '8.6.5'), ('Boost', '1.61.0'), ('zlib', '1.2.8'), ] -- GitLab From 8a90950abebac4b1d13636fd13ff8aad29faba52 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 12 Jun 2017 17:54:32 +0200 Subject: [PATCH 1251/1311] remove '4.0' in tbb description --- easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb | 2 +- easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb index c81d846fca..c472a12964 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.2.132.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '2017.2.132' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb index 925ecf0fc9..3644e3125e 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.4.174.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '2017.4.174' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based diff --git a/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb b/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb index 458116d68c..8156aab23b 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-2017.6.196.eb @@ -4,7 +4,7 @@ version = '2017.6.196' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' description = """ - Intel Threading Building Blocks 4.0 (Intel TBB) is a widely used, + Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based parallel applications that scale to available diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb b/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb index 276beb485d..fe58ba8f6d 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.0.0.233.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '4.0.0.233' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb b/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb index 88a0f19397..db524b2407 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.0.5.339.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '4.0.5.339' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb b/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb index bf885c9389..8f93bdda02 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.3.6.211.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '4.3.6.211' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based diff --git a/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb b/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb index c5d8deaf1f..11fd6f658a 100644 --- a/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb +++ b/easybuild/easyconfigs/t/tbb/tbb-4.4.2.152.eb @@ -2,7 +2,7 @@ name = 'tbb' version = '4.4.2.152' homepage = 'http://software.intel.com/en-us/articles/intel-tbb/' -description = """Intel Threading Building Blocks 4.0 (Intel TBB) +description = """Intel Threading Building Blocks (Intel TBB) is a widely used, award-winning C++ template library for creating reliable, portable, and scalable parallel applications. Use Intel TBB for a simple and rapid way of developing robust task-based -- GitLab From 988ceabc4b734b57bb6920fdc0fd22dd03fe0824 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 12 Jun 2017 17:55:21 +0200 Subject: [PATCH 1252/1311] adding easyconfigs: basemap-1.0.7-intel-2017a-Python-2.7.13.eb, PIL-1.1.7-intel-2017a-Python-2.7.13.eb --- ...basemap-1.0.7-intel-2017a-Python-2.7.13.eb | 32 +++++++++++++++++++ .../PIL-1.1.7-intel-2017a-Python-2.7.13.eb | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 easybuild/easyconfigs/b/basemap/basemap-1.0.7-intel-2017a-Python-2.7.13.eb create mode 100644 easybuild/easyconfigs/p/PIL/PIL-1.1.7-intel-2017a-Python-2.7.13.eb diff --git a/easybuild/easyconfigs/b/basemap/basemap-1.0.7-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/basemap/basemap-1.0.7-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..69a5b6b4c4 --- /dev/null +++ b/easybuild/easyconfigs/b/basemap/basemap-1.0.7-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'basemap' +version = '1.0.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://matplotlib.org/basemap/' +description = """The matplotlib basemap toolkit is a library for plotting 2D data on maps in Python""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +sources = [SOURCE_TAR_GZ] +source_urls = ['https://downloads.sourceforge.net/project/matplotlib/matplotlib-toolkits/basemap-%(version)s'] + +prebuildopts = 'GEOS_DIR=$EBROOTGEOS' +preinstallopts = prebuildopts + +dependencies = [ + ('Python', '2.7.13'), + ('matplotlib', '2.0.2', versionsuffix + '-libpng-1.6.29'), + ('GEOS', '3.6.1', versionsuffix), + ('PIL', '1.1.7', versionsuffix), +] + +sanity_check_paths = { + 'files': ['lib/python%%(pyshortver)s/site-packages/_geoslib.%s' % SHLIB_EXT], + 'dirs': ['lib/python%(pyshortver)s/site-packages/mpl_toolkits/basemap'] +} + +options = {'modulename': 'mpl_toolkits.basemap'} + +moduleclass = 'vis' diff --git a/easybuild/easyconfigs/p/PIL/PIL-1.1.7-intel-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/p/PIL/PIL-1.1.7-intel-2017a-Python-2.7.13.eb new file mode 100644 index 0000000000..050e2ce1af --- /dev/null +++ b/easybuild/easyconfigs/p/PIL/PIL-1.1.7-intel-2017a-Python-2.7.13.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonPackage' + +name = 'PIL' +version = '1.1.7' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://www.pythonware.com/products/pil' +description = """The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. + This library supports many file formats, and provides powerful image processing and graphics capabilities.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://effbot.org/downloads/'] +sources = ['Imaging-%(version)s.tar.gz'] + +patches = ['PIL-%(version)s-find-deps.patch'] + +dependencies = [ + ('zlib', '1.2.11'), + ('Python', '2.7.13'), + ('libjpeg-turbo', '1.5.1'), + ('freetype', '2.7.1', '-libpng-1.6.29'), +] + +options = {'modulename': 'PIL'} + +sanity_check_paths = { + 'files': [], + 'dirs': ['bin', 'lib/python%(pyshortver)s/site-packages/%(name)s'], +} + +moduleclass = 'vis' -- GitLab From 68112e92789b25e551e13ce5ec69384c4fbec105 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 12 Jun 2017 11:24:32 -0500 Subject: [PATCH 1253/1311] adding easyconfigs: nettle-3.2-GCCcore-5.4.0.eb --- .../n/nettle/nettle-3.2-GCCcore-5.4.0.eb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..295f442406 --- /dev/null +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb @@ -0,0 +1,30 @@ +easyblock = 'ConfigureMake' + +name = 'nettle' +version = '3.2' + +homepage = 'http://www.lysator.liu.se/~nisse/nettle/' +description = """Nettle is a cryptographic library that is designed to fit easily + in more or less any context: In crypto toolkits for object-oriented + languages (C++, Python, Pike, ...), in applications like LSH or GNUPG, + or even in kernel space.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +builddependencies = [('binutils', '2.26', '', True)] + +dependencies = [ + ('GMP', '6.1.1'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + 'dirs': ['include/nettle'], +} + +moduleclass = 'lib' -- GitLab From 350b9c5778715a22f782d9453d046bbc9a80ff47 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Wed, 14 Jun 2017 13:51:24 +1200 Subject: [PATCH 1254/1311] Do a serial build so that Convert::Binary::C compiles --- easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb | 7 +++++-- easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb index 7b23b1c105..3fb8ef382e 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb @@ -14,10 +14,13 @@ dependencies = [ ('SQLite', '3.8.9'), # for DBD::SQLite module ('expat', '2.1.0'), # for XML::Parser I think ('libxml2', '2.9.2'), # for XML::LibXML - ] +] source_urls = ['http://www.cpan.org/src/5.0'] sources = [SOURCELOWER_TAR_GZ] + +maxparallel = 1 + #runtest = 'test' exts_list = [ @@ -32,7 +35,7 @@ exts_list = [ ('local::lib', '2.000011', { 'source_tmpl': 'local-lib-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/E/ET/ETHER/'], - ):, + }), ('IO::String', '1.08', { 'source_tmpl': 'IO-String-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/G/GA/GAAS/'], diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb index b4c631de0e..519a5ec0ca 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb @@ -18,6 +18,8 @@ dependencies = [ source_urls = ['http://www.cpan.org/src/5.0'] sources = [SOURCELOWER_TAR_GZ] +maxparallel = 1 + exts_list = [ ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason 'source_tmpl': 'Module-Build-%(version)s.tar.gz', -- GitLab From 6832dc15184789421d72664619744c5a8c410b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 14 Jun 2017 11:17:37 +0200 Subject: [PATCH 1255/1311] Add GD 2.66 with updated dependencies --- .../g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb | 31 +++++++++++++++++++ .../l/libgd/libgd-2.2.4-foss-2016b.eb | 30 ++++++++++++++++++ .../l/libpng/libpng-1.6.29-foss-2016b.eb | 30 ++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb create mode 100644 easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb new file mode 100644 index 0000000000..d3f08d5c1c --- /dev/null +++ b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb @@ -0,0 +1,31 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'PerlModule' + +name = 'GD' +version = '2.66' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'https://github.com/lstein/Perl-GD' +description = """GD.pm - Interface to Gd Graphics Library""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/lstein/Perl-GD/archive/'] +sources = ['release_%(version_major)s_%(version_minor)s.tar.gz'] + +checksums = ['47a1388f3364e70dd2eaab072d127835'] + +dependencies = [ + ('Perl', '5.24.0'), + ('libgd', '2.2.4'), + ('libpng', '1.6.27'), + ('libjpeg-turbo', '1.5.0'), +] + +sanity_check_paths = { + 'files': ['bin/bdf2gdfont.pl', 'lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/%(name)s.pm'], + 'dirs': ['lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/%(name)s'], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb new file mode 100644 index 0000000000..e46a716330 --- /dev/null +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'libgd' +version = '2.2.4' + +homepage = 'http://libgd.bitbucket.org/' +description = """GD is an open source code library for the dynamic creation of images by programmers.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['https://github.com/libgd/libgd/releases/download/gd-%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['0a3c307b5075edbe1883543dd1153c02'] + +dependencies = [ + ('fontconfig', '2.12.1'), + ('libjpeg-turbo', '1.5.0'), + ('libpng', '1.6.27'), + ('zlib', '1.2.8'), +] + +sanity_check_paths = { + 'files': ['lib/libgd.a', 'lib/libgd.%s' % SHLIB_EXT], + 'dirs': ['bin', 'include'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb new file mode 100644 index 0000000000..33cd96fc7f --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb @@ -0,0 +1,30 @@ +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild + +easyblock = 'ConfigureMake' + +name = 'libpng' +version = '1.6.29' + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = """libpng is the official PNG reference library""" + +toolchain = {'name': 'foss', 'version': '2016b'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +checksums = ['68553080685f812d1dd7a6b8215c37d8'] + +dependencies = [('zlib', '1.2.8')] + +configopts = '--with-pic' + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' -- GitLab From 1c51fbdd60ad6a40931aac70d8b5b1c15f1859a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 14 Jun 2017 11:43:08 +0200 Subject: [PATCH 1256/1311] Fix version of libpng used --- easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb | 2 +- easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb index d3f08d5c1c..523435b933 100644 --- a/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb @@ -19,7 +19,7 @@ checksums = ['47a1388f3364e70dd2eaab072d127835'] dependencies = [ ('Perl', '5.24.0'), ('libgd', '2.2.4'), - ('libpng', '1.6.27'), + ('libpng', '1.6.29'), ('libjpeg-turbo', '1.5.0'), ] diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb index e46a716330..5e8f0d2bfb 100644 --- a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb @@ -18,7 +18,7 @@ checksums = ['0a3c307b5075edbe1883543dd1153c02'] dependencies = [ ('fontconfig', '2.12.1'), ('libjpeg-turbo', '1.5.0'), - ('libpng', '1.6.27'), + ('libpng', '1.6.29'), ('zlib', '1.2.8'), ] -- GitLab From 017ed7ef5666cd18dbd8f2a707318374d5a52428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Wed, 14 Jun 2017 12:42:45 +0200 Subject: [PATCH 1257/1311] Revert to libpng version 1.6.24 --- .../g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb | 2 +- .../l/libgd/libgd-2.2.4-foss-2016b.eb | 2 +- .../l/libpng/libpng-1.6.29-foss-2016b.eb | 30 ------------------- 3 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb diff --git a/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb index 523435b933..88f756e1ce 100644 --- a/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb +++ b/easybuild/easyconfigs/g/GD/GD-2.66-foss-2016b-Perl-5.24.0.eb @@ -19,7 +19,7 @@ checksums = ['47a1388f3364e70dd2eaab072d127835'] dependencies = [ ('Perl', '5.24.0'), ('libgd', '2.2.4'), - ('libpng', '1.6.29'), + ('libpng', '1.6.24'), ('libjpeg-turbo', '1.5.0'), ] diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb index 5e8f0d2bfb..36c51236e2 100644 --- a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb @@ -18,7 +18,7 @@ checksums = ['0a3c307b5075edbe1883543dd1153c02'] dependencies = [ ('fontconfig', '2.12.1'), ('libjpeg-turbo', '1.5.0'), - ('libpng', '1.6.29'), + ('libpng', '1.6.24'), ('zlib', '1.2.8'), ] diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb deleted file mode 100644 index 33cd96fc7f..0000000000 --- a/easybuild/easyconfigs/l/libpng/libpng-1.6.29-foss-2016b.eb +++ /dev/null @@ -1,30 +0,0 @@ -# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild - -easyblock = 'ConfigureMake' - -name = 'libpng' -version = '1.6.29' - -homepage = 'http://www.libpng.org/pub/png/libpng.html' -description = """libpng is the official PNG reference library""" - -toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = {'pic': True} - -source_urls = [SOURCEFORGE_SOURCE] -sources = [SOURCELOWER_TAR_GZ] - -checksums = ['68553080685f812d1dd7a6b8215c37d8'] - -dependencies = [('zlib', '1.2.8')] - -configopts = '--with-pic' - -majminver = ''.join(version.split('.')[:2]) -sanity_check_paths = { - 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', - 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], - 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], -} - -moduleclass = 'lib' -- GitLab From 4b8bb3ddb4152e00e335701e11675fe9d06d903b Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Wed, 14 Jun 2017 14:20:39 +0200 Subject: [PATCH 1258/1311] changes according to requests --- .../m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb index 56f1d8c0ac..98a1ad1c1c 100644 --- a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb @@ -20,13 +20,8 @@ description = '''MaSuRCA is whole genome assembly software. It combines the effi only short reads from Illumina sequencing or a mixture of short reads and long reads (Sanger, 454, Pacbio and Nanopore).''' -toolchain = {'name': 'foss', 'version': '2016a'} - -buildopts="install-special" -start_dir="global-1" - -#need a temporary url to download it. Do it manually. -source_urls = ['http://www.genome.umd.edu/masurca_form.html'] +# need a temporary url to download it. Do it manually here: +# http://www.genome.umd.edu/masurca_form.html sources = ['%(name)s-%(version)s.tar.gz'] dependencies = [ @@ -36,9 +31,14 @@ dependencies = [ ('zlib', '1.2.8'), ] +toolchain = {'name': 'foss', 'version': '2016a'} + +buildopts="install-special" +start_dir="global-1" + sanity_check_paths = { - 'files': [], - 'dirs': ["bin"], + 'files': ['bin/masurca'], + 'dirs': ['include', 'lib'], } moduleclass = 'bio' -- GitLab From f9a8f455e5ed87849c0c64fccf237fd2b94ef138 Mon Sep 17 00:00:00 2001 From: Yann Sagon Date: Thu, 15 Jun 2017 14:00:40 +0200 Subject: [PATCH 1259/1311] fix style --- easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb index 98a1ad1c1c..6a0e136d4e 100644 --- a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb @@ -20,6 +20,8 @@ description = '''MaSuRCA is whole genome assembly software. It combines the effi only short reads from Illumina sequencing or a mixture of short reads and long reads (Sanger, 454, Pacbio and Nanopore).''' +toolchain = {'name': 'foss', 'version': '2016a'} + # need a temporary url to download it. Do it manually here: # http://www.genome.umd.edu/masurca_form.html sources = ['%(name)s-%(version)s.tar.gz'] @@ -31,8 +33,6 @@ dependencies = [ ('zlib', '1.2.8'), ] -toolchain = {'name': 'foss', 'version': '2016a'} - buildopts="install-special" start_dir="global-1" -- GitLab From b7409f13627bfe1b8029994ca75da65e9cb8b420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20J=C3=A4hne?= Date: Thu, 15 Jun 2017 15:04:16 +0200 Subject: [PATCH 1260/1311] Change URL to github.io --- easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb index 36c51236e2..5856a57c8d 100644 --- a/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb +++ b/easybuild/easyconfigs/l/libgd/libgd-2.2.4-foss-2016b.eb @@ -5,7 +5,7 @@ easyblock = 'ConfigureMake' name = 'libgd' version = '2.2.4' -homepage = 'http://libgd.bitbucket.org/' +homepage = 'https://libgd.github.io' description = """GD is an open source code library for the dynamic creation of images by programmers.""" toolchain = {'name': 'foss', 'version': '2016b'} -- GitLab From 54b9e5721079cf268683e14783e5b3514611ff0d Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 15 Jun 2017 22:49:32 +0930 Subject: [PATCH 1261/1311] error fixed --- .../o/OrfM/OrfM-0.6.1-foss-2016b.eb | 1 - easybuild/easyconfigs/s/SEED/SEED-2015.eb | 36 ------------------- 2 files changed, 37 deletions(-) delete mode 100644 easybuild/easyconfigs/s/SEED/SEED-2015.eb diff --git a/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb index ae95bf0649..5a1afb1351 100644 --- a/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb @@ -13,7 +13,6 @@ easyblock = 'ConfigureMake' name = 'OrfM' version = '0.6.1' -namelower = 'orfm' homepage = 'https://github.com/wwood/OrfM' description = """A simple and not slow open reading frame (ORF) caller. diff --git a/easybuild/easyconfigs/s/SEED/SEED-2015.eb b/easybuild/easyconfigs/s/SEED/SEED-2015.eb deleted file mode 100644 index b186b85f21..0000000000 --- a/easybuild/easyconfigs/s/SEED/SEED-2015.eb +++ /dev/null @@ -1,36 +0,0 @@ -## -# This is a contribution from Phoenix HPC Service, The University of Adelaide, Australia -# Homepage: https://www.adelaide.edu.au/phoenix/ -# -# Copyright:: Copyright 2014-2017 adelaide.edu.au/phoenix -# Authors:: Robert Qiao , Exequiel Sepulveda -# License:: Artistic-v2.0 -# -# Notes:: -## - -easyblock = 'CmdCp' - -name = 'SEED' -version = '2015' - -homepage = 'http://www.theseed.org/wiki/Main_Page' -description = """ SEED is a software for clustering large sets of Next Generation Sequences (NGS) -with hundreds of millions of reads in a time and memory efficient manner. -Its algorithm joins highly similar sequences into clusters that can differ -by up to three mismatches and three overhanging residues. -""" - -toolchain = {'name': 'dummy', 'version': 'dummy'} - -sources = ['master.zip'] -source_urls = ['https://github.com/baoe/SEED/archive'] - -files_to_copy = (['SEED/SEED'], 'bin'), - -sanity_check_paths = { - 'files': ["bin/SEED"], - 'dirs': [], -} - -moduleclass = 'bio' -- GitLab From 0a472f8ad884c8ffd5be2a6f13767c8a7c040644 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 12:10:42 +1200 Subject: [PATCH 1262/1311] New EasyConfig for expat 2.2.0 with the gimkl-2017a toolchain --- .../e/expat/expat-2.2.0-gimkl-2017a.eb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 easybuild/easyconfigs/e/expat/expat-2.2.0-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/e/expat/expat-2.2.0-gimkl-2017a.eb b/easybuild/easyconfigs/e/expat/expat-2.2.0-gimkl-2017a.eb new file mode 100644 index 0000000000..555f4a3da3 --- /dev/null +++ b/easybuild/easyconfigs/e/expat/expat-2.2.0-gimkl-2017a.eb @@ -0,0 +1,16 @@ +easyblock = 'ConfigureMake' + +name = 'expat' +version = '2.2.0' + +homepage = 'http://expat.sourceforge.net/' +description = """Expat is an XML parser library written in C. It is a stream-oriented parser in which an application + registers handlers for things the parser might find in the XML document (like start tags)""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = [SOURCEFORGE_SOURCE] + +moduleclass = 'tools' -- GitLab From 6737a5e9ec0be4f3edd006a2031494e1014f6aa6 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 12:14:22 +1200 Subject: [PATCH 1263/1311] Adjusted source URL per request from K.H. --- easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb index 1362fe53c9..1346eea81c 100644 --- a/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb +++ b/easybuild/easyconfigs/z/zlib/zlib-1.2.11-gimkl-2017a.eb @@ -12,7 +12,7 @@ toolchain = {'version': '2017a', 'name': 'gimkl'} toolchainopts = {'pic': True} sources = [SOURCELOWER_TAR_GZ] -source_urls = [('http://sourceforge.net/projects/libpng/files/zlib/%(version)s', 'download')] +source_urls = ['http://zlib.net/fossils'] sanity_check_paths = { 'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT], -- GitLab From e10ae8dc4da3d2f0cb1709678aad65933d5e464b Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 12:17:38 +1200 Subject: [PATCH 1264/1311] Adjusted indenting on two lines per request from K.H. --- .../easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb index 3c72c2c527..375e6cccf2 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.3-gimkl-2017a.eb @@ -24,8 +24,8 @@ preconfigopts = "env LDFLAGS='-lncurses'" sanity_check_paths = { 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], 'dirs': [], } -- GitLab From 7deaa57c95bb3806bb2d2399ecd53db3b2e76300 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 12:25:44 +1200 Subject: [PATCH 1265/1311] Patch for XZ requested by K.H. to avoid breaking rpm --- easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb index 4b1d474ab3..8d7242f13f 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb @@ -11,6 +11,8 @@ toolchain = {'version': '2017a', 'name': 'gimkl'} sources = [SOURCELOWER_TAR_BZ2] source_urls = ['http://tukaani.org/xz/'] +patches = ['XZ-5.2.2_compat-libs.patch'] + # non-toolchain gettext because otherwise there is a circular dependency: # XZ (presumably its executables) depends on gettext, which depends on # xmllib2, which depends (optionally) on XZ -- GitLab From 744ace0a17291f13f3d30cd85cb943d2eb128f22 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 13:15:25 +1200 Subject: [PATCH 1266/1311] New EasyConfig for cURL 7.52.1 with the gimkl-2017a toolchain --- .../c/cURL/cURL-7.52.1-gimkl-2017a.eb | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 easybuild/easyconfigs/c/cURL/cURL-7.52.1-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/c/cURL/cURL-7.52.1-gimkl-2017a.eb b/easybuild/easyconfigs/c/cURL/cURL-7.52.1-gimkl-2017a.eb new file mode 100644 index 0000000000..85452813a1 --- /dev/null +++ b/easybuild/easyconfigs/c/cURL/cURL-7.52.1-gimkl-2017a.eb @@ -0,0 +1,28 @@ +easyblock = 'ConfigureMake' + +name = 'cURL' +version = '7.52.1' + +homepage = 'http://curl.haxx.se' +description = """libcurl is a free and easy-to-use client-side URL transfer library, + supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports + SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, + proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, + Kerberos), file transfer resume, http proxy tunneling and more.""" + +toolchain = {'name': 'gimkl', 'version': '2017a'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://curl.haxx.se/download/'] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +modextravars = {'CURL_INCLUDES': '%(installdir)s/include'} + +sanity_check_paths = { + 'files': ['bin/curl', 'lib/libcurl.a', 'lib/libcurl.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'tools' -- GitLab From 606d6664ec88002a1f049f29cdcefc328d874a2b Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 13:40:12 +1200 Subject: [PATCH 1267/1311] New EasyConfig for bzip2 1.0.6 with the gimkl-2017a toolchain --- .../b/bzip2/bzip2-1.0.6-gimkl-2017a.eb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-gimkl-2017a.eb b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-gimkl-2017a.eb new file mode 100644 index 0000000000..e5eb2cbd9d --- /dev/null +++ b/easybuild/easyconfigs/b/bzip2/bzip2-1.0.6-gimkl-2017a.eb @@ -0,0 +1,15 @@ +name = 'bzip2' +version = '1.0.6' + +homepage = 'http://www.bzip.org/' +description = """bzip2 is a freely available, patent free, high-quality data compressor. It typically + compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical + compressors), whilst being around twice as fast at compression and six times faster at decompression.""" + +toolchain = {'version': '2017a', 'name': 'gimkl'} +toolchainopts = {'pic': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.bzip.org/%(version)s'] + +moduleclass = 'tools' -- GitLab From 62393710ae97e94c9a25b8f22c1c92ce70cf0a7d Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Fri, 16 Jun 2017 14:45:05 +1200 Subject: [PATCH 1268/1311] New EasyConfig for libpng 1.6.28 with the gimkl-2017a toolchain --- .../l/libpng/libpng-1.6.28-gimkl-2017a.eb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 easybuild/easyconfigs/l/libpng/libpng-1.6.28-gimkl-2017a.eb diff --git a/easybuild/easyconfigs/l/libpng/libpng-1.6.28-gimkl-2017a.eb b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-gimkl-2017a.eb new file mode 100644 index 0000000000..64f18118dd --- /dev/null +++ b/easybuild/easyconfigs/l/libpng/libpng-1.6.28-gimkl-2017a.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libpng' +version = "1.6.28" + +homepage = 'http://www.libpng.org/pub/png/libpng.html' +description = "libpng is the official PNG reference library" + +toolchain = {'version': '2017a', 'name': 'gimkl'} +toolchainopts = {'pic': True} + +source_urls = [SOURCEFORGE_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +dependencies = [('zlib', '1.2.11')] + +configopts = "--with-pic" + +majminver = ''.join(version.split('.')[:2]) +sanity_check_paths = { + 'files': ['include/pngconf.h', 'include/png.h', 'include/pnglibconf.h', 'lib/libpng.a', + 'lib/libpng.%s' % SHLIB_EXT, 'lib/libpng%s.a' % majminver, 'lib/libpng%s.%s' % (majminver, SHLIB_EXT)], + 'dirs': ['bin', 'include/libpng%s' % majminver, 'share/man'], +} + +moduleclass = 'lib' -- GitLab From fa50667be0d65d67726421f60d3a371aa66dbe16 Mon Sep 17 00:00:00 2001 From: Robert Qiao Date: Fri, 16 Jun 2017 16:08:33 +0930 Subject: [PATCH 1269/1311] format updated --- easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb index 5a1afb1351..904722c279 100644 --- a/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb +++ b/easybuild/easyconfigs/o/OrfM/OrfM-0.6.1-foss-2016b.eb @@ -25,8 +25,8 @@ of nucleotide sequences. toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'usempi': True} -sources = ['v%(version)s/%(namelower)s-%(version)s.tar.gz'] -source_urls = ['https://github.com/wwood/OrfM/releases/download'] +sources = ['%(namelower)s-%(version)s.tar.gz'] +source_urls = ['https://github.com/wwood/OrfM/releases/download/v%(version)s'] sanity_check_paths = { 'files': ['bin/orfm'], -- GitLab From 6373bff93ae4157fcbf5d6bdc305902438ebc814 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 16 Jun 2017 09:54:14 -0500 Subject: [PATCH 1270/1311] Removed site customizations and redundant options --- .../Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb b/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb index d9fd114759..78379d4923 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.12-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb @@ -7,7 +7,7 @@ description = """Python is a programming language that lets you work more quickl more effectively.""" toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} -toolchainopts = {'pic': True, 'opt': True, 'optarch': True} +toolchainopts = {'pic': True} source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] sources = [SOURCE_TGZ] @@ -27,8 +27,6 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -modluafooter = 'family("python")' - # bare installation: no extensions included exts_list = [] -- GitLab From a0ecc32a106c84fd1513530fbed7dd7cf55e8f54 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 16 Jun 2017 10:49:58 -0500 Subject: [PATCH 1271/1311] Added lib sanity check paths for debian compatibility --- easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb b/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb index b72cd92143..eb26f01e29 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb @@ -15,8 +15,8 @@ dependencies = [('GMP', '5.0.5')] sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb index e764834b2d..27c65b25e8 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb index fc3be53324..f658dc22c5 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb index c725853009..b0fd192537 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb index d8b0e1009d..2f73f07946 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb index 728d252367..d49da80e3c 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb index d8f9e8fc31..9683896ee0 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb @@ -20,8 +20,8 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - ['lib64/libhogweed.a', 'lib64/libhogweed.%s' % SHLIB_EXT, - 'lib64/libnettle.a', 'lib64/libnettle.%s' % SHLIB_EXT], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } -- GitLab From 5449a5d6d4f1459eb7a04f3a542ab2a5a15cf1e7 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 16 Jun 2017 12:06:33 -0500 Subject: [PATCH 1272/1311] adding easyconfigs: Python-3.5.2-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb --- ...iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-3.5.2-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb new file mode 100644 index 0000000000..7c126a4294 --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-iccifort-2016.3.210-GCC-5.4.0-2.26-bare.eb @@ -0,0 +1,32 @@ +name = 'Python' +version = '3.5.2' +versionsuffix = '-bare' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('Tk', '8.6.5'), # this requires a full X11 stack + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# bare installation: no extensions included +exts_list = [] + +moduleclass = 'lang' -- GitLab From 711bb3ab39f29187ae2b536f57cec10b77cc4676 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 16 Jun 2017 12:13:04 -0500 Subject: [PATCH 1273/1311] adding easyconfigs: Python-3.5.2-GCC-5.4.0-2.26-bare.eb --- .../Python-3.5.2-GCC-5.4.0-2.26-bare.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/p/Python/Python-3.5.2-GCC-5.4.0-2.26-bare.eb diff --git a/easybuild/easyconfigs/p/Python/Python-3.5.2-GCC-5.4.0-2.26-bare.eb b/easybuild/easyconfigs/p/Python/Python-3.5.2-GCC-5.4.0-2.26-bare.eb new file mode 100644 index 0000000000..1e9fd31ecc --- /dev/null +++ b/easybuild/easyconfigs/p/Python/Python-3.5.2-GCC-5.4.0-2.26-bare.eb @@ -0,0 +1,31 @@ +name = 'Python' +version = '3.5.2' +versionsuffix = '-bare' + +homepage = 'http://python.org/' +description = """Python is a programming language that lets you work more quickly and integrate your systems + more effectively.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.python.org/ftp/%(namelower)s/%(version)s/'] +sources = [SOURCE_TGZ] + +dependencies = [ + ('bzip2', '1.0.6'), + ('zlib', '1.2.8'), + ('libreadline', '6.3'), + ('ncurses', '6.0'), + ('SQLite', '3.13.0'), + ('Tk', '8.6.5'), # this requires a full X11 stack + ('GMP', '6.1.1'), + ('libffi', '3.2.1'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.2h'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +moduleclass = 'lang' -- GitLab From 222682e50bd5e1b59792aa7eaaafe53220049d4a Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Fri, 16 Jun 2017 13:18:51 -0500 Subject: [PATCH 1274/1311] adding easyconfigs: libtasn1-4.12-GCCcore-5.4.0.eb, libidn-1.32-GCCcore-5.4.0.eb, libunistring-0.9.6-GCCcore-5.4.0.eb --- .../l/libidn/libidn-1.32-GCCcore-5.4.0.eb | 21 +++++++++++++++ .../l/libtasn1/libtasn1-4.12-GCCcore-5.4.0.eb | 24 +++++++++++++++++ .../libunistring-0.9.6-GCCcore-5.4.0.eb | 26 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 easybuild/easyconfigs/l/libidn/libidn-1.32-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libtasn1/libtasn1-4.12-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/l/libidn/libidn-1.32-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libidn/libidn-1.32-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..8fe50e9968 --- /dev/null +++ b/easybuild/easyconfigs/l/libidn/libidn-1.32-GCCcore-5.4.0.eb @@ -0,0 +1,21 @@ +easyblock = 'ConfigureMake' + +name = 'libidn' +version = '1.32' + +homepage = 'http://www.gnu.org/software/libidn' +description = """GNU Libidn is a fully documented implementation of the Stringprep, Punycode and IDNA specifications. +Libidn's purpose is to encode and decode internationalized domain names.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCELOWER_TAR_GZ] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/idn', 'lib/libidn.%s' % SHLIB_EXT], + 'dirs': ['include'], +} +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libtasn1/libtasn1-4.12-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libtasn1/libtasn1-4.12-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..e8763aba9c --- /dev/null +++ b/easybuild/easyconfigs/l/libtasn1/libtasn1-4.12-GCCcore-5.4.0.eb @@ -0,0 +1,24 @@ +easyblock = 'ConfigureMake' + +name = 'libtasn1' +version = '4.12' + +homepage = 'https://www.gnu.org/software/libtasn1/' +description = """Libtasn1 is the ASN.1 library used by GnuTLS, GNU Shishi and some other packages. + It was written by Fabio Fiorina, and has been shipped as part of GnuTLS + for some time but is now a proper GNU package.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/asn1%s' % x for x in ['Coding', 'Decoding', 'Parser']] + + ['lib/libtasn1.%s' % x for x in ['a', SHLIB_EXT]], + 'dirs': ['include'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-GCCcore-5.4.0.eb b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..c1f1541e7a --- /dev/null +++ b/easybuild/easyconfigs/l/libunistring/libunistring-0.9.6-GCCcore-5.4.0.eb @@ -0,0 +1,26 @@ +easyblock = 'ConfigureMake' + +name = 'libunistring' +version = '0.9.6' + +homepage = 'http://www.gnu.org/software/libunistring/' +description = """This library provides functions for manipulating Unicode strings and for manipulating C strings + according to the Unicode standard.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_XZ] +source_urls = [GNU_SOURCE] + +builddependencies = [('binutils', '2.26', '', True)] + +parallel = 1 + +sanity_check_paths = { + 'files': ['lib/libunistring.a', 'lib/libunistring.%s' % SHLIB_EXT] + + ['include/uni%s.h' % x for x in ['case', 'conv', 'ctype', 'lbrk', 'name', 'norm', + 'stdio', 'str', 'types', 'wbrk', 'width']], + 'dirs': ['include/unistring'], +} + +moduleclass = 'lib' -- GitLab From 3165263b822850b2c389d0cb46545de0dac85c86 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 19 Jun 2017 13:42:18 +0200 Subject: [PATCH 1275/1311] adding easyconfigs: VTune-2017_update3.eb --- .../easyconfigs/v/VTune/VTune-2017_update3.eb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easybuild/easyconfigs/v/VTune/VTune-2017_update3.eb diff --git a/easybuild/easyconfigs/v/VTune/VTune-2017_update3.eb b/easybuild/easyconfigs/v/VTune/VTune-2017_update3.eb new file mode 100644 index 0000000000..e35eec8996 --- /dev/null +++ b/easybuild/easyconfigs/v/VTune/VTune-2017_update3.eb @@ -0,0 +1,15 @@ +name = 'VTune' +version = '2017_update3' + +homepage = 'http://software.intel.com/en-us/intel-vtune-amplifier-xe' +description = """Intel VTune Amplifier XE is the premier performance profiler for C, C++, C#, Fortran, + Assembly and Java.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = ['vtune_amplifier_xe_%(version)s.tar.gz'] +checksums = ['1e32ce4a591439d42b23ad2960350f3354fe5f805f96c98f21ce315b66789025'] + +license_file = HOME + '/licenses/intel/license.lic' + +moduleclass = 'tools' -- GitLab From 7a9cbedfdc2c6641973bf6fc70c006cfb6a6ed02 Mon Sep 17 00:00:00 2001 From: iotaka Date: Mon, 19 Jun 2017 15:56:03 +0200 Subject: [PATCH 1276/1311] adding easyconfigs: modred-2.0.2-foss-2016b-Python-3.5.2.eb --- .../modred-2.0.2-foss-2016b-Python-3.5.2.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/m/modred/modred-2.0.2-foss-2016b-Python-3.5.2.eb diff --git a/easybuild/easyconfigs/m/modred/modred-2.0.2-foss-2016b-Python-3.5.2.eb b/easybuild/easyconfigs/m/modred/modred-2.0.2-foss-2016b-Python-3.5.2.eb new file mode 100644 index 0000000000..d45b071d80 --- /dev/null +++ b/easybuild/easyconfigs/m/modred/modred-2.0.2-foss-2016b-Python-3.5.2.eb @@ -0,0 +1,22 @@ +easyblock = 'PythonPackage' + +name = 'modred' +version = '2.0.2' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://pypi.python.org/pypi/modred/" +description = """Compute modal decompositions and reduced-order models, easily, efficiently, and in parallel.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] + +dependencies = [('Python', '3.5.2')] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'lib' -- GitLab From 9d21dd733f27f29d3cf88d5230d775ba8649619c Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 11:51:22 -0500 Subject: [PATCH 1277/1311] adding easyconfigs: Guile-1.8.8-GCCcore-5.4.0.eb --- .../g/Guile/Guile-1.8.8-GCCcore-5.4.0.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/g/Guile/Guile-1.8.8-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/g/Guile/Guile-1.8.8-GCCcore-5.4.0.eb b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..4f4fa3e2f0 --- /dev/null +++ b/easybuild/easyconfigs/g/Guile/Guile-1.8.8-GCCcore-5.4.0.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'Guile' +version = '1.8.8' + +homepage = 'http://www.gnu.org/software/guile' +description = """Guile is the GNU Ubiquitous Intelligent Language for Extensions, + the official extension language for the GNU operating system.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [GNU_SOURCE] + +dependencies = [ + ('libtool', '2.4.6'), + ('GMP', '6.1.1'), + ('libunistring', '0.9.6'), + ('pkg-config', '0.29.1'), + ('libffi', '3.2.1'), + ('libreadline', '6.3'), +] + +builddependencies = [('binutils', '2.26', '', True)] + +configopts = " --enable-error-on-warning=no" + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ["guile", 'guile-config', 'guile-snarf', 'guile-tools']] + + ["lib/libguile.a", "include/libguile.h"], + 'dirs': [] +} + +moduleclass = 'devel' -- GitLab From ac00de53f113e340ebb7abd62e73baa22b594bb5 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 11:51:45 -0500 Subject: [PATCH 1278/1311] adding easyconfigs: p11-kit-0.23.2-GCCcore-5.4.0.eb --- .../p/p11-kit/p11-kit-0.23.2-GCCcore-5.4.0.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/p/p11-kit/p11-kit-0.23.2-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/p/p11-kit/p11-kit-0.23.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/p/p11-kit/p11-kit-0.23.2-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..0e997ce499 --- /dev/null +++ b/easybuild/easyconfigs/p/p11-kit/p11-kit-0.23.2-GCCcore-5.4.0.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'p11-kit' +version = '0.23.2' + +homepage = 'http://p11-glue.freedesktop.org/p11-kit.html' +description = """Provides a way to load and enumerate PKCS#11 modules. + Provides a standard configuration setup for installing + PKCS#11 modules in such a way that they're discoverable. + Also solves problems with coordinating the use of PKCS#11 + by different components or libraries living in the same process.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +source_urls = ['http://p11-glue.freedesktop.org/releases/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('libtasn1', '4.12'), + ('libffi', '3.2.1'), +] + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ['bin/p11-kit', 'bin/trust'] + + ['lib/libp11-kit.%s' % SHLIB_EXT], + 'dirs': ['include/p11-kit-1/p11-kit'], +} + +moduleclass = 'lib' -- GitLab From aa6b3d0674cf37ad46f7fc7183bda66f22efc7c3 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 14:26:27 -0500 Subject: [PATCH 1279/1311] adding easyconfigs: cURL-7.49.1-GCCcore-5.4.0.eb, Doxygen-1.8.11-GCCcore-5.4.0.eb, Szip-2.1-GCCcore-5.4.0.eb --- .../c/cURL/cURL-7.49.1-GCCcore-5.4.0.eb | 33 +++++++++++++++++++ .../d/Doxygen/Doxygen-1.8.11-GCCcore-5.4.0.eb | 21 ++++++++++++ .../s/Szip/Szip-2.1-GCCcore-5.4.0.eb | 25 ++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 easybuild/easyconfigs/c/cURL/cURL-7.49.1-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.11-GCCcore-5.4.0.eb create mode 100644 easybuild/easyconfigs/s/Szip/Szip-2.1-GCCcore-5.4.0.eb diff --git a/easybuild/easyconfigs/c/cURL/cURL-7.49.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/c/cURL/cURL-7.49.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..9bb277e7b1 --- /dev/null +++ b/easybuild/easyconfigs/c/cURL/cURL-7.49.1-GCCcore-5.4.0.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'cURL' +version = '7.49.1' + +homepage = 'http://curl.haxx.se' +description = """libcurl is a free and easy-to-use client-side URL transfer library, + supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports + SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, + proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, + Kerberos), file transfer resume, http proxy tunneling and more.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://curl.haxx.se/download/'] + +builddependencies = [('binutils', '2.26', '', True)] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# dependencies = [('OpenSSL', '1.0.1t')] +# configopts = "--with-ssl=$EBROOTOPENSSL" + +modextravars = {'CURL_INCLUDES': '%(installdir)s/include'} + +sanity_check_paths = { + 'files': ['bin/curl', 'lib/libcurl.a', 'lib/libcurl.%s' % SHLIB_EXT], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.11-GCCcore-5.4.0.eb b/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.11-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..f55dbe8583 --- /dev/null +++ b/easybuild/easyconfigs/d/Doxygen/Doxygen-1.8.11-GCCcore-5.4.0.eb @@ -0,0 +1,21 @@ +name = 'Doxygen' +version = '1.8.11' + +homepage = 'http://www.doxygen.org' +description = """Doxygen is a documentation system for C++, C, Java, Objective-C, Python, + IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D.""" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} + +sources = ['%(namelower)s-%(version)s.src.tar.gz'] +source_urls = ['http://ftp.stack.nl/pub/users/dimitri/'] + +builddependencies = [ + ('CMake', '3.7.1'), + ('flex', '2.6.0'), + ('Bison', '3.0.4'), +] + +parallel = 1 + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-GCCcore-5.4.0.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-GCCcore-5.4.0.eb new file mode 100644 index 0000000000..51caf7745b --- /dev/null +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-GCCcore-5.4.0.eb @@ -0,0 +1,25 @@ +easyblock = 'ConfigureMake' + +name = 'Szip' +version = '2.1' + +homepage = 'http://www.hdfgroup.org/doc_resource/SZIP/' +description = "Szip compression software, providing lossless compression of scientific data" + +toolchain = {'name': 'GCCcore', 'version': '5.4.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/lib-external/szip/%(version)s/src'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = "--with-pic" + +builddependencies = [('binutils', '2.26', '', True)] + +sanity_check_paths = { + 'files': ["lib/libsz.a", "lib/libsz.%s" % SHLIB_EXT] + + ["include/%s" % x for x in ["ricehdf.h", "szip_adpt.h", "szlib.h"]], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From 450a7f3930fa0e6167a48ab803191a5275f489ec Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 14:31:16 -0500 Subject: [PATCH 1280/1311] adding easyconfigs: libxc-3.0.0-GCC-5.4.0-2.26.eb --- .../l/libxc/libxc-3.0.0-GCC-5.4.0-2.26.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/l/libxc/libxc-3.0.0-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..c3570aaed3 --- /dev/null +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-GCC-5.4.0-2.26.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libxc' +version = '3.0.0' + +homepage = 'http://www.tddft.org/programs/octopus/wiki/index.php/Libxc' +description = """Libxc is a library of exchange-correlation functionals for density-functional theory. + The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" + +toolchain = {'name': 'GCC', 'version': '5.4.0-2.26'} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] + +configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' + +# From the libxc mailing list +# To summarize: expect less tests to fail in libxc 2.0.2, but don't expect +# a fully working testsuite soon (unless someone wants to volunteer to do +# it, of course ) In the meantime, unless the majority of the tests +# fail, your build should be fine. +# runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'dirs': ['include'], +} + +parallel = 1 + +moduleclass = 'chem' -- GitLab From 76a807808549fec43273cd896e8cc05d529f7989 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 14:32:00 -0500 Subject: [PATCH 1281/1311] adding easyconfigs: libxc-3.0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb --- ....0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/l/libxc/libxc-3.0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb diff --git a/easybuild/easyconfigs/l/libxc/libxc-3.0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb new file mode 100644 index 0000000000..5dad1c142c --- /dev/null +++ b/easybuild/easyconfigs/l/libxc/libxc-3.0.0-iccifort-2016.3.210-GCC-5.4.0-2.26.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'libxc' +version = '3.0.0' + +homepage = 'http://www.tddft.org/programs/octopus/wiki/index.php/Libxc' +description = """Libxc is a library of exchange-correlation functionals for density-functional theory. + The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals.""" + +toolchain = {'name': 'iccifort', 'version': '2016.3.210-GCC-5.4.0-2.26'} +# Results for some functionals (e.g. mgga_c_tpss) deviate with too aggressive optimization settings. +toolchainopts = {'lowopt': True} + +sources = [SOURCE_TAR_GZ] +source_urls = ['http://www.tddft.org/programs/octopus/down.php?file=libxc/'] + +configopts = 'FC="$F77" FCFLAGS="$FFLAGS" --enable-shared --enable-fortran' + +# From the libxc mailing list +# To summarize: expect less tests to fail in libxc 2.0.2, but don't expect +# a fully working testsuite soon (unless someone wants to volunteer to do +# it, of course ) In the meantime, unless the majority of the tests +# fail, your build should be fine. +# runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libxc%s.%s' % (x, y) for x in ['', 'f90'] for y in ['a', SHLIB_EXT]], + 'dirs': ['include'], +} + +parallel = 1 + +moduleclass = 'chem' -- GitLab From 9fb4fa4582db42b986b3d2449c9a963e9ed528c8 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 14:51:44 -0500 Subject: [PATCH 1282/1311] adding easyconfigs: ABINIT-8.2.2-foss-2016b.eb --- .../a/ABINIT/ABINIT-8.2.2-foss-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-foss-2016b.eb diff --git a/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-foss-2016b.eb b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-foss-2016b.eb new file mode 100644 index 0000000000..0042cb41f3 --- /dev/null +++ b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'ABINIT' +version = '8.2.2' + +homepage = 'http://www.abinit.org/' +description = """ABINIT is a package whose main program allows one to find the total energy, charge density and + electronic structure of systems made of electrons and nuclei (molecules and periodic solids) within Density Functional + Theory (DFT), using pseudopotentials and a planewave or wavelet basis.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://ftp.abinit.org/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['5f25250e06fdc0815c224ffd29858860'] + +configopts = "--with-mpi-prefix=$EBROOTOPENMPI/intel64 --with-trio-flavor='etsf_io+netcdf' --with-dft=flavor='libxc' " +configopts += '--with-netcdf-incs="-I$EBROOTNETCDF/include -I$EBROOTNETCDFMINFORTRAN/include" ' +configopts += '--with-netcdf-libs="-L$EBROOTNETCDF/lib -lnetcdf -L$EBROOTNETCDFMINFORTRAN/lib -lnetcdff" ' +configopts += '--with-libxc-incs="-I$EBROOTLIBXC/include" --with-libxc-libs="-L$EBROOTLIBXC/lib -lxc" ' +configopts += 'FCFLAGS="-ffree-line-length-none" ' + +dependencies = [ + ('libxc', '3.0.0'), + ('netCDF', '4.4.1'), + ('netCDF-Fortran', '4.4.4'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['abinit', 'aim', 'cut3d', 'conducti', 'mrgddb', 'mrgscr', 'optic']], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'chem' -- GitLab From 0c4ecdaf2045e4021ebe29aa803135813ec8d4d6 Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Mon, 19 Jun 2017 14:58:44 -0500 Subject: [PATCH 1283/1311] adding easyconfigs: ABINIT-8.2.2-intel-2016b.eb --- .../a/ABINIT/ABINIT-8.2.2-intel-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-intel-2016b.eb diff --git a/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-intel-2016b.eb b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-intel-2016b.eb new file mode 100644 index 0000000000..5ea50a6af7 --- /dev/null +++ b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.2.2-intel-2016b.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = 'ABINIT' +version = '8.2.2' + +homepage = 'http://www.abinit.org/' +description = """ABINIT is a package whose main program allows one to find the total energy, charge density and + electronic structure of systems made of electrons and nuclei (molecules and periodic solids) within Density Functional + Theory (DFT), using pseudopotentials and a planewave or wavelet basis.""" + +toolchain = {'name': 'intel', 'version': '2016b'} + +source_urls = ['http://ftp.abinit.org/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['5f25250e06fdc0815c224ffd29858860'] + +configopts = "--with-mpi-prefix=$EBROOTIMPI/intel64 --with-trio-flavor='etsf_io+netcdf' --with-dft=flavor='libxc' " +configopts += '--with-netcdf-incs="-I$EBROOTNETCDF/include -I$EBROOTNETCDFMINFORTRAN/include" ' +configopts += '--with-netcdf-libs="-L$EBROOTNETCDF/lib -lnetcdf -L$EBROOTNETCDFMINFORTRAN/lib -lnetcdff" ' +configopts += '--with-libxc-incs="-I$EBROOTLIBXC/include" --with-libxc-libs="-L$EBROOTLIBXC/lib -lxc" ' + +dependencies = [ + ('libxc', '3.0.0'), + ('netCDF', '4.4.1'), + ('netCDF-Fortran', '4.4.4'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['abinit', 'aim', 'cut3d', 'conducti', 'mrgddb', 'mrgscr', 'optic']], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'chem' -- GitLab From 87eb3c20e106aa923e247c7a9fa30b5cbf3b55b4 Mon Sep 17 00:00:00 2001 From: Benjamin Roberts Date: Tue, 20 Jun 2017 10:49:55 +1200 Subject: [PATCH 1284/1311] The NASM (Netwide Assembler) with no toolchain --- easybuild/easyconfigs/n/NASM/NASM-2.12.02.eb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 easybuild/easyconfigs/n/NASM/NASM-2.12.02.eb diff --git a/easybuild/easyconfigs/n/NASM/NASM-2.12.02.eb b/easybuild/easyconfigs/n/NASM/NASM-2.12.02.eb new file mode 100644 index 0000000000..3c18189624 --- /dev/null +++ b/easybuild/easyconfigs/n/NASM/NASM-2.12.02.eb @@ -0,0 +1,19 @@ +easyblock = 'ConfigureMake' + +name = 'NASM' +version = '2.12.02' + +homepage = 'http://www.nasm.us/' +description = """NASM: General-purpose x86 assembler""" + +toolchain = {'version': 'dummy', 'name': 'dummy'} + +sources = [SOURCELOWER_TAR_BZ2] +source_urls = ['http://www.nasm.us/pub/nasm/releasebuilds/%(version)s'] + +sanity_check_paths = { + 'files': ['bin/nasm'], + 'dirs': [], +} + +moduleclass = 'lang' -- GitLab From 4b035601e78e5cfa5095d447b19557e31d8e1d9a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 10:07:47 +0200 Subject: [PATCH 1285/1311] adding easyconfigs: FUNWAVE-TVD-3.1-20170525-intel-2017a-no-storm.eb --- ...E-TVD-3.1-20170525-intel-2017a-no-storm.eb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a-no-storm.eb diff --git a/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a-no-storm.eb b/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a-no-storm.eb new file mode 100644 index 0000000000..4fd23347c3 --- /dev/null +++ b/easybuild/easyconfigs/f/FUNWAVE-TVD/FUNWAVE-TVD-3.1-20170525-intel-2017a-no-storm.eb @@ -0,0 +1,31 @@ +easyblock = 'MakeCp' + +name = 'FUNWAVE-TVD' +version = '3.1-20170525' +commit = '814107a' +versionsuffix = '-no-storm' + +homepage = 'https://fengyanshi.github.io' +description = """FUNWAVE–TVD is the TVD version of the fully nonlinear Boussinesq wave model (FUNWAVE) + initially developed by Kirby et al.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/fengyanshi/FUNWAVE-TVD/archive/'] +sources = ['%s.tar.gz' % commit] + +start_dir = 'src' +parallel = 1 +buildopts = 'FC="$FC" FFLAGS="$FFLAGS -fpp" CPPFLAGS="-DINTEL -DMIXING -DMANNING -DVIS_KENNEDY" ' +# don't use -DSTORM +buildopts += "FLAG_16='' " + +files_to_copy = [(['mytvd'], 'bin')] + +sanity_check_paths = { + 'files': ['bin/mytvd'], + 'dirs': [], +} + +moduleclass = 'math' -- GitLab From 5bc9a78ea5bff968906d375839a81e30f342528e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 10:31:28 +0200 Subject: [PATCH 1286/1311] adding easyconfigs: sharutils-4.15-GCCcore-6.3.0.eb --- .../sharutils/sharutils-4.15-GCCcore-6.3.0.eb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 easybuild/easyconfigs/s/sharutils/sharutils-4.15-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/s/sharutils/sharutils-4.15-GCCcore-6.3.0.eb b/easybuild/easyconfigs/s/sharutils/sharutils-4.15-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..06f3fc97f7 --- /dev/null +++ b/easybuild/easyconfigs/s/sharutils/sharutils-4.15-GCCcore-6.3.0.eb @@ -0,0 +1,23 @@ +easyblock = 'ConfigureMake' + +name = 'sharutils' +version = '4.15' + +homepage = 'https://www.gnu.org/software/sharutils/' +description = """GNU shar makes so-called shell archives out of many files, preparing them for transmission by + electronic mail services, while unshar helps unpacking shell archives after reception.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = [GNU_SOURCE] +sources = [SOURCE_TAR_GZ] + +# use same binutils version that was used when building GCC toolchain +builddependencies = [('binutils', '2.27', '', True)] + +sanity_check_paths = { + 'files': ['bin/shar', 'bin/uudecode', 'bin/uuencode', 'bin/unshar'], + 'dirs': [], +} + +moduleclass = 'tools' -- GitLab From d1310b028c90f173f3ba5cd759519d2af289c84f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 13:14:28 +0200 Subject: [PATCH 1287/1311] add glmmML & ordinal (+ ucminf) as R extensions --- easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb index db02d8833d..5616a94b6a 100644 --- a/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.4.0-intel-2017a-X11-20170314.eb @@ -524,6 +524,9 @@ exts_list = [ ('memuse', '3.0-1', ext_options), ('pinfsc50', '1.1.0', ext_options), ('vcfR', '1.5.0', ext_options), + ('glmmML', '1.0.2', ext_options), + ('ucminf', '1.1-4', ext_options), + ('ordinal', '2015.6-28', ext_options), ] moduleclass = 'lang' -- GitLab From 6bde8f4b0dbaa02cbd112f6d99f706a3a63905d8 Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Tue, 20 Jun 2017 16:47:44 +0100 Subject: [PATCH 1288/1311] adding easyconfigs: Trim_Galore-0.4.4-foss-2016b.eb --- .../Trim_Galore-0.4.4-foss-2016b.eb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 easybuild/easyconfigs/t/Trim_Galore/Trim_Galore-0.4.4-foss-2016b.eb diff --git a/easybuild/easyconfigs/t/Trim_Galore/Trim_Galore-0.4.4-foss-2016b.eb b/easybuild/easyconfigs/t/Trim_Galore/Trim_Galore-0.4.4-foss-2016b.eb new file mode 100755 index 0000000000..ed3b679410 --- /dev/null +++ b/easybuild/easyconfigs/t/Trim_Galore/Trim_Galore-0.4.4-foss-2016b.eb @@ -0,0 +1,33 @@ +# 0.4.2 modified by: +# Adam Huffman +# The Francis Crick Institute +# TODO: deal with the hardcoding of /usr/bin/perl + +easyblock = "PackedBinary" + +name = 'Trim_Galore' +version = '0.4.4' + +homepage = 'http://www.bioinformatics.babraham.ac.uk/projects/trim_galore/' +description = """A wrapper tool around Cutadapt and FastQC to consistently apply + quality and adapter trimming to FastQ files, with some extra functionality for + MspI-digested RRBS-type (Reduced Representation Bisufite-Seq) libraries.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +sources = ['%(namelower)s_v%(version)s.zip'] +source_urls = ['http://www.bioinformatics.babraham.ac.uk/projects/%(namelower)s'] + +install_cmd = "cp -a * %(installdir)s && chmod +x %(installdir)s/%(namelower)s" + +dependencies = [ + ('FastQC', '0.11.5', '-Java-1.7.0_80', True), + ('cutadapt', '1.9.1', '-Python-2.7.12'), +] + +sanity_check_paths = { + 'files': ["trim_galore"], + 'dirs': [], +} + +moduleclass = 'bio' -- GitLab From 910a55f08aa99a644510a10708ea8ab8e317ddc1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 20:34:47 +0200 Subject: [PATCH 1289/1311] fix source URLs for HDF5 --- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb | 2 +- .../h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb | 2 +- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb | 2 +- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb | 2 +- .../easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb | 2 +- easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb | 2 +- .../easyconfigs/h/HDF5/HDF5-1.8.10-GCC-4.8.1-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-goolf-1.4.10.eb | 4 ++-- .../h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs-zlib-1.2.5.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.4.0-gpfs.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.5.0-gpfs.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-ictce-6.1.5-gpfs.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-intel-2014b-gpfs.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.4.10.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.5.14.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.10-patch1-ictce-5.3.0.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.11-GCC-4.8.1-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-goolf-1.4.10.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.11-ictce-5.3.0-serial.eb | 4 ++-- .../h/HDF5/HDF5-1.8.12-goolf-1.4.10-zlib-1.2.7.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.4.0.eb | 4 ++-- .../h/HDF5/HDF5-1.8.12-ictce-5.5.0-zlib-1.2.8.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2014b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2015a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2014b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-foss-2015a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-foss-2015a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015b.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015b.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2015a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.16-gimkl-2.11.5-serial.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b.eb | 4 ++-- .../h/HDF5/HDF5-1.8.16-intel-2016.02-GCC-4.9.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.07.eb | 4 ++-- .../h/HDF5/HDF5-1.8.16-iomkl-2016.09-GCC-4.9.3-2.25.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016a.eb | 4 ++-- .../easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b-serial.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb | 7 ++----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb | 7 ++----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb | 7 ++----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb | 7 ++----- .../easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb | 7 ++----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb | 7 ++----- easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-goolf-1.4.10.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-ictce-5.3.0.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.4.10.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.5.16.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.2.0.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.3.0.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.4.0.eb | 4 ++-- easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-intel-2014b.eb | 4 ++-- 75 files changed, 144 insertions(+), 162 deletions(-) diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb index 55975c97d5..11a5ffcadd 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-foss-2016b.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.0-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb index a728a33f56..761c68b5eb 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-goolfc-2016.10.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.0-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb index 8eddf5504b..7253681751 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2016b.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.0-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb index 5cf3a3e7f5..cb5285d7c5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017.01.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.0-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb index bc132a2144..9d04fbcf11 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.0-patch1-intel-2017a.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.0-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb index d72f14fe00..2cb7193188 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.10.1-intel-2017a.eb @@ -1,7 +1,7 @@ name = 'HDF5' version = '1.10.1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-GCC-4.8.1-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-GCC-4.8.1-serial.eb index 9d10ec816c..1e95612a1b 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-GCC-4.8.1-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-GCC-4.8.1-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'GCC', 'version': '4.8.1'} toolchainopts = {'optarch': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-goolf-1.4.10.eb index 288a2e47ff..1f3a15a705 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-goolf-1.4.10.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.10' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs-zlib-1.2.5.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs-zlib-1.2.5.eb index 1b26514524..9f3153cef8 100755 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs-zlib-1.2.5.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs-zlib-1.2.5.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs.eb index 20e204943c..314870506e 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-gpfs.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-serial.eb index 4923cec819..54393d6cef 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0.eb index 53c166e963..75fb24dc93 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.3.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.10' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.4.0-gpfs.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.4.0-gpfs.eb index 126e473584..2aaf800fdb 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.4.0-gpfs.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.4.0-gpfs.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.4.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.5.0-gpfs.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.5.0-gpfs.eb index eec3211c35..664ac4915d 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.5.0-gpfs.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-5.5.0-gpfs.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-6.1.5-gpfs.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-6.1.5-gpfs.eb index caf75ce765..4f6fffd29a 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-6.1.5-gpfs.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-ictce-6.1.5-gpfs.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '6.1.5'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-intel-2014b-gpfs.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-intel-2014b-gpfs.eb index fa45e3d80d..55ac49288a 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-intel-2014b-gpfs.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-intel-2014b-gpfs.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.10' versionsuffix = "-gpfs" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.4.10.eb index 0f94ca89b3..ed6d0e1c4e 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.4.10.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.10-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.5.14.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.5.14.eb index c83b2a6347..da6a6ac07e 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.5.14.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-goolf-1.5.14.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.10-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.5.14'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-ictce-5.3.0.eb index 96aaf04223..df1a74ad9a 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.10-patch1-ictce-5.3.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.10-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-GCC-4.8.1-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-GCC-4.8.1-serial.eb index d4743307f6..69b3336df0 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-GCC-4.8.1-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-GCC-4.8.1-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.11' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'GCC', 'version': '4.8.1'} toolchainopts = {'optarch': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-goolf-1.4.10.eb index 4406c160f4..baa65b4571 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-goolf-1.4.10.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.11' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-ictce-5.3.0-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-ictce-5.3.0-serial.eb index d1cfae6705..7095cb38b8 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-ictce-5.3.0-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.11-ictce-5.3.0-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.11' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-goolf-1.4.10-zlib-1.2.7.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-goolf-1.4.10-zlib-1.2.7.eb index a0a7586662..d0013da7bf 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-goolf-1.4.10-zlib-1.2.7.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-goolf-1.4.10-zlib-1.2.7.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.12' versionsuffix = '-zlib-1.2.7' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.4.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.4.0.eb index 233b7e31da..777fc010e6 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.4.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.4.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.12' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.4.0'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0-zlib-1.2.8.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0-zlib-1.2.8.eb index bf02342e7c..ba8d085626 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0-zlib-1.2.8.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0-zlib-1.2.8.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.12' versionsuffix = '-zlib-1.2.8' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0.eb index 0a10444693..fd08cc083e 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-ictce-5.5.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.12' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.5.0'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-intel-2016b.eb index da7a64fcf9..ba130d5f31 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.12-intel-2016b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.12' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2014b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2014b.eb index 2af8e449bf..c5622dfd07 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2014b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2014b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.13' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2014b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2015a.eb index f79d365b61..f8f32df424 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-foss-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.13' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2014b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2014b.eb index e20cda0940..14daa11265 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2014b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2014b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.13' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015a.eb index 16f7a03776..901fd44392 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.13' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015b.eb index a74b48d664..6a1a9188e1 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.13-intel-2015b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.13' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-foss-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-foss-2015a.eb index 35077bfe35..6720320b04 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-foss-2015a.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = "1.8.14" -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2-serial.eb index 8ffb9102ba..8708c7b4dd 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.14' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2.eb index 5d8a6788d3..bfef0cbb11 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-ictce-7.1.2.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.14' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '7.1.2'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a-serial.eb index 0db92859a2..5414c97fd0 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.14' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a.eb index 2b7af38374..8811c59a40 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.14-intel-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.14' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-foss-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-foss-2015a.eb index ef7549e987..88e2ae54b1 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-foss-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015a.eb index 9b028b25b8..e5738f0904 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015b.eb index 802e3dd6a1..b35f180383 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-intel-2015b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015a.eb index a9ec210198..152a305c88 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015b.eb index 8b6038c4ee..d234a1dcc1 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-foss-2015b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015a.eb index ec9b5d3a8a..03fb175bd6 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015b.eb index aabe3f8e81..2ddc5c482c 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.15-patch1-intel-2015b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.15-patch1' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2015a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2015a.eb index 25e05e8e27..2309adbc85 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2015a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2015a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2015a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a-serial.eb index 2936e9795e..1f315f8f38 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.16' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb index 7250d32fe5..67235e28b4 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-foss-2016a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-gimkl-2.11.5-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-gimkl-2.11.5-serial.eb index 3f80a99e71..ac5b554944 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-gimkl-2.11.5-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-gimkl-2.11.5-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.16' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'gimkl', 'version': '2.11.5'} toolchainopts = {'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b-serial.eb index 1b0486b830..d28779cc9c 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.16' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b.eb index 8df4b88524..0903315947 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2015b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2015b'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016.02-GCC-4.9.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016.02-GCC-4.9.eb index d1c17ce30e..0aa0ce34f3 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016.02-GCC-4.9.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016.02-GCC-4.9.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016.02-GCC-4.9'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a-serial.eb index dc2e939bfa..930a707634 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.16' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a.eb index dc65dce562..cade57c186 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-intel-2016a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.07.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.07.eb index d61bff1fff..feea5f3d11 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.07.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.07.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'iomkl', 'version': '2016.07'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.09-GCC-4.9.3-2.25.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.09-GCC-4.9.3-2.25.eb index e3d38f1976..847ddbbde6 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.09-GCC-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.16-iomkl-2016.09-GCC-4.9.3-2.25.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.16' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'iomkl', 'version': '2016.09-GCC-4.9.3-2.25'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb index 1cc3adf6f7..9ed0a9b12d 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.17' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'optarch': True, 'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a.eb index 359ef33d9b..7de9eafbba 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.17' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016a'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016b.eb index 5063dd3bc6..396a16a44d 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-foss-2016b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.17' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016a.eb index 7ab0f77fba..a5deac4990 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016a.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.17' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016a'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b-serial.eb index ded2abcfa1..529a200b16 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b-serial.eb @@ -2,14 +2,14 @@ name = 'HDF5' version = '1.8.17' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': False} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b.eb index d67a77ebd2..24a6c22972 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.17-intel-2016b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.17' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb index e6c0e7eab7..f6e11b3e6a 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2016b.eb @@ -1,17 +1,14 @@ name = 'HDF5' version = '1.8.18' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb index 1febe1c832..addd6deb8d 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-foss-2017a.eb @@ -1,17 +1,14 @@ name = 'HDF5' version = '1.8.18' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'foss', 'version': '2017a'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb index d1efd2d906..1b22bab5d5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2016b.eb @@ -1,17 +1,14 @@ name = 'HDF5' version = '1.8.18' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2016b'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb index 2b7452c39b..52424da991 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017.01.eb @@ -1,17 +1,14 @@ name = 'HDF5' version = '1.8.18' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2017.01'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb index ef054b6cdf..dd0fd05bf2 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a-serial.eb @@ -2,17 +2,14 @@ name = 'HDF5' version = '1.8.18' versionsuffix = '-serial' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'pic': True, 'usempi': False} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb index 570e4a8ff2..630ef958f3 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.18-intel-2017a.eb @@ -1,17 +1,14 @@ name = 'HDF5' version = '1.8.18' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2017a'} toolchainopts = {'pic': True, 'usempi': True} -source_urls = [ - 'https://support.hdfgroup.org/ftp/HDF5/current18/src/', - 'https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(versions)/src/' -] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] checksums = ['dd2148b740713ca0295442ec683d7b1c'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-goolf-1.4.10.eb index b8dd1adc77..3b0999608a 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-goolf-1.4.10.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.7' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-ictce-5.3.0.eb index d33b58408f..efc7ae1f6e 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.7-ictce-5.3.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.7' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.4.10.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.4.10.eb index 513cb0e22b..ddc5289cb5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.4.10.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.4.10'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.5.16.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.5.16.eb index 46dd3d15ad..e77a9b41a1 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.5.16.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-goolf-1.5.16.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'goolf', 'version': '1.5.16'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = ['configure_libtool.patch'] diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.2.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.2.0.eb index 7cd6cdf595..24dd608c18 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.2.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.2.0.eb @@ -1,15 +1,15 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.2.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] patches = [ 'HDF5_configure_ictce.patch', diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.3.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.3.0.eb index fd4fb4e5c0..202a1ff1e5 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.3.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.3.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.4.0.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.4.0.eb index 4c1c1db157..51723ed590 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.4.0.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-ictce-5.4.0.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'ictce', 'version': '5.4.0'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ diff --git a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-intel-2014b.eb b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-intel-2014b.eb index 24af13ad70..e3dd542387 100644 --- a/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-intel-2014b.eb +++ b/easybuild/easyconfigs/h/HDF5/HDF5-1.8.9-intel-2014b.eb @@ -1,14 +1,14 @@ name = 'HDF5' version = '1.8.9' -homepage = 'http://www.hdfgroup.org/HDF5/' +homepage = 'https://support.hdfgroup.org/HDF5/' description = """HDF5 is a unique technology suite that makes possible the management of extremely large and complex data collections.""" toolchain = {'name': 'intel', 'version': '2014b'} toolchainopts = {'optarch': True, 'usempi': True, 'pic': True} -source_urls = ['http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version)s/src'] +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%(version_major_minor)s/hdf5-%(version)s/src'] sources = [SOURCELOWER_TAR_GZ] patches = [ -- GitLab From 5aae227867f8c4c0de857c68da96fb79d101e32e Mon Sep 17 00:00:00 2001 From: Davide Vanzo Date: Tue, 20 Jun 2017 14:48:06 -0500 Subject: [PATCH 1290/1311] adding easyconfigs: ABINIT-8.0.8b-foss-2016b.eb --- .../a/ABINIT/ABINIT-8.0.8b-foss-2016b.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/a/ABINIT/ABINIT-8.0.8b-foss-2016b.eb diff --git a/easybuild/easyconfigs/a/ABINIT/ABINIT-8.0.8b-foss-2016b.eb b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.0.8b-foss-2016b.eb new file mode 100644 index 0000000000..461d6b226e --- /dev/null +++ b/easybuild/easyconfigs/a/ABINIT/ABINIT-8.0.8b-foss-2016b.eb @@ -0,0 +1,34 @@ +easyblock = 'ConfigureMake' + +name = 'ABINIT' +version = '8.0.8b' + +homepage = 'http://www.abinit.org/' +description = """ABINIT is a package whose main program allows one to find the total energy, charge density and + electronic structure of systems made of electrons and nuclei (molecules and periodic solids) within Density Functional + Theory (DFT), using pseudopotentials and a planewave or wavelet basis.""" + +toolchain = {'name': 'foss', 'version': '2016b'} + +source_urls = ['http://ftp.abinit.org/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['abc9e303bfa7f9f43f95598f87d84d5d'] + +configopts = "--with-mpi-prefix=$EBROOTIMPI/intel64 --with-trio-flavor='etsf_io+netcdf' --with-dft=flavor='libxc' " +configopts += '--with-netcdf-incs="-I$EBROOTNETCDF/include -I$EBROOTNETCDFMINFORTRAN/include" ' +configopts += '--with-netcdf-libs="-L$EBROOTNETCDF/lib -lnetcdf -L$EBROOTNETCDFMINFORTRAN/lib -lnetcdff" ' +configopts += '--with-libxc-incs="-I$EBROOTLIBXC/include" --with-libxc-libs="-L$EBROOTLIBXC/lib -lxc" ' +configopts += 'FCFLAGS="-ffree-line-length-none" ' + +dependencies = [ + ('libxc', '3.0.0'), + ('netCDF', '4.4.1'), + ('netCDF-Fortran', '4.4.4'), +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in ['abinit', 'aim', 'cut3d', 'conducti', 'mrgddb', 'mrgscr', 'optic']], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'chem' -- GitLab From 4dfab70c387a6de9848001e4cea524714d1ae9cd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 21:56:55 +0200 Subject: [PATCH 1291/1311] adding easyconfigs: Ruby-2.3.4.eb --- easybuild/easyconfigs/r/Ruby/Ruby-2.3.4.eb | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 easybuild/easyconfigs/r/Ruby/Ruby-2.3.4.eb diff --git a/easybuild/easyconfigs/r/Ruby/Ruby-2.3.4.eb b/easybuild/easyconfigs/r/Ruby/Ruby-2.3.4.eb new file mode 100644 index 0000000000..3149eef3ad --- /dev/null +++ b/easybuild/easyconfigs/r/Ruby/Ruby-2.3.4.eb @@ -0,0 +1,58 @@ +name = 'Ruby' +version = '2.3.4' + +homepage = 'https://www.ruby-lang.org' +description = """Ruby is a dynamic, open source programming language with + a focus on simplicity and productivity. It has an elegant syntax that is + natural to read and easy to write.""" + +toolchain = {'name': 'dummy', 'version': 'dummy'} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = ['http://cache.ruby-lang.org/pub/ruby/'] + +ext_options = { + 'source_urls': ['http://rubygems.org/downloads/'], + 'source_tmpl': '%(name)s-%(version)s.gem', +} + +exts_list = [ + ('ffi', '1.9.18', ext_options), + ('childprocess', '0.7.0', ext_options), + ('json', '2.1.0', ext_options), + ('cabin', '0.9.0', ext_options), + ('backports', '3.8.0', ext_options), + ('arr-pm', '0.0.10', ext_options), + ('clamp', '1.1.2', ext_options), + ('multipart-post', '2.0.0', ext_options), + ('faraday', '0.12.1', ext_options), + ('faraday_middleware', '0.11.0.1', ext_options), + ('highline', '1.7.8', ext_options), + ('net-http-pipeline', '1.0.1', ext_options), + ('connection_pool', '2.2.1', ext_options), + ('net-http-persistent', '2.9.4', ext_options), + ('multi_json', '1.12.1', ext_options), + ('public_suffix', '2.0.5', ext_options), + ('addressable', '2.4.0', ext_options), + ('gh', '0.15.1', ext_options), + ('launchy', '2.4.3', ext_options), + ('ethon', '0.10.1', ext_options), + ('typhoeus', '1.1.2', ext_options), + ('websocket', '1.2.4', ext_options), + ('pusher-client', '0.6.2', ext_options), + ('diff-lcs', '1.3', ext_options), + ('rspec-support', '3.6.0', ext_options), + ('rspec-mocks', '3.6.0', ext_options), + ('rspec-expectations', '3.6.0', ext_options), + ('rspec-core', '3.6.0', ext_options), + ('rspec', '3.6.0', ext_options), + ('rack', '2.0.3', ext_options), + ('rack-protection', '2.0.0', ext_options), + ('tilt', '2.0.7', ext_options), + ('mustermann', '1.0.0', ext_options), + ('sinatra', '2.0.0', ext_options), + ('rack-test', '0.6.3', ext_options), + ('bundler', '1.15.1', ext_options), +] + +moduleclass = 'lang' -- GitLab From b6169899ea7e248ba4868b61a594d5d7bb18d43e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2017 21:57:28 +0200 Subject: [PATCH 1292/1311] adding easyconfigs: Rust-1.18.0-foss-2017a.eb --- .../r/Rust/Rust-1.18.0-foss-2017a.eb | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 easybuild/easyconfigs/r/Rust/Rust-1.18.0-foss-2017a.eb diff --git a/easybuild/easyconfigs/r/Rust/Rust-1.18.0-foss-2017a.eb b/easybuild/easyconfigs/r/Rust/Rust-1.18.0-foss-2017a.eb new file mode 100644 index 0000000000..22f0bbe798 --- /dev/null +++ b/easybuild/easyconfigs/r/Rust/Rust-1.18.0-foss-2017a.eb @@ -0,0 +1,22 @@ +easyblock = 'ConfigureMake' + +name = 'Rust' +version = '1.18.0' + +homepage = 'https://www.rust-lang.org' +description = """Rust is a systems programming language that runs blazingly fast, prevents segfaults, + and guarantees thread safety.""" + +toolchain = {'name': 'foss', 'version': '2017a'} + +source_urls = ['https://static.rust-lang.org/dist/'] +sources = ['rustc-%(version)s-src.tar.gz'] + +builddependencies = [('CMake', '3.8.2')] + +sanity_check_paths = { + 'files': ['bin/rustc', 'bin/rustdoc'], + 'dirs': ['share/doc', 'share/man', 'lib/rustlib'], +} + +moduleclass = 'lang' -- GitLab From 3c32734d5ef41679343539f1526aa5bc6d734801 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 08:38:51 +0200 Subject: [PATCH 1293/1311] adding easyconfigs: CMake-3.8.2-GCCcore-6.3.0.eb --- .../c/CMake/CMake-3.8.2-GCCcore-6.3.0.eb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 easybuild/easyconfigs/c/CMake/CMake-3.8.2-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/c/CMake/CMake-3.8.2-GCCcore-6.3.0.eb b/easybuild/easyconfigs/c/CMake/CMake-3.8.2-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..23aa365a15 --- /dev/null +++ b/easybuild/easyconfigs/c/CMake/CMake-3.8.2-GCCcore-6.3.0.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'CMake' +version = '3.8.2' + +homepage = 'http://www.cmake.org' +description = """CMake, the cross-platform, open-source build system. + CMake is a family of tools designed to build, test and package software.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +source_urls = ['http://www.cmake.org/files/v%(version_major_minor)s'] +sources = [SOURCELOWER_TAR_GZ] + +configopts = '-- -DCMAKE_USE_OPENSSL=1 -DCMAKE_PREFIX_PATH=$EBROOTNCURSES' + +builddependencies = [ + ('binutils', '2.27'), +] + + +dependencies = [ + ('ncurses', '6.0'), + # OS dependency should be preferred if the os version is more recent then this version, + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.1.0c'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in ['ccmake', 'cmake', 'cpack', 'ctest']], + 'dirs': [], +} + +moduleclass = 'devel' -- GitLab From b3a350b8e2d687d3485dc3280668908462b424f7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 10:15:55 +0200 Subject: [PATCH 1294/1311] adding easyconfigs: pydlpoly-20150225-intel-2016b-Python-2.7.12.eb, FFTW-2.1.5-intel-2016b.eb --- .../f/FFTW/FFTW-2.1.5-intel-2016b.eb | 35 +++++++++++++++++ ...poly-20150225-intel-2016b-Python-2.7.12.eb | 39 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2016b.eb create mode 100644 easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2016b-Python-2.7.12.eb diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2016b.eb b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2016b.eb new file mode 100644 index 0000000000..77bea4672e --- /dev/null +++ b/easybuild/easyconfigs/f/FFTW/FFTW-2.1.5-intel-2016b.eb @@ -0,0 +1,35 @@ +easyblock = 'ConfigureMake' + +name = 'FFTW' +version = '2.1.5' + +homepage = 'http://www.fftw.org' +description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) + in one or more dimensions, of arbitrary input size, and of both real and complex data.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'pic': True} + +sources = [SOURCELOWER_TAR_GZ] +source_urls = [homepage] + +patches = ['FFTW-%(version)s_fix-configure-Fortran-linking.patch'] + +common_configopts = "--enable-shared --enable-type-prefix --enable-threads --with-pic" + +configopts = [ + common_configopts + " --enable-float --enable-mpi", + common_configopts + " --enable-mpi", # default as last +] + +sanity_check_paths = { + 'files': ['include/%sfftw%s.h' % (x, y) for x in ['d', 'dr', 's', 'sr'] for y in ['', '_mpi', '_threads']] + + ['lib/lib%sfftw%s.a' % (x, y) for x in ['d', 'dr', 's', 'sr'] for y in ['', '_mpi', '_threads']] + + ['lib/lib%sfftw%s.%s' % (x, y, SHLIB_EXT) for x in ['d', 'dr', 's', 'sr'] + for y in ['', '_mpi', '_threads']], + 'dirs': [], +} +# make sure *_f77 symbols are there (patch is required to avoid --disable-fortran being used automatically) +sanity_check_commands = ["nm %(installdir)s/lib/libdfftw.a | grep _f77"] + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2016b-Python-2.7.12.eb new file mode 100644 index 0000000000..9e06a0f8d2 --- /dev/null +++ b/easybuild/easyconfigs/p/pydlpoly/pydlpoly-20150225-intel-2016b-Python-2.7.12.eb @@ -0,0 +1,39 @@ +easyblock = 'MakeCp' + +name = 'pydlpoly' +version = '20150225' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'http://cmc.aci.ruhr-uni-bochum.de/cmc/' +description = """Pydlpoly is a molecular dynamics simulation package which is a modified version of DL-POLY with + a Python language interface.""" + +toolchain = {'name': 'intel', 'version': '2016b'} +toolchainopts = {'usempi': True, 'pic': True} + +sources = ['%(name)s_250215.tgz'] +checksums = ['cd84a4b563dd16823e22fe6c450b07fd95036e20e0c6b7fc308afdb347241122'] + +dependencies = [ + ('Python', '2.7.12'), # also provides mpi4py, numpy + ('h5py', '2.7.0', versionsuffix), + ('FFTW', '2.1.5'), +] + +start_dir = 'source' + +parallel = 1 +buildopts = 'FC="$FC" LD="$FC -o" LDFLAGS="$FFLAGS" FFLAGS="-c $FFLAGS" LDLIBS="-ldfftw" F2PY_COMP=intelem' + +files_to_copy = ['doc', 'py', 'scripts', 'so'] + +sanity_check_paths = { + 'files': ['so/_pydlpoly.%s' % SHLIB_EXT], + 'dirs': ['py'], +} +sanity_check_commands = ["python -c 'import pydlpoly'"] + +modextrapaths = {'PYTHONPATH': ['py', 'so']} +modextravars = {'PDLPDIR': '%(installdir)s'} + +moduleclass = 'chem' -- GitLab From 91223e02053ee50498fd81041fc24acc35f1c99d Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Mon, 12 Jun 2017 16:20:00 +0200 Subject: [PATCH 1295/1311] install gSOAP --- .../d/davix/davix-0.6.6-intel-2017a.eb | 37 +++++++++++++++++++ .../g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb | 35 ++++++++++++++++++ .../g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb | 19 ++++++++++ 3 files changed, 91 insertions(+) create mode 100644 easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb create mode 100644 easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb create mode 100644 easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb new file mode 100644 index 0000000000..2ad043d6bd --- /dev/null +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -0,0 +1,37 @@ +easyblock = 'CMakeMake' + +name = 'davix' +version = '0.6.6' + +homepage = 'http://dmc.web.cern.ch/projects/davix/home' +description = """The davix project aims to make file management over HTTP-based protocols simple. + The focus is on high-performance remote I/O and data management of large collections of files. + Currently, there is support for the WebDav (link is external), Amazon S3 (link is external), + Microsoft Azure (link is external), and HTTP (link is external) protocols.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://github.com/cern-it-sdc-id/davix/archive/'] +sources = ['R_%s.tar.gz' % version.replace('.','_')] + +builddependencies = [ + ('CMake', '3.8.1'), +] + +dependencies = [ + ('libxml2', '2.9.4'), + ('gtest', '1.8.0'), + ('gSOAP', '2.8.47'), + ('Doxygen', '1.8.13'), + ('Boost', '1.63.0', '-Python-2.7.13'), + # ('abi-compliance-checker', ''), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +sanity_check_paths = { + 'files': ['lib/liblib_g2logger.a', 'lib/liblib_activeobject.a'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..d5e9165011 --- /dev/null +++ b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb @@ -0,0 +1,35 @@ +easyblock = "ConfigureMake" + +name = 'gSOAP' +version = '2.8.47' + +homepage = 'http://www.cs.fsu.edu/~engelen/soap.html' +description = """The gSOAP toolkit is a C and C++ software development toolkit for + SOAP and REST XML Web services and generic C/C++ XML data bindings. + The toolkit analyzes WSDLs and XML schemas (separately or as a combined set) and maps the XML schema types + and the SOAP/REST XML messaging protocols to easy-to-use and efficient C and C++ code. + It also supports exposing (legacy) C and C++ applications as XML Web services + by auto-generating XML serialization code and WSDL specifications. + Or you can simply use it to automatically convert XML to/from C and C++ data. + The toolkit supports options to generate pure ANSI C or C++ with or without STL.""" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +builddependencies = [ + ('Bison', '3.0.4'), + ('flex', '2.6.3'), +] + +dependencies = [('zlib', '1.2.11')] + +sources = ['%(namelower)s_%(version)s.zip'] +source_urls = [SOURCEFORGE_SOURCE] + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/soapcpp2', 'bin/wsdl2h'] + 'dirs': ['include', 'lib'], +} + +moduleclass = 'devel' diff --git a/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb new file mode 100644 index 0000000000..d48012e5d8 --- /dev/null +++ b/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb @@ -0,0 +1,19 @@ +easyblock = "Tarball" + +name = 'gtest' +version = '1.8.0' + +homepage = 'https://code.google.com/p/googletest/' +description = "Google's framework for writing C++ tests on a variety of platforms" + +toolchain = {'name': 'GCCcore', 'version': '6.3.0'} + +sources = [SOURCE_ZIP] +source_urls = ['https://googletest.googlecode.com/files'] + +sanity_check_paths = { + 'files': ['CMakeLists.txt', ], + 'dirs': ['include', 'src'], +} + +moduleclass = 'devel' -- GitLab From b5c6db24f28080f818f251d957c1cd5c896578e3 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 13 Jun 2017 14:34:05 +0200 Subject: [PATCH 1296/1311] install gtest, gSOAP, davix --- .../easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 13 +++++++++++-- .../g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb | 2 +- .../g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb | 6 +++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index 2ad043d6bd..e169a1b8ba 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -16,6 +16,7 @@ sources = ['R_%s.tar.gz' % version.replace('.','_')] builddependencies = [ ('CMake', '3.8.1'), + ('LibUUID', '1.0.3'), ] dependencies = [ @@ -30,8 +31,16 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': ['lib/liblib_g2logger.a', 'lib/liblib_activeobject.a'], - 'dirs': [], + 'files': [ + 'bin/davix-get', + 'bin/davix-http', + 'bin/davix-ls', + 'bin/davix-mkdir', + 'bin/davix-mv', + 'bin/davix-put', + 'bin/davix-rm' + ], + 'dirs': ['include', 'lib64'], } moduleclass = 'tools' diff --git a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb index d5e9165011..386dbdf5e8 100644 --- a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb @@ -28,7 +28,7 @@ source_urls = [SOURCEFORGE_SOURCE] parallel = 1 sanity_check_paths = { - 'files': ['bin/soapcpp2', 'bin/wsdl2h'] + 'files': ['bin/soapcpp2', 'bin/wsdl2h'], 'dirs': ['include', 'lib'], } diff --git a/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb index d48012e5d8..55b27244e4 100644 --- a/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/gtest/gtest-1.8.0-GCCcore-6.3.0.eb @@ -8,12 +8,12 @@ description = "Google's framework for writing C++ tests on a variety of platform toolchain = {'name': 'GCCcore', 'version': '6.3.0'} -sources = [SOURCE_ZIP] -source_urls = ['https://googletest.googlecode.com/files'] +sources = ['release-%(version)s.tar.gz'] +source_urls = ['https://github.com/google/googletest/archive/'] sanity_check_paths = { 'files': ['CMakeLists.txt', ], - 'dirs': ['include', 'src'], + 'dirs': ['googletest/include', 'googletest/src'], } moduleclass = 'devel' -- GitLab From 357fe53db8337ad167e9c25dae6fe32a5775e6e5 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 20 Jun 2017 11:02:48 +0200 Subject: [PATCH 1297/1311] delete comment --- easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index e169a1b8ba..c35600e22c 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -25,7 +25,6 @@ dependencies = [ ('gSOAP', '2.8.47'), ('Doxygen', '1.8.13'), ('Boost', '1.63.0', '-Python-2.7.13'), - # ('abi-compliance-checker', ''), ] osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -- GitLab From ddfc7ba922497ceb27648aa1266a0367a1278159 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 20 Jun 2017 11:24:36 +0200 Subject: [PATCH 1298/1311] fix build dependencies --- easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index c35600e22c..c0b7fbe385 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -17,13 +17,13 @@ sources = ['R_%s.tar.gz' % version.replace('.','_')] builddependencies = [ ('CMake', '3.8.1'), ('LibUUID', '1.0.3'), + ('gtest', '1.8.0'), + ('Doxygen', '1.8.13'), ] dependencies = [ ('libxml2', '2.9.4'), - ('gtest', '1.8.0'), ('gSOAP', '2.8.47'), - ('Doxygen', '1.8.13'), ('Boost', '1.63.0', '-Python-2.7.13'), ] -- GitLab From feee6dc88d4ab81e7183cc430723b0e104b21531 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 20 Jun 2017 12:23:33 +0200 Subject: [PATCH 1299/1311] fix style nits --- .../easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 10 +--------- .../easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb | 6 +++--- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index c0b7fbe385..ff2cf5d69f 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -30,15 +30,7 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] sanity_check_paths = { - 'files': [ - 'bin/davix-get', - 'bin/davix-http', - 'bin/davix-ls', - 'bin/davix-mkdir', - 'bin/davix-mv', - 'bin/davix-put', - 'bin/davix-rm' - ], + 'files': ['bin/davix-%s' % x for x in ['get', 'http', 'ls', 'mkdir', 'mv', 'put', 'rm']], 'dirs': ['include', 'lib64'], } diff --git a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb index 386dbdf5e8..14c4a424bc 100644 --- a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb @@ -15,6 +15,9 @@ description = """The gSOAP toolkit is a C and C++ software development toolkit f toolchain = {'name': 'GCCcore', 'version': '6.3.0'} +sources = ['%(namelower)s_%(version)s.zip'] +source_urls = [SOURCEFORGE_SOURCE] + builddependencies = [ ('Bison', '3.0.4'), ('flex', '2.6.3'), @@ -22,9 +25,6 @@ builddependencies = [ dependencies = [('zlib', '1.2.11')] -sources = ['%(namelower)s_%(version)s.zip'] -source_urls = [SOURCEFORGE_SOURCE] - parallel = 1 sanity_check_paths = { -- GitLab From 64f4ebca8138d401b309a33700c15768e00174a8 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 20 Jun 2017 12:46:03 +0200 Subject: [PATCH 1300/1311] gsoap: fix source_urls and bump version to 2.8.48 --- easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb index 14c4a424bc..1d8dbc1f53 100644 --- a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb +++ b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb @@ -1,7 +1,7 @@ easyblock = "ConfigureMake" name = 'gSOAP' -version = '2.8.47' +version = '2.8.48' homepage = 'http://www.cs.fsu.edu/~engelen/soap.html' description = """The gSOAP toolkit is a C and C++ software development toolkit for @@ -16,7 +16,7 @@ description = """The gSOAP toolkit is a C and C++ software development toolkit f toolchain = {'name': 'GCCcore', 'version': '6.3.0'} sources = ['%(namelower)s_%(version)s.zip'] -source_urls = [SOURCEFORGE_SOURCE] +source_urls = ['https://downloads.sourceforge.net/project/gsoap%(version_major)s/gsoap-%(version_major_minor)s/'] builddependencies = [ ('Bison', '3.0.4'), -- GitLab From d4a48a1592a999fd51561d3a601ed28181b55339 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Tue, 20 Jun 2017 14:38:54 +0200 Subject: [PATCH 1301/1311] fix gsoap version numbering --- easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 2 +- ...AP-2.8.47-GCCcore-6.3.0.eb => gSOAP-2.8.48-GCCcore-6.3.0.eb} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/g/gSOAP/{gSOAP-2.8.47-GCCcore-6.3.0.eb => gSOAP-2.8.48-GCCcore-6.3.0.eb} (100%) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index ff2cf5d69f..d5ca616647 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -23,7 +23,7 @@ builddependencies = [ dependencies = [ ('libxml2', '2.9.4'), - ('gSOAP', '2.8.47'), + ('gSOAP', '2.8.48'), ('Boost', '1.63.0', '-Python-2.7.13'), ] diff --git a/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb b/easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.48-GCCcore-6.3.0.eb similarity index 100% rename from easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.47-GCCcore-6.3.0.eb rename to easybuild/easyconfigs/g/gSOAP/gSOAP-2.8.48-GCCcore-6.3.0.eb -- GitLab From f62d25efc2d97006cac424b067d884345270a5c3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 11:48:33 +0200 Subject: [PATCH 1302/1311] adding easyconfigs: DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb, MariaDB-10.1.24-intel-2017a.eb, Perl-5.24.1-intel-2017a.eb --- ...DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb | 36 ++++++++++++++++ .../m/MariaDB/MariaDB-10.1.24-intel-2017a.eb | 42 +++++++++++++++++++ .../p/Perl/Perl-5.24.1-intel-2017a.eb | 4 ++ 3 files changed, 82 insertions(+) create mode 100644 easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb create mode 100644 easybuild/easyconfigs/m/MariaDB/MariaDB-10.1.24-intel-2017a.eb diff --git a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb new file mode 100644 index 0000000000..0990091ea3 --- /dev/null +++ b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb @@ -0,0 +1,36 @@ +easyblock = 'PerlModule' + +name = 'DBD-mysql' +version = '4.042' +versionsuffix = '-Perl-%(perlver)s' + +homepage = 'http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm' +description = """Perl binding for MySQL""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['http://cpan.metacpan.org/authors/id/M/MI/MICHIELB/'] +sources = [SOURCE_TAR_GZ] + +dependencies = [ + ('Perl', '5.24.1'), + ('MariaDB', '10.1.24'), + ('zlib', '1.2.11'), + # OS dependency should be preferred if the os version is more recent then this version + # it's nice to have an up to date openssl for security reasons + # ('OpenSSL', '1.0.1q'), +] + +osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] + +# force static linking of libmysqlclient to dance around problem with unresolved symbols +#configopts = '--libs="-L$EBROOTMARIADB/lib -Wl,-Bstatic -lmariadbclient -Wl,-Bdynamic -lpthread -lz -lrt -lssl -lcrypto"' + +options = {'modulename': 'DBD::mysql'} + +sanity_check_paths = { + 'files': ['lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/DBD/mysql.pm'], + 'dirs': ['lib/perl5/site_perl/%(perlver)s/x86_64-linux-thread-multi/DBD/mysql'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/m/MariaDB/MariaDB-10.1.24-intel-2017a.eb b/easybuild/easyconfigs/m/MariaDB/MariaDB-10.1.24-intel-2017a.eb new file mode 100644 index 0000000000..9869ac1342 --- /dev/null +++ b/easybuild/easyconfigs/m/MariaDB/MariaDB-10.1.24-intel-2017a.eb @@ -0,0 +1,42 @@ +easyblock = 'CMakeMake' + +name = 'MariaDB' +version = '10.1.24' + +homepage = 'https://mariadb.org/' +description = """MariaDB An enhanced, drop-in replacement for MySQL.""" + +toolchain = {'name': 'intel', 'version': '2017a'} + +source_urls = ['https://downloads.mariadb.org/f/mariadb-%(version)s/source'] +sources = [SOURCELOWER_TAR_GZ] + +patches = [ + 'MariaDB-10.1.13-link-rt-for-jemalloc.patch', +] + +dependencies = [ + ('zlib', '1.2.11'), + ('ncurses', '6.0'), + ('jemalloc', '4.5.0'), + ('PCRE', '8.40'), + ('XZ', '5.2.3'), + ('Boost', '1.64.0'), + ('libxml2', '2.9.4'), +] + +builddependencies = [('CMake', '3.8.2')] + +separate_build_dir = True + +configopts = "-DWITH_PCRE=system -DWITH_JEMALLOC=yes -DWITH_ZLIB=system -DMYSQL_MAINTAINER_MODE=ON " +configopts += "-DWITH_EMBEDDED_SERVER=ON " # for libmysqld.so & co +configopts += "-DWITHOUT_TOKUDB=ON " # not supported with Intel compilers + +sanity_check_paths = { + 'files': ['bin/mysql', 'bin/mysqld_safe', 'lib/libmysqlclient.%s' % SHLIB_EXT, 'lib/libmysqld.%s' % SHLIB_EXT, + 'scripts/mysql_install_db'], + 'dirs': ['include', 'share'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb index 7186e3ec91..cc1cd43ca8 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.24.1-intel-2017a.eb @@ -890,6 +890,10 @@ exts_list = [ 'source_tmpl': 'PDF-API2-%(version)s.tar.gz', 'source_urls': ['https://cpan.metacpan.org/authors/id/S/SS/SSIMMS'], }), + ('Devel::CheckLib', '1.11', { + 'source_tmpl': 'Devel-CheckLib-%(version)s.tar.gz', + 'source_urls': ['https://cpan.metacpan.org/authors/id/M/MA/MATTN'], + }), ] moduleclass = 'lang' -- GitLab From 709e2a7d4d783bdd939c497cd238331c5d320dca Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 13:17:33 +0200 Subject: [PATCH 1303/1311] get rid of tabs --- .../l/LLVM/LLVM-3.7.1-foss-2015a.eb | 2 +- .../MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb | 25 +++++++++---------- .../MultiQC-0.9-foss-2016b-Python-2.7.12.eb | 24 +++++++++--------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb index 031705af89..531f4e4816 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb @@ -12,7 +12,7 @@ sources = ['%(namelower)s-%(version)s.src.tar.xz'] source_urls = ['http://llvm.org/releases/%(version)s'] builddependencies = [ - ('Python', '2.7.9'), + ('Python', '2.7.9'), ] # No build allowed in source dir diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb index 52da5ecd72..e9c753506d 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.7-goolf-1.7.20-Python-2.7.11.eb @@ -27,39 +27,38 @@ exts_defaultclass = 'PythonPackage' exts_list = [ ('six', '1.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), ('pyparsing', '2.1.9', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('pytz', '2016.6.1', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], }), ('cycler', '0.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], }), ('python-dateutil', '2.5.3', { - 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], - 'modulename': 'dateutil', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + 'modulename': 'dateutil', }), ('MarkupSafe', '0.23', { - 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], + 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], }), ('click', '6.6', { - 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], }), ('PyYAML', '3.12', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], - 'modulename': 'yaml', + 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], + 'modulename': 'yaml', }), ('simplejson', '3.8.2', { - 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], + 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], }), ('Jinja2', '2.8', { - 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], }), ('multiqc', version, { - #'source_tmpl': 'v%(version)s.tar.gz', 'source_urls': ['https://pypi.python.org/packages/source/m/multiqc/'], }), ] diff --git a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb index 4ca3af6861..cb0f244915 100644 --- a/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/m/MultiQC/MultiQC-0.9-foss-2016b-Python-2.7.12.eb @@ -29,36 +29,36 @@ exts_defaultclass = 'PythonPackage' exts_list = [ ('six', '1.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], + 'source_urls': ['https://pypi.python.org/packages/source/s/six/'], }), ('pyparsing', '2.1.9', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pyparsing/'], }), ('pytz', '2016.6.1', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], + 'source_urls': ['https://pypi.python.org/packages/source/p/pytz/'], }), ('cycler', '0.10.0', { - 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/cycler/'], }), ('python-dateutil', '2.5.3', { - 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], - 'modulename': 'dateutil', + 'source_urls': ['https://pypi.python.org/packages/source/p/python-dateutil/'], + 'modulename': 'dateutil', }), ('MarkupSafe', '0.23', { - 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], + 'source_urls': ['https://pypi.python.org/packages/source/m/markupsafe'], }), ('click', '6.6', { - 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], + 'source_urls': ['https://pypi.python.org/packages/source/c/click/'], }), ('PyYAML', '3.12', { - 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], - 'modulename': 'yaml', + 'source_urls': ['https://pypi.python.org/packages/source/p/pyyaml'], + 'modulename': 'yaml', }), ('simplejson', '3.8.2', { - 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], + 'source_urls': ['https://pypi.python.org/packages/source/s/simplejson/'], }), ('Jinja2', '2.8', { - 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], + 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], }), ('multiqc', version, { 'source_urls': ['https://pypi.python.org/packages/source/m/multiqc/'], -- GitLab From 583e3348d4c464baab85cbec638edc4fa9aec02f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 14:32:43 +0200 Subject: [PATCH 1304/1311] clean up commented out configopts in DBD-mysql easyconfig --- .../d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb | 3 --- 1 file changed, 3 deletions(-) diff --git a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb index 0990091ea3..0db79a7f27 100644 --- a/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb +++ b/easybuild/easyconfigs/d/DBD-mysql/DBD-mysql-4.042-intel-2017a-Perl-5.24.1.eb @@ -23,9 +23,6 @@ dependencies = [ osdependencies = [('openssl-devel', 'libssl-dev', 'libopenssl-devel')] -# force static linking of libmysqlclient to dance around problem with unresolved symbols -#configopts = '--libs="-L$EBROOTMARIADB/lib -Wl,-Bstatic -lmariadbclient -Wl,-Bdynamic -lpthread -lz -lrt -lssl -lcrypto"' - options = {'modulename': 'DBD::mysql'} sanity_check_paths = { -- GitLab From 2a26abf2408e73e60b74b538c92ef9c05b2abccf Mon Sep 17 00:00:00 2001 From: Adam Huffman Date: Wed, 21 Jun 2017 14:23:19 +0100 Subject: [PATCH 1305/1311] adding easyconfigs: SAMtools-1.5-intel-2017a.eb --- .../s/SAMtools/SAMtools-1.5-intel-2017a.eb | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 easybuild/easyconfigs/s/SAMtools/SAMtools-1.5-intel-2017a.eb diff --git a/easybuild/easyconfigs/s/SAMtools/SAMtools-1.5-intel-2017a.eb b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.5-intel-2017a.eb new file mode 100755 index 0000000000..07e6c5020c --- /dev/null +++ b/easybuild/easyconfigs/s/SAMtools/SAMtools-1.5-intel-2017a.eb @@ -0,0 +1,37 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild +# +# Copyright:: Copyright 2012-2014 Uni.Lu/LCSB, NTUA +# Authors:: Robert Schmidt , Cedric Laczny , Fotis Georgatos +# License:: MIT/GPL +# $Id$ +# +# Modified by: Adam Huffman +# The Francis Crick Institute +# +# Modified for version 1.4 by: Kurt Lust, UAntwerpen +# +## +name = 'SAMtools' +version = '1.5' + +homepage = 'http://www.htslib.org/' +description = """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating alignments in a per-position format.""" + +toolchain = {'name': 'intel', 'version': '2017a'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/samtools/%(namelower)s/releases/download/%(version)s'] +sources = [SOURCELOWER_TAR_BZ2] + +# The htslib component of SAMtools 1.4 uses zlib, bzip2 and lzma compression. +# The latter is currently provided by XZ. +dependencies = [ + ('ncurses', '6.0'), + ('zlib', '1.2.11'), + ('bzip2', '1.0.6'), + ('XZ', '5.2.3'), +] + +moduleclass = 'bio' -- GitLab From ddba7fe2052267fdf848c8c43638803e7b50ba71 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Wed, 21 Jun 2017 15:46:48 +0200 Subject: [PATCH 1306/1311] style fix --- easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb index d5ca616647..f4e5dff775 100644 --- a/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb +++ b/easybuild/easyconfigs/d/davix/davix-0.6.6-intel-2017a.eb @@ -12,7 +12,7 @@ description = """The davix project aims to make file management over HTTP-based toolchain = {'name': 'intel', 'version': '2017a'} source_urls = ['https://github.com/cern-it-sdc-id/davix/archive/'] -sources = ['R_%s.tar.gz' % version.replace('.','_')] +sources = ['R_%s.tar.gz' % version.replace('.', '_')] builddependencies = [ ('CMake', '3.8.1'), -- GitLab From b3967ff49c8c53a157588b42c41676a45000b5fb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 20:40:09 +0200 Subject: [PATCH 1307/1311] more trivial style fixes --- .../b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb | 2 +- .../easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb | 3 ++- .../Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb | 1 - .../easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb | 1 - .../b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb | 2 +- .../b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb | 2 +- .../b/Bullet/Bullet-2.83.7-foss-2016a.eb | 2 +- ...AL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb | 2 +- .../c/CP2K/CP2K-2.4.0-goolf-1.4.10-ipi.eb | 2 +- .../easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10.eb | 4 ++-- .../ConnectomeWorkbench-1.2.2.eb | 2 +- ...Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb | 4 ++-- .../easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb | 2 +- .../d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb | 4 ++-- .../d/DCA++/DCA++-1.0-CrayGNU-2015.11-cuda.eb | 2 +- .../d/DIAL/DIAL-2011.06.06-foss-2016a.eb | 2 +- ...disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb | 8 ++++---- .../e/ETSF_IO/ETSF_IO-1.0.4-intel-2015b.eb | 2 +- .../EricScript-0.5.5-intel-2017a-R-3.4.0.eb | 2 +- .../e/ea-utils/ea-utils-1.04.807-foss-2016a.eb | 2 +- .../e/ea-utils/ea-utils-1.04.807-foss-2016b.eb | 2 +- .../e/ea-utils/ea-utils-1.04.807-intel-2016b.eb | 2 +- .../f/FFTW/FFTW-3.3.4-intel-2015b-PFFT-20150905.eb | 2 +- easybuild/easyconfigs/f/findhap/findhap-4.eb | 2 +- .../f/freetype/freetype-2.5.5-goolf-1.7.20.eb | 3 ++- .../f/freetype/freetype-2.6.2-goolf-1.7.20.eb | 3 ++- .../easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb | 2 +- .../easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb | 2 +- .../easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb | 3 ++- .../easyconfigs/g/Guile/Guile-2.0.11-foss-2016a.eb | 2 +- .../easyconfigs/g/gflags/gflags-2.1.2-foss-2016a.eb | 4 ++-- .../g/grib_api/grib_api-1.21.0-foss-2017a.eb | 1 - .../g/gtkglext/gtkglext-1.2.0-intel-2015b.eb | 2 +- ...2015b-Python-2.7.10-HDF5-1.8.15-patch1-serial.eb | 2 +- .../easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb | 2 +- .../easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb | 2 +- .../i/IGVTools/IGVTools-2.3.68-Java-1.7.0_80.eb | 2 +- .../i/IGVTools/IGVTools-2.3.72-Java-1.7.0_80.eb | 2 +- .../i/IGVTools/IGVTools-2.3.75-Java-1.7.0_80.eb | 2 +- .../easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb | 2 +- .../i/igraph/igraph-0.7.1-intel-2016b.eb | 2 +- .../i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb | 2 +- .../j/JasPer/JasPer-1.900.1-foss-2017a.eb | 1 - .../jModelTest-2.1.10r20160303-Java-1.8.0_92.eb | 2 +- ...est-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb | 2 +- .../j/jhbuild/jhbuild-3.15.92-GCCcore-4.9.3.eb | 2 +- .../easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb | 2 +- .../easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb | 1 - .../easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb | 1 - .../easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb | 4 ++-- .../easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb | 2 +- .../easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb | 2 +- .../l/libreadline/libreadline-6.2-foss-2015a.eb | 8 ++++---- .../easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb | 3 +-- .../m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb | 4 ++-- .../easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb | 2 +- .../m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb | 6 +++--- .../molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb | 2 +- .../molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb | 2 +- .../molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb | 2 +- .../easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb | 2 -- .../NRGLjubljana-2.4.3.23-foss-2016b.eb | 12 ++++++------ .../easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb | 6 ++++-- .../n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb | 6 ++++-- .../easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb | 6 ++++-- .../n/nettle/nettle-3.1.1-intel-2016a.eb | 6 ++++-- .../n/nettle/nettle-3.2-GCCcore-5.4.0.eb | 6 ++++-- .../easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb | 6 ++++-- .../easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb | 6 ++++-- .../easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb | 6 ++++-- .../o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb | 13 ++++++------- .../OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb | 1 - easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb | 3 +-- .../o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb | 4 ++-- .../o/OpenFOAM/OpenFOAM-3.0.0-foss-2016a.eb | 2 +- .../o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb | 4 +--- .../easyconfigs/p/PEAR/PEAR-0.9.6-goolf-1.4.10.eb | 2 +- .../easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb | 2 +- .../easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb | 2 +- .../PETSc-3.7.5-intel-2016b-downloaded-deps.eb | 2 +- .../PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb | 2 +- .../PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb | 2 +- .../easyconfigs/p/PROJ/PROJ-4.8.0-foss-2015b.eb | 2 +- .../easyconfigs/p/PROJ/PROJ-4.9.1-foss-2015a.eb | 2 +- .../easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb | 4 ++-- .../easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb | 2 +- .../p/Platanus/Platanus-1.2.4-foss-2017a.eb | 4 ++-- .../Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb | 4 ++-- .../Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb | 4 ++-- .../p/Python/Python-2.7.11-CrayGNU-2015.11.eb | 2 +- .../p/Python/Python-2.7.11-CrayGNU-2016.03.eb | 2 +- .../p/pbbam/pbbam-20170508-intel-2017a.eb | 2 +- .../easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb | 2 +- easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb | 2 +- easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb | 2 +- easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb | 2 +- .../r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb | 2 +- easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb | 2 +- .../r/R/R-3.3.3-foss-2016b-X11-20160819.eb | 3 +-- .../r/R/R-3.3.3-intel-2017a-X11-20170314.eb | 3 +-- .../r/RELION/RELION-1.4-intel-2016b-single.eb | 2 +- .../RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb | 2 +- .../r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb | 2 +- .../rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb | 2 +- .../s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb | 1 - .../s/SIONlib/SIONlib-1.7.1-foss-2017a.eb | 1 - .../s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb | 2 +- easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb | 2 +- .../easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb | 5 +++-- .../Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb | 3 ++- .../easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb | 4 ++-- .../easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb | 4 ++-- .../easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb | 4 ++-- .../easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb | 4 ++-- .../easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb | 4 ++-- .../SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb | 1 - easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb | 1 - .../s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb | 8 ++++---- .../s/segemehl/segemehl-0.2.0-foss-2016b.eb | 4 ++-- easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb | 2 +- .../easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb | 1 - .../VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb | 6 +++--- .../VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb | 6 +++--- .../v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb | 2 +- .../v/Valgrind/Valgrind-3.11.0-foss-2016a.eb | 2 +- .../wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb | 10 +++++----- easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb | 2 +- .../x/xtrans/xtrans-1.3.5-gimkl-2.11.5.eb | 2 +- .../y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb | 2 +- .../y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb | 2 +- ....0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb | 2 +- .../easyconfigs/y/Yasm/Yasm-1.3.0-goolf-1.7.20.eb | 2 +- 132 files changed, 196 insertions(+), 195 deletions(-) diff --git a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb index 885f9339b0..d1c00e81a6 100644 --- a/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/BCFtools/BCFtools-1.3.1-goolf-1.7.20.eb @@ -26,7 +26,7 @@ buildopts = " USE_GPL=1 GSL_LIBS='-lgsl -lgslcblas'" runtest = 'test' -files_to_copy = [(["bcftools", "plot-vcfstats", "vcfutils.pl"], "bin"), +files_to_copy = [(["bcftools", "plot-vcfstats", "vcfutils.pl"], "bin"), "doc", "plugins", "test", "LICENSE", "README", "AUTHORS"] sanity_check_paths = { diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb index 48a47daaa1..dfa7db4489 100644 --- a/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.5-intel-2016b.eb @@ -11,7 +11,8 @@ name = 'BLAT' version = '3.5' homepage = 'http://genome.ucsc.edu/FAQ/FAQblat.html' -description = "BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases or more." +description = """BLAT on DNA is designed to quickly find sequences of 95% and greater similarity of length 25 bases + or more.""" toolchain = {'name': 'intel', 'version': '2016b'} diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb index 49051608e1..5fac3580db 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a-Python-2.7.13.eb @@ -21,4 +21,3 @@ dependencies = [ boost_mpi = True moduleclass = 'devel' - diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb index ea4624e01d..09208d29d9 100644 --- a/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb +++ b/easybuild/easyconfigs/b/Boost/Boost-1.63.0-foss-2017a.eb @@ -21,4 +21,3 @@ configopts = '--without-libraries=python' boost_mpi = True moduleclass = 'devel' - diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb index 826bc88a15..ba74ca9337 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.2.9-intel-2016b.eb @@ -25,6 +25,6 @@ sources = ['%(namelower)s-%(version)s-source.zip'] source_urls = [('http://sourceforge.net/projects/bowtie-bio/files/%(namelower)s/%(version)s', 'download')] # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb index 98d5525da2..8b78bff172 100644 --- a/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb +++ b/easybuild/easyconfigs/b/Bowtie2/Bowtie2-2.3.2-intel-2017a.eb @@ -30,6 +30,6 @@ dependencies = [('tbb', '2017_U6')] buildopts = "EXTRA_FLAGS='-wd809'" # to add script folder to path just uncomment this line -#modextrapaths = {'PATH': 'scripts'} +# modextrapaths = {'PATH': 'scripts'} moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb index bcb89c1b4e..e9318b4588 100644 --- a/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb +++ b/easybuild/easyconfigs/b/Bullet/Bullet-2.83.7-foss-2016a.eb @@ -19,7 +19,7 @@ builddependencies = [('CMake', '3.5.2')] configopts = "-DBUILD_SHARED_LIBS=ON" sanity_check_paths = { - 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] + + 'files': ['include/bullet/btBullet%sCommon.h' % x for x in ['Collision', 'Dynamics']] + ['lib/libBullet%s.%s' % (x, SHLIB_EXT) for x in ['Collision', 'Dynamics']], 'dirs': [], } diff --git a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb index 462e46256b..874fac82e5 100644 --- a/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/CGAL/CGAL-4.8.1-foss-2015a-GLib-2.48.2-Python-2.7.11.eb @@ -25,7 +25,7 @@ dependencies = [ ('Qt', '4.8.7', versionsuffix), ] -configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " +configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " configopts += "-DOPENGL_INCLUDE_DIR=$EBROOTMESA/include\;$EBROOTLIBGLU/include " configopts += "-DOPENGL_gl_LIBRARY=$EBROOTMESA/lib/libGL.%s " % SHLIB_EXT configopts += "-DOPENGL_glu_LIBRARY=$EBROOTLIBGLU/lib/libGLU.%s " % SHLIB_EXT diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10-ipi.eb b/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10-ipi.eb index 7188e62917..0a291108ae 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10-ipi.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10-ipi.eb @@ -32,6 +32,6 @@ dependencies = [('Libint', '1.1.4')] parallel = 1 # about 100 tests fail -ignore_regtest_fails=True +ignore_regtest_fails = True moduleclass = 'chem' diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10.eb b/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10.eb index 5c6f21e195..985781685d 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-2.4.0-goolf-1.4.10.eb @@ -14,7 +14,7 @@ source_urls = ['http://sourceforge.net/projects/cp2k/files/'] sources = [SOURCELOWER_TAR_BZ2] patches = [ - 'CP2K-%(version)s-fix_compile_date_lastsvn.patch', + 'CP2K-%(version)s-fix_compile_date_lastsvn.patch', 'do_regtest_nocompile.patch' ] @@ -30,6 +30,6 @@ dependencies = [('Libint', '1.1.4')] parallel = 1 # about 100 tests fail -ignore_regtest_fails=True +ignore_regtest_fails = True moduleclass = 'chem' diff --git a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb index fce250c7cf..0cb98a2054 100644 --- a/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb +++ b/easybuild/easyconfigs/c/ConnectomeWorkbench/ConnectomeWorkbench-1.2.2.eb @@ -27,7 +27,7 @@ modextrapaths = { } sanity_check_paths = { - 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", + 'files': ["bin_rh_linux64/wb_import", "bin_rh_linux64/wb_command", "bin_rh_linux64/wb_view"], 'dirs': ["resources"] } diff --git a/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb index 6a2974e5b4..88fa4436a0 100644 --- a/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/c/Cookiecutter/Cookiecutter-1.4.0-goolf-1.7.20-Python-2.7.11.eb @@ -46,10 +46,10 @@ exts_list = [ }), ('binaryornot', '0.4.0', { 'source_urls': ['https://pypi.io/packages/source/b/binaryornot/'], - }), + }), ('Jinja2', '2.8', { 'source_urls': ['https://pypi.python.org/packages/source/J/Jinja2/'], - }), + }), ('jinja2-time', '0.2.0', { 'source_urls': ['https://pypi.python.org/packages/source/j/jinja2-time/'], 'modulename': 'jinja2', diff --git a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb index 2a15cb846c..7697871a45 100644 --- a/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb +++ b/easybuild/easyconfigs/d/DBus/DBus-1.10.12-intel-2016b.eb @@ -16,7 +16,7 @@ source_urls = ['http://dbus.freedesktop.org/releases/dbus'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', + 'files': ['bin/dbus-%s' % x for x in ['cleanup-sockets', 'daemon', 'launch', 'monitor', 'run-session', 'send', 'uuidgen']] + ['lib/libdbus-1.%s' % x for x in ['a', SHLIB_EXT]], 'dirs': ['include', 'share'] diff --git a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb index 86590d12e7..088f873ddb 100644 --- a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb +++ b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cpu.eb @@ -14,10 +14,10 @@ toolchain = {'name': 'CrayGNU', 'version': '2015.11'} dependencies = [ ('CMake', '3.5.0'), - ('spglib', '1.7.3'), + ('spglib', '1.7.3'), ('NFFT', '3.3.0'), ('GSL', '2.1'), - ('gtest', '1.7.0'), + ('gtest', '1.7.0'), ('cray-hdf5/1.8.13', EXTERNAL_MODULE), ] diff --git a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cuda.eb b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cuda.eb index 231148074a..3f3f75acda 100644 --- a/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cuda.eb +++ b/easybuild/easyconfigs/d/DCA++/DCA++-1.0-CrayGNU-2015.11-cuda.eb @@ -14,7 +14,7 @@ toolchain = {'name': 'CrayGNU', 'version': '2015.11'} dependencies = [ ('CMake', '3.5.0'), - ('spglib', '1.7.3'), + ('spglib', '1.7.3'), ('NFFT', '3.3.0'), ('GSL', '2.1'), ('gtest', '1.7.0'), diff --git a/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb b/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb index 1a6bd6a25d..82b2e17255 100644 --- a/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb +++ b/easybuild/easyconfigs/d/DIAL/DIAL-2011.06.06-foss-2016a.eb @@ -21,7 +21,7 @@ dependencies = [ ] binaries = ['assemble', 'assemble1', 'assemble_illumina', 'build_sff_index', 'convertFastqFasta', - 'cull_components', 'DIAL', 'filter', 'filter_clusters', 'fish_clusters', 'make_template', + 'cull_components', 'DIAL', 'filter', 'filter_clusters', 'fish_clusters', 'make_template', 'masker', 'partition', 'remove_clones', 'remove_clusters', 'update', 'update_clusters', 'update_status'] diff --git a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb index 7de0a8ea92..8b40d87ea0 100644 --- a/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/d/disambiguate/disambiguate-1.0.0-goolf-1.7.20-Python-2.7.11.eb @@ -6,7 +6,7 @@ easyblock = "PythonPackage" name = 'disambiguate' -version = '1.0.0' +version = '1.0.0' versionsuffix = '-Python-%(pyver)s' homepage = "https://github.com/AstraZeneca-NGS/disambiguate" @@ -19,9 +19,9 @@ sources = ["v%(version)s.tar.gz"] dependencies = [ ('Python', '2.7.11'), - ('BamTools', '2.4.0'), - ('zlib', '1.2.8'), - ('Pysam', '0.9.0', versionsuffix), + ('BamTools', '2.4.0'), + ('zlib', '1.2.8'), + ('Pysam', '0.9.0', versionsuffix), ] # this application provides a python implementation and a C++ implementation diff --git a/easybuild/easyconfigs/e/ETSF_IO/ETSF_IO-1.0.4-intel-2015b.eb b/easybuild/easyconfigs/e/ETSF_IO/ETSF_IO-1.0.4-intel-2015b.eb index 0e4a07c55e..7e7f19b2ca 100644 --- a/easybuild/easyconfigs/e/ETSF_IO/ETSF_IO-1.0.4-intel-2015b.eb +++ b/easybuild/easyconfigs/e/ETSF_IO/ETSF_IO-1.0.4-intel-2015b.eb @@ -30,7 +30,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ["bin/etsf_io"], + 'files': ["bin/etsf_io"], 'dirs': [] } diff --git a/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb b/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb index adaed6879a..222274d259 100644 --- a/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb +++ b/easybuild/easyconfigs/e/EricScript/EricScript-0.5.5-intel-2017a-R-3.4.0.eb @@ -31,4 +31,4 @@ sanity_check_paths = { modextrapaths = {'PATH': ''} -moduleclass = 'bio' +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb index 498218ede9..26cdd728d0 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016a.eb @@ -32,7 +32,7 @@ dependencies = [ ] files_to_copy = [([ - 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', + 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', 'sam-stats', 'varcall', 'randomFQ', 'alc', 'determine-phred'], 'bin' )] diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb index 5bd575648e..8409d2b2d3 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-foss-2016b.eb @@ -32,7 +32,7 @@ dependencies = [ ] files_to_copy = [([ - 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', + 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', 'sam-stats', 'varcall', 'randomFQ', 'alc', 'determine-phred'], 'bin' )] diff --git a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb index a1c32a3e34..1763f70eb3 100644 --- a/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb +++ b/easybuild/easyconfigs/e/ea-utils/ea-utils-1.04.807-intel-2016b.eb @@ -34,7 +34,7 @@ dependencies = [ ] files_to_copy = [([ - 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', + 'fastq-mcf', 'fastq-multx', 'fastq-join', 'fastq-stats', 'fastq-clipper', 'sam-stats', 'varcall', 'randomFQ', 'alc', 'determine-phred'], 'bin' )] diff --git a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.4-intel-2015b-PFFT-20150905.eb b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.4-intel-2015b-PFFT-20150905.eb index d127590485..1f513106f6 100644 --- a/easybuild/easyconfigs/f/FFTW/FFTW-3.3.4-intel-2015b-PFFT-20150905.eb +++ b/easybuild/easyconfigs/f/FFTW/FFTW-3.3.4-intel-2015b-PFFT-20150905.eb @@ -21,7 +21,7 @@ builddependencies = [ ] # the patch changed a Makefile.am, so we need to call autoreconf -preconfigopts = "autoreconf --verbose --symlink --force && " +preconfigopts = "autoreconf --verbose --symlink --force && " common_configopts = "--enable-threads --enable-openmp --with-pic" diff --git a/easybuild/easyconfigs/f/findhap/findhap-4.eb b/easybuild/easyconfigs/f/findhap/findhap-4.eb index 7622374b66..732e2ab92d 100644 --- a/easybuild/easyconfigs/f/findhap/findhap-4.eb +++ b/easybuild/easyconfigs/f/findhap/findhap-4.eb @@ -19,7 +19,7 @@ modextrapaths = { } modloadmsg = """ -Copy the following file to the directory from which you will be running the executable: +Copy the following file to the directory from which you will be running the executable: $EBROOTFINDHAP/findhap.options Other files in the $EBROOTFINDHAP directory are: diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb index f26f3a1cf8..415f10d874 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.5.5-goolf-1.7.20.eb @@ -19,7 +19,8 @@ dependencies = [ configopts = '--with-harfbuzz=no' sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb index fefd237604..e7a7a3593d 100644 --- a/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/f/freetype/freetype-2.6.2-goolf-1.7.20.eb @@ -19,7 +19,8 @@ dependencies = [ configopts = '--with-harfbuzz=no' sanity_check_paths = { - 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, 'lib/pkgconfig/freetype2.pc'], + 'files': ['bin/freetype-config', 'lib/libfreetype.a', 'lib/libfreetype.%s' % SHLIB_EXT, + 'lib/pkgconfig/freetype2.pc'], 'dirs': ['include/freetype2'], } diff --git a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb index 8d11408e6b..ae8931f569 100644 --- a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-goolf-1.7.20.eb @@ -25,7 +25,7 @@ dependencies = [ files_to_copy = [(['gfold'], 'bin'), 'README', 'doc'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/gfold'], 'dirs': [], diff --git a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb index 3b289b47ea..5afa7f55f9 100644 --- a/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb +++ b/easybuild/easyconfigs/g/GFOLD/GFOLD-1.1.4-intel-2016a.eb @@ -25,7 +25,7 @@ dependencies = [ files_to_copy = [(['gfold'], 'bin'), 'README', 'doc'] parallel = 1 - + sanity_check_paths = { 'files': ['bin/gfold'], 'dirs': [], diff --git a/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb b/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb index 9af7e1beb3..3d7e4ba822 100644 --- a/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb +++ b/easybuild/easyconfigs/g/GLib/GLib-2.48.2-foss-2015a.eb @@ -21,7 +21,8 @@ dependencies = [ builddependencies = [('Python', '2.7.9')] -configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared --disable-systemtap --with-pcre=system" +configopts = "--disable-maintainer-mode --disable-silent-rules --disable-libelf --enable-static --enable-shared " +configopts += "--disable-systemtap --with-pcre=system" postinstallcmds = ["sed -i -e 's|#!.*python|#!/usr/bin/env python|' %(installdir)s/bin/*"] diff --git a/easybuild/easyconfigs/g/Guile/Guile-2.0.11-foss-2016a.eb b/easybuild/easyconfigs/g/Guile/Guile-2.0.11-foss-2016a.eb index 94a0abd7af..ec7a8d0587 100644 --- a/easybuild/easyconfigs/g/Guile/Guile-2.0.11-foss-2016a.eb +++ b/easybuild/easyconfigs/g/Guile/Guile-2.0.11-foss-2016a.eb @@ -16,7 +16,7 @@ builddependencies = [('Autotools', '20150215')] dependencies = [ ('libunistring', '0.9.3'), ('libffi', '3.2.1'), - ('gc', '7.4.4'), + ('gc', '7.4.4'), ('GMP', '6.1.0'), ] diff --git a/easybuild/easyconfigs/g/gflags/gflags-2.1.2-foss-2016a.eb b/easybuild/easyconfigs/g/gflags/gflags-2.1.2-foss-2016a.eb index 9a10acf880..5f269fd40d 100644 --- a/easybuild/easyconfigs/g/gflags/gflags-2.1.2-foss-2016a.eb +++ b/easybuild/easyconfigs/g/gflags/gflags-2.1.2-foss-2016a.eb @@ -23,8 +23,8 @@ builddependencies = [ configopts = '-DBUILD_SHARED_LIBS=on -DBUILD_STATIC_LIBS=on' sanity_check_paths = { - 'files': ['bin/gflags_completions.sh'] + - ['lib/%s' % x for x in ['libgflags.%s' % SHLIB_EXT, + 'files': ['bin/gflags_completions.sh'] + + ['lib/%s' % x for x in ['libgflags.%s' % SHLIB_EXT, 'libgflags_nothreads.%s' % SHLIB_EXT, 'libgflags.a', 'libgflags_nothreads.a']] + ['include/gflags/gflags_completions.h'], 'dirs': [], diff --git a/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb index fa7f84d3e3..cd817e4d4a 100644 --- a/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb +++ b/easybuild/easyconfigs/g/grib_api/grib_api-1.21.0-foss-2017a.eb @@ -22,4 +22,3 @@ configopts = '--with-jasper=$EBROOTJASPER' parallel = 1 moduleclass = 'data' - diff --git a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb index 8dc32d3aad..e4de322688 100644 --- a/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb +++ b/easybuild/easyconfigs/g/gtkglext/gtkglext-1.2.0-intel-2015b.eb @@ -21,7 +21,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', + 'files': ['lib/gtkglext-1.0/include/gdkglext-config.h', 'lib/libgdkglext-x11-1.0.a', 'lib/libgdkglext-x11-1.0.%s' % SHLIB_EXT, 'lib/libgtkglext-x11-1.0.a', 'lib/libgtkglext-x11-1.0.%s' % SHLIB_EXT], 'dirs': ['include/gtkglext-1.0/gdk', 'include/gtkglext-1.0/gtk', 'lib/pkgconfig'], diff --git a/easybuild/easyconfigs/h/horton/horton-2.0.0-intel-2015b-Python-2.7.10-HDF5-1.8.15-patch1-serial.eb b/easybuild/easyconfigs/h/horton/horton-2.0.0-intel-2015b-Python-2.7.10-HDF5-1.8.15-patch1-serial.eb index ab045435b2..d0c34c2e67 100644 --- a/easybuild/easyconfigs/h/horton/horton-2.0.0-intel-2015b-Python-2.7.10-HDF5-1.8.15-patch1-serial.eb +++ b/easybuild/easyconfigs/h/horton/horton-2.0.0-intel-2015b-Python-2.7.10-HDF5-1.8.15-patch1-serial.eb @@ -50,4 +50,4 @@ sanity_check_paths = { 'dirs': ['lib/python%s/site-packages/horton' % pyshortver], } -moduleclass = 'chem' +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb index 110b480923..be548b30c0 100644 --- a/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGV/IGV-2.3.68-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] # add the installation dir to PATH -modextrapaths = { +modextrapaths = { 'PATH': '', } diff --git a/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb index f8dd5d79f2..fb24a4205c 100644 --- a/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGV/IGV-2.3.80-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] # add the installation dir to PATH -modextrapaths = { +modextrapaths = { 'PATH': '', } diff --git a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.68-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.68-Java-1.7.0_80.eb index bc16033a08..5610a087c8 100644 --- a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.68-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.68-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] # add the installation dir to PATH -modextrapaths = { +modextrapaths = { 'PATH': '', } diff --git a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.72-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.72-Java-1.7.0_80.eb index af0616b491..a1e88b7409 100644 --- a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.72-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.72-Java-1.7.0_80.eb @@ -26,7 +26,7 @@ versionsuffix = '-%s-%s' % (java, javaver) dependencies = [(java, javaver)] # add the installation dir to PATH -modextrapaths = { +modextrapaths = { 'PATH': '', } diff --git a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.75-Java-1.7.0_80.eb b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.75-Java-1.7.0_80.eb index d2575fc6ec..6bb0cfc42f 100644 --- a/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.75-Java-1.7.0_80.eb +++ b/easybuild/easyconfigs/i/IGVTools/IGVTools-2.3.75-Java-1.7.0_80.eb @@ -24,7 +24,7 @@ sources = ['%(namelower)s_%(version)s.zip'] dependencies = [('Java', '1.7.0_80')] # add the installation dir to PATH -modextrapaths = { +modextrapaths = { 'PATH': '', } diff --git a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb index 6af67462a3..5427eeed24 100644 --- a/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb +++ b/easybuild/easyconfigs/i/IOzone/IOzone-3.434-foss-2016a.eb @@ -21,7 +21,7 @@ files_to_copy = [ (['src/current/%s' % docfile for docfile in ['gengnuplot.sh', 'Generate_Graphs', 'gnu3d.dem']], 'share'), (['docs/iozone.1'], 'share/man/man1'), (['docs/%s' % docfile for docfile in ['IOzone_msword_98.doc', 'IOzone_msword_98.pdf', 'Iozone_ps.gz', - 'Run_rules.doc']], + 'Run_rules.doc']], 'share/doc'), ] diff --git a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb index b0f9d10dbb..0c649171c4 100644 --- a/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb +++ b/easybuild/easyconfigs/i/igraph/igraph-0.7.1-intel-2016b.eb @@ -17,7 +17,7 @@ source_urls = ['https://github.com/igraph/igraph/releases/download/%(version)s'] builddependencies = [('Autotools', '20150215')] patches = [ - 'igraph-%(version)s-no-lapack-no-blas.patch', + 'igraph-%(version)s-no-lapack-no-blas.patch', 'igraph-%(version)s-fix-aclocal-version.patch' ] diff --git a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb index 57fd16dd93..4dafa137ca 100644 --- a/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb +++ b/easybuild/easyconfigs/i/impi/impi-2017.1.132-GCC-5.4.0-2.26.eb @@ -19,7 +19,7 @@ components = ['intel-mpi', 'intel-psxe', 'intel-imb'] license_file = HOME + '/licenses/intel/license.lic' # Set I_MPI_ variables to point at the appropriate compilers -#set_mpi_wrappers_all = True +# set_mpi_wrappers_all = True postinstallcmds = [ 'ln -s %(installdir)s/lib64/libmpi.so %(installdir)s/lib64/libmpich.so', diff --git a/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb index 73e404db1c..1d4d9ee543 100644 --- a/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb +++ b/easybuild/easyconfigs/j/JasPer/JasPer-1.900.1-foss-2017a.eb @@ -19,4 +19,3 @@ sanity_check_paths = { } moduleclass = 'vis' - diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb index 4dba96087d..3c4304258a 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.10r20160303-Java-1.8.0_92.eb @@ -29,7 +29,7 @@ install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" modloadmsg = "To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar\n" sanity_check_paths = { - 'files': ['jModelTest.jar'], + 'files': ['jModelTest.jar'], 'dirs': [], } diff --git a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb index 37a4b9dd9a..f01140a3e5 100644 --- a/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb +++ b/easybuild/easyconfigs/j/jModelTest/jModelTest-2.1.9r20160115-goolf-1.4.10-Java-1.7.0_75.eb @@ -29,7 +29,7 @@ install_cmd = "cd jmodeltest2-%(version)s && ant -Ddist.dir=%(installdir)s jar" modloadmsg = "To execute jModelTest run: java -jar $EBROOTJMODELTEST/jModelTest.jar\n" sanity_check_paths = { - 'files': ['jModelTest.jar'], + 'files': ['jModelTest.jar'], 'dirs': [], } diff --git a/easybuild/easyconfigs/j/jhbuild/jhbuild-3.15.92-GCCcore-4.9.3.eb b/easybuild/easyconfigs/j/jhbuild/jhbuild-3.15.92-GCCcore-4.9.3.eb index b2f1cf65eb..401fa1f345 100644 --- a/easybuild/easyconfigs/j/jhbuild/jhbuild-3.15.92-GCCcore-4.9.3.eb +++ b/easybuild/easyconfigs/j/jhbuild/jhbuild-3.15.92-GCCcore-4.9.3.eb @@ -36,7 +36,7 @@ dependencies = [ # to avoid unnecessary dependencies. This requires us to build in the install dir so that all libs are found. buildininstalldir = True skipsteps = ['configure'] -prebuildopts = './autogen.sh --prefix=%(installdir)s &&' +prebuildopts = './autogen.sh --prefix=%(installdir)s &&' # Make sure there are no "not found" in the sanitycheck output sanity_check_commands = [('! jhbuild', 'sanitycheck| grep not\ found')] diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb index 531f4e4816..2b4d52c46c 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.7.1-foss-2015a.eb @@ -20,7 +20,7 @@ preconfigopts = "[ ! -e build ] && mkdir build && cd build &&" configure_cmd_prefix = '../' # For llvmpy / Numba: -configopts = '--enable-optimized --enable-pic --enable-shared' +configopts = '--enable-optimized --enable-pic --enable-shared' prebuildopts = 'cd build && REQUIRES_RTTI=1' preinstallopts = 'cd build &&' diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb index 6bffed0098..7666df6063 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-3.9.1-foss-2017a.eb @@ -41,4 +41,3 @@ sanity_check_paths = { separate_build_dir = True moduleclass = 'compiler' - diff --git a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb index 5a2a5553d5..d9e41a1460 100644 --- a/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb +++ b/easybuild/easyconfigs/l/LLVM/LLVM-4.0.0-foss-2017a.eb @@ -41,4 +41,3 @@ sanity_check_paths = { separate_build_dir = True moduleclass = 'compiler' - diff --git a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb index b39dd8a48b..4e067fb22e 100644 --- a/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb +++ b/easybuild/easyconfigs/l/LSMS/LSMS-3_rev237-foss-2016a.eb @@ -6,7 +6,7 @@ version = '3_rev237' homepage = 'https://asc.llnl.gov/CORAL-benchmarks/#lsms' description = "LSMS benchmark, part of CORAL suite" -toolchain = {'name': 'foss', 'version': '2016a' } +toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://asc.llnl.gov/CORAL-benchmarks/Science/'] sources = ['%(name)s_%(version)s.tar.bz2'] @@ -27,5 +27,5 @@ sanity_check_paths = { 'files': ['bin/lsms', 'bin/wl-lsms'], 'dirs': [], } - + moduleclass = 'tools' diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb index b4b7228f14..f715404402 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.2-goolf-1.4.10.eb @@ -20,7 +20,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb index 2316d70175..22b46c1c3e 100644 --- a/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb +++ b/easybuild/easyconfigs/l/libXi/libXi-1.7.4-intel-2015b.eb @@ -20,7 +20,7 @@ dependencies = [ ] sanity_check_paths = { - 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', + 'files': ['include/X11/extensions/XInput.h', 'include/X11/extensions/XInput2.h', 'lib/libXi.%s' % SHLIB_EXT, 'lib/libXi.a'], 'dirs': [], } diff --git a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb index 45a556ffec..684bf7dc76 100644 --- a/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb +++ b/easybuild/easyconfigs/l/libreadline/libreadline-6.2-foss-2015a.eb @@ -18,10 +18,10 @@ source_urls = ['http://ftp.gnu.org/gnu/readline'] dependencies = [('ncurses', '5.9')] sanity_check_paths = { - 'files' : ['lib/libreadline.a', 'lib/libhistory.a'] + - ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', - 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], - 'dirs' : [], + 'files': ['lib/libreadline.a', 'lib/libhistory.a'] + + ['include/readline/%s' % x for x in ['chardefs.h', 'history.h', 'keymaps.h', 'readline.h', 'rlconf.h', + 'rlstdc.h', 'rltypedefs.h', 'tilde.h']], + 'dirs': [], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb index b1648c008c..e2b238572c 100644 --- a/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb +++ b/easybuild/easyconfigs/m/METIS/METIS-5.1.0-foss-2017a.eb @@ -15,7 +15,7 @@ source_urls = [ 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', ] -#We use 32bit for indices and 64bit for content +# we use 32bit for indices and 64bit for content patches = ['METIS-5.1.0-use-doubles.patch'] builddependencies = [('CMake', '3.8.0')] @@ -23,4 +23,3 @@ builddependencies = [('CMake', '3.8.0')] configopts = ['', 'shared=1'] moduleclass = 'math' - diff --git a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb index 6a0e136d4e..75f0da13ce 100644 --- a/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb +++ b/easybuild/easyconfigs/m/MaSuRCA/MaSuRCA-3.2.2-foss-2016a.eb @@ -33,8 +33,8 @@ dependencies = [ ('zlib', '1.2.8'), ] -buildopts="install-special" -start_dir="global-1" +buildopts = "install-special" +start_dir = "global-1" sanity_check_paths = { 'files': ['bin/masurca'], diff --git a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb index 27ac3ec93c..42ded1fee4 100644 --- a/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb +++ b/easybuild/easyconfigs/m/Mesa/Mesa-11.2.1-foss-2015a.eb @@ -34,7 +34,7 @@ dependencies = [ ] # Use the os provided libudev or the EB provided eudev -#osdependencies = ['libudev'] +# osdependencies = ['libudev'] # GLU is not part anymore of Mesa package! configopts = " --disable-osmesa --enable-gallium-osmesa --enable-gallium-llvm --enable-glx --disable-dri" diff --git a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb index 6a31d17221..3b6604a72e 100644 --- a/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/m/memkind/memkind-1.5.0-GCCcore-5.4.0.eb @@ -16,12 +16,12 @@ sources = ['v%(version)s.tar.gz'] builddependencies = [ ('binutils', '2.26'), - ('Coreutils', '8.27'), # needed to ensure that ./build_jemalloc.sh works properly - ('Autotools', '20150215'), # needed to ensure that ./build_jemalloc.sh works properly + ('Coreutils', '8.27'), # needed to ensure that ./build_jemalloc.sh works properly + ('Autotools', '20150215'), # needed to ensure that ./build_jemalloc.sh works properly ] dependencies = [ - ('tbb', '2017_U5'), # optional, to enable the tbb heap manager + ('tbb', '2017_U5'), # optional, to enable the tbb heap manager ('numactl', '2.0.11') ] diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb index eb46a80abe..d98ab8d528 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2015b-Python-2.7.10.eb @@ -14,7 +14,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.10'), - ('matplotlib', '1.5.0', versionsuffix), + ('matplotlib', '1.5.0', versionsuffix), ] runtest = "export MATPLOTLIBRC=$PWD; echo 'backend: agg' > $MATPLOTLIBRC/matplotlibrc;" diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb index 62f71cc876..c9fec8f432 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016a-Python-2.7.11.eb @@ -14,7 +14,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.11'), - ('matplotlib', '1.5.1', versionsuffix), + ('matplotlib', '1.5.1', versionsuffix), ] runtest = "export MATPLOTLIBRC=$PWD; echo 'backend: agg' > $MATPLOTLIBRC/matplotlibrc;" diff --git a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb index 1b74bd9124..a8659a20bf 100644 --- a/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/m/molmod/molmod-1.1-intel-2016b-Python-2.7.12.eb @@ -14,7 +14,7 @@ sources = [SOURCE_TAR_GZ] dependencies = [ ('Python', '2.7.12'), - ('matplotlib', '1.5.3', versionsuffix), + ('matplotlib', '1.5.3', versionsuffix), ] runtest = "export MATPLOTLIBRC=$PWD; echo 'backend: agg' > $MATPLOTLIBRC/matplotlibrc;" diff --git a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb index 8c793e8447..216d763393 100644 --- a/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb +++ b/easybuild/easyconfigs/n/NAMD/NAMD-2.12-foss-2017a-mpi.eb @@ -22,5 +22,3 @@ osdependencies = ['tcsh'] charm_arch = "mpi-linux-x86_64" moduleclass = 'chem' - - diff --git a/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb index 491184693e..e11e467c7e 100644 --- a/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb +++ b/easybuild/easyconfigs/n/NRGLjubljana/NRGLjubljana-2.4.3.23-foss-2016b.eb @@ -15,19 +15,19 @@ docurls = 'http://nrgljubljana.ijs.si/examples/' software_license = 'LicenseGPLv3' toolchain = {'name': 'foss', 'version': '2016b'} -toolchainopts = { 'pic': True } +toolchainopts = {'pic': True} -sources = [ '%(namelower)s-%(version)s.tar.gz' ] -source_urls = [ 'http://nrgljubljana.ijs.si/' ] +sources = ['%(namelower)s-%(version)s.tar.gz'] +source_urls = ['http://nrgljubljana.ijs.si/'] configopts = '--with-tools --with-boost-serialization=boost_serialization' configopts += ' CXXFLAGS="-Ddsyev=dsyev_ -Ddsyevr=dsyevr_ -Dzheev=zheev_ -Dzheevr=zheevr_"' configopts += ' LDFLAGS="-lopenblas -L${EBROOTBOOST}/lib"' dependencies = [ - ('GMP', '6.1.2'), - ('GSL', '2.3'), - ('Boost', '1.61.0') + ('GMP', '6.1.2'), + ('GSL', '2.3'), + ('Boost', '1.61.0'), ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb b/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb index eb26f01e29..8beb3e1e0d 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-2.6-goolf-1.4.10.eb @@ -15,8 +15,10 @@ dependencies = [('GMP', '5.0.5')] sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb index 27c65b25e8..a611494ef0 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-GNU-4.9.3-2.25.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb index f658dc22c5..3dfb0c2269 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-foss-2016a.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb index b0fd192537..a8958f5414 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.1.1-intel-2016a.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb index 295f442406..c818d9c206 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-GCCcore-5.4.0.eb @@ -22,8 +22,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb index 2f73f07946..9ed2f96361 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-foss-2016b.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb b/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb index d49da80e3c..9441d6c8c5 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.2-intel-2016b.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb index 9683896ee0..eb6cb21d8f 100644 --- a/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb +++ b/easybuild/easyconfigs/n/nettle/nettle-3.3-intel-2017a.eb @@ -20,8 +20,10 @@ dependencies = [ sanity_check_paths = { 'files': ['bin/%s' % x for x in ['nettle-hash', 'nettle-lfib-stream', 'pkcs1-conv', 'sexp-conv']] + - [('lib/libhogweed.a', 'lib64/libhogweed.a'), ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), - ('lib/libnettle.a', 'lib64/libnettle.a'), ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], + [('lib/libhogweed.a', 'lib64/libhogweed.a'), + ('lib/libhogweed.%s' % SHLIB_EXT, 'lib64/libhogweed.%s' % SHLIB_EXT), + ('lib/libnettle.a', 'lib64/libnettle.a'), + ('lib/libnettle.%s' % SHLIB_EXT, 'lib64/libnettle.%s' % SHLIB_EXT)], 'dirs': ['include/nettle'], } diff --git a/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb b/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb index c9312c4044..20a5faa397 100644 --- a/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb +++ b/easybuild/easyconfigs/o/ORCA/ORCA-4.0.0.2-OpenMPI-2.0.2.eb @@ -3,8 +3,8 @@ easyblock = "PackedBinary" name = "ORCA" version = '4.0.0.2' -openmpiversion = '2.0.2' -versionsuffix = '-OpenMPI-%s' % openmpiversion +ompi_ver = '2.0.2' +versionsuffix = '-OpenMPI-%s' % ompi_ver homepage = 'http://cec.mpg.de/forum/' description = """ORCA is a flexible, efficient and easy-to-use general purpose tool for quantum chemistry @@ -16,19 +16,18 @@ description = """ORCA is a flexible, efficient and easy-to-use general purpose t toolchain = {'name': 'dummy', 'version': ''} # Download from https://cec.mpg.de/orcadownload/index.php -sources = ['%%(namelower)s_%s_linux_x86-64_openmpi%s.tbz' % (version.replace('.', '_'), openmpiversion.replace('.', ''))] +sources = ['%%(namelower)s_%s_linux_x86-64_openmpi%s.tbz' % (version.replace('.', '_'), ompi_ver.replace('.', ''))] checksums = ['a5b8ecdd3d004af4bc8190c986f34e11'] -dependencies = [('OpenMPI', openmpiversion, '-GCC-6.3.0-2.27')] +dependencies = [('OpenMPI', ompi_ver, '-GCC-6.3.0-2.27')] sanity_check_paths = { 'files': ['orca_%s%s' % (x, y) for x in ['anoint', 'casscf', 'cis', 'cleanup', 'cpscf', 'eprnmr', 'gtoint', 'mdci', 'mp2', 'mrci', 'pc', - 'rocis', 'scf', 'scfgrad', 'soc'] - for y in ["", "_mpi"]] + + 'rocis', 'scf', 'scfgrad', 'soc'] for y in ['', '_mpi']] + ['orca_%s' % x for x in ['2mkl', 'asa', 'chelpg', 'ciprep', 'eca', 'ecplib', - 'euler', 'fci', 'fitpes', 'gstep', 'loc', 'mapspc', + 'euler', 'fci', 'fitpes', 'gstep', 'loc', 'mapspc', 'md', 'mergefrag', 'ndoint', 'numfreq', 'plot', 'pltvib', 'pop', 'rel', 'vib', 'vpot']] + ['orca'], diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb index 3f1b8657b8..009425ac2b 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-5.3.2-foss-2017a.eb @@ -22,4 +22,3 @@ sanity_check_paths = { } moduleclass = 'perf' - diff --git a/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb index c2ecdc414e..d4318573b4 100644 --- a/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb +++ b/easybuild/easyconfigs/o/OTF2/OTF2-2.0-foss-2017a.eb @@ -3,7 +3,7 @@ # Copyright:: Copyright 2013-2016 Juelich Supercomputing Centre, Germany # Authors:: Bernd Mohr # Markus Geimer -## License:: 3-clause BSD +# License:: 3-clause BSD # # This work is based on experiences from the UNITE project # http://apps.fz-juelich.de/unite/ @@ -38,4 +38,3 @@ sanity_check_paths = { } moduleclass = 'perf' - diff --git a/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb b/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb index 26fbd9394a..88870a022f 100644 --- a/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb +++ b/easybuild/easyconfigs/o/Octopus/Octopus-5.0.0-intel-2015b-mpi.eb @@ -41,10 +41,10 @@ configopts += '--with-netcdf-prefix=$EBROOTNETCDFMINFORTRAN ' configopts += '--with-etsf-io-prefix=$EBROOTETSF_IO ' configopts += '--with-pfft-prefix=$EBROOTPFFT --with-mpifftw-prefix=$EBROOTFFTW ' -runtest = 'MPIEXEC=`which mpirun` check' +runtest = 'MPIEXEC=`which mpirun` check' sanity_check_paths = { - 'files': ["bin/octopus_mpi"], + 'files': ["bin/octopus_mpi"], 'dirs': [] } diff --git a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-3.0.0-foss-2016a.eb b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-3.0.0-foss-2016a.eb index 7985e4b267..b17352b6a7 100644 --- a/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-3.0.0-foss-2016a.eb +++ b/easybuild/easyconfigs/o/OpenFOAM/OpenFOAM-3.0.0-foss-2016a.eb @@ -21,7 +21,7 @@ patches = [ ('ThirdParty-%(version)s_cleanup.patch', ".."), # patch should not be applied in OpenFOAM subdir ] -dependencies = [ +dependencies = [ ('libreadline', '6.3'), # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) ('METIS', '5.1.0', '-32bitIDX'), diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb index 3413573e74..3736ce11cc 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-2.0.2-GCC-6.3.0-2.27-opa.eb @@ -2,7 +2,7 @@ easyblock = 'ConfigureMake' name = 'OpenMPI' version = '2.0.2' -versionsuffix= '-opa' +versionsuffix = '-opa' homepage = 'http://www.open-mpi.org/' description = """The Open MPI Project is an open source MPI-2 implementation.""" @@ -33,5 +33,3 @@ sanity_check_paths = { } moduleclass = 'mpi' - - diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.6-goolf-1.4.10.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.6-goolf-1.4.10.eb index 5ee2eb89d1..1c4f9ab85d 100644 --- a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.6-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.6-goolf-1.4.10.eb @@ -18,7 +18,7 @@ source_urls = ['http://sco.h-its.org/exelixis/web/software/pear/files/'] sources = ['%(namelower)s-%(version)s-src.tar.gz'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ('bzip2', '1.0.6'), ] diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb index 63d0944c28..37c50aa1df 100644 --- a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-foss-2016b.eb @@ -17,7 +17,7 @@ sources = ['%(namelower)s-%(version)s.tar.gz'] checksums = ['1ab079a2cea61aee816012966b7ccacd'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ('bzip2', '1.0.6'), ] diff --git a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb index 33e09a2ad6..fef4a83c9e 100644 --- a/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb +++ b/easybuild/easyconfigs/p/PEAR/PEAR-0.9.8-intel-2016b.eb @@ -17,7 +17,7 @@ sources = ['%(namelower)s-%(version)s.tar.gz'] checksums = ['1ab079a2cea61aee816012966b7ccacd'] dependencies = [ - ('zlib', '1.2.8'), + ('zlib', '1.2.8'), ('bzip2', '1.0.6'), ] diff --git a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb index 87e4b65750..44a7eca4df 100644 --- a/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb +++ b/easybuild/easyconfigs/p/PETSc/PETSc-3.7.5-intel-2016b-downloaded-deps.eb @@ -14,7 +14,7 @@ sources = [SOURCELOWER_TAR_GZ] # (build) dependencies provided through EasyBuild builddependencies = [('CMake', '3.5.2')] -dependencies = [('HDF5','1.8.18')] +dependencies = [('HDF5', '1.8.18')] # external packages that are downloaded with --download-=1 and --download--static=1 download_deps_static = ['hypre', 'metis', 'ml', 'mumps', 'parmetis', 'prometheus', 'ptscotch', 'suitesparse', diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb index 261f83dd09..0f000df55c 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-foss-2015b-Perl-5.20.3.eb @@ -108,7 +108,7 @@ modextrapaths = { postinstallcmds = [ "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line "chmod +x %(installdir)s/*.pl" # add execution permission -] +] sanity_check_paths = { 'files': ['prinseq-lite.pl', 'prinseq-graphs.pl', 'prinseq-graphs-noPCA.pl'], diff --git a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb index f2db549906..8633986686 100644 --- a/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/p/PRINSEQ/PRINSEQ-0.20.4-goolf-1.4.10-Perl-5.16.3.eb @@ -106,7 +106,7 @@ modextrapaths = { postinstallcmds = [ "sed -i -e 's|/usr/bin/perl|/usr/bin/env\ perl|' %(installdir)s/*.pl", # fix shebang line "chmod +x %(installdir)s/*.pl" # add execution permission -] +] sanity_check_paths = { 'files': ['prinseq-lite.pl', 'prinseq-graphs.pl', 'prinseq-graphs-noPCA.pl'], diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.8.0-foss-2015b.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.8.0-foss-2015b.eb index 8e0db7e9a1..30f8eb2395 100644 --- a/easybuild/easyconfigs/p/PROJ/PROJ-4.8.0-foss-2015b.eb +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.8.0-foss-2015b.eb @@ -21,7 +21,7 @@ source_urls = ['http://download.osgeo.org/proj/'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', + 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', 'bin/nad2bin', 'bin/proj'], 'dirs': [], } diff --git a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.1-foss-2015a.eb b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.1-foss-2015a.eb index ce218bd9f2..4c530e2669 100644 --- a/easybuild/easyconfigs/p/PROJ/PROJ-4.9.1-foss-2015a.eb +++ b/easybuild/easyconfigs/p/PROJ/PROJ-4.9.1-foss-2015a.eb @@ -22,7 +22,7 @@ source_urls = ['http://download.osgeo.org/proj/'] sources = [SOURCELOWER_TAR_GZ] sanity_check_paths = { - 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', + 'files': ['bin/cs2cs', 'bin/geod', 'bin/invgeod', 'bin/invproj', 'bin/nad2bin', 'bin/proj'], 'dirs': [], } diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb index 3fb8ef382e..7848df036c 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a-mt.eb @@ -21,7 +21,7 @@ sources = [SOURCELOWER_TAR_GZ] maxparallel = 1 -#runtest = 'test' +# runtest = 'test' exts_list = [ ('Module::Build', '0.4210', { # std module but recent BioPerl needs a recent version for some reason @@ -260,7 +260,7 @@ exts_list = [ ('Data::Types', '0.09', { 'source_tmpl': 'Data-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], - }), + }), ('Exporter::Tiny', '0.042', { 'source_tmpl': 'Exporter-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], diff --git a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb index 519a5ec0ca..a2edfbd0bd 100644 --- a/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb +++ b/easybuild/easyconfigs/p/Perl/Perl-5.22.0-foss-2015a.eb @@ -257,7 +257,7 @@ exts_list = [ ('Data::Types', '0.09', { 'source_tmpl': 'Data-Types-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/D/DW/DWHEELER/'], - }), + }), ('Exporter::Tiny', '0.042', { 'source_tmpl': 'Exporter-Tiny-%(version)s.tar.gz', 'source_urls': ['http://cpan.metacpan.org/authors/id/T/TO/TOBYINK/'], diff --git a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb index 47debc3391..b4c1e2fdf5 100644 --- a/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb +++ b/easybuild/easyconfigs/p/Platanus/Platanus-1.2.4-foss-2017a.eb @@ -1,7 +1,7 @@ easyblock = 'MakeCp' name = 'Platanus' -version = '1.2.4' +version = '1.2.4' homepage = 'http://platanus.bio.titech.ac.jp/' description = """PLATform for Assembling NUcleotide Sequences""" @@ -14,7 +14,7 @@ buildopts = 'CXXFLAGS="$CXXFLAGS -Dnullptr=0 -lm -fpermissive"' source_urls = ['http://platanus.bio.titech.ac.jp/?ddownload=150'] sources = ['%(name)s_v%(version)s.tar.gz'] -files_to_copy = [(["platanus"],'bin'), "README", "LICENSE"] +files_to_copy = [(["platanus"], 'bin'), "README", "LICENSE"] sanity_check_paths = { 'files': ["bin/platanus"], diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb index f0889a65b2..160f3b3a15 100644 --- a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.0-goolf-1.7.20-Python-2.7.11.eb @@ -20,8 +20,8 @@ parallel = 1 dependencies = [ ('Python', '2.7.11'), ('ncurses', '5.9'), - ('zlib', '1.2.8'), - ('cURL', '7.44.0'), + ('zlib', '1.2.8'), + ('cURL', '7.44.0'), ] # this is a bundle of Python packages diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb index 3deabf6808..e283bd562a 100644 --- a/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.9.1.4-foss-2016b-Python-2.7.12.eb @@ -23,8 +23,8 @@ parallel = 1 dependencies = [ ('Python', '2.7.12'), ('ncurses', '6.0'), - ('zlib', '1.2.8'), - ('cURL', '7.49.1'), + ('zlib', '1.2.8'), + ('cURL', '7.49.1'), ] # this is a bundle of Python packages diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb index 8a60745ce6..e436c82dbe 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2015.11.eb @@ -27,7 +27,7 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '5.9'), ('SQLite', '3.9.2'), - ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack + ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), ] diff --git a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb index f9d52e68ec..acbb85722b 100644 --- a/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb +++ b/easybuild/easyconfigs/p/Python/Python-2.7.11-CrayGNU-2016.03.eb @@ -27,7 +27,7 @@ dependencies = [ ('libreadline', '6.3'), ('ncurses', '6.0'), ('SQLite', '3.9.2'), - ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack + ('Tk', '8.6.4', '-no-X11'), # this requires a full X11 stack ('GMP', '6.1.0'), ] diff --git a/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb b/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb index 5e218a3225..cfbcaf72eb 100644 --- a/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb +++ b/easybuild/easyconfigs/p/pbbam/pbbam-20170508-intel-2017a.eb @@ -16,7 +16,7 @@ source_urls = [ 'https://github.com/google/googletest/archive/', ] sources = [ - ('%s.tar.gz' % commit, "tar xfvz %s --strip-components=1"), # pbbam + ('%s.tar.gz' % commit, "tar xfvz %s --strip-components=1"), # pbbam 'release-%s.tar.gz' % gtest_ver, # googletest ] diff --git a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb index b6ccc91bd2..9f34b89624 100644 --- a/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/p/pigz/pigz-2.3.1-goolf-1.4.10.eb @@ -18,7 +18,7 @@ toolchain = {'name': 'goolf', 'version': '1.4.10'} source_urls = ['https://github.com/madler/pigz/archive/'] sources = ['v%(version)s.tar.gz'] -checksums = ['3a41409da23ff093b61e414d602c5650'] +checksums = ['3a41409da23ff093b61e414d602c5650'] # README recommends zlib 1.2.6 or higher dependencies = [('zlib', '1.2.8')] diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb index 95846046fc..193456e409 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2015b.eb @@ -166,7 +166,7 @@ exts_list = [ ('mice', '2.25', ext_options), ('urca', '1.2-8', ext_options), ('fracdiff', '1.4-2', ext_options), - ('logistf', '1.21', ext_options), + ('logistf', '1.21', ext_options), ('akima', '0.5-12', ext_options), ('bitops', '1.0-6', ext_options), ('boot', '1.3-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb index 1389b272dd..48a36233ea 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016a.eb @@ -166,7 +166,7 @@ exts_list = [ ('mice', '2.25', ext_options), ('urca', '1.2-8', ext_options), ('fracdiff', '1.4-2', ext_options), - ('logistf', '1.21', ext_options), + ('logistf', '1.21', ext_options), ('akima', '0.5-12', ext_options), ('bitops', '1.0-6', ext_options), ('boot', '1.3-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb index 0acfcbd0b3..c866f9a169 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-foss-2016b.eb @@ -166,7 +166,7 @@ exts_list = [ ('mice', '2.25', ext_options), ('urca', '1.2-8', ext_options), ('fracdiff', '1.4-2', ext_options), - ('logistf', '1.21', ext_options), + ('logistf', '1.21', ext_options), ('akima', '0.5-12', ext_options), ('bitops', '1.0-6', ext_options), ('boot', '1.3-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb index 39a19900bb..becdf1c504 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a-libX11-1.6.3.eb @@ -176,7 +176,7 @@ exts_list = [ ('mice', '2.25', ext_options), ('urca', '1.2-8', ext_options), ('fracdiff', '1.4-2', ext_options), - ('logistf', '1.21', ext_options), + ('logistf', '1.21', ext_options), ('akima', '0.5-12', ext_options), ('bitops', '1.0-6', ext_options), ('boot', '1.3-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb index ad907eaa04..470ef9623d 100644 --- a/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb +++ b/easybuild/easyconfigs/r/R/R-3.2.3-intel-2016a.eb @@ -166,7 +166,7 @@ exts_list = [ ('mice', '2.25', ext_options), ('urca', '1.2-8', ext_options), ('fracdiff', '1.4-2', ext_options), - ('logistf', '1.21', ext_options), + ('logistf', '1.21', ext_options), ('akima', '0.5-12', ext_options), ('bitops', '1.0-6', ext_options), ('boot', '1.3-17', ext_options), diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb index 17436647a4..512b0289b6 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-foss-2016b-X11-20160819.eb @@ -13,7 +13,7 @@ source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=yes --enable-R-shlib" -#Actually use Tcl/Tk +# actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" @@ -507,4 +507,3 @@ exts_list = [ ] moduleclass = 'lang' - diff --git a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb index dd6b13d0c2..262dd0c121 100644 --- a/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb +++ b/easybuild/easyconfigs/r/R/R-3.3.3-intel-2017a-X11-20170314.eb @@ -13,7 +13,7 @@ source_urls = ['http://cran.us.r-project.org/src/base/R-%(version_major)s'] preconfigopts = 'BLAS_LIBS="$LIBBLAS" LAPACK_LIBS="$LIBLAPACK"' configopts = "--with-lapack --with-blas --with-pic --enable-threads --with-x=yes --enable-R-shlib" -#Actually use Tcl/Tk +# actually use Tcl/Tk configopts += ' --with-tcl-config=$EBROOTTCL/lib/tclConfig.sh --with-tk-config=$EBROOTTK/lib/tkConfig.sh ' # Enable graphics capabilities for plotting. configopts += " --with-cairo --with-libpng --with-jpeglib --with-libtiff" @@ -508,4 +508,3 @@ exts_list = [ ] moduleclass = 'lang' - diff --git a/easybuild/easyconfigs/r/RELION/RELION-1.4-intel-2016b-single.eb b/easybuild/easyconfigs/r/RELION/RELION-1.4-intel-2016b-single.eb index add5ffc72c..2998c29cfd 100644 --- a/easybuild/easyconfigs/r/RELION/RELION-1.4-intel-2016b-single.eb +++ b/easybuild/easyconfigs/r/RELION/RELION-1.4-intel-2016b-single.eb @@ -24,7 +24,7 @@ dependencies = [ ] # RELION expects FLTK to be in external/fltk-1.3.0 and we have to add fltk libraries -configopts = '--enable-mpi --enable-float ' +configopts = '--enable-mpi --enable-float ' configopts += 'LIBS="-lfltk -lXcursor -lXfixes -lXext -lXft -lfontconfig -lXinerama -lpthread -lX11" ' configopts += '&& ln -s $EBROOTFLTK/include external/fltk-1.3.0 ' # users expect the maingui binary to be called relion diff --git a/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb index f122fed527..8df3ba88af 100644 --- a/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb +++ b/easybuild/easyconfigs/r/RSeQC/RSeQC-2.6.4-foss-2016b-Python-2.7.12-R-3.3.1.eb @@ -25,7 +25,7 @@ source_urls = [SOURCEFORGE_SOURCE] dependencies = [ ('R', '3.3.1'), ('Python', '2.7.12'), - ('Pysam', '0.9.1.4', basepyversionsuffix), + ('Pysam', '0.9.1.4', basepyversionsuffix), ] runtest = "python setup.py test" diff --git a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb index fc07069bff..1ed10f0d18 100644 --- a/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb +++ b/easybuild/easyconfigs/r/RepastHPC/RepastHPC-2.2.0-foss-2016a.eb @@ -23,7 +23,7 @@ dependencies = [ configopts = '--with-boost=$EBROOTBOOST --with-netcdf=$EBROOTNETCDFMINCPLUSPLUS' sanity_check_paths = { - 'files': ['lib/librelogo-%%(version)s.%s' % SHLIB_EXT, 'lib/librepast_hpc-%%(version)s.%s' % SHLIB_EXT ], + 'files': ['lib/librelogo-%%(version)s.%s' % SHLIB_EXT, 'lib/librepast_hpc-%%(version)s.%s' % SHLIB_EXT], 'dirs': ['bin/rumor', 'bin/zombie', 'include', 'lib'], } diff --git a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb index efecae95e8..21a990b69b 100644 --- a/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/r/rootpy/rootpy-0.8.0-foss-2016a-Python-2.7.11.eb @@ -20,7 +20,7 @@ sources = ['%(version)s.tar.gz'] dependencies = [ ('Python', '2.7.11'), - ('ROOT','v6.08.02','-Python-%(pyver)s'), + ('ROOT', 'v6.08.02', '-Python-%(pyver)s'), ('matplotlib', '1.5.1', versionsuffix + '-freetype-2.6.3') ] diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb index 7e537ec0fb..1c00d4b38b 100644 --- a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a-tools.eb @@ -42,4 +42,3 @@ sanity_check_paths = { } moduleclass = 'lib' - diff --git a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb index 46e980be5f..8dd41bb2de 100644 --- a/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb +++ b/easybuild/easyconfigs/s/SIONlib/SIONlib-1.7.1-foss-2017a.eb @@ -36,4 +36,3 @@ sanity_check_paths = { } moduleclass = 'lib' - diff --git a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb index 352f9013ea..a8666f197a 100644 --- a/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb +++ b/easybuild/easyconfigs/s/SUMATRA/SUMATRA-1.0.20-foss-2016a.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'foss', 'version': '2016a'} source_urls = ['https://git.metabarcoding.org/obitools/sumatra/uploads/251020bbbd6c6595cb9fce6077e29952/'] sources = ['%(namelower)s_v%(version)s.tar.gz'] -prebuildopts = 'make clean &&' +prebuildopts = 'make clean &&' files_to_copy = [(['sumatra'], 'bin'), 'sumatra_user_manual.pdf'] diff --git a/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb index c6c18b59b8..8b68d940d5 100644 --- a/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb +++ b/easybuild/easyconfigs/s/Sambamba/Sambamba-0.6.6.eb @@ -18,7 +18,7 @@ toolchain = {'name': 'dummy', 'version': ''} source_urls = ['https://github.com/lomereiter/sambamba/releases/download/v%(version)s/'] sources = ['%(namelower)s_v%(version)s_linux.tar.bz2'] -postinstallcmds = ['cd %(installdir)s && ln -s sambamba_v%(version)s sambamba',] +postinstallcmds = ['cd %(installdir)s && ln -s sambamba_v%(version)s sambamba'] sanity_check_paths = { 'files': ['sambamba_v%(version)s', 'sambamba'], diff --git a/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb index b89f6044b4..d894a7f03a 100644 --- a/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb +++ b/easybuild/easyconfigs/s/SeqAn/SeqAn-2.3.2-foss-2016b.eb @@ -29,8 +29,9 @@ dependencies = [ separate_build_dir = True sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["gustaf_mate_joining", "mason_materializer", "mason_variator", "rabema_prepare_sam", - "seqan_tcoffee", "s4_join", "samcat", "splazers", "yara_mapper"]], + 'files': ["bin/%s" % x for x in ["gustaf_mate_joining", "mason_materializer", "mason_variator", + "rabema_prepare_sam", "seqan_tcoffee", "s4_join", "samcat", "splazers", + "yara_mapper"]], 'dirs': [], } diff --git a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb index 8c36b33253..94de58b731 100644 --- a/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb +++ b/easybuild/easyconfigs/s/Singularity/Singularity-2.2.1-GCC-6.3.0-2.27.eb @@ -16,7 +16,8 @@ builddependencies = [('Autotools', '20150215')] preconfigopts = './autogen.sh && ' sanity_check_paths = { - 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', 'libexec/singularity/sexec-suid'], + 'files': ['bin/run-singularity', 'bin/singularity', 'etc/singularity/singularity.conf', + 'libexec/singularity/sexec-suid'], 'dirs': ['etc', 'libexec/singularity'], } diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb index 197e799318..cdb98a37f5 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.40-foss-2016a.eb @@ -15,8 +15,8 @@ source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('zlib', '1.2.8'), - ('SAMtools', '1.3.1'), + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), ('sparsehash', '2.0.2'), ] diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb index e042becab7..bb7e9baadc 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.42-foss-2016a.eb @@ -15,8 +15,8 @@ source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('zlib', '1.2.8'), - ('SAMtools', '1.3.1'), + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), ('sparsehash', '2.0.2'), ] diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb index 1df7d789c0..f99a6a428f 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.44-foss-2016a.eb @@ -15,8 +15,8 @@ source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('zlib', '1.2.8'), - ('SAMtools', '1.3.1'), + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), ('sparsehash', '2.0.2'), ] diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb index 4f24751d68..116c79b992 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.45-foss-2016a.eb @@ -15,8 +15,8 @@ source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('zlib', '1.2.8'), - ('SAMtools', '1.3.1'), + ('zlib', '1.2.8'), + ('SAMtools', '1.3.1'), ('sparsehash', '2.0.2'), ] diff --git a/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb b/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb index 341b4db710..4509b19211 100644 --- a/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb +++ b/easybuild/easyconfigs/s/Stacks/Stacks-1.46-intel-2017a.eb @@ -15,8 +15,8 @@ source_urls = ['http://catchenlab.life.illinois.edu/stacks/source/'] sources = [SOURCELOWER_TAR_GZ] dependencies = [ - ('zlib', '1.2.11'), - ('SAMtools', '1.4'), + ('zlib', '1.2.11'), + ('SAMtools', '1.4'), ('sparsehash', '2.0.3'), ] diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb index 4727d14749..e63d1a798f 100644 --- a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb +++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-4.5.5-foss-2017a-METIS-5.1.0.eb @@ -17,4 +17,3 @@ dependencies = [('METIS', metis_ver)] maxparallel = 1 moduleclass = 'numlib' - diff --git a/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb b/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb index 9365662b36..7be82daa90 100644 --- a/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb +++ b/easybuild/easyconfigs/s/Szip/Szip-2.1-foss-2017a.eb @@ -21,4 +21,3 @@ sanity_check_paths = { } moduleclass = 'tools' - diff --git a/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb index a99c1c0912..5c35b43fcc 100644 --- a/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/s/samblaster/samblaster-0.1.24-goolf-1.7.20.eb @@ -17,10 +17,10 @@ source_urls = ['https://github.com/GregoryFaust/samblaster/archive/'] sources = ['v.%(version)s.tar.gz'] files_to_copy = [ - (['samblaster'], 'bin/'), - 'README.md', - 'SAMBLASTER_Supplemental.pdf', - 'LICENSE.txt', + (['samblaster'], 'bin/'), + 'README.md', + 'SAMBLASTER_Supplemental.pdf', + 'LICENSE.txt', ] sanity_check_paths = { diff --git a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb index c7d6d5fcae..3f36bab3c9 100644 --- a/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb +++ b/easybuild/easyconfigs/s/segemehl/segemehl-0.2.0-foss-2016b.eb @@ -17,7 +17,7 @@ description = """ segemehl is a software to map short sequencer reads to referen toolchain = {'name': 'foss', 'version': '2016b'} source_urls = ['http://www.bioinf.uni-leipzig.de/Software/segemehl/'] -sources = ['%s_%s.tar.gz' % (name, version.replace('.','_'))] +sources = ['%s_%s.tar.gz' % (name, version.replace('.', '_'))] checksums = ['fef4db00ed2742a2bf4131eed674bb08'] @@ -31,7 +31,7 @@ dependencies = [ files_to_copy = [(["lack.x", "segemehl.x", "testrealign.x"], "bin")] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["lack.x" , "segemehl.x", "testrealign.x"]], + 'files': ["bin/%s" % x for x in ["lack.x", "segemehl.x", "testrealign.x"]], 'dirs': [] } diff --git a/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb b/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb index 585ebb9932..88fc3d4707 100644 --- a/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb +++ b/easybuild/easyconfigs/s/splitRef/splitRef-0.0.2.eb @@ -25,7 +25,7 @@ sanity_check_paths = { } # add folder splitRef_V002 to PATH -modextrapaths = { +modextrapaths = { 'PATH': '%s_V%s' % (name, altver) } diff --git a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb index 0514b4e682..91e78ce928 100644 --- a/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb +++ b/easybuild/easyconfigs/t/Tcl/Tcl-8.5.19-foss-2017a.eb @@ -24,4 +24,3 @@ runtest = 'test' start_dir = 'unix' moduleclass = 'lang' - diff --git a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb index c4c82d2f79..1213968867 100644 --- a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb +++ b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.4.10-Perl-5.16.3.eb @@ -19,15 +19,15 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Perl', '5.16.3'), -] +] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["vcftools", "fill-fs", "vcf-compare", "vcf-contrast", + 'files': ["bin/%s" % x for x in ["vcftools", "fill-fs", "vcf-compare", "vcf-contrast", "vcf-fix-ploidy", "vcf-merge"]], 'dirs': [], } -modextrapaths = { +modextrapaths = { 'PERL5LIB': 'lib/perl5/site_perl/', } diff --git a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb index 6a770e5ef1..0a12c2e817 100644 --- a/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb +++ b/easybuild/easyconfigs/v/VCFtools/VCFtools-0.1.14-goolf-1.7.20-Perl-5.22.2.eb @@ -19,15 +19,15 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [ ('Perl', '5.22.2'), -] +] sanity_check_paths = { - 'files': ["bin/%s" % x for x in ["vcftools", "fill-fs", "vcf-compare", "vcf-contrast", + 'files': ["bin/%s" % x for x in ["vcftools", "fill-fs", "vcf-compare", "vcf-contrast", "vcf-fix-ploidy", "vcf-merge"]], 'dirs': [], } -modextrapaths = { +modextrapaths = { 'PERL5LIB': 'lib/perl5/site_perl/', } diff --git a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb index 3e3df4bec4..54be12bcef 100644 --- a/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb +++ b/easybuild/easyconfigs/v/VMD/VMD-1.9.3-intel-2016b-Python-2.7.12.eb @@ -10,7 +10,7 @@ homepage = 'http://www.ks.uiuc.edu/Research/vmd' description = """VMD is a molecular visualization program for displaying, animating, and analyzing large biomolecular systems using 3-D graphics and built-in scripting.""" -toolchain= {'name': 'intel' , 'version': '2016b'} +toolchain = {'name': 'intel', 'version': '2016b'} # downloading requires registration sources = ['vmd-%(version)s.src.tar.gz'] diff --git a/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb b/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb index 1582b5a179..63ac2b03b0 100644 --- a/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb +++ b/easybuild/easyconfigs/v/Valgrind/Valgrind-3.11.0-foss-2016a.eb @@ -22,6 +22,6 @@ sanity_check_paths = { 'files': ['bin/%s' % x for x in binaries] + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], 'dirs': [] -} +} moduleclass = 'debugger' diff --git a/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb b/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb index daaefceb38..b0bb280f07 100644 --- a/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb +++ b/easybuild/easyconfigs/w/wkhtmltopdf/wkhtmltopdf-0.12.3-Linux-x86_64.eb @@ -20,11 +20,11 @@ source_urls = ['http://download.gna.org/wkhtmltopdf/%(version_major_minor)s/%(ve sources = ['wkhtmltox-%(version)s_linux-generic-amd64.tar.xz'] osdependencies = [ - ('zlib', 'zlib1g'), - 'fontconfig', - ('freetype', 'libfreetype6'), - ('libX11', 'libx11-6'), - ('libXext', 'libxext6'), + ('zlib', 'zlib1g'), + 'fontconfig', + ('freetype', 'libfreetype6'), + ('libX11', 'libx11-6'), + ('libXext', 'libxext6'), ('libXrender', 'libxrender1') ] diff --git a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb index 8d7242f13f..cc9e04a571 100644 --- a/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb +++ b/easybuild/easyconfigs/x/XZ/XZ-5.2.3-gimkl-2017a.eb @@ -22,7 +22,7 @@ builddependencies = [ ] # may become useful in non-x86 archs -#configopts = ' --disable-assembler ' +# configopts = ' --disable-assembler ' sanity_check_paths = { 'files': ["bin/xz", "bin/lzmainfo"], diff --git a/easybuild/easyconfigs/x/xtrans/xtrans-1.3.5-gimkl-2.11.5.eb b/easybuild/easyconfigs/x/xtrans/xtrans-1.3.5-gimkl-2.11.5.eb index 4bfb1d13fb..099fcba246 100644 --- a/easybuild/easyconfigs/x/xtrans/xtrans-1.3.5-gimkl-2.11.5.eb +++ b/easybuild/easyconfigs/x/xtrans/xtrans-1.3.5-gimkl-2.11.5.eb @@ -14,7 +14,7 @@ sources = [SOURCE_TAR_GZ] source_urls = [XORG_LIB_SOURCE] sanity_check_paths = { - 'files': ['include/X11/Xtrans/%s' % x for x in ['transport.c', 'Xtrans.c', 'Xtrans.h', 'Xtransint.h', + 'files': ['include/X11/Xtrans/%s' % x for x in ['transport.c', 'Xtrans.c', 'Xtrans.h', 'Xtransint.h', 'Xtranslcl.c', 'Xtranssock.c', 'Xtransutil.c']], 'dirs': [], } diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb index eeebc684bc..3fd2d83e18 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-foss-2016a-Python-2.7.11.eb @@ -31,7 +31,7 @@ dependencies = [ ('PyGTS', '0.3.1', versionsuffix), ('Python', '2.7.11'), ('Qt', '4.8.7', '-GLib-2.48.0'), - ('SQLite', '3.9.2'), + ('SQLite', '3.9.2'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb index 4610fe64fd..91273df8f9 100644 --- a/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb +++ b/easybuild/easyconfigs/y/Yade/Yade-1.20.0-intel-2016a-Python-2.7.11.eb @@ -31,7 +31,7 @@ dependencies = [ ('PyGTS', '0.3.1', versionsuffix), ('Python', '2.7.11'), ('Qt', '4.8.7', '-GLib-2.48.0'), - ('SQLite', '3.9.2'), + ('SQLite', '3.9.2'), ('VTK', '6.3.0', versionsuffix), ('zlib', '1.2.8'), ('bzip2', '1.0.6'), diff --git a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb index 0c99f457cb..8696368a68 100644 --- a/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb +++ b/easybuild/easyconfigs/y/Yambo/Yambo-4.0.2-rev.90-intel-2015b-QuantumESPRESSO-5.2.1.eb @@ -48,6 +48,6 @@ sanity_check_paths = { # is twice in the PATH. Withouth removing the QuantumESPRESSO one, this version of Yambo would be used, # because it is earlier in the PATH modtclfooter = "remove-path PATH $::env(EBROOTQUANTUMESPRESSO)/espresso-%s/YAMBO/bin" % qever -modluafooter = 'remove_path("PATH", os.getenv("EBROOTQUANTUMESPRESSO") .. "/espresso-%s/YAMBO/bin")' % qever +modluafooter = 'remove_path("PATH", os.getenv("EBROOTQUANTUMESPRESSO") .. "/espresso-%s/YAMBO/bin")' % qever moduleclass = 'phys' diff --git a/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-goolf-1.7.20.eb b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-goolf-1.7.20.eb index 09279b532a..f3f0a1a915 100644 --- a/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/y/Yasm/Yasm-1.3.0-goolf-1.7.20.eb @@ -16,4 +16,4 @@ sanity_check_paths = { 'dirs': [], } -moduleclass = 'lang' +moduleclass = 'lang' -- GitLab From 9bd59ff89be6be1afc70ecb2dedab11c139fd7e0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 21:08:06 +0200 Subject: [PATCH 1308/1311] avoid use of import in ANSYS & MATLAB easyconfigs --- easybuild/easyconfigs/a/ANSYS/ANSYS-15.0.eb | 6 +----- easybuild/easyconfigs/m/MATLAB/MATLAB-2012b.eb | 5 ----- easybuild/easyconfigs/m/MATLAB/MATLAB-2015a.eb | 5 ----- easybuild/easyconfigs/m/MATLAB/MATLAB-2016a.eb | 5 ----- easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb | 5 ----- 5 files changed, 1 insertion(+), 25 deletions(-) diff --git a/easybuild/easyconfigs/a/ANSYS/ANSYS-15.0.eb b/easybuild/easyconfigs/a/ANSYS/ANSYS-15.0.eb index 673a19b69d..944ad05e35 100644 --- a/easybuild/easyconfigs/a/ANSYS/ANSYS-15.0.eb +++ b/easybuild/easyconfigs/a/ANSYS/ANSYS-15.0.eb @@ -10,10 +10,6 @@ toolchain = {'name': 'dummy', 'version': 'dummy'} # create a zip file from the 3 install iso files. # make sure all files of the iso's are in the same directory. -sources = ['ANSYS-15.0.zip'] - -import os -license_server = os.getenv('EB_ANSYS_LICENSE_SERVER', 'license.example.com') -license_server_port = os.getenv('EB_ANSYS_LICENSE_SERVER_PORT', '2325:1055') +sources = ['ANSYS-%(version)s.zip'] moduleclass = 'tools' diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2012b.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2012b.eb index b0b8036c47..2d79a877de 100644 --- a/easybuild/easyconfigs/m/MATLAB/MATLAB-2012b.eb +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2012b.eb @@ -12,9 +12,4 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [('Java', '1.7.0_10')] -import os -license_server = os.getenv('EB_MATLAB_LICENSE_SERVER', 'license.example.com') -license_server_port = os.getenv('EB_MATLAB_LICENSE_SERVER_PORT', '00000') -key = os.getenv('EB_MATLAB_KEY', '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000') - moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2015a.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2015a.eb index 65e39e1872..068032d310 100644 --- a/easybuild/easyconfigs/m/MATLAB/MATLAB-2015a.eb +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2015a.eb @@ -12,9 +12,4 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [('Java', '1.8.0_45')] -import os -license_server = os.getenv('EB_MATLAB_LICENSE_SERVER', 'license.example.com') -license_server_port = os.getenv('EB_MATLAB_LICENSE_SERVER_PORT', '00000') -key = os.getenv('EB_MATLAB_KEY', '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000') - moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2016a.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2016a.eb index e0113113d0..02024eedff 100644 --- a/easybuild/easyconfigs/m/MATLAB/MATLAB-2016a.eb +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2016a.eb @@ -12,9 +12,4 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [('Java', '1.8.0_92')] -import os -license_server = os.getenv('EB_MATLAB_LICENSE_SERVER', 'license.example.com') -license_server_port = os.getenv('EB_MATLAB_LICENSE_SERVER_PORT', '00000') -key = os.getenv('EB_MATLAB_KEY', '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000') - moduleclass = 'math' diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb index 04d37d4f1e..5aa71b404f 100644 --- a/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2017a.eb @@ -14,9 +14,4 @@ sources = [SOURCELOWER_TAR_GZ] dependencies = [('Java', '1.8.0_121')] -import os -license_server = os.getenv('EB_MATLAB_LICENSE_SERVER', 'license.example.com') -license_server_port = os.getenv('EB_MATLAB_LICENSE_SERVER_PORT', '00000') -key = os.getenv('EB_MATLAB_KEY', '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000') - moduleclass = 'math' -- GitLab From 941823b7588db56f33fa954e623f0171cbb863d0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 21:27:48 +0200 Subject: [PATCH 1309/1311] set $OMP_NUM_THREADS during CP2K test step via dedicated easyconfig parameter --- .../easyconfigs/c/CP2K/CP2K-20111205-goolf-1.4.10-psmp.eb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/c/CP2K/CP2K-20111205-goolf-1.4.10-psmp.eb b/easybuild/easyconfigs/c/CP2K/CP2K-20111205-goolf-1.4.10-psmp.eb index df760b1c15..a4e80549b5 100644 --- a/easybuild/easyconfigs/c/CP2K/CP2K-20111205-goolf-1.4.10-psmp.eb +++ b/easybuild/easyconfigs/c/CP2K/CP2K-20111205-goolf-1.4.10-psmp.eb @@ -37,7 +37,6 @@ maxtasks = 1 # need to set OMP_NUM_THREADS to 1, to avoid failed tests during regression test # without this, 32 tests (out of 2196) fail -import os -os.environ['OMP_NUM_THREADS'] = '1' +omp_num_threads = '1' moduleclass = 'chem' -- GitLab From afe72ba5206fdc3b6d16f8a926c039a11c0222ee Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 21:36:55 +0200 Subject: [PATCH 1310/1311] avoid use of 'import' in BFAST easyconfigs, just strip of 'a' from version --- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb | 5 +---- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb | 5 +---- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb index 372422bd73..048346809a 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb @@ -24,11 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'goolf', 'version': '1.4.10'} -import string -swdir = version.rstrip(string.lowercase + string.uppercase) -# eg. http://sourceforge.net/projects/bfast/files/bfast/0.7.0/bfast-0.7.0a.tar.gz/download +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % swdir, 'download'] dependencies = [('bzip2', '1.0.6')] diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb index a5c3af2f9a..aec46bb1ff 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb @@ -24,11 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'goolf', 'version': '1.7.20'} -import string -swdir = version.rstrip(string.lowercase + string.uppercase) -# eg. http://sourceforge.net/projects/bfast/files/bfast/0.7.0/bfast-0.7.0a.tar.gz/download +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % swdir, 'download'] dependencies = [('bzip2', '1.0.6')] diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb index b792e697b2..46b0a5ba2d 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb @@ -24,11 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'ictce', 'version': '5.3.0'} -import string -swdir = version.rstrip(string.lowercase + string.uppercase) -# eg. http://sourceforge.net/projects/bfast/files/bfast/0.7.0/bfast-0.7.0a.tar.gz/download +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] sources = [SOURCELOWER_TAR_GZ] -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % swdir, 'download'] dependencies = [('bzip2', '1.0.6')] -- GitLab From d98e34825319602ec797e791c905ad7f2de73d9a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2017 22:19:48 +0200 Subject: [PATCH 1311/1311] avoid hardcoding stripping of 'a' (hat tip @vanzod) --- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb | 3 ++- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb | 3 ++- easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb index 048346809a..a4739e8c8e 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.4.10.eb @@ -24,7 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'goolf', 'version': '1.4.10'} -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] +verdir = ''.join(char for char in version if not char.isalpha()) +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % verdir, 'download'] sources = [SOURCELOWER_TAR_GZ] dependencies = [('bzip2', '1.0.6')] diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb index aec46bb1ff..76e9215e88 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-goolf-1.7.20.eb @@ -24,7 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'goolf', 'version': '1.7.20'} -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] +verdir = ''.join(char for char in version if not char.isalpha()) +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % verdir, 'download'] sources = [SOURCELOWER_TAR_GZ] dependencies = [('bzip2', '1.0.6')] diff --git a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb index 46b0a5ba2d..5bbf580366 100644 --- a/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb +++ b/easybuild/easyconfigs/b/BFAST/BFAST-0.7.0a-ictce-5.3.0.eb @@ -24,7 +24,8 @@ description = """BFAST facilitates the fast and accurate mapping of short reads toolchain = {'name': 'ictce', 'version': '5.3.0'} -source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % version.rstrip('a'), 'download'] +verdir = ''.join(char for char in version if not char.isalpha()) +source_urls = ['http://sourceforge.net/projects/bfast/files/bfast/%s/' % verdir, 'download'] sources = [SOURCELOWER_TAR_GZ] dependencies = [('bzip2', '1.0.6')] -- GitLab